summaryrefslogtreecommitdiff
path: root/TAO/tao/PortableServer/PortableServer_WFunctions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/PortableServer/PortableServer_WFunctions.cpp')
-rw-r--r--TAO/tao/PortableServer/PortableServer_WFunctions.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/TAO/tao/PortableServer/PortableServer_WFunctions.cpp b/TAO/tao/PortableServer/PortableServer_WFunctions.cpp
new file mode 100644
index 00000000000..d980f303b74
--- /dev/null
+++ b/TAO/tao/PortableServer/PortableServer_WFunctions.cpp
@@ -0,0 +1,71 @@
+#include "tao/PortableServer/PortableServer_WFunctions.h"
+
+ACE_RCSID (PortableServer,
+ PortableServer_WFunctions,
+ "$Id$")
+
+#include "ace/OS_NS_string.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace PortableServer
+{
+ PortableServer::ObjectId *
+ wstring_to_ObjectId (const CORBA::WChar *string)
+ {
+ // Size of Id
+ //
+ // We DO NOT include the zero terminator, as this is simply an
+ // artifact of the way strings are stored in C.
+ //
+ u_int string_length = ACE_OS::wslen (string);
+
+ CORBA::ULong buffer_size = string_length * sizeof (CORBA::WChar);
+
+ // Create the buffer for the Id
+ CORBA::Octet *buffer = PortableServer::ObjectId::allocbuf (buffer_size);
+
+ // Copy contents
+ ACE_OS::memcpy (buffer, string, buffer_size);
+
+ // Create a new ID
+ PortableServer::ObjectId *id = 0;
+ ACE_NEW_RETURN (id,
+ PortableServer::ObjectId (buffer_size,
+ buffer_size,
+ buffer,
+ 1),
+ 0);
+
+ return id;
+ }
+
+ CORBA::WChar *
+ ObjectId_to_wstring (const PortableServer::ObjectId &id)
+ {
+ // Compute resulting wide string's length.
+ CORBA::ULong string_length =
+ id.length () / sizeof (CORBA::WChar);
+
+ // Allocate an extra slot if the id's length is not "aligned" on a
+ // CORBA::WChar.
+ if (id.length () % sizeof (CORBA::WChar))
+ string_length++;
+
+ // Create space - note that this method adds + 1 for the '\0'.
+ CORBA::WChar* string = CORBA::wstring_alloc (string_length);
+
+ // Copy the data
+ ACE_OS::memcpy (string,
+ id.get_buffer (),
+ id.length ());
+
+ // Null terminate the string
+ string[string_length] = '\0';
+
+ // Return string.
+ return string;
+ }
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL