// -*- C++ -*-
//
// Policy_ForwardC.h,v 1.2 2002/04/06 02:19:15 bala 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_POLICY_FORWARDC_H_
#define _TAO_IDL_POLICY_FORWARDC_H_

#include "ace/pre.h"
#include "tao/corbafwd.h"

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

#include "tao/TAO_Export.h"
#include "Sequence.h"
#include "CDR.h"

#if defined (TAO_EXPORT_MACRO)
#undef TAO_EXPORT_MACRO
#endif
#define TAO_EXPORT_MACRO TAO_Export

#if defined (TAO_EXPORT_NESTED_CLASSES)
#  if defined (TAO_EXPORT_NESTED_MACRO)
#    undef TAO_EXPORT_NESTED_MACRO
#  endif /* defined (TAO_EXPORT_NESTED_MACRO) */
#  define TAO_EXPORT_NESTED_MACRO TAO_Export
#endif /* TAO_EXPORT_NESTED_CLASSES */

#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__ */

TAO_NAMESPACE  CORBA
{
  typedef CORBA::ULong PolicyType;
  typedef CORBA::ULong_out PolicyType_out;
  TAO_NAMESPACE_STORAGE_CLASS ::CORBA::TypeCode_ptr _tc_PolicyType;
  
  class Policy;
  
#if !defined (_CORBA_POLICY___PTR_CH_)
#define _CORBA_POLICY___PTR_CH_
  
  typedef Policy *Policy_ptr;
  
#endif /* end #if !defined */
  
  
#if !defined (_CORBA_POLICY___VAR_CH_)
#define _CORBA_POLICY___VAR_CH_
  
  class TAO_Export Policy_var : public TAO_Base_var
  {
  public:
    Policy_var (void); // default constructor
    Policy_var (Policy_ptr p) : ptr_ (p) {} 
    Policy_var (const Policy_var &); // copy constructor
    ~Policy_var (void); // destructor
    
    Policy_var &operator= (Policy_ptr);
    Policy_var &operator= (const Policy_var &);
    Policy_ptr operator-> (void) const;
    
    operator const Policy_ptr &() const;
    operator Policy_ptr &();
    // in, inout, out, _retn 
    Policy_ptr in (void) const;
    Policy_ptr &inout (void);
    Policy_ptr &out (void);
    Policy_ptr _retn (void);
    Policy_ptr ptr (void) const;
    
    // Hooks used by template sequence and object manager classes
    // for non-defined forward declared interfaces.
    static Policy_ptr tao_duplicate (Policy_ptr);
    static void tao_release (Policy_ptr);
    static Policy_ptr tao_nil (void);
    static Policy_ptr tao_narrow (
        CORBA::Object *
        ACE_ENV_ARG_DECL_NOT_USED
      );
    static CORBA::Object * tao_upcast (void *);
  
  private:
    Policy_ptr ptr_;
    // Unimplemented - prevents widening assignment.
    Policy_var (const TAO_Base_var &rhs);
    Policy_var &operator= (const TAO_Base_var &rhs);
  };


#endif /* end #if !defined */
  
  
#if !defined (_CORBA_POLICY___OUT_CH_)
#define _CORBA_POLICY___OUT_CH_
  
  class TAO_Export Policy_out
  {
  public:
    Policy_out (Policy_ptr &);
    Policy_out (Policy_var &);
    Policy_out (const Policy_out &);
    Policy_out &operator= (const Policy_out &);
    Policy_out &operator= (const Policy_var &);
    Policy_out &operator= (Policy_ptr);
    operator Policy_ptr &();
    Policy_ptr &ptr (void);
    Policy_ptr operator-> (void);
  
  private:
    Policy_ptr &ptr_;
  };
  
  
#endif /* end #if !defined */
  
  
#if !defined (TAO_USE_SEQUENCE_TEMPLATES)
  
#if !defined (__TAO_UNBOUNDED_OBJECT_SEQUENCE_CORBA_POLICYLIST_CH_)
#define __TAO_UNBOUNDED_OBJECT_SEQUENCE_CORBA_POLICYLIST_CH_
  
  class TAO_EXPORT_MACRO _TAO_Unbounded_Object_Sequence_CORBA_PolicyList
    : public TAO_Unbounded_Base_Sequence
  {
  public:
    // = Initialization and termination methods.
    _TAO_Unbounded_Object_Sequence_CORBA_PolicyList (void);
    _TAO_Unbounded_Object_Sequence_CORBA_PolicyList (CORBA::ULong maximum);
    _TAO_Unbounded_Object_Sequence_CORBA_PolicyList (
        CORBA::ULong maximum,
        CORBA::ULong length,
        Policy* *value,
        CORBA::Boolean release = 0
      );
    _TAO_Unbounded_Object_Sequence_CORBA_PolicyList (
        const _TAO_Unbounded_Object_Sequence_CORBA_PolicyList &rhs
      );
    _TAO_Unbounded_Object_Sequence_CORBA_PolicyList &operator= (
        const _TAO_Unbounded_Object_Sequence_CORBA_PolicyList &rhs
      );
    virtual ~_TAO_Unbounded_Object_Sequence_CORBA_PolicyList (void);
    
    // = Accessors.
    TAO_Object_Manager<CORBA::Policy,CORBA::Policy_var> operator[] (CORBA::ULong index) const;
    
    // = Static operations.
    static Policy **allocbuf (CORBA::ULong nelems);
    static void freebuf (Policy **buffer);
    
    // Implement the TAO_Base_Sequence methods (see Sequence.h)
    virtual void _allocate_buffer (CORBA::ULong length);
    virtual void _deallocate_buffer (void);
    Policy* *get_buffer (CORBA::Boolean orphan = 0);
    const Policy* *get_buffer (void) const;
    virtual void _shrink_buffer (
        CORBA::ULong nl,
        CORBA::ULong ol
      );
    
    virtual void _downcast (
        void* target,
        CORBA_Object *src
        ACE_ENV_ARG_DECL_WITH_DEFAULTS
      );
    virtual CORBA_Object* _upcast (void *src) const;
  };
  
#endif /* end #if !defined */
  
  
#endif /* !TAO_USE_SEQUENCE_TEMPLATES */ 
  
#if !defined (_CORBA_POLICYLIST_CH_)
#define _CORBA_POLICYLIST_CH_
  
  class PolicyList;
  class PolicyList_var;
  
  // *************************************************************
  // PolicyList
  // *************************************************************
  
  class TAO_Export PolicyList : public 
#if !defined (TAO_USE_SEQUENCE_TEMPLATES)
  _TAO_Unbounded_Object_Sequence_CORBA_PolicyList
#else /* TAO_USE_SEQUENCE_TEMPLATES */
  TAO_Unbounded_Object_Sequence<Policy,Policy_var>
#endif /* !TAO_USE_SEQUENCE_TEMPLATES */ 
  {
  public:
    PolicyList (void); // default ctor
    PolicyList (CORBA::ULong max); // uses max size
    PolicyList (
        CORBA::ULong max, 
        CORBA::ULong length, 
        Policy_ptr *buffer, 
        CORBA::Boolean release = 0
      );
    PolicyList (const PolicyList &); // copy ctor
    ~PolicyList (void);
    static void _tao_any_destructor (void*);
    
#if !defined(__GNUC__) || !defined (ACE_HAS_GNUG_PRE_2_8)
    typedef PolicyList_var _var_type;
#endif /* ! __GNUC__ || g++ >= 2.8 */
    
    
  };
  
#endif /* end #if !defined */
  
  
#if !defined (_CORBA_POLICYLIST___VAR_CH_)
#define _CORBA_POLICYLIST___VAR_CH_
  
  // *************************************************************
  // class CORBA::PolicyList_var
  // *************************************************************
  
  class TAO_Export PolicyList_var
  {
  public:
    PolicyList_var (void);
    PolicyList_var (PolicyList *);
    PolicyList_var (const PolicyList_var &);
    ~PolicyList_var (void);
    
    PolicyList_var &operator= (PolicyList *);
    PolicyList_var &operator= (const PolicyList_var &);
    PolicyList *operator-> (void);
    const PolicyList *operator-> (void) const;
    
    operator const PolicyList &() const;
    operator PolicyList &();
    operator PolicyList &() const;
    operator PolicyList *&(); // variable-size base types only
    
    TAO_Object_Manager<Policy, Policy_var> operator[] (CORBA::ULong index);
    
    // in, inout, out, _retn 
    const PolicyList &in (void) const;
    PolicyList &inout (void);
    PolicyList *&out (void);
    PolicyList *_retn (void);
    PolicyList *ptr (void) const;
  
  private:
    PolicyList *ptr_;
  };
  
  
#endif /* end #if !defined */
  
  
#if !defined (_CORBA_POLICYLIST___OUT_CH_)
#define _CORBA_POLICYLIST___OUT_CH_
  
  class TAO_Export PolicyList_out
  {
  public:
    PolicyList_out (PolicyList *&);
    PolicyList_out (PolicyList_var &);
    PolicyList_out (const PolicyList_out &);
    PolicyList_out &operator= (const PolicyList_out &);
    PolicyList_out &operator= (PolicyList *);
    operator PolicyList *&();
    PolicyList *&ptr (void);
    PolicyList *operator-> (void);
    TAO_Object_Manager<Policy, Policy_var> operator[] (CORBA::ULong index);
  
  private:
    PolicyList *&ptr_;
    // Assignment from T_var not allowed.
    void operator= (const PolicyList_var &);
  };
  
  
#endif /* end #if !defined */
  
  TAO_NAMESPACE_STORAGE_CLASS ::CORBA::TypeCode_ptr _tc_PolicyList;
  
  
#if !defined (TAO_USE_SEQUENCE_TEMPLATES)
  
#if !defined (__TAO_UNBOUNDED_SEQUENCE_CORBA_POLICYTYPESEQ_CH_)
#define __TAO_UNBOUNDED_SEQUENCE_CORBA_POLICYTYPESEQ_CH_
  
  class TAO_EXPORT_MACRO _TAO_Unbounded_Sequence_CORBA_PolicyTypeSeq
    : public TAO_Unbounded_Base_Sequence
  {
  public:
    // = Initialization and termination methods.
    _TAO_Unbounded_Sequence_CORBA_PolicyTypeSeq (void);
    _TAO_Unbounded_Sequence_CORBA_PolicyTypeSeq (CORBA::ULong maximum); 
    _TAO_Unbounded_Sequence_CORBA_PolicyTypeSeq (
        CORBA::ULong maximum,
        CORBA::ULong length,
        CORBA::ULong *data,
        CORBA::Boolean release = 0
      );
    _TAO_Unbounded_Sequence_CORBA_PolicyTypeSeq (
        const _TAO_Unbounded_Sequence_CORBA_PolicyTypeSeq &rhs
      );
    _TAO_Unbounded_Sequence_CORBA_PolicyTypeSeq &operator= (
        const _TAO_Unbounded_Sequence_CORBA_PolicyTypeSeq &rhs
      );
    virtual ~_TAO_Unbounded_Sequence_CORBA_PolicyTypeSeq (void);
    
    // = Accessors.
    CORBA::ULong &operator[] (CORBA::ULong i);
    const CORBA::ULong &operator[] (CORBA::ULong i) const;
    
    // = Static operations.
    static CORBA::ULong *allocbuf (CORBA::ULong size);
    static void freebuf (CORBA::ULong *buffer);
    
    // Implement the TAO_Base_Sequence methods (see Sequence.h)
    virtual void _allocate_buffer (CORBA::ULong length);
    virtual void _deallocate_buffer (void);
    CORBA::ULong *get_buffer (CORBA::Boolean orphan = 0);
    const CORBA::ULong *get_buffer (void) const;
    void replace (
        CORBA::ULong max,
        CORBA::ULong length,
        CORBA::ULong *data,
        CORBA::Boolean release
      );
  };
  
#endif /* end #if !defined */
  
  
#endif /* !TAO_USE_SEQUENCE_TEMPLATES */ 
  
#if !defined (_CORBA_POLICYTYPESEQ_CH_)
#define _CORBA_POLICYTYPESEQ_CH_
  
  class PolicyTypeSeq;
  class PolicyTypeSeq_var;
  
  // *************************************************************
  // PolicyTypeSeq
  // *************************************************************
  
  class TAO_Export PolicyTypeSeq : public 
#if !defined (TAO_USE_SEQUENCE_TEMPLATES)
  _TAO_Unbounded_Sequence_CORBA_PolicyTypeSeq
#else /* TAO_USE_SEQUENCE_TEMPLATES */
  TAO_Unbounded_Sequence<CORBA::ULong>
#endif /* !TAO_USE_SEQUENCE_TEMPLATES */ 
  {
  public:
    PolicyTypeSeq (void); // default ctor
    PolicyTypeSeq (CORBA::ULong max); // uses max size
    PolicyTypeSeq (
        CORBA::ULong max, 
        CORBA::ULong length, 
        CORBA::ULong *buffer, 
        CORBA::Boolean release = 0
      );
    PolicyTypeSeq (const PolicyTypeSeq &); // copy ctor
    ~PolicyTypeSeq (void);
    static void _tao_any_destructor (void*);
    
#if !defined(__GNUC__) || !defined (ACE_HAS_GNUG_PRE_2_8)
    typedef PolicyTypeSeq_var _var_type;
#endif /* ! __GNUC__ || g++ >= 2.8 */
    
    
  };
  
#endif /* end #if !defined */
  
  
#if !defined (_CORBA_POLICYTYPESEQ___VAR_CH_)
#define _CORBA_POLICYTYPESEQ___VAR_CH_
  
  // *************************************************************
  // class CORBA::PolicyTypeSeq_var
  // *************************************************************
  
  class TAO_Export PolicyTypeSeq_var
  {
  public:
    PolicyTypeSeq_var (void);
    PolicyTypeSeq_var (PolicyTypeSeq *);
    PolicyTypeSeq_var (const PolicyTypeSeq_var &);
    // Fixed-size base types only.
    PolicyTypeSeq_var (const PolicyTypeSeq &);
    ~PolicyTypeSeq_var (void);
    
    PolicyTypeSeq_var &operator= (PolicyTypeSeq *);
    PolicyTypeSeq_var &operator= (const PolicyTypeSeq_var &);
    // Fixed-size base types only.
    PolicyTypeSeq_var &operator= (const PolicyTypeSeq &);
    PolicyTypeSeq *operator-> (void);
    const PolicyTypeSeq *operator-> (void) const;
    
    operator const PolicyTypeSeq &() const;
    operator PolicyTypeSeq &();
    operator PolicyTypeSeq &() const;
    
    PolicyType & operator[] (CORBA::ULong index);
    const PolicyType & operator[] (CORBA::ULong index) const;
    
    // in, inout, out, _retn 
    const PolicyTypeSeq &in (void) const;
    PolicyTypeSeq &inout (void);
    PolicyTypeSeq *&out (void);
    PolicyTypeSeq *_retn (void);
    PolicyTypeSeq *ptr (void) const;
  
  private:
    PolicyTypeSeq *ptr_;
  };
  
  
#endif /* end #if !defined */
  
  
#if !defined (_CORBA_POLICYTYPESEQ___OUT_CH_)
#define _CORBA_POLICYTYPESEQ___OUT_CH_
  
  class TAO_Export PolicyTypeSeq_out
  {
  public:
    PolicyTypeSeq_out (PolicyTypeSeq *&);
    PolicyTypeSeq_out (PolicyTypeSeq_var &);
    PolicyTypeSeq_out (const PolicyTypeSeq_out &);
    PolicyTypeSeq_out &operator= (const PolicyTypeSeq_out &);
    PolicyTypeSeq_out &operator= (PolicyTypeSeq *);
    operator PolicyTypeSeq *&();
    PolicyTypeSeq *&ptr (void);
    PolicyTypeSeq *operator-> (void);
    PolicyType & operator[] (CORBA::ULong index);
  
  private:
    PolicyTypeSeq *&ptr_;
    // Assignment from T_var not allowed.
    void operator= (const PolicyTypeSeq_var &);
  };
  
  
#endif /* end #if !defined */
  
  TAO_NAMESPACE_STORAGE_CLASS ::CORBA::TypeCode_ptr _tc_PolicyTypeSeq;
  
  enum SetOverrideType
  {
    SET_OVERRIDE,
    ADD_OVERRIDE
  };
  
  typedef SetOverrideType &SetOverrideType_out;
  TAO_NAMESPACE_STORAGE_CLASS ::CORBA::TypeCode_ptr _tc_SetOverrideType;
  
  
}
TAO_NAMESPACE_CLOSE // module CORBA

