// **********************************************************************
//
// 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_OBPOAInterface_h__
#define __OB_OBPOAInterface_h__

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


#include <OB/OBPOAPolicies.h>
#include <OB/POAInterface.h>
#include <OB/PIORT.h>
#include <OB/OBPOAInterface_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_CORBA
{

} // End of namespace OBStubImpl_CORBA

namespace OBStubImpl_OBPortableServer
{

} // End of namespace OBStubImpl_OBPortableServer

namespace OBStubImpl_CORBA
{

} // End of namespace OBStubImpl_CORBA

namespace OBStubImpl_OBPortableServer
{

} // End of namespace OBStubImpl_OBPortableServer

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

} // End of namespace CORBA

//
// IDL:ooc.com/OBPortableServer:1.0
//
namespace OBPortableServer
{

//
// IDL:ooc.com/OBPortableServer/POA:1.0
//
class POA : virtual public ::PortableServer::POA
{
    POA(const POA&);
    void operator=(const POA&);

protected:

    static OB_IMPORT const char* ids_[];

public:

    POA() { }
    virtual ~POA() { }

    typedef POA_ptr _ptr_type;
    typedef POA_var _var_type;

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

    static inline POA_ptr
    _nil()
    {
        return 0;
    }

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

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


    //
    // IDL:ooc.com/OBPortableServer/POA/the_policies:1.0
    //
    virtual ::CORBA::PolicyList* the_policies() = 0;

    //
    // IDL:ooc.com/OBPortableServer/POA/the_dispatch_strategy:1.0
    //
    virtual ::OB::DispatchStrategy_ptr the_dispatch_strategy() = 0;

    //
    // IDL:ooc.com/OBPortableServer/POA/adapter_template:1.0
    //
    virtual ::PortableInterceptor::ObjectReferenceTemplate* adapter_template() = 0;

    //
    // IDL:ooc.com/OBPortableServer/POA/current_factory:1.0
    //
    virtual ::PortableInterceptor::ObjectReferenceFactory* current_factory() = 0;

    //
    // IDL:ooc.com/OBPortableServer/POA/the_ORB:1.0
    //
    virtual ::CORBA::ORB_ptr the_ORB() = 0;

    //
    // IDL:ooc.com/OBPortableServer/POA/create_synchronization_policy:1.0
    //
    virtual SynchronizationPolicy_ptr create_synchronization_policy(SynchronizationPolicyValue value) = 0;

    //
    // IDL:ooc.com/OBPortableServer/POA/create_dispatch_strategy_policy:1.0
    //
    virtual DispatchStrategyPolicy_ptr create_dispatch_strategy_policy(::OB::DispatchStrategy_ptr value) = 0;
};

} // End of namespace OBPortableServer

//
// IDL:omg.org/CORBA:1.0
//
namespace OBProxy_CORBA
{

} // End of namespace OBProxy_CORBA

//
// IDL:ooc.com/OBPortableServer:1.0
//
namespace OBProxy_OBPortableServer
{

} // End of namespace OBProxy_OBPortableServer

//
// IDL:omg.org/CORBA:1.0
//
namespace OBStubImpl_CORBA
{

} // End of namespace OBStubImpl_CORBA

//
// IDL:ooc.com/OBPortableServer:1.0
//
namespace OBStubImpl_OBPortableServer
{

} // End of namespace OBStubImpl_OBPortableServer

//
// IDL:omg.org/CORBA:1.0
//
namespace OBMarshalStubImpl_CORBA
{

} // End of namespace OBMarshalStubImpl_CORBA

//
// IDL:ooc.com/OBPortableServer:1.0
//
namespace OBMarshalStubImpl_OBPortableServer
{

} // End of namespace OBMarshalStubImpl_OBPortableServer

//
// IDL:omg.org/CORBA:1.0
//
namespace OBV_CORBA
{

} // End of namespace OBV_CORBA

//
// IDL:ooc.com/OBPortableServer:1.0
//
namespace OBV_OBPortableServer
{

} // End of namespace OBV_OBPortableServer

//
// IDL:ooc.com/OBPortableServer/POA:1.0
//
namespace CORBA
{

inline void
release(::OBPortableServer::POA_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OBPortableServer::POA_ptr p)
{
    return p == 0;
}

} // End of namespace CORBA

#endif
