Go to the documentation of this file.00001
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
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 }
00215
00216 TAO_END_VERSIONED_NAMESPACE_DECL