// -*- C++ -*-
//
// IFR_BaseS.h,v 1.1 2002/04/27 01:17:02 jai Exp

// ****  Code generated by the The ACE ORB (TAO) IDL Compiler ****
// TAO and the TAO IDL Compiler have been developed by:
//       Center for Distributed Object Computing
//       Washington University
//       St. Louis, MO
//       USA
//       http://www.cs.wustl.edu/~schmidt/doc-center.html
// and
//       Distributed Object Computing Laboratory
//       University of California at Irvine
//       Irvine, CA
//       USA
//       http://doc.ece.uci.edu/
//
// Information about TAO is available at:
//     http://www.cs.wustl.edu/~schmidt/TAO.html

#ifndef _TAO_IDL__________ORBSVCS_IFR_SERVICE_ORIG_IFR_BASES_H_
#define _TAO_IDL__________ORBSVCS_IFR_SERVICE_ORIG_IFR_BASES_H_

#include "ace/pre.h"
#include "tao/IFR_Client/IFR_BaseC.h"


#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */

#include "tao/PortableServer/PortableServer.h"
#include "tao/PortableServer/Servant_Base.h"
#include "tao/PortableServer/Collocated_Object.h"
#include "tao/PortableServer/ThruPOA_Object_Proxy_Impl.h"
#include "tao/PortableServer/Direct_Object_Proxy_Impl.h"
#if defined(_MSC_VER)
#if (_MSC_VER >= 1200)
#pragma warning(push)
#endif /* _MSC_VER >= 1200 */
#pragma warning(disable:4250)
#endif /* _MSC_VER */

#if defined (__BORLANDC__)
#pragma option push -w-rvl -w-rch -w-ccc -w-inl
#endif /* __BORLANDC__ */

class POA_CORBA_IRObject;
typedef POA_CORBA_IRObject *POA_CORBA_IRObject_ptr;
// Forward Classes Declaration
class _TAO_CORBA_IRObject_ThruPOA_Proxy_Impl;
class _TAO_CORBA_IRObject_Strategized_Proxy_Broker;

class  POA_CORBA_IRObject :  public virtual PortableServer::ServantBase
{
protected:
  POA_CORBA_IRObject (void);

public:
  POA_CORBA_IRObject (const POA_CORBA_IRObject& rhs);
  virtual ~POA_CORBA_IRObject (void);


  virtual CORBA::Boolean _is_a (
      const char* logical_type_id
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  virtual void* _downcast (
      const char* logical_type_id
    );

  static void _is_a_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *servant_upcall
      ACE_ENV_ARG_DECL
    );

  static void _non_existent_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *servant_upcall
      ACE_ENV_ARG_DECL
    );

  static void _interface_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual void _dispatch (
      TAO_ServerRequest &req,
      void *_servant_upcall
      ACE_ENV_ARG_DECL
    );

  ::CORBA_IRObject *_this (
      ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS);


  virtual const char* _interface_repository_id (void) const;

  virtual CORBA::DefinitionKind def_kind (
      ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void _get_def_kind_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual void destroy (
      ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void destroy_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );


};


///////////////////////////////////////////////////////////////////////
//               Strategized Proxy Broker Declaration
//

class  _TAO_CORBA_IRObject_Strategized_Proxy_Broker : public virtual ::_TAO_CORBA_IRObject_Proxy_Broker
{
public:
  _TAO_CORBA_IRObject_Strategized_Proxy_Broker (void);

  virtual ~_TAO_CORBA_IRObject_Strategized_Proxy_Broker (void);

  virtual ::_TAO_CORBA_IRObject_Proxy_Impl &select_proxy (
    ::CORBA_IRObject *object
    ACE_ENV_ARG_DECL
  );

private:

  // Helper methods that takes care to create the proxy
  // as soon as their use is necessary.
  void create_proxy (
    int collocation_strategy
    ACE_ENV_ARG_DECL
  );

private:

  // Caches the proxy implementations. The proxy implementation
  // are totally stateless, and those can be shared by all the
  // instances of a given IDL interface type.
  ::_TAO_CORBA_IRObject_Proxy_Impl
  *proxy_cache_[TAO_Collocation_Strategies::CS_LAST];