// External declarations for undefined interface
// CORBA::Policy
TAO_Export
CORBA::Policy_ptr
tao_CORBA_Policy_duplicate (
    CORBA::Policy_ptr
  );
TAO_Export
void
tao_CORBA_Policy_release (
    CORBA::Policy_ptr
  );
TAO_Export
CORBA::Policy_ptr
tao_CORBA_Policy_nil (
    void
  );
TAO_Export
CORBA::Policy_ptr
tao_CORBA_Policy_narrow (
    CORBA::Object *
    ACE_ENV_ARG_DECL_NOT_USED
  );
TAO_Export
CORBA::Object *
tao_CORBA_Policy_upcast (
    void *
  );

// Any operators for interface CORBA::Policy
TAO_Export void operator<<= (CORBA::Any &, CORBA::Policy_ptr);
TAO_Export CORBA::Boolean operator>>= (const CORBA::Any &, CORBA::Policy *&);
TAO_Export void operator<<= (CORBA::Any &, const CORBA::PolicyList &); // copying version
TAO_Export void operator<<= (CORBA::Any &, CORBA::PolicyList*); // noncopying version
TAO_Export CORBA::Boolean operator>>= (const CORBA::Any &, CORBA::PolicyList *&); // deprecated
TAO_Export CORBA::Boolean operator>>= (const CORBA::Any &, const CORBA::PolicyList *&);
TAO_Export void operator<<= (CORBA::Any &, const CORBA::PolicyTypeSeq &); // copying version
TAO_Export void operator<<= (CORBA::Any &, CORBA::PolicyTypeSeq*); // noncopying version
TAO_Export CORBA::Boolean operator>>= (const CORBA::Any &, CORBA::PolicyTypeSeq *&); // deprecated
TAO_Export CORBA::Boolean operator>>= (const CORBA::Any &, const CORBA::PolicyTypeSeq *&);
TAO_Export void operator<<= (CORBA::Any &, CORBA::SetOverrideType);
TAO_Export CORBA::Boolean operator>>= (const CORBA::Any &, CORBA::SetOverrideType &);

