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
00032
00033 #pragma once
00034
00035 #include "../api_core.h"
00036 #include "string_data16.h"
00037
00042 class CL_API_CORE CL_String16 : public CL_StringData16
00043 {
00044 public:
00045 CL_String16();
00046
00050 CL_String16(const std::wstring &source);
00051
00055 CL_String16(const CL_String16 &source);
00056
00058 CL_String16(const CL_StringData16 &source);
00059
00063 CL_String16(const char *c_str);
00064
00069 CL_String16(const char *c_str, size_type length);
00070
00074 CL_String16(const wchar_t *wc_str);
00075
00080 CL_String16(const wchar_t *wc_str, size_type length);
00081
00086 CL_String16(size_type n, wchar_t c);
00087 ~CL_String16();
00088
00092 operator CL_StringRef16() const;
00093
00094 const wchar_t *c_str() const;
00095
00099 size_type max_size() const { return (size_type) -1; }
00100
00104 size_type capacity() const { return data_capacity; }
00105
00106
00107
00108
00110 void clear();
00111
00115 void reserve(size_type size);
00116
00120 void resize(size_type n);
00121
00126 void resize(size_type n, wchar_t c);
00127
00128
00129
00130 CL_String16 &assign(const CL_StringData16 &s);
00131
00139 CL_String16 &assign(const CL_StringData16 &s, size_type pos, size_type n);
00140
00147 CL_String16 &assign(const wchar_t *s, size_type n);
00148
00154 CL_String16 &assign(const wchar_t *s);
00155
00162 CL_String16 &assign(size_type n, wchar_t c);
00163
00170 iterator insert(iterator pos, const wchar_t &item)
00171 {
00172 size_type insert_pos = (size_type) (pos - begin());
00173 size_type n = length();
00174 if (insert_pos > n)
00175 insert_pos = n;
00176 resize(n + 1);
00177 wchar_t *d = data();
00178 for (size_type i = n+1; i > insert_pos; i--)
00179 d[i] = d[i-1];
00180 d[insert_pos] = item;
00181
00182 return begin() + insert_pos;
00183 }
00184
00190 void insert(iterator pos, size_type num_copies, const wchar_t &item);
00191
00198 CL_String16 &insert(size_type pos, const CL_StringData16 &s);
00199
00208 CL_String16 &insert(size_type pos, const CL_StringData16 &s, size_type pos1, size_type length);
00209
00216 CL_String16 &insert(size_type pos, const wchar_t *s);
00217
00225 CL_String16 &insert(size_type pos, const wchar_t *s, size_type s_length);
00226
00234 CL_String16 &insert(size_type pos, size_type n, wchar_t c);
00235
00241 CL_String16 &append(const CL_StringData16 &s);
00242
00250 CL_String16 &append(const CL_StringData16 &s, size_type pos, size_type n);
00251
00252 CL_String16 &append(const char *s);
00253
00260 CL_String16 &append(const char *s, size_type n);
00261
00267 CL_String16 &append(const wchar_t *s);
00268
00275 CL_String16 &append(const wchar_t *s, size_type n);
00276
00283 CL_String16 &append(size_type n, wchar_t c);
00284
00288 void push_back(wchar_t c);
00289
00295 iterator erase(iterator p)
00296 {
00297 iterator e = end();
00298 if (p == e)
00299 return e;
00300 return erase(p, p+1);
00301 }
00302
00309 iterator erase(iterator first, iterator last)
00310 {
00311 size_type pos = (size_type) (first - begin());
00312 iterator e = end();
00313 iterator p1 = first;
00314 iterator p2 = last;
00315 while (p2 != e)
00316 {
00317 *p1 = *p2;
00318 p1++;
00319 p2++;
00320 }
00321 size_type new_size = (size_type) (p1 - begin());
00322 resize(new_size);
00323 return begin() + pos;
00324 }
00325
00332 CL_String16 &erase(size_type pos = 0, size_type n = CL_StringData16::npos);
00333
00341 CL_String16 &replace(size_type pos, size_type n, const CL_StringData16 &s);
00342
00352 CL_String16 &replace(size_type pos, size_type n, const CL_StringData16 &s, size_type pos1, size_type n1);
00353
00362 CL_String16 &replace(size_type pos, size_type n, const wchar_t *s, size_type n1);
00363
00371 CL_String16 &replace(size_type pos, size_type n, const wchar_t *s);
00372
00381 CL_String16 &replace(size_type pos, size_type n, size_type n1, wchar_t c);
00382
00390 CL_String16 &replace(iterator first, iterator last, const CL_StringData16 &s);
00391
00400 CL_String16 &replace(iterator first, iterator last, const wchar_t *s, size_type n);
00401
00409 CL_String16 &replace(iterator first, iterator last, const wchar_t *s);
00410
00419 CL_String16 &replace(iterator first, iterator last, size_type n, wchar_t c);
00420
00428 size_type copy(wchar_t *buf, size_type n, size_type pos = 0) const;
00429
00430 CL_String16 &operator =(const CL_String16 &source);
00431 CL_String16 &operator =(const CL_StringData16 &source);
00432 CL_String16 &operator =(const char *c_str);
00433 CL_String16 &operator =(const wchar_t *c_str);
00434 CL_String16 &operator +=(const CL_StringData16 &s);
00435 CL_String16 &operator +=(const char *c_str);
00436 CL_String16 &operator +=(const wchar_t *c_str);
00437 CL_String16 &operator +=(wchar_t c);
00438
00439 private:
00441 void init();
00442
00443 size_type data_capacity;
00444 enum { local_string_length = 63 };
00445 wchar_t local_string[local_string_length + 1];
00446 };
00447
00448 CL_API_CORE CL_String16 operator+(const CL_StringData16 &s1, const CL_StringData16 &s2);
00449 CL_API_CORE CL_String16 operator+(const char *s1, const CL_StringData16 &s2);
00450 CL_API_CORE CL_String16 operator+(const wchar_t *s1, const CL_StringData16 &s2);
00451 CL_API_CORE CL_String16 operator+(const CL_StringData16 &s1, const char *s2);
00452 CL_API_CORE CL_String16 operator+(const CL_StringData16 &s1, const wchar_t *s2);
00453 CL_API_CORE CL_String16 operator+(wchar_t c, const CL_StringData16 &s2);
00454 CL_API_CORE CL_String16 operator+(const CL_StringData16 &s1, wchar_t c);
00455