// This file is generated by omniidl (C++ backend)- omniORB_4_0. Do not edit.

#include "Data.hh"
#include <omniORB4/IOP_S.h>
#include <omniORB4/IOP_C.h>
#include <omniORB4/callDescriptor.h>
#include <omniORB4/callHandle.h>
#include <omniORB4/objTracker.h>


OMNI_USING_NAMESPACE(omni)

static const char* _0RL_library_version = omniORB_4_0;



Data::ServiceA_ptr Data::ServiceA_Helper::_nil() {
  return ::Data::ServiceA::_nil();
}

CORBA::Boolean Data::ServiceA_Helper::is_nil(::Data::ServiceA_ptr p) {
  return CORBA::is_nil(p);

}

void Data::ServiceA_Helper::release(::Data::ServiceA_ptr p) {
  CORBA::release(p);
}

void Data::ServiceA_Helper::duplicate(::Data::ServiceA_ptr p) {
  if( p && !p->_NP_is_nil() )  omni::duplicateObjRef(p);
}

void Data::ServiceA_Helper::marshalObjRef(::Data::ServiceA_ptr obj, cdrStream& s) {
  ::Data::ServiceA::_marshalObjRef(obj, s);
}

Data::ServiceA_ptr Data::ServiceA_Helper::unmarshalObjRef(cdrStream& s) {
  return ::Data::ServiceA::_unmarshalObjRef(s);
}

Data::ServiceA_ptr
Data::ServiceA::_duplicate(::Data::ServiceA_ptr obj)
{
  if( obj && !obj->_NP_is_nil() )  omni::duplicateObjRef(obj);

  return obj;
}


Data::ServiceA_ptr
Data::ServiceA::_narrow(CORBA::Object_ptr obj)
{
  if( !obj || obj->_NP_is_nil() || obj->_NP_is_pseudo() ) return _nil();
  _ptr_type e = (_ptr_type) obj->_PR_getobj()->_realNarrow(_PD_repoId);
  return e ? e : _nil();
}


Data::ServiceA_ptr
Data::ServiceA::_unchecked_narrow(CORBA::Object_ptr obj)
{
  if( !obj || obj->_NP_is_nil() || obj->_NP_is_pseudo() ) return _nil();
  _ptr_type e = (_ptr_type) obj->_PR_getobj()->_uncheckedNarrow(_PD_repoId);
  return e ? e : _nil();
}


Data::ServiceA_ptr
Data::ServiceA::_nil()
{
  static _objref_ServiceA* _the_nil_ptr = 0;
  if( !_the_nil_ptr ) {
    omni::nilRefLock().lock();
    if( !_the_nil_ptr ) {
      _the_nil_ptr = new _objref_ServiceA;
      registerNilCorbaObject(_the_nil_ptr);
    }
    omni::nilRefLock().unlock();
  }
  return _the_nil_ptr;
}

const char* Data::ServiceA::_PD_repoId = "IDL:Data/ServiceA:1.0";


Data::_objref_ServiceA::~_objref_ServiceA() {}


Data::_objref_ServiceA::_objref_ServiceA(omniIOR* ior, omniIdentity* id) :
   
   omniObjRef(::Data::ServiceA::_PD_repoId, ior, id, 1)
{
  _PR_setobj(this);
}

void*
Data::_objref_ServiceA::_ptrToObjRef(const char* id)
{
  if( id == ::Data::ServiceA::_PD_repoId )
    return (::Data::ServiceA_ptr) this;
  
  if( id == CORBA::Object::_PD_repoId )
    return (CORBA::Object_ptr) this;

  if( omni::strMatch(id, ::Data::ServiceA::_PD_repoId) )
    return (::Data::ServiceA_ptr) this;
  
  if( omni::strMatch(id, CORBA::Object::_PD_repoId) )
    return (CORBA::Object_ptr) this;

  return 0;
}

