00001
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include <ctype.h>
00015 #include <string.h>
00016
00017 #include "CTBnum.hxx"
00018 #include "CTBcstringBase.hxx"
00019
00025
00027
00028 template <CTBint DIM>
00029 inline CTBcstring<DIM>::CTBcstring()
00030 {
00031 m_data[0] = 0;
00032 }
00033
00034
00036
00037 template <CTBint DIM>
00038 inline CTBcstring<DIM>::CTBcstring(const char* c_src)
00039 {
00040 CTBcstringBase::Copy(m_data,DIM,c_src);
00041 }
00042
00043
00045
00046 template <CTBint DIM>
00047 inline CTBcstring<DIM>::CTBcstring(const char* c_src, CTBint i_length)
00048 {
00049 CTBcstringBase::Copy(m_data,DIM,c_src,0,i_length);
00050 }
00051
00052
00054
00055 template <CTBint DIM>
00056 inline CTBcstring<DIM>::CTBcstring(const CTBcstring<DIM>& rhs)
00057 {
00058 CTBcstringBase::Copy(m_data,DIM,rhs);
00059 }
00060
00061
00063
00064 template <CTBint DIM>
00065 inline CTBint CTBcstring<DIM>::Size() const
00066 {
00067 return DIM;
00068 }
00069
00070
00072
00073 template <CTBint DIM>
00074 inline CTBint CTBcstring<DIM>::Length() const
00075 {
00076 return strlen(m_data);
00077 }
00078
00079
00081
00082 template <CTBint DIM>
00083 inline void CTBcstring<DIM>::Copy(const char* c_src,
00084 CTBint i_offset, CTBint i_length)
00085 {
00086 CTBcstringBase::Copy(m_data,DIM,c_src,i_offset,i_length);
00087 return;
00088 }
00089
00090
00092
00093 template <CTBint DIM>
00094 inline void CTBcstring<DIM>::Append(const char* c_src,
00095 CTBint i_offset, CTBint i_length)
00096 {
00097 CTBcstringBase::Append(m_data,DIM,c_src,i_offset,i_length);
00098 return;
00099 }
00100
00101
00103
00104 template <CTBint DIM>
00105 inline void CTBcstring<DIM>::Trim()
00106 {
00107 CTBcstringBase::Trim(m_data,DIM);
00108 return;
00109 }
00110
00111
00113
00114 template <CTBint DIM>
00115 inline void CTBcstring<DIM>::Toupper()
00116 {
00117 CTBcstringBase::Toupper(m_data,DIM);
00118 return;
00119 }
00120
00121
00123
00124 template <CTBint DIM>
00125 inline void CTBcstring<DIM>::Tolower()
00126 {
00127 CTBcstringBase::Tolower(m_data,DIM);
00128 return;
00129 }
00130
00131
00133
00134 template <CTBint DIM>
00135 inline bool CTBcstring<DIM>::Get(long& i_val, int i_base) const
00136 {
00137 return CTBcstringBase::Get(m_data,-1,i_val,i_base);
00138 }
00139
00140
00142
00143 template <CTBint DIM>
00144 inline bool CTBcstring<DIM>::Get(unsigned long& i_val, int i_base) const
00145 {
00146 return CTBcstringBase::Get(m_data,-1,i_val,i_base);
00147 }
00148
00149
00151
00152 template <CTBint DIM>
00153 inline bool CTBcstring<DIM>::Get(int& i_val, int i_base) const
00154 {
00155 return CTBcstringBase::Get(m_data,-1,i_val,i_base);
00156 }
00157
00158
00160
00161 template <CTBint DIM>
00162 inline bool CTBcstring<DIM>::Get(unsigned int& i_val, int i_base) const
00163 {
00164 return CTBcstringBase::Get(m_data,-1,i_val,i_base);
00165 }
00166
00167
00169
00170 template <CTBint DIM>
00171 inline bool CTBcstring<DIM>::Get(double& d_val) const
00172 {
00173 return CTBcstringBase::Get(m_data,-1,d_val);
00174 }
00175
00176
00178
00179 template <CTBint DIM>
00180 inline bool CTBcstring<DIM>::Get(float& f_val) const
00181 {
00182 return CTBcstringBase::Get(m_data,-1,f_val);
00183 }
00184
00185
00187
00188 template <CTBint DIM>
00189 inline CTBint CTBcstring<DIM>::Locate(char c_char) const
00190 {
00191 return CTBcstringBase::Locate(m_data,DIM,c_char);
00192 }
00193
00194
00196
00197 template <CTBint DIM>
00198 inline int CTBcstring<DIM>::NField(const char* c_delim) const
00199 {
00200 return CTBcstringBase::NField(m_data,DIM,c_delim);
00201 }
00202
00203
00205
00206 template <CTBint DIM>
00207 inline bool CTBcstring<DIM>::CopyField(const char* c_src,
00208 CTBint i_ind, const char* c_delim)
00209 {
00210 return CTBcstringBase::CopyField(m_data,DIM,c_src,i_ind,c_delim);
00211 }
00212
00213
00215
00216 template <CTBint DIM>
00217 inline bool CTBcstring<DIM>::GetLine(istream& is)
00218 {
00219 return CTBcstringBase::GetLine(m_data,DIM,is);
00220 }
00221
00222
00224
00225 template <CTBint DIM>
00226 inline bool CTBcstring<DIM>::FromStream(istream& is)
00227 {
00228 return CTBcstringBase::FromStream(m_data,DIM,is);
00229 }
00230
00231
00233
00234 template <CTBint DIM>
00235 inline char& CTBcstring<DIM>::operator[](CTBint i_ind)
00236 {
00237 return m_data[i_ind];
00238 }
00239
00240
00242
00243 template <CTBint DIM>
00244 inline const char& CTBcstring<DIM>::operator[](CTBint i_ind) const
00245 {
00246 return m_data[i_ind];
00247 }
00248
00249
00251
00252 template <CTBint DIM>
00253 inline CTBcstring<DIM>::operator char*()
00254 {
00255 return m_data;
00256 }
00257
00258
00260
00261 inline CTBcstring<DIM>::operator const char*() const
00262 {
00263 return m_data;
00264 }
00265
00266
00268
00269 template <CTBint DIM>
00270 inline bool CTBcstring<DIM>::operator==(const char* c_src) const
00271 {
00272 return strcmp(m_data,c_src) == 0;
00273 }
00274
00275
00277
00278 template <CTBint DIM>
00279 inline CTBcstring<DIM>& CTBcstring<DIM>::operator=(const char* c_src)
00280 {
00281 Copy(c_src);
00282 return *this;
00283 }
00284
00285
00287
00288 template <CTBint DIM>
00289 inline CTBcstring<DIM>& CTBcstring<DIM>::operator+=(const char* c_src)
00290 {
00291 Append(c_src);
00292 return *this;
00293 }
00294
00295
00301 template <CTBint DIM>
00302 inline ostream& operator<<(ostream& os, const CTBcstring<DIM>& obj)
00303 {
00304 os << (const char*) obj;
00305 return os;
00306 }
00307
00308
00314 template <CTBint DIM>
00315 inline istream& operator>>(istream& is, CTBcstring<DIM>& obj)
00316 {
00317 if (DIM >= 2) {
00318 is >> obj[0];
00319
00320 for (int i = 1; i < DIM; i++) {
00321 obj[i] = is.get();
00322
00323 if (is.eof() || !is) {
00324 obj[i] = 0;
00325 break;
00326 }
00327
00328 if (isspace(obj[i])) {
00329 is.putback(obj[i]);
00330 obj[i] = 0;
00331 break;
00332 }
00333
00334 if (i == DIM-1) {
00335 is.setstate(ios::failbit);
00336 obj[i] = 0;
00337 }
00338 }
00339
00340 } else {
00341 obj[0] = 0;
00342 is.setstate(ios::failbit);
00343 }
00344
00345 return is;
00346 }
00347