msvcp60: Move string iterator functions to match msvcp90.
[wine.git] / dlls / msvcp60 / string.c
blob611b5da57e03d8667d979bc7e9dd5ee69fa2ad83
1 /*
2 * Copyright 2012 Piotr Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #include "config.h"
21 #include <stdarg.h>
23 #include "msvcp.h"
24 #include "stdio.h"
25 #include "assert.h"
27 #include "windef.h"
28 #include "winbase.h"
29 #include "wine/debug.h"
30 WINE_DEFAULT_DEBUG_CHANNEL(msvcp);
32 #define FROZEN 255
34 /* _String_iterator<char> and _String_const_iterator<char> class */
35 typedef struct {
36 char *ptr;
37 } String_reverse_iterator_char;
39 typedef struct {
40 wchar_t *ptr;
41 } String_reverse_iterator_wchar;
43 /* allocator class */
44 typedef struct {
45 char empty_struct;
46 } allocator;
48 /* ?_Xran@std@@YAXXZ */
49 void __cdecl _Xran(void)
51 static const char msg[] = "invalid string position";
53 TRACE("\n");
54 throw_exception(EXCEPTION_OUT_OF_RANGE, msg);
57 /* ?_Xlen@std@@YAXXZ */
58 void __cdecl _Xlen(void)
60 static const char msg[] = "string too long";
62 TRACE("\n");
63 throw_exception(EXCEPTION_LENGTH_ERROR, msg);
66 static char* char_traits_char__Move_s(char *dest,
67 MSVCP_size_t size, const char *src, MSVCP_size_t count)
69 if(!dest || !src || size<count) {
70 if(dest && size)
71 dest[0] = '\0';
72 _invalid_parameter(NULL, NULL, NULL, 0, 0);
73 return dest;
76 return memmove(dest, src, count);
79 static char* char_traits_char__Copy_s(char *dest,
80 MSVCP_size_t size, const char *src, MSVCP_size_t count)
82 if(!dest || !src || size<count) {
83 if(dest && size)
84 dest[0] = '\0';
85 _invalid_parameter(NULL, NULL, NULL, 0, 0);
86 return dest;
89 return memcpy(dest, src, count);
92 static MSVCP_size_t char_traits_char_length(const char *str)
94 return strlen(str);
97 static char* char_traits_char_assignn(char *str, MSVCP_size_t num, char c)
99 return memset(str, c, num);
102 static int char_traits_char_compare(const char *s1,
103 const char *s2, MSVCP_size_t count)
105 int ret = memcmp(s1, s2, count);
106 return (ret>0 ? 1 : (ret<0 ? -1 : 0));
109 static const char* char_traits_char_find(const char *str,
110 MSVCP_size_t range, const char *c)
112 return memchr(str, *c, range);
115 static MSVCP_bool basic_string_char_inside(
116 basic_string_char *this, const char *ptr)
118 return ptr>=this->ptr && ptr<this->ptr+this->size;
121 /* ?npos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@2IB */
122 /* ?npos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@2_KB */
123 const MSVCP_size_t MSVCP_basic_string_char_npos = -1;
125 /* ?_C@?1??_Nullstr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPBDXZ@4DB */
126 /* ?_C@?1??_Nullstr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPEBDXZ@4DB */
127 const char basic_string_char_nullbyte = '\0';
129 /* ?_Nullstr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPBDXZ */
130 /* ?_Nullstr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPEBDXZ */
131 const char* __cdecl basic_string_char__Nullstr(void)
133 return &basic_string_char_nullbyte;
136 /* ?_Refcnt@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEAAEPBD@Z */
137 /* ?_Refcnt@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAAEAEPEBD@Z */
138 DEFINE_THISCALL_WRAPPER(basic_string_char__Refcnt, 8)
139 unsigned char* __thiscall basic_string_char__Refcnt(basic_string_char *this, const char *ptr)
141 TRACE("(%p %p)\n", this, ptr);
142 return (unsigned char*)ptr-1;
145 /* ?_Eos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXI@Z */
146 /* ?_Eos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAX_K@Z */
147 DEFINE_THISCALL_WRAPPER(basic_string_char__Eos, 8)
148 void __thiscall basic_string_char__Eos(basic_string_char *this, MSVCP_size_t len)
150 this->size = len;
151 this->ptr[len] = 0;
154 /* ?clear@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */
155 /* ?clear@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */
156 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_clear, 4)
157 void __thiscall MSVCP_basic_string_char_clear(basic_string_char *this)
159 if(this->ptr)
160 basic_string_char__Eos(this, 0);
163 /* ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEX_N@Z */
164 /* ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAX_N@Z */
165 DEFINE_THISCALL_WRAPPER(basic_string_char__Tidy, 8)
166 void __thiscall basic_string_char__Tidy(basic_string_char *this, MSVCP_bool built)
168 TRACE("(%p %d)\n", this, built);
170 if(!built || !this->ptr);
171 else if(!this->ptr[-1] || (unsigned char)this->ptr[-1]==FROZEN)
172 MSVCP_allocator_char_deallocate(NULL, this->ptr-1, this->res+2);
173 else
174 this->ptr[-1]--;
176 memset(this, 0, sizeof(*this));
179 /* ?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAE_NI_N@Z */
180 /* ?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAA_N_K_N@Z */
181 DEFINE_THISCALL_WRAPPER(basic_string_char__Grow, 12)
182 MSVCP_bool __thiscall basic_string_char__Grow(basic_string_char *this, MSVCP_size_t new_size, MSVCP_bool trim)
184 if(!new_size) {
185 if(trim)
186 basic_string_char__Tidy(this, TRUE);
187 else if(this->ptr)
188 basic_string_char__Eos(this, 0);
189 } else if(this->res<new_size || trim ||
190 (this->ptr && this->ptr[-1] && (unsigned char)this->ptr[-1]!=FROZEN)) {
191 MSVCP_size_t new_res = new_size, len = this->size;
192 char *ptr;
194 if(!trim && this->ptr && !this->ptr[-1]) {
195 new_res |= 0xf;
196 if(new_res/3 < this->res/2)
197 new_res = this->res + this->res/2;
200 ptr = MSVCP_allocator_char_allocate(this->allocator, new_res+2);
201 if(!ptr) {
202 new_res = new_size;
203 ptr = MSVCP_allocator_char_allocate(this->allocator, new_size+2);
205 if(!ptr) {
206 ERR("Out of memory\n");
207 return FALSE;
210 if(len > new_res)
211 len = new_res;
213 *ptr = 0;
214 if(this->ptr)
215 char_traits_char__Copy_s(ptr+1, new_size, this->ptr, len);
216 basic_string_char__Tidy(this, TRUE);
217 this->ptr = ptr+1;
218 this->res = new_res;
219 basic_string_char__Eos(this, len);
222 return new_size>0;
225 /* ?_Split@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXXZ */
226 /* ?_Split@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAXXZ */
227 DEFINE_THISCALL_WRAPPER(basic_string_char__Split, 4)
228 void __thiscall basic_string_char__Split(basic_string_char *this)
230 MSVCP_size_t len;
231 char *ptr;
233 TRACE("(%p)\n", this);
235 if(!this->ptr || !this->ptr[-1] || (unsigned char)this->ptr[-1]==FROZEN)
236 return;
238 ptr = this->ptr;
239 len = this->size;
240 basic_string_char__Tidy(this, TRUE);
241 if(basic_string_char__Grow(this, len, FALSE)) {
242 if(ptr)
243 char_traits_char__Copy_s(this->ptr, this->res, ptr, len);
244 basic_string_char__Eos(this, len);
248 /* ?_Freeze@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXXZ */
249 /* ?_Freeze@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAXXZ */
250 DEFINE_THISCALL_WRAPPER(basic_string_char__Freeze, 4)
251 void __thiscall basic_string_char__Freeze(basic_string_char *this)
253 TRACE("(%p)\n", this);
254 basic_string_char__Split(this);
255 if(this->ptr)
256 this->ptr[-1] = FROZEN;
259 /* ?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXI@Z */
260 /* ?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAX_K@Z */
261 DEFINE_THISCALL_WRAPPER(basic_string_char__Copy, 8)
262 void __thiscall basic_string_char__Copy(basic_string_char *this, MSVCP_size_t copy_len)
264 TRACE("%p %lu\n", this, copy_len);
266 if(!basic_string_char__Grow(this, copy_len, TRUE))
267 return;
270 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPADPADI@Z */
271 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPEADPEAD_K@Z */
272 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPBDPBDI@Z */
273 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPEBDPEBD_K@Z */
274 char* __cdecl basic_string_char__Psum(char *iter, MSVCP_size_t add)
276 TRACE("(%p %lu)\n", iter, add);
277 return iter ? iter+add : iter;
280 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@II@Z */
281 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0@Z */
282 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_erase, 12)
283 basic_string_char* __thiscall MSVCP_basic_string_char_erase(
284 basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t len)
286 TRACE("%p %lu %lu\n", this, pos, len);
288 if(pos > this->size)
289 _Xran();
291 if(len > this->size-pos)
292 len = this->size-pos;
294 if(len) {
295 basic_string_char__Split(this);
296 char_traits_char__Move_s(this->ptr+pos, this->res-pos,
297 this->ptr+pos+len, this->size-pos-len);
298 basic_string_char__Eos(this, this->size-len);
301 return this;
304 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADPAD@Z */
305 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADPEAD@Z */
306 DEFINE_THISCALL_WRAPPER(basic_string_char_erase_beg, 8)
307 char* __thiscall basic_string_char_erase_beg(basic_string_char *this, char *beg)
309 MSVCP_size_t pos = beg-this->ptr;
310 MSVCP_basic_string_char_erase(this, pos, 1);
311 return this->ptr+pos;
314 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z */
315 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
316 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_substr, 16)
317 basic_string_char* __thiscall MSVCP_basic_string_char_assign_substr(
318 basic_string_char *this, const basic_string_char *assign,
319 MSVCP_size_t pos, MSVCP_size_t len)
321 TRACE("%p %p %lu %lu\n", this, assign, pos, len);
323 if(assign->size < pos)
324 _Xran();
326 if(len > assign->size-pos)
327 len = assign->size-pos;
329 if(this == assign) {
330 MSVCP_basic_string_char_erase(this, pos+len, MSVCP_basic_string_char_npos);
331 MSVCP_basic_string_char_erase(this, 0, pos);
332 } else if(basic_string_char__Grow(this, len, FALSE)) {
333 if(assign->ptr)
334 char_traits_char__Copy_s(this->ptr, this->res, assign->ptr+pos, len);
335 basic_string_char__Eos(this, len);
338 return this;
341 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z */
342 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD_K@Z */
343 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_cstr_len, 12)
344 basic_string_char* __thiscall MSVCP_basic_string_char_assign_cstr_len(
345 basic_string_char *this, const char *str, MSVCP_size_t len)
347 TRACE("%p %s %lu\n", this, debugstr_an(str, len), len);
349 if(basic_string_char_inside(this, str))
350 return MSVCP_basic_string_char_assign_substr(this, this, str-this->ptr, len);
351 else if(basic_string_char__Grow(this, len, FALSE)) {
352 char_traits_char__Copy_s(this->ptr, this->res, str, len);
353 basic_string_char__Eos(this, len);
356 return this;
359 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@@Z */
360 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@@Z */
361 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@ABV01@@Z */
362 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@AEBV01@@Z */
363 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign, 8)
364 basic_string_char* __thiscall MSVCP_basic_string_char_assign(
365 basic_string_char *this, const basic_string_char *assign)
367 return MSVCP_basic_string_char_assign_substr(this, assign,
368 0, MSVCP_basic_string_char_npos);
371 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z */
372 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD@Z */
373 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z */
374 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@PEBD@Z */
375 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_cstr, 8)
376 basic_string_char* __thiscall MSVCP_basic_string_char_assign_cstr(
377 basic_string_char *this, const char *str)
379 return MSVCP_basic_string_char_assign_cstr_len(this, str,
380 char_traits_char_length(str));
383 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@D@Z */
384 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@D@Z */
385 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_ch, 8)
386 basic_string_char* __thiscall MSVCP_basic_string_char_assign_ch(
387 basic_string_char *this, char ch)
389 return MSVCP_basic_string_char_assign_cstr_len(this, &ch, 1);
392 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ID@Z */
393 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KD@Z */
394 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assignn, 12)
395 basic_string_char* __thiscall MSVCP_basic_string_char_assignn(
396 basic_string_char *this, MSVCP_size_t count, char ch)
398 TRACE("%p %ld %c\n", this, count, ch);
400 basic_string_char__Grow(this, count, FALSE);
401 char_traits_char_assignn(this->ptr, count, ch);
402 basic_string_char__Eos(this, count);
403 return this;
406 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD0@Z */
407 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD0@Z */
408 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_ptr_ptr, 12)
409 basic_string_char* __thiscall MSVCP_basic_string_char_assign_ptr_ptr(
410 basic_string_char *this, const char *first, const char *last)
412 return MSVCP_basic_string_char_assign_cstr_len(this, first, last-first);
415 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDIABV?$allocator@D@1@@Z */
416 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD_KAEBV?$allocator@D@1@@Z */
417 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr_len_alloc, 16)
418 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr_len_alloc(
419 basic_string_char *this, const char *str, MSVCP_size_t len, const void *alloc)
421 TRACE("%p %s %ld\n", this, debugstr_an(str, len), len);
423 basic_string_char__Tidy(this, FALSE);
424 MSVCP_basic_string_char_assign_cstr_len(this, str, len);
425 return this;
428 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDI@Z */
429 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD_K@Z */
430 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr_len, 12)
431 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr_len(
432 basic_string_char *this, const char *str, MSVCP_size_t len)
434 return MSVCP_basic_string_char_ctor_cstr_len_alloc(this, str, len, NULL);
437 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@IIABV?$allocator@D@1@@Z */
438 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV01@_K1AEBV?$allocator@D@1@@Z */
439 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_substr_alloc, 20)
440 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_substr_alloc(
441 basic_string_char *this, const basic_string_char *assign,
442 MSVCP_size_t pos, MSVCP_size_t len, const void *alloc)
444 TRACE("%p %p %lu %lu\n", this, assign, pos, len);
446 basic_string_char__Tidy(this, FALSE);
447 MSVCP_basic_string_char_assign_substr(this, assign, pos, len);
448 return this;
451 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDABV?$allocator@D@1@@Z */
452 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBDAEBV?$allocator@D@1@@Z */
453 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr_alloc, 12)
454 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr_alloc(
455 basic_string_char *this, const char *str, const void *alloc)
457 TRACE("%p %s\n", this, debugstr_a(str));
459 basic_string_char__Tidy(this, FALSE);
460 MSVCP_basic_string_char_assign_cstr(this, str);
461 return this;
464 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z */
465 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD@Z */
466 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr, 8)
467 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr(
468 basic_string_char *this, const char *str)
470 return MSVCP_basic_string_char_ctor_cstr_alloc(this, str, NULL);
473 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@IDABV?$allocator@D@1@@Z */
474 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@_KDAEBV?$allocator@D@1@@Z */
475 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_ch_alloc, 16)
476 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_ch_alloc(basic_string_char *this,
477 MSVCP_size_t count, char ch, const void *alloc)
479 TRACE("%p %ld %c\n", this, count, ch);
481 basic_string_char__Tidy(this, FALSE);
482 MSVCP_basic_string_char_assignn(this, count, ch);
483 return this;
486 /* ??_F?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */
487 /* ??_F?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */
488 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor, 4)
489 basic_string_char* __thiscall MSVCP_basic_string_char_ctor(basic_string_char *this)
491 TRACE("%p\n", this);
493 basic_string_char__Tidy(this, FALSE);
494 return this;
497 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV?$allocator@D@1@@Z */
498 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV?$allocator@D@1@@Z */
499 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_alloc, 8)
500 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_alloc(
501 basic_string_char *this, const void *alloc)
503 TRACE("%p %p\n", this, alloc);
505 basic_string_char__Tidy(this, FALSE);
506 return this;
509 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z */
510 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV01@@Z */
511 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_copy_ctor, 8)
512 basic_string_char* __thiscall MSVCP_basic_string_char_copy_ctor(
513 basic_string_char *this, const basic_string_char *copy)
515 TRACE("%p %p\n", this, copy);
517 basic_string_char__Tidy(this, FALSE);
518 MSVCP_basic_string_char_assign(this, copy);
519 return this;
522 /* ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ */
523 /* ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@XZ */
524 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_dtor, 4)
525 void __thiscall MSVCP_basic_string_char_dtor(basic_string_char *this)
527 TRACE("%p\n", this);
528 basic_string_char__Tidy(this, TRUE);
531 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIPBDI@Z */
532 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0PEBD0@Z */
533 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_cstr_len, 20)
534 int __thiscall MSVCP_basic_string_char_compare_substr_cstr_len(
535 const basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t num,
536 const char *str, MSVCP_size_t count)
538 int ans;
540 TRACE("%p %lu %lu %s %lu\n", this, pos, num, debugstr_an(str, count), count);
542 if(this->size < pos)
543 _Xran();
545 if(num > this->size-pos)
546 num = this->size-pos;
548 ans = char_traits_char_compare(this->ptr+pos,
549 str, num>count ? count : num);
550 if(ans)
551 return ans;
553 if(num > count)
554 ans = 1;
555 else if(num < count)
556 ans = -1;
557 return ans;
560 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHPBD@Z */
561 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAHPEBD@Z */
562 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_cstr, 8)
563 int __thiscall MSVCP_basic_string_char_compare_cstr(
564 const basic_string_char *this, const char *str)
566 return MSVCP_basic_string_char_compare_substr_cstr_len(this, 0, this->size,
567 str, char_traits_char_length(str));
570 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIABV12@II@Z */
571 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0AEBV12@00@Z */
572 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_substr, 24)
573 int __thiscall MSVCP_basic_string_char_compare_substr_substr(
574 const basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t num,
575 const basic_string_char *compare, MSVCP_size_t off, MSVCP_size_t count)
577 TRACE("%p %lu %lu %p %lu %lu\n", this, pos, num, compare, off, count);
579 if(compare->size < off)
580 _Xran();
582 if(count > compare->size-off)
583 count = compare->size-off;
585 return MSVCP_basic_string_char_compare_substr_cstr_len(this, pos, num,
586 compare->ptr+off, count);
589 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIABV12@@Z */
590 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0AEBV12@@Z */
591 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr, 16)
592 int __thiscall MSVCP_basic_string_char_compare_substr(
593 const basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t num,
594 const basic_string_char *compare)
596 return MSVCP_basic_string_char_compare_substr_cstr_len(this, pos, num,
597 compare->ptr, compare->size);
600 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHABV12@@Z */
601 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAHAEBV12@@Z */
602 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare, 8)
603 int __thiscall MSVCP_basic_string_char_compare(
604 const basic_string_char *this, const basic_string_char *compare)
606 return MSVCP_basic_string_char_compare_substr_cstr_len(this, 0, this->size,
607 compare->ptr, compare->size);
610 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIPBD@Z */
611 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0PEBD@Z */
612 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_cstr, 16)
613 int __thiscall MSVCP_basic_string_char_compare_substr_cstr(const basic_string_char *this,
614 MSVCP_size_t pos, MSVCP_size_t num, const char *str)
616 return MSVCP_basic_string_char_compare_substr_cstr_len(this, pos, num,
617 str, char_traits_char_length(str));
620 /* ??$?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 */
621 /* ??$?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 */
622 /* ??8std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
623 /* ??8std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
624 MSVCP_bool __cdecl MSVCP_basic_string_char_equal(
625 const basic_string_char *left, const basic_string_char *right)
627 return MSVCP_basic_string_char_compare(left, right) == 0;
630 /* ??$?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 */
631 /* ??$?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 */
632 /* ??8std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
633 /* ??8std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
634 MSVCP_bool __cdecl MSVCP_basic_string_char_equal_str_cstr(
635 const basic_string_char *left, const char *right)
637 return MSVCP_basic_string_char_compare_cstr(left, right) == 0;
640 /* ??$?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 */
641 /* ??$?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 */
642 /* ??8std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
643 /* ??8std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
644 MSVCP_bool __cdecl MSVCP_basic_string_char_equal_cstr_str(
645 const char *left, const basic_string_char *right)
647 return MSVCP_basic_string_char_compare_cstr(right, left) == 0;
650 /* ??$?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 */
651 /* ??$?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 */
652 /* ??9std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
653 /* ??9std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
654 MSVCP_bool __cdecl MSVCP_basic_string_char_not_equal(
655 const basic_string_char *left, const basic_string_char *right)
657 return MSVCP_basic_string_char_compare(left, right) != 0;
660 /* ??$?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 */
661 /* ??$?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 */
662 /* ??9std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
663 /* ??9std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
664 MSVCP_bool __cdecl MSVCP_basic_string_char_not_equal_str_cstr(
665 const basic_string_char *left, const char *right)
667 return MSVCP_basic_string_char_compare_cstr(left, right) != 0;
670 /* ??$?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 */
671 /* ??$?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 */
672 /* ??9std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
673 /* ??9std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
674 MSVCP_bool __cdecl MSVCP_basic_string_char_not_equal_cstr_str(
675 const char *left, const basic_string_char *right)
677 return MSVCP_basic_string_char_compare_cstr(right, left) != 0;
680 /* ??$?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 */
681 /* ??$?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 */
682 /* ??Mstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
683 /* ??Mstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
684 MSVCP_bool __cdecl MSVCP_basic_string_char_lower(
685 const basic_string_char *left, const basic_string_char *right)
687 return MSVCP_basic_string_char_compare(left, right) < 0;
690 /* ??$?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 */
691 /* ??$?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 */
692 /* ??Mstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
693 /* ??Mstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
694 MSVCP_bool __cdecl MSVCP_basic_string_char_lower_bstr_cstr(
695 const basic_string_char *left, const char *right)
697 return MSVCP_basic_string_char_compare_cstr(left, right) < 0;
700 /* ??$?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 */
701 /* ??$?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 */
702 /* ??Mstd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
703 /* ??Mstd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
704 MSVCP_bool __cdecl MSVCP_basic_string_char_lower_cstr_bstr(
705 const char *left, const basic_string_char *right)
707 return MSVCP_basic_string_char_compare_cstr(right, left) > 0;
710 /* ??$?NDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
711 /* ??$?NDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
712 /* ??Nstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
713 /* ??Nstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
714 MSVCP_bool __cdecl MSVCP_basic_string_char_leq(
715 const basic_string_char *left, const basic_string_char *right)
717 return MSVCP_basic_string_char_compare(left, right) <= 0;
720 /* ??$?NDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
721 /* ??$?NDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
722 /* ??Nstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
723 /* ??Nstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
724 MSVCP_bool __cdecl MSVCP_basic_string_char_leq_bstr_cstr(
725 const basic_string_char *left, const char *right)
727 return MSVCP_basic_string_char_compare_cstr(left, right) <= 0;
730 /* ??$?NDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
731 /* ??$?NDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
732 /* ??Nstd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
733 /* ??Nstd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
734 MSVCP_bool __cdecl MSVCP_basic_string_char_leq_cstr_bstr(
735 const char *left, const basic_string_char *right)
737 return MSVCP_basic_string_char_compare_cstr(right, left) >= 0;
740 /* ??$?ODU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
741 /* ??$?ODU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
742 /* ??Ostd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
743 /* ??Ostd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
744 MSVCP_bool __cdecl MSVCP_basic_string_char_greater(
745 const basic_string_char *left, const basic_string_char *right)
747 return MSVCP_basic_string_char_compare(left, right) > 0;
750 /* ??$?ODU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
751 /* ??$?ODU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
752 /* ??Ostd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
753 /* ??Ostd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
754 MSVCP_bool __cdecl MSVCP_basic_string_char_greater_bstr_cstr(
755 const basic_string_char *left, const char *right)
757 return MSVCP_basic_string_char_compare_cstr(left, right) > 0;
760 /* ??$?ODU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
761 /* ??$?ODU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
762 /* ??Ostd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
763 /* ??Ostd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
764 MSVCP_bool __cdecl MSVCP_basic_string_char_greater_cstr_bstr(
765 const char *left, const basic_string_char *right)
767 return MSVCP_basic_string_char_compare_cstr(right, left) < 0;
770 /* ??$?PDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
771 /* ??$?PDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
772 /* ??Pstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
773 /* ??Pstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
774 MSVCP_bool __cdecl MSVCP_basic_string_char_geq(
775 const basic_string_char *left, const basic_string_char *right)
777 return MSVCP_basic_string_char_compare(left, right) >= 0;
780 /* ??$?PDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
781 /* ??$?PDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
782 /* ??Pstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
783 /* ??Pstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
784 MSVCP_bool __cdecl MSVCP_basic_string_char_geq_bstr_cstr(
785 const basic_string_char *left, const char *right)
787 return MSVCP_basic_string_char_compare_cstr(left, right) >= 0;
790 /* ??$?PDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
791 /* ??$?PDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
792 /* ??Pstd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
793 /* ??Pstd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
794 MSVCP_bool __cdecl MSVCP_basic_string_char_geq_cstr_bstr(
795 const char *left, const basic_string_char *right)
797 return MSVCP_basic_string_char_compare_cstr(right, left) <= 0;
800 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
801 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
802 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_cstr_substr, 16)
803 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_cstr_substr(
804 const basic_string_char *this, const char *find, MSVCP_size_t pos, MSVCP_size_t len)
806 const char *p, *end;
808 TRACE("%p %s %lu %lu\n", this, debugstr_an(find, len), pos, len);
810 if(len==0 && pos<=this->size)
811 return pos;
812 if(pos>=this->size || len>this->size)
813 return MSVCP_basic_string_char_npos;
815 end = this->ptr+this->size-len+1;
816 for(p=this->ptr+pos; p<end; p++) {
817 p = char_traits_char_find(p, end-p, find);
818 if(!p)
819 break;
821 if(!char_traits_char_compare(p, find, len))
822 return p-this->ptr;
825 return MSVCP_basic_string_char_npos;
828 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
829 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
830 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_off, 12)
831 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_off(
832 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
834 return MSVCP_basic_string_char_find_cstr_substr(this, find->ptr, off, find->size);
837 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
838 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
839 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_ch, 12)
840 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_ch(
841 const basic_string_char *this, char ch, MSVCP_size_t pos)
843 return MSVCP_basic_string_char_find_cstr_substr(this, &ch, pos, 1);
846 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
847 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
848 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_cstr_off, 12)
849 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_cstr_off(
850 const basic_string_char *this, const char *find, MSVCP_size_t pos)
852 return MSVCP_basic_string_char_find_cstr_substr(this, find, pos,
853 char_traits_char_length(find));
856 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
857 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
858 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rfind_cstr_substr, 16)
859 MSVCP_size_t __thiscall MSVCP_basic_string_char_rfind_cstr_substr(
860 const basic_string_char *this, const char *find, MSVCP_size_t pos, MSVCP_size_t len)
862 const char *p, *end;
864 TRACE("%p %s %lu %lu\n", this, debugstr_an(find, len), pos, len);
866 if(len==0)
867 return pos<this->size ? pos : this->size;
869 if(len > this->size)
870 return MSVCP_basic_string_char_npos;
872 if(pos > this->size-len+1)
873 pos = this->size-len+1;
874 end = this->ptr;
875 for(p=end+pos; p>=end; p--) {
876 if(*p==*find && !char_traits_char_compare(p, find, len))
877 return p-this->ptr;
880 return MSVCP_basic_string_char_npos;
883 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
884 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
885 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rfind_off, 12)
886 MSVCP_size_t __thiscall MSVCP_basic_string_char_rfind_off(
887 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
889 return MSVCP_basic_string_char_rfind_cstr_substr(this, find->ptr, off, find->size);
892 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
893 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
894 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rfind_ch, 12)
895 MSVCP_size_t __thiscall MSVCP_basic_string_char_rfind_ch(
896 const basic_string_char *this, char ch, MSVCP_size_t pos)
898 return MSVCP_basic_string_char_rfind_cstr_substr(this, &ch, pos, 1);
901 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
902 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
903 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rfind_cstr_off, 12)
904 MSVCP_size_t __thiscall MSVCP_basic_string_char_rfind_cstr_off(
905 const basic_string_char *this, const char *find, MSVCP_size_t pos)
907 return MSVCP_basic_string_char_rfind_cstr_substr(this, find, pos,
908 char_traits_char_length(find));
911 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
912 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
913 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of_cstr_substr, 16)
914 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_not_of_cstr_substr(
915 const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len)
917 const char *p, *end;
919 TRACE("%p %p %lu %lu\n", this, find, off, len);
921 if(off<this->size) {
922 end = this->ptr+this->size;
923 for(p=this->ptr+off; p<end; p++)
924 if(!char_traits_char_find(find, len, p))
925 return p-this->ptr;
928 return MSVCP_basic_string_char_npos;
931 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
932 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
933 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of, 12)
934 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_not_of(
935 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
937 return MSVCP_basic_string_char_find_first_not_of_cstr_substr(this,
938 find->ptr, off, find->size);
941 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
942 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
943 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of_ch, 12)
944 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_not_of_ch(
945 const basic_string_char *this, char ch, MSVCP_size_t off)
947 return MSVCP_basic_string_char_find_first_not_of_cstr_substr(this, &ch, off, 1);
950 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
951 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
952 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of_cstr, 12)
953 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_not_of_cstr(
954 const basic_string_char *this, const char *find, MSVCP_size_t off)
956 return MSVCP_basic_string_char_find_first_not_of_cstr_substr(
957 this, find, off, char_traits_char_length(find));
960 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
961 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
962 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of_cstr_substr, 16)
963 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_of_cstr_substr(
964 const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len)
966 const char *p, *end;
968 TRACE("%p %p %lu %lu\n", this, find, off, len);
970 if(len>0 && off<this->size) {
971 end = this->ptr+this->size;
972 for(p=this->ptr+off; p<end; p++)
973 if(char_traits_char_find(find, len, p))
974 return p-this->ptr;
977 return MSVCP_basic_string_char_npos;
980 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
981 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
982 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of, 12)
983 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_of(
984 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
986 return MSVCP_basic_string_char_find_first_of_cstr_substr(this,
987 find->ptr, off, find->size);
990 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
991 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
992 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of_ch, 12)
993 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_of_ch(
994 const basic_string_char *this, char ch, MSVCP_size_t off)
996 return MSVCP_basic_string_char_find_first_of_cstr_substr(this, &ch, off, 1);
999 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1000 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1001 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of_cstr, 12)
1002 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_of_cstr(
1003 const basic_string_char *this, const char *find, MSVCP_size_t off)
1005 return MSVCP_basic_string_char_find_first_of_cstr_substr(
1006 this, find, off, char_traits_char_length(find));
1009 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1010 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1011 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_not_of_cstr_substr, 16)
1012 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_not_of_cstr_substr(
1013 const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len)
1015 const char *p, *beg;
1017 TRACE("%p %p %lu %lu\n", this, find, off, len);
1019 if(len>0 && this->size>0) {
1020 if(off >= this->size)
1021 off = this->size-1;
1023 beg = this->ptr;
1024 for(p=beg+off; p>=beg; p--)
1025 if(!char_traits_char_find(find, len, p))
1026 return p-beg;
1029 return MSVCP_basic_string_char_npos;
1032 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1033 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1034 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_not_of, 12)
1035 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_not_of(
1036 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
1038 return MSVCP_basic_string_char_find_last_not_of_cstr_substr(this,
1039 find->ptr, off, find->size);
1042 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1043 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1044 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_not_of_ch, 12)
1045 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_not_of_ch(
1046 const basic_string_char *this, char ch, MSVCP_size_t off)
1048 return MSVCP_basic_string_char_find_last_not_of_cstr_substr(this, &ch, off, 1);
1051 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1052 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1053 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_not_of_cstr, 12)
1054 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_not_of_cstr(
1055 const basic_string_char *this, const char *find, MSVCP_size_t off)
1057 return MSVCP_basic_string_char_find_last_not_of_cstr_substr(
1058 this, find, off, char_traits_char_length(find));
1061 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1062 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1063 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of_cstr_substr, 16)
1064 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_of_cstr_substr(
1065 const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len)
1067 const char *p, *beg;
1069 TRACE("%p %p %lu %lu\n", this, find, off, len);
1071 if(len>0 && this->size>0) {
1072 if(off >= this->size)
1073 off = this->size-1;
1075 beg = this->ptr;
1076 for(p=beg+off; p>=beg; p--)
1077 if(char_traits_char_find(find, len, p))
1078 return p-beg;
1081 return MSVCP_basic_string_char_npos;
1084 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1085 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1086 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of, 12)
1087 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_of(
1088 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
1090 return MSVCP_basic_string_char_find_last_of_cstr_substr(this,
1091 find->ptr, off, find->size);
1094 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1095 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1096 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of_ch, 12)
1097 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_of_ch(
1098 const basic_string_char *this, char ch, MSVCP_size_t off)
1100 return MSVCP_basic_string_char_find_last_of_cstr_substr(this, &ch, off, 1);
1103 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1104 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1105 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of_cstr, 12)
1106 MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_of_cstr(
1107 const basic_string_char *this, const char *find, MSVCP_size_t off)
1109 return MSVCP_basic_string_char_find_last_of_cstr_substr(
1110 this, find, off, char_traits_char_length(find));
1113 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z */
1114 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
1115 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_substr, 16)
1116 basic_string_char* __thiscall MSVCP_basic_string_char_append_substr(basic_string_char *this,
1117 const basic_string_char *append, MSVCP_size_t offset, MSVCP_size_t count)
1119 TRACE("%p %p %lu %lu\n", this, append, offset, count);
1121 if(append->size < offset)
1122 _Xran();
1124 if(count > append->size-offset)
1125 count = append->size-offset;
1127 if(MSVCP_basic_string_char_npos-this->size<=count || this->size+count<this->size)
1128 _Xlen();
1130 if(basic_string_char__Grow(this, this->size+count, FALSE)) {
1131 if(append->ptr)
1132 char_traits_char__Copy_s(this->ptr+this->size, this->res-this->size,
1133 append->ptr+offset, count);
1134 basic_string_char__Eos(this, this->size+count);
1137 return this;
1140 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z */
1141 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD_K@Z */
1142 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_cstr_len, 12)
1143 basic_string_char* __thiscall MSVCP_basic_string_char_append_cstr_len(
1144 basic_string_char *this, const char *append, MSVCP_size_t count)
1146 TRACE("%p %s %lu\n", this, debugstr_an(append, count), count);
1148 if(basic_string_char_inside(this, append))
1149 return MSVCP_basic_string_char_append_substr(this, this, append-this->ptr, count);
1151 if(MSVCP_basic_string_char_npos-this->size<=count || this->size+count<this->size)
1152 _Xlen();
1154 if(basic_string_char__Grow(this, this->size+count, FALSE)) {
1155 char_traits_char__Copy_s(this->ptr+this->size,
1156 this->res-this->size, append, count);
1157 basic_string_char__Eos(this, this->size+count);
1160 return this;
1163 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ID@Z */
1164 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KD@Z */
1165 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_len_ch, 12)
1166 basic_string_char* __thiscall MSVCP_basic_string_char_append_len_ch(
1167 basic_string_char *this, MSVCP_size_t count, char ch)
1169 TRACE("%p %lu %c\n", this, count, ch);
1171 if(MSVCP_basic_string_char_npos-this->size <= count)
1172 _Xlen();
1174 if(basic_string_char__Grow(this, this->size+count, FALSE)) {
1175 char_traits_char_assignn(this->ptr+this->size, count, ch);
1176 basic_string_char__Eos(this, this->size+count);
1179 return this;
1182 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@@Z */
1183 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@@Z */
1184 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@ABV01@@Z */
1185 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@AEBV01@@Z */
1186 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append, 8)
1187 basic_string_char* __thiscall MSVCP_basic_string_char_append(
1188 basic_string_char *this, const basic_string_char *append)
1190 return MSVCP_basic_string_char_append_substr(this, append,
1191 0, MSVCP_basic_string_char_npos);
1194 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@D@Z */
1195 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@D@Z */
1196 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_ch, 8)
1197 basic_string_char* __thiscall MSVCP_basic_string_char_append_ch(
1198 basic_string_char *this, char ch)
1200 return MSVCP_basic_string_char_append_len_ch(this, 1, ch);
1203 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD0@Z */
1204 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD0@Z */
1205 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_beg_end, 12)
1206 basic_string_char* __thiscall MSVCP_basic_string_char_append_beg_end(
1207 basic_string_char *this, const char *beg, const char *end)
1209 return MSVCP_basic_string_char_append_cstr_len(this, beg, end-beg);
1212 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z */
1213 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD@Z */
1214 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z */
1215 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@PEBD@Z */
1216 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_cstr, 8)
1217 basic_string_char* __thiscall MSVCP_basic_string_char_append_cstr(
1218 basic_string_char *this, const char *append)
1220 return MSVCP_basic_string_char_append_cstr_len(this, append,
1221 char_traits_char_length(append));
1223 /* ??$?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 */
1224 /* ??$?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 */
1225 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@0@Z */
1226 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@0@Z */
1227 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate(basic_string_char *ret,
1228 const basic_string_char *left, const basic_string_char *right)
1230 TRACE("%p %p\n", left, right);
1232 MSVCP_basic_string_char_copy_ctor(ret, left);
1233 MSVCP_basic_string_char_append(ret, right);
1234 return ret;
1237 /* ??$?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 */
1238 /* ??$?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 */
1239 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@D@Z */
1240 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@D@Z */
1241 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_bstr_ch(basic_string_char *ret,
1242 const basic_string_char *left, char right)
1244 TRACE("%p %c\n", left, right);
1246 MSVCP_basic_string_char_copy_ctor(ret, left);
1247 MSVCP_basic_string_char_append_ch(ret, right);
1248 return ret;
1251 /* ??$?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 */
1252 /* ??$?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 */
1253 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@PBD@Z */
1254 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@PEBD@Z */
1255 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_bstr_cstr(basic_string_char *ret,
1256 const basic_string_char *left, const char *right)
1258 TRACE("%p %s\n", left, debugstr_a(right));
1260 MSVCP_basic_string_char_copy_ctor(ret, left);
1261 MSVCP_basic_string_char_append_cstr(ret, right);
1262 return ret;
1265 /* ??$?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 */
1266 /* ??$?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 */
1267 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@DABV10@@Z */
1268 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@DAEBV10@@Z */
1269 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_ch_bstr(basic_string_char *ret,
1270 char left, const basic_string_char *right)
1272 TRACE("%c %p\n", left, right);
1274 MSVCP_basic_string_char_ctor_cstr_len_alloc(ret, &left, 1, NULL);
1275 MSVCP_basic_string_char_append(ret, right);
1276 return ret;
1279 /* ??$?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 */
1280 /* ??$?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 */
1281 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBDABV10@@Z */
1282 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBDAEBV10@@Z */
1283 basic_string_char* __cdecl MSVCP_basic_string_char_concatenate_cstr_bstr(basic_string_char *ret,
1284 const char *left, const basic_string_char *right)
1286 TRACE("%s %p\n", debugstr_a(left), right);
1288 MSVCP_basic_string_char_ctor_cstr_alloc(ret, left, NULL);
1289 MSVCP_basic_string_char_append(ret, right);
1290 return ret;
1293 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAADI@Z */
1294 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAD_K@Z */
1295 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDI@Z */
1296 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAAEBD_K@Z */
1297 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_operator_at, 8)
1298 char* __thiscall MSVCP_basic_string_char_operator_at(
1299 basic_string_char *this, MSVCP_size_t pos)
1301 TRACE("%p %lu\n", this, pos);
1303 assert(this->size >= pos);
1304 return this->ptr+pos;
1307 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAADI@Z */
1308 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAD_K@Z */
1309 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDI@Z */
1310 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAAEBD_K@Z */
1311 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_at, 8)
1312 char* __thiscall MSVCP_basic_string_char_at(
1313 basic_string_char *this, MSVCP_size_t pos)
1315 TRACE("%p %lu\n", this, pos);
1317 if(this->size <= pos)
1318 _Xran();
1320 return this->ptr+pos;
1323 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIPBDI@Z */
1324 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0PEBD0@Z */
1325 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_cstr_len, 20)
1326 basic_string_char* __thiscall basic_string_char_replace_cstr_len(basic_string_char *this,
1327 MSVCP_size_t off, MSVCP_size_t len, const char *str, MSVCP_size_t str_len)
1329 MSVCP_size_t inside_pos = -1;
1330 char *ptr = this->ptr;
1332 TRACE("%p %ld %ld %p %ld\n", this, off, len, str, str_len);
1334 if(this->size < off)
1335 _Xran();
1337 if(len > this->size-off)
1338 len = this->size-off;
1340 if(MSVCP_basic_string_char_npos-str_len <= this->size-len)
1341 _Xlen();
1343 if(basic_string_char_inside(this, str))
1344 inside_pos = str-ptr;
1346 if(this->size-len+str_len)
1347 basic_string_char__Grow(this, this->size-len+str_len, FALSE);
1348 ptr = this->ptr;
1350 if(inside_pos == -1) {
1351 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1352 memcpy(ptr+off, str, str_len*sizeof(char));
1353 } else if(len >= str_len) {
1354 memmove(ptr+off, ptr+inside_pos, str_len*sizeof(char));
1355 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1356 } else {
1357 MSVCP_size_t size;
1359 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1361 if(inside_pos < off+len) {
1362 size = off+len-inside_pos;
1363 if(size > str_len)
1364 size = str_len;
1365 memmove(ptr+off, ptr+inside_pos, size*sizeof(char));
1366 } else {
1367 size = 0;
1370 if(str_len > size)
1371 memmove(ptr+off+size, ptr+off+str_len, (str_len-size)*sizeof(char));
1374 if(this->ptr)
1375 basic_string_char__Eos(this, this->size-len+str_len);
1376 return this;
1379 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIABV12@II@Z */
1380 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0AEBV12@00@Z */
1381 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_substr, 24)
1382 basic_string_char* __thiscall basic_string_char_replace_substr(basic_string_char *this, MSVCP_size_t off,
1383 MSVCP_size_t len, const basic_string_char *str, MSVCP_size_t str_off, MSVCP_size_t str_len)
1385 if(str->size < str_off)
1386 _Xran();
1388 if(str_len > str->size-str_off)
1389 str_len = str->size-str_off;
1391 return basic_string_char_replace_cstr_len(this, off, len,
1392 str->ptr+str_off, str_len);
1395 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIABV12@@Z */
1396 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0AEBV12@@Z */
1397 DEFINE_THISCALL_WRAPPER(basic_string_char_replace, 16)
1398 basic_string_char* __thiscall basic_string_char_replace(basic_string_char *this,
1399 MSVCP_size_t off, MSVCP_size_t len, const basic_string_char *str)
1401 return basic_string_char_replace_cstr_len(this, off, len,
1402 str->ptr, str->size);
1405 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIID@Z */
1406 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K00D@Z */
1407 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_ch, 20)
1408 basic_string_char* __thiscall basic_string_char_replace_ch(basic_string_char *this,
1409 MSVCP_size_t off, MSVCP_size_t len, MSVCP_size_t count, char ch)
1411 char *ptr;
1413 TRACE("%p %ld %ld %ld %c\n", this, off, len, count, ch);
1415 if(this->size < off)
1416 _Xran();
1418 if(len > this->size-off)
1419 len = this->size-off;
1421 if(MSVCP_basic_string_char_npos-count <= this->size-len)
1422 _Xlen();
1424 if(this->size-len+count)
1425 basic_string_char__Grow(this, this->size-len+count, FALSE);
1426 ptr = this->ptr;
1428 memmove(ptr+off+count, ptr+off+len, (this->size-off-len)*sizeof(char));
1429 char_traits_char_assignn(ptr+off, count, ch);
1430 basic_string_char__Eos(this, this->size-len+count);
1432 return this;
1435 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIPBD@Z */
1436 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0PEBD@Z */
1437 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_cstr, 16)
1438 basic_string_char* __thiscall basic_string_char_replace_cstr(basic_string_char *this,
1439 MSVCP_size_t off, MSVCP_size_t len, const char *str)
1441 return basic_string_char_replace_cstr_len(this, off, len, str,
1442 char_traits_char_length(str));
1445 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IABV12@@Z */
1446 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KAEBV12@@Z */
1447 DEFINE_THISCALL_WRAPPER(basic_string_char_insert, 12)
1448 basic_string_char* __thiscall basic_string_char_insert(basic_string_char *this,
1449 MSVCP_size_t off, const basic_string_char *str)
1451 return basic_string_char_replace(this, off, 0, str);
1454 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IABV12@II@Z */
1455 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KAEBV12@00@Z */
1456 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_substr, 20)
1457 basic_string_char* __thiscall basic_string_char_insert_substr(
1458 basic_string_char *this, MSVCP_size_t off, const basic_string_char *str,
1459 MSVCP_size_t str_off, MSVCP_size_t str_count)
1461 return basic_string_char_replace_substr(this, off, 0, str, str_off, str_count);
1464 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IPBD@Z */
1465 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KPEBD@Z */
1466 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_cstr, 12)
1467 basic_string_char* __thiscall basic_string_char_insert_cstr(
1468 basic_string_char *this, MSVCP_size_t off, const char *str)
1470 return basic_string_char_replace_cstr(this, off, 0, str);
1473 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IPBDI@Z */
1474 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KPEBD0@Z */
1475 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_cstr_len, 16)
1476 basic_string_char* __thiscall basic_string_char_insert_cstr_len(basic_string_char *this,
1477 MSVCP_size_t off, const char *str, MSVCP_size_t str_len)
1479 return basic_string_char_replace_cstr_len(this, off, 0, str, str_len);
1482 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IID@Z */
1483 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0D@Z */
1484 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_chn, 16)
1485 basic_string_char* __thiscall basic_string_char_insert_chn(basic_string_char *this,
1486 MSVCP_size_t off, MSVCP_size_t count, char ch)
1488 return basic_string_char_replace_ch(this, off, 0, count, ch);
1491 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXID@Z */
1492 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_KD@Z */
1493 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_resize_ch, 12)
1494 void __thiscall MSVCP_basic_string_char_resize_ch(
1495 basic_string_char *this, MSVCP_size_t size, char ch)
1497 TRACE("%p %lu %c\n", this, size, ch);
1499 if(size <= this->size)
1500 MSVCP_basic_string_char_erase(this, size, this->size);
1501 else
1502 MSVCP_basic_string_char_append_len_ch(this, size-this->size, ch);
1505 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXI@Z */
1506 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_K@Z */
1507 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_resize, 8)
1508 void __thiscall MSVCP_basic_string_char_resize(
1509 basic_string_char *this, MSVCP_size_t size)
1511 MSVCP_basic_string_char_resize_ch(this, size, '\0');
1514 /* ?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
1515 /* ?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
1516 /* ?data@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
1517 /* ?data@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
1518 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_c_str, 4)
1519 const char* __thiscall MSVCP_basic_string_char_c_str(const basic_string_char *this)
1521 TRACE("%p\n", this);
1522 return this->ptr ? this->ptr : basic_string_char__Nullstr();
1525 /* ?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1526 /* ?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1527 /* ?length@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1528 /* ?length@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1529 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_length, 4)
1530 MSVCP_size_t __thiscall MSVCP_basic_string_char_length(const basic_string_char *this)
1532 TRACE("%p\n", this);
1533 return this->size;
1536 /* ?max_size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1537 /* ?max_size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1538 DEFINE_THISCALL_WRAPPER(basic_string_char_max_size, 4)
1539 MSVCP_size_t __thiscall basic_string_char_max_size(const basic_string_char *this)
1541 TRACE("%p\n", this);
1542 return MSVCP_allocator_char_max_size(NULL)-1;
1545 /* ?capacity@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1546 /* ?capacity@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1547 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_capacity, 4)
1548 MSVCP_size_t __thiscall MSVCP_basic_string_char_capacity(basic_string_char *this)
1550 TRACE("%p\n", this);
1551 return this->res;
1554 /* ?reserve@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXI@Z */
1555 /* ?reserve@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_K@Z */
1556 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_reserve, 8)
1557 void __thiscall MSVCP_basic_string_char_reserve(basic_string_char *this, MSVCP_size_t size)
1559 MSVCP_size_t len;
1561 TRACE("%p %ld\n", this, size);
1563 len = this->size;
1564 if(len > size)
1565 return;
1567 if(basic_string_char__Grow(this, size, FALSE))
1568 basic_string_char__Eos(this, len);
1571 /* ?empty@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE_NXZ */
1572 /* ?empty@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_NXZ */
1573 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_empty, 4)
1574 MSVCP_bool __thiscall MSVCP_basic_string_char_empty(basic_string_char *this)
1576 TRACE("%p\n", this);
1577 return this->size == 0;
1580 /* ?swap@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXAAV12@@Z */
1581 /* ?swap@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXAEAV12@@Z */
1582 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_swap, 8)
1583 void __thiscall MSVCP_basic_string_char_swap(basic_string_char *this, basic_string_char *str)
1585 basic_string_char tmp;
1586 TRACE("%p %p\n", this, str);
1588 tmp = *this;
1589 *this = *str;
1590 *str = tmp;
1593 /* ?substr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV12@II@Z */
1594 /* ?substr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV12@_K0@Z */
1595 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_substr, 16)
1596 basic_string_char* __thiscall MSVCP_basic_string_char_substr(basic_string_char *this,
1597 basic_string_char *ret, MSVCP_size_t off, MSVCP_size_t len)
1599 TRACE("%p %lu %lu\n", this, off, len);
1601 MSVCP_basic_string_char_ctor_substr_alloc(ret, this, off, len, NULL);
1602 return ret;
1605 /* ?copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPADII@Z */
1606 /* ?copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEAD_K1@Z */
1607 DEFINE_THISCALL_WRAPPER(basic_string_char_copy, 16)
1608 MSVCP_size_t __thiscall basic_string_char_copy(const basic_string_char *this,
1609 char *dest, MSVCP_size_t count, MSVCP_size_t off)
1611 TRACE("%p %p %lu %lu\n", this, dest, count, off);
1613 if(off > this->size)
1614 _Xran();
1615 if(count > this->size-off)
1616 count = this->size-off;
1617 if(this->ptr)
1618 char_traits_char__Copy_s(dest, count, this->ptr+off, count);
1619 return count;
1622 /* ?get_allocator@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$allocator@D@2@XZ */
1623 /* ?get_allocator@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$allocator@D@2@XZ */
1624 DEFINE_THISCALL_WRAPPER(basic_string_char_get_allocator, 8)
1625 allocator* __thiscall basic_string_char_get_allocator(const basic_string_char *this, allocator *ret)
1627 TRACE("%p\n", this);
1628 return ret;
1631 static wchar_t* char_traits_wchar__Move_s(wchar_t *dest,
1632 MSVCP_size_t size, const wchar_t *src, MSVCP_size_t count)
1634 if(!dest || !src || size<count) {
1635 if(dest && size)
1636 dest[0] = '\0';
1637 _invalid_parameter(NULL, NULL, NULL, 0, 0);
1638 return dest;
1641 return memmove(dest, src, count * sizeof(WCHAR));
1644 static wchar_t* char_traits_wchar__Copy_s(wchar_t *dest,
1645 MSVCP_size_t size, const wchar_t *src, MSVCP_size_t count)
1647 if(!dest || !src || size<count) {
1648 if(dest && size)
1649 dest[0] = '\0';
1650 _invalid_parameter(NULL, NULL, NULL, 0, 0);
1651 return dest;
1654 return memcpy(dest, src, count * sizeof(wchar_t));
1657 static MSVCP_size_t char_traits_wchar_length(const wchar_t *str)
1659 return wcslen((WCHAR*)str);
1662 static wchar_t* char_traits_wchar_assignn(wchar_t *str,
1663 MSVCP_size_t num, wchar_t c)
1665 MSVCP_size_t i;
1667 for(i=0; i<num; i++)
1668 str[i] = c;
1670 return str;
1673 static int char_traits_wchar_compare(const wchar_t *s1,
1674 const wchar_t *s2, MSVCP_size_t count)
1676 int ret = memcmp(s1, s2, count);
1677 return (ret>0 ? 1 : (ret<0 ? -1 : 0));
1680 static const wchar_t* char_traits_wchar_find(const wchar_t *str,
1681 MSVCP_size_t range, const wchar_t *c)
1683 return memchr(str, *c, range);
1686 static MSVCP_bool basic_string_wchar_inside(
1687 basic_string_wchar *this, const wchar_t *ptr)
1689 return ptr>=this->ptr && ptr<this->ptr+this->size;
1692 /* ?npos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@2IB */
1693 /* ?npos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@2_KB */
1694 const MSVCP_size_t MSVCP_basic_string_wchar_npos = -1;
1696 /* ?_C@?1??_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPBGXZ@4GB */
1697 /* ?_C@?1??_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEBGXZ@4GB */
1698 const wchar_t basic_string_wchar_nullbyte = '\0';
1700 /* ?_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPBGXZ */
1701 /* ?_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEBGXZ */
1702 const wchar_t* __cdecl basic_string_wchar__Nullstr(void)
1704 return &basic_string_wchar_nullbyte;
1707 /* ?_Refcnt@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEAAEPBG@Z */
1708 /* ?_Refcnt@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAAEAEPEBG@Z */
1709 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Refcnt, 8)
1710 unsigned short* __thiscall basic_string_wchar__Refcnt(basic_string_wchar *this, const wchar_t *ptr)
1712 TRACE("(%p %p)\n", this, ptr);
1713 return (unsigned short*)ptr-1;
1716 /* ?_Eos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXI@Z */
1717 /* ?_Eos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAX_K@Z */
1718 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Eos, 8)
1719 void __thiscall basic_string_wchar__Eos(basic_string_wchar *this, MSVCP_size_t len)
1721 this->size = len;
1722 this->ptr[len] = 0;
1725 /* ?clear@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXXZ */
1726 /* ?clear@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXXZ */
1727 /* ?clear@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */
1728 /* ?clear@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */
1729 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_clear, 4)
1730 void __thiscall MSVCP_basic_string_wchar_clear(basic_string_wchar *this)
1732 if(this->ptr)
1733 basic_string_wchar__Eos(this, 0);
1736 /* ?_Tidy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEX_N@Z */
1737 /* ?_Tidy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAX_N@Z */
1738 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Tidy, 8)
1739 void __thiscall basic_string_wchar__Tidy(basic_string_wchar *this, MSVCP_bool built)
1741 TRACE("(%p %d)\n", this, built);
1743 if(!built || !this->ptr);
1744 else if(!this->ptr[-1] || (unsigned short)this->ptr[-1]==FROZEN)
1745 MSVCP_allocator_wchar_deallocate(NULL, this->ptr-1, this->res+2);
1746 else
1747 this->ptr[-1]--;
1749 memset(this, 0, sizeof(*this));
1752 /* ?_Grow@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAE_NI_N@Z */
1753 /* ?_Grow@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAA_N_K_N@Z */
1754 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Grow, 12)
1755 MSVCP_bool __thiscall basic_string_wchar__Grow(basic_string_wchar *this, MSVCP_size_t new_size, MSVCP_bool trim)
1757 if(!new_size) {
1758 if(trim)
1759 basic_string_wchar__Tidy(this, TRUE);
1760 else if(this->ptr)
1761 basic_string_wchar__Eos(this, 0);
1762 } else if(this->res<new_size || trim ||
1763 (this->ptr && this->ptr[-1] && (unsigned short)this->ptr[-1]!=FROZEN)) {
1764 MSVCP_size_t new_res = new_size, len = this->size;
1765 wchar_t *ptr;
1767 if(!trim && this->ptr && !this->ptr[-1]) {
1768 new_res |= 0xf;
1769 if(new_res/3 < this->res/2)
1770 new_res = this->res + this->res/2;
1773 ptr = MSVCP_allocator_wchar_allocate(this->allocator, new_res+2);
1774 if(!ptr) {
1775 new_res = new_size;
1776 ptr = MSVCP_allocator_wchar_allocate(this->allocator, new_size+2);
1778 if(!ptr) {
1779 ERR("Out of memory\n");
1780 return FALSE;
1783 if(len > new_res)
1784 len = new_res;
1786 *ptr = 0;
1787 if(this->ptr)
1788 char_traits_wchar__Copy_s(ptr+1, new_size, this->ptr, len);
1789 basic_string_wchar__Tidy(this, TRUE);
1790 this->ptr = ptr+1;
1791 this->res = new_res;
1792 basic_string_wchar__Eos(this, len);
1795 return new_size>0;
1798 /* ?_Split@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXXZ */
1799 /* ?_Split@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAXXZ */
1800 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Split, 4)
1801 void __thiscall basic_string_wchar__Split(basic_string_wchar *this)
1803 MSVCP_size_t len;
1804 wchar_t *ptr;
1806 TRACE("(%p)\n", this);
1808 if(!this->ptr || !this->ptr[-1] || (unsigned short)this->ptr[-1]==FROZEN)
1809 return;
1811 ptr = this->ptr;
1812 len = this->size;
1813 basic_string_wchar__Tidy(this, TRUE);
1814 if(basic_string_wchar__Grow(this, len, FALSE)) {
1815 if(ptr)
1816 char_traits_wchar__Copy_s(this->ptr, this->res, ptr, len);
1817 basic_string_wchar__Eos(this, len);
1821 /* ?_Freeze@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXXZ */
1822 /* ?_Freeze@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAXXZ */
1823 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Freeze, 4)
1824 void __thiscall basic_string_wchar__Freeze(basic_string_wchar *this)
1826 TRACE("(%p)\n", this);
1827 basic_string_wchar__Split(this);
1828 if(this->ptr)
1829 this->ptr[-1] = FROZEN;
1832 /* ?_Copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXI@Z */
1833 /* ?_Copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAX_K@Z */
1834 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Copy, 8)
1835 void __thiscall basic_string_wchar__Copy(basic_string_wchar *this, MSVCP_size_t copy_len)
1837 TRACE("%p %lu\n", this, copy_len);
1839 if(!basic_string_wchar__Grow(this, copy_len, TRUE))
1840 return;
1843 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPAGPAGI@Z */
1844 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEAGPEAG_K@Z */
1845 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPBGPBGI@Z */
1846 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEBGPEBG_K@Z */
1847 wchar_t* __cdecl basic_string_wchar__Psum(wchar_t *iter, MSVCP_size_t add)
1849 TRACE("(%p %lu)\n", iter, add);
1850 return iter ? iter+add : iter;
1853 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@II@Z */
1854 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0@Z */
1855 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_erase, 12)
1856 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_erase(
1857 basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t len)
1859 TRACE("%p %lu %lu\n", this, pos, len);
1861 if(pos > this->size)
1862 _Xran();
1864 if(len > this->size-pos)
1865 len = this->size-pos;
1867 if(len) {
1868 basic_string_wchar__Split(this);
1869 char_traits_wchar__Move_s(this->ptr+pos, this->res-pos,
1870 this->ptr+pos+len, this->size-pos-len);
1871 basic_string_wchar__Eos(this, this->size-len);
1874 return this;
1877 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGPAG@Z */
1878 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGPEAG@Z */
1879 DEFINE_THISCALL_WRAPPER(basic_string_wchar_erase_beg, 8)
1880 wchar_t* __thiscall basic_string_wchar_erase_beg(basic_string_wchar *this, wchar_t *beg)
1882 MSVCP_size_t pos = beg-this->ptr;
1883 MSVCP_basic_string_wchar_erase(this, pos, 1);
1884 return this->ptr+pos;
1887 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@II@Z */
1888 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
1889 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_substr, 16)
1890 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_substr(
1891 basic_string_wchar *this, const basic_string_wchar *assign,
1892 MSVCP_size_t pos, MSVCP_size_t len)
1894 TRACE("%p %p %lu %lu\n", this, assign, pos, len);
1896 if(assign->size < pos)
1897 _Xran();
1899 if(len > assign->size-pos)
1900 len = assign->size-pos;
1902 if(this == assign) {
1903 MSVCP_basic_string_wchar_erase(this, pos+len, MSVCP_basic_string_wchar_npos);
1904 MSVCP_basic_string_wchar_erase(this, 0, pos);
1905 } else if(basic_string_wchar__Grow(this, len, FALSE)) {
1906 if(assign->ptr)
1907 char_traits_wchar__Copy_s(this->ptr, this->res,
1908 assign->ptr+pos, len);
1909 basic_string_wchar__Eos(this, len);
1912 return this;
1915 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBGI@Z */
1916 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG_K@Z */
1917 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_cstr_len, 12)
1918 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_cstr_len(
1919 basic_string_wchar *this, const wchar_t *str, MSVCP_size_t len)
1921 TRACE("%p %s %lu\n", this, debugstr_wn(str, len), len);
1923 if(basic_string_wchar_inside(this, str))
1924 return MSVCP_basic_string_wchar_assign_substr(this, this, str-this->ptr, len);
1925 else if(basic_string_wchar__Grow(this, len, FALSE)) {
1926 char_traits_wchar__Copy_s(this->ptr, this->res, str, len);
1927 basic_string_wchar__Eos(this, len);
1930 return this;
1933 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@@Z */
1934 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@@Z */
1935 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@ABV01@@Z */
1936 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@AEBV01@@Z */
1937 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign, 8)
1938 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign(
1939 basic_string_wchar *this, const basic_string_wchar *assign)
1941 return MSVCP_basic_string_wchar_assign_substr(this, assign,
1942 0, MSVCP_basic_string_wchar_npos);
1945 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG@Z */
1946 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG@Z */
1947 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@PBG@Z */
1948 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@PEBG@Z */
1949 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_cstr, 8)
1950 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_cstr(
1951 basic_string_wchar *this, const wchar_t *str)
1953 return MSVCP_basic_string_wchar_assign_cstr_len(this, str,
1954 char_traits_wchar_length(str));
1957 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@G@Z */
1958 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@G@Z */
1959 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_ch, 8)
1960 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_ch(
1961 basic_string_wchar *this, wchar_t ch)
1963 return MSVCP_basic_string_wchar_assign_cstr_len(this, &ch, 1);
1966 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IG@Z */
1967 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KG@Z */
1968 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assignn, 12)
1969 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assignn(
1970 basic_string_wchar *this, MSVCP_size_t count, wchar_t ch)
1972 TRACE("%p %ld %c\n", this, count, ch);
1974 basic_string_wchar__Grow(this, count, FALSE);
1975 char_traits_wchar_assignn(this->ptr, count, ch);
1976 basic_string_wchar__Eos(this, count);
1977 return this;
1980 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG0@Z */
1981 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG0@Z */
1982 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_ptr_ptr, 12)
1983 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_ptr_ptr(
1984 basic_string_wchar *this, const wchar_t *first, const wchar_t *last)
1986 return MSVCP_basic_string_wchar_assign_cstr_len(this, first, last-first);
1989 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBGIABV?$allocator@G@1@@Z */
1990 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG_KAEBV?$allocator@G@1@@Z */
1991 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr_len_alloc, 16)
1992 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr_len_alloc(
1993 basic_string_wchar *this, const wchar_t *str, MSVCP_size_t len, const void *alloc)
1995 TRACE("%p %s %ld\n", this, debugstr_wn(str, len), len);
1997 basic_string_wchar__Tidy(this, FALSE);
1998 MSVCP_basic_string_wchar_assign_cstr_len(this, str, len);
1999 return this;
2002 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@PB_WI@Z */
2003 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@PEB_W_K@Z */
2004 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBGI@Z */
2005 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG_K@Z */
2006 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr_len, 12)
2007 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr_len(
2008 basic_string_wchar *this, const wchar_t *str, MSVCP_size_t len)
2010 return MSVCP_basic_string_wchar_ctor_cstr_len_alloc(this, str, len, NULL);
2013 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV01@IIABV?$allocator@G@1@@Z */
2014 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV01@_K1AEBV?$allocator@G@1@@Z */
2015 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_substr_alloc, 20)
2016 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_substr_alloc(
2017 basic_string_wchar *this, const basic_string_wchar *assign,
2018 MSVCP_size_t pos, MSVCP_size_t len, const void *alloc)
2020 TRACE("%p %p %lu %lu\n", this, assign, pos, len);
2022 basic_string_wchar__Tidy(this, FALSE);
2023 MSVCP_basic_string_wchar_assign_substr(this, assign, pos, len);
2024 return this;
2027 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBGABV?$allocator@G@1@@Z */
2028 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBGAEBV?$allocator@G@1@@Z */
2029 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr_alloc, 12)
2030 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr_alloc(
2031 basic_string_wchar *this, const wchar_t *str, const void *alloc)
2033 TRACE("%p %s\n", this, debugstr_w(str));
2035 basic_string_wchar__Tidy(this, FALSE);
2036 MSVCP_basic_string_wchar_assign_cstr(this, str);
2037 return this;
2040 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@PB_W@Z */
2041 /* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@PEB_W@Z */
2042 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBG@Z */
2043 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG@Z */
2044 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr, 8)
2045 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr(
2046 basic_string_wchar *this, const wchar_t *str)
2048 return MSVCP_basic_string_wchar_ctor_cstr_alloc(this, str, NULL);
2051 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@IGABV?$allocator@G@1@@Z */
2052 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@_KGAEBV?$allocator@G@1@@Z */
2053 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_ch_alloc, 16)
2054 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_ch_alloc(basic_string_wchar *this,
2055 MSVCP_size_t count, wchar_t ch, const void *alloc)
2057 TRACE("%p %ld %c\n", this, count, ch);
2059 basic_string_wchar__Tidy(this, FALSE);
2060 MSVCP_basic_string_wchar_assignn(this, count, ch);
2061 return this;
2064 /* ??_F?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */
2065 /* ??_F?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */
2066 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor, 4)
2067 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor(basic_string_wchar *this)
2069 TRACE("%p\n", this);
2071 basic_string_wchar__Tidy(this, FALSE);
2072 return this;
2075 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV?$allocator@G@1@@Z */
2076 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV?$allocator@G@1@@Z */
2077 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_alloc, 8)
2078 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_alloc(
2079 basic_string_wchar *this, const void *alloc)
2081 TRACE("%p %p\n", this, alloc);
2083 basic_string_wchar__Tidy(this, FALSE);
2084 return this;
2087 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV01@@Z */
2088 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV01@@Z */
2089 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_copy_ctor, 8)
2090 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_copy_ctor(
2091 basic_string_wchar *this, const basic_string_wchar *copy)
2093 TRACE("%p %p\n", this, copy);
2095 basic_string_wchar__Tidy(this, FALSE);
2096 MSVCP_basic_string_wchar_assign(this, copy);
2097 return this;
2100 /* ??1?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@XZ */
2101 /* ??1?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@XZ */
2102 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_dtor, 4)
2103 void __thiscall MSVCP_basic_string_wchar_dtor(basic_string_wchar *this)
2105 TRACE("%p\n", this);
2106 basic_string_wchar__Tidy(this, TRUE);
2109 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIPBGI@Z */
2110 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0PEBG0@Z */
2111 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr_cstr_len, 20)
2112 int __thiscall MSVCP_basic_string_wchar_compare_substr_cstr_len(
2113 const basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t num,
2114 const wchar_t *str, MSVCP_size_t count)
2116 int ans;
2118 TRACE("%p %lu %lu %s %lu\n", this, pos, num, debugstr_wn(str, count), count);
2120 if(this->size < pos)
2121 _Xran();
2123 if(num > this->size-pos)
2124 num = this->size-pos;
2126 ans = char_traits_wchar_compare(this->ptr+pos,
2127 str, num>count ? count : num);
2128 if(ans)
2129 return ans;
2131 if(num > count)
2132 ans = 1;
2133 else if(num < count)
2134 ans = -1;
2135 return ans;
2138 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHPBG@Z */
2139 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAHPEBG@Z */
2140 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_cstr, 8)
2141 int __thiscall MSVCP_basic_string_wchar_compare_cstr(
2142 const basic_string_wchar *this, const wchar_t *str)
2144 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, 0, this->size,
2145 str, char_traits_wchar_length(str));
2148 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIABV12@II@Z */
2149 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0AEBV12@00@Z */
2150 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr_substr, 24)
2151 int __thiscall MSVCP_basic_string_wchar_compare_substr_substr(
2152 const basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t num,
2153 const basic_string_wchar *compare, MSVCP_size_t off, MSVCP_size_t count)
2155 TRACE("%p %lu %lu %p %lu %lu\n", this, pos, num, compare, off, count);
2157 if(compare->size < off)
2158 _Xran();
2160 if(count > compare->size-off)
2161 count = compare->size-off;
2163 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2164 compare->ptr+off, count);
2167 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIABV12@@Z */
2168 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0AEBV12@@Z */
2169 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr, 16)
2170 int __thiscall MSVCP_basic_string_wchar_compare_substr(
2171 const basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t num,
2172 const basic_string_wchar *compare)
2174 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2175 compare->ptr, compare->size);
2178 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHABV12@@Z */
2179 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAHAEBV12@@Z */
2180 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare, 8)
2181 int __thiscall MSVCP_basic_string_wchar_compare(
2182 const basic_string_wchar *this, const basic_string_wchar *compare)
2184 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, 0, this->size,
2185 compare->ptr, compare->size);
2188 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIPBG@Z */
2189 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0PEBG@Z */
2190 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr_cstr, 16)
2191 int __thiscall MSVCP_basic_string_wchar_compare_substr_cstr(const basic_string_wchar *this,
2192 MSVCP_size_t pos, MSVCP_size_t num, const wchar_t *str)
2194 return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2195 str, char_traits_wchar_length(str));
2198 /* ??$?8GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2199 /* ??$?8GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2200 /* ??8std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2201 /* ??8std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2202 MSVCP_bool __cdecl MSVCP_basic_string_wchar_equal(
2203 const basic_string_wchar *left, const basic_string_wchar *right)
2205 return MSVCP_basic_string_wchar_compare(left, right) == 0;
2208 /* ??$?8GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2209 /* ??$?8GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2210 /* ??8std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2211 /* ??8std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2212 MSVCP_bool __cdecl MSVCP_basic_string_wchar_equal_str_cstr(
2213 const basic_string_wchar *left, const wchar_t *right)
2215 return MSVCP_basic_string_wchar_compare_cstr(left, right) == 0;
2218 /* ??$?8GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2219 /* ??$?8GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2220 /* ??8std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2221 /* ??8std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2222 MSVCP_bool __cdecl MSVCP_basic_string_wchar_equal_cstr_str(
2223 const wchar_t *left, const basic_string_wchar *right)
2225 return MSVCP_basic_string_wchar_compare_cstr(right, left) == 0;
2228 /* ??$?9GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2229 /* ??$?9GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2230 /* ??9std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2231 /* ??9std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2232 MSVCP_bool __cdecl MSVCP_basic_string_wchar_not_equal(
2233 const basic_string_wchar *left, const basic_string_wchar *right)
2235 return MSVCP_basic_string_wchar_compare(left, right) != 0;
2238 /* ??$?9GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2239 /* ??$?9GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2240 /* ??9std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2241 /* ??9std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2242 MSVCP_bool __cdecl MSVCP_basic_string_wchar_not_equal_str_cstr(
2243 const basic_string_wchar *left, const wchar_t *right)
2245 return MSVCP_basic_string_wchar_compare_cstr(left, right) != 0;
2248 /* ??$?9GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2249 /* ??$?9GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2250 /* ??9std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2251 /* ??9std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2252 MSVCP_bool __cdecl MSVCP_basic_string_wchar_not_equal_cstr_str(
2253 const wchar_t *left, const basic_string_wchar *right)
2255 return MSVCP_basic_string_wchar_compare_cstr(right, left) != 0;
2258 /* ??$?MGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2259 /* ??$?MGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2260 /* ??Mstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2261 /* ??Mstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2262 MSVCP_bool __cdecl MSVCP_basic_string_wchar_lower(
2263 const basic_string_wchar *left, const basic_string_wchar *right)
2265 return MSVCP_basic_string_wchar_compare(left, right) < 0;
2268 /* ??$?MGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2269 /* ??$?MGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2270 /* ??Mstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2271 /* ??Mstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2272 MSVCP_bool __cdecl MSVCP_basic_string_wchar_lower_bstr_cstr(
2273 const basic_string_wchar *left, const wchar_t *right)
2275 return MSVCP_basic_string_wchar_compare_cstr(left, right) < 0;
2278 /* ??$?MGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2279 /* ??$?MGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2280 /* ??Mstd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2281 /* ??Mstd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2282 MSVCP_bool __cdecl MSVCP_basic_string_wchar_lower_cstr_bstr(
2283 const wchar_t *left, const basic_string_wchar *right)
2285 return MSVCP_basic_string_wchar_compare_cstr(right, left) > 0;
2288 /* ??$?NGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2289 /* ??$?NGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2290 /* ??Nstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2291 /* ??Nstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2292 MSVCP_bool __cdecl MSVCP_basic_string_wchar_leq(
2293 const basic_string_wchar *left, const basic_string_wchar *right)
2295 return MSVCP_basic_string_wchar_compare(left, right) <= 0;
2298 /* ??$?NGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2299 /* ??$?NGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2300 /* ??Nstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2301 /* ??Nstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2302 MSVCP_bool __cdecl MSVCP_basic_string_wchar_leq_bstr_cstr(
2303 const basic_string_wchar *left, const wchar_t *right)
2305 return MSVCP_basic_string_wchar_compare_cstr(left, right) <= 0;
2308 /* ??$?NGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2309 /* ??$?NGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2310 /* ??Nstd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2311 /* ??Nstd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2312 MSVCP_bool __cdecl MSVCP_basic_string_wchar_leq_cstr_bstr(
2313 const wchar_t *left, const basic_string_wchar *right)
2315 return MSVCP_basic_string_wchar_compare_cstr(right, left) >= 0;
2318 /* ??$?OGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2319 /* ??$?OGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2320 /* ??Ostd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2321 /* ??Ostd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2322 MSVCP_bool __cdecl MSVCP_basic_string_wchar_greater(
2323 const basic_string_wchar *left, const basic_string_wchar *right)
2325 return MSVCP_basic_string_wchar_compare(left, right) > 0;
2328 /* ??$?OGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2329 /* ??$?OGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2330 /* ??Ostd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2331 /* ??Ostd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2332 MSVCP_bool __cdecl MSVCP_basic_string_wchar_greater_bstr_cstr(
2333 const basic_string_wchar *left, const wchar_t *right)
2335 return MSVCP_basic_string_wchar_compare_cstr(left, right) > 0;
2338 /* ??$?OGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2339 /* ??$?OGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2340 /* ??Ostd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2341 /* ??Ostd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2342 MSVCP_bool __cdecl MSVCP_basic_string_wchar_greater_cstr_bstr(
2343 const wchar_t *left, const basic_string_wchar *right)
2345 return MSVCP_basic_string_wchar_compare_cstr(right, left) < 0;
2348 /* ??$?PGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2349 /* ??$?PGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2350 /* ??Pstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2351 /* ??Pstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2352 MSVCP_bool __cdecl MSVCP_basic_string_wchar_geq(
2353 const basic_string_wchar *left, const basic_string_wchar *right)
2355 return MSVCP_basic_string_wchar_compare(left, right) >= 0;
2358 /* ??$?PGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2359 /* ??$?PGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2360 /* ??Pstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2361 /* ??Pstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2362 MSVCP_bool __cdecl MSVCP_basic_string_wchar_geq_bstr_cstr(
2363 const basic_string_wchar *left, const wchar_t *right)
2365 return MSVCP_basic_string_wchar_compare_cstr(left, right) >= 0;
2368 /* ??$?PGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2369 /* ??$?PGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2370 /* ??Pstd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2371 /* ??Pstd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2372 MSVCP_bool __cdecl MSVCP_basic_string_wchar_geq_cstr_bstr(
2373 const wchar_t *left, const basic_string_wchar *right)
2375 return MSVCP_basic_string_wchar_compare_cstr(right, left) <= 0;
2378 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2379 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2380 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_cstr_substr, 16)
2381 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_cstr_substr(
2382 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos, MSVCP_size_t len)
2384 const wchar_t *p, *end;
2386 TRACE("%p %s %lu %lu\n", this, debugstr_wn(find, len), pos, len);
2388 if(len==0 && pos<=this->size)
2389 return pos;
2390 if(pos>=this->size || len>this->size)
2391 return MSVCP_basic_string_wchar_npos;
2393 end = this->ptr+this->size-len+1;
2394 for(p=this->ptr+pos; p<end; p++) {
2395 p = char_traits_wchar_find(p, end-p, find);
2396 if(!p)
2397 break;
2399 if(!char_traits_wchar_compare(p, find, len))
2400 return p-this->ptr;
2403 return MSVCP_basic_string_wchar_npos;
2406 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2407 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2408 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_off, 12)
2409 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_off(
2410 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2412 return MSVCP_basic_string_wchar_find_cstr_substr(this, find->ptr, off, find->size);
2415 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2416 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2417 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_ch, 12)
2418 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_ch(
2419 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t pos)
2421 return MSVCP_basic_string_wchar_find_cstr_substr(this, &ch, pos, 1);
2424 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2425 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2426 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_cstr_off, 12)
2427 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_cstr_off(
2428 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos)
2430 return MSVCP_basic_string_wchar_find_cstr_substr(this, find, pos,
2431 char_traits_wchar_length(find));
2434 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2435 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2436 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rfind_cstr_substr, 16)
2437 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_rfind_cstr_substr(
2438 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos, MSVCP_size_t len)
2440 const wchar_t *p, *end;
2442 TRACE("%p %s %lu %lu\n", this, debugstr_wn(find, len), pos, len);
2444 if(len==0)
2445 return pos<this->size ? pos : this->size;
2447 if(len > this->size)
2448 return MSVCP_basic_string_wchar_npos;
2450 if(pos > this->size-len+1)
2451 pos = this->size-len+1;
2452 end = this->ptr;
2453 for(p=end+pos; p>=end; p--) {
2454 if(*p==*find && !char_traits_wchar_compare(p, find, len))
2455 return p-this->ptr;
2458 return MSVCP_basic_string_wchar_npos;
2461 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2462 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2463 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rfind_off, 12)
2464 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_rfind_off(
2465 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2467 return MSVCP_basic_string_wchar_rfind_cstr_substr(this, find->ptr, off, find->size);
2470 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2471 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2472 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rfind_ch, 12)
2473 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_rfind_ch(
2474 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t pos)
2476 return MSVCP_basic_string_wchar_rfind_cstr_substr(this, &ch, pos, 1);
2479 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2480 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2481 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rfind_cstr_off, 12)
2482 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_rfind_cstr_off(
2483 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos)
2485 return MSVCP_basic_string_wchar_rfind_cstr_substr(this, find, pos,
2486 char_traits_wchar_length(find));
2489 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2490 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2491 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of_cstr_substr, 16)
2492 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(
2493 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len)
2495 const wchar_t *p, *end;
2497 TRACE("%p %p %lu %lu\n", this, find, off, len);
2499 if(off<this->size) {
2500 end = this->ptr+this->size;
2501 for(p=this->ptr+off; p<end; p++)
2502 if(!char_traits_wchar_find(find, len, p))
2503 return p-this->ptr;
2506 return MSVCP_basic_string_wchar_npos;
2509 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2510 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2511 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of, 12)
2512 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of(
2513 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2515 return MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(this,
2516 find->ptr, off, find->size);
2519 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2520 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2521 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of_ch, 12)
2522 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of_ch(
2523 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off)
2525 return MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(this, &ch, off, 1);
2528 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2529 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2530 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of_cstr, 12)
2531 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of_cstr(
2532 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off)
2534 return MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(
2535 this, find, off, char_traits_wchar_length(find));
2538 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2539 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2540 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of_cstr_substr, 16)
2541 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_of_cstr_substr(
2542 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len)
2544 const wchar_t *p, *end;
2546 TRACE("%p %p %lu %lu\n", this, find, off, len);
2548 if(len>0 && off<this->size) {
2549 end = this->ptr+this->size;
2550 for(p=this->ptr+off; p<end; p++)
2551 if(char_traits_wchar_find(find, len, p))
2552 return p-this->ptr;
2555 return MSVCP_basic_string_wchar_npos;
2558 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2559 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2560 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of, 12)
2561 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_of(
2562 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2564 return MSVCP_basic_string_wchar_find_first_of_cstr_substr(this,
2565 find->ptr, off, find->size);
2568 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2569 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2570 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of_ch, 12)
2571 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_of_ch(
2572 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off)
2574 return MSVCP_basic_string_wchar_find_first_of_cstr_substr(this, &ch, off, 1);
2577 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2578 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2579 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of_cstr, 12)
2580 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_of_cstr(
2581 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off)
2583 return MSVCP_basic_string_wchar_find_first_of_cstr_substr(
2584 this, find, off, char_traits_wchar_length(find));
2587 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2588 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2589 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_not_of_cstr_substr, 16)
2590 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_not_of_cstr_substr(
2591 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len)
2593 const wchar_t *p, *beg;
2595 TRACE("%p %p %lu %lu\n", this, find, off, len);
2597 if(len>0 && this->size>0) {
2598 if(off >= this->size)
2599 off = this->size-1;
2601 beg = this->ptr;
2602 for(p=beg+off; p>=beg; p--)
2603 if(!char_traits_wchar_find(find, len, p))
2604 return p-beg;
2607 return MSVCP_basic_string_wchar_npos;
2610 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2611 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2612 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_not_of, 12)
2613 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_not_of(
2614 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2616 return MSVCP_basic_string_wchar_find_last_not_of_cstr_substr(this,
2617 find->ptr, off, find->size);
2620 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2621 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2622 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_not_of_ch, 12)
2623 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_not_of_ch(
2624 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off)
2626 return MSVCP_basic_string_wchar_find_last_not_of_cstr_substr(this, &ch, off, 1);
2629 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2630 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2631 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_not_of_cstr, 12)
2632 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_not_of_cstr(
2633 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off)
2635 return MSVCP_basic_string_wchar_find_last_not_of_cstr_substr(
2636 this, find, off, char_traits_wchar_length(find));
2639 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2640 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2641 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of_cstr_substr, 16)
2642 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_of_cstr_substr(
2643 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len)
2645 const wchar_t *p, *beg;
2647 TRACE("%p %p %lu %lu\n", this, find, off, len);
2649 if(len>0 && this->size>0) {
2650 if(off >= this->size)
2651 off = this->size-1;
2653 beg = this->ptr;
2654 for(p=beg+off; p>=beg; p--)
2655 if(char_traits_wchar_find(find, len, p))
2656 return p-beg;
2659 return MSVCP_basic_string_wchar_npos;
2662 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2663 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2664 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of, 12)
2665 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_of(
2666 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2668 return MSVCP_basic_string_wchar_find_last_of_cstr_substr(this,
2669 find->ptr, off, find->size);
2672 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2673 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2674 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of_ch, 12)
2675 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_of_ch(
2676 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off)
2678 return MSVCP_basic_string_wchar_find_last_of_cstr_substr(this, &ch, off, 1);
2681 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2682 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2683 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of_cstr, 12)
2684 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_of_cstr(
2685 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off)
2687 return MSVCP_basic_string_wchar_find_last_of_cstr_substr(
2688 this, find, off, char_traits_wchar_length(find));
2691 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@II@Z */
2692 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
2693 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_substr, 16)
2694 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_substr(basic_string_wchar *this,
2695 const basic_string_wchar *append, MSVCP_size_t offset, MSVCP_size_t count)
2697 TRACE("%p %p %lu %lu\n", this, append, offset, count);
2699 if(append->size < offset)
2700 _Xran();
2702 if(count > append->size-offset)
2703 count = append->size-offset;
2705 if(MSVCP_basic_string_wchar_npos-this->size<=count || this->size+count<this->size)
2706 _Xlen();
2708 if(basic_string_wchar__Grow(this, this->size+count, FALSE)) {
2709 if(append->ptr)
2710 char_traits_wchar__Copy_s(this->ptr+this->size, this->res-this->size,
2711 append->ptr+offset, count);
2712 basic_string_wchar__Eos(this, this->size+count);
2715 return this;
2718 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBGI@Z */
2719 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG_K@Z */
2720 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_cstr_len, 12)
2721 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_cstr_len(
2722 basic_string_wchar *this, const wchar_t *append, MSVCP_size_t count)
2724 TRACE("%p %s %lu\n", this, debugstr_wn(append, count), count);
2726 if(basic_string_wchar_inside(this, append))
2727 return MSVCP_basic_string_wchar_append_substr(this, this, append-this->ptr, count);
2729 if(MSVCP_basic_string_wchar_npos-this->size<=count || this->size+count<this->size)
2730 _Xlen();
2732 if(basic_string_wchar__Grow(this, this->size+count, FALSE)) {
2733 char_traits_wchar__Copy_s(this->ptr+this->size,
2734 this->res-this->size, append, count);
2735 basic_string_wchar__Eos(this, this->size+count);
2738 return this;
2741 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IG@Z */
2742 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KG@Z */
2743 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_len_ch, 12)
2744 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_len_ch(
2745 basic_string_wchar *this, MSVCP_size_t count, wchar_t ch)
2747 TRACE("%p %lu %c\n", this, count, ch);
2749 if(MSVCP_basic_string_wchar_npos-this->size <= count)
2750 _Xlen();
2752 if(basic_string_wchar__Grow(this, this->size+count, FALSE)) {
2753 char_traits_wchar_assignn(this->ptr+this->size, count, ch);
2754 basic_string_wchar__Eos(this, this->size+count);
2757 return this;
2760 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@@Z */
2761 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@@Z */
2762 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@ABV01@@Z */
2763 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@AEBV01@@Z */
2764 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append, 8)
2765 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append(
2766 basic_string_wchar *this, const basic_string_wchar *append)
2768 return MSVCP_basic_string_wchar_append_substr(this, append,
2769 0, MSVCP_basic_string_wchar_npos);
2772 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@G@Z */
2773 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@G@Z */
2774 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_ch, 8)
2775 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_ch(
2776 basic_string_wchar *this, wchar_t ch)
2778 return MSVCP_basic_string_wchar_append_len_ch(this, 1, ch);
2781 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG0@Z */
2782 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG0@Z */
2783 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_beg_end, 12)
2784 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_beg_end(
2785 basic_string_wchar *this, const wchar_t *beg, const wchar_t *end)
2787 return MSVCP_basic_string_wchar_append_cstr_len(this, beg, end-beg);
2790 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG@Z */
2791 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG@Z */
2792 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@PBG@Z */
2793 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@PEBG@Z */
2794 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_cstr, 8)
2795 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_cstr(
2796 basic_string_wchar *this, const wchar_t *append)
2798 return MSVCP_basic_string_wchar_append_cstr_len(this, append,
2799 char_traits_wchar_length(append));
2801 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@0@Z */
2802 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@0@Z */
2803 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@0@Z */
2804 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@0@Z */
2805 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate(basic_string_wchar *ret,
2806 const basic_string_wchar *left, const basic_string_wchar *right)
2808 TRACE("%p %p\n", left, right);
2810 MSVCP_basic_string_wchar_copy_ctor(ret, left);
2811 MSVCP_basic_string_wchar_append(ret, right);
2812 return ret;
2815 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@G@Z */
2816 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@G@Z */
2817 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@G@Z */
2818 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@G@Z */
2819 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate_bstr_ch(basic_string_wchar *ret,
2820 const basic_string_wchar *left, wchar_t right)
2822 TRACE("%p %c\n", left, right);
2824 MSVCP_basic_string_wchar_copy_ctor(ret, left);
2825 MSVCP_basic_string_wchar_append_ch(ret, right);
2826 return ret;
2829 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@PBG@Z */
2830 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@PEBG@Z */
2831 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@PBG@Z */
2832 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@PEBG@Z */
2833 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate_bstr_cstr(basic_string_wchar *ret,
2834 const basic_string_wchar *left, const wchar_t *right)
2836 TRACE("%p %s\n", left, debugstr_w(right));
2838 MSVCP_basic_string_wchar_copy_ctor(ret, left);
2839 MSVCP_basic_string_wchar_append_cstr(ret, right);
2840 return ret;
2843 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@GABV10@@Z */
2844 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@GAEBV10@@Z */
2845 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@GABV10@@Z */
2846 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@GAEBV10@@Z */
2847 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate_ch_bstr(basic_string_wchar *ret,
2848 wchar_t left, const basic_string_wchar *right)
2850 TRACE("%c %p\n", left, right);
2852 MSVCP_basic_string_wchar_ctor_cstr_len_alloc(ret, &left, 1, NULL);
2853 MSVCP_basic_string_wchar_append(ret, right);
2854 return ret;
2857 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBGABV10@@Z */
2858 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBGAEBV10@@Z */
2859 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBGABV10@@Z */
2860 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBGAEBV10@@Z */
2861 basic_string_wchar* __cdecl MSVCP_basic_string_wchar_concatenate_cstr_bstr(basic_string_wchar *ret,
2862 const wchar_t *left, const basic_string_wchar *right)
2864 TRACE("%s %p\n", debugstr_w(left), right);
2866 MSVCP_basic_string_wchar_ctor_cstr_alloc(ret, left, NULL);
2867 MSVCP_basic_string_wchar_append(ret, right);
2868 return ret;
2871 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAGI@Z */
2872 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAG_K@Z */
2873 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEABGI@Z */
2874 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAAEBG_K@Z */
2875 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_operator_at, 8)
2876 wchar_t* __thiscall MSVCP_basic_string_wchar_operator_at(
2877 basic_string_wchar *this, MSVCP_size_t pos)
2879 TRACE("%p %lu\n", this, pos);
2881 assert(this->size >= pos);
2882 return this->ptr+pos;
2885 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAGI@Z */
2886 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAG_K@Z */
2887 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEABGI@Z */
2888 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAAEBG_K@Z */
2889 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_at, 8)
2890 wchar_t* __thiscall MSVCP_basic_string_wchar_at(
2891 basic_string_wchar *this, MSVCP_size_t pos)
2893 TRACE("%p %lu\n", this, pos);
2895 if(this->size <= pos)
2896 _Xran();
2898 return this->ptr+pos;
2901 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIPBGI@Z */
2902 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0PEBG0@Z */
2903 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_cstr_len, 20)
2904 basic_string_wchar* __thiscall basic_string_wchar_replace_cstr_len(basic_string_wchar *this,
2905 MSVCP_size_t off, MSVCP_size_t len, const wchar_t *str, MSVCP_size_t str_len)
2907 MSVCP_size_t inside_pos = -1;
2908 wchar_t *ptr = this->ptr;
2910 TRACE("%p %ld %ld %p %ld\n", this, off, len, str, str_len);
2912 if(this->size < off)
2913 _Xran();
2915 if(len > this->size-off)
2916 len = this->size-off;
2918 if(MSVCP_basic_string_wchar_npos-str_len <= this->size-len)
2919 _Xlen();
2921 if(basic_string_wchar_inside(this, str))
2922 inside_pos = str-ptr;
2924 if(this->size-len+str_len)
2925 basic_string_wchar__Grow(this, this->size-len+str_len, FALSE);
2926 ptr = this->ptr;
2928 if(inside_pos == -1) {
2929 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
2930 memcpy(ptr+off, str, str_len*sizeof(char));
2931 } else if(len >= str_len) {
2932 memmove(ptr+off, ptr+inside_pos, str_len*sizeof(char));
2933 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
2934 } else {
2935 MSVCP_size_t size;
2937 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
2939 if(inside_pos < off+len) {
2940 size = off+len-inside_pos;
2941 if(size > str_len)
2942 size = str_len;
2943 memmove(ptr+off, ptr+inside_pos, size*sizeof(char));
2944 } else {
2945 size = 0;
2948 if(str_len > size)
2949 memmove(ptr+off+size, ptr+off+str_len, (str_len-size)*sizeof(char));
2952 if(this->ptr)
2953 basic_string_wchar__Eos(this, this->size-len+str_len);
2954 return this;
2957 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIABV12@II@Z */
2958 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0AEBV12@00@Z */
2959 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_substr, 24)
2960 basic_string_wchar* __thiscall basic_string_wchar_replace_substr(basic_string_wchar *this, MSVCP_size_t off,
2961 MSVCP_size_t len, const basic_string_wchar *str, MSVCP_size_t str_off, MSVCP_size_t str_len)
2963 if(str->size < str_off)
2964 _Xran();
2966 if(str_len > str->size-str_off)
2967 str_len = str->size-str_off;
2969 return basic_string_wchar_replace_cstr_len(this, off, len,
2970 str->ptr+str_off, str_len);
2973 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIABV12@@Z */
2974 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0AEBV12@@Z */
2975 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace, 16)
2976 basic_string_wchar* __thiscall basic_string_wchar_replace(basic_string_wchar *this,
2977 MSVCP_size_t off, MSVCP_size_t len, const basic_string_wchar *str)
2979 return basic_string_wchar_replace_cstr_len(this, off, len,
2980 str->ptr, str->size);
2983 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIIG@Z */
2984 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K00G@Z */
2985 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_ch, 20)
2986 basic_string_wchar* __thiscall basic_string_wchar_replace_ch(basic_string_wchar *this,
2987 MSVCP_size_t off, MSVCP_size_t len, MSVCP_size_t count, wchar_t ch)
2989 wchar_t *ptr;
2991 TRACE("%p %ld %ld %ld %c\n", this, off, len, count, ch);
2993 if(this->size < off)
2994 _Xran();
2996 if(len > this->size-off)
2997 len = this->size-off;
2999 if(MSVCP_basic_string_wchar_npos-count <= this->size-len)
3000 _Xlen();
3002 if(this->size-len+count)
3003 basic_string_wchar__Grow(this, this->size-len+count, FALSE);
3004 ptr = this->ptr;
3006 memmove(ptr+off+count, ptr+off+len, (this->size-off-len)*sizeof(char));
3007 char_traits_wchar_assignn(ptr+off, count, ch);
3008 basic_string_wchar__Eos(this, this->size-len+count);
3010 return this;
3013 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIPBG@Z */
3014 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0PEBG@Z */
3015 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_cstr, 16)
3016 basic_string_wchar* __thiscall basic_string_wchar_replace_cstr(basic_string_wchar *this,
3017 MSVCP_size_t off, MSVCP_size_t len, const wchar_t *str)
3019 return basic_string_wchar_replace_cstr_len(this, off, len, str,
3020 char_traits_wchar_length(str));
3023 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IABV12@@Z */
3024 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KAEBV12@@Z */
3025 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert, 12)
3026 basic_string_wchar* __thiscall basic_string_wchar_insert(basic_string_wchar *this,
3027 MSVCP_size_t off, const basic_string_wchar *str)
3029 return basic_string_wchar_replace(this, off, 0, str);
3032 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IABV12@II@Z */
3033 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KAEBV12@00@Z */
3034 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_substr, 20)
3035 basic_string_wchar* __thiscall basic_string_wchar_insert_substr(
3036 basic_string_wchar *this, MSVCP_size_t off, const basic_string_wchar *str,
3037 MSVCP_size_t str_off, MSVCP_size_t str_count)
3039 return basic_string_wchar_replace_substr(this, off, 0, str, str_off, str_count);
3042 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IPBG@Z */
3043 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KPEBG@Z */
3044 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_cstr, 12)
3045 basic_string_wchar* __thiscall basic_string_wchar_insert_cstr(
3046 basic_string_wchar *this, MSVCP_size_t off, const wchar_t *str)
3048 return basic_string_wchar_replace_cstr(this, off, 0, str);
3051 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IPBGI@Z */
3052 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KPEBG0@Z */
3053 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_cstr_len, 16)
3054 basic_string_wchar* __thiscall basic_string_wchar_insert_cstr_len(basic_string_wchar *this,
3055 MSVCP_size_t off, const wchar_t *str, MSVCP_size_t str_len)
3057 return basic_string_wchar_replace_cstr_len(this, off, 0, str, str_len);
3060 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIG@Z */
3061 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0G@Z */
3062 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_chn, 16)
3063 basic_string_wchar* __thiscall basic_string_wchar_insert_chn(basic_string_wchar *this,
3064 MSVCP_size_t off, MSVCP_size_t count, wchar_t ch)
3066 return basic_string_wchar_replace_ch(this, off, 0, count, ch);
3069 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXIG@Z */
3070 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_KG@Z */
3071 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_resize_ch, 12)
3072 void __thiscall MSVCP_basic_string_wchar_resize_ch(
3073 basic_string_wchar *this, MSVCP_size_t size, wchar_t ch)
3075 TRACE("%p %lu %c\n", this, size, ch);
3077 if(size <= this->size)
3078 MSVCP_basic_string_wchar_erase(this, size, this->size);
3079 else
3080 MSVCP_basic_string_wchar_append_len_ch(this, size-this->size, ch);
3083 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXI@Z */
3084 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_K@Z */
3085 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_resize, 8)
3086 void __thiscall MSVCP_basic_string_wchar_resize(
3087 basic_string_wchar *this, MSVCP_size_t size)
3089 MSVCP_basic_string_wchar_resize_ch(this, size, '\0');
3092 /* ?c_str@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3093 /* ?c_str@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3094 /* ?data@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3095 /* ?data@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3096 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_c_str, 4)
3097 const wchar_t* __thiscall MSVCP_basic_string_wchar_c_str(const basic_string_wchar *this)
3099 TRACE("%p\n", this);
3100 return this->ptr ? this->ptr : basic_string_wchar__Nullstr();
3103 /* ?size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3104 /* ?size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3105 /* ?length@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3106 /* ?length@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3107 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_length, 4)
3108 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_length(const basic_string_wchar *this)
3110 TRACE("%p\n", this);
3111 return this->size;
3114 /* ?max_size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3115 /* ?max_size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3116 DEFINE_THISCALL_WRAPPER(basic_string_wchar_max_size, 4)
3117 MSVCP_size_t __thiscall basic_string_wchar_max_size(const basic_string_wchar *this)
3119 TRACE("%p\n", this);
3120 return MSVCP_allocator_wchar_max_size(NULL)-1;
3123 /* ?capacity@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3124 /* ?capacity@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3125 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_capacity, 4)
3126 MSVCP_size_t __thiscall MSVCP_basic_string_wchar_capacity(basic_string_wchar *this)
3128 TRACE("%p\n", this);
3129 return this->res;
3132 /* ?reserve@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXI@Z */
3133 /* ?reserve@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_K@Z */
3134 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_reserve, 8)
3135 void __thiscall MSVCP_basic_string_wchar_reserve(basic_string_wchar *this, MSVCP_size_t size)
3137 MSVCP_size_t len;
3139 TRACE("%p %ld\n", this, size);
3141 len = this->size;
3142 if(len > size)
3143 return;
3145 if(basic_string_wchar__Grow(this, size, FALSE))
3146 basic_string_wchar__Eos(this, len);
3149 /* ?empty@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE_NXZ */
3150 /* ?empty@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_NXZ */
3151 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_empty, 4)
3152 MSVCP_bool __thiscall MSVCP_basic_string_wchar_empty(basic_string_wchar *this)
3154 TRACE("%p\n", this);
3155 return this->size == 0;
3158 /* ?swap@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXAAV12@@Z */
3159 /* ?swap@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXAEAV12@@Z */
3160 DEFINE_THISCALL_WRAPPER(basic_string_wchar_swap, 8)
3161 void __thiscall basic_string_wchar_swap(basic_string_wchar *this, basic_string_wchar *str)
3163 basic_string_wchar tmp;
3164 TRACE("%p %p\n", this, str);
3166 tmp = *this;
3167 *this = *str;
3168 *str = tmp;
3171 /* ?substr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV12@II@Z */
3172 /* ?substr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV12@_K0@Z */
3173 DEFINE_THISCALL_WRAPPER(basic_string_wchar_substr, 16)
3174 basic_string_wchar* __thiscall basic_string_wchar_substr(basic_string_wchar *this,
3175 basic_string_wchar *ret, MSVCP_size_t off, MSVCP_size_t len)
3177 TRACE("%p %lu %lu\n", this, off, len);
3179 MSVCP_basic_string_wchar_ctor_substr_alloc(ret, this, off, len, NULL);
3180 return ret;
3183 /* ?copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPAGII@Z */
3184 /* ?copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEAG_K1@Z */
3185 DEFINE_THISCALL_WRAPPER(basic_string_wchar_copy, 16)
3186 MSVCP_size_t __thiscall basic_string_wchar_copy(const basic_string_wchar *this,
3187 wchar_t *dest, MSVCP_size_t count, MSVCP_size_t off)
3189 TRACE("%p %p %lu %lu\n", this, dest, count, off);
3191 if(off > this->size)
3192 _Xran();
3193 if(count > this->size-off)
3194 count = this->size-off;
3195 if(this->ptr)
3196 char_traits_wchar__Copy_s(dest, count, this->ptr+off, count);
3197 return count;
3200 /* ?get_allocator@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$allocator@G@2@XZ */
3201 /* ?get_allocator@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$allocator@G@2@XZ */
3202 DEFINE_THISCALL_WRAPPER(basic_string_wchar_get_allocator, 8)
3203 allocator* __thiscall basic_string_wchar_get_allocator(const basic_string_wchar *this, allocator *ret)
3205 TRACE("%p\n", this);
3206 return ret;
3209 /* Old iterator functions */
3211 /* ?_Pdif@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAIPBD0@Z */
3212 /* ?_Pdif@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CA_KPEBD0@Z */
3213 MSVCP_size_t __cdecl basic_string_char__Pdif(const char *i1, const char *i2)
3215 TRACE("(%p %p)\n", i1, i2);
3216 return !i1 ? 0 : i1-i2;
3219 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADPAD0@Z */
3220 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADPEAD0@Z */
3221 DEFINE_THISCALL_WRAPPER(basic_string_char_erase_iter, 12)
3222 char* __thiscall basic_string_char_erase_iter(basic_string_char *this, char *beg, char *end)
3224 MSVCP_size_t pos = basic_string_char__Pdif(beg, this->ptr);
3225 MSVCP_basic_string_char_erase(this, pos, basic_string_char__Pdif(end, beg));
3226 return basic_string_char__Psum(this->ptr, pos);
3229 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0PBD1@Z */
3230 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0PEBD1@Z */
3231 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_iter, 20)
3232 basic_string_char* __thiscall basic_string_char_replace_iter_iter(basic_string_char *this,
3233 char *beg1, char *end1, const char *beg2, const char *end2)
3235 return basic_string_char_replace_cstr_len(this, basic_string_char__Pdif(beg1, this->ptr),
3236 basic_string_char__Pdif(end1, beg1), beg2, basic_string_char__Pdif(end2, beg2));
3239 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0ABV12@@Z */
3240 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0AEBV12@@Z */
3241 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_bstr, 16)
3242 basic_string_char* __thiscall basic_string_char_replace_iter_bstr(basic_string_char *this,
3243 char *beg, char *end, const basic_string_char *str)
3245 return basic_string_char_replace(this, basic_string_char__Pdif(beg, this->ptr),
3246 basic_string_char__Pdif(end, beg), str);
3249 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0ID@Z */
3250 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0_KD@Z */
3251 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_chn, 20)
3252 basic_string_char* __thiscall basic_string_char_replace_iter_chn(basic_string_char *this,
3253 char *beg, char *end, MSVCP_size_t count, char ch)
3255 return basic_string_char_replace_ch(this, basic_string_char__Pdif(beg, this->ptr),
3256 basic_string_char__Pdif(end, beg), count, ch);
3259 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0PBD@Z */
3260 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0PEBD@Z */
3261 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_cstr, 16)
3262 basic_string_char* __thiscall basic_string_char_replace_iter_cstr(basic_string_char *this,
3263 char *beg, char *end, const char *str)
3265 return basic_string_char_replace_cstr(this, basic_string_char__Pdif(beg, this->ptr),
3266 basic_string_char__Pdif(end, beg), str);
3269 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0PBDI@Z */
3270 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0PEBD_K@Z */
3271 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_cstr_len, 20)
3272 basic_string_char* __thiscall basic_string_char_replace_iter_cstr_len(basic_string_char *this,
3273 char *beg, char *end, const char *str, MSVCP_size_t len)
3275 return basic_string_char_replace_cstr_len(this, basic_string_char__Pdif(beg, this->ptr),
3276 basic_string_char__Pdif(end, beg), str, len);
3279 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXPADID@Z */
3280 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXPEAD_KD@Z */
3281 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_chn, 16)
3282 void __thiscall basic_string_char_insert_iter_chn(basic_string_char *this,
3283 char *pos, MSVCP_size_t n, char ch)
3285 basic_string_char_insert_chn(this, basic_string_char__Pdif(pos, this->ptr), n, ch);
3288 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADPADD@Z */
3289 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADPEADD@Z */
3290 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_ch, 12)
3291 char* __thiscall basic_string_char_insert_iter_ch(basic_string_char *this, char *pos, char ch)
3293 MSVCP_size_t off = basic_string_char__Pdif(pos, this->ptr);
3294 basic_string_char_insert_chn(this, off, 1, ch);
3295 return basic_string_char__Psum(this->ptr, off);
3298 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADXZ */
3299 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADXZ */
3300 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
3301 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
3302 DEFINE_THISCALL_WRAPPER(basic_string_char_begin, 4)
3303 char* __thiscall basic_string_char_begin(basic_string_char *this)
3305 TRACE("(%p)\n", this);
3306 basic_string_char__Freeze(this);
3307 return this->ptr;
3310 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADXZ */
3311 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADXZ */
3312 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
3313 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
3314 DEFINE_THISCALL_WRAPPER(basic_string_char_end, 4)
3315 char* __thiscall basic_string_char_end(basic_string_char *this)
3317 TRACE("(%p)\n", this);
3318 basic_string_char__Freeze(this);
3319 return this->ptr+this->size;
3322 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$reverse_iterator@PADDAADPADH@2@XZ */
3323 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$reverse_iterator@PEADDAEADPEAD_J@2@XZ */
3324 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$reverse_iterator@PBDDABDPBDH@2@XZ */
3325 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$reverse_iterator@PEBDDAEBDPEBD_J@2@XZ */
3326 DEFINE_THISCALL_WRAPPER(basic_string_char_rbegin, 8)
3327 String_reverse_iterator_char* __thiscall basic_string_char_rbegin(
3328 basic_string_char *this, String_reverse_iterator_char *ret)
3330 TRACE("(%p %p)\n", this, ret);
3331 ret->ptr = basic_string_char_end(this);
3332 return ret;
3335 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$reverse_iterator@PADDAADPADH@2@XZ */
3336 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$reverse_iterator@PEADDAEADPEAD_J@2@XZ */
3337 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$reverse_iterator@PBDDABDPBDH@2@XZ */
3338 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$reverse_iterator@PEBDDAEBDPEBD_J@2@XZ */
3339 DEFINE_THISCALL_WRAPPER(basic_string_char_rend, 8)
3340 String_reverse_iterator_char* __thiscall basic_string_char_rend(
3341 basic_string_char *this, String_reverse_iterator_char *ret)
3343 TRACE("(%p %p)\n", this, ret);
3344 ret->ptr = basic_string_char_begin(this);
3345 return ret;
3348 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD0ABV?$allocator@D@1@@Z */
3349 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD0AEBV?$allocator@D@1@@Z */
3350 DEFINE_THISCALL_WRAPPER(basic_string_char_ctor_iter, 16)
3351 basic_string_char* __thiscall basic_string_char_ctor_iter(basic_string_char *this,
3352 const char *first, const char *last, allocator *alloc)
3354 TRACE("(%p %p %p %p)\n", this, first, last, alloc);
3356 basic_string_char__Tidy(this, FALSE);
3357 MSVCP_basic_string_char_assign_cstr_len(this, first, basic_string_char__Pdif(last, first));
3358 return this;
3361 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXPADPBD1@Z */
3362 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXPEADPEBD1@Z */
3363 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter, 16)
3364 void __thiscall basic_string_char_insert_iter(basic_string_char *this,
3365 char *pos, const char *beg, const char *end)
3367 basic_string_char_insert_cstr_len(this, basic_string_char__Pdif(pos, this->ptr),
3368 beg, basic_string_char__Pdif(end, beg));
3371 /* ?_Pdif@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAIPBG0@Z */
3372 /* ?_Pdif@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CA_KPEBG0@Z */
3373 MSVCP_size_t __cdecl basic_string_wchar__Pdif(const wchar_t *i1, const wchar_t *i2)
3375 TRACE("(%p %p)\n", i1, i2);
3376 return !i1 ? 0 : i1-i2;
3379 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGPAG0@Z */
3380 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGPEAG0@Z */
3381 DEFINE_THISCALL_WRAPPER(basic_string_wchar_erase_iter, 12)
3382 wchar_t* __thiscall basic_string_wchar_erase_iter(basic_string_wchar *this, wchar_t *beg, wchar_t *end)
3384 MSVCP_size_t pos = basic_string_wchar__Pdif(beg, this->ptr);
3385 MSVCP_basic_string_wchar_erase(this, pos, basic_string_wchar__Pdif(end, beg));
3386 return basic_string_wchar__Psum(this->ptr, pos);
3389 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBG0ABV?$allocator@G@1@@Z */
3390 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG0AEBV?$allocator@G@1@@Z */
3391 DEFINE_THISCALL_WRAPPER(basic_string_wchar_ctor_iter, 16)
3392 basic_string_wchar* __thiscall basic_string_wchar_ctor_iter(basic_string_wchar *this,
3393 const wchar_t *first, const wchar_t *last, allocator *alloc)
3395 TRACE("(%p %p %p %p)\n", this, first, last, alloc);
3397 basic_string_wchar__Tidy(this, FALSE);
3398 MSVCP_basic_string_wchar_assign_cstr_len(this, first, basic_string_wchar__Pdif(last, first));
3399 return this;
3402 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0PBG1@Z */
3403 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0PEBG1@Z */
3404 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_iter, 20)
3405 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_iter(basic_string_wchar *this,
3406 wchar_t *beg1, wchar_t *end1, const wchar_t *beg2, const wchar_t *end2)
3408 return basic_string_wchar_replace_cstr_len(this, basic_string_wchar__Pdif(beg1, this->ptr),
3409 basic_string_wchar__Pdif(end1, beg1), beg2, basic_string_wchar__Pdif(end2, beg2));
3412 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0ABV12@@Z */
3413 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0AEBV12@@Z */
3414 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_bstr, 16)
3415 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_bstr(basic_string_wchar *this,
3416 wchar_t *beg, wchar_t *end, const basic_string_wchar *str)
3418 return basic_string_wchar_replace(this, basic_string_wchar__Pdif(beg, this->ptr),
3419 basic_string_wchar__Pdif(end, beg), str);
3422 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0IG@Z */
3423 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0_KG@Z */
3424 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_chn, 20)
3425 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_chn(basic_string_wchar *this,
3426 wchar_t *beg, wchar_t *end, MSVCP_size_t count, wchar_t ch)
3428 return basic_string_wchar_replace_ch(this, basic_string_wchar__Pdif(beg, this->ptr),
3429 basic_string_wchar__Pdif(end, beg), count, ch);
3432 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0PBG@Z */
3433 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0PEBG@Z */
3434 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_cstr, 16)
3435 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_cstr(basic_string_wchar *this,
3436 wchar_t *beg, wchar_t *end, const wchar_t *str)
3438 return basic_string_wchar_replace_cstr(this, basic_string_wchar__Pdif(beg, this->ptr),
3439 basic_string_wchar__Pdif(end, beg), str);
3442 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0PBGI@Z */
3443 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0PEBG_K@Z */
3444 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_cstr_len, 20)
3445 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_cstr_len(basic_string_wchar *this,
3446 wchar_t *beg, wchar_t *end, const wchar_t *str, MSVCP_size_t len)
3448 return basic_string_wchar_replace_cstr_len(this, basic_string_wchar__Pdif(beg, this->ptr),
3449 basic_string_wchar__Pdif(end, beg), str, len);
3452 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXPAGIG@Z */
3453 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXPEAG_KG@Z */
3454 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_chn, 16)
3455 void __thiscall basic_string_wchar_insert_iter_chn(basic_string_wchar *this,
3456 wchar_t *pos, MSVCP_size_t n, wchar_t ch)
3458 basic_string_wchar_insert_chn(this, basic_string_wchar__Pdif(pos, this->ptr), n, ch);
3461 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGPAGG@Z */
3462 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGPEAGG@Z */
3463 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_ch, 12)
3464 wchar_t* __thiscall basic_string_wchar_insert_iter_ch(basic_string_wchar *this, wchar_t *pos, wchar_t ch)
3466 MSVCP_size_t off = basic_string_wchar__Pdif(pos, this->ptr);
3467 basic_string_wchar_insert_chn(this, off, 1, ch);
3468 return basic_string_wchar__Psum(this->ptr, off);
3471 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGXZ */
3472 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGXZ */
3473 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3474 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3475 DEFINE_THISCALL_WRAPPER(basic_string_wchar_begin, 4)
3476 wchar_t* __thiscall basic_string_wchar_begin(basic_string_wchar *this)
3478 TRACE("(%p)\n", this);
3479 basic_string_wchar__Freeze(this);
3480 return this->ptr;
3483 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGXZ */
3484 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGXZ */
3485 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3486 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3487 DEFINE_THISCALL_WRAPPER(basic_string_wchar_end, 4)
3488 wchar_t* __thiscall basic_string_wchar_end(basic_string_wchar *this)
3490 TRACE("(%p)\n", this);
3491 basic_string_wchar__Freeze(this);
3492 return this->ptr+this->size;
3495 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$reverse_iterator@PAGGAAGPAGH@2@XZ */
3496 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA?AV?$reverse_iterator@PEAGGAEAGPEAG_J@2@XZ */
3497 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$reverse_iterator@PBGGABGPBGH@2@XZ */
3498 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$reverse_iterator@PEBGGAEBGPEBG_J@2@XZ */
3499 DEFINE_THISCALL_WRAPPER(basic_string_wchar_rbegin, 8)
3500 String_reverse_iterator_wchar* __thiscall basic_string_wchar_rbegin(
3501 basic_string_wchar *this, String_reverse_iterator_wchar *ret)
3503 TRACE("(%p %p)\n", this, ret);
3504 ret->ptr = basic_string_wchar_end(this);
3505 return ret;
3508 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$reverse_iterator@PAGGAAGPAGH@2@XZ */
3509 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA?AV?$reverse_iterator@PEAGGAEAGPEAG_J@2@XZ */
3510 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$reverse_iterator@PBGGABGPBGH@2@XZ */
3511 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$reverse_iterator@PEBGGAEBGPEBG_J@2@XZ */
3512 DEFINE_THISCALL_WRAPPER(basic_string_wchar_rend, 8)
3513 String_reverse_iterator_wchar* __thiscall basic_string_wchar_rend(
3514 basic_string_wchar *this, String_reverse_iterator_wchar *ret)
3516 TRACE("(%p %p)\n", this, ret);
3517 ret->ptr = basic_string_wchar_begin(this);
3518 return ret;
3521 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXPAGPBG1@Z */
3522 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXPEAGPEBG1@Z */
3523 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter, 16)
3524 void __thiscall basic_string_wchar_insert_iter(basic_string_wchar *this,
3525 wchar_t *pos, const wchar_t *beg, const wchar_t *end)
3527 basic_string_wchar_insert_cstr_len(this, basic_string_wchar__Pdif(pos, this->ptr),
3528 beg, basic_string_wchar__Pdif(end, beg));