Name_Value_Pair.cpp

Go to the documentation of this file.
00001 // $Id: Name_Value_Pair.cpp 78858 2007-07-12 23:24:55Z sowayaa $
00002 
00003 #include "orbsvcs/Notify/Name_Value_Pair.h"
00004 #include "orbsvcs/Notify/Property_T.h"
00005 #include "ace/OS_String.h"
00006 #include "ace/OS_NS_stdio.h"
00007 
00008 namespace
00009 {
00010   ACE_UINT64 string_to_uint64 (const char * s)
00011   {
00012     size_t const len = ACE_OS::strlen (s);
00013     if (len == 0)
00014       return 0;
00015     if (! ACE_OS::ace_isdigit(s[0]))
00016       return 0;
00017 
00018     ACE_UINT64 t = 0;
00019     for (size_t i = 0; i < len; ++i)
00020     {
00021       if (ACE_OS::ace_isdigit(s[i]) == 0)
00022       {
00023         break;
00024       }
00025       t *= 10;
00026       t += (s[i] - '0');
00027     }
00028     return t;
00029   }
00030 }
00031 
00032 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00033 
00034 namespace TAO_Notify
00035 {
00036   NVP::NVP()
00037   {
00038   }
00039 
00040   NVP::NVP(const TAO_Notify_Property_Short& p)
00041     : name(p.name())
00042   {
00043     char buf[64];
00044     ACE_OS::sprintf (buf, "%d", p.value ());
00045     value = buf;
00046   }
00047 
00048   NVP::NVP(const TAO_Notify_Property_Long& p)
00049     : name(p.name())
00050   {
00051     char buf[64];
00052     long temp = static_cast<long> (p.value ());
00053     ACE_OS::sprintf (buf, "%ld", temp);
00054     value = buf;
00055   }
00056 
00057   NVP::NVP(const TAO_Notify_Property_Time& p)
00058     : name(p.name())
00059   {
00060     ACE_TCHAR buf[128];
00061     ACE_UINT64 us = p.value();
00062 #ifdef ACE_LACKS_LONGLONG_T
00063     us.as_string(buf);
00064 #else
00065     ACE_OS::sprintf(buf, ACE_UINT64_FORMAT_SPECIFIER, us);
00066 #endif /* ACE_LACKS_LONGLONG_T */
00067     value = ACE_TEXT_ALWAYS_CHAR (buf);
00068   }
00069 
00070   NVP::NVP(const TAO_Notify_Property_Boolean& p)
00071     : name(p.name())
00072   {
00073     value = p.value() ? "true" : "false";
00074   }
00075 
00076   NVP::NVP(const char * n, CORBA::Long v)
00077     : name(n)
00078   {
00079     char buf[64];
00080     long temp = v;
00081     ACE_OS::sprintf (buf, "%ld", temp);
00082     value = buf;
00083   }
00084 
00085   NVP::NVP(const char * n, const char * v)
00086     : name(n), value(v)
00087   {
00088   }
00089 
00090   NVP::NVP(const char * n, const ACE_CString & v)
00091     : name(n), value(v)
00092   {
00093   }
00094 
00095   bool NVP::operator==(const NVP& rhs) const
00096   {
00097     return (this->name == rhs.name) != 0;
00098   }
00099 
00100   bool NVP::operator!=(const NVP& rhs) const
00101   {
00102     return ! (rhs == *this);
00103   }
00104 
00105   bool NVPList::find (const char * name, ACE_CString& val) const
00106   {
00107     for (size_t i = 0; i < list_.size(); ++i)
00108     {
00109       if (list_[i].name == name)
00110       {
00111         val = list_[i].value;
00112         return true;
00113       }
00114     }
00115     return false;
00116   }
00117 
00118   bool NVPList::find (const char * name, const char *& val) const
00119   {
00120     for (size_t i = 0; i < list_.size(); ++i)
00121     {
00122       if (list_[i].name == name)
00123       {
00124         val = list_[i].value.c_str ();
00125         return true;
00126       }
00127     }
00128     return false;
00129   }
00130 
00131   void NVPList::load(TAO_Notify_Property_Short& p) const
00132   {
00133     const char * v;
00134     if (find(p.name(), v))
00135     {
00136       p.assign (static_cast<CORBA::Short> (ACE_OS::atoi(v)));
00137     }
00138   }
00139 
00140   void NVPList::load(TAO_Notify_Property_Long& p) const
00141   {
00142     const char * v;
00143     if (find(p.name(), v))
00144     {
00145       p.assign (static_cast<CORBA::Long> (ACE_OS::atoi(v)));
00146     }
00147   }
00148 
00149   void NVPList::load(TAO_Notify_Property_Time& p) const
00150   {
00151     const char * v;
00152     if (find(p.name (), v))
00153     {
00154       p.assign (static_cast<TimeBase::TimeT> (string_to_uint64(v)));
00155     }
00156   }
00157 
00158   void NVPList::load(TAO_Notify_Property_Boolean& p) const
00159   {
00160     ACE_CString v;
00161     if (find(p.name (), v))
00162     {
00163       if (v == "true")
00164       {
00165         p = 1;
00166       }
00167       else
00168       {
00169         p = 0;
00170       }
00171     }
00172   }
00173 
00174   bool NVPList::load(const char * n, CORBA::Long& v) const
00175   {
00176     const char * val;
00177     if (find(n, val))
00178     {
00179       v = static_cast<CORBA::Long> (ACE_OS::atoi(val));
00180       return true;
00181     }
00182     return false;
00183   }
00184 
00185   bool NVPList::load(const char * n, ACE_CString& v) const
00186   {
00187     return find(n, v);
00188   }
00189 
00190   void NVPList::push_back(const NVP& v)
00191   {
00192     for (size_t i = 0; i < list_.size(); ++i)
00193     {
00194       if (list_[i].name == v.name)
00195       {
00196         list_[i].value = v.value;
00197         return;
00198       }
00199     }
00200     list_.push_back(v);
00201   }
00202 
00203   size_t NVPList::size() const
00204   {
00205     return list_.size();
00206   }
00207 
00208   const NVP& NVPList::operator[](size_t ndx) const
00209   {
00210     ACE_ASSERT (ndx < list_.size());
00211     return list_[ndx];
00212   }
00213 
00214 } // namespace TAO_Notify
00215 
00216 TAO_END_VERSIONED_NAMESPACE_DECL

Generated on Tue Feb 2 17:45:29 2010 for TAO_CosNotification by  doxygen 1.4.7