dynany.cc
来自「编译工具」· CC 代码 · 共 2,941 行 · 第 1/5 页
CC
2,941 行
CORBA::WCharDynAnyConstrBase::get_wchar(){ CHECK_NOT_DESTROYED; return readCurrent(CORBA::tk_wchar).unmarshalWChar();}CORBA::WChar*DynAnyConstrBase::get_wstring(){ CHECK_NOT_DESTROYED; cdrMemoryStream& buf = readCurrent(CORBA::tk_wstring); TypeCode_base* tc = (TypeCode_base*)TypeCode_base::NP_expand(nthComponentTC(pd_curr_index)); CORBA::ULong maxlen = tc->NP_length(); CORBA::WChar* value = buf.unmarshalWString(maxlen); return value;}CORBA::Any*DynAnyConstrBase::get_any(){ CHECK_NOT_DESTROYED; CORBA::Any* value = new CORBA::Any(); try { *value <<= readCurrent(CORBA::tk_any); } catch(...) { delete value; throw; } return value;}DynamicAny::DynAny_ptrDynAnyConstrBase::get_dyn_any(){ CHECK_NOT_DESTROYED; CORBA::Any value; value <<= readCurrent(CORBA::tk_any); return factory_create_dyn_any(value);}//// CORBA 2.5 sequence operations//voidDynAnyConstrBase::insert_boolean_seq(CORBA::BooleanSeq& value){ CHECK_NOT_DESTROYED; if (prepareSequenceWrite(CORBA::tk_boolean, value.length()) == SEQ_HERE) pd_buf.put_octet_array((_CORBA_Octet*)value.NP_data(), value.length()); else getCurrent()->insert_boolean_seq(value);}voidDynAnyConstrBase::insert_octet_seq(CORBA::OctetSeq& value){ CHECK_NOT_DESTROYED; if (prepareSequenceWrite(CORBA::tk_octet, value.length()) == SEQ_HERE) pd_buf.put_octet_array((_CORBA_Octet*)value.NP_data(), value.length()); else getCurrent()->insert_octet_seq(value);}voidDynAnyConstrBase::insert_char_seq(CORBA::CharSeq& value){ CHECK_NOT_DESTROYED; if (prepareSequenceWrite(CORBA::tk_char, value.length()) == SEQ_HERE) { CORBA::Char* data = value.NP_data(); for (CORBA::ULong i=0; i < value.length(); i++) pd_buf.marshalChar(data[i]); } else getCurrent()->insert_char_seq(value);}voidDynAnyConstrBase::insert_wchar_seq(CORBA::WCharSeq& value){ CHECK_NOT_DESTROYED; if (prepareSequenceWrite(CORBA::tk_wchar, value.length()) == SEQ_HERE) { CORBA::WChar* data = value.NP_data(); for (CORBA::ULong i=0; i < value.length(); i++) pd_buf.marshalWChar(data[i]); } else getCurrent()->insert_wchar_seq(value);}// Too lazy to type all these out...#define INSERT_SEQ_OP(lcname, ucname, align, size) \void \DynAnyConstrBase::insert_##lcname##_seq(CORBA:: ucname##Seq& value) \{ \ CHECK_NOT_DESTROYED; \\ if (prepareSequenceWrite(CORBA::tk_##lcname, value.length()) == SEQ_HERE) { \ if (!pd_buf.marshal_byte_swap()) { \ pd_buf.put_octet_array((_CORBA_Octet*)value.NP_data(), \ value.length() * size, omni::ALIGN_##align); \ } \ else { \ _CORBA_##ucname* data = value.NP_data(); \ for (CORBA::ULong i=0; i < value.length(); i++) \ data[i] >>= pd_buf; \ } \ } \ else \ getCurrent()->insert_##lcname##_seq(value); \}INSERT_SEQ_OP(short, Short, 2, 2)INSERT_SEQ_OP(ushort, UShort, 2, 2)INSERT_SEQ_OP(long, Long, 4, 4)INSERT_SEQ_OP(ulong, ULong, 4, 4)#ifndef NO_FLOATINSERT_SEQ_OP(float, Float, 4, 4)INSERT_SEQ_OP(double, Double, 8, 8)#endif#ifdef HAS_LongLongINSERT_SEQ_OP(longlong, LongLong, 8, 8)INSERT_SEQ_OP(ulonglong, ULongLong, 8, 8)#endif#ifdef HAS_LongDoubleINSERT_SEQ_OP(longdouble, LongDouble, 8, 16)#endif#undef INSERT_SEQ_OPCORBA::BooleanSeq*DynAnyConstrBase::get_boolean_seq(){ CHECK_NOT_DESTROYED; if (prepareSequenceRead(CORBA::tk_boolean) == SEQ_HERE) { if (pd_n_in_buf < pd_first_in_comp) throw DynamicAny::DynAny::InvalidValue(); CORBA::BooleanSeq_var seq = new CORBA::BooleanSeq(pd_n_components); seq->length(pd_n_components); CORBA::Boolean* data = seq->NP_data(); if (pd_first_in_comp > 0) { pd_buf.rewindInputPtr(); pd_buf.get_octet_array((_CORBA_Octet*)data, pd_first_in_comp); } for (unsigned i = pd_first_in_comp; i < pd_n_components; i++) data[i] = pd_components[i]->get_boolean(); return seq._retn(); } else { return getCurrent()->get_boolean_seq(); }}CORBA::OctetSeq*DynAnyConstrBase::get_octet_seq(){ CHECK_NOT_DESTROYED; if (prepareSequenceRead(CORBA::tk_octet) == SEQ_HERE) { if (pd_n_in_buf < pd_first_in_comp) throw DynamicAny::DynAny::InvalidValue(); CORBA::OctetSeq_var seq = new CORBA::OctetSeq(pd_n_components); seq->length(pd_n_components); CORBA::Octet* data = seq->NP_data(); if (pd_first_in_comp > 0) { pd_buf.rewindInputPtr(); pd_buf.get_octet_array((_CORBA_Octet*)data, pd_first_in_comp); } for (unsigned i = pd_first_in_comp; i < pd_n_components; i++) data[i] = pd_components[i]->get_octet(); return seq._retn(); } else { return getCurrent()->get_octet_seq(); }}CORBA::CharSeq*DynAnyConstrBase::get_char_seq(){ CHECK_NOT_DESTROYED; if (prepareSequenceRead(CORBA::tk_char) == SEQ_HERE) { if (pd_n_in_buf < pd_first_in_comp) throw DynamicAny::DynAny::InvalidValue(); CORBA::CharSeq_var seq = new CORBA::CharSeq(pd_n_components); seq->length(pd_n_components); CORBA::Char* data = seq->NP_data(); if (pd_first_in_comp > 0) { pd_buf.rewindInputPtr(); for (unsigned i=0; i < pd_first_in_comp; i++) data[i] = pd_buf.unmarshalChar(); } for (unsigned i = pd_first_in_comp; i < pd_n_components; i++) data[i] = pd_components[i]->get_char(); return seq._retn(); } else { return getCurrent()->get_char_seq(); }}CORBA::WCharSeq*DynAnyConstrBase::get_wchar_seq(){ CHECK_NOT_DESTROYED; if (prepareSequenceRead(CORBA::tk_wchar) == SEQ_HERE) { if (pd_n_in_buf < pd_first_in_comp) throw DynamicAny::DynAny::InvalidValue(); CORBA::WCharSeq_var seq = new CORBA::WCharSeq(pd_n_components); seq->length(pd_n_components); CORBA::WChar* data = seq->NP_data(); if (pd_first_in_comp > 0) { pd_buf.rewindInputPtr(); for (unsigned i=0; i < pd_first_in_comp; i++) data[i] = pd_buf.unmarshalWChar(); } for (unsigned i = pd_first_in_comp; i < pd_n_components; i++) data[i] = pd_components[i]->get_wchar(); return seq._retn(); } else { return getCurrent()->get_wchar_seq(); }}#define GET_SEQ_OP(lcname, ucname, align, size) \CORBA:: ucname##Seq* \DynAnyConstrBase::get_##lcname##_seq() \{ \ CHECK_NOT_DESTROYED; \\ if (prepareSequenceRead(CORBA::tk_##lcname) == SEQ_HERE) { \ if (pd_n_in_buf < pd_first_in_comp) \ throw DynamicAny::DynAny::InvalidValue(); \\ CORBA:: ucname##Seq_var seq = new CORBA:: ucname##Seq(pd_n_components); \ seq->length(pd_n_components); \ _CORBA_##ucname * data = seq->NP_data(); \\ if (pd_first_in_comp > 0) { \ pd_buf.rewindInputPtr(); \ if (!pd_buf.unmarshal_byte_swap()) { \ pd_buf.get_octet_array((_CORBA_Octet*)data, pd_first_in_comp * size, \ omni::ALIGN_##align); \ } \ else { \ for (unsigned i=0; i < pd_first_in_comp; i++) \ data[i] <<= pd_buf; \ } \ } \ for (unsigned i = pd_first_in_comp; i < pd_n_components; i++) \ data[i] = pd_components[i]->get_octet(); \\ return seq._retn(); \ } \ else { \ return getCurrent()->get_##lcname##_seq(); \ } \}GET_SEQ_OP(short, Short, 2, 2)GET_SEQ_OP(ushort, UShort, 2, 2)GET_SEQ_OP(long, Long, 4, 4)GET_SEQ_OP(ulong, ULong, 4, 4)#ifndef NO_FLOATGET_SEQ_OP(float, Float, 4, 4)GET_SEQ_OP(double, Double, 8, 8)#endif#ifdef HAS_LongLongGET_SEQ_OP(longlong, LongLong, 8, 8)GET_SEQ_OP(ulonglong, ULongLong, 8, 8)#endif#ifdef HAS_LongDoubleGET_SEQ_OP(longdouble, LongDouble, 8, 16)#endif#undef GET_SEQ_OPCORBA::BooleanDynAnyConstrBase::seek(CORBA::Long index){ CHECK_NOT_DESTROYED; if( index < 0 || index >= (int)pd_n_components ) { pd_curr_index = -1; return 0; } else { pd_curr_index = index; return 1; }}voidDynAnyConstrBase::rewind(){ CHECK_NOT_DESTROYED; pd_curr_index = pd_n_components ? 0 : -1;}CORBA::BooleanDynAnyConstrBase::next(){ CHECK_NOT_DESTROYED; if( pd_curr_index + 1 < (int)pd_n_components ) pd_curr_index++; else pd_curr_index = -1; return pd_curr_index >= 0;}CORBA::ULongDynAnyConstrBase::component_count(){ CHECK_NOT_DESTROYED; return pd_n_components;}DynamicAny::DynAny_ptrDynAnyConstrBase::current_component(){ CHECK_NOT_DESTROYED; if( pd_n_components == 0 && actualTc()->kind() != CORBA::tk_sequence ) throw DynamicAny::DynAny::TypeMismatch(); if( pd_curr_index < 0 ) return DynamicAny::DynAny::_nil(); DynAnyImplBase* da = getCurrent(); da->_NP_incrRefCount(); return da;}//////////////// internal ////////////////voidDynAnyConstrBase::set_to_initial_value(){ if (pd_n_components > 0) { createComponent(0); for (unsigned i=0; i < pd_n_components; i++) pd_components[i]->set_to_initial_value(); } pd_curr_index = (pd_n_components == 0) ? -1 : 0;}intDynAnyConstrBase::copy_to(cdrMemoryStream& mbs){ if( pd_n_in_buf != pd_first_in_comp ) return 0; cdrMemoryStream src(pd_buf, 1); pd_read_index = -1; unsigned i; try { // Copy the components in the buffer. for( i = 0; i < pd_n_in_buf; i++ ) { TypeCode_base* ctc = nthComponentTC(i); tcParser::copyStreamToStream(ctc, src, mbs); } } catch(CORBA::MARSHAL&) { return 0; } // The rest are in external components. for( ; i < pd_n_components; i++ ) { if( !pd_components[i]->copy_to(mbs) ) return 0; } return 1;}intDynAnyConstrBase::copy_from(cdrMemoryStream& mbs){ pd_buf.rewindPtrs(); pd_read_index = 0; unsigned i; try { // Copy components into the buffer. for( i = 0; i < pd_first_in_comp; i++ ) { TypeCode_base* ctc = nthComponentTC(i); tcParser::copyStreamToStream(ctc, mbs, pd_buf); } } catch(CORBA::MARSHAL&) { pd_buf.rewindPtrs(); pd_n_in_buf = 0; pd_n_really_in_buf = 0; return 0; } // Copy into external components. for( ; i < pd_n_components; i++ ) { if( !pd_components[i]->copy_from(mbs) ) return 0; } pd_n_really_in_buf = pd_n_in_buf = pd_first_in_comp; pd_curr_index = (pd_n_components == 0) ? -1 : 0; return 1;}voidDynAnyConstrBase::onDispose(){ for( unsigned i = pd_first_in_comp; i < pd_n_components; i++ ) pd_components[i]->detach();}voidDynAnyConstrBase::setNumComponents(unsigned n){ if( n == pd_n_components ) return; if( n < pd_n_components ) { // Detach any orphaned components stored in <pd_components>. unsigned start = pd_first_in_comp > n ? pd_first_in_comp : n; for( unsigned i = start; i < pd_n_components; i++ ) { pd_components[i]->detach(); pd_components[i]->_NP_decrRefCount(); } pd_components.reserve(n); DynAnyImplBase* tmp = 0; while( pd_components.size() < n ) pd_components.push_back(tmp); pd_n_components = n; if( n < pd_n_in_buf ) pd_n_in_buf = n; if( (int)n < pd_read_index ) pd_read_index = -1; if( pd_first_in_comp > pd_n_components ) pd_first_in_comp = pd_n_components; } else { // Add new components. pd_components.reserve(n); DynAnyImplBase* tmp = 0; while( pd_components.size() < n ) pd_components.push_back(tmp); unsigned old_n_components = pd_n_components; pd_n_components = n; OMNIORB_ASSERT(pd_first_in_comp <= old_n_components); // Add in the new components for( unsigned i = old_n_components; i < pd_n_components; i++ ) { CORBA::TypeCode_ptr tc = CORBA::TypeCode::_duplicate(nthComponentTC(i)); pd_components[i] = internal_create_dyn_any(ToTcBase(tc), DYNANY_CHILD); pd_components[i]->set_to_initial_value(); } }}voidDynAnyConstrBase::createComponent(unsigned n){ if( n >= pd_first_in_comp ) return; // Copy components out of the buffer. unsigned i; for( i = n; i < pd_n_in_buf; i++ ) { CORBA::TypeCode_ptr tc = CORBA::TypeCode::_duplicate(nthComponentTC(i)); DynAnyImplBase* da = internal_create_dyn_any(ToTcBase(tc), DYNANY_CHILD); if( pd_read_index != (int)i ) seekTo(i); if( !da->copy_from(pd_buf) ) { throw omniORB::fatalException(__FILE__,__LINE__, "DynAnyConstrBase::createComponent() - copy_from() failed"); } pd_read_index++; pd_components[i] = da; } // Create uninitialised components for those not yet inserted. for( ; i < pd_first_in_comp; i++ ) { CORBA::TypeCode_ptr tc = CORBA::TypeCode::_duplicate(nthComponentTC(i)); pd_components[i] = internal_create_dyn_any(ToTcBase(tc), DYNANY_CHILD); } pd_first_in_comp = n; if( n < pd_n_in_buf ) pd_n_in_buf = n;}voidDynAnyConstrBase::seekTo(unsigned n){ // For safety we assume that this would not have been called // unless a seek really is needed - so we do not just return // if( pd_read_index == i ). if( n >= pd_n_in_buf ) { throw omniORB::fatalException(__FILE__,__LINE__, "DynAnyConstrBase::seekTo() - <n> out of bounds"); } pd_buf.rewindInputPtr(); for( unsigned i = 0; i < n; i++ ) { TypeCode_base* ctc = nthComponentTC(i); try { tcParser::skip(ctc, pd_buf); } catch(CORBA::MARSHAL&) { throw omniORB::fatalException(__FILE__,__LINE__, "DynAnyConstrBase::seekTo() - unexpected exception"); } } pd_read_index = n;}intDynAnyConstrBase::component_to_any(unsigned i, CORBA::Any& a){ a.replace(nthComponentTC(i), 0); if( i < pd_n_in_buf ) { AnyP* anyp = (AnyP*)a.NP_pd(); if( pd_read_index != (int)i ) seekTo(i); try { tcParser::copyStreamToStream(anyp->getTC(), pd_buf, anyp->getWRableMemoryStream()); } catch(CORBA::MARSHAL&) { throw omniORB::fatalException(__FILE__,__LINE__, "DynAnyConstrBase::component_to_any() - unexpected exception"); } pd_read_index++; return 1; } else if( i >= pd_first_in_comp ) { cdrMemoryStream& buf = ((AnyP*)a.NP_pd())->getWRableMemoryStream(); return pd_components[i]->copy_to(buf); } else return 0;}intDynAnyConstrBase::component_from_any(unsigned i, const CORBA::Any& a){ CORBA::TypeCode_var tc = a.type(); if( !tc->equivalent(nthComponentTC(i)) ) return 0;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?