00001
00002
00003 #include "PSDL_String.h"
00004
00005 #include "ace/Malloc_Base.h"
00006 #include "ace/SString.h"
00007
00008 ACE_RCSID (PSS, PSDL_String, "$Id")
00009
00010
00011 TAO_PSDL_String::TAO_PSDL_String ()
00012 : allocator_ (0),
00013 buffer_ (0),
00014 length_ (0)
00015 {
00016 }
00017
00018
00019 TAO_PSDL_String::TAO_PSDL_String (ACE_Allocator * persistent_allocator)
00020 : allocator_ (persistent_allocator),
00021 buffer_ (0),
00022 length_ (0)
00023 {
00024 }
00025
00026
00027 TAO_PSDL_String::~TAO_PSDL_String (void)
00028 {
00029 if (this->buffer_ != 0)
00030 this->allocator_->free ((void *) this->buffer_);
00031 }
00032
00033
00034 TAO_PSDL_String::TAO_PSDL_String (const TAO_PSDL_String & rhs)
00035 {
00036 *this = rhs;
00037 }
00038
00039
00040 void
00041 TAO_PSDL_String::operator= (const TAO_PSDL_String & rhs)
00042 {
00043 if (this == &rhs)
00044 return;
00045
00046
00047
00048 if (this->buffer_ != 0)
00049 this->allocator_->free ((void *) this->buffer_);
00050
00051 this->allocator_ = rhs.allocator_;
00052 void * buf = this->allocator_->malloc (rhs.length_);
00053 this->buffer_ = (const char *) buf;
00054 if (this->buffer_)
00055 {
00056
00057 ACE_OS::memcpy ( (void *) this->buffer_,
00058 rhs.buffer_,
00059 rhs.length_);
00060
00061 this->length_ = rhs.length_;
00062 }
00063 else
00064 this->length_ = 0;
00065 }
00066
00067 void
00068 TAO_PSDL_String::operator= (const ACE_CString & rhs)
00069 {
00070
00071
00072 if (this->buffer_ != 0)
00073 this->allocator_->free ((void *) this->buffer_);
00074
00075 const CORBA::ULong len = rhs.length ();
00076
00077 void * buf = this->allocator_->malloc (len);
00078
00079 this->buffer_ = (const char *) buf;
00080
00081 if (this->buffer_)
00082 {
00083 const char * dest = this->buffer_;
00084 const char * src = rhs.rep ();
00085
00086
00087 ACE_OS::memcpy ((void *)dest,
00088 src,
00089 len);
00090
00091 this->length_ = len;
00092 }
00093 else
00094 this->length_ = 0;
00095 }
00096
00097 bool
00098 TAO_PSDL_String::operator== (const TAO_PSDL_String &rhs) const
00099 {
00100 return (ACE_OS::strcmp (buffer_, rhs.buffer_) == 0);
00101 }
00102
00103 bool
00104 TAO_PSDL_String::operator!= (const TAO_PSDL_String &rhs) const
00105 {
00106 return (ACE_OS::strcmp (buffer_, rhs.buffer_) != 0);
00107 }
00108
00109 u_long
00110 TAO_PSDL_String::hash (void) const
00111 {
00112 return ACE::hash_pjw (this->buffer_);
00113 }
00114
00115
00116
00117 TAO_PSDL_String::operator ACE_CString *() const
00118 {
00119 ACE_CString *str = 0;
00120
00121 char * dest = str->rep ();
00122 const char * src = this->buffer_;
00123
00124 ACE_OS::memcpy (dest, src, this->length_);
00125
00126 return str;
00127 }
00128
00129 TAO_PSDL_String::operator ACE_CString *()
00130 {
00131 ACE_CString *str = 0;
00132
00133 char * dest = str->rep ();
00134 const char * src = this->buffer_;
00135 ACE_OS::memcpy (dest, src, this->length_);
00136
00137 return str;
00138 }