#ifndef __ACE_INLINE__

TAO_Export CORBA::Boolean operator<< (TAO_OutputCDR &, const CORBA::Policy_ptr );
TAO_Export CORBA::Boolean operator>> (TAO_InputCDR &, CORBA::Policy_ptr &);

#if !defined _TAO_CDR_OP_CORBA_PolicyList_H_
#define _TAO_CDR_OP_CORBA_PolicyList_H_

TAO_Export CORBA::Boolean operator<< (
    TAO_OutputCDR &,
    const CORBA::PolicyList &
  );
TAO_Export CORBA::Boolean operator>> (
    TAO_InputCDR &,
    CORBA::PolicyList &
  );

#endif /* _TAO_CDR_OP_CORBA_PolicyList_H_ */


#if !defined _TAO_CDR_OP_CORBA_PolicyTypeSeq_H_
#define _TAO_CDR_OP_CORBA_PolicyTypeSeq_H_

TAO_Export CORBA::Boolean operator<< (
    TAO_OutputCDR &,
    const CORBA::PolicyTypeSeq &
  );
TAO_Export CORBA::Boolean operator>> (
    TAO_InputCDR &,
    CORBA::PolicyTypeSeq &
  );

#endif /* _TAO_CDR_OP_CORBA_PolicyTypeSeq_H_ */

TAO_Export CORBA::Boolean operator<< (TAO_OutputCDR &, const CORBA::SetOverrideType &); // 
TAO_Export CORBA::Boolean operator>> (TAO_InputCDR &, CORBA::SetOverrideType &);

#endif /* __ACE_INLINE__ */


#if defined (__ACE_INLINE__)
#include "Policy_ForwardC.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 */
