// This file is generated by omniidl2- omniORB_2_8. Do not edit.
#include "echo.hh"
#include <omniORB2/tcDescriptor.h>

static const char* _0RL_library_version = omniORB_2_8;


const CORBA::TypeCode_ptr _tc_Echo = CORBA::TypeCode::PR_interface_tc("IDL:Echo:1.0", "Echo");

static void
_0RL_tcParser_setObjectPtr_Echo(tcObjrefDesc *_desc, CORBA::Object_ptr _ptr)
{
  Echo_ptr _p = Echo::_narrow(_ptr);
  Echo_ptr* pp = (Echo_ptr*)_desc->opq_objref;
  if (_desc->opq_release && !CORBA::is_nil(*pp)) CORBA::release(*pp);
  *pp = _p;
  CORBA::release(_ptr);
}

static CORBA::Object_ptr
_0RL_tcParser_getObjectPtr_Echo(tcObjrefDesc *_desc)
{
  return (CORBA::Object_ptr) *((Echo_ptr*)_desc->opq_objref);
}

void _0RL_buildDesc_cEcho(tcDescriptor& _desc, const _CORBA_ObjRef_Member<Echo,Echo_Helper>& _data)
{
  _desc.p_objref.opq_objref = (void*) &_data._ptr;
  _desc.p_objref.opq_release = _data.pd_rel;
  _desc.p_objref.setObjectPtr = _0RL_tcParser_setObjectPtr_Echo;
  _desc.p_objref.getObjectPtr = _0RL_tcParser_getObjectPtr_Echo;
}


void _0RL_delete_Echo(void* _data) {
  Echo_ptr _0RL_t = (Echo_ptr) _data;
  CORBA::release(_0RL_t);
}

void operator<<=(CORBA::Any& _a, Echo_ptr _s) {
  tcDescriptor tcd;
  _CORBA_ObjRef_Member<Echo,Echo_Helper> tmp(_s,0);
  _0RL_buildDesc_cEcho(tcd, tmp);
  _a.PR_packFrom(_tc_Echo, &tcd);
}

CORBA::Boolean operator>>=(const CORBA::Any& _a, Echo_ptr& _s) {
  Echo_ptr sp = (Echo_ptr) _a.PR_getCachedData();
  if (sp == 0) {
    tcDescriptor tcd;
    _CORBA_ObjRef_Member<Echo,Echo_Helper> tmp;
    _0RL_buildDesc_cEcho(tcd, tmp);
    if( _a.PR_unpackTo(_tc_Echo, &tcd) ) {
      if (!omniORB::omniORB_27_CompatibleAnyExtraction) {
        ((CORBA::Any*)&_a)->PR_setCachedData((void*)tmp._ptr,_0RL_delete_Echo);
      }
      _s = tmp._ptr;
      tmp._ptr = Echo::_nil(); return 1;
    } else {
      _s = Echo::_nil(); return 0;
    }
  }
  else {
    CORBA::TypeCode_var tc = _a.type();
    if (tc->equivalent(_tc_Echo)) {
    _s = sp; return 1;
    }
    else {
    _s = Echo::_nil(); return 0;
    }
  }
}
