summaryrefslogtreecommitdiff
path: root/ace
diff options
context:
space:
mode:
authorbrunsch <brunsch@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2000-05-12 19:01:05 +0000
committerbrunsch <brunsch@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2000-05-12 19:01:05 +0000
commit7ecc9a8ee0b3e629728e81e78f819a4d58aaeae2 (patch)
treebb5ec9a1c265851977d93513b6a4757630a56792 /ace
parentafbad282e36cceec9361a49d5194331a06432856 (diff)
downloadATCD-7ecc9a8ee0b3e629728e81e78f819a4d58aaeae2.tar.gz
ChangeLogTag:Fri May 12 11:25:10 2000 Darrell Brunsch <brunsch@uci.edu>
Diffstat (limited to 'ace')
-rw-r--r--ace/ACE.cpp4
-rw-r--r--ace/Basic_Types.h9
-rw-r--r--ace/High_Res_Timer.cpp6
-rw-r--r--ace/Local_Name_Space_T.cpp17
-rw-r--r--ace/README4
-rw-r--r--ace/Remote_Name_Space.cpp173
-rw-r--r--ace/SString.cpp59
-rw-r--r--ace/SString.h13
-rw-r--r--ace/config-win32-borland.h1
9 files changed, 198 insertions, 88 deletions
diff --git a/ace/ACE.cpp b/ace/ACE.cpp
index 3604476a79f..8fe5573f325 100644
--- a/ace/ACE.cpp
+++ b/ace/ACE.cpp
@@ -4348,7 +4348,9 @@ ACE::strndup (const wchar_t *str, size_t n)
wchar_t *s;
ACE_ALLOCATOR_RETURN (s,
- (wchar_t *) ACE_OS::malloc ((len + 1) * sizeof wchar_t),
+ ACE_static_cast (wchar_t *,
+ ACE_OS::malloc ((len + 1)
+ * sizeof (wchar_t))),
0);
s[len] = L'\0';
return ACE_OS::strncpy (s, str, len);
diff --git a/ace/Basic_Types.h b/ace/Basic_Types.h
index 005f7ef96fc..4452a433cf2 100644
--- a/ace/Basic_Types.h
+++ b/ace/Basic_Types.h
@@ -56,9 +56,14 @@
# define ACE_SIZEOF_CHAR 1
// Unfortunately, there isn't a portable way to determine the size of a wchar.
-// But we do not support the case where wchar == char, so this should work.
+// So we just define them on a platform basis.
# if defined (ACE_HAS_WCHAR)
-# define ACE_SIZEOF_WCHAR sizeof (wchar_t)
+# if defined (ACE_WIN32)
+# define ACE_SIZEOF_WCHAR 2
+# else /* ACE_WIN32 */
+// 0 so the Basic_Types test will catch this.
+# define ACE_SIZEOF_WCHAR 0
+# endif /* ACE_WIN32 */
# endif /* ACE_HAS_WCHAR */
// The number of bytes in a short.
diff --git a/ace/High_Res_Timer.cpp b/ace/High_Res_Timer.cpp
index de4d38eb77c..8b60b3bcf79 100644
--- a/ace/High_Res_Timer.cpp
+++ b/ace/High_Res_Timer.cpp
@@ -353,14 +353,16 @@ ACE_High_Res_Timer::elapsed_time (ACE_hrtime_t &nanoseconds) const
// Please do _not_ rearrange this equation. It is carefully
// designed and tested to avoid overflow on machines that don't have
// native 64-bit ints.
- nanoseconds = (this->end_ - this->start_) * (1000u / this->global_scale_factor ());
+ nanoseconds = (this->end_ - this->start_)
+ * (1000u / ACE_High_Res_Timer::global_scale_factor ());
}
void
ACE_High_Res_Timer::elapsed_time_incr (ACE_hrtime_t &nanoseconds) const
{
// Same as above.
- nanoseconds = this->total_ / this->global_scale_factor () * 1000u;
+ nanoseconds = this->total_
+ / ACE_High_Res_Timer::global_scale_factor () * 1000u;
}
#if !defined (ACE_HAS_WINCE)
diff --git a/ace/Local_Name_Space_T.cpp b/ace/Local_Name_Space_T.cpp
index 6869dd56297..8ae057804d4 100644
--- a/ace/Local_Name_Space_T.cpp
+++ b/ace/Local_Name_Space_T.cpp
@@ -4,6 +4,7 @@
#define ACE_LOCAL_NAME_SPACE_T_C
#include "ace/ACE.h"
+#include "ace/Auto_Ptr.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
@@ -146,8 +147,12 @@ ACE_Local_Name_Space<ACE_MEM_POOL_2, ACE_LOCK>::shared_bind_i (const ACE_WString
ACE_USHORT16 *value_rep = (ACE_USHORT16 *) (ptr);
ACE_USHORT16 *name_rep = (ACE_USHORT16 *) (ptr + value_len);
char *new_type = (char *) (ptr + value_len + name_len);
- ACE_NS_String new_name (name_rep, name.fast_rep (), name_len);
- ACE_NS_String new_value (value_rep, value.fast_rep (), value_len);
+
+ ACE_Auto_Array_Ptr<ACE_USHORT16> name_urep (name.ushort_rep ());
+ ACE_Auto_Array_Ptr<ACE_USHORT16> value_urep (value.ushort_rep ());
+ ACE_NS_String new_name (name_rep, name_urep.get (), name_len);
+ ACE_NS_String new_value (value_rep, value_urep.get (), value_len);
+
ACE_OS::strcpy (new_type, type);
ACE_NS_Internal new_internal (new_value, new_type);
int result = -1;
@@ -909,4 +914,12 @@ ACE_Local_Name_Space<ACE_MEM_POOL_2, ACE_LOCK>::dump (void) const
}
}
+#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
+template class ACE_Auto_Array_Ptr<ACE_USHORT16>;
+template class ACE_Auto_Basic_Array_Ptr<ACE_USHORT16>;
+#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
+#pragma instantiate ACE_Auto_Array_Ptr<ACE_USHORT16>
+#pragma instantiate ACE_Auto_Basic_Array_Ptr<ACE_USHORT16>
+#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
+
#endif /* ACE_LOCAL_NAME_SPACE_T_C */
diff --git a/ace/README b/ace/README
index b101fddf2dc..65f138a4119 100644
--- a/ace/README
+++ b/ace/README
@@ -930,6 +930,10 @@ ACE_NEEDS_SCHED_H Platform needs to #include
<sched.h>
to get thread scheduling
defs.
+ACE_WSTRING_HAS_USHORT_SUPPORT If a platform has wchar_t as a separate type,
+ then ACE_WString doesn't have a constructor that
+ understands an ACE_USHORT16 string. So this
+ macro enables one. (mostly used my ACE Name Space).
----------------------------------------
The following is a partial list of where some of these macros are used
diff --git a/ace/Remote_Name_Space.cpp b/ace/Remote_Name_Space.cpp
index 1891f5ee010..0ea2f3f8b54 100644
--- a/ace/Remote_Name_Space.cpp
+++ b/ace/Remote_Name_Space.cpp
@@ -2,6 +2,7 @@
// $Id$
#include "ace/Remote_Name_Space.h"
+#include "ace/Auto_Ptr.h"
ACE_RCSID(ace, Remote_Name_Space, "$Id$")
@@ -28,7 +29,7 @@ ACE_Remote_Name_Space::ACE_Remote_Name_Space (void)
}
ACE_Remote_Name_Space::ACE_Remote_Name_Space (const ACE_TCHAR *hostname,
- u_short port)
+ u_short port)
{
ACE_TRACE ("ACE_Remote_Name_Space::ACE_Remote_Name_Space");
if (this->open (hostname, port) == -1)
@@ -37,46 +38,51 @@ ACE_Remote_Name_Space::ACE_Remote_Name_Space (const ACE_TCHAR *hostname,
int
ACE_Remote_Name_Space::bind (const ACE_WString &name,
- const ACE_WString &value,
- const char *type)
+ const ACE_WString &value,
+ const char *type)
{
ACE_TRACE ("ACE_Remote_Name_Space::bind");
+ ACE_Auto_Array_Ptr<ACE_USHORT16> name_urep (name.ushort_rep ());
+ ACE_Auto_Array_Ptr<ACE_USHORT16> value_urep (value.ushort_rep ());
ACE_Name_Request request (ACE_Name_Request::BIND,
- name.fast_rep (),
- name.length () * sizeof (ACE_USHORT16),
- value.fast_rep (),
- value.length () * sizeof (ACE_USHORT16),
- type,
+ name_urep.get (),
+ name.length () * sizeof (ACE_USHORT16),
+ value_urep.get (),
+ value.length () * sizeof (ACE_USHORT16),
+ type,
ACE_OS::strlen (type));
return this->ns_proxy_.request_reply (request);
}
int
ACE_Remote_Name_Space::rebind (const ACE_WString &name,
- const ACE_WString &value,
- const char *type)
+ const ACE_WString &value,
+ const char *type)
{
ACE_TRACE ("ACE_Remote_Name_Space::rebind");
+ ACE_Auto_Array_Ptr<ACE_USHORT16> name_urep (name.ushort_rep ());
+ ACE_Auto_Array_Ptr<ACE_USHORT16> value_urep (value.ushort_rep ());
ACE_Name_Request request (ACE_Name_Request::REBIND,
- name.fast_rep (),
- name.length () * sizeof (ACE_USHORT16),
- value.fast_rep (),
- value.length () * sizeof (ACE_USHORT16),
- type,
+ name_urep.get (),
+ name.length () * sizeof (ACE_USHORT16),
+ value_urep.get (),
+ value.length () * sizeof (ACE_USHORT16),
+ type,
ACE_OS::strlen (type));
return this->ns_proxy_.request_reply (request);
}
int
ACE_Remote_Name_Space::resolve (const ACE_WString &name,
- ACE_WString &value,
- char *&type)
+ ACE_WString &value,
+ char *&type)
{
ACE_TRACE ("ACE_Remote_Name_Space::resolve");
+ ACE_Auto_Array_Ptr<ACE_USHORT16> name_urep (name.ushort_rep ());
ACE_Name_Request request (ACE_Name_Request::RESOLVE,
- name.fast_rep (),
- name.length () * sizeof (ACE_USHORT16),
- 0, 0, 0, 0);
+ name_urep.get (),
+ name.length () * sizeof (ACE_USHORT16),
+ 0, 0, 0, 0);
if (this->ns_proxy_.send_request (request) == -1)
return -1;
@@ -99,22 +105,24 @@ int
ACE_Remote_Name_Space::unbind (const ACE_WString &name)
{
ACE_TRACE ("ACE_Remote_Name_Space::unbind");
+ ACE_Auto_Array_Ptr<ACE_USHORT16> name_urep (name.ushort_rep ());
ACE_Name_Request request (ACE_Name_Request::UNBIND,
- name.fast_rep (),
- name.length () * sizeof (ACE_USHORT16),
- 0, 0, 0, 0);
+ name_urep.get (),
+ name.length () * sizeof (ACE_USHORT16),
+ 0, 0, 0, 0);
return this->ns_proxy_.request_reply (request);
}
int
ACE_Remote_Name_Space::list_names (ACE_WSTRING_SET &set,
- const ACE_WString &pattern)
+ const ACE_WString &pattern)
{
ACE_TRACE ("ACE_Remote_Name_Space::list_names");
+ ACE_Auto_Array_Ptr<ACE_USHORT16> pattern_urep (pattern.ushort_rep ());
ACE_Name_Request request (ACE_Name_Request::LIST_NAMES,
- pattern.fast_rep (),
- pattern.length () * sizeof (ACE_USHORT16),
- 0, 0, 0, 0);
+ pattern_urep.get (),
+ pattern.length () * sizeof (ACE_USHORT16),
+ 0, 0, 0, 0);
if (this->ns_proxy_.send_request (request) == -1)
return -1;
@@ -128,24 +136,25 @@ ACE_Remote_Name_Space::list_names (ACE_WSTRING_SET &set,
ACE_TEXT ("ACE_Remote_Name_Space::list_names")),
-1);
if (reply.msg_type () != ACE_Name_Request::MAX_ENUM)
- {
- ACE_WString name (reply.name (),
+ {
+ ACE_WString name (reply.name (),
reply.name_len () / sizeof (ACE_USHORT16));
- set.insert (name);
- }
+ set.insert (name);
+ }
}
return 0;
}
int
ACE_Remote_Name_Space::list_values (ACE_WSTRING_SET &set,
- const ACE_WString &pattern)
+ const ACE_WString &pattern)
{
ACE_TRACE ("ACE_Remote_Name_Space::list_values");
+ ACE_Auto_Array_Ptr<ACE_USHORT16> pattern_urep (pattern.ushort_rep ());
ACE_Name_Request request (ACE_Name_Request::LIST_VALUES,
- pattern.fast_rep (),
- pattern.length () * sizeof (ACE_USHORT16),
- 0, 0, 0, 0);
+ pattern_urep.get (),
+ pattern.length () * sizeof (ACE_USHORT16),
+ 0, 0, 0, 0);
if (this->ns_proxy_.send_request (request) == -1)
return -1;
@@ -159,11 +168,11 @@ ACE_Remote_Name_Space::list_values (ACE_WSTRING_SET &set,
ACE_TEXT ("ACE_Remote_Name_Space::list_values")),
-1);
if (reply.msg_type () != ACE_Name_Request::MAX_ENUM)
- {
- ACE_WString value (reply.value (),
+ {
+ ACE_WString value (reply.value (),
reply.value_len () / sizeof (ACE_USHORT16));
- set.insert (value);
- }
+ set.insert (value);
+ }
}
return 0;
@@ -171,13 +180,14 @@ ACE_Remote_Name_Space::list_values (ACE_WSTRING_SET &set,
int
ACE_Remote_Name_Space::list_types (ACE_WSTRING_SET &set,
- const ACE_WString &pattern)
+ const ACE_WString &pattern)
{
ACE_TRACE ("ACE_Remote_Name_Space::list_types");
+ ACE_Auto_Array_Ptr<ACE_USHORT16> pattern_urep (pattern.ushort_rep ());
ACE_Name_Request request (ACE_Name_Request::LIST_TYPES,
- pattern.fast_rep (),
- pattern.length () * sizeof (ACE_USHORT16),
- 0, 0, 0, 0);
+ pattern_urep.get (),
+ pattern.length () * sizeof (ACE_USHORT16),
+ 0, 0, 0, 0);
if (this->ns_proxy_.send_request (request) == -1)
return -1;
@@ -192,10 +202,10 @@ ACE_Remote_Name_Space::list_types (ACE_WSTRING_SET &set,
ACE_TEXT ("ACE_Remote_Name_Space::list_values")),
-1);
if (reply.msg_type () != ACE_Name_Request::MAX_ENUM)
- {
- ACE_WString type (reply.type ());
- set.insert (type);
- }
+ {
+ ACE_WString type (reply.type ());
+ set.insert (type);
+ }
}
return 0;
@@ -203,13 +213,14 @@ ACE_Remote_Name_Space::list_types (ACE_WSTRING_SET &set,
int
ACE_Remote_Name_Space::list_name_entries (ACE_BINDING_SET &set,
- const ACE_WString &pattern)
+ const ACE_WString &pattern)
{
ACE_TRACE ("ACE_Remote_Name_Space::list_names");
+ ACE_Auto_Array_Ptr<ACE_USHORT16> pattern_urep (pattern.ushort_rep ());
ACE_Name_Request request (ACE_Name_Request::LIST_NAME_ENTRIES,
- pattern.fast_rep (),
- pattern.length () * sizeof (ACE_USHORT16),
- 0, 0, 0, 0);
+ pattern_urep.get (),
+ pattern.length () * sizeof (ACE_USHORT16),
+ 0, 0, 0, 0);
if (this->ns_proxy_.send_request (request) == -1)
return -1;
@@ -224,30 +235,31 @@ ACE_Remote_Name_Space::list_name_entries (ACE_BINDING_SET &set,
ACE_TEXT ("ACE_Remote_Name_Space::list_names")),
-1);
if (reply.msg_type () != ACE_Name_Request::MAX_ENUM)
- {
- ACE_WString name (reply.name (),
+ {
+ ACE_WString name (reply.name (),
reply.name_len () / sizeof (ACE_USHORT16));
- ACE_WString value (reply.value (),
+ ACE_WString value (reply.value (),
reply.value_len () / sizeof (ACE_USHORT16));
- ACE_Name_Binding entry (name,
+ ACE_Name_Binding entry (name,
value,
reply.type ());
- if (set.insert (entry) == -1)
- return -1;
- }
+ if (set.insert (entry) == -1)
+ return -1;
+ }
}
return 0;
}
int
ACE_Remote_Name_Space::list_value_entries (ACE_BINDING_SET &set,
- const ACE_WString &pattern)
+ const ACE_WString &pattern)
{
ACE_TRACE ("ACE_Remote_Name_Space::list_values");
+ ACE_Auto_Array_Ptr<ACE_USHORT16> pattern_urep (pattern.ushort_rep ());
ACE_Name_Request request (ACE_Name_Request::LIST_VALUE_ENTRIES,
- pattern.fast_rep (),
- pattern.length () * sizeof (ACE_USHORT16),
- 0, 0, 0, 0);
+ pattern_urep.get (),
+ pattern.length () * sizeof (ACE_USHORT16),
+ 0, 0, 0, 0);
if (this->ns_proxy_.send_request (request) == -1)
return -1;
@@ -262,30 +274,31 @@ ACE_Remote_Name_Space::list_value_entries (ACE_BINDING_SET &set,
ACE_TEXT ("ACE_Remote_Name_Space::list_values")),
-1);
if (reply.msg_type () != ACE_Name_Request::MAX_ENUM)
- {
- ACE_WString name (reply.name (),
+ {
+ ACE_WString name (reply.name (),
reply.name_len () / sizeof (ACE_USHORT16));
- ACE_WString value (reply.value (),
+ ACE_WString value (reply.value (),
reply.value_len () / sizeof (ACE_USHORT16));
- ACE_Name_Binding entry (name,
+ ACE_Name_Binding entry (name,
value,
reply.type());
- if (set.insert (entry) == -1)
- return -1;
- }
+ if (set.insert (entry) == -1)
+ return -1;
+ }
}
return 0;
}
int
ACE_Remote_Name_Space::list_type_entries (ACE_BINDING_SET &set,
- const ACE_WString &pattern)
+ const ACE_WString &pattern)
{
ACE_TRACE ("ACE_Remote_Name_Space::list_types");
+ ACE_Auto_Array_Ptr<ACE_USHORT16> pattern_urep (pattern.ushort_rep ());
ACE_Name_Request request (ACE_Name_Request::LIST_TYPE_ENTRIES,
- pattern.fast_rep (),
- pattern.length () * sizeof (ACE_USHORT16),
- 0, 0, 0, 0);
+ pattern_urep.get (),
+ pattern.length () * sizeof (ACE_USHORT16),
+ 0, 0, 0, 0);
if (this->ns_proxy_.send_request (request) == -1)
return -1;
@@ -300,17 +313,17 @@ ACE_Remote_Name_Space::list_type_entries (ACE_BINDING_SET &set,
ACE_TEXT ("ACE_Remote_Name_Space::list_values")),
-1);
if (reply.msg_type () != ACE_Name_Request::MAX_ENUM)
- {
- ACE_WString name (reply.name (),
+ {
+ ACE_WString name (reply.name (),
reply.name_len () / sizeof (ACE_USHORT16));
- ACE_WString value (reply.value (),
+ ACE_WString value (reply.value (),
reply.value_len () / sizeof (ACE_USHORT16));
- ACE_Name_Binding entry (name,
+ ACE_Name_Binding entry (name,
value,
reply.type ());
- if (set.insert (entry) == -1)
- return -1;
- }
+ if (set.insert (entry) == -1)
+ return -1;
+ }
}
return 0;
}
diff --git a/ace/SString.cpp b/ace/SString.cpp
index c53e826fb4d..51004f0789e 100644
--- a/ace/SString.cpp
+++ b/ace/SString.cpp
@@ -679,6 +679,32 @@ ACE_WString::char_rep (void) const
}
}
+// Get the underlying pointer as an ASCII char.
+
+ACE_USHORT16 *
+ACE_WString::ushort_rep (void) const
+{
+ ACE_TRACE ("ACE_WString::char_rep");
+ if (this->len_ <= 0)
+ return 0;
+ else
+ {
+ ACE_USHORT16 *t;
+
+ ACE_NEW_RETURN (t,
+ ACE_USHORT16[this->len_ + 1],
+ 0);
+
+ for (size_t i = 0; i < this->len_; i++)
+ // Note that this cast may lose data if wide chars are
+ // actually used!
+ t[i] = (ACE_USHORT16)this->rep_[i];
+
+ t[this->len_] = 0;
+ return t;
+ }
+}
+
// Constructor that actually copies memory.
ACE_WString::ACE_WString (const char *s,
@@ -796,6 +822,38 @@ ACE_WString::ACE_WString (const ACE_WSTRING_TYPE *s,
}
}
+#if defined (ACE_WSTRING_HAS_USHORT_SUPPORT)
+ACE_WString::ACE_WString (const ACE_USHORT16 *s,
+ size_t len,
+ ACE_Allocator *alloc)
+{
+ ACE_TRACE ("ACE_WString::ACE_WString");
+
+ if (this->allocator_ == 0)
+ this->allocator_ = ACE_Allocator::instance ();
+
+ if (s == 0)
+ {
+ this->len_ = 0;
+ this->rep_ = (ACE_WSTRING_TYPE *) this->allocator_->malloc
+ ((this->len_ + 1) * sizeof (ACE_WSTRING_TYPE));
+ this->rep_[this->len_] = 0;
+ }
+ else
+ {
+ this->len_ = len;
+ this->rep_ = (ACE_WSTRING_TYPE *) this->allocator_->malloc
+ ((this->len_ + 1) * sizeof (ACE_WSTRING_TYPE));
+
+ for (size_t i = 0; i <= len; ++i)
+ this->rep_[i] = (const ACE_WSTRING_TYPE) s[i];
+
+ // null terminate
+ this->rep_[this->len_] = 0;
+ }
+}
+#endif /* ACE_WSTRING_HAS_USHORT_SUPPORT */
+
// Constructor that allocates empty memory
ACE_WString::ACE_WString (size_t len,
@@ -981,4 +1039,3 @@ ACE_WString::strstr (const ACE_WSTRING_TYPE *s1,
return 0;
}
-
diff --git a/ace/SString.h b/ace/SString.h
index 3a86f38cb8c..7fd0cda8fab 100644
--- a/ace/SString.h
+++ b/ace/SString.h
@@ -235,6 +235,14 @@ public:
ACE_Allocator *alloc = 0);
// Constructor that copies <s> into dynamically allocated memory.
+#if defined (ACE_WSTRING_HAS_USHORT_SUPPORT)
+ ACE_WString (const ACE_USHORT16 *s,
+ size_t len,
+ ACE_Allocator *alloc = 0);
+ // Constructor that takes in a ushort16 string (mainly used by the
+ // ACE Name_Space classes)
+#endif /* ACE_WSTRING_HAS_USHORT_SUPPORT */
+
ACE_WString (const ACE_WSTRING_TYPE *s,
size_t len,
ACE_Allocator *alloc = 0);
@@ -294,6 +302,11 @@ public:
char *char_rep (void) const;
// Transform into a copy of the ASCII character representation.
+ // (caller must delete)
+
+ ACE_USHORT16 *ushort_rep (void) const;
+ // Transform into a copy of a USHORT16 representation (caller must
+ // delete). Note, behavior is undefined when sizeof (wchar_t) != 2.
const ACE_WSTRING_TYPE *fast_rep (void) const;
// Get at the underlying representation directly!
diff --git a/ace/config-win32-borland.h b/ace/config-win32-borland.h
index 1229400bc5c..72563d92f0d 100644
--- a/ace/config-win32-borland.h
+++ b/ace/config-win32-borland.h
@@ -66,6 +66,7 @@
# define ACE_UINT64_FORMAT_SPECIFIER ACE_TEXT ("%Lu")
# define ACE_INT64_FORMAT_SPECIFIER ACE_TEXT ("%Ld")
# define ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB 1
+# define ACE_WSTRING_HAS_USHORT_SUPPORT 1
/* need to ensure these are included before <iomanip> */
# include <time.h>