imm32/tests: Test ImmTranslateMessage / ImeToAsciiEx calls.
[wine.git] / dlls / msvcp60 / string.c
blob45b7a57f9611e73d9531ba8dcaf9f2f1246d39ee
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 255
32 /* _String_iterator<char> and _String_const_iterator<char> class */
33 typedef struct {
34 char *ptr;
35 } String_reverse_iterator_char;
37 typedef struct {
38 wchar_t *ptr;
39 } String_reverse_iterator_wchar;
41 /* allocator class */
42 typedef struct {
43 char empty_struct;
44 } allocator;
46 /* ?_Xran@std@@YAXXZ */
47 void __cdecl _Xran(void)
49 TRACE("\n");
50 _Xout_of_range("invalid string position");
53 /* ?_Xlen@std@@YAXXZ */
54 void __cdecl _Xlen(void)
56 TRACE("\n");
57 _Xlength_error("string too long");
60 /* ?compare@?$char_traits@D@std@@SAHPBD0I@Z */
61 /* ?compare@?$char_traits@D@std@@SAHPEBD0_K@Z */
62 int CDECL MSVCP_char_traits_char_compare(
63 const char *s1, const char *s2, size_t count)
65 int ret = memcmp(s1, s2, count);
66 return (ret>0 ? 1 : (ret<0 ? -1 : 0));
69 /* ?length@?$char_traits@D@std@@SAIPBD@Z */
70 /* ?length@?$char_traits@D@std@@SA_KPEBD@Z */
71 size_t CDECL MSVCP_char_traits_char_length(const char *str)
73 return strlen(str);
76 /* ?_Copy_s@?$char_traits@D@std@@SAPADPADIPBDI@Z */
77 /* ?_Copy_s@?$char_traits@D@std@@SAPEADPEAD_KPEBD1@Z */
78 char* CDECL MSVCP_char_traits_char__Copy_s(char *dest,
79 size_t size, const char *src, size_t count)
81 if(!dest || !src || size<count) {
82 if(dest && size)
83 dest[0] = '\0';
84 _invalid_parameter(NULL, NULL, NULL, 0, 0);
85 return dest;
88 return memcpy(dest, src, count);
91 /* ?copy@?$char_traits@D@std@@SAPADPADPBDI@Z */
92 /* ?copy@?$char_traits@D@std@@SAPEADPEADPEBD_K@Z */
93 char* CDECL MSVCP_char_traits_char_copy(
94 char *dest, const char *src, size_t count)
96 return MSVCP_char_traits_char__Copy_s(dest, count, src, count);
99 /* ?find@?$char_traits@D@std@@SAPBDPBDIABD@Z */
100 /* ?find@?$char_traits@D@std@@SAPEBDPEBD_KAEBD@Z */
101 const char * CDECL MSVCP_char_traits_char_find(
102 const char *str, size_t range, const char *c)
104 return memchr(str, *c, range);
107 /* ?_Move_s@?$char_traits@D@std@@SAPADPADIPBDI@Z */
108 /* ?_Move_s@?$char_traits@D@std@@SAPEADPEAD_KPEBD1@Z */
109 char* CDECL MSVCP_char_traits_char__Move_s(char *dest,
110 size_t size, const char *src, size_t count)
112 if(!dest || !src || size<count) {
113 if(dest && size)
114 dest[0] = '\0';
115 _invalid_parameter(NULL, NULL, NULL, 0, 0);
116 return dest;
119 return memmove(dest, src, count);
122 /* ?move@?$char_traits@D@std@@SAPADPADPBDI@Z */
123 /* ?move@?$char_traits@D@std@@SAPEADPEADPEBD_K@Z */
124 char* CDECL MSVCP_char_traits_char_move(
125 char *dest, const char *src, size_t count)
127 return MSVCP_char_traits_char__Move_s(dest, count, src, count);
130 /* ?assign@?$char_traits@D@std@@SAPADPADID@Z */
131 /* ?assign@?$char_traits@D@std@@SAPEADPEAD_KD@Z */
132 char* CDECL MSVCP_char_traits_char_assignn(char *str, size_t num, char c)
134 return memset(str, c, num);
137 /* ?compare@?$char_traits@_W@std@@SAHPB_W0I@Z */
138 /* ?compare@?$char_traits@_W@std@@SAHPEB_W0_K@Z */
139 int CDECL MSVCP_char_traits_wchar_compare(const wchar_t *s1,
140 const wchar_t *s2, size_t count)
142 size_t i;
143 int ret = 0;
145 for (i = 0; i < count && !ret; i++) ret = s1[i] - s2[i];
146 return (ret>0 ? 1 : (ret<0 ? -1 : 0));
149 /* ?length@?$char_traits@_W@std@@SAIPB_W@Z */
150 /* ?length@?$char_traits@_W@std@@SA_KPEB_W@Z */
151 size_t CDECL MSVCP_char_traits_wchar_length(const wchar_t *str)
153 return wcslen((WCHAR*)str);
156 /* ?_Copy_s@?$char_traits@_W@std@@SAPA_WPA_WIPB_WI@Z */
157 /* ?_Copy_s@?$char_traits@_W@std@@SAPEA_WPEA_W_KPEB_W1@Z */
158 wchar_t* CDECL MSVCP_char_traits_wchar__Copy_s(wchar_t *dest,
159 size_t size, const wchar_t *src, size_t count)
161 if(!dest || !src || size<count) {
162 if(dest && size)
163 dest[0] = '\0';
164 _invalid_parameter(NULL, NULL, NULL, 0, 0);
165 return dest;
168 return memcpy(dest, src, count * sizeof(wchar_t));
171 /* ?copy@?$char_traits@_W@std@@SAPA_WPA_WPB_WI@Z */
172 /* ?copy@?$char_traits@_W@std@@SAPEA_WPEA_WPEB_W_K@Z */
173 wchar_t* CDECL MSVCP_char_traits_wchar_copy(wchar_t *dest,
174 const wchar_t *src, size_t count)
176 return MSVCP_char_traits_wchar__Copy_s(dest, count, src, count);
179 /* ?find@?$char_traits@_W@std@@SAPB_WPB_WIAB_W@Z */
180 /* ?find@?$char_traits@_W@std@@SAPEB_WPEB_W_KAEB_W@Z */
181 const wchar_t* CDECL MSVCP_char_traits_wchar_find(
182 const wchar_t *str, size_t range, const wchar_t *c)
184 size_t i=0;
186 for(i=0; i<range; i++)
187 if(str[i] == *c)
188 return str+i;
190 return NULL;
193 /* ?_Move_s@?$char_traits@_W@std@@SAPA_WPA_WIPB_WI@Z */
194 /* ?_Move_s@?$char_traits@_W@std@@SAPEA_WPEA_W_KPEB_W1@Z */
195 wchar_t* CDECL MSVCP_char_traits_wchar__Move_s(wchar_t *dest,
196 size_t size, const wchar_t *src, size_t count)
198 if(!dest || !src || size<count) {
199 if(dest && size)
200 dest[0] = '\0';
201 _invalid_parameter(NULL, NULL, NULL, 0, 0);
202 return dest;
205 return memmove(dest, src, count * sizeof(WCHAR));
208 /* ?move@?$char_traits@_W@std@@SAPA_WPA_WPB_WI@Z */
209 /* ?move@?$char_traits@_W@std@@SAPEA_WPEA_WPEB_W_K@Z */
210 wchar_t* CDECL MSVCP_char_traits_wchar_move(wchar_t *dest,
211 const wchar_t *src, size_t count)
213 return MSVCP_char_traits_wchar__Move_s(dest, count, src, count);
216 /* ?assign@?$char_traits@_W@std@@SAPA_WPA_WI_W@Z */
217 /* ?assign@?$char_traits@_W@std@@SAPEA_WPEA_W_K_W@Z */
218 wchar_t* CDECL MSVCP_char_traits_wchar_assignn(wchar_t *str,
219 size_t num, wchar_t c)
221 size_t i;
223 for(i=0; i<num; i++)
224 str[i] = c;
226 return str;
229 static bool basic_string_char_inside(
230 basic_string_char *this, const char *ptr)
232 return ptr>=this->ptr && ptr<this->ptr+this->size;
235 /* ?npos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@2IB */
236 /* ?npos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@2_KB */
237 const size_t MSVCP_basic_string_char_npos = -1;
239 /* ?_C@?1??_Nullstr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPBDXZ@4DB */
240 /* ?_C@?1??_Nullstr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPEBDXZ@4DB */
241 const char basic_string_char_nullbyte = '\0';
243 /* ?_Nullstr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPBDXZ */
244 /* ?_Nullstr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPEBDXZ */
245 const char* __cdecl basic_string_char__Nullstr(void)
247 return &basic_string_char_nullbyte;
250 /* ?_Refcnt@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEAAEPBD@Z */
251 /* ?_Refcnt@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAAEAEPEBD@Z */
252 DEFINE_THISCALL_WRAPPER(basic_string_char__Refcnt, 8)
253 unsigned char* __thiscall basic_string_char__Refcnt(basic_string_char *this, const char *ptr)
255 TRACE("(%p %p)\n", this, ptr);
256 return (unsigned char*)ptr-1;
259 /* ?_Eos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXI@Z */
260 /* ?_Eos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAX_K@Z */
261 DEFINE_THISCALL_WRAPPER(basic_string_char__Eos, 8)
262 void __thiscall basic_string_char__Eos(basic_string_char *this, size_t len)
264 this->size = len;
265 this->ptr[len] = 0;
268 /* ?clear@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */
269 /* ?clear@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */
270 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_clear, 4)
271 void __thiscall MSVCP_basic_string_char_clear(basic_string_char *this)
273 if(this->ptr)
274 basic_string_char__Eos(this, 0);
277 /* ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEX_N@Z */
278 /* ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAX_N@Z */
279 DEFINE_THISCALL_WRAPPER(basic_string_char__Tidy, 8)
280 void __thiscall basic_string_char__Tidy(basic_string_char *this, bool built)
282 TRACE("(%p %d)\n", this, built);
284 if(!built || !this->ptr);
285 else if(!this->ptr[-1] || (unsigned char)this->ptr[-1]==FROZEN)
286 MSVCP_allocator_char_deallocate(NULL, this->ptr-1, this->res+2);
287 else
288 this->ptr[-1]--;
290 memset(this, 0, sizeof(*this));
293 /* ?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAE_NI_N@Z */
294 /* ?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAA_N_K_N@Z */
295 DEFINE_THISCALL_WRAPPER(basic_string_char__Grow, 12)
296 bool __thiscall basic_string_char__Grow(basic_string_char *this, size_t new_size, bool trim)
298 if(!new_size) {
299 if(trim)
300 basic_string_char__Tidy(this, TRUE);
301 else if(this->ptr)
302 basic_string_char__Eos(this, 0);
303 } else if(this->res<new_size || trim ||
304 (this->ptr && this->ptr[-1] && (unsigned char)this->ptr[-1]!=FROZEN)) {
305 size_t new_res = new_size, len = this->size;
306 char *ptr;
308 if(!trim && this->ptr && !this->ptr[-1]) {
309 new_res |= 0xf;
310 if(new_res/3 < this->res/2)
311 new_res = this->res + this->res/2;
314 ptr = MSVCP_allocator_char_allocate(this->allocator, new_res+2);
315 if(!ptr) {
316 new_res = new_size;
317 ptr = MSVCP_allocator_char_allocate(this->allocator, new_size+2);
319 if(!ptr) {
320 ERR("Out of memory\n");
321 return FALSE;
324 if(len > new_res)
325 len = new_res;
327 *ptr = 0;
328 if(this->ptr)
329 MSVCP_char_traits_char__Copy_s(ptr+1, new_size, this->ptr, len);
330 basic_string_char__Tidy(this, TRUE);
331 this->ptr = ptr+1;
332 this->res = new_res;
333 basic_string_char__Eos(this, len);
336 return new_size>0;
339 /* ?_Split@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXXZ */
340 /* ?_Split@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAXXZ */
341 DEFINE_THISCALL_WRAPPER(basic_string_char__Split, 4)
342 void __thiscall basic_string_char__Split(basic_string_char *this)
344 size_t len;
345 char *ptr;
347 TRACE("(%p)\n", this);
349 if(!this->ptr || !this->ptr[-1] || (unsigned char)this->ptr[-1]==FROZEN)
350 return;
352 ptr = this->ptr;
353 len = this->size;
354 basic_string_char__Tidy(this, TRUE);
355 if(basic_string_char__Grow(this, len, FALSE)) {
356 if(ptr)
357 MSVCP_char_traits_char__Copy_s(this->ptr, this->res, ptr, len);
358 basic_string_char__Eos(this, len);
362 /* ?_Freeze@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXXZ */
363 /* ?_Freeze@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAXXZ */
364 DEFINE_THISCALL_WRAPPER(basic_string_char__Freeze, 4)
365 void __thiscall basic_string_char__Freeze(basic_string_char *this)
367 TRACE("(%p)\n", this);
368 basic_string_char__Split(this);
369 if(this->ptr)
370 this->ptr[-1] = FROZEN;
373 /* ?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXI@Z */
374 /* ?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAX_K@Z */
375 DEFINE_THISCALL_WRAPPER(basic_string_char__Copy, 8)
376 void __thiscall basic_string_char__Copy(basic_string_char *this, size_t copy_len)
378 TRACE("%p %Iu\n", this, copy_len);
380 if(!basic_string_char__Grow(this, copy_len, TRUE))
381 return;
384 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPADPADI@Z */
385 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPEADPEAD_K@Z */
386 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPBDPBDI@Z */
387 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPEBDPEBD_K@Z */
388 char* __cdecl basic_string_char__Psum(char *iter, size_t add)
390 TRACE("(%p %Iu)\n", iter, add);
391 return iter ? iter+add : iter;
394 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@II@Z */
395 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0@Z */
396 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_erase, 12)
397 basic_string_char* __thiscall MSVCP_basic_string_char_erase(
398 basic_string_char *this, size_t pos, size_t len)
400 TRACE("%p %Iu %Iu\n", this, pos, len);
402 if(pos > this->size)
403 _Xran();
405 if(len > this->size-pos)
406 len = this->size-pos;
408 if(len) {
409 basic_string_char__Split(this);
410 MSVCP_char_traits_char__Move_s(this->ptr+pos, this->res-pos,
411 this->ptr+pos+len, this->size-pos-len);
412 basic_string_char__Eos(this, this->size-len);
415 return this;
418 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADPAD@Z */
419 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADPEAD@Z */
420 DEFINE_THISCALL_WRAPPER(basic_string_char_erase_beg, 8)
421 char* __thiscall basic_string_char_erase_beg(basic_string_char *this, char *beg)
423 size_t pos = beg-this->ptr;
424 MSVCP_basic_string_char_erase(this, pos, 1);
425 return this->ptr+pos;
428 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z */
429 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
430 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_substr, 16)
431 basic_string_char* __thiscall MSVCP_basic_string_char_assign_substr(
432 basic_string_char *this, const basic_string_char *assign,
433 size_t pos, size_t len)
435 TRACE("%p %p %Iu %Iu\n", this, assign, pos, len);
437 if(assign->size < pos)
438 _Xran();
440 if(len > assign->size-pos)
441 len = assign->size-pos;
443 if(this == assign) {
444 MSVCP_basic_string_char_erase(this, pos+len, MSVCP_basic_string_char_npos);
445 MSVCP_basic_string_char_erase(this, 0, pos);
446 } else if(basic_string_char__Grow(this, len, FALSE)) {
447 if(assign->ptr)
448 MSVCP_char_traits_char__Copy_s(this->ptr, this->res, assign->ptr+pos, len);
449 basic_string_char__Eos(this, len);
452 return this;
455 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z */
456 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD_K@Z */
457 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_cstr_len, 12)
458 basic_string_char* __thiscall MSVCP_basic_string_char_assign_cstr_len(
459 basic_string_char *this, const char *str, size_t len)
461 TRACE("%p %s %Iu\n", this, debugstr_an(str, len), len);
463 if(basic_string_char_inside(this, str))
464 return MSVCP_basic_string_char_assign_substr(this, this, str-this->ptr, len);
465 else if(basic_string_char__Grow(this, len, FALSE)) {
466 MSVCP_char_traits_char__Copy_s(this->ptr, this->res, str, len);
467 basic_string_char__Eos(this, len);
470 return this;
473 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@@Z */
474 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@@Z */
475 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@ABV01@@Z */
476 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@AEBV01@@Z */
477 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign, 8)
478 basic_string_char* __thiscall MSVCP_basic_string_char_assign(
479 basic_string_char *this, const basic_string_char *assign)
481 return MSVCP_basic_string_char_assign_substr(this, assign,
482 0, MSVCP_basic_string_char_npos);
485 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z */
486 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD@Z */
487 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z */
488 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@PEBD@Z */
489 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_cstr, 8)
490 basic_string_char* __thiscall MSVCP_basic_string_char_assign_cstr(
491 basic_string_char *this, const char *str)
493 return MSVCP_basic_string_char_assign_cstr_len(this, str,
494 MSVCP_char_traits_char_length(str));
497 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@D@Z */
498 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@D@Z */
499 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_ch, 8)
500 basic_string_char* __thiscall MSVCP_basic_string_char_assign_ch(
501 basic_string_char *this, char ch)
503 return MSVCP_basic_string_char_assign_cstr_len(this, &ch, 1);
506 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ID@Z */
507 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KD@Z */
508 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assignn, 12)
509 basic_string_char* __thiscall MSVCP_basic_string_char_assignn(
510 basic_string_char *this, size_t count, char ch)
512 TRACE("%p %Iu %c\n", this, count, ch);
514 basic_string_char__Grow(this, count, FALSE);
515 MSVCP_char_traits_char_assignn(this->ptr, count, ch);
516 basic_string_char__Eos(this, count);
517 return this;
520 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD0@Z */
521 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD0@Z */
522 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_ptr_ptr, 12)
523 basic_string_char* __thiscall MSVCP_basic_string_char_assign_ptr_ptr(
524 basic_string_char *this, const char *first, const char *last)
526 return MSVCP_basic_string_char_assign_cstr_len(this, first, last-first);
529 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDIABV?$allocator@D@1@@Z */
530 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD_KAEBV?$allocator@D@1@@Z */
531 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr_len_alloc, 16)
532 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr_len_alloc(
533 basic_string_char *this, const char *str, size_t len, const void *alloc)
535 TRACE("%p %s %Iu\n", this, debugstr_an(str, len), len);
537 basic_string_char__Tidy(this, FALSE);
538 MSVCP_basic_string_char_assign_cstr_len(this, str, len);
539 return this;
542 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDI@Z */
543 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD_K@Z */
544 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr_len, 12)
545 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr_len(
546 basic_string_char *this, const char *str, size_t len)
548 return MSVCP_basic_string_char_ctor_cstr_len_alloc(this, str, len, NULL);
551 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@IIABV?$allocator@D@1@@Z */
552 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV01@_K1AEBV?$allocator@D@1@@Z */
553 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_substr_alloc, 20)
554 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_substr_alloc(
555 basic_string_char *this, const basic_string_char *assign,
556 size_t pos, size_t len, const void *alloc)
558 TRACE("%p %p %Iu %Iu\n", this, assign, pos, len);
560 basic_string_char__Tidy(this, FALSE);
561 MSVCP_basic_string_char_assign_substr(this, assign, pos, len);
562 return this;
565 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDABV?$allocator@D@1@@Z */
566 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBDAEBV?$allocator@D@1@@Z */
567 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr_alloc, 12)
568 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr_alloc(
569 basic_string_char *this, const char *str, const void *alloc)
571 TRACE("%p %s\n", this, debugstr_a(str));
573 basic_string_char__Tidy(this, FALSE);
574 MSVCP_basic_string_char_assign_cstr(this, str);
575 return this;
578 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z */
579 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD@Z */
580 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr, 8)
581 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr(
582 basic_string_char *this, const char *str)
584 return MSVCP_basic_string_char_ctor_cstr_alloc(this, str, NULL);
587 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@IDABV?$allocator@D@1@@Z */
588 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@_KDAEBV?$allocator@D@1@@Z */
589 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_ch_alloc, 16)
590 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_ch_alloc(basic_string_char *this,
591 size_t count, char ch, const void *alloc)
593 TRACE("%p %Iu %c\n", this, count, ch);
595 basic_string_char__Tidy(this, FALSE);
596 MSVCP_basic_string_char_assignn(this, count, ch);
597 return this;
600 /* ??_F?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */
601 /* ??_F?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */
602 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor, 4)
603 basic_string_char* __thiscall MSVCP_basic_string_char_ctor(basic_string_char *this)
605 TRACE("%p\n", this);
607 basic_string_char__Tidy(this, FALSE);
608 return this;
611 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV?$allocator@D@1@@Z */
612 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV?$allocator@D@1@@Z */
613 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_alloc, 8)
614 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_alloc(
615 basic_string_char *this, const void *alloc)
617 TRACE("%p %p\n", this, alloc);
619 basic_string_char__Tidy(this, FALSE);
620 return this;
623 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z */
624 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV01@@Z */
625 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_copy_ctor, 8)
626 basic_string_char* __thiscall MSVCP_basic_string_char_copy_ctor(
627 basic_string_char *this, const basic_string_char *copy)
629 TRACE("%p %p\n", this, copy);
631 basic_string_char__Tidy(this, FALSE);
632 MSVCP_basic_string_char_assign(this, copy);
633 return this;
636 /* ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ */
637 /* ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@XZ */
638 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_dtor, 4)
639 void __thiscall MSVCP_basic_string_char_dtor(basic_string_char *this)
641 TRACE("%p\n", this);
642 basic_string_char__Tidy(this, TRUE);
645 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIPBDI@Z */
646 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0PEBD0@Z */
647 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_cstr_len, 20)
648 int __thiscall MSVCP_basic_string_char_compare_substr_cstr_len(
649 const basic_string_char *this, size_t pos, size_t num,
650 const char *str, size_t count)
652 int ans;
654 TRACE("%p %Iu %Iu %s %Iu\n", this, pos, num, debugstr_an(str, count), count);
656 if(this->size < pos)
657 _Xran();
659 if(num > this->size-pos)
660 num = this->size-pos;
662 ans = MSVCP_char_traits_char_compare(this->ptr+pos,
663 str, num>count ? count : num);
664 if(ans)
665 return ans;
667 if(num > count)
668 ans = 1;
669 else if(num < count)
670 ans = -1;
671 return ans;
674 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHPBD@Z */
675 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAHPEBD@Z */
676 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_cstr, 8)
677 int __thiscall MSVCP_basic_string_char_compare_cstr(
678 const basic_string_char *this, const char *str)
680 return MSVCP_basic_string_char_compare_substr_cstr_len(this, 0, this->size,
681 str, MSVCP_char_traits_char_length(str));
684 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIABV12@II@Z */
685 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0AEBV12@00@Z */
686 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_substr, 24)
687 int __thiscall MSVCP_basic_string_char_compare_substr_substr(
688 const basic_string_char *this, size_t pos, size_t num,
689 const basic_string_char *compare, size_t off, size_t count)
691 TRACE("%p %Iu %Iu %p %Iu %Iu\n", this, pos, num, compare, off, count);
693 if(compare->size < off)
694 _Xran();
696 if(count > compare->size-off)
697 count = compare->size-off;
699 return MSVCP_basic_string_char_compare_substr_cstr_len(this, pos, num,
700 compare->ptr+off, count);
703 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIABV12@@Z */
704 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0AEBV12@@Z */
705 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr, 16)
706 int __thiscall MSVCP_basic_string_char_compare_substr(
707 const basic_string_char *this, size_t pos, size_t num,
708 const basic_string_char *compare)
710 return MSVCP_basic_string_char_compare_substr_cstr_len(this, pos, num,
711 compare->ptr, compare->size);
714 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHABV12@@Z */
715 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAHAEBV12@@Z */
716 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare, 8)
717 int __thiscall MSVCP_basic_string_char_compare(
718 const basic_string_char *this, const basic_string_char *compare)
720 return MSVCP_basic_string_char_compare_substr_cstr_len(this, 0, this->size,
721 compare->ptr, compare->size);
724 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIPBD@Z */
725 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0PEBD@Z */
726 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_cstr, 16)
727 int __thiscall MSVCP_basic_string_char_compare_substr_cstr(const basic_string_char *this,
728 size_t pos, size_t num, const char *str)
730 return MSVCP_basic_string_char_compare_substr_cstr_len(this, pos, num,
731 str, MSVCP_char_traits_char_length(str));
734 /* ??$?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 */
735 /* ??$?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 */
736 /* ??8std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
737 /* ??8std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
738 bool __cdecl MSVCP_basic_string_char_equal(
739 const basic_string_char *left, const basic_string_char *right)
741 return MSVCP_basic_string_char_compare(left, right) == 0;
744 /* ??$?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 */
745 /* ??$?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 */
746 /* ??8std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
747 /* ??8std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
748 bool __cdecl MSVCP_basic_string_char_equal_str_cstr(
749 const basic_string_char *left, const char *right)
751 return MSVCP_basic_string_char_compare_cstr(left, right) == 0;
754 /* ??$?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 */
755 /* ??$?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 */
756 /* ??8std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
757 /* ??8std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
758 bool __cdecl MSVCP_basic_string_char_equal_cstr_str(
759 const char *left, const basic_string_char *right)
761 return MSVCP_basic_string_char_compare_cstr(right, left) == 0;
764 /* ??$?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 */
765 /* ??$?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 */
766 /* ??9std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
767 /* ??9std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
768 bool __cdecl MSVCP_basic_string_char_not_equal(
769 const basic_string_char *left, const basic_string_char *right)
771 return MSVCP_basic_string_char_compare(left, right) != 0;
774 /* ??$?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 */
775 /* ??$?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 */
776 /* ??9std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
777 /* ??9std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
778 bool __cdecl MSVCP_basic_string_char_not_equal_str_cstr(
779 const basic_string_char *left, const char *right)
781 return MSVCP_basic_string_char_compare_cstr(left, right) != 0;
784 /* ??$?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 */
785 /* ??$?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 */
786 /* ??9std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
787 /* ??9std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
788 bool __cdecl MSVCP_basic_string_char_not_equal_cstr_str(
789 const char *left, const basic_string_char *right)
791 return MSVCP_basic_string_char_compare_cstr(right, left) != 0;
794 /* ??$?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 */
795 /* ??$?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 */
796 /* ??Mstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
797 /* ??Mstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
798 bool __cdecl MSVCP_basic_string_char_lower(
799 const basic_string_char *left, const basic_string_char *right)
801 return MSVCP_basic_string_char_compare(left, right) < 0;
804 /* ??$?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 */
805 /* ??$?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 */
806 /* ??Mstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
807 /* ??Mstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
808 bool __cdecl MSVCP_basic_string_char_lower_bstr_cstr(
809 const basic_string_char *left, const char *right)
811 return MSVCP_basic_string_char_compare_cstr(left, right) < 0;
814 /* ??$?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 */
815 /* ??$?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 */
816 /* ??Mstd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
817 /* ??Mstd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
818 bool __cdecl MSVCP_basic_string_char_lower_cstr_bstr(
819 const char *left, const basic_string_char *right)
821 return MSVCP_basic_string_char_compare_cstr(right, left) > 0;
824 /* ??$?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 */
825 /* ??$?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 */
826 /* ??Nstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
827 /* ??Nstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
828 bool __cdecl MSVCP_basic_string_char_leq(
829 const basic_string_char *left, const basic_string_char *right)
831 return MSVCP_basic_string_char_compare(left, right) <= 0;
834 /* ??$?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 */
835 /* ??$?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 */
836 /* ??Nstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
837 /* ??Nstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
838 bool __cdecl MSVCP_basic_string_char_leq_bstr_cstr(
839 const basic_string_char *left, const char *right)
841 return MSVCP_basic_string_char_compare_cstr(left, right) <= 0;
844 /* ??$?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 */
845 /* ??$?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 */
846 /* ??Nstd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
847 /* ??Nstd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
848 bool __cdecl MSVCP_basic_string_char_leq_cstr_bstr(
849 const char *left, const basic_string_char *right)
851 return MSVCP_basic_string_char_compare_cstr(right, left) >= 0;
854 /* ??$?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 */
855 /* ??$?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 */
856 /* ??Ostd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
857 /* ??Ostd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
858 bool __cdecl MSVCP_basic_string_char_greater(
859 const basic_string_char *left, const basic_string_char *right)
861 return MSVCP_basic_string_char_compare(left, right) > 0;
864 /* ??$?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 */
865 /* ??$?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 */
866 /* ??Ostd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
867 /* ??Ostd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
868 bool __cdecl MSVCP_basic_string_char_greater_bstr_cstr(
869 const basic_string_char *left, const char *right)
871 return MSVCP_basic_string_char_compare_cstr(left, right) > 0;
874 /* ??$?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 */
875 /* ??$?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 */
876 /* ??Ostd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
877 /* ??Ostd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
878 bool __cdecl MSVCP_basic_string_char_greater_cstr_bstr(
879 const char *left, const basic_string_char *right)
881 return MSVCP_basic_string_char_compare_cstr(right, left) < 0;
884 /* ??$?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 */
885 /* ??$?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 */
886 /* ??Pstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
887 /* ??Pstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
888 bool __cdecl MSVCP_basic_string_char_geq(
889 const basic_string_char *left, const basic_string_char *right)
891 return MSVCP_basic_string_char_compare(left, right) >= 0;
894 /* ??$?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 */
895 /* ??$?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 */
896 /* ??Pstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
897 /* ??Pstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
898 bool __cdecl MSVCP_basic_string_char_geq_bstr_cstr(
899 const basic_string_char *left, const char *right)
901 return MSVCP_basic_string_char_compare_cstr(left, right) >= 0;
904 /* ??$?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 */
905 /* ??$?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 */
906 /* ??Pstd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
907 /* ??Pstd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
908 bool __cdecl MSVCP_basic_string_char_geq_cstr_bstr(
909 const char *left, const basic_string_char *right)
911 return MSVCP_basic_string_char_compare_cstr(right, left) <= 0;
914 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
915 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
916 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_cstr_substr, 16)
917 size_t __thiscall MSVCP_basic_string_char_find_cstr_substr(
918 const basic_string_char *this, const char *find, size_t pos, size_t len)
920 const char *p, *end;
922 TRACE("%p %s %Iu %Iu\n", this, debugstr_an(find, len), pos, len);
924 if(len==0 && pos<=this->size)
925 return pos;
926 if(pos>=this->size || len>this->size)
927 return MSVCP_basic_string_char_npos;
929 end = this->ptr+this->size-len+1;
930 for(p=this->ptr+pos; p<end; p++) {
931 p = MSVCP_char_traits_char_find(p, end-p, find);
932 if(!p)
933 break;
935 if(!MSVCP_char_traits_char_compare(p, find, len))
936 return p-this->ptr;
939 return MSVCP_basic_string_char_npos;
942 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
943 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
944 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_off, 12)
945 size_t __thiscall MSVCP_basic_string_char_find_off(
946 const basic_string_char *this, const basic_string_char *find, size_t off)
948 return MSVCP_basic_string_char_find_cstr_substr(this, find->ptr, off, find->size);
951 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
952 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
953 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_ch, 12)
954 size_t __thiscall MSVCP_basic_string_char_find_ch(
955 const basic_string_char *this, char ch, size_t pos)
957 return MSVCP_basic_string_char_find_cstr_substr(this, &ch, pos, 1);
960 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
961 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
962 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_cstr_off, 12)
963 size_t __thiscall MSVCP_basic_string_char_find_cstr_off(
964 const basic_string_char *this, const char *find, size_t pos)
966 return MSVCP_basic_string_char_find_cstr_substr(this, find, pos,
967 MSVCP_char_traits_char_length(find));
970 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
971 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
972 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rfind_cstr_substr, 16)
973 size_t __thiscall MSVCP_basic_string_char_rfind_cstr_substr(
974 const basic_string_char *this, const char *find, size_t pos, size_t len)
976 const char *p, *end;
978 TRACE("%p %s %Iu %Iu\n", this, debugstr_an(find, len), pos, len);
980 if(len==0)
981 return pos<this->size ? pos : this->size;
983 if(len > this->size)
984 return MSVCP_basic_string_char_npos;
986 if(pos > this->size-len)
987 pos = this->size-len;
988 end = this->ptr;
989 for(p=end+pos; p>=end; p--) {
990 if(*p==*find && !MSVCP_char_traits_char_compare(p, find, len))
991 return p-this->ptr;
994 return MSVCP_basic_string_char_npos;
997 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
998 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
999 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rfind_off, 12)
1000 size_t __thiscall MSVCP_basic_string_char_rfind_off(
1001 const basic_string_char *this, const basic_string_char *find, size_t off)
1003 return MSVCP_basic_string_char_rfind_cstr_substr(this, find->ptr, off, find->size);
1006 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1007 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1008 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rfind_ch, 12)
1009 size_t __thiscall MSVCP_basic_string_char_rfind_ch(
1010 const basic_string_char *this, char ch, size_t pos)
1012 return MSVCP_basic_string_char_rfind_cstr_substr(this, &ch, pos, 1);
1015 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1016 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1017 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rfind_cstr_off, 12)
1018 size_t __thiscall MSVCP_basic_string_char_rfind_cstr_off(
1019 const basic_string_char *this, const char *find, size_t pos)
1021 return MSVCP_basic_string_char_rfind_cstr_substr(this, find, pos,
1022 MSVCP_char_traits_char_length(find));
1025 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1026 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1027 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of_cstr_substr, 16)
1028 size_t __thiscall MSVCP_basic_string_char_find_first_not_of_cstr_substr(
1029 const basic_string_char *this, const char *find, size_t off, size_t len)
1031 const char *p, *end;
1033 TRACE("%p %p %Iu %Iu\n", this, find, off, len);
1035 if(off<this->size) {
1036 end = this->ptr+this->size;
1037 for(p=this->ptr+off; p<end; p++)
1038 if(!MSVCP_char_traits_char_find(find, len, p))
1039 return p-this->ptr;
1042 return MSVCP_basic_string_char_npos;
1045 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1046 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1047 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of, 12)
1048 size_t __thiscall MSVCP_basic_string_char_find_first_not_of(
1049 const basic_string_char *this, const basic_string_char *find, size_t off)
1051 return MSVCP_basic_string_char_find_first_not_of_cstr_substr(this,
1052 find->ptr, off, find->size);
1055 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1056 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1057 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of_ch, 12)
1058 size_t __thiscall MSVCP_basic_string_char_find_first_not_of_ch(
1059 const basic_string_char *this, char ch, size_t off)
1061 return MSVCP_basic_string_char_find_first_not_of_cstr_substr(this, &ch, off, 1);
1064 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1065 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1066 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of_cstr, 12)
1067 size_t __thiscall MSVCP_basic_string_char_find_first_not_of_cstr(
1068 const basic_string_char *this, const char *find, size_t off)
1070 return MSVCP_basic_string_char_find_first_not_of_cstr_substr(
1071 this, find, off, MSVCP_char_traits_char_length(find));
1074 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1075 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1076 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of_cstr_substr, 16)
1077 size_t __thiscall MSVCP_basic_string_char_find_first_of_cstr_substr(
1078 const basic_string_char *this, const char *find, size_t off, size_t len)
1080 const char *p, *end;
1082 TRACE("%p %p %Iu %Iu\n", this, find, off, len);
1084 if(len>0 && off<this->size) {
1085 end = this->ptr+this->size;
1086 for(p=this->ptr+off; p<end; p++)
1087 if(MSVCP_char_traits_char_find(find, len, p))
1088 return p-this->ptr;
1091 return MSVCP_basic_string_char_npos;
1094 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1095 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1096 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of, 12)
1097 size_t __thiscall MSVCP_basic_string_char_find_first_of(
1098 const basic_string_char *this, const basic_string_char *find, size_t off)
1100 return MSVCP_basic_string_char_find_first_of_cstr_substr(this,
1101 find->ptr, off, find->size);
1104 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1105 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1106 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of_ch, 12)
1107 size_t __thiscall MSVCP_basic_string_char_find_first_of_ch(
1108 const basic_string_char *this, char ch, size_t off)
1110 return MSVCP_basic_string_char_find_first_of_cstr_substr(this, &ch, off, 1);
1113 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1114 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1115 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of_cstr, 12)
1116 size_t __thiscall MSVCP_basic_string_char_find_first_of_cstr(
1117 const basic_string_char *this, const char *find, size_t off)
1119 return MSVCP_basic_string_char_find_first_of_cstr_substr(
1120 this, find, off, MSVCP_char_traits_char_length(find));
1123 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1124 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1125 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_not_of_cstr_substr, 16)
1126 size_t __thiscall MSVCP_basic_string_char_find_last_not_of_cstr_substr(
1127 const basic_string_char *this, const char *find, size_t off, size_t len)
1129 const char *p, *beg;
1131 TRACE("%p %p %Iu %Iu\n", this, find, off, len);
1133 if(len>0 && this->size>0) {
1134 if(off >= this->size)
1135 off = this->size-1;
1137 beg = this->ptr;
1138 for(p=beg+off; p>=beg; p--)
1139 if(!MSVCP_char_traits_char_find(find, len, p))
1140 return p-beg;
1143 return MSVCP_basic_string_char_npos;
1146 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1147 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1148 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_not_of, 12)
1149 size_t __thiscall MSVCP_basic_string_char_find_last_not_of(
1150 const basic_string_char *this, const basic_string_char *find, size_t off)
1152 return MSVCP_basic_string_char_find_last_not_of_cstr_substr(this,
1153 find->ptr, off, find->size);
1156 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1157 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1158 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_not_of_ch, 12)
1159 size_t __thiscall MSVCP_basic_string_char_find_last_not_of_ch(
1160 const basic_string_char *this, char ch, size_t off)
1162 return MSVCP_basic_string_char_find_last_not_of_cstr_substr(this, &ch, off, 1);
1165 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1166 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1167 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_not_of_cstr, 12)
1168 size_t __thiscall MSVCP_basic_string_char_find_last_not_of_cstr(
1169 const basic_string_char *this, const char *find, size_t off)
1171 return MSVCP_basic_string_char_find_last_not_of_cstr_substr(
1172 this, find, off, MSVCP_char_traits_char_length(find));
1175 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1176 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1177 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of_cstr_substr, 16)
1178 size_t __thiscall MSVCP_basic_string_char_find_last_of_cstr_substr(
1179 const basic_string_char *this, const char *find, size_t off, size_t len)
1181 const char *p, *beg;
1183 TRACE("%p %p %Iu %Iu\n", this, find, off, len);
1185 if(len>0 && this->size>0) {
1186 if(off >= this->size)
1187 off = this->size-1;
1189 beg = this->ptr;
1190 for(p=beg+off; p>=beg; p--)
1191 if(MSVCP_char_traits_char_find(find, len, p))
1192 return p-beg;
1195 return MSVCP_basic_string_char_npos;
1198 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1199 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1200 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of, 12)
1201 size_t __thiscall MSVCP_basic_string_char_find_last_of(
1202 const basic_string_char *this, const basic_string_char *find, size_t off)
1204 return MSVCP_basic_string_char_find_last_of_cstr_substr(this,
1205 find->ptr, off, find->size);
1208 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1209 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1210 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of_ch, 12)
1211 size_t __thiscall MSVCP_basic_string_char_find_last_of_ch(
1212 const basic_string_char *this, char ch, size_t off)
1214 return MSVCP_basic_string_char_find_last_of_cstr_substr(this, &ch, off, 1);
1217 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1218 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1219 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of_cstr, 12)
1220 size_t __thiscall MSVCP_basic_string_char_find_last_of_cstr(
1221 const basic_string_char *this, const char *find, size_t off)
1223 return MSVCP_basic_string_char_find_last_of_cstr_substr(
1224 this, find, off, MSVCP_char_traits_char_length(find));
1227 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z */
1228 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
1229 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_substr, 16)
1230 basic_string_char* __thiscall MSVCP_basic_string_char_append_substr(basic_string_char *this,
1231 const basic_string_char *append, size_t offset, size_t count)
1233 TRACE("%p %p %Iu %Iu\n", this, append, offset, count);
1235 if(append->size < offset)
1236 _Xran();
1238 if(count > append->size-offset)
1239 count = append->size-offset;
1241 if(MSVCP_basic_string_char_npos-this->size<=count || this->size+count<this->size)
1242 _Xlen();
1244 if(basic_string_char__Grow(this, this->size+count, FALSE)) {
1245 if(append->ptr)
1246 MSVCP_char_traits_char__Copy_s(this->ptr+this->size, this->res-this->size,
1247 append->ptr+offset, count);
1248 basic_string_char__Eos(this, this->size+count);
1251 return this;
1254 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z */
1255 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD_K@Z */
1256 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_cstr_len, 12)
1257 basic_string_char* __thiscall MSVCP_basic_string_char_append_cstr_len(
1258 basic_string_char *this, const char *append, size_t count)
1260 TRACE("%p %s %Iu\n", this, debugstr_an(append, count), count);
1262 if(basic_string_char_inside(this, append))
1263 return MSVCP_basic_string_char_append_substr(this, this, append-this->ptr, count);
1265 if(MSVCP_basic_string_char_npos-this->size<=count || this->size+count<this->size)
1266 _Xlen();
1268 if(basic_string_char__Grow(this, this->size+count, FALSE)) {
1269 MSVCP_char_traits_char__Copy_s(this->ptr+this->size,
1270 this->res-this->size, append, count);
1271 basic_string_char__Eos(this, this->size+count);
1274 return this;
1277 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ID@Z */
1278 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KD@Z */
1279 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_len_ch, 12)
1280 basic_string_char* __thiscall MSVCP_basic_string_char_append_len_ch(
1281 basic_string_char *this, size_t count, char ch)
1283 TRACE("%p %Iu %c\n", this, count, ch);
1285 if(MSVCP_basic_string_char_npos-this->size <= count)
1286 _Xlen();
1288 if(basic_string_char__Grow(this, this->size+count, FALSE)) {
1289 MSVCP_char_traits_char_assignn(this->ptr+this->size, count, ch);
1290 basic_string_char__Eos(this, this->size+count);
1293 return this;
1296 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@@Z */
1297 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@@Z */
1298 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@ABV01@@Z */
1299 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@AEBV01@@Z */
1300 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append, 8)
1301 basic_string_char* __thiscall MSVCP_basic_string_char_append(
1302 basic_string_char *this, const basic_string_char *append)
1304 return MSVCP_basic_string_char_append_substr(this, append,
1305 0, MSVCP_basic_string_char_npos);
1308 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@D@Z */
1309 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@D@Z */
1310 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_ch, 8)
1311 basic_string_char* __thiscall MSVCP_basic_string_char_append_ch(
1312 basic_string_char *this, char ch)
1314 return MSVCP_basic_string_char_append_len_ch(this, 1, ch);
1317 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD0@Z */
1318 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD0@Z */
1319 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_beg_end, 12)
1320 basic_string_char* __thiscall MSVCP_basic_string_char_append_beg_end(
1321 basic_string_char *this, const char *beg, const char *end)
1323 return MSVCP_basic_string_char_append_cstr_len(this, beg, end-beg);
1326 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z */
1327 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD@Z */
1328 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z */
1329 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@PEBD@Z */
1330 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_cstr, 8)
1331 basic_string_char* __thiscall MSVCP_basic_string_char_append_cstr(
1332 basic_string_char *this, const char *append)
1334 return MSVCP_basic_string_char_append_cstr_len(this, append,
1335 MSVCP_char_traits_char_length(append));
1337 /* ??$?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 */
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@AEBV10@0@Z */
1339 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@0@Z */
1340 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@0@Z */
1341 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate(basic_string_char *ret,
1342 const basic_string_char *left, const basic_string_char *right)
1344 TRACE("%p %p\n", left, right);
1346 MSVCP_basic_string_char_copy_ctor(ret, left);
1347 MSVCP_basic_string_char_append(ret, right);
1348 return ret;
1351 /* ??$?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 */
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@AEBV10@D@Z */
1353 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@D@Z */
1354 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@D@Z */
1355 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_bstr_ch(basic_string_char *ret,
1356 const basic_string_char *left, char right)
1358 TRACE("%p %c\n", left, right);
1360 MSVCP_basic_string_char_copy_ctor(ret, left);
1361 MSVCP_basic_string_char_append_ch(ret, right);
1362 return ret;
1365 /* ??$?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 */
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@AEBV10@PEBD@Z */
1367 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@PBD@Z */
1368 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@PEBD@Z */
1369 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_bstr_cstr(basic_string_char *ret,
1370 const basic_string_char *left, const char *right)
1372 TRACE("%p %s\n", left, debugstr_a(right));
1374 MSVCP_basic_string_char_copy_ctor(ret, left);
1375 MSVCP_basic_string_char_append_cstr(ret, right);
1376 return ret;
1379 /* ??$?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 */
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@DAEBV10@@Z */
1381 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@DABV10@@Z */
1382 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@DAEBV10@@Z */
1383 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_ch_bstr(basic_string_char *ret,
1384 char left, const basic_string_char *right)
1386 TRACE("%c %p\n", left, right);
1388 MSVCP_basic_string_char_ctor_cstr_len_alloc(ret, &left, 1, NULL);
1389 MSVCP_basic_string_char_append(ret, right);
1390 return ret;
1393 /* ??$?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 */
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@PEBDAEBV10@@Z */
1395 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBDABV10@@Z */
1396 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBDAEBV10@@Z */
1397 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_cstr_bstr(basic_string_char *ret,
1398 const char *left, const basic_string_char *right)
1400 TRACE("%s %p\n", debugstr_a(left), right);
1402 MSVCP_basic_string_char_ctor_cstr_alloc(ret, left, NULL);
1403 MSVCP_basic_string_char_append(ret, right);
1404 return ret;
1407 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAADI@Z */
1408 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAD_K@Z */
1409 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_operator_at, 8)
1410 char* __thiscall MSVCP_basic_string_char_operator_at(
1411 basic_string_char *this, size_t pos)
1413 TRACE("%p %Iu\n", this, pos);
1415 if(!this->ptr || pos>this->size)
1416 return (char*)basic_string_char__Nullstr();
1418 basic_string_char__Freeze(this);
1419 return this->ptr+pos;
1422 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDI@Z */
1423 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAAEBD_K@Z */
1424 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_operator_at_const, 8)
1425 const char* __thiscall MSVCP_basic_string_char_operator_at_const(
1426 const basic_string_char *this, size_t pos)
1428 TRACE("%p %Iu\n", this, pos);
1430 if(!this->ptr)
1431 return basic_string_char__Nullstr();
1432 return this->ptr+pos;
1435 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAADI@Z */
1436 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAD_K@Z */
1437 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDI@Z */
1438 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAAEBD_K@Z */
1439 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_at, 8)
1440 char* __thiscall MSVCP_basic_string_char_at(
1441 basic_string_char *this, size_t pos)
1443 TRACE("%p %Iu\n", this, pos);
1445 if(this->size <= pos)
1446 _Xran();
1448 return this->ptr+pos;
1451 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIPBDI@Z */
1452 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0PEBD0@Z */
1453 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_cstr_len, 20)
1454 basic_string_char* __thiscall basic_string_char_replace_cstr_len(basic_string_char *this,
1455 size_t off, size_t len, const char *str, size_t str_len)
1457 size_t inside_pos = -1;
1458 char *ptr = this->ptr;
1460 TRACE("%p %Iu %Iu %p %Iu\n", this, off, len, str, str_len);
1462 if(this->size < off)
1463 _Xran();
1465 if(len > this->size-off)
1466 len = this->size-off;
1468 if(MSVCP_basic_string_char_npos-str_len <= this->size-len)
1469 _Xlen();
1471 if(basic_string_char_inside(this, str))
1472 inside_pos = str-ptr;
1474 if(this->size-len+str_len)
1475 basic_string_char__Grow(this, this->size-len+str_len, FALSE);
1476 ptr = this->ptr;
1478 if(inside_pos == -1) {
1479 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1480 memcpy(ptr+off, str, str_len*sizeof(char));
1481 } else if(len >= str_len) {
1482 memmove(ptr+off, ptr+inside_pos, str_len*sizeof(char));
1483 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1484 } else {
1485 size_t size;
1487 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1489 if(inside_pos < off+len) {
1490 size = off+len-inside_pos;
1491 if(size > str_len)
1492 size = str_len;
1493 memmove(ptr+off, ptr+inside_pos, size*sizeof(char));
1494 } else {
1495 size = 0;
1498 if(str_len > size)
1499 memmove(ptr+off+size, ptr+off+str_len, (str_len-size)*sizeof(char));
1502 if(this->ptr)
1503 basic_string_char__Eos(this, this->size-len+str_len);
1504 return this;
1507 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIABV12@II@Z */
1508 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0AEBV12@00@Z */
1509 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_substr, 24)
1510 basic_string_char* __thiscall basic_string_char_replace_substr(basic_string_char *this, size_t off,
1511 size_t len, const basic_string_char *str, size_t str_off, size_t str_len)
1513 if(str->size < str_off)
1514 _Xran();
1516 if(str_len > str->size-str_off)
1517 str_len = str->size-str_off;
1519 return basic_string_char_replace_cstr_len(this, off, len,
1520 str->ptr+str_off, str_len);
1523 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIABV12@@Z */
1524 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0AEBV12@@Z */
1525 DEFINE_THISCALL_WRAPPER(basic_string_char_replace, 16)
1526 basic_string_char* __thiscall basic_string_char_replace(basic_string_char *this,
1527 size_t off, size_t len, const basic_string_char *str)
1529 return basic_string_char_replace_cstr_len(this, off, len,
1530 str->ptr, str->size);
1533 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIID@Z */
1534 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K00D@Z */
1535 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_ch, 20)
1536 basic_string_char* __thiscall basic_string_char_replace_ch(basic_string_char *this,
1537 size_t off, size_t len, size_t count, char ch)
1539 char *ptr;
1541 TRACE("%p %Iu %Iu %Iu %c\n", this, off, len, count, ch);
1543 if(this->size < off)
1544 _Xran();
1546 if(len > this->size-off)
1547 len = this->size-off;
1549 if(MSVCP_basic_string_char_npos-count <= this->size-len)
1550 _Xlen();
1552 if(this->size-len+count)
1553 basic_string_char__Grow(this, this->size-len+count, FALSE);
1554 ptr = this->ptr;
1556 memmove(ptr+off+count, ptr+off+len, (this->size-off-len)*sizeof(char));
1557 MSVCP_char_traits_char_assignn(ptr+off, count, ch);
1558 basic_string_char__Eos(this, this->size-len+count);
1560 return this;
1563 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIPBD@Z */
1564 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0PEBD@Z */
1565 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_cstr, 16)
1566 basic_string_char* __thiscall basic_string_char_replace_cstr(basic_string_char *this,
1567 size_t off, size_t len, const char *str)
1569 return basic_string_char_replace_cstr_len(this, off, len, str,
1570 MSVCP_char_traits_char_length(str));
1573 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IABV12@@Z */
1574 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KAEBV12@@Z */
1575 DEFINE_THISCALL_WRAPPER(basic_string_char_insert, 12)
1576 basic_string_char* __thiscall basic_string_char_insert(basic_string_char *this,
1577 size_t off, const basic_string_char *str)
1579 return basic_string_char_replace(this, off, 0, str);
1582 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IABV12@II@Z */
1583 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KAEBV12@00@Z */
1584 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_substr, 20)
1585 basic_string_char* __thiscall basic_string_char_insert_substr(
1586 basic_string_char *this, size_t off, const basic_string_char *str,
1587 size_t str_off, size_t str_count)
1589 return basic_string_char_replace_substr(this, off, 0, str, str_off, str_count);
1592 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IPBD@Z */
1593 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KPEBD@Z */
1594 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_cstr, 12)
1595 basic_string_char* __thiscall basic_string_char_insert_cstr(
1596 basic_string_char *this, size_t off, const char *str)
1598 return basic_string_char_replace_cstr(this, off, 0, str);
1601 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IPBDI@Z */
1602 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KPEBD0@Z */
1603 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_cstr_len, 16)
1604 basic_string_char* __thiscall basic_string_char_insert_cstr_len(basic_string_char *this,
1605 size_t off, const char *str, size_t str_len)
1607 return basic_string_char_replace_cstr_len(this, off, 0, str, str_len);
1610 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IID@Z */
1611 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0D@Z */
1612 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_chn, 16)
1613 basic_string_char* __thiscall basic_string_char_insert_chn(basic_string_char *this,
1614 size_t off, size_t count, char ch)
1616 return basic_string_char_replace_ch(this, off, 0, count, ch);
1619 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXID@Z */
1620 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_KD@Z */
1621 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_resize_ch, 12)
1622 void __thiscall MSVCP_basic_string_char_resize_ch(
1623 basic_string_char *this, size_t size, char ch)
1625 TRACE("%p %Iu %c\n", this, size, ch);
1627 if(size <= this->size)
1628 MSVCP_basic_string_char_erase(this, size, this->size);
1629 else
1630 MSVCP_basic_string_char_append_len_ch(this, size-this->size, ch);
1633 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXI@Z */
1634 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_K@Z */
1635 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_resize, 8)
1636 void __thiscall MSVCP_basic_string_char_resize(
1637 basic_string_char *this, size_t size)
1639 MSVCP_basic_string_char_resize_ch(this, size, '\0');
1642 /* ?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
1643 /* ?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
1644 /* ?data@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
1645 /* ?data@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
1646 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_c_str, 4)
1647 const char* __thiscall MSVCP_basic_string_char_c_str(const basic_string_char *this)
1649 TRACE("%p\n", this);
1650 return this->ptr ? this->ptr : basic_string_char__Nullstr();
1653 /* ?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1654 /* ?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1655 /* ?length@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1656 /* ?length@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1657 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_length, 4)
1658 size_t __thiscall MSVCP_basic_string_char_length(const basic_string_char *this)
1660 TRACE("%p\n", this);
1661 return this->size;
1664 /* ?max_size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1665 /* ?max_size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1666 DEFINE_THISCALL_WRAPPER(basic_string_char_max_size, 4)
1667 size_t __thiscall basic_string_char_max_size(const basic_string_char *this)
1669 TRACE("%p\n", this);
1670 return MSVCP_allocator_char_max_size(NULL)-1;
1673 /* ?capacity@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1674 /* ?capacity@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1675 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_capacity, 4)
1676 size_t __thiscall MSVCP_basic_string_char_capacity(basic_string_char *this)
1678 TRACE("%p\n", this);
1679 return this->res;
1682 /* ?reserve@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXI@Z */
1683 /* ?reserve@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_K@Z */
1684 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_reserve, 8)
1685 void __thiscall MSVCP_basic_string_char_reserve(basic_string_char *this, size_t size)
1687 size_t len;
1689 TRACE("%p %Iu\n", this, size);
1691 len = this->size;
1692 if(len > size)
1693 return;
1695 if(basic_string_char__Grow(this, size, FALSE))
1696 basic_string_char__Eos(this, len);
1699 /* ?empty@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE_NXZ */
1700 /* ?empty@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_NXZ */
1701 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_empty, 4)
1702 bool __thiscall MSVCP_basic_string_char_empty(basic_string_char *this)
1704 TRACE("%p\n", this);
1705 return this->size == 0;
1708 /* ?swap@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXAAV12@@Z */
1709 /* ?swap@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXAEAV12@@Z */
1710 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_swap, 8)
1711 void __thiscall MSVCP_basic_string_char_swap(basic_string_char *this, basic_string_char *str)
1713 basic_string_char tmp;
1714 TRACE("%p %p\n", this, str);
1716 tmp = *this;
1717 *this = *str;
1718 *str = tmp;
1721 /* ?substr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV12@II@Z */
1722 /* ?substr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV12@_K0@Z */
1723 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_substr, 16)
1724 basic_string_char* __thiscall MSVCP_basic_string_char_substr(basic_string_char *this,
1725 basic_string_char *ret, size_t off, size_t len)
1727 TRACE("%p %Iu %Iu\n", this, off, len);
1729 MSVCP_basic_string_char_ctor_substr_alloc(ret, this, off, len, NULL);
1730 return ret;
1733 /* ?copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPADII@Z */
1734 /* ?copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEAD_K1@Z */
1735 DEFINE_THISCALL_WRAPPER(basic_string_char_copy, 16)
1736 size_t __thiscall basic_string_char_copy(const basic_string_char *this,
1737 char *dest, size_t count, size_t off)
1739 TRACE("%p %p %Iu %Iu\n", this, dest, count, off);
1741 if(off > this->size)
1742 _Xran();
1743 if(count > this->size-off)
1744 count = this->size-off;
1745 if(this->ptr)
1746 MSVCP_char_traits_char__Copy_s(dest, count, this->ptr+off, count);
1747 return count;
1750 /* ?get_allocator@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$allocator@D@2@XZ */
1751 /* ?get_allocator@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$allocator@D@2@XZ */
1752 DEFINE_THISCALL_WRAPPER(basic_string_char_get_allocator, 8)
1753 allocator* __thiscall basic_string_char_get_allocator(const basic_string_char *this, allocator *ret)
1755 TRACE("%p\n", this);
1756 return ret;
1759 static bool basic_string_wchar_inside(
1760 basic_string_wchar *this, const wchar_t *ptr)
1762 return ptr>=this->ptr && ptr<this->ptr+this->size;
1765 /* ?npos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@2IB */
1766 /* ?npos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@2_KB */
1767 const size_t MSVCP_basic_string_wchar_npos = -1;
1769 /* ?_C@?1??_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPBGXZ@4GB */
1770 /* ?_C@?1??_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEBGXZ@4GB */
1771 const wchar_t basic_string_wchar_nullbyte = '\0';
1773 /* ?_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPBGXZ */
1774 /* ?_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEBGXZ */
1775 const wchar_t* __cdecl basic_string_wchar__Nullstr(void)
1777 return &basic_string_wchar_nullbyte;
1780 /* ?_Refcnt@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEAAEPBG@Z */
1781 /* ?_Refcnt@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAAEAEPEBG@Z */
1782 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Refcnt, 8)
1783 unsigned short* __thiscall basic_string_wchar__Refcnt(basic_string_wchar *this, const wchar_t *ptr)
1785 TRACE("(%p %p)\n", this, ptr);
1786 return (unsigned short*)ptr-1;
1789 /* ?_Eos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXI@Z */
1790 /* ?_Eos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAX_K@Z */
1791 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Eos, 8)
1792 void __thiscall basic_string_wchar__Eos(basic_string_wchar *this, size_t len)
1794 this->size = len;
1795 this->ptr[len] = 0;
1798 /* ?clear@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXXZ */
1799 /* ?clear@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXXZ */
1800 /* ?clear@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */
1801 /* ?clear@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */
1802 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_clear, 4)
1803 void __thiscall MSVCP_basic_string_wchar_clear(basic_string_wchar *this)
1805 if(this->ptr)
1806 basic_string_wchar__Eos(this, 0);
1809 /* ?_Tidy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEX_N@Z */
1810 /* ?_Tidy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAX_N@Z */
1811 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Tidy, 8)
1812 void __thiscall basic_string_wchar__Tidy(basic_string_wchar *this, bool built)
1814 TRACE("(%p %d)\n", this, built);
1816 if(!built || !this->ptr);
1817 else if(!this->ptr[-1] || (unsigned short)this->ptr[-1]==FROZEN)
1818 MSVCP_allocator_wchar_deallocate(NULL, this->ptr-1, this->res+2);
1819 else
1820 this->ptr[-1]--;
1822 memset(this, 0, sizeof(*this));
1825 /* ?_Grow@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAE_NI_N@Z */
1826 /* ?_Grow@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAA_N_K_N@Z */
1827 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Grow, 12)
1828 bool __thiscall basic_string_wchar__Grow(basic_string_wchar *this, size_t new_size, bool trim)
1830 if(!new_size) {
1831 if(trim)
1832 basic_string_wchar__Tidy(this, TRUE);
1833 else if(this->ptr)
1834 basic_string_wchar__Eos(this, 0);
1835 } else if(this->res<new_size || trim ||
1836 (this->ptr && this->ptr[-1] && (unsigned short)this->ptr[-1]!=FROZEN)) {
1837 size_t new_res = new_size, len = this->size;
1838 wchar_t *ptr;
1840 if(!trim && this->ptr && !this->ptr[-1]) {
1841 new_res |= 0xf;
1842 if(new_res/3 < this->res/2)
1843 new_res = this->res + this->res/2;
1846 ptr = MSVCP_allocator_wchar_allocate(this->allocator, new_res+2);
1847 if(!ptr) {
1848 new_res = new_size;
1849 ptr = MSVCP_allocator_wchar_allocate(this->allocator, new_size+2);
1851 if(!ptr) {
1852 ERR("Out of memory\n");
1853 return FALSE;
1856 if(len > new_res)
1857 len = new_res;
1859 *ptr = 0;
1860 if(this->ptr)
1861 MSVCP_char_traits_wchar__Copy_s(ptr+1, new_size, this->ptr, len);
1862 basic_string_wchar__Tidy(this, TRUE);
1863 this->ptr = ptr+1;
1864 this->res = new_res;
1865 basic_string_wchar__Eos(this, len);
1868 return new_size>0;
1871 /* ?_Split@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXXZ */
1872 /* ?_Split@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAXXZ */
1873 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Split, 4)
1874 void __thiscall basic_string_wchar__Split(basic_string_wchar *this)
1876 size_t len;
1877 wchar_t *ptr;
1879 TRACE("(%p)\n", this);
1881 if(!this->ptr || !this->ptr[-1] || (unsigned short)this->ptr[-1]==FROZEN)
1882 return;
1884 ptr = this->ptr;
1885 len = this->size;
1886 basic_string_wchar__Tidy(this, TRUE);
1887 if(basic_string_wchar__Grow(this, len, FALSE)) {
1888 if(ptr)
1889 MSVCP_char_traits_wchar__Copy_s(this->ptr, this->res, ptr, len);
1890 basic_string_wchar__Eos(this, len);
1894 /* ?_Freeze@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXXZ */
1895 /* ?_Freeze@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAXXZ */
1896 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Freeze, 4)
1897 void __thiscall basic_string_wchar__Freeze(basic_string_wchar *this)
1899 TRACE("(%p)\n", this);
1900 basic_string_wchar__Split(this);
1901 if(this->ptr)
1902 this->ptr[-1] = FROZEN;
1905 /* ?_Copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXI@Z */
1906 /* ?_Copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAX_K@Z */
1907 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Copy, 8)
1908 void __thiscall basic_string_wchar__Copy(basic_string_wchar *this, size_t copy_len)
1910 TRACE("%p %Iu\n", this, copy_len);
1912 if(!basic_string_wchar__Grow(this, copy_len, TRUE))
1913 return;
1916 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPAGPAGI@Z */
1917 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEAGPEAG_K@Z */
1918 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPBGPBGI@Z */
1919 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEBGPEBG_K@Z */
1920 wchar_t* __cdecl basic_string_wchar__Psum(wchar_t *iter, size_t add)
1922 TRACE("(%p %Iu)\n", iter, add);
1923 return iter ? iter+add : iter;
1926 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@II@Z */
1927 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0@Z */
1928 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_erase, 12)
1929 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_erase(
1930 basic_string_wchar *this, size_t pos, size_t len)
1932 TRACE("%p %Iu %Iu\n", this, pos, len);
1934 if(pos > this->size)
1935 _Xran();
1937 if(len > this->size-pos)
1938 len = this->size-pos;
1940 if(len) {
1941 basic_string_wchar__Split(this);
1942 MSVCP_char_traits_wchar__Move_s(this->ptr+pos, this->res-pos,
1943 this->ptr+pos+len, this->size-pos-len);
1944 basic_string_wchar__Eos(this, this->size-len);
1947 return this;
1950 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGPAG@Z */
1951 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGPEAG@Z */
1952 DEFINE_THISCALL_WRAPPER(basic_string_wchar_erase_beg, 8)
1953 wchar_t* __thiscall basic_string_wchar_erase_beg(basic_string_wchar *this, wchar_t *beg)
1955 size_t pos = beg-this->ptr;
1956 MSVCP_basic_string_wchar_erase(this, pos, 1);
1957 return this->ptr+pos;
1960 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@II@Z */
1961 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
1962 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_substr, 16)
1963 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_substr(
1964 basic_string_wchar *this, const basic_string_wchar *assign,
1965 size_t pos, size_t len)
1967 TRACE("%p %p %Iu %Iu\n", this, assign, pos, len);
1969 if(assign->size < pos)
1970 _Xran();
1972 if(len > assign->size-pos)
1973 len = assign->size-pos;
1975 if(this == assign) {
1976 MSVCP_basic_string_wchar_erase(this, pos+len, MSVCP_basic_string_wchar_npos);
1977 MSVCP_basic_string_wchar_erase(this, 0, pos);
1978 } else if(basic_string_wchar__Grow(this, len, FALSE)) {
1979 if(assign->ptr)
1980 MSVCP_char_traits_wchar__Copy_s(this->ptr, this->res,
1981 assign->ptr+pos, len);
1982 basic_string_wchar__Eos(this, len);
1985 return this;
1988 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBGI@Z */
1989 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG_K@Z */
1990 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_cstr_len, 12)
1991 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_cstr_len(
1992 basic_string_wchar *this, const wchar_t *str, size_t len)
1994 TRACE("%p %s %Iu\n", this, debugstr_wn(str, len), len);
1996 if(basic_string_wchar_inside(this, str))
1997 return MSVCP_basic_string_wchar_assign_substr(this, this, str-this->ptr, len);
1998 else if(basic_string_wchar__Grow(this, len, FALSE)) {
1999 MSVCP_char_traits_wchar__Copy_s(this->ptr, this->res, str, len);
2000 basic_string_wchar__Eos(this, len);
2003 return this;
2006 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@@Z */
2007 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@@Z */
2008 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@ABV01@@Z */
2009 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@AEBV01@@Z */
2010 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign, 8)
2011 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign(
2012 basic_string_wchar *this, const basic_string_wchar *assign)
2014 return MSVCP_basic_string_wchar_assign_substr(this, assign,
2015 0, MSVCP_basic_string_wchar_npos);
2018 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG@Z */
2019 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG@Z */
2020 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@PBG@Z */
2021 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@PEBG@Z */
2022 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_cstr, 8)
2023 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_cstr(
2024 basic_string_wchar *this, const wchar_t *str)
2026 return MSVCP_basic_string_wchar_assign_cstr_len(this, str,
2027 MSVCP_char_traits_wchar_length(str));
2030 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@G@Z */
2031 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@G@Z */
2032 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_ch, 8)
2033 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_ch(
2034 basic_string_wchar *this, wchar_t ch)
2036 return MSVCP_basic_string_wchar_assign_cstr_len(this, &ch, 1);
2039 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IG@Z */
2040 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KG@Z */
2041 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assignn, 12)
2042 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assignn(
2043 basic_string_wchar *this, size_t count, wchar_t ch)
2045 TRACE("%p %Iu %c\n", this, count, ch);
2047 basic_string_wchar__Grow(this, count, FALSE);
2048 MSVCP_char_traits_wchar_assignn(this->ptr, count, ch);
2049 basic_string_wchar__Eos(this, count);
2050 return this;
2053 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG0@Z */
2054 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG0@Z */
2055 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_ptr_ptr, 12)
2056 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_ptr_ptr(
2057 basic_string_wchar *this, const wchar_t *first, const wchar_t *last)
2059 return MSVCP_basic_string_wchar_assign_cstr_len(this, first, last-first);
2062 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBGIABV?$allocator@G@1@@Z */
2063 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG_KAEBV?$allocator@G@1@@Z */
2064 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr_len_alloc, 16)
2065 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr_len_alloc(
2066 basic_string_wchar *this, const wchar_t *str, size_t len, const void *alloc)
2068 TRACE("%p %s %Iu\n", this, debugstr_wn(str, len), len);
2070 basic_string_wchar__Tidy(this, FALSE);
2071 MSVCP_basic_string_wchar_assign_cstr_len(this, str, len);
2072 return this;
2075 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@PB_WI@Z */
2076 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@PEB_W_K@Z */
2077 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBGI@Z */
2078 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG_K@Z */
2079 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr_len, 12)
2080 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr_len(
2081 basic_string_wchar *this, const wchar_t *str, size_t len)
2083 return MSVCP_basic_string_wchar_ctor_cstr_len_alloc(this, str, len, NULL);
2086 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV01@IIABV?$allocator@G@1@@Z */
2087 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV01@_K1AEBV?$allocator@G@1@@Z */
2088 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_substr_alloc, 20)
2089 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_substr_alloc(
2090 basic_string_wchar *this, const basic_string_wchar *assign,
2091 size_t pos, size_t len, const void *alloc)
2093 TRACE("%p %p %Iu %Iu\n", this, assign, pos, len);
2095 basic_string_wchar__Tidy(this, FALSE);
2096 MSVCP_basic_string_wchar_assign_substr(this, assign, pos, len);
2097 return this;
2100 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBGABV?$allocator@G@1@@Z */
2101 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBGAEBV?$allocator@G@1@@Z */
2102 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr_alloc, 12)
2103 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr_alloc(
2104 basic_string_wchar *this, const wchar_t *str, const void *alloc)
2106 TRACE("%p %s\n", this, debugstr_w(str));
2108 basic_string_wchar__Tidy(this, FALSE);
2109 MSVCP_basic_string_wchar_assign_cstr(this, str);
2110 return this;
2113 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@PB_W@Z */
2114 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@PEB_W@Z */
2115 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBG@Z */
2116 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG@Z */
2117 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr, 8)
2118 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr(
2119 basic_string_wchar *this, const wchar_t *str)
2121 return MSVCP_basic_string_wchar_ctor_cstr_alloc(this, str, NULL);
2124 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@IGABV?$allocator@G@1@@Z */
2125 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@_KGAEBV?$allocator@G@1@@Z */
2126 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_ch_alloc, 16)
2127 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_ch_alloc(basic_string_wchar *this,
2128 size_t count, wchar_t ch, const void *alloc)
2130 TRACE("%p %Iu %c\n", this, count, ch);
2132 basic_string_wchar__Tidy(this, FALSE);
2133 MSVCP_basic_string_wchar_assignn(this, count, ch);
2134 return this;
2137 /* ??_F?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */
2138 /* ??_F?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */
2139 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor, 4)
2140 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor(basic_string_wchar *this)
2142 TRACE("%p\n", this);
2144 basic_string_wchar__Tidy(this, FALSE);
2145 return this;
2148 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV?$allocator@G@1@@Z */
2149 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV?$allocator@G@1@@Z */
2150 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_alloc, 8)
2151 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_alloc(
2152 basic_string_wchar *this, const void *alloc)
2154 TRACE("%p %p\n", this, alloc);
2156 basic_string_wchar__Tidy(this, FALSE);
2157 return this;
2160 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV01@@Z */
2161 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV01@@Z */
2162 DEFINE_THISCALL_WRAPPER(basic_string_wchar_copy_ctor, 8)
2163 basic_string_wchar* __thiscall basic_string_wchar_copy_ctor(
2164 basic_string_wchar *this, const basic_string_wchar *copy)
2166 TRACE("%p %p\n", this, copy);
2168 basic_string_wchar__Tidy(this, FALSE);
2169 MSVCP_basic_string_wchar_assign(this, copy);
2170 return this;
2173 /* ??1?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@XZ */
2174 /* ??1?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@XZ */
2175 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_dtor, 4)
2176 void __thiscall MSVCP_basic_string_wchar_dtor(basic_string_wchar *this)
2178 TRACE("%p\n", this);
2179 basic_string_wchar__Tidy(this, TRUE);
2182 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIPBGI@Z */
2183 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0PEBG0@Z */
2184 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr_cstr_len, 20)
2185 int __thiscall MSVCP_basic_string_wchar_compare_substr_cstr_len(
2186 const basic_string_wchar *this, size_t pos, size_t num,
2187 const wchar_t *str, size_t count)
2189 int ans;
2191 TRACE("%p %Iu %Iu %s %Iu\n", this, pos, num, debugstr_wn(str, count), count);
2193 if(this->size < pos)
2194 _Xran();
2196 if(num > this->size-pos)
2197 num = this->size-pos;
2199 ans = MSVCP_char_traits_wchar_compare(this->ptr+pos,
2200 str, num>count ? count : num);
2201 if(ans)
2202 return ans;
2204 if(num > count)
2205 ans = 1;
2206 else if(num < count)
2207 ans = -1;
2208 return ans;
2211 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHPBG@Z */
2212 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAHPEBG@Z */
2213 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_cstr, 8)
2214 int __thiscall MSVCP_basic_string_wchar_compare_cstr(
2215 const basic_string_wchar *this, const wchar_t *str)
2217 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, 0, this->size,
2218 str, MSVCP_char_traits_wchar_length(str));
2221 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIABV12@II@Z */
2222 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0AEBV12@00@Z */
2223 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr_substr, 24)
2224 int __thiscall MSVCP_basic_string_wchar_compare_substr_substr(
2225 const basic_string_wchar *this, size_t pos, size_t num,
2226 const basic_string_wchar *compare, size_t off, size_t count)
2228 TRACE("%p %Iu %Iu %p %Iu %Iu\n", this, pos, num, compare, off, count);
2230 if(compare->size < off)
2231 _Xran();
2233 if(count > compare->size-off)
2234 count = compare->size-off;
2236 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2237 compare->ptr+off, count);
2240 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIABV12@@Z */
2241 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0AEBV12@@Z */
2242 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr, 16)
2243 int __thiscall MSVCP_basic_string_wchar_compare_substr(
2244 const basic_string_wchar *this, size_t pos, size_t num,
2245 const basic_string_wchar *compare)
2247 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2248 compare->ptr, compare->size);
2251 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHABV12@@Z */
2252 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAHAEBV12@@Z */
2253 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare, 8)
2254 int __thiscall MSVCP_basic_string_wchar_compare(
2255 const basic_string_wchar *this, const basic_string_wchar *compare)
2257 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, 0, this->size,
2258 compare->ptr, compare->size);
2261 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIPBG@Z */
2262 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0PEBG@Z */
2263 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr_cstr, 16)
2264 int __thiscall MSVCP_basic_string_wchar_compare_substr_cstr(const basic_string_wchar *this,
2265 size_t pos, size_t num, const wchar_t *str)
2267 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2268 str, MSVCP_char_traits_wchar_length(str));
2271 /* ??$?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 */
2272 /* ??$?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 */
2273 /* ??8std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2274 /* ??8std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2275 bool __cdecl MSVCP_basic_string_wchar_equal(
2276 const basic_string_wchar *left, const basic_string_wchar *right)
2278 return MSVCP_basic_string_wchar_compare(left, right) == 0;
2281 /* ??$?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 */
2282 /* ??$?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 */
2283 /* ??8std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2284 /* ??8std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2285 bool __cdecl MSVCP_basic_string_wchar_equal_str_cstr(
2286 const basic_string_wchar *left, const wchar_t *right)
2288 return MSVCP_basic_string_wchar_compare_cstr(left, right) == 0;
2291 /* ??$?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 */
2292 /* ??$?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 */
2293 /* ??8std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2294 /* ??8std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2295 bool __cdecl MSVCP_basic_string_wchar_equal_cstr_str(
2296 const wchar_t *left, const basic_string_wchar *right)
2298 return MSVCP_basic_string_wchar_compare_cstr(right, left) == 0;
2301 /* ??$?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 */
2302 /* ??$?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 */
2303 /* ??9std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2304 /* ??9std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2305 bool __cdecl MSVCP_basic_string_wchar_not_equal(
2306 const basic_string_wchar *left, const basic_string_wchar *right)
2308 return MSVCP_basic_string_wchar_compare(left, right) != 0;
2311 /* ??$?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 */
2312 /* ??$?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 */
2313 /* ??9std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2314 /* ??9std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2315 bool __cdecl MSVCP_basic_string_wchar_not_equal_str_cstr(
2316 const basic_string_wchar *left, const wchar_t *right)
2318 return MSVCP_basic_string_wchar_compare_cstr(left, right) != 0;
2321 /* ??$?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 */
2322 /* ??$?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 */
2323 /* ??9std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2324 /* ??9std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2325 bool __cdecl MSVCP_basic_string_wchar_not_equal_cstr_str(
2326 const wchar_t *left, const basic_string_wchar *right)
2328 return MSVCP_basic_string_wchar_compare_cstr(right, left) != 0;
2331 /* ??$?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 */
2332 /* ??$?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 */
2333 /* ??Mstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2334 /* ??Mstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2335 bool __cdecl MSVCP_basic_string_wchar_lower(
2336 const basic_string_wchar *left, const basic_string_wchar *right)
2338 return MSVCP_basic_string_wchar_compare(left, right) < 0;
2341 /* ??$?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 */
2342 /* ??$?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 */
2343 /* ??Mstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2344 /* ??Mstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2345 bool __cdecl MSVCP_basic_string_wchar_lower_bstr_cstr(
2346 const basic_string_wchar *left, const wchar_t *right)
2348 return MSVCP_basic_string_wchar_compare_cstr(left, right) < 0;
2351 /* ??$?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 */
2352 /* ??$?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 */
2353 /* ??Mstd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2354 /* ??Mstd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2355 bool __cdecl MSVCP_basic_string_wchar_lower_cstr_bstr(
2356 const wchar_t *left, const basic_string_wchar *right)
2358 return MSVCP_basic_string_wchar_compare_cstr(right, left) > 0;
2361 /* ??$?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 */
2362 /* ??$?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 */
2363 /* ??Nstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2364 /* ??Nstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2365 bool __cdecl MSVCP_basic_string_wchar_leq(
2366 const basic_string_wchar *left, const basic_string_wchar *right)
2368 return MSVCP_basic_string_wchar_compare(left, right) <= 0;
2371 /* ??$?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 */
2372 /* ??$?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 */
2373 /* ??Nstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2374 /* ??Nstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2375 bool __cdecl MSVCP_basic_string_wchar_leq_bstr_cstr(
2376 const basic_string_wchar *left, const wchar_t *right)
2378 return MSVCP_basic_string_wchar_compare_cstr(left, right) <= 0;
2381 /* ??$?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 */
2382 /* ??$?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 */
2383 /* ??Nstd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2384 /* ??Nstd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2385 bool __cdecl MSVCP_basic_string_wchar_leq_cstr_bstr(
2386 const wchar_t *left, const basic_string_wchar *right)
2388 return MSVCP_basic_string_wchar_compare_cstr(right, left) >= 0;
2391 /* ??$?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 */
2392 /* ??$?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 */
2393 /* ??Ostd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2394 /* ??Ostd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2395 bool __cdecl MSVCP_basic_string_wchar_greater(
2396 const basic_string_wchar *left, const basic_string_wchar *right)
2398 return MSVCP_basic_string_wchar_compare(left, right) > 0;
2401 /* ??$?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 */
2402 /* ??$?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 */
2403 /* ??Ostd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2404 /* ??Ostd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2405 bool __cdecl MSVCP_basic_string_wchar_greater_bstr_cstr(
2406 const basic_string_wchar *left, const wchar_t *right)
2408 return MSVCP_basic_string_wchar_compare_cstr(left, right) > 0;
2411 /* ??$?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 */
2412 /* ??$?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 */
2413 /* ??Ostd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2414 /* ??Ostd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2415 bool __cdecl MSVCP_basic_string_wchar_greater_cstr_bstr(
2416 const wchar_t *left, const basic_string_wchar *right)
2418 return MSVCP_basic_string_wchar_compare_cstr(right, left) < 0;
2421 /* ??$?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 */
2422 /* ??$?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 */
2423 /* ??Pstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2424 /* ??Pstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2425 bool __cdecl MSVCP_basic_string_wchar_geq(
2426 const basic_string_wchar *left, const basic_string_wchar *right)
2428 return MSVCP_basic_string_wchar_compare(left, right) >= 0;
2431 /* ??$?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 */
2432 /* ??$?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 */
2433 /* ??Pstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2434 /* ??Pstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2435 bool __cdecl MSVCP_basic_string_wchar_geq_bstr_cstr(
2436 const basic_string_wchar *left, const wchar_t *right)
2438 return MSVCP_basic_string_wchar_compare_cstr(left, right) >= 0;
2441 /* ??$?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 */
2442 /* ??$?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 */
2443 /* ??Pstd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2444 /* ??Pstd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2445 bool __cdecl MSVCP_basic_string_wchar_geq_cstr_bstr(
2446 const wchar_t *left, const basic_string_wchar *right)
2448 return MSVCP_basic_string_wchar_compare_cstr(right, left) <= 0;
2451 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2452 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2453 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_cstr_substr, 16)
2454 size_t __thiscall MSVCP_basic_string_wchar_find_cstr_substr(
2455 const basic_string_wchar *this, const wchar_t *find, size_t pos, size_t len)
2457 const wchar_t *p, *end;
2459 TRACE("%p %s %Iu %Iu\n", this, debugstr_wn(find, len), pos, len);
2461 if(len==0 && pos<=this->size)
2462 return pos;
2463 if(pos>=this->size || len>this->size)
2464 return MSVCP_basic_string_wchar_npos;
2466 end = this->ptr+this->size-len+1;
2467 for(p=this->ptr+pos; p<end; p++) {
2468 p = MSVCP_char_traits_wchar_find(p, end-p, find);
2469 if(!p)
2470 break;
2472 if(!MSVCP_char_traits_wchar_compare(p, find, len))
2473 return p-this->ptr;
2476 return MSVCP_basic_string_wchar_npos;
2479 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2480 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2481 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_off, 12)
2482 size_t __thiscall MSVCP_basic_string_wchar_find_off(
2483 const basic_string_wchar *this, const basic_string_wchar *find, size_t off)
2485 return MSVCP_basic_string_wchar_find_cstr_substr(this, find->ptr, off, find->size);
2488 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2489 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2490 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_ch, 12)
2491 size_t __thiscall MSVCP_basic_string_wchar_find_ch(
2492 const basic_string_wchar *this, wchar_t ch, size_t pos)
2494 return MSVCP_basic_string_wchar_find_cstr_substr(this, &ch, pos, 1);
2497 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2498 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2499 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_cstr_off, 12)
2500 size_t __thiscall MSVCP_basic_string_wchar_find_cstr_off(
2501 const basic_string_wchar *this, const wchar_t *find, size_t pos)
2503 return MSVCP_basic_string_wchar_find_cstr_substr(this, find, pos,
2504 MSVCP_char_traits_wchar_length(find));
2507 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2508 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2509 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rfind_cstr_substr, 16)
2510 size_t __thiscall MSVCP_basic_string_wchar_rfind_cstr_substr(
2511 const basic_string_wchar *this, const wchar_t *find, size_t pos, size_t len)
2513 const wchar_t *p, *end;
2515 TRACE("%p %s %Iu %Iu\n", this, debugstr_wn(find, len), pos, len);
2517 if(len==0)
2518 return pos<this->size ? pos : this->size;
2520 if(len > this->size)
2521 return MSVCP_basic_string_wchar_npos;
2523 if(pos > this->size-len)
2524 pos = this->size-len;
2525 end = this->ptr;
2526 for(p=end+pos; p>=end; p--) {
2527 if(*p==*find && !MSVCP_char_traits_wchar_compare(p, find, len))
2528 return p-this->ptr;
2531 return MSVCP_basic_string_wchar_npos;
2534 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2535 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2536 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rfind_off, 12)
2537 size_t __thiscall MSVCP_basic_string_wchar_rfind_off(
2538 const basic_string_wchar *this, const basic_string_wchar *find, size_t off)
2540 return MSVCP_basic_string_wchar_rfind_cstr_substr(this, find->ptr, off, find->size);
2543 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2544 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2545 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rfind_ch, 12)
2546 size_t __thiscall MSVCP_basic_string_wchar_rfind_ch(
2547 const basic_string_wchar *this, wchar_t ch, size_t pos)
2549 return MSVCP_basic_string_wchar_rfind_cstr_substr(this, &ch, pos, 1);
2552 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2553 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2554 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rfind_cstr_off, 12)
2555 size_t __thiscall MSVCP_basic_string_wchar_rfind_cstr_off(
2556 const basic_string_wchar *this, const wchar_t *find, size_t pos)
2558 return MSVCP_basic_string_wchar_rfind_cstr_substr(this, find, pos,
2559 MSVCP_char_traits_wchar_length(find));
2562 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2563 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2564 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of_cstr_substr, 16)
2565 size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(
2566 const basic_string_wchar *this, const wchar_t *find, size_t off, size_t len)
2568 const wchar_t *p, *end;
2570 TRACE("%p %p %Iu %Iu\n", this, find, off, len);
2572 if(off<this->size) {
2573 end = this->ptr+this->size;
2574 for(p=this->ptr+off; p<end; p++)
2575 if(!MSVCP_char_traits_wchar_find(find, len, p))
2576 return p-this->ptr;
2579 return MSVCP_basic_string_wchar_npos;
2582 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2583 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2584 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of, 12)
2585 size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of(
2586 const basic_string_wchar *this, const basic_string_wchar *find, size_t off)
2588 return MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(this,
2589 find->ptr, off, find->size);
2592 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2593 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2594 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of_ch, 12)
2595 size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of_ch(
2596 const basic_string_wchar *this, wchar_t ch, size_t off)
2598 return MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(this, &ch, off, 1);
2601 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2602 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2603 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of_cstr, 12)
2604 size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of_cstr(
2605 const basic_string_wchar *this, const wchar_t *find, size_t off)
2607 return MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(
2608 this, find, off, MSVCP_char_traits_wchar_length(find));
2611 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2612 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2613 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of_cstr_substr, 16)
2614 size_t __thiscall MSVCP_basic_string_wchar_find_first_of_cstr_substr(
2615 const basic_string_wchar *this, const wchar_t *find, size_t off, size_t len)
2617 const wchar_t *p, *end;
2619 TRACE("%p %p %Iu %Iu\n", this, find, off, len);
2621 if(len>0 && off<this->size) {
2622 end = this->ptr+this->size;
2623 for(p=this->ptr+off; p<end; p++)
2624 if(MSVCP_char_traits_wchar_find(find, len, p))
2625 return p-this->ptr;
2628 return MSVCP_basic_string_wchar_npos;
2631 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2632 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2633 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of, 12)
2634 size_t __thiscall MSVCP_basic_string_wchar_find_first_of(
2635 const basic_string_wchar *this, const basic_string_wchar *find, size_t off)
2637 return MSVCP_basic_string_wchar_find_first_of_cstr_substr(this,
2638 find->ptr, off, find->size);
2641 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2642 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2643 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of_ch, 12)
2644 size_t __thiscall MSVCP_basic_string_wchar_find_first_of_ch(
2645 const basic_string_wchar *this, wchar_t ch, size_t off)
2647 return MSVCP_basic_string_wchar_find_first_of_cstr_substr(this, &ch, off, 1);
2650 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2651 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2652 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of_cstr, 12)
2653 size_t __thiscall MSVCP_basic_string_wchar_find_first_of_cstr(
2654 const basic_string_wchar *this, const wchar_t *find, size_t off)
2656 return MSVCP_basic_string_wchar_find_first_of_cstr_substr(
2657 this, find, off, MSVCP_char_traits_wchar_length(find));
2660 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2661 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2662 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_not_of_cstr_substr, 16)
2663 size_t __thiscall MSVCP_basic_string_wchar_find_last_not_of_cstr_substr(
2664 const basic_string_wchar *this, const wchar_t *find, size_t off, size_t len)
2666 const wchar_t *p, *beg;
2668 TRACE("%p %p %Iu %Iu\n", this, find, off, len);
2670 if(len>0 && this->size>0) {
2671 if(off >= this->size)
2672 off = this->size-1;
2674 beg = this->ptr;
2675 for(p=beg+off; p>=beg; p--)
2676 if(!MSVCP_char_traits_wchar_find(find, len, p))
2677 return p-beg;
2680 return MSVCP_basic_string_wchar_npos;
2683 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2684 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2685 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_not_of, 12)
2686 size_t __thiscall MSVCP_basic_string_wchar_find_last_not_of(
2687 const basic_string_wchar *this, const basic_string_wchar *find, size_t off)
2689 return MSVCP_basic_string_wchar_find_last_not_of_cstr_substr(this,
2690 find->ptr, off, find->size);
2693 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2694 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2695 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_not_of_ch, 12)
2696 size_t __thiscall MSVCP_basic_string_wchar_find_last_not_of_ch(
2697 const basic_string_wchar *this, wchar_t ch, size_t off)
2699 return MSVCP_basic_string_wchar_find_last_not_of_cstr_substr(this, &ch, off, 1);
2702 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2703 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2704 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_not_of_cstr, 12)
2705 size_t __thiscall MSVCP_basic_string_wchar_find_last_not_of_cstr(
2706 const basic_string_wchar *this, const wchar_t *find, size_t off)
2708 return MSVCP_basic_string_wchar_find_last_not_of_cstr_substr(
2709 this, find, off, MSVCP_char_traits_wchar_length(find));
2712 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2713 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2714 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of_cstr_substr, 16)
2715 size_t __thiscall MSVCP_basic_string_wchar_find_last_of_cstr_substr(
2716 const basic_string_wchar *this, const wchar_t *find, size_t off, size_t len)
2718 const wchar_t *p, *beg;
2720 TRACE("%p %p %Iu %Iu\n", this, find, off, len);
2722 if(len>0 && this->size>0) {
2723 if(off >= this->size)
2724 off = this->size-1;
2726 beg = this->ptr;
2727 for(p=beg+off; p>=beg; p--)
2728 if(MSVCP_char_traits_wchar_find(find, len, p))
2729 return p-beg;
2732 return MSVCP_basic_string_wchar_npos;
2735 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2736 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2737 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of, 12)
2738 size_t __thiscall MSVCP_basic_string_wchar_find_last_of(
2739 const basic_string_wchar *this, const basic_string_wchar *find, size_t off)
2741 return MSVCP_basic_string_wchar_find_last_of_cstr_substr(this,
2742 find->ptr, off, find->size);
2745 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2746 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2747 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of_ch, 12)
2748 size_t __thiscall MSVCP_basic_string_wchar_find_last_of_ch(
2749 const basic_string_wchar *this, wchar_t ch, size_t off)
2751 return MSVCP_basic_string_wchar_find_last_of_cstr_substr(this, &ch, off, 1);
2754 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2755 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2756 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of_cstr, 12)
2757 size_t __thiscall MSVCP_basic_string_wchar_find_last_of_cstr(
2758 const basic_string_wchar *this, const wchar_t *find, size_t off)
2760 return MSVCP_basic_string_wchar_find_last_of_cstr_substr(
2761 this, find, off, MSVCP_char_traits_wchar_length(find));
2764 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@II@Z */
2765 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
2766 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_substr, 16)
2767 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_substr(basic_string_wchar *this,
2768 const basic_string_wchar *append, size_t offset, size_t count)
2770 TRACE("%p %p %Iu %Iu\n", this, append, offset, count);
2772 if(append->size < offset)
2773 _Xran();
2775 if(count > append->size-offset)
2776 count = append->size-offset;
2778 if(MSVCP_basic_string_wchar_npos-this->size<=count || this->size+count<this->size)
2779 _Xlen();
2781 if(basic_string_wchar__Grow(this, this->size+count, FALSE)) {
2782 if(append->ptr)
2783 MSVCP_char_traits_wchar__Copy_s(this->ptr+this->size, this->res-this->size,
2784 append->ptr+offset, count);
2785 basic_string_wchar__Eos(this, this->size+count);
2788 return this;
2791 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBGI@Z */
2792 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG_K@Z */
2793 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_cstr_len, 12)
2794 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_cstr_len(
2795 basic_string_wchar *this, const wchar_t *append, size_t count)
2797 TRACE("%p %s %Iu\n", this, debugstr_wn(append, count), count);
2799 if(basic_string_wchar_inside(this, append))
2800 return MSVCP_basic_string_wchar_append_substr(this, this, append-this->ptr, count);
2802 if(MSVCP_basic_string_wchar_npos-this->size<=count || this->size+count<this->size)
2803 _Xlen();
2805 if(basic_string_wchar__Grow(this, this->size+count, FALSE)) {
2806 MSVCP_char_traits_wchar__Copy_s(this->ptr+this->size,
2807 this->res-this->size, append, count);
2808 basic_string_wchar__Eos(this, this->size+count);
2811 return this;
2814 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IG@Z */
2815 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KG@Z */
2816 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_len_ch, 12)
2817 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_len_ch(
2818 basic_string_wchar *this, size_t count, wchar_t ch)
2820 TRACE("%p %Iu %c\n", this, count, ch);
2822 if(MSVCP_basic_string_wchar_npos-this->size <= count)
2823 _Xlen();
2825 if(basic_string_wchar__Grow(this, this->size+count, FALSE)) {
2826 MSVCP_char_traits_wchar_assignn(this->ptr+this->size, count, ch);
2827 basic_string_wchar__Eos(this, this->size+count);
2830 return this;
2833 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@@Z */
2834 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@@Z */
2835 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@ABV01@@Z */
2836 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@AEBV01@@Z */
2837 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append, 8)
2838 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append(
2839 basic_string_wchar *this, const basic_string_wchar *append)
2841 return MSVCP_basic_string_wchar_append_substr(this, append,
2842 0, MSVCP_basic_string_wchar_npos);
2845 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@G@Z */
2846 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@G@Z */
2847 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_ch, 8)
2848 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_ch(
2849 basic_string_wchar *this, wchar_t ch)
2851 return MSVCP_basic_string_wchar_append_len_ch(this, 1, ch);
2854 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG0@Z */
2855 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG0@Z */
2856 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_beg_end, 12)
2857 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_beg_end(
2858 basic_string_wchar *this, const wchar_t *beg, const wchar_t *end)
2860 return MSVCP_basic_string_wchar_append_cstr_len(this, beg, end-beg);
2863 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG@Z */
2864 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG@Z */
2865 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@PBG@Z */
2866 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@PEBG@Z */
2867 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_cstr, 8)
2868 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_cstr(
2869 basic_string_wchar *this, const wchar_t *append)
2871 return MSVCP_basic_string_wchar_append_cstr_len(this, append,
2872 MSVCP_char_traits_wchar_length(append));
2874 /* ??$?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 */
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@AEBV10@0@Z */
2876 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@0@Z */
2877 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@0@Z */
2878 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate(basic_string_wchar *ret,
2879 const basic_string_wchar *left, const basic_string_wchar *right)
2881 TRACE("%p %p\n", left, right);
2883 basic_string_wchar_copy_ctor(ret, left);
2884 MSVCP_basic_string_wchar_append(ret, right);
2885 return ret;
2888 /* ??$?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 */
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@AEBV10@G@Z */
2890 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@G@Z */
2891 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@G@Z */
2892 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate_bstr_ch(basic_string_wchar *ret,
2893 const basic_string_wchar *left, wchar_t right)
2895 TRACE("%p %c\n", left, right);
2897 basic_string_wchar_copy_ctor(ret, left);
2898 MSVCP_basic_string_wchar_append_ch(ret, right);
2899 return ret;
2902 /* ??$?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 */
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@AEBV10@PEBG@Z */
2904 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@PBG@Z */
2905 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@PEBG@Z */
2906 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate_bstr_cstr(basic_string_wchar *ret,
2907 const basic_string_wchar *left, const wchar_t *right)
2909 TRACE("%p %s\n", left, debugstr_w(right));
2911 basic_string_wchar_copy_ctor(ret, left);
2912 MSVCP_basic_string_wchar_append_cstr(ret, right);
2913 return ret;
2916 /* ??$?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 */
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@GAEBV10@@Z */
2918 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@GABV10@@Z */
2919 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@GAEBV10@@Z */
2920 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate_ch_bstr(basic_string_wchar *ret,
2921 wchar_t left, const basic_string_wchar *right)
2923 TRACE("%c %p\n", left, right);
2925 MSVCP_basic_string_wchar_ctor_cstr_len_alloc(ret, &left, 1, NULL);
2926 MSVCP_basic_string_wchar_append(ret, right);
2927 return ret;
2930 /* ??$?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 */
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@PEBGAEBV10@@Z */
2932 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBGABV10@@Z */
2933 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBGAEBV10@@Z */
2934 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate_cstr_bstr(basic_string_wchar *ret,
2935 const wchar_t *left, const basic_string_wchar *right)
2937 TRACE("%s %p\n", debugstr_w(left), right);
2939 MSVCP_basic_string_wchar_ctor_cstr_alloc(ret, left, NULL);
2940 MSVCP_basic_string_wchar_append(ret, right);
2941 return ret;
2944 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAGI@Z */
2945 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAG_K@Z */
2946 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_operator_at, 8)
2947 wchar_t* __thiscall MSVCP_basic_string_wchar_operator_at(
2948 basic_string_wchar *this, size_t pos)
2950 TRACE("%p %Iu\n", this, pos);
2952 if(!this->ptr || pos>this->size)
2953 return (wchar_t*)basic_string_wchar__Nullstr();
2955 basic_string_wchar__Freeze(this);
2956 return this->ptr+pos;
2959 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEABGI@Z */
2960 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAAEBG_K@Z */
2961 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_operator_at_const, 8)
2962 const wchar_t* __thiscall MSVCP_basic_string_wchar_operator_at_const(
2963 const basic_string_wchar *this, size_t pos)
2965 TRACE("%p %Iu\n", this, pos);
2967 if(!this->ptr)
2968 return basic_string_wchar__Nullstr();
2969 return this->ptr+pos;
2972 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAGI@Z */
2973 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAG_K@Z */
2974 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEABGI@Z */
2975 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAAEBG_K@Z */
2976 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_at, 8)
2977 wchar_t* __thiscall MSVCP_basic_string_wchar_at(
2978 basic_string_wchar *this, size_t pos)
2980 TRACE("%p %Iu\n", this, pos);
2982 if(this->size <= pos)
2983 _Xran();
2985 return this->ptr+pos;
2988 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIPBGI@Z */
2989 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0PEBG0@Z */
2990 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_cstr_len, 20)
2991 basic_string_wchar* __thiscall basic_string_wchar_replace_cstr_len(basic_string_wchar *this,
2992 size_t off, size_t len, const wchar_t *str, size_t str_len)
2994 size_t inside_pos = -1;
2995 wchar_t *ptr = this->ptr;
2997 TRACE("%p %Iu %Iu %p %Iu\n", this, off, len, str, str_len);
2999 if(this->size < off)
3000 _Xran();
3002 if(len > this->size-off)
3003 len = this->size-off;
3005 if(MSVCP_basic_string_wchar_npos-str_len <= this->size-len)
3006 _Xlen();
3008 if(basic_string_wchar_inside(this, str))
3009 inside_pos = str-ptr;
3011 if(this->size-len+str_len)
3012 basic_string_wchar__Grow(this, this->size-len+str_len, FALSE);
3013 ptr = this->ptr;
3015 if(inside_pos == -1) {
3016 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
3017 memcpy(ptr+off, str, str_len*sizeof(char));
3018 } else if(len >= str_len) {
3019 memmove(ptr+off, ptr+inside_pos, str_len*sizeof(char));
3020 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
3021 } else {
3022 size_t size;
3024 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
3026 if(inside_pos < off+len) {
3027 size = off+len-inside_pos;
3028 if(size > str_len)
3029 size = str_len;
3030 memmove(ptr+off, ptr+inside_pos, size*sizeof(char));
3031 } else {
3032 size = 0;
3035 if(str_len > size)
3036 memmove(ptr+off+size, ptr+off+str_len, (str_len-size)*sizeof(char));
3039 if(this->ptr)
3040 basic_string_wchar__Eos(this, this->size-len+str_len);
3041 return this;
3044 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIABV12@II@Z */
3045 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0AEBV12@00@Z */
3046 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_substr, 24)
3047 basic_string_wchar* __thiscall basic_string_wchar_replace_substr(basic_string_wchar *this, size_t off,
3048 size_t len, const basic_string_wchar *str, size_t str_off, size_t str_len)
3050 if(str->size < str_off)
3051 _Xran();
3053 if(str_len > str->size-str_off)
3054 str_len = str->size-str_off;
3056 return basic_string_wchar_replace_cstr_len(this, off, len,
3057 str->ptr+str_off, str_len);
3060 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIABV12@@Z */
3061 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0AEBV12@@Z */
3062 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace, 16)
3063 basic_string_wchar* __thiscall basic_string_wchar_replace(basic_string_wchar *this,
3064 size_t off, size_t len, const basic_string_wchar *str)
3066 return basic_string_wchar_replace_cstr_len(this, off, len,
3067 str->ptr, str->size);
3070 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIIG@Z */
3071 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K00G@Z */
3072 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_ch, 20)
3073 basic_string_wchar* __thiscall basic_string_wchar_replace_ch(basic_string_wchar *this,
3074 size_t off, size_t len, size_t count, wchar_t ch)
3076 wchar_t *ptr;
3078 TRACE("%p %Iu %Iu %Iu %c\n", this, off, len, count, ch);
3080 if(this->size < off)
3081 _Xran();
3083 if(len > this->size-off)
3084 len = this->size-off;
3086 if(MSVCP_basic_string_wchar_npos-count <= this->size-len)
3087 _Xlen();
3089 if(this->size-len+count)
3090 basic_string_wchar__Grow(this, this->size-len+count, FALSE);
3091 ptr = this->ptr;
3093 memmove(ptr+off+count, ptr+off+len, (this->size-off-len)*sizeof(char));
3094 MSVCP_char_traits_wchar_assignn(ptr+off, count, ch);
3095 basic_string_wchar__Eos(this, this->size-len+count);
3097 return this;
3100 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIPBG@Z */
3101 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0PEBG@Z */
3102 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_cstr, 16)
3103 basic_string_wchar* __thiscall basic_string_wchar_replace_cstr(basic_string_wchar *this,
3104 size_t off, size_t len, const wchar_t *str)
3106 return basic_string_wchar_replace_cstr_len(this, off, len, str,
3107 MSVCP_char_traits_wchar_length(str));
3110 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IABV12@@Z */
3111 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KAEBV12@@Z */
3112 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert, 12)
3113 basic_string_wchar* __thiscall basic_string_wchar_insert(basic_string_wchar *this,
3114 size_t off, const basic_string_wchar *str)
3116 return basic_string_wchar_replace(this, off, 0, str);
3119 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IABV12@II@Z */
3120 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KAEBV12@00@Z */
3121 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_substr, 20)
3122 basic_string_wchar* __thiscall basic_string_wchar_insert_substr(
3123 basic_string_wchar *this, size_t off, const basic_string_wchar *str,
3124 size_t str_off, size_t str_count)
3126 return basic_string_wchar_replace_substr(this, off, 0, str, str_off, str_count);
3129 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IPBG@Z */
3130 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KPEBG@Z */
3131 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_cstr, 12)
3132 basic_string_wchar* __thiscall basic_string_wchar_insert_cstr(
3133 basic_string_wchar *this, size_t off, const wchar_t *str)
3135 return basic_string_wchar_replace_cstr(this, off, 0, str);
3138 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IPBGI@Z */
3139 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KPEBG0@Z */
3140 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_cstr_len, 16)
3141 basic_string_wchar* __thiscall basic_string_wchar_insert_cstr_len(basic_string_wchar *this,
3142 size_t off, const wchar_t *str, size_t str_len)
3144 return basic_string_wchar_replace_cstr_len(this, off, 0, str, str_len);
3147 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIG@Z */
3148 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0G@Z */
3149 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_chn, 16)
3150 basic_string_wchar* __thiscall basic_string_wchar_insert_chn(basic_string_wchar *this,
3151 size_t off, size_t count, wchar_t ch)
3153 return basic_string_wchar_replace_ch(this, off, 0, count, ch);
3156 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXIG@Z */
3157 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_KG@Z */
3158 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_resize_ch, 12)
3159 void __thiscall MSVCP_basic_string_wchar_resize_ch(
3160 basic_string_wchar *this, size_t size, wchar_t ch)
3162 TRACE("%p %Iu %c\n", this, size, ch);
3164 if(size <= this->size)
3165 MSVCP_basic_string_wchar_erase(this, size, this->size);
3166 else
3167 MSVCP_basic_string_wchar_append_len_ch(this, size-this->size, ch);
3170 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXI@Z */
3171 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_K@Z */
3172 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_resize, 8)
3173 void __thiscall MSVCP_basic_string_wchar_resize(
3174 basic_string_wchar *this, size_t size)
3176 MSVCP_basic_string_wchar_resize_ch(this, size, '\0');
3179 /* ?c_str@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3180 /* ?c_str@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3181 /* ?data@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3182 /* ?data@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3183 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_c_str, 4)
3184 const wchar_t* __thiscall MSVCP_basic_string_wchar_c_str(const basic_string_wchar *this)
3186 TRACE("%p\n", this);
3187 return this->ptr ? this->ptr : basic_string_wchar__Nullstr();
3190 /* ?size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3191 /* ?size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3192 /* ?length@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3193 /* ?length@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3194 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_length, 4)
3195 size_t __thiscall MSVCP_basic_string_wchar_length(const basic_string_wchar *this)
3197 TRACE("%p\n", this);
3198 return this->size;
3201 /* ?max_size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3202 /* ?max_size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3203 DEFINE_THISCALL_WRAPPER(basic_string_wchar_max_size, 4)
3204 size_t __thiscall basic_string_wchar_max_size(const basic_string_wchar *this)
3206 TRACE("%p\n", this);
3207 return MSVCP_allocator_wchar_max_size(NULL)-1;
3210 /* ?capacity@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3211 /* ?capacity@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3212 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_capacity, 4)
3213 size_t __thiscall MSVCP_basic_string_wchar_capacity(basic_string_wchar *this)
3215 TRACE("%p\n", this);
3216 return this->res;
3219 /* ?reserve@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXI@Z */
3220 /* ?reserve@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_K@Z */
3221 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_reserve, 8)
3222 void __thiscall MSVCP_basic_string_wchar_reserve(basic_string_wchar *this, size_t size)
3224 size_t len;
3226 TRACE("%p %Iu\n", this, size);
3228 len = this->size;
3229 if(len > size)
3230 return;
3232 if(basic_string_wchar__Grow(this, size, FALSE))
3233 basic_string_wchar__Eos(this, len);
3236 /* ?empty@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE_NXZ */
3237 /* ?empty@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_NXZ */
3238 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_empty, 4)
3239 bool __thiscall MSVCP_basic_string_wchar_empty(basic_string_wchar *this)
3241 TRACE("%p\n", this);
3242 return this->size == 0;
3245 /* ?swap@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXAAV12@@Z */
3246 /* ?swap@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXAEAV12@@Z */
3247 DEFINE_THISCALL_WRAPPER(basic_string_wchar_swap, 8)
3248 void __thiscall basic_string_wchar_swap(basic_string_wchar *this, basic_string_wchar *str)
3250 basic_string_wchar tmp;
3251 TRACE("%p %p\n", this, str);
3253 tmp = *this;
3254 *this = *str;
3255 *str = tmp;
3258 /* ?substr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV12@II@Z */
3259 /* ?substr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV12@_K0@Z */
3260 DEFINE_THISCALL_WRAPPER(basic_string_wchar_substr, 16)
3261 basic_string_wchar* __thiscall basic_string_wchar_substr(basic_string_wchar *this,
3262 basic_string_wchar *ret, size_t off, size_t len)
3264 TRACE("%p %Iu %Iu\n", this, off, len);
3266 MSVCP_basic_string_wchar_ctor_substr_alloc(ret, this, off, len, NULL);
3267 return ret;
3270 /* ?copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPAGII@Z */
3271 /* ?copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEAG_K1@Z */
3272 DEFINE_THISCALL_WRAPPER(basic_string_wchar_copy, 16)
3273 size_t __thiscall basic_string_wchar_copy(const basic_string_wchar *this,
3274 wchar_t *dest, size_t count, size_t off)
3276 TRACE("%p %p %Iu %Iu\n", this, dest, count, off);
3278 if(off > this->size)
3279 _Xran();
3280 if(count > this->size-off)
3281 count = this->size-off;
3282 if(this->ptr)
3283 MSVCP_char_traits_wchar__Copy_s(dest, count, this->ptr+off, count);
3284 return count;
3287 /* ?get_allocator@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$allocator@G@2@XZ */
3288 /* ?get_allocator@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$allocator@G@2@XZ */
3289 DEFINE_THISCALL_WRAPPER(basic_string_wchar_get_allocator, 8)
3290 allocator* __thiscall basic_string_wchar_get_allocator(const basic_string_wchar *this, allocator *ret)
3292 TRACE("%p\n", this);
3293 return ret;
3296 /* Old iterator functions */
3298 /* ?_Pdif@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAIPBD0@Z */
3299 /* ?_Pdif@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CA_KPEBD0@Z */
3300 size_t __cdecl basic_string_char__Pdif(const char *i1, const char *i2)
3302 TRACE("(%p %p)\n", i1, i2);
3303 return !i1 ? 0 : i1-i2;
3306 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADPAD0@Z */
3307 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADPEAD0@Z */
3308 DEFINE_THISCALL_WRAPPER(basic_string_char_erase_iter, 12)
3309 char* __thiscall basic_string_char_erase_iter(basic_string_char *this, char *beg, char *end)
3311 size_t pos = basic_string_char__Pdif(beg, this->ptr);
3312 MSVCP_basic_string_char_erase(this, pos, basic_string_char__Pdif(end, beg));
3313 return basic_string_char__Psum(this->ptr, pos);
3316 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0PBD1@Z */
3317 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0PEBD1@Z */
3318 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_iter, 20)
3319 basic_string_char* __thiscall basic_string_char_replace_iter_iter(basic_string_char *this,
3320 char *beg1, char *end1, const char *beg2, const char *end2)
3322 return basic_string_char_replace_cstr_len(this, basic_string_char__Pdif(beg1, this->ptr),
3323 basic_string_char__Pdif(end1, beg1), beg2, basic_string_char__Pdif(end2, beg2));
3326 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0ABV12@@Z */
3327 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0AEBV12@@Z */
3328 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_bstr, 16)
3329 basic_string_char* __thiscall basic_string_char_replace_iter_bstr(basic_string_char *this,
3330 char *beg, char *end, const basic_string_char *str)
3332 return basic_string_char_replace(this, basic_string_char__Pdif(beg, this->ptr),
3333 basic_string_char__Pdif(end, beg), str);
3336 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0ID@Z */
3337 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0_KD@Z */
3338 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_chn, 20)
3339 basic_string_char* __thiscall basic_string_char_replace_iter_chn(basic_string_char *this,
3340 char *beg, char *end, size_t count, char ch)
3342 return basic_string_char_replace_ch(this, basic_string_char__Pdif(beg, this->ptr),
3343 basic_string_char__Pdif(end, beg), count, ch);
3346 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0PBD@Z */
3347 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0PEBD@Z */
3348 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_cstr, 16)
3349 basic_string_char* __thiscall basic_string_char_replace_iter_cstr(basic_string_char *this,
3350 char *beg, char *end, const char *str)
3352 return basic_string_char_replace_cstr(this, basic_string_char__Pdif(beg, this->ptr),
3353 basic_string_char__Pdif(end, beg), str);
3356 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0PBDI@Z */
3357 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0PEBD_K@Z */
3358 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_cstr_len, 20)
3359 basic_string_char* __thiscall basic_string_char_replace_iter_cstr_len(basic_string_char *this,
3360 char *beg, char *end, const char *str, size_t len)
3362 return basic_string_char_replace_cstr_len(this, basic_string_char__Pdif(beg, this->ptr),
3363 basic_string_char__Pdif(end, beg), str, len);
3366 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXPADID@Z */
3367 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXPEAD_KD@Z */
3368 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_chn, 16)
3369 void __thiscall basic_string_char_insert_iter_chn(basic_string_char *this,
3370 char *pos, size_t n, char ch)
3372 basic_string_char_insert_chn(this, basic_string_char__Pdif(pos, this->ptr), n, ch);
3375 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADPADD@Z */
3376 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADPEADD@Z */
3377 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_ch, 12)
3378 char* __thiscall basic_string_char_insert_iter_ch(basic_string_char *this, char *pos, char ch)
3380 size_t off = basic_string_char__Pdif(pos, this->ptr);
3381 basic_string_char_insert_chn(this, off, 1, ch);
3382 return basic_string_char__Psum(this->ptr, off);
3385 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADXZ */
3386 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADXZ */
3387 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
3388 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
3389 DEFINE_THISCALL_WRAPPER(basic_string_char_begin, 4)
3390 char* __thiscall basic_string_char_begin(basic_string_char *this)
3392 TRACE("(%p)\n", this);
3393 basic_string_char__Freeze(this);
3394 return this->ptr;
3397 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADXZ */
3398 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADXZ */
3399 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
3400 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
3401 DEFINE_THISCALL_WRAPPER(basic_string_char_end, 4)
3402 char* __thiscall basic_string_char_end(basic_string_char *this)
3404 TRACE("(%p)\n", this);
3405 basic_string_char__Freeze(this);
3406 return this->ptr+this->size;
3409 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$reverse_iterator@PADDAADPADH@2@XZ */
3410 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$reverse_iterator@PEADDAEADPEAD_J@2@XZ */
3411 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$reverse_iterator@PBDDABDPBDH@2@XZ */
3412 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$reverse_iterator@PEBDDAEBDPEBD_J@2@XZ */
3413 DEFINE_THISCALL_WRAPPER(basic_string_char_rbegin, 8)
3414 String_reverse_iterator_char* __thiscall basic_string_char_rbegin(
3415 basic_string_char *this, String_reverse_iterator_char *ret)
3417 TRACE("(%p %p)\n", this, ret);
3418 ret->ptr = basic_string_char_end(this);
3419 return ret;
3422 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$reverse_iterator@PADDAADPADH@2@XZ */
3423 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$reverse_iterator@PEADDAEADPEAD_J@2@XZ */
3424 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$reverse_iterator@PBDDABDPBDH@2@XZ */
3425 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$reverse_iterator@PEBDDAEBDPEBD_J@2@XZ */
3426 DEFINE_THISCALL_WRAPPER(basic_string_char_rend, 8)
3427 String_reverse_iterator_char* __thiscall basic_string_char_rend(
3428 basic_string_char *this, String_reverse_iterator_char *ret)
3430 TRACE("(%p %p)\n", this, ret);
3431 ret->ptr = basic_string_char_begin(this);
3432 return ret;
3435 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD0ABV?$allocator@D@1@@Z */
3436 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD0AEBV?$allocator@D@1@@Z */
3437 DEFINE_THISCALL_WRAPPER(basic_string_char_ctor_iter, 16)
3438 basic_string_char* __thiscall basic_string_char_ctor_iter(basic_string_char *this,
3439 const char *first, const char *last, allocator *alloc)
3441 TRACE("(%p %p %p %p)\n", this, first, last, alloc);
3443 basic_string_char__Tidy(this, FALSE);
3444 MSVCP_basic_string_char_assign_cstr_len(this, first, basic_string_char__Pdif(last, first));
3445 return this;
3448 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXPADPBD1@Z */
3449 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXPEADPEBD1@Z */
3450 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter, 16)
3451 void __thiscall basic_string_char_insert_iter(basic_string_char *this,
3452 char *pos, const char *beg, const char *end)
3454 basic_string_char_insert_cstr_len(this, basic_string_char__Pdif(pos, this->ptr),
3455 beg, basic_string_char__Pdif(end, beg));
3458 /* ?_Pdif@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAIPBG0@Z */
3459 /* ?_Pdif@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CA_KPEBG0@Z */
3460 size_t __cdecl basic_string_wchar__Pdif(const wchar_t *i1, const wchar_t *i2)
3462 TRACE("(%p %p)\n", i1, i2);
3463 return !i1 ? 0 : i1-i2;
3466 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGPAG0@Z */
3467 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGPEAG0@Z */
3468 DEFINE_THISCALL_WRAPPER(basic_string_wchar_erase_iter, 12)
3469 wchar_t* __thiscall basic_string_wchar_erase_iter(basic_string_wchar *this, wchar_t *beg, wchar_t *end)
3471 size_t pos = basic_string_wchar__Pdif(beg, this->ptr);
3472 MSVCP_basic_string_wchar_erase(this, pos, basic_string_wchar__Pdif(end, beg));
3473 return basic_string_wchar__Psum(this->ptr, pos);
3476 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBG0ABV?$allocator@G@1@@Z */
3477 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG0AEBV?$allocator@G@1@@Z */
3478 DEFINE_THISCALL_WRAPPER(basic_string_wchar_ctor_iter, 16)
3479 basic_string_wchar* __thiscall basic_string_wchar_ctor_iter(basic_string_wchar *this,
3480 const wchar_t *first, const wchar_t *last, allocator *alloc)
3482 TRACE("(%p %p %p %p)\n", this, first, last, alloc);
3484 basic_string_wchar__Tidy(this, FALSE);
3485 MSVCP_basic_string_wchar_assign_cstr_len(this, first, basic_string_wchar__Pdif(last, first));
3486 return this;
3489 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0PBG1@Z */
3490 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0PEBG1@Z */
3491 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_iter, 20)
3492 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_iter(basic_string_wchar *this,
3493 wchar_t *beg1, wchar_t *end1, const wchar_t *beg2, const wchar_t *end2)
3495 return basic_string_wchar_replace_cstr_len(this, basic_string_wchar__Pdif(beg1, this->ptr),
3496 basic_string_wchar__Pdif(end1, beg1), beg2, basic_string_wchar__Pdif(end2, beg2));
3499 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0ABV12@@Z */
3500 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0AEBV12@@Z */
3501 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_bstr, 16)
3502 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_bstr(basic_string_wchar *this,
3503 wchar_t *beg, wchar_t *end, const basic_string_wchar *str)
3505 return basic_string_wchar_replace(this, basic_string_wchar__Pdif(beg, this->ptr),
3506 basic_string_wchar__Pdif(end, beg), str);
3509 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0IG@Z */
3510 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0_KG@Z */
3511 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_chn, 20)
3512 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_chn(basic_string_wchar *this,
3513 wchar_t *beg, wchar_t *end, size_t count, wchar_t ch)
3515 return basic_string_wchar_replace_ch(this, basic_string_wchar__Pdif(beg, this->ptr),
3516 basic_string_wchar__Pdif(end, beg), count, ch);
3519 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0PBG@Z */
3520 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0PEBG@Z */
3521 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_cstr, 16)
3522 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_cstr(basic_string_wchar *this,
3523 wchar_t *beg, wchar_t *end, const wchar_t *str)
3525 return basic_string_wchar_replace_cstr(this, basic_string_wchar__Pdif(beg, this->ptr),
3526 basic_string_wchar__Pdif(end, beg), str);
3529 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0PBGI@Z */
3530 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0PEBG_K@Z */
3531 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_cstr_len, 20)
3532 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_cstr_len(basic_string_wchar *this,
3533 wchar_t *beg, wchar_t *end, const wchar_t *str, size_t len)
3535 return basic_string_wchar_replace_cstr_len(this, basic_string_wchar__Pdif(beg, this->ptr),
3536 basic_string_wchar__Pdif(end, beg), str, len);
3539 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXPAGIG@Z */
3540 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXPEAG_KG@Z */
3541 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_chn, 16)
3542 void __thiscall basic_string_wchar_insert_iter_chn(basic_string_wchar *this,
3543 wchar_t *pos, size_t n, wchar_t ch)
3545 basic_string_wchar_insert_chn(this, basic_string_wchar__Pdif(pos, this->ptr), n, ch);
3548 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGPAGG@Z */
3549 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGPEAGG@Z */
3550 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_ch, 12)
3551 wchar_t* __thiscall basic_string_wchar_insert_iter_ch(basic_string_wchar *this, wchar_t *pos, wchar_t ch)
3553 size_t off = basic_string_wchar__Pdif(pos, this->ptr);
3554 basic_string_wchar_insert_chn(this, off, 1, ch);
3555 return basic_string_wchar__Psum(this->ptr, off);
3558 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGXZ */
3559 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGXZ */
3560 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3561 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3562 DEFINE_THISCALL_WRAPPER(basic_string_wchar_begin, 4)
3563 wchar_t* __thiscall basic_string_wchar_begin(basic_string_wchar *this)
3565 TRACE("(%p)\n", this);
3566 basic_string_wchar__Freeze(this);
3567 return this->ptr;
3570 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGXZ */
3571 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGXZ */
3572 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3573 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3574 DEFINE_THISCALL_WRAPPER(basic_string_wchar_end, 4)
3575 wchar_t* __thiscall basic_string_wchar_end(basic_string_wchar *this)
3577 TRACE("(%p)\n", this);
3578 basic_string_wchar__Freeze(this);
3579 return this->ptr+this->size;
3582 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$reverse_iterator@PAGGAAGPAGH@2@XZ */
3583 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA?AV?$reverse_iterator@PEAGGAEAGPEAG_J@2@XZ */
3584 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$reverse_iterator@PBGGABGPBGH@2@XZ */
3585 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$reverse_iterator@PEBGGAEBGPEBG_J@2@XZ */
3586 DEFINE_THISCALL_WRAPPER(basic_string_wchar_rbegin, 8)
3587 String_reverse_iterator_wchar* __thiscall basic_string_wchar_rbegin(
3588 basic_string_wchar *this, String_reverse_iterator_wchar *ret)
3590 TRACE("(%p %p)\n", this, ret);
3591 ret->ptr = basic_string_wchar_end(this);
3592 return ret;
3595 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$reverse_iterator@PAGGAAGPAGH@2@XZ */
3596 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA?AV?$reverse_iterator@PEAGGAEAGPEAG_J@2@XZ */
3597 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$reverse_iterator@PBGGABGPBGH@2@XZ */
3598 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$reverse_iterator@PEBGGAEBGPEBG_J@2@XZ */
3599 DEFINE_THISCALL_WRAPPER(basic_string_wchar_rend, 8)
3600 String_reverse_iterator_wchar* __thiscall basic_string_wchar_rend(
3601 basic_string_wchar *this, String_reverse_iterator_wchar *ret)
3603 TRACE("(%p %p)\n", this, ret);
3604 ret->ptr = basic_string_wchar_begin(this);
3605 return ret;
3608 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXPAGPBG1@Z */
3609 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXPEAGPEBG1@Z */
3610 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter, 16)
3611 void __thiscall basic_string_wchar_insert_iter(basic_string_wchar *this,
3612 wchar_t *pos, const wchar_t *beg, const wchar_t *end)
3614 basic_string_wchar_insert_cstr_len(this, basic_string_wchar__Pdif(pos, this->ptr),
3615 beg, basic_string_wchar__Pdif(end, beg));