⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cs-ucs-4.cc

📁 编译工具
💻 CC
📖 第 1 页 / 共 2 页
字号:
  _CORBA_ULong         tc;  omniCodeSet::UniChar uc;    for (_CORBA_ULong i=0; i < len; i++) {    uc = us[i];    if (uc < 0xd800) {      tc = uc;    }    else if (uc < 0xdc00) {      // Surrogate pair      tc = (uc - 0xd800) << 10;      if (++i == len) {	// No second half to surrogate pair	OMNIORB_THROW(DATA_CONVERSION, 		      DATA_CONVERSION_BadInput,		      (CORBA::CompletionStatus)stream.completion());      }      uc = us[i];      if (uc < 0xdc00 || uc > 0xdfff) {	// Value is not a valid second half to a surrogate pair	OMNIORB_THROW(DATA_CONVERSION, 		      DATA_CONVERSION_BadInput,		      (CORBA::CompletionStatus)stream.completion());      }      tc = tc + uc - 0xdc00 + 0x10000;    }    else if (uc < 0xe000) {      // Second half of surrogate pair not allowed on its own      OMNIORB_THROW(DATA_CONVERSION, 		    DATA_CONVERSION_BadInput,		    (CORBA::CompletionStatus)stream.completion());      tc = 0; // To shut paranoid compilers up    }    else {      tc = uc;    }    tc >>= stream;  }}omniCodeSet::UniCharTCS_W_UCS_4::unmarshalWChar(cdrStream& stream){  omniCodeSet::UniChar uc;  _CORBA_Octet         len = stream.unmarshalOctet();  _CORBA_Octet         o;  switch (len) {  case 0:    uc = 0; // Evil but it might happen, I suppose    break;  case 1:    o  = stream.unmarshalOctet();    uc = o;    break;  case 2:    {      _CORBA_Octet* p = (_CORBA_Octet*)&uc;      if (stream.unmarshal_byte_swap()) {	o = stream.unmarshalOctet(); p[1] = o;	o = stream.unmarshalOctet(); p[0] = o;      }      else {	o = stream.unmarshalOctet(); p[0] = o;	o = stream.unmarshalOctet(); p[1] = o;      }    }    break;  case 4:    {      _CORBA_ULong tc;      _CORBA_Octet* p = (_CORBA_Octet*)&tc;      if (stream.unmarshal_byte_swap()) {	o = stream.unmarshalOctet(); p[3] = o;	o = stream.unmarshalOctet(); p[2] = o;	o = stream.unmarshalOctet(); p[1] = o;	o = stream.unmarshalOctet(); p[0] = o;      }      else {	o = stream.unmarshalOctet(); p[0] = o;	o = stream.unmarshalOctet(); p[1] = o;	o = stream.unmarshalOctet(); p[2] = o;	o = stream.unmarshalOctet(); p[3] = o;      }      if (tc > 0xffff)	OMNIORB_THROW(DATA_CONVERSION, DATA_CONVERSION_CannotMapChar,		      (CORBA::CompletionStatus)stream.completion());      uc = tc;    }    break;  default:    OMNIORB_THROW(MARSHAL, MARSHAL_InvalidWCharSize,		  (CORBA::CompletionStatus)stream.completion());  }  return uc;}_CORBA_ULongTCS_W_UCS_4::unmarshalWString(cdrStream& stream,			      _CORBA_ULong bound,			      omniCodeSet::UniChar*& us){  _CORBA_ULong mlen; mlen <<= stream;  if (mlen % 4)    OMNIORB_THROW(MARSHAL, MARSHAL_InvalidWCharSize,		  (CORBA::CompletionStatus)stream.completion());  _CORBA_ULong len = mlen / 4; // Note no terminating null in marshalled form  if (bound && len > bound)    OMNIORB_THROW(MARSHAL, MARSHAL_WStringIsTooLong, 		  (CORBA::CompletionStatus)stream.completion());  if (!stream.checkInputOverrun(1, mlen))    OMNIORB_THROW(MARSHAL, MARSHAL_PassEndOfMessage,		  (CORBA::CompletionStatus)stream.completion());  omniCodeSetUtil::BufferU ub(len + 1);  _CORBA_ULong             tc;  _CORBA_ULong             i;  for (i=0; i < len; i++) {    tc <<= stream;    if (tc <= 0xffff) {      ub.insert(tc);    }    else if (tc <= 0x10ffff) {      // Surrogate pair      tc -= 0x10000;      ub.insert((tc >> 10)    + 0xd800);      ub.insert((tc &  0x3ff) + 0xdc00);    }    else      OMNIORB_THROW(DATA_CONVERSION, DATA_CONVERSION_CannotMapChar,		    (CORBA::CompletionStatus)stream.completion());  }  ub.insert(0); // Null terminator  us = ub.extract();  return ub.length() - 1;}_CORBA_BooleanTCS_W_UCS_4::fastMarshalWChar(cdrStream&          stream,			      omniCodeSet::NCS_W* ncs,			      _CORBA_WChar        wc){  if (ncs->id() == id()) { // Null transformation    stream.marshalOctet(4);    _CORBA_Octet* p = (_CORBA_Octet*)&wc;    _CORBA_Octet  o;    if (stream.marshal_byte_swap()) {      o = p[3]; stream.marshalOctet(o);      o = p[2]; stream.marshalOctet(o);      o = p[1]; stream.marshalOctet(o);      o = p[0]; stream.marshalOctet(o);    }    else {      o = p[0]; stream.marshalOctet(o);      o = p[1]; stream.marshalOctet(o);      o = p[2]; stream.marshalOctet(o);      o = p[3]; stream.marshalOctet(o);    }    return 1;  }  return 0;}_CORBA_BooleanTCS_W_UCS_4::fastMarshalWString(cdrStream&          stream,				omniCodeSet::NCS_W* ncs,				_CORBA_ULong        bound,				_CORBA_ULong        len,				const _CORBA_WChar* ws){  if (ncs->id() == id()) { // Null transformation    if (bound && len > bound)      OMNIORB_THROW(MARSHAL, MARSHAL_WStringIsTooLong, 		    (CORBA::CompletionStatus)stream.completion());    _CORBA_ULong mlen = len * 4; mlen >>= stream;    if (stream.marshal_byte_swap()) {      _CORBA_ULong tc;      for (_CORBA_ULong i=0; i<len; i++) {	tc = ws[i]; tc >>= stream;      }    }    else {      stream.put_octet_array((const _CORBA_Char*)ws, mlen, omni::ALIGN_4);    }    return 1;  }  return 0;}_CORBA_BooleanTCS_W_UCS_4::fastUnmarshalWChar(cdrStream&          stream,				omniCodeSet::NCS_W* ncs,				_CORBA_WChar&       wc){  if (ncs->id() == id()) { // Null transformation    _CORBA_Octet  len = stream.unmarshalOctet();    _CORBA_Octet  o;    switch (len) {    case 0:      wc = 0; // Evil but it might happen, I suppose      break;    case 1:      o = stream.unmarshalOctet();      wc = o;      break;    case 2:      {	_CORBA_UShort tc;	_CORBA_Octet* p = (_CORBA_Octet*)&tc;	if (stream.unmarshal_byte_swap()) {	  o = stream.unmarshalOctet(); p[1] = o;	  o = stream.unmarshalOctet(); p[0] = o;	}	else {	  o = stream.unmarshalOctet(); p[0] = o;	  o = stream.unmarshalOctet(); p[1] = o;	}	wc = tc;      }      break;    case 4:      {	_CORBA_Octet* p = (_CORBA_Octet*)&wc;	if (stream.unmarshal_byte_swap()) {	  o = stream.unmarshalOctet(); p[3] = o;	  o = stream.unmarshalOctet(); p[2] = o;	  o = stream.unmarshalOctet(); p[1] = o;	  o = stream.unmarshalOctet(); p[0] = o;	}	else {	  o = stream.unmarshalOctet(); p[0] = o;	  o = stream.unmarshalOctet(); p[1] = o;	  o = stream.unmarshalOctet(); p[2] = o;	  o = stream.unmarshalOctet(); p[3] = o;	}      }      break;    default:      OMNIORB_THROW(MARSHAL, MARSHAL_InvalidWCharSize,		    (CORBA::CompletionStatus)stream.completion());    }    return 1;  }  return 0;}_CORBA_BooleanTCS_W_UCS_4::fastUnmarshalWString(cdrStream&          stream,				  omniCodeSet::NCS_W* ncs,				  _CORBA_ULong        bound,				  _CORBA_ULong&       len,				  _CORBA_WChar*&      ws){  if (ncs->id() == id()) { // Null transformation    _CORBA_ULong mlen; mlen <<= stream;    if (mlen % 4)      OMNIORB_THROW(MARSHAL, MARSHAL_InvalidWCharSize,		    (CORBA::CompletionStatus)stream.completion());    len = mlen / 4; // Note no terminating null in marshalled form    if (bound && len > bound)      OMNIORB_THROW(MARSHAL, MARSHAL_WStringIsTooLong, 		    (CORBA::CompletionStatus)stream.completion());    if (!stream.checkInputOverrun(1, mlen))      OMNIORB_THROW(MARSHAL, MARSHAL_PassEndOfMessage,		    (CORBA::CompletionStatus)stream.completion());    ws = omniCodeSetUtil::allocW(len + 1);    omniCodeSetUtil::HolderW wh(ws);    stream.unmarshalArrayULong((_CORBA_ULong*)ws, len);    ws[len] = 0; // Null terminator    wh.drop();    return 1;  }  return 0;}//// Initialiser//static NCS_W_UCS_4 _NCS_W_UCS_4;static TCS_W_UCS_4 _TCS_W_UCS_4;class CS_UCS_4_init {public:  CS_UCS_4_init() {    omniCodeSet::registerNCS_W(&_NCS_W_UCS_4);    omniCodeSet::registerTCS_W(&_TCS_W_UCS_4);  }};static CS_UCS_4_init _CS_UCS_4_init;#endif // (SIZEOF_WCHAR == 4)OMNI_NAMESPACE_END(omni)OMNI_EXPORT_LINK_FORCE_SYMBOL(CS_UCS_4);

⌨️ 快捷键说明

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