dynany.cc

来自「编译工具」· CC 代码 · 共 2,941 行 · 第 1/5 页

CC
2,941
字号
DynamicAny::DynAny_ptrDynEnumImpl::copy(){  CHECK_NOT_DESTROYED;  DynEnumImpl* da = new DynEnumImpl(TypeCode_collector::duplicateRef(tc()),				    DYNANY_ROOT);  try {    da->assign(this);  }  catch(DynamicAny::DynAny::TypeMismatch&) {    OMNIORB_ASSERT(0);    // This should never happen since the types always match -- they    // are the same TypeCode.  }  catch(...) {    da->_NP_decrRefCount();    throw;  }  return da;}char*DynEnumImpl::get_as_string(){  CHECK_NOT_DESTROYED;  CORBA::ULong val;  {    if( !isValid() )      OMNIORB_THROW(BAD_PARAM, BAD_PARAM_InvalidDynAny, CORBA::COMPLETED_NO);				        pd_buf.rewindInputPtr();    val <<= pd_buf;  }  if( val >= actualTc()->NP_member_count() )    OMNIORB_THROW(BAD_PARAM, BAD_PARAM_InvalidDynAny, CORBA::COMPLETED_NO);  return CORBA::string_dup(actualTc()->NP_member_name(val));}voidDynEnumImpl::set_as_string(const char* value){  CHECK_NOT_DESTROYED;  if( !value )  OMNIORB_THROW(BAD_PARAM,			      BAD_PARAM_NullStringUnexpected,			      CORBA::COMPLETED_NO);  CORBA::Long index = actualTc()->NP_member_index(value);  if( index < 0 )  throw DynamicAny::DynAny::InvalidValue();  pd_buf.rewindPtrs();  CORBA::ULong(index) >>= pd_buf;  setValid();}CORBA::ULongDynEnumImpl::get_as_ulong(){  CHECK_NOT_DESTROYED;  CORBA::ULong val;  {    if( !isValid() )      OMNIORB_THROW(BAD_PARAM, BAD_PARAM_InvalidDynAny, CORBA::COMPLETED_NO);    pd_buf.rewindInputPtr();    val <<= pd_buf;  }  if( val >= actualTc()->NP_member_count() )    OMNIORB_THROW(BAD_PARAM, BAD_PARAM_InvalidDynAny, CORBA::COMPLETED_NO);  return val;}voidDynEnumImpl::set_as_ulong(CORBA::ULong value){  CHECK_NOT_DESTROYED;  if( value >= actualTc()->NP_member_count() )    throw DynamicAny::DynAny::InvalidValue();  pd_buf.rewindPtrs();  value >>= pd_buf;  setValid();}///////////////////////////////// exposed private interface /////////////////////////////////intDynEnumImpl::NP_nodetype() const{  return dt_enum;}voidDynEnumImpl::set_to_initial_value(){  set_as_ulong(0);}voidDynEnumImpl::_NP_incrRefCount(){  DynAnyImplBase::_NP_incrRefCount();}voidDynEnumImpl::_NP_decrRefCount(){  DynAnyImplBase::_NP_decrRefCount();}void*DynEnumImpl::_ptrToObjRef(const char* repoId){  if( omni::ptrStrMatch(repoId, DynAnyImpl::_PD_repoId) )    return (DynAnyImpl*) this;    if( omni::ptrStrMatch(repoId, DynAnyImplBase::_PD_repoId) )    return (DynAnyImplBase*) this;    if( omni::ptrStrMatch(repoId, DynamicAny::DynEnum::_PD_repoId) )    return (DynamicAny::DynEnum_ptr) this;    if( omni::ptrStrMatch(repoId, DynamicAny::DynAny::_PD_repoId) )    return (DynamicAny::DynAny_ptr) this;    if( omni::ptrStrMatch(repoId, CORBA::Object::_PD_repoId) )    return (CORBA::Object_ptr) this;  return 0;}//////////////////////////////////////////////////////////////////////////////////////////////// DynAnyConstrBase ////////////////////////////////////////////////////////////////////////////////////////////////DynAnyConstrBase::DynAnyConstrBase(TypeCode_base* tc, int nodetype,				   CORBA::Boolean is_root)  : DynAnyImplBase(tc, nodetype, is_root){  pd_n_components = 0;  pd_n_in_buf = 0;  pd_n_really_in_buf = 0;  pd_first_in_comp = 0;  pd_curr_index = -1;  pd_read_index = 0;}DynAnyConstrBase::~DynAnyConstrBase(){  for( unsigned i = pd_first_in_comp; i < pd_n_components; i++ )    pd_components[i]->_NP_decrRefCount();}//////////////////////// public interface ////////////////////////voidDynAnyConstrBase::assign(DynamicAny::DynAny_ptr da){  CHECK_NOT_DESTROYED;  if ( !DynamicAny::DynAny::PR_is_valid(da) )    OMNIORB_THROW(BAD_PARAM, BAD_PARAM_InvalidDynAny, CORBA::COMPLETED_NO);  if( CORBA::is_nil(da) )    throw DynamicAny::DynAny::InvalidValue();  DynAnyImplBase* daib = ToDynAnyImplBase(da);  if( !tc()->equivalent(daib->tc()) )    throw DynamicAny::DynAny::TypeMismatch();  // We do the copy via an intermediate buffer.  cdrMemoryStream buf;  if( !daib->copy_to(buf) )    throw DynamicAny::DynAny::InvalidValue();  if( !copy_from(buf) )    throw omniORB::fatalException(__FILE__,__LINE__,	 "DynAnyConstrBase::assign() - copy_from failed unexpectedly");}CORBA::BooleanDynAnyConstrBase::equal(DynamicAny::DynAny_ptr da){  CHECK_NOT_DESTROYED;  if ( !DynamicAny::DynAny::PR_is_valid(da) )    OMNIORB_THROW(BAD_PARAM, BAD_PARAM_InvalidDynAny, CORBA::COMPLETED_NO);  if( CORBA::is_nil(da) )    return 0;  DynAnyImplBase* daib = ToDynAnyImplBase(da);  if( !tc()->equivalent(daib->tc()) )    return 0;  DynAnyConstrBase* dacb = ToDynAnyConstrBase(da);  createComponent(0);  dacb->createComponent(0);  for (unsigned i=0; i < pd_n_components; i++) {    if (!pd_components[i]->equal(dacb->pd_components[i]))      return 0;  }  return 1;}voidDynAnyConstrBase::insert_boolean(CORBA::Boolean value){  CHECK_NOT_DESTROYED;  writeCurrent(CORBA::tk_boolean).marshalBoolean(value);}voidDynAnyConstrBase::insert_octet(CORBA::Octet value){  CHECK_NOT_DESTROYED;  writeCurrent(CORBA::tk_octet).marshalOctet(value);}voidDynAnyConstrBase::insert_char(CORBA::Char value){  CHECK_NOT_DESTROYED;  writeCurrent(CORBA::tk_char).marshalChar(value);}voidDynAnyConstrBase::insert_short(CORBA::Short value){  CHECK_NOT_DESTROYED;  value >>= writeCurrent(CORBA::tk_short);}voidDynAnyConstrBase::insert_ushort(CORBA::UShort value){  CHECK_NOT_DESTROYED;  value >>= writeCurrent(CORBA::tk_ushort);}voidDynAnyConstrBase::insert_long(CORBA::Long value){  CHECK_NOT_DESTROYED;  value >>= writeCurrent(CORBA::tk_long);}voidDynAnyConstrBase::insert_ulong(CORBA::ULong value){  CHECK_NOT_DESTROYED;  value >>= writeCurrent(CORBA::tk_ulong);}#ifndef NO_FLOATvoidDynAnyConstrBase::insert_float(CORBA::Float value){  CHECK_NOT_DESTROYED;  value >>= writeCurrent(CORBA::tk_float);}voidDynAnyConstrBase::insert_double(CORBA::Double value){  CHECK_NOT_DESTROYED;  value >>= writeCurrent(CORBA::tk_double);}#endifvoidDynAnyConstrBase::insert_string(const char* value){  CHECK_NOT_DESTROYED;  if( !value || pd_curr_index < 0 )    throw DynamicAny::DynAny::InvalidValue();  TypeCode_base* tc =    (TypeCode_base*) TypeCode_base::NP_expand(nthComponentTC(pd_curr_index));  if( tc->NP_kind() != CORBA::tk_string )    throw DynamicAny::DynAny::TypeMismatch();  CORBA::ULong maxlen = tc->NP_length();  cdrMemoryStream& buf = writeCurrent(CORBA::tk_string);  try {    buf.marshalString(value,maxlen);  }  catch (CORBA::MARSHAL& ex) {    if (ex.minor() == MARSHAL_StringIsTooLong)      throw DynamicAny::DynAny::InvalidValue();    else      throw;  }}voidDynAnyConstrBase::insert_reference(CORBA::Object_ptr value){  CHECK_NOT_DESTROYED;  if ( !CORBA::Object::_PR_is_valid(value) )    OMNIORB_THROW(BAD_PARAM, BAD_PARAM_InvalidObjectRef, CORBA::COMPLETED_NO);  CORBA::Object::_marshalObjRef(value, writeCurrent(CORBA::tk_objref));}voidDynAnyConstrBase::insert_typecode(CORBA::TypeCode_ptr value){  CHECK_NOT_DESTROYED;  if ( !CORBA::TypeCode::PR_is_valid(value) )    OMNIORB_THROW(BAD_PARAM, BAD_PARAM_InvalidTypeCode, CORBA::COMPLETED_NO);  if( CORBA::is_nil(value) )  throw DynamicAny::DynAny::InvalidValue();  CORBA::TypeCode::marshalTypeCode(value, writeCurrent(CORBA::tk_TypeCode));}#ifdef HAS_LongLongvoidDynAnyConstrBase::insert_longlong(CORBA::LongLong value){  CHECK_NOT_DESTROYED;  value >>= writeCurrent(CORBA::tk_longlong);}voidDynAnyConstrBase::insert_ulonglong(CORBA::ULongLong value){  CHECK_NOT_DESTROYED;  value >>= writeCurrent(CORBA::tk_ulonglong);}#endif#ifdef HAS_LongDoublevoidDynAnyConstrBase::insert_longdouble(CORBA::LongDouble value){  CHECK_NOT_DESTROYED;  value >>= writeCurrent(CORBA::tk_longdouble);}#endifvoidDynAnyConstrBase::insert_wchar(CORBA::WChar value){  CHECK_NOT_DESTROYED;  writeCurrent(CORBA::tk_wchar).marshalWChar(value);}voidDynAnyConstrBase::insert_wstring(const CORBA::WChar* value){  CHECK_NOT_DESTROYED;  if( !value || pd_curr_index < 0 )    throw DynamicAny::DynAny::InvalidValue();  TypeCode_base* tc =    (TypeCode_base*) TypeCode_base::NP_expand(nthComponentTC(pd_curr_index));  if( tc->NP_kind() != CORBA::tk_wstring )    throw DynamicAny::DynAny::TypeMismatch();  CORBA::ULong maxlen = tc->NP_length();  cdrMemoryStream& buf = writeCurrent(CORBA::tk_wstring);  try {    buf.marshalWString(value,maxlen);  }  catch (CORBA::MARSHAL& ex) {    if (ex.minor() == MARSHAL_WStringIsTooLong)      throw DynamicAny::DynAny::InvalidValue();    else      throw;  }}voidDynAnyConstrBase::insert_any(const CORBA::Any& value){  CHECK_NOT_DESTROYED;  value >>= writeCurrent(CORBA::tk_any);}voidDynAnyConstrBase::insert_dyn_any(DynamicAny::DynAny_ptr value){  CHECK_NOT_DESTROYED;  CORBA::Any_var a(to_any());  a.in() >>= writeCurrent(CORBA::tk_any);}CORBA::BooleanDynAnyConstrBase::get_boolean(){  CHECK_NOT_DESTROYED;  return readCurrent(CORBA::tk_boolean).unmarshalBoolean();}CORBA::OctetDynAnyConstrBase::get_octet(){  CHECK_NOT_DESTROYED;  return readCurrent(CORBA::tk_octet).unmarshalOctet();}CORBA::CharDynAnyConstrBase::get_char(){  CHECK_NOT_DESTROYED;  return readCurrent(CORBA::tk_char).unmarshalChar();}CORBA::ShortDynAnyConstrBase::get_short(){  CHECK_NOT_DESTROYED;  CORBA::Short value;  value <<= readCurrent(CORBA::tk_short);  return value;}CORBA::UShortDynAnyConstrBase::get_ushort(){  CHECK_NOT_DESTROYED;  CORBA::UShort value;  value <<= readCurrent(CORBA::tk_ushort);  return value;}CORBA::LongDynAnyConstrBase::get_long(){  CHECK_NOT_DESTROYED;  CORBA::Long value;  value <<= readCurrent(CORBA::tk_long);  return value;}CORBA::ULongDynAnyConstrBase::get_ulong(){  CHECK_NOT_DESTROYED;  CORBA::ULong value;  value <<= readCurrent(CORBA::tk_ulong);  return value;}#ifndef NO_FLOATCORBA::FloatDynAnyConstrBase::get_float(){  CHECK_NOT_DESTROYED;  CORBA::Float value;  value <<= readCurrent(CORBA::tk_float);  return value;}CORBA::DoubleDynAnyConstrBase::get_double(){  CHECK_NOT_DESTROYED;  CORBA::Double value;  value <<= readCurrent(CORBA::tk_double);  return value;}#endifchar*DynAnyConstrBase::get_string(){  CHECK_NOT_DESTROYED;  cdrMemoryStream& buf = readCurrent(CORBA::tk_string);  TypeCode_base* tc = (TypeCode_base*)TypeCode_base::NP_expand(nthComponentTC(pd_curr_index));  CORBA::ULong maxlen = tc->NP_length();  try {    char* value = buf.unmarshalString(maxlen);    return value;  }  catch (CORBA::MARSHAL& ex) {    if (ex.minor() == MARSHAL_StringIsTooLong)      throw DynamicAny::DynAny::InvalidValue();    else      throw;  }#ifndef __DECCXX  return 0;#endif}CORBA::Object_ptrDynAnyConstrBase::get_reference(){  CHECK_NOT_DESTROYED;  return CORBA::Object::_unmarshalObjRef(readCurrent(CORBA::tk_objref));}CORBA::TypeCode_ptrDynAnyConstrBase::get_typecode(){  CHECK_NOT_DESTROYED;  return CORBA::TypeCode::unmarshalTypeCode(readCurrent(CORBA::tk_TypeCode));}#ifdef HAS_LongLongCORBA::LongLongDynAnyConstrBase::get_longlong(){  CHECK_NOT_DESTROYED;  CORBA::LongLong value;  value <<= readCurrent(CORBA::tk_longlong);  return value;}CORBA::ULongLongDynAnyConstrBase::get_ulonglong(){  CHECK_NOT_DESTROYED;  CORBA::ULongLong value;  value <<= readCurrent(CORBA::tk_ulonglong);  return value;}#endif#ifdef HAS_LongDoubleCORBA::LongDoubleDynAnyConstrBase::get_longdouble(){  CHECK_NOT_DESTROYED;  CORBA::LongDouble value;  value <<= readCurrent(CORBA::tk_longdouble);  return value;}#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?