msvcp60: Added basic_string<unsigned short> implementation.
[wine/multimedia.git] / dlls / msvcp60 / string.c
blob3d9f994a84ef0262788024c5453b3f895559639d
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 MSVCP_bool __thiscall basic_string_char__Grow(basic_string_char*, MSVCP_size_t, MSVCP_bool);
172 /* ?_Split@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXXZ */
173 /* ?_Split@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAXXZ */
174 DEFINE_THISCALL_WRAPPER(basic_string_char__Split, 4)
175 void __thiscall basic_string_char__Split(basic_string_char *this)
177 MSVCP_size_t len;
178 char *ptr;
180 TRACE("(%p)\n", this);
182 if(!this->ptr || !this->ptr[-1] || (unsigned char)this->ptr[-1]==FROZEN)
183 return;
185 ptr = this->ptr;
186 len = this->size;
187 basic_string_char__Tidy(this, TRUE);
188 if(basic_string_char__Grow(this, len, FALSE)) {
189 char_traits_char__Copy_s(this->ptr, this->res, ptr, len);
190 basic_string_char__Eos(this, len);
194 /* ?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAE_NI_N@Z */
195 /* ?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAA_N_K_N@Z */
196 DEFINE_THISCALL_WRAPPER(basic_string_char__Grow, 12)
197 MSVCP_bool __thiscall basic_string_char__Grow(basic_string_char *this, MSVCP_size_t new_size, MSVCP_bool trim)
199 /* Fixme: grow string using one reallocation, don't ignore trim flag */
200 basic_string_char__Split(this);
202 if(this->res < new_size) {
203 MSVCP_size_t new_res = new_size, len = this->size;
204 char *ptr;
206 new_res |= 0xf;
208 if(new_res/3 < this->res/2)
209 new_res = this->res + this->res/2;
211 ptr = MSVCP_allocator_char_allocate(this->allocator, new_res+1);
212 if(!ptr)
213 ptr = MSVCP_allocator_char_allocate(this->allocator, new_size+1);
214 else
215 new_size = new_res;
216 if(!ptr) {
217 ERR("Out of memory\n");
218 basic_string_char__Tidy(this, TRUE);
219 return FALSE;
222 if(this->ptr)
223 char_traits_char__Copy_s(ptr, new_size, this->ptr, this->size);
224 basic_string_char__Tidy(this, TRUE);
225 this->ptr = ptr;
226 this->res = new_size;
227 basic_string_char__Eos(this, len);
228 } else if(new_size == 0)
229 basic_string_char__Eos(this, 0);
231 return (new_size>0);
234 /* ?_Freeze@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXXZ */
235 /* ?_Freeze@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAXXZ */
236 DEFINE_THISCALL_WRAPPER(basic_string_char__Freeze, 4)
237 void __thiscall basic_string_char__Freeze(basic_string_char *this)
239 TRACE("(%p)\n", this);
240 basic_string_char__Split(this);
241 if(this->ptr)
242 this->ptr[-1] = FROZEN;
245 /* ?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEXI@Z */
246 /* ?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAX_K@Z */
247 DEFINE_THISCALL_WRAPPER(basic_string_char__Copy, 8)
248 void __thiscall basic_string_char__Copy(basic_string_char *this, MSVCP_size_t copy_len)
250 TRACE("%p %lu\n", this, copy_len);
252 if(!basic_string_char__Grow(this, copy_len, FALSE))
253 return;
254 basic_string_char__Eos(this, copy_len);
257 /* ?_Pdif@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAIPBD0@Z */
258 /* ?_Pdif@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CA_KPEBD0@Z */
259 MSVCP_size_t __cdecl basic_string_char__Pdif(const char *i1, const char *i2)
261 TRACE("(%p %p)\n", i1, i2);
262 return !i1 ? 0 : i1-i2;
265 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPADPADI@Z */
266 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPEADPEAD_K@Z */
267 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPBDPBDI@Z */
268 /* ?_Psum@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPEBDPEBD_K@Z */
269 char* __cdecl basic_string_char__Psum(char *iter, MSVCP_size_t add)
271 TRACE("(%p %lu)", iter, add);
272 return iter ? iter+add : iter;
275 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@II@Z */
276 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0@Z */
277 DEFINE_THISCALL_WRAPPER(basic_string_char_erase, 12)
278 basic_string_char* __thiscall basic_string_char_erase(
279 basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t len)
281 TRACE("%p %lu %lu\n", this, pos, len);
283 if(pos > this->size)
284 _Xran();
286 if(len > this->size-pos)
287 len = this->size-pos;
289 if(len) {
290 basic_string_char__Split(this);
291 char_traits_char__Move_s(this->ptr+pos, this->res-pos,
292 this->ptr+pos+len, this->size-pos-len);
293 basic_string_char__Eos(this, this->size-len);
296 return this;
299 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADPAD0@Z */
300 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADPEAD0@Z */
301 DEFINE_THISCALL_WRAPPER(basic_string_char_erase_iter, 12)
302 char* __thiscall basic_string_char_erase_iter(basic_string_char *this, char *beg, char *end)
304 MSVCP_size_t pos = basic_string_char__Pdif(beg, this->ptr);
305 basic_string_char_erase(this, pos, basic_string_char__Pdif(end, beg));
306 return basic_string_char__Psum(this->ptr, pos);
309 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADPAD@Z */
310 /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADPEAD@Z */
311 DEFINE_THISCALL_WRAPPER(basic_string_char_erase_beg, 8)
312 char* __thiscall basic_string_char_erase_beg(basic_string_char *this, char *beg)
314 MSVCP_size_t pos = beg-this->ptr;
315 basic_string_char_erase(this, pos, 1);
316 return this->ptr+pos;
319 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z */
320 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
321 DEFINE_THISCALL_WRAPPER(basic_string_char_assign_substr, 16)
322 basic_string_char* __thiscall basic_string_char_assign_substr(
323 basic_string_char *this, const basic_string_char *assign,
324 MSVCP_size_t pos, MSVCP_size_t len)
326 TRACE("%p %p %lu %lu\n", this, assign, pos, len);
328 if(assign->size < pos)
329 _Xran();
331 if(len > assign->size-pos)
332 len = assign->size-pos;
334 if(this == assign) {
335 basic_string_char_erase(this, pos+len, basic_string_char_npos);
336 basic_string_char_erase(this, 0, pos);
337 } else if(basic_string_char__Grow(this, len, FALSE)) {
338 char_traits_char__Copy_s(this->ptr, this->res,
339 assign->ptr+pos, len);
340 basic_string_char__Eos(this, len);
343 return this;
346 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z */
347 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD_K@Z */
348 DEFINE_THISCALL_WRAPPER(basic_string_char_assign_cstr_len, 12)
349 basic_string_char* __thiscall basic_string_char_assign_cstr_len(
350 basic_string_char *this, const char *str, MSVCP_size_t len)
352 TRACE("%p %s %lu\n", this, debugstr_a(str), len);
354 if(basic_string_char_inside(this, str))
355 return basic_string_char_assign_substr(this, this, str-this->ptr, len);
356 else if(basic_string_char__Grow(this, len, FALSE)) {
357 char_traits_char__Copy_s(this->ptr, this->res, str, len);
358 basic_string_char__Eos(this, len);
361 return this;
364 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@@Z */
365 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@@Z */
366 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@ABV01@@Z */
367 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@AEBV01@@Z */
368 DEFINE_THISCALL_WRAPPER(basic_string_char_assign, 8)
369 basic_string_char* __thiscall basic_string_char_assign(
370 basic_string_char *this, const basic_string_char *assign)
372 return basic_string_char_assign_substr(this, assign,
373 0, basic_string_char_npos);
376 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z */
377 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD@Z */
378 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z */
379 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@PEBD@Z */
380 DEFINE_THISCALL_WRAPPER(basic_string_char_assign_cstr, 8)
381 basic_string_char* __thiscall basic_string_char_assign_cstr(
382 basic_string_char *this, const char *str)
384 return basic_string_char_assign_cstr_len(this, str,
385 char_traits_char_length(str));
388 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@D@Z */
389 /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@D@Z */
390 DEFINE_THISCALL_WRAPPER(basic_string_char_assign_ch, 8)
391 basic_string_char* __thiscall basic_string_char_assign_ch(
392 basic_string_char *this, char ch)
394 return basic_string_char_assign_cstr_len(this, &ch, 1);
397 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ID@Z */
398 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KD@Z */
399 DEFINE_THISCALL_WRAPPER(basic_string_char_assignn, 12)
400 basic_string_char* __thiscall basic_string_char_assignn(
401 basic_string_char *this, MSVCP_size_t count, char ch)
403 TRACE("%p %ld %c\n", this, count, ch);
405 basic_string_char__Grow(this, count, FALSE);
406 char_traits_char_assignn(this->ptr, count, ch);
407 basic_string_char__Eos(this, count);
408 return this;
411 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD0@Z */
412 /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD0@Z */
413 DEFINE_THISCALL_WRAPPER(basic_string_char_assign_ptr_ptr, 12)
414 basic_string_char* __thiscall basic_string_char_assign_ptr_ptr(
415 basic_string_char *this, const char *first, const char *last)
417 return basic_string_char_assign_cstr_len(this, first, last-first);
420 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDIABV?$allocator@D@1@@Z */
421 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD_KAEBV?$allocator@D@1@@Z */
422 DEFINE_THISCALL_WRAPPER(basic_string_char_ctor_cstr_len_alloc, 16)
423 basic_string_char* __thiscall basic_string_char_ctor_cstr_len_alloc(
424 basic_string_char *this, const char *str, MSVCP_size_t len, const void *alloc)
426 TRACE("%p %s %ld\n", this, debugstr_a(str), len);
428 basic_string_char__Tidy(this, FALSE);
429 basic_string_char_assign_cstr_len(this, str, len);
430 return this;
433 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@IIABV?$allocator@D@1@@Z */
434 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV01@_K1AEBV?$allocator@D@1@@Z */
435 DEFINE_THISCALL_WRAPPER(basic_string_char_ctor_substr_alloc, 20)
436 basic_string_char* __thiscall basic_string_char_ctor_substr_alloc(
437 basic_string_char *this, const basic_string_char *assign,
438 MSVCP_size_t pos, MSVCP_size_t len, const void *alloc)
440 TRACE("%p %p %lu %lu\n", this, assign, pos, len);
442 basic_string_char__Tidy(this, FALSE);
443 basic_string_char_assign_substr(this, assign, pos, len);
444 return this;
447 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDABV?$allocator@D@1@@Z */
448 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBDAEBV?$allocator@D@1@@Z */
449 DEFINE_THISCALL_WRAPPER(basic_string_char_ctor_cstr_alloc, 12)
450 basic_string_char* __thiscall basic_string_char_ctor_cstr_alloc(
451 basic_string_char *this, const char *str, const void *alloc)
453 TRACE("%p %s\n", this, debugstr_a(str));
455 basic_string_char__Tidy(this, FALSE);
456 basic_string_char_assign_cstr(this, str);
457 return this;
460 basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr(
461 basic_string_char *this, const char *str)
463 return basic_string_char_ctor_cstr_alloc(this, str, NULL);
466 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@IDABV?$allocator@D@1@@Z */
467 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@_KDAEBV?$allocator@D@1@@Z */
468 DEFINE_THISCALL_WRAPPER(basic_string_char_ctor_ch_alloc, 16)
469 basic_string_char* __thiscall basic_string_char_ctor_ch_alloc(basic_string_char *this,
470 MSVCP_size_t count, char ch, const void *alloc)
472 TRACE("%p %ld %c\n", this, count, ch);
474 basic_string_char__Tidy(this, FALSE);
475 basic_string_char_assignn(this, count, ch);
476 return this;
479 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD0ABV?$allocator@D@1@@Z */
480 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD0AEBV?$allocator@D@1@@Z */
481 DEFINE_THISCALL_WRAPPER(basic_string_char_ctor_iter, 16)
482 basic_string_char* __thiscall basic_string_char_ctor_iter(basic_string_char *this,
483 const char *first, const char *last, allocator *alloc)
485 TRACE("(%p %p %p %p)\n", this, first, last, alloc);
487 basic_string_char__Tidy(this, FALSE);
488 basic_string_char_assign_cstr_len(this, first, basic_string_char__Pdif(last, first));
489 return this;
492 /* ??_F?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */
493 /* ??_F?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */
494 DEFINE_THISCALL_WRAPPER(basic_string_char_ctor, 4)
495 basic_string_char* __thiscall basic_string_char_ctor(basic_string_char *this)
497 TRACE("%p\n", this);
499 basic_string_char__Tidy(this, FALSE);
500 return this;
503 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV?$allocator@D@1@@Z */
504 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV?$allocator@D@1@@Z */
505 DEFINE_THISCALL_WRAPPER(basic_string_char_ctor_alloc, 8)
506 basic_string_char* __thiscall basic_string_char_ctor_alloc(
507 basic_string_char *this, const void *alloc)
509 TRACE("%p %p\n", this, alloc);
511 basic_string_char__Tidy(this, FALSE);
512 return this;
515 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z */
516 /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV01@@Z */
517 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_copy_ctor, 8)
518 basic_string_char* __thiscall MSVCP_basic_string_char_copy_ctor(
519 basic_string_char *this, const basic_string_char *copy)
521 TRACE("%p %p\n", this, copy);
523 basic_string_char__Tidy(this, FALSE);
524 basic_string_char_assign(this, copy);
525 return this;
528 /* ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ */
529 /* ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@XZ */
530 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_dtor, 4)
531 void __thiscall MSVCP_basic_string_char_dtor(basic_string_char *this)
533 TRACE("%p\n", this);
534 basic_string_char__Tidy(this, TRUE);
537 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIPBDI@Z */
538 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0PEBD0@Z */
539 DEFINE_THISCALL_WRAPPER(basic_string_char_compare_substr_cstr_len, 20)
540 int __thiscall basic_string_char_compare_substr_cstr_len(
541 const basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t num,
542 const char *str, MSVCP_size_t count)
544 int ans;
546 TRACE("%p %lu %lu %s %lu\n", this, pos, num, debugstr_a(str), count);
548 if(this->size < pos)
549 _Xran();
551 if(pos+num > this->size)
552 num = this->size-pos;
554 ans = char_traits_char_compare(this->ptr+pos,
555 str, num>count ? count : num);
556 if(ans)
557 return ans;
559 if(num > count)
560 ans = 1;
561 else if(num < count)
562 ans = -1;
563 return ans;
566 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHPBD@Z */
567 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAHPEBD@Z */
568 DEFINE_THISCALL_WRAPPER(basic_string_char_compare_cstr, 8)
569 int __thiscall basic_string_char_compare_cstr(
570 const basic_string_char *this, const char *str)
572 return basic_string_char_compare_substr_cstr_len(this, 0, this->size,
573 str, char_traits_char_length(str));
576 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIABV12@II@Z */
577 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0AEBV12@00@Z */
578 DEFINE_THISCALL_WRAPPER(basic_string_char_compare_substr_substr, 24)
579 int __thiscall basic_string_char_compare_substr_substr(
580 const basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t num,
581 const basic_string_char *compare, MSVCP_size_t off, MSVCP_size_t count)
583 TRACE("%p %lu %lu %p %lu %lu\n", this, pos, num, compare, off, count);
585 if(compare->size < off)
586 _Xran();
588 if(off+count > compare->size)
589 count = compare->size-off;
591 return basic_string_char_compare_substr_cstr_len(this, pos, num,
592 compare->ptr+off, count);
595 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIABV12@@Z */
596 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0AEBV12@@Z */
597 DEFINE_THISCALL_WRAPPER(basic_string_char_compare_substr, 16)
598 int __thiscall basic_string_char_compare_substr(
599 const basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t num,
600 const basic_string_char *compare)
602 return basic_string_char_compare_substr_cstr_len(this, pos, num,
603 compare->ptr, compare->size);
606 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHABV12@@Z */
607 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAHAEBV12@@Z */
608 DEFINE_THISCALL_WRAPPER(basic_string_char_compare, 8)
609 int __thiscall basic_string_char_compare(
610 const basic_string_char *this, const basic_string_char *compare)
612 return basic_string_char_compare_substr_cstr_len(this, 0, this->size,
613 compare->ptr, compare->size);
616 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIPBD@Z */
617 /* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0PEBD@Z */
618 DEFINE_THISCALL_WRAPPER(basic_string_char_compare_substr_cstr, 16)
619 int __thiscall basic_string_char_compare_substr_cstr(const basic_string_char *this,
620 MSVCP_size_t pos, MSVCP_size_t num, const char *str)
622 return basic_string_char_compare_substr_cstr_len(this, pos, num,
623 str, char_traits_char_length(str));
626 /* ??$?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 */
627 /* ??$?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 */
628 /* ??8std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
629 /* ??8std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
630 MSVCP_bool __cdecl basic_string_char_equal(
631 const basic_string_char *left, const basic_string_char *right)
633 return basic_string_char_compare(left, right) == 0;
636 /* ??$?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 */
637 /* ??$?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 */
638 /* ??8std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
639 /* ??8std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
640 MSVCP_bool __cdecl basic_string_char_equal_str_cstr(
641 const basic_string_char *left, const char *right)
643 return basic_string_char_compare_cstr(left, right) == 0;
646 /* ??$?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 */
647 /* ??$?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 */
648 /* ??8std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
649 /* ??8std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
650 MSVCP_bool __cdecl basic_string_char_equal_cstr_str(
651 const char *left, const basic_string_char *right)
653 return basic_string_char_compare_cstr(right, left) == 0;
656 /* ??$?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 */
657 /* ??$?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 */
658 /* ??9std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
659 /* ??9std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
660 MSVCP_bool __cdecl basic_string_char_not_equal(
661 const basic_string_char *left, const basic_string_char *right)
663 return basic_string_char_compare(left, right) != 0;
666 /* ??$?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 */
667 /* ??$?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 */
668 /* ??9std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
669 /* ??9std@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
670 MSVCP_bool __cdecl basic_string_char_not_equal_str_cstr(
671 const basic_string_char *left, const char *right)
673 return basic_string_char_compare_cstr(left, right) != 0;
676 /* ??$?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 */
677 /* ??$?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 */
678 /* ??9std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
679 /* ??9std@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
680 MSVCP_bool __cdecl basic_string_char_not_equal_cstr_str(
681 const char *left, const basic_string_char *right)
683 return basic_string_char_compare_cstr(right, left) != 0;
686 /* ??$?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 */
687 /* ??$?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 */
688 /* ??Mstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
689 /* ??Mstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
690 MSVCP_bool __cdecl basic_string_char_lower(
691 const basic_string_char *left, const basic_string_char *right)
693 return basic_string_char_compare(left, right) < 0;
696 /* ??$?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 */
697 /* ??$?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 */
698 /* ??Mstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
699 /* ??Mstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
700 MSVCP_bool __cdecl basic_string_char_lower_bstr_cstr(
701 const basic_string_char *left, const char *right)
703 return basic_string_char_compare_cstr(left, right) < 0;
706 /* ??$?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 */
707 /* ??$?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 */
708 /* ??Mstd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
709 /* ??Mstd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
710 MSVCP_bool __cdecl basic_string_char_lower_cstr_bstr(
711 const char *left, const basic_string_char *right)
713 return basic_string_char_compare_cstr(right, left) > 0;
716 /* ??$?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 */
717 /* ??$?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 */
718 /* ??Nstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
719 /* ??Nstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
720 MSVCP_bool __cdecl basic_string_char_leq(
721 const basic_string_char *left, const basic_string_char *right)
723 return basic_string_char_compare(left, right) <= 0;
726 /* ??$?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 */
727 /* ??$?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 */
728 /* ??Nstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
729 /* ??Nstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
730 MSVCP_bool __cdecl basic_string_char_leq_bstr_cstr(
731 const basic_string_char *left, const char *right)
733 return basic_string_char_compare_cstr(left, right) <= 0;
736 /* ??$?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 */
737 /* ??$?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 */
738 /* ??Nstd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
739 /* ??Nstd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
740 MSVCP_bool __cdecl basic_string_char_leq_cstr_bstr(
741 const char *left, const basic_string_char *right)
743 return basic_string_char_compare_cstr(right, left) >= 0;
746 /* ??$?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 */
747 /* ??$?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 */
748 /* ??Ostd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
749 /* ??Ostd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
750 MSVCP_bool __cdecl basic_string_char_greater(
751 const basic_string_char *left, const basic_string_char *right)
753 return basic_string_char_compare(left, right) > 0;
756 /* ??$?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 */
757 /* ??$?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 */
758 /* ??Ostd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
759 /* ??Ostd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
760 MSVCP_bool __cdecl basic_string_char_greater_bstr_cstr(
761 const basic_string_char *left, const char *right)
763 return basic_string_char_compare_cstr(left, right) > 0;
766 /* ??$?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 */
767 /* ??$?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 */
768 /* ??Ostd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
769 /* ??Ostd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
770 MSVCP_bool __cdecl basic_string_char_greater_cstr_bstr(
771 const char *left, const basic_string_char *right)
773 return basic_string_char_compare_cstr(right, left) < 0;
776 /* ??$?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 */
777 /* ??$?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 */
778 /* ??Pstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
779 /* ??Pstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z */
780 MSVCP_bool __cdecl basic_string_char_geq(
781 const basic_string_char *left, const basic_string_char *right)
783 return basic_string_char_compare(left, right) >= 0;
786 /* ??$?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 */
787 /* ??$?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 */
788 /* ??Pstd@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBD@Z */
789 /* ??Pstd@@YA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBD@Z */
790 MSVCP_bool __cdecl basic_string_char_geq_bstr_cstr(
791 const basic_string_char *left, const char *right)
793 return basic_string_char_compare_cstr(left, right) >= 0;
796 /* ??$?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 */
797 /* ??$?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 */
798 /* ??Pstd@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
799 /* ??Pstd@@YA_NPEBDAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
800 MSVCP_bool __cdecl basic_string_char_geq_cstr_bstr(
801 const char *left, const basic_string_char *right)
803 return basic_string_char_compare_cstr(right, left) <= 0;
806 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
807 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
808 DEFINE_THISCALL_WRAPPER(basic_string_char_find_cstr_substr, 16)
809 MSVCP_size_t __thiscall basic_string_char_find_cstr_substr(
810 const basic_string_char *this, const char *find, MSVCP_size_t pos, MSVCP_size_t len)
812 const char *p, *end;
814 TRACE("%p %s %lu %lu\n", this, debugstr_a(find), pos, len);
816 if(len==0 && pos<=this->size)
817 return pos;
819 end = this->ptr+this->size-len+1;
820 for(p=this->ptr+pos; p<end; p++) {
821 p = char_traits_char_find(p, end-p, find);
822 if(!p)
823 break;
825 if(!char_traits_char_compare(p, find, len))
826 return p-this->ptr;
829 return basic_string_char_npos;
832 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
833 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
834 DEFINE_THISCALL_WRAPPER(basic_string_char_find_off, 12)
835 MSVCP_size_t __thiscall basic_string_char_find_off(
836 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
838 return basic_string_char_find_cstr_substr(this, find->ptr, off, find->size);
841 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
842 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
843 DEFINE_THISCALL_WRAPPER(basic_string_char_find_ch, 12)
844 MSVCP_size_t __thiscall basic_string_char_find_ch(
845 const basic_string_char *this, char ch, MSVCP_size_t pos)
847 return basic_string_char_find_cstr_substr(this, &ch, pos, 1);
850 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
851 /* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
852 DEFINE_THISCALL_WRAPPER(basic_string_char_find_cstr_off, 12)
853 MSVCP_size_t __thiscall basic_string_char_find_cstr_off(
854 const basic_string_char *this, const char *find, MSVCP_size_t pos)
856 return basic_string_char_find_cstr_substr(this, find, pos,
857 char_traits_char_length(find));
860 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
861 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
862 DEFINE_THISCALL_WRAPPER(basic_string_char_rfind_cstr_substr, 16)
863 MSVCP_size_t __thiscall basic_string_char_rfind_cstr_substr(
864 const basic_string_char *this, const char *find, MSVCP_size_t pos, MSVCP_size_t len)
866 const char *p, *end;
868 TRACE("%p %s %lu %lu\n", this, debugstr_a(find), pos, len);
870 if(len==0)
871 return pos<this->size ? pos : this->size;
873 if(len > this->size)
874 return basic_string_char_npos;
876 if(pos > this->size-len+1)
877 pos = this->size-len+1;
878 end = this->ptr;
879 for(p=end+pos-1; p>=end; p--) {
880 if(*p==*find && !char_traits_char_compare(p, find, len))
881 return p-this->ptr;
884 return basic_string_char_npos;
887 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
888 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
889 DEFINE_THISCALL_WRAPPER(basic_string_char_rfind_off, 12)
890 MSVCP_size_t __thiscall basic_string_char_rfind_off(
891 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
893 return basic_string_char_rfind_cstr_substr(this, find->ptr, off, find->size);
896 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
897 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
898 DEFINE_THISCALL_WRAPPER(basic_string_char_rfind_ch, 12)
899 MSVCP_size_t __thiscall basic_string_char_rfind_ch(
900 const basic_string_char *this, char ch, MSVCP_size_t pos)
902 return basic_string_char_find_cstr_substr(this, &ch, pos, 1);
905 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
906 /* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
907 DEFINE_THISCALL_WRAPPER(basic_string_char_rfind_cstr_off, 12)
908 MSVCP_size_t __thiscall basic_string_char_rfind_cstr_off(
909 const basic_string_char *this, const char *find, MSVCP_size_t pos)
911 return basic_string_char_rfind_cstr_substr(this, find, pos,
912 char_traits_char_length(find));
915 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
916 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
917 DEFINE_THISCALL_WRAPPER(basic_string_char_find_first_not_of_cstr_substr, 16)
918 MSVCP_size_t __thiscall basic_string_char_find_first_not_of_cstr_substr(
919 const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len)
921 const char *p, *end;
923 TRACE("%p %p %lu %lu\n", this, find, off, len);
925 if(off<this->size) {
926 end = this->ptr+this->size;
927 for(p=this->ptr+off; p<end; p++)
928 if(!char_traits_char_find(find, len, p))
929 return p-this->ptr;
932 return basic_string_char_npos;
935 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
936 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
937 DEFINE_THISCALL_WRAPPER(basic_string_char_find_first_not_of, 12)
938 MSVCP_size_t __thiscall basic_string_char_find_first_not_of(
939 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
941 return basic_string_char_find_first_not_of_cstr_substr(this,
942 find->ptr, off, find->size);
945 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
946 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
947 DEFINE_THISCALL_WRAPPER(basic_string_char_find_first_not_of_ch, 12)
948 MSVCP_size_t __thiscall basic_string_char_find_first_not_of_ch(
949 const basic_string_char *this, char ch, MSVCP_size_t off)
951 return basic_string_char_find_first_not_of_cstr_substr(this, &ch, off, 1);
954 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
955 /* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
956 DEFINE_THISCALL_WRAPPER(basic_string_char_find_first_not_of_cstr, 12)
957 MSVCP_size_t __thiscall basic_string_char_find_first_not_of_cstr(
958 const basic_string_char *this, const char *find, MSVCP_size_t off)
960 return basic_string_char_find_first_not_of_cstr_substr(
961 this, find, off, char_traits_char_length(find));
964 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
965 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
966 DEFINE_THISCALL_WRAPPER(basic_string_char_find_first_of_cstr_substr, 16)
967 MSVCP_size_t __thiscall basic_string_char_find_first_of_cstr_substr(
968 const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len)
970 const char *p, *end;
972 TRACE("%p %p %lu %lu\n", this, find, off, len);
974 if(len>0 && off<this->size) {
975 end = this->ptr+this->size;
976 for(p=this->ptr+off; p<end; p++)
977 if(char_traits_char_find(find, len, p))
978 return p-this->ptr;
981 return basic_string_char_npos;
984 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
985 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
986 DEFINE_THISCALL_WRAPPER(basic_string_char_find_first_of, 12)
987 MSVCP_size_t __thiscall basic_string_char_find_first_of(
988 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
990 return basic_string_char_find_first_of_cstr_substr(this,
991 find->ptr, off, find->size);
994 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
995 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
996 DEFINE_THISCALL_WRAPPER(basic_string_char_find_first_of_ch, 12)
997 MSVCP_size_t __thiscall basic_string_char_find_first_of_ch(
998 const basic_string_char *this, char ch, MSVCP_size_t off)
1000 return basic_string_char_find_first_of_cstr_substr(this, &ch, off, 1);
1003 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1004 /* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1005 DEFINE_THISCALL_WRAPPER(basic_string_char_find_first_of_cstr, 12)
1006 MSVCP_size_t __thiscall basic_string_char_find_first_of_cstr(
1007 const basic_string_char *this, const char *find, MSVCP_size_t off)
1009 return basic_string_char_find_first_of_cstr_substr(
1010 this, find, off, char_traits_char_length(find));
1013 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1014 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1015 DEFINE_THISCALL_WRAPPER(basic_string_char_find_last_not_of_cstr_substr, 16)
1016 MSVCP_size_t __thiscall basic_string_char_find_last_not_of_cstr_substr(
1017 const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len)
1019 const char *p, *beg;
1021 TRACE("%p %p %lu %lu\n", this, find, off, len);
1023 if(len>0 && this->size>0) {
1024 if(off >= this->size)
1025 off = this->size-1;
1027 beg = this->ptr;
1028 for(p=beg+off; p>=beg; p--)
1029 if(!char_traits_char_find(find, len, p))
1030 return p-beg;
1033 return basic_string_char_npos;
1036 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1037 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1038 DEFINE_THISCALL_WRAPPER(basic_string_char_find_last_not_of, 12)
1039 MSVCP_size_t __thiscall basic_string_char_find_last_not_of(
1040 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
1042 return basic_string_char_find_last_not_of_cstr_substr(this,
1043 find->ptr, off, find->size);
1046 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1047 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1048 DEFINE_THISCALL_WRAPPER(basic_string_char_find_last_not_of_ch, 12)
1049 MSVCP_size_t __thiscall basic_string_char_find_last_not_of_ch(
1050 const basic_string_char *this, char ch, MSVCP_size_t off)
1052 return basic_string_char_find_last_not_of_cstr_substr(this, &ch, off, 1);
1055 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1056 /* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1057 DEFINE_THISCALL_WRAPPER(basic_string_char_find_last_not_of_cstr, 12)
1058 MSVCP_size_t __thiscall basic_string_char_find_last_not_of_cstr(
1059 const basic_string_char *this, const char *find, MSVCP_size_t off)
1061 return basic_string_char_find_last_not_of_cstr_substr(
1062 this, find, off, char_traits_char_length(find));
1065 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */
1066 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */
1067 DEFINE_THISCALL_WRAPPER(basic_string_char_find_last_of_cstr_substr, 16)
1068 MSVCP_size_t __thiscall basic_string_char_find_last_of_cstr_substr(
1069 const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len)
1071 const char *p, *beg;
1073 TRACE("%p %p %lu %lu\n", this, find, off, len);
1075 if(len>0 && this->size>0) {
1076 if(off >= this->size)
1077 off = this->size-1;
1079 beg = this->ptr;
1080 for(p=beg+off; p>=beg; p--)
1081 if(char_traits_char_find(find, len, p))
1082 return p-beg;
1085 return basic_string_char_npos;
1088 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */
1089 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */
1090 DEFINE_THISCALL_WRAPPER(basic_string_char_find_last_of, 12)
1091 MSVCP_size_t __thiscall basic_string_char_find_last_of(
1092 const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off)
1094 return basic_string_char_find_last_of_cstr_substr(this,
1095 find->ptr, off, find->size);
1098 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */
1099 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */
1100 DEFINE_THISCALL_WRAPPER(basic_string_char_find_last_of_ch, 12)
1101 MSVCP_size_t __thiscall basic_string_char_find_last_of_ch(
1102 const basic_string_char *this, char ch, MSVCP_size_t off)
1104 return basic_string_char_find_last_of_cstr_substr(this, &ch, off, 1);
1107 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */
1108 /* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */
1109 DEFINE_THISCALL_WRAPPER(basic_string_char_find_last_of_cstr, 12)
1110 MSVCP_size_t __thiscall basic_string_char_find_last_of_cstr(
1111 const basic_string_char *this, const char *find, MSVCP_size_t off)
1113 return basic_string_char_find_last_of_cstr_substr(
1114 this, find, off, char_traits_char_length(find));
1117 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z */
1118 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
1119 DEFINE_THISCALL_WRAPPER(basic_string_char_append_substr, 16)
1120 basic_string_char* __thiscall basic_string_char_append_substr(basic_string_char *this,
1121 const basic_string_char *append, MSVCP_size_t offset, MSVCP_size_t count)
1123 TRACE("%p %p %lu %lu\n", this, append, offset, count);
1125 if(append->size < offset)
1126 _Xran();
1128 if(count > append->size-offset)
1129 count = append->size-offset;
1131 if(basic_string_char_npos-this->size<=count || this->size+count<this->size)
1132 _Xlen();
1134 if(basic_string_char__Grow(this, this->size+count, FALSE)) {
1135 char_traits_char__Copy_s(this->ptr+this->size,
1136 this->res-this->size, append->ptr+offset, count);
1137 basic_string_char__Eos(this, this->size+count);
1140 return this;
1143 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z */
1144 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD_K@Z */
1145 DEFINE_THISCALL_WRAPPER(basic_string_char_append_cstr_len, 12)
1146 basic_string_char* __thiscall basic_string_char_append_cstr_len(
1147 basic_string_char *this, const char *append, MSVCP_size_t count)
1149 TRACE("%p %s %lu\n", this, debugstr_a(append), count);
1151 if(basic_string_char_inside(this, append))
1152 return basic_string_char_append_substr(this, this, append-this->ptr, count);
1154 if(basic_string_char_npos-this->size<=count || this->size+count<this->size)
1155 _Xlen();
1157 if(basic_string_char__Grow(this, this->size+count, FALSE)) {
1158 char_traits_char__Copy_s(this->ptr+this->size,
1159 this->res-this->size, append, count);
1160 basic_string_char__Eos(this, this->size+count);
1163 return this;
1166 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ID@Z */
1167 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KD@Z */
1168 DEFINE_THISCALL_WRAPPER(basic_string_char_append_len_ch, 12)
1169 basic_string_char* __thiscall basic_string_char_append_len_ch(
1170 basic_string_char *this, MSVCP_size_t count, char ch)
1172 TRACE("%p %lu %c\n", this, count, ch);
1174 if(basic_string_char_npos-this->size <= count)
1175 _Xlen();
1177 if(basic_string_char__Grow(this, this->size+count, FALSE)) {
1178 char_traits_char_assignn(this->ptr+this->size, count, ch);
1179 basic_string_char__Eos(this, this->size+count);
1182 return this;
1185 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@@Z */
1186 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@@Z */
1187 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@ABV01@@Z */
1188 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@AEBV01@@Z */
1189 DEFINE_THISCALL_WRAPPER(basic_string_char_append, 8)
1190 basic_string_char* __thiscall basic_string_char_append(
1191 basic_string_char *this, const basic_string_char *append)
1193 return basic_string_char_append_substr(this, append,
1194 0, basic_string_char_npos);
1197 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@D@Z */
1198 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@D@Z */
1199 DEFINE_THISCALL_WRAPPER(basic_string_char_append_ch, 8)
1200 basic_string_char* __thiscall basic_string_char_append_ch(
1201 basic_string_char *this, char ch)
1203 return basic_string_char_append_len_ch(this, 1, ch);
1206 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD0@Z */
1207 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD0@Z */
1208 DEFINE_THISCALL_WRAPPER(basic_string_char_append_beg_end, 12)
1209 basic_string_char* __thiscall basic_string_char_append_beg_end(
1210 basic_string_char *this, const char *beg, const char *end)
1212 return basic_string_char_append_cstr_len(this, beg, end-beg);
1215 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z */
1216 /* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD@Z */
1217 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z */
1218 /* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@PEBD@Z */
1219 DEFINE_THISCALL_WRAPPER(basic_string_char_append_cstr, 8)
1220 basic_string_char* __thiscall basic_string_char_append_cstr(
1221 basic_string_char *this, const char *append)
1223 return basic_string_char_append_cstr_len(this, append,
1224 char_traits_char_length(append));
1226 /* ??$?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 */
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@AEBV10@0@Z */
1228 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@0@Z */
1229 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@0@Z */
1230 basic_string_char* __cdecl basic_string_char_concatenate(basic_string_char *ret,
1231 const basic_string_char *left, const basic_string_char *right)
1233 TRACE("%p %p\n", left, right);
1235 MSVCP_basic_string_char_copy_ctor(ret, left);
1236 basic_string_char_append(ret, right);
1237 return ret;
1240 /* ??$?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 */
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@AEBV10@D@Z */
1242 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@D@Z */
1243 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@D@Z */
1244 basic_string_char* __cdecl basic_string_char_concatenate_bstr_ch(basic_string_char *ret,
1245 const basic_string_char *left, char right)
1247 TRACE("%p %c\n", left, right);
1249 MSVCP_basic_string_char_copy_ctor(ret, left);
1250 basic_string_char_append_ch(ret, right);
1251 return ret;
1254 /* ??$?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 */
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@AEBV10@PEBD@Z */
1256 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@ABV10@PBD@Z */
1257 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@AEBV10@PEBD@Z */
1258 basic_string_char* __cdecl basic_string_char_concatenate_bstr_cstr(basic_string_char *ret,
1259 const basic_string_char *left, const char *right)
1261 TRACE("%p %s\n", left, debugstr_a(right));
1263 MSVCP_basic_string_char_copy_ctor(ret, left);
1264 basic_string_char_append_cstr(ret, right);
1265 return ret;
1268 /* ??$?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 */
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@DAEBV10@@Z */
1270 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@DABV10@@Z */
1271 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@DAEBV10@@Z */
1272 basic_string_char* __cdecl basic_string_char_concatenate_ch_bstr(basic_string_char *ret,
1273 char left, const basic_string_char *right)
1275 TRACE("%c %p\n", left, right);
1277 basic_string_char_ctor_cstr_len_alloc(ret, &left, 1, NULL);
1278 basic_string_char_append(ret, right);
1279 return ret;
1282 /* ??$?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 */
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@PEBDAEBV10@@Z */
1284 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PBDABV10@@Z */
1285 /* ??Hstd@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@PEBDAEBV10@@Z */
1286 basic_string_char* __cdecl basic_string_char_concatenate_cstr_bstr(basic_string_char *ret,
1287 const char *left, const basic_string_char *right)
1289 TRACE("%s %p\n", debugstr_a(left), right);
1291 basic_string_char_ctor_cstr_alloc(ret, left, NULL);
1292 basic_string_char_append(ret, right);
1293 return ret;
1296 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAADI@Z */
1297 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAD_K@Z */
1298 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDI@Z */
1299 /* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAAEBD_K@Z */
1300 DEFINE_THISCALL_WRAPPER(basic_string_char_operator_at, 8)
1301 char* __thiscall basic_string_char_operator_at(
1302 basic_string_char *this, MSVCP_size_t pos)
1304 TRACE("%p %lu\n", this, pos);
1306 assert(this->size >= pos);
1307 return this->ptr+pos;
1310 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAADI@Z */
1311 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAD_K@Z */
1312 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDI@Z */
1313 /* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAAEBD_K@Z */
1314 DEFINE_THISCALL_WRAPPER(basic_string_char_at, 8)
1315 char* __thiscall basic_string_char_at(
1316 basic_string_char *this, MSVCP_size_t pos)
1318 TRACE("%p %lu\n", this, pos);
1320 if(this->size <= pos)
1321 _Xran();
1323 return this->ptr+pos;
1326 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIPBDI@Z */
1327 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0PEBD0@Z */
1328 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_cstr_len, 20)
1329 basic_string_char* __thiscall basic_string_char_replace_cstr_len(basic_string_char *this,
1330 MSVCP_size_t off, MSVCP_size_t len, const char *str, MSVCP_size_t str_len)
1332 MSVCP_size_t inside_pos = -1;
1333 char *ptr = this->ptr;
1335 TRACE("%p %ld %ld %p %ld\n", this, off, len, str, str_len);
1337 if(this->size < off)
1338 _Xran();
1340 if(off+len > this->size)
1341 len = this->size-off;
1343 if(basic_string_char_npos-str_len <= this->size-len)
1344 _Xlen();
1346 if(basic_string_char_inside(this, str))
1347 inside_pos = str-ptr;
1349 if(this->size-len+str_len)
1350 basic_string_char__Grow(this, this->size-len+str_len, FALSE);
1351 ptr = this->ptr;
1353 if(inside_pos == -1) {
1354 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1355 memcpy(ptr+off, str, str_len*sizeof(char));
1356 } else if(len >= str_len) {
1357 memmove(ptr+off, ptr+inside_pos, str_len*sizeof(char));
1358 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1359 } else {
1360 MSVCP_size_t size;
1362 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
1364 if(inside_pos < off+len) {
1365 size = off+len-inside_pos;
1366 if(size > str_len)
1367 size = str_len;
1368 memmove(ptr+off, ptr+inside_pos, size*sizeof(char));
1369 } else {
1370 size = 0;
1373 if(str_len > size)
1374 memmove(ptr+off+size, ptr+off+str_len, (str_len-size)*sizeof(char));
1377 basic_string_char__Eos(this, this->size-len+str_len);
1378 return this;
1381 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIABV12@II@Z */
1382 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0AEBV12@00@Z */
1383 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_substr, 24)
1384 basic_string_char* __thiscall basic_string_char_replace_substr(basic_string_char *this, MSVCP_size_t off,
1385 MSVCP_size_t len, const basic_string_char *str, MSVCP_size_t str_off, MSVCP_size_t str_len)
1387 if(str->size < str_off)
1388 _Xran();
1390 if(str_off+str_len > str->size)
1391 str_len = str->size-str_off;
1393 return basic_string_char_replace_cstr_len(this, off, len,
1394 str->ptr+str_off, str_len);
1397 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIABV12@@Z */
1398 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0AEBV12@@Z */
1399 DEFINE_THISCALL_WRAPPER(basic_string_char_replace, 16)
1400 basic_string_char* __thiscall basic_string_char_replace(basic_string_char *this,
1401 MSVCP_size_t off, MSVCP_size_t len, const basic_string_char *str)
1403 return basic_string_char_replace_cstr_len(this, off, len,
1404 str->ptr, str->size);
1407 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIID@Z */
1408 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K00D@Z */
1409 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_ch, 20)
1410 basic_string_char* __thiscall basic_string_char_replace_ch(basic_string_char *this,
1411 MSVCP_size_t off, MSVCP_size_t len, MSVCP_size_t count, char ch)
1413 char *ptr = this->ptr;
1415 TRACE("%p %ld %ld %ld %c\n", this, off, len, count, ch);
1417 if(this->size < off)
1418 _Xran();
1420 if(off+len > this->size)
1421 len = this->size-off;
1423 if(basic_string_char_npos-count <= this->size-len)
1424 _Xlen();
1426 if(this->size-len+count)
1427 basic_string_char__Grow(this, this->size-len+count, FALSE);
1428 ptr = this->ptr;
1430 memmove(ptr+off+count, ptr+off+len, (this->size-off-len)*sizeof(char));
1431 char_traits_char_assignn(ptr+off, count, ch);
1432 basic_string_char__Eos(this, this->size-len+count);
1434 return this;
1437 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIPBD@Z */
1438 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0PEBD@Z */
1439 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_cstr, 16)
1440 basic_string_char* __thiscall basic_string_char_replace_cstr(basic_string_char *this,
1441 MSVCP_size_t off, MSVCP_size_t len, const char *str)
1443 return basic_string_char_replace_cstr_len(this, off, len, str,
1444 char_traits_char_length(str));
1447 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0ABV12@@Z */
1448 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0AEBV12@@Z */
1449 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_bstr, 16)
1450 basic_string_char* __thiscall basic_string_char_replace_iter_bstr(basic_string_char *this,
1451 char *beg, char *end, const basic_string_char *str)
1453 return basic_string_char_replace(this, basic_string_char__Pdif(beg, this->ptr),
1454 basic_string_char__Pdif(end, beg), str);
1457 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0ID@Z */
1458 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0_KD@Z */
1459 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_chn, 20)
1460 basic_string_char* __thiscall basic_string_char_replace_iter_chn(basic_string_char *this,
1461 char *beg, char *end, MSVCP_size_t count, char ch)
1463 return basic_string_char_replace_ch(this, basic_string_char__Pdif(beg, this->ptr),
1464 basic_string_char__Pdif(end, beg), count, ch);
1467 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0PBD1@Z */
1468 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0PEBD1@Z */
1469 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_iter, 20)
1470 basic_string_char* __thiscall basic_string_char_replace_iter_iter(basic_string_char *this,
1471 char *beg1, char *end1, const char *beg2, const char *end2)
1473 return basic_string_char_replace_cstr_len(this, basic_string_char__Pdif(beg1, this->ptr),
1474 basic_string_char__Pdif(end1, beg1), beg2, basic_string_char__Pdif(end2, beg2));
1477 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0PBD@Z */
1478 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0PEBD@Z */
1479 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_cstr, 16)
1480 basic_string_char* __thiscall basic_string_char_replace_iter_cstr(basic_string_char *this,
1481 char *beg, char *end, const char *str)
1483 return basic_string_char_replace_cstr(this, basic_string_char__Pdif(beg, this->ptr),
1484 basic_string_char__Pdif(end, beg), str);
1487 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PAD0PBDI@Z */
1488 /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEAD0PEBD_K@Z */
1489 DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_cstr_len, 20)
1490 basic_string_char* __thiscall basic_string_char_replace_iter_cstr_len(basic_string_char *this,
1491 char *beg, char *end, const char *str, MSVCP_size_t len)
1493 return basic_string_char_replace_cstr_len(this, basic_string_char__Pdif(beg, this->ptr),
1494 basic_string_char__Pdif(end, beg), str, len);
1497 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IABV12@@Z */
1498 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KAEBV12@@Z */
1499 DEFINE_THISCALL_WRAPPER(basic_string_char_insert, 12)
1500 basic_string_char* __thiscall basic_string_char_insert(basic_string_char *this,
1501 MSVCP_size_t off, const basic_string_char *str)
1503 return basic_string_char_replace(this, off, 0, str);
1506 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IABV12@II@Z */
1507 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KAEBV12@00@Z */
1508 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_substr, 20)
1509 basic_string_char* __thiscall basic_string_char_insert_substr(
1510 basic_string_char *this, MSVCP_size_t off, const basic_string_char *str,
1511 MSVCP_size_t str_off, MSVCP_size_t str_count)
1513 return basic_string_char_replace_substr(this, off, 0, str, str_off, str_count);
1516 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IPBD@Z */
1517 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KPEBD@Z */
1518 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_cstr, 12)
1519 basic_string_char* __thiscall basic_string_char_insert_cstr(
1520 basic_string_char *this, MSVCP_size_t off, const char *str)
1522 return basic_string_char_replace_cstr(this, off, 0, str);
1525 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IPBDI@Z */
1526 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KPEBD0@Z */
1527 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_cstr_len, 16)
1528 basic_string_char* __thiscall basic_string_char_insert_cstr_len(basic_string_char *this,
1529 MSVCP_size_t off, const char *str, MSVCP_size_t str_len)
1531 return basic_string_char_replace_cstr_len(this, off, 0, str, str_len);
1534 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IID@Z */
1535 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0D@Z */
1536 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_chn, 16)
1537 basic_string_char* __thiscall basic_string_char_insert_chn(basic_string_char *this,
1538 MSVCP_size_t off, MSVCP_size_t count, char ch)
1540 return basic_string_char_replace_ch(this, off, 0, count, ch);
1543 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADPADD@Z */
1544 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADPEADD@Z */
1545 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_ch, 12)
1546 char* __thiscall basic_string_char_insert_iter_ch(basic_string_char *this, char *pos, char ch)
1548 MSVCP_size_t off = basic_string_char__Pdif(pos, this->ptr);
1549 basic_string_char_insert_chn(this, off, 1, ch);
1550 return basic_string_char__Psum(this->ptr, off);
1553 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXPADID@Z */
1554 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXPEAD_KD@Z */
1555 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_chn, 16)
1556 void __thiscall basic_string_char_insert_iter_chn(basic_string_char *this,
1557 char *pos, MSVCP_size_t n, char ch)
1559 basic_string_char_insert_chn(this, basic_string_char__Pdif(pos, this->ptr), n, ch);
1562 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXPADPBD1@Z */
1563 /* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXPEADPEBD1@Z */
1564 DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter, 16)
1565 void __thiscall basic_string_char_insert_iter(basic_string_char *this,
1566 char *pos, const char *beg, const char *end)
1568 basic_string_char_insert_cstr_len(this, basic_string_char__Pdif(pos, this->ptr),
1569 beg, basic_string_char__Pdif(end, beg));
1572 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXID@Z */
1573 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_KD@Z */
1574 DEFINE_THISCALL_WRAPPER(basic_string_char_resize_ch, 12)
1575 void __thiscall basic_string_char_resize_ch(
1576 basic_string_char *this, MSVCP_size_t size, char ch)
1578 TRACE("%p %lu %c\n", this, size, ch);
1580 if(size <= this->size)
1581 basic_string_char_erase(this, size, this->size);
1582 else
1583 basic_string_char_append_len_ch(this, size-this->size, ch);
1586 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXI@Z */
1587 /* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_K@Z */
1588 DEFINE_THISCALL_WRAPPER(basic_string_char_resize, 8)
1589 void __thiscall basic_string_char_resize(
1590 basic_string_char *this, MSVCP_size_t size)
1592 basic_string_char_resize_ch(this, size, '\0');
1595 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADXZ */
1596 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADXZ */
1597 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
1598 /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
1599 DEFINE_THISCALL_WRAPPER(basic_string_char_begin, 4)
1600 char* __thiscall basic_string_char_begin(basic_string_char *this)
1602 TRACE("(%p)\n", this);
1603 basic_string_char__Freeze(this);
1604 return this->ptr;
1607 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADXZ */
1608 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAPEADXZ */
1609 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
1610 /* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
1611 DEFINE_THISCALL_WRAPPER(basic_string_char_end, 4)
1612 char* __thiscall basic_string_char_end(basic_string_char *this)
1614 TRACE("(%p)\n", this);
1615 basic_string_char__Freeze(this);
1616 return this->ptr+this->size;
1619 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$reverse_iterator@PADDAADPADH@2@XZ */
1620 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$reverse_iterator@PEADDAEADPEAD_J@2@XZ */
1621 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$reverse_iterator@PBDDABDPBDH@2@XZ */
1622 /* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$reverse_iterator@PEBDDAEBDPEBD_J@2@XZ */
1623 DEFINE_THISCALL_WRAPPER(basic_string_char_rbegin, 8)
1624 String_reverse_iterator_char* __thiscall basic_string_char_rbegin(
1625 basic_string_char *this, String_reverse_iterator_char *ret)
1627 TRACE("(%p %p)\n", this, ret);
1628 ret->ptr = basic_string_char_end(this);
1629 return ret;
1632 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$reverse_iterator@PADDAADPADH@2@XZ */
1633 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$reverse_iterator@PEADDAEADPEAD_J@2@XZ */
1634 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$reverse_iterator@PBDDABDPBDH@2@XZ */
1635 /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$reverse_iterator@PEBDDAEBDPEBD_J@2@XZ */
1636 DEFINE_THISCALL_WRAPPER(basic_string_char_rend, 8)
1637 String_reverse_iterator_char* __thiscall basic_string_char_rend(
1638 basic_string_char *this, String_reverse_iterator_char *ret)
1640 TRACE("(%p %p)\n", this, ret);
1641 ret->ptr = basic_string_char_begin(this);
1642 return ret;
1645 /* ?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
1646 /* ?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
1647 /* ?data@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */
1648 /* ?data@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */
1649 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_c_str, 4)
1650 const char* __thiscall MSVCP_basic_string_char_c_str(const basic_string_char *this)
1652 TRACE("%p\n", this);
1653 return this->ptr;
1656 /* ?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1657 /* ?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1658 /* ?length@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1659 /* ?length@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1660 DEFINE_THISCALL_WRAPPER(basic_string_char_length, 4)
1661 MSVCP_size_t __thiscall basic_string_char_length(basic_string_char *this)
1663 TRACE("%p\n", this);
1664 return this->size;
1667 /* ?max_size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1668 /* ?max_size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1669 DEFINE_THISCALL_WRAPPER(basic_string_char_max_size, 4)
1670 MSVCP_size_t __thiscall basic_string_char_max_size(const basic_string_char *this)
1672 TRACE("%p\n", this);
1673 return MSVCP_allocator_char_max_size(NULL)-1;
1676 /* ?capacity@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */
1677 /* ?capacity@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */
1678 DEFINE_THISCALL_WRAPPER(basic_string_char_capacity, 4)
1679 MSVCP_size_t __thiscall basic_string_char_capacity(basic_string_char *this)
1681 TRACE("%p\n", this);
1682 return this->res;
1685 /* ?reserve@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXI@Z */
1686 /* ?reserve@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_K@Z */
1687 DEFINE_THISCALL_WRAPPER(basic_string_char_reserve, 8)
1688 void __thiscall basic_string_char_reserve(basic_string_char *this, MSVCP_size_t size)
1690 MSVCP_size_t len;
1692 TRACE("%p %ld\n", this, size);
1694 len = this->size;
1695 if(len > size)
1696 return;
1698 basic_string_char__Grow(this, size, FALSE);
1699 basic_string_char__Eos(this, len);
1702 /* ?empty@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE_NXZ */
1703 /* ?empty@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_NXZ */
1704 DEFINE_THISCALL_WRAPPER(basic_string_char_empty, 4)
1705 MSVCP_bool __thiscall basic_string_char_empty(basic_string_char *this)
1707 TRACE("%p\n", this);
1708 return this->size == 0;
1711 /* ?swap@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXAAV12@@Z */
1712 /* ?swap@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXAEAV12@@Z */
1713 DEFINE_THISCALL_WRAPPER(basic_string_char_swap, 8)
1714 void __thiscall basic_string_char_swap(basic_string_char *this, basic_string_char *str)
1716 basic_string_char tmp;
1717 TRACE("%p %p\n", this, str);
1719 tmp = *this;
1720 *this = *str;
1721 *str = tmp;
1724 /* ?substr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV12@II@Z */
1725 /* ?substr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV12@_K0@Z */
1726 DEFINE_THISCALL_WRAPPER(basic_string_char_substr, 16)
1727 basic_string_char* __thiscall basic_string_char_substr(basic_string_char *this,
1728 basic_string_char *ret, MSVCP_size_t off, MSVCP_size_t len)
1730 TRACE("%p %lu %lu\n", this, off, len);
1732 basic_string_char_ctor_substr_alloc(ret, this, off, len, NULL);
1733 return ret;
1736 /* ?copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPADII@Z */
1737 /* ?copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEAD_K1@Z */
1738 DEFINE_THISCALL_WRAPPER(basic_string_char_copy, 16)
1739 MSVCP_size_t __thiscall basic_string_char_copy(const basic_string_char *this,
1740 char *dest, MSVCP_size_t count, MSVCP_size_t off)
1742 TRACE("%p %p %lu %lu\n", this, dest, count, off);
1744 if(off > this->size)
1745 _Xran();
1746 if(count > this->size-off)
1747 count = this->size-off;
1748 char_traits_char__Copy_s(dest, count, this->ptr+off, count);
1749 return count;
1752 /* ?get_allocator@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$allocator@D@2@XZ */
1753 /* ?get_allocator@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$allocator@D@2@XZ */
1754 DEFINE_THISCALL_WRAPPER(basic_string_char_get_allocator, 8)
1755 allocator* __thiscall basic_string_char_get_allocator(const basic_string_char *this, allocator *ret)
1757 TRACE("%p\n", this);
1758 return ret;
1761 static wchar_t* char_traits_wchar__Move_s(wchar_t *dest,
1762 MSVCP_size_t size, const wchar_t *src, MSVCP_size_t count)
1764 if(!dest || !src || size<count) {
1765 if(dest && size)
1766 dest[0] = '\0';
1767 _invalid_parameter(NULL, NULL, NULL, 0, 0);
1768 return dest;
1771 return memmove(dest, src, count);
1774 static wchar_t* char_traits_wchar__Copy_s(wchar_t *dest,
1775 MSVCP_size_t size, const wchar_t *src, MSVCP_size_t count)
1777 if(!dest || !src || size<count) {
1778 if(dest && size)
1779 dest[0] = '\0';
1780 _invalid_parameter(NULL, NULL, NULL, 0, 0);
1781 return dest;
1784 return memcpy(dest, src, count);
1787 static MSVCP_size_t char_traits_wchar_length(const wchar_t *str)
1789 return wcslen((WCHAR*)str);
1792 static wchar_t* char_traits_wchar_assignn(wchar_t *str, MSVCP_size_t num, wchar_t c)
1794 return memset(str, c, num);
1797 static int char_traits_wchar_compare(const wchar_t *s1,
1798 const wchar_t *s2, MSVCP_size_t count)
1800 int ret = memcmp(s1, s2, count);
1801 return (ret>0 ? 1 : (ret<0 ? -1 : 0));
1804 static const wchar_t* char_traits_wchar_find(const wchar_t *str,
1805 MSVCP_size_t range, const wchar_t *c)
1807 return memchr(str, *c, range);
1810 static MSVCP_bool basic_string_wchar_inside(
1811 basic_string_wchar *this, const wchar_t *ptr)
1813 return (ptr<this->ptr || ptr>=this->ptr+this->size) ? FALSE : TRUE;
1816 /* ?npos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@2IB */
1817 /* ?npos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@2_KB */
1818 const MSVCP_size_t basic_string_wchar_npos = -1;
1820 /* ?_C@?1??_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPBGXZ@4GB */
1821 /* ?_C@?1??_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEBGXZ@4GB */
1822 const wchar_t basic_string_wchar_nullbyte = '\0';
1824 /* ?_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPBGXZ */
1825 /* ?_Nullstr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEBGXZ */
1826 const wchar_t* __cdecl basic_string_wchar__Nullstr(void)
1828 return &basic_string_wchar_nullbyte;
1831 /* ?_Refcnt@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEAAEPBG@Z */
1832 /* ?_Refcnt@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAAEAEPEBG@Z */
1833 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Refcnt, 8)
1834 unsigned short* __thiscall basic_string_wchar__Refcnt(basic_string_wchar *this, const wchar_t *ptr)
1836 TRACE("(%p %p)\n", this, ptr);
1837 return (unsigned short*)ptr-1;
1840 /* ?_Eos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXI@Z */
1841 /* ?_Eos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAX_K@Z */
1842 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Eos, 8)
1843 void __thiscall basic_string_wchar__Eos(basic_string_wchar *this, MSVCP_size_t len)
1845 this->size = len;
1846 this->ptr[len] = 0;
1849 /* ?_Tidy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEX_N@Z */
1850 /* ?_Tidy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAX_N@Z */
1851 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Tidy, 8)
1852 void __thiscall basic_string_wchar__Tidy(basic_string_wchar *this, MSVCP_bool built)
1854 TRACE("(%p %d)\n", this, built);
1856 if(!this->ptr || !built);
1857 else if(!this->ptr[-1] || (unsigned short)this->ptr[-1]==FROZEN)
1858 MSVCP_allocator_wchar_deallocate(NULL, this->ptr, this->res+2);
1859 else
1860 this->ptr[-1]--;
1862 memset(this, 0, sizeof(*this));
1865 MSVCP_bool __thiscall basic_string_wchar__Grow(basic_string_wchar*, MSVCP_size_t, MSVCP_bool);
1867 /* ?_Split@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXXZ */
1868 /* ?_Split@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAXXZ */
1869 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Split, 4)
1870 void __thiscall basic_string_wchar__Split(basic_string_wchar *this)
1872 MSVCP_size_t len;
1873 wchar_t *ptr;
1875 TRACE("(%p)\n", this);
1877 if(!this->ptr || !this->ptr[-1] || (unsigned short)this->ptr[-1]==FROZEN)
1878 return;
1880 ptr = this->ptr;
1881 len = this->size;
1882 basic_string_wchar__Tidy(this, TRUE);
1883 if(basic_string_wchar__Grow(this, len, FALSE)) {
1884 char_traits_wchar__Copy_s(this->ptr, this->res, ptr, len);
1885 basic_string_wchar__Eos(this, len);
1889 /* ?_Grow@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAE_NI_N@Z */
1890 /* ?_Grow@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAA_N_K_N@Z */
1891 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Grow, 12)
1892 MSVCP_bool __thiscall basic_string_wchar__Grow(basic_string_wchar *this, MSVCP_size_t new_size, MSVCP_bool trim)
1894 /* Fixme: grow string using one reallocation, don't ignore trim flag */
1895 basic_string_wchar__Split(this);
1897 if(this->res < new_size) {
1898 MSVCP_size_t new_res = new_size, len = this->size;
1899 wchar_t *ptr;
1901 new_res |= 0xf;
1903 if(new_res/3 < this->res/2)
1904 new_res = this->res + this->res/2;
1906 ptr = MSVCP_allocator_wchar_allocate(this->allocator, new_res+1);
1907 if(!ptr)
1908 ptr = MSVCP_allocator_wchar_allocate(this->allocator, new_size+1);
1909 else
1910 new_size = new_res;
1911 if(!ptr) {
1912 ERR("Out of memory\n");
1913 basic_string_wchar__Tidy(this, TRUE);
1914 return FALSE;
1917 if(this->ptr)
1918 char_traits_wchar__Copy_s(ptr, new_size, this->ptr, this->size);
1919 basic_string_wchar__Tidy(this, TRUE);
1920 this->ptr = ptr;
1921 this->res = new_size;
1922 basic_string_wchar__Eos(this, len);
1923 } else if(new_size == 0)
1924 basic_string_wchar__Eos(this, 0);
1926 return (new_size>0);
1929 /* ?_Freeze@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXXZ */
1930 /* ?_Freeze@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAXXZ */
1931 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Freeze, 4)
1932 void __thiscall basic_string_wchar__Freeze(basic_string_wchar *this)
1934 TRACE("(%p)\n", this);
1935 basic_string_wchar__Split(this);
1936 if(this->ptr)
1937 this->ptr[-1] = FROZEN;
1940 /* ?_Copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEXI@Z */
1941 /* ?_Copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAX_K@Z */
1942 DEFINE_THISCALL_WRAPPER(basic_string_wchar__Copy, 8)
1943 void __thiscall basic_string_wchar__Copy(basic_string_wchar *this, MSVCP_size_t copy_len)
1945 TRACE("%p %lu\n", this, copy_len);
1947 if(!basic_string_wchar__Grow(this, copy_len, FALSE))
1948 return;
1949 basic_string_wchar__Eos(this, copy_len);
1952 /* ?_Pdif@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAIPBG0@Z */
1953 /* ?_Pdif@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CA_KPEBG0@Z */
1954 MSVCP_size_t __cdecl basic_string_wchar__Pdif(const wchar_t *i1, const wchar_t *i2)
1956 TRACE("(%p %p)\n", i1, i2);
1957 return !i1 ? 0 : i1-i2;
1960 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPAGPAGI@Z */
1961 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEAGPEAG_K@Z */
1962 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPBGPBGI@Z */
1963 /* ?_Psum@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@CAPEBGPEBG_K@Z */
1964 wchar_t* __cdecl basic_string_wchar__Psum(wchar_t *iter, MSVCP_size_t add)
1966 TRACE("(%p %lu)", iter, add);
1967 return iter ? iter+add : iter;
1970 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@II@Z */
1971 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0@Z */
1972 DEFINE_THISCALL_WRAPPER(basic_string_wchar_erase, 12)
1973 basic_string_wchar* __thiscall basic_string_wchar_erase(
1974 basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t len)
1976 TRACE("%p %lu %lu\n", this, pos, len);
1978 if(pos > this->size)
1979 _Xran();
1981 if(len > this->size-pos)
1982 len = this->size-pos;
1984 if(len) {
1985 basic_string_wchar__Split(this);
1986 char_traits_wchar__Move_s(this->ptr+pos, this->res-pos,
1987 this->ptr+pos+len, this->size-pos-len);
1988 basic_string_wchar__Eos(this, this->size-len);
1991 return this;
1994 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGPAG0@Z */
1995 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGPEAG0@Z */
1996 DEFINE_THISCALL_WRAPPER(basic_string_wchar_erase_iter, 12)
1997 wchar_t* __thiscall basic_string_wchar_erase_iter(basic_string_wchar *this, wchar_t *beg, wchar_t *end)
1999 MSVCP_size_t pos = basic_string_wchar__Pdif(beg, this->ptr);
2000 basic_string_wchar_erase(this, pos, basic_string_wchar__Pdif(end, beg));
2001 return basic_string_wchar__Psum(this->ptr, pos);
2004 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGPAG@Z */
2005 /* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGPEAG@Z */
2006 DEFINE_THISCALL_WRAPPER(basic_string_wchar_erase_beg, 8)
2007 wchar_t* __thiscall basic_string_wchar_erase_beg(basic_string_wchar *this, wchar_t *beg)
2009 MSVCP_size_t pos = beg-this->ptr;
2010 basic_string_wchar_erase(this, pos, 1);
2011 return this->ptr+pos;
2014 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@II@Z */
2015 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
2016 DEFINE_THISCALL_WRAPPER(basic_string_wchar_assign_substr, 16)
2017 basic_string_wchar* __thiscall basic_string_wchar_assign_substr(
2018 basic_string_wchar *this, const basic_string_wchar *assign,
2019 MSVCP_size_t pos, MSVCP_size_t len)
2021 TRACE("%p %p %lu %lu\n", this, assign, pos, len);
2023 if(assign->size < pos)
2024 _Xran();
2026 if(len > assign->size-pos)
2027 len = assign->size-pos;
2029 if(this == assign) {
2030 basic_string_wchar_erase(this, pos+len, basic_string_wchar_npos);
2031 basic_string_wchar_erase(this, 0, pos);
2032 } else if(basic_string_wchar__Grow(this, len, FALSE)) {
2033 char_traits_wchar__Copy_s(this->ptr, this->res,
2034 assign->ptr+pos, len);
2035 basic_string_wchar__Eos(this, len);
2038 return this;
2041 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBGI@Z */
2042 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG_K@Z */
2043 DEFINE_THISCALL_WRAPPER(basic_string_wchar_assign_cstr_len, 12)
2044 basic_string_wchar* __thiscall basic_string_wchar_assign_cstr_len(
2045 basic_string_wchar *this, const wchar_t *str, MSVCP_size_t len)
2047 TRACE("%p %s %lu\n", this, debugstr_w(str), len);
2049 if(basic_string_wchar_inside(this, str))
2050 return basic_string_wchar_assign_substr(this, this, str-this->ptr, len);
2051 else if(basic_string_wchar__Grow(this, len, FALSE)) {
2052 char_traits_wchar__Copy_s(this->ptr, this->res, str, len);
2053 basic_string_wchar__Eos(this, len);
2056 return this;
2059 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@@Z */
2060 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@@Z */
2061 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@ABV01@@Z */
2062 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@AEBV01@@Z */
2063 DEFINE_THISCALL_WRAPPER(basic_string_wchar_assign, 8)
2064 basic_string_wchar* __thiscall basic_string_wchar_assign(
2065 basic_string_wchar *this, const basic_string_wchar *assign)
2067 return basic_string_wchar_assign_substr(this, assign,
2068 0, basic_string_wchar_npos);
2071 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG@Z */
2072 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG@Z */
2073 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@PBG@Z */
2074 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@PEBG@Z */
2075 DEFINE_THISCALL_WRAPPER(basic_string_wchar_assign_cstr, 8)
2076 basic_string_wchar* __thiscall basic_string_wchar_assign_cstr(
2077 basic_string_wchar *this, const wchar_t *str)
2079 return basic_string_wchar_assign_cstr_len(this, str,
2080 char_traits_wchar_length(str));
2083 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@G@Z */
2084 /* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@G@Z */
2085 DEFINE_THISCALL_WRAPPER(basic_string_wchar_assign_ch, 8)
2086 basic_string_wchar* __thiscall basic_string_wchar_assign_ch(
2087 basic_string_wchar *this, wchar_t ch)
2089 return basic_string_wchar_assign_cstr_len(this, &ch, 1);
2092 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IG@Z */
2093 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KG@Z */
2094 DEFINE_THISCALL_WRAPPER(basic_string_wchar_assignn, 12)
2095 basic_string_wchar* __thiscall basic_string_wchar_assignn(
2096 basic_string_wchar *this, MSVCP_size_t count, wchar_t ch)
2098 TRACE("%p %ld %c\n", this, count, ch);
2100 basic_string_wchar__Grow(this, count, FALSE);
2101 char_traits_wchar_assignn(this->ptr, count, ch);
2102 basic_string_wchar__Eos(this, count);
2103 return this;
2106 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG0@Z */
2107 /* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG0@Z */
2108 DEFINE_THISCALL_WRAPPER(basic_string_wchar_assign_ptr_ptr, 12)
2109 basic_string_wchar* __thiscall basic_string_wchar_assign_ptr_ptr(
2110 basic_string_wchar *this, const wchar_t *first, const wchar_t *last)
2112 return basic_string_wchar_assign_cstr_len(this, first, last-first);
2115 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBGIABV?$allocator@G@1@@Z */
2116 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG_KAEBV?$allocator@G@1@@Z */
2117 DEFINE_THISCALL_WRAPPER(basic_string_wchar_ctor_cstr_len_alloc, 16)
2118 basic_string_wchar* __thiscall basic_string_wchar_ctor_cstr_len_alloc(
2119 basic_string_wchar *this, const wchar_t *str, MSVCP_size_t len, const void *alloc)
2121 TRACE("%p %s %ld\n", this, debugstr_w(str), len);
2123 basic_string_wchar__Tidy(this, FALSE);
2124 basic_string_wchar_assign_cstr_len(this, str, len);
2125 return this;
2128 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV01@IIABV?$allocator@G@1@@Z */
2129 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV01@_K1AEBV?$allocator@G@1@@Z */
2130 DEFINE_THISCALL_WRAPPER(basic_string_wchar_ctor_substr_alloc, 20)
2131 basic_string_wchar* __thiscall basic_string_wchar_ctor_substr_alloc(
2132 basic_string_wchar *this, const basic_string_wchar *assign,
2133 MSVCP_size_t pos, MSVCP_size_t len, const void *alloc)
2135 TRACE("%p %p %lu %lu\n", this, assign, pos, len);
2137 basic_string_wchar__Tidy(this, FALSE);
2138 basic_string_wchar_assign_substr(this, assign, pos, len);
2139 return this;
2142 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBGABV?$allocator@G@1@@Z */
2143 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBGAEBV?$allocator@G@1@@Z */
2144 DEFINE_THISCALL_WRAPPER(basic_string_wchar_ctor_cstr_alloc, 12)
2145 basic_string_wchar* __thiscall basic_string_wchar_ctor_cstr_alloc(
2146 basic_string_wchar *this, const wchar_t *str, const void *alloc)
2148 TRACE("%p %s\n", this, debugstr_w(str));
2150 basic_string_wchar__Tidy(this, FALSE);
2151 basic_string_wchar_assign_cstr(this, str);
2152 return this;
2155 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr(
2156 basic_string_wchar *this, const wchar_t *str)
2158 return basic_string_wchar_ctor_cstr_alloc(this, str, NULL);
2161 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@IGABV?$allocator@G@1@@Z */
2162 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@_KGAEBV?$allocator@G@1@@Z */
2163 DEFINE_THISCALL_WRAPPER(basic_string_wchar_ctor_ch_alloc, 16)
2164 basic_string_wchar* __thiscall basic_string_wchar_ctor_ch_alloc(basic_string_wchar *this,
2165 MSVCP_size_t count, wchar_t ch, const void *alloc)
2167 TRACE("%p %ld %c\n", this, count, ch);
2169 basic_string_wchar__Tidy(this, FALSE);
2170 basic_string_wchar_assignn(this, count, ch);
2171 return this;
2174 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBG0ABV?$allocator@G@1@@Z */
2175 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG0AEBV?$allocator@G@1@@Z */
2176 DEFINE_THISCALL_WRAPPER(basic_string_wchar_ctor_iter, 16)
2177 basic_string_wchar* __thiscall basic_string_wchar_ctor_iter(basic_string_wchar *this,
2178 const wchar_t *first, const wchar_t *last, allocator *alloc)
2180 TRACE("(%p %p %p %p)\n", this, first, last, alloc);
2182 basic_string_wchar__Tidy(this, FALSE);
2183 basic_string_wchar_assign_cstr_len(this, first, basic_string_wchar__Pdif(last, first));
2184 return this;
2187 /* ??_F?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */
2188 /* ??_F?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */
2189 DEFINE_THISCALL_WRAPPER(basic_string_wchar_ctor, 4)
2190 basic_string_wchar* __thiscall basic_string_wchar_ctor(basic_string_wchar *this)
2192 TRACE("%p\n", this);
2194 basic_string_wchar__Tidy(this, FALSE);
2195 return this;
2198 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV?$allocator@G@1@@Z */
2199 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV?$allocator@G@1@@Z */
2200 DEFINE_THISCALL_WRAPPER(basic_string_wchar_ctor_alloc, 8)
2201 basic_string_wchar* __thiscall basic_string_wchar_ctor_alloc(
2202 basic_string_wchar *this, const void *alloc)
2204 TRACE("%p %p\n", this, alloc);
2206 basic_string_wchar__Tidy(this, FALSE);
2207 return this;
2210 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV01@@Z */
2211 /* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV01@@Z */
2212 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_copy_ctor, 8)
2213 basic_string_wchar* __thiscall MSVCP_basic_string_wchar_copy_ctor(
2214 basic_string_wchar *this, const basic_string_wchar *copy)
2216 TRACE("%p %p\n", this, copy);
2218 basic_string_wchar__Tidy(this, FALSE);
2219 basic_string_wchar_assign(this, copy);
2220 return this;
2223 /* ??1?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@XZ */
2224 /* ??1?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@XZ */
2225 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_dtor, 4)
2226 void __thiscall MSVCP_basic_string_wchar_dtor(basic_string_wchar *this)
2228 TRACE("%p\n", this);
2229 basic_string_wchar__Tidy(this, TRUE);
2232 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIPBGI@Z */
2233 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0PEBG0@Z */
2234 DEFINE_THISCALL_WRAPPER(basic_string_wchar_compare_substr_cstr_len, 20)
2235 int __thiscall basic_string_wchar_compare_substr_cstr_len(
2236 const basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t num,
2237 const wchar_t *str, MSVCP_size_t count)
2239 int ans;
2241 TRACE("%p %lu %lu %s %lu\n", this, pos, num, debugstr_w(str), count);
2243 if(this->size < pos)
2244 _Xran();
2246 if(pos+num > this->size)
2247 num = this->size-pos;
2249 ans = char_traits_wchar_compare(this->ptr+pos,
2250 str, num>count ? count : num);
2251 if(ans)
2252 return ans;
2254 if(num > count)
2255 ans = 1;
2256 else if(num < count)
2257 ans = -1;
2258 return ans;
2261 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHPBG@Z */
2262 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAHPEBG@Z */
2263 DEFINE_THISCALL_WRAPPER(basic_string_wchar_compare_cstr, 8)
2264 int __thiscall basic_string_wchar_compare_cstr(
2265 const basic_string_wchar *this, const wchar_t *str)
2267 return basic_string_wchar_compare_substr_cstr_len(this, 0, this->size,
2268 str, char_traits_wchar_length(str));
2271 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIABV12@II@Z */
2272 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0AEBV12@00@Z */
2273 DEFINE_THISCALL_WRAPPER(basic_string_wchar_compare_substr_substr, 24)
2274 int __thiscall basic_string_wchar_compare_substr_substr(
2275 const basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t num,
2276 const basic_string_wchar *compare, MSVCP_size_t off, MSVCP_size_t count)
2278 TRACE("%p %lu %lu %p %lu %lu\n", this, pos, num, compare, off, count);
2280 if(compare->size < off)
2281 _Xran();
2283 if(off+count > compare->size)
2284 count = compare->size-off;
2286 return basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2287 compare->ptr+off, count);
2290 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIABV12@@Z */
2291 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0AEBV12@@Z */
2292 DEFINE_THISCALL_WRAPPER(basic_string_wchar_compare_substr, 16)
2293 int __thiscall basic_string_wchar_compare_substr(
2294 const basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t num,
2295 const basic_string_wchar *compare)
2297 return basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2298 compare->ptr, compare->size);
2301 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHABV12@@Z */
2302 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAHAEBV12@@Z */
2303 DEFINE_THISCALL_WRAPPER(basic_string_wchar_compare, 8)
2304 int __thiscall basic_string_wchar_compare(
2305 const basic_string_wchar *this, const basic_string_wchar *compare)
2307 return basic_string_wchar_compare_substr_cstr_len(this, 0, this->size,
2308 compare->ptr, compare->size);
2311 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIPBG@Z */
2312 /* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0PEBG@Z */
2313 DEFINE_THISCALL_WRAPPER(basic_string_wchar_compare_substr_cstr, 16)
2314 int __thiscall basic_string_wchar_compare_substr_cstr(const basic_string_wchar *this,
2315 MSVCP_size_t pos, MSVCP_size_t num, const wchar_t *str)
2317 return basic_string_wchar_compare_substr_cstr_len(this, pos, num,
2318 str, char_traits_wchar_length(str));
2321 /* ??$?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 */
2322 /* ??$?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 */
2323 /* ??8std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2324 /* ??8std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2325 MSVCP_bool __cdecl basic_string_wchar_equal(
2326 const basic_string_wchar *left, const basic_string_wchar *right)
2328 return basic_string_wchar_compare(left, right) == 0;
2331 /* ??$?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 */
2332 /* ??$?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 */
2333 /* ??8std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2334 /* ??8std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2335 MSVCP_bool __cdecl basic_string_wchar_equal_str_cstr(
2336 const basic_string_wchar *left, const wchar_t *right)
2338 return basic_string_wchar_compare_cstr(left, right) == 0;
2341 /* ??$?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 */
2342 /* ??$?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 */
2343 /* ??8std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2344 /* ??8std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2345 MSVCP_bool __cdecl basic_string_wchar_equal_cstr_str(
2346 const wchar_t *left, const basic_string_wchar *right)
2348 return basic_string_wchar_compare_cstr(right, left) == 0;
2351 /* ??$?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 */
2352 /* ??$?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 */
2353 /* ??9std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2354 /* ??9std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2355 MSVCP_bool __cdecl basic_string_wchar_not_equal(
2356 const basic_string_wchar *left, const basic_string_wchar *right)
2358 return basic_string_wchar_compare(left, right) != 0;
2361 /* ??$?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 */
2362 /* ??$?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 */
2363 /* ??9std@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2364 /* ??9std@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2365 MSVCP_bool __cdecl basic_string_wchar_not_equal_str_cstr(
2366 const basic_string_wchar *left, const wchar_t *right)
2368 return basic_string_wchar_compare_cstr(left, right) != 0;
2371 /* ??$?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 */
2372 /* ??$?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 */
2373 /* ??9std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2374 /* ??9std@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2375 MSVCP_bool __cdecl basic_string_wchar_not_equal_cstr_str(
2376 const wchar_t *left, const basic_string_wchar *right)
2378 return basic_string_wchar_compare_cstr(right, left) != 0;
2381 /* ??$?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 */
2382 /* ??$?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 */
2383 /* ??Mstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2384 /* ??Mstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2385 MSVCP_bool __cdecl basic_string_wchar_lower(
2386 const basic_string_wchar *left, const basic_string_wchar *right)
2388 return basic_string_wchar_compare(left, right) < 0;
2391 /* ??$?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 */
2392 /* ??$?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 */
2393 /* ??Mstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2394 /* ??Mstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2395 MSVCP_bool __cdecl basic_string_wchar_lower_bstr_cstr(
2396 const basic_string_wchar *left, const wchar_t *right)
2398 return basic_string_wchar_compare_cstr(left, right) < 0;
2401 /* ??$?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 */
2402 /* ??$?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 */
2403 /* ??Mstd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2404 /* ??Mstd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2405 MSVCP_bool __cdecl basic_string_wchar_lower_cstr_bstr(
2406 const wchar_t *left, const basic_string_wchar *right)
2408 return basic_string_wchar_compare_cstr(right, left) > 0;
2411 /* ??$?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 */
2412 /* ??$?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 */
2413 /* ??Nstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2414 /* ??Nstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2415 MSVCP_bool __cdecl basic_string_wchar_leq(
2416 const basic_string_wchar *left, const basic_string_wchar *right)
2418 return basic_string_wchar_compare(left, right) <= 0;
2421 /* ??$?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 */
2422 /* ??$?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 */
2423 /* ??Nstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2424 /* ??Nstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2425 MSVCP_bool __cdecl basic_string_wchar_leq_bstr_cstr(
2426 const basic_string_wchar *left, const wchar_t *right)
2428 return basic_string_wchar_compare_cstr(left, right) <= 0;
2431 /* ??$?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 */
2432 /* ??$?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 */
2433 /* ??Nstd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2434 /* ??Nstd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2435 MSVCP_bool __cdecl basic_string_wchar_leq_cstr_bstr(
2436 const wchar_t *left, const basic_string_wchar *right)
2438 return basic_string_wchar_compare_cstr(right, left) >= 0;
2441 /* ??$?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 */
2442 /* ??$?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 */
2443 /* ??Ostd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2444 /* ??Ostd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2445 MSVCP_bool __cdecl basic_string_wchar_greater(
2446 const basic_string_wchar *left, const basic_string_wchar *right)
2448 return basic_string_wchar_compare(left, right) > 0;
2451 /* ??$?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 */
2452 /* ??$?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 */
2453 /* ??Ostd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2454 /* ??Ostd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2455 MSVCP_bool __cdecl basic_string_wchar_greater_bstr_cstr(
2456 const basic_string_wchar *left, const wchar_t *right)
2458 return basic_string_wchar_compare_cstr(left, right) > 0;
2461 /* ??$?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 */
2462 /* ??$?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 */
2463 /* ??Ostd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2464 /* ??Ostd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2465 MSVCP_bool __cdecl basic_string_wchar_greater_cstr_bstr(
2466 const wchar_t *left, const basic_string_wchar *right)
2468 return basic_string_wchar_compare_cstr(right, left) < 0;
2471 /* ??$?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 */
2472 /* ??$?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 */
2473 /* ??Pstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2474 /* ??Pstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@0@Z */
2475 MSVCP_bool __cdecl basic_string_wchar_geq(
2476 const basic_string_wchar *left, const basic_string_wchar *right)
2478 return basic_string_wchar_compare(left, right) >= 0;
2481 /* ??$?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 */
2482 /* ??$?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 */
2483 /* ??Pstd@@YA_NABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBG@Z */
2484 /* ??Pstd@@YA_NAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBG@Z */
2485 MSVCP_bool __cdecl basic_string_wchar_geq_bstr_cstr(
2486 const basic_string_wchar *left, const wchar_t *right)
2488 return basic_string_wchar_compare_cstr(left, right) >= 0;
2491 /* ??$?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 */
2492 /* ??$?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 */
2493 /* ??Pstd@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2494 /* ??Pstd@@YA_NPEBGAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
2495 MSVCP_bool __cdecl basic_string_wchar_geq_cstr_bstr(
2496 const wchar_t *left, const basic_string_wchar *right)
2498 return basic_string_wchar_compare_cstr(right, left) <= 0;
2501 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2502 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2503 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_cstr_substr, 16)
2504 MSVCP_size_t __thiscall basic_string_wchar_find_cstr_substr(
2505 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos, MSVCP_size_t len)
2507 const wchar_t *p, *end;
2509 TRACE("%p %s %lu %lu\n", this, debugstr_w(find), pos, len);
2511 if(len==0 && pos<=this->size)
2512 return pos;
2514 end = this->ptr+this->size-len+1;
2515 for(p=this->ptr+pos; p<end; p++) {
2516 p = char_traits_wchar_find(p, end-p, find);
2517 if(!p)
2518 break;
2520 if(!char_traits_wchar_compare(p, find, len))
2521 return p-this->ptr;
2524 return basic_string_wchar_npos;
2527 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2528 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2529 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_off, 12)
2530 MSVCP_size_t __thiscall basic_string_wchar_find_off(
2531 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2533 return basic_string_wchar_find_cstr_substr(this, find->ptr, off, find->size);
2536 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2537 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2538 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_ch, 12)
2539 MSVCP_size_t __thiscall basic_string_wchar_find_ch(
2540 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t pos)
2542 return basic_string_wchar_find_cstr_substr(this, &ch, pos, 1);
2545 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2546 /* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2547 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_cstr_off, 12)
2548 MSVCP_size_t __thiscall basic_string_wchar_find_cstr_off(
2549 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos)
2551 return basic_string_wchar_find_cstr_substr(this, find, pos,
2552 char_traits_wchar_length(find));
2555 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2556 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2557 DEFINE_THISCALL_WRAPPER(basic_string_wchar_rfind_cstr_substr, 16)
2558 MSVCP_size_t __thiscall basic_string_wchar_rfind_cstr_substr(
2559 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos, MSVCP_size_t len)
2561 const wchar_t *p, *end;
2563 TRACE("%p %s %lu %lu\n", this, debugstr_w(find), pos, len);
2565 if(len==0)
2566 return pos<this->size ? pos : this->size;
2568 if(len > this->size)
2569 return basic_string_wchar_npos;
2571 if(pos > this->size-len+1)
2572 pos = this->size-len+1;
2573 end = this->ptr;
2574 for(p=end+pos-1; p>=end; p--) {
2575 if(*p==*find && !char_traits_wchar_compare(p, find, len))
2576 return p-this->ptr;
2579 return basic_string_wchar_npos;
2582 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2583 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2584 DEFINE_THISCALL_WRAPPER(basic_string_wchar_rfind_off, 12)
2585 MSVCP_size_t __thiscall basic_string_wchar_rfind_off(
2586 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2588 return basic_string_wchar_rfind_cstr_substr(this, find->ptr, off, find->size);
2591 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2592 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2593 DEFINE_THISCALL_WRAPPER(basic_string_wchar_rfind_ch, 12)
2594 MSVCP_size_t __thiscall basic_string_wchar_rfind_ch(
2595 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t pos)
2597 return basic_string_wchar_find_cstr_substr(this, &ch, pos, 1);
2600 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2601 /* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2602 DEFINE_THISCALL_WRAPPER(basic_string_wchar_rfind_cstr_off, 12)
2603 MSVCP_size_t __thiscall basic_string_wchar_rfind_cstr_off(
2604 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos)
2606 return basic_string_wchar_rfind_cstr_substr(this, find, pos,
2607 char_traits_wchar_length(find));
2610 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2611 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2612 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_first_not_of_cstr_substr, 16)
2613 MSVCP_size_t __thiscall basic_string_wchar_find_first_not_of_cstr_substr(
2614 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len)
2616 const wchar_t *p, *end;
2618 TRACE("%p %p %lu %lu\n", this, find, off, len);
2620 if(off<this->size) {
2621 end = this->ptr+this->size;
2622 for(p=this->ptr+off; p<end; p++)
2623 if(!char_traits_wchar_find(find, len, p))
2624 return p-this->ptr;
2627 return basic_string_wchar_npos;
2630 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2631 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2632 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_first_not_of, 12)
2633 MSVCP_size_t __thiscall basic_string_wchar_find_first_not_of(
2634 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2636 return basic_string_wchar_find_first_not_of_cstr_substr(this,
2637 find->ptr, off, find->size);
2640 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2641 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2642 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_first_not_of_ch, 12)
2643 MSVCP_size_t __thiscall basic_string_wchar_find_first_not_of_ch(
2644 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off)
2646 return basic_string_wchar_find_first_not_of_cstr_substr(this, &ch, off, 1);
2649 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2650 /* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2651 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_first_not_of_cstr, 12)
2652 MSVCP_size_t __thiscall basic_string_wchar_find_first_not_of_cstr(
2653 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off)
2655 return basic_string_wchar_find_first_not_of_cstr_substr(
2656 this, find, off, char_traits_wchar_length(find));
2659 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2660 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2661 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_first_of_cstr_substr, 16)
2662 MSVCP_size_t __thiscall basic_string_wchar_find_first_of_cstr_substr(
2663 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len)
2665 const wchar_t *p, *end;
2667 TRACE("%p %p %lu %lu\n", this, find, off, len);
2669 if(len>0 && off<this->size) {
2670 end = this->ptr+this->size;
2671 for(p=this->ptr+off; p<end; p++)
2672 if(char_traits_wchar_find(find, len, p))
2673 return p-this->ptr;
2676 return basic_string_wchar_npos;
2679 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2680 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2681 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_first_of, 12)
2682 MSVCP_size_t __thiscall basic_string_wchar_find_first_of(
2683 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2685 return basic_string_wchar_find_first_of_cstr_substr(this,
2686 find->ptr, off, find->size);
2689 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2690 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2691 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_first_of_ch, 12)
2692 MSVCP_size_t __thiscall basic_string_wchar_find_first_of_ch(
2693 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off)
2695 return basic_string_wchar_find_first_of_cstr_substr(this, &ch, off, 1);
2698 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2699 /* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2700 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_first_of_cstr, 12)
2701 MSVCP_size_t __thiscall basic_string_wchar_find_first_of_cstr(
2702 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off)
2704 return basic_string_wchar_find_first_of_cstr_substr(
2705 this, find, off, char_traits_wchar_length(find));
2708 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2709 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2710 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_last_not_of_cstr_substr, 16)
2711 MSVCP_size_t __thiscall basic_string_wchar_find_last_not_of_cstr_substr(
2712 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len)
2714 const wchar_t *p, *beg;
2716 TRACE("%p %p %lu %lu\n", this, find, off, len);
2718 if(len>0 && this->size>0) {
2719 if(off >= this->size)
2720 off = this->size-1;
2722 beg = this->ptr;
2723 for(p=beg+off; p>=beg; p--)
2724 if(!char_traits_wchar_find(find, len, p))
2725 return p-beg;
2728 return basic_string_wchar_npos;
2731 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2732 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2733 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_last_not_of, 12)
2734 MSVCP_size_t __thiscall basic_string_wchar_find_last_not_of(
2735 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2737 return basic_string_wchar_find_last_not_of_cstr_substr(this,
2738 find->ptr, off, find->size);
2741 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2742 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2743 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_last_not_of_ch, 12)
2744 MSVCP_size_t __thiscall basic_string_wchar_find_last_not_of_ch(
2745 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off)
2747 return basic_string_wchar_find_last_not_of_cstr_substr(this, &ch, off, 1);
2750 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2751 /* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2752 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_last_not_of_cstr, 12)
2753 MSVCP_size_t __thiscall basic_string_wchar_find_last_not_of_cstr(
2754 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off)
2756 return basic_string_wchar_find_last_not_of_cstr_substr(
2757 this, find, off, char_traits_wchar_length(find));
2760 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */
2761 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */
2762 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_last_of_cstr_substr, 16)
2763 MSVCP_size_t __thiscall basic_string_wchar_find_last_of_cstr_substr(
2764 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len)
2766 const wchar_t *p, *beg;
2768 TRACE("%p %p %lu %lu\n", this, find, off, len);
2770 if(len>0 && this->size>0) {
2771 if(off >= this->size)
2772 off = this->size-1;
2774 beg = this->ptr;
2775 for(p=beg+off; p>=beg; p--)
2776 if(char_traits_wchar_find(find, len, p))
2777 return p-beg;
2780 return basic_string_wchar_npos;
2783 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */
2784 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */
2785 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_last_of, 12)
2786 MSVCP_size_t __thiscall basic_string_wchar_find_last_of(
2787 const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off)
2789 return basic_string_wchar_find_last_of_cstr_substr(this,
2790 find->ptr, off, find->size);
2793 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */
2794 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */
2795 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_last_of_ch, 12)
2796 MSVCP_size_t __thiscall basic_string_wchar_find_last_of_ch(
2797 const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off)
2799 return basic_string_wchar_find_last_of_cstr_substr(this, &ch, off, 1);
2802 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */
2803 /* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */
2804 DEFINE_THISCALL_WRAPPER(basic_string_wchar_find_last_of_cstr, 12)
2805 MSVCP_size_t __thiscall basic_string_wchar_find_last_of_cstr(
2806 const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off)
2808 return basic_string_wchar_find_last_of_cstr_substr(
2809 this, find, off, char_traits_wchar_length(find));
2812 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@II@Z */
2813 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */
2814 DEFINE_THISCALL_WRAPPER(basic_string_wchar_append_substr, 16)
2815 basic_string_wchar* __thiscall basic_string_wchar_append_substr(basic_string_wchar *this,
2816 const basic_string_wchar *append, MSVCP_size_t offset, MSVCP_size_t count)
2818 TRACE("%p %p %lu %lu\n", this, append, offset, count);
2820 if(append->size < offset)
2821 _Xran();
2823 if(count > append->size-offset)
2824 count = append->size-offset;
2826 if(basic_string_wchar_npos-this->size<=count || this->size+count<this->size)
2827 _Xlen();
2829 if(basic_string_wchar__Grow(this, this->size+count, FALSE)) {
2830 char_traits_wchar__Copy_s(this->ptr+this->size,
2831 this->res-this->size, append->ptr+offset, count);
2832 basic_string_wchar__Eos(this, this->size+count);
2835 return this;
2838 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBGI@Z */
2839 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG_K@Z */
2840 DEFINE_THISCALL_WRAPPER(basic_string_wchar_append_cstr_len, 12)
2841 basic_string_wchar* __thiscall basic_string_wchar_append_cstr_len(
2842 basic_string_wchar *this, const wchar_t *append, MSVCP_size_t count)
2844 TRACE("%p %s %lu\n", this, debugstr_w(append), count);
2846 if(basic_string_wchar_inside(this, append))
2847 return basic_string_wchar_append_substr(this, this, append-this->ptr, count);
2849 if(basic_string_wchar_npos-this->size<=count || this->size+count<this->size)
2850 _Xlen();
2852 if(basic_string_wchar__Grow(this, this->size+count, FALSE)) {
2853 char_traits_wchar__Copy_s(this->ptr+this->size,
2854 this->res-this->size, append, count);
2855 basic_string_wchar__Eos(this, this->size+count);
2858 return this;
2861 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IG@Z */
2862 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KG@Z */
2863 DEFINE_THISCALL_WRAPPER(basic_string_wchar_append_len_ch, 12)
2864 basic_string_wchar* __thiscall basic_string_wchar_append_len_ch(
2865 basic_string_wchar *this, MSVCP_size_t count, wchar_t ch)
2867 TRACE("%p %lu %c\n", this, count, ch);
2869 if(basic_string_wchar_npos-this->size <= count)
2870 _Xlen();
2872 if(basic_string_wchar__Grow(this, this->size+count, FALSE)) {
2873 char_traits_wchar_assignn(this->ptr+this->size, count, ch);
2874 basic_string_wchar__Eos(this, this->size+count);
2877 return this;
2880 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@@Z */
2881 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@@Z */
2882 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@ABV01@@Z */
2883 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@AEBV01@@Z */
2884 DEFINE_THISCALL_WRAPPER(basic_string_wchar_append, 8)
2885 basic_string_wchar* __thiscall basic_string_wchar_append(
2886 basic_string_wchar *this, const basic_string_wchar *append)
2888 return basic_string_wchar_append_substr(this, append,
2889 0, basic_string_wchar_npos);
2892 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@G@Z */
2893 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@G@Z */
2894 DEFINE_THISCALL_WRAPPER(basic_string_wchar_append_ch, 8)
2895 basic_string_wchar* __thiscall basic_string_wchar_append_ch(
2896 basic_string_wchar *this, wchar_t ch)
2898 return basic_string_wchar_append_len_ch(this, 1, ch);
2901 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG0@Z */
2902 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG0@Z */
2903 DEFINE_THISCALL_WRAPPER(basic_string_wchar_append_beg_end, 12)
2904 basic_string_wchar* __thiscall basic_string_wchar_append_beg_end(
2905 basic_string_wchar *this, const wchar_t *beg, const wchar_t *end)
2907 return basic_string_wchar_append_cstr_len(this, beg, end-beg);
2910 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG@Z */
2911 /* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG@Z */
2912 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@PBG@Z */
2913 /* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@PEBG@Z */
2914 DEFINE_THISCALL_WRAPPER(basic_string_wchar_append_cstr, 8)
2915 basic_string_wchar* __thiscall basic_string_wchar_append_cstr(
2916 basic_string_wchar *this, const wchar_t *append)
2918 return basic_string_wchar_append_cstr_len(this, append,
2919 char_traits_wchar_length(append));
2921 /* ??$?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 */
2922 /* ??$?HGU?$char_traits@G@std@@V?$allocator@G@1@@std@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@0@Z */
2923 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@0@Z */
2924 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@0@Z */
2925 basic_string_wchar* __cdecl basic_string_wchar_concatenate(basic_string_wchar *ret,
2926 const basic_string_wchar *left, const basic_string_wchar *right)
2928 TRACE("%p %p\n", left, right);
2930 MSVCP_basic_string_wchar_copy_ctor(ret, left);
2931 basic_string_wchar_append(ret, right);
2932 return ret;
2935 /* ??$?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 */
2936 /* ??$?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 */
2937 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@G@Z */
2938 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@G@Z */
2939 basic_string_wchar* __cdecl basic_string_wchar_concatenate_bstr_ch(basic_string_wchar *ret,
2940 const basic_string_wchar *left, wchar_t right)
2942 TRACE("%p %c\n", left, right);
2944 MSVCP_basic_string_wchar_copy_ctor(ret, left);
2945 basic_string_wchar_append_ch(ret, right);
2946 return ret;
2949 /* ??$?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 */
2950 /* ??$?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 */
2951 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@ABV10@PBG@Z */
2952 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@AEBV10@PEBG@Z */
2953 basic_string_wchar* __cdecl basic_string_wchar_concatenate_bstr_cstr(basic_string_wchar *ret,
2954 const basic_string_wchar *left, const wchar_t *right)
2956 TRACE("%p %s\n", left, debugstr_w(right));
2958 MSVCP_basic_string_wchar_copy_ctor(ret, left);
2959 basic_string_wchar_append_cstr(ret, right);
2960 return ret;
2963 /* ??$?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 */
2964 /* ??$?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 */
2965 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@GABV10@@Z */
2966 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@GAEBV10@@Z */
2967 basic_string_wchar* __cdecl basic_string_wchar_concatenate_ch_bstr(basic_string_wchar *ret,
2968 wchar_t left, const basic_string_wchar *right)
2970 TRACE("%c %p\n", left, right);
2972 basic_string_wchar_ctor_cstr_len_alloc(ret, &left, 1, NULL);
2973 basic_string_wchar_append(ret, right);
2974 return ret;
2977 /* ??$?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 */
2978 /* ??$?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 */
2979 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PBGABV10@@Z */
2980 /* ??Hstd@@YA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@PEBGAEBV10@@Z */
2981 basic_string_wchar* __cdecl basic_string_wchar_concatenate_cstr_bstr(basic_string_wchar *ret,
2982 const wchar_t *left, const basic_string_wchar *right)
2984 TRACE("%s %p\n", debugstr_w(left), right);
2986 basic_string_wchar_ctor_cstr_alloc(ret, left, NULL);
2987 basic_string_wchar_append(ret, right);
2988 return ret;
2991 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAGI@Z */
2992 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAG_K@Z */
2993 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEABGI@Z */
2994 /* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAAEBG_K@Z */
2995 DEFINE_THISCALL_WRAPPER(basic_string_wchar_operator_at, 8)
2996 wchar_t* __thiscall basic_string_wchar_operator_at(
2997 basic_string_wchar *this, MSVCP_size_t pos)
2999 TRACE("%p %lu\n", this, pos);
3001 assert(this->size >= pos);
3002 return this->ptr+pos;
3005 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAGI@Z */
3006 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAG_K@Z */
3007 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEABGI@Z */
3008 /* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAAEBG_K@Z */
3009 DEFINE_THISCALL_WRAPPER(basic_string_wchar_at, 8)
3010 wchar_t* __thiscall basic_string_wchar_at(
3011 basic_string_wchar *this, MSVCP_size_t pos)
3013 TRACE("%p %lu\n", this, pos);
3015 if(this->size <= pos)
3016 _Xran();
3018 return this->ptr+pos;
3021 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIPBGI@Z */
3022 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0PEBG0@Z */
3023 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_cstr_len, 20)
3024 basic_string_wchar* __thiscall basic_string_wchar_replace_cstr_len(basic_string_wchar *this,
3025 MSVCP_size_t off, MSVCP_size_t len, const wchar_t *str, MSVCP_size_t str_len)
3027 MSVCP_size_t inside_pos = -1;
3028 wchar_t *ptr = this->ptr;
3030 TRACE("%p %ld %ld %p %ld\n", this, off, len, str, str_len);
3032 if(this->size < off)
3033 _Xran();
3035 if(off+len > this->size)
3036 len = this->size-off;
3038 if(basic_string_wchar_npos-str_len <= this->size-len)
3039 _Xlen();
3041 if(basic_string_wchar_inside(this, str))
3042 inside_pos = str-ptr;
3044 if(this->size-len+str_len)
3045 basic_string_wchar__Grow(this, this->size-len+str_len, FALSE);
3046 ptr = this->ptr;
3048 if(inside_pos == -1) {
3049 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
3050 memcpy(ptr+off, str, str_len*sizeof(char));
3051 } else if(len >= str_len) {
3052 memmove(ptr+off, ptr+inside_pos, str_len*sizeof(char));
3053 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
3054 } else {
3055 MSVCP_size_t size;
3057 memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char));
3059 if(inside_pos < off+len) {
3060 size = off+len-inside_pos;
3061 if(size > str_len)
3062 size = str_len;
3063 memmove(ptr+off, ptr+inside_pos, size*sizeof(char));
3064 } else {
3065 size = 0;
3068 if(str_len > size)
3069 memmove(ptr+off+size, ptr+off+str_len, (str_len-size)*sizeof(char));
3072 basic_string_wchar__Eos(this, this->size-len+str_len);
3073 return this;
3076 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIABV12@II@Z */
3077 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0AEBV12@00@Z */
3078 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_substr, 24)
3079 basic_string_wchar* __thiscall basic_string_wchar_replace_substr(basic_string_wchar *this, MSVCP_size_t off,
3080 MSVCP_size_t len, const basic_string_wchar *str, MSVCP_size_t str_off, MSVCP_size_t str_len)
3082 if(str->size < str_off)
3083 _Xran();
3085 if(str_off+str_len > str->size)
3086 str_len = str->size-str_off;
3088 return basic_string_wchar_replace_cstr_len(this, off, len,
3089 str->ptr+str_off, str_len);
3092 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIABV12@@Z */
3093 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0AEBV12@@Z */
3094 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace, 16)
3095 basic_string_wchar* __thiscall basic_string_wchar_replace(basic_string_wchar *this,
3096 MSVCP_size_t off, MSVCP_size_t len, const basic_string_wchar *str)
3098 return basic_string_wchar_replace_cstr_len(this, off, len,
3099 str->ptr, str->size);
3102 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIIG@Z */
3103 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K00G@Z */
3104 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_ch, 20)
3105 basic_string_wchar* __thiscall basic_string_wchar_replace_ch(basic_string_wchar *this,
3106 MSVCP_size_t off, MSVCP_size_t len, MSVCP_size_t count, wchar_t ch)
3108 wchar_t *ptr = this->ptr;
3110 TRACE("%p %ld %ld %ld %c\n", this, off, len, count, ch);
3112 if(this->size < off)
3113 _Xran();
3115 if(off+len > this->size)
3116 len = this->size-off;
3118 if(basic_string_wchar_npos-count <= this->size-len)
3119 _Xlen();
3121 if(this->size-len+count)
3122 basic_string_wchar__Grow(this, this->size-len+count, FALSE);
3123 ptr = this->ptr;
3125 memmove(ptr+off+count, ptr+off+len, (this->size-off-len)*sizeof(char));
3126 char_traits_wchar_assignn(ptr+off, count, ch);
3127 basic_string_wchar__Eos(this, this->size-len+count);
3129 return this;
3132 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIPBG@Z */
3133 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0PEBG@Z */
3134 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_cstr, 16)
3135 basic_string_wchar* __thiscall basic_string_wchar_replace_cstr(basic_string_wchar *this,
3136 MSVCP_size_t off, MSVCP_size_t len, const wchar_t *str)
3138 return basic_string_wchar_replace_cstr_len(this, off, len, str,
3139 char_traits_wchar_length(str));
3142 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0ABV12@@Z */
3143 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0AEBV12@@Z */
3144 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_bstr, 16)
3145 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_bstr(basic_string_wchar *this,
3146 wchar_t *beg, wchar_t *end, const basic_string_wchar *str)
3148 return basic_string_wchar_replace(this, basic_string_wchar__Pdif(beg, this->ptr),
3149 basic_string_wchar__Pdif(end, beg), str);
3152 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0IG@Z */
3153 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0_KG@Z */
3154 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_chn, 20)
3155 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_chn(basic_string_wchar *this,
3156 wchar_t *beg, wchar_t *end, MSVCP_size_t count, wchar_t ch)
3158 return basic_string_wchar_replace_ch(this, basic_string_wchar__Pdif(beg, this->ptr),
3159 basic_string_wchar__Pdif(end, beg), count, ch);
3162 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0PBG1@Z */
3163 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0PEBG1@Z */
3164 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_iter, 20)
3165 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_iter(basic_string_wchar *this,
3166 wchar_t *beg1, wchar_t *end1, const wchar_t *beg2, const wchar_t *end2)
3168 return basic_string_wchar_replace_cstr_len(this, basic_string_wchar__Pdif(beg1, this->ptr),
3169 basic_string_wchar__Pdif(end1, beg1), beg2, basic_string_wchar__Pdif(end2, beg2));
3172 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0PBG@Z */
3173 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0PEBG@Z */
3174 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_cstr, 16)
3175 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_cstr(basic_string_wchar *this,
3176 wchar_t *beg, wchar_t *end, const wchar_t *str)
3178 return basic_string_wchar_replace_cstr(this, basic_string_wchar__Pdif(beg, this->ptr),
3179 basic_string_wchar__Pdif(end, beg), str);
3182 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PAG0PBGI@Z */
3183 /* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEAG0PEBG_K@Z */
3184 DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_cstr_len, 20)
3185 basic_string_wchar* __thiscall basic_string_wchar_replace_iter_cstr_len(basic_string_wchar *this,
3186 wchar_t *beg, wchar_t *end, const wchar_t *str, MSVCP_size_t len)
3188 return basic_string_wchar_replace_cstr_len(this, basic_string_wchar__Pdif(beg, this->ptr),
3189 basic_string_wchar__Pdif(end, beg), str, len);
3192 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IABV12@@Z */
3193 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KAEBV12@@Z */
3194 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert, 12)
3195 basic_string_wchar* __thiscall basic_string_wchar_insert(basic_string_wchar *this,
3196 MSVCP_size_t off, const basic_string_wchar *str)
3198 return basic_string_wchar_replace(this, off, 0, str);
3201 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IABV12@II@Z */
3202 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KAEBV12@00@Z */
3203 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_substr, 20)
3204 basic_string_wchar* __thiscall basic_string_wchar_insert_substr(
3205 basic_string_wchar *this, MSVCP_size_t off, const basic_string_wchar *str,
3206 MSVCP_size_t str_off, MSVCP_size_t str_count)
3208 return basic_string_wchar_replace_substr(this, off, 0, str, str_off, str_count);
3211 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IPBG@Z */
3212 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KPEBG@Z */
3213 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_cstr, 12)
3214 basic_string_wchar* __thiscall basic_string_wchar_insert_cstr(
3215 basic_string_wchar *this, MSVCP_size_t off, const wchar_t *str)
3217 return basic_string_wchar_replace_cstr(this, off, 0, str);
3220 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IPBGI@Z */
3221 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KPEBG0@Z */
3222 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_cstr_len, 16)
3223 basic_string_wchar* __thiscall basic_string_wchar_insert_cstr_len(basic_string_wchar *this,
3224 MSVCP_size_t off, const wchar_t *str, MSVCP_size_t str_len)
3226 return basic_string_wchar_replace_cstr_len(this, off, 0, str, str_len);
3229 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIG@Z */
3230 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0G@Z */
3231 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_chn, 16)
3232 basic_string_wchar* __thiscall basic_string_wchar_insert_chn(basic_string_wchar *this,
3233 MSVCP_size_t off, MSVCP_size_t count, wchar_t ch)
3235 return basic_string_wchar_replace_ch(this, off, 0, count, ch);
3238 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGPAGG@Z */
3239 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGPEAGG@Z */
3240 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_ch, 12)
3241 wchar_t* __thiscall basic_string_wchar_insert_iter_ch(basic_string_wchar *this, wchar_t *pos, wchar_t ch)
3243 MSVCP_size_t off = basic_string_wchar__Pdif(pos, this->ptr);
3244 basic_string_wchar_insert_chn(this, off, 1, ch);
3245 return basic_string_wchar__Psum(this->ptr, off);
3248 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXPAGIG@Z */
3249 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXPEAG_KG@Z */
3250 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_chn, 16)
3251 void __thiscall basic_string_wchar_insert_iter_chn(basic_string_wchar *this,
3252 wchar_t *pos, MSVCP_size_t n, wchar_t ch)
3254 basic_string_wchar_insert_chn(this, basic_string_wchar__Pdif(pos, this->ptr), n, ch);
3257 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXPAGPBG1@Z */
3258 /* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXPEAGPEBG1@Z */
3259 DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter, 16)
3260 void __thiscall basic_string_wchar_insert_iter(basic_string_wchar *this,
3261 wchar_t *pos, const wchar_t *beg, const wchar_t *end)
3263 basic_string_wchar_insert_cstr_len(this, basic_string_wchar__Pdif(pos, this->ptr),
3264 beg, basic_string_wchar__Pdif(end, beg));
3267 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXIG@Z */
3268 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_KG@Z */
3269 DEFINE_THISCALL_WRAPPER(basic_string_wchar_resize_ch, 12)
3270 void __thiscall basic_string_wchar_resize_ch(
3271 basic_string_wchar *this, MSVCP_size_t size, wchar_t ch)
3273 TRACE("%p %lu %c\n", this, size, ch);
3275 if(size <= this->size)
3276 basic_string_wchar_erase(this, size, this->size);
3277 else
3278 basic_string_wchar_append_len_ch(this, size-this->size, ch);
3281 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXI@Z */
3282 /* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_K@Z */
3283 DEFINE_THISCALL_WRAPPER(basic_string_wchar_resize, 8)
3284 void __thiscall basic_string_wchar_resize(
3285 basic_string_wchar *this, MSVCP_size_t size)
3287 basic_string_wchar_resize_ch(this, size, '\0');
3290 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGXZ */
3291 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGXZ */
3292 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3293 /* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3294 DEFINE_THISCALL_WRAPPER(basic_string_wchar_begin, 4)
3295 wchar_t* __thiscall basic_string_wchar_begin(basic_string_wchar *this)
3297 TRACE("(%p)\n", this);
3298 basic_string_wchar__Freeze(this);
3299 return this->ptr;
3302 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEPAGXZ */
3303 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAPEAGXZ */
3304 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3305 /* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3306 DEFINE_THISCALL_WRAPPER(basic_string_wchar_end, 4)
3307 wchar_t* __thiscall basic_string_wchar_end(basic_string_wchar *this)
3309 TRACE("(%p)\n", this);
3310 basic_string_wchar__Freeze(this);
3311 return this->ptr+this->size;
3314 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$reverse_iterator@PAGGAAGPAGH@2@XZ */
3315 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA?AV?$reverse_iterator@PEAGGAEAGPEAG_J@2@XZ */
3316 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$reverse_iterator@PBGGABGPBGH@2@XZ */
3317 /* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$reverse_iterator@PEBGGAEBGPEBG_J@2@XZ */
3318 DEFINE_THISCALL_WRAPPER(basic_string_wchar_rbegin, 8)
3319 String_reverse_iterator_wchar* __thiscall basic_string_wchar_rbegin(
3320 basic_string_wchar *this, String_reverse_iterator_wchar *ret)
3322 TRACE("(%p %p)\n", this, ret);
3323 ret->ptr = basic_string_wchar_end(this);
3324 return ret;
3327 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$reverse_iterator@PAGGAAGPAGH@2@XZ */
3328 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA?AV?$reverse_iterator@PEAGGAEAGPEAG_J@2@XZ */
3329 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$reverse_iterator@PBGGABGPBGH@2@XZ */
3330 /* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$reverse_iterator@PEBGGAEBGPEBG_J@2@XZ */
3331 DEFINE_THISCALL_WRAPPER(basic_string_wchar_rend, 8)
3332 String_reverse_iterator_wchar* __thiscall basic_string_wchar_rend(
3333 basic_string_wchar *this, String_reverse_iterator_wchar *ret)
3335 TRACE("(%p %p)\n", this, ret);
3336 ret->ptr = basic_string_wchar_begin(this);
3337 return ret;
3340 /* ?c_str@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3341 /* ?c_str@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3342 /* ?data@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */
3343 /* ?data@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */
3344 DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_c_str, 4)
3345 const wchar_t* __thiscall MSVCP_basic_string_wchar_c_str(const basic_string_wchar *this)
3347 TRACE("%p\n", this);
3348 return this->ptr;
3351 /* ?size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3352 /* ?size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3353 /* ?length@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3354 /* ?length@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3355 DEFINE_THISCALL_WRAPPER(basic_string_wchar_length, 4)
3356 MSVCP_size_t __thiscall basic_string_wchar_length(basic_string_wchar *this)
3358 TRACE("%p\n", this);
3359 return this->size;
3362 /* ?max_size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3363 /* ?max_size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3364 DEFINE_THISCALL_WRAPPER(basic_string_wchar_max_size, 4)
3365 MSVCP_size_t __thiscall basic_string_wchar_max_size(const basic_string_wchar *this)
3367 TRACE("%p\n", this);
3368 return MSVCP_allocator_wchar_max_size(NULL)-1;
3371 /* ?capacity@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */
3372 /* ?capacity@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */
3373 DEFINE_THISCALL_WRAPPER(basic_string_wchar_capacity, 4)
3374 MSVCP_size_t __thiscall basic_string_wchar_capacity(basic_string_wchar *this)
3376 TRACE("%p\n", this);
3377 return this->res;
3380 /* ?reserve@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXI@Z */
3381 /* ?reserve@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_K@Z */
3382 DEFINE_THISCALL_WRAPPER(basic_string_wchar_reserve, 8)
3383 void __thiscall basic_string_wchar_reserve(basic_string_wchar *this, MSVCP_size_t size)
3385 MSVCP_size_t len;
3387 TRACE("%p %ld\n", this, size);
3389 len = this->size;
3390 if(len > size)
3391 return;
3393 basic_string_wchar__Grow(this, size, FALSE);
3394 basic_string_wchar__Eos(this, len);
3397 /* ?empty@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE_NXZ */
3398 /* ?empty@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_NXZ */
3399 DEFINE_THISCALL_WRAPPER(basic_string_wchar_empty, 4)
3400 MSVCP_bool __thiscall basic_string_wchar_empty(basic_string_wchar *this)
3402 TRACE("%p\n", this);
3403 return this->size == 0;
3406 /* ?swap@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXAAV12@@Z */
3407 /* ?swap@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXAEAV12@@Z */
3408 DEFINE_THISCALL_WRAPPER(basic_string_wchar_swap, 8)
3409 void __thiscall basic_string_wchar_swap(basic_string_wchar *this, basic_string_wchar *str)
3411 basic_string_wchar tmp;
3412 TRACE("%p %p\n", this, str);
3414 tmp = *this;
3415 *this = *str;
3416 *str = tmp;
3419 /* ?substr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV12@II@Z */
3420 /* ?substr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV12@_K0@Z */
3421 DEFINE_THISCALL_WRAPPER(basic_string_wchar_substr, 16)
3422 basic_string_wchar* __thiscall basic_string_wchar_substr(basic_string_wchar *this,
3423 basic_string_wchar *ret, MSVCP_size_t off, MSVCP_size_t len)
3425 TRACE("%p %lu %lu\n", this, off, len);
3427 basic_string_wchar_ctor_substr_alloc(ret, this, off, len, NULL);
3428 return ret;
3431 /* ?copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPAGII@Z */
3432 /* ?copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEAG_K1@Z */
3433 DEFINE_THISCALL_WRAPPER(basic_string_wchar_copy, 16)
3434 MSVCP_size_t __thiscall basic_string_wchar_copy(const basic_string_wchar *this,
3435 wchar_t *dest, MSVCP_size_t count, MSVCP_size_t off)
3437 TRACE("%p %p %lu %lu\n", this, dest, count, off);
3439 if(off > this->size)
3440 _Xran();
3441 if(count > this->size-off)
3442 count = this->size-off;
3443 char_traits_wchar__Copy_s(dest, count, this->ptr+off, count);
3444 return count;
3447 /* ?get_allocator@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$allocator@G@2@XZ */
3448 /* ?get_allocator@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$allocator@G@2@XZ */
3449 DEFINE_THISCALL_WRAPPER(basic_string_wchar_get_allocator, 8)
3450 allocator* __thiscall basic_string_wchar_get_allocator(const basic_string_wchar *this, allocator *ret)
3452 TRACE("%p\n", this);
3453 return ret;