dynany.cc

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

CC
2,941
字号
  value >>= doWrite(CORBA::tk_ulonglong);}#endif#ifdef HAS_LongDoublevoidDynAnyImpl::insert_longdouble(CORBA::LongDouble value){  CHECK_NOT_DESTROYED;  value >>= doWrite(CORBA::tk_longdouble);}#endifvoidDynAnyImpl::insert_wchar(CORBA::WChar value){  CHECK_NOT_DESTROYED;  doWrite(CORBA::tk_wchar).marshalWChar(value);}voidDynAnyImpl::insert_wstring(const CORBA::WChar* value){  if( !value )    throw DynamicAny::DynAny::InvalidValue();  if ( tckind() != CORBA::tk_wstring )    throw DynamicAny::DynAny::TypeMismatch();  CORBA::ULong maxlen = actualTc()->NP_length();  cdrMemoryStream& buf = doWrite(CORBA::tk_wstring);  try {    buf.marshalWString(value,maxlen);  }  catch (CORBA::MARSHAL& ex) {    if (ex.minor() == MARSHAL_WStringIsTooLong)      throw DynamicAny::DynAny::InvalidValue();    else      throw;  }}voidDynAnyImpl::insert_any(const CORBA::Any& value){  CHECK_NOT_DESTROYED;  value >>= doWrite(CORBA::tk_any);}voidDynAnyImpl::insert_dyn_any(DynamicAny::DynAny_ptr value){  CHECK_NOT_DESTROYED;  CORBA::Any_var a(to_any());  a.in() >>= doWrite(CORBA::tk_any);}CORBA::BooleanDynAnyImpl::get_boolean(){  CHECK_NOT_DESTROYED;  return doRead(CORBA::tk_boolean).unmarshalBoolean();}CORBA::OctetDynAnyImpl::get_octet(){  CHECK_NOT_DESTROYED;  return doRead(CORBA::tk_octet).unmarshalOctet();}CORBA::CharDynAnyImpl::get_char(){  CHECK_NOT_DESTROYED;  return doRead(CORBA::tk_char).unmarshalChar();}CORBA::ShortDynAnyImpl::get_short(){  CHECK_NOT_DESTROYED;  CORBA::Short value;  value <<= doRead(CORBA::tk_short);  return value;}CORBA::UShortDynAnyImpl::get_ushort(){  CHECK_NOT_DESTROYED;  CORBA::UShort value;  value <<= doRead(CORBA::tk_ushort);  return value;}CORBA::LongDynAnyImpl::get_long(){  CHECK_NOT_DESTROYED;  CORBA::Long value;  value <<= doRead(CORBA::tk_long);  return value;}CORBA::ULongDynAnyImpl::get_ulong(){  CHECK_NOT_DESTROYED;  CORBA::ULong value;  value <<= doRead(CORBA::tk_ulong);  return value;}#ifndef NO_FLOATCORBA::FloatDynAnyImpl::get_float(){  CHECK_NOT_DESTROYED;  CORBA::Float value;  value <<= doRead(CORBA::tk_float);  return value;}CORBA::DoubleDynAnyImpl::get_double(){  CHECK_NOT_DESTROYED;  CORBA::Double value;  value <<= doRead(CORBA::tk_double);  return value;}#endifchar*DynAnyImpl::get_string(){  CHECK_NOT_DESTROYED;  cdrMemoryStream& buf = doRead(CORBA::tk_string);  CORBA::ULong length;  CORBA::ULong maxlen = actualTc()->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_ptrDynAnyImpl::get_reference(){  CHECK_NOT_DESTROYED;  return CORBA::Object::_unmarshalObjRef(doRead(CORBA::tk_objref));}CORBA::TypeCode_ptrDynAnyImpl::get_typecode(){  CHECK_NOT_DESTROYED;  return CORBA::TypeCode::unmarshalTypeCode(doRead(CORBA::tk_TypeCode));}#ifdef HAS_LongLongCORBA::LongLongDynAnyImpl::get_longlong(){  CHECK_NOT_DESTROYED;  CORBA::LongLong value;  value <<= doRead(CORBA::tk_longlong);  return value;}CORBA::ULongLongDynAnyImpl::get_ulonglong(){  CHECK_NOT_DESTROYED;  CORBA::ULongLong value;  value <<= doRead(CORBA::tk_ulonglong);  return value;}#endif#ifdef HAS_LongDoubleCORBA::LongDoubleDynAnyImpl::get_longdouble(){  CHECK_NOT_DESTROYED;  CORBA::LongDouble value;  value <<= doRead(CORBA::tk_longdouble);  return value;}#endifCORBA::WCharDynAnyImpl::get_wchar(){  CHECK_NOT_DESTROYED;  return doRead(CORBA::tk_wchar).unmarshalWChar();}CORBA::WChar*DynAnyImpl::get_wstring(){  CHECK_NOT_DESTROYED;  cdrMemoryStream& buf = doRead(CORBA::tk_wstring);  CORBA::ULong length;  CORBA::ULong maxlen = actualTc()->NP_length();  CORBA::WChar* value = buf.unmarshalWString(maxlen);  return value;}CORBA::Any*DynAnyImpl::get_any(){  cdrMemoryStream& buf = doRead(CORBA::tk_any);  CORBA::Any* value = new CORBA::Any();  *value <<= buf;  return value;}DynamicAny::DynAny_ptrDynAnyImpl::get_dyn_any(){  // This could be made faster by short-cutting the Any step, but it's  // probably not worth the effort.  cdrMemoryStream& buf = doRead(CORBA::tk_any);  CORBA::Any a;  a <<= buf;  return factory_create_dyn_any(a);}// CORBA 2.5 sequence operations#define SEQUENCE_OPS(lcname, ucname) \void \DynAnyImpl::insert_##lcname##_seq(CORBA:: ucname##Seq& value) \{ \  CHECK_NOT_DESTROYED; \  throw DynamicAny::DynAny::TypeMismatch(); \} \\CORBA:: ucname##Seq* \DynAnyImpl::get_##lcname##_seq() \{ \  CHECK_NOT_DESTROYED; \  throw DynamicAny::DynAny::TypeMismatch(); \  return 0; \}SEQUENCE_OPS(boolean, Boolean)SEQUENCE_OPS(octet, Octet)SEQUENCE_OPS(char, Char)SEQUENCE_OPS(short, Short)SEQUENCE_OPS(ushort, UShort)SEQUENCE_OPS(long, Long)SEQUENCE_OPS(ulong, ULong)#ifndef NO_FLOATSEQUENCE_OPS(float, Float)SEQUENCE_OPS(double, Double)#endif#ifdef HAS_LongLongSEQUENCE_OPS(longlong, LongLong)SEQUENCE_OPS(ulonglong, ULongLong)#endif#ifdef HAS_LongDoubleSEQUENCE_OPS(longdouble, LongDouble)#endifSEQUENCE_OPS(wchar, WChar)#undef SEQUENCE_OPSCORBA::BooleanDynAnyImpl::seek(CORBA::Long index){  return 0;}voidDynAnyImpl::rewind(){  // no-op}CORBA::BooleanDynAnyImpl::next(){  return 0;}CORBA::ULongDynAnyImpl::component_count(){  return 0;}DynamicAny::DynAny_ptrDynAnyImpl::current_component(){  // The spec is slightly unclear about whether current_component on  // base type DynAny should return nil or raise TypeMismatch. We  // choose to raise the exception.  throw DynamicAny::DynAny::TypeMismatch();  return 0;}///////////////////////////////// exposed private interface /////////////////////////////////intDynAnyImpl::NP_nodetype() const{  return dt_any;}//////////////// internal ////////////////voidDynAnyImpl::set_to_initial_value(){  switch (actualTc()->kind()) {  case CORBA::tk_null:  case CORBA::tk_void:    ToDynAnyImpl(this)->setValid();    break;  case CORBA::tk_short:      insert_short(0);     break;  case CORBA::tk_long:       insert_long(0);      break;  case CORBA::tk_ushort:     insert_ushort(0);    break;  case CORBA::tk_ulong:      insert_ulong(0);     break;#ifndef NO_FLOAT  case CORBA::tk_float:      insert_float(0.0);   break;  case CORBA::tk_double:     insert_double(0.0);  break;#endif  case CORBA::tk_boolean:    insert_boolean(0);   break;  case CORBA::tk_char:       insert_char(0);      break;  case CORBA::tk_octet:      insert_octet(0);     break;  case CORBA::tk_any:    {      CORBA::Any a;      insert_any(a);      break;    }  case CORBA::tk_TypeCode:   insert_typecode(CORBA::_tc_null);        break;  case CORBA::tk_objref:     insert_reference(CORBA::Object::_nil()); break;  case CORBA::tk_string:    insert_string(_CORBA_String_helper::empty_string);    break;#ifdef HAS_LongLong  case CORBA::tk_longlong:   insert_longlong(0);     break;  case CORBA::tk_ulonglong:  insert_ulonglong(0);    break;#endif#ifdef HAS_LongDouble  case CORBA::tk_longdouble: insert_longdouble(0.0); break;#endif  case CORBA::tk_wchar:      insert_wchar(0);        break;  case CORBA::tk_wstring:    insert_wstring(_CORBA_WString_helper::empty_wstring);    break;  default:    // Should never get here.    OMNIORB_ASSERT(0);  }}intDynAnyImpl::copy_to(cdrMemoryStream& mbs){  cdrMemoryStream src(pd_buf, 1);  try {    tcParser::copyStreamToStream(tc(), src, mbs);  }  catch(CORBA::MARSHAL&) {    return 0;  }  return 1;}intDynAnyImpl::copy_from(cdrMemoryStream& mbs){  try {    setInvalid();    tcParser::copyStreamToMemStream_flush(tc(), mbs, pd_buf);    setValid();  }  catch(CORBA::MARSHAL&) {    return 0;  }  return 1;}void*DynAnyImpl::_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::DynAny::_PD_repoId) )    return (DynamicAny::DynAny_ptr) this;    if( omni::ptrStrMatch(repoId, CORBA::Object::_PD_repoId) )    return (CORBA::Object_ptr) this;  return 0;}////////////////////////////////////////////////////////////////////////////////////////////////// DynFixedImpl //////////////////////////////////////////////////////////////////////////////////////////////////DynFixedImpl::DynFixedImpl(TypeCode_base* tc, CORBA::Boolean is_root)  : DynAnyImpl(tc, dt_fixed, is_root){}DynFixedImpl::~DynFixedImpl() {}//////////////////////// public interface ////////////////////////DynamicAny::DynAny_ptrDynFixedImpl::copy(){  CHECK_NOT_DESTROYED;  DynFixedImpl* da = new DynFixedImpl(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*DynFixedImpl::get_value(){  CHECK_NOT_DESTROYED;  CORBA::Fixed f;  f.PR_setLimits(actualTc()->NP_fixed_digits(), actualTc()->NP_fixed_scale());  pd_buf.rewindInputPtr();  f <<= pd_buf;  return f.NP_asString();}CORBA::BooleanDynFixedImpl::set_value(const char* val){  CHECK_NOT_DESTROYED;  CORBA::Fixed f;  f.PR_setLimits(actualTc()->NP_fixed_digits(), actualTc()->NP_fixed_scale());  try {    CORBA::Boolean precise = f.NP_fromString(val);    pd_buf.rewindPtrs();    f >>= pd_buf;    setValid();    return precise;  }  catch (CORBA::DATA_CONVERSION& ex) {    if (ex.minor() == DATA_CONVERSION_RangeError) {      // Too many digits      throw DynamicAny::DynAny::InvalidValue();    }    else      throw DynamicAny::DynAny::TypeMismatch();  }#ifndef __DECCXX  return 0; // Never reach here#endif}///////////////////////////////// exposed private interface /////////////////////////////////intDynFixedImpl::NP_nodetype() const{  return dt_fixed;}voidDynFixedImpl::set_to_initial_value(){  set_value("0");}voidDynFixedImpl::_NP_incrRefCount(){  DynAnyImplBase::_NP_incrRefCount();}voidDynFixedImpl::_NP_decrRefCount(){  DynAnyImplBase::_NP_decrRefCount();}void*DynFixedImpl::_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::DynFixed::_PD_repoId) )    return (DynamicAny::DynFixed_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;}/////////////////////////////////////////////////////////////////////////////////////////////////// DynEnumImpl //////////////////////////////////////////////////////////////////////////////////////////////////DynEnumImpl::DynEnumImpl(TypeCode_base* tc, CORBA::Boolean is_root)  : DynAnyImpl(tc, dt_enum, is_root){}DynEnumImpl::~DynEnumImpl() {}//////////////////////// public interface ////////////////////////

⌨️ 快捷键说明

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