00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00051 #ifndef STLSOFT_INCL_STLSOFT_STD_HPP_CSTRING
00052 #define STLSOFT_INCL_STLSOFT_STD_HPP_CSTRING
00053
00054 #ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
00055 # define STLSOFT_VER_STLSOFT_STD_HPP_CSTRING_MAJOR 1
00056 # define STLSOFT_VER_STLSOFT_STD_HPP_CSTRING_MINOR 5
00057 # define STLSOFT_VER_STLSOFT_STD_HPP_CSTRING_REVISION 4
00058 # define STLSOFT_VER_STLSOFT_STD_HPP_CSTRING_EDIT 33
00059 #endif
00060
00061
00062
00063
00064
00065 #ifndef STLSOFT_INCL_STLSOFT_H_STLSOFT
00066 # include <stlsoft/stlsoft.h>
00067 #endif
00068 #ifndef STLSOFT_INCL_STLSOFT_STD_HPP_CBASE_
00069 # include <stlsoft/std/cbase_.hpp>
00070 #endif
00071 #ifndef STLSOFT_INCL_STLSOFT_SHIMS_ACCESS_HPP_STRING
00072 # include <stlsoft/shims/access/string.hpp>
00073 #endif
00074 #ifndef STLSOFT_INCL_STLSOFT_STRING_HPP_STRING_TRAITS
00075 # include <stlsoft/string/string_traits.hpp>
00076 #endif
00077
00078 #ifndef STLSOFT_INCL_H_STRING
00079 # define STLSOFT_INCL_H_STRING
00080 # include <string.h>
00081 #endif
00082 #ifndef STLSOFT_INCL_H_WCHAR
00083 # define STLSOFT_INCL_H_WCHAR
00084 # include <wchar.h>
00085 #endif
00086 #if defined(STLSOFT_COMPILER_IS_BORLAND)
00087 # include <malloc.h>
00088 #endif
00089
00090
00091
00092
00093
00094 #ifndef _STLSOFT_NO_NAMESPACE
00095 namespace stlsoft
00096 {
00097 #endif
00098
00099
00100
00101
00102
00105
00106 #ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
00107
00108 #ifndef _STLSOFT_NO_NAMESPACE
00109 namespace std_impl
00110 {
00111 #endif
00112
00113 inline ss_char_a_t* strcpy_a(ss_char_a_t* dest, ss_char_a_t const* src)
00114 {
00115 return ::strcpy(dest, src);
00116 }
00117 inline ss_char_w_t* strcpy_w(ss_char_w_t* dest, ss_char_w_t const* src)
00118 {
00119 return ::wcscpy(dest, src);
00120 }
00121 inline ss_char_a_t* strcpy_(ss_char_a_t* dest, ss_char_a_t const* src)
00122 {
00123 return strcpy_a(dest, src);
00124 }
00125 inline ss_char_w_t* strcpy_(ss_char_w_t* dest, ss_char_w_t const* src)
00126 {
00127 return strcpy_w(dest, src);
00128 }
00129
00130 inline ss_char_a_t* strcat_a(ss_char_a_t* dest, ss_char_a_t const* src)
00131 {
00132 return ::strcat(dest, src);
00133 }
00134 inline ss_char_w_t* strcat_w(ss_char_w_t* dest, ss_char_w_t const* src)
00135 {
00136 return ::wcscat(dest, src);
00137 }
00138 inline ss_char_a_t* strcat_(ss_char_a_t* dest, ss_char_a_t const* src)
00139 {
00140 return strcat_a(dest, src);
00141 }
00142 inline ss_char_w_t* strcat_(ss_char_w_t* dest, ss_char_w_t const* src)
00143 {
00144 return strcat_w(dest, src);
00145 }
00146
00147 inline ss_char_a_t* strncpy_a(ss_char_a_t* dest, ss_char_a_t const* src, ss_size_t n)
00148 {
00149 return ::strncpy(dest, src, n);
00150 }
00151 inline ss_char_w_t* strncpy_w(ss_char_w_t* dest, ss_char_w_t const* src, ss_size_t n)
00152 {
00153 return ::wcsncpy(dest, src, n);
00154 }
00155 inline ss_char_a_t* strncpy_(ss_char_a_t* dest, ss_char_a_t const* src, ss_size_t n)
00156 {
00157 return strncpy_a(dest, src, n);
00158 }
00159 inline ss_char_w_t* strncpy_(ss_char_w_t* dest, ss_char_w_t const* src, ss_size_t n)
00160 {
00161 return strncpy_w(dest, src, n);
00162 }
00163
00164 inline ss_char_a_t* strncat_a(ss_char_a_t* dest, ss_char_a_t const* src, ss_size_t n)
00165 {
00166 return ::strncat(dest, src, n);
00167 }
00168 inline ss_char_w_t* strncat_w(ss_char_w_t* dest, ss_char_w_t const* src, ss_size_t n)
00169 {
00170 return ::wcsncat(dest, src, n);
00171 }
00172 inline ss_char_a_t* strncat_(ss_char_a_t* dest, ss_char_a_t const* src, ss_size_t n)
00173 {
00174 return strncat_a(dest, src, n);
00175 }
00176 inline ss_char_w_t* strncat_(ss_char_w_t* dest, ss_char_w_t const* src, ss_size_t n)
00177 {
00178 return strncat_w(dest, src, n);
00179 }
00180
00181 #ifndef _STLSOFT_NO_NAMESPACE
00182 }
00183 #endif
00184
00185 #endif
00186
00187 #ifdef STLSOFT_CF_TEMPLATE_PARTIAL_SPECIALISATION_SUPPORT
00188 template <ss_typename_param_k S>
00189 inline ss_typename_type_ret_k string_traits<S>::char_type* strcpy(ss_typename_type_k string_traits<S>::char_type* dest, S const& src)
00190 {
00191 return stlsoft_std_ns_qual(strcpy_)(dest, stlsoft_ns_qual(c_str_ptr)(src));
00192 }
00193 #endif
00194
00195 inline ss_char_a_t* strcpy(ss_char_a_t* dest, ss_char_a_t const* src)
00196 {
00197 return stlsoft_std_ns_qual(strcpy_)(dest, src);
00198 }
00199
00200 inline ss_char_w_t* strcpy(ss_char_w_t* dest, ss_char_w_t const* src)
00201 {
00202 return stlsoft_std_ns_qual(strcpy_)(dest, src);
00203 }
00204
00205
00206
00207 #ifdef STLSOFT_CF_TEMPLATE_PARTIAL_SPECIALISATION_SUPPORT
00208 template <ss_typename_param_k S>
00209 inline ss_typename_type_ret_k string_traits<S>::char_type* strcat(ss_typename_type_k string_traits<S>::char_type* dest, S const& src)
00210 {
00211 return stlsoft_std_ns_qual(strcat_)(dest, stlsoft_ns_qual(c_str_ptr)(src));
00212 }
00213 #endif
00214
00215 inline ss_char_a_t* strcat(ss_char_a_t* dest, ss_char_a_t const* src)
00216 {
00217 return stlsoft_std_ns_qual(strcat_)(dest, src);
00218 }
00219
00220 inline ss_char_w_t* strcat(ss_char_w_t* dest, ss_char_w_t const* src)
00221 {
00222 return stlsoft_std_ns_qual(strcat_)(dest, src);
00223 }
00224
00225
00226 #ifdef STLSOFT_CF_TEMPLATE_PARTIAL_SPECIALISATION_SUPPORT
00227 template <ss_typename_param_k S>
00228 inline ss_typename_type_ret_k string_traits<S>::char_type* strncpy(ss_typename_type_k string_traits<S>::char_type* dest, S const& src)
00229 {
00230 return stlsoft_std_ns_qual(strncpy_)(dest, stlsoft_ns_qual(c_str_data)(src), stlsoft_ns_qual(c_str_len)(src));
00231 }
00232 #endif
00233
00234
00235 #ifdef STLSOFT_CF_TEMPLATE_PARTIAL_SPECIALISATION_SUPPORT
00236 template <ss_typename_param_k S>
00237 inline ss_typename_type_ret_k string_traits<S>::char_type* strncat(ss_typename_type_k string_traits<S>::char_type* dest, S const& src)
00238 {
00239 return stlsoft_std_ns_qual(strncat_)(dest, stlsoft_ns_qual(c_str_data)(src), stlsoft_ns_qual(c_str_len)(src));
00240 }
00241 #endif
00242
00243
00244 #ifdef STLSOFT_CF_TEMPLATE_PARTIAL_SPECIALISATION_SUPPORT
00245 template <ss_typename_param_k S>
00246 inline ss_typename_type_ret_k string_traits<S>::char_type* strncpy(ss_typename_type_k string_traits<S>::char_type* dest, S const& src, ss_size_t n)
00247 {
00248 return stlsoft_std_ns_qual(strncpy_)(dest, stlsoft_ns_qual(c_str_data)(src), n);
00249 }
00250 #endif
00251
00252 inline ss_char_a_t* strncpy(ss_char_a_t* dest, ss_char_a_t const* src, ss_size_t n)
00253 {
00254 return stlsoft_std_ns_qual(strncpy_)(dest, src, n);
00255 }
00256
00257 inline ss_char_w_t* strncpy(ss_char_w_t* dest, ss_char_w_t const* src, ss_size_t n)
00258 {
00259 return stlsoft_std_ns_qual(strncpy_)(dest, src, n);
00260 }
00261
00262
00263 #ifdef STLSOFT_CF_TEMPLATE_PARTIAL_SPECIALISATION_SUPPORT
00264 template <ss_typename_param_k S>
00265 inline ss_typename_type_ret_k string_traits<S>::char_type* strncat(ss_typename_type_k string_traits<S>::char_type* dest, S const& src, ss_size_t n)
00266 {
00267 return stlsoft_std_ns_qual(strncat_)(dest, stlsoft_ns_qual(c_str_data)(src), n);
00268 }
00269 #endif
00270
00271 inline ss_char_a_t* strncat(ss_char_a_t* dest, ss_char_a_t const* src, ss_size_t n)
00272 {
00273 return stlsoft_std_ns_qual(strncat_)(dest, src, n);
00274 }
00275
00276 inline ss_char_w_t* strncat(ss_char_w_t* dest, ss_char_w_t const* src, ss_size_t n)
00277 {
00278 return stlsoft_std_ns_qual(strncat_)(dest, src, n);
00279 }
00280
00282
00285
00286 #ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
00287
00288 #ifndef _STLSOFT_NO_NAMESPACE
00289 namespace std_impl
00290 {
00291 #endif
00292
00293 inline int strcmp_a(ss_char_a_t const* s1, ss_char_a_t const* s2)
00294 {
00295 return ::strcmp(s1, s2);
00296 }
00297 inline int strcmp_w(ss_char_w_t const* s1, ss_char_w_t const* s2)
00298 {
00299 return ::wcscmp(s1, s2);
00300 }
00301 inline int strcmp_(ss_char_a_t const* s1, ss_char_a_t const* s2)
00302 {
00303 return strcmp_a(s1, s2);
00304 }
00305 inline int strcmp_(ss_char_w_t const* s1, ss_char_w_t const* s2)
00306 {
00307 return strcmp_w(s1, s2);
00308 }
00309
00310 inline int strncmp_a(ss_char_a_t const* s1, ss_char_a_t const* s2, ss_size_t n)
00311 {
00312 return ::strncmp(s1, s2, n);
00313 }
00314 inline int strncmp_w(ss_char_w_t const* s1, ss_char_w_t const* s2, ss_size_t n)
00315 {
00316 return ::wcsncmp(s1, s2, n);
00317 }
00318 inline int strncmp_(ss_char_a_t const* s1, ss_char_a_t const* s2, ss_size_t n)
00319 {
00320 return strncmp_a(s1, s2, n);
00321 }
00322 inline int strncmp_(ss_char_w_t const* s1, ss_char_w_t const* s2, ss_size_t n)
00323 {
00324 return strncmp_w(s1, s2, n);
00325 }
00326
00327 #ifndef _STLSOFT_NO_NAMESPACE
00328 }
00329 #endif
00330
00331 #endif
00332
00333
00334 template <ss_typename_param_k S>
00335 inline ss_size_t strlen(S const& s)
00336 {
00337 return stlsoft_ns_qual(c_str_len)(s);
00338 }
00339
00340 inline ss_size_t strlen(ss_char_a_t const* s)
00341 {
00342 return ::strlen(s);
00343 }
00344
00345 inline ss_size_t strlen(ss_char_w_t const* s)
00346 {
00347 return ::wcslen(s);
00348 }
00349
00350
00351 template <ss_typename_param_k S>
00352 inline int strcmp(S const& s1, S const& s2)
00353 {
00354 return stlsoft_std_ns_qual(strcmp_)(stlsoft_ns_qual(c_str_ptr)(s1), stlsoft_ns_qual(c_str_ptr)(s2));
00355 }
00356
00357 inline int strcmp(ss_char_a_t const* s1, ss_char_a_t const* s2)
00358 {
00359 return ::strcmp(s1, s2);
00360 }
00361
00362 inline int strcmp(ss_char_w_t const* s1, ss_char_w_t const* s2)
00363 {
00364 return ::wcscmp(s1, s2);
00365 }
00366
00367
00368 template <ss_typename_param_k S>
00369 inline int strncmp(S const& s1, S const& s2, ss_size_t n)
00370 {
00371 return stlsoft_std_ns_qual(strncmp_)(stlsoft_ns_qual(c_str_ptr)(s1), stlsoft_ns_qual(c_str_ptr)(s2), n);
00372 }
00373
00374 inline int strncmp(ss_char_a_t const* s1, ss_char_a_t const* s2, ss_size_t n)
00375 {
00376 return ::strncmp(s1, s2, n);
00377 }
00378
00379 inline int strncmp(ss_char_w_t const* s1, ss_char_w_t const* s2, ss_size_t n)
00380 {
00381 return ::wcsncmp(s1, s2, n);
00382 }
00383
00385
00386
00387
00390
00391 inline ss_char_a_t const* strchr(ss_char_a_t const* s, ss_char_a_t ch)
00392 {
00393 return ::strchr(s, ch);
00394 }
00395
00396 inline ss_char_w_t const* strchr(ss_char_w_t const* s, ss_char_w_t ch)
00397 {
00398 return ::wcschr(s, ch);
00399 }
00400
00401
00402 inline ss_char_a_t const* strrchr(ss_char_a_t const* s, ss_char_a_t ch)
00403 {
00404 return ::strrchr(s, ch);
00405 }
00406
00407 inline ss_char_w_t const* strrchr(ss_char_w_t const* s, ss_char_w_t ch)
00408 {
00409 return ::wcsrchr(s, ch);
00410 }
00411
00412
00413 inline ss_char_a_t const* strstr(ss_char_a_t const* s, ss_char_a_t const* charSet)
00414 {
00415 return ::strstr(s, charSet);
00416 }
00417
00418 inline ss_char_w_t const* strstr(ss_char_w_t const* s, ss_char_w_t const* charSet)
00419 {
00420 return ::wcsstr(s, charSet);
00421 }
00422
00423 #if 0
00424
00425 ss_size_t __cdecl strcspn(char const*, char const*);
00426 ss_size_t __cdecl strspn(char const*, char const*);
00427 char * __cdecl strpbrk(char const*, char const*);
00428
00429
00430
00431
00432 #endif
00433
00435
00436 #ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
00437
00438 #ifndef _STLSOFT_NO_NAMESPACE
00439 namespace std_impl
00440 {
00441 #endif
00442
00443 inline ss_char_a_t* strdup_a(ss_char_a_t const* s)
00444 {
00445 return ::strdup(s);
00446 }
00447 inline ss_char_w_t* strdup_w(ss_char_w_t const* s)
00448 {
00449 # if defined(STLSOFT_COMPILER_IS_BORLAND) || \
00450 ( defined(STLSOFT_COMPILER_IS_GCC) && \
00451 !defined(WIN32)) || \
00452 defined(STLSOFT_COMPILER_IS_WATCOM)
00453 const ss_size_t len = ::wcslen(s);
00454 ss_char_w_t *sz = static_cast<ss_char_w_t*>(::malloc(sizeof(ss_char_w_t) * (1 + len)));
00455
00456 if(NULL != sz)
00457 {
00458 ::wcscpy(sz, s);
00459 }
00460
00461 return sz;
00462 # else
00463 return ::wcsdup(const_cast<ss_char_w_t*>(s));
00464 # endif
00465 }
00466 inline ss_char_a_t* strdup_(ss_char_a_t const* s)
00467 {
00468 return strdup_a(s);
00469 }
00470 inline ss_char_w_t* strdup_(ss_char_w_t const* s)
00471 {
00472 return strdup_w(s);
00473 }
00474
00475 #ifndef _STLSOFT_NO_NAMESPACE
00476 }
00477 #endif
00478
00479 #endif
00480
00481
00489 #ifdef STLSOFT_CF_TEMPLATE_PARTIAL_SPECIALISATION_SUPPORT
00490 template <ss_typename_param_k S>
00491 inline ss_typename_type_ret_k string_traits<S>::char_type* strdup(S const& s)
00492 {
00493 return stlsoft_std_ns_qual(strdup_)(stlsoft_ns_qual(c_str_ptr)(s));
00494 }
00495 #endif
00496
00502 inline ss_char_a_t* strdup(ss_char_a_t const* s)
00503 {
00504 return stlsoft_std_ns_qual(strdup_)(s);
00505 }
00506
00512 inline ss_char_w_t* strdup(ss_char_w_t const* s)
00513 {
00514 return stlsoft_std_ns_qual(strdup_)(s);
00515 }
00516
00517
00518
00519 #ifndef _STLSOFT_NO_NAMESPACE
00520 }
00521 #endif
00522
00523
00524
00525 #endif
00526
00527