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 + -
显示快捷键?