msvcp90: Added basic_string<char>::replace implementation.
[wine/multimedia.git] / dlls / msvcp90 / string.c
blobcbbf3597d66d997ea9553954483f7821930554fa
1 /*
2 * Copyright 2010 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 "msvcp90.h"
24 #include "stdio.h"
26 #include "windef.h"
27 #include "winbase.h"
28 #include "wine/debug.h"
29 WINE_DEFAULT_DEBUG_CHANNEL(msvcp90);
31 /* _String_iterator<char> and _String_const_iterator<char> class */
32 typedef struct {
33 basic_string_char *bstr;
34 const char *pos;
35 } String_iterator_char;
36 typedef String_iterator_char String_reverse_iterator_char;
38 typedef struct {
39 basic_string_wchar *bstr;
40 const wchar_t *pos;
41 } String_iterator_wchar;
42 typedef String_iterator_wchar String_reverse_iterator_wchar;
44 /* char_traits<char> */
45 /* ?assign@?$char_traits@D@std@@SAXAADABD@Z */
46 /* ?assign@?$char_traits@D@std@@SAXAEADAEBD@Z */
47 void CDECL MSVCP_char_traits_char_assign(char *ch, const char *assign)
49 *ch = *assign;
52 /* ?eq@?$char_traits@D@std@@SA_NABD0@Z */
53 /* ?eq@?$char_traits@D@std@@SA_NAEBD0@Z */
54 MSVCP_bool CDECL MSVCP_char_traits_char_eq(const char *ch1, const char *ch2)
56 return *ch1 == *ch2;
59 /* ?lt@?$char_traits@D@std@@SA_NABD0@Z */
60 /* ?lt@?$char_traits@D@std@@SA_NAEBD0@Z */
61 MSVCP_bool CDECL MSVCP_char_traits_lt(const char *ch1, const char *ch2)
63 return *ch1 < *ch2;
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 /* ?to_char_type@?$char_traits@D@std@@SADABH@Z */
144 /* ?to_char_type@?$char_traits@D@std@@SADAEBH@Z */
145 char CDECL MSVCP_char_traits_char_to_char_type(const int *i)
147 return (char)*i;
150 /* ?to_int_type@?$char_traits@D@std@@SAHABD@Z */
151 /* ?to_int_type@?$char_traits@D@std@@SAHAEBD@Z */
152 int CDECL MSVCP_char_traits_char_to_int_type(const char *ch)
154 return (int)*ch;
157 /* ?eq_int_type@?$char_traits@D@std@@SA_NABH0@Z */
158 /* ?eq_int_type@?$char_traits@D@std@@SA_NAEBH0@Z */
159 MSVCP_bool CDECL MSVCP_char_traits_char_eq_int_type(const int *i1, const int *i2)
161 return *i1 == *i2;
164 /* ?eof@?$char_traits@D@std@@SAHXZ */
165 int CDECL MSVCP_char_traits_char_eof(void)
167 return EOF;
170 /* ?not_eof@?$char_traits@D@std@@SAHABH@Z */
171 /* ?not_eof@?$char_traits@D@std@@SAHAEBH@Z */
172 int CDECL MSVCP_char_traits_char_not_eof(int *in)
174 return (*in==EOF ? !EOF : *in);
178 /* char_traits<wchar_t> */
179 /* ?assign@?$char_traits@_W@std@@SAXAA_WAB_W@Z */
180 /* ?assign@?$char_traits@_W@std@@SAXAEA_WAEB_W@Z */
181 void CDECL MSVCP_char_traits_wchar_assign(wchar_t *ch,
182 const wchar_t *assign)
184 *ch = *assign;
187 /* ?eq@?$char_traits@_W@std@@SA_NAB_W0@Z */
188 /* ?eq@?$char_traits@_W@std@@SA_NAEB_W0@Z */
189 MSVCP_bool CDECL MSVCP_char_traits_wchar_eq(wchar_t *ch1, wchar_t *ch2)
191 return *ch1 == *ch2;
194 /* ?lt@?$char_traits@_W@std@@SA_NAB_W0@Z */
195 /* ?lt@?$char_traits@_W@std@@SA_NAEB_W0@Z */
196 MSVCP_bool CDECL MSVCP_char_traits_wchar_lt(const wchar_t *ch1,
197 const wchar_t *ch2)
199 return *ch1 < *ch2;
202 /* ?compare@?$char_traits@_W@std@@SAHPB_W0I@Z */
203 /* ?compare@?$char_traits@_W@std@@SAHPEB_W0_K@Z */
204 int CDECL MSVCP_char_traits_wchar_compare(const wchar_t *s1,
205 const wchar_t *s2, MSVCP_size_t count)
207 int ret = memcmp(s1, s2, sizeof(wchar_t[count]));
208 return (ret>0 ? 1 : (ret<0 ? -1 : 0));
211 /* ?length@?$char_traits@_W@std@@SAIPB_W@Z */
212 /* ?length@?$char_traits@_W@std@@SA_KPEB_W@Z */
213 MSVCP_size_t CDECL MSVCP_char_traits_wchar_length(const wchar_t *str)
215 return wcslen((WCHAR*)str);
218 /* ?_Copy_s@?$char_traits@_W@std@@SAPA_WPA_WIPB_WI@Z */
219 /* ?_Copy_s@?$char_traits@_W@std@@SAPEA_WPEA_W_KPEB_W1@Z */
220 wchar_t* CDECL MSVCP_char_traits_wchar__Copy_s(wchar_t *dest,
221 MSVCP_size_t size, const wchar_t *src, MSVCP_size_t count)
223 if(!dest || !src || size<count) {
224 if(dest && size)
225 dest[0] = '\0';
226 _invalid_parameter(NULL, NULL, NULL, 0, 0);
227 return dest;
230 return memcpy(dest, src, sizeof(wchar_t[count]));
233 /* ?copy@?$char_traits@_W@std@@SAPA_WPA_WPB_WI@Z */
234 /* ?copy@?$char_traits@_W@std@@SAPEA_WPEA_WPEB_W_K@Z */
235 wchar_t* CDECL MSVCP_char_traits_wchar_copy(wchar_t *dest,
236 const wchar_t *src, MSVCP_size_t count)
238 return MSVCP_char_traits_wchar__Copy_s(dest, count, src, count);
241 /* ?find@?$char_traits@_W@std@@SAPB_WPB_WIAB_W@Z */
242 /* ?find@?$char_traits@_W@std@@SAPEB_WPEB_W_KAEB_W@Z */
243 const wchar_t* CDECL MSVCP_char_traits_wchar_find(
244 const wchar_t *str, MSVCP_size_t range, const wchar_t *c)
246 MSVCP_size_t i=0;
248 for(i=0; i<range; i++)
249 if(str[i] == *c)
250 return str+i;
252 return NULL;
255 /* ?_Move_s@?$char_traits@_W@std@@SAPA_WPA_WIPB_WI@Z */
256 /* ?_Move_s@?$char_traits@_W@std@@SAPEA_WPEA_W_KPEB_W1@Z */
257 wchar_t* CDECL MSVCP_char_traits_wchar__Move_s(wchar_t *dest,
258 MSVCP_size_t size, const wchar_t *src, MSVCP_size_t count)
260 if(!dest || !src || size<count) {
261 if(dest && size)
262 dest[0] = '\0';
263 _invalid_parameter(NULL, NULL, NULL, 0, 0);
264 return dest;
267 return memmove(dest, src, sizeof(WCHAR[count]));
270 /* ?move@?$char_traits@_W@std@@SAPA_WPA_WPB_WI@Z */
271 /* ?move@?$char_traits@_W@std@@SAPEA_WPEA_WPEB_W_K@Z */
272 wchar_t* CDECL MSVCP_char_traits_wchar_move(wchar_t *dest,
273 const wchar_t *src, MSVCP_size_t count)
275 return MSVCP_char_traits_wchar__Move_s(dest, count, src, count);
278 /* ?assign@?$char_traits@_W@std@@SAPA_WPA_WI_W@Z */
279 /* ?assign@?$char_traits@_W@std@@SAPEA_WPEA_W_K_W@Z */
280 wchar_t* CDECL MSVCP_char_traits_wchar_assignn(wchar_t *str,
281 MSVCP_size_t num, wchar_t c)
283 MSVCP_size_t i;
285 for(i=0; i<num; i++)
286 str[i] = c;
288 return str;
291 /* ?to_char_type@?$char_traits@_W@std@@SA_WABG@Z */
292 /* ?to_char_type@?$char_traits@_W@std@@SA_WAEBG@Z */
293 wchar_t CDECL MSVCP_char_traits_wchar_to_char_type(const unsigned short *i)
295 return *i;
298 /* ?to_int_type@?$char_traits@_W@std@@SAGAB_W@Z */
299 /* ?to_int_type@?$char_traits@_W@std@@SAGAEB_W@Z */
300 unsigned short CDECL MSVCP_char_traits_wchar_to_int_type(const wchar_t *ch)
302 return *ch;
305 /* ?eq_int_type@?$char_traits@_W@std@@SA_NABG0@Z */
306 /* ?eq_int_type@?$char_traits@_W@std@@SA_NAEBG0@Z */
307 MSVCP_bool CDECL MSVCP_char_traits_wchar_eq_int_tpe(const unsigned short *i1,
308 const unsigned short *i2)
310 return *i1 == *i2;
313 /* ?eof@?$char_traits@_W@std@@SAGXZ */
314 unsigned short CDECL MSVCP_char_traits_wchar_eof(void)
316 return WEOF;
319 /* ?not_eof@?$char_traits@_W@std@@SAGABG@Z */
320 /* ?not_eof@?$char_traits@_W@std@@SAGAEBG@Z */
321 unsigned short CDECL MSVCP_char_traits_wchar_not_eof(const unsigned short *in)
323 return (*in==WEOF ? !WEOF : *in);
327 /* char_traits<unsigned short> */
328 /* ?assign@?$char_traits@G@std@@SAXAAGABG@Z */
329 /* ?assign@?$char_traits@G@std@@SAXAEAGAEBG@Z */
330 void CDECL MSVCP_char_traits_short_assign(unsigned short *ch,
331 const unsigned short *assign)
333 *ch = *assign;
336 /* ?eq@?$char_traits@G@std@@SA_NABG0@Z */
337 /* ?eq@?$char_traits@G@std@@SA_NAEBG0@Z */
338 MSVCP_bool CDECL MSVCP_char_traits_short_eq(const unsigned short *ch1,
339 const unsigned short *ch2)
341 return *ch1 == *ch2;
344 /* ?lt@?$char_traits@G@std@@SA_NABG0@Z */
345 /* ?lt@?$char_traits@G@std@@SA_NAEBG0@Z */
346 MSVCP_bool CDECL MSVCP_char_traits_short_lt(const unsigned short *ch1,
347 const unsigned short *ch2)
349 return *ch1 < *ch2;
352 /* ?compare@?$char_traits@G@std@@SAHPBG0I@Z */
353 /* ?compare@?$char_traits@G@std@@SAHPEBG0_K@Z */
354 int CDECL MSVCP_char_traits_short_compare(const unsigned short *s1,
355 const unsigned short *s2, MSVCP_size_t count)
357 MSVCP_size_t i;
359 for(i=0; i<count; i++)
360 if(s1[i] != s2[i])
361 return (s1[i] < s2[i] ? -1 : 1);
363 return 0;
366 /* ?length@?$char_traits@G@std@@SAIPBG@Z */
367 /* ?length@?$char_traits@G@std@@SA_KPEBG@Z */
368 MSVCP_size_t CDECL MSVCP_char_traits_short_length(const unsigned short *str)
370 MSVCP_size_t len;
372 for(len=0; str[len]; len++);
374 return len;
377 /* ?_Copy_s@?$char_traits@G@std@@SAPAGPAGIPBGI@Z */
378 /* ?_Copy_s@?$char_traits@G@std@@SAPEAGPEAG_KPEBG1@Z */
379 unsigned short * CDECL MSVCP_char_traits_short__Copy_s(unsigned short *dest,
380 MSVCP_size_t size, const unsigned short *src, MSVCP_size_t count)
382 if(size<count) {
383 _invalid_parameter(NULL, NULL, NULL, 0, 0);
384 return dest;
387 return memcpy(dest, src, sizeof(unsigned short[count]));
390 /* ?copy@?$char_traits@G@std@@SAPAGPAGPBGI@Z */
391 /* ?copy@?$char_traits@G@std@@SAPEAGPEAGPEBG_K@Z */
392 unsigned short* CDECL MSVCP_char_traits_short_copy(unsigned short *dest,
393 const unsigned short *src, MSVCP_size_t count)
395 return MSVCP_char_traits_short__Copy_s(dest, count, src, count);
398 /* ?find@?$char_traits@G@std@@SAPBGPBGIABG@Z */
399 /* ?find@?$char_traits@G@std@@SAPEBGPEBG_KAEBG@Z */
400 const unsigned short* CDECL MSVCP_char_traits_short_find(
401 const unsigned short *str, MSVCP_size_t range, const unsigned short *c)
403 MSVCP_size_t i;
405 for(i=0; i<range; i++)
406 if(str[i] == *c)
407 return str+i;
409 return NULL;
412 /* ?_Move_s@?$char_traits@G@std@@SAPAGPAGIPBGI@Z */
413 /* ?_Move_s@?$char_traits@G@std@@SAPEAGPEAG_KPEBG1@Z */
414 unsigned short* CDECL MSVCP_char_traits_short__Move_s(unsigned short *dest,
415 MSVCP_size_t size, const unsigned short *src, MSVCP_size_t count)
417 if(size<count) {
418 _invalid_parameter(NULL, NULL, NULL, 0, 0);
419 return dest;
422 return memmove(dest, src, sizeof(unsigned short[count]));
425 /* ?move@?$char_traits@G@std@@SAPAGPAGPBGI@Z */
426 /* ?move@?$char_traits@G@std@@SAPEAGPEAGPEBG_K@Z */
427 unsigned short* CDECL MSVCP_char_traits_short_move(unsigned short *dest,
428 const unsigned short *src, MSVCP_size_t count)
430 return MSVCP_char_traits_short__Move_s(dest, count, src, count);
433 /* ?assign@?$char_traits@G@std@@SAPAGPAGIG@Z */
434 /* ?assign@?$char_traits@G@std@@SAPEAGPEAG_KG@Z */
435 unsigned short* CDECL MSVCP_char_traits_short_assignn(unsigned short *str,
436 MSVCP_size_t num, unsigned short c)
438 MSVCP_size_t i;
440 for(i=0; i<num; i++)
441 str[i] = c;
443 return str;
446 /* ?to_char_type@?$char_traits@G@std@@SAGABG@Z */
447 /* ?to_char_type@?$char_traits@G@std@@SAGAEBG@Z */
448 unsigned short CDECL MSVCP_char_traits_short_to_char_type(const unsigned short *i)
450 return *i;
453 /* ?to_int_type@?$char_traits@G@std@@SAGABG@Z */
454 /* ?to_int_type@?$char_traits@G@std@@SAGAEBG@Z */
455 unsigned short CDECL MSVCP_char_traits_short_to_int_type(const unsigned short *ch)
457 return *ch;
460 /* ?eq_int_type@?$char_traits@G@std@@SA_NABG0@Z */
461 /* ?eq_int_type@?$char_traits@G@std@@SA_NAEBG0@Z */
462 MSVCP_bool CDECL MSVCP_char_traits_short_eq_int_type(unsigned short *i1,
463 unsigned short *i2)
465 return *i1 == *i2;
468 /* ?eof@?$char_traits@G@std@@SAGXZ */
469 unsigned short CDECL MSVCP_char_traits_short_eof(void)
471 return -1;
474 /* ?not_eof@?$char_traits@G@std@@SAGABG@Z */
475 /* ?not_eof@?$char_traits@G@std@@SAGAEBG@Z */
476 unsigned short CDECL MSVCP_char_traits_short_not_eof(const unsigned short *in)
478 return (*in==(unsigned short)-1 ? 0 : *in);
482 /* _String_base */
483 /* ?_Xlen@_String_base@std@@SAXXZ */
484 void CDECL MSVCP__String_base_Xlen(void)
486 static const char msg[] = "string too long";
488 TRACE("\n");
489 throw_exception(EXCEPTION_LENGTH_ERROR, msg);
492 /* ?_Xran@_String_base@std@@SAXXZ */
493 void CDECL MSVCP__String_base_Xran(void)
495 static const char msg[] = "invalid string position";
497 TRACE("\n");
498 throw_exception(EXCEPTION_OUT_OF_RANGE, msg);
501 /* ?_Xinvarg@_String_base@std@@SAXXZ */
502 void CDECL MSVCP__String_base_Xinvarg(void)
504 static const char msg[] = "invalid string argument";
506 TRACE("\n");
507 throw_exception(EXCEPTION_INVALID_ARGUMENT, msg);
511 /* basic_string<char, char_traits<char>, allocator<char>> */
512 /* ?npos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@2IB */
513 /* ?npos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@2_KB */
514 const MSVCP_size_t MSVCP_basic_string_char_npos = -1;
516 /* ?_Myptr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAEPADXZ */
517 /* ?_Myptr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEAAPEADXZ */
518 DEFINE_THISCALL_WRAPPER(basic_string_char_ptr, 4)
519 char* __thiscall basic_string_char_ptr(basic_string_char *this)
521 if(this->res == BUF_SIZE_CHAR-1)
522 return this->data.buf;
523 return this->data.ptr;
526 /* ?_Myptr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IBEPBDXZ */
527 /* ?_Myptr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEBAPEBDXZ */
528 DEFINE_THISCALL_WRAPPER(basic_string_char_const_ptr, 4)
529 const char* __thiscall basic_string_char_const_ptr(const basic_string_char *this)
531 if(this->res == BUF_SIZE_CHAR-1)
532 return this->data.buf;
533 return this->data.ptr;
536 /* ?_Eos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAEXI@Z */
537 /* ?_Eos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEAAX_K@Z */
538 DEFINE_THISCALL_WRAPPER(basic_string_char_eos, 8)
539 void __thiscall basic_string_char_eos(basic_string_char *this, MSVCP_size_t len)
541 static const char nullbyte = '\0';
543 this->size = len;
544 MSVCP_char_traits_char_assign(basic_string_char_ptr(this)+len, &nullbyte);
547 /* ?_Inside@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAE_NPBD@Z */
548 /* ?_Inside@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEAA_NPEBD@Z */
549 DEFINE_THISCALL_WRAPPER(basic_string_char_inside, 8)
550 MSVCP_bool __thiscall basic_string_char_inside(
551 basic_string_char *this, const char *ptr)
553 char *cstr = basic_string_char_ptr(this);
555 return (ptr<cstr || ptr>=cstr+this->size) ? FALSE : TRUE;
558 /* ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAEX_NI@Z */
559 /* ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEAAX_N_K@Z */
560 DEFINE_THISCALL_WRAPPER(basic_string_char_tidy, 12)
561 void __thiscall basic_string_char_tidy(basic_string_char *this,
562 MSVCP_bool built, MSVCP_size_t new_size)
564 if(built && BUF_SIZE_CHAR<=this->res) {
565 char *ptr = this->data.ptr;
567 if(new_size > 0)
568 MSVCP_char_traits_char__Copy_s(this->data.buf, BUF_SIZE_CHAR, ptr, new_size);
569 MSVCP_allocator_char_deallocate(this->allocator, ptr, this->res+1);
572 this->res = BUF_SIZE_CHAR-1;
573 basic_string_char_eos(this, new_size);
576 /* Exported only from msvcp60/70 */
577 /* ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEX_N@Z */
578 /* ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAX_N@Z */
579 DEFINE_THISCALL_WRAPPER(basic_string_char_tidy_built, 8)
580 void __thiscall basic_string_char_tidy_built(basic_string_char *this, MSVCP_bool built)
582 basic_string_char_tidy(this, built, 0);
585 /* ?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAE_NI_N@Z */
586 /* ?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEAA_N_K_N@Z */
587 DEFINE_THISCALL_WRAPPER(basic_string_char_grow, 12)
588 MSVCP_bool __thiscall basic_string_char_grow(
589 basic_string_char *this, MSVCP_size_t new_size, MSVCP_bool trim)
591 if(this->res < new_size) {
592 MSVCP_size_t new_res = new_size, len = this->size;
593 char *ptr;
595 new_res |= 0xf;
597 if(new_res/3 < this->res/2)
598 new_res = this->res + this->res/2;
600 ptr = MSVCP_allocator_char_allocate(this->allocator, new_res);
601 if(!ptr)
602 ptr = MSVCP_allocator_char_allocate(this->allocator, new_size+1);
603 else
604 new_size = new_res;
605 if(!ptr) {
606 ERR("Out of memory\n");
607 basic_string_char_tidy(this, TRUE, 0);
608 return FALSE;
611 MSVCP_char_traits_char__Copy_s(ptr, new_size,
612 basic_string_char_ptr(this), this->size);
613 basic_string_char_tidy(this, TRUE, 0);
614 this->data.ptr = ptr;
615 this->res = new_size;
616 basic_string_char_eos(this, len);
617 } else if(trim && new_size < BUF_SIZE_CHAR)
618 basic_string_char_tidy(this, TRUE,
619 new_size<this->size ? new_size : this->size);
620 else if(new_size == 0)
621 basic_string_char_eos(this, 0);
623 return (new_size>0);
626 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@II@Z */
627 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0@Z */
628 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_erase, 12)
629 basic_string_char* __thiscall MSVCP_basic_string_char_erase(
630 basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t len)
632 TRACE("%p %lu %lu\n", this, pos, len);
634 if(pos > this->size) {
635 MSVCP__String_base_Xran();
636 return NULL;
639 if(len > this->size-pos)
640 len = this->size-pos;
642 if(len) {
643 MSVCP_char_traits_char__Move_s(basic_string_char_ptr(this)+pos,
644 this->res-pos, basic_string_char_ptr(this)+pos+len,
645 this->size-pos-len);
646 basic_string_char_eos(this, this->size-len);
649 return this;
652 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z */
653 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
654 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_substr, 16)
655 basic_string_char* __thiscall MSVCP_basic_string_char_assign_substr(
656 basic_string_char *this, const basic_string_char *assign,
657 MSVCP_size_t pos, MSVCP_size_t len)
659 TRACE("%p %p %lu %lu\n", this, assign, pos, len);
661 if(assign->size < pos) {
662 MSVCP__String_base_Xran();
663 return NULL;
666 if(len > assign->size-pos)
667 len = assign->size-pos;
669 if(this == assign) {
670 MSVCP_basic_string_char_erase(this, pos+len, MSVCP_basic_string_char_npos);
671 MSVCP_basic_string_char_erase(this, 0, pos);
672 } else if(basic_string_char_grow(this, len, FALSE)) {
673 MSVCP_char_traits_char__Copy_s(basic_string_char_ptr(this),
674 this->res, basic_string_char_const_ptr(assign)+pos, len);
675 basic_string_char_eos(this, len);
678 return this;
681 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@@Z */
682 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@@Z */
683 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@ABV01@@Z */
684 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@AEBV01@@Z */
685 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign, 8)
686 basic_string_char* __thiscall MSVCP_basic_string_char_assign(
687 basic_string_char *this, const basic_string_char *assign)
689 return MSVCP_basic_string_char_assign_substr(this, assign,
690 0, MSVCP_basic_string_char_npos);
693 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z */
694 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD_K@Z */
695 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_cstr_len, 12)
696 basic_string_char* __thiscall MSVCP_basic_string_char_assign_cstr_len(
697 basic_string_char *this, const char *str, MSVCP_size_t len)
699 TRACE("%p %s %lu\n", this, debugstr_a(str), len);
701 if(basic_string_char_inside(this, str))
702 return MSVCP_basic_string_char_assign_substr(this, this,
703 str-basic_string_char_ptr(this), len);
704 else if(basic_string_char_grow(this, len, FALSE)) {
705 MSVCP_char_traits_char__Copy_s(basic_string_char_ptr(this),
706 this->res, str, len);
707 basic_string_char_eos(this, len);
710 return this;
713 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@D@Z */
714 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@D@Z */
715 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_ch, 8)
716 basic_string_char* __thiscall MSVCP_basic_string_char_assign_ch(
717 basic_string_char *this, char ch)
719 return MSVCP_basic_string_char_assign_cstr_len(this, &ch, 1);
722 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z */
723 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD@Z */
724 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z */
725 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@PEBD@Z */
726 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_cstr, 8)
727 basic_string_char* __thiscall MSVCP_basic_string_char_assign_cstr(
728 basic_string_char *this, const char *str)
730 return MSVCP_basic_string_char_assign_cstr_len(this, str,
731 MSVCP_char_traits_char_length(str));
734 /* ?_Chassign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAEXIID@Z */
735 /* ?_Chassign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEAAX_K0D@Z */
736 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_Chassign, 16)
737 void __thiscall MSVCP_basic_string_char_Chassign(basic_string_char *this,
738 MSVCP_size_t off, MSVCP_size_t count, char ch)
740 TRACE("%p %lu %lu %c\n", this, off, count, ch);
741 MSVCP_char_traits_char_assignn(basic_string_char_ptr(this)+off, count, ch);
744 /* ?_Copy_s@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPADIII@Z */
745 /* ?_Copy_s@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEAD_K11@Z */
746 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_Copy_s, 20)
747 MSVCP_size_t __thiscall MSVCP_basic_string_char_Copy_s(const basic_string_char *this,
748 char *dest, MSVCP_size_t size, MSVCP_size_t off, MSVCP_size_t count)
750 TRACE("%p %p %lu %lu %lu\n", this, dest, size, off, count);
752 if(this->size < off)
753 MSVCP__String_base_Xran();
755 if(count > this->size-off)
756 count = this->size-off;
758 MSVCP_char_traits_char__Copy_s(dest, size,
759 basic_string_char_const_ptr(this)+off, count);
760 return count;
763 /* ?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
764 /* ?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
765 /* ?data@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
766 /* ?data@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
767 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_c_str, 4)
768 const char* __thiscall MSVCP_basic_string_char_c_str(basic_string_char *this)
770 TRACE("%p\n", this);
771 return basic_string_char_const_ptr(this);
774 /* ?capacity@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
775 /* ?capacity@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
776 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_capacity, 4)
777 MSVCP_size_t __thiscall MSVCP_basic_string_char_capacity(basic_string_char *this)
779 TRACE("%p\n", this);
780 return this->res;
783 /* ?reserve@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXI@Z */
784 /* ?reserve@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_K@Z */
785 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_reserve, 8)
786 void __thiscall MSVCP_basic_string_char_reserve(basic_string_char *this, MSVCP_size_t size)
788 MSVCP_size_t len;
790 TRACE("%p %ld\n", this, size);
792 len = this->size;
793 if(len > size)
794 return;
796 basic_string_char_grow(this, size, FALSE);
797 basic_string_char_eos(this, len);
800 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ */
801 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@XZ */
802 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor, 4)
803 basic_string_char* __thiscall MSVCP_basic_string_char_ctor(basic_string_char *this)
805 TRACE("%p\n", this);
807 basic_string_char_tidy(this, FALSE, 0);
808 return this;
811 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z */
812 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV01@@Z */
813 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_copy_ctor, 8)
814 basic_string_char* __thiscall MSVCP_basic_string_char_copy_ctor(
815 basic_string_char *this, const basic_string_char *copy)
817 TRACE("%p %p\n", this, copy);
819 basic_string_char_tidy(this, FALSE, 0);
820 MSVCP_basic_string_char_assign(this, copy);
821 return this;
824 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z */
825 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD@Z */
826 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr, 8)
827 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr(
828 basic_string_char *this, const char *str)
830 TRACE("%p %s\n", this, debugstr_a(str));
832 basic_string_char_tidy(this, FALSE, 0);
833 MSVCP_basic_string_char_assign_cstr(this, str);
834 return this;
837 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDI@Z */
838 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD_K@Z */
839 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr_len, 12)
840 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr_len(
841 basic_string_char *this, const char *str, MSVCP_size_t len)
843 TRACE("%p %s %ld\n", this, str, len);
845 basic_string_char_tidy(this, FALSE, 0);
846 MSVCP_basic_string_char_assign_cstr_len(this, str, len);
847 return this;
850 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@II@Z */
851 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV01@_K1@Z */
852 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_substr, 16)
853 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_substr(
854 basic_string_char *this, const basic_string_char *assign,
855 MSVCP_size_t pos, MSVCP_size_t len)
857 TRACE("%p %p %lu %lu\n", this, assign, pos, len);
859 basic_string_char_tidy(this, FALSE, 0);
860 MSVCP_basic_string_char_assign_substr(this, assign, pos, len);
861 return this;
864 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV?$allocator@D@1@@Z */
865 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV?$allocator@D@1@@Z */
866 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_alloc, 8)
867 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_alloc(
868 basic_string_char *this, const void *alloc)
870 TRACE("%p %p\n", this, alloc);
872 basic_string_char_tidy(this, FALSE, 0);
873 return this;
876 /* ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ */
877 /* ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@XZ */
878 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_dtor, 4)
879 void __thiscall MSVCP_basic_string_char_dtor(basic_string_char *this)
881 TRACE("%p\n", this);
882 basic_string_char_tidy(this, TRUE, 0);
885 /* ?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
886 /* ?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
887 /* ?length@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
888 /* ?length@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
889 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_length, 4)
890 MSVCP_size_t __thiscall MSVCP_basic_string_char_length(basic_string_char *this)
892 TRACE("%p\n", this);
893 return this->size;
896 /* ?empty@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE_NXZ */
897 /* ?empty@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_NXZ */
898 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_empty, 4)
899 MSVCP_bool __thiscall MSVCP_basic_string_char_empty(basic_string_char *this)
901 TRACE("%p\n", this);
902 return this->size == 0;
905 /* ?swap@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXAAV12@@Z */
906 /* ?swap@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXAEAV12@@Z */
907 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_swap, 8)
908 void __thiscall MSVCP_basic_string_char_swap(basic_string_char *this, basic_string_char *str)
910 if(this != str) {
911 char tmp[sizeof(this->data)];
912 const MSVCP_size_t size = this->size;
913 const MSVCP_size_t res = this->res;
915 memcpy(tmp, this->data.buf, sizeof(this->data));
916 memcpy(this->data.buf, str->data.buf, sizeof(this->data));
917 memcpy(str->data.buf, tmp, sizeof(this->data));
919 this->size = str->size;
920 this->res = str->res;
922 str->size = size;
923 str->res = res;
927 /* ?substr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV12@II@Z */
928 /* ?substr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV12@_K0@Z */
929 DEFINE_THISCALL_WRAPPER_RETPTR(MSVCP_basic_string_char_substr, 12)
930 basic_string_char __thiscall MSVCP_basic_string_char_substr(
931 basic_string_char *this, MSVCP_size_t off, MSVCP_size_t len)
933 basic_string_char ret = { 0 };
934 TRACE("%p %lu %lu\n", this, off, len);
936 MSVCP_basic_string_char_ctor_substr(&ret, this, off, len);
937 return ret;
940 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z */
941 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
942 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_substr, 16)
943 basic_string_char* __thiscall MSVCP_basic_string_char_append_substr(basic_string_char *this,
944 const basic_string_char *append, MSVCP_size_t offset, MSVCP_size_t count)
946 TRACE("%p %p %lu %lu\n", this, append, offset, count);
948 if(append->size < offset)
949 MSVCP__String_base_Xran();
951 if(count > append->size-offset)
952 count = append->size-offset;
954 if(MSVCP_basic_string_char_npos-this->size<=count || this->size+count<this->size)
955 MSVCP__String_base_Xlen();
957 if(basic_string_char_grow(this, this->size+count, FALSE)) {
958 MSVCP_char_traits_char__Copy_s(basic_string_char_ptr(this)+this->size,
959 this->res-this->size, basic_string_char_const_ptr(append)+offset, count);
960 basic_string_char_eos(this, this->size+count);
963 return this;
966 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@@Z */
967 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@@Z */
968 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@ABV01@@Z */
969 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@AEBV01@@Z */
970 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append, 8)
971 basic_string_char* __thiscall MSVCP_basic_string_char_append(
972 basic_string_char *this, const basic_string_char *append)
974 return MSVCP_basic_string_char_append_substr(this, append,
975 0, MSVCP_basic_string_char_npos);
978 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z */
979 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD_K@Z */
980 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_cstr_len, 12)
981 basic_string_char* __thiscall MSVCP_basic_string_char_append_cstr_len(
982 basic_string_char *this, const char *append, MSVCP_size_t count)
984 TRACE("%p %s %lu\n", this, append, count);
986 if(basic_string_char_inside(this, append))
987 return MSVCP_basic_string_char_append_substr(this, this,
988 append-basic_string_char_ptr(this), count);
990 if(MSVCP_basic_string_char_npos-this->size<=count || this->size+count<this->size)
991 MSVCP__String_base_Xlen();
993 if(basic_string_char_grow(this, this->size+count, FALSE)) {
994 MSVCP_char_traits_char__Copy_s(basic_string_char_ptr(this)+this->size,
995 this->res-this->size, append, count);
996 basic_string_char_eos(this, this->size+count);
999 return this;
1002 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z */
1003 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD@Z */
1004 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z */
1005 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@PEBD@Z */
1006 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_cstr, 8)
1007 basic_string_char* __thiscall MSVCP_basic_string_char_append_cstr(
1008 basic_string_char *this, const char *append)
1010 return MSVCP_basic_string_char_append_cstr_len(this, append,
1011 MSVCP_char_traits_char_length(append));
1014 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD0@Z */
1015 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD0@Z */
1016 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_beg_end, 12)
1017 basic_string_char* __thiscall MSVCP_basic_string_char_append_beg_end(
1018 basic_string_char *this, const char *beg, const char *end)
1020 return MSVCP_basic_string_char_append_cstr_len(this, beg, end-beg);
1023 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0@Z */
1024 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0@Z */
1025 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_iter, 20)
1026 basic_string_char* __thiscall MSVCP_basic_string_char_append_iter(
1027 basic_string_char *this, String_iterator_char beg, String_iterator_char end)
1029 return MSVCP_basic_string_char_append_cstr_len(this, beg.pos, end.pos-beg.pos+1);
1032 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ID@Z */
1033 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KD@Z */
1034 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_len_ch, 12)
1035 basic_string_char* __thiscall MSVCP_basic_string_char_append_len_ch(
1036 basic_string_char *this, MSVCP_size_t count, char ch)
1038 TRACE("%p %lu %c\n", this, count, ch);
1040 if(MSVCP_basic_string_char_npos-this->size <= count)
1041 MSVCP__String_base_Xlen();
1043 if(basic_string_char_grow(this, this->size+count, FALSE)) {
1044 MSVCP_char_traits_char_assignn(basic_string_char_ptr(this)+this->size, count, ch);
1045 basic_string_char_eos(this, this->size+count);
1048 return this;
1051 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@D@Z */
1052 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@D@Z */
1053 /* ?push_back@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXD@Z */
1054 /* ?push_back@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXD@Z */
1055 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_ch, 8)
1056 basic_string_char* __thiscall MSVCP_basic_string_char_append_ch(
1057 basic_string_char *this, char ch)
1059 return MSVCP_basic_string_char_append_len_ch(this, 1, ch);
1062 /* ??$?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 */
1063 /* ??$?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 */
1064 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_bstr_cstr(basic_string_char *ret,
1065 const basic_string_char *left, const char *right)
1067 TRACE("%p %s\n", left, right);
1069 MSVCP_basic_string_char_copy_ctor(ret, left);
1070 MSVCP_basic_string_char_append_cstr(ret, right);
1071 return ret;
1074 /* ??$?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 */
1075 /* ??$?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 */
1076 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_cstr_bstr(basic_string_char *ret,
1077 const char *left, const basic_string_char *right)
1079 TRACE("%s %p\n", left, right);
1081 MSVCP_basic_string_char_ctor_cstr(ret, left);
1082 MSVCP_basic_string_char_append(ret, right);
1083 return ret;
1086 /* ??$?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 */
1087 /* ??$?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 */
1088 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate(basic_string_char *ret,
1089 const basic_string_char *left, const basic_string_char *right)
1091 TRACE("%p %p\n", left, right);
1093 MSVCP_basic_string_char_copy_ctor(ret, left);
1094 MSVCP_basic_string_char_append(ret, right);
1095 return ret;
1098 /* ??$?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 */
1099 /* ??$?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 */
1100 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_bstr_ch(basic_string_char *ret,
1101 const basic_string_char *left, char right)
1103 TRACE("%p %c\n", left, right);
1105 MSVCP_basic_string_char_copy_ctor(ret, left);
1106 MSVCP_basic_string_char_append_ch(ret, right);
1107 return ret;
1110 /* ??$?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 */
1111 /* ??$?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 */
1112 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_ch_bstr(basic_string_char *ret,
1113 char left, const basic_string_char *right)
1115 TRACE("%c %p\n", left, right);
1117 MSVCP_basic_string_char_ctor_cstr_len(ret, &left, 1);
1118 MSVCP_basic_string_char_append(ret, right);
1119 return ret;
1122 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIPBDI@Z */
1123 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0PEBD0@Z */
1124 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_cstr_len, 20)
1125 int __thiscall MSVCP_basic_string_char_compare_substr_cstr_len(
1126 const basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t num,
1127 const char *str, MSVCP_size_t count)
1129 int ans;
1131 TRACE("%p %lu %lu %s %lu\n", this, pos, num, str, count);
1133 if(this->size < pos)
1134 MSVCP__String_base_Xran();
1136 if(pos+num > this->size)
1137 num = this->size-pos;
1139 ans = MSVCP_char_traits_char_compare(basic_string_char_const_ptr(this)+pos,
1140 str, num>count ? count : num);
1141 if(ans)
1142 return ans;
1144 if(num > count)
1145 ans = 1;
1146 else if(num < count)
1147 ans = -1;
1148 return ans;
1151 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIPBD@Z */
1152 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0PEBD@Z */
1153 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_cstr, 16)
1154 int __thiscall MSVCP_basic_string_char_compare_substr_cstr(const basic_string_char *this,
1155 MSVCP_size_t pos, MSVCP_size_t num, const char *str)
1157 return MSVCP_basic_string_char_compare_substr_cstr_len(this, pos, num,
1158 str, MSVCP_char_traits_char_length(str));
1161 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHPBD@Z */
1162 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAHPEBD@Z */
1163 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_cstr, 8)
1164 int __thiscall MSVCP_basic_string_char_compare_cstr(
1165 const basic_string_char *this, const char *str)
1167 return MSVCP_basic_string_char_compare_substr_cstr_len(this, 0, this->size,
1168 str, MSVCP_char_traits_char_length(str));
1171 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIABV12@II@Z */
1172 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0AEBV12@00@Z */
1173 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_substr, 24)
1174 int __thiscall MSVCP_basic_string_char_compare_substr_substr(
1175 const basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t num,
1176 const basic_string_char *compare, MSVCP_size_t off, MSVCP_size_t count)
1178 TRACE("%p %lu %lu %p %lu %lu\n", this, pos, num, compare, off, count);
1180 if(compare->size < off)
1181 MSVCP__String_base_Xran();
1183 if(off+count > compare->size)
1184 count = compare->size-off;
1186 return MSVCP_basic_string_char_compare_substr_cstr_len(this, pos, num,
1187 basic_string_char_const_ptr(compare)+off, count);
1190 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIABV12@@Z */
1191 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0AEBV12@@Z */
1192 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr, 16)
1193 int __thiscall MSVCP_basic_string_char_compare_substr(
1194 const basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t num,
1195 const basic_string_char *compare)
1197 return MSVCP_basic_string_char_compare_substr_cstr_len(this, pos, num,
1198 basic_string_char_const_ptr(compare), compare->size);
1201 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHABV12@@Z */
1202 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAHAEBV12@@Z */
1203 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare, 8)
1204 int __thiscall MSVCP_basic_string_char_compare(
1205 const basic_string_char *this, const basic_string_char *compare)
1207 return MSVCP_basic_string_char_compare_substr_cstr_len(this, 0, this->size,
1208 basic_string_char_const_ptr(compare), compare->size);
1211 /* ??$?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 */
1212 /* ??$?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 */
1213 MSVCP_bool __cdecl MSVCP_basic_string_char_equal(
1214 const basic_string_char *left, const basic_string_char *right)
1216 return MSVCP_basic_string_char_compare(left, right) == 0;
1219 /* ??$?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 */
1220 /* ??$?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 */
1221 MSVCP_bool __cdecl MSVCP_basic_string_char_equal_str_cstr(
1222 const basic_string_char *left, const char *right)
1224 return MSVCP_basic_string_char_compare_cstr(left, right) == 0;
1227 /* ??$?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 */
1228 /* ??$?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 */
1229 MSVCP_bool __cdecl MSVCP_basic_string_char_equal_cstr_str(
1230 const char *left, const basic_string_char *right)
1232 return MSVCP_basic_string_char_compare_cstr(right, left) == 0;
1235 /* ??$?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 */
1236 /* ??$?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 */
1237 MSVCP_bool __cdecl MSVCP_basic_string_char_not_equal(
1238 const basic_string_char *left, const basic_string_char *right)
1240 return MSVCP_basic_string_char_compare(left, right) != 0;
1243 /* ??$?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 */
1244 /* ??$?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 */
1245 MSVCP_bool __cdecl MSVCP_basic_string_char_not_equal_str_cstr(
1246 const basic_string_char *left, const char *right)
1248 return MSVCP_basic_string_char_compare_cstr(left, right) != 0;
1251 /* ??$?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 */
1252 /* ??$?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 */
1253 MSVCP_bool __cdecl MSVCP_basic_string_char_not_equal_cstr_str(
1254 const char *left, const basic_string_char *right)
1256 return MSVCP_basic_string_char_compare_cstr(right, left) != 0;
1259 /* ??$?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 */
1260 /* ??$?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 */
1261 MSVCP_bool __cdecl MSVCP_basic_string_char_lower(
1262 const basic_string_char *left, const basic_string_char *right)
1264 return MSVCP_basic_string_char_compare(left, right) < 0;
1267 /* ??$?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 */
1268 /* ??$?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 */
1269 MSVCP_bool __cdecl MSVCP_basic_string_char_lower_bstr_cstr(
1270 const basic_string_char *left, const char *right)
1272 return MSVCP_basic_string_char_compare_cstr(left, right) < 0;
1275 /* ??$?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 */
1276 /* ??$?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 */
1277 MSVCP_bool __cdecl MSVCP_basic_string_char_lower_cstr_bstr(
1278 const char *left, const basic_string_char *right)
1280 return MSVCP_basic_string_char_compare_cstr(right, left) > 0;
1283 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1284 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1285 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_cstr_substr, 16)
1286 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_cstr_substr(
1287 const basic_string_char *this, const char *find, MSVCP_size_t pos, MSVCP_size_t len)
1289 const char *p, *end;
1291 TRACE("%p %s %lu %lu\n", this, find, pos, len);
1293 if(len==0 && pos<=this->size)
1294 return pos;
1296 end = basic_string_char_const_ptr(this)+this->size-len+1;
1297 for(p=basic_string_char_const_ptr(this)+pos; p<end; p++) {
1298 p = MSVCP_char_traits_char_find(p, end-p, find);
1299 if(!p)
1300 break;
1302 if(!MSVCP_char_traits_char_compare(p, find, len))
1303 return p-basic_string_char_const_ptr(this);
1306 return MSVCP_basic_string_char_npos;
1309 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1310 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1311 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_cstr_off, 12)
1312 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_cstr_off(
1313 const basic_string_char *this, const char *find, MSVCP_size_t pos)
1315 return MSVCP_basic_string_char_find_cstr_substr(this, find, pos,
1316 MSVCP_char_traits_char_length(find));
1319 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1320 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1321 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_off, 12)
1322 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_off(
1323 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
1325 return MSVCP_basic_string_char_find_cstr_substr(this,
1326 basic_string_char_const_ptr(find), off, find->size);
1329 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1330 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1331 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_ch, 12)
1332 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_ch(
1333 const basic_string_char *this, char ch, MSVCP_size_t pos)
1335 return MSVCP_basic_string_char_find_cstr_substr(this, &ch, pos, 1);
1338 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1339 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1340 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of_cstr_substr, 16)
1341 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_of_cstr_substr(
1342 const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len)
1344 const char *p, *end;
1346 TRACE("%p %p %lu %lu\n", this, find, off, len);
1348 if(len>0 && off<this->size) {
1349 end = basic_string_char_const_ptr(this)+this->size;
1350 for(p=basic_string_char_const_ptr(this)+off; p<end; p++)
1351 if(MSVCP_char_traits_char_find(find, len, p))
1352 return p-basic_string_char_const_ptr(this);
1355 return MSVCP_basic_string_char_npos;
1358 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1359 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1360 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of, 12)
1361 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_of(
1362 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
1364 return MSVCP_basic_string_char_find_first_of_cstr_substr(this,
1365 basic_string_char_const_ptr(find), off, find->size);
1368 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1369 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1370 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of_cstr, 12)
1371 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_of_cstr(
1372 const basic_string_char *this, const char *find, MSVCP_size_t off)
1374 return MSVCP_basic_string_char_find_first_of_cstr_substr(
1375 this, find, off, MSVCP_char_traits_char_length(find));
1378 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1379 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1380 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of_ch, 12)
1381 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_of_ch(
1382 const basic_string_char *this, char ch, MSVCP_size_t off)
1384 return MSVCP_basic_string_char_find_first_of_cstr_substr(this, &ch, off, 1);
1387 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1388 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1389 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of_cstr_substr, 16)
1390 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_not_of_cstr_substr(
1391 const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len)
1393 const char *p, *end;
1395 TRACE("%p %p %lu %lu\n", this, find, off, len);
1397 if(off<this->size) {
1398 end = basic_string_char_const_ptr(this)+this->size;
1399 for(p=basic_string_char_const_ptr(this)+off; p<end; p++)
1400 if(!MSVCP_char_traits_char_find(find, len, p))
1401 return p-basic_string_char_const_ptr(this);
1404 return MSVCP_basic_string_char_npos;
1407 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1408 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1409 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of, 12)
1410 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_not_of(
1411 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
1413 return MSVCP_basic_string_char_find_first_not_of_cstr_substr(this,
1414 basic_string_char_const_ptr(find), off, find->size);
1417 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1418 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1419 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of_cstr, 12)
1420 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_not_of_cstr(
1421 const basic_string_char *this, const char *find, MSVCP_size_t off)
1423 return MSVCP_basic_string_char_find_first_not_of_cstr_substr(
1424 this, find, off, MSVCP_char_traits_char_length(find));
1427 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1428 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1429 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of_ch, 12)
1430 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_not_of_ch(
1431 const basic_string_char *this, char ch, MSVCP_size_t off)
1433 return MSVCP_basic_string_char_find_first_not_of_cstr_substr(this, &ch, off, 1);
1436 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1437 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1438 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of_cstr_substr, 16)
1439 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_of_cstr_substr(
1440 const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len)
1442 const char *p, *beg;
1444 TRACE("%p %p %lu %lu\n", this, find, off, len);
1447 if(len>0 && this->size>0) {
1448 if(off >= this->size)
1449 off = this->size-1;
1451 beg = basic_string_char_const_ptr(this);
1452 for(p=beg+off; p>=beg; p--)
1453 if(MSVCP_char_traits_char_find(find, len, p))
1454 return p-beg;
1457 return MSVCP_basic_string_char_npos;
1460 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1461 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1462 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of, 12)
1463 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_of(
1464 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
1466 return MSVCP_basic_string_char_find_last_of_cstr_substr(this,
1467 basic_string_char_const_ptr(find), off, find->size);
1470 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1471 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1472 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of_cstr, 12)
1473 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_of_cstr(
1474 const basic_string_char *this, const char *find, MSVCP_size_t off)
1476 return MSVCP_basic_string_char_find_last_of_cstr_substr(
1477 this, find, off, MSVCP_char_traits_char_length(find));
1480 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1481 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1482 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of_ch, 12)
1483 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_of_ch(
1484 const basic_string_char *this, char ch, MSVCP_size_t off)
1486 return MSVCP_basic_string_char_find_last_of_cstr_substr(this, &ch, off, 1);
1489 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAADI@Z */
1490 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAD_K@Z */
1491 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAADI@Z */
1492 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAD_K@Z */
1493 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_at, 8)
1494 char* __thiscall MSVCP_basic_string_char_at(
1495 basic_string_char *this, MSVCP_size_t pos)
1497 TRACE("%p %lu\n", this, pos);
1499 if(this->size <= pos)
1500 MSVCP__String_base_Xran();
1502 return basic_string_char_ptr(this)+pos;
1505 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIPBDI@Z */
1506 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0PEBD0@Z */
1507 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_cstr_len, 20)
1508 basic_string_char* __thiscall basic_string_char_replace_cstr_len(basic_string_char *this,
1509 MSVCP_size_t off, MSVCP_size_t len, const char *str, MSVCP_size_t str_len)
1511 MSVCP_size_t inside_pos = -1;
1512 char *ptr = basic_string_char_ptr(this);
1514 TRACE("%p %ld %ld %p %ld\n", this, off, len, str, str_len);
1516 if(this->size < off)
1517 MSVCP__String_base_Xran();
1519 if(off+len > this->size)
1520 len = this->size-off;
1522 if(MSVCP_basic_string_char_npos-str_len <= this->size-len)
1523 MSVCP__String_base_Xlen();
1525 if(basic_string_char_inside(this, str))
1526 inside_pos = str-ptr;
1528 if(len < str_len)
1529 basic_string_char_grow(this, this->size-len+str_len, FALSE);
1531 if(inside_pos == -1) {
1532 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1533 memcpy(ptr+off, str, str_len*sizeof(char));
1534 } else if(len >= str_len) {
1535 memmove(ptr+off, ptr+inside_pos, str_len*sizeof(char));
1536 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1537 } else {
1538 MSVCP_size_t size;
1540 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1542 if(inside_pos < off+len) {
1543 size = off+len-inside_pos;
1544 if(size > str_len)
1545 size = str_len;
1546 memmove(ptr+off, ptr+inside_pos, size*sizeof(char));
1547 } else {
1548 size = 0;
1551 if(str_len > size)
1552 memmove(ptr+off+size, ptr+off+str_len, (str_len-size)*sizeof(char));
1555 basic_string_char_eos(this, this->size-len+str_len);
1556 return this;
1559 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIPBD@Z */
1560 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0PEBD@Z */
1561 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_cstr, 16)
1562 basic_string_char* __thiscall basic_string_char_replace_cstr(basic_string_char *this,
1563 MSVCP_size_t off, MSVCP_size_t len, const char *str)
1565 return basic_string_char_replace_cstr_len(this, off, len, str,
1566 MSVCP_char_traits_char_length(str));
1569 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIABV12@II@Z */
1570 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0AEBV12@00@Z */
1571 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_substr, 24)
1572 basic_string_char* __thiscall basic_string_char_replace_substr(basic_string_char *this, MSVCP_size_t off,
1573 MSVCP_size_t len, const basic_string_char *str, MSVCP_size_t str_off, MSVCP_size_t str_len)
1575 if(str->size < str_off)
1576 MSVCP__String_base_Xran();
1578 if(str_off+str_len > str->size)
1579 str_len = str->size-str_off;
1581 return basic_string_char_replace_cstr_len(this, off, len,
1582 basic_string_char_const_ptr(str)+str_off, str_len);
1585 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIABV12@@Z */
1586 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0AEBV12@@Z */
1587 DEFINE_THISCALL_WRAPPER(basic_string_char_replace, 16)
1588 basic_string_char* __thiscall basic_string_char_replace(basic_string_char *this,
1589 MSVCP_size_t off, MSVCP_size_t len, const basic_string_char *str)
1591 return basic_string_char_replace_cstr_len(this, off, len,
1592 basic_string_char_const_ptr(str), str->size);
1595 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIID@Z */
1596 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K00D@Z */
1597 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_ch, 20)
1598 basic_string_char* __thiscall basic_string_char_replace_ch(basic_string_char *this,
1599 MSVCP_size_t off, MSVCP_size_t len, MSVCP_size_t count, char ch)
1601 char *ptr = basic_string_char_ptr(this);
1603 TRACE("%p %ld %ld %ld %c\n", this, off, len, count, ch);
1605 if(this->size < off)
1606 MSVCP__String_base_Xran();
1608 if(off+len > this->size)
1609 len = this->size-off;
1611 if(MSVCP_basic_string_char_npos-count <= this->size-len)
1612 MSVCP__String_base_Xlen();
1614 if(len < count)
1615 basic_string_char_grow(this, this->size-len+count, FALSE);
1617 memmove(ptr+off+count, ptr+off+len, (this->size-off-len)*sizeof(char));
1618 MSVCP_char_traits_char_assignn(ptr+off, count, ch);
1619 basic_string_char_eos(this, this->size-len+count);
1621 return this;
1624 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDI@Z */
1625 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAAEBD_K@Z */
1626 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDI@Z */
1627 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAAEBD_K@Z */
1628 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_const_at, 8)
1629 const char* __thiscall MSVCP_basic_string_char_const_at(
1630 const basic_string_char *this, MSVCP_size_t pos)
1632 TRACE("%p %lu\n", this, pos);
1634 if(this->size <= pos)
1635 MSVCP__String_base_Xran();
1637 return basic_string_char_const_ptr(this)+pos;
1640 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXID@Z */
1641 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_KD@Z */
1642 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_resize_ch, 12)
1643 void __thiscall MSVCP_basic_string_char_resize_ch(
1644 basic_string_char *this, MSVCP_size_t size, char ch)
1646 TRACE("%p %lu %c\n", this, size, ch);
1648 if(size <= this->size)
1649 MSVCP_basic_string_char_erase(this, size, this->size);
1650 else
1651 MSVCP_basic_string_char_append_len_ch(this, size-this->size, ch);
1654 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXI@Z */
1655 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_K@Z */
1656 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_resize, 8)
1657 void __thiscall MSVCP_basic_string_char_resize(
1658 basic_string_char *this, MSVCP_size_t size)
1660 MSVCP_basic_string_char_resize_ch(this, size, '\0');
1663 /* ?clear@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */
1664 /* ?clear@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */
1665 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_clear, 4)
1666 void __thiscall MSVCP_basic_string_char_clear(basic_string_char *this)
1668 basic_string_char_eos(this, 0);
1671 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
1672 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
1673 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
1674 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
1675 DEFINE_THISCALL_WRAPPER_RETPTR(MSVCP_basic_string_char_begin, 4)
1676 String_iterator_char __thiscall MSVCP_basic_string_char_begin(basic_string_char *this)
1678 String_iterator_char ret;
1680 TRACE("%p\n", this);
1682 ret.bstr = this;
1683 ret.pos = basic_string_char_const_ptr(this);
1684 return ret;
1687 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
1688 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
1689 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
1690 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
1691 DEFINE_THISCALL_WRAPPER_RETPTR(MSVCP_basic_string_char_end, 4)
1692 String_iterator_char __thiscall MSVCP_basic_string_char_end(basic_string_char *this)
1694 String_iterator_char ret;
1696 TRACE("%p\n", this);
1698 ret.bstr = this;
1699 ret.pos = basic_string_char_const_ptr(this)+this->size;
1700 return ret;
1703 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$reverse_iterator@V?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@XZ */
1704 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$reverse_iterator@V?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@XZ */
1705 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$reverse_iterator@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@XZ */
1706 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$reverse_iterator@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@XZ */
1707 DEFINE_THISCALL_WRAPPER_RETPTR(MSVCP_basic_string_char_rbegin, 4)
1708 String_reverse_iterator_char __thiscall MSVCP_basic_string_char_rbegin(basic_string_char *this)
1710 String_reverse_iterator_char ret;
1712 TRACE("%p\n", this);
1714 ret.bstr = this;
1715 ret.pos = basic_string_char_const_ptr(this)+this->size;
1716 return ret;
1719 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$reverse_iterator@V?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@XZ */
1720 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$reverse_iterator@V?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@XZ */
1721 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$reverse_iterator@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@XZ */
1722 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$reverse_iterator@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@XZ */
1723 DEFINE_THISCALL_WRAPPER_RETPTR(MSVCP_basic_string_char_rend, 4)
1724 String_reverse_iterator_char __thiscall MSVCP_basic_string_char_rend(basic_string_char *this)
1726 String_reverse_iterator_char ret;
1728 TRACE("%p\n", this);
1730 ret.bstr = this;
1731 ret.pos = basic_string_char_const_ptr(this);
1732 return ret;
1735 /* ?_Pdif@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@KAIV?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0@Z */
1736 /* ?_Pdif@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@KA_KV?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0@Z */
1737 MSVCP_size_t __cdecl MSVCP_basic_string_char_Pdif(String_iterator_char i1, String_iterator_char i2)
1739 TRACE("(%p %p) (%p %p)\n", i1.bstr, i1.pos, i2.bstr, i2.pos);
1741 if((!i1.bstr && i1.pos) || i1.bstr!=i2.bstr) {
1742 _invalid_parameter(NULL, NULL, NULL, 0, 0);
1743 return 0;
1746 return !i1.pos ? 0 : i1.pos-i2.pos;
1749 /* basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t>> */
1750 /* ?npos@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@2IB */
1751 /* ?npos@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@2_KB */
1752 const MSVCP_size_t MSVCP_basic_string_wchar_npos = -1;
1754 /* ?_Myptr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAEPA_WXZ */
1755 /* ?_Myptr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAAPEA_WXZ */
1756 DEFINE_THISCALL_WRAPPER(basic_string_wchar_ptr, 4)
1757 wchar_t* __thiscall basic_string_wchar_ptr(basic_string_wchar *this)
1759 if(this->res == BUF_SIZE_WCHAR-1)
1760 return this->data.buf;
1761 return this->data.ptr;
1764 /* ?_Myptr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IBEPB_WXZ */
1765 /* ?_Myptr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEBAPEB_WXZ */
1766 DEFINE_THISCALL_WRAPPER(basic_string_wchar_const_ptr, 4)
1767 const wchar_t* __thiscall basic_string_wchar_const_ptr(const basic_string_wchar *this)
1769 if(this->res == BUF_SIZE_WCHAR-1)
1770 return this->data.buf;
1771 return this->data.ptr;
1774 /* ?_Eos@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAEXI@Z */
1775 /* ?_Eos@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAAX_K@Z */
1776 DEFINE_THISCALL_WRAPPER(basic_string_wchar_eos, 8)
1777 void __thiscall basic_string_wchar_eos(basic_string_wchar *this, MSVCP_size_t len)
1779 static const wchar_t nullbyte_w = '\0';
1781 this->size = len;
1782 MSVCP_char_traits_wchar_assign(basic_string_wchar_ptr(this)+len, &nullbyte_w);
1785 /* ?_Inside@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAE_NPB_W@Z */
1786 /* ?_Inside@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAA_NPEB_W@Z */
1787 DEFINE_THISCALL_WRAPPER(basic_string_wchar_inside, 8)
1788 MSVCP_bool __thiscall basic_string_wchar_inside(
1789 basic_string_wchar *this, const wchar_t *ptr)
1791 wchar_t *cstr = basic_string_wchar_ptr(this);
1793 return (ptr<cstr || ptr>=cstr+this->size) ? FALSE : TRUE;
1796 /* ?_Tidy@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAEX_NI@Z */
1797 /* ?_Tidy@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAAX_N_K@Z */
1798 DEFINE_THISCALL_WRAPPER(basic_string_wchar_tidy, 12)
1799 void __thiscall basic_string_wchar_tidy(basic_string_wchar *this,
1800 MSVCP_bool built, MSVCP_size_t new_size)
1802 if(built && BUF_SIZE_WCHAR<=this->res) {
1803 wchar_t *ptr = this->data.ptr;
1805 if(new_size > 0)
1806 MSVCP_char_traits_wchar__Copy_s(this->data.buf, BUF_SIZE_WCHAR, ptr, new_size);
1807 MSVCP_allocator_wchar_deallocate(this->allocator, ptr, this->res+1);
1810 this->res = BUF_SIZE_WCHAR-1;
1811 basic_string_wchar_eos(this, new_size);
1814 /* ?_Grow@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAE_NI_N@Z */
1815 /* ?_Grow@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAA_N_K_N@Z */
1816 DEFINE_THISCALL_WRAPPER(basic_string_wchar_grow, 12)
1817 MSVCP_bool __thiscall basic_string_wchar_grow(
1818 basic_string_wchar *this, MSVCP_size_t new_size, MSVCP_bool trim)
1820 if(this->res < new_size) {
1821 MSVCP_size_t new_res = new_size, len = this->size;
1822 wchar_t *ptr;
1824 new_res |= 0xf;
1826 if(new_res/3 < this->res/2)
1827 new_res = this->res + this->res/2;
1829 ptr = MSVCP_allocator_wchar_allocate(this->allocator, new_res);
1830 if(!ptr)
1831 ptr = MSVCP_allocator_wchar_allocate(this->allocator, new_size+1);
1832 else
1833 new_size = new_res;
1834 if(!ptr) {
1835 ERR("Out of memory\n");
1836 basic_string_wchar_tidy(this, TRUE, 0);
1837 return FALSE;
1840 MSVCP_char_traits_wchar__Copy_s(ptr, new_size,
1841 basic_string_wchar_ptr(this), this->size);
1842 basic_string_wchar_tidy(this, TRUE, 0);
1843 this->data.ptr = ptr;
1844 this->res = new_size;
1845 basic_string_wchar_eos(this, len);
1846 } else if(trim && new_size < BUF_SIZE_WCHAR)
1847 basic_string_wchar_tidy(this, TRUE,
1848 new_size<this->size ? new_size : this->size);
1849 else if(new_size == 0)
1850 basic_string_wchar_eos(this, 0);
1852 return (new_size>0);
1855 /* ?erase@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@II@Z */
1856 /* ?erase@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@_K0@Z */
1857 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_erase, 12)
1858 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_erase(
1859 basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t len)
1861 TRACE("%p %lu %lu\n", this, pos, len);
1863 if(pos > this->size) {
1864 MSVCP__String_base_Xran();
1865 return NULL;
1868 if(len > this->size-pos)
1869 len = this->size-pos;
1871 if(len) {
1872 MSVCP_char_traits_wchar__Move_s(basic_string_wchar_ptr(this)+pos,
1873 this->res-pos, basic_string_wchar_ptr(this)+pos+len,
1874 this->size-pos-len);
1875 basic_string_wchar_eos(this, this->size-len);
1878 return this;
1881 /* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@ABV12@II@Z */
1882 /* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
1883 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_substr, 16)
1884 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_substr(
1885 basic_string_wchar *this, const basic_string_wchar *assign,
1886 MSVCP_size_t pos, MSVCP_size_t len)
1888 TRACE("%p %p %lu %lu\n", this, assign, pos, len);
1890 if(assign->size < pos) {
1891 MSVCP__String_base_Xran();
1892 return NULL;
1895 if(len > assign->size-pos)
1896 len = assign->size-pos;
1898 if(this == assign) {
1899 MSVCP_basic_string_wchar_erase(this, pos+len, MSVCP_basic_string_wchar_npos);
1900 MSVCP_basic_string_wchar_erase(this, 0, pos);
1901 } else if(basic_string_wchar_grow(this, len, FALSE)) {
1902 MSVCP_char_traits_wchar__Copy_s(basic_string_wchar_ptr(this),
1903 this->res, basic_string_wchar_const_ptr(assign)+pos, len);
1904 basic_string_wchar_eos(this, len);
1907 return this;
1910 /* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@ABV12@@Z */
1911 /* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@AEBV12@@Z */
1912 /* ??4?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV01@ABV01@@Z */
1913 /* ??4?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV01@AEBV01@@Z */
1914 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign, 8)
1915 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign(
1916 basic_string_wchar *this, const basic_string_wchar *assign)
1918 return MSVCP_basic_string_wchar_assign_substr(this, assign,
1919 0, MSVCP_basic_string_wchar_npos);
1922 /* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@PB_WI@Z */
1923 /* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@PEB_W_K@Z */
1924 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_cstr_len, 12)
1925 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_cstr_len(
1926 basic_string_wchar *this, const wchar_t *str, MSVCP_size_t len)
1928 TRACE("%p %s %lu\n", this, debugstr_w(str), len);
1930 if(basic_string_wchar_inside(this, str))
1931 return MSVCP_basic_string_wchar_assign_substr(this, this,
1932 str-basic_string_wchar_ptr(this), len);
1933 else if(basic_string_wchar_grow(this, len, FALSE)) {
1934 MSVCP_char_traits_wchar__Copy_s(basic_string_wchar_ptr(this),
1935 this->res, str, len);
1936 basic_string_wchar_eos(this, len);
1939 return this;
1942 /* ??4?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV01@_W@Z */
1943 /* ??4?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV01@_W@Z */
1944 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_ch, 8)
1945 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_ch(
1946 basic_string_wchar *this, wchar_t ch)
1948 return MSVCP_basic_string_wchar_assign_cstr_len(this, &ch, 1);
1951 /* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@PB_W@Z */
1952 /* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@PEB_W@Z */
1953 /* ??4?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV01@PB_W@Z */
1954 /* ??4?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV01@PEB_W@Z */
1955 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_cstr, 8)
1956 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_cstr(
1957 basic_string_wchar *this, const wchar_t *str)
1959 return MSVCP_basic_string_wchar_assign_cstr_len(this, str,
1960 MSVCP_char_traits_wchar_length(str));
1963 /* ?_Chassign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAEXII_W@Z */
1964 /* ?_Chassign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAAX_K0_W@Z */
1965 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_Chassign, 16)
1966 void __thiscall MSVCP_basic_string_wchar_Chassign(basic_string_wchar *this,
1967 MSVCP_size_t off, MSVCP_size_t count, wchar_t ch)
1969 TRACE("%p %lu %lu %c\n", this, off, count, ch);
1970 MSVCP_char_traits_wchar_assignn(basic_string_wchar_ptr(this)+off, count, ch);
1973 /* ?_Copy_s@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPA_WIII@Z */
1974 /* ?_Copy_s@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEA_W_K11@Z */
1975 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_Copy_s, 20)
1976 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_Copy_s(const basic_string_wchar *this,
1977 wchar_t *dest, MSVCP_size_t size, MSVCP_size_t off, MSVCP_size_t count)
1979 TRACE("%p %p %lu %lu %lu\n", this, dest, size, off, count);
1981 if(this->size < off)
1982 MSVCP__String_base_Xran();
1984 if(count > this->size-off)
1985 count = this->size-off;
1987 MSVCP_char_traits_wchar__Copy_s(dest, size,
1988 basic_string_wchar_const_ptr(this)+off, count);
1989 return count;
1992 /* ?c_str@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEPB_WXZ */
1993 /* ?c_str@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAPEB_WXZ */
1994 /* ?data@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEPB_WXZ */
1995 /* ?data@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAPEB_WXZ */
1996 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_c_str, 4)
1997 const wchar_t* __thiscall MSVCP_basic_string_wchar_c_str(basic_string_wchar *this)
1999 TRACE("%p\n", this);
2000 return basic_string_wchar_const_ptr(this);
2003 /* ?capacity@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIXZ */
2004 /* ?capacity@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KXZ */
2005 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_capacity, 4)
2006 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_capacity(basic_string_wchar *this)
2008 TRACE("%p\n", this);
2009 return this->res;
2012 /* ?reserve@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXI@Z */
2013 /* ?reserve@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAX_K@Z */
2014 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_reserve, 8)
2015 void __thiscall MSVCP_basic_string_wchar_reserve(basic_string_wchar *this, MSVCP_size_t size)
2017 MSVCP_size_t len;
2019 TRACE("%p %ld\n", this, size);
2021 len = this->size;
2022 if(len > size)
2023 return;
2025 basic_string_wchar_grow(this, size, FALSE);
2026 basic_string_wchar_eos(this, len);
2029 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@XZ */
2030 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@XZ */
2031 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor, 4)
2032 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor(basic_string_wchar *this)
2034 TRACE("%p\n", this);
2036 basic_string_wchar_tidy(this, FALSE, 0);
2037 return this;
2040 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@ABV01@@Z */
2041 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@AEBV01@@Z */
2042 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_copy_ctor, 8)
2043 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_copy_ctor(
2044 basic_string_wchar *this, const basic_string_wchar *copy)
2046 TRACE("%p %p\n", this, copy);
2048 basic_string_wchar_tidy(this, FALSE, 0);
2049 MSVCP_basic_string_wchar_assign(this, copy);
2050 return this;
2053 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@PB_W@Z */
2054 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@PEB_W@Z */
2055 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr, 8)
2056 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr(
2057 basic_string_wchar *this, const wchar_t *str)
2059 TRACE("%p %s\n", this, debugstr_w(str));
2061 basic_string_wchar_tidy(this, FALSE, 0);
2062 MSVCP_basic_string_wchar_assign_cstr(this, str);
2063 return this;
2066 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@PB_WI@Z */
2067 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@PEB_W_K@Z */
2068 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr_len, 12)
2069 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr_len(
2070 basic_string_wchar *this, const wchar_t *str, MSVCP_size_t len)
2072 TRACE("%p %s %ld\n", this, debugstr_w(str), len);
2074 basic_string_wchar_tidy(this, FALSE, 0);
2075 MSVCP_basic_string_wchar_assign_cstr_len(this, str, len);
2076 return this;
2079 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@ABV01@II@Z */
2080 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@AEBV01@_K1@Z */
2081 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_substr, 16)
2082 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_substr(
2083 basic_string_wchar *this, const basic_string_wchar *assign,
2084 MSVCP_size_t pos, MSVCP_size_t len)
2086 TRACE("%p %p %lu %lu\n", this, assign, pos, len);
2088 basic_string_wchar_tidy(this, FALSE, 0);
2089 MSVCP_basic_string_wchar_assign_substr(this, assign, pos, len);
2090 return this;
2093 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@ABV?$allocator@_W@1@@Z */
2094 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@AEBV?$allocator@_W@1@@Z */
2095 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_alloc, 8)
2096 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_alloc(
2097 basic_string_wchar *this, const void *alloc)
2099 TRACE("%p %p\n", this, alloc);
2101 basic_string_wchar_tidy(this, FALSE, 0);
2102 return this;
2105 /* ??1?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@XZ */
2106 /* ??1?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@XZ */
2107 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_dtor, 4)
2108 void __thiscall MSVCP_basic_string_wchar_dtor(basic_string_wchar *this)
2110 TRACE("%p\n", this);
2111 basic_string_wchar_tidy(this, TRUE, 0);
2114 /* ?size@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIXZ */
2115 /* ?size@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KXZ */
2116 /* ?length@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIXZ */
2117 /* ?length@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KXZ */
2118 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_length, 4)
2119 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_length(basic_string_wchar *this)
2121 TRACE("%p\n", this);
2122 return this->size;
2125 /* ?empty@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE_NXZ */
2126 /* ?empty@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_NXZ */
2127 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_empty, 4)
2128 MSVCP_bool __thiscall MSVCP_basic_string_wchar_empty(basic_string_wchar *this)
2130 TRACE("%p\n", this);
2131 return this->size == 0;
2134 /* ?swap@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXAAV12@@Z */
2135 /* ?swap@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXAEAV12@@Z */
2136 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_swap, 8)
2137 void __thiscall MSVCP_basic_string_wchar_swap(basic_string_wchar *this, basic_string_wchar *str)
2139 if(this != str) {
2140 char tmp[sizeof(this->data)];
2141 const MSVCP_size_t size = this->size;
2142 const MSVCP_size_t res = this->res;
2144 memcpy(tmp, this->data.buf, sizeof(this->data));
2145 memcpy(this->data.buf, str->data.buf, sizeof(this->data));
2146 memcpy(str->data.buf, tmp, sizeof(this->data));
2148 this->size = str->size;
2149 this->res = str->res;
2151 str->size = size;
2152 str->res = res;
2156 /* ?substr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV12@II@Z */
2157 /* ?substr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV12@_K0@Z */
2158 DEFINE_THISCALL_WRAPPER_RETPTR(MSVCP_basic_string_wchar_substr, 12)
2159 basic_string_wchar __thiscall MSVCP_basic_string_wchar_substr(
2160 basic_string_wchar *this, MSVCP_size_t off, MSVCP_size_t len)
2162 basic_string_wchar ret = { 0 };
2163 TRACE("%p %lu %lu\n", this, off, len);
2165 MSVCP_basic_string_wchar_ctor_substr(&ret, this, off, len);
2166 return ret;
2169 /* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@ABV12@II@Z */
2170 /* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
2171 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_substr, 16)
2172 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_substr(basic_string_wchar *this,
2173 const basic_string_wchar *append, MSVCP_size_t offset, MSVCP_size_t count)
2175 TRACE("%p %p %lu %lu\n", this, append, offset, count);
2177 if(append->size < offset)
2178 MSVCP__String_base_Xran();
2180 if(count > append->size-offset)
2181 count = append->size-offset;
2183 if(MSVCP_basic_string_wchar_npos-this->size<=count || this->size+count<this->size)
2184 MSVCP__String_base_Xlen();
2186 if(basic_string_wchar_grow(this, this->size+count, FALSE)) {
2187 MSVCP_char_traits_wchar__Copy_s(basic_string_wchar_ptr(this)+this->size,
2188 this->res-this->size, basic_string_wchar_const_ptr(append)+offset, count);
2189 basic_string_wchar_eos(this, this->size+count);
2192 return this;
2195 /* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@ABV12@@Z */
2196 /* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@AEBV12@@Z */
2197 /* ??Y?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV01@ABV01@@Z */
2198 /* ??Y?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV01@AEBV01@@Z */
2199 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append, 8)
2200 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append(
2201 basic_string_wchar *this, const basic_string_wchar *append)
2203 return MSVCP_basic_string_wchar_append_substr(this, append,
2204 0, MSVCP_basic_string_wchar_npos);
2207 /* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@PB_WI@Z */
2208 /* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@PEB_W_K@Z */
2209 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_cstr_len, 12)
2210 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_cstr_len(
2211 basic_string_wchar *this, const wchar_t *append, MSVCP_size_t count)
2213 TRACE("%p %s %lu\n", this, debugstr_w(append), count);
2215 if(basic_string_wchar_inside(this, append))
2216 return MSVCP_basic_string_wchar_append_substr(this, this,
2217 append-basic_string_wchar_ptr(this), count);
2219 if(MSVCP_basic_string_wchar_npos-this->size<=count || this->size+count<this->size)
2220 MSVCP__String_base_Xlen();
2222 if(basic_string_wchar_grow(this, this->size+count, FALSE)) {
2223 MSVCP_char_traits_wchar__Copy_s(basic_string_wchar_ptr(this)+this->size,
2224 this->res-this->size, append, count);
2225 basic_string_wchar_eos(this, this->size+count);
2228 return this;
2231 /* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@PB_W@Z */
2232 /* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@PEB_W@Z */
2233 /* ??Y?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV01@PB_W@Z */
2234 /* ??Y?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV01@PEB_W@Z */
2235 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_cstr, 8)
2236 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_cstr(
2237 basic_string_wchar *this, const wchar_t *append)
2239 return MSVCP_basic_string_wchar_append_cstr_len(this, append,
2240 MSVCP_char_traits_wchar_length(append));
2243 /* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@PB_W0@Z */
2244 /* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@PEB_W0@Z */
2245 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_beg_end, 12)
2246 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_beg_end(
2247 basic_string_wchar *this, const wchar_t *beg, const wchar_t *end)
2249 return MSVCP_basic_string_wchar_append_cstr_len(this, beg, end-beg);
2252 /* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0@Z */
2253 /* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0@Z */
2254 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_iter, 20)
2255 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_iter(
2256 basic_string_wchar *this, String_iterator_wchar beg, String_iterator_wchar end)
2258 return MSVCP_basic_string_wchar_append_cstr_len(this, beg.pos, end.pos-beg.pos+1);
2261 /* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@I_W@Z */
2262 /* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@_K_W@Z */
2263 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_len_ch, 12)
2264 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_len_ch(
2265 basic_string_wchar *this, MSVCP_size_t count, wchar_t ch)
2267 TRACE("%p %lu %c\n", this, count, ch);
2269 if(MSVCP_basic_string_wchar_npos-this->size <= count)
2270 MSVCP__String_base_Xlen();
2272 if(basic_string_wchar_grow(this, this->size+count, FALSE)) {
2273 MSVCP_char_traits_wchar_assignn(basic_string_wchar_ptr(this)+this->size, count, ch);
2274 basic_string_wchar_eos(this, this->size+count);
2277 return this;
2280 /* ??Y?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV01@_W@Z */
2281 /* ??Y?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV01@_W@Z */
2282 /* ?push_back@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEX_W@Z */
2283 /* ?push_back@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAX_W@Z */
2284 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_ch, 8)
2285 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_ch(
2286 basic_string_wchar *this, wchar_t ch)
2288 return MSVCP_basic_string_wchar_append_len_ch(this, 1, ch);
2291 /* ??$?H_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@ABV10@PB_W@Z */
2292 /* ??$?H_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@AEBV10@PEB_W@Z */
2293 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate_bstr_cstr(basic_string_wchar *ret,
2294 const basic_string_wchar *left, const wchar_t *right)
2296 TRACE("%p %s\n", left, debugstr_w(right));
2298 MSVCP_basic_string_wchar_copy_ctor(ret, left);
2299 MSVCP_basic_string_wchar_append_cstr(ret, right);
2300 return ret;
2303 /* ??$?H_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@PB_WABV10@@Z */
2304 /* ??$?H_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@PEB_WAEBV10@@Z */
2305 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate_cstr_bstr(basic_string_wchar *ret,
2306 const wchar_t *left, const basic_string_wchar *right)
2308 TRACE("%s %p\n", debugstr_w(left), right);
2310 MSVCP_basic_string_wchar_ctor_cstr(ret, left);
2311 MSVCP_basic_string_wchar_append(ret, right);
2312 return ret;
2315 /* ??$?H_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@ABV10@0@Z */
2316 /* ??$?H_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@AEBV10@0@Z */
2317 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate(basic_string_wchar *ret,
2318 const basic_string_wchar *left, const basic_string_wchar *right)
2320 TRACE("%p %p\n", left, right);
2322 MSVCP_basic_string_wchar_copy_ctor(ret, left);
2323 MSVCP_basic_string_wchar_append(ret, right);
2324 return ret;
2327 /* ??$?H_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@ABV10@_W@Z */
2328 /* ??$?H_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@AEBV10@_W@Z */
2329 basic_string_wchar __cdecl MSVCP_basic_string_wchar_concatenate_bstr_ch(
2330 const basic_string_wchar *left, wchar_t right)
2332 basic_string_wchar ret = { 0 };
2334 TRACE("%p %c\n", left, right);
2336 MSVCP_basic_string_wchar_copy_ctor(&ret, left);
2337 MSVCP_basic_string_wchar_append_ch(&ret, right);
2338 return ret;
2341 /* ??$?H_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@_WABV10@@Z */
2342 /* ??$?H_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@_WAEBV10@@Z */
2343 basic_string_wchar __cdecl MSVCP_basic_string_wchar_concatenate_ch_bstr(
2344 wchar_t left, const basic_string_wchar *right)
2346 basic_string_wchar ret = { 0 };
2348 TRACE("%c %p\n", left, right);
2350 MSVCP_basic_string_wchar_ctor_cstr_len(&ret, &left, 1);
2351 MSVCP_basic_string_wchar_append(&ret, right);
2352 return ret;
2355 /* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEHIIPB_WI@Z */
2356 /* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAH_K0PEB_W0@Z */
2357 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr_cstr_len, 20)
2358 int __thiscall MSVCP_basic_string_wchar_compare_substr_cstr_len(
2359 const basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t num,
2360 const wchar_t *str, MSVCP_size_t count)
2362 int ans;
2364 TRACE("%p %lu %lu %s %lu\n", this, pos, num, debugstr_w(str), count);
2366 if(this->size < pos)
2367 MSVCP__String_base_Xran();
2369 if(pos+num > this->size)
2370 num = this->size-pos;
2372 ans = MSVCP_char_traits_wchar_compare(basic_string_wchar_const_ptr(this)+pos,
2373 str, num>count ? count : num);
2374 if(ans)
2375 return ans;
2377 if(num > count)
2378 ans = 1;
2379 else if(num < count)
2380 ans = -1;
2381 return ans;
2384 /* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEHIIPB_W@Z */
2385 /* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAH_K0PEB_W@Z */
2386 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr_cstr, 16)
2387 int __thiscall MSVCP_basic_string_wchar_compare_substr_cstr(const basic_string_wchar *this,
2388 MSVCP_size_t pos, MSVCP_size_t num, const wchar_t *str)
2390 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2391 str, MSVCP_char_traits_wchar_length(str));
2394 /* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEHPB_W@Z */
2395 /* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAHPEB_W@Z */
2396 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_cstr, 8)
2397 int __thiscall MSVCP_basic_string_wchar_compare_cstr(
2398 const basic_string_wchar *this, const wchar_t *str)
2400 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, 0, this->size,
2401 str, MSVCP_char_traits_wchar_length(str));
2404 /* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEHIIABV12@II@Z */
2405 /* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAH_K0AEBV12@00@Z */
2406 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr_substr, 24)
2407 int __thiscall MSVCP_basic_string_wchar_compare_substr_substr(
2408 const basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t num,
2409 const basic_string_wchar *compare, MSVCP_size_t off, MSVCP_size_t count)
2411 TRACE("%p %lu %lu %p %lu %lu\n", this, pos, num, compare, off, count);
2413 if(compare->size < off)
2414 MSVCP__String_base_Xran();
2416 if(off+count > compare->size)
2417 count = compare->size-off;
2419 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2420 basic_string_wchar_const_ptr(compare)+off, count);
2423 /* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEHIIABV12@@Z */
2424 /* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAH_K0AEBV12@@Z */
2425 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr, 16)
2426 int __thiscall MSVCP_basic_string_wchar_compare_substr(
2427 const basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t num,
2428 const basic_string_wchar *compare)
2430 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2431 basic_string_wchar_const_ptr(compare), compare->size);
2434 /* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEHABV12@@Z */
2435 /* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAHAEBV12@@Z */
2436 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare, 8)
2437 int __thiscall MSVCP_basic_string_wchar_compare(
2438 const basic_string_wchar *this, const basic_string_wchar *compare)
2440 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, 0, this->size,
2441 basic_string_wchar_const_ptr(compare), compare->size);
2444 /* ??$?8_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA_NABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@0@Z */
2445 /* ??$?8_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA_NAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@0@Z */
2446 MSVCP_bool __cdecl MSVCP_basic_string_wchar_equal(
2447 const basic_string_wchar *left, const basic_string_wchar *right)
2449 return MSVCP_basic_string_wchar_compare(left, right) == 0;
2452 /* ??$?8_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA_NABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@PB_W@Z */
2453 /* ??$?8_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA_NAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@PEB_W@Z */
2454 MSVCP_bool __cdecl MSVCP_basic_string_wchar_equal_str_cstr(
2455 const basic_string_wchar *left, const wchar_t *right)
2457 return MSVCP_basic_string_wchar_compare_cstr(left, right) == 0;
2460 /* ??$?8_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA_NPB_WABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@@Z */
2461 /* ??$?8_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA_NPEB_WAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@@Z */
2462 MSVCP_bool __cdecl MSVCP_basic_string_wchar_equal_cstr_str(
2463 const wchar_t *left, const basic_string_wchar *right)
2465 return MSVCP_basic_string_wchar_compare_cstr(right, left) == 0;
2468 /* ??$?9_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA_NABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@0@Z */
2469 /* ??$?9_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA_NAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@0@Z */
2470 MSVCP_bool __cdecl MSVCP_basic_string_wchar_not_equal(
2471 const basic_string_wchar *left, const basic_string_wchar *right)
2473 return MSVCP_basic_string_wchar_compare(left, right) != 0;
2476 /* ??$?9_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA_NABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@PB_W@Z */
2477 /* ??$?9_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA_NAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@PEB_W@Z */
2478 MSVCP_bool __cdecl MSVCP_basic_string_wchar_not_equal_str_cstr(
2479 const basic_string_wchar *left, const wchar_t *right)
2481 return MSVCP_basic_string_wchar_compare_cstr(left, right) != 0;
2484 /* ??$?9_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA_NPB_WABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@@Z */
2485 /* ??$?9_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA_NPEB_WAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@@Z */
2486 MSVCP_bool __cdecl MSVCP_basic_string_wchar_not_equal_cstr_str(
2487 const wchar_t *left, const basic_string_wchar *right)
2489 return MSVCP_basic_string_wchar_compare_cstr(right, left) != 0;
2492 /* ??$?M_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA_NABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@0@Z */
2493 /* ??$?M_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA_NAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@0@Z */
2494 MSVCP_bool __cdecl MSVCP_basic_string_wchar_lower(
2495 const basic_string_wchar *left, const basic_string_wchar *right)
2497 return MSVCP_basic_string_wchar_compare(left, right) < 0;
2500 /* ??$?M_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA_NABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@PB_W@Z */
2501 /* ??$?M_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA_NAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@PEB_W@Z */
2502 MSVCP_bool __cdecl MSVCP_basic_string_wchar_lower_bstr_cstr(
2503 const basic_string_wchar *left, const wchar_t *right)
2505 return MSVCP_basic_string_wchar_compare_cstr(left, right) < 0;
2508 /* ??$?M_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA_NPB_WABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@@Z */
2509 /* ??$?M_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YA_NPEB_WAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@@Z */
2510 MSVCP_bool __cdecl MSVCP_basic_string_wchar_lower_cstr_bstr(
2511 const wchar_t *left, const basic_string_wchar *right)
2513 return MSVCP_basic_string_wchar_compare_cstr(right, left) > 0;
2516 /* ?find@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPB_WII@Z */
2517 /* ?find@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEB_W_K1@Z */
2518 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_cstr_substr, 16)
2519 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_cstr_substr(
2520 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos, MSVCP_size_t len)
2522 const wchar_t *p, *end;
2524 TRACE("%p %s %lu %lu\n", this, debugstr_w(find), pos, len);
2526 if(len==0 && pos<=this->size)
2527 return pos;
2529 end = basic_string_wchar_const_ptr(this)+this->size-len+1;
2530 for(p=basic_string_wchar_const_ptr(this)+pos; p<end; p++) {
2531 p = MSVCP_char_traits_wchar_find(p, end-p, find);
2532 if(!p)
2533 break;
2535 if(!MSVCP_char_traits_wchar_compare(p, find, len))
2536 return p-basic_string_wchar_const_ptr(this);
2539 return MSVCP_basic_string_wchar_npos;
2542 /* ?find@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPB_WI@Z */
2543 /* ?find@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEB_W_K@Z */
2544 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_cstr_off, 12)
2545 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_cstr_off(
2546 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos)
2548 return MSVCP_basic_string_wchar_find_cstr_substr(this, find, pos,
2549 MSVCP_char_traits_wchar_length(find));
2552 /* ?find@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIABV12@I@Z */
2553 /* ?find@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KAEBV12@_K@Z */
2554 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_off, 12)
2555 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_off(
2556 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2558 return MSVCP_basic_string_wchar_find_cstr_substr(this,
2559 basic_string_wchar_const_ptr(find), off, find->size);
2562 /* ?find@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEI_WI@Z */
2563 /* ?find@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_K_W_K@Z */
2564 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_ch, 12)
2565 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_ch(
2566 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t pos)
2568 return MSVCP_basic_string_wchar_find_cstr_substr(this, &ch, pos, 1);
2571 /* ?find_first_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPB_WII@Z */
2572 /* ?find_first_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEB_W_K1@Z */
2573 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of_cstr_substr, 16)
2574 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_of_cstr_substr(
2575 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len)
2577 const wchar_t *p, *end;
2579 TRACE("%p %p %lu %lu\n", this, find, off, len);
2581 if(len>0 && off<this->size) {
2582 end = basic_string_wchar_const_ptr(this)+this->size;
2583 for(p=basic_string_wchar_const_ptr(this)+off; p<end; p++)
2584 if(MSVCP_char_traits_wchar_find(find, len, p))
2585 return p-basic_string_wchar_const_ptr(this);
2588 return MSVCP_basic_string_wchar_npos;
2591 /* ?find_first_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIABV12@I@Z */
2592 /* ?find_first_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KAEBV12@_K@Z */
2593 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of, 12)
2594 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_of(
2595 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2597 return MSVCP_basic_string_wchar_find_first_of_cstr_substr(this,
2598 basic_string_wchar_const_ptr(find), off, find->size);
2601 /* ?find_first_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPB_WI@Z */
2602 /* ?find_first_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEB_W_K@Z */
2603 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of_cstr, 12)
2604 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_of_cstr(
2605 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off)
2607 return MSVCP_basic_string_wchar_find_first_of_cstr_substr(
2608 this, find, off, MSVCP_char_traits_wchar_length(find));
2611 /* ?find_first_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEI_WI@Z */
2612 /* ?find_first_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_K_W_K@Z */
2613 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of_ch, 12)
2614 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_of_ch(
2615 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off)
2617 return MSVCP_basic_string_wchar_find_first_of_cstr_substr(this, &ch, off, 1);
2620 /* ?find_first_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPB_WII@Z */
2621 /* ?find_first_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEB_W_K1@Z */
2622 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of_cstr_substr, 16)
2623 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(
2624 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len)
2626 const wchar_t *p, *end;
2628 TRACE("%p %p %lu %lu\n", this, find, off, len);
2630 if(off<this->size) {
2631 end = basic_string_wchar_const_ptr(this)+this->size;
2632 for(p=basic_string_wchar_const_ptr(this)+off; p<end; p++)
2633 if(!MSVCP_char_traits_wchar_find(find, len, p))
2634 return p-basic_string_wchar_const_ptr(this);
2637 return MSVCP_basic_string_wchar_npos;
2640 /* ?find_first_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIABV12@I@Z */
2641 /* ?find_first_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KAEBV12@_K@Z */
2642 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of, 12)
2643 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of(
2644 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2646 return MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(this,
2647 basic_string_wchar_const_ptr(find), off, find->size);
2650 /* ?find_first_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPB_WI@Z */
2651 /* ?find_first_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEB_W_K@Z */
2652 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of_cstr, 12)
2653 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of_cstr(
2654 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off)
2656 return MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(
2657 this, find, off, MSVCP_char_traits_wchar_length(find));
2660 /* ?find_first_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEI_WI@Z */
2661 /* ?find_first_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_K_W_K@Z */
2662 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of_ch, 12)
2663 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of_ch(
2664 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off)
2666 return MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(this, &ch, off, 1);
2669 /* ?find_last_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPB_WII@Z */
2670 /* ?find_last_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEB_W_K1@Z */
2671 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of_cstr_substr, 16)
2672 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_of_cstr_substr(
2673 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len)
2675 const wchar_t *p, *beg;
2677 TRACE("%p %p %lu %lu\n", this, find, off, len);
2680 if(len>0 && this->size>0) {
2681 if(off >= this->size)
2682 off = this->size-1;
2684 beg = basic_string_wchar_const_ptr(this);
2685 for(p=beg+off; p>=beg; p--)
2686 if(MSVCP_char_traits_wchar_find(find, len, p))
2687 return p-beg;
2690 return MSVCP_basic_string_wchar_npos;
2693 /* ?find_last_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIABV12@I@Z */
2694 /* ?find_last_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KAEBV12@_K@Z */
2695 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of, 12)
2696 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_of(
2697 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2699 return MSVCP_basic_string_wchar_find_last_of_cstr_substr(this,
2700 basic_string_wchar_const_ptr(find), off, find->size);
2703 /* ?find_last_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPB_WI@Z */
2704 /* ?find_last_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEB_W_K@Z */
2705 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of_cstr, 12)
2706 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_of_cstr(
2707 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off)
2709 return MSVCP_basic_string_wchar_find_last_of_cstr_substr(
2710 this, find, off, MSVCP_char_traits_wchar_length(find));
2713 /* ?find_last_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEI_WI@Z */
2714 /* ?find_last_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_K_W_K@Z */
2715 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of_ch, 12)
2716 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_of_ch(
2717 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off)
2719 return MSVCP_basic_string_wchar_find_last_of_cstr_substr(this, &ch, off, 1);
2722 /* ?at@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAA_WI@Z */
2723 /* ?at@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEA_W_K@Z */
2724 /* ??A?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAA_WI@Z */
2725 /* ??A?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEA_W_K@Z */
2726 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_at, 8)
2727 wchar_t* __thiscall MSVCP_basic_string_wchar_at(
2728 basic_string_wchar *this, MSVCP_size_t pos)
2730 TRACE("%p %lu\n", this, pos);
2732 if(this->size <= pos)
2733 MSVCP__String_base_Xran();
2735 return basic_string_wchar_ptr(this)+pos;
2738 /* ?at@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEAB_WI@Z */
2739 /* ?at@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAAEB_W_K@Z */
2740 /* ??A?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEAB_WI@Z */
2741 /* ??A?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAAEB_W_K@Z */
2742 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_const_at, 8)
2743 const wchar_t* __thiscall MSVCP_basic_string_wchar_const_at(
2744 const basic_string_wchar *this, MSVCP_size_t pos)
2746 TRACE("%p %lu\n", this, pos);
2748 if(this->size <= pos)
2749 MSVCP__String_base_Xran();
2751 return basic_string_wchar_const_ptr(this)+pos;
2754 /* ?resize@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXI_W@Z */
2755 /* ?resize@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAX_K_W@Z */
2756 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_resize_ch, 12)
2757 void __thiscall MSVCP_basic_string_wchar_resize_ch(
2758 basic_string_wchar *this, MSVCP_size_t size, wchar_t ch)
2760 TRACE("%p %lu %c\n", this, size, ch);
2762 if(size <= this->size)
2763 MSVCP_basic_string_wchar_erase(this, size, this->size);
2764 else
2765 MSVCP_basic_string_wchar_append_len_ch(this, size-this->size, ch);
2768 /* ?resize@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXI@Z */
2769 /* ?resize@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAX_K@Z */
2770 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_resize, 8)
2771 void __thiscall MSVCP_basic_string_wchar_resize(
2772 basic_string_wchar *this, MSVCP_size_t size)
2774 MSVCP_basic_string_wchar_resize_ch(this, size, '\0');
2777 /* ?clear@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXXZ */
2778 /* ?clear@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXXZ */
2779 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_clear, 4)
2780 void __thiscall MSVCP_basic_string_wchar_clear(basic_string_wchar *this)
2782 basic_string_wchar_eos(this, 0);
2785 /* ?begin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE?AV?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
2786 /* ?begin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA?AV?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
2787 /* ?begin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
2788 /* ?begin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
2789 DEFINE_THISCALL_WRAPPER_RETPTR(MSVCP_basic_string_wchar_begin, 4)
2790 String_iterator_wchar __thiscall MSVCP_basic_string_wchar_begin(basic_string_wchar *this)
2792 String_iterator_wchar ret;
2794 TRACE("%p\n", this);
2796 ret.bstr = this;
2797 ret.pos = basic_string_wchar_const_ptr(this);
2798 return ret;
2801 /* ?end@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE?AV?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
2802 /* ?end@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA?AV?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
2803 /* ?end@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
2804 /* ?end@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
2805 DEFINE_THISCALL_WRAPPER_RETPTR(MSVCP_basic_string_wchar_end, 4)
2806 String_iterator_wchar __thiscall MSVCP_basic_string_wchar_end(basic_string_wchar *this)
2808 String_iterator_wchar ret;
2810 TRACE("%p\n", this);
2812 ret.bstr = this;
2813 ret.pos = basic_string_wchar_const_ptr(this)+this->size;
2814 return ret;
2817 /* ?rbegin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE?AV?$reverse_iterator@V?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ */
2818 /* ?rbegin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA?AV?$reverse_iterator@V?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ */
2819 /* ?rbegin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$reverse_iterator@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ */
2820 /* ?rbegin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV?$reverse_iterator@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ */
2821 DEFINE_THISCALL_WRAPPER_RETPTR(MSVCP_basic_string_wchar_rbegin, 4)
2822 String_reverse_iterator_wchar __thiscall MSVCP_basic_string_wchar_rbegin(basic_string_wchar *this)
2824 String_reverse_iterator_wchar ret;
2826 TRACE("%p\n", this);
2828 ret.bstr = this;
2829 ret.pos = basic_string_wchar_const_ptr(this)+this->size;
2830 return ret;
2833 /* ?rend@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE?AV?$reverse_iterator@V?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ */
2834 /* ?rend@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA?AV?$reverse_iterator@V?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ */
2835 /* ?rend@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$reverse_iterator@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ */
2836 /* ?rend@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV?$reverse_iterator@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ */
2837 DEFINE_THISCALL_WRAPPER_RETPTR(MSVCP_basic_string_wchar_rend, 4)
2838 String_reverse_iterator_wchar __thiscall MSVCP_basic_string_wchar_rend(basic_string_wchar *this)
2840 String_reverse_iterator_wchar ret;
2842 TRACE("%p\n", this);
2844 ret.bstr = this;
2845 ret.pos = basic_string_wchar_const_ptr(this);
2846 return ret;
2849 /* ?_Pdif@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@KAIV?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0@Z */
2850 /* ?_Pdif@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@KA_KV?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0@Z */
2851 MSVCP_size_t __cdecl MSVCP_basic_string_wchar_Pdif(String_iterator_wchar i1, String_iterator_wchar i2)
2853 TRACE("(%p %p) (%p %p)\n", i1.bstr, i1.pos, i2.bstr, i2.pos);
2855 if((!i1.bstr && i1.pos) || i1.bstr!=i2.bstr) {
2856 _invalid_parameter(NULL, NULL, NULL, 0, 0);
2857 return 0;
2860 return !i1.pos ? 0 : i1.pos-i2.pos;