// File: IOP_N.idl
// These definitions are intended to be added to the IOP module in 
//    version "N" of CORBA. At that time, all references to the IOP_N 
//    module should be changed appropriately and this file should not
//    be separate from <IOP.idl>.

#ifndef _IOP_N_IDL_
#define _IOP_N_IDL_

#ifndef CORBA3
#define local  
#endif

#include <orb.idl>
#include <IOP.idl>

#pragma prefix "omg.org"
module IOP_N {
  typedef sequence<IOP::TaggedComponent> TaggedComponentSeq;

  local interface Codec {
    exception InvalidTypeForEncoding {};
    exception FormatMismatch {};
    exception TypeMismatch {};

    CORBA::OctetSeq encode (in any data) raises (InvalidTypeForEncoding);
    any decode (in CORBA::OctetSeq data) raises (FormatMismatch);
    CORBA::OctetSeq encode_value (in any data) raises (InvalidTypeForEncoding);
    any decode_value (in CORBA::OctetSeq data, in CORBA::TypeCode tc)
      raises (FormatMismatch, TypeMismatch);
  };

  typedef short EncodingFormat;
  const EncodingFormat ENCODING_CDR_ENCAPS = 0;

  struct Encoding {
    EncodingFormat format;
    octet major_version;
    octet minor_version;
  };

  local interface CodecFactory {
    exception UnknownEncoding {};

    Codec create_codec (in Encoding enc) raises (UnknownEncoding);
  };
};

#endif // _IOP_N_IDL_
