summaryrefslogtreecommitdiff
path: root/cppe/src/IceE/Instance.cpp
diff options
context:
space:
mode:
authorDwayne Boone <dwayne@zeroc.com>2007-05-02 19:10:56 +0000
committerDwayne Boone <dwayne@zeroc.com>2007-05-02 19:10:56 +0000
commit643bb663b019016db089777143d6ba7e8a4ff0ea (patch)
tree95aecc5b75c658ae0c8abc287434f604b9eb1bd8 /cppe/src/IceE/Instance.cpp
parentMAke wstring optional for IceE (diff)
downloadice-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.cpp89
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