// Proxy call descriptor class. Mangled signature:
//  _cboolean_i_clong_n_clong_o_clong
class _0RL_cd_3df33e9ac38f7673_00000000
  : public omniCallDescriptor
{
public:
  inline _0RL_cd_3df33e9ac38f7673_00000000(LocalCallFn lcfn,const char* op,size_t oplen,_CORBA_Boolean upcall=0):
     omniCallDescriptor(lcfn, op, oplen, 0, 0, 0, upcall) {}
  
  void marshalArguments(cdrStream&);
  void unmarshalArguments(cdrStream&);

  void unmarshalReturnedValues(cdrStream&);
  void marshalReturnedValues(cdrStream&);
  
  
  CORBA::Long arg_0;
  CORBA::Long arg_1_;
  CORBA::Long* arg_1;
  CORBA::Long arg_2;
  CORBA::Boolean result;
};

void _0RL_cd_3df33e9ac38f7673_00000000::marshalArguments(cdrStream& _n)
{
  arg_0 >>= _n;
  *arg_1 >>= _n;

}

void _0RL_cd_3df33e9ac38f7673_00000000::unmarshalArguments(cdrStream& _n)
{
  (CORBA::Long&)arg_0 <<= _n;
  (CORBA::Long&)arg_1_ <<= _n;
  arg_1 = &arg_1_;

}

void _0RL_cd_3df33e9ac38f7673_00000000::marshalReturnedValues(cdrStream& _n)
{
  _n.marshalBoolean(result);
  *arg_1 >>= _n;
  arg_2 >>= _n;

}

void _0RL_cd_3df33e9ac38f7673_00000000::unmarshalReturnedValues(cdrStream& _n)
{
  result = _n.unmarshalBoolean();
  (CORBA::Long&)*arg_1 <<= _n;
  (CORBA::Long&)arg_2 <<= _n;

}

// Local call call-back function.
static void
_0RL_lcfn_3df33e9ac38f7673_10000000(omniCallDescriptor* cd, omniServant* svnt)
{
  _0RL_cd_3df33e9ac38f7673_00000000* tcd = (_0RL_cd_3df33e9ac38f7673_00000000*)cd;
  Data::_impl_ServiceA* impl = (Data::_impl_ServiceA*) svnt->_ptrToInterface(Data::ServiceA::_PD_repoId);
  tcd->result = impl->CallServiceRoutineA(tcd->arg_0, *tcd->arg_1, tcd->arg_2);


}

CORBA::Boolean Data::_objref_ServiceA::CallServiceRoutineA(CORBA::Long num1, CORBA::Long& num2, CORBA::Long& retNum)
{
  _0RL_cd_3df33e9ac38f7673_00000000 _call_desc(_0RL_lcfn_3df33e9ac38f7673_10000000, "CallServiceRoutineA", 20);
  _call_desc.arg_0 = num1;
  _call_desc.arg_1 = &(CORBA::Long&) num2;

  _invoke(_call_desc);
  retNum = _call_desc.arg_2;
  return _call_desc.result;


}
// Proxy call descriptor class. Mangled signature:
//  _cboolean_n_clong_n_clong
class _0RL_cd_3df33e9ac38f7673_20000000
  : public omniCallDescriptor
{
public:
  inline _0RL_cd_3df33e9ac38f7673_20000000(LocalCallFn lcfn,const char* op,size_t oplen,_CORBA_Boolean upcall=0):
     omniCallDescriptor(lcfn, op, oplen, 0, 0, 0, upcall) {}
  
  void marshalArguments(cdrStream&);
  void unmarshalArguments(cdrStream&);

  void unmarshalReturnedValues(cdrStream&);
  void marshalReturnedValues(cdrStream&);
  
  
  CORBA::Long arg_0_;
  CORBA::Long* arg_0;
  CORBA::Long arg_1_;
  CORBA::Long* arg_1;
  CORBA::Boolean result;
};

