diff options
author | brunsch <brunsch@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2000-05-12 19:01:05 +0000 |
---|---|---|
committer | brunsch <brunsch@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2000-05-12 19:01:05 +0000 |
commit | 7ecc9a8ee0b3e629728e81e78f819a4d58aaeae2 (patch) | |
tree | bb5ec9a1c265851977d93513b6a4757630a56792 /ace | |
parent | afbad282e36cceec9361a49d5194331a06432856 (diff) | |
download | ATCD-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.cpp | 4 | ||||
-rw-r--r-- | ace/Basic_Types.h | 9 | ||||
-rw-r--r-- | ace/High_Res_Timer.cpp | 6 | ||||
-rw-r--r-- | ace/Local_Name_Space_T.cpp | 17 | ||||
-rw-r--r-- | ace/README | 4 | ||||
-rw-r--r-- | ace/Remote_Name_Space.cpp | 173 | ||||
-rw-r--r-- | ace/SString.cpp | 59 | ||||
-rw-r--r-- | ace/SString.h | 13 | ||||
-rw-r--r-- | ace/config-win32-borland.h | 1 |
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> |