Local_Name_Space.cpp

Go to the documentation of this file.
00001 #include "ace/Local_Name_Space.h"
00002 #include "ace/ACE.h"
00003 #include "ace/RW_Process_Mutex.h"
00004 #include "ace/SString.h"
00005 #include "ace/OS_NS_string.h"
00006 #include "ace/Truncate.h"
00007 
00008 ACE_RCSID (ace,
00009            Local_Name_Space,
00010            "$Id: Local_Name_Space.cpp 80826 2008-03-04 14:51:23Z wotte $")
00011 
00012 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00013 
00014 ACE_NS_String::~ACE_NS_String (void)
00015 {
00016   if (this->delete_rep_)
00017     delete [] this->rep_;
00018 }
00019 
00020 ACE_WCHAR_T *
00021 ACE_NS_String::fast_rep (void) const
00022 {
00023   ACE_TRACE ("ACE_NS_String::fast_rep");
00024   return this->rep_;
00025 }
00026 
00027 ACE_NS_String::operator ACE_NS_WString () const
00028 {
00029   ACE_TRACE ("ACE_NS_String::operator ACE_NS_WString");
00030   return ACE_NS_WString (this->rep_,
00031                          (this->len_ / sizeof (ACE_WCHAR_T)) - 1);
00032 }
00033 
00034 size_t
00035 ACE_NS_String::len (void) const
00036 {
00037   ACE_TRACE ("ACE_NS_String::len");
00038   return this->len_;
00039 }
00040 
00041 char *
00042 ACE_NS_String::char_rep (void) const
00043 {
00044   ACE_TRACE ("ACE_NS_String::char_rep");
00045   ACE_NS_WString w_string (this->rep_,
00046                            (this->len_ / sizeof (ACE_WCHAR_T)) - 1);
00047   return w_string.char_rep ();
00048 }
00049 
00050 ACE_NS_String::ACE_NS_String (void)
00051   : len_ (0),
00052     rep_ (0),
00053     delete_rep_ (false)
00054 {
00055   ACE_TRACE ("ACE_NS_String::ACE_NS_String");
00056 }
00057 
00058 ACE_NS_String::ACE_NS_String (const ACE_NS_WString &s)
00059   : len_ ((s.length () + 1) * sizeof (ACE_WCHAR_T)),
00060     rep_ (s.rep ()),
00061     delete_rep_ (true)
00062 {
00063   ACE_TRACE ("ACE_NS_String::ACE_NS_String");
00064 }
00065 
00066 int
00067 ACE_NS_String::strstr (const ACE_NS_String &s) const
00068 {
00069   ACE_TRACE ("ACE_NS_String::strstr");
00070 
00071   if (this->len_ < s.len_)
00072     // If they're larger than we are they can't be a substring of us!
00073     return -1;
00074   else if (this->len_ == s.len_)
00075     // Check if we're equal.
00076     return *this == s ? 0 : -1;
00077   else
00078     {
00079       // They're smaller than we are...
00080       const size_t len = (this->len_ - s.len_) / sizeof (ACE_WCHAR_T);
00081       const size_t pat_len = s.len_ / sizeof (ACE_WCHAR_T) - 1;
00082 
00083       for (size_t i = 0; i <= len; ++i)
00084         {
00085           size_t j;
00086 
00087           for (j = 0; j < pat_len; ++j)
00088             if (this->rep_[i + j] != s.rep_[j])
00089               break;
00090 
00091           if (j == pat_len)
00092             // Found a match!  Return the index.
00093             return ACE_Utils::truncate_cast<int> (i);
00094         }
00095 
00096       return -1;
00097     }
00098 }
00099 
00100 bool
00101 ACE_NS_String::operator == (const ACE_NS_String &s) const
00102 {
00103   ACE_TRACE ("ACE_NS_String::operator ==");
00104   return this->len_ == s.len_
00105     && ACE_OS::memcmp ((void *) this->rep_,
00106                        (void *) s.rep_, this->len_) == 0;
00107 }
00108 
00109 bool
00110 ACE_NS_String::operator != (const ACE_NS_String &s) const
00111 {
00112   ACE_TRACE ("ACE_NS_String::operator !=");
00113   return !this->operator == (s);
00114 }
00115 
00116 ACE_NS_String::ACE_NS_String (ACE_WCHAR_T *dst,
00117                               const ACE_WCHAR_T *src,
00118                               size_t bytes)
00119   : len_ (bytes),
00120     rep_ (dst),
00121     delete_rep_ (false)
00122 {
00123   ACE_TRACE ("ACE_NS_String::ACE_NS_String");
00124   ACE_OS::memcpy (this->rep_, src, bytes);
00125 }
00126 
00127 u_long
00128 ACE_NS_String::hash (void) const
00129 {
00130   return ACE::hash_pjw
00131     (reinterpret_cast<char *> (const_cast<ACE_WCHAR_T *> (this->rep_)),
00132      this->len_);
00133 }
00134 
00135 ACE_NS_Internal::ACE_NS_Internal (void)
00136   : value_ (),
00137     type_ ()
00138 {
00139 }
00140 
00141 ACE_NS_Internal::ACE_NS_Internal (ACE_NS_String &value, const char *type)
00142   : value_ (value),
00143     type_ (type)
00144 {
00145   ACE_TRACE ("ACE_NS_Internal::ACE_NS_Internal");
00146 }
00147 
00148 bool
00149 ACE_NS_Internal::operator == (const ACE_NS_Internal &s) const
00150 {
00151   ACE_TRACE ("ACE_NS_Internal::operator ==");
00152   return this->value_ == s.value_;
00153 }
00154 
00155 ACE_NS_String
00156 ACE_NS_Internal::value (void)
00157 {
00158   ACE_TRACE ("ACE_NS_Internal::value");
00159   return this->value_;
00160 }
00161 
00162 const char *
00163 ACE_NS_Internal::type (void)
00164 {
00165   ACE_TRACE ("ACE_NS_Internal::type");
00166   return this->type_;
00167 }
00168 
00169 ACE_END_VERSIONED_NAMESPACE_DECL

Generated on Tue Feb 2 17:18:40 2010 for ACE by  doxygen 1.4.7