void _0RL_cd_3df33e9ac38f7673_20000000::marshalArguments(cdrStream& _n)
{
  *arg_0 >>= _n;
  *arg_1 >>= _n;

}

void _0RL_cd_3df33e9ac38f7673_20000000::unmarshalArguments(cdrStream& _n)
{
  (CORBA::Long&)arg_0_ <<= _n;
  arg_0 = &arg_0_;
  (CORBA::Long&)arg_1_ <<= _n;
  arg_1 = &arg_1_;

}

void _0RL_cd_3df33e9ac38f7673_20000000::marshalReturnedValues(cdrStream& _n)
{
  _n.marshalBoolean(result);
  *arg_0 >>= _n;
  *arg_1 >>= _n;

}

void _0RL_cd_3df33e9ac38f7673_20000000::unmarshalReturnedValues(cdrStream& _n)
{
  result = _n.unmarshalBoolean();
  (CORBA::Long&)*arg_0 <<= _n;
  (CORBA::Long&)*arg_1 <<= _n;

}

// Local call call-back function.
static void
_0RL_lcfn_3df33e9ac38f7673_30000000(omniCallDescriptor* cd, omniServant* svnt)
{
  _0RL_cd_3df33e9ac38f7673_20000000* tcd = (_0RL_cd_3df33e9ac38f7673_20000000*)cd;
  Data::_impl_ServiceA* impl = (Data::_impl_ServiceA*) svnt->_ptrToInterface(Data::ServiceA::_PD_repoId);
  tcd->result = impl->CallServiceRoutineB(*tcd->arg_0, *tcd->arg_1);


}

CORBA::Boolean Data::_objref_ServiceA::CallServiceRoutineB(CORBA::Long& num1, CORBA::Long& num2)
{
  _0RL_cd_3df33e9ac38f7673_20000000 _call_desc(_0RL_lcfn_3df33e9ac38f7673_30000000, "CallServiceRoutineB", 20);
  _call_desc.arg_0 = &(CORBA::Long&) num1;
  _call_desc.arg_1 = &(CORBA::Long&) num2;

  _invoke(_call_desc);
  return _call_desc.result;


}
// Proxy call descriptor class. Mangled signature:
//  _cboolean_n_clong_i_cData_mNumberSeq
class _0RL_cd_3df33e9ac38f7673_40000000
  : public omniCallDescriptor
{
public:
  inline _0RL_cd_3df33e9ac38f7673_40000000(LocalCallFn lcfn,const char* op,size_t oplen,_CORBA_Boolean upcall=0):
     omniCallDescriptor(lcfn, op, oplen, 0, 0, 0, upcall) {}
  
  void marshalArguments(cdrStream&);
  void unmarshalArguments(cdrStream&);

  void unmarshalReturnedValues(cdrStream&);
  void marshalReturnedValues(cdrStream&);
  
  
  CORBA::Long arg_0_;
  CORBA::Long* arg_0;
  Data::NumberSeq_var arg_1_;
  const Data::NumberSeq* arg_1;
  CORBA::Boolean result;
};

void _0RL_cd_3df33e9ac38f7673_40000000::marshalArguments(cdrStream& _n)
{
  *arg_0 >>= _n;
  (const Data::NumberSeq&) *arg_1 >>= _n;

}

void _0RL_cd_3df33e9ac38f7673_40000000::unmarshalArguments(cdrStream& _n)
{
  (CORBA::Long&)arg_0_ <<= _n;
  arg_0 = &arg_0_;
  arg_1_ = new Data::NumberSeq;
  (Data::NumberSeq&)arg_1_ <<= _n;
  arg_1 = &arg_1_.in();

}

void _0RL_cd_3df33e9ac38f7673_40000000::marshalReturnedValues(cdrStream& _n)
{
  _n.marshalBoolean(result);
  *arg_0 >>= _n;

}

