// **********************************************************************
//
// Generated by the ORBacus IDL-to-C++ Translator
//
// Copyright (c) 2003
// IONA Technologies, Inc.
// Waltham, MA, USA
//
// All Rights Reserved
//
// **********************************************************************

// Version: 4.1.3

#ifndef __OB_Codec_h__
#define __OB_Codec_h__

#ifndef OB_IMPORT
#   ifdef OB_DLL
#      define OB_IMPORT __declspec(dllimport)
#   else
#      define OB_IMPORT /**/
#   endif
#endif


#include <OB/TypeCode.h>
#include <OB/Types.h>
#include <OB/Codec_fwd.h>

#ifndef OB_INTEGER_VERSION
#   error No ORBacus version defined! Is <OB/CORBA.h> included?
#endif

#ifndef OB_NO_VERSION_CHECK
#   if (OB_INTEGER_VERSION != 4010300L)
#       error ORBacus version mismatch!
#   endif
#endif

namespace OBStubImpl_IOP
{

} // End of namespace OBStubImpl_IOP

namespace OBStubImpl_IOP
{

} // End of namespace OBStubImpl_IOP

//
// IDL:omg.org/IOP:1.0
//
namespace IOP
{

//
// IDL:omg.org/IOP/Codec:1.0
//
class Codec : virtual public ::CORBA::Object
{
    Codec(const Codec&);
    void operator=(const Codec&);

protected:

    static OB_IMPORT const char* ids_[];

public:

    Codec() { }
    virtual ~Codec() { }

    typedef Codec_ptr _ptr_type;
    typedef Codec_var _var_type;

