comctl32/tests: Use CRT allocation functions.
[wine.git] / dlls / msvcp60 / string.c
blob253b13b7dbeaf4464ffe4b66cfaca240a5b6e4da
1 /*
2 * Copyright 2012 Piotr Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 #include <stdarg.h>
22 #include "msvcp.h"
23 #include "stdio.h"
25 #include "windef.h"
26 #include "winbase.h"
27 #include "wine/debug.h"
28 WINE_DEFAULT_DEBUG_CHANNEL(msvcp);
30 #define FROZEN '\xff'
31 #define FROZENW L'\xff'
33 /* _String_iterator<char> and _String_const_iterator<char> class */
34 typedef struct {
35 char *ptr;
36 } String_reverse_iterator_char;
38 typedef struct {
39 wchar_t *ptr;
40 } String_reverse_iterator_wchar;
42 /* allocator class */
43 typedef struct {
44 char empty_struct;
45 } allocator;
47 /* ?_Xran@std@@YAXXZ */
48 void __cdecl _Xran(void)
50 TRACE("\n");
51 _Xout_of_range("invalid string position");
54 /* ?_Xlen@std@@YAXXZ */
55 void __cdecl _Xlen(void)
57 TRACE("\n");
58 _Xlength_error("string too long");
61 /* ?compare@?$char_traits@D@std@@SAHPBD0I@Z */
62 /* ?compare@?$char_traits@D@std@@SAHPEBD0_K@Z */
63 int CDECL MSVCP_char_traits_char_compare(
64 const char *s1, const char *s2, size_t count)
66 int ret = memcmp(s1, s2, count);
67 return (ret>0 ? 1 : (ret<0 ? -1 : 0));
70 /* ?length@?$char_traits@D@std@@SAIPBD@Z */
71 /* ?length@?$char_traits@D@std@@SA_KPEBD@Z */
72 size_t CDECL MSVCP_char_traits_char_length(const char *str)
74 return strlen(str);
77 /* ?_Copy_s@?$char_traits@D@std@@SAPADPADIPBDI@Z */
78 /* ?_Copy_s@?$char_traits@D@std@@SAPEADPEAD_KPEBD1@Z */
79 char* CDECL MSVCP_char_traits_char__Copy_s(char *dest,
80 size_t size, const char *src, size_t count)
82 if(!dest || !src || size<count) {
83 if(dest && size)
84 dest[0] = '\0';
85 _invalid_parameter(NULL, NULL, NULL, 0, 0);
86 return dest;
89 return memcpy(dest, src, count);
92 /* ?copy@?$char_traits@D@std@@SAPADPADPBDI@Z */
93 /* ?copy@?$char_traits@D@std@@SAPEADPEADPEBD_K@Z */
94 char* CDECL MSVCP_char_traits_char_copy(
95 char *dest, const char *src, size_t count)
97 return MSVCP_char_traits_char__Copy_s(dest, count, src, count);
100 /* ?find@?$char_traits@D@std@@SAPBDPBDIABD@Z */
101 /* ?find@?$char_traits@D@std@@SAPEBDPEBD_KAEBD@Z */
102 const char * CDECL MSVCP_char_traits_char_find(
103 const char *str, size_t range, const char *c)
105 return memchr(str, *c, range);
108 /* ?_Move_s@?$char_traits@D@std@@SAPADPADIPBDI@Z */
109 /* ?_Move_s@?$char_traits@D@std@@SAPEADPEAD_KPEBD1@Z */
110 char* CDECL MSVCP_char_traits_char__Move_s(char *dest,
111 size_t size, const char *src, size_t count)
113 if(!dest || !src || size<count) {
114 if(dest && size)
115 dest[0] = '\0';
116 _invalid_parameter(NULL, NULL, NULL, 0, 0);
117 return dest;
120 return memmove(dest, src, count);
123 /* ?move@?$char_traits@D@std@@SAPADPADPBDI@Z */
124 /* ?move@?$char_traits@D@std@@SAPEADPEADPEBD_K@Z */
125 char* CDECL MSVCP_char_traits_char_move(
126 char *dest, const char *src, size_t count)
128 return MSVCP_char_traits_char__Move_s(dest, count, src, count);
131 /* ?assign@?$char_traits@D@std@@SAPADPADID@Z */
132 /* ?assign@?$char_traits@D@std@@SAPEADPEAD_KD@Z */
133 char* CDECL MSVCP_char_traits_char_assignn(char *str, size_t num, char c)
135 return memset(str, c, num);
138 /* ?compare@?$char_traits@_W@std@@SAHPB_W0I@Z */
139 /* ?compare@?$char_traits@_W@std@@SAHPEB_W0_K@Z */
140 int CDECL MSVCP_char_traits_wchar_compare(const wchar_t *s1,
141 const wchar_t *s2, size_t count)
143 size_t i;
144 int ret = 0;
146 for (i = 0; i < count && !ret; i++) ret = s1[i] - s2[i];
147 return (ret>0 ? 1 : (ret<0 ? -1 : 0));
150 /* ?length@?$char_traits@_W@std@@SAIPB_W@Z */
151 /* ?length@?$char_traits@_W@std@@SA_KPEB_W@Z */
152 size_t CDECL MSVCP_char_traits_wchar_length(const wchar_t *str)
154 return wcslen((WCHAR*)str);
157 /* ?_Copy_s@?$char_traits@_W@std@@SAPA_WPA_WIPB_WI@Z */
158 /* ?_Copy_s@?$char_traits@_W@std@@SAPEA_WPEA_W_KPEB_W1@Z */
159 wchar_t* CDECL MSVCP_char_traits_wchar__Copy_s(wchar_t *dest,
160 size_t size, const wchar_t *src, size_t count)
162 if(!dest || !src || size<count) {
163 if(dest && size)
164 dest[0] = '\0';
165 _invalid_parameter(NULL, NULL, NULL, 0, 0);
166 return dest;
169 return memcpy(dest, src, count * sizeof(wchar_t));
172 /* ?copy@?$char_traits@_W@std@@SAPA_WPA_WPB_WI@Z */
173 /* ?copy@?$char_traits@_W@std@@SAPEA_WPEA_WPEB_W_K@Z */
174 wchar_t* CDECL MSVCP_char_traits_wchar_copy(wchar_t *dest,
175 const wchar_t *src, size_t count)
177 return MSVCP_char_traits_wchar__Copy_s(dest, count, src, count);
180 /* ?find@?$char_traits@_W@std@@SAPB_WPB_WIAB_W@Z */
181 /* ?find@?$char_traits@_W@std@@SAPEB_WPEB_W_KAEB_W@Z */
182 const wchar_t* CDECL MSVCP_char_traits_wchar_find(
183 const wchar_t *str, size_t range, const wchar_t *c)
185 size_t i=0;
187 for(i=0; i<range; i++)
188 if(str[i] == *c)
189 return str+i;
191 return NULL;
194 /* ?_Move_s@?$char_traits@_W@std@@SAPA_WPA_WIPB_WI@Z */
195 /* ?_Move_s@?$char_traits@_W@std@@SAPEA_WPEA_W_KPEB_W1@Z */
196 wchar_t* CDECL MSVCP_char_traits_wchar__Move_s(wchar_t *dest,
197 size_t size, const wchar_t *src, size_t count)
199 if(!dest || !src || size<count) {
200 if(dest && size)
201 dest[0] = '\0';
202 _invalid_parameter(NULL, NULL, NULL, 0, 0);
203 return dest;
206 return memmove(dest, src, count * sizeof(WCHAR));
209 /* ?move@?$char_traits@_W@std@@SAPA_WPA_WPB_WI@Z */
210 /* ?move@?$char_traits@_W@std@@SAPEA_WPEA_WPEB_W_K@Z */
211 wchar_t* CDECL MSVCP_char_traits_wchar_move(wchar_t *dest,
212 const wchar_t *src, size_t count)
214 return MSVCP_char_traits_wchar__Move_s(dest, count, src, count);
217 /* ?assign@?$char_traits@_W@std@@SAPA_WPA_WI_W@Z */
218 /* ?assign@?$char_traits@_W@std@@SAPEA_WPEA_W_K_W@Z */
219 wchar_t* CDECL MSVCP_char_traits_wchar_assignn(wchar_t *str,
220 size_t num, wchar_t c)
222 size_t i;
224 for(i=0; i<num; i++)
225 str[i] = c;
227 return str;
230 static bool basic_string_char_inside(
231 basic_string_char *this, const char *ptr)
233 return ptr>=this->ptr && ptr<this->ptr+this->size;
236 /* ?npos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@2IB */
237 /* ?npos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@2_KB */
238 const size_t MSVCP_basic_string_char_npos = -1;
240 /* ?_C@?1??_Nullstr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPBDXZ@4DB */
241 /* ?_C@?1??_Nullstr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPEBDXZ@4DB */
242 const char basic_string_char_nullbyte = '\0';
244 /* ?_Nullstr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPBDXZ */
245 /* ?_Nullstr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPEBDXZ */
246 const char* __cdecl basic_string_char__Nullstr(void)
248 return &basic_string_char_nullbyte;
251 /* ?_Refcnt@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEAAEPBD@Z */
252 /* ?_Refcnt@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAAEAEPEBD@Z */
253 DEFINE_THISCALL_WRAPPER(basic_string_char__Refcnt, 8)
254 unsigned char* __thiscall basic_string_char__Refcnt(basic_string_char *this, const char *ptr)
256 TRACE("(%p %p)\n", this, ptr);
257 return (unsigned char*)ptr-1;
260 /* ?_Eos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXI@Z */
261 /* ?_Eos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAX_K@Z */
262 DEFINE_THISCALL_WRAPPER(basic_string_char__Eos, 8)
263 void __thiscall basic_string_char__Eos(basic_string_char *this, size_t len)
265 this->size = len;
266 this->ptr[len] = 0;
269 /* ?clear@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */
270 /* ?clear@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */
271 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_clear, 4)
272 void __thiscall MSVCP_basic_string_char_clear(basic_string_char *this)
274 if(this->ptr)
275 basic_string_char__Eos(this, 0);
278 /* ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEX_N@Z */
279 /* ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAX_N@Z */
280 DEFINE_THISCALL_WRAPPER(basic_string_char__Tidy, 8)
281 void __thiscall basic_string_char__Tidy(basic_string_char *this, bool built)
283 TRACE("(%p %d)\n", this, built);
285 if(!built || !this->ptr);
286 else if(!this->ptr[-1] || this->ptr[-1]==FROZEN)
287 MSVCP_allocator_char_deallocate(NULL, this->ptr-1, this->res+2);
288 else
289 this->ptr[-1]--;
291 memset(this, 0, sizeof(*this));
294 /* ?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAE_NI_N@Z */
295 /* ?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAA_N_K_N@Z */
296 DEFINE_THISCALL_WRAPPER(basic_string_char__Grow, 12)
297 bool __thiscall basic_string_char__Grow(basic_string_char *this, size_t new_size, bool trim)
299 if(!new_size) {
300 if(trim)
301 basic_string_char__Tidy(this, TRUE);
302 else if(this->ptr)
303 basic_string_char__Eos(this, 0);
304 } else if(this->res<new_size || trim ||
305 (this->ptr && this->ptr[-1] && this->ptr[-1]!=FROZEN)) {
306 size_t new_res = new_size, len = this->size;
307 char *ptr;
309 if(!trim && this->ptr && !this->ptr[-1]) {
310 new_res |= 0xf;
311 if(new_res/3 < this->res/2)
312 new_res = this->res + this->res/2;
315 ptr = MSVCP_allocator_char_allocate(this->allocator, new_res+2);
316 if(!ptr) {
317 new_res = new_size;
318 ptr = MSVCP_allocator_char_allocate(this->allocator, new_size+2);
320 if(!ptr) {
321 ERR("Out of memory\n");
322 return FALSE;
325 if(len > new_res)
326 len = new_res;
328 *ptr = 0;
329 if(this->ptr)
330 MSVCP_char_traits_char__Copy_s(ptr+1, new_size, this->ptr, len);
331 basic_string_char__Tidy(this, TRUE);
332 this->ptr = ptr+1;
333 this->res = new_res;
334 basic_string_char__Eos(this, len);
337 return new_size>0;
340 /* ?_Split@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXXZ */
341 /* ?_Split@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAXXZ */
342 DEFINE_THISCALL_WRAPPER(basic_string_char__Split, 4)
343 void __thiscall basic_string_char__Split(basic_string_char *this)
345 size_t len;
346 char *ptr;
348 TRACE("(%p)\n", this);
350 if(!this->ptr || !this->ptr[-1] || this->ptr[-1]==FROZEN)
351 return;
353 ptr = this->ptr;
354 len = this->size;
355 basic_string_char__Tidy(this, TRUE);
356 if(basic_string_char__Grow(this, len, FALSE)) {
357 if(ptr)
358 MSVCP_char_traits_char__Copy_s(this->ptr, this->res, ptr, len);
359 basic_string_char__Eos(this, len);
363 /* ?_Freeze@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXXZ */
364 /* ?_Freeze@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAXXZ */
365 DEFINE_THISCALL_WRAPPER(basic_string_char__Freeze, 4)
366 void __thiscall basic_string_char__Freeze(basic_string_char *this)
368 TRACE("(%p)\n", this);
369 basic_string_char__Split(this);
370 if(this->ptr)
371 this->ptr[-1] = FROZEN;
374 /* ?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXI@Z */
375 /* ?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAX_K@Z */
376 DEFINE_THISCALL_WRAPPER(basic_string_char__Copy, 8)
377 void __thiscall basic_string_char__Copy(basic_string_char *this, size_t copy_len)
379 TRACE("%p %Iu\n", this, copy_len);
381 if(!basic_string_char__Grow(this, copy_len, TRUE))
382 return;
385 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPADPADI@Z */
386 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPEADPEAD_K@Z */
387 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPBDPBDI@Z */
388 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPEBDPEBD_K@Z */
389 char* __cdecl basic_string_char__Psum(char *iter, size_t add)
391 TRACE("(%p %Iu)\n", iter, add);
392 return iter ? iter+add : iter;
395 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@II@Z */
396 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0@Z */
397 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_erase, 12)
398 basic_string_char* __thiscall MSVCP_basic_string_char_erase(
399 basic_string_char *this, size_t pos, size_t len)
401 TRACE("%p %Iu %Iu\n", this, pos, len);
403 if(pos > this->size)
404 _Xran();
406 if(len > this->size-pos)
407 len = this->size-pos;
409 if(len) {
410 basic_string_char__Split(this);
411 MSVCP_char_traits_char__Move_s(this->ptr+pos, this->res-pos,
412 this->ptr+pos+len, this->size-pos-len);
413 basic_string_char__Eos(this, this->size-len);
416 return this;
419 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADPAD@Z */
420 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADPEAD@Z */
421 DEFINE_THISCALL_WRAPPER(basic_string_char_erase_beg, 8)
422 char* __thiscall basic_string_char_erase_beg(basic_string_char *this, char *beg)
424 size_t pos = beg-this->ptr;
425 MSVCP_basic_string_char_erase(this, pos, 1);
426 return this->ptr+pos;
429 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z */
430 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
431 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_substr, 16)
432 basic_string_char* __thiscall MSVCP_basic_string_char_assign_substr(
433 basic_string_char *this, const basic_string_char *assign,
434 size_t pos, size_t len)
436 TRACE("%p %p %Iu %Iu\n", this, assign, pos, len);
438 if(assign->size < pos)
439 _Xran();
441 if(len > assign->size-pos)
442 len = assign->size-pos;
444 if(this == assign) {
445 MSVCP_basic_string_char_erase(this, pos+len, MSVCP_basic_string_char_npos);
446 MSVCP_basic_string_char_erase(this, 0, pos);
447 } else if(basic_string_char__Grow(this, len, FALSE)) {
448 if(assign->ptr)
449 MSVCP_char_traits_char__Copy_s(this->ptr, this->res, assign->ptr+pos, len);
450 basic_string_char__Eos(this, len);
453 return this;
456 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z */
457 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD_K@Z */
458 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_cstr_len, 12)
459 basic_string_char* __thiscall MSVCP_basic_string_char_assign_cstr_len(
460 basic_string_char *this, const char *str, size_t len)
462 TRACE("%p %s %Iu\n", this, debugstr_an(str, len), len);
464 if(basic_string_char_inside(this, str))
465 return MSVCP_basic_string_char_assign_substr(this, this, str-this->ptr, len);
466 else if(basic_string_char__Grow(this, len, FALSE)) {
467 MSVCP_char_traits_char__Copy_s(this->ptr, this->res, str, len);
468 basic_string_char__Eos(this, len);
471 return this;
474 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@@Z */
475 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@@Z */
476 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@ABV01@@Z */
477 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@AEBV01@@Z */
478 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign, 8)
479 basic_string_char* __thiscall MSVCP_basic_string_char_assign(
480 basic_string_char *this, const basic_string_char *assign)
482 return MSVCP_basic_string_char_assign_substr(this, assign,
483 0, MSVCP_basic_string_char_npos);
486 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z */
487 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD@Z */
488 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z */
489 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@PEBD@Z */
490 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_cstr, 8)
491 basic_string_char* __thiscall MSVCP_basic_string_char_assign_cstr(
492 basic_string_char *this, const char *str)
494 return MSVCP_basic_string_char_assign_cstr_len(this, str,
495 MSVCP_char_traits_char_length(str));
498 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@D@Z */
499 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@D@Z */
500 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_ch, 8)
501 basic_string_char* __thiscall MSVCP_basic_string_char_assign_ch(
502 basic_string_char *this, char ch)
504 return MSVCP_basic_string_char_assign_cstr_len(this, &ch, 1);
507 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ID@Z */
508 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KD@Z */
509 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assignn, 12)
510 basic_string_char* __thiscall MSVCP_basic_string_char_assignn(
511 basic_string_char *this, size_t count, char ch)
513 TRACE("%p %Iu %c\n", this, count, ch);
515 basic_string_char__Grow(this, count, FALSE);
516 MSVCP_char_traits_char_assignn(this->ptr, count, ch);
517 basic_string_char__Eos(this, count);
518 return this;
521 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD0@Z */
522 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD0@Z */
523 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_ptr_ptr, 12)
524 basic_string_char* __thiscall MSVCP_basic_string_char_assign_ptr_ptr(
525 basic_string_char *this, const char *first, const char *last)
527 return MSVCP_basic_string_char_assign_cstr_len(this, first, last-first);
530 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDIABV?$allocator@D@1@@Z */
531 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD_KAEBV?$allocator@D@1@@Z */
532 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr_len_alloc, 16)
533 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr_len_alloc(
534 basic_string_char *this, const char *str, size_t len, const void *alloc)
536 TRACE("%p %s %Iu\n", this, debugstr_an(str, len), len);
538 basic_string_char__Tidy(this, FALSE);
539 MSVCP_basic_string_char_assign_cstr_len(this, str, len);
540 return this;
543 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDI@Z */
544 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD_K@Z */
545 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr_len, 12)
546 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr_len(
547 basic_string_char *this, const char *str, size_t len)
549 return MSVCP_basic_string_char_ctor_cstr_len_alloc(this, str, len, NULL);
552 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@IIABV?$allocator@D@1@@Z */
553 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV01@_K1AEBV?$allocator@D@1@@Z */
554 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_substr_alloc, 20)
555 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_substr_alloc(
556 basic_string_char *this, const basic_string_char *assign,
557 size_t pos, size_t len, const void *alloc)
559 TRACE("%p %p %Iu %Iu\n", this, assign, pos, len);
561 basic_string_char__Tidy(this, FALSE);
562 MSVCP_basic_string_char_assign_substr(this, assign, pos, len);
563 return this;
566 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDABV?$allocator@D@1@@Z */
567 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBDAEBV?$allocator@D@1@@Z */
568 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr_alloc, 12)
569 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr_alloc(
570 basic_string_char *this, const char *str, const void *alloc)
572 TRACE("%p %s\n", this, debugstr_a(str));
574 basic_string_char__Tidy(this, FALSE);
575 MSVCP_basic_string_char_assign_cstr(this, str);
576 return this;
579 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z */
580 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD@Z */
581 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr, 8)
582 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr(
583 basic_string_char *this, const char *str)
585 return MSVCP_basic_string_char_ctor_cstr_alloc(this, str, NULL);
588 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@IDABV?$allocator@D@1@@Z */
589 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@_KDAEBV?$allocator@D@1@@Z */
590 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_ch_alloc, 16)
591 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_ch_alloc(basic_string_char *this,
592 size_t count, char ch, const void *alloc)
594 TRACE("%p %Iu %c\n", this, count, ch);
596 basic_string_char__Tidy(this, FALSE);
597 MSVCP_basic_string_char_assignn(this, count, ch);
598 return this;
601 /* ??_F?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */
602 /* ??_F?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */
603 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor, 4)
604 basic_string_char* __thiscall MSVCP_basic_string_char_ctor(basic_string_char *this)
606 TRACE("%p\n", this);
608 basic_string_char__Tidy(this, FALSE);
609 return this;
612 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV?$allocator@D@1@@Z */
613 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV?$allocator@D@1@@Z */
614 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_alloc, 8)
615 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_alloc(
616 basic_string_char *this, const void *alloc)
618 TRACE("%p %p\n", this, alloc);
620 basic_string_char__Tidy(this, FALSE);
621 return this;
624 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z */
625 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV01@@Z */
626 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_copy_ctor, 8)
627 basic_string_char* __thiscall MSVCP_basic_string_char_copy_ctor(
628 basic_string_char *this, const basic_string_char *copy)
630 TRACE("%p %p\n", this, copy);
632 basic_string_char__Tidy(this, FALSE);
633 MSVCP_basic_string_char_assign(this, copy);
634 return this;
637 /* ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ */
638 /* ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@XZ */
639 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_dtor, 4)
640 void __thiscall MSVCP_basic_string_char_dtor(basic_string_char *this)
642 TRACE("%p\n", this);
643 basic_string_char__Tidy(this, TRUE);
646 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIPBDI@Z */
647 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0PEBD0@Z */
648 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_cstr_len, 20)
649 int __thiscall MSVCP_basic_string_char_compare_substr_cstr_len(
650 const basic_string_char *this, size_t pos, size_t num,
651 const char *str, size_t count)
653 int ans;
655 TRACE("%p %Iu %Iu %s %Iu\n", this, pos, num, debugstr_an(str, count), count);
657 if(this->size < pos)
658 _Xran();
660 if(num > this->size-pos)
661 num = this->size-pos;
663 ans = MSVCP_char_traits_char_compare(this->ptr+pos,
664 str, num>count ? count : num);
665 if(ans)
666 return ans;
668 if(num > count)
669 ans = 1;
670 else if(num < count)
671 ans = -1;
672 return ans;
675 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHPBD@Z */
676 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAHPEBD@Z */
677 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_cstr, 8)
678 int __thiscall MSVCP_basic_string_char_compare_cstr(
679 const basic_string_char *this, const char *str)
681 return MSVCP_basic_string_char_compare_substr_cstr_len(this, 0, this->size,
682 str, MSVCP_char_traits_char_length(str));
685 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIABV12@II@Z */
686 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0AEBV12@00@Z */
687 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_substr, 24)
688 int __thiscall MSVCP_basic_string_char_compare_substr_substr(
689 const basic_string_char *this, size_t pos, size_t num,
690 const basic_string_char *compare, size_t off, size_t count)
692 TRACE("%p %Iu %Iu %p %Iu %Iu\n", this, pos, num, compare, off, count);
694 if(compare->size < off)
695 _Xran();
697 if(count > compare->size-off)
698 count = compare->size-off;
700 return MSVCP_basic_string_char_compare_substr_cstr_len(this, pos, num,
701 compare->ptr+off, count);
704 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIABV12@@Z */
705 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0AEBV12@@Z */
706 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr, 16)
707 int __thiscall MSVCP_basic_string_char_compare_substr(
708 const basic_string_char *this, size_t pos, size_t num,
709 const basic_string_char *compare)
711 return MSVCP_basic_string_char_compare_substr_cstr_len(this, pos, num,
712 compare->ptr, compare->size);
715 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHABV12@@Z */
716 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAHAEBV12@@Z */
717 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare, 8)
718 int __thiscall MSVCP_basic_string_char_compare(
719 const basic_string_char *this, const basic_string_char *compare)
721 return MSVCP_basic_string_char_compare_substr_cstr_len(this, 0, this->size,
722 compare->ptr, compare->size);
725 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIPBD@Z */
726 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0PEBD@Z */
727 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_cstr, 16)
728 int __thiscall MSVCP_basic_string_char_compare_substr_cstr(const basic_string_char *this,
729 size_t pos, size_t num, const char *str)
731 return MSVCP_basic_string_char_compare_substr_cstr_len(this, pos, num,
732 str, MSVCP_char_traits_char_length(str));
735 /* ??$?8DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
736 /* ??$?8DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
737 /* ??8std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
738 /* ??8std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
739 bool __cdecl MSVCP_basic_string_char_equal(
740 const basic_string_char *left, const basic_string_char *right)
742 return MSVCP_basic_string_char_compare(left, right) == 0;
745 /* ??$?8DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
746 /* ??$?8DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
747 /* ??8std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
748 /* ??8std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
749 bool __cdecl MSVCP_basic_string_char_equal_str_cstr(
750 const basic_string_char *left, const char *right)
752 return MSVCP_basic_string_char_compare_cstr(left, right) == 0;
755 /* ??$?8DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
756 /* ??$?8DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
757 /* ??8std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
758 /* ??8std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
759 bool __cdecl MSVCP_basic_string_char_equal_cstr_str(
760 const char *left, const basic_string_char *right)
762 return MSVCP_basic_string_char_compare_cstr(right, left) == 0;
765 /* ??$?9DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
766 /* ??$?9DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
767 /* ??9std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
768 /* ??9std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
769 bool __cdecl MSVCP_basic_string_char_not_equal(
770 const basic_string_char *left, const basic_string_char *right)
772 return MSVCP_basic_string_char_compare(left, right) != 0;
775 /* ??$?9DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
776 /* ??$?9DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
777 /* ??9std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
778 /* ??9std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
779 bool __cdecl MSVCP_basic_string_char_not_equal_str_cstr(
780 const basic_string_char *left, const char *right)
782 return MSVCP_basic_string_char_compare_cstr(left, right) != 0;
785 /* ??$?9DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
786 /* ??$?9DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
787 /* ??9std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
788 /* ??9std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
789 bool __cdecl MSVCP_basic_string_char_not_equal_cstr_str(
790 const char *left, const basic_string_char *right)
792 return MSVCP_basic_string_char_compare_cstr(right, left) != 0;
795 /* ??$?MDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
796 /* ??$?MDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
797 /* ??Mstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
798 /* ??Mstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
799 bool __cdecl MSVCP_basic_string_char_lower(
800 const basic_string_char *left, const basic_string_char *right)
802 return MSVCP_basic_string_char_compare(left, right) < 0;
805 /* ??$?MDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
806 /* ??$?MDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
807 /* ??Mstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
808 /* ??Mstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
809 bool __cdecl MSVCP_basic_string_char_lower_bstr_cstr(
810 const basic_string_char *left, const char *right)
812 return MSVCP_basic_string_char_compare_cstr(left, right) < 0;
815 /* ??$?MDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
816 /* ??$?MDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
817 /* ??Mstd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
818 /* ??Mstd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
819 bool __cdecl MSVCP_basic_string_char_lower_cstr_bstr(
820 const char *left, const basic_string_char *right)
822 return MSVCP_basic_string_char_compare_cstr(right, left) > 0;
825 /* ??$?NDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
826 /* ??$?NDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
827 /* ??Nstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
828 /* ??Nstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
829 bool __cdecl MSVCP_basic_string_char_leq(
830 const basic_string_char *left, const basic_string_char *right)
832 return MSVCP_basic_string_char_compare(left, right) <= 0;
835 /* ??$?NDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
836 /* ??$?NDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
837 /* ??Nstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
838 /* ??Nstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
839 bool __cdecl MSVCP_basic_string_char_leq_bstr_cstr(
840 const basic_string_char *left, const char *right)
842 return MSVCP_basic_string_char_compare_cstr(left, right) <= 0;
845 /* ??$?NDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
846 /* ??$?NDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
847 /* ??Nstd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
848 /* ??Nstd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
849 bool __cdecl MSVCP_basic_string_char_leq_cstr_bstr(
850 const char *left, const basic_string_char *right)
852 return MSVCP_basic_string_char_compare_cstr(right, left) >= 0;
855 /* ??$?ODU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
856 /* ??$?ODU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
857 /* ??Ostd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
858 /* ??Ostd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
859 bool __cdecl MSVCP_basic_string_char_greater(
860 const basic_string_char *left, const basic_string_char *right)
862 return MSVCP_basic_string_char_compare(left, right) > 0;
865 /* ??$?ODU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
866 /* ??$?ODU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
867 /* ??Ostd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
868 /* ??Ostd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
869 bool __cdecl MSVCP_basic_string_char_greater_bstr_cstr(
870 const basic_string_char *left, const char *right)
872 return MSVCP_basic_string_char_compare_cstr(left, right) > 0;
875 /* ??$?ODU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
876 /* ??$?ODU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
877 /* ??Ostd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
878 /* ??Ostd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
879 bool __cdecl MSVCP_basic_string_char_greater_cstr_bstr(
880 const char *left, const basic_string_char *right)
882 return MSVCP_basic_string_char_compare_cstr(right, left) < 0;
885 /* ??$?PDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
886 /* ??$?PDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
887 /* ??Pstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
888 /* ??Pstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
889 bool __cdecl MSVCP_basic_string_char_geq(
890 const basic_string_char *left, const basic_string_char *right)
892 return MSVCP_basic_string_char_compare(left, right) >= 0;
895 /* ??$?PDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
896 /* ??$?PDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
897 /* ??Pstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
898 /* ??Pstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
899 bool __cdecl MSVCP_basic_string_char_geq_bstr_cstr(
900 const basic_string_char *left, const char *right)
902 return MSVCP_basic_string_char_compare_cstr(left, right) >= 0;
905 /* ??$?PDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
906 /* ??$?PDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
907 /* ??Pstd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
908 /* ??Pstd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
909 bool __cdecl MSVCP_basic_string_char_geq_cstr_bstr(
910 const char *left, const basic_string_char *right)
912 return MSVCP_basic_string_char_compare_cstr(right, left) <= 0;
915 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
916 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
917 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_cstr_substr, 16)
918 size_t __thiscall MSVCP_basic_string_char_find_cstr_substr(
919 const basic_string_char *this, const char *find, size_t pos, size_t len)
921 const char *p, *end;
923 TRACE("%p %s %Iu %Iu\n", this, debugstr_an(find, len), pos, len);
925 if(len==0 && pos<=this->size)
926 return pos;
927 if(pos>=this->size || len>this->size)
928 return MSVCP_basic_string_char_npos;
930 end = this->ptr+this->size-len+1;
931 for(p=this->ptr+pos; p<end; p++) {
932 p = MSVCP_char_traits_char_find(p, end-p, find);
933 if(!p)
934 break;
936 if(!MSVCP_char_traits_char_compare(p, find, len))
937 return p-this->ptr;
940 return MSVCP_basic_string_char_npos;
943 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
944 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
945 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_off, 12)
946 size_t __thiscall MSVCP_basic_string_char_find_off(
947 const basic_string_char *this, const basic_string_char *find, size_t off)
949 return MSVCP_basic_string_char_find_cstr_substr(this, find->ptr, off, find->size);
952 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
953 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
954 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_ch, 12)
955 size_t __thiscall MSVCP_basic_string_char_find_ch(
956 const basic_string_char *this, char ch, size_t pos)
958 return MSVCP_basic_string_char_find_cstr_substr(this, &ch, pos, 1);
961 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
962 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
963 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_cstr_off, 12)
964 size_t __thiscall MSVCP_basic_string_char_find_cstr_off(
965 const basic_string_char *this, const char *find, size_t pos)
967 return MSVCP_basic_string_char_find_cstr_substr(this, find, pos,
968 MSVCP_char_traits_char_length(find));
971 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
972 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
973 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rfind_cstr_substr, 16)
974 size_t __thiscall MSVCP_basic_string_char_rfind_cstr_substr(
975 const basic_string_char *this, const char *find, size_t pos, size_t len)
977 const char *p, *end;
979 TRACE("%p %s %Iu %Iu\n", this, debugstr_an(find, len), pos, len);
981 if(len==0)
982 return pos<this->size ? pos : this->size;
984 if(len > this->size)
985 return MSVCP_basic_string_char_npos;
987 if(pos > this->size-len)
988 pos = this->size-len;
989 end = this->ptr;
990 for(p=end+pos; p>=end; p--) {
991 if(*p==*find && !MSVCP_char_traits_char_compare(p, find, len))
992 return p-this->ptr;
995 return MSVCP_basic_string_char_npos;
998 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
999 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1000 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rfind_off, 12)
1001 size_t __thiscall MSVCP_basic_string_char_rfind_off(
1002 const basic_string_char *this, const basic_string_char *find, size_t off)
1004 return MSVCP_basic_string_char_rfind_cstr_substr(this, find->ptr, off, find->size);
1007 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1008 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1009 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rfind_ch, 12)
1010 size_t __thiscall MSVCP_basic_string_char_rfind_ch(
1011 const basic_string_char *this, char ch, size_t pos)
1013 return MSVCP_basic_string_char_rfind_cstr_substr(this, &ch, pos, 1);
1016 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1017 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1018 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rfind_cstr_off, 12)
1019 size_t __thiscall MSVCP_basic_string_char_rfind_cstr_off(
1020 const basic_string_char *this, const char *find, size_t pos)
1022 return MSVCP_basic_string_char_rfind_cstr_substr(this, find, pos,
1023 MSVCP_char_traits_char_length(find));
1026 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1027 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1028 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of_cstr_substr, 16)
1029 size_t __thiscall MSVCP_basic_string_char_find_first_not_of_cstr_substr(
1030 const basic_string_char *this, const char *find, size_t off, size_t len)
1032 const char *p, *end;
1034 TRACE("%p %p %Iu %Iu\n", this, find, off, len);
1036 if(off<this->size) {
1037 end = this->ptr+this->size;
1038 for(p=this->ptr+off; p<end; p++)
1039 if(!MSVCP_char_traits_char_find(find, len, p))
1040 return p-this->ptr;
1043 return MSVCP_basic_string_char_npos;
1046 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1047 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1048 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of, 12)
1049 size_t __thiscall MSVCP_basic_string_char_find_first_not_of(
1050 const basic_string_char *this, const basic_string_char *find, size_t off)
1052 return MSVCP_basic_string_char_find_first_not_of_cstr_substr(this,
1053 find->ptr, off, find->size);
1056 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1057 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1058 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of_ch, 12)
1059 size_t __thiscall MSVCP_basic_string_char_find_first_not_of_ch(
1060 const basic_string_char *this, char ch, size_t off)
1062 return MSVCP_basic_string_char_find_first_not_of_cstr_substr(this, &ch, off, 1);
1065 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1066 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1067 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of_cstr, 12)
1068 size_t __thiscall MSVCP_basic_string_char_find_first_not_of_cstr(
1069 const basic_string_char *this, const char *find, size_t off)
1071 return MSVCP_basic_string_char_find_first_not_of_cstr_substr(
1072 this, find, off, MSVCP_char_traits_char_length(find));
1075 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1076 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1077 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of_cstr_substr, 16)
1078 size_t __thiscall MSVCP_basic_string_char_find_first_of_cstr_substr(
1079 const basic_string_char *this, const char *find, size_t off, size_t len)
1081 const char *p, *end;
1083 TRACE("%p %p %Iu %Iu\n", this, find, off, len);
1085 if(len>0 && off<this->size) {
1086 end = this->ptr+this->size;
1087 for(p=this->ptr+off; p<end; p++)
1088 if(MSVCP_char_traits_char_find(find, len, p))
1089 return p-this->ptr;
1092 return MSVCP_basic_string_char_npos;
1095 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1096 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1097 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of, 12)
1098 size_t __thiscall MSVCP_basic_string_char_find_first_of(
1099 const basic_string_char *this, const basic_string_char *find, size_t off)
1101 return MSVCP_basic_string_char_find_first_of_cstr_substr(this,
1102 find->ptr, off, find->size);
1105 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1106 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1107 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of_ch, 12)
1108 size_t __thiscall MSVCP_basic_string_char_find_first_of_ch(
1109 const basic_string_char *this, char ch, size_t off)
1111 return MSVCP_basic_string_char_find_first_of_cstr_substr(this, &ch, off, 1);
1114 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1115 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1116 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of_cstr, 12)
1117 size_t __thiscall MSVCP_basic_string_char_find_first_of_cstr(
1118 const basic_string_char *this, const char *find, size_t off)
1120 return MSVCP_basic_string_char_find_first_of_cstr_substr(
1121 this, find, off, MSVCP_char_traits_char_length(find));
1124 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1125 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1126 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_not_of_cstr_substr, 16)
1127 size_t __thiscall MSVCP_basic_string_char_find_last_not_of_cstr_substr(
1128 const basic_string_char *this, const char *find, size_t off, size_t len)
1130 const char *p, *beg;
1132 TRACE("%p %p %Iu %Iu\n", this, find, off, len);
1134 if(len>0 && this->size>0) {
1135 if(off >= this->size)
1136 off = this->size-1;
1138 beg = this->ptr;
1139 for(p=beg+off; p>=beg; p--)
1140 if(!MSVCP_char_traits_char_find(find, len, p))
1141 return p-beg;
1144 return MSVCP_basic_string_char_npos;
1147 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1148 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1149 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_not_of, 12)
1150 size_t __thiscall MSVCP_basic_string_char_find_last_not_of(
1151 const basic_string_char *this, const basic_string_char *find, size_t off)
1153 return MSVCP_basic_string_char_find_last_not_of_cstr_substr(this,
1154 find->ptr, off, find->size);
1157 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1158 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1159 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_not_of_ch, 12)
1160 size_t __thiscall MSVCP_basic_string_char_find_last_not_of_ch(
1161 const basic_string_char *this, char ch, size_t off)
1163 return MSVCP_basic_string_char_find_last_not_of_cstr_substr(this, &ch, off, 1);
1166 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1167 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1168 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_not_of_cstr, 12)
1169 size_t __thiscall MSVCP_basic_string_char_find_last_not_of_cstr(
1170 const basic_string_char *this, const char *find, size_t off)
1172 return MSVCP_basic_string_char_find_last_not_of_cstr_substr(
1173 this, find, off, MSVCP_char_traits_char_length(find));
1176 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1177 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1178 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of_cstr_substr, 16)
1179 size_t __thiscall MSVCP_basic_string_char_find_last_of_cstr_substr(
1180 const basic_string_char *this, const char *find, size_t off, size_t len)
1182 const char *p, *beg;
1184 TRACE("%p %p %Iu %Iu\n", this, find, off, len);
1186 if(len>0 && this->size>0) {
1187 if(off >= this->size)
1188 off = this->size-1;
1190 beg = this->ptr;
1191 for(p=beg+off; p>=beg; p--)
1192 if(MSVCP_char_traits_char_find(find, len, p))
1193 return p-beg;
1196 return MSVCP_basic_string_char_npos;
1199 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1200 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1201 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of, 12)
1202 size_t __thiscall MSVCP_basic_string_char_find_last_of(
1203 const basic_string_char *this, const basic_string_char *find, size_t off)
1205 return MSVCP_basic_string_char_find_last_of_cstr_substr(this,
1206 find->ptr, off, find->size);
1209 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1210 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1211 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of_ch, 12)
1212 size_t __thiscall MSVCP_basic_string_char_find_last_of_ch(
1213 const basic_string_char *this, char ch, size_t off)
1215 return MSVCP_basic_string_char_find_last_of_cstr_substr(this, &ch, off, 1);
1218 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1219 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1220 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of_cstr, 12)
1221 size_t __thiscall MSVCP_basic_string_char_find_last_of_cstr(
1222 const basic_string_char *this, const char *find, size_t off)
1224 return MSVCP_basic_string_char_find_last_of_cstr_substr(
1225 this, find, off, MSVCP_char_traits_char_length(find));
1228 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z */
1229 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
1230 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_substr, 16)
1231 basic_string_char* __thiscall MSVCP_basic_string_char_append_substr(basic_string_char *this,
1232 const basic_string_char *append, size_t offset, size_t count)
1234 TRACE("%p %p %Iu %Iu\n", this, append, offset, count);
1236 if(append->size < offset)
1237 _Xran();
1239 if(count > append->size-offset)
1240 count = append->size-offset;
1242 if(MSVCP_basic_string_char_npos-this->size<=count || this->size+count<this->size)
1243 _Xlen();
1245 if(basic_string_char__Grow(this, this->size+count, FALSE)) {
1246 if(append->ptr)
1247 MSVCP_char_traits_char__Copy_s(this->ptr+this->size, this->res-this->size,
1248 append->ptr+offset, count);
1249 basic_string_char__Eos(this, this->size+count);
1252 return this;
1255 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z */
1256 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD_K@Z */
1257 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_cstr_len, 12)
1258 basic_string_char* __thiscall MSVCP_basic_string_char_append_cstr_len(
1259 basic_string_char *this, const char *append, size_t count)
1261 TRACE("%p %s %Iu\n", this, debugstr_an(append, count), count);
1263 if(basic_string_char_inside(this, append))
1264 return MSVCP_basic_string_char_append_substr(this, this, append-this->ptr, count);
1266 if(MSVCP_basic_string_char_npos-this->size<=count || this->size+count<this->size)
1267 _Xlen();
1269 if(basic_string_char__Grow(this, this->size+count, FALSE)) {
1270 MSVCP_char_traits_char__Copy_s(this->ptr+this->size,
1271 this->res-this->size, append, count);
1272 basic_string_char__Eos(this, this->size+count);
1275 return this;
1278 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ID@Z */
1279 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KD@Z */
1280 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_len_ch, 12)
1281 basic_string_char* __thiscall MSVCP_basic_string_char_append_len_ch(
1282 basic_string_char *this, size_t count, char ch)
1284 TRACE("%p %Iu %c\n", this, count, ch);
1286 if(MSVCP_basic_string_char_npos-this->size <= count)
1287 _Xlen();
1289 if(basic_string_char__Grow(this, this->size+count, FALSE)) {
1290 MSVCP_char_traits_char_assignn(this->ptr+this->size, count, ch);
1291 basic_string_char__Eos(this, this->size+count);
1294 return this;
1297 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@@Z */
1298 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@@Z */
1299 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@ABV01@@Z */
1300 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@AEBV01@@Z */
1301 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append, 8)
1302 basic_string_char* __thiscall MSVCP_basic_string_char_append(
1303 basic_string_char *this, const basic_string_char *append)
1305 return MSVCP_basic_string_char_append_substr(this, append,
1306 0, MSVCP_basic_string_char_npos);
1309 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@D@Z */
1310 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@D@Z */
1311 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_ch, 8)
1312 basic_string_char* __thiscall MSVCP_basic_string_char_append_ch(
1313 basic_string_char *this, char ch)
1315 return MSVCP_basic_string_char_append_len_ch(this, 1, ch);
1318 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD0@Z */
1319 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD0@Z */
1320 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_beg_end, 12)
1321 basic_string_char* __thiscall MSVCP_basic_string_char_append_beg_end(
1322 basic_string_char *this, const char *beg, const char *end)
1324 return MSVCP_basic_string_char_append_cstr_len(this, beg, end-beg);
1327 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z */
1328 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD@Z */
1329 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z */
1330 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@PEBD@Z */
1331 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_cstr, 8)
1332 basic_string_char* __thiscall MSVCP_basic_string_char_append_cstr(
1333 basic_string_char *this, const char *append)
1335 return MSVCP_basic_string_char_append_cstr_len(this, append,
1336 MSVCP_char_traits_char_length(append));
1338 /* ??$?HDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@0@Z */
1339 /* ??$?HDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@0@Z */
1340 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@0@Z */
1341 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@0@Z */
1342 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate(basic_string_char *ret,
1343 const basic_string_char *left, const basic_string_char *right)
1345 TRACE("%p %p\n", left, right);
1347 MSVCP_basic_string_char_copy_ctor(ret, left);
1348 MSVCP_basic_string_char_append(ret, right);
1349 return ret;
1352 /* ??$?HDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@D@Z */
1353 /* ??$?HDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@D@Z */
1354 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@D@Z */
1355 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@D@Z */
1356 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_bstr_ch(basic_string_char *ret,
1357 const basic_string_char *left, char right)
1359 TRACE("%p %c\n", left, right);
1361 MSVCP_basic_string_char_copy_ctor(ret, left);
1362 MSVCP_basic_string_char_append_ch(ret, right);
1363 return ret;
1366 /* ??$?HDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@PBD@Z */
1367 /* ??$?HDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@PEBD@Z */
1368 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@PBD@Z */
1369 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@PEBD@Z */
1370 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_bstr_cstr(basic_string_char *ret,
1371 const basic_string_char *left, const char *right)
1373 TRACE("%p %s\n", left, debugstr_a(right));
1375 MSVCP_basic_string_char_copy_ctor(ret, left);
1376 MSVCP_basic_string_char_append_cstr(ret, right);
1377 return ret;
1380 /* ??$?HDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@DABV10@@Z */
1381 /* ??$?HDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@DAEBV10@@Z */
1382 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@DABV10@@Z */
1383 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@DAEBV10@@Z */
1384 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_ch_bstr(basic_string_char *ret,
1385 char left, const basic_string_char *right)
1387 TRACE("%c %p\n", left, right);
1389 MSVCP_basic_string_char_ctor_cstr_len_alloc(ret, &left, 1, NULL);
1390 MSVCP_basic_string_char_append(ret, right);
1391 return ret;
1394 /* ??$?HDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBDABV10@@Z */
1395 /* ??$?HDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBDAEBV10@@Z */
1396 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBDABV10@@Z */
1397 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBDAEBV10@@Z */
1398 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_cstr_bstr(basic_string_char *ret,
1399 const char *left, const basic_string_char *right)
1401 TRACE("%s %p\n", debugstr_a(left), right);
1403 MSVCP_basic_string_char_ctor_cstr_alloc(ret, left, NULL);
1404 MSVCP_basic_string_char_append(ret, right);
1405 return ret;
1408 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAADI@Z */
1409 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAD_K@Z */
1410 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_operator_at, 8)
1411 char* __thiscall MSVCP_basic_string_char_operator_at(
1412 basic_string_char *this, size_t pos)
1414 TRACE("%p %Iu\n", this, pos);
1416 if(!this->ptr || pos>this->size)
1417 return (char*)basic_string_char__Nullstr();
1419 basic_string_char__Freeze(this);
1420 return this->ptr+pos;
1423 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDI@Z */
1424 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAAEBD_K@Z */
1425 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_operator_at_const, 8)
1426 const char* __thiscall MSVCP_basic_string_char_operator_at_const(
1427 const basic_string_char *this, size_t pos)
1429 TRACE("%p %Iu\n", this, pos);
1431 if(!this->ptr)
1432 return basic_string_char__Nullstr();
1433 return this->ptr+pos;
1436 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAADI@Z */
1437 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAD_K@Z */
1438 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDI@Z */
1439 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAAEBD_K@Z */
1440 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_at, 8)
1441 char* __thiscall MSVCP_basic_string_char_at(
1442 basic_string_char *this, size_t pos)
1444 TRACE("%p %Iu\n", this, pos);
1446 if(this->size <= pos)
1447 _Xran();
1449 return this->ptr+pos;
1452 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIPBDI@Z */
1453 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0PEBD0@Z */
1454 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_cstr_len, 20)
1455 basic_string_char* __thiscall basic_string_char_replace_cstr_len(basic_string_char *this,
1456 size_t off, size_t len, const char *str, size_t str_len)
1458 size_t inside_pos = -1;
1459 char *ptr = this->ptr;
1461 TRACE("%p %Iu %Iu %p %Iu\n", this, off, len, str, str_len);
1463 if(this->size < off)
1464 _Xran();
1466 if(len > this->size-off)
1467 len = this->size-off;
1469 if(MSVCP_basic_string_char_npos-str_len <= this->size-len)
1470 _Xlen();
1472 if(basic_string_char_inside(this, str))
1473 inside_pos = str-ptr;
1475 if(this->size-len+str_len)
1476 basic_string_char__Grow(this, this->size-len+str_len, FALSE);
1477 ptr = this->ptr;
1479 if(inside_pos == -1) {
1480 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1481 memcpy(ptr+off, str, str_len*sizeof(char));
1482 } else if(len >= str_len) {
1483 memmove(ptr+off, ptr+inside_pos, str_len*sizeof(char));
1484 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1485 } else {
1486 size_t size;
1488 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1490 if(inside_pos < off+len) {
1491 size = off+len-inside_pos;
1492 if(size > str_len)
1493 size = str_len;
1494 memmove(ptr+off, ptr+inside_pos, size*sizeof(char));
1495 } else {
1496 size = 0;
1499 if(str_len > size)
1500 memmove(ptr+off+size, ptr+off+str_len, (str_len-size)*sizeof(char));
1503 if(this->ptr)
1504 basic_string_char__Eos(this, this->size-len+str_len);
1505 return this;
1508 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIABV12@II@Z */
1509 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0AEBV12@00@Z */
1510 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_substr, 24)
1511 basic_string_char* __thiscall basic_string_char_replace_substr(basic_string_char *this, size_t off,
1512 size_t len, const basic_string_char *str, size_t str_off, size_t str_len)
1514 if(str->size < str_off)
1515 _Xran();
1517 if(str_len > str->size-str_off)
1518 str_len = str->size-str_off;
1520 return basic_string_char_replace_cstr_len(this, off, len,
1521 str->ptr+str_off, str_len);
1524 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIABV12@@Z */
1525 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0AEBV12@@Z */
1526 DEFINE_THISCALL_WRAPPER(basic_string_char_replace, 16)
1527 basic_string_char* __thiscall basic_string_char_replace(basic_string_char *this,
1528 size_t off, size_t len, const basic_string_char *str)
1530 return basic_string_char_replace_cstr_len(this, off, len,
1531 str->ptr, str->size);
1534 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIID@Z */
1535 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K00D@Z */
1536 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_ch, 20)
1537 basic_string_char* __thiscall basic_string_char_replace_ch(basic_string_char *this,
1538 size_t off, size_t len, size_t count, char ch)
1540 char *ptr;
1542 TRACE("%p %Iu %Iu %Iu %c\n", this, off, len, count, ch);
1544 if(this->size < off)
1545 _Xran();
1547 if(len > this->size-off)
1548 len = this->size-off;
1550 if(MSVCP_basic_string_char_npos-count <= this->size-len)
1551 _Xlen();
1553 if(this->size-len+count)
1554 basic_string_char__Grow(this, this->size-len+count, FALSE);
1555 ptr = this->ptr;
1557 memmove(ptr+off+count, ptr+off+len, (this->size-off-len)*sizeof(char));
1558 MSVCP_char_traits_char_assignn(ptr+off, count, ch);
1559 basic_string_char__Eos(this, this->size-len+count);
1561 return this;
1564 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIPBD@Z */
1565 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0PEBD@Z */
1566 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_cstr, 16)
1567 basic_string_char* __thiscall basic_string_char_replace_cstr(basic_string_char *this,
1568 size_t off, size_t len, const char *str)
1570 return basic_string_char_replace_cstr_len(this, off, len, str,
1571 MSVCP_char_traits_char_length(str));
1574 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IABV12@@Z */
1575 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KAEBV12@@Z */
1576 DEFINE_THISCALL_WRAPPER(basic_string_char_insert, 12)
1577 basic_string_char* __thiscall basic_string_char_insert(basic_string_char *this,
1578 size_t off, const basic_string_char *str)
1580 return basic_string_char_replace(this, off, 0, str);
1583 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IABV12@II@Z */
1584 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KAEBV12@00@Z */
1585 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_substr, 20)
1586 basic_string_char* __thiscall basic_string_char_insert_substr(
1587 basic_string_char *this, size_t off, const basic_string_char *str,
1588 size_t str_off, size_t str_count)
1590 return basic_string_char_replace_substr(this, off, 0, str, str_off, str_count);
1593 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IPBD@Z */
1594 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KPEBD@Z */
1595 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_cstr, 12)
1596 basic_string_char* __thiscall basic_string_char_insert_cstr(
1597 basic_string_char *this, size_t off, const char *str)
1599 return basic_string_char_replace_cstr(this, off, 0, str);
1602 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IPBDI@Z */
1603 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KPEBD0@Z */
1604 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_cstr_len, 16)
1605 basic_string_char* __thiscall basic_string_char_insert_cstr_len(basic_string_char *this,
1606 size_t off, const char *str, size_t str_len)
1608 return basic_string_char_replace_cstr_len(this, off, 0, str, str_len);
1611 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IID@Z */
1612 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0D@Z */
1613 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_chn, 16)
1614 basic_string_char* __thiscall basic_string_char_insert_chn(basic_string_char *this,
1615 size_t off, size_t count, char ch)
1617 return basic_string_char_replace_ch(this, off, 0, count, ch);
1620 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXID@Z */
1621 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_KD@Z */
1622 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_resize_ch, 12)
1623 void __thiscall MSVCP_basic_string_char_resize_ch(
1624 basic_string_char *this, size_t size, char ch)
1626 TRACE("%p %Iu %c\n", this, size, ch);
1628 if(size <= this->size)
1629 MSVCP_basic_string_char_erase(this, size, this->size);
1630 else
1631 MSVCP_basic_string_char_append_len_ch(this, size-this->size, ch);
1634 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXI@Z */
1635 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_K@Z */
1636 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_resize, 8)
1637 void __thiscall MSVCP_basic_string_char_resize(
1638 basic_string_char *this, size_t size)
1640 MSVCP_basic_string_char_resize_ch(this, size, '\0');
1643 /* ?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
1644 /* ?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
1645 /* ?data@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
1646 /* ?data@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
1647 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_c_str, 4)
1648 const char* __thiscall MSVCP_basic_string_char_c_str(const basic_string_char *this)
1650 TRACE("%p\n", this);
1651 return this->ptr ? this->ptr : basic_string_char__Nullstr();
1654 /* ?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1655 /* ?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1656 /* ?length@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1657 /* ?length@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1658 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_length, 4)
1659 size_t __thiscall MSVCP_basic_string_char_length(const basic_string_char *this)
1661 TRACE("%p\n", this);
1662 return this->size;
1665 /* ?max_size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1666 /* ?max_size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1667 DEFINE_THISCALL_WRAPPER(basic_string_char_max_size, 4)
1668 size_t __thiscall basic_string_char_max_size(const basic_string_char *this)
1670 TRACE("%p\n", this);
1671 return MSVCP_allocator_char_max_size(NULL)-1;
1674 /* ?capacity@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1675 /* ?capacity@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1676 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_capacity, 4)
1677 size_t __thiscall MSVCP_basic_string_char_capacity(basic_string_char *this)
1679 TRACE("%p\n", this);
1680 return this->res;
1683 /* ?reserve@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXI@Z */
1684 /* ?reserve@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_K@Z */
1685 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_reserve, 8)
1686 void __thiscall MSVCP_basic_string_char_reserve(basic_string_char *this, size_t size)
1688 size_t len;
1690 TRACE("%p %Iu\n", this, size);
1692 len = this->size;
1693 if(len > size)
1694 return;
1696 if(basic_string_char__Grow(this, size, FALSE))
1697 basic_string_char__Eos(this, len);
1700 /* ?empty@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE_NXZ */
1701 /* ?empty@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_NXZ */
1702 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_empty, 4)
1703 bool __thiscall MSVCP_basic_string_char_empty(basic_string_char *this)
1705 TRACE("%p\n", this);
1706 return this->size == 0;
1709 /* ?swap@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXAAV12@@Z */
1710 /* ?swap@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXAEAV12@@Z */
1711 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_swap, 8)
1712 void __thiscall MSVCP_basic_string_char_swap(basic_string_char *this, basic_string_char *str)
1714 basic_string_char tmp;
1715 TRACE("%p %p\n", this, str);
1717 tmp = *this;
1718 *this = *str;
1719 *str = tmp;
1722 /* ?substr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV12@II@Z */
1723 /* ?substr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV12@_K0@Z */
1724 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_substr, 16)
1725 basic_string_char* __thiscall MSVCP_basic_string_char_substr(basic_string_char *this,
1726 basic_string_char *ret, size_t off, size_t len)
1728 TRACE("%p %Iu %Iu\n", this, off, len);
1730 MSVCP_basic_string_char_ctor_substr_alloc(ret, this, off, len, NULL);
1731 return ret;
1734 /* ?copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPADII@Z */
1735 /* ?copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEAD_K1@Z */
1736 DEFINE_THISCALL_WRAPPER(basic_string_char_copy, 16)
1737 size_t __thiscall basic_string_char_copy(const basic_string_char *this,
1738 char *dest, size_t count, size_t off)
1740 TRACE("%p %p %Iu %Iu\n", this, dest, count, off);
1742 if(off > this->size)
1743 _Xran();
1744 if(count > this->size-off)
1745 count = this->size-off;
1746 if(this->ptr)
1747 MSVCP_char_traits_char__Copy_s(dest, count, this->ptr+off, count);
1748 return count;
1751 /* ?get_allocator@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$allocator@D@2@XZ */
1752 /* ?get_allocator@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$allocator@D@2@XZ */
1753 DEFINE_THISCALL_WRAPPER(basic_string_char_get_allocator, 8)
1754 allocator* __thiscall basic_string_char_get_allocator(const basic_string_char *this, allocator *ret)
1756 TRACE("%p\n", this);
1757 return ret;
1760 static bool basic_string_wchar_inside(
1761 basic_string_wchar *this, const wchar_t *ptr)
1763 return ptr>=this->ptr && ptr<this->ptr+this->size;
1766 /* ?npos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@2IB */
1767 /* ?npos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@2_KB */
1768 const size_t MSVCP_basic_string_wchar_npos = -1;
1770 /* ?_C@?1??_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPBGXZ@4GB */
1771 /* ?_C@?1??_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEBGXZ@4GB */
1772 const wchar_t basic_string_wchar_nullbyte = '\0';
1774 /* ?_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPBGXZ */
1775 /* ?_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEBGXZ */
1776 const wchar_t* __cdecl basic_string_wchar__Nullstr(void)
1778 return &basic_string_wchar_nullbyte;
1781 /* ?_Refcnt@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEAAEPBG@Z */
1782 /* ?_Refcnt@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAAEAEPEBG@Z */
1783 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Refcnt, 8)
1784 unsigned short* __thiscall basic_string_wchar__Refcnt(basic_string_wchar *this, const wchar_t *ptr)
1786 TRACE("(%p %p)\n", this, ptr);
1787 return (unsigned short*)ptr-1;
1790 /* ?_Eos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXI@Z */
1791 /* ?_Eos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAX_K@Z */
1792 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Eos, 8)
1793 void __thiscall basic_string_wchar__Eos(basic_string_wchar *this, size_t len)
1795 this->size = len;
1796 this->ptr[len] = 0;
1799 /* ?clear@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXXZ */
1800 /* ?clear@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXXZ */
1801 /* ?clear@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */
1802 /* ?clear@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */
1803 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_clear, 4)
1804 void __thiscall MSVCP_basic_string_wchar_clear(basic_string_wchar *this)
1806 if(this->ptr)
1807 basic_string_wchar__Eos(this, 0);
1810 /* ?_Tidy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEX_N@Z */
1811 /* ?_Tidy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAX_N@Z */
1812 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Tidy, 8)
1813 void __thiscall basic_string_wchar__Tidy(basic_string_wchar *this, bool built)
1815 TRACE("(%p %d)\n", this, built);
1817 if(!built || !this->ptr);
1818 else if(!this->ptr[-1] || this->ptr[-1]==FROZENW)
1819 MSVCP_allocator_wchar_deallocate(NULL, this->ptr-1, this->res+2);
1820 else
1821 this->ptr[-1]--;
1823 memset(this, 0, sizeof(*this));
1826 /* ?_Grow@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAE_NI_N@Z */
1827 /* ?_Grow@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAA_N_K_N@Z */
1828 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Grow, 12)
1829 bool __thiscall basic_string_wchar__Grow(basic_string_wchar *this, size_t new_size, bool trim)
1831 if(!new_size) {
1832 if(trim)
1833 basic_string_wchar__Tidy(this, TRUE);
1834 else if(this->ptr)
1835 basic_string_wchar__Eos(this, 0);
1836 } else if(this->res<new_size || trim ||
1837 (this->ptr && this->ptr[-1] && this->ptr[-1]!=FROZENW)) {
1838 size_t new_res = new_size, len = this->size;
1839 wchar_t *ptr;
1841 if(!trim && this->ptr && !this->ptr[-1]) {
1842 new_res |= 0xf;
1843 if(new_res/3 < this->res/2)
1844 new_res = this->res + this->res/2;
1847 ptr = MSVCP_allocator_wchar_allocate(this->allocator, new_res+2);
1848 if(!ptr) {
1849 new_res = new_size;
1850 ptr = MSVCP_allocator_wchar_allocate(this->allocator, new_size+2);
1852 if(!ptr) {
1853 ERR("Out of memory\n");
1854 return FALSE;
1857 if(len > new_res)
1858 len = new_res;
1860 *ptr = 0;
1861 if(this->ptr)
1862 MSVCP_char_traits_wchar__Copy_s(ptr+1, new_size, this->ptr, len);
1863 basic_string_wchar__Tidy(this, TRUE);
1864 this->ptr = ptr+1;
1865 this->res = new_res;
1866 basic_string_wchar__Eos(this, len);
1869 return new_size>0;
1872 /* ?_Split@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXXZ */
1873 /* ?_Split@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAXXZ */
1874 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Split, 4)
1875 void __thiscall basic_string_wchar__Split(basic_string_wchar *this)
1877 size_t len;
1878 wchar_t *ptr;
1880 TRACE("(%p)\n", this);
1882 if(!this->ptr || !this->ptr[-1] || this->ptr[-1]==FROZENW)
1883 return;
1885 ptr = this->ptr;
1886 len = this->size;
1887 basic_string_wchar__Tidy(this, TRUE);
1888 if(basic_string_wchar__Grow(this, len, FALSE)) {
1889 if(ptr)
1890 MSVCP_char_traits_wchar__Copy_s(this->ptr, this->res, ptr, len);
1891 basic_string_wchar__Eos(this, len);
1895 /* ?_Freeze@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXXZ */
1896 /* ?_Freeze@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAXXZ */
1897 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Freeze, 4)
1898 void __thiscall basic_string_wchar__Freeze(basic_string_wchar *this)
1900 TRACE("(%p)\n", this);
1901 basic_string_wchar__Split(this);
1902 if(this->ptr)
1903 this->ptr[-1] = FROZENW;
1906 /* ?_Copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXI@Z */
1907 /* ?_Copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAX_K@Z */
1908 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Copy, 8)
1909 void __thiscall basic_string_wchar__Copy(basic_string_wchar *this, size_t copy_len)
1911 TRACE("%p %Iu\n", this, copy_len);
1913 if(!basic_string_wchar__Grow(this, copy_len, TRUE))
1914 return;
1917 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPAGPAGI@Z */
1918 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEAGPEAG_K@Z */
1919 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPBGPBGI@Z */
1920 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEBGPEBG_K@Z */
1921 wchar_t* __cdecl basic_string_wchar__Psum(wchar_t *iter, size_t add)
1923 TRACE("(%p %Iu)\n", iter, add);
1924 return iter ? iter+add : iter;
1927 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@II@Z */
1928 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0@Z */
1929 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_erase, 12)
1930 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_erase(
1931 basic_string_wchar *this, size_t pos, size_t len)
1933 TRACE("%p %Iu %Iu\n", this, pos, len);
1935 if(pos > this->size)
1936 _Xran();
1938 if(len > this->size-pos)
1939 len = this->size-pos;
1941 if(len) {
1942 basic_string_wchar__Split(this);
1943 MSVCP_char_traits_wchar__Move_s(this->ptr+pos, this->res-pos,
1944 this->ptr+pos+len, this->size-pos-len);
1945 basic_string_wchar__Eos(this, this->size-len);
1948 return this;
1951 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGPAG@Z */
1952 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGPEAG@Z */
1953 DEFINE_THISCALL_WRAPPER(basic_string_wchar_erase_beg, 8)
1954 wchar_t* __thiscall basic_string_wchar_erase_beg(basic_string_wchar *this, wchar_t *beg)
1956 size_t pos = beg-this->ptr;
1957 MSVCP_basic_string_wchar_erase(this, pos, 1);
1958 return this->ptr+pos;
1961 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@II@Z */
1962 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
1963 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_substr, 16)
1964 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_substr(
1965 basic_string_wchar *this, const basic_string_wchar *assign,
1966 size_t pos, size_t len)
1968 TRACE("%p %p %Iu %Iu\n", this, assign, pos, len);
1970 if(assign->size < pos)
1971 _Xran();
1973 if(len > assign->size-pos)
1974 len = assign->size-pos;
1976 if(this == assign) {
1977 MSVCP_basic_string_wchar_erase(this, pos+len, MSVCP_basic_string_wchar_npos);
1978 MSVCP_basic_string_wchar_erase(this, 0, pos);
1979 } else if(basic_string_wchar__Grow(this, len, FALSE)) {
1980 if(assign->ptr)
1981 MSVCP_char_traits_wchar__Copy_s(this->ptr, this->res,
1982 assign->ptr+pos, len);
1983 basic_string_wchar__Eos(this, len);
1986 return this;
1989 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBGI@Z */
1990 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG_K@Z */
1991 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_cstr_len, 12)
1992 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_cstr_len(
1993 basic_string_wchar *this, const wchar_t *str, size_t len)
1995 TRACE("%p %s %Iu\n", this, debugstr_wn(str, len), len);
1997 if(basic_string_wchar_inside(this, str))
1998 return MSVCP_basic_string_wchar_assign_substr(this, this, str-this->ptr, len);
1999 else if(basic_string_wchar__Grow(this, len, FALSE)) {
2000 MSVCP_char_traits_wchar__Copy_s(this->ptr, this->res, str, len);
2001 basic_string_wchar__Eos(this, len);
2004 return this;
2007 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@@Z */
2008 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@@Z */
2009 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@ABV01@@Z */
2010 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@AEBV01@@Z */
2011 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign, 8)
2012 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign(
2013 basic_string_wchar *this, const basic_string_wchar *assign)
2015 return MSVCP_basic_string_wchar_assign_substr(this, assign,
2016 0, MSVCP_basic_string_wchar_npos);
2019 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG@Z */
2020 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG@Z */
2021 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@PBG@Z */
2022 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@PEBG@Z */
2023 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_cstr, 8)
2024 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_cstr(
2025 basic_string_wchar *this, const wchar_t *str)
2027 return MSVCP_basic_string_wchar_assign_cstr_len(this, str,
2028 MSVCP_char_traits_wchar_length(str));
2031 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@G@Z */
2032 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@G@Z */
2033 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_ch, 8)
2034 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_ch(
2035 basic_string_wchar *this, wchar_t ch)
2037 return MSVCP_basic_string_wchar_assign_cstr_len(this, &ch, 1);
2040 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IG@Z */
2041 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KG@Z */
2042 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assignn, 12)
2043 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assignn(
2044 basic_string_wchar *this, size_t count, wchar_t ch)
2046 TRACE("%p %Iu %c\n", this, count, ch);
2048 basic_string_wchar__Grow(this, count, FALSE);
2049 MSVCP_char_traits_wchar_assignn(this->ptr, count, ch);
2050 basic_string_wchar__Eos(this, count);
2051 return this;
2054 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG0@Z */
2055 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG0@Z */
2056 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_ptr_ptr, 12)
2057 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_ptr_ptr(
2058 basic_string_wchar *this, const wchar_t *first, const wchar_t *last)
2060 return MSVCP_basic_string_wchar_assign_cstr_len(this, first, last-first);
2063 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBGIABV?$allocator@G@1@@Z */
2064 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG_KAEBV?$allocator@G@1@@Z */
2065 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr_len_alloc, 16)
2066 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr_len_alloc(
2067 basic_string_wchar *this, const wchar_t *str, size_t len, const void *alloc)
2069 TRACE("%p %s %Iu\n", this, debugstr_wn(str, len), len);
2071 basic_string_wchar__Tidy(this, FALSE);
2072 MSVCP_basic_string_wchar_assign_cstr_len(this, str, len);
2073 return this;
2076 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@PB_WI@Z */
2077 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@PEB_W_K@Z */
2078 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBGI@Z */
2079 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG_K@Z */
2080 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr_len, 12)
2081 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr_len(
2082 basic_string_wchar *this, const wchar_t *str, size_t len)
2084 return MSVCP_basic_string_wchar_ctor_cstr_len_alloc(this, str, len, NULL);
2087 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV01@IIABV?$allocator@G@1@@Z */
2088 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV01@_K1AEBV?$allocator@G@1@@Z */
2089 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_substr_alloc, 20)
2090 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_substr_alloc(
2091 basic_string_wchar *this, const basic_string_wchar *assign,
2092 size_t pos, size_t len, const void *alloc)
2094 TRACE("%p %p %Iu %Iu\n", this, assign, pos, len);
2096 basic_string_wchar__Tidy(this, FALSE);
2097 MSVCP_basic_string_wchar_assign_substr(this, assign, pos, len);
2098 return this;
2101 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBGABV?$allocator@G@1@@Z */
2102 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBGAEBV?$allocator@G@1@@Z */
2103 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr_alloc, 12)
2104 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr_alloc(
2105 basic_string_wchar *this, const wchar_t *str, const void *alloc)
2107 TRACE("%p %s\n", this, debugstr_w(str));
2109 basic_string_wchar__Tidy(this, FALSE);
2110 MSVCP_basic_string_wchar_assign_cstr(this, str);
2111 return this;
2114 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@PB_W@Z */
2115 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@PEB_W@Z */
2116 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBG@Z */
2117 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG@Z */
2118 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr, 8)
2119 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr(
2120 basic_string_wchar *this, const wchar_t *str)
2122 return MSVCP_basic_string_wchar_ctor_cstr_alloc(this, str, NULL);
2125 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@IGABV?$allocator@G@1@@Z */
2126 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@_KGAEBV?$allocator@G@1@@Z */
2127 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_ch_alloc, 16)
2128 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_ch_alloc(basic_string_wchar *this,
2129 size_t count, wchar_t ch, const void *alloc)
2131 TRACE("%p %Iu %c\n", this, count, ch);
2133 basic_string_wchar__Tidy(this, FALSE);
2134 MSVCP_basic_string_wchar_assignn(this, count, ch);
2135 return this;
2138 /* ??_F?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */
2139 /* ??_F?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */
2140 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor, 4)
2141 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor(basic_string_wchar *this)
2143 TRACE("%p\n", this);
2145 basic_string_wchar__Tidy(this, FALSE);
2146 return this;
2149 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV?$allocator@G@1@@Z */
2150 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV?$allocator@G@1@@Z */
2151 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_alloc, 8)
2152 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_alloc(
2153 basic_string_wchar *this, const void *alloc)
2155 TRACE("%p %p\n", this, alloc);
2157 basic_string_wchar__Tidy(this, FALSE);
2158 return this;
2161 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV01@@Z */
2162 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV01@@Z */
2163 DEFINE_THISCALL_WRAPPER(basic_string_wchar_copy_ctor, 8)
2164 basic_string_wchar* __thiscall basic_string_wchar_copy_ctor(
2165 basic_string_wchar *this, const basic_string_wchar *copy)
2167 TRACE("%p %p\n", this, copy);
2169 basic_string_wchar__Tidy(this, FALSE);
2170 MSVCP_basic_string_wchar_assign(this, copy);
2171 return this;
2174 /* ??1?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@XZ */
2175 /* ??1?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@XZ */
2176 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_dtor, 4)
2177 void __thiscall MSVCP_basic_string_wchar_dtor(basic_string_wchar *this)
2179 TRACE("%p\n", this);
2180 basic_string_wchar__Tidy(this, TRUE);
2183 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIPBGI@Z */
2184 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0PEBG0@Z */
2185 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr_cstr_len, 20)
2186 int __thiscall MSVCP_basic_string_wchar_compare_substr_cstr_len(
2187 const basic_string_wchar *this, size_t pos, size_t num,
2188 const wchar_t *str, size_t count)
2190 int ans;
2192 TRACE("%p %Iu %Iu %s %Iu\n", this, pos, num, debugstr_wn(str, count), count);
2194 if(this->size < pos)
2195 _Xran();
2197 if(num > this->size-pos)
2198 num = this->size-pos;
2200 ans = MSVCP_char_traits_wchar_compare(this->ptr+pos,
2201 str, num>count ? count : num);
2202 if(ans)
2203 return ans;
2205 if(num > count)
2206 ans = 1;
2207 else if(num < count)
2208 ans = -1;
2209 return ans;
2212 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHPBG@Z */
2213 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAHPEBG@Z */
2214 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_cstr, 8)
2215 int __thiscall MSVCP_basic_string_wchar_compare_cstr(
2216 const basic_string_wchar *this, const wchar_t *str)
2218 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, 0, this->size,
2219 str, MSVCP_char_traits_wchar_length(str));
2222 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIABV12@II@Z */
2223 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0AEBV12@00@Z */
2224 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr_substr, 24)
2225 int __thiscall MSVCP_basic_string_wchar_compare_substr_substr(
2226 const basic_string_wchar *this, size_t pos, size_t num,
2227 const basic_string_wchar *compare, size_t off, size_t count)
2229 TRACE("%p %Iu %Iu %p %Iu %Iu\n", this, pos, num, compare, off, count);
2231 if(compare->size < off)
2232 _Xran();
2234 if(count > compare->size-off)
2235 count = compare->size-off;
2237 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2238 compare->ptr+off, count);
2241 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIABV12@@Z */
2242 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0AEBV12@@Z */
2243 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr, 16)
2244 int __thiscall MSVCP_basic_string_wchar_compare_substr(
2245 const basic_string_wchar *this, size_t pos, size_t num,
2246 const basic_string_wchar *compare)
2248 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2249 compare->ptr, compare->size);
2252 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHABV12@@Z */
2253 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAHAEBV12@@Z */
2254 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare, 8)
2255 int __thiscall MSVCP_basic_string_wchar_compare(
2256 const basic_string_wchar *this, const basic_string_wchar *compare)
2258 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, 0, this->size,
2259 compare->ptr, compare->size);
2262 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIPBG@Z */
2263 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0PEBG@Z */
2264 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr_cstr, 16)
2265 int __thiscall MSVCP_basic_string_wchar_compare_substr_cstr(const basic_string_wchar *this,
2266 size_t pos, size_t num, const wchar_t *str)
2268 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2269 str, MSVCP_char_traits_wchar_length(str));
2272 /* ??$?8GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2273 /* ??$?8GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2274 /* ??8std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2275 /* ??8std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2276 bool __cdecl MSVCP_basic_string_wchar_equal(
2277 const basic_string_wchar *left, const basic_string_wchar *right)
2279 return MSVCP_basic_string_wchar_compare(left, right) == 0;
2282 /* ??$?8GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2283 /* ??$?8GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2284 /* ??8std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2285 /* ??8std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2286 bool __cdecl MSVCP_basic_string_wchar_equal_str_cstr(
2287 const basic_string_wchar *left, const wchar_t *right)
2289 return MSVCP_basic_string_wchar_compare_cstr(left, right) == 0;
2292 /* ??$?8GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2293 /* ??$?8GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2294 /* ??8std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2295 /* ??8std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2296 bool __cdecl MSVCP_basic_string_wchar_equal_cstr_str(
2297 const wchar_t *left, const basic_string_wchar *right)
2299 return MSVCP_basic_string_wchar_compare_cstr(right, left) == 0;
2302 /* ??$?9GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2303 /* ??$?9GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2304 /* ??9std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2305 /* ??9std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2306 bool __cdecl MSVCP_basic_string_wchar_not_equal(
2307 const basic_string_wchar *left, const basic_string_wchar *right)
2309 return MSVCP_basic_string_wchar_compare(left, right) != 0;
2312 /* ??$?9GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2313 /* ??$?9GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2314 /* ??9std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2315 /* ??9std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2316 bool __cdecl MSVCP_basic_string_wchar_not_equal_str_cstr(
2317 const basic_string_wchar *left, const wchar_t *right)
2319 return MSVCP_basic_string_wchar_compare_cstr(left, right) != 0;
2322 /* ??$?9GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2323 /* ??$?9GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2324 /* ??9std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2325 /* ??9std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2326 bool __cdecl MSVCP_basic_string_wchar_not_equal_cstr_str(
2327 const wchar_t *left, const basic_string_wchar *right)
2329 return MSVCP_basic_string_wchar_compare_cstr(right, left) != 0;
2332 /* ??$?MGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2333 /* ??$?MGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2334 /* ??Mstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2335 /* ??Mstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2336 bool __cdecl MSVCP_basic_string_wchar_lower(
2337 const basic_string_wchar *left, const basic_string_wchar *right)
2339 return MSVCP_basic_string_wchar_compare(left, right) < 0;
2342 /* ??$?MGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2343 /* ??$?MGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2344 /* ??Mstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2345 /* ??Mstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2346 bool __cdecl MSVCP_basic_string_wchar_lower_bstr_cstr(
2347 const basic_string_wchar *left, const wchar_t *right)
2349 return MSVCP_basic_string_wchar_compare_cstr(left, right) < 0;
2352 /* ??$?MGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2353 /* ??$?MGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2354 /* ??Mstd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2355 /* ??Mstd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2356 bool __cdecl MSVCP_basic_string_wchar_lower_cstr_bstr(
2357 const wchar_t *left, const basic_string_wchar *right)
2359 return MSVCP_basic_string_wchar_compare_cstr(right, left) > 0;
2362 /* ??$?NGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2363 /* ??$?NGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2364 /* ??Nstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2365 /* ??Nstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2366 bool __cdecl MSVCP_basic_string_wchar_leq(
2367 const basic_string_wchar *left, const basic_string_wchar *right)
2369 return MSVCP_basic_string_wchar_compare(left, right) <= 0;
2372 /* ??$?NGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2373 /* ??$?NGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2374 /* ??Nstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2375 /* ??Nstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2376 bool __cdecl MSVCP_basic_string_wchar_leq_bstr_cstr(
2377 const basic_string_wchar *left, const wchar_t *right)
2379 return MSVCP_basic_string_wchar_compare_cstr(left, right) <= 0;
2382 /* ??$?NGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2383 /* ??$?NGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2384 /* ??Nstd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2385 /* ??Nstd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2386 bool __cdecl MSVCP_basic_string_wchar_leq_cstr_bstr(
2387 const wchar_t *left, const basic_string_wchar *right)
2389 return MSVCP_basic_string_wchar_compare_cstr(right, left) >= 0;
2392 /* ??$?OGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2393 /* ??$?OGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2394 /* ??Ostd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2395 /* ??Ostd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2396 bool __cdecl MSVCP_basic_string_wchar_greater(
2397 const basic_string_wchar *left, const basic_string_wchar *right)
2399 return MSVCP_basic_string_wchar_compare(left, right) > 0;
2402 /* ??$?OGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2403 /* ??$?OGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2404 /* ??Ostd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2405 /* ??Ostd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2406 bool __cdecl MSVCP_basic_string_wchar_greater_bstr_cstr(
2407 const basic_string_wchar *left, const wchar_t *right)
2409 return MSVCP_basic_string_wchar_compare_cstr(left, right) > 0;
2412 /* ??$?OGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2413 /* ??$?OGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2414 /* ??Ostd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2415 /* ??Ostd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2416 bool __cdecl MSVCP_basic_string_wchar_greater_cstr_bstr(
2417 const wchar_t *left, const basic_string_wchar *right)
2419 return MSVCP_basic_string_wchar_compare_cstr(right, left) < 0;
2422 /* ??$?PGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2423 /* ??$?PGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2424 /* ??Pstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2425 /* ??Pstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2426 bool __cdecl MSVCP_basic_string_wchar_geq(
2427 const basic_string_wchar *left, const basic_string_wchar *right)
2429 return MSVCP_basic_string_wchar_compare(left, right) >= 0;
2432 /* ??$?PGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2433 /* ??$?PGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2434 /* ??Pstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2435 /* ??Pstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2436 bool __cdecl MSVCP_basic_string_wchar_geq_bstr_cstr(
2437 const basic_string_wchar *left, const wchar_t *right)
2439 return MSVCP_basic_string_wchar_compare_cstr(left, right) >= 0;
2442 /* ??$?PGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2443 /* ??$?PGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2444 /* ??Pstd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2445 /* ??Pstd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2446 bool __cdecl MSVCP_basic_string_wchar_geq_cstr_bstr(
2447 const wchar_t *left, const basic_string_wchar *right)
2449 return MSVCP_basic_string_wchar_compare_cstr(right, left) <= 0;
2452 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2453 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2454 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_cstr_substr, 16)
2455 size_t __thiscall MSVCP_basic_string_wchar_find_cstr_substr(
2456 const basic_string_wchar *this, const wchar_t *find, size_t pos, size_t len)
2458 const wchar_t *p, *end;
2460 TRACE("%p %s %Iu %Iu\n", this, debugstr_wn(find, len), pos, len);
2462 if(len==0 && pos<=this->size)
2463 return pos;
2464 if(pos>=this->size || len>this->size)
2465 return MSVCP_basic_string_wchar_npos;
2467 end = this->ptr+this->size-len+1;
2468 for(p=this->ptr+pos; p<end; p++) {
2469 p = MSVCP_char_traits_wchar_find(p, end-p, find);
2470 if(!p)
2471 break;
2473 if(!MSVCP_char_traits_wchar_compare(p, find, len))
2474 return p-this->ptr;
2477 return MSVCP_basic_string_wchar_npos;
2480 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2481 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2482 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_off, 12)
2483 size_t __thiscall MSVCP_basic_string_wchar_find_off(
2484 const basic_string_wchar *this, const basic_string_wchar *find, size_t off)
2486 return MSVCP_basic_string_wchar_find_cstr_substr(this, find->ptr, off, find->size);
2489 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2490 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2491 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_ch, 12)
2492 size_t __thiscall MSVCP_basic_string_wchar_find_ch(
2493 const basic_string_wchar *this, wchar_t ch, size_t pos)
2495 return MSVCP_basic_string_wchar_find_cstr_substr(this, &ch, pos, 1);
2498 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2499 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2500 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_cstr_off, 12)
2501 size_t __thiscall MSVCP_basic_string_wchar_find_cstr_off(
2502 const basic_string_wchar *this, const wchar_t *find, size_t pos)
2504 return MSVCP_basic_string_wchar_find_cstr_substr(this, find, pos,
2505 MSVCP_char_traits_wchar_length(find));
2508 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2509 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2510 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rfind_cstr_substr, 16)
2511 size_t __thiscall MSVCP_basic_string_wchar_rfind_cstr_substr(
2512 const basic_string_wchar *this, const wchar_t *find, size_t pos, size_t len)
2514 const wchar_t *p, *end;
2516 TRACE("%p %s %Iu %Iu\n", this, debugstr_wn(find, len), pos, len);
2518 if(len==0)
2519 return pos<this->size ? pos : this->size;
2521 if(len > this->size)
2522 return MSVCP_basic_string_wchar_npos;
2524 if(pos > this->size-len)
2525 pos = this->size-len;
2526 end = this->ptr;
2527 for(p=end+pos; p>=end; p--) {
2528 if(*p==*find && !MSVCP_char_traits_wchar_compare(p, find, len))
2529 return p-this->ptr;
2532 return MSVCP_basic_string_wchar_npos;
2535 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2536 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2537 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rfind_off, 12)
2538 size_t __thiscall MSVCP_basic_string_wchar_rfind_off(
2539 const basic_string_wchar *this, const basic_string_wchar *find, size_t off)
2541 return MSVCP_basic_string_wchar_rfind_cstr_substr(this, find->ptr, off, find->size);
2544 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2545 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2546 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rfind_ch, 12)
2547 size_t __thiscall MSVCP_basic_string_wchar_rfind_ch(
2548 const basic_string_wchar *this, wchar_t ch, size_t pos)
2550 return MSVCP_basic_string_wchar_rfind_cstr_substr(this, &ch, pos, 1);
2553 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2554 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2555 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rfind_cstr_off, 12)
2556 size_t __thiscall MSVCP_basic_string_wchar_rfind_cstr_off(
2557 const basic_string_wchar *this, const wchar_t *find, size_t pos)
2559 return MSVCP_basic_string_wchar_rfind_cstr_substr(this, find, pos,
2560 MSVCP_char_traits_wchar_length(find));
2563 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2564 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2565 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of_cstr_substr, 16)
2566 size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(
2567 const basic_string_wchar *this, const wchar_t *find, size_t off, size_t len)
2569 const wchar_t *p, *end;
2571 TRACE("%p %p %Iu %Iu\n", this, find, off, len);
2573 if(off<this->size) {
2574 end = this->ptr+this->size;
2575 for(p=this->ptr+off; p<end; p++)
2576 if(!MSVCP_char_traits_wchar_find(find, len, p))
2577 return p-this->ptr;
2580 return MSVCP_basic_string_wchar_npos;
2583 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2584 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2585 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of, 12)
2586 size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of(
2587 const basic_string_wchar *this, const basic_string_wchar *find, size_t off)
2589 return MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(this,
2590 find->ptr, off, find->size);
2593 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2594 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2595 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of_ch, 12)
2596 size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of_ch(
2597 const basic_string_wchar *this, wchar_t ch, size_t off)
2599 return MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(this, &ch, off, 1);
2602 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2603 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2604 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of_cstr, 12)
2605 size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of_cstr(
2606 const basic_string_wchar *this, const wchar_t *find, size_t off)
2608 return MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(
2609 this, find, off, MSVCP_char_traits_wchar_length(find));
2612 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2613 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2614 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of_cstr_substr, 16)
2615 size_t __thiscall MSVCP_basic_string_wchar_find_first_of_cstr_substr(
2616 const basic_string_wchar *this, const wchar_t *find, size_t off, size_t len)
2618 const wchar_t *p, *end;
2620 TRACE("%p %p %Iu %Iu\n", this, find, off, len);
2622 if(len>0 && off<this->size) {
2623 end = this->ptr+this->size;
2624 for(p=this->ptr+off; p<end; p++)
2625 if(MSVCP_char_traits_wchar_find(find, len, p))
2626 return p-this->ptr;
2629 return MSVCP_basic_string_wchar_npos;
2632 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2633 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2634 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of, 12)
2635 size_t __thiscall MSVCP_basic_string_wchar_find_first_of(
2636 const basic_string_wchar *this, const basic_string_wchar *find, size_t off)
2638 return MSVCP_basic_string_wchar_find_first_of_cstr_substr(this,
2639 find->ptr, off, find->size);
2642 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2643 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2644 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of_ch, 12)
2645 size_t __thiscall MSVCP_basic_string_wchar_find_first_of_ch(
2646 const basic_string_wchar *this, wchar_t ch, size_t off)
2648 return MSVCP_basic_string_wchar_find_first_of_cstr_substr(this, &ch, off, 1);
2651 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2652 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2653 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of_cstr, 12)
2654 size_t __thiscall MSVCP_basic_string_wchar_find_first_of_cstr(
2655 const basic_string_wchar *this, const wchar_t *find, size_t off)
2657 return MSVCP_basic_string_wchar_find_first_of_cstr_substr(
2658 this, find, off, MSVCP_char_traits_wchar_length(find));
2661 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2662 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2663 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_not_of_cstr_substr, 16)
2664 size_t __thiscall MSVCP_basic_string_wchar_find_last_not_of_cstr_substr(
2665 const basic_string_wchar *this, const wchar_t *find, size_t off, size_t len)
2667 const wchar_t *p, *beg;
2669 TRACE("%p %p %Iu %Iu\n", this, find, off, len);
2671 if(len>0 && this->size>0) {
2672 if(off >= this->size)
2673 off = this->size-1;
2675 beg = this->ptr;
2676 for(p=beg+off; p>=beg; p--)
2677 if(!MSVCP_char_traits_wchar_find(find, len, p))
2678 return p-beg;
2681 return MSVCP_basic_string_wchar_npos;
2684 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2685 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2686 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_not_of, 12)
2687 size_t __thiscall MSVCP_basic_string_wchar_find_last_not_of(
2688 const basic_string_wchar *this, const basic_string_wchar *find, size_t off)
2690 return MSVCP_basic_string_wchar_find_last_not_of_cstr_substr(this,
2691 find->ptr, off, find->size);
2694 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2695 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2696 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_not_of_ch, 12)
2697 size_t __thiscall MSVCP_basic_string_wchar_find_last_not_of_ch(
2698 const basic_string_wchar *this, wchar_t ch, size_t off)
2700 return MSVCP_basic_string_wchar_find_last_not_of_cstr_substr(this, &ch, off, 1);
2703 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2704 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2705 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_not_of_cstr, 12)
2706 size_t __thiscall MSVCP_basic_string_wchar_find_last_not_of_cstr(
2707 const basic_string_wchar *this, const wchar_t *find, size_t off)
2709 return MSVCP_basic_string_wchar_find_last_not_of_cstr_substr(
2710 this, find, off, MSVCP_char_traits_wchar_length(find));
2713 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2714 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2715 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of_cstr_substr, 16)
2716 size_t __thiscall MSVCP_basic_string_wchar_find_last_of_cstr_substr(
2717 const basic_string_wchar *this, const wchar_t *find, size_t off, size_t len)
2719 const wchar_t *p, *beg;
2721 TRACE("%p %p %Iu %Iu\n", this, find, off, len);
2723 if(len>0 && this->size>0) {
2724 if(off >= this->size)
2725 off = this->size-1;
2727 beg = this->ptr;
2728 for(p=beg+off; p>=beg; p--)
2729 if(MSVCP_char_traits_wchar_find(find, len, p))
2730 return p-beg;
2733 return MSVCP_basic_string_wchar_npos;
2736 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2737 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2738 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of, 12)
2739 size_t __thiscall MSVCP_basic_string_wchar_find_last_of(
2740 const basic_string_wchar *this, const basic_string_wchar *find, size_t off)
2742 return MSVCP_basic_string_wchar_find_last_of_cstr_substr(this,
2743 find->ptr, off, find->size);
2746 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2747 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2748 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of_ch, 12)
2749 size_t __thiscall MSVCP_basic_string_wchar_find_last_of_ch(
2750 const basic_string_wchar *this, wchar_t ch, size_t off)
2752 return MSVCP_basic_string_wchar_find_last_of_cstr_substr(this, &ch, off, 1);
2755 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2756 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2757 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of_cstr, 12)
2758 size_t __thiscall MSVCP_basic_string_wchar_find_last_of_cstr(
2759 const basic_string_wchar *this, const wchar_t *find, size_t off)
2761 return MSVCP_basic_string_wchar_find_last_of_cstr_substr(
2762 this, find, off, MSVCP_char_traits_wchar_length(find));
2765 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@II@Z */
2766 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
2767 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_substr, 16)
2768 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_substr(basic_string_wchar *this,
2769 const basic_string_wchar *append, size_t offset, size_t count)
2771 TRACE("%p %p %Iu %Iu\n", this, append, offset, count);
2773 if(append->size < offset)
2774 _Xran();
2776 if(count > append->size-offset)
2777 count = append->size-offset;
2779 if(MSVCP_basic_string_wchar_npos-this->size<=count || this->size+count<this->size)
2780 _Xlen();
2782 if(basic_string_wchar__Grow(this, this->size+count, FALSE)) {
2783 if(append->ptr)
2784 MSVCP_char_traits_wchar__Copy_s(this->ptr+this->size, this->res-this->size,
2785 append->ptr+offset, count);
2786 basic_string_wchar__Eos(this, this->size+count);
2789 return this;
2792 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBGI@Z */
2793 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG_K@Z */
2794 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_cstr_len, 12)
2795 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_cstr_len(
2796 basic_string_wchar *this, const wchar_t *append, size_t count)
2798 TRACE("%p %s %Iu\n", this, debugstr_wn(append, count), count);
2800 if(basic_string_wchar_inside(this, append))
2801 return MSVCP_basic_string_wchar_append_substr(this, this, append-this->ptr, count);
2803 if(MSVCP_basic_string_wchar_npos-this->size<=count || this->size+count<this->size)
2804 _Xlen();
2806 if(basic_string_wchar__Grow(this, this->size+count, FALSE)) {
2807 MSVCP_char_traits_wchar__Copy_s(this->ptr+this->size,
2808 this->res-this->size, append, count);
2809 basic_string_wchar__Eos(this, this->size+count);
2812 return this;
2815 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IG@Z */
2816 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KG@Z */
2817 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_len_ch, 12)
2818 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_len_ch(
2819 basic_string_wchar *this, size_t count, wchar_t ch)
2821 TRACE("%p %Iu %c\n", this, count, ch);
2823 if(MSVCP_basic_string_wchar_npos-this->size <= count)
2824 _Xlen();
2826 if(basic_string_wchar__Grow(this, this->size+count, FALSE)) {
2827 MSVCP_char_traits_wchar_assignn(this->ptr+this->size, count, ch);
2828 basic_string_wchar__Eos(this, this->size+count);
2831 return this;
2834 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@@Z */
2835 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@@Z */
2836 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@ABV01@@Z */
2837 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@AEBV01@@Z */
2838 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append, 8)
2839 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append(
2840 basic_string_wchar *this, const basic_string_wchar *append)
2842 return MSVCP_basic_string_wchar_append_substr(this, append,
2843 0, MSVCP_basic_string_wchar_npos);
2846 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@G@Z */
2847 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@G@Z */
2848 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_ch, 8)
2849 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_ch(
2850 basic_string_wchar *this, wchar_t ch)
2852 return MSVCP_basic_string_wchar_append_len_ch(this, 1, ch);
2855 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG0@Z */
2856 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG0@Z */
2857 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_beg_end, 12)
2858 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_beg_end(
2859 basic_string_wchar *this, const wchar_t *beg, const wchar_t *end)
2861 return MSVCP_basic_string_wchar_append_cstr_len(this, beg, end-beg);
2864 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG@Z */
2865 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG@Z */
2866 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@PBG@Z */
2867 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@PEBG@Z */
2868 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_cstr, 8)
2869 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_cstr(
2870 basic_string_wchar *this, const wchar_t *append)
2872 return MSVCP_basic_string_wchar_append_cstr_len(this, append,
2873 MSVCP_char_traits_wchar_length(append));
2875 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@0@Z */
2876 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@0@Z */
2877 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@0@Z */
2878 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@0@Z */
2879 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate(basic_string_wchar *ret,
2880 const basic_string_wchar *left, const basic_string_wchar *right)
2882 TRACE("%p %p\n", left, right);
2884 basic_string_wchar_copy_ctor(ret, left);
2885 MSVCP_basic_string_wchar_append(ret, right);
2886 return ret;
2889 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@G@Z */
2890 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@G@Z */
2891 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@G@Z */
2892 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@G@Z */
2893 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate_bstr_ch(basic_string_wchar *ret,
2894 const basic_string_wchar *left, wchar_t right)
2896 TRACE("%p %c\n", left, right);
2898 basic_string_wchar_copy_ctor(ret, left);
2899 MSVCP_basic_string_wchar_append_ch(ret, right);
2900 return ret;
2903 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@PBG@Z */
2904 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@PEBG@Z */
2905 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@PBG@Z */
2906 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@PEBG@Z */
2907 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate_bstr_cstr(basic_string_wchar *ret,
2908 const basic_string_wchar *left, const wchar_t *right)
2910 TRACE("%p %s\n", left, debugstr_w(right));
2912 basic_string_wchar_copy_ctor(ret, left);
2913 MSVCP_basic_string_wchar_append_cstr(ret, right);
2914 return ret;
2917 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@GABV10@@Z */
2918 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@GAEBV10@@Z */
2919 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@GABV10@@Z */
2920 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@GAEBV10@@Z */
2921 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate_ch_bstr(basic_string_wchar *ret,
2922 wchar_t left, const basic_string_wchar *right)
2924 TRACE("%c %p\n", left, right);
2926 MSVCP_basic_string_wchar_ctor_cstr_len_alloc(ret, &left, 1, NULL);
2927 MSVCP_basic_string_wchar_append(ret, right);
2928 return ret;
2931 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBGABV10@@Z */
2932 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBGAEBV10@@Z */
2933 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBGABV10@@Z */
2934 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBGAEBV10@@Z */
2935 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate_cstr_bstr(basic_string_wchar *ret,
2936 const wchar_t *left, const basic_string_wchar *right)
2938 TRACE("%s %p\n", debugstr_w(left), right);
2940 MSVCP_basic_string_wchar_ctor_cstr_alloc(ret, left, NULL);
2941 MSVCP_basic_string_wchar_append(ret, right);
2942 return ret;
2945 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAGI@Z */
2946 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAG_K@Z */
2947 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_operator_at, 8)
2948 wchar_t* __thiscall MSVCP_basic_string_wchar_operator_at(
2949 basic_string_wchar *this, size_t pos)
2951 TRACE("%p %Iu\n", this, pos);
2953 if(!this->ptr || pos>this->size)
2954 return (wchar_t*)basic_string_wchar__Nullstr();
2956 basic_string_wchar__Freeze(this);
2957 return this->ptr+pos;
2960 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEABGI@Z */
2961 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAAEBG_K@Z */
2962 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_operator_at_const, 8)
2963 const wchar_t* __thiscall MSVCP_basic_string_wchar_operator_at_const(
2964 const basic_string_wchar *this, size_t pos)
2966 TRACE("%p %Iu\n", this, pos);
2968 if(!this->ptr)
2969 return basic_string_wchar__Nullstr();
2970 return this->ptr+pos;
2973 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAGI@Z */
2974 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAG_K@Z */
2975 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEABGI@Z */
2976 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAAEBG_K@Z */
2977 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_at, 8)
2978 wchar_t* __thiscall MSVCP_basic_string_wchar_at(
2979 basic_string_wchar *this, size_t pos)
2981 TRACE("%p %Iu\n", this, pos);
2983 if(this->size <= pos)
2984 _Xran();
2986 return this->ptr+pos;
2989 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIPBGI@Z */
2990 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0PEBG0@Z */
2991 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_cstr_len, 20)
2992 basic_string_wchar* __thiscall basic_string_wchar_replace_cstr_len(basic_string_wchar *this,
2993 size_t off, size_t len, const wchar_t *str, size_t str_len)
2995 size_t inside_pos = -1;
2996 wchar_t *ptr = this->ptr;
2998 TRACE("%p %Iu %Iu %p %Iu\n", this, off, len, str, str_len);
3000 if(this->size < off)
3001 _Xran();
3003 if(len > this->size-off)
3004 len = this->size-off;
3006 if(MSVCP_basic_string_wchar_npos-str_len <= this->size-len)
3007 _Xlen();
3009 if(basic_string_wchar_inside(this, str))
3010 inside_pos = str-ptr;
3012 if(this->size-len+str_len)
3013 basic_string_wchar__Grow(this, this->size-len+str_len, FALSE);
3014 ptr = this->ptr;
3016 if(inside_pos == -1) {
3017 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
3018 memcpy(ptr+off, str, str_len*sizeof(char));
3019 } else if(len >= str_len) {
3020 memmove(ptr+off, ptr+inside_pos, str_len*sizeof(char));
3021 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
3022 } else {
3023 size_t size;
3025 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
3027 if(inside_pos < off+len) {
3028 size = off+len-inside_pos;
3029 if(size > str_len)
3030 size = str_len;
3031 memmove(ptr+off, ptr+inside_pos, size*sizeof(char));
3032 } else {
3033 size = 0;
3036 if(str_len > size)
3037 memmove(ptr+off+size, ptr+off+str_len, (str_len-size)*sizeof(char));
3040 if(this->ptr)
3041 basic_string_wchar__Eos(this, this->size-len+str_len);
3042 return this;
3045 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIABV12@II@Z */
3046 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0AEBV12@00@Z */
3047 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_substr, 24)
3048 basic_string_wchar* __thiscall basic_string_wchar_replace_substr(basic_string_wchar *this, size_t off,
3049 size_t len, const basic_string_wchar *str, size_t str_off, size_t str_len)
3051 if(str->size < str_off)
3052 _Xran();
3054 if(str_len > str->size-str_off)
3055 str_len = str->size-str_off;
3057 return basic_string_wchar_replace_cstr_len(this, off, len,
3058 str->ptr+str_off, str_len);
3061 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIABV12@@Z */
3062 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0AEBV12@@Z */
3063 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace, 16)
3064 basic_string_wchar* __thiscall basic_string_wchar_replace(basic_string_wchar *this,
3065 size_t off, size_t len, const basic_string_wchar *str)
3067 return basic_string_wchar_replace_cstr_len(this, off, len,
3068 str->ptr, str->size);
3071 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIIG@Z */
3072 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K00G@Z */
3073 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_ch, 20)
3074 basic_string_wchar* __thiscall basic_string_wchar_replace_ch(basic_string_wchar *this,
3075 size_t off, size_t len, size_t count, wchar_t ch)
3077 wchar_t *ptr;
3079 TRACE("%p %Iu %Iu %Iu %c\n", this, off, len, count, ch);
3081 if(this->size < off)
3082 _Xran();
3084 if(len > this->size-off)
3085 len = this->size-off;
3087 if(MSVCP_basic_string_wchar_npos-count <= this->size-len)
3088 _Xlen();
3090 if(this->size-len+count)
3091 basic_string_wchar__Grow(this, this->size-len+count, FALSE);
3092 ptr = this->ptr;
3094 memmove(ptr+off+count, ptr+off+len, (this->size-off-len)*sizeof(char));
3095 MSVCP_char_traits_wchar_assignn(ptr+off, count, ch);
3096 basic_string_wchar__Eos(this, this->size-len+count);
3098 return this;
3101 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIPBG@Z */
3102 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0PEBG@Z */
3103 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_cstr, 16)
3104 basic_string_wchar* __thiscall basic_string_wchar_replace_cstr(basic_string_wchar *this,
3105 size_t off, size_t len, const wchar_t *str)
3107 return basic_string_wchar_replace_cstr_len(this, off, len, str,
3108 MSVCP_char_traits_wchar_length(str));
3111 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IABV12@@Z */
3112 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KAEBV12@@Z */
3113 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert, 12)
3114 basic_string_wchar* __thiscall basic_string_wchar_insert(basic_string_wchar *this,
3115 size_t off, const basic_string_wchar *str)
3117 return basic_string_wchar_replace(this, off, 0, str);
3120 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IABV12@II@Z */
3121 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KAEBV12@00@Z */
3122 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_substr, 20)
3123 basic_string_wchar* __thiscall basic_string_wchar_insert_substr(
3124 basic_string_wchar *this, size_t off, const basic_string_wchar *str,
3125 size_t str_off, size_t str_count)
3127 return basic_string_wchar_replace_substr(this, off, 0, str, str_off, str_count);
3130 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IPBG@Z */
3131 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KPEBG@Z */
3132 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_cstr, 12)
3133 basic_string_wchar* __thiscall basic_string_wchar_insert_cstr(
3134 basic_string_wchar *this, size_t off, const wchar_t *str)
3136 return basic_string_wchar_replace_cstr(this, off, 0, str);
3139 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IPBGI@Z */
3140 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KPEBG0@Z */
3141 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_cstr_len, 16)
3142 basic_string_wchar* __thiscall basic_string_wchar_insert_cstr_len(basic_string_wchar *this,
3143 size_t off, const wchar_t *str, size_t str_len)
3145 return basic_string_wchar_replace_cstr_len(this, off, 0, str, str_len);
3148 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIG@Z */
3149 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0G@Z */
3150 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_chn, 16)
3151 basic_string_wchar* __thiscall basic_string_wchar_insert_chn(basic_string_wchar *this,
3152 size_t off, size_t count, wchar_t ch)
3154 return basic_string_wchar_replace_ch(this, off, 0, count, ch);
3157 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXIG@Z */
3158 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_KG@Z */
3159 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_resize_ch, 12)
3160 void __thiscall MSVCP_basic_string_wchar_resize_ch(
3161 basic_string_wchar *this, size_t size, wchar_t ch)
3163 TRACE("%p %Iu %c\n", this, size, ch);
3165 if(size <= this->size)
3166 MSVCP_basic_string_wchar_erase(this, size, this->size);
3167 else
3168 MSVCP_basic_string_wchar_append_len_ch(this, size-this->size, ch);
3171 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXI@Z */
3172 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_K@Z */
3173 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_resize, 8)
3174 void __thiscall MSVCP_basic_string_wchar_resize(
3175 basic_string_wchar *this, size_t size)
3177 MSVCP_basic_string_wchar_resize_ch(this, size, '\0');
3180 /* ?c_str@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3181 /* ?c_str@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3182 /* ?data@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3183 /* ?data@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3184 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_c_str, 4)
3185 const wchar_t* __thiscall MSVCP_basic_string_wchar_c_str(const basic_string_wchar *this)
3187 TRACE("%p\n", this);
3188 return this->ptr ? this->ptr : basic_string_wchar__Nullstr();
3191 /* ?size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3192 /* ?size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3193 /* ?length@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3194 /* ?length@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3195 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_length, 4)
3196 size_t __thiscall MSVCP_basic_string_wchar_length(const basic_string_wchar *this)
3198 TRACE("%p\n", this);
3199 return this->size;
3202 /* ?max_size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3203 /* ?max_size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3204 DEFINE_THISCALL_WRAPPER(basic_string_wchar_max_size, 4)
3205 size_t __thiscall basic_string_wchar_max_size(const basic_string_wchar *this)
3207 TRACE("%p\n", this);
3208 return MSVCP_allocator_wchar_max_size(NULL)-1;
3211 /* ?capacity@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3212 /* ?capacity@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3213 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_capacity, 4)
3214 size_t __thiscall MSVCP_basic_string_wchar_capacity(basic_string_wchar *this)
3216 TRACE("%p\n", this);
3217 return this->res;
3220 /* ?reserve@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXI@Z */
3221 /* ?reserve@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_K@Z */
3222 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_reserve, 8)
3223 void __thiscall MSVCP_basic_string_wchar_reserve(basic_string_wchar *this, size_t size)
3225 size_t len;
3227 TRACE("%p %Iu\n", this, size);
3229 len = this->size;
3230 if(len > size)
3231 return;
3233 if(basic_string_wchar__Grow(this, size, FALSE))
3234 basic_string_wchar__Eos(this, len);
3237 /* ?empty@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE_NXZ */
3238 /* ?empty@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_NXZ */
3239 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_empty, 4)
3240 bool __thiscall MSVCP_basic_string_wchar_empty(basic_string_wchar *this)
3242 TRACE("%p\n", this);
3243 return this->size == 0;
3246 /* ?swap@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXAAV12@@Z */
3247 /* ?swap@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXAEAV12@@Z */
3248 DEFINE_THISCALL_WRAPPER(basic_string_wchar_swap, 8)
3249 void __thiscall basic_string_wchar_swap(basic_string_wchar *this, basic_string_wchar *str)
3251 basic_string_wchar tmp;
3252 TRACE("%p %p\n", this, str);
3254 tmp = *this;
3255 *this = *str;
3256 *str = tmp;
3259 /* ?substr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV12@II@Z */
3260 /* ?substr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV12@_K0@Z */
3261 DEFINE_THISCALL_WRAPPER(basic_string_wchar_substr, 16)
3262 basic_string_wchar* __thiscall basic_string_wchar_substr(basic_string_wchar *this,
3263 basic_string_wchar *ret, size_t off, size_t len)
3265 TRACE("%p %Iu %Iu\n", this, off, len);
3267 MSVCP_basic_string_wchar_ctor_substr_alloc(ret, this, off, len, NULL);
3268 return ret;
3271 /* ?copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPAGII@Z */
3272 /* ?copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEAG_K1@Z */
3273 DEFINE_THISCALL_WRAPPER(basic_string_wchar_copy, 16)
3274 size_t __thiscall basic_string_wchar_copy(const basic_string_wchar *this,
3275 wchar_t *dest, size_t count, size_t off)
3277 TRACE("%p %p %Iu %Iu\n", this, dest, count, off);
3279 if(off > this->size)
3280 _Xran();
3281 if(count > this->size-off)
3282 count = this->size-off;
3283 if(this->ptr)
3284 MSVCP_char_traits_wchar__Copy_s(dest, count, this->ptr+off, count);
3285 return count;
3288 /* ?get_allocator@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$allocator@G@2@XZ */
3289 /* ?get_allocator@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$allocator@G@2@XZ */
3290 DEFINE_THISCALL_WRAPPER(basic_string_wchar_get_allocator, 8)
3291 allocator* __thiscall basic_string_wchar_get_allocator(const basic_string_wchar *this, allocator *ret)
3293 TRACE("%p\n", this);
3294 return ret;
3297 /* Old iterator functions */
3299 /* ?_Pdif@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAIPBD0@Z */
3300 /* ?_Pdif@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CA_KPEBD0@Z */
3301 size_t __cdecl basic_string_char__Pdif(const char *i1, const char *i2)
3303 TRACE("(%p %p)\n", i1, i2);
3304 return !i1 ? 0 : i1-i2;
3307 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADPAD0@Z */
3308 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADPEAD0@Z */
3309 DEFINE_THISCALL_WRAPPER(basic_string_char_erase_iter, 12)
3310 char* __thiscall basic_string_char_erase_iter(basic_string_char *this, char *beg, char *end)
3312 size_t pos = basic_string_char__Pdif(beg, this->ptr);
3313 MSVCP_basic_string_char_erase(this, pos, basic_string_char__Pdif(end, beg));
3314 return basic_string_char__Psum(this->ptr, pos);
3317 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0PBD1@Z */
3318 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0PEBD1@Z */
3319 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_iter, 20)
3320 basic_string_char* __thiscall basic_string_char_replace_iter_iter(basic_string_char *this,
3321 char *beg1, char *end1, const char *beg2, const char *end2)
3323 return basic_string_char_replace_cstr_len(this, basic_string_char__Pdif(beg1, this->ptr),
3324 basic_string_char__Pdif(end1, beg1), beg2, basic_string_char__Pdif(end2, beg2));
3327 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0ABV12@@Z */
3328 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0AEBV12@@Z */
3329 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_bstr, 16)
3330 basic_string_char* __thiscall basic_string_char_replace_iter_bstr(basic_string_char *this,
3331 char *beg, char *end, const basic_string_char *str)
3333 return basic_string_char_replace(this, basic_string_char__Pdif(beg, this->ptr),
3334 basic_string_char__Pdif(end, beg), str);
3337 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0ID@Z */
3338 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0_KD@Z */
3339 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_chn, 20)
3340 basic_string_char* __thiscall basic_string_char_replace_iter_chn(basic_string_char *this,
3341 char *beg, char *end, size_t count, char ch)
3343 return basic_string_char_replace_ch(this, basic_string_char__Pdif(beg, this->ptr),
3344 basic_string_char__Pdif(end, beg), count, ch);
3347 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0PBD@Z */
3348 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0PEBD@Z */
3349 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_cstr, 16)
3350 basic_string_char* __thiscall basic_string_char_replace_iter_cstr(basic_string_char *this,
3351 char *beg, char *end, const char *str)
3353 return basic_string_char_replace_cstr(this, basic_string_char__Pdif(beg, this->ptr),
3354 basic_string_char__Pdif(end, beg), str);
3357 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0PBDI@Z */
3358 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0PEBD_K@Z */
3359 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_cstr_len, 20)
3360 basic_string_char* __thiscall basic_string_char_replace_iter_cstr_len(basic_string_char *this,
3361 char *beg, char *end, const char *str, size_t len)
3363 return basic_string_char_replace_cstr_len(this, basic_string_char__Pdif(beg, this->ptr),
3364 basic_string_char__Pdif(end, beg), str, len);
3367 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXPADID@Z */
3368 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXPEAD_KD@Z */
3369 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_chn, 16)
3370 void __thiscall basic_string_char_insert_iter_chn(basic_string_char *this,
3371 char *pos, size_t n, char ch)
3373 basic_string_char_insert_chn(this, basic_string_char__Pdif(pos, this->ptr), n, ch);
3376 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADPADD@Z */
3377 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADPEADD@Z */
3378 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_ch, 12)
3379 char* __thiscall basic_string_char_insert_iter_ch(basic_string_char *this, char *pos, char ch)
3381 size_t off = basic_string_char__Pdif(pos, this->ptr);
3382 basic_string_char_insert_chn(this, off, 1, ch);
3383 return basic_string_char__Psum(this->ptr, off);
3386 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADXZ */
3387 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADXZ */
3388 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
3389 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
3390 DEFINE_THISCALL_WRAPPER(basic_string_char_begin, 4)
3391 char* __thiscall basic_string_char_begin(basic_string_char *this)
3393 TRACE("(%p)\n", this);
3394 basic_string_char__Freeze(this);
3395 return this->ptr;
3398 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADXZ */
3399 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADXZ */
3400 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
3401 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
3402 DEFINE_THISCALL_WRAPPER(basic_string_char_end, 4)
3403 char* __thiscall basic_string_char_end(basic_string_char *this)
3405 TRACE("(%p)\n", this);
3406 basic_string_char__Freeze(this);
3407 return this->ptr+this->size;
3410 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$reverse_iterator@PADDAADPADH@2@XZ */
3411 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$reverse_iterator@PEADDAEADPEAD_J@2@XZ */
3412 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$reverse_iterator@PBDDABDPBDH@2@XZ */
3413 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$reverse_iterator@PEBDDAEBDPEBD_J@2@XZ */
3414 DEFINE_THISCALL_WRAPPER(basic_string_char_rbegin, 8)
3415 String_reverse_iterator_char* __thiscall basic_string_char_rbegin(
3416 basic_string_char *this, String_reverse_iterator_char *ret)
3418 TRACE("(%p %p)\n", this, ret);
3419 ret->ptr = basic_string_char_end(this);
3420 return ret;
3423 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$reverse_iterator@PADDAADPADH@2@XZ */
3424 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$reverse_iterator@PEADDAEADPEAD_J@2@XZ */
3425 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$reverse_iterator@PBDDABDPBDH@2@XZ */
3426 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$reverse_iterator@PEBDDAEBDPEBD_J@2@XZ */
3427 DEFINE_THISCALL_WRAPPER(basic_string_char_rend, 8)
3428 String_reverse_iterator_char* __thiscall basic_string_char_rend(
3429 basic_string_char *this, String_reverse_iterator_char *ret)
3431 TRACE("(%p %p)\n", this, ret);
3432 ret->ptr = basic_string_char_begin(this);
3433 return ret;
3436 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD0ABV?$allocator@D@1@@Z */
3437 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD0AEBV?$allocator@D@1@@Z */
3438 DEFINE_THISCALL_WRAPPER(basic_string_char_ctor_iter, 16)
3439 basic_string_char* __thiscall basic_string_char_ctor_iter(basic_string_char *this,
3440 const char *first, const char *last, allocator *alloc)
3442 TRACE("(%p %p %p %p)\n", this, first, last, alloc);
3444 basic_string_char__Tidy(this, FALSE);
3445 MSVCP_basic_string_char_assign_cstr_len(this, first, basic_string_char__Pdif(last, first));
3446 return this;
3449 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXPADPBD1@Z */
3450 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXPEADPEBD1@Z */
3451 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter, 16)
3452 void __thiscall basic_string_char_insert_iter(basic_string_char *this,
3453 char *pos, const char *beg, const char *end)
3455 basic_string_char_insert_cstr_len(this, basic_string_char__Pdif(pos, this->ptr),
3456 beg, basic_string_char__Pdif(end, beg));
3459 /* ?_Pdif@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAIPBG0@Z */
3460 /* ?_Pdif@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CA_KPEBG0@Z */
3461 size_t __cdecl basic_string_wchar__Pdif(const wchar_t *i1, const wchar_t *i2)
3463 TRACE("(%p %p)\n", i1, i2);
3464 return !i1 ? 0 : i1-i2;
3467 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGPAG0@Z */
3468 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGPEAG0@Z */
3469 DEFINE_THISCALL_WRAPPER(basic_string_wchar_erase_iter, 12)
3470 wchar_t* __thiscall basic_string_wchar_erase_iter(basic_string_wchar *this, wchar_t *beg, wchar_t *end)
3472 size_t pos = basic_string_wchar__Pdif(beg, this->ptr);
3473 MSVCP_basic_string_wchar_erase(this, pos, basic_string_wchar__Pdif(end, beg));
3474 return basic_string_wchar__Psum(this->ptr, pos);
3477 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBG0ABV?$allocator@G@1@@Z */
3478 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG0AEBV?$allocator@G@1@@Z */
3479 DEFINE_THISCALL_WRAPPER(basic_string_wchar_ctor_iter, 16)
3480 basic_string_wchar* __thiscall basic_string_wchar_ctor_iter(basic_string_wchar *this,
3481 const wchar_t *first, const wchar_t *last, allocator *alloc)
3483 TRACE("(%p %p %p %p)\n", this, first, last, alloc);
3485 basic_string_wchar__Tidy(this, FALSE);
3486 MSVCP_basic_string_wchar_assign_cstr_len(this, first, basic_string_wchar__Pdif(last, first));
3487 return this;
3490 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0PBG1@Z */
3491 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0PEBG1@Z */
3492 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_iter, 20)
3493 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_iter(basic_string_wchar *this,
3494 wchar_t *beg1, wchar_t *end1, const wchar_t *beg2, const wchar_t *end2)
3496 return basic_string_wchar_replace_cstr_len(this, basic_string_wchar__Pdif(beg1, this->ptr),
3497 basic_string_wchar__Pdif(end1, beg1), beg2, basic_string_wchar__Pdif(end2, beg2));
3500 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0ABV12@@Z */
3501 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0AEBV12@@Z */
3502 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_bstr, 16)
3503 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_bstr(basic_string_wchar *this,
3504 wchar_t *beg, wchar_t *end, const basic_string_wchar *str)
3506 return basic_string_wchar_replace(this, basic_string_wchar__Pdif(beg, this->ptr),
3507 basic_string_wchar__Pdif(end, beg), str);
3510 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0IG@Z */
3511 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0_KG@Z */
3512 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_chn, 20)
3513 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_chn(basic_string_wchar *this,
3514 wchar_t *beg, wchar_t *end, size_t count, wchar_t ch)
3516 return basic_string_wchar_replace_ch(this, basic_string_wchar__Pdif(beg, this->ptr),
3517 basic_string_wchar__Pdif(end, beg), count, ch);
3520 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0PBG@Z */
3521 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0PEBG@Z */
3522 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_cstr, 16)
3523 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_cstr(basic_string_wchar *this,
3524 wchar_t *beg, wchar_t *end, const wchar_t *str)
3526 return basic_string_wchar_replace_cstr(this, basic_string_wchar__Pdif(beg, this->ptr),
3527 basic_string_wchar__Pdif(end, beg), str);
3530 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0PBGI@Z */
3531 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0PEBG_K@Z */
3532 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_cstr_len, 20)
3533 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_cstr_len(basic_string_wchar *this,
3534 wchar_t *beg, wchar_t *end, const wchar_t *str, size_t len)
3536 return basic_string_wchar_replace_cstr_len(this, basic_string_wchar__Pdif(beg, this->ptr),
3537 basic_string_wchar__Pdif(end, beg), str, len);
3540 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXPAGIG@Z */
3541 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXPEAG_KG@Z */
3542 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_chn, 16)
3543 void __thiscall basic_string_wchar_insert_iter_chn(basic_string_wchar *this,
3544 wchar_t *pos, size_t n, wchar_t ch)
3546 basic_string_wchar_insert_chn(this, basic_string_wchar__Pdif(pos, this->ptr), n, ch);
3549 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGPAGG@Z */
3550 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGPEAGG@Z */
3551 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_ch, 12)
3552 wchar_t* __thiscall basic_string_wchar_insert_iter_ch(basic_string_wchar *this, wchar_t *pos, wchar_t ch)
3554 size_t off = basic_string_wchar__Pdif(pos, this->ptr);
3555 basic_string_wchar_insert_chn(this, off, 1, ch);
3556 return basic_string_wchar__Psum(this->ptr, off);
3559 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGXZ */
3560 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGXZ */
3561 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3562 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3563 DEFINE_THISCALL_WRAPPER(basic_string_wchar_begin, 4)
3564 wchar_t* __thiscall basic_string_wchar_begin(basic_string_wchar *this)
3566 TRACE("(%p)\n", this);
3567 basic_string_wchar__Freeze(this);
3568 return this->ptr;
3571 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGXZ */
3572 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGXZ */
3573 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3574 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3575 DEFINE_THISCALL_WRAPPER(basic_string_wchar_end, 4)
3576 wchar_t* __thiscall basic_string_wchar_end(basic_string_wchar *this)
3578 TRACE("(%p)\n", this);
3579 basic_string_wchar__Freeze(this);
3580 return this->ptr+this->size;
3583 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$reverse_iterator@PAGGAAGPAGH@2@XZ */
3584 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA?AV?$reverse_iterator@PEAGGAEAGPEAG_J@2@XZ */
3585 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$reverse_iterator@PBGGABGPBGH@2@XZ */
3586 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$reverse_iterator@PEBGGAEBGPEBG_J@2@XZ */
3587 DEFINE_THISCALL_WRAPPER(basic_string_wchar_rbegin, 8)
3588 String_reverse_iterator_wchar* __thiscall basic_string_wchar_rbegin(
3589 basic_string_wchar *this, String_reverse_iterator_wchar *ret)
3591 TRACE("(%p %p)\n", this, ret);
3592 ret->ptr = basic_string_wchar_end(this);
3593 return ret;
3596 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$reverse_iterator@PAGGAAGPAGH@2@XZ */
3597 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA?AV?$reverse_iterator@PEAGGAEAGPEAG_J@2@XZ */
3598 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$reverse_iterator@PBGGABGPBGH@2@XZ */
3599 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$reverse_iterator@PEBGGAEBGPEBG_J@2@XZ */
3600 DEFINE_THISCALL_WRAPPER(basic_string_wchar_rend, 8)
3601 String_reverse_iterator_wchar* __thiscall basic_string_wchar_rend(
3602 basic_string_wchar *this, String_reverse_iterator_wchar *ret)
3604 TRACE("(%p %p)\n", this, ret);
3605 ret->ptr = basic_string_wchar_begin(this);
3606 return ret;
3609 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXPAGPBG1@Z */
3610 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXPEAGPEBG1@Z */
3611 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter, 16)
3612 void __thiscall basic_string_wchar_insert_iter(basic_string_wchar *this,
3613 wchar_t *pos, const wchar_t *beg, const wchar_t *end)
3615 basic_string_wchar_insert_cstr_len(this, basic_string_wchar__Pdif(pos, this->ptr),
3616 beg, basic_string_wchar__Pdif(end, beg));