/*
 *  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>
#include <mico/throw.h>

#ifndef __COSREFERENCE_H__
#define __COSREFERENCE_H__


#include <mico/CosObjectIdentity.h>
#include <mico/ir_base.h>
#include <mico/ir.h>
#include <mico/CosRelationships.h>
#include <mico/CosGraphs.h>



namespace CosReference {


class Relationship;
typedef Relationship *Relationship_ptr;
typedef Relationship_ptr RelationshipRef;
typedef ObjVar<Relationship> Relationship_var;
typedef ObjOut<Relationship> Relationship_out;


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

class Relationship : 
  virtual public ::CosRelationships::Relationship
{
  public:
    typedef ::CosRelationships::Relationship _VCHACK__CosRelationships__Relationship;
    virtual ~Relationship();

    #ifdef HAVE_TYPEDEF_OVERLOAD
    typedef Relationship_ptr _ptr_type;
    typedef Relationship_var _var_type;
    #endif

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

    static Relationship_ptr _nil()
    {
      return 0;
    }

    virtual void *_narrow_helper( const char *repoid );

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

// Stub for interface Relationship
class Relationship_stub:
  virtual public Relationship,
  virtual public ::CosRelationships::Relationship_stub
{
  public:
    virtual ~Relationship_stub();
  private:
    void operator=( const Relationship_stub& );
};

#ifndef MICO_CONF_NO_POA

class Relationship_stub_clp :
  virtual public Relationship_stub,
  virtual public ::CosRelationships::Relationship_stub_clp
{
  public:
    Relationship_stub_clp (PortableServer::POA_ptr, CORBA::Object_ptr);
    virtual ~Relationship_stub_clp ();
  protected:
    Relationship_stub_clp ();
  private:
    void operator=( const Relationship_stub_clp & );
};

#endif // MICO_CONF_NO_POA

class ReferencesRole;
typedef ReferencesRole *ReferencesRole_ptr;
typedef ReferencesRole_ptr ReferencesRoleRef;
typedef ObjVar<ReferencesRole> ReferencesRole_var;
typedef ObjOut<ReferencesRole> ReferencesRole_out;


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

class ReferencesRole : 
  virtual public ::CosGraphs::Role
{
  public:
    typedef ::CosGraphs::Role _VCHACK__CosGraphs__Role;
    virtual ~ReferencesRole();

    #ifdef HAVE_TYPEDEF_OVERLOAD
    typedef ReferencesRole_ptr _ptr_type;
    typedef ReferencesRole_var _var_type;
    #endif

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

    static ReferencesRole_ptr _nil()
    {
      return 0;
    }

    virtual void *_narrow_helper( const char *repoid );

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

// Stub for interface ReferencesRole
class ReferencesRole_stub:
  virtual public ReferencesRole,
  virtual public ::CosGraphs::Role_stub
{
  public:
    virtual ~ReferencesRole_stub();
  private:
    void operator=( const ReferencesRole_stub& );
};

#ifndef MICO_CONF_NO_POA

class ReferencesRole_stub_clp :
  virtual public ReferencesRole_stub,
  virtual public ::CosGraphs::Role_stub_clp
{
  public:
    ReferencesRole_stub_clp (PortableServer::POA_ptr, CORBA::Object_ptr);
    virtual ~ReferencesRole_stub_clp ();
  protected:
    ReferencesRole_stub_clp ();
  private:
    void operator=( const ReferencesRole_stub_clp & );
};

#endif // MICO_CONF_NO_POA

class ReferencedByRole;
typedef ReferencedByRole *ReferencedByRole_ptr;
typedef ReferencedByRole_ptr ReferencedByRoleRef;
typedef ObjVar<ReferencedByRole> ReferencedByRole_var;
typedef ObjOut<ReferencedByRole> ReferencedByRole_out;


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

class ReferencedByRole : 
  virtual public ::CosGraphs::Role
{
  public:
    typedef ::CosGraphs::Role _VCHACK__CosGraphs__Role;
    virtual ~ReferencedByRole();

    #ifdef HAVE_TYPEDEF_OVERLOAD
    typedef ReferencedByRole_ptr _ptr_type;
    typedef ReferencedByRole_var _var_type;
    #endif

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

    static ReferencedByRole_ptr _nil()
    {
      return 0;
    }

    virtual void *_narrow_helper( const char *repoid );

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

// Stub for interface ReferencedByRole
class ReferencedByRole_stub:
  virtual public ReferencedByRole,
  virtual public ::CosGraphs::Role_stub
{
  public:
    virtual ~ReferencedByRole_stub();
  private:
    void operator=( const ReferencedByRole_stub& );
};

#ifndef MICO_CONF_NO_POA

class ReferencedByRole_stub_clp :
  virtual public ReferencedByRole_stub,
  virtual public ::CosGraphs::Role_stub_clp
{
  public:
    ReferencedByRole_stub_clp (PortableServer::POA_ptr, CORBA::Object_ptr);
    virtual ~ReferencedByRole_stub_clp ();
  protected:
    ReferencedByRole_stub_clp ();
  private:
    void operator=( const ReferencedByRole_stub_clp & );
};

#endif // MICO_CONF_NO_POA

}


#ifndef MICO_CONF_NO_POA



namespace POA_CosReference {


class Relationship : 
  virtual public POA_CosRelationships::Relationship
{
  public:
    virtual ~Relationship ();
    CosReference::Relationship_ptr _this ();
    bool dispatch (CORBA::StaticServerRequest_ptr);
    virtual void invoke (CORBA::StaticServerRequest_ptr);
    virtual CORBA::Boolean _is_a (const char *);
    virtual CORBA::InterfaceDef_ptr _get_interface ();
    virtual CORBA::RepositoryId _primary_interface (const PortableServer::ObjectId &, PortableServer::POA_ptr);

    virtual void * _narrow_helper (const char *);
    static Relationship * _narrow (PortableServer::Servant);
    virtual CORBA::Object_ptr _make_stub (PortableServer::POA_ptr, CORBA::Object_ptr);

  protected:
    Relationship () {};

  private:
    Relationship (const Relationship &);
    void operator= (const Relationship &);
};

class ReferencesRole : 
  virtual public POA_CosGraphs::Role
{
  public:
    virtual ~ReferencesRole ();
    CosReference::ReferencesRole_ptr _this ();
    bool dispatch (CORBA::StaticServerRequest_ptr);
    virtual void invoke (CORBA::StaticServerRequest_ptr);
    virtual CORBA::Boolean _is_a (const char *);
    virtual CORBA::InterfaceDef_ptr _get_interface ();
    virtual CORBA::RepositoryId _primary_interface (const PortableServer::ObjectId &, PortableServer::POA_ptr);

    virtual void * _narrow_helper (const char *);
    static ReferencesRole * _narrow (PortableServer::Servant);
    virtual CORBA::Object_ptr _make_stub (PortableServer::POA_ptr, CORBA::Object_ptr);

  protected:
    ReferencesRole () {};

  private:
    ReferencesRole (const ReferencesRole &);
    void operator= (const ReferencesRole &);
};

class ReferencedByRole : 
  virtual public POA_CosGraphs::Role
{
  public:
    virtual ~ReferencedByRole ();
    CosReference::ReferencedByRole_ptr _this ();
    bool dispatch (CORBA::StaticServerRequest_ptr);
    virtual void invoke (CORBA::StaticServerRequest_ptr);
    virtual CORBA::Boolean _is_a (const char *);
    virtual CORBA::InterfaceDef_ptr _get_interface ();
    virtual CORBA::RepositoryId _primary_interface (const PortableServer::ObjectId &, PortableServer::POA_ptr);

    virtual void * _narrow_helper (const char *);
    static ReferencedByRole * _narrow (PortableServer::Servant);
    virtual CORBA::Object_ptr _make_stub (PortableServer::POA_ptr, CORBA::Object_ptr);

  protected:
    ReferencedByRole () {};

  private:
    ReferencedByRole (const ReferencedByRole &);
    void operator= (const ReferencedByRole &);
};

}


#endif // MICO_CONF_NO_POA

extern CORBA::StaticTypeInfo *_marshaller_CosReference_Relationship;

extern CORBA::StaticTypeInfo *_marshaller_CosReference_ReferencesRole;

extern CORBA::StaticTypeInfo *_marshaller_CosReference_ReferencedByRole;

#endif