    static inline Codec_ptr
    _duplicate(Codec_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline Codec_ptr
    _nil()
    {
        return 0;
    }

    static Codec_ptr _narrow(::CORBA::Object_ptr);

    static Codec_ptr _narrow(::CORBA::AbstractBase_ptr);


    //
    // IDL:omg.org/IOP/Codec/InvalidTypeForEncoding:1.0
    //
    struct InvalidTypeForEncoding : public ::CORBA::UserException
    {
        InvalidTypeForEncoding() { }
        InvalidTypeForEncoding(const InvalidTypeForEncoding&);
        InvalidTypeForEncoding& operator=(const InvalidTypeForEncoding&);

        static InvalidTypeForEncoding* _downcast(::CORBA::Exception*);
        static const InvalidTypeForEncoding* _downcast(const ::CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual ::CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(::CORBA::Any&);

        static void _OB_unmarshal(InvalidTypeForEncoding&, OB::InputStreamImpl*);
    };

    //
    // IDL:omg.org/IOP/Codec/FormatMismatch:1.0
    //
    struct FormatMismatch : public ::CORBA::UserException
    {
        FormatMismatch() { }
        FormatMismatch(const FormatMismatch&);
        FormatMismatch& operator=(const FormatMismatch&);

        static FormatMismatch* _downcast(::CORBA::Exception*);
        static const FormatMismatch* _downcast(const ::CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual ::CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(::CORBA::Any&);

        static void _OB_unmarshal(FormatMismatch&, OB::InputStreamImpl*);
    };

    //
    // IDL:omg.org/IOP/Codec/TypeMismatch:1.0
    //
    struct TypeMismatch : public ::CORBA::UserException
    {
        TypeMismatch() { }
        TypeMismatch(const TypeMismatch&);
        TypeMismatch& operator=(const TypeMismatch&);

        static TypeMismatch* _downcast(::CORBA::Exception*);
        static const TypeMismatch* _downcast(const ::CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual ::CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(::CORBA::Any&);

        static void _OB_unmarshal(TypeMismatch&, OB::InputStreamImpl*);
    };

    //
    // IDL:omg.org/IOP/Codec/encode:1.0
    //
    virtual ::CORBA::OctetSeq* encode(const ::CORBA::Any& data) = 0;

    //
    // IDL:omg.org/IOP/Codec/decode:1.0
    //
    virtual ::CORBA::Any* decode(const ::CORBA::OctetSeq& data) = 0;

    //
    // IDL:omg.org/IOP/Codec/encode_value:1.0
    //
    virtual ::CORBA::OctetSeq* encode_value(const ::CORBA::Any& data) = 0;

    //
    // IDL:omg.org/IOP/Codec/decode_value:1.0
    //
    virtual ::CORBA::Any* decode_value(const ::CORBA::OctetSeq& data,
                                       ::CORBA::TypeCode_ptr tc) = 0;
};

//
// IDL:omg.org/IOP/EncodingFormat:1.0
//
typedef ::CORBA::Short EncodingFormat;
typedef ::CORBA::Short_out EncodingFormat_out;

//
// IDL:omg.org/IOP/ENCODING_CDR_ENCAPS:1.0
//
const EncodingFormat ENCODING_CDR_ENCAPS = 0;

//
// IDL:omg.org/IOP/Encoding:1.0
//
struct Encoding;
typedef OB::FixVar< Encoding > Encoding_var;
typedef Encoding& Encoding_out;

struct Encoding
{
    typedef Encoding_var _var_type;

    EncodingFormat format;
    ::CORBA::Octet major_version;
    ::CORBA::Octet minor_version;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(Encoding&, OB::InputStreamImpl*);
};

//
// IDL:omg.org/IOP/CodecFactory:1.0
//
class CodecFactory : virtual public ::CORBA::Object
{
    CodecFactory(const CodecFactory&);
    void operator=(const CodecFactory&);

protected:

    static OB_IMPORT const char* ids_[];

public:

    CodecFactory() { }
    virtual ~CodecFactory() { }

    typedef CodecFactory_ptr _ptr_type;
    typedef CodecFactory_var _var_type;

    static inline CodecFactory_ptr
    _duplicate(CodecFactory_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline CodecFactory_ptr
    _nil()
    {
        return 0;
    }

    static CodecFactory_ptr _narrow(::CORBA::Object_ptr);

    static CodecFactory_ptr _narrow(::CORBA::AbstractBase_ptr);


    //
    // IDL:omg.org/IOP/CodecFactory/UnknownEncoding:1.0
    //
    struct UnknownEncoding : public ::CORBA::UserException
    {
        UnknownEncoding() { }
        UnknownEncoding(const UnknownEncoding&);
        UnknownEncoding& operator=(const UnknownEncoding&);

        static UnknownEncoding* _downcast(::CORBA::Exception*);
        static const UnknownEncoding* _downcast(const ::CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual ::CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(::CORBA::Any&);

        static void _OB_unmarshal(UnknownEncoding&, OB::InputStreamImpl*);
    };

    //
    // IDL:omg.org/IOP/CodecFactory/create_codec:1.0
    //
    virtual Codec_ptr create_codec(const Encoding& enc) = 0;
};

} // End of namespace IOP

//
// IDL:omg.org/IOP:1.0
//
namespace OBProxy_IOP
{

} // End of namespace OBProxy_IOP

//
// IDL:omg.org/IOP:1.0
//
namespace OBStubImpl_IOP
{

} // End of namespace OBStubImpl_IOP

//
// IDL:omg.org/IOP:1.0
//
namespace OBMarshalStubImpl_IOP
{

} // End of namespace OBMarshalStubImpl_IOP

//
// IDL:omg.org/IOP:1.0
//
namespace OBV_IOP
{

} // End of namespace OBV_IOP

//
// IDL:omg.org/IOP/Codec:1.0
//
namespace CORBA
{

inline void
release(::IOP::Codec_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::IOP::Codec_ptr p)
{
    return p == 0;
}

} // End of namespace CORBA

//
// IDL:omg.org/IOP/CodecFactory:1.0
//
namespace CORBA
{

inline void
release(::IOP::CodecFactory_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::IOP::CodecFactory_ptr p)
{
    return p == 0;
}

} // End of namespace CORBA

#endif