  TAO_SYNCH_MUTEX mutex_;
  // This funxtion is used to get an handle to the unique instance
  // of the Strategized Proxy Broker that is available for a given
  // interface.

public:
  static _TAO_CORBA_IRObject_Strategized_Proxy_Broker *the_TAO_CORBA_IRObject_Strategized_Proxy_Broker (void);
};


//
//            End Strategized Proxy Broker Declaration
///////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////
//                    ThruPOA  Impl. Declaration
//

class  _TAO_CORBA_IRObject_ThruPOA_Proxy_Impl :
  public virtual ::_TAO_CORBA_IRObject_Proxy_Impl,
  public virtual TAO_ThruPOA_Object_Proxy_Impl
{
public:
  _TAO_CORBA_IRObject_ThruPOA_Proxy_Impl (void);

  virtual ~_TAO_CORBA_IRObject_ThruPOA_Proxy_Impl (void) { }

  virtual CORBA::DefinitionKind def_kind (
      CORBA_Object *_collocated_tao_target_
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual void destroy (
      CORBA_Object *_collocated_tao_target_
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));


};

//
//                ThruPOA  Proxy Impl. Declaration
///////////////////////////////////////////////////////////////////////


class POA_CORBA_Contained;
typedef POA_CORBA_Contained *POA_CORBA_Contained_ptr;
// Forward Classes Declaration
class _TAO_CORBA_Contained_ThruPOA_Proxy_Impl;
class _TAO_CORBA_Contained_Strategized_Proxy_Broker;

class  POA_CORBA_Contained : public virtual POA_CORBA_IRObject
{
protected:
  POA_CORBA_Contained (void);

public:
  POA_CORBA_Contained (const POA_CORBA_Contained& rhs);
  virtual ~POA_CORBA_Contained (void);


  virtual CORBA::Boolean _is_a (
      const char* logical_type_id
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  virtual void* _downcast (
      const char* logical_type_id
    );

  static void _is_a_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *servant_upcall
      ACE_ENV_ARG_DECL
    );

