// **********************************************************************
//
// 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_ServiceInfo_h__
#define __OB_ServiceInfo_h__

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


#include <OB/ServiceInfo_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_CORBA
{

} // End of namespace OBStubImpl_CORBA

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

//
// IDL:omg.org/CORBA/ServiceType:1.0
//
typedef ::CORBA::UShort ServiceType;
typedef ::CORBA::UShort_out ServiceType_out;
OB_IMPORT extern OB::TypeCodeConst _tc_ServiceType;

//
// IDL:omg.org/CORBA/ServiceOption:1.0
//
typedef ::CORBA::ULong ServiceOption;
typedef ::CORBA::ULong_out ServiceOption_out;
OB_IMPORT extern OB::TypeCodeConst _tc_ServiceOption;

//
// IDL:omg.org/CORBA/ServiceDetailType:1.0
//
typedef ::CORBA::ULong ServiceDetailType;
typedef ::CORBA::ULong_out ServiceDetailType_out;
OB_IMPORT extern OB::TypeCodeConst _tc_ServiceDetailType;

//
// IDL:omg.org/CORBA/Security:1.0
//
const ServiceType Security = 1;

//
// IDL:omg.org/CORBA/ServiceDetail:1.0
//
struct ServiceDetail;
typedef OB::VarVar< ServiceDetail > ServiceDetail_var;
typedef OB::VarOut< ServiceDetail > ServiceDetail_out;

struct ServiceDetail
{
#ifdef OB_CLEAR_MEM
    ServiceDetail();
#else
    ServiceDetail() { }
#endif
    ServiceDetail(const ServiceDetail&);
    ServiceDetail& operator=(const ServiceDetail&);

    typedef ServiceDetail_var _var_type;

    ServiceDetailType service_detail_type;
    class OBUnique_service_detail { };
    typedef OB::FixSeq< ::CORBA::Octet, OBUnique_service_detail > _service_detail_seq;
    _service_detail_seq service_detail;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(ServiceDetail&, OB::InputStreamImpl*);
};

OB_IMPORT extern OB::TypeCodeConst _tc_ServiceDetail;

//
// IDL:omg.org/CORBA/ServiceInformation:1.0
//
struct ServiceInformation;
typedef OB::VarVar< ServiceInformation > ServiceInformation_var;
typedef OB::VarOut< ServiceInformation > ServiceInformation_out;

struct ServiceInformation
{
    ServiceInformation() { }
    ServiceInformation(const ServiceInformation&);
    ServiceInformation& operator=(const ServiceInformation&);

    typedef ServiceInformation_var _var_type;

    class OBUnique_service_options { };
    typedef OB::FixSeq< ServiceOption, OBUnique_service_options > _service_options_seq;
    _service_options_seq service_options;
    class OBUnique_service_details { };
    typedef OB::VarSeq< ServiceDetail, OBUnique_service_details > _service_details_seq;
    _service_details_seq service_details;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(ServiceInformation&, OB::InputStreamImpl*);
};

OB_IMPORT extern OB::TypeCodeConst _tc_ServiceInformation;

} // End of namespace CORBA

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

} // End of namespace OBProxy_CORBA

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

} // End of namespace OBStubImpl_CORBA

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

} // End of namespace OBMarshalStubImpl_CORBA

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

} // End of namespace OBV_CORBA

//
// IDL:omg.org/CORBA/ServiceDetail:1.0
//
void operator<<=(::CORBA::Any&, CORBA::ServiceDetail*);
void operator<<=(::CORBA::Any&, const CORBA::ServiceDetail&);
CORBA::Boolean operator>>=(const ::CORBA::Any&, const CORBA::ServiceDetail*&);

inline void
operator<<=(::CORBA::Any_var& any, CORBA::ServiceDetail* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(::CORBA::Any_var& any, const CORBA::ServiceDetail& val)
{
    any.inout() <<= val;
}

inline ::CORBA::Boolean
operator>>=(const ::CORBA::Any_var& any, const CORBA::ServiceDetail*& val)
{
    return any.in() >>= val;
}

//
// IDL:omg.org/CORBA/ServiceInformation:1.0
//
void operator<<=(::CORBA::Any&, CORBA::ServiceInformation*);
void operator<<=(::CORBA::Any&, const CORBA::ServiceInformation&);
CORBA::Boolean operator>>=(const ::CORBA::Any&, const CORBA::ServiceInformation*&);

inline void
operator<<=(::CORBA::Any_var& any, CORBA::ServiceInformation* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(::CORBA::Any_var& any, const CORBA::ServiceInformation& val)
{
    any.inout() <<= val;
}

inline ::CORBA::Boolean
operator>>=(const ::CORBA::Any_var& any, const CORBA::ServiceInformation*& val)
{
    return any.in() >>= val;
}

#endif
