ntdll/tests: Remove an unneeded NONAMELESSSTRUCT directive.
[wine.git] / dlls / msvcp60 / string.c
blob229c3ca5fc948f3c9534baf225900ec85baad309
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
19 #include "config.h"
21 #include <stdarg.h>
23 #include "msvcp.h"
24 #include "stdio.h"
25 #include "assert.h"
27 #include "windef.h"
28 #include "winbase.h"
29 #include "wine/debug.h"
30 WINE_DEFAULT_DEBUG_CHANNEL(msvcp);
32 #define FROZEN 255
34 /* _String_iterator<char> and _String_const_iterator<char> class */
35 typedef struct {
36 char *ptr;
37 } String_reverse_iterator_char;
39 typedef struct {
40 wchar_t *ptr;
41 } String_reverse_iterator_wchar;
43 /* allocator class */
44 typedef struct {
45 char empty_struct;
46 } allocator;
48 /* ?_Xran@std@@YAXXZ */
49 void __cdecl _Xran(void)
51 static const char msg[] = "invalid string position";
53 TRACE("\n");
54 throw_exception(EXCEPTION_OUT_OF_RANGE, msg);
57 /* ?_Xlen@std@@YAXXZ */
58 void __cdecl _Xlen(void)
60 static const char msg[] = "string too long";
62 TRACE("\n");
63 throw_exception(EXCEPTION_LENGTH_ERROR, msg);
66 /* ?compare@?$char_traits@D@std@@SAHPBD0I@Z */
67 /* ?compare@?$char_traits@D@std@@SAHPEBD0_K@Z */
68 int CDECL MSVCP_char_traits_char_compare(
69 const char *s1, const char *s2, MSVCP_size_t count)
71 int ret = memcmp(s1, s2, count);
72 return (ret>0 ? 1 : (ret<0 ? -1 : 0));
75 /* ?length@?$char_traits@D@std@@SAIPBD@Z */
76 /* ?length@?$char_traits@D@std@@SA_KPEBD@Z */
77 MSVCP_size_t CDECL MSVCP_char_traits_char_length(const char *str)
79 return strlen(str);
82 /* ?_Copy_s@?$char_traits@D@std@@SAPADPADIPBDI@Z */
83 /* ?_Copy_s@?$char_traits@D@std@@SAPEADPEAD_KPEBD1@Z */
84 char* CDECL MSVCP_char_traits_char__Copy_s(char *dest,
85 MSVCP_size_t size, const char *src, MSVCP_size_t count)
87 if(!dest || !src || size<count) {
88 if(dest && size)
89 dest[0] = '\0';
90 _invalid_parameter(NULL, NULL, NULL, 0, 0);
91 return dest;
94 return memcpy(dest, src, count);
97 /* ?copy@?$char_traits@D@std@@SAPADPADPBDI@Z */
98 /* ?copy@?$char_traits@D@std@@SAPEADPEADPEBD_K@Z */
99 char* CDECL MSVCP_char_traits_char_copy(
100 char *dest, const char *src, MSVCP_size_t count)
102 return MSVCP_char_traits_char__Copy_s(dest, count, src, count);
105 /* ?find@?$char_traits@D@std@@SAPBDPBDIABD@Z */
106 /* ?find@?$char_traits@D@std@@SAPEBDPEBD_KAEBD@Z */
107 const char * CDECL MSVCP_char_traits_char_find(
108 const char *str, MSVCP_size_t range, const char *c)
110 return memchr(str, *c, range);
113 /* ?_Move_s@?$char_traits@D@std@@SAPADPADIPBDI@Z */
114 /* ?_Move_s@?$char_traits@D@std@@SAPEADPEAD_KPEBD1@Z */
115 char* CDECL MSVCP_char_traits_char__Move_s(char *dest,
116 MSVCP_size_t size, const char *src, MSVCP_size_t count)
118 if(!dest || !src || size<count) {
119 if(dest && size)
120 dest[0] = '\0';
121 _invalid_parameter(NULL, NULL, NULL, 0, 0);
122 return dest;
125 return memmove(dest, src, count);
128 /* ?move@?$char_traits@D@std@@SAPADPADPBDI@Z */
129 /* ?move@?$char_traits@D@std@@SAPEADPEADPEBD_K@Z */
130 char* CDECL MSVCP_char_traits_char_move(
131 char *dest, const char *src, MSVCP_size_t count)
133 return MSVCP_char_traits_char__Move_s(dest, count, src, count);
136 /* ?assign@?$char_traits@D@std@@SAPADPADID@Z */
137 /* ?assign@?$char_traits@D@std@@SAPEADPEAD_KD@Z */
138 char* CDECL MSVCP_char_traits_char_assignn(char *str, MSVCP_size_t num, char c)
140 return memset(str, c, num);
143 /* ?compare@?$char_traits@_W@std@@SAHPB_W0I@Z */
144 /* ?compare@?$char_traits@_W@std@@SAHPEB_W0_K@Z */
145 int CDECL MSVCP_char_traits_wchar_compare(const wchar_t *s1,
146 const wchar_t *s2, MSVCP_size_t count)
148 MSVCP_size_t i;
149 int ret = 0;
151 for (i = 0; i < count && !ret; i++) ret = s1[i] - s2[i];
152 return (ret>0 ? 1 : (ret<0 ? -1 : 0));
155 /* ?length@?$char_traits@_W@std@@SAIPB_W@Z */
156 /* ?length@?$char_traits@_W@std@@SA_KPEB_W@Z */
157 MSVCP_size_t CDECL MSVCP_char_traits_wchar_length(const wchar_t *str)
159 return wcslen((WCHAR*)str);
162 /* ?_Copy_s@?$char_traits@_W@std@@SAPA_WPA_WIPB_WI@Z */
163 /* ?_Copy_s@?$char_traits@_W@std@@SAPEA_WPEA_W_KPEB_W1@Z */
164 wchar_t* CDECL MSVCP_char_traits_wchar__Copy_s(wchar_t *dest,
165 MSVCP_size_t size, const wchar_t *src, MSVCP_size_t count)
167 if(!dest || !src || size<count) {
168 if(dest && size)
169 dest[0] = '\0';
170 _invalid_parameter(NULL, NULL, NULL, 0, 0);
171 return dest;
174 return memcpy(dest, src, count * sizeof(wchar_t));
177 /* ?copy@?$char_traits@_W@std@@SAPA_WPA_WPB_WI@Z */
178 /* ?copy@?$char_traits@_W@std@@SAPEA_WPEA_WPEB_W_K@Z */
179 wchar_t* CDECL MSVCP_char_traits_wchar_copy(wchar_t *dest,
180 const wchar_t *src, MSVCP_size_t count)
182 return MSVCP_char_traits_wchar__Copy_s(dest, count, src, count);
185 /* ?find@?$char_traits@_W@std@@SAPB_WPB_WIAB_W@Z */
186 /* ?find@?$char_traits@_W@std@@SAPEB_WPEB_W_KAEB_W@Z */
187 const wchar_t* CDECL MSVCP_char_traits_wchar_find(
188 const wchar_t *str, MSVCP_size_t range, const wchar_t *c)
190 MSVCP_size_t i=0;
192 for(i=0; i<range; i++)
193 if(str[i] == *c)
194 return str+i;
196 return NULL;
199 /* ?_Move_s@?$char_traits@_W@std@@SAPA_WPA_WIPB_WI@Z */
200 /* ?_Move_s@?$char_traits@_W@std@@SAPEA_WPEA_W_KPEB_W1@Z */
201 wchar_t* CDECL MSVCP_char_traits_wchar__Move_s(wchar_t *dest,
202 MSVCP_size_t size, const wchar_t *src, MSVCP_size_t count)
204 if(!dest || !src || size<count) {
205 if(dest && size)
206 dest[0] = '\0';
207 _invalid_parameter(NULL, NULL, NULL, 0, 0);
208 return dest;
211 return memmove(dest, src, count * sizeof(WCHAR));
214 /* ?move@?$char_traits@_W@std@@SAPA_WPA_WPB_WI@Z */
215 /* ?move@?$char_traits@_W@std@@SAPEA_WPEA_WPEB_W_K@Z */
216 wchar_t* CDECL MSVCP_char_traits_wchar_move(wchar_t *dest,
217 const wchar_t *src, MSVCP_size_t count)
219 return MSVCP_char_traits_wchar__Move_s(dest, count, src, count);
222 /* ?assign@?$char_traits@_W@std@@SAPA_WPA_WI_W@Z */
223 /* ?assign@?$char_traits@_W@std@@SAPEA_WPEA_W_K_W@Z */
224 wchar_t* CDECL MSVCP_char_traits_wchar_assignn(wchar_t *str,
225 MSVCP_size_t num, wchar_t c)
227 MSVCP_size_t i;
229 for(i=0; i<num; i++)
230 str[i] = c;
232 return str;
235 static MSVCP_bool basic_string_char_inside(
236 basic_string_char *this, const char *ptr)
238 return ptr>=this->ptr && ptr<this->ptr+this->size;
241 /* ?npos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@2IB */
242 /* ?npos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@2_KB */
243 const MSVCP_size_t MSVCP_basic_string_char_npos = -1;
245 /* ?_C@?1??_Nullstr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPBDXZ@4DB */
246 /* ?_C@?1??_Nullstr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPEBDXZ@4DB */
247 const char basic_string_char_nullbyte = '\0';
249 /* ?_Nullstr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPBDXZ */
250 /* ?_Nullstr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPEBDXZ */
251 const char* __cdecl basic_string_char__Nullstr(void)
253 return &basic_string_char_nullbyte;
256 /* ?_Refcnt@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEAAEPBD@Z */
257 /* ?_Refcnt@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAAEAEPEBD@Z */
258 DEFINE_THISCALL_WRAPPER(basic_string_char__Refcnt, 8)
259 unsigned char* __thiscall basic_string_char__Refcnt(basic_string_char *this, const char *ptr)
261 TRACE("(%p %p)\n", this, ptr);
262 return (unsigned char*)ptr-1;
265 /* ?_Eos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXI@Z */
266 /* ?_Eos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAX_K@Z */
267 DEFINE_THISCALL_WRAPPER(basic_string_char__Eos, 8)
268 void __thiscall basic_string_char__Eos(basic_string_char *this, MSVCP_size_t len)
270 this->size = len;
271 this->ptr[len] = 0;
274 /* ?clear@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */
275 /* ?clear@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */
276 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_clear, 4)
277 void __thiscall MSVCP_basic_string_char_clear(basic_string_char *this)
279 if(this->ptr)
280 basic_string_char__Eos(this, 0);
283 /* ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEX_N@Z */
284 /* ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAX_N@Z */
285 DEFINE_THISCALL_WRAPPER(basic_string_char__Tidy, 8)
286 void __thiscall basic_string_char__Tidy(basic_string_char *this, MSVCP_bool built)
288 TRACE("(%p %d)\n", this, built);
290 if(!built || !this->ptr);
291 else if(!this->ptr[-1] || (unsigned char)this->ptr[-1]==FROZEN)
292 MSVCP_allocator_char_deallocate(NULL, this->ptr-1, this->res+2);
293 else
294 this->ptr[-1]--;
296 memset(this, 0, sizeof(*this));
299 /* ?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAE_NI_N@Z */
300 /* ?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAA_N_K_N@Z */
301 DEFINE_THISCALL_WRAPPER(basic_string_char__Grow, 12)
302 MSVCP_bool __thiscall basic_string_char__Grow(basic_string_char *this, MSVCP_size_t new_size, MSVCP_bool trim)
304 if(!new_size) {
305 if(trim)
306 basic_string_char__Tidy(this, TRUE);
307 else if(this->ptr)
308 basic_string_char__Eos(this, 0);
309 } else if(this->res<new_size || trim ||
310 (this->ptr && this->ptr[-1] && (unsigned char)this->ptr[-1]!=FROZEN)) {
311 MSVCP_size_t new_res = new_size, len = this->size;
312 char *ptr;
314 if(!trim && this->ptr && !this->ptr[-1]) {
315 new_res |= 0xf;
316 if(new_res/3 < this->res/2)
317 new_res = this->res + this->res/2;
320 ptr = MSVCP_allocator_char_allocate(this->allocator, new_res+2);
321 if(!ptr) {
322 new_res = new_size;
323 ptr = MSVCP_allocator_char_allocate(this->allocator, new_size+2);
325 if(!ptr) {
326 ERR("Out of memory\n");
327 return FALSE;
330 if(len > new_res)
331 len = new_res;
333 *ptr = 0;
334 if(this->ptr)
335 MSVCP_char_traits_char__Copy_s(ptr+1, new_size, this->ptr, len);
336 basic_string_char__Tidy(this, TRUE);
337 this->ptr = ptr+1;
338 this->res = new_res;
339 basic_string_char__Eos(this, len);
342 return new_size>0;
345 /* ?_Split@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXXZ */
346 /* ?_Split@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAXXZ */
347 DEFINE_THISCALL_WRAPPER(basic_string_char__Split, 4)
348 void __thiscall basic_string_char__Split(basic_string_char *this)
350 MSVCP_size_t len;
351 char *ptr;
353 TRACE("(%p)\n", this);
355 if(!this->ptr || !this->ptr[-1] || (unsigned char)this->ptr[-1]==FROZEN)
356 return;
358 ptr = this->ptr;
359 len = this->size;
360 basic_string_char__Tidy(this, TRUE);
361 if(basic_string_char__Grow(this, len, FALSE)) {
362 if(ptr)
363 MSVCP_char_traits_char__Copy_s(this->ptr, this->res, ptr, len);
364 basic_string_char__Eos(this, len);
368 /* ?_Freeze@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXXZ */
369 /* ?_Freeze@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAXXZ */
370 DEFINE_THISCALL_WRAPPER(basic_string_char__Freeze, 4)
371 void __thiscall basic_string_char__Freeze(basic_string_char *this)
373 TRACE("(%p)\n", this);
374 basic_string_char__Split(this);
375 if(this->ptr)
376 this->ptr[-1] = FROZEN;
379 /* ?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXI@Z */
380 /* ?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAX_K@Z */
381 DEFINE_THISCALL_WRAPPER(basic_string_char__Copy, 8)
382 void __thiscall basic_string_char__Copy(basic_string_char *this, MSVCP_size_t copy_len)
384 TRACE("%p %lu\n", this, copy_len);
386 if(!basic_string_char__Grow(this, copy_len, TRUE))
387 return;
390 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPADPADI@Z */
391 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPEADPEAD_K@Z */
392 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPBDPBDI@Z */
393 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPEBDPEBD_K@Z */
394 char* __cdecl basic_string_char__Psum(char *iter, MSVCP_size_t add)
396 TRACE("(%p %lu)\n", iter, add);
397 return iter ? iter+add : iter;
400 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@II@Z */
401 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0@Z */
402 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_erase, 12)
403 basic_string_char* __thiscall MSVCP_basic_string_char_erase(
404 basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t len)
406 TRACE("%p %lu %lu\n", this, pos, len);
408 if(pos > this->size)
409 _Xran();
411 if(len > this->size-pos)
412 len = this->size-pos;
414 if(len) {
415 basic_string_char__Split(this);
416 MSVCP_char_traits_char__Move_s(this->ptr+pos, this->res-pos,
417 this->ptr+pos+len, this->size-pos-len);
418 basic_string_char__Eos(this, this->size-len);
421 return this;
424 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADPAD@Z */
425 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADPEAD@Z */
426 DEFINE_THISCALL_WRAPPER(basic_string_char_erase_beg, 8)
427 char* __thiscall basic_string_char_erase_beg(basic_string_char *this, char *beg)
429 MSVCP_size_t pos = beg-this->ptr;
430 MSVCP_basic_string_char_erase(this, pos, 1);
431 return this->ptr+pos;
434 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z */
435 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
436 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_substr, 16)
437 basic_string_char* __thiscall MSVCP_basic_string_char_assign_substr(
438 basic_string_char *this, const basic_string_char *assign,
439 MSVCP_size_t pos, MSVCP_size_t len)
441 TRACE("%p %p %lu %lu\n", this, assign, pos, len);
443 if(assign->size < pos)
444 _Xran();
446 if(len > assign->size-pos)
447 len = assign->size-pos;
449 if(this == assign) {
450 MSVCP_basic_string_char_erase(this, pos+len, MSVCP_basic_string_char_npos);
451 MSVCP_basic_string_char_erase(this, 0, pos);
452 } else if(basic_string_char__Grow(this, len, FALSE)) {
453 if(assign->ptr)
454 MSVCP_char_traits_char__Copy_s(this->ptr, this->res, assign->ptr+pos, len);
455 basic_string_char__Eos(this, len);
458 return this;
461 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z */
462 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD_K@Z */
463 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_cstr_len, 12)
464 basic_string_char* __thiscall MSVCP_basic_string_char_assign_cstr_len(
465 basic_string_char *this, const char *str, MSVCP_size_t len)
467 TRACE("%p %s %lu\n", this, debugstr_an(str, len), len);
469 if(basic_string_char_inside(this, str))
470 return MSVCP_basic_string_char_assign_substr(this, this, str-this->ptr, len);
471 else if(basic_string_char__Grow(this, len, FALSE)) {
472 MSVCP_char_traits_char__Copy_s(this->ptr, this->res, str, len);
473 basic_string_char__Eos(this, len);
476 return this;
479 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@@Z */
480 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@@Z */
481 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@ABV01@@Z */
482 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@AEBV01@@Z */
483 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign, 8)
484 basic_string_char* __thiscall MSVCP_basic_string_char_assign(
485 basic_string_char *this, const basic_string_char *assign)
487 return MSVCP_basic_string_char_assign_substr(this, assign,
488 0, MSVCP_basic_string_char_npos);
491 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z */
492 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD@Z */
493 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z */
494 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@PEBD@Z */
495 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_cstr, 8)
496 basic_string_char* __thiscall MSVCP_basic_string_char_assign_cstr(
497 basic_string_char *this, const char *str)
499 return MSVCP_basic_string_char_assign_cstr_len(this, str,
500 MSVCP_char_traits_char_length(str));
503 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@D@Z */
504 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@D@Z */
505 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_ch, 8)
506 basic_string_char* __thiscall MSVCP_basic_string_char_assign_ch(
507 basic_string_char *this, char ch)
509 return MSVCP_basic_string_char_assign_cstr_len(this, &ch, 1);
512 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ID@Z */
513 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KD@Z */
514 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assignn, 12)
515 basic_string_char* __thiscall MSVCP_basic_string_char_assignn(
516 basic_string_char *this, MSVCP_size_t count, char ch)
518 TRACE("%p %ld %c\n", this, count, ch);
520 basic_string_char__Grow(this, count, FALSE);
521 MSVCP_char_traits_char_assignn(this->ptr, count, ch);
522 basic_string_char__Eos(this, count);
523 return this;
526 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD0@Z */
527 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD0@Z */
528 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_ptr_ptr, 12)
529 basic_string_char* __thiscall MSVCP_basic_string_char_assign_ptr_ptr(
530 basic_string_char *this, const char *first, const char *last)
532 return MSVCP_basic_string_char_assign_cstr_len(this, first, last-first);
535 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDIABV?$allocator@D@1@@Z */
536 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD_KAEBV?$allocator@D@1@@Z */
537 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr_len_alloc, 16)
538 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr_len_alloc(
539 basic_string_char *this, const char *str, MSVCP_size_t len, const void *alloc)
541 TRACE("%p %s %ld\n", this, debugstr_an(str, len), len);
543 basic_string_char__Tidy(this, FALSE);
544 MSVCP_basic_string_char_assign_cstr_len(this, str, len);
545 return this;
548 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDI@Z */
549 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD_K@Z */
550 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr_len, 12)
551 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr_len(
552 basic_string_char *this, const char *str, MSVCP_size_t len)
554 return MSVCP_basic_string_char_ctor_cstr_len_alloc(this, str, len, NULL);
557 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@IIABV?$allocator@D@1@@Z */
558 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV01@_K1AEBV?$allocator@D@1@@Z */
559 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_substr_alloc, 20)
560 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_substr_alloc(
561 basic_string_char *this, const basic_string_char *assign,
562 MSVCP_size_t pos, MSVCP_size_t len, const void *alloc)
564 TRACE("%p %p %lu %lu\n", this, assign, pos, len);
566 basic_string_char__Tidy(this, FALSE);
567 MSVCP_basic_string_char_assign_substr(this, assign, pos, len);
568 return this;
571 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDABV?$allocator@D@1@@Z */
572 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBDAEBV?$allocator@D@1@@Z */
573 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr_alloc, 12)
574 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr_alloc(
575 basic_string_char *this, const char *str, const void *alloc)
577 TRACE("%p %s\n", this, debugstr_a(str));
579 basic_string_char__Tidy(this, FALSE);
580 MSVCP_basic_string_char_assign_cstr(this, str);
581 return this;
584 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z */
585 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD@Z */
586 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr, 8)
587 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr(
588 basic_string_char *this, const char *str)
590 return MSVCP_basic_string_char_ctor_cstr_alloc(this, str, NULL);
593 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@IDABV?$allocator@D@1@@Z */
594 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@_KDAEBV?$allocator@D@1@@Z */
595 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_ch_alloc, 16)
596 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_ch_alloc(basic_string_char *this,
597 MSVCP_size_t count, char ch, const void *alloc)
599 TRACE("%p %ld %c\n", this, count, ch);
601 basic_string_char__Tidy(this, FALSE);
602 MSVCP_basic_string_char_assignn(this, count, ch);
603 return this;
606 /* ??_F?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */
607 /* ??_F?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */
608 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor, 4)
609 basic_string_char* __thiscall MSVCP_basic_string_char_ctor(basic_string_char *this)
611 TRACE("%p\n", this);
613 basic_string_char__Tidy(this, FALSE);
614 return this;
617 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV?$allocator@D@1@@Z */
618 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV?$allocator@D@1@@Z */
619 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_alloc, 8)
620 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_alloc(
621 basic_string_char *this, const void *alloc)
623 TRACE("%p %p\n", this, alloc);
625 basic_string_char__Tidy(this, FALSE);
626 return this;
629 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z */
630 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV01@@Z */
631 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_copy_ctor, 8)
632 basic_string_char* __thiscall MSVCP_basic_string_char_copy_ctor(
633 basic_string_char *this, const basic_string_char *copy)
635 TRACE("%p %p\n", this, copy);
637 basic_string_char__Tidy(this, FALSE);
638 MSVCP_basic_string_char_assign(this, copy);
639 return this;
642 /* ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ */
643 /* ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@XZ */
644 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_dtor, 4)
645 void __thiscall MSVCP_basic_string_char_dtor(basic_string_char *this)
647 TRACE("%p\n", this);
648 basic_string_char__Tidy(this, TRUE);
651 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIPBDI@Z */
652 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0PEBD0@Z */
653 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_cstr_len, 20)
654 int __thiscall MSVCP_basic_string_char_compare_substr_cstr_len(
655 const basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t num,
656 const char *str, MSVCP_size_t count)
658 int ans;
660 TRACE("%p %lu %lu %s %lu\n", this, pos, num, debugstr_an(str, count), count);
662 if(this->size < pos)
663 _Xran();
665 if(num > this->size-pos)
666 num = this->size-pos;
668 ans = MSVCP_char_traits_char_compare(this->ptr+pos,
669 str, num>count ? count : num);
670 if(ans)
671 return ans;
673 if(num > count)
674 ans = 1;
675 else if(num < count)
676 ans = -1;
677 return ans;
680 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHPBD@Z */
681 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAHPEBD@Z */
682 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_cstr, 8)
683 int __thiscall MSVCP_basic_string_char_compare_cstr(
684 const basic_string_char *this, const char *str)
686 return MSVCP_basic_string_char_compare_substr_cstr_len(this, 0, this->size,
687 str, MSVCP_char_traits_char_length(str));
690 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIABV12@II@Z */
691 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0AEBV12@00@Z */
692 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_substr, 24)
693 int __thiscall MSVCP_basic_string_char_compare_substr_substr(
694 const basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t num,
695 const basic_string_char *compare, MSVCP_size_t off, MSVCP_size_t count)
697 TRACE("%p %lu %lu %p %lu %lu\n", this, pos, num, compare, off, count);
699 if(compare->size < off)
700 _Xran();
702 if(count > compare->size-off)
703 count = compare->size-off;
705 return MSVCP_basic_string_char_compare_substr_cstr_len(this, pos, num,
706 compare->ptr+off, count);
709 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIABV12@@Z */
710 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0AEBV12@@Z */
711 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr, 16)
712 int __thiscall MSVCP_basic_string_char_compare_substr(
713 const basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t num,
714 const basic_string_char *compare)
716 return MSVCP_basic_string_char_compare_substr_cstr_len(this, pos, num,
717 compare->ptr, compare->size);
720 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHABV12@@Z */
721 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAHAEBV12@@Z */
722 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare, 8)
723 int __thiscall MSVCP_basic_string_char_compare(
724 const basic_string_char *this, const basic_string_char *compare)
726 return MSVCP_basic_string_char_compare_substr_cstr_len(this, 0, this->size,
727 compare->ptr, compare->size);
730 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIPBD@Z */
731 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0PEBD@Z */
732 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_cstr, 16)
733 int __thiscall MSVCP_basic_string_char_compare_substr_cstr(const basic_string_char *this,
734 MSVCP_size_t pos, MSVCP_size_t num, const char *str)
736 return MSVCP_basic_string_char_compare_substr_cstr_len(this, pos, num,
737 str, MSVCP_char_traits_char_length(str));
740 /* ??$?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 */
741 /* ??$?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 */
742 /* ??8std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
743 /* ??8std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
744 MSVCP_bool __cdecl MSVCP_basic_string_char_equal(
745 const basic_string_char *left, const basic_string_char *right)
747 return MSVCP_basic_string_char_compare(left, right) == 0;
750 /* ??$?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 */
751 /* ??$?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 */
752 /* ??8std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
753 /* ??8std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
754 MSVCP_bool __cdecl MSVCP_basic_string_char_equal_str_cstr(
755 const basic_string_char *left, const char *right)
757 return MSVCP_basic_string_char_compare_cstr(left, right) == 0;
760 /* ??$?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 */
761 /* ??$?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 */
762 /* ??8std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
763 /* ??8std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
764 MSVCP_bool __cdecl MSVCP_basic_string_char_equal_cstr_str(
765 const char *left, const basic_string_char *right)
767 return MSVCP_basic_string_char_compare_cstr(right, left) == 0;
770 /* ??$?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 */
771 /* ??$?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 */
772 /* ??9std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
773 /* ??9std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
774 MSVCP_bool __cdecl MSVCP_basic_string_char_not_equal(
775 const basic_string_char *left, const basic_string_char *right)
777 return MSVCP_basic_string_char_compare(left, right) != 0;
780 /* ??$?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 */
781 /* ??$?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 */
782 /* ??9std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
783 /* ??9std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
784 MSVCP_bool __cdecl MSVCP_basic_string_char_not_equal_str_cstr(
785 const basic_string_char *left, const char *right)
787 return MSVCP_basic_string_char_compare_cstr(left, right) != 0;
790 /* ??$?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 */
791 /* ??$?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 */
792 /* ??9std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
793 /* ??9std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
794 MSVCP_bool __cdecl MSVCP_basic_string_char_not_equal_cstr_str(
795 const char *left, const basic_string_char *right)
797 return MSVCP_basic_string_char_compare_cstr(right, left) != 0;
800 /* ??$?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 */
801 /* ??$?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 */
802 /* ??Mstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
803 /* ??Mstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
804 MSVCP_bool __cdecl MSVCP_basic_string_char_lower(
805 const basic_string_char *left, const basic_string_char *right)
807 return MSVCP_basic_string_char_compare(left, right) < 0;
810 /* ??$?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 */
811 /* ??$?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 */
812 /* ??Mstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
813 /* ??Mstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
814 MSVCP_bool __cdecl MSVCP_basic_string_char_lower_bstr_cstr(
815 const basic_string_char *left, const char *right)
817 return MSVCP_basic_string_char_compare_cstr(left, right) < 0;
820 /* ??$?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 */
821 /* ??$?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 */
822 /* ??Mstd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
823 /* ??Mstd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
824 MSVCP_bool __cdecl MSVCP_basic_string_char_lower_cstr_bstr(
825 const char *left, const basic_string_char *right)
827 return MSVCP_basic_string_char_compare_cstr(right, left) > 0;
830 /* ??$?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 */
831 /* ??$?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 */
832 /* ??Nstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
833 /* ??Nstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
834 MSVCP_bool __cdecl MSVCP_basic_string_char_leq(
835 const basic_string_char *left, const basic_string_char *right)
837 return MSVCP_basic_string_char_compare(left, right) <= 0;
840 /* ??$?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 */
841 /* ??$?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 */
842 /* ??Nstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
843 /* ??Nstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
844 MSVCP_bool __cdecl MSVCP_basic_string_char_leq_bstr_cstr(
845 const basic_string_char *left, const char *right)
847 return MSVCP_basic_string_char_compare_cstr(left, right) <= 0;
850 /* ??$?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 */
851 /* ??$?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 */
852 /* ??Nstd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
853 /* ??Nstd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
854 MSVCP_bool __cdecl MSVCP_basic_string_char_leq_cstr_bstr(
855 const char *left, const basic_string_char *right)
857 return MSVCP_basic_string_char_compare_cstr(right, left) >= 0;
860 /* ??$?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 */
861 /* ??$?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 */
862 /* ??Ostd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
863 /* ??Ostd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
864 MSVCP_bool __cdecl MSVCP_basic_string_char_greater(
865 const basic_string_char *left, const basic_string_char *right)
867 return MSVCP_basic_string_char_compare(left, right) > 0;
870 /* ??$?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 */
871 /* ??$?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 */
872 /* ??Ostd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
873 /* ??Ostd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
874 MSVCP_bool __cdecl MSVCP_basic_string_char_greater_bstr_cstr(
875 const basic_string_char *left, const char *right)
877 return MSVCP_basic_string_char_compare_cstr(left, right) > 0;
880 /* ??$?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 */
881 /* ??$?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 */
882 /* ??Ostd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
883 /* ??Ostd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
884 MSVCP_bool __cdecl MSVCP_basic_string_char_greater_cstr_bstr(
885 const char *left, const basic_string_char *right)
887 return MSVCP_basic_string_char_compare_cstr(right, left) < 0;
890 /* ??$?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 */
891 /* ??$?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 */
892 /* ??Pstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
893 /* ??Pstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
894 MSVCP_bool __cdecl MSVCP_basic_string_char_geq(
895 const basic_string_char *left, const basic_string_char *right)
897 return MSVCP_basic_string_char_compare(left, right) >= 0;
900 /* ??$?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 */
901 /* ??$?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 */
902 /* ??Pstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
903 /* ??Pstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
904 MSVCP_bool __cdecl MSVCP_basic_string_char_geq_bstr_cstr(
905 const basic_string_char *left, const char *right)
907 return MSVCP_basic_string_char_compare_cstr(left, right) >= 0;
910 /* ??$?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 */
911 /* ??$?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 */
912 /* ??Pstd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
913 /* ??Pstd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
914 MSVCP_bool __cdecl MSVCP_basic_string_char_geq_cstr_bstr(
915 const char *left, const basic_string_char *right)
917 return MSVCP_basic_string_char_compare_cstr(right, left) <= 0;
920 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
921 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
922 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_cstr_substr, 16)
923 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_cstr_substr(
924 const basic_string_char *this, const char *find, MSVCP_size_t pos, MSVCP_size_t len)
926 const char *p, *end;
928 TRACE("%p %s %lu %lu\n", this, debugstr_an(find, len), pos, len);
930 if(len==0 && pos<=this->size)
931 return pos;
932 if(pos>=this->size || len>this->size)
933 return MSVCP_basic_string_char_npos;
935 end = this->ptr+this->size-len+1;
936 for(p=this->ptr+pos; p<end; p++) {
937 p = MSVCP_char_traits_char_find(p, end-p, find);
938 if(!p)
939 break;
941 if(!MSVCP_char_traits_char_compare(p, find, len))
942 return p-this->ptr;
945 return MSVCP_basic_string_char_npos;
948 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
949 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
950 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_off, 12)
951 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_off(
952 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
954 return MSVCP_basic_string_char_find_cstr_substr(this, find->ptr, off, find->size);
957 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
958 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
959 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_ch, 12)
960 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_ch(
961 const basic_string_char *this, char ch, MSVCP_size_t pos)
963 return MSVCP_basic_string_char_find_cstr_substr(this, &ch, pos, 1);
966 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
967 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
968 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_cstr_off, 12)
969 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_cstr_off(
970 const basic_string_char *this, const char *find, MSVCP_size_t pos)
972 return MSVCP_basic_string_char_find_cstr_substr(this, find, pos,
973 MSVCP_char_traits_char_length(find));
976 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
977 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
978 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rfind_cstr_substr, 16)
979 MSVCP_size_t __thiscall MSVCP_basic_string_char_rfind_cstr_substr(
980 const basic_string_char *this, const char *find, MSVCP_size_t pos, MSVCP_size_t len)
982 const char *p, *end;
984 TRACE("%p %s %lu %lu\n", this, debugstr_an(find, len), pos, len);
986 if(len==0)
987 return pos<this->size ? pos : this->size;
989 if(len > this->size)
990 return MSVCP_basic_string_char_npos;
992 if(pos > this->size-len+1)
993 pos = this->size-len+1;
994 end = this->ptr;
995 for(p=end+pos; p>=end; p--) {
996 if(*p==*find && !MSVCP_char_traits_char_compare(p, find, len))
997 return p-this->ptr;
1000 return MSVCP_basic_string_char_npos;
1003 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1004 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1005 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rfind_off, 12)
1006 MSVCP_size_t __thiscall MSVCP_basic_string_char_rfind_off(
1007 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
1009 return MSVCP_basic_string_char_rfind_cstr_substr(this, find->ptr, off, find->size);
1012 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1013 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1014 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rfind_ch, 12)
1015 MSVCP_size_t __thiscall MSVCP_basic_string_char_rfind_ch(
1016 const basic_string_char *this, char ch, MSVCP_size_t pos)
1018 return MSVCP_basic_string_char_rfind_cstr_substr(this, &ch, pos, 1);
1021 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1022 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1023 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rfind_cstr_off, 12)
1024 MSVCP_size_t __thiscall MSVCP_basic_string_char_rfind_cstr_off(
1025 const basic_string_char *this, const char *find, MSVCP_size_t pos)
1027 return MSVCP_basic_string_char_rfind_cstr_substr(this, find, pos,
1028 MSVCP_char_traits_char_length(find));
1031 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1032 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1033 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of_cstr_substr, 16)
1034 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_not_of_cstr_substr(
1035 const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len)
1037 const char *p, *end;
1039 TRACE("%p %p %lu %lu\n", this, find, off, len);
1041 if(off<this->size) {
1042 end = this->ptr+this->size;
1043 for(p=this->ptr+off; p<end; p++)
1044 if(!MSVCP_char_traits_char_find(find, len, p))
1045 return p-this->ptr;
1048 return MSVCP_basic_string_char_npos;
1051 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1052 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1053 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of, 12)
1054 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_not_of(
1055 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
1057 return MSVCP_basic_string_char_find_first_not_of_cstr_substr(this,
1058 find->ptr, off, find->size);
1061 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1062 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1063 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of_ch, 12)
1064 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_not_of_ch(
1065 const basic_string_char *this, char ch, MSVCP_size_t off)
1067 return MSVCP_basic_string_char_find_first_not_of_cstr_substr(this, &ch, off, 1);
1070 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1071 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1072 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of_cstr, 12)
1073 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_not_of_cstr(
1074 const basic_string_char *this, const char *find, MSVCP_size_t off)
1076 return MSVCP_basic_string_char_find_first_not_of_cstr_substr(
1077 this, find, off, MSVCP_char_traits_char_length(find));
1080 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1081 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1082 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of_cstr_substr, 16)
1083 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_of_cstr_substr(
1084 const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len)
1086 const char *p, *end;
1088 TRACE("%p %p %lu %lu\n", this, find, off, len);
1090 if(len>0 && off<this->size) {
1091 end = this->ptr+this->size;
1092 for(p=this->ptr+off; p<end; p++)
1093 if(MSVCP_char_traits_char_find(find, len, p))
1094 return p-this->ptr;
1097 return MSVCP_basic_string_char_npos;
1100 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1101 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1102 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of, 12)
1103 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_of(
1104 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
1106 return MSVCP_basic_string_char_find_first_of_cstr_substr(this,
1107 find->ptr, off, find->size);
1110 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1111 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1112 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of_ch, 12)
1113 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_of_ch(
1114 const basic_string_char *this, char ch, MSVCP_size_t off)
1116 return MSVCP_basic_string_char_find_first_of_cstr_substr(this, &ch, off, 1);
1119 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1120 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1121 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of_cstr, 12)
1122 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_of_cstr(
1123 const basic_string_char *this, const char *find, MSVCP_size_t off)
1125 return MSVCP_basic_string_char_find_first_of_cstr_substr(
1126 this, find, off, MSVCP_char_traits_char_length(find));
1129 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1130 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1131 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_not_of_cstr_substr, 16)
1132 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_not_of_cstr_substr(
1133 const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len)
1135 const char *p, *beg;
1137 TRACE("%p %p %lu %lu\n", this, find, off, len);
1139 if(len>0 && this->size>0) {
1140 if(off >= this->size)
1141 off = this->size-1;
1143 beg = this->ptr;
1144 for(p=beg+off; p>=beg; p--)
1145 if(!MSVCP_char_traits_char_find(find, len, p))
1146 return p-beg;
1149 return MSVCP_basic_string_char_npos;
1152 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1153 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1154 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_not_of, 12)
1155 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_not_of(
1156 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
1158 return MSVCP_basic_string_char_find_last_not_of_cstr_substr(this,
1159 find->ptr, off, find->size);
1162 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1163 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1164 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_not_of_ch, 12)
1165 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_not_of_ch(
1166 const basic_string_char *this, char ch, MSVCP_size_t off)
1168 return MSVCP_basic_string_char_find_last_not_of_cstr_substr(this, &ch, off, 1);
1171 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1172 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1173 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_not_of_cstr, 12)
1174 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_not_of_cstr(
1175 const basic_string_char *this, const char *find, MSVCP_size_t off)
1177 return MSVCP_basic_string_char_find_last_not_of_cstr_substr(
1178 this, find, off, MSVCP_char_traits_char_length(find));
1181 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1182 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1183 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of_cstr_substr, 16)
1184 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_of_cstr_substr(
1185 const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len)
1187 const char *p, *beg;
1189 TRACE("%p %p %lu %lu\n", this, find, off, len);
1191 if(len>0 && this->size>0) {
1192 if(off >= this->size)
1193 off = this->size-1;
1195 beg = this->ptr;
1196 for(p=beg+off; p>=beg; p--)
1197 if(MSVCP_char_traits_char_find(find, len, p))
1198 return p-beg;
1201 return MSVCP_basic_string_char_npos;
1204 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1205 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1206 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of, 12)
1207 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_of(
1208 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
1210 return MSVCP_basic_string_char_find_last_of_cstr_substr(this,
1211 find->ptr, off, find->size);
1214 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1215 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1216 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of_ch, 12)
1217 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_of_ch(
1218 const basic_string_char *this, char ch, MSVCP_size_t off)
1220 return MSVCP_basic_string_char_find_last_of_cstr_substr(this, &ch, off, 1);
1223 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1224 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1225 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of_cstr, 12)
1226 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_of_cstr(
1227 const basic_string_char *this, const char *find, MSVCP_size_t off)
1229 return MSVCP_basic_string_char_find_last_of_cstr_substr(
1230 this, find, off, MSVCP_char_traits_char_length(find));
1233 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z */
1234 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
1235 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_substr, 16)
1236 basic_string_char* __thiscall MSVCP_basic_string_char_append_substr(basic_string_char *this,
1237 const basic_string_char *append, MSVCP_size_t offset, MSVCP_size_t count)
1239 TRACE("%p %p %lu %lu\n", this, append, offset, count);
1241 if(append->size < offset)
1242 _Xran();
1244 if(count > append->size-offset)
1245 count = append->size-offset;
1247 if(MSVCP_basic_string_char_npos-this->size<=count || this->size+count<this->size)
1248 _Xlen();
1250 if(basic_string_char__Grow(this, this->size+count, FALSE)) {
1251 if(append->ptr)
1252 MSVCP_char_traits_char__Copy_s(this->ptr+this->size, this->res-this->size,
1253 append->ptr+offset, count);
1254 basic_string_char__Eos(this, this->size+count);
1257 return this;
1260 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z */
1261 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD_K@Z */
1262 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_cstr_len, 12)
1263 basic_string_char* __thiscall MSVCP_basic_string_char_append_cstr_len(
1264 basic_string_char *this, const char *append, MSVCP_size_t count)
1266 TRACE("%p %s %lu\n", this, debugstr_an(append, count), count);
1268 if(basic_string_char_inside(this, append))
1269 return MSVCP_basic_string_char_append_substr(this, this, append-this->ptr, count);
1271 if(MSVCP_basic_string_char_npos-this->size<=count || this->size+count<this->size)
1272 _Xlen();
1274 if(basic_string_char__Grow(this, this->size+count, FALSE)) {
1275 MSVCP_char_traits_char__Copy_s(this->ptr+this->size,
1276 this->res-this->size, append, count);
1277 basic_string_char__Eos(this, this->size+count);
1280 return this;
1283 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ID@Z */
1284 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KD@Z */
1285 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_len_ch, 12)
1286 basic_string_char* __thiscall MSVCP_basic_string_char_append_len_ch(
1287 basic_string_char *this, MSVCP_size_t count, char ch)
1289 TRACE("%p %lu %c\n", this, count, ch);
1291 if(MSVCP_basic_string_char_npos-this->size <= count)
1292 _Xlen();
1294 if(basic_string_char__Grow(this, this->size+count, FALSE)) {
1295 MSVCP_char_traits_char_assignn(this->ptr+this->size, count, ch);
1296 basic_string_char__Eos(this, this->size+count);
1299 return this;
1302 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@@Z */
1303 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@@Z */
1304 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@ABV01@@Z */
1305 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@AEBV01@@Z */
1306 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append, 8)
1307 basic_string_char* __thiscall MSVCP_basic_string_char_append(
1308 basic_string_char *this, const basic_string_char *append)
1310 return MSVCP_basic_string_char_append_substr(this, append,
1311 0, MSVCP_basic_string_char_npos);
1314 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@D@Z */
1315 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@D@Z */
1316 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_ch, 8)
1317 basic_string_char* __thiscall MSVCP_basic_string_char_append_ch(
1318 basic_string_char *this, char ch)
1320 return MSVCP_basic_string_char_append_len_ch(this, 1, ch);
1323 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD0@Z */
1324 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD0@Z */
1325 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_beg_end, 12)
1326 basic_string_char* __thiscall MSVCP_basic_string_char_append_beg_end(
1327 basic_string_char *this, const char *beg, const char *end)
1329 return MSVCP_basic_string_char_append_cstr_len(this, beg, end-beg);
1332 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z */
1333 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD@Z */
1334 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z */
1335 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@PEBD@Z */
1336 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_cstr, 8)
1337 basic_string_char* __thiscall MSVCP_basic_string_char_append_cstr(
1338 basic_string_char *this, const char *append)
1340 return MSVCP_basic_string_char_append_cstr_len(this, append,
1341 MSVCP_char_traits_char_length(append));
1343 /* ??$?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 */
1344 /* ??$?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 */
1345 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@0@Z */
1346 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@0@Z */
1347 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate(basic_string_char *ret,
1348 const basic_string_char *left, const basic_string_char *right)
1350 TRACE("%p %p\n", left, right);
1352 MSVCP_basic_string_char_copy_ctor(ret, left);
1353 MSVCP_basic_string_char_append(ret, right);
1354 return ret;
1357 /* ??$?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 */
1358 /* ??$?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 */
1359 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@D@Z */
1360 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@D@Z */
1361 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_bstr_ch(basic_string_char *ret,
1362 const basic_string_char *left, char right)
1364 TRACE("%p %c\n", left, right);
1366 MSVCP_basic_string_char_copy_ctor(ret, left);
1367 MSVCP_basic_string_char_append_ch(ret, right);
1368 return ret;
1371 /* ??$?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 */
1372 /* ??$?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 */
1373 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@PBD@Z */
1374 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@PEBD@Z */
1375 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_bstr_cstr(basic_string_char *ret,
1376 const basic_string_char *left, const char *right)
1378 TRACE("%p %s\n", left, debugstr_a(right));
1380 MSVCP_basic_string_char_copy_ctor(ret, left);
1381 MSVCP_basic_string_char_append_cstr(ret, right);
1382 return ret;
1385 /* ??$?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 */
1386 /* ??$?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 */
1387 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@DABV10@@Z */
1388 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@DAEBV10@@Z */
1389 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_ch_bstr(basic_string_char *ret,
1390 char left, const basic_string_char *right)
1392 TRACE("%c %p\n", left, right);
1394 MSVCP_basic_string_char_ctor_cstr_len_alloc(ret, &left, 1, NULL);
1395 MSVCP_basic_string_char_append(ret, right);
1396 return ret;
1399 /* ??$?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 */
1400 /* ??$?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 */
1401 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBDABV10@@Z */
1402 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBDAEBV10@@Z */
1403 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_cstr_bstr(basic_string_char *ret,
1404 const char *left, const basic_string_char *right)
1406 TRACE("%s %p\n", debugstr_a(left), right);
1408 MSVCP_basic_string_char_ctor_cstr_alloc(ret, left, NULL);
1409 MSVCP_basic_string_char_append(ret, right);
1410 return ret;
1413 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAADI@Z */
1414 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAD_K@Z */
1415 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDI@Z */
1416 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAAEBD_K@Z */
1417 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_operator_at, 8)
1418 char* __thiscall MSVCP_basic_string_char_operator_at(
1419 basic_string_char *this, MSVCP_size_t pos)
1421 TRACE("%p %lu\n", this, pos);
1423 assert(this->size >= pos);
1424 return this->ptr+pos;
1427 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAADI@Z */
1428 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAD_K@Z */
1429 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDI@Z */
1430 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAAEBD_K@Z */
1431 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_at, 8)
1432 char* __thiscall MSVCP_basic_string_char_at(
1433 basic_string_char *this, MSVCP_size_t pos)
1435 TRACE("%p %lu\n", this, pos);
1437 if(this->size <= pos)
1438 _Xran();
1440 return this->ptr+pos;
1443 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIPBDI@Z */
1444 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0PEBD0@Z */
1445 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_cstr_len, 20)
1446 basic_string_char* __thiscall basic_string_char_replace_cstr_len(basic_string_char *this,
1447 MSVCP_size_t off, MSVCP_size_t len, const char *str, MSVCP_size_t str_len)
1449 MSVCP_size_t inside_pos = -1;
1450 char *ptr = this->ptr;
1452 TRACE("%p %ld %ld %p %ld\n", this, off, len, str, str_len);
1454 if(this->size < off)
1455 _Xran();
1457 if(len > this->size-off)
1458 len = this->size-off;
1460 if(MSVCP_basic_string_char_npos-str_len <= this->size-len)
1461 _Xlen();
1463 if(basic_string_char_inside(this, str))
1464 inside_pos = str-ptr;
1466 if(this->size-len+str_len)
1467 basic_string_char__Grow(this, this->size-len+str_len, FALSE);
1468 ptr = this->ptr;
1470 if(inside_pos == -1) {
1471 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1472 memcpy(ptr+off, str, str_len*sizeof(char));
1473 } else if(len >= str_len) {
1474 memmove(ptr+off, ptr+inside_pos, str_len*sizeof(char));
1475 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1476 } else {
1477 MSVCP_size_t size;
1479 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1481 if(inside_pos < off+len) {
1482 size = off+len-inside_pos;
1483 if(size > str_len)
1484 size = str_len;
1485 memmove(ptr+off, ptr+inside_pos, size*sizeof(char));
1486 } else {
1487 size = 0;
1490 if(str_len > size)
1491 memmove(ptr+off+size, ptr+off+str_len, (str_len-size)*sizeof(char));
1494 if(this->ptr)
1495 basic_string_char__Eos(this, this->size-len+str_len);
1496 return this;
1499 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIABV12@II@Z */
1500 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0AEBV12@00@Z */
1501 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_substr, 24)
1502 basic_string_char* __thiscall basic_string_char_replace_substr(basic_string_char *this, MSVCP_size_t off,
1503 MSVCP_size_t len, const basic_string_char *str, MSVCP_size_t str_off, MSVCP_size_t str_len)
1505 if(str->size < str_off)
1506 _Xran();
1508 if(str_len > str->size-str_off)
1509 str_len = str->size-str_off;
1511 return basic_string_char_replace_cstr_len(this, off, len,
1512 str->ptr+str_off, str_len);
1515 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIABV12@@Z */
1516 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0AEBV12@@Z */
1517 DEFINE_THISCALL_WRAPPER(basic_string_char_replace, 16)
1518 basic_string_char* __thiscall basic_string_char_replace(basic_string_char *this,
1519 MSVCP_size_t off, MSVCP_size_t len, const basic_string_char *str)
1521 return basic_string_char_replace_cstr_len(this, off, len,
1522 str->ptr, str->size);
1525 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIID@Z */
1526 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K00D@Z */
1527 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_ch, 20)
1528 basic_string_char* __thiscall basic_string_char_replace_ch(basic_string_char *this,
1529 MSVCP_size_t off, MSVCP_size_t len, MSVCP_size_t count, char ch)
1531 char *ptr;
1533 TRACE("%p %ld %ld %ld %c\n", this, off, len, count, ch);
1535 if(this->size < off)
1536 _Xran();
1538 if(len > this->size-off)
1539 len = this->size-off;
1541 if(MSVCP_basic_string_char_npos-count <= this->size-len)
1542 _Xlen();
1544 if(this->size-len+count)
1545 basic_string_char__Grow(this, this->size-len+count, FALSE);
1546 ptr = this->ptr;
1548 memmove(ptr+off+count, ptr+off+len, (this->size-off-len)*sizeof(char));
1549 MSVCP_char_traits_char_assignn(ptr+off, count, ch);
1550 basic_string_char__Eos(this, this->size-len+count);
1552 return this;
1555 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIPBD@Z */
1556 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0PEBD@Z */
1557 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_cstr, 16)
1558 basic_string_char* __thiscall basic_string_char_replace_cstr(basic_string_char *this,
1559 MSVCP_size_t off, MSVCP_size_t len, const char *str)
1561 return basic_string_char_replace_cstr_len(this, off, len, str,
1562 MSVCP_char_traits_char_length(str));
1565 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IABV12@@Z */
1566 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KAEBV12@@Z */
1567 DEFINE_THISCALL_WRAPPER(basic_string_char_insert, 12)
1568 basic_string_char* __thiscall basic_string_char_insert(basic_string_char *this,
1569 MSVCP_size_t off, const basic_string_char *str)
1571 return basic_string_char_replace(this, off, 0, str);
1574 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IABV12@II@Z */
1575 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KAEBV12@00@Z */
1576 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_substr, 20)
1577 basic_string_char* __thiscall basic_string_char_insert_substr(
1578 basic_string_char *this, MSVCP_size_t off, const basic_string_char *str,
1579 MSVCP_size_t str_off, MSVCP_size_t str_count)
1581 return basic_string_char_replace_substr(this, off, 0, str, str_off, str_count);
1584 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IPBD@Z */
1585 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KPEBD@Z */
1586 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_cstr, 12)
1587 basic_string_char* __thiscall basic_string_char_insert_cstr(
1588 basic_string_char *this, MSVCP_size_t off, const char *str)
1590 return basic_string_char_replace_cstr(this, off, 0, str);
1593 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IPBDI@Z */
1594 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KPEBD0@Z */
1595 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_cstr_len, 16)
1596 basic_string_char* __thiscall basic_string_char_insert_cstr_len(basic_string_char *this,
1597 MSVCP_size_t off, const char *str, MSVCP_size_t str_len)
1599 return basic_string_char_replace_cstr_len(this, off, 0, str, str_len);
1602 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IID@Z */
1603 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0D@Z */
1604 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_chn, 16)
1605 basic_string_char* __thiscall basic_string_char_insert_chn(basic_string_char *this,
1606 MSVCP_size_t off, MSVCP_size_t count, char ch)
1608 return basic_string_char_replace_ch(this, off, 0, count, ch);
1611 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXID@Z */
1612 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_KD@Z */
1613 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_resize_ch, 12)
1614 void __thiscall MSVCP_basic_string_char_resize_ch(
1615 basic_string_char *this, MSVCP_size_t size, char ch)
1617 TRACE("%p %lu %c\n", this, size, ch);
1619 if(size <= this->size)
1620 MSVCP_basic_string_char_erase(this, size, this->size);
1621 else
1622 MSVCP_basic_string_char_append_len_ch(this, size-this->size, ch);
1625 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXI@Z */
1626 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_K@Z */
1627 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_resize, 8)
1628 void __thiscall MSVCP_basic_string_char_resize(
1629 basic_string_char *this, MSVCP_size_t size)
1631 MSVCP_basic_string_char_resize_ch(this, size, '\0');
1634 /* ?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
1635 /* ?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
1636 /* ?data@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
1637 /* ?data@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
1638 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_c_str, 4)
1639 const char* __thiscall MSVCP_basic_string_char_c_str(const basic_string_char *this)
1641 TRACE("%p\n", this);
1642 return this->ptr ? this->ptr : basic_string_char__Nullstr();
1645 /* ?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1646 /* ?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1647 /* ?length@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1648 /* ?length@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1649 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_length, 4)
1650 MSVCP_size_t __thiscall MSVCP_basic_string_char_length(const basic_string_char *this)
1652 TRACE("%p\n", this);
1653 return this->size;
1656 /* ?max_size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1657 /* ?max_size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1658 DEFINE_THISCALL_WRAPPER(basic_string_char_max_size, 4)
1659 MSVCP_size_t __thiscall basic_string_char_max_size(const basic_string_char *this)
1661 TRACE("%p\n", this);
1662 return MSVCP_allocator_char_max_size(NULL)-1;
1665 /* ?capacity@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1666 /* ?capacity@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1667 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_capacity, 4)
1668 MSVCP_size_t __thiscall MSVCP_basic_string_char_capacity(basic_string_char *this)
1670 TRACE("%p\n", this);
1671 return this->res;
1674 /* ?reserve@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXI@Z */
1675 /* ?reserve@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_K@Z */
1676 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_reserve, 8)
1677 void __thiscall MSVCP_basic_string_char_reserve(basic_string_char *this, MSVCP_size_t size)
1679 MSVCP_size_t len;
1681 TRACE("%p %ld\n", this, size);
1683 len = this->size;
1684 if(len > size)
1685 return;
1687 if(basic_string_char__Grow(this, size, FALSE))
1688 basic_string_char__Eos(this, len);
1691 /* ?empty@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE_NXZ */
1692 /* ?empty@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_NXZ */
1693 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_empty, 4)
1694 MSVCP_bool __thiscall MSVCP_basic_string_char_empty(basic_string_char *this)
1696 TRACE("%p\n", this);
1697 return this->size == 0;
1700 /* ?swap@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXAAV12@@Z */
1701 /* ?swap@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXAEAV12@@Z */
1702 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_swap, 8)
1703 void __thiscall MSVCP_basic_string_char_swap(basic_string_char *this, basic_string_char *str)
1705 basic_string_char tmp;
1706 TRACE("%p %p\n", this, str);
1708 tmp = *this;
1709 *this = *str;
1710 *str = tmp;
1713 /* ?substr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV12@II@Z */
1714 /* ?substr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV12@_K0@Z */
1715 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_substr, 16)
1716 basic_string_char* __thiscall MSVCP_basic_string_char_substr(basic_string_char *this,
1717 basic_string_char *ret, MSVCP_size_t off, MSVCP_size_t len)
1719 TRACE("%p %lu %lu\n", this, off, len);
1721 MSVCP_basic_string_char_ctor_substr_alloc(ret, this, off, len, NULL);
1722 return ret;
1725 /* ?copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPADII@Z */
1726 /* ?copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEAD_K1@Z */
1727 DEFINE_THISCALL_WRAPPER(basic_string_char_copy, 16)
1728 MSVCP_size_t __thiscall basic_string_char_copy(const basic_string_char *this,
1729 char *dest, MSVCP_size_t count, MSVCP_size_t off)
1731 TRACE("%p %p %lu %lu\n", this, dest, count, off);
1733 if(off > this->size)
1734 _Xran();
1735 if(count > this->size-off)
1736 count = this->size-off;
1737 if(this->ptr)
1738 MSVCP_char_traits_char__Copy_s(dest, count, this->ptr+off, count);
1739 return count;
1742 /* ?get_allocator@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$allocator@D@2@XZ */
1743 /* ?get_allocator@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$allocator@D@2@XZ */
1744 DEFINE_THISCALL_WRAPPER(basic_string_char_get_allocator, 8)
1745 allocator* __thiscall basic_string_char_get_allocator(const basic_string_char *this, allocator *ret)
1747 TRACE("%p\n", this);
1748 return ret;
1751 static MSVCP_bool basic_string_wchar_inside(
1752 basic_string_wchar *this, const wchar_t *ptr)
1754 return ptr>=this->ptr && ptr<this->ptr+this->size;
1757 /* ?npos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@2IB */
1758 /* ?npos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@2_KB */
1759 const MSVCP_size_t MSVCP_basic_string_wchar_npos = -1;
1761 /* ?_C@?1??_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPBGXZ@4GB */
1762 /* ?_C@?1??_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEBGXZ@4GB */
1763 const wchar_t basic_string_wchar_nullbyte = '\0';
1765 /* ?_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPBGXZ */
1766 /* ?_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEBGXZ */
1767 const wchar_t* __cdecl basic_string_wchar__Nullstr(void)
1769 return &basic_string_wchar_nullbyte;
1772 /* ?_Refcnt@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEAAEPBG@Z */
1773 /* ?_Refcnt@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAAEAEPEBG@Z */
1774 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Refcnt, 8)
1775 unsigned short* __thiscall basic_string_wchar__Refcnt(basic_string_wchar *this, const wchar_t *ptr)
1777 TRACE("(%p %p)\n", this, ptr);
1778 return (unsigned short*)ptr-1;
1781 /* ?_Eos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXI@Z */
1782 /* ?_Eos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAX_K@Z */
1783 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Eos, 8)
1784 void __thiscall basic_string_wchar__Eos(basic_string_wchar *this, MSVCP_size_t len)
1786 this->size = len;
1787 this->ptr[len] = 0;
1790 /* ?clear@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXXZ */
1791 /* ?clear@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXXZ */
1792 /* ?clear@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */
1793 /* ?clear@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */
1794 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_clear, 4)
1795 void __thiscall MSVCP_basic_string_wchar_clear(basic_string_wchar *this)
1797 if(this->ptr)
1798 basic_string_wchar__Eos(this, 0);
1801 /* ?_Tidy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEX_N@Z */
1802 /* ?_Tidy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAX_N@Z */
1803 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Tidy, 8)
1804 void __thiscall basic_string_wchar__Tidy(basic_string_wchar *this, MSVCP_bool built)
1806 TRACE("(%p %d)\n", this, built);
1808 if(!built || !this->ptr);
1809 else if(!this->ptr[-1] || (unsigned short)this->ptr[-1]==FROZEN)
1810 MSVCP_allocator_wchar_deallocate(NULL, this->ptr-1, this->res+2);
1811 else
1812 this->ptr[-1]--;
1814 memset(this, 0, sizeof(*this));
1817 /* ?_Grow@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAE_NI_N@Z */
1818 /* ?_Grow@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAA_N_K_N@Z */
1819 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Grow, 12)
1820 MSVCP_bool __thiscall basic_string_wchar__Grow(basic_string_wchar *this, MSVCP_size_t new_size, MSVCP_bool trim)
1822 if(!new_size) {
1823 if(trim)
1824 basic_string_wchar__Tidy(this, TRUE);
1825 else if(this->ptr)
1826 basic_string_wchar__Eos(this, 0);
1827 } else if(this->res<new_size || trim ||
1828 (this->ptr && this->ptr[-1] && (unsigned short)this->ptr[-1]!=FROZEN)) {
1829 MSVCP_size_t new_res = new_size, len = this->size;
1830 wchar_t *ptr;
1832 if(!trim && this->ptr && !this->ptr[-1]) {
1833 new_res |= 0xf;
1834 if(new_res/3 < this->res/2)
1835 new_res = this->res + this->res/2;
1838 ptr = MSVCP_allocator_wchar_allocate(this->allocator, new_res+2);
1839 if(!ptr) {
1840 new_res = new_size;
1841 ptr = MSVCP_allocator_wchar_allocate(this->allocator, new_size+2);
1843 if(!ptr) {
1844 ERR("Out of memory\n");
1845 return FALSE;
1848 if(len > new_res)
1849 len = new_res;
1851 *ptr = 0;
1852 if(this->ptr)
1853 MSVCP_char_traits_wchar__Copy_s(ptr+1, new_size, this->ptr, len);
1854 basic_string_wchar__Tidy(this, TRUE);
1855 this->ptr = ptr+1;
1856 this->res = new_res;
1857 basic_string_wchar__Eos(this, len);
1860 return new_size>0;
1863 /* ?_Split@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXXZ */
1864 /* ?_Split@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAXXZ */
1865 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Split, 4)
1866 void __thiscall basic_string_wchar__Split(basic_string_wchar *this)
1868 MSVCP_size_t len;
1869 wchar_t *ptr;
1871 TRACE("(%p)\n", this);
1873 if(!this->ptr || !this->ptr[-1] || (unsigned short)this->ptr[-1]==FROZEN)
1874 return;
1876 ptr = this->ptr;
1877 len = this->size;
1878 basic_string_wchar__Tidy(this, TRUE);
1879 if(basic_string_wchar__Grow(this, len, FALSE)) {
1880 if(ptr)
1881 MSVCP_char_traits_wchar__Copy_s(this->ptr, this->res, ptr, len);
1882 basic_string_wchar__Eos(this, len);
1886 /* ?_Freeze@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXXZ */
1887 /* ?_Freeze@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAXXZ */
1888 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Freeze, 4)
1889 void __thiscall basic_string_wchar__Freeze(basic_string_wchar *this)
1891 TRACE("(%p)\n", this);
1892 basic_string_wchar__Split(this);
1893 if(this->ptr)
1894 this->ptr[-1] = FROZEN;
1897 /* ?_Copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXI@Z */
1898 /* ?_Copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAX_K@Z */
1899 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Copy, 8)
1900 void __thiscall basic_string_wchar__Copy(basic_string_wchar *this, MSVCP_size_t copy_len)
1902 TRACE("%p %lu\n", this, copy_len);
1904 if(!basic_string_wchar__Grow(this, copy_len, TRUE))
1905 return;
1908 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPAGPAGI@Z */
1909 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEAGPEAG_K@Z */
1910 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPBGPBGI@Z */
1911 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEBGPEBG_K@Z */
1912 wchar_t* __cdecl basic_string_wchar__Psum(wchar_t *iter, MSVCP_size_t add)
1914 TRACE("(%p %lu)\n", iter, add);
1915 return iter ? iter+add : iter;
1918 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@II@Z */
1919 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0@Z */
1920 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_erase, 12)
1921 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_erase(
1922 basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t len)
1924 TRACE("%p %lu %lu\n", this, pos, len);
1926 if(pos > this->size)
1927 _Xran();
1929 if(len > this->size-pos)
1930 len = this->size-pos;
1932 if(len) {
1933 basic_string_wchar__Split(this);
1934 MSVCP_char_traits_wchar__Move_s(this->ptr+pos, this->res-pos,
1935 this->ptr+pos+len, this->size-pos-len);
1936 basic_string_wchar__Eos(this, this->size-len);
1939 return this;
1942 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGPAG@Z */
1943 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGPEAG@Z */
1944 DEFINE_THISCALL_WRAPPER(basic_string_wchar_erase_beg, 8)
1945 wchar_t* __thiscall basic_string_wchar_erase_beg(basic_string_wchar *this, wchar_t *beg)
1947 MSVCP_size_t pos = beg-this->ptr;
1948 MSVCP_basic_string_wchar_erase(this, pos, 1);
1949 return this->ptr+pos;
1952 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@II@Z */
1953 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
1954 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_substr, 16)
1955 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_substr(
1956 basic_string_wchar *this, const basic_string_wchar *assign,
1957 MSVCP_size_t pos, MSVCP_size_t len)
1959 TRACE("%p %p %lu %lu\n", this, assign, pos, len);
1961 if(assign->size < pos)
1962 _Xran();
1964 if(len > assign->size-pos)
1965 len = assign->size-pos;
1967 if(this == assign) {
1968 MSVCP_basic_string_wchar_erase(this, pos+len, MSVCP_basic_string_wchar_npos);
1969 MSVCP_basic_string_wchar_erase(this, 0, pos);
1970 } else if(basic_string_wchar__Grow(this, len, FALSE)) {
1971 if(assign->ptr)
1972 MSVCP_char_traits_wchar__Copy_s(this->ptr, this->res,
1973 assign->ptr+pos, len);
1974 basic_string_wchar__Eos(this, len);
1977 return this;
1980 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBGI@Z */
1981 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG_K@Z */
1982 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_cstr_len, 12)
1983 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_cstr_len(
1984 basic_string_wchar *this, const wchar_t *str, MSVCP_size_t len)
1986 TRACE("%p %s %lu\n", this, debugstr_wn(str, len), len);
1988 if(basic_string_wchar_inside(this, str))
1989 return MSVCP_basic_string_wchar_assign_substr(this, this, str-this->ptr, len);
1990 else if(basic_string_wchar__Grow(this, len, FALSE)) {
1991 MSVCP_char_traits_wchar__Copy_s(this->ptr, this->res, str, len);
1992 basic_string_wchar__Eos(this, len);
1995 return this;
1998 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@@Z */
1999 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@@Z */
2000 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@ABV01@@Z */
2001 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@AEBV01@@Z */
2002 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign, 8)
2003 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign(
2004 basic_string_wchar *this, const basic_string_wchar *assign)
2006 return MSVCP_basic_string_wchar_assign_substr(this, assign,
2007 0, MSVCP_basic_string_wchar_npos);
2010 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG@Z */
2011 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG@Z */
2012 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@PBG@Z */
2013 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@PEBG@Z */
2014 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_cstr, 8)
2015 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_cstr(
2016 basic_string_wchar *this, const wchar_t *str)
2018 return MSVCP_basic_string_wchar_assign_cstr_len(this, str,
2019 MSVCP_char_traits_wchar_length(str));
2022 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@G@Z */
2023 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@G@Z */
2024 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_ch, 8)
2025 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_ch(
2026 basic_string_wchar *this, wchar_t ch)
2028 return MSVCP_basic_string_wchar_assign_cstr_len(this, &ch, 1);
2031 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IG@Z */
2032 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KG@Z */
2033 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assignn, 12)
2034 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assignn(
2035 basic_string_wchar *this, MSVCP_size_t count, wchar_t ch)
2037 TRACE("%p %ld %c\n", this, count, ch);
2039 basic_string_wchar__Grow(this, count, FALSE);
2040 MSVCP_char_traits_wchar_assignn(this->ptr, count, ch);
2041 basic_string_wchar__Eos(this, count);
2042 return this;
2045 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG0@Z */
2046 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG0@Z */
2047 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_ptr_ptr, 12)
2048 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_ptr_ptr(
2049 basic_string_wchar *this, const wchar_t *first, const wchar_t *last)
2051 return MSVCP_basic_string_wchar_assign_cstr_len(this, first, last-first);
2054 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBGIABV?$allocator@G@1@@Z */
2055 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG_KAEBV?$allocator@G@1@@Z */
2056 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr_len_alloc, 16)
2057 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr_len_alloc(
2058 basic_string_wchar *this, const wchar_t *str, MSVCP_size_t len, const void *alloc)
2060 TRACE("%p %s %ld\n", this, debugstr_wn(str, len), len);
2062 basic_string_wchar__Tidy(this, FALSE);
2063 MSVCP_basic_string_wchar_assign_cstr_len(this, str, len);
2064 return this;
2067 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@PB_WI@Z */
2068 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@PEB_W_K@Z */
2069 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBGI@Z */
2070 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG_K@Z */
2071 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr_len, 12)
2072 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr_len(
2073 basic_string_wchar *this, const wchar_t *str, MSVCP_size_t len)
2075 return MSVCP_basic_string_wchar_ctor_cstr_len_alloc(this, str, len, NULL);
2078 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV01@IIABV?$allocator@G@1@@Z */
2079 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV01@_K1AEBV?$allocator@G@1@@Z */
2080 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_substr_alloc, 20)
2081 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_substr_alloc(
2082 basic_string_wchar *this, const basic_string_wchar *assign,
2083 MSVCP_size_t pos, MSVCP_size_t len, const void *alloc)
2085 TRACE("%p %p %lu %lu\n", this, assign, pos, len);
2087 basic_string_wchar__Tidy(this, FALSE);
2088 MSVCP_basic_string_wchar_assign_substr(this, assign, pos, len);
2089 return this;
2092 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBGABV?$allocator@G@1@@Z */
2093 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBGAEBV?$allocator@G@1@@Z */
2094 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr_alloc, 12)
2095 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr_alloc(
2096 basic_string_wchar *this, const wchar_t *str, const void *alloc)
2098 TRACE("%p %s\n", this, debugstr_w(str));
2100 basic_string_wchar__Tidy(this, FALSE);
2101 MSVCP_basic_string_wchar_assign_cstr(this, str);
2102 return this;
2105 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@PB_W@Z */
2106 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@PEB_W@Z */
2107 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBG@Z */
2108 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG@Z */
2109 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr, 8)
2110 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr(
2111 basic_string_wchar *this, const wchar_t *str)
2113 return MSVCP_basic_string_wchar_ctor_cstr_alloc(this, str, NULL);
2116 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@IGABV?$allocator@G@1@@Z */
2117 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@_KGAEBV?$allocator@G@1@@Z */
2118 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_ch_alloc, 16)
2119 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_ch_alloc(basic_string_wchar *this,
2120 MSVCP_size_t count, wchar_t ch, const void *alloc)
2122 TRACE("%p %ld %c\n", this, count, ch);
2124 basic_string_wchar__Tidy(this, FALSE);
2125 MSVCP_basic_string_wchar_assignn(this, count, ch);
2126 return this;
2129 /* ??_F?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */
2130 /* ??_F?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */
2131 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor, 4)
2132 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor(basic_string_wchar *this)
2134 TRACE("%p\n", this);
2136 basic_string_wchar__Tidy(this, FALSE);
2137 return this;
2140 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV?$allocator@G@1@@Z */
2141 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV?$allocator@G@1@@Z */
2142 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_alloc, 8)
2143 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_alloc(
2144 basic_string_wchar *this, const void *alloc)
2146 TRACE("%p %p\n", this, alloc);
2148 basic_string_wchar__Tidy(this, FALSE);
2149 return this;
2152 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV01@@Z */
2153 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV01@@Z */
2154 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_copy_ctor, 8)
2155 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_copy_ctor(
2156 basic_string_wchar *this, const basic_string_wchar *copy)
2158 TRACE("%p %p\n", this, copy);
2160 basic_string_wchar__Tidy(this, FALSE);
2161 MSVCP_basic_string_wchar_assign(this, copy);
2162 return this;
2165 /* ??1?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@XZ */
2166 /* ??1?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@XZ */
2167 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_dtor, 4)
2168 void __thiscall MSVCP_basic_string_wchar_dtor(basic_string_wchar *this)
2170 TRACE("%p\n", this);
2171 basic_string_wchar__Tidy(this, TRUE);
2174 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIPBGI@Z */
2175 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0PEBG0@Z */
2176 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr_cstr_len, 20)
2177 int __thiscall MSVCP_basic_string_wchar_compare_substr_cstr_len(
2178 const basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t num,
2179 const wchar_t *str, MSVCP_size_t count)
2181 int ans;
2183 TRACE("%p %lu %lu %s %lu\n", this, pos, num, debugstr_wn(str, count), count);
2185 if(this->size < pos)
2186 _Xran();
2188 if(num > this->size-pos)
2189 num = this->size-pos;
2191 ans = MSVCP_char_traits_wchar_compare(this->ptr+pos,
2192 str, num>count ? count : num);
2193 if(ans)
2194 return ans;
2196 if(num > count)
2197 ans = 1;
2198 else if(num < count)
2199 ans = -1;
2200 return ans;
2203 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHPBG@Z */
2204 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAHPEBG@Z */
2205 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_cstr, 8)
2206 int __thiscall MSVCP_basic_string_wchar_compare_cstr(
2207 const basic_string_wchar *this, const wchar_t *str)
2209 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, 0, this->size,
2210 str, MSVCP_char_traits_wchar_length(str));
2213 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIABV12@II@Z */
2214 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0AEBV12@00@Z */
2215 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr_substr, 24)
2216 int __thiscall MSVCP_basic_string_wchar_compare_substr_substr(
2217 const basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t num,
2218 const basic_string_wchar *compare, MSVCP_size_t off, MSVCP_size_t count)
2220 TRACE("%p %lu %lu %p %lu %lu\n", this, pos, num, compare, off, count);
2222 if(compare->size < off)
2223 _Xran();
2225 if(count > compare->size-off)
2226 count = compare->size-off;
2228 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2229 compare->ptr+off, count);
2232 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIABV12@@Z */
2233 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0AEBV12@@Z */
2234 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr, 16)
2235 int __thiscall MSVCP_basic_string_wchar_compare_substr(
2236 const basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t num,
2237 const basic_string_wchar *compare)
2239 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2240 compare->ptr, compare->size);
2243 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHABV12@@Z */
2244 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAHAEBV12@@Z */
2245 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare, 8)
2246 int __thiscall MSVCP_basic_string_wchar_compare(
2247 const basic_string_wchar *this, const basic_string_wchar *compare)
2249 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, 0, this->size,
2250 compare->ptr, compare->size);
2253 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIPBG@Z */
2254 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0PEBG@Z */
2255 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr_cstr, 16)
2256 int __thiscall MSVCP_basic_string_wchar_compare_substr_cstr(const basic_string_wchar *this,
2257 MSVCP_size_t pos, MSVCP_size_t num, const wchar_t *str)
2259 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2260 str, MSVCP_char_traits_wchar_length(str));
2263 /* ??$?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 */
2264 /* ??$?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 */
2265 /* ??8std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2266 /* ??8std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2267 MSVCP_bool __cdecl MSVCP_basic_string_wchar_equal(
2268 const basic_string_wchar *left, const basic_string_wchar *right)
2270 return MSVCP_basic_string_wchar_compare(left, right) == 0;
2273 /* ??$?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 */
2274 /* ??$?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 */
2275 /* ??8std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2276 /* ??8std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2277 MSVCP_bool __cdecl MSVCP_basic_string_wchar_equal_str_cstr(
2278 const basic_string_wchar *left, const wchar_t *right)
2280 return MSVCP_basic_string_wchar_compare_cstr(left, right) == 0;
2283 /* ??$?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 */
2284 /* ??$?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 */
2285 /* ??8std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2286 /* ??8std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2287 MSVCP_bool __cdecl MSVCP_basic_string_wchar_equal_cstr_str(
2288 const wchar_t *left, const basic_string_wchar *right)
2290 return MSVCP_basic_string_wchar_compare_cstr(right, left) == 0;
2293 /* ??$?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 */
2294 /* ??$?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 */
2295 /* ??9std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2296 /* ??9std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2297 MSVCP_bool __cdecl MSVCP_basic_string_wchar_not_equal(
2298 const basic_string_wchar *left, const basic_string_wchar *right)
2300 return MSVCP_basic_string_wchar_compare(left, right) != 0;
2303 /* ??$?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 */
2304 /* ??$?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 */
2305 /* ??9std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2306 /* ??9std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2307 MSVCP_bool __cdecl MSVCP_basic_string_wchar_not_equal_str_cstr(
2308 const basic_string_wchar *left, const wchar_t *right)
2310 return MSVCP_basic_string_wchar_compare_cstr(left, right) != 0;
2313 /* ??$?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 */
2314 /* ??$?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 */
2315 /* ??9std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2316 /* ??9std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2317 MSVCP_bool __cdecl MSVCP_basic_string_wchar_not_equal_cstr_str(
2318 const wchar_t *left, const basic_string_wchar *right)
2320 return MSVCP_basic_string_wchar_compare_cstr(right, left) != 0;
2323 /* ??$?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 */
2324 /* ??$?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 */
2325 /* ??Mstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2326 /* ??Mstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2327 MSVCP_bool __cdecl MSVCP_basic_string_wchar_lower(
2328 const basic_string_wchar *left, const basic_string_wchar *right)
2330 return MSVCP_basic_string_wchar_compare(left, right) < 0;
2333 /* ??$?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 */
2334 /* ??$?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 */
2335 /* ??Mstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2336 /* ??Mstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2337 MSVCP_bool __cdecl MSVCP_basic_string_wchar_lower_bstr_cstr(
2338 const basic_string_wchar *left, const wchar_t *right)
2340 return MSVCP_basic_string_wchar_compare_cstr(left, right) < 0;
2343 /* ??$?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 */
2344 /* ??$?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 */
2345 /* ??Mstd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2346 /* ??Mstd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2347 MSVCP_bool __cdecl MSVCP_basic_string_wchar_lower_cstr_bstr(
2348 const wchar_t *left, const basic_string_wchar *right)
2350 return MSVCP_basic_string_wchar_compare_cstr(right, left) > 0;
2353 /* ??$?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 */
2354 /* ??$?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 */
2355 /* ??Nstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2356 /* ??Nstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2357 MSVCP_bool __cdecl MSVCP_basic_string_wchar_leq(
2358 const basic_string_wchar *left, const basic_string_wchar *right)
2360 return MSVCP_basic_string_wchar_compare(left, right) <= 0;
2363 /* ??$?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 */
2364 /* ??$?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 */
2365 /* ??Nstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2366 /* ??Nstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2367 MSVCP_bool __cdecl MSVCP_basic_string_wchar_leq_bstr_cstr(
2368 const basic_string_wchar *left, const wchar_t *right)
2370 return MSVCP_basic_string_wchar_compare_cstr(left, right) <= 0;
2373 /* ??$?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 */
2374 /* ??$?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 */
2375 /* ??Nstd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2376 /* ??Nstd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2377 MSVCP_bool __cdecl MSVCP_basic_string_wchar_leq_cstr_bstr(
2378 const wchar_t *left, const basic_string_wchar *right)
2380 return MSVCP_basic_string_wchar_compare_cstr(right, left) >= 0;
2383 /* ??$?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 */
2384 /* ??$?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 */
2385 /* ??Ostd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2386 /* ??Ostd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2387 MSVCP_bool __cdecl MSVCP_basic_string_wchar_greater(
2388 const basic_string_wchar *left, const basic_string_wchar *right)
2390 return MSVCP_basic_string_wchar_compare(left, right) > 0;
2393 /* ??$?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 */
2394 /* ??$?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 */
2395 /* ??Ostd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2396 /* ??Ostd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2397 MSVCP_bool __cdecl MSVCP_basic_string_wchar_greater_bstr_cstr(
2398 const basic_string_wchar *left, const wchar_t *right)
2400 return MSVCP_basic_string_wchar_compare_cstr(left, right) > 0;
2403 /* ??$?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 */
2404 /* ??$?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 */
2405 /* ??Ostd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2406 /* ??Ostd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2407 MSVCP_bool __cdecl MSVCP_basic_string_wchar_greater_cstr_bstr(
2408 const wchar_t *left, const basic_string_wchar *right)
2410 return MSVCP_basic_string_wchar_compare_cstr(right, left) < 0;
2413 /* ??$?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 */
2414 /* ??$?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 */
2415 /* ??Pstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2416 /* ??Pstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2417 MSVCP_bool __cdecl MSVCP_basic_string_wchar_geq(
2418 const basic_string_wchar *left, const basic_string_wchar *right)
2420 return MSVCP_basic_string_wchar_compare(left, right) >= 0;
2423 /* ??$?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 */
2424 /* ??$?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 */
2425 /* ??Pstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2426 /* ??Pstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2427 MSVCP_bool __cdecl MSVCP_basic_string_wchar_geq_bstr_cstr(
2428 const basic_string_wchar *left, const wchar_t *right)
2430 return MSVCP_basic_string_wchar_compare_cstr(left, right) >= 0;
2433 /* ??$?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 */
2434 /* ??$?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 */
2435 /* ??Pstd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2436 /* ??Pstd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2437 MSVCP_bool __cdecl MSVCP_basic_string_wchar_geq_cstr_bstr(
2438 const wchar_t *left, const basic_string_wchar *right)
2440 return MSVCP_basic_string_wchar_compare_cstr(right, left) <= 0;
2443 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2444 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2445 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_cstr_substr, 16)
2446 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_cstr_substr(
2447 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos, MSVCP_size_t len)
2449 const wchar_t *p, *end;
2451 TRACE("%p %s %lu %lu\n", this, debugstr_wn(find, len), pos, len);
2453 if(len==0 && pos<=this->size)
2454 return pos;
2455 if(pos>=this->size || len>this->size)
2456 return MSVCP_basic_string_wchar_npos;
2458 end = this->ptr+this->size-len+1;
2459 for(p=this->ptr+pos; p<end; p++) {
2460 p = MSVCP_char_traits_wchar_find(p, end-p, find);
2461 if(!p)
2462 break;
2464 if(!MSVCP_char_traits_wchar_compare(p, find, len))
2465 return p-this->ptr;
2468 return MSVCP_basic_string_wchar_npos;
2471 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2472 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2473 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_off, 12)
2474 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_off(
2475 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2477 return MSVCP_basic_string_wchar_find_cstr_substr(this, find->ptr, off, find->size);
2480 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2481 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2482 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_ch, 12)
2483 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_ch(
2484 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t pos)
2486 return MSVCP_basic_string_wchar_find_cstr_substr(this, &ch, pos, 1);
2489 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2490 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2491 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_cstr_off, 12)
2492 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_cstr_off(
2493 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos)
2495 return MSVCP_basic_string_wchar_find_cstr_substr(this, find, pos,
2496 MSVCP_char_traits_wchar_length(find));
2499 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2500 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2501 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rfind_cstr_substr, 16)
2502 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_rfind_cstr_substr(
2503 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos, MSVCP_size_t len)
2505 const wchar_t *p, *end;
2507 TRACE("%p %s %lu %lu\n", this, debugstr_wn(find, len), pos, len);
2509 if(len==0)
2510 return pos<this->size ? pos : this->size;
2512 if(len > this->size)
2513 return MSVCP_basic_string_wchar_npos;
2515 if(pos > this->size-len+1)
2516 pos = this->size-len+1;
2517 end = this->ptr;
2518 for(p=end+pos; p>=end; p--) {
2519 if(*p==*find && !MSVCP_char_traits_wchar_compare(p, find, len))
2520 return p-this->ptr;
2523 return MSVCP_basic_string_wchar_npos;
2526 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2527 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2528 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rfind_off, 12)
2529 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_rfind_off(
2530 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2532 return MSVCP_basic_string_wchar_rfind_cstr_substr(this, find->ptr, off, find->size);
2535 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2536 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2537 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rfind_ch, 12)
2538 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_rfind_ch(
2539 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t pos)
2541 return MSVCP_basic_string_wchar_rfind_cstr_substr(this, &ch, pos, 1);
2544 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2545 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2546 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rfind_cstr_off, 12)
2547 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_rfind_cstr_off(
2548 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos)
2550 return MSVCP_basic_string_wchar_rfind_cstr_substr(this, find, pos,
2551 MSVCP_char_traits_wchar_length(find));
2554 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2555 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2556 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of_cstr_substr, 16)
2557 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(
2558 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len)
2560 const wchar_t *p, *end;
2562 TRACE("%p %p %lu %lu\n", this, find, off, len);
2564 if(off<this->size) {
2565 end = this->ptr+this->size;
2566 for(p=this->ptr+off; p<end; p++)
2567 if(!MSVCP_char_traits_wchar_find(find, len, p))
2568 return p-this->ptr;
2571 return MSVCP_basic_string_wchar_npos;
2574 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2575 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2576 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of, 12)
2577 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of(
2578 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2580 return MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(this,
2581 find->ptr, off, find->size);
2584 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2585 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2586 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of_ch, 12)
2587 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of_ch(
2588 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off)
2590 return MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(this, &ch, off, 1);
2593 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2594 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2595 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of_cstr, 12)
2596 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of_cstr(
2597 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off)
2599 return MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(
2600 this, find, off, MSVCP_char_traits_wchar_length(find));
2603 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2604 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2605 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of_cstr_substr, 16)
2606 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_of_cstr_substr(
2607 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len)
2609 const wchar_t *p, *end;
2611 TRACE("%p %p %lu %lu\n", this, find, off, len);
2613 if(len>0 && off<this->size) {
2614 end = this->ptr+this->size;
2615 for(p=this->ptr+off; p<end; p++)
2616 if(MSVCP_char_traits_wchar_find(find, len, p))
2617 return p-this->ptr;
2620 return MSVCP_basic_string_wchar_npos;
2623 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2624 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2625 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of, 12)
2626 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_of(
2627 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2629 return MSVCP_basic_string_wchar_find_first_of_cstr_substr(this,
2630 find->ptr, off, find->size);
2633 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2634 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2635 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of_ch, 12)
2636 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_of_ch(
2637 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off)
2639 return MSVCP_basic_string_wchar_find_first_of_cstr_substr(this, &ch, off, 1);
2642 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2643 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2644 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of_cstr, 12)
2645 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_of_cstr(
2646 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off)
2648 return MSVCP_basic_string_wchar_find_first_of_cstr_substr(
2649 this, find, off, MSVCP_char_traits_wchar_length(find));
2652 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2653 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2654 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_not_of_cstr_substr, 16)
2655 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_not_of_cstr_substr(
2656 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len)
2658 const wchar_t *p, *beg;
2660 TRACE("%p %p %lu %lu\n", this, find, off, len);
2662 if(len>0 && this->size>0) {
2663 if(off >= this->size)
2664 off = this->size-1;
2666 beg = this->ptr;
2667 for(p=beg+off; p>=beg; p--)
2668 if(!MSVCP_char_traits_wchar_find(find, len, p))
2669 return p-beg;
2672 return MSVCP_basic_string_wchar_npos;
2675 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2676 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2677 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_not_of, 12)
2678 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_not_of(
2679 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2681 return MSVCP_basic_string_wchar_find_last_not_of_cstr_substr(this,
2682 find->ptr, off, find->size);
2685 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2686 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2687 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_not_of_ch, 12)
2688 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_not_of_ch(
2689 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off)
2691 return MSVCP_basic_string_wchar_find_last_not_of_cstr_substr(this, &ch, off, 1);
2694 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2695 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2696 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_not_of_cstr, 12)
2697 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_not_of_cstr(
2698 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off)
2700 return MSVCP_basic_string_wchar_find_last_not_of_cstr_substr(
2701 this, find, off, MSVCP_char_traits_wchar_length(find));
2704 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2705 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2706 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of_cstr_substr, 16)
2707 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_of_cstr_substr(
2708 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len)
2710 const wchar_t *p, *beg;
2712 TRACE("%p %p %lu %lu\n", this, find, off, len);
2714 if(len>0 && this->size>0) {
2715 if(off >= this->size)
2716 off = this->size-1;
2718 beg = this->ptr;
2719 for(p=beg+off; p>=beg; p--)
2720 if(MSVCP_char_traits_wchar_find(find, len, p))
2721 return p-beg;
2724 return MSVCP_basic_string_wchar_npos;
2727 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2728 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2729 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of, 12)
2730 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_of(
2731 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2733 return MSVCP_basic_string_wchar_find_last_of_cstr_substr(this,
2734 find->ptr, off, find->size);
2737 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2738 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2739 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of_ch, 12)
2740 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_of_ch(
2741 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off)
2743 return MSVCP_basic_string_wchar_find_last_of_cstr_substr(this, &ch, off, 1);
2746 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2747 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2748 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of_cstr, 12)
2749 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_of_cstr(
2750 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off)
2752 return MSVCP_basic_string_wchar_find_last_of_cstr_substr(
2753 this, find, off, MSVCP_char_traits_wchar_length(find));
2756 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@II@Z */
2757 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
2758 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_substr, 16)
2759 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_substr(basic_string_wchar *this,
2760 const basic_string_wchar *append, MSVCP_size_t offset, MSVCP_size_t count)
2762 TRACE("%p %p %lu %lu\n", this, append, offset, count);
2764 if(append->size < offset)
2765 _Xran();
2767 if(count > append->size-offset)
2768 count = append->size-offset;
2770 if(MSVCP_basic_string_wchar_npos-this->size<=count || this->size+count<this->size)
2771 _Xlen();
2773 if(basic_string_wchar__Grow(this, this->size+count, FALSE)) {
2774 if(append->ptr)
2775 MSVCP_char_traits_wchar__Copy_s(this->ptr+this->size, this->res-this->size,
2776 append->ptr+offset, count);
2777 basic_string_wchar__Eos(this, this->size+count);
2780 return this;
2783 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBGI@Z */
2784 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG_K@Z */
2785 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_cstr_len, 12)
2786 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_cstr_len(
2787 basic_string_wchar *this, const wchar_t *append, MSVCP_size_t count)
2789 TRACE("%p %s %lu\n", this, debugstr_wn(append, count), count);
2791 if(basic_string_wchar_inside(this, append))
2792 return MSVCP_basic_string_wchar_append_substr(this, this, append-this->ptr, count);
2794 if(MSVCP_basic_string_wchar_npos-this->size<=count || this->size+count<this->size)
2795 _Xlen();
2797 if(basic_string_wchar__Grow(this, this->size+count, FALSE)) {
2798 MSVCP_char_traits_wchar__Copy_s(this->ptr+this->size,
2799 this->res-this->size, append, count);
2800 basic_string_wchar__Eos(this, this->size+count);
2803 return this;
2806 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IG@Z */
2807 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KG@Z */
2808 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_len_ch, 12)
2809 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_len_ch(
2810 basic_string_wchar *this, MSVCP_size_t count, wchar_t ch)
2812 TRACE("%p %lu %c\n", this, count, ch);
2814 if(MSVCP_basic_string_wchar_npos-this->size <= count)
2815 _Xlen();
2817 if(basic_string_wchar__Grow(this, this->size+count, FALSE)) {
2818 MSVCP_char_traits_wchar_assignn(this->ptr+this->size, count, ch);
2819 basic_string_wchar__Eos(this, this->size+count);
2822 return this;
2825 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@@Z */
2826 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@@Z */
2827 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@ABV01@@Z */
2828 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@AEBV01@@Z */
2829 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append, 8)
2830 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append(
2831 basic_string_wchar *this, const basic_string_wchar *append)
2833 return MSVCP_basic_string_wchar_append_substr(this, append,
2834 0, MSVCP_basic_string_wchar_npos);
2837 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@G@Z */
2838 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@G@Z */
2839 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_ch, 8)
2840 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_ch(
2841 basic_string_wchar *this, wchar_t ch)
2843 return MSVCP_basic_string_wchar_append_len_ch(this, 1, ch);
2846 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG0@Z */
2847 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG0@Z */
2848 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_beg_end, 12)
2849 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_beg_end(
2850 basic_string_wchar *this, const wchar_t *beg, const wchar_t *end)
2852 return MSVCP_basic_string_wchar_append_cstr_len(this, beg, end-beg);
2855 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG@Z */
2856 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG@Z */
2857 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@PBG@Z */
2858 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@PEBG@Z */
2859 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_cstr, 8)
2860 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_cstr(
2861 basic_string_wchar *this, const wchar_t *append)
2863 return MSVCP_basic_string_wchar_append_cstr_len(this, append,
2864 MSVCP_char_traits_wchar_length(append));
2866 /* ??$?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 */
2867 /* ??$?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 */
2868 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@0@Z */
2869 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@0@Z */
2870 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate(basic_string_wchar *ret,
2871 const basic_string_wchar *left, const basic_string_wchar *right)
2873 TRACE("%p %p\n", left, right);
2875 MSVCP_basic_string_wchar_copy_ctor(ret, left);
2876 MSVCP_basic_string_wchar_append(ret, right);
2877 return ret;
2880 /* ??$?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 */
2881 /* ??$?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 */
2882 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@G@Z */
2883 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@G@Z */
2884 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate_bstr_ch(basic_string_wchar *ret,
2885 const basic_string_wchar *left, wchar_t right)
2887 TRACE("%p %c\n", left, right);
2889 MSVCP_basic_string_wchar_copy_ctor(ret, left);
2890 MSVCP_basic_string_wchar_append_ch(ret, right);
2891 return ret;
2894 /* ??$?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 */
2895 /* ??$?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 */
2896 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@PBG@Z */
2897 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@PEBG@Z */
2898 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate_bstr_cstr(basic_string_wchar *ret,
2899 const basic_string_wchar *left, const wchar_t *right)
2901 TRACE("%p %s\n", left, debugstr_w(right));
2903 MSVCP_basic_string_wchar_copy_ctor(ret, left);
2904 MSVCP_basic_string_wchar_append_cstr(ret, right);
2905 return ret;
2908 /* ??$?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 */
2909 /* ??$?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 */
2910 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@GABV10@@Z */
2911 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@GAEBV10@@Z */
2912 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate_ch_bstr(basic_string_wchar *ret,
2913 wchar_t left, const basic_string_wchar *right)
2915 TRACE("%c %p\n", left, right);
2917 MSVCP_basic_string_wchar_ctor_cstr_len_alloc(ret, &left, 1, NULL);
2918 MSVCP_basic_string_wchar_append(ret, right);
2919 return ret;
2922 /* ??$?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 */
2923 /* ??$?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 */
2924 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBGABV10@@Z */
2925 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBGAEBV10@@Z */
2926 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate_cstr_bstr(basic_string_wchar *ret,
2927 const wchar_t *left, const basic_string_wchar *right)
2929 TRACE("%s %p\n", debugstr_w(left), right);
2931 MSVCP_basic_string_wchar_ctor_cstr_alloc(ret, left, NULL);
2932 MSVCP_basic_string_wchar_append(ret, right);
2933 return ret;
2936 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAGI@Z */
2937 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAG_K@Z */
2938 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEABGI@Z */
2939 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAAEBG_K@Z */
2940 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_operator_at, 8)
2941 wchar_t* __thiscall MSVCP_basic_string_wchar_operator_at(
2942 basic_string_wchar *this, MSVCP_size_t pos)
2944 TRACE("%p %lu\n", this, pos);
2946 assert(this->size >= pos);
2947 return this->ptr+pos;
2950 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAGI@Z */
2951 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAG_K@Z */
2952 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEABGI@Z */
2953 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAAEBG_K@Z */
2954 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_at, 8)
2955 wchar_t* __thiscall MSVCP_basic_string_wchar_at(
2956 basic_string_wchar *this, MSVCP_size_t pos)
2958 TRACE("%p %lu\n", this, pos);
2960 if(this->size <= pos)
2961 _Xran();
2963 return this->ptr+pos;
2966 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIPBGI@Z */
2967 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0PEBG0@Z */
2968 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_cstr_len, 20)
2969 basic_string_wchar* __thiscall basic_string_wchar_replace_cstr_len(basic_string_wchar *this,
2970 MSVCP_size_t off, MSVCP_size_t len, const wchar_t *str, MSVCP_size_t str_len)
2972 MSVCP_size_t inside_pos = -1;
2973 wchar_t *ptr = this->ptr;
2975 TRACE("%p %ld %ld %p %ld\n", this, off, len, str, str_len);
2977 if(this->size < off)
2978 _Xran();
2980 if(len > this->size-off)
2981 len = this->size-off;
2983 if(MSVCP_basic_string_wchar_npos-str_len <= this->size-len)
2984 _Xlen();
2986 if(basic_string_wchar_inside(this, str))
2987 inside_pos = str-ptr;
2989 if(this->size-len+str_len)
2990 basic_string_wchar__Grow(this, this->size-len+str_len, FALSE);
2991 ptr = this->ptr;
2993 if(inside_pos == -1) {
2994 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
2995 memcpy(ptr+off, str, str_len*sizeof(char));
2996 } else if(len >= str_len) {
2997 memmove(ptr+off, ptr+inside_pos, str_len*sizeof(char));
2998 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
2999 } else {
3000 MSVCP_size_t size;
3002 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
3004 if(inside_pos < off+len) {
3005 size = off+len-inside_pos;
3006 if(size > str_len)
3007 size = str_len;
3008 memmove(ptr+off, ptr+inside_pos, size*sizeof(char));
3009 } else {
3010 size = 0;
3013 if(str_len > size)
3014 memmove(ptr+off+size, ptr+off+str_len, (str_len-size)*sizeof(char));
3017 if(this->ptr)
3018 basic_string_wchar__Eos(this, this->size-len+str_len);
3019 return this;
3022 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIABV12@II@Z */
3023 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0AEBV12@00@Z */
3024 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_substr, 24)
3025 basic_string_wchar* __thiscall basic_string_wchar_replace_substr(basic_string_wchar *this, MSVCP_size_t off,
3026 MSVCP_size_t len, const basic_string_wchar *str, MSVCP_size_t str_off, MSVCP_size_t str_len)
3028 if(str->size < str_off)
3029 _Xran();
3031 if(str_len > str->size-str_off)
3032 str_len = str->size-str_off;
3034 return basic_string_wchar_replace_cstr_len(this, off, len,
3035 str->ptr+str_off, str_len);
3038 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIABV12@@Z */
3039 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0AEBV12@@Z */
3040 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace, 16)
3041 basic_string_wchar* __thiscall basic_string_wchar_replace(basic_string_wchar *this,
3042 MSVCP_size_t off, MSVCP_size_t len, const basic_string_wchar *str)
3044 return basic_string_wchar_replace_cstr_len(this, off, len,
3045 str->ptr, str->size);
3048 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIIG@Z */
3049 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K00G@Z */
3050 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_ch, 20)
3051 basic_string_wchar* __thiscall basic_string_wchar_replace_ch(basic_string_wchar *this,
3052 MSVCP_size_t off, MSVCP_size_t len, MSVCP_size_t count, wchar_t ch)
3054 wchar_t *ptr;
3056 TRACE("%p %ld %ld %ld %c\n", this, off, len, count, ch);
3058 if(this->size < off)
3059 _Xran();
3061 if(len > this->size-off)
3062 len = this->size-off;
3064 if(MSVCP_basic_string_wchar_npos-count <= this->size-len)
3065 _Xlen();
3067 if(this->size-len+count)
3068 basic_string_wchar__Grow(this, this->size-len+count, FALSE);
3069 ptr = this->ptr;
3071 memmove(ptr+off+count, ptr+off+len, (this->size-off-len)*sizeof(char));
3072 MSVCP_char_traits_wchar_assignn(ptr+off, count, ch);
3073 basic_string_wchar__Eos(this, this->size-len+count);
3075 return this;
3078 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIPBG@Z */
3079 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0PEBG@Z */
3080 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_cstr, 16)
3081 basic_string_wchar* __thiscall basic_string_wchar_replace_cstr(basic_string_wchar *this,
3082 MSVCP_size_t off, MSVCP_size_t len, const wchar_t *str)
3084 return basic_string_wchar_replace_cstr_len(this, off, len, str,
3085 MSVCP_char_traits_wchar_length(str));
3088 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IABV12@@Z */
3089 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KAEBV12@@Z */
3090 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert, 12)
3091 basic_string_wchar* __thiscall basic_string_wchar_insert(basic_string_wchar *this,
3092 MSVCP_size_t off, const basic_string_wchar *str)
3094 return basic_string_wchar_replace(this, off, 0, str);
3097 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IABV12@II@Z */
3098 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KAEBV12@00@Z */
3099 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_substr, 20)
3100 basic_string_wchar* __thiscall basic_string_wchar_insert_substr(
3101 basic_string_wchar *this, MSVCP_size_t off, const basic_string_wchar *str,
3102 MSVCP_size_t str_off, MSVCP_size_t str_count)
3104 return basic_string_wchar_replace_substr(this, off, 0, str, str_off, str_count);
3107 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IPBG@Z */
3108 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KPEBG@Z */
3109 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_cstr, 12)
3110 basic_string_wchar* __thiscall basic_string_wchar_insert_cstr(
3111 basic_string_wchar *this, MSVCP_size_t off, const wchar_t *str)
3113 return basic_string_wchar_replace_cstr(this, off, 0, str);
3116 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IPBGI@Z */
3117 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KPEBG0@Z */
3118 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_cstr_len, 16)
3119 basic_string_wchar* __thiscall basic_string_wchar_insert_cstr_len(basic_string_wchar *this,
3120 MSVCP_size_t off, const wchar_t *str, MSVCP_size_t str_len)
3122 return basic_string_wchar_replace_cstr_len(this, off, 0, str, str_len);
3125 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIG@Z */
3126 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0G@Z */
3127 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_chn, 16)
3128 basic_string_wchar* __thiscall basic_string_wchar_insert_chn(basic_string_wchar *this,
3129 MSVCP_size_t off, MSVCP_size_t count, wchar_t ch)
3131 return basic_string_wchar_replace_ch(this, off, 0, count, ch);
3134 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXIG@Z */
3135 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_KG@Z */
3136 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_resize_ch, 12)
3137 void __thiscall MSVCP_basic_string_wchar_resize_ch(
3138 basic_string_wchar *this, MSVCP_size_t size, wchar_t ch)
3140 TRACE("%p %lu %c\n", this, size, ch);
3142 if(size <= this->size)
3143 MSVCP_basic_string_wchar_erase(this, size, this->size);
3144 else
3145 MSVCP_basic_string_wchar_append_len_ch(this, size-this->size, ch);
3148 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXI@Z */
3149 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_K@Z */
3150 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_resize, 8)
3151 void __thiscall MSVCP_basic_string_wchar_resize(
3152 basic_string_wchar *this, MSVCP_size_t size)
3154 MSVCP_basic_string_wchar_resize_ch(this, size, '\0');
3157 /* ?c_str@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3158 /* ?c_str@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3159 /* ?data@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3160 /* ?data@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3161 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_c_str, 4)
3162 const wchar_t* __thiscall MSVCP_basic_string_wchar_c_str(const basic_string_wchar *this)
3164 TRACE("%p\n", this);
3165 return this->ptr ? this->ptr : basic_string_wchar__Nullstr();
3168 /* ?size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3169 /* ?size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3170 /* ?length@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3171 /* ?length@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3172 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_length, 4)
3173 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_length(const basic_string_wchar *this)
3175 TRACE("%p\n", this);
3176 return this->size;
3179 /* ?max_size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3180 /* ?max_size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3181 DEFINE_THISCALL_WRAPPER(basic_string_wchar_max_size, 4)
3182 MSVCP_size_t __thiscall basic_string_wchar_max_size(const basic_string_wchar *this)
3184 TRACE("%p\n", this);
3185 return MSVCP_allocator_wchar_max_size(NULL)-1;
3188 /* ?capacity@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3189 /* ?capacity@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3190 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_capacity, 4)
3191 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_capacity(basic_string_wchar *this)
3193 TRACE("%p\n", this);
3194 return this->res;
3197 /* ?reserve@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXI@Z */
3198 /* ?reserve@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_K@Z */
3199 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_reserve, 8)
3200 void __thiscall MSVCP_basic_string_wchar_reserve(basic_string_wchar *this, MSVCP_size_t size)
3202 MSVCP_size_t len;
3204 TRACE("%p %ld\n", this, size);
3206 len = this->size;
3207 if(len > size)
3208 return;
3210 if(basic_string_wchar__Grow(this, size, FALSE))
3211 basic_string_wchar__Eos(this, len);
3214 /* ?empty@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE_NXZ */
3215 /* ?empty@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_NXZ */
3216 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_empty, 4)
3217 MSVCP_bool __thiscall MSVCP_basic_string_wchar_empty(basic_string_wchar *this)
3219 TRACE("%p\n", this);
3220 return this->size == 0;
3223 /* ?swap@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXAAV12@@Z */
3224 /* ?swap@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXAEAV12@@Z */
3225 DEFINE_THISCALL_WRAPPER(basic_string_wchar_swap, 8)
3226 void __thiscall basic_string_wchar_swap(basic_string_wchar *this, basic_string_wchar *str)
3228 basic_string_wchar tmp;
3229 TRACE("%p %p\n", this, str);
3231 tmp = *this;
3232 *this = *str;
3233 *str = tmp;
3236 /* ?substr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV12@II@Z */
3237 /* ?substr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV12@_K0@Z */
3238 DEFINE_THISCALL_WRAPPER(basic_string_wchar_substr, 16)
3239 basic_string_wchar* __thiscall basic_string_wchar_substr(basic_string_wchar *this,
3240 basic_string_wchar *ret, MSVCP_size_t off, MSVCP_size_t len)
3242 TRACE("%p %lu %lu\n", this, off, len);
3244 MSVCP_basic_string_wchar_ctor_substr_alloc(ret, this, off, len, NULL);
3245 return ret;
3248 /* ?copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPAGII@Z */
3249 /* ?copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEAG_K1@Z */
3250 DEFINE_THISCALL_WRAPPER(basic_string_wchar_copy, 16)
3251 MSVCP_size_t __thiscall basic_string_wchar_copy(const basic_string_wchar *this,
3252 wchar_t *dest, MSVCP_size_t count, MSVCP_size_t off)
3254 TRACE("%p %p %lu %lu\n", this, dest, count, off);
3256 if(off > this->size)
3257 _Xran();
3258 if(count > this->size-off)
3259 count = this->size-off;
3260 if(this->ptr)
3261 MSVCP_char_traits_wchar__Copy_s(dest, count, this->ptr+off, count);
3262 return count;
3265 /* ?get_allocator@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$allocator@G@2@XZ */
3266 /* ?get_allocator@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$allocator@G@2@XZ */
3267 DEFINE_THISCALL_WRAPPER(basic_string_wchar_get_allocator, 8)
3268 allocator* __thiscall basic_string_wchar_get_allocator(const basic_string_wchar *this, allocator *ret)
3270 TRACE("%p\n", this);
3271 return ret;
3274 /* Old iterator functions */
3276 /* ?_Pdif@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAIPBD0@Z */
3277 /* ?_Pdif@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CA_KPEBD0@Z */
3278 MSVCP_size_t __cdecl basic_string_char__Pdif(const char *i1, const char *i2)
3280 TRACE("(%p %p)\n", i1, i2);
3281 return !i1 ? 0 : i1-i2;
3284 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADPAD0@Z */
3285 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADPEAD0@Z */
3286 DEFINE_THISCALL_WRAPPER(basic_string_char_erase_iter, 12)
3287 char* __thiscall basic_string_char_erase_iter(basic_string_char *this, char *beg, char *end)
3289 MSVCP_size_t pos = basic_string_char__Pdif(beg, this->ptr);
3290 MSVCP_basic_string_char_erase(this, pos, basic_string_char__Pdif(end, beg));
3291 return basic_string_char__Psum(this->ptr, pos);
3294 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0PBD1@Z */
3295 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0PEBD1@Z */
3296 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_iter, 20)
3297 basic_string_char* __thiscall basic_string_char_replace_iter_iter(basic_string_char *this,
3298 char *beg1, char *end1, const char *beg2, const char *end2)
3300 return basic_string_char_replace_cstr_len(this, basic_string_char__Pdif(beg1, this->ptr),
3301 basic_string_char__Pdif(end1, beg1), beg2, basic_string_char__Pdif(end2, beg2));
3304 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0ABV12@@Z */
3305 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0AEBV12@@Z */
3306 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_bstr, 16)
3307 basic_string_char* __thiscall basic_string_char_replace_iter_bstr(basic_string_char *this,
3308 char *beg, char *end, const basic_string_char *str)
3310 return basic_string_char_replace(this, basic_string_char__Pdif(beg, this->ptr),
3311 basic_string_char__Pdif(end, beg), str);
3314 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0ID@Z */
3315 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0_KD@Z */
3316 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_chn, 20)
3317 basic_string_char* __thiscall basic_string_char_replace_iter_chn(basic_string_char *this,
3318 char *beg, char *end, MSVCP_size_t count, char ch)
3320 return basic_string_char_replace_ch(this, basic_string_char__Pdif(beg, this->ptr),
3321 basic_string_char__Pdif(end, beg), count, ch);
3324 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0PBD@Z */
3325 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0PEBD@Z */
3326 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_cstr, 16)
3327 basic_string_char* __thiscall basic_string_char_replace_iter_cstr(basic_string_char *this,
3328 char *beg, char *end, const char *str)
3330 return basic_string_char_replace_cstr(this, basic_string_char__Pdif(beg, this->ptr),
3331 basic_string_char__Pdif(end, beg), str);
3334 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0PBDI@Z */
3335 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0PEBD_K@Z */
3336 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_cstr_len, 20)
3337 basic_string_char* __thiscall basic_string_char_replace_iter_cstr_len(basic_string_char *this,
3338 char *beg, char *end, const char *str, MSVCP_size_t len)
3340 return basic_string_char_replace_cstr_len(this, basic_string_char__Pdif(beg, this->ptr),
3341 basic_string_char__Pdif(end, beg), str, len);
3344 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXPADID@Z */
3345 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXPEAD_KD@Z */
3346 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_chn, 16)
3347 void __thiscall basic_string_char_insert_iter_chn(basic_string_char *this,
3348 char *pos, MSVCP_size_t n, char ch)
3350 basic_string_char_insert_chn(this, basic_string_char__Pdif(pos, this->ptr), n, ch);
3353 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADPADD@Z */
3354 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADPEADD@Z */
3355 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_ch, 12)
3356 char* __thiscall basic_string_char_insert_iter_ch(basic_string_char *this, char *pos, char ch)
3358 MSVCP_size_t off = basic_string_char__Pdif(pos, this->ptr);
3359 basic_string_char_insert_chn(this, off, 1, ch);
3360 return basic_string_char__Psum(this->ptr, off);
3363 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADXZ */
3364 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADXZ */
3365 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
3366 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
3367 DEFINE_THISCALL_WRAPPER(basic_string_char_begin, 4)
3368 char* __thiscall basic_string_char_begin(basic_string_char *this)
3370 TRACE("(%p)\n", this);
3371 basic_string_char__Freeze(this);
3372 return this->ptr;
3375 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADXZ */
3376 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADXZ */
3377 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
3378 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
3379 DEFINE_THISCALL_WRAPPER(basic_string_char_end, 4)
3380 char* __thiscall basic_string_char_end(basic_string_char *this)
3382 TRACE("(%p)\n", this);
3383 basic_string_char__Freeze(this);
3384 return this->ptr+this->size;
3387 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$reverse_iterator@PADDAADPADH@2@XZ */
3388 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$reverse_iterator@PEADDAEADPEAD_J@2@XZ */
3389 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$reverse_iterator@PBDDABDPBDH@2@XZ */
3390 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$reverse_iterator@PEBDDAEBDPEBD_J@2@XZ */
3391 DEFINE_THISCALL_WRAPPER(basic_string_char_rbegin, 8)
3392 String_reverse_iterator_char* __thiscall basic_string_char_rbegin(
3393 basic_string_char *this, String_reverse_iterator_char *ret)
3395 TRACE("(%p %p)\n", this, ret);
3396 ret->ptr = basic_string_char_end(this);
3397 return ret;
3400 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$reverse_iterator@PADDAADPADH@2@XZ */
3401 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$reverse_iterator@PEADDAEADPEAD_J@2@XZ */
3402 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$reverse_iterator@PBDDABDPBDH@2@XZ */
3403 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$reverse_iterator@PEBDDAEBDPEBD_J@2@XZ */
3404 DEFINE_THISCALL_WRAPPER(basic_string_char_rend, 8)
3405 String_reverse_iterator_char* __thiscall basic_string_char_rend(
3406 basic_string_char *this, String_reverse_iterator_char *ret)
3408 TRACE("(%p %p)\n", this, ret);
3409 ret->ptr = basic_string_char_begin(this);
3410 return ret;
3413 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD0ABV?$allocator@D@1@@Z */
3414 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD0AEBV?$allocator@D@1@@Z */
3415 DEFINE_THISCALL_WRAPPER(basic_string_char_ctor_iter, 16)
3416 basic_string_char* __thiscall basic_string_char_ctor_iter(basic_string_char *this,
3417 const char *first, const char *last, allocator *alloc)
3419 TRACE("(%p %p %p %p)\n", this, first, last, alloc);
3421 basic_string_char__Tidy(this, FALSE);
3422 MSVCP_basic_string_char_assign_cstr_len(this, first, basic_string_char__Pdif(last, first));
3423 return this;
3426 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXPADPBD1@Z */
3427 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXPEADPEBD1@Z */
3428 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter, 16)
3429 void __thiscall basic_string_char_insert_iter(basic_string_char *this,
3430 char *pos, const char *beg, const char *end)
3432 basic_string_char_insert_cstr_len(this, basic_string_char__Pdif(pos, this->ptr),
3433 beg, basic_string_char__Pdif(end, beg));
3436 /* ?_Pdif@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAIPBG0@Z */
3437 /* ?_Pdif@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CA_KPEBG0@Z */
3438 MSVCP_size_t __cdecl basic_string_wchar__Pdif(const wchar_t *i1, const wchar_t *i2)
3440 TRACE("(%p %p)\n", i1, i2);
3441 return !i1 ? 0 : i1-i2;
3444 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGPAG0@Z */
3445 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGPEAG0@Z */
3446 DEFINE_THISCALL_WRAPPER(basic_string_wchar_erase_iter, 12)
3447 wchar_t* __thiscall basic_string_wchar_erase_iter(basic_string_wchar *this, wchar_t *beg, wchar_t *end)
3449 MSVCP_size_t pos = basic_string_wchar__Pdif(beg, this->ptr);
3450 MSVCP_basic_string_wchar_erase(this, pos, basic_string_wchar__Pdif(end, beg));
3451 return basic_string_wchar__Psum(this->ptr, pos);
3454 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBG0ABV?$allocator@G@1@@Z */
3455 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG0AEBV?$allocator@G@1@@Z */
3456 DEFINE_THISCALL_WRAPPER(basic_string_wchar_ctor_iter, 16)
3457 basic_string_wchar* __thiscall basic_string_wchar_ctor_iter(basic_string_wchar *this,
3458 const wchar_t *first, const wchar_t *last, allocator *alloc)
3460 TRACE("(%p %p %p %p)\n", this, first, last, alloc);
3462 basic_string_wchar__Tidy(this, FALSE);
3463 MSVCP_basic_string_wchar_assign_cstr_len(this, first, basic_string_wchar__Pdif(last, first));
3464 return this;
3467 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0PBG1@Z */
3468 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0PEBG1@Z */
3469 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_iter, 20)
3470 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_iter(basic_string_wchar *this,
3471 wchar_t *beg1, wchar_t *end1, const wchar_t *beg2, const wchar_t *end2)
3473 return basic_string_wchar_replace_cstr_len(this, basic_string_wchar__Pdif(beg1, this->ptr),
3474 basic_string_wchar__Pdif(end1, beg1), beg2, basic_string_wchar__Pdif(end2, beg2));
3477 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0ABV12@@Z */
3478 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0AEBV12@@Z */
3479 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_bstr, 16)
3480 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_bstr(basic_string_wchar *this,
3481 wchar_t *beg, wchar_t *end, const basic_string_wchar *str)
3483 return basic_string_wchar_replace(this, basic_string_wchar__Pdif(beg, this->ptr),
3484 basic_string_wchar__Pdif(end, beg), str);
3487 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0IG@Z */
3488 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0_KG@Z */
3489 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_chn, 20)
3490 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_chn(basic_string_wchar *this,
3491 wchar_t *beg, wchar_t *end, MSVCP_size_t count, wchar_t ch)
3493 return basic_string_wchar_replace_ch(this, basic_string_wchar__Pdif(beg, this->ptr),
3494 basic_string_wchar__Pdif(end, beg), count, ch);
3497 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0PBG@Z */
3498 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0PEBG@Z */
3499 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_cstr, 16)
3500 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_cstr(basic_string_wchar *this,
3501 wchar_t *beg, wchar_t *end, const wchar_t *str)
3503 return basic_string_wchar_replace_cstr(this, basic_string_wchar__Pdif(beg, this->ptr),
3504 basic_string_wchar__Pdif(end, beg), str);
3507 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0PBGI@Z */
3508 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0PEBG_K@Z */
3509 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_cstr_len, 20)
3510 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_cstr_len(basic_string_wchar *this,
3511 wchar_t *beg, wchar_t *end, const wchar_t *str, MSVCP_size_t len)
3513 return basic_string_wchar_replace_cstr_len(this, basic_string_wchar__Pdif(beg, this->ptr),
3514 basic_string_wchar__Pdif(end, beg), str, len);
3517 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXPAGIG@Z */
3518 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXPEAG_KG@Z */
3519 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_chn, 16)
3520 void __thiscall basic_string_wchar_insert_iter_chn(basic_string_wchar *this,
3521 wchar_t *pos, MSVCP_size_t n, wchar_t ch)
3523 basic_string_wchar_insert_chn(this, basic_string_wchar__Pdif(pos, this->ptr), n, ch);
3526 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGPAGG@Z */
3527 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGPEAGG@Z */
3528 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_ch, 12)
3529 wchar_t* __thiscall basic_string_wchar_insert_iter_ch(basic_string_wchar *this, wchar_t *pos, wchar_t ch)
3531 MSVCP_size_t off = basic_string_wchar__Pdif(pos, this->ptr);
3532 basic_string_wchar_insert_chn(this, off, 1, ch);
3533 return basic_string_wchar__Psum(this->ptr, off);
3536 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGXZ */
3537 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGXZ */
3538 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3539 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3540 DEFINE_THISCALL_WRAPPER(basic_string_wchar_begin, 4)
3541 wchar_t* __thiscall basic_string_wchar_begin(basic_string_wchar *this)
3543 TRACE("(%p)\n", this);
3544 basic_string_wchar__Freeze(this);
3545 return this->ptr;
3548 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGXZ */
3549 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGXZ */
3550 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3551 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3552 DEFINE_THISCALL_WRAPPER(basic_string_wchar_end, 4)
3553 wchar_t* __thiscall basic_string_wchar_end(basic_string_wchar *this)
3555 TRACE("(%p)\n", this);
3556 basic_string_wchar__Freeze(this);
3557 return this->ptr+this->size;
3560 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$reverse_iterator@PAGGAAGPAGH@2@XZ */
3561 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA?AV?$reverse_iterator@PEAGGAEAGPEAG_J@2@XZ */
3562 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$reverse_iterator@PBGGABGPBGH@2@XZ */
3563 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$reverse_iterator@PEBGGAEBGPEBG_J@2@XZ */
3564 DEFINE_THISCALL_WRAPPER(basic_string_wchar_rbegin, 8)
3565 String_reverse_iterator_wchar* __thiscall basic_string_wchar_rbegin(
3566 basic_string_wchar *this, String_reverse_iterator_wchar *ret)
3568 TRACE("(%p %p)\n", this, ret);
3569 ret->ptr = basic_string_wchar_end(this);
3570 return ret;
3573 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$reverse_iterator@PAGGAAGPAGH@2@XZ */
3574 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA?AV?$reverse_iterator@PEAGGAEAGPEAG_J@2@XZ */
3575 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$reverse_iterator@PBGGABGPBGH@2@XZ */
3576 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$reverse_iterator@PEBGGAEBGPEBG_J@2@XZ */
3577 DEFINE_THISCALL_WRAPPER(basic_string_wchar_rend, 8)
3578 String_reverse_iterator_wchar* __thiscall basic_string_wchar_rend(
3579 basic_string_wchar *this, String_reverse_iterator_wchar *ret)
3581 TRACE("(%p %p)\n", this, ret);
3582 ret->ptr = basic_string_wchar_begin(this);
3583 return ret;
3586 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXPAGPBG1@Z */
3587 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXPEAGPEBG1@Z */
3588 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter, 16)
3589 void __thiscall basic_string_wchar_insert_iter(basic_string_wchar *this,
3590 wchar_t *pos, const wchar_t *beg, const wchar_t *end)
3592 basic_string_wchar_insert_cstr_len(this, basic_string_wchar__Pdif(pos, this->ptr),
3593 beg, basic_string_wchar__Pdif(end, beg));