// **********************************************************************
//
// 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_PIORT_h__
#define __OB_PIORT_h__

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


#include <OB/PICommon.h>
#include <OB/PIORT_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_PortableInterceptor
{

} // End of namespace OBStubImpl_PortableInterceptor

namespace OBStubImpl_PortableInterceptor
{

} // End of namespace OBStubImpl_PortableInterceptor

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

//
// IDL:omg.org/PortableInterceptor/ObjectReferenceFactory:1.0
//
class ObjectReferenceFactory : virtual public ::CORBA::ValueBase
{
    void operator=(const ObjectReferenceFactory&);

    static const char* _ob_id_;

protected:

    ObjectReferenceFactory() { }
    virtual ~ObjectReferenceFactory() { }

public:

    typedef ObjectReferenceFactory_var _var_type;

    static ObjectReferenceFactory* _downcast(::CORBA::ValueBase*);
    static ObjectReferenceFactory* _downcast(::CORBA::AbstractBase_ptr);

    //
    // IDL:omg.org/PortableInterceptor/ObjectReferenceFactory/make_object:1.0
    //
    virtual ::CORBA::Object_ptr make_object(const char* repository_id,
                                            const ObjectId& id) = 0;

    static const char* _OB_id();

    virtual const char* _OB_typeId() const;
};

//
// IDL:omg.org/PortableInterceptor/ObjectReferenceTemplate:1.0
//
class ObjectReferenceTemplate : virtual public ::PortableInterceptor::ObjectReferenceFactory
{
    void operator=(const ObjectReferenceTemplate&);

    static const char* _ob_id_;

protected:

    ObjectReferenceTemplate() { }
    virtual ~ObjectReferenceTemplate() { }

public:

    typedef ObjectReferenceTemplate_var _var_type;

    static ObjectReferenceTemplate* _downcast(::CORBA::ValueBase*);
    static ObjectReferenceTemplate* _downcast(::CORBA::AbstractBase_ptr);

    //
    // IDL:omg.org/PortableInterceptor/ObjectReferenceTemplate/server_id:1.0
    //
    virtual ServerId server_id() = 0;

    //
    // IDL:omg.org/PortableInterceptor/ObjectReferenceTemplate/orb_id:1.0
    //
    virtual ORBId orb_id() = 0;

    //
    // IDL:omg.org/PortableInterceptor/ObjectReferenceTemplate/adapter_name:1.0
    //
    virtual AdapterName* adapter_name() = 0;

    static const char* _OB_id();

    virtual const char* _OB_typeId() const;
};

//
// IDL:omg.org/PortableInterceptor/ObjectReferenceTemplateSeq:1.0
//
class OBUnique_ObjectReferenceTemplateSeq { };

typedef OB::ObjSeq< ObjectReferenceTemplate, OBUnique_ObjectReferenceTemplateSeq > ObjectReferenceTemplateSeq;
typedef OB::SeqVar< OB::ObjSeq< ObjectReferenceTemplate, OBUnique_ObjectReferenceTemplateSeq > > ObjectReferenceTemplateSeq_var;
typedef OB::SeqOut< OB::ObjSeq< ObjectReferenceTemplate, OBUnique_ObjectReferenceTemplateSeq > > ObjectReferenceTemplateSeq_out;
OB_IMPORT extern OB::TypeCodeConst _tc_ObjectReferenceTemplateSeq;

struct OBInfo_ObjectReferenceTemplateSeq : public OB::ConstructedInfo
{
    OBInfo_ObjectReferenceTemplateSeq() { }

    virtual void free(void* p) const
    {
        delete (ObjectReferenceTemplateSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new ObjectReferenceTemplateSeq(*(const ObjectReferenceTemplateSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};

} // End of namespace PortableInterceptor

//
// IDL:omg.org/PortableInterceptor:1.0
//
namespace OBProxy_PortableInterceptor
{

} // End of namespace OBProxy_PortableInterceptor

//
// IDL:omg.org/PortableInterceptor:1.0
//
namespace OBStubImpl_PortableInterceptor
{

} // End of namespace OBStubImpl_PortableInterceptor

//
// IDL:omg.org/PortableInterceptor:1.0
//
namespace OBMarshalStubImpl_PortableInterceptor
{

} // End of namespace OBMarshalStubImpl_PortableInterceptor

//
// IDL:omg.org/PortableInterceptor:1.0
//
namespace OBV_PortableInterceptor
{

} // End of namespace OBV_PortableInterceptor

//
// IDL:omg.org/PortableInterceptor/ObjectReferenceFactory:1.0
//
void operator<<=(::CORBA::Any&, PortableInterceptor::ObjectReferenceFactory**);
void operator<<=(::CORBA::Any&, PortableInterceptor::ObjectReferenceFactory*);
CORBA::Boolean operator>>=(const ::CORBA::Any&, PortableInterceptor::ObjectReferenceFactory*&);

inline void
operator<<=(::CORBA::Any_var& any, PortableInterceptor::ObjectReferenceFactory** val)
{
    any.inout() <<= val;
}

inline void
operator<<=(::CORBA::Any_var& any, PortableInterceptor::ObjectReferenceFactory* val)
{
    any.inout() <<= val;
}

inline ::CORBA::Boolean
operator>>=(const ::CORBA::Any_var& any, PortableInterceptor::ObjectReferenceFactory*& val)
{
    return any.in() >>= val;
}

//
// IDL:omg.org/PortableInterceptor/ObjectReferenceTemplate:1.0
//
void operator<<=(::CORBA::Any&, PortableInterceptor::ObjectReferenceTemplate**);
void operator<<=(::CORBA::Any&, PortableInterceptor::ObjectReferenceTemplate*);
CORBA::Boolean operator>>=(const ::CORBA::Any&, PortableInterceptor::ObjectReferenceTemplate*&);

inline void
operator<<=(::CORBA::Any_var& any, PortableInterceptor::ObjectReferenceTemplate** val)
{
    any.inout() <<= val;
}

inline void
operator<<=(::CORBA::Any_var& any, PortableInterceptor::ObjectReferenceTemplate* val)
{
    any.inout() <<= val;
}

inline ::CORBA::Boolean
operator>>=(const ::CORBA::Any_var& any, PortableInterceptor::ObjectReferenceTemplate*& val)
{
    return any.in() >>= val;
}

//
// IDL:omg.org/PortableInterceptor/ObjectReferenceTemplateSeq:1.0
//
void operator<<=(::CORBA::Any&, PortableInterceptor::ObjectReferenceTemplateSeq*);
void operator<<=(::CORBA::Any&, const PortableInterceptor::ObjectReferenceTemplateSeq&);
CORBA::Boolean operator>>=(const ::CORBA::Any&, const PortableInterceptor::ObjectReferenceTemplateSeq*&);

inline void
operator<<=(::CORBA::Any_var& any, PortableInterceptor::ObjectReferenceTemplateSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(::CORBA::Any_var& any, const PortableInterceptor::ObjectReferenceTemplateSeq& val)
{
    any.inout() <<= val;
}

inline ::CORBA::Boolean
operator>>=(const ::CORBA::Any_var& any, const PortableInterceptor::ObjectReferenceTemplateSeq*& val)
{
    return any.in() >>= val;
}

#endif