  static void _non_existent_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *servant_upcall
      ACE_ENV_ARG_DECL
    );

  static void _interface_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual void _dispatch (
      TAO_ServerRequest &req,
      void *_servant_upcall
      ACE_ENV_ARG_DECL
    );

  ::CORBA_Contained *_this (
      ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS);


  virtual const char* _interface_repository_id (void) const;

  virtual char * id (
      ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void _get_id_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual void id (
      const char * id
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void _set_id_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual char * name (
      ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void _get_name_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual void name (
      const char * name
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void _set_name_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual char * version (
      ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void _get_version_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual void version (
      const char * version
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void _set_version_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual CORBA_Container_ptr defined_in (
      ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void _get_defined_in_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual char * absolute_name (
      ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void _get_absolute_name_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual CORBA_Repository_ptr containing_repository (
      ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void _get_containing_repository_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual CORBA_Contained::Description * describe (
      ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void describe_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual void move (
      CORBA_Container_ptr new_container,
      const char * new_name,
      const char * new_version
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void move_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  static void _get_def_kind_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *context
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  static void destroy_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *context
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);



};


///////////////////////////////////////////////////////////////////////
//               Strategized Proxy Broker Declaration
//

class  _TAO_CORBA_Contained_Strategized_Proxy_Broker : public virtual ::_TAO_CORBA_Contained_Proxy_Broker
{
public:
  _TAO_CORBA_Contained_Strategized_Proxy_Broker (void);

  virtual ~_TAO_CORBA_Contained_Strategized_Proxy_Broker (void);

  virtual ::_TAO_CORBA_Contained_Proxy_Impl &select_proxy (
    ::CORBA_Contained *object
    ACE_ENV_ARG_DECL
  );

private:

  // Helper methods that takes care to create the proxy
  // as soon as their use is necessary.
  void create_proxy (
    int collocation_strategy
    ACE_ENV_ARG_DECL
  );

private:

  // Caches the proxy implementations. The proxy implementation
  // are totally stateless, and those can be shared by all the
  // instances of a given IDL interface type.
  ::_TAO_CORBA_Contained_Proxy_Impl
  *proxy_cache_[TAO_Collocation_Strategies::CS_LAST];

  TAO_SYNCH_MUTEX mutex_;
  // This funxtion is used to get an handle to the unique instance
  // of the Strategized Proxy Broker that is available for a given
  // interface.

public:
  static _TAO_CORBA_Contained_Strategized_Proxy_Broker *the_TAO_CORBA_Contained_Strategized_Proxy_Broker (void);
};


//
//            End Strategized Proxy Broker Declaration
///////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////
//                    ThruPOA  Impl. Declaration
//

class  _TAO_CORBA_Contained_ThruPOA_Proxy_Impl :
  public virtual ::_TAO_CORBA_Contained_Proxy_Impl,
  public virtual TAO_ThruPOA_Object_Proxy_Impl,
  public virtual ::_TAO_CORBA_IRObject_ThruPOA_Proxy_Impl

{
public:
  _TAO_CORBA_Contained_ThruPOA_Proxy_Impl (void);

  virtual ~_TAO_CORBA_Contained_ThruPOA_Proxy_Impl (void) { }

  virtual char * id (
      CORBA_Object *_collocated_tao_target_
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual void id (
      CORBA_Object *_collocated_tao_target_,
      const char * id
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual char * name (
      CORBA_Object *_collocated_tao_target_
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual void name (
      CORBA_Object *_collocated_tao_target_,
      const char * name
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual char * version (
      CORBA_Object *_collocated_tao_target_
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual void version (
      CORBA_Object *_collocated_tao_target_,
      const char * version
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual CORBA_Container_ptr defined_in (
      CORBA_Object *_collocated_tao_target_
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual char * absolute_name (
      CORBA_Object *_collocated_tao_target_
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual CORBA_Repository_ptr containing_repository (
      CORBA_Object *_collocated_tao_target_
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual CORBA_Contained::Description * describe (
      CORBA_Object *_collocated_tao_target_
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual void move (
      CORBA_Object *_collocated_tao_target_,
      CORBA_Container_ptr new_container,
      const char * new_name,
      const char * new_version
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));


};

//
//                ThruPOA  Proxy Impl. Declaration
///////////////////////////////////////////////////////////////////////


class POA_CORBA_Container;
typedef POA_CORBA_Container *POA_CORBA_Container_ptr;
// Forward Classes Declaration
class _TAO_CORBA_Container_ThruPOA_Proxy_Impl;
class _TAO_CORBA_Container_Strategized_Proxy_Broker;

class  POA_CORBA_Container : public virtual POA_CORBA_IRObject
{
protected:
  POA_CORBA_Container (void);

public:
  POA_CORBA_Container (const POA_CORBA_Container& rhs);
  virtual ~POA_CORBA_Container (void);


  virtual CORBA::Boolean _is_a (
      const char* logical_type_id
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  virtual void* _downcast (
      const char* logical_type_id
    );

  static void _is_a_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *servant_upcall
      ACE_ENV_ARG_DECL
    );

  static void _non_existent_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *servant_upcall
      ACE_ENV_ARG_DECL
    );

  static void _interface_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual void _dispatch (
      TAO_ServerRequest &req,
      void *_servant_upcall
      ACE_ENV_ARG_DECL
    );

  ::CORBA_Container *_this (
      ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS);


  virtual const char* _interface_repository_id (void) const;

  virtual CORBA_Contained_ptr lookup (
      const char * search_name
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void lookup_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual CORBA_ContainedSeq * contents (
      CORBA::DefinitionKind limit_type,
      CORBA::Boolean exclude_inherited
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void contents_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual CORBA_ContainedSeq * lookup_name (
      const char * search_name,
      CORBA::Long levels_to_search,
      CORBA::DefinitionKind limit_type,
      CORBA::Boolean exclude_inherited
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void lookup_name_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual CORBA_Container::DescriptionSeq * describe_contents (
      CORBA::DefinitionKind limit_type,
      CORBA::Boolean exclude_inherited,
      CORBA::Long max_returned_objs
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void describe_contents_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual CORBA_ModuleDef_ptr create_module (
      const char * id,
      const char * name,
      const char * version
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void create_module_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual CORBA_ConstantDef_ptr create_constant (
      const char * id,
      const char * name,
      const char * version,
      CORBA_IDLType_ptr type,
      const CORBA::Any & value
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void create_constant_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual CORBA_StructDef_ptr create_struct (
      const char * id,
      const char * name,
      const char * version,
      const CORBA_StructMemberSeq & members
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void create_struct_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual CORBA_UnionDef_ptr create_union (
      const char * id,
      const char * name,
      const char * version,
      CORBA_IDLType_ptr discriminator_type,
      const CORBA_UnionMemberSeq & members
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void create_union_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual CORBA_EnumDef_ptr create_enum (
      const char * id,
      const char * name,
      const char * version,
      const CORBA_EnumMemberSeq & members
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void create_enum_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual CORBA_AliasDef_ptr create_alias (
      const char * id,
      const char * name,
      const char * version,
      CORBA_IDLType_ptr original_type
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void create_alias_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual CORBA_InterfaceDef_ptr create_interface (
      const char * id,
      const char * name,
      const char * version,
      const CORBA_InterfaceDefSeq & base_interfaces
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void create_interface_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual CORBA_ValueDef_ptr create_value (
      const char * id,
      const char * name,
      const char * version,
      CORBA::Boolean is_custom,
      CORBA::Boolean is_abstract,
      CORBA_ValueDef_ptr base_value,
      CORBA::Boolean is_truncatable,
      const CORBA_ValueDefSeq & abstract_base_values,
      const CORBA_InterfaceDefSeq & supported_interfaces,
      const CORBA_InitializerSeq & initializers
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void create_value_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual CORBA_ValueBoxDef_ptr create_value_box (
      const char * id,
      const char * name,
      const char * version,
      CORBA_IDLType_ptr original_type_def
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void create_value_box_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual CORBA_ExceptionDef_ptr create_exception (
      const char * id,
      const char * name,
      const char * version,
      const CORBA_StructMemberSeq & members
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void create_exception_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual CORBA_NativeDef_ptr create_native (
      const char * id,
      const char * name,
      const char * version
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void create_native_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual CORBA_AbstractInterfaceDef_ptr create_abstract_interface (
      const char * id,
      const char * name,
      const char * version,
      const CORBA_AbstractInterfaceDefSeq & base_interfaces
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void create_abstract_interface_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual CORBA_LocalInterfaceDef_ptr create_local_interface (
      const char * id,
      const char * name,
      const char * version,
      const CORBA_InterfaceDefSeq & base_interfaces
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void create_local_interface_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  static void _get_def_kind_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *context
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  static void destroy_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *context
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);



};


///////////////////////////////////////////////////////////////////////
//               Strategized Proxy Broker Declaration
//

class  _TAO_CORBA_Container_Strategized_Proxy_Broker : public virtual ::_TAO_CORBA_Container_Proxy_Broker
{
public:
  _TAO_CORBA_Container_Strategized_Proxy_Broker (void);

  virtual ~_TAO_CORBA_Container_Strategized_Proxy_Broker (void);

  virtual ::_TAO_CORBA_Container_Proxy_Impl &select_proxy (
    ::CORBA_Container *object
    ACE_ENV_ARG_DECL
  );

private:

  // Helper methods that takes care to create the proxy
  // as soon as their use is necessary.
  void create_proxy (
    int collocation_strategy
    ACE_ENV_ARG_DECL
  );

private:

  // Caches the proxy implementations. The proxy implementation
  // are totally stateless, and those can be shared by all the
  // instances of a given IDL interface type.
  ::_TAO_CORBA_Container_Proxy_Impl
  *proxy_cache_[TAO_Collocation_Strategies::CS_LAST];

  TAO_SYNCH_MUTEX mutex_;
  // This funxtion is used to get an handle to the unique instance
  // of the Strategized Proxy Broker that is available for a given
  // interface.

public:
  static _TAO_CORBA_Container_Strategized_Proxy_Broker *the_TAO_CORBA_Container_Strategized_Proxy_Broker (void);
};


//
//            End Strategized Proxy Broker Declaration
///////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////
//                    ThruPOA  Impl. Declaration
//

class  _TAO_CORBA_Container_ThruPOA_Proxy_Impl :
  public virtual ::_TAO_CORBA_Container_Proxy_Impl,
  public virtual TAO_ThruPOA_Object_Proxy_Impl,
  public virtual ::_TAO_CORBA_IRObject_ThruPOA_Proxy_Impl

{
public:
  _TAO_CORBA_Container_ThruPOA_Proxy_Impl (void);

  virtual ~_TAO_CORBA_Container_ThruPOA_Proxy_Impl (void) { }

  virtual CORBA_Contained_ptr lookup (
      CORBA_Object *_collocated_tao_target_,
      const char * search_name
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual CORBA_ContainedSeq * contents (
      CORBA_Object *_collocated_tao_target_,
      CORBA::DefinitionKind limit_type,
      CORBA::Boolean exclude_inherited
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual CORBA_ContainedSeq * lookup_name (
      CORBA_Object *_collocated_tao_target_,
      const char * search_name,
      CORBA::Long levels_to_search,
      CORBA::DefinitionKind limit_type,
      CORBA::Boolean exclude_inherited
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual CORBA_Container::DescriptionSeq * describe_contents (
      CORBA_Object *_collocated_tao_target_,
      CORBA::DefinitionKind limit_type,
      CORBA::Boolean exclude_inherited,
      CORBA::Long max_returned_objs
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual CORBA_ModuleDef_ptr create_module (
      CORBA_Object *_collocated_tao_target_,
      const char * id,
      const char * name,
      const char * version
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual CORBA_ConstantDef_ptr create_constant (
      CORBA_Object *_collocated_tao_target_,
      const char * id,
      const char * name,
      const char * version,
      CORBA_IDLType_ptr type,
      const CORBA::Any & value
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual CORBA_StructDef_ptr create_struct (
      CORBA_Object *_collocated_tao_target_,
      const char * id,
      const char * name,
      const char * version,
      const CORBA_StructMemberSeq & members
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual CORBA_UnionDef_ptr create_union (
      CORBA_Object *_collocated_tao_target_,
      const char * id,
      const char * name,
      const char * version,
      CORBA_IDLType_ptr discriminator_type,
      const CORBA_UnionMemberSeq & members
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual CORBA_EnumDef_ptr create_enum (
      CORBA_Object *_collocated_tao_target_,
      const char * id,
      const char * name,
      const char * version,
      const CORBA_EnumMemberSeq & members
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual CORBA_AliasDef_ptr create_alias (
      CORBA_Object *_collocated_tao_target_,
      const char * id,
      const char * name,
      const char * version,
      CORBA_IDLType_ptr original_type
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual CORBA_InterfaceDef_ptr create_interface (
      CORBA_Object *_collocated_tao_target_,
      const char * id,
      const char * name,
      const char * version,
      const CORBA_InterfaceDefSeq & base_interfaces
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual CORBA_ValueDef_ptr create_value (
      CORBA_Object *_collocated_tao_target_,
      const char * id,
      const char * name,
      const char * version,
      CORBA::Boolean is_custom,
      CORBA::Boolean is_abstract,
      CORBA_ValueDef_ptr base_value,
      CORBA::Boolean is_truncatable,
      const CORBA_ValueDefSeq & abstract_base_values,
      const CORBA_InterfaceDefSeq & supported_interfaces,
      const CORBA_InitializerSeq & initializers
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual CORBA_ValueBoxDef_ptr create_value_box (
      CORBA_Object *_collocated_tao_target_,
      const char * id,
      const char * name,
      const char * version,
      CORBA_IDLType_ptr original_type_def
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual CORBA_ExceptionDef_ptr create_exception (
      CORBA_Object *_collocated_tao_target_,
      const char * id,
      const char * name,
      const char * version,
      const CORBA_StructMemberSeq & members
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual CORBA_NativeDef_ptr create_native (
      CORBA_Object *_collocated_tao_target_,
      const char * id,
      const char * name,
      const char * version
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual CORBA_AbstractInterfaceDef_ptr create_abstract_interface (
      CORBA_Object *_collocated_tao_target_,
      const char * id,
      const char * name,
      const char * version,
      const CORBA_AbstractInterfaceDefSeq & base_interfaces
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));

  virtual CORBA_LocalInterfaceDef_ptr create_local_interface (
      CORBA_Object *_collocated_tao_target_,
      const char * id,
      const char * name,
      const char * version,
      const CORBA_InterfaceDefSeq & base_interfaces
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));


};

//
//                ThruPOA  Proxy Impl. Declaration
///////////////////////////////////////////////////////////////////////


class POA_CORBA_IDLType;
typedef POA_CORBA_IDLType *POA_CORBA_IDLType_ptr;
// Forward Classes Declaration
class _TAO_CORBA_IDLType_ThruPOA_Proxy_Impl;
class _TAO_CORBA_IDLType_Strategized_Proxy_Broker;

class  POA_CORBA_IDLType : public virtual POA_CORBA_IRObject
{
protected:
  POA_CORBA_IDLType (void);

public:
  POA_CORBA_IDLType (const POA_CORBA_IDLType& rhs);
  virtual ~POA_CORBA_IDLType (void);


  virtual CORBA::Boolean _is_a (
      const char* logical_type_id
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  virtual void* _downcast (
      const char* logical_type_id
    );

  static void _is_a_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *servant_upcall
      ACE_ENV_ARG_DECL
    );

  static void _non_existent_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *servant_upcall
      ACE_ENV_ARG_DECL
    );

  static void _interface_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual void _dispatch (
      TAO_ServerRequest &req,
      void *_servant_upcall
      ACE_ENV_ARG_DECL
    );

  ::CORBA_IDLType *_this (
      ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS);


  virtual const char* _interface_repository_id (void) const;

  virtual CORBA::TypeCode_ptr type (
      ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)

    ACE_THROW_SPEC ((
      CORBA::SystemException
    )) = 0;

    static void _get_type_skel (
      TAO_ServerRequest &_tao_req,
      void *_tao_obj,
      void *_tao_servant_upcall
      ACE_ENV_ARG_DECL
    );

  static void _get_def_kind_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *context
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  static void destroy_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *context
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);



};


///////////////////////////////////////////////////////////////////////
//               Strategized Proxy Broker Declaration
//

class  _TAO_CORBA_IDLType_Strategized_Proxy_Broker : public virtual ::_TAO_CORBA_IDLType_Proxy_Broker
{
public:
  _TAO_CORBA_IDLType_Strategized_Proxy_Broker (void);

  virtual ~_TAO_CORBA_IDLType_Strategized_Proxy_Broker (void);

  virtual ::_TAO_CORBA_IDLType_Proxy_Impl &select_proxy (
    ::CORBA_IDLType *object
    ACE_ENV_ARG_DECL
  );

private:

  // Helper methods that takes care to create the proxy
  // as soon as their use is necessary.
  void create_proxy (
    int collocation_strategy
    ACE_ENV_ARG_DECL
  );

private:

  // Caches the proxy implementations. The proxy implementation
  // are totally stateless, and those can be shared by all the
  // instances of a given IDL interface type.
  ::_TAO_CORBA_IDLType_Proxy_Impl
  *proxy_cache_[TAO_Collocation_Strategies::CS_LAST];

  TAO_SYNCH_MUTEX mutex_;
  // This funxtion is used to get an handle to the unique instance
  // of the Strategized Proxy Broker that is available for a given
  // interface.

public:
  static _TAO_CORBA_IDLType_Strategized_Proxy_Broker *the_TAO_CORBA_IDLType_Strategized_Proxy_Broker (void);
};


//
//            End Strategized Proxy Broker Declaration
///////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////
//                    ThruPOA  Impl. Declaration
//

class  _TAO_CORBA_IDLType_ThruPOA_Proxy_Impl :
  public virtual ::_TAO_CORBA_IDLType_Proxy_Impl,
  public virtual TAO_ThruPOA_Object_Proxy_Impl,
  public virtual ::_TAO_CORBA_IRObject_ThruPOA_Proxy_Impl

{
public:
  _TAO_CORBA_IDLType_ThruPOA_Proxy_Impl (void);

  virtual ~_TAO_CORBA_IDLType_ThruPOA_Proxy_Impl (void) { }

  virtual CORBA::TypeCode_ptr type (
      CORBA_Object *_collocated_tao_target_
      ACE_ENV_ARG_DECL
    )
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));


};

//
//                ThruPOA  Proxy Impl. Declaration
///////////////////////////////////////////////////////////////////////


class POA_CORBA_TypedefDef;
typedef POA_CORBA_TypedefDef *POA_CORBA_TypedefDef_ptr;
// Forward Classes Declaration
class _TAO_CORBA_TypedefDef_ThruPOA_Proxy_Impl;
class _TAO_CORBA_TypedefDef_Strategized_Proxy_Broker;

class  POA_CORBA_TypedefDef : public virtual POA_CORBA_Contained, public virtual POA_CORBA_IDLType
{
protected:
  POA_CORBA_TypedefDef (void);

public:
  POA_CORBA_TypedefDef (const POA_CORBA_TypedefDef& rhs);
  virtual ~POA_CORBA_TypedefDef (void);


  virtual CORBA::Boolean _is_a (
      const char* logical_type_id
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  virtual void* _downcast (
      const char* logical_type_id
    );

  static void _is_a_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *servant_upcall
      ACE_ENV_ARG_DECL
    );

  static void _non_existent_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *servant_upcall
      ACE_ENV_ARG_DECL
    );

  static void _interface_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *servant_upcall
      ACE_ENV_ARG_DECL
    );

  virtual void _dispatch (
      TAO_ServerRequest &req,
      void *_servant_upcall
      ACE_ENV_ARG_DECL
    );

  ::CORBA_TypedefDef *_this (
      ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS);


  virtual const char* _interface_repository_id (void) const;

  static void _get_id_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *context
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  static void _set_id_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *context
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  static void _get_name_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *context
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  static void _set_name_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *context
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  static void _get_version_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *context
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  static void _set_version_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *context
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  static void _get_defined_in_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *context
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  static void _get_absolute_name_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *context
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  static void _get_containing_repository_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *context
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  static void describe_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *context
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  static void move_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *context
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  static void _get_type_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *context
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  static void _get_def_kind_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *context
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);


  static void destroy_skel (
      TAO_ServerRequest &req,
      void *obj,
      void *context
      ACE_ENV_ARG_DECL_WITH_DEFAULTS);



};


///////////////////////////////////////////////////////////////////////
//               Strategized Proxy Broker Declaration
//

class  _TAO_CORBA_TypedefDef_Strategized_Proxy_Broker : public virtual ::_TAO_CORBA_TypedefDef_Proxy_Broker
{
public:
  _TAO_CORBA_TypedefDef_Strategized_Proxy_Broker (void);

  virtual ~_TAO_CORBA_TypedefDef_Strategized_Proxy_Broker (void);

  virtual ::_TAO_CORBA_TypedefDef_Proxy_Impl &select_proxy (
    ::CORBA_TypedefDef *object
    ACE_ENV_ARG_DECL
  );

private:

  // Helper methods that takes care to create the proxy
  // as soon as their use is necessary.
  void create_proxy (
    int collocation_strategy
    ACE_ENV_ARG_DECL
  );

private:

  // Caches the proxy implementations. The proxy implementation
  // are totally stateless, and those can be shared by all the
  // instances of a given IDL interface type.
  ::_TAO_CORBA_TypedefDef_Proxy_Impl
  *proxy_cache_[TAO_Collocation_Strategies::CS_LAST];

  TAO_SYNCH_MUTEX mutex_;
  // This funxtion is used to get an handle to the unique instance
  // of the Strategized Proxy Broker that is available for a given
  // interface.

public:
  static _TAO_CORBA_TypedefDef_Strategized_Proxy_Broker *the_TAO_CORBA_TypedefDef_Strategized_Proxy_Broker (void);
};


//
//            End Strategized Proxy Broker Declaration
///////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////
//                    ThruPOA  Impl. Declaration
//

class  _TAO_CORBA_TypedefDef_ThruPOA_Proxy_Impl :
  public virtual ::_TAO_CORBA_TypedefDef_Proxy_Impl,
  public virtual TAO_ThruPOA_Object_Proxy_Impl,
  public virtual ::_TAO_CORBA_Contained_ThruPOA_Proxy_Impl,
  public virtual ::_TAO_CORBA_IDLType_ThruPOA_Proxy_Impl

{
public:
  _TAO_CORBA_TypedefDef_ThruPOA_Proxy_Impl (void);

  virtual ~_TAO_CORBA_TypedefDef_ThruPOA_Proxy_Impl (void) { }

};


//
//                ThruPOA  Proxy Impl. Declaration
///////////////////////////////////////////////////////////////////////

#include "IFR_BaseS_T.h"

#if defined (__ACE_INLINE__)
#include "IFR_BaseS.i"
#endif /* defined INLINE */

#if defined(_MSC_VER) && (_MSC_VER >= 1200)
#pragma warning(pop)
#endif /* _MSC_VER */

#if defined (__BORLANDC__)
#pragma option pop
#endif /* __BORLANDC__ */

#include "ace/post.h"
#endif /* ifndef */
