/*
 *  MICO --- an Open Source CORBA implementation
 *  Copyright (c) 1997-2001 by The Mico Team
 *
 *  This file was automatically generated. DO NOT EDIT!
 */

#include <CORBA.h>

#ifndef __POLICY2_H__
#define __POLICY2_H__





namespace MICOPolicy {


MICO_EXPORT_CONST_DECL const CORBA::PolicyType TRANSPORTPREF_POLICY_TYPE;
class TransportPrefPolicy;
typedef TransportPrefPolicy *TransportPrefPolicy_ptr;
typedef TransportPrefPolicy_ptr TransportPrefPolicyRef;
typedef ObjVar<TransportPrefPolicy> TransportPrefPolicy_var;
typedef ObjOut<TransportPrefPolicy> TransportPrefPolicy_out;


/*
 * Base class and common definitions for interface TransportPrefPolicy
 */

class TransportPrefPolicy : 
  virtual public ::CORBA::Policy
{
  public:
    typedef ::CORBA::Policy _VCHACK__CORBA__Policy;
    virtual ~TransportPrefPolicy();

    #ifdef HAVE_TYPEDEF_OVERLOAD
    typedef TransportPrefPolicy_ptr _ptr_type;
    typedef TransportPrefPolicy_var _var_type;
    #endif

    static TransportPrefPolicy_ptr _narrow( CORBA::Object_ptr obj );
    static TransportPrefPolicy_ptr _narrow( CORBA::AbstractBase_ptr obj );
    static TransportPrefPolicy_ptr _duplicate( TransportPrefPolicy_ptr _obj )
    {
      CORBA::Object::_duplicate (_obj);
      return _obj;
    }

    static TransportPrefPolicy_ptr _nil()
    {
      return 0;
    }

    virtual void *_narrow_helper( const char *repoid );

    typedef CORBA::ULong ProfileTag;
    typedef ProfileTag& ProfileTag_out;
    static CORBA::TypeCodeConst _tc_ProfileTag;

    typedef SequenceTmpl<ProfileTag,MICO_TID_DEF> ProfileTagSeq;
    #ifdef _WINDOWS
    static ProfileTagSeq _dummy_ProfileTagSeq;
    #endif
    typedef TSeqVar<SequenceTmpl<ProfileTag,MICO_TID_DEF> > ProfileTagSeq_var;
    typedef TSeqOut<SequenceTmpl<ProfileTag,MICO_TID_DEF> > ProfileTagSeq_out;

    static CORBA::TypeCodeConst _tc_ProfileTagSeq;

    virtual ProfileTagSeq* preferences() = 0;
    virtual void preferences( const ProfileTagSeq& value ) = 0;
    virtual ProfileTagSeq* preferences_nocopy() = 0;

  protected:
    TransportPrefPolicy() {};
  private:
    TransportPrefPolicy( const TransportPrefPolicy& );
    void operator=( const TransportPrefPolicy& );
};


}


namespace BiDirPolicy {


typedef CORBA::UShort BidirectionalPolicyValue;
typedef BidirectionalPolicyValue& BidirectionalPolicyValue_out;
MICO_EXPORT_VAR_DECL CORBA::TypeCodeConst _tc_BidirectionalPolicyValue;

MICO_EXPORT_CONST_DECL const BidirectionalPolicyValue NORMAL;
MICO_EXPORT_CONST_DECL const BidirectionalPolicyValue BOTH;
MICO_EXPORT_CONST_DECL const CORBA::PolicyType BIDIRECTIONAL_POLICY_TYPE;
class BidirectionalPolicy;
typedef BidirectionalPolicy *BidirectionalPolicy_ptr;
typedef BidirectionalPolicy_ptr BidirectionalPolicyRef;
typedef ObjVar<BidirectionalPolicy> BidirectionalPolicy_var;
typedef ObjOut<BidirectionalPolicy> BidirectionalPolicy_out;


/*
 * Base class and common definitions for interface BidirectionalPolicy
 */

class BidirectionalPolicy : 
  virtual public ::CORBA::Policy
{
  public:
    typedef ::CORBA::Policy _VCHACK__CORBA__Policy;
    virtual ~BidirectionalPolicy();

    #ifdef HAVE_TYPEDEF_OVERLOAD
    typedef BidirectionalPolicy_ptr _ptr_type;
    typedef BidirectionalPolicy_var _var_type;
    #endif

    static BidirectionalPolicy_ptr _narrow( CORBA::Object_ptr obj );
    static BidirectionalPolicy_ptr _narrow( CORBA::AbstractBase_ptr obj );
    static BidirectionalPolicy_ptr _duplicate( BidirectionalPolicy_ptr _obj )
    {
      CORBA::Object::_duplicate (_obj);
      return _obj;
    }

    static BidirectionalPolicy_ptr _nil()
    {
      return 0;
    }

    virtual void *_narrow_helper( const char *repoid );

    virtual BidirectionalPolicyValue value() = 0;

  protected:
    BidirectionalPolicy() {};
  private:
    BidirectionalPolicy( const BidirectionalPolicy& );
    void operator=( const BidirectionalPolicy& );
};


}


#ifndef MICO_CONF_NO_POA

#endif // MICO_CONF_NO_POA

void operator<<=( CORBA::Any &_a, const SequenceTmpl<MICOPolicy::TransportPrefPolicy::ProfileTag,MICO_TID_DEF> &_s );
void operator<<=( CORBA::Any &_a, SequenceTmpl<MICOPolicy::TransportPrefPolicy::ProfileTag,MICO_TID_DEF> *_s );
CORBA::Boolean operator>>=( const CORBA::Any &_a, SequenceTmpl<MICOPolicy::TransportPrefPolicy::ProfileTag,MICO_TID_DEF> &_s );
CORBA::Boolean operator>>=( const CORBA::Any &_a, const SequenceTmpl<MICOPolicy::TransportPrefPolicy::ProfileTag,MICO_TID_DEF> *&_s );

#endif