void _0RL_cd_3df33e9ac38f7673_40000000::unmarshalReturnedValues(cdrStream& _n)
{
  result = _n.unmarshalBoolean();
  (CORBA::Long&)*arg_0 <<= _n;

}

// Local call call-back function.
static void
_0RL_lcfn_3df33e9ac38f7673_50000000(omniCallDescriptor* cd, omniServant* svnt)
{
  _0RL_cd_3df33e9ac38f7673_40000000* tcd = (_0RL_cd_3df33e9ac38f7673_40000000*)cd;
  Data::_impl_ServiceA* impl = (Data::_impl_ServiceA*) svnt->_ptrToInterface(Data::ServiceA::_PD_repoId);
  tcd->result = impl->CallServiceRoutineC(*tcd->arg_0, *tcd->arg_1);


}

CORBA::Boolean Data::_objref_ServiceA::CallServiceRoutineC(CORBA::Long& sum, const NumberSeq& numberList)
{
  _0RL_cd_3df33e9ac38f7673_40000000 _call_desc(_0RL_lcfn_3df33e9ac38f7673_50000000, "CallServiceRoutineC", 20);
  _call_desc.arg_0 = &(CORBA::Long&) sum;
  _call_desc.arg_1 = &(NumberSeq&) numberList;

  _invoke(_call_desc);
  return _call_desc.result;


}
Data::_pof_ServiceA::~_pof_ServiceA() {}


omniObjRef*
Data::_pof_ServiceA::newObjRef(omniIOR* ior, omniIdentity* id)
{
  return new ::Data::_objref_ServiceA(ior, id);
}


CORBA::Boolean
Data::_pof_ServiceA::is_a(const char* id) const
{
  if( omni::ptrStrMatch(id, ::Data::ServiceA::_PD_repoId) )
    return 1;
  
  return 0;
}

const Data::_pof_ServiceA _the_pof_Data_mServiceA;

Data::_impl_ServiceA::~_impl_ServiceA() {}


CORBA::Boolean
Data::_impl_ServiceA::_dispatch(omniCallHandle& _handle)
{
  const char* op = _handle.operation_name();

  if( omni::strMatch(op, "CallServiceRoutineA") ) {

    _0RL_cd_3df33e9ac38f7673_00000000 _call_desc(_0RL_lcfn_3df33e9ac38f7673_10000000, "CallServiceRoutineA", 20, 1);
    
    _handle.upcall(this,_call_desc);
    return 1;
  }

  if( omni::strMatch(op, "CallServiceRoutineB") ) {

    _0RL_cd_3df33e9ac38f7673_20000000 _call_desc(_0RL_lcfn_3df33e9ac38f7673_30000000, "CallServiceRoutineB", 20, 1);
    
    _handle.upcall(this,_call_desc);
    return 1;
  }

  if( omni::strMatch(op, "CallServiceRoutineC") ) {

    _0RL_cd_3df33e9ac38f7673_40000000 _call_desc(_0RL_lcfn_3df33e9ac38f7673_50000000, "CallServiceRoutineC", 20, 1);
    
    _handle.upcall(this,_call_desc);
    return 1;
  }


  return 0;
}

void*
Data::_impl_ServiceA::_ptrToInterface(const char* id)
{
  if( id == ::Data::ServiceA::_PD_repoId )
    return (_impl_ServiceA*) this;
  
  if( id == CORBA::Object::_PD_repoId )
    return (void*) 1;

  if( omni::strMatch(id, ::Data::ServiceA::_PD_repoId) )
    return (_impl_ServiceA*) this;
  
  if( omni::strMatch(id, CORBA::Object::_PD_repoId) )
    return (void*) 1;
  return 0;
}

const char*
Data::_impl_ServiceA::_mostDerivedRepoId()
{
  return ::Data::ServiceA::_PD_repoId;
}

POA_Data::ServiceA::~ServiceA() {}

