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