diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2007-05-02 19:10:56 +0000 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2007-05-02 19:10:56 +0000 |
commit | 643bb663b019016db089777143d6ba7e8a4ff0ea (patch) | |
tree | 95aecc5b75c658ae0c8abc287434f604b9eb1bd8 /cppe/src/IceE/Instance.cpp | |
parent | MAke wstring optional for IceE (diff) | |
download | ice-643bb663b019016db089777143d6ba7e8a4ff0ea.tar.bz2 ice-643bb663b019016db089777143d6ba7e8a4ff0ea.tar.xz ice-643bb663b019016db089777143d6ba7e8a4ff0ea.zip |
Make Wstring optional for IceE
Diffstat (limited to 'cppe/src/IceE/Instance.cpp')
-rw-r--r-- | cppe/src/IceE/Instance.cpp | 89 |
1 files changed, 86 insertions, 3 deletions
diff --git a/cppe/src/IceE/Instance.cpp b/cppe/src/IceE/Instance.cpp index 0a574d9dd57..8906459ab64 100644 --- a/cppe/src/IceE/Instance.cpp +++ b/cppe/src/IceE/Instance.cpp @@ -279,19 +279,51 @@ IceInternal::Instance::stringToIdentity(const string& s) const } } +#ifdef ICEE_HAS_WSTRING + if(_initData.stringConverter) + { + string tmpString; + _initData.stringConverter->fromUTF8(reinterpret_cast<const Byte*>(ident.name.data()), + reinterpret_cast<const Byte*>(ident.name.data() + ident.name.size()), + tmpString); + ident.name = tmpString; + + _initData.stringConverter->fromUTF8(reinterpret_cast<const Byte*>(ident.category.data()), + reinterpret_cast<const Byte*>(ident.category.data() + ident.category.size()), + tmpString); + ident.category = tmpString; + } +#endif + return ident; } string IceInternal::Instance::identityToString(const Identity& ident) const { - if(ident.category.empty()) + string name = ident.name; + string category = ident.category; +#ifdef ICEE_HAS_WSTRING + if(_initData.stringConverter) { - return IceUtil::escapeString(ident.name, "/"); + UTF8BufferI buffer; + Byte* last = _initData.stringConverter->toUTF8(ident.name.data(), ident.name.data() + ident.name.size(), + buffer); + name = string(reinterpret_cast<const char*>(buffer.getBuffer()), last - buffer.getBuffer()); + + buffer.reset(); + last = _initData.stringConverter->toUTF8(ident.category.data(), ident.category.data() + ident.category.size(), + buffer); + category = string(reinterpret_cast<const char*>(buffer.getBuffer()), last - buffer.getBuffer()); + } +#endif + if(category.empty()) + { + return IceUtil::escapeString(name, "/"); } else { - return IceUtil::escapeString(ident.category, "/") + '/' + IceUtil::escapeString(ident.name, "/"); + return IceUtil::escapeString(category, "/") + '/' + IceUtil::escapeString(name, "/"); } } @@ -482,6 +514,13 @@ IceInternal::Instance::Instance(const CommunicatorPtr& communicator, const Initi _objectAdapterFactory = new ObjectAdapterFactory(this, communicator); #endif +#ifdef ICEE_HAS_WSTRING + if(!_initData.wstringConverter) + { + _initData.wstringConverter = new UnicodeWstringConverter(); + } +#endif + __setNoDelete(false); } catch(...) @@ -680,3 +719,47 @@ IceInternal::Instance::destroy() _state = StateDestroyed; }
} + +#ifdef ICEE_HAS_WSTRING +IceInternal::UTF8BufferI::UTF8BufferI() : + _buffer(0), + _offset(0) +{ +} + +IceInternal::UTF8BufferI::~UTF8BufferI() +{ + free(_buffer); +} + +Byte* +IceInternal::UTF8BufferI::getMoreBytes(size_t howMany, Byte* firstUnused) +{ + if(_buffer == 0) + { + _buffer = (Byte*)malloc(howMany); + } + else + { + assert(firstUnused != 0); + _offset = firstUnused - _buffer; + _buffer = (Byte*)realloc(_buffer, _offset + howMany); + } + + return _buffer + _offset; +} + +Byte* +IceInternal::UTF8BufferI::getBuffer() +{ + return _buffer; +} + +void +IceInternal::UTF8BufferI::reset() +{ + free(_buffer); + _buffer = 0; + _offset = 0; +} +#endif |