Add AppDefaults app selection to control panel
[wine/gsoc-2012-control.git] / dlls / msvcp60 / string.c
bloba935de105f0c3de020a034a345cb07fff10e0292
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(msvcp90);
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) ? FALSE : TRUE;
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 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 /* ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEX_N@Z */
155 /* ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAX_N@Z */
156 DEFINE_THISCALL_WRAPPER(basic_string_char__Tidy, 8)
157 void __thiscall basic_string_char__Tidy(basic_string_char *this, MSVCP_bool built)
159 TRACE("(%p %d)\n", this, built);
161 if(!this->ptr || !built);
162 else if(!this->ptr[-1] || (unsigned char)this->ptr[-1]==FROZEN)
163 MSVCP_allocator_char_deallocate(NULL, this->ptr, this->res+2);
164 else
165 this->ptr[-1]--;
167 memset(this, 0, sizeof(*this));
170 /* ?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAE_NI_N@Z */
171 /* ?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAA_N_K_N@Z */
172 DEFINE_THISCALL_WRAPPER(basic_string_char__Grow, 12)
173 MSVCP_bool __thiscall basic_string_char__Grow(basic_string_char *this, MSVCP_size_t new_size, MSVCP_bool trim)
175 if(!new_size) {
176 if(trim)
177 basic_string_char__Tidy(this, TRUE);
178 else if(this->ptr)
179 basic_string_char__Eos(this, 0);
180 } else if(this->res<new_size || trim ||
181 (this->ptr && this->ptr[-1] && (unsigned char)this->ptr[-1]!=FROZEN)) {
182 MSVCP_size_t new_res = new_size, len = this->size;
183 char *ptr;
185 if(!trim && this->ptr && !this->ptr[-1]) {
186 new_res |= 0xf;
187 if(new_res/3 < this->res/2)
188 new_res = this->res + this->res/2;
191 ptr = MSVCP_allocator_char_allocate(this->allocator, new_res+2);
192 if(!ptr) {
193 new_res = new_size;
194 ptr = MSVCP_allocator_char_allocate(this->allocator, new_size+2);
196 if(!ptr) {
197 ERR("Out of memory\n");
198 return FALSE;
201 *ptr = 0;
202 if(this->ptr)
203 char_traits_char__Copy_s(ptr+1, new_size, this->ptr, this->size);
204 basic_string_char__Tidy(this, TRUE);
205 this->ptr = ptr+1;
206 this->res = new_res;
207 basic_string_char__Eos(this, len>new_res ? new_res : len);
210 return new_size>0;
213 /* ?_Split@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXXZ */
214 /* ?_Split@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAXXZ */
215 DEFINE_THISCALL_WRAPPER(basic_string_char__Split, 4)
216 void __thiscall basic_string_char__Split(basic_string_char *this)
218 MSVCP_size_t len;
219 char *ptr;
221 TRACE("(%p)\n", this);
223 if(!this->ptr || !this->ptr[-1] || (unsigned char)this->ptr[-1]==FROZEN)
224 return;
226 ptr = this->ptr;
227 len = this->size;
228 basic_string_char__Tidy(this, TRUE);
229 if(basic_string_char__Grow(this, len, FALSE)) {
230 char_traits_char__Copy_s(this->ptr, this->res, ptr, len);
231 basic_string_char__Eos(this, len);
235 /* ?_Freeze@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXXZ */
236 /* ?_Freeze@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAXXZ */
237 DEFINE_THISCALL_WRAPPER(basic_string_char__Freeze, 4)
238 void __thiscall basic_string_char__Freeze(basic_string_char *this)
240 TRACE("(%p)\n", this);
241 basic_string_char__Split(this);
242 if(this->ptr)
243 this->ptr[-1] = FROZEN;
246 /* ?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXI@Z */
247 /* ?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAX_K@Z */
248 DEFINE_THISCALL_WRAPPER(basic_string_char__Copy, 8)
249 void __thiscall basic_string_char__Copy(basic_string_char *this, MSVCP_size_t copy_len)
251 TRACE("%p %lu\n", this, copy_len);
253 if(!basic_string_char__Grow(this, copy_len, FALSE))
254 return;
255 basic_string_char__Eos(this, copy_len);
258 /* ?_Pdif@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAIPBD0@Z */
259 /* ?_Pdif@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CA_KPEBD0@Z */
260 MSVCP_size_t __cdecl basic_string_char__Pdif(const char *i1, const char *i2)
262 TRACE("(%p %p)\n", i1, i2);
263 return !i1 ? 0 : i1-i2;
266 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPADPADI@Z */
267 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPEADPEAD_K@Z */
268 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPBDPBDI@Z */
269 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPEBDPEBD_K@Z */
270 char* __cdecl basic_string_char__Psum(char *iter, MSVCP_size_t add)
272 TRACE("(%p %lu)\n", iter, add);
273 return iter ? iter+add : iter;
276 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@II@Z */
277 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0@Z */
278 DEFINE_THISCALL_WRAPPER(basic_string_char_erase, 12)
279 basic_string_char* __thiscall basic_string_char_erase(
280 basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t len)
282 TRACE("%p %lu %lu\n", this, pos, len);
284 if(pos > this->size)
285 _Xran();
287 if(len > this->size-pos)
288 len = this->size-pos;
290 if(len) {
291 basic_string_char__Split(this);
292 char_traits_char__Move_s(this->ptr+pos, this->res-pos,
293 this->ptr+pos+len, this->size-pos-len);
294 basic_string_char__Eos(this, this->size-len);
297 return this;
300 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADPAD0@Z */
301 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADPEAD0@Z */
302 DEFINE_THISCALL_WRAPPER(basic_string_char_erase_iter, 12)
303 char* __thiscall basic_string_char_erase_iter(basic_string_char *this, char *beg, char *end)
305 MSVCP_size_t pos = basic_string_char__Pdif(beg, this->ptr);
306 basic_string_char_erase(this, pos, basic_string_char__Pdif(end, beg));
307 return basic_string_char__Psum(this->ptr, pos);
310 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADPAD@Z */
311 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADPEAD@Z */
312 DEFINE_THISCALL_WRAPPER(basic_string_char_erase_beg, 8)
313 char* __thiscall basic_string_char_erase_beg(basic_string_char *this, char *beg)
315 MSVCP_size_t pos = beg-this->ptr;
316 basic_string_char_erase(this, pos, 1);
317 return this->ptr+pos;
320 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z */
321 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
322 DEFINE_THISCALL_WRAPPER(basic_string_char_assign_substr, 16)
323 basic_string_char* __thiscall basic_string_char_assign_substr(
324 basic_string_char *this, const basic_string_char *assign,
325 MSVCP_size_t pos, MSVCP_size_t len)
327 TRACE("%p %p %lu %lu\n", this, assign, pos, len);
329 if(assign->size < pos)
330 _Xran();
332 if(len > assign->size-pos)
333 len = assign->size-pos;
335 if(this == assign) {
336 basic_string_char_erase(this, pos+len, basic_string_char_npos);
337 basic_string_char_erase(this, 0, pos);
338 } else if(basic_string_char__Grow(this, len, FALSE)) {
339 char_traits_char__Copy_s(this->ptr, this->res,
340 assign->ptr+pos, len);
341 basic_string_char__Eos(this, len);
344 return this;
347 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z */
348 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD_K@Z */
349 DEFINE_THISCALL_WRAPPER(basic_string_char_assign_cstr_len, 12)
350 basic_string_char* __thiscall basic_string_char_assign_cstr_len(
351 basic_string_char *this, const char *str, MSVCP_size_t len)
353 TRACE("%p %s %lu\n", this, debugstr_a(str), len);
355 if(basic_string_char_inside(this, str))
356 return basic_string_char_assign_substr(this, this, str-this->ptr, len);
357 else if(basic_string_char__Grow(this, len, FALSE)) {
358 char_traits_char__Copy_s(this->ptr, this->res, str, len);
359 basic_string_char__Eos(this, len);
362 return this;
365 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@@Z */
366 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@@Z */
367 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@ABV01@@Z */
368 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@AEBV01@@Z */
369 DEFINE_THISCALL_WRAPPER(basic_string_char_assign, 8)
370 basic_string_char* __thiscall basic_string_char_assign(
371 basic_string_char *this, const basic_string_char *assign)
373 return basic_string_char_assign_substr(this, assign,
374 0, basic_string_char_npos);
377 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z */
378 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD@Z */
379 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z */
380 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@PEBD@Z */
381 DEFINE_THISCALL_WRAPPER(basic_string_char_assign_cstr, 8)
382 basic_string_char* __thiscall basic_string_char_assign_cstr(
383 basic_string_char *this, const char *str)
385 return basic_string_char_assign_cstr_len(this, str,
386 char_traits_char_length(str));
389 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@D@Z */
390 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@D@Z */
391 DEFINE_THISCALL_WRAPPER(basic_string_char_assign_ch, 8)
392 basic_string_char* __thiscall basic_string_char_assign_ch(
393 basic_string_char *this, char ch)
395 return basic_string_char_assign_cstr_len(this, &ch, 1);
398 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ID@Z */
399 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KD@Z */
400 DEFINE_THISCALL_WRAPPER(basic_string_char_assignn, 12)
401 basic_string_char* __thiscall basic_string_char_assignn(
402 basic_string_char *this, MSVCP_size_t count, char ch)
404 TRACE("%p %ld %c\n", this, count, ch);
406 basic_string_char__Grow(this, count, FALSE);
407 char_traits_char_assignn(this->ptr, count, ch);
408 basic_string_char__Eos(this, count);
409 return this;
412 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD0@Z */
413 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD0@Z */
414 DEFINE_THISCALL_WRAPPER(basic_string_char_assign_ptr_ptr, 12)
415 basic_string_char* __thiscall basic_string_char_assign_ptr_ptr(
416 basic_string_char *this, const char *first, const char *last)
418 return basic_string_char_assign_cstr_len(this, first, last-first);
421 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDIABV?$allocator@D@1@@Z */
422 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD_KAEBV?$allocator@D@1@@Z */
423 DEFINE_THISCALL_WRAPPER(basic_string_char_ctor_cstr_len_alloc, 16)
424 basic_string_char* __thiscall basic_string_char_ctor_cstr_len_alloc(
425 basic_string_char *this, const char *str, MSVCP_size_t len, const void *alloc)
427 TRACE("%p %s %ld\n", this, debugstr_a(str), len);
429 basic_string_char__Tidy(this, FALSE);
430 basic_string_char_assign_cstr_len(this, str, len);
431 return this;
434 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@IIABV?$allocator@D@1@@Z */
435 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV01@_K1AEBV?$allocator@D@1@@Z */
436 DEFINE_THISCALL_WRAPPER(basic_string_char_ctor_substr_alloc, 20)
437 basic_string_char* __thiscall basic_string_char_ctor_substr_alloc(
438 basic_string_char *this, const basic_string_char *assign,
439 MSVCP_size_t pos, MSVCP_size_t len, const void *alloc)
441 TRACE("%p %p %lu %lu\n", this, assign, pos, len);
443 basic_string_char__Tidy(this, FALSE);
444 basic_string_char_assign_substr(this, assign, pos, len);
445 return this;
448 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDABV?$allocator@D@1@@Z */
449 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBDAEBV?$allocator@D@1@@Z */
450 DEFINE_THISCALL_WRAPPER(basic_string_char_ctor_cstr_alloc, 12)
451 basic_string_char* __thiscall basic_string_char_ctor_cstr_alloc(
452 basic_string_char *this, const char *str, const void *alloc)
454 TRACE("%p %s\n", this, debugstr_a(str));
456 basic_string_char__Tidy(this, FALSE);
457 basic_string_char_assign_cstr(this, str);
458 return this;
461 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr(
462 basic_string_char *this, const char *str)
464 return basic_string_char_ctor_cstr_alloc(this, str, NULL);
467 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@IDABV?$allocator@D@1@@Z */
468 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@_KDAEBV?$allocator@D@1@@Z */
469 DEFINE_THISCALL_WRAPPER(basic_string_char_ctor_ch_alloc, 16)
470 basic_string_char* __thiscall basic_string_char_ctor_ch_alloc(basic_string_char *this,
471 MSVCP_size_t count, char ch, const void *alloc)
473 TRACE("%p %ld %c\n", this, count, ch);
475 basic_string_char__Tidy(this, FALSE);
476 basic_string_char_assignn(this, count, ch);
477 return this;
480 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD0ABV?$allocator@D@1@@Z */
481 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD0AEBV?$allocator@D@1@@Z */
482 DEFINE_THISCALL_WRAPPER(basic_string_char_ctor_iter, 16)
483 basic_string_char* __thiscall basic_string_char_ctor_iter(basic_string_char *this,
484 const char *first, const char *last, allocator *alloc)
486 TRACE("(%p %p %p %p)\n", this, first, last, alloc);
488 basic_string_char__Tidy(this, FALSE);
489 basic_string_char_assign_cstr_len(this, first, basic_string_char__Pdif(last, first));
490 return this;
493 /* ??_F?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */
494 /* ??_F?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */
495 DEFINE_THISCALL_WRAPPER(basic_string_char_ctor, 4)
496 basic_string_char* __thiscall basic_string_char_ctor(basic_string_char *this)
498 TRACE("%p\n", this);
500 basic_string_char__Tidy(this, FALSE);
501 return this;
504 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV?$allocator@D@1@@Z */
505 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV?$allocator@D@1@@Z */
506 DEFINE_THISCALL_WRAPPER(basic_string_char_ctor_alloc, 8)
507 basic_string_char* __thiscall basic_string_char_ctor_alloc(
508 basic_string_char *this, const void *alloc)
510 TRACE("%p %p\n", this, alloc);
512 basic_string_char__Tidy(this, FALSE);
513 return this;
516 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z */
517 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV01@@Z */
518 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_copy_ctor, 8)
519 basic_string_char* __thiscall MSVCP_basic_string_char_copy_ctor(
520 basic_string_char *this, const basic_string_char *copy)
522 TRACE("%p %p\n", this, copy);
524 basic_string_char__Tidy(this, FALSE);
525 basic_string_char_assign(this, copy);
526 return this;
529 /* ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ */
530 /* ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@XZ */
531 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_dtor, 4)
532 void __thiscall MSVCP_basic_string_char_dtor(basic_string_char *this)
534 TRACE("%p\n", this);
535 basic_string_char__Tidy(this, TRUE);
538 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIPBDI@Z */
539 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0PEBD0@Z */
540 DEFINE_THISCALL_WRAPPER(basic_string_char_compare_substr_cstr_len, 20)
541 int __thiscall basic_string_char_compare_substr_cstr_len(
542 const basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t num,
543 const char *str, MSVCP_size_t count)
545 int ans;
547 TRACE("%p %lu %lu %s %lu\n", this, pos, num, debugstr_a(str), count);
549 if(this->size < pos)
550 _Xran();
552 if(pos+num > this->size)
553 num = this->size-pos;
555 ans = char_traits_char_compare(this->ptr+pos,
556 str, num>count ? count : num);
557 if(ans)
558 return ans;
560 if(num > count)
561 ans = 1;
562 else if(num < count)
563 ans = -1;
564 return ans;
567 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHPBD@Z */
568 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAHPEBD@Z */
569 DEFINE_THISCALL_WRAPPER(basic_string_char_compare_cstr, 8)
570 int __thiscall basic_string_char_compare_cstr(
571 const basic_string_char *this, const char *str)
573 return basic_string_char_compare_substr_cstr_len(this, 0, this->size,
574 str, char_traits_char_length(str));
577 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIABV12@II@Z */
578 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0AEBV12@00@Z */
579 DEFINE_THISCALL_WRAPPER(basic_string_char_compare_substr_substr, 24)
580 int __thiscall basic_string_char_compare_substr_substr(
581 const basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t num,
582 const basic_string_char *compare, MSVCP_size_t off, MSVCP_size_t count)
584 TRACE("%p %lu %lu %p %lu %lu\n", this, pos, num, compare, off, count);
586 if(compare->size < off)
587 _Xran();
589 if(off+count > compare->size)
590 count = compare->size-off;
592 return basic_string_char_compare_substr_cstr_len(this, pos, num,
593 compare->ptr+off, count);
596 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIABV12@@Z */
597 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0AEBV12@@Z */
598 DEFINE_THISCALL_WRAPPER(basic_string_char_compare_substr, 16)
599 int __thiscall basic_string_char_compare_substr(
600 const basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t num,
601 const basic_string_char *compare)
603 return basic_string_char_compare_substr_cstr_len(this, pos, num,
604 compare->ptr, compare->size);
607 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHABV12@@Z */
608 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAHAEBV12@@Z */
609 DEFINE_THISCALL_WRAPPER(basic_string_char_compare, 8)
610 int __thiscall basic_string_char_compare(
611 const basic_string_char *this, const basic_string_char *compare)
613 return basic_string_char_compare_substr_cstr_len(this, 0, this->size,
614 compare->ptr, compare->size);
617 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIPBD@Z */
618 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0PEBD@Z */
619 DEFINE_THISCALL_WRAPPER(basic_string_char_compare_substr_cstr, 16)
620 int __thiscall basic_string_char_compare_substr_cstr(const basic_string_char *this,
621 MSVCP_size_t pos, MSVCP_size_t num, const char *str)
623 return basic_string_char_compare_substr_cstr_len(this, pos, num,
624 str, char_traits_char_length(str));
627 /* ??$?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 */
628 /* ??$?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 */
629 /* ??8std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
630 /* ??8std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
631 MSVCP_bool __cdecl basic_string_char_equal(
632 const basic_string_char *left, const basic_string_char *right)
634 return basic_string_char_compare(left, right) == 0;
637 /* ??$?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 */
638 /* ??$?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 */
639 /* ??8std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
640 /* ??8std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
641 MSVCP_bool __cdecl basic_string_char_equal_str_cstr(
642 const basic_string_char *left, const char *right)
644 return basic_string_char_compare_cstr(left, right) == 0;
647 /* ??$?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 */
648 /* ??$?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 */
649 /* ??8std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
650 /* ??8std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
651 MSVCP_bool __cdecl basic_string_char_equal_cstr_str(
652 const char *left, const basic_string_char *right)
654 return basic_string_char_compare_cstr(right, left) == 0;
657 /* ??$?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 */
658 /* ??$?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 */
659 /* ??9std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
660 /* ??9std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
661 MSVCP_bool __cdecl basic_string_char_not_equal(
662 const basic_string_char *left, const basic_string_char *right)
664 return basic_string_char_compare(left, right) != 0;
667 /* ??$?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 */
668 /* ??$?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 */
669 /* ??9std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
670 /* ??9std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
671 MSVCP_bool __cdecl basic_string_char_not_equal_str_cstr(
672 const basic_string_char *left, const char *right)
674 return basic_string_char_compare_cstr(left, right) != 0;
677 /* ??$?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 */
678 /* ??$?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 */
679 /* ??9std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
680 /* ??9std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
681 MSVCP_bool __cdecl basic_string_char_not_equal_cstr_str(
682 const char *left, const basic_string_char *right)
684 return basic_string_char_compare_cstr(right, left) != 0;
687 /* ??$?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 */
688 /* ??$?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 */
689 /* ??Mstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
690 /* ??Mstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
691 MSVCP_bool __cdecl basic_string_char_lower(
692 const basic_string_char *left, const basic_string_char *right)
694 return basic_string_char_compare(left, right) < 0;
697 /* ??$?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 */
698 /* ??$?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 */
699 /* ??Mstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
700 /* ??Mstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
701 MSVCP_bool __cdecl basic_string_char_lower_bstr_cstr(
702 const basic_string_char *left, const char *right)
704 return basic_string_char_compare_cstr(left, right) < 0;
707 /* ??$?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 */
708 /* ??$?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 */
709 /* ??Mstd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
710 /* ??Mstd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
711 MSVCP_bool __cdecl basic_string_char_lower_cstr_bstr(
712 const char *left, const basic_string_char *right)
714 return basic_string_char_compare_cstr(right, left) > 0;
717 /* ??$?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 */
718 /* ??$?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 */
719 /* ??Nstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
720 /* ??Nstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
721 MSVCP_bool __cdecl basic_string_char_leq(
722 const basic_string_char *left, const basic_string_char *right)
724 return basic_string_char_compare(left, right) <= 0;
727 /* ??$?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 */
728 /* ??$?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 */
729 /* ??Nstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
730 /* ??Nstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
731 MSVCP_bool __cdecl basic_string_char_leq_bstr_cstr(
732 const basic_string_char *left, const char *right)
734 return basic_string_char_compare_cstr(left, right) <= 0;
737 /* ??$?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 */
738 /* ??$?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 */
739 /* ??Nstd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
740 /* ??Nstd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
741 MSVCP_bool __cdecl basic_string_char_leq_cstr_bstr(
742 const char *left, const basic_string_char *right)
744 return basic_string_char_compare_cstr(right, left) >= 0;
747 /* ??$?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 */
748 /* ??$?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 */
749 /* ??Ostd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
750 /* ??Ostd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
751 MSVCP_bool __cdecl basic_string_char_greater(
752 const basic_string_char *left, const basic_string_char *right)
754 return basic_string_char_compare(left, right) > 0;
757 /* ??$?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 */
758 /* ??$?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 */
759 /* ??Ostd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
760 /* ??Ostd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
761 MSVCP_bool __cdecl basic_string_char_greater_bstr_cstr(
762 const basic_string_char *left, const char *right)
764 return basic_string_char_compare_cstr(left, right) > 0;
767 /* ??$?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 */
768 /* ??$?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 */
769 /* ??Ostd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
770 /* ??Ostd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
771 MSVCP_bool __cdecl basic_string_char_greater_cstr_bstr(
772 const char *left, const basic_string_char *right)
774 return basic_string_char_compare_cstr(right, left) < 0;
777 /* ??$?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 */
778 /* ??$?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 */
779 /* ??Pstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
780 /* ??Pstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
781 MSVCP_bool __cdecl basic_string_char_geq(
782 const basic_string_char *left, const basic_string_char *right)
784 return basic_string_char_compare(left, right) >= 0;
787 /* ??$?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 */
788 /* ??$?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 */
789 /* ??Pstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
790 /* ??Pstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
791 MSVCP_bool __cdecl basic_string_char_geq_bstr_cstr(
792 const basic_string_char *left, const char *right)
794 return basic_string_char_compare_cstr(left, right) >= 0;
797 /* ??$?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 */
798 /* ??$?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 */
799 /* ??Pstd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
800 /* ??Pstd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
801 MSVCP_bool __cdecl basic_string_char_geq_cstr_bstr(
802 const char *left, const basic_string_char *right)
804 return basic_string_char_compare_cstr(right, left) <= 0;
807 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
808 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
809 DEFINE_THISCALL_WRAPPER(basic_string_char_find_cstr_substr, 16)
810 MSVCP_size_t __thiscall basic_string_char_find_cstr_substr(
811 const basic_string_char *this, const char *find, MSVCP_size_t pos, MSVCP_size_t len)
813 const char *p, *end;
815 TRACE("%p %s %lu %lu\n", this, debugstr_a(find), pos, len);
817 if(len==0 && pos<=this->size)
818 return pos;
820 end = this->ptr+this->size-len+1;
821 for(p=this->ptr+pos; p<end; p++) {
822 p = char_traits_char_find(p, end-p, find);
823 if(!p)
824 break;
826 if(!char_traits_char_compare(p, find, len))
827 return p-this->ptr;
830 return basic_string_char_npos;
833 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
834 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
835 DEFINE_THISCALL_WRAPPER(basic_string_char_find_off, 12)
836 MSVCP_size_t __thiscall basic_string_char_find_off(
837 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
839 return basic_string_char_find_cstr_substr(this, find->ptr, off, find->size);
842 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
843 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
844 DEFINE_THISCALL_WRAPPER(basic_string_char_find_ch, 12)
845 MSVCP_size_t __thiscall basic_string_char_find_ch(
846 const basic_string_char *this, char ch, MSVCP_size_t pos)
848 return basic_string_char_find_cstr_substr(this, &ch, pos, 1);
851 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
852 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
853 DEFINE_THISCALL_WRAPPER(basic_string_char_find_cstr_off, 12)
854 MSVCP_size_t __thiscall basic_string_char_find_cstr_off(
855 const basic_string_char *this, const char *find, MSVCP_size_t pos)
857 return basic_string_char_find_cstr_substr(this, find, pos,
858 char_traits_char_length(find));
861 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
862 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
863 DEFINE_THISCALL_WRAPPER(basic_string_char_rfind_cstr_substr, 16)
864 MSVCP_size_t __thiscall basic_string_char_rfind_cstr_substr(
865 const basic_string_char *this, const char *find, MSVCP_size_t pos, MSVCP_size_t len)
867 const char *p, *end;
869 TRACE("%p %s %lu %lu\n", this, debugstr_a(find), pos, len);
871 if(len==0)
872 return pos<this->size ? pos : this->size;
874 if(len > this->size)
875 return basic_string_char_npos;
877 if(pos > this->size-len+1)
878 pos = this->size-len+1;
879 end = this->ptr;
880 for(p=end+pos-1; p>=end; p--) {
881 if(*p==*find && !char_traits_char_compare(p, find, len))
882 return p-this->ptr;
885 return basic_string_char_npos;
888 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
889 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
890 DEFINE_THISCALL_WRAPPER(basic_string_char_rfind_off, 12)
891 MSVCP_size_t __thiscall basic_string_char_rfind_off(
892 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
894 return basic_string_char_rfind_cstr_substr(this, find->ptr, off, find->size);
897 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
898 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
899 DEFINE_THISCALL_WRAPPER(basic_string_char_rfind_ch, 12)
900 MSVCP_size_t __thiscall basic_string_char_rfind_ch(
901 const basic_string_char *this, char ch, MSVCP_size_t pos)
903 return basic_string_char_rfind_cstr_substr(this, &ch, pos, 1);
906 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
907 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
908 DEFINE_THISCALL_WRAPPER(basic_string_char_rfind_cstr_off, 12)
909 MSVCP_size_t __thiscall basic_string_char_rfind_cstr_off(
910 const basic_string_char *this, const char *find, MSVCP_size_t pos)
912 return basic_string_char_rfind_cstr_substr(this, find, pos,
913 char_traits_char_length(find));
916 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
917 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
918 DEFINE_THISCALL_WRAPPER(basic_string_char_find_first_not_of_cstr_substr, 16)
919 MSVCP_size_t __thiscall basic_string_char_find_first_not_of_cstr_substr(
920 const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len)
922 const char *p, *end;
924 TRACE("%p %p %lu %lu\n", this, find, off, len);
926 if(off<this->size) {
927 end = this->ptr+this->size;
928 for(p=this->ptr+off; p<end; p++)
929 if(!char_traits_char_find(find, len, p))
930 return p-this->ptr;
933 return basic_string_char_npos;
936 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
937 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
938 DEFINE_THISCALL_WRAPPER(basic_string_char_find_first_not_of, 12)
939 MSVCP_size_t __thiscall basic_string_char_find_first_not_of(
940 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
942 return basic_string_char_find_first_not_of_cstr_substr(this,
943 find->ptr, off, find->size);
946 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
947 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
948 DEFINE_THISCALL_WRAPPER(basic_string_char_find_first_not_of_ch, 12)
949 MSVCP_size_t __thiscall basic_string_char_find_first_not_of_ch(
950 const basic_string_char *this, char ch, MSVCP_size_t off)
952 return basic_string_char_find_first_not_of_cstr_substr(this, &ch, off, 1);
955 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
956 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
957 DEFINE_THISCALL_WRAPPER(basic_string_char_find_first_not_of_cstr, 12)
958 MSVCP_size_t __thiscall basic_string_char_find_first_not_of_cstr(
959 const basic_string_char *this, const char *find, MSVCP_size_t off)
961 return basic_string_char_find_first_not_of_cstr_substr(
962 this, find, off, char_traits_char_length(find));
965 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
966 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
967 DEFINE_THISCALL_WRAPPER(basic_string_char_find_first_of_cstr_substr, 16)
968 MSVCP_size_t __thiscall basic_string_char_find_first_of_cstr_substr(
969 const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len)
971 const char *p, *end;
973 TRACE("%p %p %lu %lu\n", this, find, off, len);
975 if(len>0 && off<this->size) {
976 end = this->ptr+this->size;
977 for(p=this->ptr+off; p<end; p++)
978 if(char_traits_char_find(find, len, p))
979 return p-this->ptr;
982 return basic_string_char_npos;
985 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
986 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
987 DEFINE_THISCALL_WRAPPER(basic_string_char_find_first_of, 12)
988 MSVCP_size_t __thiscall basic_string_char_find_first_of(
989 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
991 return basic_string_char_find_first_of_cstr_substr(this,
992 find->ptr, off, find->size);
995 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
996 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
997 DEFINE_THISCALL_WRAPPER(basic_string_char_find_first_of_ch, 12)
998 MSVCP_size_t __thiscall basic_string_char_find_first_of_ch(
999 const basic_string_char *this, char ch, MSVCP_size_t off)
1001 return basic_string_char_find_first_of_cstr_substr(this, &ch, off, 1);
1004 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1005 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1006 DEFINE_THISCALL_WRAPPER(basic_string_char_find_first_of_cstr, 12)
1007 MSVCP_size_t __thiscall basic_string_char_find_first_of_cstr(
1008 const basic_string_char *this, const char *find, MSVCP_size_t off)
1010 return basic_string_char_find_first_of_cstr_substr(
1011 this, find, off, char_traits_char_length(find));
1014 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1015 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1016 DEFINE_THISCALL_WRAPPER(basic_string_char_find_last_not_of_cstr_substr, 16)
1017 MSVCP_size_t __thiscall basic_string_char_find_last_not_of_cstr_substr(
1018 const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len)
1020 const char *p, *beg;
1022 TRACE("%p %p %lu %lu\n", this, find, off, len);
1024 if(len>0 && this->size>0) {
1025 if(off >= this->size)
1026 off = this->size-1;
1028 beg = this->ptr;
1029 for(p=beg+off; p>=beg; p--)
1030 if(!char_traits_char_find(find, len, p))
1031 return p-beg;
1034 return basic_string_char_npos;
1037 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1038 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1039 DEFINE_THISCALL_WRAPPER(basic_string_char_find_last_not_of, 12)
1040 MSVCP_size_t __thiscall basic_string_char_find_last_not_of(
1041 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
1043 return basic_string_char_find_last_not_of_cstr_substr(this,
1044 find->ptr, off, find->size);
1047 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1048 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1049 DEFINE_THISCALL_WRAPPER(basic_string_char_find_last_not_of_ch, 12)
1050 MSVCP_size_t __thiscall basic_string_char_find_last_not_of_ch(
1051 const basic_string_char *this, char ch, MSVCP_size_t off)
1053 return basic_string_char_find_last_not_of_cstr_substr(this, &ch, off, 1);
1056 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1057 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1058 DEFINE_THISCALL_WRAPPER(basic_string_char_find_last_not_of_cstr, 12)
1059 MSVCP_size_t __thiscall basic_string_char_find_last_not_of_cstr(
1060 const basic_string_char *this, const char *find, MSVCP_size_t off)
1062 return basic_string_char_find_last_not_of_cstr_substr(
1063 this, find, off, char_traits_char_length(find));
1066 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1067 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1068 DEFINE_THISCALL_WRAPPER(basic_string_char_find_last_of_cstr_substr, 16)
1069 MSVCP_size_t __thiscall basic_string_char_find_last_of_cstr_substr(
1070 const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len)
1072 const char *p, *beg;
1074 TRACE("%p %p %lu %lu\n", this, find, off, len);
1076 if(len>0 && this->size>0) {
1077 if(off >= this->size)
1078 off = this->size-1;
1080 beg = this->ptr;
1081 for(p=beg+off; p>=beg; p--)
1082 if(char_traits_char_find(find, len, p))
1083 return p-beg;
1086 return basic_string_char_npos;
1089 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1090 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1091 DEFINE_THISCALL_WRAPPER(basic_string_char_find_last_of, 12)
1092 MSVCP_size_t __thiscall basic_string_char_find_last_of(
1093 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
1095 return basic_string_char_find_last_of_cstr_substr(this,
1096 find->ptr, off, find->size);
1099 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1100 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1101 DEFINE_THISCALL_WRAPPER(basic_string_char_find_last_of_ch, 12)
1102 MSVCP_size_t __thiscall basic_string_char_find_last_of_ch(
1103 const basic_string_char *this, char ch, MSVCP_size_t off)
1105 return basic_string_char_find_last_of_cstr_substr(this, &ch, off, 1);
1108 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1109 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1110 DEFINE_THISCALL_WRAPPER(basic_string_char_find_last_of_cstr, 12)
1111 MSVCP_size_t __thiscall basic_string_char_find_last_of_cstr(
1112 const basic_string_char *this, const char *find, MSVCP_size_t off)
1114 return basic_string_char_find_last_of_cstr_substr(
1115 this, find, off, char_traits_char_length(find));
1118 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z */
1119 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
1120 DEFINE_THISCALL_WRAPPER(basic_string_char_append_substr, 16)
1121 basic_string_char* __thiscall basic_string_char_append_substr(basic_string_char *this,
1122 const basic_string_char *append, MSVCP_size_t offset, MSVCP_size_t count)
1124 TRACE("%p %p %lu %lu\n", this, append, offset, count);
1126 if(append->size < offset)
1127 _Xran();
1129 if(count > append->size-offset)
1130 count = append->size-offset;
1132 if(basic_string_char_npos-this->size<=count || this->size+count<this->size)
1133 _Xlen();
1135 if(basic_string_char__Grow(this, this->size+count, FALSE)) {
1136 char_traits_char__Copy_s(this->ptr+this->size,
1137 this->res-this->size, append->ptr+offset, count);
1138 basic_string_char__Eos(this, this->size+count);
1141 return this;
1144 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z */
1145 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD_K@Z */
1146 DEFINE_THISCALL_WRAPPER(basic_string_char_append_cstr_len, 12)
1147 basic_string_char* __thiscall basic_string_char_append_cstr_len(
1148 basic_string_char *this, const char *append, MSVCP_size_t count)
1150 TRACE("%p %s %lu\n", this, debugstr_a(append), count);
1152 if(basic_string_char_inside(this, append))
1153 return basic_string_char_append_substr(this, this, append-this->ptr, count);
1155 if(basic_string_char_npos-this->size<=count || this->size+count<this->size)
1156 _Xlen();
1158 if(basic_string_char__Grow(this, this->size+count, FALSE)) {
1159 char_traits_char__Copy_s(this->ptr+this->size,
1160 this->res-this->size, append, count);
1161 basic_string_char__Eos(this, this->size+count);
1164 return this;
1167 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ID@Z */
1168 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KD@Z */
1169 DEFINE_THISCALL_WRAPPER(basic_string_char_append_len_ch, 12)
1170 basic_string_char* __thiscall basic_string_char_append_len_ch(
1171 basic_string_char *this, MSVCP_size_t count, char ch)
1173 TRACE("%p %lu %c\n", this, count, ch);
1175 if(basic_string_char_npos-this->size <= count)
1176 _Xlen();
1178 if(basic_string_char__Grow(this, this->size+count, FALSE)) {
1179 char_traits_char_assignn(this->ptr+this->size, count, ch);
1180 basic_string_char__Eos(this, this->size+count);
1183 return this;
1186 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@@Z */
1187 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@@Z */
1188 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@ABV01@@Z */
1189 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@AEBV01@@Z */
1190 DEFINE_THISCALL_WRAPPER(basic_string_char_append, 8)
1191 basic_string_char* __thiscall basic_string_char_append(
1192 basic_string_char *this, const basic_string_char *append)
1194 return basic_string_char_append_substr(this, append,
1195 0, basic_string_char_npos);
1198 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@D@Z */
1199 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@D@Z */
1200 DEFINE_THISCALL_WRAPPER(basic_string_char_append_ch, 8)
1201 basic_string_char* __thiscall basic_string_char_append_ch(
1202 basic_string_char *this, char ch)
1204 return basic_string_char_append_len_ch(this, 1, ch);
1207 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD0@Z */
1208 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD0@Z */
1209 DEFINE_THISCALL_WRAPPER(basic_string_char_append_beg_end, 12)
1210 basic_string_char* __thiscall basic_string_char_append_beg_end(
1211 basic_string_char *this, const char *beg, const char *end)
1213 return basic_string_char_append_cstr_len(this, beg, end-beg);
1216 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z */
1217 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD@Z */
1218 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z */
1219 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@PEBD@Z */
1220 DEFINE_THISCALL_WRAPPER(basic_string_char_append_cstr, 8)
1221 basic_string_char* __thiscall basic_string_char_append_cstr(
1222 basic_string_char *this, const char *append)
1224 return basic_string_char_append_cstr_len(this, append,
1225 char_traits_char_length(append));
1227 /* ??$?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 */
1228 /* ??$?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 */
1229 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@0@Z */
1230 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@0@Z */
1231 basic_string_char* __cdecl basic_string_char_concatenate(basic_string_char *ret,
1232 const basic_string_char *left, const basic_string_char *right)
1234 TRACE("%p %p\n", left, right);
1236 MSVCP_basic_string_char_copy_ctor(ret, left);
1237 basic_string_char_append(ret, right);
1238 return ret;
1241 /* ??$?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 */
1242 /* ??$?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 */
1243 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@D@Z */
1244 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@D@Z */
1245 basic_string_char* __cdecl basic_string_char_concatenate_bstr_ch(basic_string_char *ret,
1246 const basic_string_char *left, char right)
1248 TRACE("%p %c\n", left, right);
1250 MSVCP_basic_string_char_copy_ctor(ret, left);
1251 basic_string_char_append_ch(ret, right);
1252 return ret;
1255 /* ??$?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 */
1256 /* ??$?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 */
1257 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@PBD@Z */
1258 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@PEBD@Z */
1259 basic_string_char* __cdecl basic_string_char_concatenate_bstr_cstr(basic_string_char *ret,
1260 const basic_string_char *left, const char *right)
1262 TRACE("%p %s\n", left, debugstr_a(right));
1264 MSVCP_basic_string_char_copy_ctor(ret, left);
1265 basic_string_char_append_cstr(ret, right);
1266 return ret;
1269 /* ??$?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 */
1270 /* ??$?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 */
1271 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@DABV10@@Z */
1272 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@DAEBV10@@Z */
1273 basic_string_char* __cdecl basic_string_char_concatenate_ch_bstr(basic_string_char *ret,
1274 char left, const basic_string_char *right)
1276 TRACE("%c %p\n", left, right);
1278 basic_string_char_ctor_cstr_len_alloc(ret, &left, 1, NULL);
1279 basic_string_char_append(ret, right);
1280 return ret;
1283 /* ??$?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 */
1284 /* ??$?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 */
1285 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBDABV10@@Z */
1286 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBDAEBV10@@Z */
1287 basic_string_char* __cdecl basic_string_char_concatenate_cstr_bstr(basic_string_char *ret,
1288 const char *left, const basic_string_char *right)
1290 TRACE("%s %p\n", debugstr_a(left), right);
1292 basic_string_char_ctor_cstr_alloc(ret, left, NULL);
1293 basic_string_char_append(ret, right);
1294 return ret;
1297 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAADI@Z */
1298 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAD_K@Z */
1299 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDI@Z */
1300 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAAEBD_K@Z */
1301 DEFINE_THISCALL_WRAPPER(basic_string_char_operator_at, 8)
1302 char* __thiscall basic_string_char_operator_at(
1303 basic_string_char *this, MSVCP_size_t pos)
1305 TRACE("%p %lu\n", this, pos);
1307 assert(this->size >= pos);
1308 return this->ptr+pos;
1311 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAADI@Z */
1312 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAD_K@Z */
1313 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDI@Z */
1314 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAAEBD_K@Z */
1315 DEFINE_THISCALL_WRAPPER(basic_string_char_at, 8)
1316 char* __thiscall basic_string_char_at(
1317 basic_string_char *this, MSVCP_size_t pos)
1319 TRACE("%p %lu\n", this, pos);
1321 if(this->size <= pos)
1322 _Xran();
1324 return this->ptr+pos;
1327 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIPBDI@Z */
1328 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0PEBD0@Z */
1329 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_cstr_len, 20)
1330 basic_string_char* __thiscall basic_string_char_replace_cstr_len(basic_string_char *this,
1331 MSVCP_size_t off, MSVCP_size_t len, const char *str, MSVCP_size_t str_len)
1333 MSVCP_size_t inside_pos = -1;
1334 char *ptr = this->ptr;
1336 TRACE("%p %ld %ld %p %ld\n", this, off, len, str, str_len);
1338 if(this->size < off)
1339 _Xran();
1341 if(off+len > this->size)
1342 len = this->size-off;
1344 if(basic_string_char_npos-str_len <= this->size-len)
1345 _Xlen();
1347 if(basic_string_char_inside(this, str))
1348 inside_pos = str-ptr;
1350 if(this->size-len+str_len)
1351 basic_string_char__Grow(this, this->size-len+str_len, FALSE);
1352 ptr = this->ptr;
1354 if(inside_pos == -1) {
1355 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1356 memcpy(ptr+off, str, str_len*sizeof(char));
1357 } else if(len >= str_len) {
1358 memmove(ptr+off, ptr+inside_pos, str_len*sizeof(char));
1359 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1360 } else {
1361 MSVCP_size_t size;
1363 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1365 if(inside_pos < off+len) {
1366 size = off+len-inside_pos;
1367 if(size > str_len)
1368 size = str_len;
1369 memmove(ptr+off, ptr+inside_pos, size*sizeof(char));
1370 } else {
1371 size = 0;
1374 if(str_len > size)
1375 memmove(ptr+off+size, ptr+off+str_len, (str_len-size)*sizeof(char));
1378 basic_string_char__Eos(this, this->size-len+str_len);
1379 return this;
1382 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIABV12@II@Z */
1383 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0AEBV12@00@Z */
1384 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_substr, 24)
1385 basic_string_char* __thiscall basic_string_char_replace_substr(basic_string_char *this, MSVCP_size_t off,
1386 MSVCP_size_t len, const basic_string_char *str, MSVCP_size_t str_off, MSVCP_size_t str_len)
1388 if(str->size < str_off)
1389 _Xran();
1391 if(str_off+str_len > str->size)
1392 str_len = str->size-str_off;
1394 return basic_string_char_replace_cstr_len(this, off, len,
1395 str->ptr+str_off, str_len);
1398 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIABV12@@Z */
1399 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0AEBV12@@Z */
1400 DEFINE_THISCALL_WRAPPER(basic_string_char_replace, 16)
1401 basic_string_char* __thiscall basic_string_char_replace(basic_string_char *this,
1402 MSVCP_size_t off, MSVCP_size_t len, const basic_string_char *str)
1404 return basic_string_char_replace_cstr_len(this, off, len,
1405 str->ptr, str->size);
1408 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIID@Z */
1409 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K00D@Z */
1410 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_ch, 20)
1411 basic_string_char* __thiscall basic_string_char_replace_ch(basic_string_char *this,
1412 MSVCP_size_t off, MSVCP_size_t len, MSVCP_size_t count, char ch)
1414 char *ptr;
1416 TRACE("%p %ld %ld %ld %c\n", this, off, len, count, ch);
1418 if(this->size < off)
1419 _Xran();
1421 if(off+len > this->size)
1422 len = this->size-off;
1424 if(basic_string_char_npos-count <= this->size-len)
1425 _Xlen();
1427 if(this->size-len+count)
1428 basic_string_char__Grow(this, this->size-len+count, FALSE);
1429 ptr = this->ptr;
1431 memmove(ptr+off+count, ptr+off+len, (this->size-off-len)*sizeof(char));
1432 char_traits_char_assignn(ptr+off, count, ch);
1433 basic_string_char__Eos(this, this->size-len+count);
1435 return this;
1438 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIPBD@Z */
1439 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0PEBD@Z */
1440 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_cstr, 16)
1441 basic_string_char* __thiscall basic_string_char_replace_cstr(basic_string_char *this,
1442 MSVCP_size_t off, MSVCP_size_t len, const char *str)
1444 return basic_string_char_replace_cstr_len(this, off, len, str,
1445 char_traits_char_length(str));
1448 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0ABV12@@Z */
1449 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0AEBV12@@Z */
1450 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_bstr, 16)
1451 basic_string_char* __thiscall basic_string_char_replace_iter_bstr(basic_string_char *this,
1452 char *beg, char *end, const basic_string_char *str)
1454 return basic_string_char_replace(this, basic_string_char__Pdif(beg, this->ptr),
1455 basic_string_char__Pdif(end, beg), str);
1458 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0ID@Z */
1459 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0_KD@Z */
1460 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_chn, 20)
1461 basic_string_char* __thiscall basic_string_char_replace_iter_chn(basic_string_char *this,
1462 char *beg, char *end, MSVCP_size_t count, char ch)
1464 return basic_string_char_replace_ch(this, basic_string_char__Pdif(beg, this->ptr),
1465 basic_string_char__Pdif(end, beg), count, ch);
1468 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0PBD1@Z */
1469 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0PEBD1@Z */
1470 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_iter, 20)
1471 basic_string_char* __thiscall basic_string_char_replace_iter_iter(basic_string_char *this,
1472 char *beg1, char *end1, const char *beg2, const char *end2)
1474 return basic_string_char_replace_cstr_len(this, basic_string_char__Pdif(beg1, this->ptr),
1475 basic_string_char__Pdif(end1, beg1), beg2, basic_string_char__Pdif(end2, beg2));
1478 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0PBD@Z */
1479 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0PEBD@Z */
1480 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_cstr, 16)
1481 basic_string_char* __thiscall basic_string_char_replace_iter_cstr(basic_string_char *this,
1482 char *beg, char *end, const char *str)
1484 return basic_string_char_replace_cstr(this, basic_string_char__Pdif(beg, this->ptr),
1485 basic_string_char__Pdif(end, beg), str);
1488 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0PBDI@Z */
1489 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0PEBD_K@Z */
1490 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_cstr_len, 20)
1491 basic_string_char* __thiscall basic_string_char_replace_iter_cstr_len(basic_string_char *this,
1492 char *beg, char *end, const char *str, MSVCP_size_t len)
1494 return basic_string_char_replace_cstr_len(this, basic_string_char__Pdif(beg, this->ptr),
1495 basic_string_char__Pdif(end, beg), str, len);
1498 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IABV12@@Z */
1499 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KAEBV12@@Z */
1500 DEFINE_THISCALL_WRAPPER(basic_string_char_insert, 12)
1501 basic_string_char* __thiscall basic_string_char_insert(basic_string_char *this,
1502 MSVCP_size_t off, const basic_string_char *str)
1504 return basic_string_char_replace(this, off, 0, str);
1507 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IABV12@II@Z */
1508 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KAEBV12@00@Z */
1509 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_substr, 20)
1510 basic_string_char* __thiscall basic_string_char_insert_substr(
1511 basic_string_char *this, MSVCP_size_t off, const basic_string_char *str,
1512 MSVCP_size_t str_off, MSVCP_size_t str_count)
1514 return basic_string_char_replace_substr(this, off, 0, str, str_off, str_count);
1517 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IPBD@Z */
1518 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KPEBD@Z */
1519 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_cstr, 12)
1520 basic_string_char* __thiscall basic_string_char_insert_cstr(
1521 basic_string_char *this, MSVCP_size_t off, const char *str)
1523 return basic_string_char_replace_cstr(this, off, 0, str);
1526 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IPBDI@Z */
1527 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KPEBD0@Z */
1528 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_cstr_len, 16)
1529 basic_string_char* __thiscall basic_string_char_insert_cstr_len(basic_string_char *this,
1530 MSVCP_size_t off, const char *str, MSVCP_size_t str_len)
1532 return basic_string_char_replace_cstr_len(this, off, 0, str, str_len);
1535 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IID@Z */
1536 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0D@Z */
1537 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_chn, 16)
1538 basic_string_char* __thiscall basic_string_char_insert_chn(basic_string_char *this,
1539 MSVCP_size_t off, MSVCP_size_t count, char ch)
1541 return basic_string_char_replace_ch(this, off, 0, count, ch);
1544 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADPADD@Z */
1545 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADPEADD@Z */
1546 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_ch, 12)
1547 char* __thiscall basic_string_char_insert_iter_ch(basic_string_char *this, char *pos, char ch)
1549 MSVCP_size_t off = basic_string_char__Pdif(pos, this->ptr);
1550 basic_string_char_insert_chn(this, off, 1, ch);
1551 return basic_string_char__Psum(this->ptr, off);
1554 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXPADID@Z */
1555 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXPEAD_KD@Z */
1556 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_chn, 16)
1557 void __thiscall basic_string_char_insert_iter_chn(basic_string_char *this,
1558 char *pos, MSVCP_size_t n, char ch)
1560 basic_string_char_insert_chn(this, basic_string_char__Pdif(pos, this->ptr), n, ch);
1563 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXPADPBD1@Z */
1564 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXPEADPEBD1@Z */
1565 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter, 16)
1566 void __thiscall basic_string_char_insert_iter(basic_string_char *this,
1567 char *pos, const char *beg, const char *end)
1569 basic_string_char_insert_cstr_len(this, basic_string_char__Pdif(pos, this->ptr),
1570 beg, basic_string_char__Pdif(end, beg));
1573 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXID@Z */
1574 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_KD@Z */
1575 DEFINE_THISCALL_WRAPPER(basic_string_char_resize_ch, 12)
1576 void __thiscall basic_string_char_resize_ch(
1577 basic_string_char *this, MSVCP_size_t size, char ch)
1579 TRACE("%p %lu %c\n", this, size, ch);
1581 if(size <= this->size)
1582 basic_string_char_erase(this, size, this->size);
1583 else
1584 basic_string_char_append_len_ch(this, size-this->size, ch);
1587 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXI@Z */
1588 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_K@Z */
1589 DEFINE_THISCALL_WRAPPER(basic_string_char_resize, 8)
1590 void __thiscall basic_string_char_resize(
1591 basic_string_char *this, MSVCP_size_t size)
1593 basic_string_char_resize_ch(this, size, '\0');
1596 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADXZ */
1597 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADXZ */
1598 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
1599 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
1600 DEFINE_THISCALL_WRAPPER(basic_string_char_begin, 4)
1601 char* __thiscall basic_string_char_begin(basic_string_char *this)
1603 TRACE("(%p)\n", this);
1604 basic_string_char__Freeze(this);
1605 return this->ptr;
1608 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADXZ */
1609 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADXZ */
1610 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
1611 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
1612 DEFINE_THISCALL_WRAPPER(basic_string_char_end, 4)
1613 char* __thiscall basic_string_char_end(basic_string_char *this)
1615 TRACE("(%p)\n", this);
1616 basic_string_char__Freeze(this);
1617 return this->ptr+this->size;
1620 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$reverse_iterator@PADDAADPADH@2@XZ */
1621 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$reverse_iterator@PEADDAEADPEAD_J@2@XZ */
1622 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$reverse_iterator@PBDDABDPBDH@2@XZ */
1623 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$reverse_iterator@PEBDDAEBDPEBD_J@2@XZ */
1624 DEFINE_THISCALL_WRAPPER(basic_string_char_rbegin, 8)
1625 String_reverse_iterator_char* __thiscall basic_string_char_rbegin(
1626 basic_string_char *this, String_reverse_iterator_char *ret)
1628 TRACE("(%p %p)\n", this, ret);
1629 ret->ptr = basic_string_char_end(this);
1630 return ret;
1633 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$reverse_iterator@PADDAADPADH@2@XZ */
1634 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$reverse_iterator@PEADDAEADPEAD_J@2@XZ */
1635 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$reverse_iterator@PBDDABDPBDH@2@XZ */
1636 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$reverse_iterator@PEBDDAEBDPEBD_J@2@XZ */
1637 DEFINE_THISCALL_WRAPPER(basic_string_char_rend, 8)
1638 String_reverse_iterator_char* __thiscall basic_string_char_rend(
1639 basic_string_char *this, String_reverse_iterator_char *ret)
1641 TRACE("(%p %p)\n", this, ret);
1642 ret->ptr = basic_string_char_begin(this);
1643 return ret;
1646 /* ?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
1647 /* ?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
1648 /* ?data@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
1649 /* ?data@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
1650 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_c_str, 4)
1651 const char* __thiscall MSVCP_basic_string_char_c_str(const basic_string_char *this)
1653 TRACE("%p\n", this);
1654 return this->ptr;
1657 /* ?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1658 /* ?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1659 /* ?length@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1660 /* ?length@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1661 DEFINE_THISCALL_WRAPPER(basic_string_char_length, 4)
1662 MSVCP_size_t __thiscall basic_string_char_length(basic_string_char *this)
1664 TRACE("%p\n", this);
1665 return this->size;
1668 /* ?max_size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1669 /* ?max_size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1670 DEFINE_THISCALL_WRAPPER(basic_string_char_max_size, 4)
1671 MSVCP_size_t __thiscall basic_string_char_max_size(const basic_string_char *this)
1673 TRACE("%p\n", this);
1674 return MSVCP_allocator_char_max_size(NULL)-1;
1677 /* ?capacity@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1678 /* ?capacity@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1679 DEFINE_THISCALL_WRAPPER(basic_string_char_capacity, 4)
1680 MSVCP_size_t __thiscall basic_string_char_capacity(basic_string_char *this)
1682 TRACE("%p\n", this);
1683 return this->res;
1686 /* ?reserve@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXI@Z */
1687 /* ?reserve@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_K@Z */
1688 DEFINE_THISCALL_WRAPPER(basic_string_char_reserve, 8)
1689 void __thiscall basic_string_char_reserve(basic_string_char *this, MSVCP_size_t size)
1691 MSVCP_size_t len;
1693 TRACE("%p %ld\n", this, size);
1695 len = this->size;
1696 if(len > size)
1697 return;
1699 basic_string_char__Grow(this, size, FALSE);
1700 basic_string_char__Eos(this, len);
1703 /* ?empty@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE_NXZ */
1704 /* ?empty@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_NXZ */
1705 DEFINE_THISCALL_WRAPPER(basic_string_char_empty, 4)
1706 MSVCP_bool __thiscall basic_string_char_empty(basic_string_char *this)
1708 TRACE("%p\n", this);
1709 return this->size == 0;
1712 /* ?swap@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXAAV12@@Z */
1713 /* ?swap@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXAEAV12@@Z */
1714 DEFINE_THISCALL_WRAPPER(basic_string_char_swap, 8)
1715 void __thiscall basic_string_char_swap(basic_string_char *this, basic_string_char *str)
1717 basic_string_char tmp;
1718 TRACE("%p %p\n", this, str);
1720 tmp = *this;
1721 *this = *str;
1722 *str = tmp;
1725 /* ?substr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV12@II@Z */
1726 /* ?substr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV12@_K0@Z */
1727 DEFINE_THISCALL_WRAPPER(basic_string_char_substr, 16)
1728 basic_string_char* __thiscall basic_string_char_substr(basic_string_char *this,
1729 basic_string_char *ret, MSVCP_size_t off, MSVCP_size_t len)
1731 TRACE("%p %lu %lu\n", this, off, len);
1733 basic_string_char_ctor_substr_alloc(ret, this, off, len, NULL);
1734 return ret;
1737 /* ?copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPADII@Z */
1738 /* ?copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEAD_K1@Z */
1739 DEFINE_THISCALL_WRAPPER(basic_string_char_copy, 16)
1740 MSVCP_size_t __thiscall basic_string_char_copy(const basic_string_char *this,
1741 char *dest, MSVCP_size_t count, MSVCP_size_t off)
1743 TRACE("%p %p %lu %lu\n", this, dest, count, off);
1745 if(off > this->size)
1746 _Xran();
1747 if(count > this->size-off)
1748 count = this->size-off;
1749 char_traits_char__Copy_s(dest, count, this->ptr+off, count);
1750 return count;
1753 /* ?get_allocator@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$allocator@D@2@XZ */
1754 /* ?get_allocator@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$allocator@D@2@XZ */
1755 DEFINE_THISCALL_WRAPPER(basic_string_char_get_allocator, 8)
1756 allocator* __thiscall basic_string_char_get_allocator(const basic_string_char *this, allocator *ret)
1758 TRACE("%p\n", this);
1759 return ret;
1762 static wchar_t* char_traits_wchar__Move_s(wchar_t *dest,
1763 MSVCP_size_t size, const wchar_t *src, MSVCP_size_t count)
1765 if(!dest || !src || size<count) {
1766 if(dest && size)
1767 dest[0] = '\0';
1768 _invalid_parameter(NULL, NULL, NULL, 0, 0);
1769 return dest;
1772 return memmove(dest, src, count);
1775 static wchar_t* char_traits_wchar__Copy_s(wchar_t *dest,
1776 MSVCP_size_t size, const wchar_t *src, MSVCP_size_t count)
1778 if(!dest || !src || size<count) {
1779 if(dest && size)
1780 dest[0] = '\0';
1781 _invalid_parameter(NULL, NULL, NULL, 0, 0);
1782 return dest;
1785 return memcpy(dest, src, count);
1788 static MSVCP_size_t char_traits_wchar_length(const wchar_t *str)
1790 return wcslen((WCHAR*)str);
1793 static wchar_t* char_traits_wchar_assignn(wchar_t *str, MSVCP_size_t num, wchar_t c)
1795 return memset(str, c, num);
1798 static int char_traits_wchar_compare(const wchar_t *s1,
1799 const wchar_t *s2, MSVCP_size_t count)
1801 int ret = memcmp(s1, s2, count);
1802 return (ret>0 ? 1 : (ret<0 ? -1 : 0));
1805 static const wchar_t* char_traits_wchar_find(const wchar_t *str,
1806 MSVCP_size_t range, const wchar_t *c)
1808 return memchr(str, *c, range);
1811 static MSVCP_bool basic_string_wchar_inside(
1812 basic_string_wchar *this, const wchar_t *ptr)
1814 return (ptr<this->ptr || ptr>=this->ptr+this->size) ? FALSE : TRUE;
1817 /* ?npos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@2IB */
1818 /* ?npos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@2_KB */
1819 const MSVCP_size_t basic_string_wchar_npos = -1;
1821 /* ?_C@?1??_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPBGXZ@4GB */
1822 /* ?_C@?1??_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEBGXZ@4GB */
1823 const wchar_t basic_string_wchar_nullbyte = '\0';
1825 /* ?_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPBGXZ */
1826 /* ?_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEBGXZ */
1827 const wchar_t* __cdecl basic_string_wchar__Nullstr(void)
1829 return &basic_string_wchar_nullbyte;
1832 /* ?_Refcnt@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEAAEPBG@Z */
1833 /* ?_Refcnt@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAAEAEPEBG@Z */
1834 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Refcnt, 8)
1835 unsigned short* __thiscall basic_string_wchar__Refcnt(basic_string_wchar *this, const wchar_t *ptr)
1837 TRACE("(%p %p)\n", this, ptr);
1838 return (unsigned short*)ptr-1;
1841 /* ?_Eos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXI@Z */
1842 /* ?_Eos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAX_K@Z */
1843 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Eos, 8)
1844 void __thiscall basic_string_wchar__Eos(basic_string_wchar *this, MSVCP_size_t len)
1846 this->size = len;
1847 this->ptr[len] = 0;
1850 /* ?_Tidy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEX_N@Z */
1851 /* ?_Tidy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAX_N@Z */
1852 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Tidy, 8)
1853 void __thiscall basic_string_wchar__Tidy(basic_string_wchar *this, MSVCP_bool built)
1855 TRACE("(%p %d)\n", this, built);
1857 if(!this->ptr || !built);
1858 else if(!this->ptr[-1] || (unsigned short)this->ptr[-1]==FROZEN)
1859 MSVCP_allocator_wchar_deallocate(NULL, this->ptr, this->res+2);
1860 else
1861 this->ptr[-1]--;
1863 memset(this, 0, sizeof(*this));
1866 /* ?_Grow@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAE_NI_N@Z */
1867 /* ?_Grow@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAA_N_K_N@Z */
1868 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Grow, 12)
1869 MSVCP_bool __thiscall basic_string_wchar__Grow(basic_string_wchar *this, MSVCP_size_t new_size, MSVCP_bool trim)
1871 if(!new_size) {
1872 if(trim)
1873 basic_string_wchar__Tidy(this, TRUE);
1874 else if(this->ptr)
1875 basic_string_wchar__Eos(this, 0);
1876 } else if(this->res<new_size || trim ||
1877 (this->ptr && this->ptr[-1] && (unsigned short)this->ptr[-1]!=FROZEN)) {
1878 MSVCP_size_t new_res = new_size, len = this->size;
1879 wchar_t *ptr;
1881 if(!trim && this->ptr && !this->ptr[-1]) {
1882 new_res |= 0xf;
1883 if(new_res/3 < this->res/2)
1884 new_res = this->res + this->res/2;
1887 ptr = MSVCP_allocator_wchar_allocate(this->allocator, new_res+2);
1888 if(!ptr) {
1889 new_res = new_size;
1890 ptr = MSVCP_allocator_wchar_allocate(this->allocator, new_size+2);
1892 if(!ptr) {
1893 ERR("Out of memory\n");
1894 return FALSE;
1897 *ptr = 0;
1898 if(this->ptr)
1899 char_traits_wchar__Copy_s(ptr+1, new_size, this->ptr, this->size);
1900 basic_string_wchar__Tidy(this, TRUE);
1901 this->ptr = ptr+1;
1902 this->res = new_res;
1903 basic_string_wchar__Eos(this, len>new_res ? new_res : len);
1906 return new_size>0;
1909 /* ?_Split@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXXZ */
1910 /* ?_Split@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAXXZ */
1911 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Split, 4)
1912 void __thiscall basic_string_wchar__Split(basic_string_wchar *this)
1914 MSVCP_size_t len;
1915 wchar_t *ptr;
1917 TRACE("(%p)\n", this);
1919 if(!this->ptr || !this->ptr[-1] || (unsigned short)this->ptr[-1]==FROZEN)
1920 return;
1922 ptr = this->ptr;
1923 len = this->size;
1924 basic_string_wchar__Tidy(this, TRUE);
1925 if(basic_string_wchar__Grow(this, len, FALSE)) {
1926 char_traits_wchar__Copy_s(this->ptr, this->res, ptr, len);
1927 basic_string_wchar__Eos(this, len);
1931 /* ?_Freeze@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXXZ */
1932 /* ?_Freeze@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAXXZ */
1933 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Freeze, 4)
1934 void __thiscall basic_string_wchar__Freeze(basic_string_wchar *this)
1936 TRACE("(%p)\n", this);
1937 basic_string_wchar__Split(this);
1938 if(this->ptr)
1939 this->ptr[-1] = FROZEN;
1942 /* ?_Copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXI@Z */
1943 /* ?_Copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAX_K@Z */
1944 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Copy, 8)
1945 void __thiscall basic_string_wchar__Copy(basic_string_wchar *this, MSVCP_size_t copy_len)
1947 TRACE("%p %lu\n", this, copy_len);
1949 if(!basic_string_wchar__Grow(this, copy_len, FALSE))
1950 return;
1951 basic_string_wchar__Eos(this, copy_len);
1954 /* ?_Pdif@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAIPBG0@Z */
1955 /* ?_Pdif@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CA_KPEBG0@Z */
1956 MSVCP_size_t __cdecl basic_string_wchar__Pdif(const wchar_t *i1, const wchar_t *i2)
1958 TRACE("(%p %p)\n", i1, i2);
1959 return !i1 ? 0 : i1-i2;
1962 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPAGPAGI@Z */
1963 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEAGPEAG_K@Z */
1964 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPBGPBGI@Z */
1965 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEBGPEBG_K@Z */
1966 wchar_t* __cdecl basic_string_wchar__Psum(wchar_t *iter, MSVCP_size_t add)
1968 TRACE("(%p %lu)\n", iter, add);
1969 return iter ? iter+add : iter;
1972 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@II@Z */
1973 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0@Z */
1974 DEFINE_THISCALL_WRAPPER(basic_string_wchar_erase, 12)
1975 basic_string_wchar* __thiscall basic_string_wchar_erase(
1976 basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t len)
1978 TRACE("%p %lu %lu\n", this, pos, len);
1980 if(pos > this->size)
1981 _Xran();
1983 if(len > this->size-pos)
1984 len = this->size-pos;
1986 if(len) {
1987 basic_string_wchar__Split(this);
1988 char_traits_wchar__Move_s(this->ptr+pos, this->res-pos,
1989 this->ptr+pos+len, this->size-pos-len);
1990 basic_string_wchar__Eos(this, this->size-len);
1993 return this;
1996 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGPAG0@Z */
1997 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGPEAG0@Z */
1998 DEFINE_THISCALL_WRAPPER(basic_string_wchar_erase_iter, 12)
1999 wchar_t* __thiscall basic_string_wchar_erase_iter(basic_string_wchar *this, wchar_t *beg, wchar_t *end)
2001 MSVCP_size_t pos = basic_string_wchar__Pdif(beg, this->ptr);
2002 basic_string_wchar_erase(this, pos, basic_string_wchar__Pdif(end, beg));
2003 return basic_string_wchar__Psum(this->ptr, pos);
2006 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGPAG@Z */
2007 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGPEAG@Z */
2008 DEFINE_THISCALL_WRAPPER(basic_string_wchar_erase_beg, 8)
2009 wchar_t* __thiscall basic_string_wchar_erase_beg(basic_string_wchar *this, wchar_t *beg)
2011 MSVCP_size_t pos = beg-this->ptr;
2012 basic_string_wchar_erase(this, pos, 1);
2013 return this->ptr+pos;
2016 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@II@Z */
2017 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
2018 DEFINE_THISCALL_WRAPPER(basic_string_wchar_assign_substr, 16)
2019 basic_string_wchar* __thiscall basic_string_wchar_assign_substr(
2020 basic_string_wchar *this, const basic_string_wchar *assign,
2021 MSVCP_size_t pos, MSVCP_size_t len)
2023 TRACE("%p %p %lu %lu\n", this, assign, pos, len);
2025 if(assign->size < pos)
2026 _Xran();
2028 if(len > assign->size-pos)
2029 len = assign->size-pos;
2031 if(this == assign) {
2032 basic_string_wchar_erase(this, pos+len, basic_string_wchar_npos);
2033 basic_string_wchar_erase(this, 0, pos);
2034 } else if(basic_string_wchar__Grow(this, len, FALSE)) {
2035 char_traits_wchar__Copy_s(this->ptr, this->res,
2036 assign->ptr+pos, len);
2037 basic_string_wchar__Eos(this, len);
2040 return this;
2043 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBGI@Z */
2044 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG_K@Z */
2045 DEFINE_THISCALL_WRAPPER(basic_string_wchar_assign_cstr_len, 12)
2046 basic_string_wchar* __thiscall basic_string_wchar_assign_cstr_len(
2047 basic_string_wchar *this, const wchar_t *str, MSVCP_size_t len)
2049 TRACE("%p %s %lu\n", this, debugstr_w(str), len);
2051 if(basic_string_wchar_inside(this, str))
2052 return basic_string_wchar_assign_substr(this, this, str-this->ptr, len);
2053 else if(basic_string_wchar__Grow(this, len, FALSE)) {
2054 char_traits_wchar__Copy_s(this->ptr, this->res, str, len);
2055 basic_string_wchar__Eos(this, len);
2058 return this;
2061 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@@Z */
2062 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@@Z */
2063 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@ABV01@@Z */
2064 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@AEBV01@@Z */
2065 DEFINE_THISCALL_WRAPPER(basic_string_wchar_assign, 8)
2066 basic_string_wchar* __thiscall basic_string_wchar_assign(
2067 basic_string_wchar *this, const basic_string_wchar *assign)
2069 return basic_string_wchar_assign_substr(this, assign,
2070 0, basic_string_wchar_npos);
2073 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG@Z */
2074 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG@Z */
2075 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@PBG@Z */
2076 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@PEBG@Z */
2077 DEFINE_THISCALL_WRAPPER(basic_string_wchar_assign_cstr, 8)
2078 basic_string_wchar* __thiscall basic_string_wchar_assign_cstr(
2079 basic_string_wchar *this, const wchar_t *str)
2081 return basic_string_wchar_assign_cstr_len(this, str,
2082 char_traits_wchar_length(str));
2085 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@G@Z */
2086 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@G@Z */
2087 DEFINE_THISCALL_WRAPPER(basic_string_wchar_assign_ch, 8)
2088 basic_string_wchar* __thiscall basic_string_wchar_assign_ch(
2089 basic_string_wchar *this, wchar_t ch)
2091 return basic_string_wchar_assign_cstr_len(this, &ch, 1);
2094 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IG@Z */
2095 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KG@Z */
2096 DEFINE_THISCALL_WRAPPER(basic_string_wchar_assignn, 12)
2097 basic_string_wchar* __thiscall basic_string_wchar_assignn(
2098 basic_string_wchar *this, MSVCP_size_t count, wchar_t ch)
2100 TRACE("%p %ld %c\n", this, count, ch);
2102 basic_string_wchar__Grow(this, count, FALSE);
2103 char_traits_wchar_assignn(this->ptr, count, ch);
2104 basic_string_wchar__Eos(this, count);
2105 return this;
2108 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG0@Z */
2109 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG0@Z */
2110 DEFINE_THISCALL_WRAPPER(basic_string_wchar_assign_ptr_ptr, 12)
2111 basic_string_wchar* __thiscall basic_string_wchar_assign_ptr_ptr(
2112 basic_string_wchar *this, const wchar_t *first, const wchar_t *last)
2114 return basic_string_wchar_assign_cstr_len(this, first, last-first);
2117 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBGIABV?$allocator@G@1@@Z */
2118 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG_KAEBV?$allocator@G@1@@Z */
2119 DEFINE_THISCALL_WRAPPER(basic_string_wchar_ctor_cstr_len_alloc, 16)
2120 basic_string_wchar* __thiscall basic_string_wchar_ctor_cstr_len_alloc(
2121 basic_string_wchar *this, const wchar_t *str, MSVCP_size_t len, const void *alloc)
2123 TRACE("%p %s %ld\n", this, debugstr_w(str), len);
2125 basic_string_wchar__Tidy(this, FALSE);
2126 basic_string_wchar_assign_cstr_len(this, str, len);
2127 return this;
2130 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV01@IIABV?$allocator@G@1@@Z */
2131 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV01@_K1AEBV?$allocator@G@1@@Z */
2132 DEFINE_THISCALL_WRAPPER(basic_string_wchar_ctor_substr_alloc, 20)
2133 basic_string_wchar* __thiscall basic_string_wchar_ctor_substr_alloc(
2134 basic_string_wchar *this, const basic_string_wchar *assign,
2135 MSVCP_size_t pos, MSVCP_size_t len, const void *alloc)
2137 TRACE("%p %p %lu %lu\n", this, assign, pos, len);
2139 basic_string_wchar__Tidy(this, FALSE);
2140 basic_string_wchar_assign_substr(this, assign, pos, len);
2141 return this;
2144 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBGABV?$allocator@G@1@@Z */
2145 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBGAEBV?$allocator@G@1@@Z */
2146 DEFINE_THISCALL_WRAPPER(basic_string_wchar_ctor_cstr_alloc, 12)
2147 basic_string_wchar* __thiscall basic_string_wchar_ctor_cstr_alloc(
2148 basic_string_wchar *this, const wchar_t *str, const void *alloc)
2150 TRACE("%p %s\n", this, debugstr_w(str));
2152 basic_string_wchar__Tidy(this, FALSE);
2153 basic_string_wchar_assign_cstr(this, str);
2154 return this;
2157 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@IGABV?$allocator@G@1@@Z */
2158 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@_KGAEBV?$allocator@G@1@@Z */
2159 DEFINE_THISCALL_WRAPPER(basic_string_wchar_ctor_ch_alloc, 16)
2160 basic_string_wchar* __thiscall basic_string_wchar_ctor_ch_alloc(basic_string_wchar *this,
2161 MSVCP_size_t count, wchar_t ch, const void *alloc)
2163 TRACE("%p %ld %c\n", this, count, ch);
2165 basic_string_wchar__Tidy(this, FALSE);
2166 basic_string_wchar_assignn(this, count, ch);
2167 return this;
2170 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBG0ABV?$allocator@G@1@@Z */
2171 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG0AEBV?$allocator@G@1@@Z */
2172 DEFINE_THISCALL_WRAPPER(basic_string_wchar_ctor_iter, 16)
2173 basic_string_wchar* __thiscall basic_string_wchar_ctor_iter(basic_string_wchar *this,
2174 const wchar_t *first, const wchar_t *last, allocator *alloc)
2176 TRACE("(%p %p %p %p)\n", this, first, last, alloc);
2178 basic_string_wchar__Tidy(this, FALSE);
2179 basic_string_wchar_assign_cstr_len(this, first, basic_string_wchar__Pdif(last, first));
2180 return this;
2183 /* ??_F?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */
2184 /* ??_F?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */
2185 DEFINE_THISCALL_WRAPPER(basic_string_wchar_ctor, 4)
2186 basic_string_wchar* __thiscall basic_string_wchar_ctor(basic_string_wchar *this)
2188 TRACE("%p\n", this);
2190 basic_string_wchar__Tidy(this, FALSE);
2191 return this;
2194 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV?$allocator@G@1@@Z */
2195 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV?$allocator@G@1@@Z */
2196 DEFINE_THISCALL_WRAPPER(basic_string_wchar_ctor_alloc, 8)
2197 basic_string_wchar* __thiscall basic_string_wchar_ctor_alloc(
2198 basic_string_wchar *this, const void *alloc)
2200 TRACE("%p %p\n", this, alloc);
2202 basic_string_wchar__Tidy(this, FALSE);
2203 return this;
2206 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV01@@Z */
2207 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV01@@Z */
2208 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_copy_ctor, 8)
2209 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_copy_ctor(
2210 basic_string_wchar *this, const basic_string_wchar *copy)
2212 TRACE("%p %p\n", this, copy);
2214 basic_string_wchar__Tidy(this, FALSE);
2215 basic_string_wchar_assign(this, copy);
2216 return this;
2219 /* ??1?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@XZ */
2220 /* ??1?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@XZ */
2221 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_dtor, 4)
2222 void __thiscall MSVCP_basic_string_wchar_dtor(basic_string_wchar *this)
2224 TRACE("%p\n", this);
2225 basic_string_wchar__Tidy(this, TRUE);
2228 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIPBGI@Z */
2229 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0PEBG0@Z */
2230 DEFINE_THISCALL_WRAPPER(basic_string_wchar_compare_substr_cstr_len, 20)
2231 int __thiscall basic_string_wchar_compare_substr_cstr_len(
2232 const basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t num,
2233 const wchar_t *str, MSVCP_size_t count)
2235 int ans;
2237 TRACE("%p %lu %lu %s %lu\n", this, pos, num, debugstr_w(str), count);
2239 if(this->size < pos)
2240 _Xran();
2242 if(pos+num > this->size)
2243 num = this->size-pos;
2245 ans = char_traits_wchar_compare(this->ptr+pos,
2246 str, num>count ? count : num);
2247 if(ans)
2248 return ans;
2250 if(num > count)
2251 ans = 1;
2252 else if(num < count)
2253 ans = -1;
2254 return ans;
2257 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHPBG@Z */
2258 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAHPEBG@Z */
2259 DEFINE_THISCALL_WRAPPER(basic_string_wchar_compare_cstr, 8)
2260 int __thiscall basic_string_wchar_compare_cstr(
2261 const basic_string_wchar *this, const wchar_t *str)
2263 return basic_string_wchar_compare_substr_cstr_len(this, 0, this->size,
2264 str, char_traits_wchar_length(str));
2267 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIABV12@II@Z */
2268 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0AEBV12@00@Z */
2269 DEFINE_THISCALL_WRAPPER(basic_string_wchar_compare_substr_substr, 24)
2270 int __thiscall basic_string_wchar_compare_substr_substr(
2271 const basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t num,
2272 const basic_string_wchar *compare, MSVCP_size_t off, MSVCP_size_t count)
2274 TRACE("%p %lu %lu %p %lu %lu\n", this, pos, num, compare, off, count);
2276 if(compare->size < off)
2277 _Xran();
2279 if(off+count > compare->size)
2280 count = compare->size-off;
2282 return basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2283 compare->ptr+off, count);
2286 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIABV12@@Z */
2287 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0AEBV12@@Z */
2288 DEFINE_THISCALL_WRAPPER(basic_string_wchar_compare_substr, 16)
2289 int __thiscall basic_string_wchar_compare_substr(
2290 const basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t num,
2291 const basic_string_wchar *compare)
2293 return basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2294 compare->ptr, compare->size);
2297 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHABV12@@Z */
2298 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAHAEBV12@@Z */
2299 DEFINE_THISCALL_WRAPPER(basic_string_wchar_compare, 8)
2300 int __thiscall basic_string_wchar_compare(
2301 const basic_string_wchar *this, const basic_string_wchar *compare)
2303 return basic_string_wchar_compare_substr_cstr_len(this, 0, this->size,
2304 compare->ptr, compare->size);
2307 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIPBG@Z */
2308 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0PEBG@Z */
2309 DEFINE_THISCALL_WRAPPER(basic_string_wchar_compare_substr_cstr, 16)
2310 int __thiscall basic_string_wchar_compare_substr_cstr(const basic_string_wchar *this,
2311 MSVCP_size_t pos, MSVCP_size_t num, const wchar_t *str)
2313 return basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2314 str, char_traits_wchar_length(str));
2317 /* ??$?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 */
2318 /* ??$?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 */
2319 /* ??8std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2320 /* ??8std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2321 MSVCP_bool __cdecl basic_string_wchar_equal(
2322 const basic_string_wchar *left, const basic_string_wchar *right)
2324 return basic_string_wchar_compare(left, right) == 0;
2327 /* ??$?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 */
2328 /* ??$?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 */
2329 /* ??8std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2330 /* ??8std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2331 MSVCP_bool __cdecl basic_string_wchar_equal_str_cstr(
2332 const basic_string_wchar *left, const wchar_t *right)
2334 return basic_string_wchar_compare_cstr(left, right) == 0;
2337 /* ??$?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 */
2338 /* ??$?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 */
2339 /* ??8std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2340 /* ??8std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2341 MSVCP_bool __cdecl basic_string_wchar_equal_cstr_str(
2342 const wchar_t *left, const basic_string_wchar *right)
2344 return basic_string_wchar_compare_cstr(right, left) == 0;
2347 /* ??$?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 */
2348 /* ??$?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 */
2349 /* ??9std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2350 /* ??9std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2351 MSVCP_bool __cdecl basic_string_wchar_not_equal(
2352 const basic_string_wchar *left, const basic_string_wchar *right)
2354 return basic_string_wchar_compare(left, right) != 0;
2357 /* ??$?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 */
2358 /* ??$?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 */
2359 /* ??9std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2360 /* ??9std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2361 MSVCP_bool __cdecl basic_string_wchar_not_equal_str_cstr(
2362 const basic_string_wchar *left, const wchar_t *right)
2364 return basic_string_wchar_compare_cstr(left, right) != 0;
2367 /* ??$?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 */
2368 /* ??$?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 */
2369 /* ??9std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2370 /* ??9std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2371 MSVCP_bool __cdecl basic_string_wchar_not_equal_cstr_str(
2372 const wchar_t *left, const basic_string_wchar *right)
2374 return basic_string_wchar_compare_cstr(right, left) != 0;
2377 /* ??$?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 */
2378 /* ??$?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 */
2379 /* ??Mstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2380 /* ??Mstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2381 MSVCP_bool __cdecl basic_string_wchar_lower(
2382 const basic_string_wchar *left, const basic_string_wchar *right)
2384 return basic_string_wchar_compare(left, right) < 0;
2387 /* ??$?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 */
2388 /* ??$?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 */
2389 /* ??Mstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2390 /* ??Mstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2391 MSVCP_bool __cdecl basic_string_wchar_lower_bstr_cstr(
2392 const basic_string_wchar *left, const wchar_t *right)
2394 return basic_string_wchar_compare_cstr(left, right) < 0;
2397 /* ??$?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 */
2398 /* ??$?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 */
2399 /* ??Mstd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2400 /* ??Mstd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2401 MSVCP_bool __cdecl basic_string_wchar_lower_cstr_bstr(
2402 const wchar_t *left, const basic_string_wchar *right)
2404 return basic_string_wchar_compare_cstr(right, left) > 0;
2407 /* ??$?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 */
2408 /* ??$?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 */
2409 /* ??Nstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2410 /* ??Nstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2411 MSVCP_bool __cdecl basic_string_wchar_leq(
2412 const basic_string_wchar *left, const basic_string_wchar *right)
2414 return basic_string_wchar_compare(left, right) <= 0;
2417 /* ??$?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 */
2418 /* ??$?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 */
2419 /* ??Nstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2420 /* ??Nstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2421 MSVCP_bool __cdecl basic_string_wchar_leq_bstr_cstr(
2422 const basic_string_wchar *left, const wchar_t *right)
2424 return basic_string_wchar_compare_cstr(left, right) <= 0;
2427 /* ??$?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 */
2428 /* ??$?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 */
2429 /* ??Nstd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2430 /* ??Nstd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2431 MSVCP_bool __cdecl basic_string_wchar_leq_cstr_bstr(
2432 const wchar_t *left, const basic_string_wchar *right)
2434 return basic_string_wchar_compare_cstr(right, left) >= 0;
2437 /* ??$?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 */
2438 /* ??$?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 */
2439 /* ??Ostd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2440 /* ??Ostd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2441 MSVCP_bool __cdecl basic_string_wchar_greater(
2442 const basic_string_wchar *left, const basic_string_wchar *right)
2444 return basic_string_wchar_compare(left, right) > 0;
2447 /* ??$?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 */
2448 /* ??$?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 */
2449 /* ??Ostd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2450 /* ??Ostd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2451 MSVCP_bool __cdecl basic_string_wchar_greater_bstr_cstr(
2452 const basic_string_wchar *left, const wchar_t *right)
2454 return basic_string_wchar_compare_cstr(left, right) > 0;
2457 /* ??$?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 */
2458 /* ??$?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 */
2459 /* ??Ostd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2460 /* ??Ostd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2461 MSVCP_bool __cdecl basic_string_wchar_greater_cstr_bstr(
2462 const wchar_t *left, const basic_string_wchar *right)
2464 return basic_string_wchar_compare_cstr(right, left) < 0;
2467 /* ??$?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 */
2468 /* ??$?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 */
2469 /* ??Pstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2470 /* ??Pstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2471 MSVCP_bool __cdecl basic_string_wchar_geq(
2472 const basic_string_wchar *left, const basic_string_wchar *right)
2474 return basic_string_wchar_compare(left, right) >= 0;
2477 /* ??$?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 */
2478 /* ??$?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 */
2479 /* ??Pstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2480 /* ??Pstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2481 MSVCP_bool __cdecl basic_string_wchar_geq_bstr_cstr(
2482 const basic_string_wchar *left, const wchar_t *right)
2484 return basic_string_wchar_compare_cstr(left, right) >= 0;
2487 /* ??$?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 */
2488 /* ??$?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 */
2489 /* ??Pstd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2490 /* ??Pstd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2491 MSVCP_bool __cdecl basic_string_wchar_geq_cstr_bstr(
2492 const wchar_t *left, const basic_string_wchar *right)
2494 return basic_string_wchar_compare_cstr(right, left) <= 0;
2497 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2498 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2499 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_cstr_substr, 16)
2500 MSVCP_size_t __thiscall basic_string_wchar_find_cstr_substr(
2501 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos, MSVCP_size_t len)
2503 const wchar_t *p, *end;
2505 TRACE("%p %s %lu %lu\n", this, debugstr_w(find), pos, len);
2507 if(len==0 && pos<=this->size)
2508 return pos;
2510 end = this->ptr+this->size-len+1;
2511 for(p=this->ptr+pos; p<end; p++) {
2512 p = char_traits_wchar_find(p, end-p, find);
2513 if(!p)
2514 break;
2516 if(!char_traits_wchar_compare(p, find, len))
2517 return p-this->ptr;
2520 return basic_string_wchar_npos;
2523 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2524 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2525 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_off, 12)
2526 MSVCP_size_t __thiscall basic_string_wchar_find_off(
2527 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2529 return basic_string_wchar_find_cstr_substr(this, find->ptr, off, find->size);
2532 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2533 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2534 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_ch, 12)
2535 MSVCP_size_t __thiscall basic_string_wchar_find_ch(
2536 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t pos)
2538 return basic_string_wchar_find_cstr_substr(this, &ch, pos, 1);
2541 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2542 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2543 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_cstr_off, 12)
2544 MSVCP_size_t __thiscall basic_string_wchar_find_cstr_off(
2545 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos)
2547 return basic_string_wchar_find_cstr_substr(this, find, pos,
2548 char_traits_wchar_length(find));
2551 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2552 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2553 DEFINE_THISCALL_WRAPPER(basic_string_wchar_rfind_cstr_substr, 16)
2554 MSVCP_size_t __thiscall basic_string_wchar_rfind_cstr_substr(
2555 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos, MSVCP_size_t len)
2557 const wchar_t *p, *end;
2559 TRACE("%p %s %lu %lu\n", this, debugstr_w(find), pos, len);
2561 if(len==0)
2562 return pos<this->size ? pos : this->size;
2564 if(len > this->size)
2565 return basic_string_wchar_npos;
2567 if(pos > this->size-len+1)
2568 pos = this->size-len+1;
2569 end = this->ptr;
2570 for(p=end+pos-1; p>=end; p--) {
2571 if(*p==*find && !char_traits_wchar_compare(p, find, len))
2572 return p-this->ptr;
2575 return basic_string_wchar_npos;
2578 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2579 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2580 DEFINE_THISCALL_WRAPPER(basic_string_wchar_rfind_off, 12)
2581 MSVCP_size_t __thiscall basic_string_wchar_rfind_off(
2582 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2584 return basic_string_wchar_rfind_cstr_substr(this, find->ptr, off, find->size);
2587 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2588 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2589 DEFINE_THISCALL_WRAPPER(basic_string_wchar_rfind_ch, 12)
2590 MSVCP_size_t __thiscall basic_string_wchar_rfind_ch(
2591 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t pos)
2593 return basic_string_wchar_rfind_cstr_substr(this, &ch, pos, 1);
2596 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2597 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2598 DEFINE_THISCALL_WRAPPER(basic_string_wchar_rfind_cstr_off, 12)
2599 MSVCP_size_t __thiscall basic_string_wchar_rfind_cstr_off(
2600 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos)
2602 return basic_string_wchar_rfind_cstr_substr(this, find, pos,
2603 char_traits_wchar_length(find));
2606 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2607 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2608 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_first_not_of_cstr_substr, 16)
2609 MSVCP_size_t __thiscall basic_string_wchar_find_first_not_of_cstr_substr(
2610 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len)
2612 const wchar_t *p, *end;
2614 TRACE("%p %p %lu %lu\n", this, find, off, len);
2616 if(off<this->size) {
2617 end = this->ptr+this->size;
2618 for(p=this->ptr+off; p<end; p++)
2619 if(!char_traits_wchar_find(find, len, p))
2620 return p-this->ptr;
2623 return basic_string_wchar_npos;
2626 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2627 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2628 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_first_not_of, 12)
2629 MSVCP_size_t __thiscall basic_string_wchar_find_first_not_of(
2630 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2632 return basic_string_wchar_find_first_not_of_cstr_substr(this,
2633 find->ptr, off, find->size);
2636 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2637 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2638 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_first_not_of_ch, 12)
2639 MSVCP_size_t __thiscall basic_string_wchar_find_first_not_of_ch(
2640 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off)
2642 return basic_string_wchar_find_first_not_of_cstr_substr(this, &ch, off, 1);
2645 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2646 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2647 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_first_not_of_cstr, 12)
2648 MSVCP_size_t __thiscall basic_string_wchar_find_first_not_of_cstr(
2649 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off)
2651 return basic_string_wchar_find_first_not_of_cstr_substr(
2652 this, find, off, char_traits_wchar_length(find));
2655 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2656 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2657 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_first_of_cstr_substr, 16)
2658 MSVCP_size_t __thiscall basic_string_wchar_find_first_of_cstr_substr(
2659 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len)
2661 const wchar_t *p, *end;
2663 TRACE("%p %p %lu %lu\n", this, find, off, len);
2665 if(len>0 && off<this->size) {
2666 end = this->ptr+this->size;
2667 for(p=this->ptr+off; p<end; p++)
2668 if(char_traits_wchar_find(find, len, p))
2669 return p-this->ptr;
2672 return basic_string_wchar_npos;
2675 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2676 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2677 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_first_of, 12)
2678 MSVCP_size_t __thiscall basic_string_wchar_find_first_of(
2679 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2681 return basic_string_wchar_find_first_of_cstr_substr(this,
2682 find->ptr, off, find->size);
2685 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2686 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2687 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_first_of_ch, 12)
2688 MSVCP_size_t __thiscall basic_string_wchar_find_first_of_ch(
2689 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off)
2691 return basic_string_wchar_find_first_of_cstr_substr(this, &ch, off, 1);
2694 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2695 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2696 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_first_of_cstr, 12)
2697 MSVCP_size_t __thiscall basic_string_wchar_find_first_of_cstr(
2698 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off)
2700 return basic_string_wchar_find_first_of_cstr_substr(
2701 this, find, off, char_traits_wchar_length(find));
2704 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2705 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2706 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_last_not_of_cstr_substr, 16)
2707 MSVCP_size_t __thiscall basic_string_wchar_find_last_not_of_cstr_substr(
2708 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len)
2710 const wchar_t *p, *beg;
2712 TRACE("%p %p %lu %lu\n", this, find, off, len);
2714 if(len>0 && this->size>0) {
2715 if(off >= this->size)
2716 off = this->size-1;
2718 beg = this->ptr;
2719 for(p=beg+off; p>=beg; p--)
2720 if(!char_traits_wchar_find(find, len, p))
2721 return p-beg;
2724 return basic_string_wchar_npos;
2727 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2728 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2729 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_last_not_of, 12)
2730 MSVCP_size_t __thiscall basic_string_wchar_find_last_not_of(
2731 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2733 return basic_string_wchar_find_last_not_of_cstr_substr(this,
2734 find->ptr, off, find->size);
2737 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2738 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2739 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_last_not_of_ch, 12)
2740 MSVCP_size_t __thiscall basic_string_wchar_find_last_not_of_ch(
2741 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off)
2743 return basic_string_wchar_find_last_not_of_cstr_substr(this, &ch, off, 1);
2746 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2747 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2748 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_last_not_of_cstr, 12)
2749 MSVCP_size_t __thiscall basic_string_wchar_find_last_not_of_cstr(
2750 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off)
2752 return basic_string_wchar_find_last_not_of_cstr_substr(
2753 this, find, off, char_traits_wchar_length(find));
2756 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2757 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2758 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_last_of_cstr_substr, 16)
2759 MSVCP_size_t __thiscall basic_string_wchar_find_last_of_cstr_substr(
2760 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len)
2762 const wchar_t *p, *beg;
2764 TRACE("%p %p %lu %lu\n", this, find, off, len);
2766 if(len>0 && this->size>0) {
2767 if(off >= this->size)
2768 off = this->size-1;
2770 beg = this->ptr;
2771 for(p=beg+off; p>=beg; p--)
2772 if(char_traits_wchar_find(find, len, p))
2773 return p-beg;
2776 return basic_string_wchar_npos;
2779 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2780 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2781 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_last_of, 12)
2782 MSVCP_size_t __thiscall basic_string_wchar_find_last_of(
2783 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2785 return basic_string_wchar_find_last_of_cstr_substr(this,
2786 find->ptr, off, find->size);
2789 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2790 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2791 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_last_of_ch, 12)
2792 MSVCP_size_t __thiscall basic_string_wchar_find_last_of_ch(
2793 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off)
2795 return basic_string_wchar_find_last_of_cstr_substr(this, &ch, off, 1);
2798 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2799 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2800 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_last_of_cstr, 12)
2801 MSVCP_size_t __thiscall basic_string_wchar_find_last_of_cstr(
2802 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off)
2804 return basic_string_wchar_find_last_of_cstr_substr(
2805 this, find, off, char_traits_wchar_length(find));
2808 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@II@Z */
2809 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
2810 DEFINE_THISCALL_WRAPPER(basic_string_wchar_append_substr, 16)
2811 basic_string_wchar* __thiscall basic_string_wchar_append_substr(basic_string_wchar *this,
2812 const basic_string_wchar *append, MSVCP_size_t offset, MSVCP_size_t count)
2814 TRACE("%p %p %lu %lu\n", this, append, offset, count);
2816 if(append->size < offset)
2817 _Xran();
2819 if(count > append->size-offset)
2820 count = append->size-offset;
2822 if(basic_string_wchar_npos-this->size<=count || this->size+count<this->size)
2823 _Xlen();
2825 if(basic_string_wchar__Grow(this, this->size+count, FALSE)) {
2826 char_traits_wchar__Copy_s(this->ptr+this->size,
2827 this->res-this->size, append->ptr+offset, count);
2828 basic_string_wchar__Eos(this, this->size+count);
2831 return this;
2834 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBGI@Z */
2835 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG_K@Z */
2836 DEFINE_THISCALL_WRAPPER(basic_string_wchar_append_cstr_len, 12)
2837 basic_string_wchar* __thiscall basic_string_wchar_append_cstr_len(
2838 basic_string_wchar *this, const wchar_t *append, MSVCP_size_t count)
2840 TRACE("%p %s %lu\n", this, debugstr_w(append), count);
2842 if(basic_string_wchar_inside(this, append))
2843 return basic_string_wchar_append_substr(this, this, append-this->ptr, count);
2845 if(basic_string_wchar_npos-this->size<=count || this->size+count<this->size)
2846 _Xlen();
2848 if(basic_string_wchar__Grow(this, this->size+count, FALSE)) {
2849 char_traits_wchar__Copy_s(this->ptr+this->size,
2850 this->res-this->size, append, count);
2851 basic_string_wchar__Eos(this, this->size+count);
2854 return this;
2857 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IG@Z */
2858 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KG@Z */
2859 DEFINE_THISCALL_WRAPPER(basic_string_wchar_append_len_ch, 12)
2860 basic_string_wchar* __thiscall basic_string_wchar_append_len_ch(
2861 basic_string_wchar *this, MSVCP_size_t count, wchar_t ch)
2863 TRACE("%p %lu %c\n", this, count, ch);
2865 if(basic_string_wchar_npos-this->size <= count)
2866 _Xlen();
2868 if(basic_string_wchar__Grow(this, this->size+count, FALSE)) {
2869 char_traits_wchar_assignn(this->ptr+this->size, count, ch);
2870 basic_string_wchar__Eos(this, this->size+count);
2873 return this;
2876 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@@Z */
2877 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@@Z */
2878 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@ABV01@@Z */
2879 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@AEBV01@@Z */
2880 DEFINE_THISCALL_WRAPPER(basic_string_wchar_append, 8)
2881 basic_string_wchar* __thiscall basic_string_wchar_append(
2882 basic_string_wchar *this, const basic_string_wchar *append)
2884 return basic_string_wchar_append_substr(this, append,
2885 0, basic_string_wchar_npos);
2888 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@G@Z */
2889 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@G@Z */
2890 DEFINE_THISCALL_WRAPPER(basic_string_wchar_append_ch, 8)
2891 basic_string_wchar* __thiscall basic_string_wchar_append_ch(
2892 basic_string_wchar *this, wchar_t ch)
2894 return basic_string_wchar_append_len_ch(this, 1, ch);
2897 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG0@Z */
2898 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG0@Z */
2899 DEFINE_THISCALL_WRAPPER(basic_string_wchar_append_beg_end, 12)
2900 basic_string_wchar* __thiscall basic_string_wchar_append_beg_end(
2901 basic_string_wchar *this, const wchar_t *beg, const wchar_t *end)
2903 return basic_string_wchar_append_cstr_len(this, beg, end-beg);
2906 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG@Z */
2907 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG@Z */
2908 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@PBG@Z */
2909 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@PEBG@Z */
2910 DEFINE_THISCALL_WRAPPER(basic_string_wchar_append_cstr, 8)
2911 basic_string_wchar* __thiscall basic_string_wchar_append_cstr(
2912 basic_string_wchar *this, const wchar_t *append)
2914 return basic_string_wchar_append_cstr_len(this, append,
2915 char_traits_wchar_length(append));
2917 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@0@Z */
2918 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@0@Z */
2919 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@0@Z */
2920 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@0@Z */
2921 basic_string_wchar* __cdecl basic_string_wchar_concatenate(basic_string_wchar *ret,
2922 const basic_string_wchar *left, const basic_string_wchar *right)
2924 TRACE("%p %p\n", left, right);
2926 MSVCP_basic_string_wchar_copy_ctor(ret, left);
2927 basic_string_wchar_append(ret, right);
2928 return ret;
2931 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@G@Z */
2932 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@G@Z */
2933 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@G@Z */
2934 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@G@Z */
2935 basic_string_wchar* __cdecl basic_string_wchar_concatenate_bstr_ch(basic_string_wchar *ret,
2936 const basic_string_wchar *left, wchar_t right)
2938 TRACE("%p %c\n", left, right);
2940 MSVCP_basic_string_wchar_copy_ctor(ret, left);
2941 basic_string_wchar_append_ch(ret, right);
2942 return ret;
2945 /* ??$?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 */
2946 /* ??$?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 */
2947 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@PBG@Z */
2948 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@PEBG@Z */
2949 basic_string_wchar* __cdecl basic_string_wchar_concatenate_bstr_cstr(basic_string_wchar *ret,
2950 const basic_string_wchar *left, const wchar_t *right)
2952 TRACE("%p %s\n", left, debugstr_w(right));
2954 MSVCP_basic_string_wchar_copy_ctor(ret, left);
2955 basic_string_wchar_append_cstr(ret, right);
2956 return ret;
2959 /* ??$?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 */
2960 /* ??$?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 */
2961 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@GABV10@@Z */
2962 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@GAEBV10@@Z */
2963 basic_string_wchar* __cdecl basic_string_wchar_concatenate_ch_bstr(basic_string_wchar *ret,
2964 wchar_t left, const basic_string_wchar *right)
2966 TRACE("%c %p\n", left, right);
2968 basic_string_wchar_ctor_cstr_len_alloc(ret, &left, 1, NULL);
2969 basic_string_wchar_append(ret, right);
2970 return ret;
2973 /* ??$?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 */
2974 /* ??$?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 */
2975 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBGABV10@@Z */
2976 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBGAEBV10@@Z */
2977 basic_string_wchar* __cdecl basic_string_wchar_concatenate_cstr_bstr(basic_string_wchar *ret,
2978 const wchar_t *left, const basic_string_wchar *right)
2980 TRACE("%s %p\n", debugstr_w(left), right);
2982 basic_string_wchar_ctor_cstr_alloc(ret, left, NULL);
2983 basic_string_wchar_append(ret, right);
2984 return ret;
2987 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAGI@Z */
2988 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAG_K@Z */
2989 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEABGI@Z */
2990 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAAEBG_K@Z */
2991 DEFINE_THISCALL_WRAPPER(basic_string_wchar_operator_at, 8)
2992 wchar_t* __thiscall basic_string_wchar_operator_at(
2993 basic_string_wchar *this, MSVCP_size_t pos)
2995 TRACE("%p %lu\n", this, pos);
2997 assert(this->size >= pos);
2998 return this->ptr+pos;
3001 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAGI@Z */
3002 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAG_K@Z */
3003 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEABGI@Z */
3004 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAAEBG_K@Z */
3005 DEFINE_THISCALL_WRAPPER(basic_string_wchar_at, 8)
3006 wchar_t* __thiscall basic_string_wchar_at(
3007 basic_string_wchar *this, MSVCP_size_t pos)
3009 TRACE("%p %lu\n", this, pos);
3011 if(this->size <= pos)
3012 _Xran();
3014 return this->ptr+pos;
3017 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIPBGI@Z */
3018 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0PEBG0@Z */
3019 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_cstr_len, 20)
3020 basic_string_wchar* __thiscall basic_string_wchar_replace_cstr_len(basic_string_wchar *this,
3021 MSVCP_size_t off, MSVCP_size_t len, const wchar_t *str, MSVCP_size_t str_len)
3023 MSVCP_size_t inside_pos = -1;
3024 wchar_t *ptr = this->ptr;
3026 TRACE("%p %ld %ld %p %ld\n", this, off, len, str, str_len);
3028 if(this->size < off)
3029 _Xran();
3031 if(off+len > this->size)
3032 len = this->size-off;
3034 if(basic_string_wchar_npos-str_len <= this->size-len)
3035 _Xlen();
3037 if(basic_string_wchar_inside(this, str))
3038 inside_pos = str-ptr;
3040 if(this->size-len+str_len)
3041 basic_string_wchar__Grow(this, this->size-len+str_len, FALSE);
3042 ptr = this->ptr;
3044 if(inside_pos == -1) {
3045 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
3046 memcpy(ptr+off, str, str_len*sizeof(char));
3047 } else if(len >= str_len) {
3048 memmove(ptr+off, ptr+inside_pos, str_len*sizeof(char));
3049 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
3050 } else {
3051 MSVCP_size_t size;
3053 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
3055 if(inside_pos < off+len) {
3056 size = off+len-inside_pos;
3057 if(size > str_len)
3058 size = str_len;
3059 memmove(ptr+off, ptr+inside_pos, size*sizeof(char));
3060 } else {
3061 size = 0;
3064 if(str_len > size)
3065 memmove(ptr+off+size, ptr+off+str_len, (str_len-size)*sizeof(char));
3068 basic_string_wchar__Eos(this, this->size-len+str_len);
3069 return this;
3072 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIABV12@II@Z */
3073 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0AEBV12@00@Z */
3074 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_substr, 24)
3075 basic_string_wchar* __thiscall basic_string_wchar_replace_substr(basic_string_wchar *this, MSVCP_size_t off,
3076 MSVCP_size_t len, const basic_string_wchar *str, MSVCP_size_t str_off, MSVCP_size_t str_len)
3078 if(str->size < str_off)
3079 _Xran();
3081 if(str_off+str_len > str->size)
3082 str_len = str->size-str_off;
3084 return basic_string_wchar_replace_cstr_len(this, off, len,
3085 str->ptr+str_off, str_len);
3088 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIABV12@@Z */
3089 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0AEBV12@@Z */
3090 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace, 16)
3091 basic_string_wchar* __thiscall basic_string_wchar_replace(basic_string_wchar *this,
3092 MSVCP_size_t off, MSVCP_size_t len, const basic_string_wchar *str)
3094 return basic_string_wchar_replace_cstr_len(this, off, len,
3095 str->ptr, str->size);
3098 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIIG@Z */
3099 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K00G@Z */
3100 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_ch, 20)
3101 basic_string_wchar* __thiscall basic_string_wchar_replace_ch(basic_string_wchar *this,
3102 MSVCP_size_t off, MSVCP_size_t len, MSVCP_size_t count, wchar_t ch)
3104 wchar_t *ptr;
3106 TRACE("%p %ld %ld %ld %c\n", this, off, len, count, ch);
3108 if(this->size < off)
3109 _Xran();
3111 if(off+len > this->size)
3112 len = this->size-off;
3114 if(basic_string_wchar_npos-count <= this->size-len)
3115 _Xlen();
3117 if(this->size-len+count)
3118 basic_string_wchar__Grow(this, this->size-len+count, FALSE);
3119 ptr = this->ptr;
3121 memmove(ptr+off+count, ptr+off+len, (this->size-off-len)*sizeof(char));
3122 char_traits_wchar_assignn(ptr+off, count, ch);
3123 basic_string_wchar__Eos(this, this->size-len+count);
3125 return this;
3128 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIPBG@Z */
3129 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0PEBG@Z */
3130 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_cstr, 16)
3131 basic_string_wchar* __thiscall basic_string_wchar_replace_cstr(basic_string_wchar *this,
3132 MSVCP_size_t off, MSVCP_size_t len, const wchar_t *str)
3134 return basic_string_wchar_replace_cstr_len(this, off, len, str,
3135 char_traits_wchar_length(str));
3138 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0ABV12@@Z */
3139 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0AEBV12@@Z */
3140 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_bstr, 16)
3141 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_bstr(basic_string_wchar *this,
3142 wchar_t *beg, wchar_t *end, const basic_string_wchar *str)
3144 return basic_string_wchar_replace(this, basic_string_wchar__Pdif(beg, this->ptr),
3145 basic_string_wchar__Pdif(end, beg), str);
3148 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0IG@Z */
3149 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0_KG@Z */
3150 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_chn, 20)
3151 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_chn(basic_string_wchar *this,
3152 wchar_t *beg, wchar_t *end, MSVCP_size_t count, wchar_t ch)
3154 return basic_string_wchar_replace_ch(this, basic_string_wchar__Pdif(beg, this->ptr),
3155 basic_string_wchar__Pdif(end, beg), count, ch);
3158 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0PBG1@Z */
3159 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0PEBG1@Z */
3160 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_iter, 20)
3161 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_iter(basic_string_wchar *this,
3162 wchar_t *beg1, wchar_t *end1, const wchar_t *beg2, const wchar_t *end2)
3164 return basic_string_wchar_replace_cstr_len(this, basic_string_wchar__Pdif(beg1, this->ptr),
3165 basic_string_wchar__Pdif(end1, beg1), beg2, basic_string_wchar__Pdif(end2, beg2));
3168 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0PBG@Z */
3169 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0PEBG@Z */
3170 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_cstr, 16)
3171 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_cstr(basic_string_wchar *this,
3172 wchar_t *beg, wchar_t *end, const wchar_t *str)
3174 return basic_string_wchar_replace_cstr(this, basic_string_wchar__Pdif(beg, this->ptr),
3175 basic_string_wchar__Pdif(end, beg), str);
3178 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0PBGI@Z */
3179 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0PEBG_K@Z */
3180 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_cstr_len, 20)
3181 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_cstr_len(basic_string_wchar *this,
3182 wchar_t *beg, wchar_t *end, const wchar_t *str, MSVCP_size_t len)
3184 return basic_string_wchar_replace_cstr_len(this, basic_string_wchar__Pdif(beg, this->ptr),
3185 basic_string_wchar__Pdif(end, beg), str, len);
3188 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IABV12@@Z */
3189 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KAEBV12@@Z */
3190 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert, 12)
3191 basic_string_wchar* __thiscall basic_string_wchar_insert(basic_string_wchar *this,
3192 MSVCP_size_t off, const basic_string_wchar *str)
3194 return basic_string_wchar_replace(this, off, 0, str);
3197 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IABV12@II@Z */
3198 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KAEBV12@00@Z */
3199 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_substr, 20)
3200 basic_string_wchar* __thiscall basic_string_wchar_insert_substr(
3201 basic_string_wchar *this, MSVCP_size_t off, const basic_string_wchar *str,
3202 MSVCP_size_t str_off, MSVCP_size_t str_count)
3204 return basic_string_wchar_replace_substr(this, off, 0, str, str_off, str_count);
3207 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IPBG@Z */
3208 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KPEBG@Z */
3209 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_cstr, 12)
3210 basic_string_wchar* __thiscall basic_string_wchar_insert_cstr(
3211 basic_string_wchar *this, MSVCP_size_t off, const wchar_t *str)
3213 return basic_string_wchar_replace_cstr(this, off, 0, str);
3216 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IPBGI@Z */
3217 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KPEBG0@Z */
3218 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_cstr_len, 16)
3219 basic_string_wchar* __thiscall basic_string_wchar_insert_cstr_len(basic_string_wchar *this,
3220 MSVCP_size_t off, const wchar_t *str, MSVCP_size_t str_len)
3222 return basic_string_wchar_replace_cstr_len(this, off, 0, str, str_len);
3225 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIG@Z */
3226 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0G@Z */
3227 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_chn, 16)
3228 basic_string_wchar* __thiscall basic_string_wchar_insert_chn(basic_string_wchar *this,
3229 MSVCP_size_t off, MSVCP_size_t count, wchar_t ch)
3231 return basic_string_wchar_replace_ch(this, off, 0, count, ch);
3234 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGPAGG@Z */
3235 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGPEAGG@Z */
3236 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_ch, 12)
3237 wchar_t* __thiscall basic_string_wchar_insert_iter_ch(basic_string_wchar *this, wchar_t *pos, wchar_t ch)
3239 MSVCP_size_t off = basic_string_wchar__Pdif(pos, this->ptr);
3240 basic_string_wchar_insert_chn(this, off, 1, ch);
3241 return basic_string_wchar__Psum(this->ptr, off);
3244 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXPAGIG@Z */
3245 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXPEAG_KG@Z */
3246 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_chn, 16)
3247 void __thiscall basic_string_wchar_insert_iter_chn(basic_string_wchar *this,
3248 wchar_t *pos, MSVCP_size_t n, wchar_t ch)
3250 basic_string_wchar_insert_chn(this, basic_string_wchar__Pdif(pos, this->ptr), n, ch);
3253 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXPAGPBG1@Z */
3254 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXPEAGPEBG1@Z */
3255 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter, 16)
3256 void __thiscall basic_string_wchar_insert_iter(basic_string_wchar *this,
3257 wchar_t *pos, const wchar_t *beg, const wchar_t *end)
3259 basic_string_wchar_insert_cstr_len(this, basic_string_wchar__Pdif(pos, this->ptr),
3260 beg, basic_string_wchar__Pdif(end, beg));
3263 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXIG@Z */
3264 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_KG@Z */
3265 DEFINE_THISCALL_WRAPPER(basic_string_wchar_resize_ch, 12)
3266 void __thiscall basic_string_wchar_resize_ch(
3267 basic_string_wchar *this, MSVCP_size_t size, wchar_t ch)
3269 TRACE("%p %lu %c\n", this, size, ch);
3271 if(size <= this->size)
3272 basic_string_wchar_erase(this, size, this->size);
3273 else
3274 basic_string_wchar_append_len_ch(this, size-this->size, ch);
3277 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXI@Z */
3278 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_K@Z */
3279 DEFINE_THISCALL_WRAPPER(basic_string_wchar_resize, 8)
3280 void __thiscall basic_string_wchar_resize(
3281 basic_string_wchar *this, MSVCP_size_t size)
3283 basic_string_wchar_resize_ch(this, size, '\0');
3286 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGXZ */
3287 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGXZ */
3288 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3289 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3290 DEFINE_THISCALL_WRAPPER(basic_string_wchar_begin, 4)
3291 wchar_t* __thiscall basic_string_wchar_begin(basic_string_wchar *this)
3293 TRACE("(%p)\n", this);
3294 basic_string_wchar__Freeze(this);
3295 return this->ptr;
3298 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGXZ */
3299 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGXZ */
3300 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3301 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3302 DEFINE_THISCALL_WRAPPER(basic_string_wchar_end, 4)
3303 wchar_t* __thiscall basic_string_wchar_end(basic_string_wchar *this)
3305 TRACE("(%p)\n", this);
3306 basic_string_wchar__Freeze(this);
3307 return this->ptr+this->size;
3310 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$reverse_iterator@PAGGAAGPAGH@2@XZ */
3311 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA?AV?$reverse_iterator@PEAGGAEAGPEAG_J@2@XZ */
3312 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$reverse_iterator@PBGGABGPBGH@2@XZ */
3313 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$reverse_iterator@PEBGGAEBGPEBG_J@2@XZ */
3314 DEFINE_THISCALL_WRAPPER(basic_string_wchar_rbegin, 8)
3315 String_reverse_iterator_wchar* __thiscall basic_string_wchar_rbegin(
3316 basic_string_wchar *this, String_reverse_iterator_wchar *ret)
3318 TRACE("(%p %p)\n", this, ret);
3319 ret->ptr = basic_string_wchar_end(this);
3320 return ret;
3323 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$reverse_iterator@PAGGAAGPAGH@2@XZ */
3324 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA?AV?$reverse_iterator@PEAGGAEAGPEAG_J@2@XZ */
3325 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$reverse_iterator@PBGGABGPBGH@2@XZ */
3326 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$reverse_iterator@PEBGGAEBGPEBG_J@2@XZ */
3327 DEFINE_THISCALL_WRAPPER(basic_string_wchar_rend, 8)
3328 String_reverse_iterator_wchar* __thiscall basic_string_wchar_rend(
3329 basic_string_wchar *this, String_reverse_iterator_wchar *ret)
3331 TRACE("(%p %p)\n", this, ret);
3332 ret->ptr = basic_string_wchar_begin(this);
3333 return ret;
3336 /* ?c_str@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3337 /* ?c_str@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3338 /* ?data@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3339 /* ?data@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3340 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_c_str, 4)
3341 const wchar_t* __thiscall MSVCP_basic_string_wchar_c_str(const basic_string_wchar *this)
3343 TRACE("%p\n", this);
3344 return this->ptr;
3347 /* ?size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3348 /* ?size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3349 /* ?length@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3350 /* ?length@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3351 DEFINE_THISCALL_WRAPPER(basic_string_wchar_length, 4)
3352 MSVCP_size_t __thiscall basic_string_wchar_length(basic_string_wchar *this)
3354 TRACE("%p\n", this);
3355 return this->size;
3358 /* ?max_size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3359 /* ?max_size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3360 DEFINE_THISCALL_WRAPPER(basic_string_wchar_max_size, 4)
3361 MSVCP_size_t __thiscall basic_string_wchar_max_size(const basic_string_wchar *this)
3363 TRACE("%p\n", this);
3364 return MSVCP_allocator_wchar_max_size(NULL)-1;
3367 /* ?capacity@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3368 /* ?capacity@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3369 DEFINE_THISCALL_WRAPPER(basic_string_wchar_capacity, 4)
3370 MSVCP_size_t __thiscall basic_string_wchar_capacity(basic_string_wchar *this)
3372 TRACE("%p\n", this);
3373 return this->res;
3376 /* ?reserve@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXI@Z */
3377 /* ?reserve@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_K@Z */
3378 DEFINE_THISCALL_WRAPPER(basic_string_wchar_reserve, 8)
3379 void __thiscall basic_string_wchar_reserve(basic_string_wchar *this, MSVCP_size_t size)
3381 MSVCP_size_t len;
3383 TRACE("%p %ld\n", this, size);
3385 len = this->size;
3386 if(len > size)
3387 return;
3389 basic_string_wchar__Grow(this, size, FALSE);
3390 basic_string_wchar__Eos(this, len);
3393 /* ?empty@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE_NXZ */
3394 /* ?empty@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_NXZ */
3395 DEFINE_THISCALL_WRAPPER(basic_string_wchar_empty, 4)
3396 MSVCP_bool __thiscall basic_string_wchar_empty(basic_string_wchar *this)
3398 TRACE("%p\n", this);
3399 return this->size == 0;
3402 /* ?swap@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXAAV12@@Z */
3403 /* ?swap@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXAEAV12@@Z */
3404 DEFINE_THISCALL_WRAPPER(basic_string_wchar_swap, 8)
3405 void __thiscall basic_string_wchar_swap(basic_string_wchar *this, basic_string_wchar *str)
3407 basic_string_wchar tmp;
3408 TRACE("%p %p\n", this, str);
3410 tmp = *this;
3411 *this = *str;
3412 *str = tmp;
3415 /* ?substr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV12@II@Z */
3416 /* ?substr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV12@_K0@Z */
3417 DEFINE_THISCALL_WRAPPER(basic_string_wchar_substr, 16)
3418 basic_string_wchar* __thiscall basic_string_wchar_substr(basic_string_wchar *this,
3419 basic_string_wchar *ret, MSVCP_size_t off, MSVCP_size_t len)
3421 TRACE("%p %lu %lu\n", this, off, len);
3423 basic_string_wchar_ctor_substr_alloc(ret, this, off, len, NULL);
3424 return ret;
3427 /* ?copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPAGII@Z */
3428 /* ?copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEAG_K1@Z */
3429 DEFINE_THISCALL_WRAPPER(basic_string_wchar_copy, 16)
3430 MSVCP_size_t __thiscall basic_string_wchar_copy(const basic_string_wchar *this,
3431 wchar_t *dest, MSVCP_size_t count, MSVCP_size_t off)
3433 TRACE("%p %p %lu %lu\n", this, dest, count, off);
3435 if(off > this->size)
3436 _Xran();
3437 if(count > this->size-off)
3438 count = this->size-off;
3439 char_traits_wchar__Copy_s(dest, count, this->ptr+off, count);
3440 return count;
3443 /* ?get_allocator@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$allocator@G@2@XZ */
3444 /* ?get_allocator@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$allocator@G@2@XZ */
3445 DEFINE_THISCALL_WRAPPER(basic_string_wchar_get_allocator, 8)
3446 allocator* __thiscall basic_string_wchar_get_allocator(const basic_string_wchar *this, allocator *ret)
3448 TRACE("%p\n", this);
3449 return ret;