msvcp90: Added use_facet< codecvt<char> > implementation.
[wine/multimedia.git] / dlls / msvcp90 / locale.c
blobf5fec4572ead0c77ef1ef06dace18e35a4f3fdb0
1 /*
2 * Copyright 2010 Piotr Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #include "config.h"
21 #include <stdarg.h>
23 #include "msvcp90.h"
24 #include "locale.h"
25 #include "errno.h"
26 #include "limits.h"
28 #include "wine/list.h"
30 #include "windef.h"
31 #include "winbase.h"
32 #include "winnls.h"
33 #include "wine/unicode.h"
34 #include "wine/debug.h"
35 WINE_DEFAULT_DEBUG_CHANNEL(msvcp90);
37 char* __cdecl _Getdays(void);
38 char* __cdecl _Getmonths(void);
39 void* __cdecl _Gettnames(void);
40 unsigned int __cdecl ___lc_codepage_func(void);
41 LCID* __cdecl ___lc_handle_func(void);
42 const locale_facet* __thiscall locale__Getfacet(const locale*, MSVCP_size_t);
44 typedef int category;
46 typedef struct {
47 MSVCP_size_t id;
48 } locale_id;
50 typedef struct _locale__Locimp {
51 locale_facet facet;
52 locale_facet **facetvec;
53 MSVCP_size_t facet_cnt;
54 category catmask;
55 MSVCP_bool transparent;
56 basic_string_char name;
57 } locale__Locimp;
59 typedef struct {
60 void *timeptr;
61 } _Timevec;
63 typedef struct {
64 _Lockit lock;
65 basic_string_char days;
66 basic_string_char months;
67 basic_string_char oldlocname;
68 basic_string_char newlocname;
69 } _Locinfo;
71 typedef struct {
72 LCID handle;
73 unsigned page;
74 } _Collvec;
76 typedef struct {
77 LCID handle;
78 unsigned page;
79 const short *table;
80 int delfl;
81 } _Ctypevec;
83 typedef struct {
84 LCID handle;
85 unsigned page;
86 } _Cvtvec;
88 typedef struct {
89 locale_facet facet;
90 _Collvec coll;
91 } collate;
93 typedef struct {
94 locale_facet facet;
95 } ctype_base;
97 typedef struct {
98 ctype_base base;
99 _Ctypevec ctype;
100 } ctype_char;
102 typedef struct {
103 ctype_base base;
104 _Ctypevec ctype;
105 _Cvtvec cvt;
106 } ctype_wchar;
108 typedef enum {
109 CODECVT_ok = 0,
110 CODECVT_partial = 1,
111 CODECVT_error = 2,
112 CODECVT_noconv = 3
113 } codecvt_base_result;
115 typedef struct {
116 locale_facet facet;
117 } codecvt_base;
119 typedef struct {
120 codecvt_base base;
121 } codecvt_char;
123 typedef struct {
124 locale_facet facet;
125 const char *grouping;
126 char dp;
127 char sep;
128 const char *false_name;
129 const char *true_name;
130 } numpunct_char;
132 typedef struct {
133 locale_facet facet;
134 const char *grouping;
135 wchar_t dp;
136 wchar_t sep;
137 const wchar_t *false_name;
138 const wchar_t *true_name;
139 } numpunct_wchar;
141 typedef struct {
142 locale_facet facet;
143 _Cvtvec cvt;
144 } num_get;
146 struct _ios_base;
147 typedef struct _istreambuf_iterator_char
149 struct _basic_streambuf_char *strbuf;
150 MSVCP_bool got;
151 char val;
152 } istreambuf_iterator_char;
154 typedef struct _istreambuf_iterator_wchar
156 struct _basic_streambuf_wchar *strbuf;
157 MSVCP_bool got;
158 wchar_t val;
159 } istreambuf_iterator_wchar;
161 /* ?_Id_cnt@id@locale@std@@0HA */
162 int locale_id__Id_cnt = 0;
164 static locale__Locimp *global_locale;
165 static locale classic_locale;
167 /* ?_Clocptr@_Locimp@locale@std@@0PAV123@A */
168 /* ?_Clocptr@_Locimp@locale@std@@0PEAV123@EA */
169 locale__Locimp *locale__Locimp__Clocptr = NULL;
171 /* ??1facet@locale@std@@UAE@XZ */
172 /* ??1facet@locale@std@@UEAA@XZ */
173 DEFINE_THISCALL_WRAPPER(locale_facet_dtor, 4)
174 void __thiscall locale_facet_dtor(locale_facet *this)
176 TRACE("(%p)\n", this);
179 DEFINE_THISCALL_WRAPPER(MSVCP_locale_facet_vector_dtor, 8)
180 #define call_locale_facet_vector_dtor(this, flags) CALL_VTBL_FUNC(this, 0, \
181 locale_facet*, (locale_facet*, unsigned int), (this, flags))
182 locale_facet* __thiscall MSVCP_locale_facet_vector_dtor(locale_facet *this, unsigned int flags)
184 TRACE("(%p %x)\n", this, flags);
185 if(flags & 2) {
186 /* we have an array, with the number of elements stored before the first object */
187 int i, *ptr = (int *)this-1;
189 for(i=*ptr-1; i>=0; i--)
190 locale_facet_dtor(this+i);
191 MSVCRT_operator_delete(ptr);
192 } else {
193 locale_facet_dtor(this);
194 if(flags & 1)
195 MSVCRT_operator_delete(this);
198 return this;
201 typedef struct
203 locale_facet *fac;
204 struct list entry;
205 } facets_elem;
206 static struct list lazy_facets = LIST_INIT(lazy_facets);
208 static void locale_facet_register(locale_facet *add)
210 facets_elem *head = MSVCRT_operator_new(sizeof(*head));
211 if(!head) {
212 ERR("Out of memory\n");
213 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
216 head->fac = add;
217 list_add_head(&lazy_facets, &head->entry);
220 extern const vtable_ptr MSVCP_locale_facet_vtable;
222 /* ??0id@locale@std@@QAE@I@Z */
223 /* ??0id@locale@std@@QEAA@_K@Z */
224 DEFINE_THISCALL_WRAPPER(locale_id_ctor_id, 8)
225 locale_id* __thiscall locale_id_ctor_id(locale_id *this, MSVCP_size_t id)
227 TRACE("(%p %lu)\n", this, id);
229 this->id = id;
230 return this;
233 /* ??_Fid@locale@std@@QAEXXZ */
234 /* ??_Fid@locale@std@@QEAAXXZ */
235 DEFINE_THISCALL_WRAPPER(locale_id_ctor, 4)
236 locale_id* __thiscall locale_id_ctor(locale_id *this)
238 TRACE("(%p)\n", this);
240 this->id = 0;
241 return this;
244 /* ??Bid@locale@std@@QAEIXZ */
245 /* ??Bid@locale@std@@QEAA_KXZ */
246 DEFINE_THISCALL_WRAPPER(locale_id_operator_size_t, 4)
247 MSVCP_size_t __thiscall locale_id_operator_size_t(locale_id *this)
249 _Lockit lock;
251 TRACE("(%p)\n", this);
253 if(!this->id) {
254 _Lockit_ctor_locktype(&lock, _LOCK_LOCALE);
255 this->id = ++locale_id__Id_cnt;
256 _Lockit_dtor(&lock);
259 return this->id;
262 /* ?_Id_cnt_func@id@locale@std@@CAAAHXZ */
263 /* ?_Id_cnt_func@id@locale@std@@CAAEAHXZ */
264 int* __cdecl locale_id__Id_cnt_func(void)
266 TRACE("\n");
267 return &locale_id__Id_cnt;
270 /* ??_Ffacet@locale@std@@QAEXXZ */
271 /* ??_Ffacet@locale@std@@QEAAXXZ */
272 DEFINE_THISCALL_WRAPPER(locale_facet_ctor, 4)
273 locale_facet* __thiscall locale_facet_ctor(locale_facet *this)
275 TRACE("(%p)\n", this);
276 this->vtable = &MSVCP_locale_facet_vtable;
277 this->refs = 0;
278 return this;
281 /* ??0facet@locale@std@@IAE@I@Z */
282 /* ??0facet@locale@std@@IEAA@_K@Z */
283 DEFINE_THISCALL_WRAPPER(locale_facet_ctor_refs, 8)
284 locale_facet* __thiscall locale_facet_ctor_refs(locale_facet *this, MSVCP_size_t refs)
286 TRACE("(%p %lu)\n", this, refs);
287 this->vtable = &MSVCP_locale_facet_vtable;
288 this->refs = refs;
289 return this;
292 /* ?_Incref@facet@locale@std@@QAEXXZ */
293 /* ?_Incref@facet@locale@std@@QEAAXXZ */
294 DEFINE_THISCALL_WRAPPER(locale_facet__Incref, 4)
295 void __thiscall locale_facet__Incref(locale_facet *this)
297 _Lockit lock;
299 TRACE("(%p)\n", this);
301 _Lockit_ctor_locktype(&lock, _LOCK_LOCALE);
302 this->refs++;
303 _Lockit_dtor(&lock);
306 /* ?_Decref@facet@locale@std@@QAEPAV123@XZ */
307 /* ?_Decref@facet@locale@std@@QEAAPEAV123@XZ */
308 DEFINE_THISCALL_WRAPPER(locale_facet__Decref, 4)
309 locale_facet* __thiscall locale_facet__Decref(locale_facet *this)
311 _Lockit lock;
312 locale_facet *ret;
314 TRACE("(%p)\n", this);
316 _Lockit_ctor_locktype(&lock, _LOCK_LOCALE);
317 if(this->refs)
318 this->refs--;
320 ret = this->refs ? NULL : this;
321 _Lockit_dtor(&lock);
323 return ret;
326 /* ?_Getcat@facet@locale@std@@SAIPAPBV123@PBV23@@Z */
327 /* ?_Getcat@facet@locale@std@@SA_KPEAPEBV123@PEBV23@@Z */
328 MSVCP_size_t __cdecl locale_facet__Getcat(const locale_facet **facet, const locale *loc)
330 TRACE("(%p %p)\n", facet, loc);
331 return -1;
334 /* ??0_Timevec@std@@QAE@ABV01@@Z */
335 /* ??0_Timevec@std@@QEAA@AEBV01@@Z */
336 /* This copy constructor modifies copied object */
337 DEFINE_THISCALL_WRAPPER(_Timevec_copy_ctor, 8)
338 _Timevec* __thiscall _Timevec_copy_ctor(_Timevec *this, _Timevec *copy)
340 TRACE("(%p %p)\n", this, copy);
341 this->timeptr = copy->timeptr;
342 copy->timeptr = NULL;
343 return this;
346 /* ??0_Timevec@std@@QAE@PAX@Z */
347 /* ??0_Timevec@std@@QEAA@PEAX@Z */
348 DEFINE_THISCALL_WRAPPER(_Timevec_ctor_timeptr, 8)
349 _Timevec* __thiscall _Timevec_ctor_timeptr(_Timevec *this, void *timeptr)
351 TRACE("(%p %p)\n", this, timeptr);
352 this->timeptr = timeptr;
353 return this;
356 /* ??_F_Timevec@std@@QAEXXZ */
357 /* ??_F_Timevec@std@@QEAAXXZ */
358 DEFINE_THISCALL_WRAPPER(_Timevec_ctor, 4)
359 _Timevec* __thiscall _Timevec_ctor(_Timevec *this)
361 TRACE("(%p)\n", this);
362 this->timeptr = NULL;
363 return this;
366 /* ??1_Timevec@std@@QAE@XZ */
367 /* ??1_Timevec@std@@QEAA@XZ */
368 DEFINE_THISCALL_WRAPPER(_Timevec_dtor, 4)
369 void __thiscall _Timevec_dtor(_Timevec *this)
371 TRACE("(%p)\n", this);
372 free(this->timeptr);
375 /* ??4_Timevec@std@@QAEAAV01@ABV01@@Z */
376 /* ??4_Timevec@std@@QEAAAEAV01@AEBV01@@Z */
377 DEFINE_THISCALL_WRAPPER(_Timevec_op_assign, 8)
378 _Timevec* __thiscall _Timevec_op_assign(_Timevec *this, _Timevec *right)
380 TRACE("(%p %p)\n", this, right);
381 this->timeptr = right->timeptr;
382 right->timeptr = NULL;
383 return this;
386 /* ?_Getptr@_Timevec@std@@QBEPAXXZ */
387 /* ?_Getptr@_Timevec@std@@QEBAPEAXXZ */
388 DEFINE_THISCALL_WRAPPER(_Timevec__Getptr, 4)
389 void* __thiscall _Timevec__Getptr(_Timevec *this)
391 TRACE("(%p)\n", this);
392 return this->timeptr;
395 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@HPBD@Z */
396 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@HPEBD@Z */
397 _Locinfo* __cdecl _Locinfo__Locinfo_ctor_cat_cstr(_Locinfo *locinfo, int category, const char *locstr)
399 const char *locale = NULL;
401 /* This function is probably modifying more global objects */
402 FIXME("(%p %d %s) semi-stub\n", locinfo, category, locstr);
404 if(!locstr)
405 throw_exception(EXCEPTION_RUNTIME_ERROR, "bad locale name");
407 _Lockit_ctor_locktype(&locinfo->lock, _LOCK_LOCALE);
408 MSVCP_basic_string_char_ctor_cstr(&locinfo->days, "");
409 MSVCP_basic_string_char_ctor_cstr(&locinfo->months, "");
410 MSVCP_basic_string_char_ctor_cstr(&locinfo->oldlocname, setlocale(LC_ALL, NULL));
412 if(category)
413 locale = setlocale(LC_ALL, locstr);
414 else
415 locale = setlocale(LC_ALL, NULL);
417 if(locale)
418 MSVCP_basic_string_char_ctor_cstr(&locinfo->newlocname, locale);
419 else
420 MSVCP_basic_string_char_ctor_cstr(&locinfo->newlocname, "*");
422 return locinfo;
425 /* ??0_Locinfo@std@@QAE@HPBD@Z */
426 /* ??0_Locinfo@std@@QEAA@HPEBD@Z */
427 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cat_cstr, 12)
428 _Locinfo* __thiscall _Locinfo_ctor_cat_cstr(_Locinfo *this, int category, const char *locstr)
430 return _Locinfo__Locinfo_ctor_cat_cstr(this, category, locstr);
433 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
434 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
435 _Locinfo* __cdecl _Locinfo__Locinfo_ctor_bstr(_Locinfo *locinfo, const basic_string_char *locstr)
437 return _Locinfo__Locinfo_ctor_cat_cstr(locinfo, 1/*FIXME*/, MSVCP_basic_string_char_c_str(locstr));
440 /* ??0_Locinfo@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z */
441 /* ??0_Locinfo@std@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z */
442 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_bstr, 8)
443 _Locinfo* __thiscall _Locinfo_ctor_bstr(_Locinfo *this, const basic_string_char *locstr)
445 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, MSVCP_basic_string_char_c_str(locstr));
448 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@PBD@Z */
449 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@PEBD@Z */
450 _Locinfo* __cdecl _Locinfo__Locinfo_ctor_cstr(_Locinfo *locinfo, const char *locstr)
452 return _Locinfo__Locinfo_ctor_cat_cstr(locinfo, 1/*FIXME*/, locstr);
455 /* ??0_Locinfo@std@@QAE@PBD@Z */
456 /* ??0_Locinfo@std@@QEAA@PEBD@Z */
457 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cstr, 8)
458 _Locinfo* __thiscall _Locinfo_ctor_cstr(_Locinfo *this, const char *locstr)
460 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, locstr);
463 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPAV12@@Z */
464 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPEAV12@@Z */
465 void __cdecl _Locinfo__Locinfo_dtor(_Locinfo *locinfo)
467 TRACE("(%p)\n", locinfo);
469 setlocale(LC_ALL, MSVCP_basic_string_char_c_str(&locinfo->oldlocname));
470 MSVCP_basic_string_char_dtor(&locinfo->days);
471 MSVCP_basic_string_char_dtor(&locinfo->months);
472 MSVCP_basic_string_char_dtor(&locinfo->oldlocname);
473 MSVCP_basic_string_char_dtor(&locinfo->newlocname);
474 _Lockit_dtor(&locinfo->lock);
477 /* ??_F_Locinfo@std@@QAEXXZ */
478 /* ??_F_Locinfo@std@@QEAAXXZ */
479 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor, 4)
480 _Locinfo* __thiscall _Locinfo_ctor(_Locinfo *this)
482 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, "C");
485 /* ??1_Locinfo@std@@QAE@XZ */
486 /* ??1_Locinfo@std@@QEAA@XZ */
487 DEFINE_THISCALL_WRAPPER(_Locinfo_dtor, 4)
488 void __thiscall _Locinfo_dtor(_Locinfo *this)
490 _Locinfo__Locinfo_dtor(this);
493 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAAV12@PAV12@HPBD@Z */
494 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAEAV12@PEAV12@HPEBD@Z */
495 _Locinfo* __cdecl _Locinfo__Locinfo_Addcats(_Locinfo *locinfo, int category, const char *locstr)
497 const char *locale = NULL;
499 /* This function is probably modifying more global objects */
500 FIXME("(%p %d %s) semi-stub\n", locinfo, category, locstr);
501 if(!locstr)
502 throw_exception(EXCEPTION_RUNTIME_ERROR, "bad locale name");
504 MSVCP_basic_string_char_dtor(&locinfo->newlocname);
506 if(category)
507 locale = setlocale(LC_ALL, locstr);
508 else
509 locale = setlocale(LC_ALL, NULL);
511 if(locale)
512 MSVCP_basic_string_char_ctor_cstr(&locinfo->newlocname, locale);
513 else
514 MSVCP_basic_string_char_ctor_cstr(&locinfo->newlocname, "*");
516 return locinfo;
519 /* ?_Addcats@_Locinfo@std@@QAEAAV12@HPBD@Z */
520 /* ?_Addcats@_Locinfo@std@@QEAAAEAV12@HPEBD@Z */
521 DEFINE_THISCALL_WRAPPER(_Locinfo__Addcats, 12)
522 _Locinfo* __thiscall _Locinfo__Addcats(_Locinfo *this, int category, const char *locstr)
524 return _Locinfo__Locinfo_Addcats(this, category, locstr);
527 /* _Getcoll */
528 _Collvec __cdecl _Getcoll(void)
530 _Collvec ret;
531 _locale_t locale = _get_current_locale();
533 TRACE("\n");
535 ret.page = locale->locinfo->lc_collate_cp;
536 ret.handle = locale->locinfo->lc_handle[LC_COLLATE];
537 _free_locale(locale);
538 return ret;
541 /* ?_Getcoll@_Locinfo@std@@QBE?AU_Collvec@@XZ */
542 /* ?_Getcoll@_Locinfo@std@@QEBA?AU_Collvec@@XZ */
543 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcoll, 8)
544 _Collvec* __thiscall _Locinfo__Getcoll(const _Locinfo *this, _Collvec *ret)
546 *ret = _Getcoll();
547 return ret;
550 /* _Getctype */
551 _Ctypevec __cdecl _Getctype(void)
553 _Ctypevec ret;
554 _locale_t locale = _get_current_locale();
555 short *table;
557 TRACE("\n");
559 ret.page = locale->locinfo->lc_codepage;
560 ret.handle = locale->locinfo->lc_handle[LC_COLLATE];
561 ret.delfl = TRUE;
562 table = malloc(sizeof(short[256]));
563 if(!table) {
564 _free_locale(locale);
565 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
567 memcpy(table, locale->locinfo->pctype, sizeof(short[256]));
568 ret.table = table;
569 _free_locale(locale);
570 return ret;
573 /* ?_Getctype@_Locinfo@std@@QBE?AU_Ctypevec@@XZ */
574 /* ?_Getctype@_Locinfo@std@@QEBA?AU_Ctypevec@@XZ */
575 DEFINE_THISCALL_WRAPPER(_Locinfo__Getctype, 8)
576 _Ctypevec* __thiscall _Locinfo__Getctype(const _Locinfo *this, _Ctypevec *ret)
578 *ret = _Getctype();
579 return ret;
582 /* _Getcvt */
583 _Cvtvec __cdecl _Getcvt(void)
585 _Cvtvec ret;
586 _locale_t locale = _get_current_locale();
588 TRACE("\n");
590 ret.page = locale->locinfo->lc_codepage;
591 ret.handle = locale->locinfo->lc_handle[LC_CTYPE];
592 _free_locale(locale);
593 return ret;
596 /* ?_Getcvt@_Locinfo@std@@QBE?AU_Cvtvec@@XZ */
597 /* ?_Getcvt@_Locinfo@std@@QEBA?AU_Cvtvec@@XZ */
598 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcvt, 8)
599 _Cvtvec* __thiscall _Locinfo__Getcvt(const _Locinfo *this, _Cvtvec *ret)
601 *ret = _Getcvt();
602 return ret;
605 /* ?_Getdateorder@_Locinfo@std@@QBEHXZ */
606 /* ?_Getdateorder@_Locinfo@std@@QEBAHXZ */
607 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdateorder, 4)
608 int __thiscall _Locinfo__Getdateorder(const _Locinfo *this)
610 FIXME("(%p) stub\n", this);
611 return 0;
614 /* ?_Getdays@_Locinfo@std@@QBEPBDXZ */
615 /* ?_Getdays@_Locinfo@std@@QEBAPEBDXZ */
616 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdays, 4)
617 const char* __thiscall _Locinfo__Getdays(_Locinfo *this)
619 char *days = _Getdays();
621 TRACE("(%p)\n", this);
623 if(days) {
624 MSVCP_basic_string_char_dtor(&this->days);
625 MSVCP_basic_string_char_ctor_cstr(&this->days, days);
626 free(days);
629 return this->days.size ? MSVCP_basic_string_char_c_str(&this->days) :
630 ":Sun:Sunday:Mon:Monday:Tue:Tuesday:Wed:Wednesday:Thu:Thursday:Fri:Friday:Sat:Saturday";
633 /* ?_Getmonths@_Locinfo@std@@QBEPBDXZ */
634 /* ?_Getmonths@_Locinfo@std@@QEBAPEBDXZ */
635 DEFINE_THISCALL_WRAPPER(_Locinfo__Getmonths, 4)
636 const char* __thiscall _Locinfo__Getmonths(_Locinfo *this)
638 char *months = _Getmonths();
640 TRACE("(%p)\n", this);
642 if(months) {
643 MSVCP_basic_string_char_dtor(&this->months);
644 MSVCP_basic_string_char_ctor_cstr(&this->months, months);
645 free(months);
648 return this->months.size ? MSVCP_basic_string_char_c_str(&this->months) :
649 ":Jan:January:Feb:February:Mar:March:Apr:April:May:May:Jun:June:Jul:July"
650 ":Aug:August:Sep:September:Oct:October:Nov:November:Dec:December";
653 /* ?_Getfalse@_Locinfo@std@@QBEPBDXZ */
654 /* ?_Getfalse@_Locinfo@std@@QEBAPEBDXZ */
655 DEFINE_THISCALL_WRAPPER(_Locinfo__Getfalse, 4)
656 const char* __thiscall _Locinfo__Getfalse(const _Locinfo *this)
658 TRACE("(%p)\n", this);
659 return "false";
662 /* ?_Gettrue@_Locinfo@std@@QBEPBDXZ */
663 /* ?_Gettrue@_Locinfo@std@@QEBAPEBDXZ */
664 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettrue, 4)
665 const char* __thiscall _Locinfo__Gettrue(const _Locinfo *this)
667 TRACE("(%p)\n", this);
668 return "true";
671 /* ?_Getlconv@_Locinfo@std@@QBEPBUlconv@@XZ */
672 /* ?_Getlconv@_Locinfo@std@@QEBAPEBUlconv@@XZ */
673 DEFINE_THISCALL_WRAPPER(_Locinfo__Getlconv, 4)
674 const struct lconv* __thiscall _Locinfo__Getlconv(const _Locinfo *this)
676 TRACE("(%p)\n", this);
677 return localeconv();
680 /* ?_Getname@_Locinfo@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
681 /* ?_Getname@_Locinfo@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
682 DEFINE_THISCALL_WRAPPER(_Locinfo__Getname, 8)
683 basic_string_char* __thiscall _Locinfo__Getname(const _Locinfo *this, basic_string_char *ret)
685 TRACE("(%p)\n", this);
687 MSVCP_basic_string_char_copy_ctor(ret, &this->newlocname);
688 return ret;
691 /* ?_Gettnames@_Locinfo@std@@QBE?AV_Timevec@2@XZ */
692 /* ?_Gettnames@_Locinfo@std@@QEBA?AV_Timevec@2@XZ */
693 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettnames, 8)
694 _Timevec*__thiscall _Locinfo__Gettnames(const _Locinfo *this, _Timevec *ret)
696 TRACE("(%p)\n", this);
698 _Timevec_ctor_timeptr(ret, _Gettnames());
699 return ret;
702 /* ?id@?$collate@D@std@@2V0locale@2@A */
703 locale_id collate_char_id = {0};
705 /* ??_7?$collate@D@std@@6B@ */
706 extern const vtable_ptr MSVCP_collate_char_vtable;
708 /* ?_Init@?$collate@D@std@@IAEXABV_Locinfo@2@@Z */
709 /* ?_Init@?$collate@D@std@@IEAAXAEBV_Locinfo@2@@Z */
710 DEFINE_THISCALL_WRAPPER(collate_char__Init, 8)
711 void __thiscall collate_char__Init(collate *this, const _Locinfo *locinfo)
713 TRACE("(%p %p)\n", this, locinfo);
714 _Locinfo__Getcoll(locinfo, &this->coll);
717 /* ??0?$collate@D@std@@IAE@PBDI@Z */
718 /* ??0?$collate@D@std@@IEAA@PEBD_K@Z */
719 DEFINE_THISCALL_WRAPPER(collate_char_ctor_name, 12)
720 collate* __thiscall collate_char_ctor_name(collate *this, const char *name, MSVCP_size_t refs)
722 _Locinfo locinfo;
724 TRACE("(%p %s %lu)\n", this, name, refs);
726 locale_facet_ctor_refs(&this->facet, refs);
727 this->facet.vtable = &MSVCP_collate_char_vtable;
729 _Locinfo_ctor_cstr(&locinfo, name);
730 collate_char__Init(this, &locinfo);
731 _Locinfo_dtor(&locinfo);
732 return this;
735 /* ??0?$collate@D@std@@QAE@ABV_Locinfo@1@I@Z */
736 /* ??0?$collate@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
737 DEFINE_THISCALL_WRAPPER(collate_char_ctor_locinfo, 12)
738 collate* __thiscall collate_char_ctor_locinfo(collate *this, _Locinfo *locinfo, MSVCP_size_t refs)
740 TRACE("(%p %p %lu)\n", this, locinfo, refs);
742 locale_facet_ctor_refs(&this->facet, refs);
743 this->facet.vtable = &MSVCP_collate_char_vtable;
744 collate_char__Init(this, locinfo);
745 return this;
748 /* ??0?$collate@D@std@@QAE@I@Z */
749 /* ??0?$collate@D@std@@QEAA@_K@Z */
750 DEFINE_THISCALL_WRAPPER(collate_char_ctor_refs, 8)
751 collate* __thiscall collate_char_ctor_refs(collate *this, MSVCP_size_t refs)
753 return collate_char_ctor_name(this, "C", refs);
756 /* ??1?$collate@D@std@@MAE@XZ */
757 /* ??1?$collate@D@std@@MEAA@XZ */
758 DEFINE_THISCALL_WRAPPER(collate_char_dtor, 4)
759 void __thiscall collate_char_dtor(collate *this)
761 TRACE("(%p)\n", this);
764 DEFINE_THISCALL_WRAPPER(MSVCP_collate_char_vector_dtor, 8)
765 collate* __thiscall MSVCP_collate_char_vector_dtor(collate *this, unsigned int flags)
767 TRACE("(%p %x)\n", this, flags);
768 if(flags & 2) {
769 /* we have an array, with the number of elements stored before the first object */
770 int i, *ptr = (int *)this-1;
772 for(i=*ptr-1; i>=0; i--)
773 collate_char_dtor(this+i);
774 MSVCRT_operator_delete(ptr);
775 } else {
776 collate_char_dtor(this);
777 if(flags & 1)
778 MSVCRT_operator_delete(this);
781 return this;
784 /* ??_F?$collate@D@std@@QAEXXZ */
785 /* ??_F?$collate@D@std@@QEAAXXZ */
786 DEFINE_THISCALL_WRAPPER(collate_char_ctor, 4)
787 collate* __thiscall collate_char_ctor(collate *this)
789 return collate_char_ctor_name(this, "C", 0);
792 /* ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
793 /* ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
794 MSVCP_size_t __cdecl collate_char__Getcat(const locale_facet **facet, const locale *loc)
796 TRACE("(%p %p)\n", facet, loc);
798 if(facet && !*facet) {
799 *facet = MSVCRT_operator_new(sizeof(collate));
800 if(!*facet) {
801 ERR("Out of memory\n");
802 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
803 return 0;
805 collate_char_ctor_name((collate*)*facet,
806 MSVCP_basic_string_char_c_str(&loc->ptr->name), 0);
809 return LC_COLLATE;
812 /* _Strcoll */
813 int __cdecl _Strcoll(const char *first1, const char *last1, const char *first2,
814 const char *last2, const _Collvec *coll)
816 LCID lcid;
818 TRACE("(%s %s)\n", debugstr_an(first1, last1-first1), debugstr_an(first2, last2-first2));
820 if(coll)
821 lcid = coll->handle;
822 else
823 lcid = ___lc_handle_func()[LC_COLLATE];
824 return CompareStringA(lcid, 0, first1, last1-first1, first2, last2-first2)-2;
827 /* ?do_compare@?$collate@D@std@@MBEHPBD000@Z */
828 /* ?do_compare@?$collate@D@std@@MEBAHPEBD000@Z */
829 DEFINE_THISCALL_WRAPPER(collate_char_do_compare, 20)
830 #define call_collate_char_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 4, int, \
831 (const collate*, const char*, const char*, const char*, const char*), \
832 (this, first1, last1, first2, last2))
833 int __thiscall collate_char_do_compare(const collate *this, const char *first1,
834 const char *last1, const char *first2, const char *last2)
836 TRACE("(%p %p %p %p %p)\n", this, first1, last1, first2, last2);
837 return _Strcoll(first1, last1, first2, last2, &this->coll);
840 /* ?compare@?$collate@D@std@@QBEHPBD000@Z */
841 /* ?compare@?$collate@D@std@@QEBAHPEBD000@Z */
842 DEFINE_THISCALL_WRAPPER(collate_char_compare, 20)
843 int __thiscall collate_char_compare(const collate *this, const char *first1,
844 const char *last1, const char *first2, const char *last2)
846 TRACE("(%p %p %p %p %p)\n", this, first1, last1, first2, last2);
847 return call_collate_char_do_compare(this, first1, last1, first2, last2);
850 /* ?do_hash@?$collate@D@std@@MBEJPBD0@Z */
851 /* ?do_hash@?$collate@D@std@@MEBAJPEBD0@Z */
852 DEFINE_THISCALL_WRAPPER(collate_char_do_hash, 12)
853 #define call_collate_char_do_hash(this, first, last) CALL_VTBL_FUNC(this, 12, LONG, \
854 (const collate*, const char*, const char*), (this, first, last))
855 LONG __thiscall collate_char_do_hash(const collate *this,
856 const char *first, const char *last)
858 ULONG ret = 0;
860 TRACE("(%p %p %p)\n", this, first, last);
862 for(; first<last; first++)
863 ret = (ret<<8 | ret>>24) + *first;
864 return ret;
867 /* ?hash@?$collate@D@std@@QBEJPBD0@Z */
868 /* ?hash@?$collate@D@std@@QEBAJPEBD0@Z */
869 DEFINE_THISCALL_WRAPPER(collate_char_hash, 12)
870 LONG __thiscall collate_char_hash(const collate *this,
871 const char *first, const char *last)
873 TRACE("(%p %p %p)\n", this, first, last);
874 return call_collate_char_do_hash(this, first, last);
877 /* ?do_transform@?$collate@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
878 /* ?do_transform@?$collate@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
879 DEFINE_THISCALL_WRAPPER(collate_char_do_transform, 16)
880 basic_string_char* __thiscall collate_char_do_transform(const collate *this,
881 basic_string_char *ret, const char *first, const char *last)
883 FIXME("(%p %p %p) stub\n", this, first, last);
884 return ret;
887 /* ?transform@?$collate@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
888 /* ?transform@?$collate@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
889 DEFINE_THISCALL_WRAPPER(collate_char_transform, 16)
890 basic_string_char* __thiscall collate_char_transform(const collate *this,
891 basic_string_char *ret, const char *first, const char *last)
893 FIXME("(%p %p %p) stub\n", this, first, last);
894 return ret;
897 /* ?id@?$collate@_W@std@@2V0locale@2@A */
898 locale_id collate_wchar_id = {0};
899 /* ?id@?$collate@G@std@@2V0locale@2@A */
900 locale_id collate_short_id = {0};
902 /* ??_7?$collate@_W@std@@6B@ */
903 extern const vtable_ptr MSVCP_collate_wchar_vtable;
904 /* ??_7?$collate@G@std@@6B@ */
905 extern const vtable_ptr MSVCP_collate_short_vtable;
907 /* ?_Init@?$collate@_W@std@@IAEXABV_Locinfo@2@@Z */
908 /* ?_Init@?$collate@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
909 /* ?_Init@?$collate@G@std@@IAEXABV_Locinfo@2@@Z */
910 /* ?_Init@?$collate@G@std@@IEAAXAEBV_Locinfo@2@@Z */
911 DEFINE_THISCALL_WRAPPER(collate_wchar__Init, 8)
912 void __thiscall collate_wchar__Init(collate *this, const _Locinfo *locinfo)
914 TRACE("(%p %p)\n", this, locinfo);
915 _Locinfo__Getcoll(locinfo, &this->coll);
918 /* ??0?$collate@_W@std@@IAE@PBDI@Z */
919 /* ??0?$collate@_W@std@@IEAA@PEBD_K@Z */
920 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_name, 12)
921 collate* __thiscall collate_wchar_ctor_name(collate *this, const char *name, MSVCP_size_t refs)
923 _Locinfo locinfo;
925 TRACE("(%p %s %lu)\n", this, name, refs);
927 locale_facet_ctor_refs(&this->facet, refs);
928 this->facet.vtable = &MSVCP_collate_wchar_vtable;
930 _Locinfo_ctor_cstr(&locinfo, name);
931 collate_wchar__Init(this, &locinfo);
932 _Locinfo_dtor(&locinfo);
933 return this;
936 /* ??0?$collate@G@std@@IAE@PBDI@Z */
937 /* ??0?$collate@G@std@@IEAA@PEBD_K@Z */
938 DEFINE_THISCALL_WRAPPER(collate_short_ctor_name, 12)
939 collate* __thiscall collate_short_ctor_name(collate *this, const char *name, MSVCP_size_t refs)
941 collate *ret = collate_wchar_ctor_name(this, name, refs);
942 ret->facet.vtable = &MSVCP_collate_short_vtable;
943 return ret;
946 /* ??0?$collate@_W@std@@QAE@ABV_Locinfo@1@I@Z */
947 /* ??0?$collate@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
948 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_locinfo, 12)
949 collate* __thiscall collate_wchar_ctor_locinfo(collate *this, _Locinfo *locinfo, MSVCP_size_t refs)
951 TRACE("(%p %p %lu)\n", this, locinfo, refs);
953 locale_facet_ctor_refs(&this->facet, refs);
954 this->facet.vtable = &MSVCP_collate_wchar_vtable;
955 collate_wchar__Init(this, locinfo);
956 return this;
959 /* ??0?$collate@G@std@@QAE@ABV_Locinfo@1@I@Z */
960 /* ??0?$collate@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
961 DEFINE_THISCALL_WRAPPER(collate_short_ctor_locinfo, 12)
962 collate* __thiscall collate_short_ctor_locinfo(collate *this, _Locinfo *locinfo, MSVCP_size_t refs)
964 collate *ret = collate_wchar_ctor_locinfo(this, locinfo, refs);
965 ret->facet.vtable = &MSVCP_collate_short_vtable;
966 return ret;
969 /* ??0?$collate@_W@std@@QAE@I@Z */
970 /* ??0?$collate@_W@std@@QEAA@_K@Z */
971 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_refs, 8)
972 collate* __thiscall collate_wchar_ctor_refs(collate *this, MSVCP_size_t refs)
974 return collate_wchar_ctor_name(this, "C", refs);
977 /* ??0?$collate@G@std@@QAE@I@Z */
978 /* ??0?$collate@G@std@@QEAA@_K@Z */
979 DEFINE_THISCALL_WRAPPER(collate_short_ctor_refs, 8)
980 collate* __thiscall collate_short_ctor_refs(collate *this, MSVCP_size_t refs)
982 collate *ret = collate_wchar_ctor_refs(this, refs);
983 ret->facet.vtable = &MSVCP_collate_short_vtable;
984 return ret;
987 /* ??1?$collate@_W@std@@MAE@XZ */
988 /* ??1?$collate@_W@std@@MEAA@XZ */
989 /* ??1?$collate@G@std@@MAE@XZ */
990 /* ??1?$collate@G@std@@MEAA@XZ */
991 DEFINE_THISCALL_WRAPPER(collate_wchar_dtor, 4)
992 void __thiscall collate_wchar_dtor(collate *this)
994 TRACE("(%p)\n", this);
997 DEFINE_THISCALL_WRAPPER(MSVCP_collate_wchar_vector_dtor, 8)
998 collate* __thiscall MSVCP_collate_wchar_vector_dtor(collate *this, unsigned int flags)
1000 TRACE("(%p %x)\n", this, flags);
1001 if(flags & 2) {
1002 /* we have an array, with the number of elements stored before the first object */
1003 int i, *ptr = (int *)this-1;
1005 for(i=*ptr-1; i>=0; i--)
1006 collate_wchar_dtor(this+i);
1007 MSVCRT_operator_delete(ptr);
1008 } else {
1009 collate_wchar_dtor(this);
1010 if(flags & 1)
1011 MSVCRT_operator_delete(this);
1014 return this;
1017 DEFINE_THISCALL_WRAPPER(MSVCP_collate_short_vector_dtor, 8)
1018 collate* __thiscall MSVCP_collate_short_vector_dtor(collate *this, unsigned int flags)
1020 return MSVCP_collate_wchar_vector_dtor(this, flags);
1023 /* ??_F?$collate@_W@std@@QAEXXZ */
1024 /* ??_F?$collate@_W@std@@QEAAXXZ */
1025 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor, 4)
1026 collate* __thiscall collate_wchar_ctor(collate *this)
1028 return collate_wchar_ctor_name(this, "C", 0);
1031 /* ??_F?$collate@G@std@@QAEXXZ */
1032 /* ??_F?$collate@G@std@@QEAAXXZ */
1033 DEFINE_THISCALL_WRAPPER(collate_short_ctor, 4)
1034 collate* __thiscall collate_short_ctor(collate *this)
1036 collate *ret = collate_wchar_ctor(this);
1037 ret->facet.vtable = &MSVCP_collate_short_vtable;
1038 return ret;
1041 /* ?_Getcat@?$collate@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1042 /* ?_Getcat@?$collate@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1043 MSVCP_size_t __cdecl collate_wchar__Getcat(const locale_facet **facet, const locale *loc)
1045 TRACE("(%p %p)\n", facet, loc);
1047 if(facet && !*facet) {
1048 *facet = MSVCRT_operator_new(sizeof(collate));
1049 if(!*facet) {
1050 ERR("Out of memory\n");
1051 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
1052 return 0;
1054 collate_wchar_ctor_name((collate*)*facet,
1055 MSVCP_basic_string_char_c_str(&loc->ptr->name), 0);
1058 return LC_COLLATE;
1061 /* ?_Getcat@?$collate@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1062 /* ?_Getcat@?$collate@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1063 MSVCP_size_t __cdecl collate_short__Getcat(const locale_facet **facet, const locale *loc)
1065 if(facet && !*facet) {
1066 collate_wchar__Getcat(facet, loc);
1067 (*(locale_facet**)facet)->vtable = &MSVCP_collate_short_vtable;
1070 return LC_COLLATE;
1073 /* _Wcscoll */
1074 int __cdecl _Wcscoll(const wchar_t *first1, const wchar_t *last1, const wchar_t *first2,
1075 const wchar_t *last2, const _Collvec *coll)
1077 LCID lcid;
1079 TRACE("(%s %s)\n", debugstr_wn(first1, last1-first1), debugstr_wn(first2, last2-first2));
1081 if(coll)
1082 lcid = coll->handle;
1083 else
1084 lcid = ___lc_handle_func()[LC_COLLATE];
1085 return CompareStringW(lcid, 0, first1, last1-first1, first2, last2-first2)-2;
1088 /* ?do_compare@?$collate@_W@std@@MBEHPB_W000@Z */
1089 /* ?do_compare@?$collate@_W@std@@MEBAHPEB_W000@Z */
1090 /* ?do_compare@?$collate@G@std@@MBEHPBG000@Z */
1091 /* ?do_compare@?$collate@G@std@@MEBAHPEBG000@Z */
1092 DEFINE_THISCALL_WRAPPER(collate_wchar_do_compare, 20)
1093 #define call_collate_wchar_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 4, int, \
1094 (const collate*, const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*), \
1095 (this, first1, last1, first2, last2))
1096 int __thiscall collate_wchar_do_compare(const collate *this, const wchar_t *first1,
1097 const wchar_t *last1, const wchar_t *first2, const wchar_t *last2)
1099 TRACE("(%p %p %p %p %p)\n", this, first1, last1, first2, last2);
1100 return _Wcscoll(first1, last1, first2, last2, &this->coll);
1103 /* ?compare@?$collate@_W@std@@QBEHPB_W000@Z */
1104 /* ?compare@?$collate@_W@std@@QEBAHPEB_W000@Z */
1105 /* ?compare@?$collate@G@std@@QBEHPBG000@Z */
1106 /* ?compare@?$collate@G@std@@QEBAHPEBG000@Z */
1107 DEFINE_THISCALL_WRAPPER(collate_wchar_compare, 20)
1108 int __thiscall collate_wchar_compare(const collate *this, const wchar_t *first1,
1109 const wchar_t *last1, const wchar_t *first2, const wchar_t *last2)
1111 TRACE("(%p %p %p %p %p)\n", this, first1, last1, first2, last2);
1112 return call_collate_wchar_do_compare(this, first1, last1, first2, last2);
1115 /* ?do_hash@?$collate@_W@std@@MBEJPB_W0@Z */
1116 /* ?do_hash@?$collate@_W@std@@MEBAJPEB_W0@Z */
1117 /* ?do_hash@?$collate@G@std@@MBEJPBG0@Z */
1118 /* ?do_hash@?$collate@G@std@@MEBAJPEBG0@Z */
1119 DEFINE_THISCALL_WRAPPER(collate_wchar_do_hash, 12)
1120 #define call_collate_wchar_do_hash(this, first, last) CALL_VTBL_FUNC(this, 12, LONG, \
1121 (const collate*, const wchar_t*, const wchar_t*), (this, first, last))
1122 LONG __thiscall collate_wchar_do_hash(const collate *this,
1123 const wchar_t *first, const wchar_t *last)
1125 ULONG ret = 0;
1127 TRACE("(%p %p %p)\n", this, first, last);
1129 for(; first<last; first++)
1130 ret = (ret<<8 | ret>>24) + *first;
1131 return ret;
1134 /* ?hash@?$collate@_W@std@@QBEJPB_W0@Z */
1135 /* ?hash@?$collate@_W@std@@QEBAJPEB_W0@Z */
1136 /* ?hash@?$collate@G@std@@QBEJPBG0@Z */
1137 /* ?hash@?$collate@G@std@@QEBAJPEBG0@Z */
1138 DEFINE_THISCALL_WRAPPER(collate_wchar_hash, 12)
1139 LONG __thiscall collate_wchar_hash(const collate *this,
1140 const wchar_t *first, const wchar_t *last)
1142 TRACE("(%p %p %p)\n", this, first, last);
1143 return call_collate_wchar_do_hash(this, first, last);
1146 /* ?do_transform@?$collate@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
1147 /* ?do_transform@?$collate@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
1148 /* ?do_transform@?$collate@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
1149 /* ?do_transform@?$collate@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
1150 DEFINE_THISCALL_WRAPPER(collate_wchar_do_transform, 16)
1151 basic_string_wchar* __thiscall collate_wchar_do_transform(const collate *this,
1152 basic_string_wchar *ret, const wchar_t *first, const wchar_t *last)
1154 FIXME("(%p %p %p) stub\n", this, first, last);
1155 return ret;
1158 /* ?transform@?$collate@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
1159 /* ?transform@?$collate@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
1160 /* ?transform@?$collate@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
1161 /* ?transform@?$collate@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
1162 DEFINE_THISCALL_WRAPPER(collate_wchar_transform, 16)
1163 basic_string_wchar* __thiscall collate_wchar_transform(const collate *this,
1164 basic_string_wchar *ret, const wchar_t *first, const wchar_t *last)
1166 FIXME("(%p %p %p) stub\n", this, first, last);
1167 return ret;
1170 /* ??_7ctype_base@std@@6B@ */
1171 extern const vtable_ptr MSVCP_ctype_base_vtable;
1173 /* ??0ctype_base@std@@QAE@I@Z */
1174 /* ??0ctype_base@std@@QEAA@_K@Z */
1175 DEFINE_THISCALL_WRAPPER(ctype_base_ctor_refs, 8)
1176 ctype_base* __thiscall ctype_base_ctor_refs(ctype_base *this, MSVCP_size_t refs)
1178 TRACE("(%p %lu)\n", this, refs);
1179 locale_facet_ctor_refs(&this->facet, refs);
1180 this->facet.vtable = &MSVCP_ctype_base_vtable;
1181 return this;
1184 /* ??_Fctype_base@std@@QAEXXZ */
1185 /* ??_Fctype_base@std@@QEAAXXZ */
1186 DEFINE_THISCALL_WRAPPER(ctype_base_ctor, 4)
1187 ctype_base* __thiscall ctype_base_ctor(ctype_base *this)
1189 TRACE("(%p)\n", this);
1190 locale_facet_ctor_refs(&this->facet, 0);
1191 this->facet.vtable = &MSVCP_ctype_base_vtable;
1192 return this;
1195 /* ??1ctype_base@std@@UAE@XZ */
1196 /* ??1ctype_base@std@@UEAA@XZ */
1197 DEFINE_THISCALL_WRAPPER(ctype_base_dtor, 4)
1198 void __thiscall ctype_base_dtor(ctype_base *this)
1200 TRACE("(%p)\n", this);
1203 DEFINE_THISCALL_WRAPPER(MSVCP_ctype_base_vector_dtor, 8)
1204 ctype_base* __thiscall MSVCP_ctype_base_vector_dtor(ctype_base *this, unsigned int flags)
1206 TRACE("(%p %x)\n", this, flags);
1207 if(flags & 2) {
1208 /* we have an array, with the number of elements stored before the first object */
1209 int i, *ptr = (int *)this-1;
1211 for(i=*ptr-1; i>=0; i--)
1212 ctype_base_dtor(this+i);
1213 MSVCRT_operator_delete(ptr);
1214 } else {
1215 ctype_base_dtor(this);
1216 if(flags & 1)
1217 MSVCRT_operator_delete(this);
1220 return this;
1223 /* ?_Xran@ctype_base@std@@KAXXZ */
1224 void __cdecl ctype_base__Xran(void)
1226 throw_exception(EXCEPTION_OUT_OF_RANGE, "out of range in ctype<T>");
1229 /* ?id@?$ctype@D@std@@2V0locale@2@A */
1230 locale_id ctype_char_id = {0};
1231 /* ?table_size@?$ctype@D@std@@2IB */
1232 /* ?table_size@?$ctype@D@std@@2_KB */
1233 MSVCP_size_t ctype_char_table_size = 256;
1235 /* ??_7?$ctype@D@std@@6B@ */
1236 extern const vtable_ptr MSVCP_ctype_char_vtable;
1238 /* ?_Id_func@?$ctype@D@std@@SAAAVid@locale@2@XZ */
1239 /* ?_Id_func@?$ctype@D@std@@SAAEAVid@locale@2@XZ */
1240 locale_id* __cdecl ctype_char__Id_func(void)
1242 TRACE("()\n");
1243 return &ctype_char_id;
1246 /* ?_Init@?$ctype@D@std@@IAEXABV_Locinfo@2@@Z */
1247 /* ?_Init@?$ctype@D@std@@IEAAXAEBV_Locinfo@2@@Z */
1248 DEFINE_THISCALL_WRAPPER(ctype_char__Init, 8)
1249 void __thiscall ctype_char__Init(ctype_char *this, _Locinfo *locinfo)
1251 TRACE("(%p %p)\n", this, locinfo);
1252 _Locinfo__Getctype(locinfo, &this->ctype);
1255 /* ?_Tidy@?$ctype@D@std@@IAEXXZ */
1256 /* ?_Tidy@?$ctype@D@std@@IEAAXXZ */
1257 DEFINE_THISCALL_WRAPPER(ctype_char__Tidy, 4)
1258 void __thiscall ctype_char__Tidy(ctype_char *this)
1260 TRACE("(%p)\n", this);
1262 if(this->ctype.delfl)
1263 free((short*)this->ctype.table);
1266 /* ?classic_table@?$ctype@D@std@@KAPBFXZ */
1267 /* ?classic_table@?$ctype@D@std@@KAPEBFXZ */
1268 const short* __cdecl ctype_char_classic_table(void)
1270 TRACE("()\n");
1271 return &((short*)GetProcAddress(GetModuleHandleA("msvcrt.dll"), "_ctype"))[1];
1274 /* ??0?$ctype@D@std@@QAE@ABV_Locinfo@1@I@Z */
1275 /* ??0?$ctype@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1276 DEFINE_THISCALL_WRAPPER(ctype_char_ctor_locinfo, 12)
1277 ctype_char* __thiscall ctype_char_ctor_locinfo(ctype_char *this,
1278 _Locinfo *locinfo, MSVCP_size_t refs)
1280 TRACE("(%p %p %lu)\n", this, locinfo, refs);
1281 ctype_base_ctor_refs(&this->base, refs);
1282 this->base.facet.vtable = &MSVCP_ctype_char_vtable;
1283 ctype_char__Init(this, locinfo);
1284 return this;
1287 /* ??0?$ctype@D@std@@QAE@PBF_NI@Z */
1288 /* ??0?$ctype@D@std@@QEAA@PEBF_N_K@Z */
1289 DEFINE_THISCALL_WRAPPER(ctype_char_ctor_table, 16)
1290 ctype_char* __thiscall ctype_char_ctor_table(ctype_char *this,
1291 const short *table, MSVCP_bool delete, MSVCP_size_t refs)
1293 _Locinfo locinfo;
1295 TRACE("(%p %p %d %lu)\n", this, table, delete, refs);
1297 ctype_base_ctor_refs(&this->base, refs);
1298 this->base.facet.vtable = &MSVCP_ctype_char_vtable;
1300 _Locinfo_ctor(&locinfo);
1301 ctype_char__Init(this, &locinfo);
1302 _Locinfo_dtor(&locinfo);
1304 if(table) {
1305 ctype_char__Tidy(this);
1306 this->ctype.table = table;
1307 this->ctype.delfl = delete;
1309 return this;
1312 /* ??_F?$ctype@D@std@@QAEXXZ */
1313 /* ??_F?$ctype@D@std@@QEAAXXZ */
1314 DEFINE_THISCALL_WRAPPER(ctype_char_ctor, 4)
1315 ctype_char* __thiscall ctype_char_ctor(ctype_char *this)
1317 return ctype_char_ctor_table(this, NULL, FALSE, 0);
1320 /* ??1?$ctype@D@std@@MAE@XZ */
1321 /* ??1?$ctype@D@std@@MEAA@XZ */
1322 DEFINE_THISCALL_WRAPPER(ctype_char_dtor, 4)
1323 void __thiscall ctype_char_dtor(ctype_char *this)
1325 TRACE("(%p)\n", this);
1326 ctype_char__Tidy(this);
1329 DEFINE_THISCALL_WRAPPER(MSVCP_ctype_char_vector_dtor, 8)
1330 ctype_char* __thiscall MSVCP_ctype_char_vector_dtor(ctype_char *this, unsigned int flags)
1332 TRACE("(%p %x)\n", this, flags);
1333 if(flags & 2) {
1334 /* we have an array, with the number of elements stored before the first object */
1335 int i, *ptr = (int *)this-1;
1337 for(i=*ptr-1; i>=0; i--)
1338 ctype_char_dtor(this+i);
1339 MSVCRT_operator_delete(ptr);
1340 } else {
1341 ctype_char_dtor(this);
1342 if(flags & 1)
1343 MSVCRT_operator_delete(this);
1346 return this;
1349 /* ?do_narrow@?$ctype@D@std@@MBEDDD@Z */
1350 /* ?do_narrow@?$ctype@D@std@@MEBADDD@Z */
1351 DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow_ch, 12)
1352 #define call_ctype_char_do_narrow_ch(this, ch, unused) CALL_VTBL_FUNC(this, 36, \
1353 char, (const ctype_char*, char, char), (this, ch, unused))
1354 char __thiscall ctype_char_do_narrow_ch(const ctype_char *this, char ch, char unused)
1356 TRACE("(%p %c %c)\n", this, ch, unused);
1357 return ch;
1360 /* ?do_narrow@?$ctype@D@std@@MBEPBDPBD0DPAD@Z */
1361 /* ?do_narrow@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD@Z */
1362 DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow, 20)
1363 #define call_ctype_char_do_narrow(this, first, last, unused, dest) CALL_VTBL_FUNC(this, 32, \
1364 const char*, (const ctype_char*, const char*, const char*, char, char*), \
1365 (this, first, last, unused, dest))
1366 const char* __thiscall ctype_char_do_narrow(const ctype_char *this,
1367 const char *first, const char *last, char unused, char *dest)
1369 TRACE("(%p %p %p %p)\n", this, first, last, dest);
1370 memcpy(dest, first, last-first);
1371 return last;
1374 /* ?_Do_narrow_s@?$ctype@D@std@@MBEPBDPBD0DPADI@Z */
1375 /* ?_Do_narrow_s@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD_K@Z */
1376 DEFINE_THISCALL_WRAPPER(ctype_char__Do_narrow_s, 24)
1377 #define call_ctype_char__Do_narrow_s(this, first, last, unused, dest, size) CALL_VTBL_FUNC(this, 40, \
1378 const char*, (const ctype_char*, const char*, const char*, char, char*, MSVCP_size_t), \
1379 (this, first, last, unused, dest, size))
1380 const char* __thiscall ctype_char__Do_narrow_s(const ctype_char *this, const char *first,
1381 const char *last, char unused, char *dest, MSVCP_size_t size)
1383 TRACE("(%p %p %p %p %lu)\n", this, first, last, dest, size);
1384 memcpy_s(dest, size, first, last-first);
1385 return last;
1388 /* ?narrow@?$ctype@D@std@@QBEDDD@Z */
1389 /* ?narrow@?$ctype@D@std@@QEBADDD@Z */
1390 DEFINE_THISCALL_WRAPPER(ctype_char_narrow_ch, 12)
1391 char __thiscall ctype_char_narrow_ch(const ctype_char *this, char ch, char dflt)
1393 TRACE("(%p %c %c)\n", this, ch, dflt);
1394 return call_ctype_char_do_narrow_ch(this, ch, dflt);
1397 /* ?narrow@?$ctype@D@std@@QBEPBDPBD0DPAD@Z */
1398 /* ?narrow@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD@Z */
1399 DEFINE_THISCALL_WRAPPER(ctype_char_narrow, 20)
1400 const char* __thiscall ctype_char_narrow(const ctype_char *this,
1401 const char *first, const char *last, char dflt, char *dest)
1403 TRACE("(%p %p %p %c %p)\n", this, first, last, dflt, dest);
1404 return call_ctype_char_do_narrow(this, first, last, dflt, dest);
1407 /* ?_Narrow_s@?$ctype@D@std@@QBEPBDPBD0DPADI@Z */
1408 /* ?_Narrow_s@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD_K@Z */
1409 DEFINE_THISCALL_WRAPPER(ctype_char__Narrow_s, 24)
1410 const char* __thiscall ctype_char__Narrow_s(const ctype_char *this, const char *first,
1411 const char *last, char dflt, char *dest, MSVCP_size_t size)
1413 TRACE("(%p %p %p %p %lu)\n", this, first, last, dest, size);
1414 return call_ctype_char__Do_narrow_s(this, first, last, dflt, dest, size);
1417 /* ?do_widen@?$ctype@D@std@@MBEDD@Z */
1418 /* ?do_widen@?$ctype@D@std@@MEBADD@Z */
1419 DEFINE_THISCALL_WRAPPER(ctype_char_do_widen_ch, 8)
1420 #define call_ctype_char_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
1421 char, (const ctype_char*, char), (this, ch))
1422 char __thiscall ctype_char_do_widen_ch(const ctype_char *this, char ch)
1424 TRACE("(%p %c)\n", this, ch);
1425 return ch;
1428 /* ?do_widen@?$ctype@D@std@@MBEPBDPBD0PAD@Z */
1429 /* ?do_widen@?$ctype@D@std@@MEBAPEBDPEBD0PEAD@Z */
1430 DEFINE_THISCALL_WRAPPER(ctype_char_do_widen, 16)
1431 #define call_ctype_char_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 20, \
1432 const char*, (const ctype_char*, const char*, const char*, char*), \
1433 (this, first, last, dest))
1434 const char* __thiscall ctype_char_do_widen(const ctype_char *this,
1435 const char *first, const char *last, char *dest)
1437 TRACE("(%p %p %p %p)\n", this, first, last, dest);
1438 memcpy(dest, first, last-first);
1439 return last;
1442 /* ?_Do_widen_s@?$ctype@D@std@@MBEPBDPBD0PADI@Z */
1443 /* ?_Do_widen_s@?$ctype@D@std@@MEBAPEBDPEBD0PEAD_K@Z */
1444 DEFINE_THISCALL_WRAPPER(ctype_char__Do_widen_s, 20)
1445 #define call_ctype_char__Do_widen_s(this, first, last, dest, size) CALL_VTBL_FUNC(this, 28, \
1446 const char*, (const ctype_char*, const char*, const char*, char*, MSVCP_size_t), \
1447 (this, first, last, dest, size))
1448 const char* __thiscall ctype_char__Do_widen_s(const ctype_char *this,
1449 const char *first, const char *last, char *dest, MSVCP_size_t size)
1451 TRACE("(%p %p %p %p %lu)\n", this, first, last, dest, size);
1452 memcpy_s(dest, size, first, last-first);
1453 return last;
1456 /* ?widen@?$ctype@D@std@@QBEDD@Z */
1457 /* ?widen@?$ctype@D@std@@QEBADD@Z */
1458 DEFINE_THISCALL_WRAPPER(ctype_char_widen_ch, 8)
1459 char __thiscall ctype_char_widen_ch(const ctype_char *this, char ch)
1461 TRACE("(%p %c)\n", this, ch);
1462 return call_ctype_char_do_widen_ch(this, ch);
1465 /* ?widen@?$ctype@D@std@@QBEPBDPBD0PAD@Z */
1466 /* ?widen@?$ctype@D@std@@QEBAPEBDPEBD0PEAD@Z */
1467 DEFINE_THISCALL_WRAPPER(ctype_char_widen, 16)
1468 const char* __thiscall ctype_char_widen(const ctype_char *this,
1469 const char *first, const char *last, char *dest)
1471 TRACE("(%p %p %p %p)\n", this, first, last, dest);
1472 return call_ctype_char_do_widen(this, first, last, dest);
1475 /* ?_Widen_s@?$ctype@D@std@@QBEPBDPBD0PADI@Z */
1476 /* ?_Widen_s@?$ctype@D@std@@QEBAPEBDPEBD0PEAD_K@Z */
1477 DEFINE_THISCALL_WRAPPER(ctype_char__Widen_s, 20)
1478 const char* __thiscall ctype_char__Widen_s(const ctype_char *this,
1479 const char *first, const char *last, char *dest, MSVCP_size_t size)
1481 TRACE("(%p %p %p %p %lu)\n", this, first, last, dest, size);
1482 return call_ctype_char__Do_widen_s(this, first, last, dest, size);
1485 /* ?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1486 /* ?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1487 MSVCP_size_t __cdecl ctype_char__Getcat(const locale_facet **facet, const locale *loc)
1489 TRACE("(%p %p)\n", facet, loc);
1491 if(facet && !*facet) {
1492 _Locinfo locinfo;
1494 *facet = MSVCRT_operator_new(sizeof(ctype_char));
1495 if(!*facet) {
1496 ERR("Out of memory\n");
1497 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
1498 return 0;
1501 _Locinfo_ctor_cstr(&locinfo, MSVCP_basic_string_char_c_str(&loc->ptr->name));
1502 ctype_char_ctor_locinfo((ctype_char*)*facet, &locinfo, 0);
1503 _Locinfo_dtor(&locinfo);
1506 return LC_CTYPE;
1509 /* _Tolower */
1510 int __cdecl _Tolower(int ch, const _Ctypevec *ctype)
1512 unsigned int cp;
1514 TRACE("%d %p\n", ch, ctype);
1516 if(ctype)
1517 cp = ctype->page;
1518 else
1519 cp = ___lc_codepage_func();
1521 /* Don't convert to unicode in case of C locale */
1522 if(!cp) {
1523 if(ch>='A' && ch<='Z')
1524 ch = ch-'A'+'a';
1525 return ch;
1526 } else {
1527 WCHAR wide, lower;
1528 char str[2];
1529 int size;
1531 if(ch > 255) {
1532 str[0] = (ch>>8) & 255;
1533 str[1] = ch & 255;
1534 size = 2;
1535 } else {
1536 str[0] = ch & 255;
1537 size = 1;
1540 if(!MultiByteToWideChar(cp, MB_ERR_INVALID_CHARS, str, size, &wide, 1))
1541 return ch;
1543 lower = tolowerW(wide);
1544 if(lower == wide)
1545 return ch;
1547 WideCharToMultiByte(cp, 0, &lower, 1, str, 2, NULL, NULL);
1549 return str[0] + (str[1]<<8);
1553 /* ?do_tolower@?$ctype@D@std@@MBEDD@Z */
1554 /* ?do_tolower@?$ctype@D@std@@MEBADD@Z */
1555 #define call_ctype_char_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 8, \
1556 char, (const ctype_char*, char), (this, ch))
1557 DEFINE_THISCALL_WRAPPER(ctype_char_do_tolower_ch, 8)
1558 char __thiscall ctype_char_do_tolower_ch(const ctype_char *this, char ch)
1560 TRACE("(%p %c)\n", this, ch);
1561 return _Tolower(ch, &this->ctype);
1564 /* ?do_tolower@?$ctype@D@std@@MBEPBDPADPBD@Z */
1565 /* ?do_tolower@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z */
1566 #define call_ctype_char_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 4, \
1567 const char*, (const ctype_char*, char*, const char*), (this, first, last))
1568 DEFINE_THISCALL_WRAPPER(ctype_char_do_tolower, 12)
1569 const char* __thiscall ctype_char_do_tolower(const ctype_char *this, char *first, const char *last)
1571 TRACE("(%p %p %p)\n", this, first, last);
1572 for(; first<last; first++)
1573 *first = _Tolower(*first, &this->ctype);
1574 return last;
1577 /* ?tolower@?$ctype@D@std@@QBEDD@Z */
1578 /* ?tolower@?$ctype@D@std@@QEBADD@Z */
1579 DEFINE_THISCALL_WRAPPER(ctype_char_tolower_ch, 8)
1580 char __thiscall ctype_char_tolower_ch(const ctype_char *this, char ch)
1582 TRACE("(%p %c)\n", this, ch);
1583 return call_ctype_char_do_tolower_ch(this, ch);
1586 /* ?tolower@?$ctype@D@std@@QBEPBDPADPBD@Z */
1587 /* ?tolower@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z */
1588 DEFINE_THISCALL_WRAPPER(ctype_char_tolower, 12)
1589 const char* __thiscall ctype_char_tolower(const ctype_char *this, char *first, const char *last)
1591 TRACE("(%p %p %p)\n", this, first, last);
1592 return call_ctype_char_do_tolower(this, first, last);
1595 /* _Toupper */
1596 int __cdecl _Toupper(int ch, const _Ctypevec *ctype)
1598 unsigned int cp;
1600 TRACE("%d %p\n", ch, ctype);
1602 if(ctype)
1603 cp = ctype->page;
1604 else
1605 cp = ___lc_codepage_func();
1607 /* Don't convert to unicode in case of C locale */
1608 if(!cp) {
1609 if(ch>='a' && ch<='z')
1610 ch = ch-'a'+'A';
1611 return ch;
1612 } else {
1613 WCHAR wide, upper;
1614 char str[2];
1615 int size;
1617 if(ch > 255) {
1618 str[0] = (ch>>8) & 255;
1619 str[1] = ch & 255;
1620 size = 2;
1621 } else {
1622 str[0] = ch & 255;
1623 size = 1;
1626 if(!MultiByteToWideChar(cp, MB_ERR_INVALID_CHARS, str, size, &wide, 1))
1627 return ch;
1629 upper = toupperW(wide);
1630 if(upper == wide)
1631 return ch;
1633 WideCharToMultiByte(cp, 0, &upper, 1, str, 2, NULL, NULL);
1635 return str[0] + (str[1]<<8);
1639 /* ?do_toupper@?$ctype@D@std@@MBEDD@Z */
1640 /* ?do_toupper@?$ctype@D@std@@MEBADD@Z */
1641 #define call_ctype_char_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 16, \
1642 char, (const ctype_char*, char), (this, ch))
1643 DEFINE_THISCALL_WRAPPER(ctype_char_do_toupper_ch, 8)
1644 char __thiscall ctype_char_do_toupper_ch(const ctype_char *this, char ch)
1646 TRACE("(%p %c)\n", this, ch);
1647 return _Toupper(ch, &this->ctype);
1650 /* ?do_toupper@?$ctype@D@std@@MBEPBDPADPBD@Z */
1651 /* ?do_toupper@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z */
1652 #define call_ctype_char_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 12, \
1653 const char*, (const ctype_char*, char*, const char*), (this, first, last))
1654 DEFINE_THISCALL_WRAPPER(ctype_char_do_toupper, 12)
1655 const char* __thiscall ctype_char_do_toupper(const ctype_char *this,
1656 char *first, const char *last)
1658 TRACE("(%p %p %p)\n", this, first, last);
1659 for(; first<last; first++)
1660 *first = _Toupper(*first, &this->ctype);
1661 return last;
1664 /* ?toupper@?$ctype@D@std@@QBEDD@Z */
1665 /* ?toupper@?$ctype@D@std@@QEBADD@Z */
1666 DEFINE_THISCALL_WRAPPER(ctype_char_toupper_ch, 8)
1667 char __thiscall ctype_char_toupper_ch(const ctype_char *this, char ch)
1669 TRACE("(%p %c)\n", this, ch);
1670 return call_ctype_char_do_toupper_ch(this, ch);
1673 /* ?toupper@?$ctype@D@std@@QBEPBDPADPBD@Z */
1674 /* ?toupper@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z */
1675 DEFINE_THISCALL_WRAPPER(ctype_char_toupper, 12)
1676 const char* __thiscall ctype_char_toupper(const ctype_char *this, char *first, const char *last)
1678 TRACE("(%p %p %p)\n", this, first, last);
1679 return call_ctype_char_do_toupper(this, first, last);
1682 /* ?is@?$ctype@D@std@@QBE_NFD@Z */
1683 /* ?is@?$ctype@D@std@@QEBA_NFD@Z */
1684 DEFINE_THISCALL_WRAPPER(ctype_char_is_ch, 12)
1685 MSVCP_bool __thiscall ctype_char_is_ch(const ctype_char *this, short mask, char ch)
1687 TRACE("(%p %x %c)\n", this, mask, ch);
1688 return (this->ctype.table[(unsigned char)ch] & mask) != 0;
1691 /* ?is@?$ctype@D@std@@QBEPBDPBD0PAF@Z */
1692 /* ?is@?$ctype@D@std@@QEBAPEBDPEBD0PEAF@Z */
1693 DEFINE_THISCALL_WRAPPER(ctype_char_is, 16)
1694 const char* __thiscall ctype_char_is(const ctype_char *this, const char *first, const char *last, short *dest)
1696 TRACE("(%p %p %p %p)\n", this, first, last, dest);
1697 for(; first<last; first++)
1698 *dest++ = this->ctype.table[(unsigned char)*first];
1699 return last;
1702 /* ?scan_is@?$ctype@D@std@@QBEPBDFPBD0@Z */
1703 /* ?scan_is@?$ctype@D@std@@QEBAPEBDFPEBD0@Z */
1704 DEFINE_THISCALL_WRAPPER(ctype_char_scan_is, 16)
1705 const char* __thiscall ctype_char_scan_is(const ctype_char *this, short mask, const char *first, const char *last)
1707 TRACE("(%p %x %p %p)\n", this, mask, first, last);
1708 for(; first<last; first++)
1709 if(!ctype_char_is_ch(this, mask, *first))
1710 break;
1711 return first;
1714 /* ?scan_not@?$ctype@D@std@@QBEPBDFPBD0@Z */
1715 /* ?scan_not@?$ctype@D@std@@QEBAPEBDFPEBD0@Z */
1716 DEFINE_THISCALL_WRAPPER(ctype_char_scan_not, 16)
1717 const char* __thiscall ctype_char_scan_not(const ctype_char *this, short mask, const char *first, const char *last)
1719 TRACE("(%p %x %p %p)\n", this, mask, first, last);
1720 for(; first<last; first++)
1721 if(ctype_char_is_ch(this, mask, *first))
1722 break;
1723 return first;
1726 /* ?table@?$ctype@D@std@@IBEPBFXZ */
1727 /* ?table@?$ctype@D@std@@IEBAPEBFXZ */
1728 DEFINE_THISCALL_WRAPPER(ctype_char_table, 4)
1729 const short* __thiscall ctype_char_table(const ctype_char *this)
1731 TRACE("(%p)\n", this);
1732 return this->ctype.table;
1735 /* ?id@?$ctype@_W@std@@2V0locale@2@A */
1736 locale_id ctype_wchar_id = {0};
1737 /* ?id@?$ctype@G@std@@2V0locale@2@A */
1738 locale_id ctype_short_id = {0};
1740 /* ??_7?$ctype@_W@std@@6B@ */
1741 extern const vtable_ptr MSVCP_ctype_wchar_vtable;
1742 /* ??_7?$ctype@G@std@@6B@ */
1743 extern const vtable_ptr MSVCP_ctype_short_vtable;
1745 /* ?_Id_func@?$ctype@_W@std@@SAAAVid@locale@2@XZ */
1746 /* ?_Id_func@?$ctype@_W@std@@SAAEAVid@locale@2@XZ */
1747 locale_id* __cdecl ctype_wchar__Id_func(void)
1749 TRACE("()\n");
1750 return &ctype_wchar_id;
1753 /* ?_Id_func@?$ctype@G@std@@SAAAVid@locale@2@XZ */
1754 /* ?_Id_func@?$ctype@G@std@@SAAEAVid@locale@2@XZ */
1755 locale_id* __cdecl ctype_short__Id_func(void)
1757 TRACE("()\n");
1758 return &ctype_short_id;
1761 /* ?_Init@?$ctype@_W@std@@IAEXABV_Locinfo@2@@Z */
1762 /* ?_Init@?$ctype@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
1763 /* ?_Init@?$ctype@G@std@@IAEXABV_Locinfo@2@@Z */
1764 /* ?_Init@?$ctype@G@std@@IEAAXAEBV_Locinfo@2@@Z */
1765 DEFINE_THISCALL_WRAPPER(ctype_wchar__Init, 8)
1766 void __thiscall ctype_wchar__Init(ctype_wchar *this, _Locinfo *locinfo)
1768 TRACE("(%p %p)\n", this, locinfo);
1769 _Locinfo__Getctype(locinfo, &this->ctype);
1770 _Locinfo__Getcvt(locinfo, &this->cvt);
1773 /* ??0?$ctype@_W@std@@QAE@ABV_Locinfo@1@I@Z */
1774 /* ??0?$ctype@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1775 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor_locinfo, 12)
1776 ctype_wchar* __thiscall ctype_wchar_ctor_locinfo(ctype_wchar *this,
1777 _Locinfo *locinfo, MSVCP_size_t refs)
1779 TRACE("(%p %p %lu)\n", this, locinfo, refs);
1780 ctype_base_ctor_refs(&this->base, refs);
1781 this->base.facet.vtable = &MSVCP_ctype_wchar_vtable;
1782 ctype_wchar__Init(this, locinfo);
1783 return this;
1786 /* ??0?$ctype@G@std@@QAE@ABV_Locinfo@1@I@Z */
1787 /* ??0?$ctype@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1788 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_locinfo, 12)
1789 ctype_wchar* __thiscall ctype_short_ctor_locinfo(ctype_wchar *this,
1790 _Locinfo *locinfo, MSVCP_size_t refs)
1792 ctype_wchar *ret = ctype_wchar_ctor_locinfo(this, locinfo, refs);
1793 this->base.facet.vtable = &MSVCP_ctype_short_vtable;
1794 return ret;
1797 /* ??0?$ctype@_W@std@@QAE@I@Z */
1798 /* ??0?$ctype@_W@std@@QEAA@_K@Z */
1799 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor_refs, 8)
1800 ctype_wchar* __thiscall ctype_wchar_ctor_refs(ctype_wchar *this, MSVCP_size_t refs)
1802 _Locinfo locinfo;
1804 TRACE("(%p %lu)\n", this, refs);
1806 ctype_base_ctor_refs(&this->base, refs);
1807 this->base.facet.vtable = &MSVCP_ctype_wchar_vtable;
1809 _Locinfo_ctor(&locinfo);
1810 ctype_wchar__Init(this, &locinfo);
1811 _Locinfo_dtor(&locinfo);
1812 return this;
1815 /* ??0?$ctype@G@std@@QAE@I@Z */
1816 /* ??0?$ctype@G@std@@QEAA@_K@Z */
1817 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_refs, 8)
1818 ctype_wchar* __thiscall ctype_short_ctor_refs(ctype_wchar *this, MSVCP_size_t refs)
1820 ctype_wchar *ret = ctype_wchar_ctor_refs(this, refs);
1821 this->base.facet.vtable = &MSVCP_ctype_short_vtable;
1822 return ret;
1825 /* ??0?$ctype@G@std@@IAE@PBDI@Z */
1826 /* ??0?$ctype@G@std@@IEAA@PEBD_K@Z */
1827 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_name, 12)
1828 ctype_wchar* __thiscall ctype_short_ctor_name(ctype_wchar *this,
1829 const char *name, MSVCP_size_t refs)
1831 _Locinfo locinfo;
1833 TRACE("(%p %s %lu)\n", this, debugstr_a(name), refs);
1835 ctype_base_ctor_refs(&this->base, refs);
1836 this->base.facet.vtable = &MSVCP_ctype_short_vtable;
1838 _Locinfo_ctor_cstr(&locinfo, name);
1839 ctype_wchar__Init(this, &locinfo);
1840 _Locinfo_dtor(&locinfo);
1841 return this;
1844 /* ??_F?$ctype@_W@std@@QAEXXZ */
1845 /* ??_F?$ctype@_W@std@@QEAAXXZ */
1846 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor, 4)
1847 ctype_wchar* __thiscall ctype_wchar_ctor(ctype_wchar *this)
1849 TRACE("(%p)\n", this);
1850 return ctype_short_ctor_refs(this, 0);
1853 /* ??_F?$ctype@G@std@@QAEXXZ */
1854 /* ??_F?$ctype@G@std@@QEAAXXZ */
1855 DEFINE_THISCALL_WRAPPER(ctype_short_ctor, 4)
1856 ctype_wchar* __thiscall ctype_short_ctor(ctype_wchar *this)
1858 ctype_wchar *ret = ctype_wchar_ctor(this);
1859 this->base.facet.vtable = &MSVCP_ctype_short_vtable;
1860 return ret;
1863 /* ??1?$ctype@_W@std@@MAE@XZ */
1864 /* ??1?$ctype@_W@std@@MEAA@XZ */
1865 /* ??1?$ctype@G@std@@MAE@XZ */
1866 /* ??1?$ctype@G@std@@MEAA@XZ */
1867 DEFINE_THISCALL_WRAPPER(ctype_wchar_dtor, 4)
1868 void __thiscall ctype_wchar_dtor(ctype_wchar *this)
1870 TRACE("(%p)\n", this);
1871 if(this->ctype.delfl)
1872 free((void*)this->ctype.table);
1875 DEFINE_THISCALL_WRAPPER(MSVCP_ctype_wchar_vector_dtor, 8)
1876 ctype_wchar* __thiscall MSVCP_ctype_wchar_vector_dtor(ctype_wchar *this, unsigned int flags)
1878 TRACE("(%p %x)\n", this, flags);
1879 if(flags & 2) {
1880 /* we have an array, with the number of elements stored before the first object */
1881 int i, *ptr = (int *)this-1;
1883 for(i=*ptr-1; i>=0; i--)
1884 ctype_wchar_dtor(this+i);
1885 MSVCRT_operator_delete(ptr);
1886 } else {
1887 ctype_wchar_dtor(this);
1888 if(flags & 1)
1889 MSVCRT_operator_delete(this);
1892 return this;
1895 DEFINE_THISCALL_WRAPPER(MSVCP_ctype_short_vector_dtor, 8)
1896 ctype_wchar* __thiscall MSVCP_ctype_short_vector_dtor(ctype_wchar *this, unsigned int flags)
1898 return MSVCP_ctype_wchar_vector_dtor(this, flags);
1901 /* _Wcrtomb */
1902 int __cdecl _Wcrtomb(char *s, wchar_t wch, int *state, const _Cvtvec *cvt)
1904 int cp, size;
1905 BOOL def;
1907 TRACE("%p %d %p %p\n", s, wch, state, cvt);
1909 if(cvt)
1910 cp = cvt->page;
1911 else
1912 cp = ___lc_codepage_func();
1914 if(!cp) {
1915 if(wch > 255) {
1916 *_errno() = EILSEQ;
1917 return -1;
1920 *s = wch & 255;
1921 return 1;
1924 size = WideCharToMultiByte(cp, 0, &wch, 1, s, MB_LEN_MAX, NULL, &def);
1925 if(!size || def) {
1926 *_errno() = EILSEQ;
1927 return -1;
1930 return size;
1933 /* ?_Donarrow@?$ctype@_W@std@@IBED_WD@Z */
1934 /* ?_Donarrow@?$ctype@_W@std@@IEBAD_WD@Z */
1935 /* ?_Donarrow@?$ctype@G@std@@IBEDGD@Z */
1936 /* ?_Donarrow@?$ctype@G@std@@IEBADGD@Z */
1937 DEFINE_THISCALL_WRAPPER(ctype_wchar__Donarrow, 12)
1938 char __thiscall ctype_wchar__Donarrow(const ctype_wchar *this, wchar_t ch, char dflt)
1940 char buf[MB_LEN_MAX];
1942 TRACE("(%p %d %d)\n", this, ch, dflt);
1944 return _Wcrtomb(buf, ch, NULL, &this->cvt)==1 ? buf[0] : dflt;
1947 /* ?do_narrow@?$ctype@_W@std@@MBED_WD@Z */
1948 /* ?do_narrow@?$ctype@_W@std@@MEBAD_WD@Z */
1949 /* ?do_narrow@?$ctype@G@std@@MBEDGD@Z */
1950 /* ?do_narrow@?$ctype@G@std@@MEBADGD@Z */
1951 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow_ch, 12)
1952 #define call_ctype_wchar_do_narrow_ch(this, ch, dflt) CALL_VTBL_FUNC(this, 52, \
1953 char, (const ctype_wchar*, wchar_t, char), (this, ch, dflt))
1954 char __thiscall ctype_wchar_do_narrow_ch(const ctype_wchar *this, wchar_t ch, char dflt)
1956 return ctype_wchar__Donarrow(this, ch, dflt);
1959 /* ?do_narrow@?$ctype@_W@std@@MBEPB_WPB_W0DPAD@Z */
1960 /* ?do_narrow@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD@Z */
1961 /* ?do_narrow@?$ctype@G@std@@MBEPBGPBG0DPAD@Z */
1962 /* ?do_narrow@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD@Z */
1963 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow, 20)
1964 #define call_ctype_wchar_do_narrow(this, first, last, dflt, dest) CALL_VTBL_FUNC(this, 48, \
1965 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*), \
1966 (this, first, last, dflt, dest))
1967 const wchar_t* __thiscall ctype_wchar_do_narrow(const ctype_wchar *this,
1968 const wchar_t *first, const wchar_t *last, char dflt, char *dest)
1970 TRACE("(%p %p %p %d %p)\n", this, first, last, dflt, dest);
1971 for(; first<last; first++)
1972 *dest++ = ctype_wchar__Donarrow(this, *first, dflt);
1973 return last;
1976 /* ?_Do_narrow_s@?$ctype@_W@std@@MBEPB_WPB_W0DPADI@Z */
1977 /* ?_Do_narrow_s@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD_K@Z */
1978 /* ?_Do_narrow_s@?$ctype@G@std@@MBEPBGPBG0DPADI@Z */
1979 /* ?_Do_narrow_s@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD_K@Z */
1980 DEFINE_THISCALL_WRAPPER(ctype_wchar__Do_narrow_s, 24)
1981 #define call_ctype_wchar__Do_narrow_s(this, first, last, dflt, dest, size) CALL_VTBL_FUNC(this, 56, \
1982 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*, MSVCP_size_t), \
1983 (this, first, last, dflt, dest, size))
1984 const wchar_t* __thiscall ctype_wchar__Do_narrow_s(const ctype_wchar *this,
1985 const wchar_t *first, const wchar_t *last, char dflt, char *dest, MSVCP_size_t size)
1987 TRACE("(%p %p %p %d %p %lu)\n", this, first, last, dflt, dest, size);
1988 /* This function converts all multi-byte characters to dflt,
1989 * thanks to it result size is known before converting */
1990 if(last-first > size)
1991 ctype_base__Xran();
1992 return ctype_wchar_do_narrow(this, first, last, dflt, dest);
1995 /* ?narrow@?$ctype@_W@std@@QBED_WD@Z */
1996 /* ?narrow@?$ctype@_W@std@@QEBAD_WD@Z */
1997 /* ?narrow@?$ctype@G@std@@QBEDGD@Z */
1998 /* ?narrow@?$ctype@G@std@@QEBADGD@Z */
1999 DEFINE_THISCALL_WRAPPER(ctype_wchar_narrow_ch, 12)
2000 char __thiscall ctype_wchar_narrow_ch(const ctype_wchar *this, wchar_t ch, char dflt)
2002 TRACE("(%p %d %d)\n", this, ch, dflt);
2003 return call_ctype_wchar_do_narrow_ch(this, ch, dflt);
2006 /* ?narrow@?$ctype@_W@std@@QBEPB_WPB_W0DPAD@Z */
2007 /* ?narrow@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD@Z */
2008 /* ?narrow@?$ctype@G@std@@QBEPBGPBG0DPAD@Z */
2009 /* ?narrow@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD@Z */
2010 DEFINE_THISCALL_WRAPPER(ctype_wchar_narrow, 20)
2011 const wchar_t* __thiscall ctype_wchar_narrow(const ctype_wchar *this,
2012 const wchar_t *first, const wchar_t *last, char dflt, char *dest)
2014 TRACE("(%p %p %p %d %p)\n", this, first, last, dflt, dest);
2015 return call_ctype_wchar_do_narrow(this, first, last, dflt, dest);
2018 /* ?_Narrow_s@?$ctype@_W@std@@QBEPB_WPB_W0DPADI@Z */
2019 /* ?_Narrow_s@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD_K@Z */
2020 /* ?_Narrow_s@?$ctype@G@std@@QBEPBGPBG0DPADI@Z */
2021 /* ?_Narrow_s@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD_K@Z */
2022 DEFINE_THISCALL_WRAPPER(ctype_wchar__Narrow_s, 24)
2023 const wchar_t* __thiscall ctype_wchar__Narrow_s(const ctype_wchar *this, const wchar_t *first,
2024 const wchar_t *last, char dflt, char *dest, MSVCP_size_t size)
2026 TRACE("(%p %p %p %d %p %lu)\n", this, first, last, dflt, dest, size);
2027 return call_ctype_wchar__Do_narrow_s(this, first, last, dflt, dest, size);
2030 /* _Mbrtowc */
2031 int __cdecl _Mbrtowc(wchar_t *out, const char *in, MSVCP_size_t len, int *state, const _Cvtvec *cvt)
2033 int i, cp;
2034 CPINFO cp_info;
2035 BOOL is_lead;
2037 TRACE("(%p %p %lu %p %p)\n", out, in, len, state, cvt);
2039 if(!len)
2040 return 0;
2042 if(cvt)
2043 cp = cvt->page;
2044 else
2045 cp = ___lc_codepage_func();
2047 if(!cp) {
2048 if(out)
2049 *out = (unsigned char)*in;
2051 *state = 0;
2052 return *in ? 1 : 0;
2055 if(*state) {
2056 ((char*)state)[1] = *in;
2058 if(!MultiByteToWideChar(cp, MB_ERR_INVALID_CHARS, (char*)state, 2, out, out ? 1 : 0)) {
2059 *state = 0;
2060 *_errno() = EILSEQ;
2061 return -1;
2064 *state = 0;
2065 return 2;
2068 GetCPInfo(cp, &cp_info);
2069 is_lead = FALSE;
2070 for(i=0; i<MAX_LEADBYTES; i+=2) {
2071 if(!cp_info.LeadByte[i+1])
2072 break;
2073 if((unsigned char)*in>=cp_info.LeadByte[i] && (unsigned char)*in<=cp_info.LeadByte[i+1]) {
2074 is_lead = TRUE;
2075 break;
2079 if(is_lead) {
2080 if(len == 1) {
2081 *state = (unsigned char)*in;
2082 return -2;
2085 if(!MultiByteToWideChar(cp, MB_ERR_INVALID_CHARS, in, 2, out, out ? 1 : 0)) {
2086 *_errno() = EILSEQ;
2087 return -1;
2089 return 2;
2092 if(!MultiByteToWideChar(cp, MB_ERR_INVALID_CHARS, in, 1, out, out ? 1 : 0)) {
2093 *_errno() = EILSEQ;
2094 return -1;
2096 return 1;
2099 /* ?_Dowiden@?$ctype@_W@std@@IBE_WD@Z */
2100 /* ?_Dowiden@?$ctype@_W@std@@IEBA_WD@Z */
2101 /* ?_Dowiden@?$ctype@G@std@@IBEGD@Z */
2102 /* ?_Dowiden@?$ctype@G@std@@IEBAGD@Z */
2103 DEFINE_THISCALL_WRAPPER(ctype_wchar__Dowiden, 8)
2104 wchar_t __thiscall ctype_wchar__Dowiden(const ctype_wchar *this, char ch)
2106 wchar_t ret;
2107 int state = 0;
2108 TRACE("(%p %d)\n", this, ch);
2109 return _Mbrtowc(&ret, &ch, 1, &state, &this->cvt)<0 ? WEOF : ret;
2112 /* ?do_widen@?$ctype@_W@std@@MBE_WD@Z */
2113 /* ?do_widen@?$ctype@_W@std@@MEBA_WD@Z */
2114 /* ?do_widen@?$ctype@G@std@@MBEGD@Z */
2115 /* ?do_widen@?$ctype@G@std@@MEBAGD@Z */
2116 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_widen_ch, 8)
2117 #define call_ctype_wchar_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 40, \
2118 wchar_t, (const ctype_wchar*, char), (this, ch))
2119 wchar_t __thiscall ctype_wchar_do_widen_ch(const ctype_wchar *this, char ch)
2121 return ctype_wchar__Dowiden(this, ch);
2124 /* ?do_widen@?$ctype@_W@std@@MBEPBDPBD0PA_W@Z */
2125 /* ?do_widen@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W@Z */
2126 /* ?do_widen@?$ctype@G@std@@MBEPBDPBD0PAG@Z */
2127 /* ?do_widen@?$ctype@G@std@@MEBAPEBDPEBD0PEAG@Z */
2128 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_widen, 16)
2129 #define call_ctype_wchar_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 36, \
2130 const char*, (const ctype_wchar*, const char*, const char*, wchar_t*), \
2131 (this, first, last, dest))
2132 const char* __thiscall ctype_wchar_do_widen(const ctype_wchar *this,
2133 const char *first, const char *last, wchar_t *dest)
2135 TRACE("(%p %p %p %p)\n", this, first, last, dest);
2136 for(; first<last; first++)
2137 *dest++ = ctype_wchar__Dowiden(this, *first);
2138 return last;
2141 /* ?_Do_widen_s@?$ctype@_W@std@@MBEPBDPBD0PA_WI@Z */
2142 /* ?_Do_widen_s@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W_K@Z */
2143 /* ?_Do_widen_s@?$ctype@G@std@@MBEPBDPBD0PAGI@Z */
2144 /* ?_Do_widen_s@?$ctype@G@std@@MEBAPEBDPEBD0PEAG_K@Z */
2145 DEFINE_THISCALL_WRAPPER(ctype_wchar__Do_widen_s, 20)
2146 #define call_ctype_wchar__Do_widen_s(this, first, last, dest, size) CALL_VTBL_FUNC(this, 44, \
2147 const char*, (const ctype_wchar*, const char*, const char*, wchar_t*, MSVCP_size_t), \
2148 (this, first, last, dest, size))
2149 const char* __thiscall ctype_wchar__Do_widen_s(const ctype_wchar *this,
2150 const char *first, const char *last, wchar_t *dest, MSVCP_size_t size)
2152 TRACE("(%p %p %p %p %lu)\n", this, first, last, dest, size);
2153 /* This function converts all multi-byte characters to WEOF,
2154 * thanks to it result size is known before converting */
2155 if(size < last-first)
2156 ctype_base__Xran();
2157 return ctype_wchar_do_widen(this, first, last, dest);
2160 /* ?widen@?$ctype@_W@std@@QBE_WD@Z */
2161 /* ?widen@?$ctype@_W@std@@QEBA_WD@Z */
2162 /* ?widen@?$ctype@G@std@@QBEGD@Z */
2163 /* ?widen@?$ctype@G@std@@QEBAGD@Z */
2164 DEFINE_THISCALL_WRAPPER(ctype_wchar_widen_ch, 8)
2165 wchar_t __thiscall ctype_wchar_widen_ch(const ctype_wchar *this, char ch)
2167 TRACE("(%p %d)\n", this, ch);
2168 return call_ctype_wchar_do_widen_ch(this, ch);
2171 /* ?widen@?$ctype@_W@std@@QBEPBDPBD0PA_W@Z */
2172 /* ?widen@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W@Z */
2173 /* ?widen@?$ctype@G@std@@QBEPBDPBD0PAG@Z */
2174 /* ?widen@?$ctype@G@std@@QEBAPEBDPEBD0PEAG@Z */
2175 DEFINE_THISCALL_WRAPPER(ctype_wchar_widen, 16)
2176 const char* __thiscall ctype_wchar_widen(const ctype_wchar *this,
2177 const char *first, const char *last, wchar_t *dest)
2179 TRACE("(%p %p %p %p)\n", this, first, last, dest);
2180 return call_ctype_wchar_do_widen(this, first, last, dest);
2183 /* ?_Widen_s@?$ctype@_W@std@@QBEPBDPBD0PA_WI@Z */
2184 /* ?_Widen_s@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W_K@Z */
2185 /* ?_Widen_s@?$ctype@G@std@@QBEPBDPBD0PAGI@Z */
2186 /* ?_Widen_s@?$ctype@G@std@@QEBAPEBDPEBD0PEAG_K@Z */
2187 DEFINE_THISCALL_WRAPPER(ctype_wchar__Widen_s, 20)
2188 const char* __thiscall ctype_wchar__Widen_s(const ctype_wchar *this,
2189 const char *first, const char *last, wchar_t *dest, MSVCP_size_t size)
2191 TRACE("(%p %p %p %p %lu)\n", this, first, last, dest, size);
2192 return call_ctype_wchar__Do_widen_s(this, first, last, dest, size);
2195 /* ?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2196 /* ?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2197 MSVCP_size_t __cdecl ctype_wchar__Getcat(const locale_facet **facet, const locale *loc)
2199 TRACE("(%p %p)\n", facet, loc);
2201 if(facet && !*facet) {
2202 _Locinfo locinfo;
2204 *facet = MSVCRT_operator_new(sizeof(ctype_wchar));
2205 if(!*facet) {
2206 ERR("Out of memory\n");
2207 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
2208 return 0;
2211 _Locinfo_ctor_cstr(&locinfo, MSVCP_basic_string_char_c_str(&loc->ptr->name));
2212 ctype_wchar_ctor_locinfo((ctype_wchar*)*facet, &locinfo, 0);
2213 _Locinfo_dtor(&locinfo);
2216 return LC_CTYPE;
2219 /* ?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2220 /* ?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2221 MSVCP_size_t __cdecl ctype_short__Getcat(const locale_facet **facet, const locale *loc)
2223 if(facet && !*facet) {
2224 ctype_wchar__Getcat(facet, loc);
2225 (*(locale_facet**)facet)->vtable = &MSVCP_ctype_short_vtable;
2228 return LC_CTYPE;
2231 /* _Towlower */
2232 wchar_t __cdecl _Towlower(wchar_t ch, const _Ctypevec *ctype)
2234 TRACE("(%d %p)\n", ch, ctype);
2235 return tolowerW(ch);
2238 /* ?do_tolower@?$ctype@_W@std@@MBE_W_W@Z */
2239 /* ?do_tolower@?$ctype@_W@std@@MEBA_W_W@Z */
2240 /* ?do_tolower@?$ctype@G@std@@MBEGG@Z */
2241 /* ?do_tolower@?$ctype@G@std@@MEBAGG@Z */
2242 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_tolower_ch, 8)
2243 #define call_ctype_wchar_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
2244 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2245 wchar_t __thiscall ctype_wchar_do_tolower_ch(const ctype_wchar *this, wchar_t ch)
2247 return _Towlower(ch, &this->ctype);
2250 /* ?do_tolower@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */
2251 /* ?do_tolower@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z */
2252 /* ?do_tolower@?$ctype@G@std@@MBEPBGPAGPBG@Z */
2253 /* ?do_tolower@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */
2254 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_tolower, 12)
2255 #define call_ctype_wchar_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 20, \
2256 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2257 (this, first, last))
2258 const wchar_t* __thiscall ctype_wchar_do_tolower(const ctype_wchar *this,
2259 wchar_t *first, const wchar_t *last)
2261 TRACE("(%p %p %p)\n", this, first, last);
2262 for(; first<last; first++)
2263 *first = _Towlower(*first, &this->ctype);
2264 return last;
2267 /* ?tolower@?$ctype@_W@std@@QBE_W_W@Z */
2268 /* ?tolower@?$ctype@_W@std@@QEBA_W_W@Z */
2269 /* ?tolower@?$ctype@G@std@@QBEGG@Z */
2270 /* ?tolower@?$ctype@G@std@@QEBAGG@Z */
2271 DEFINE_THISCALL_WRAPPER(ctype_wchar_tolower_ch, 8)
2272 wchar_t __thiscall ctype_wchar_tolower_ch(const ctype_wchar *this, wchar_t ch)
2274 TRACE("(%p %d)\n", this, ch);
2275 return call_ctype_wchar_do_tolower_ch(this, ch);
2278 /* ?tolower@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */
2279 /* ?tolower@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z */
2280 /* ?tolower@?$ctype@G@std@@QBEPBGPAGPBG@Z */
2281 /* ?tolower@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z */
2282 DEFINE_THISCALL_WRAPPER(ctype_wchar_tolower, 12)
2283 const wchar_t* __thiscall ctype_wchar_tolower(const ctype_wchar *this,
2284 wchar_t *first, const wchar_t *last)
2286 TRACE("(%p %p %p)\n", this, first, last);
2287 return call_ctype_wchar_do_tolower(this, first, last);
2290 /* _Towupper */
2291 wchar_t __cdecl _Towupper(wchar_t ch, const _Ctypevec *ctype)
2293 TRACE("(%d %p)\n", ch, ctype);
2294 return toupperW(ch);
2297 /* ?do_toupper@?$ctype@_W@std@@MBE_W_W@Z */
2298 /* ?do_toupper@?$ctype@_W@std@@MEBA_W_W@Z */
2299 /* ?do_toupper@?$ctype@G@std@@MBEGG@Z */
2300 /* ?do_toupper@?$ctype@G@std@@MEBAGG@Z */
2301 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper_ch, 8)
2302 #define call_ctype_wchar_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 32, \
2303 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2304 wchar_t __thiscall ctype_wchar_do_toupper_ch(const ctype_wchar *this, wchar_t ch)
2306 return _Towupper(ch, &this->ctype);
2309 /* ?do_toupper@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */
2310 /* ?do_toupper@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z */
2311 /* ?do_toupper@?$ctype@G@std@@MBEPBGPAGPBG@Z */
2312 /* ?do_toupper@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */
2313 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper, 12)
2314 #define call_ctype_wchar_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 28, \
2315 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2316 (this, first, last))
2317 const wchar_t* __thiscall ctype_wchar_do_toupper(const ctype_wchar *this,
2318 wchar_t *first, const wchar_t *last)
2320 TRACE("(%p %p %p)\n", this, first, last);
2321 for(; first<last; first++)
2322 *first = _Towupper(*first, &this->ctype);
2323 return last;
2326 /* ?toupper@?$ctype@_W@std@@QBE_W_W@Z */
2327 /* ?toupper@?$ctype@_W@std@@QEBA_W_W@Z */
2328 /* ?toupper@?$ctype@G@std@@QBEGG@Z */
2329 /* ?toupper@?$ctype@G@std@@QEBAGG@Z */
2330 DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper_ch, 8)
2331 wchar_t __thiscall ctype_wchar_toupper_ch(const ctype_wchar *this, wchar_t ch)
2333 TRACE("(%p %d)\n", this, ch);
2334 return call_ctype_wchar_do_toupper_ch(this, ch);
2337 /* ?toupper@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */
2338 /* ?toupper@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z */
2339 /* ?toupper@?$ctype@G@std@@QBEPBGPAGPBG@Z */
2340 /* ?toupper@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z */
2341 DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper, 12)
2342 const wchar_t* __thiscall ctype_wchar_toupper(const ctype_wchar *this,
2343 wchar_t *first, const wchar_t *last)
2345 TRACE("(%p %p %p)\n", this, first, last);
2346 return call_ctype_wchar_do_toupper(this, first, last);
2349 /* _Getwctypes */
2350 const wchar_t* __cdecl _Getwctypes(const wchar_t *first, const wchar_t *last,
2351 short *mask, const _Ctypevec *ctype)
2353 TRACE("(%p %p %p %p)\n", first, last, mask, ctype);
2354 GetStringTypeW(CT_CTYPE1, first, last-first, (WORD*)mask);
2355 return last;
2358 /* _Getwctype */
2359 short __cdecl _Getwctype(wchar_t ch, const _Ctypevec *ctype)
2361 short mask = 0;
2362 _Getwctypes(&ch, &ch+1, &mask, ctype);
2363 return mask;
2366 /* ?do_is@?$ctype@_W@std@@MBE_NF_W@Z */
2367 /* ?do_is@?$ctype@_W@std@@MEBA_NF_W@Z */
2368 /* ?do_is@?$ctype@G@std@@MBE_NFG@Z */
2369 /* ?do_is@?$ctype@G@std@@MEBA_NFG@Z */
2370 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is_ch, 12)
2371 #define call_ctype_wchar_do_is_ch(this, mask, ch) CALL_VTBL_FUNC(this, 8, \
2372 MSVCP_bool, (const ctype_wchar*, short, wchar_t), (this, mask, ch))
2373 MSVCP_bool __thiscall ctype_wchar_do_is_ch(const ctype_wchar *this, short mask, wchar_t ch)
2375 TRACE("(%p %x %d)\n", this, mask, ch);
2376 return (_Getwctype(ch, &this->ctype) & mask) != 0;
2379 /* ?do_is@?$ctype@_W@std@@MBEPB_WPB_W0PAF@Z */
2380 /* ?do_is@?$ctype@_W@std@@MEBAPEB_WPEB_W0PEAF@Z */
2381 /* ?do_is@?$ctype@G@std@@MBEPBGPBG0PAF@Z */
2382 /* ?do_is@?$ctype@G@std@@MEBAPEBGPEBG0PEAF@Z */
2383 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is, 16)
2384 #define call_ctype_wchar_do_is(this, first, last, dest) CALL_VTBL_FUNC(this, 4, \
2385 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, short*), \
2386 (this, first, last, dest))
2387 const wchar_t* __thiscall ctype_wchar_do_is(const ctype_wchar *this,
2388 const wchar_t *first, const wchar_t *last, short *dest)
2390 TRACE("(%p %p %p %p)\n", this, first, last, dest);
2391 return _Getwctypes(first, last, dest, &this->ctype);
2394 /* ?is@?$ctype@_W@std@@QBE_NF_W@Z */
2395 /* ?is@?$ctype@_W@std@@QEBA_NF_W@Z */
2396 /* ?is@?$ctype@G@std@@QBE_NFG@Z */
2397 /* ?is@?$ctype@G@std@@QEBA_NFG@Z */
2398 DEFINE_THISCALL_WRAPPER(ctype_wchar_is_ch, 12)
2399 MSVCP_bool __thiscall ctype_wchar_is_ch(const ctype_wchar *this, short mask, wchar_t ch)
2401 TRACE("(%p %x %d)\n", this, mask, ch);
2402 return call_ctype_wchar_do_is_ch(this, mask, ch);
2405 /* ?is@?$ctype@_W@std@@QBEPB_WPB_W0PAF@Z */
2406 /* ?is@?$ctype@_W@std@@QEBAPEB_WPEB_W0PEAF@Z */
2407 /* ?is@?$ctype@G@std@@QBEPBGPBG0PAF@Z */
2408 /* ?is@?$ctype@G@std@@QEBAPEBGPEBG0PEAF@Z */
2409 DEFINE_THISCALL_WRAPPER(ctype_wchar_is, 16)
2410 const wchar_t* __thiscall ctype_wchar_is(const ctype_wchar *this,
2411 const wchar_t *first, const wchar_t *last, short *dest)
2413 TRACE("(%p %p %p %p)\n", this, first, last, dest);
2414 return call_ctype_wchar_do_is(this, first, last, dest);
2417 /* ?do_scan_is@?$ctype@_W@std@@MBEPB_WFPB_W0@Z */
2418 /* ?do_scan_is@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z */
2419 /* ?do_scan_is@?$ctype@G@std@@MBEPBGFPBG0@Z */
2420 /* ?do_scan_is@?$ctype@G@std@@MEBAPEBGFPEBG0@Z */
2421 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_scan_is, 16)
2422 #define call_ctype_wchar_do_scan_is(this, mask, first, last) CALL_VTBL_FUNC(this, 12, \
2423 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
2424 (this, mask, first, last))
2425 const wchar_t* __thiscall ctype_wchar_do_scan_is(const ctype_wchar *this,
2426 short mask, const wchar_t *first, const wchar_t *last)
2428 TRACE("(%p %d %p %p)\n", this, mask, first, last);
2429 for(; first<last; first++)
2430 if(!ctype_wchar_is_ch(this, mask, *first))
2431 break;
2432 return first;
2435 /* ?scan_is@?$ctype@_W@std@@QBEPB_WFPB_W0@Z */
2436 /* ?scan_is@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z */
2437 /* ?scan_is@?$ctype@G@std@@QBEPBGFPBG0@Z */
2438 /* ?scan_is@?$ctype@G@std@@QEBAPEBGFPEBG0@Z */
2439 DEFINE_THISCALL_WRAPPER(ctype_wchar_scan_is, 16)
2440 const wchar_t* __thiscall ctype_wchar_scan_is(const ctype_wchar *this,
2441 short mask, const wchar_t *first, const wchar_t *last)
2443 TRACE("(%p %x %p %p)\n", this, mask, first, last);
2444 return call_ctype_wchar_do_scan_is(this, mask, first, last);
2447 /* ?do_scan_not@?$ctype@_W@std@@MBEPB_WFPB_W0@Z */
2448 /* ?do_scan_not@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z */
2449 /* ?do_scan_not@?$ctype@G@std@@MBEPBGFPBG0@Z */
2450 /* ?do_scan_not@?$ctype@G@std@@MEBAPEBGFPEBG0@Z */
2451 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_scan_not, 16)
2452 #define call_ctype_wchar_do_scan_not(this, mask, first, last) CALL_VTBL_FUNC(this, 16, \
2453 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
2454 (this, mask, first, last))
2455 const wchar_t* __thiscall ctype_wchar_do_scan_not(const ctype_wchar *this,
2456 short mask, const wchar_t *first, const wchar_t *last)
2458 TRACE("(%p %x %p %p)\n", this, mask, first, last);
2459 for(; first<last; first++)
2460 if(ctype_wchar_is_ch(this, mask, *first))
2461 break;
2462 return first;
2465 /* ?scan_not@?$ctype@_W@std@@QBEPB_WFPB_W0@Z */
2466 /* ?scan_not@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z */
2467 /* ?scan_not@?$ctype@G@std@@QBEPBGFPBG0@Z */
2468 /* ?scan_not@?$ctype@G@std@@QEBAPEBGFPEBG0@Z */
2469 DEFINE_THISCALL_WRAPPER(ctype_wchar_scan_not, 16)
2470 const wchar_t* __thiscall ctype_wchar_scan_not(const ctype_wchar *this,
2471 short mask, const wchar_t *first, const wchar_t *last)
2473 TRACE("(%p %x %p %p)\n", this, mask, first, last);
2474 return call_ctype_wchar_do_scan_not(this, mask, first, last);
2477 /* ??_7codecvt_base@std@@6B@ */
2478 extern const vtable_ptr MSVCP_codecvt_base_vtable;
2480 /* ??0codecvt_base@std@@QAE@I@Z */
2481 /* ??0codecvt_base@std@@QEAA@_K@Z */
2482 DEFINE_THISCALL_WRAPPER(codecvt_base_ctor_refs, 8)
2483 codecvt_base* __thiscall codecvt_base_ctor_refs(codecvt_base *this, MSVCP_size_t refs)
2485 TRACE("(%p %lu)\n", this, refs);
2486 locale_facet_ctor_refs(&this->facet, refs);
2487 this->facet.vtable = &MSVCP_codecvt_base_vtable;
2488 return this;
2491 /* ??_Fcodecvt_base@std@@QAEXXZ */
2492 /* ??_Fcodecvt_base@std@@QEAAXXZ */
2493 DEFINE_THISCALL_WRAPPER(codecvt_base_ctor, 4)
2494 codecvt_base* __thiscall codecvt_base_ctor(codecvt_base *this)
2496 return codecvt_base_ctor_refs(this, 0);
2499 /* ??1codecvt_base@std@@UAE@XZ */
2500 /* ??1codecvt_base@std@@UEAA@XZ */
2501 DEFINE_THISCALL_WRAPPER(codecvt_base_dtor, 4)
2502 void __thiscall codecvt_base_dtor(codecvt_base *this)
2504 TRACE("(%p)\n", this);
2505 locale_facet_dtor(&this->facet);
2508 DEFINE_THISCALL_WRAPPER(MSVCP_codecvt_base_vector_dtor, 8)
2509 codecvt_base* __thiscall MSVCP_codecvt_base_vector_dtor(codecvt_base *this, unsigned int flags)
2511 TRACE("(%p %x)\n", this, flags);
2512 if(flags & 2) {
2513 /* we have an array, with the number of elements stored before the first object */
2514 int i, *ptr = (int *)this-1;
2516 for(i=*ptr-1; i>=0; i--)
2517 codecvt_base_dtor(this+i);
2518 MSVCRT_operator_delete(ptr);
2519 } else {
2520 codecvt_base_dtor(this);
2521 if(flags & 1)
2522 MSVCRT_operator_delete(this);
2525 return this;
2528 /* ?do_always_noconv@codecvt_base@std@@MBE_NXZ */
2529 /* ?do_always_noconv@codecvt_base@std@@MEBA_NXZ */
2530 #define call_codecvt_base_do_always_noconv(this) CALL_VTBL_FUNC(this, 4, \
2531 MSVCP_bool, (const codecvt_base*), (this))
2532 DEFINE_THISCALL_WRAPPER(codecvt_base_do_always_noconv, 4)
2533 MSVCP_bool __thiscall codecvt_base_do_always_noconv(const codecvt_base *this)
2535 TRACE("(%p)\n", this);
2536 return TRUE;
2539 /* ?always_noconv@codecvt_base@std@@QBE_NXZ */
2540 /* ?always_noconv@codecvt_base@std@@QEBA_NXZ */
2541 DEFINE_THISCALL_WRAPPER(codecvt_base_always_noconv, 4)
2542 MSVCP_bool __thiscall codecvt_base_always_noconv(const codecvt_base *this)
2544 TRACE("(%p)\n", this);
2545 return call_codecvt_base_do_always_noconv(this);
2548 /* ?do_max_length@codecvt_base@std@@MBEHXZ */
2549 /* ?do_max_length@codecvt_base@std@@MEBAHXZ */
2550 #define call_codecvt_base_do_max_length(this) CALL_VTBL_FUNC(this, 8, \
2551 int, (const codecvt_base*), (this))
2552 DEFINE_THISCALL_WRAPPER(codecvt_base_do_max_length, 4)
2553 int __thiscall codecvt_base_do_max_length(const codecvt_base *this)
2555 TRACE("(%p)\n", this);
2556 return 1;
2559 /* ?max_length@codecvt_base@std@@QBEHXZ */
2560 /* ?max_length@codecvt_base@std@@QEBAHXZ */
2561 DEFINE_THISCALL_WRAPPER(codecvt_base_max_length, 4)
2562 int __thiscall codecvt_base_max_length(const codecvt_base *this)
2564 TRACE("(%p)\n", this);
2565 return call_codecvt_base_do_max_length(this);
2568 /* ?do_encoding@codecvt_base@std@@MBEHXZ */
2569 /* ?do_encoding@codecvt_base@std@@MEBAHXZ */
2570 #define call_codecvt_base_do_encoding(this) CALL_VTBL_FUNC(this, 12, \
2571 int, (const codecvt_base*), (this))
2572 DEFINE_THISCALL_WRAPPER(codecvt_base_do_encoding, 4)
2573 int __thiscall codecvt_base_do_encoding(const codecvt_base *this)
2575 TRACE("(%p)\n", this);
2576 return 1;
2579 /* ?encoding@codecvt_base@std@@QBEHXZ */
2580 /* ?encoding@codecvt_base@std@@QEBAHXZ */
2581 DEFINE_THISCALL_WRAPPER(codecvt_base_encoding, 4)
2582 int __thiscall codecvt_base_encoding(const codecvt_base *this)
2584 TRACE("(%p)\n", this);
2585 return call_codecvt_base_do_encoding(this);
2588 /* ?id@?$codecvt@DDH@std@@2V0locale@2@A */
2589 locale_id codecvt_char_id = {0};
2591 /* ??_7?$codecvt@DDH@std@@6B@ */
2592 extern const vtable_ptr MSVCP_codecvt_char_vtable;
2594 /* ?_Init@?$codecvt@DDH@std@@IAEXABV_Locinfo@2@@Z */
2595 /* ?_Init@?$codecvt@DDH@std@@IEAAXAEBV_Locinfo@2@@Z */
2596 DEFINE_THISCALL_WRAPPER(codecvt_char__Init, 8)
2597 void __thiscall codecvt_char__Init(codecvt_char *this, const _Locinfo *locinfo)
2599 TRACE("(%p %p)\n", this, locinfo);
2602 /* ??0?$codecvt@DDH@std@@QAE@ABV_Locinfo@1@I@Z */
2603 /* ??0?$codecvt@DDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
2604 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor_locinfo, 12)
2605 codecvt_char* __thiscall codecvt_char_ctor_locinfo(codecvt_char *this, const _Locinfo *locinfo, MSVCP_size_t refs)
2607 TRACE("(%p %p %lu)\n", this, locinfo, refs);
2608 codecvt_base_ctor_refs(&this->base, refs);
2609 this->base.facet.vtable = &MSVCP_codecvt_char_vtable;
2610 return this;
2613 /* ??0?$codecvt@DDH@std@@QAE@I@Z */
2614 /* ??0?$codecvt@DDH@std@@QEAA@_K@Z */
2615 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor_refs, 8)
2616 codecvt_char* __thiscall codecvt_char_ctor_refs(codecvt_char *this, MSVCP_size_t refs)
2618 return codecvt_char_ctor_locinfo(this, NULL, refs);
2621 /* ??_F?$codecvt@DDH@std@@QAEXXZ */
2622 /* ??_F?$codecvt@DDH@std@@QEAAXXZ */
2623 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor, 4)
2624 codecvt_char* __thiscall codecvt_char_ctor(codecvt_char *this)
2626 return codecvt_char_ctor_locinfo(this, NULL, 0);
2629 /* ??1?$codecvt@DDH@std@@MAE@XZ */
2630 /* ??1?$codecvt@DDH@std@@MEAA@XZ */
2631 DEFINE_THISCALL_WRAPPER(codecvt_char_dtor, 4)
2632 void __thiscall codecvt_char_dtor(codecvt_char *this)
2634 TRACE("(%p)\n", this);
2635 codecvt_base_dtor(&this->base);
2638 DEFINE_THISCALL_WRAPPER(MSVCP_codecvt_char_vector_dtor, 8)
2639 codecvt_char* __thiscall MSVCP_codecvt_char_vector_dtor(codecvt_char *this, unsigned int flags)
2641 TRACE("(%p %x)\n", this, flags);
2642 if(flags & 2) {
2643 /* we have an array, with the number of elements stored before the first object */
2644 int i, *ptr = (int *)this-1;
2646 for(i=*ptr-1; i>=0; i--)
2647 codecvt_char_dtor(this+i);
2648 MSVCRT_operator_delete(ptr);
2649 } else {
2650 codecvt_char_dtor(this);
2651 if(flags & 1)
2652 MSVCRT_operator_delete(this);
2655 return this;
2658 /* ?_Getcat@?$codecvt@DDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2659 /* ?_Getcat@?$codecvt@DDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2660 MSVCP_size_t __cdecl codecvt_char__Getcat(const locale_facet **facet, const locale *loc)
2662 TRACE("(%p %p)\n", facet, loc);
2664 if(facet && !*facet) {
2665 *facet = MSVCRT_operator_new(sizeof(codecvt_char));
2666 if(!*facet) {
2667 ERR("Out of memory\n");
2668 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
2669 return 0;
2671 codecvt_char_ctor((codecvt_char*)*facet);
2674 return LC_CTYPE;
2677 codecvt_char* codecvt_char_use_facet(locale *loc)
2679 static codecvt_char *obj = NULL;
2681 _Lockit lock;
2682 const locale_facet *fac;
2684 _Lockit_ctor_locktype(&lock, _LOCK_LOCALE);
2685 fac = locale__Getfacet(loc, codecvt_char_id.id);
2686 if(fac) {
2687 _Lockit_dtor(&lock);
2688 return (codecvt_char*)fac;
2691 if(obj)
2692 return obj;
2694 codecvt_char__Getcat(&fac, loc);
2695 obj = (codecvt_char*)fac;
2696 locale_facet__Incref(&obj->base.facet);
2697 locale_facet_register(&obj->base.facet);
2698 _Lockit_dtor(&lock);
2700 return obj;
2703 /* ?do_in@?$codecvt@DDH@std@@MBEHAAHPBD1AAPBDPAD3AAPAD@Z */
2704 /* ?do_in@?$codecvt@DDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
2705 #define call_codecvt_char_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
2706 CALL_VTBL_FUNC(this, 16, int, \
2707 (const codecvt_char*, int*, const char*, const char*, const char**, char*, char*, char**), \
2708 (this, state, from, from_end, from_next, to, to_end, to_next))
2709 DEFINE_THISCALL_WRAPPER(codecvt_char_do_in, 32)
2710 int __thiscall codecvt_char_do_in(const codecvt_char *this, int *state,
2711 const char *from, const char *from_end, const char **from_next,
2712 char *to, char *to_end, char **to_next)
2714 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state, from, from_end,
2715 from_next, to, to_end, to_next);
2716 *from_next = from;
2717 *to_next = to;
2718 return CODECVT_noconv;
2721 /* ?in@?$codecvt@DDH@std@@QBEHAAHPBD1AAPBDPAD3AAPAD@Z */
2722 /* ?in@?$codecvt@DDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
2723 DEFINE_THISCALL_WRAPPER(codecvt_char_in, 32)
2724 int __thiscall codecvt_char_in(const codecvt_char *this, int *state,
2725 const char *from, const char *from_end, const char **from_next,
2726 char *to, char *to_end, char **to_next)
2728 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state, from, from_end,
2729 from_next, to, to_end, to_next);
2730 return call_codecvt_char_do_in(this, state, from, from_end, from_next,
2731 to, to_end, to_next);
2734 /* ?do_out@?$codecvt@DDH@std@@MBEHAAHPBD1AAPBDPAD3AAPAD@Z */
2735 /* ?do_out@?$codecvt@DDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
2736 #define call_codecvt_char_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
2737 CALL_VTBL_FUNC(this, 20, int, \
2738 (const codecvt_char*, int*, const char*, const char*, const char**, char*, char*, char**), \
2739 (this, state, from, from_end, from_next, to, to_end, to_next))
2740 DEFINE_THISCALL_WRAPPER(codecvt_char_do_out, 32)
2741 int __thiscall codecvt_char_do_out(const codecvt_char *this, int *state,
2742 const char *from, const char *from_end, const char **from_next,
2743 char *to, char *to_end, char **to_next)
2745 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state, from,
2746 from_end, from_next, to, to_end, to_next);
2747 *from_next = from;
2748 *to_next = to;
2749 return CODECVT_noconv;
2752 /* ?out@?$codecvt@DDH@std@@QBEHAAHPBD1AAPBDPAD3AAPAD@Z */
2753 /* ?out@?$codecvt@DDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
2754 DEFINE_THISCALL_WRAPPER(codecvt_char_out, 32)
2755 int __thiscall codecvt_char_out(const codecvt_char *this, int *state,
2756 const char *from, const char *from_end, const char **from_next,
2757 char *to, char *to_end, char **to_next)
2759 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state, from, from_end,
2760 from_next, to, to_end, to_next);
2761 return call_codecvt_char_do_out(this, state, from, from_end, from_next,
2762 to, to_end, to_next);
2765 /* ?do_unshift@?$codecvt@DDH@std@@MBEHAAHPAD1AAPAD@Z */
2766 /* ?do_unshift@?$codecvt@DDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
2767 #define call_codecvt_char_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 24, \
2768 int, (const codecvt_char*, int*, char*, char*, char**), (this, state, to, to_end, to_next))
2769 DEFINE_THISCALL_WRAPPER(codecvt_char_do_unshift, 20)
2770 int __thiscall codecvt_char_do_unshift(const codecvt_char *this,
2771 int *state, char *to, char *to_end, char **to_next)
2773 TRACE("(%p %p %p %p %p)\n", this, state, to, to_end, to_next);
2774 *to_next = to;
2775 return CODECVT_noconv;
2778 /* ?unshift@?$codecvt@DDH@std@@QBEHAAHPAD1AAPAD@Z */
2779 /* ?unshift@?$codecvt@DDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
2780 DEFINE_THISCALL_WRAPPER(codecvt_char_unshift, 20)
2781 int __thiscall codecvt_char_unshift(const codecvt_char *this,
2782 int *state, char *to, char *to_end, char **to_next)
2784 TRACE("(%p %p %p %p %p)\n", this, state, to, to_end, to_next);
2785 return call_codecvt_char_do_unshift(this, state, to, to_end, to_next);
2788 /* ?do_length@?$codecvt@DDH@std@@MBEHABHPBD1I@Z */
2789 /* ?do_length@?$codecvt@DDH@std@@MEBAHAEBHPEBD1_K@Z */
2790 #define call_codecvt_char_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 28, \
2791 int, (const codecvt_char*, const int*, const char*, const char*, MSVCP_size_t), \
2792 (this, state, from, from_end, max))
2793 DEFINE_THISCALL_WRAPPER(codecvt_char_do_length, 20)
2794 int __thiscall codecvt_char_do_length(const codecvt_char *this, const int *state,
2795 const char *from, const char *from_end, MSVCP_size_t max)
2797 TRACE("(%p %p %p %p %lu)\n", this, state, from, from_end, max);
2798 return (from_end-from > max ? max : from_end-from);
2801 /* ?length@?$codecvt@DDH@std@@QBEHABHPBD1I@Z */
2802 /* ?length@?$codecvt@DDH@std@@QEBAHAEBHPEBD1_K@Z */
2803 DEFINE_THISCALL_WRAPPER(codecvt_char_length, 20)
2804 int __thiscall codecvt_char_length(const codecvt_char *this, const int *state,
2805 const char *from, const char *from_end, MSVCP_size_t max)
2807 TRACE("(%p %p %p %p %lu)\n", this, state, from, from_end, max);
2808 return call_codecvt_char_do_length(this, state, from, from_end, max);
2811 /* ?id@?$numpunct@D@std@@2V0locale@2@A */
2812 locale_id numpunct_char_id = {0};
2814 /* ??_7?$numpunct@D@std@@6B@ */
2815 extern const vtable_ptr MSVCP_numpunct_char_vtable;
2817 /* ?_Init@?$numpunct@D@std@@IAEXABV_Locinfo@2@_N@Z */
2818 /* ?_Init@?$numpunct@D@std@@IEAAXAEBV_Locinfo@2@_N@Z */
2819 DEFINE_THISCALL_WRAPPER(numpunct_char__Init, 12)
2820 void __thiscall numpunct_char__Init(numpunct_char *this, _Locinfo *locinfo, MSVCP_bool isdef)
2822 int len;
2824 TRACE("(%p %p %d)\n", this, locinfo, isdef);
2826 len = strlen(_Locinfo__Getfalse(locinfo))+1;
2827 this->false_name = MSVCRT_operator_new(len);
2828 if(this->false_name)
2829 memcpy((char*)this->false_name, _Locinfo__Getfalse(locinfo), len);
2831 len = strlen(_Locinfo__Gettrue(locinfo))+1;
2832 this->true_name = MSVCRT_operator_new(len);
2833 if(this->true_name)
2834 memcpy((char*)this->true_name, _Locinfo__Gettrue(locinfo), len);
2836 if(isdef) {
2837 this->grouping = MSVCRT_operator_new(1);
2838 if(this->grouping)
2839 *(char*)this->grouping = 0;
2841 this->dp = '.';
2842 this->sep = ',';
2843 } else {
2844 const struct lconv *lc = _Locinfo__Getlconv(locinfo);
2846 len = strlen(lc->grouping)+1;
2847 this->grouping = MSVCRT_operator_new(len);
2848 if(this->grouping)
2849 memcpy((char*)this->grouping, lc->grouping, len);
2851 this->dp = lc->decimal_point[0];
2852 this->sep = lc->thousands_sep[0];
2855 if(!this->false_name || !this->true_name || !this->grouping) {
2856 MSVCRT_operator_delete((char*)this->grouping);
2857 MSVCRT_operator_delete((char*)this->false_name);
2858 MSVCRT_operator_delete((char*)this->true_name);
2860 ERR("Out of memory\n");
2861 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
2865 /* ?_Tidy@?$numpunct@D@std@@AAEXXZ */
2866 /* ?_Tidy@?$numpunct@D@std@@AEAAXXZ */
2867 DEFINE_THISCALL_WRAPPER(numpunct_char__Tidy, 4)
2868 void __thiscall numpunct_char__Tidy(numpunct_char *this)
2870 TRACE("(%p)\n", this);
2872 MSVCRT_operator_delete((char*)this->grouping);
2873 MSVCRT_operator_delete((char*)this->false_name);
2874 MSVCRT_operator_delete((char*)this->true_name);
2877 /* ??0?$numpunct@D@std@@QAE@ABV_Locinfo@1@I_N@Z */
2878 /* ??0?$numpunct@D@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
2879 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_locinfo, 16)
2880 numpunct_char* __thiscall numpunct_char_ctor_locinfo(numpunct_char *this,
2881 _Locinfo *locinfo, MSVCP_size_t refs, MSVCP_bool usedef)
2883 TRACE("(%p %p %lu %d)\n", this, locinfo, refs, usedef);
2884 locale_facet_ctor_refs(&this->facet, refs);
2885 this->facet.vtable = &MSVCP_numpunct_char_vtable;
2886 numpunct_char__Init(this, locinfo, usedef);
2887 return this;
2890 /* ??0?$numpunct@D@std@@IAE@PBDI_N@Z */
2891 /* ??0?$numpunct@D@std@@IEAA@PEBD_K_N@Z */
2892 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_name, 16)
2893 numpunct_char* __thiscall numpunct_char_ctor_name(numpunct_char *this,
2894 const char *name, MSVCP_size_t refs, MSVCP_bool usedef)
2896 _Locinfo locinfo;
2898 TRACE("(%p %s %lu %d)\n", this, debugstr_a(name), refs, usedef);
2899 locale_facet_ctor_refs(&this->facet, refs);
2900 this->facet.vtable = &MSVCP_numpunct_char_vtable;
2902 _Locinfo_ctor_cstr(&locinfo, name);
2903 numpunct_char__Init(this, &locinfo, usedef);
2904 _Locinfo_dtor(&locinfo);
2905 return this;
2908 /* ??0?$numpunct@D@std@@QAE@I@Z */
2909 /* ??0?$numpunct@D@std@@QEAA@_K@Z */
2910 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_refs, 8)
2911 numpunct_char* __thiscall numpunct_char_ctor_refs(numpunct_char *this, MSVCP_size_t refs)
2913 TRACE("(%p %lu)\n", this, refs);
2914 return numpunct_char_ctor_name(this, "C", refs, FALSE);
2917 /* ??_F?$numpunct@D@std@@QAEXXZ */
2918 /* ??_F?$numpunct@D@std@@QEAAXXZ */
2919 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor, 4)
2920 numpunct_char* __thiscall numpunct_char_ctor(numpunct_char *this)
2922 return numpunct_char_ctor_refs(this, 0);
2925 /* ??1?$numpunct@D@std@@MAE@XZ */
2926 /* ??1?$numpunct@D@std@@MEAA@XZ */
2927 DEFINE_THISCALL_WRAPPER(numpunct_char_dtor, 4)
2928 void __thiscall numpunct_char_dtor(numpunct_char *this)
2930 TRACE("(%p)\n", this);
2931 numpunct_char__Tidy(this);
2934 DEFINE_THISCALL_WRAPPER(MSVCP_numpunct_char_vector_dtor, 8)
2935 numpunct_char* __thiscall MSVCP_numpunct_char_vector_dtor(numpunct_char *this, unsigned int flags)
2937 TRACE("(%p %x)\n", this, flags);
2938 if(flags & 2) {
2939 /* we have an array, with the number of elements stored before the first object */
2940 int i, *ptr = (int *)this-1;
2942 for(i=*ptr-1; i>=0; i--)
2943 numpunct_char_dtor(this+i);
2944 MSVCRT_operator_delete(ptr);
2945 } else {
2946 numpunct_char_dtor(this);
2947 if(flags & 1)
2948 MSVCRT_operator_delete(this);
2951 return this;
2954 /* ?_Getcat@?$numpunct@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2955 /* ?_Getcat@?$numpunct@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2956 MSVCP_size_t __cdecl numpunct_char__Getcat(const locale_facet **facet, const locale *loc)
2958 TRACE("(%p %p)\n", facet, loc);
2960 if(facet && !*facet) {
2961 *facet = MSVCRT_operator_new(sizeof(numpunct_char));
2962 if(!*facet) {
2963 ERR("Out of memory\n");
2964 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
2965 return 0;
2967 numpunct_char_ctor_name((numpunct_char*)*facet,
2968 MSVCP_basic_string_char_c_str(&loc->ptr->name), 0, TRUE);
2971 return LC_NUMERIC;
2974 /* ?do_decimal_point@?$numpunct@D@std@@MBEDXZ */
2975 /* ?do_decimal_point@?$numpunct@D@std@@MEBADXZ */
2976 DEFINE_THISCALL_WRAPPER(numpunct_char_do_decimal_point, 4)
2977 #define call_numpunct_char_do_decimal_point(this) CALL_VTBL_FUNC(this, 4, \
2978 char, (const numpunct_char *this), (this))
2979 char __thiscall numpunct_char_do_decimal_point(const numpunct_char *this)
2981 TRACE("(%p)\n", this);
2982 return this->dp;
2985 /* ?decimal_point@?$numpunct@D@std@@QBEDXZ */
2986 /* ?decimal_point@?$numpunct@D@std@@QEBADXZ */
2987 DEFINE_THISCALL_WRAPPER(numpunct_char_decimal_point, 4)
2988 char __thiscall numpunct_char_decimal_point(const numpunct_char *this)
2990 TRACE("(%p)\n", this);
2991 return call_numpunct_char_do_decimal_point(this);
2994 /* ?do_thousands_sep@?$numpunct@D@std@@MBEDXZ */
2995 /* ?do_thousands_sep@?$numpunct@D@std@@MEBADXZ */
2996 DEFINE_THISCALL_WRAPPER(numpunct_char_do_thousands_sep, 4)
2997 #define call_numpunct_char_do_thousands_sep(this) CALL_VTBL_FUNC(this, 8, \
2998 char, (const numpunct_char*), (this))
2999 char __thiscall numpunct_char_do_thousands_sep(const numpunct_char *this)
3001 TRACE("(%p)\n", this);
3002 return this->sep;
3005 /* ?thousands_sep@?$numpunct@D@std@@QBEDXZ */
3006 /* ?thousands_sep@?$numpunct@D@std@@QEBADXZ */
3007 DEFINE_THISCALL_WRAPPER(numpunct_char_thousands_sep, 4)
3008 char __thiscall numpunct_char_thousands_sep(const numpunct_char *this)
3010 TRACE("(%p)\n", this);
3011 return call_numpunct_char_do_thousands_sep(this);
3014 /* ?do_grouping@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3015 /* ?do_grouping@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3016 DEFINE_THISCALL_WRAPPER(numpunct_char_do_grouping, 8)
3017 #define call_numpunct_char_do_grouping(this, ret) CALL_VTBL_FUNC(this, 12, \
3018 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
3019 basic_string_char* __thiscall numpunct_char_do_grouping(
3020 const numpunct_char *this, basic_string_char *ret)
3022 TRACE("(%p)\n", this);
3023 return MSVCP_basic_string_char_ctor_cstr(ret, this->grouping);
3026 /* ?grouping@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3027 /* ?grouping@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3028 DEFINE_THISCALL_WRAPPER(numpunct_char_grouping, 8)
3029 basic_string_char* __thiscall numpunct_char_grouping(const numpunct_char *this, basic_string_char *ret)
3031 TRACE("(%p)\n", this);
3032 return call_numpunct_char_do_grouping(this, ret);
3035 /* ?do_falsename@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3036 /* ?do_falsename@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3037 DEFINE_THISCALL_WRAPPER(numpunct_char_do_falsename, 8)
3038 #define call_numpunct_char_do_falsename(this, ret) CALL_VTBL_FUNC(this, 16, \
3039 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
3040 basic_string_char* __thiscall numpunct_char_do_falsename(
3041 const numpunct_char *this, basic_string_char *ret)
3043 TRACE("(%p)\n", this);
3044 return MSVCP_basic_string_char_ctor_cstr(ret, this->false_name);
3047 /* ?falsename@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3048 /* ?falsename@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3049 DEFINE_THISCALL_WRAPPER(numpunct_char_falsename, 8)
3050 basic_string_char* __thiscall numpunct_char_falsename(const numpunct_char *this, basic_string_char *ret)
3052 TRACE("(%p)\n", this);
3053 return call_numpunct_char_do_falsename(this, ret);
3056 /* ?do_truename@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3057 /* ?do_truename@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3058 DEFINE_THISCALL_WRAPPER(numpunct_char_do_truename, 8)
3059 #define call_numpunct_char_do_truename(this, ret) CALL_VTBL_FUNC(this, 20, \
3060 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
3061 basic_string_char* __thiscall numpunct_char_do_truename(
3062 const numpunct_char *this, basic_string_char *ret)
3064 TRACE("(%p)\n", this);
3065 return MSVCP_basic_string_char_ctor_cstr(ret, this->true_name);
3068 /* ?truename@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3069 /* ?truename@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3070 DEFINE_THISCALL_WRAPPER(numpunct_char_truename, 8)
3071 basic_string_char* __thiscall numpunct_char_truename(const numpunct_char *this, basic_string_char *ret)
3073 TRACE("(%p)\n", this);
3074 return call_numpunct_char_do_truename(this, ret);
3077 /* ?id@?$numpunct@_W@std@@2V0locale@2@A */
3078 locale_id numpunct_wchar_id = {0};
3079 /* ?id@?$numpunct@G@std@@2V0locale@2@A */
3080 locale_id numpunct_short_id = {0};
3082 /* ??_7?$numpunct@_W@std@@6B@ */
3083 extern const vtable_ptr MSVCP_numpunct_wchar_vtable;
3084 /* ??_7?$numpunct@G@std@@6B@ */
3085 extern const vtable_ptr MSVCP_numpunct_short_vtable;
3087 /* ?_Init@?$numpunct@_W@std@@IAEXABV_Locinfo@2@_N@Z */
3088 /* ?_Init@?$numpunct@_W@std@@IEAAXAEBV_Locinfo@2@_N@Z */
3089 /* ?_Init@?$numpunct@G@std@@IAEXABV_Locinfo@2@_N@Z */
3090 /* ?_Init@?$numpunct@G@std@@IEAAXAEBV_Locinfo@2@_N@Z */
3091 DEFINE_THISCALL_WRAPPER(numpunct_wchar__Init, 12)
3092 void __thiscall numpunct_wchar__Init(numpunct_wchar *this, _Locinfo *locinfo, MSVCP_bool isdef)
3094 const char *to_convert;
3095 _Cvtvec cvt;
3096 int len;
3098 TRACE("(%p %p %d)\n", this, locinfo, isdef);
3100 _Locinfo__Getcvt(locinfo, &cvt);
3102 to_convert = _Locinfo__Getfalse(locinfo);
3103 len = MultiByteToWideChar(cvt.page, 0, to_convert, -1, NULL, 0);
3104 this->false_name = MSVCRT_operator_new(len*sizeof(WCHAR));
3105 if(this->false_name)
3106 MultiByteToWideChar(cvt.page, 0, to_convert, -1,
3107 (wchar_t*)this->false_name, len);
3109 to_convert = _Locinfo__Gettrue(locinfo);
3110 len = MultiByteToWideChar(cvt.page, 0, to_convert, -1, NULL, 0);
3111 this->true_name = MSVCRT_operator_new(len*sizeof(WCHAR));
3112 if(this->true_name)
3113 MultiByteToWideChar(cvt.page, 0, to_convert, -1,
3114 (wchar_t*)this->true_name, len);
3116 if(isdef) {
3117 this->grouping = MSVCRT_operator_new(1);
3118 if(this->grouping)
3119 *(char*)this->grouping = 0;
3121 this->dp = '.';
3122 this->sep = ',';
3123 } else {
3124 const struct lconv *lc = _Locinfo__Getlconv(locinfo);
3126 len = strlen(lc->grouping)+1;
3127 this->grouping = MSVCRT_operator_new(len);
3128 if(this->grouping)
3129 memcpy((char*)this->grouping, lc->grouping, len);
3131 this->dp = lc->decimal_point[0];
3132 this->sep = lc->thousands_sep[0];
3135 if(!this->false_name || !this->true_name || !this->grouping) {
3136 MSVCRT_operator_delete((char*)this->grouping);
3137 MSVCRT_operator_delete((wchar_t*)this->false_name);
3138 MSVCRT_operator_delete((wchar_t*)this->true_name);
3140 ERR("Out of memory\n");
3141 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
3145 /* ?_Tidy@?$numpunct@_W@std@@AAEXXZ */
3146 /* ?_Tidy@?$numpunct@_W@std@@AEAAXXZ */
3147 /* ?_Tidy@?$numpunct@G@std@@AAEXXZ */
3148 /* ?_Tidy@?$numpunct@G@std@@AEAAXXZ */
3149 DEFINE_THISCALL_WRAPPER(numpunct_wchar__Tidy, 4)
3150 void __thiscall numpunct_wchar__Tidy(numpunct_wchar *this)
3152 TRACE("(%p)\n", this);
3154 MSVCRT_operator_delete((char*)this->grouping);
3155 MSVCRT_operator_delete((wchar_t*)this->false_name);
3156 MSVCRT_operator_delete((wchar_t*)this->true_name);
3159 /* ??0?$numpunct@_W@std@@QAE@ABV_Locinfo@1@I_N@Z */
3160 /* ??0?$numpunct@_W@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
3161 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_locinfo, 16)
3162 numpunct_wchar* __thiscall numpunct_wchar_ctor_locinfo(numpunct_wchar *this,
3163 _Locinfo *locinfo, MSVCP_size_t refs, MSVCP_bool usedef)
3165 TRACE("(%p %p %lu %d)\n", this, locinfo, refs, usedef);
3166 locale_facet_ctor_refs(&this->facet, refs);
3167 this->facet.vtable = &MSVCP_numpunct_wchar_vtable;
3168 numpunct_wchar__Init(this, locinfo, usedef);
3169 return this;
3172 /* ??0?$numpunct@G@std@@QAE@ABV_Locinfo@1@I_N@Z */
3173 /* ??0?$numpunct@G@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
3174 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_locinfo, 16)
3175 numpunct_wchar* __thiscall numpunct_short_ctor_locinfo(numpunct_wchar *this,
3176 _Locinfo *locinfo, MSVCP_size_t refs, MSVCP_bool usedef)
3178 numpunct_wchar_ctor_locinfo(this, locinfo, refs, usedef);
3179 this->facet.vtable = &MSVCP_numpunct_short_vtable;
3180 return this;
3183 /* ??0?$numpunct@_W@std@@IAE@PBDI_N@Z */
3184 /* ??0?$numpunct@_W@std@@IEAA@PEBD_K_N@Z */
3185 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_name, 16)
3186 numpunct_wchar* __thiscall numpunct_wchar_ctor_name(numpunct_wchar *this,
3187 const char *name, MSVCP_size_t refs, MSVCP_bool usedef)
3189 _Locinfo locinfo;
3191 TRACE("(%p %s %lu %d)\n", this, debugstr_a(name), refs, usedef);
3192 locale_facet_ctor_refs(&this->facet, refs);
3193 this->facet.vtable = &MSVCP_numpunct_wchar_vtable;
3195 _Locinfo_ctor_cstr(&locinfo, name);
3196 numpunct_wchar__Init(this, &locinfo, usedef);
3197 _Locinfo_dtor(&locinfo);
3198 return this;
3201 /* ??0?$numpunct@G@std@@IAE@PBDI_N@Z */
3202 /* ??0?$numpunct@G@std@@IEAA@PEBD_K_N@Z */
3203 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_name, 16)
3204 numpunct_wchar* __thiscall numpunct_short_ctor_name(numpunct_wchar *this,
3205 const char *name, MSVCP_size_t refs, MSVCP_bool usedef)
3207 numpunct_wchar_ctor_name(this, name, refs, usedef);
3208 this->facet.vtable = &MSVCP_numpunct_short_vtable;
3209 return this;
3212 /* ??0?$numpunct@_W@std@@QAE@I@Z */
3213 /* ??0?$numpunct@_W@std@@QEAA@_K@Z */
3214 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_refs, 8)
3215 numpunct_wchar* __thiscall numpunct_wchar_ctor_refs(numpunct_wchar *this, MSVCP_size_t refs)
3217 TRACE("(%p %lu)\n", this, refs);
3218 return numpunct_wchar_ctor_name(this, "C", refs, FALSE);
3221 /* ??0?$numpunct@G@std@@QAE@I@Z */
3222 /* ??0?$numpunct@G@std@@QEAA@_K@Z */
3223 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_refs, 8)
3224 numpunct_wchar* __thiscall numpunct_short_ctor_refs(numpunct_wchar *this, MSVCP_size_t refs)
3226 numpunct_wchar_ctor_refs(this, refs);
3227 this->facet.vtable = &MSVCP_numpunct_short_vtable;
3228 return this;
3231 /* ??_F?$numpunct@_W@std@@QAEXXZ */
3232 /* ??_F?$numpunct@_W@std@@QEAAXXZ */
3233 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor, 4)
3234 numpunct_wchar* __thiscall numpunct_wchar_ctor(numpunct_wchar *this)
3236 return numpunct_wchar_ctor_refs(this, 0);
3239 /* ??_F?$numpunct@G@std@@QAEXXZ */
3240 /* ??_F?$numpunct@G@std@@QEAAXXZ */
3241 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor, 4)
3242 numpunct_wchar* __thiscall numpunct_short_ctor(numpunct_wchar *this)
3244 return numpunct_short_ctor_refs(this, 0);
3247 /* ??1?$numpunct@_W@std@@MAE@XZ */
3248 /* ??1?$numpunct@_W@std@@MEAA@XZ */
3249 /* ??1?$numpunct@G@std@@MAE@XZ */
3250 /* ??1?$numpunct@G@std@@MEAA@XZ */
3251 DEFINE_THISCALL_WRAPPER(numpunct_wchar_dtor, 4)
3252 void __thiscall numpunct_wchar_dtor(numpunct_wchar *this)
3254 TRACE("(%p)\n", this);
3255 numpunct_wchar__Tidy(this);
3258 DEFINE_THISCALL_WRAPPER(MSVCP_numpunct_wchar_vector_dtor, 8)
3259 numpunct_wchar* __thiscall MSVCP_numpunct_wchar_vector_dtor(numpunct_wchar *this, unsigned int flags)
3261 TRACE("(%p %x)\n", this, flags);
3262 if(flags & 2) {
3263 /* we have an array, with the number of elements stored before the first object */
3264 int i, *ptr = (int *)this-1;
3266 for(i=*ptr-1; i>=0; i--)
3267 numpunct_wchar_dtor(this+i);
3268 MSVCRT_operator_delete(ptr);
3269 } else {
3270 numpunct_wchar_dtor(this);
3271 if(flags & 1)
3272 MSVCRT_operator_delete(this);
3275 return this;
3278 DEFINE_THISCALL_WRAPPER(MSVCP_numpunct_short_vector_dtor, 8)
3279 numpunct_wchar* __thiscall MSVCP_numpunct_short_vector_dtor(numpunct_wchar *this, unsigned int flags)
3281 return MSVCP_numpunct_wchar_vector_dtor(this, flags);
3284 /* ?_Getcat@?$numpunct@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3285 /* ?_Getcat@?$numpunct@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3286 MSVCP_size_t __cdecl numpunct_wchar__Getcat(const locale_facet **facet, const locale *loc)
3288 TRACE("(%p %p)\n", facet, loc);
3290 if(facet && !*facet) {
3291 *facet = MSVCRT_operator_new(sizeof(numpunct_wchar));
3292 if(!*facet) {
3293 ERR("Out of memory\n");
3294 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
3295 return 0;
3297 numpunct_wchar_ctor_name((numpunct_wchar*)*facet,
3298 MSVCP_basic_string_char_c_str(&loc->ptr->name), 0, TRUE);
3301 return LC_NUMERIC;
3304 /* ?_Getcat@?$numpunct@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3305 /* ?_Getcat@?$numpunct@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3306 MSVCP_size_t __cdecl numpunct_short__Getcat(const locale_facet **facet, const locale *loc)
3308 TRACE("(%p %p)\n", facet, loc);
3310 if(facet && !*facet) {
3311 *facet = MSVCRT_operator_new(sizeof(numpunct_wchar));
3312 if(!*facet) {
3313 ERR("Out of memory\n");
3314 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
3315 return 0;
3317 numpunct_short_ctor_name((numpunct_wchar*)*facet,
3318 MSVCP_basic_string_char_c_str(&loc->ptr->name), 0, TRUE);
3321 return LC_NUMERIC;
3324 /* ?do_decimal_point@?$numpunct@_W@std@@MBE_WXZ */
3325 /* ?do_decimal_point@?$numpunct@_W@std@@MEBA_WXZ */
3326 /* ?do_decimal_point@?$numpunct@G@std@@MBEGXZ */
3327 /* ?do_decimal_point@?$numpunct@G@std@@MEBAGXZ */
3328 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_decimal_point, 4)
3329 #define call_numpunct_wchar_do_decimal_point(this) CALL_VTBL_FUNC(this, 4, \
3330 wchar_t, (const numpunct_wchar *this), (this))
3331 wchar_t __thiscall numpunct_wchar_do_decimal_point(const numpunct_wchar *this)
3333 TRACE("(%p)\n", this);
3334 return this->dp;
3337 /* ?decimal_point@?$numpunct@_W@std@@QBE_WXZ */
3338 /* ?decimal_point@?$numpunct@_W@std@@QEBA_WXZ */
3339 /* ?decimal_point@?$numpunct@G@std@@QBEGXZ */
3340 /* ?decimal_point@?$numpunct@G@std@@QEBAGXZ */
3341 DEFINE_THISCALL_WRAPPER(numpunct_wchar_decimal_point, 4)
3342 wchar_t __thiscall numpunct_wchar_decimal_point(const numpunct_wchar *this)
3344 TRACE("(%p)\n", this);
3345 return call_numpunct_wchar_do_decimal_point(this);
3348 /* ?do_thousands_sep@?$numpunct@_W@std@@MBE_WXZ */
3349 /* ?do_thousands_sep@?$numpunct@_W@std@@MEBA_WXZ */
3350 /* ?do_thousands_sep@?$numpunct@G@std@@MBEGXZ */
3351 /* ?do_thousands_sep@?$numpunct@G@std@@MEBAGXZ */
3352 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_thousands_sep, 4)
3353 #define call_numpunct_wchar_do_thousands_sep(this) CALL_VTBL_FUNC(this, 8, \
3354 wchar_t, (const numpunct_wchar *this), (this))
3355 wchar_t __thiscall numpunct_wchar_do_thousands_sep(const numpunct_wchar *this)
3357 TRACE("(%p)\n", this);
3358 return this->sep;
3361 /* ?thousands_sep@?$numpunct@_W@std@@QBE_WXZ */
3362 /* ?thousands_sep@?$numpunct@_W@std@@QEBA_WXZ */
3363 /* ?thousands_sep@?$numpunct@G@std@@QBEGXZ */
3364 /* ?thousands_sep@?$numpunct@G@std@@QEBAGXZ */
3365 DEFINE_THISCALL_WRAPPER(numpunct_wchar_thousands_sep, 4)
3366 wchar_t __thiscall numpunct_wchar_thousands_sep(const numpunct_wchar *this)
3368 TRACE("(%p)\n", this);
3369 return call_numpunct_wchar_do_thousands_sep(this);
3372 /* ?do_grouping@?$numpunct@_W@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3373 /* ?do_grouping@?$numpunct@_W@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3374 /* ?do_grouping@?$numpunct@G@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3375 /* ?do_grouping@?$numpunct@G@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3376 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_grouping, 8)
3377 #define call_numpunct_wchar_do_grouping(this, ret) CALL_VTBL_FUNC(this, 12, \
3378 basic_string_char*, (const numpunct_wchar*, basic_string_char*), (this, ret))
3379 basic_string_char* __thiscall numpunct_wchar_do_grouping(const numpunct_wchar *this, basic_string_char *ret)
3381 TRACE("(%p)\n", this);
3382 return MSVCP_basic_string_char_ctor_cstr(ret, this->grouping);
3385 /* ?grouping@?$numpunct@_W@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3386 /* ?grouping@?$numpunct@_W@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3387 /* ?grouping@?$numpunct@G@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3388 /* ?grouping@?$numpunct@G@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3389 DEFINE_THISCALL_WRAPPER(numpunct_wchar_grouping, 8)
3390 basic_string_char* __thiscall numpunct_wchar_grouping(const numpunct_wchar *this, basic_string_char *ret)
3392 TRACE("(%p)\n", this);
3393 return call_numpunct_wchar_do_grouping(this, ret);
3396 /* ?do_falsename@?$numpunct@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3397 /* ?do_falsename@?$numpunct@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3398 /* ?do_falsename@?$numpunct@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3399 /* ?do_falsename@?$numpunct@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3400 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_falsename, 8)
3401 #define call_numpunct_wchar_do_falsename(this, ret) CALL_VTBL_FUNC(this, 16, \
3402 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
3403 basic_string_wchar* __thiscall numpunct_wchar_do_falsename(const numpunct_wchar *this, basic_string_wchar *ret)
3405 TRACE("(%p)\n", this);
3406 return MSVCP_basic_string_wchar_ctor_cstr(ret, this->false_name);
3409 /* ?falsename@?$numpunct@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3410 /* ?falsename@?$numpunct@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3411 /* ?falsename@?$numpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3412 /* ?falsename@?$numpunct@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3413 DEFINE_THISCALL_WRAPPER(numpunct_wchar_falsename, 8)
3414 basic_string_wchar* __thiscall numpunct_wchar_falsename(const numpunct_wchar *this, basic_string_wchar *ret)
3416 TRACE("(%p)\n", this);
3417 return call_numpunct_wchar_do_falsename(this, ret);
3420 /* ?do_truename@?$numpunct@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3421 /* ?do_truename@?$numpunct@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3422 /* ?do_truename@?$numpunct@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3423 /* ?do_truename@?$numpunct@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3424 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_truename, 8)
3425 #define call_numpunct_wchar_do_truename(this, ret) CALL_VTBL_FUNC(this, 20, \
3426 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
3427 basic_string_wchar* __thiscall numpunct_wchar_do_truename(const numpunct_wchar *this, basic_string_wchar *ret)
3429 TRACE("(%p)\n", this);
3430 return MSVCP_basic_string_wchar_ctor_cstr(ret, this->true_name);
3433 /* ?truename@?$numpunct@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3434 /* ?truename@?$numpunct@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3435 /* ?truename@?$numpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3436 /* ?truename@?$numpunct@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3437 DEFINE_THISCALL_WRAPPER(numpunct_wchar_truename, 8)
3438 basic_string_wchar* __thiscall numpunct_wchar_truename(const numpunct_wchar *this, basic_string_wchar *ret)
3440 TRACE("(%p)\n", this);
3441 return call_numpunct_wchar_do_truename(this, ret);
3444 /* ?id@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
3445 locale_id num_get_wchar_id = {0};
3446 /* ?id@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
3447 locale_id num_get_short_id = {0};
3449 /* ??_7?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
3450 extern const vtable_ptr MSVCP_num_get_wchar_vtable;
3451 /* ??_7?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
3452 extern const vtable_ptr MSVCP_num_get_short_vtable;
3454 /* ?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
3455 /* ?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
3456 /* ?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
3457 /* ?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
3458 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor__Init, 8)
3459 void __thiscall num_get_wchar_ctor__Init(num_get *this, const _Locinfo *locinfo)
3461 FIXME("(%p %p) stub\n", this, locinfo);
3464 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
3465 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
3466 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor_locinfo, 12)
3467 num_get* __thiscall num_get_wchar_ctor_locinfo(num_get *this,
3468 _Locinfo *locinfo, MSVCP_size_t refs)
3470 FIXME("(%p %p %lu) stub\n", this, locinfo, refs);
3471 return NULL;
3474 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
3475 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
3476 DEFINE_THISCALL_WRAPPER(num_get_short_ctor_locinfo, 12)
3477 num_get* __thiscall num_get_short_ctor_locinfo(num_get *this,
3478 _Locinfo *locinfo, MSVCP_size_t refs)
3480 FIXME("(%p %p %lu) stub\n", this, locinfo, refs);
3481 return NULL;
3484 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
3485 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
3486 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor_refs, 8)
3487 num_get* __thiscall num_get_wchar_ctor_refs(num_get *this, MSVCP_size_t refs)
3489 FIXME("(%p %lu) stub\n", this, refs);
3490 return NULL;
3493 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
3494 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
3495 DEFINE_THISCALL_WRAPPER(num_get_short_ctor_refs, 8)
3496 num_get* __thiscall num_get_short_ctor_refs(num_get *this, MSVCP_size_t refs)
3498 FIXME("(%p %lu) stub\n", this, refs);
3499 return NULL;
3502 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
3503 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
3504 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor, 4)
3505 num_get* __thiscall num_get_wchar_ctor(num_get *this)
3507 FIXME("(%p) stub\n", this);
3508 return NULL;
3511 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
3512 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
3513 DEFINE_THISCALL_WRAPPER(num_get_short_ctor, 4)
3514 num_get* __thiscall num_get_short_ctor(num_get *this)
3516 FIXME("(%p) stub\n", this);
3517 return NULL;
3520 /* ??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
3521 /* ??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
3522 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
3523 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
3524 DEFINE_THISCALL_WRAPPER(num_get_wchar_dtor, 4)
3525 void __thiscall num_get_wchar_dtor(num_get *this)
3527 FIXME("(%p) stub\n", this);
3530 DEFINE_THISCALL_WRAPPER(MSVCP_num_get_wchar_vector_dtor, 8)
3531 num_get* __thiscall MSVCP_num_get_wchar_vector_dtor(num_get *this, unsigned int flags)
3533 TRACE("(%p %x)\n", this, flags);
3534 if(flags & 2) {
3535 /* we have an array, with the number of elements stored before the first object */
3536 int i, *ptr = (int *)this-1;
3538 for(i=*ptr-1; i>=0; i--)
3539 num_get_wchar_dtor(this+i);
3540 MSVCRT_operator_delete(ptr);
3541 } else {
3542 num_get_wchar_dtor(this);
3543 if(flags & 1)
3544 MSVCRT_operator_delete(this);
3547 return this;
3550 DEFINE_THISCALL_WRAPPER(MSVCP_num_get_short_vector_dtor, 8)
3551 num_get* __thiscall MSVCP_num_get_short_vector_dtor(num_get *this, unsigned int flags)
3553 return MSVCP_num_get_wchar_vector_dtor(this, flags);
3556 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3557 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3558 MSVCP_size_t __cdecl num_get_wchar__Getcat(const locale_facet **facet, const locale *loc)
3560 FIXME("(%p %p) stub\n", facet, loc);
3561 return -1;
3564 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3565 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3566 MSVCP_size_t __cdecl num_get_short__Getcat(const locale_facet **facet, const locale *loc)
3568 FIXME("(%p %p) stub\n", facet, loc);
3569 return -1;
3572 /* ?_Getffld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1ABVlocale@2@@Z */
3573 /* ?_Getffld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1AEBVlocale@2@@Z */
3574 /* ?_Getffld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1ABVlocale@2@@Z */
3575 /* ?_Getffld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1AEBVlocale@2@@Z */
3576 int __cdecl num_get_wchar__Getffld(num_get *this, char *dest, istreambuf_iterator_wchar *first,
3577 istreambuf_iterator_wchar *last, const locale *loc)
3579 FIXME("(%p %p %p %p) stub\n", dest, first, last, loc);
3580 return -1;
3583 /* ?_Getffldx@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1AAVios_base@2@PAH@Z */
3584 /* ?_Getffldx@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1AEAVios_base@2@PEAH@Z */
3585 /* ?_Getffldx@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1AAVios_base@2@PAH@Z */
3586 /* ?_Getffldx@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1AEAVios_base@2@PEAH@Z */
3587 int __cdecl num_get_wchar__Getffldx(num_get *this, char *dest, istreambuf_iterator_wchar *first,
3588 istreambuf_iterator_wchar *last, struct _ios_base *ios, int *phexexp)
3590 FIXME("(%p %p %p %p %p) stub\n", dest, first, last, ios, phexexp);
3591 return -1;
3594 /* ?_Getifld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1HABVlocale@2@@Z */
3595 /* ?_Getifld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1HAEBVlocale@2@@Z */
3596 /* ?_Getifld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1HABVlocale@2@@Z */
3597 /* ?_Getifld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1HAEBVlocale@2@@Z */
3598 int __cdecl num_get_wchar__Getifld(num_get *this, char *dest, istreambuf_iterator_wchar *first,
3599 istreambuf_iterator_wchar *last, int fmtflags, const locale *loc)
3601 FIXME("(%p %p %p %04x %p) stub\n", dest, first, last, fmtflags, loc);
3602 return -1;
3605 /* ?_Hexdig@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABEH_W000@Z */
3606 /* ?_Hexdig@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAH_W000@Z */
3607 /* ?_Hexdig@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABEHGGGG@Z */
3608 /* ?_Hexdig@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHGGGG@Z */
3609 DEFINE_THISCALL_WRAPPER(MSVCP_num_get_wchar__Hexdig, 20)
3610 int __thiscall MSVCP_num_get_wchar__Hexdig(num_get *this, wchar_t dig, wchar_t e0, wchar_t al, wchar_t au)
3612 FIXME("(%p %c %c %c %c) stub\n", this, dig, e0, al, au);
3613 return -1;
3616 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z */
3617 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z */
3618 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z */
3619 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z */
3620 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_void,36)
3621 istreambuf_iterator_wchar *__thiscall num_get_wchar_do_get_void(const num_get *this, istreambuf_iterator_wchar *ret,
3622 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, void **pval)
3624 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3625 return ret;
3628 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z */
3629 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z */
3630 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z */
3631 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z */
3632 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_void,36)
3633 istreambuf_iterator_wchar *__thiscall num_get_wchar_get_void(const num_get *this, istreambuf_iterator_wchar *ret,
3634 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, void **pval)
3636 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3637 return ret;
3640 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAO@Z */
3641 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z */
3642 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAN@Z */
3643 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z */
3644 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAO@Z */
3645 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z */
3646 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAN@Z */
3647 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z */
3648 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_double,36)
3649 istreambuf_iterator_wchar *__thiscall num_get_wchar_do_get_double(const num_get *this, istreambuf_iterator_wchar *ret,
3650 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, double *pval)
3652 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3653 return ret;
3656 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAO@Z */
3657 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z */
3658 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAN@Z */
3659 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z */
3660 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAO@Z */
3661 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z */
3662 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAN@Z */
3663 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z */
3664 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_double,36)
3665 istreambuf_iterator_wchar *__thiscall num_get_wchar_get_double(const num_get *this, istreambuf_iterator_wchar *ret,
3666 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, double *pval)
3668 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3669 return ret;
3672 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAM@Z */
3673 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z */
3674 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAM@Z */
3675 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z */
3676 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_float,36)
3677 istreambuf_iterator_wchar *__thiscall num_get_wchar_do_get_float(const num_get *this, istreambuf_iterator_wchar *ret,
3678 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, float *pval)
3680 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3681 return ret;
3684 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAM@Z */
3685 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z */
3686 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAM@Z */
3687 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z */
3688 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_float,36)
3689 istreambuf_iterator_wchar *__thiscall num_get_wchar_get_float(const num_get *this, istreambuf_iterator_wchar *ret,
3690 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, float *pval)
3692 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3693 return ret;
3696 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z */
3697 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z */
3698 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z */
3699 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z */
3700 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_uint64,36)
3701 istreambuf_iterator_wchar *__thiscall num_get_wchar_do_get_uint64(const num_get *this, istreambuf_iterator_wchar *ret,
3702 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, ULONGLONG *pval)
3704 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3705 return ret;
3708 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z */
3709 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z */
3710 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z */
3711 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z */
3712 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_uint64,36)
3713 istreambuf_iterator_wchar *__thiscall num_get_wchar_get_uint64(const num_get *this, istreambuf_iterator_wchar *ret,
3714 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, ULONGLONG *pval)
3716 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3717 return ret;
3720 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z */
3721 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z */
3722 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z */
3723 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z */
3724 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_int64,36)
3725 istreambuf_iterator_wchar *__thiscall num_get_wchar_do_get_int64(const num_get *this, istreambuf_iterator_wchar *ret,
3726 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, LONGLONG *pval)
3728 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3729 return ret;
3732 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z */
3733 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z */
3734 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z */
3735 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z */
3736 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_int64,36)
3737 istreambuf_iterator_wchar *__thiscall num_get_wchar_get_int64(const num_get *this, istreambuf_iterator_wchar *ret,
3738 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, LONGLONG *pval)
3740 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3741 return ret;
3744 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAK@Z */
3745 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z */
3746 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAK@Z */
3747 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z */
3748 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_ulong,36)
3749 istreambuf_iterator_wchar *__thiscall num_get_wchar_do_get_ulong(const num_get *this, istreambuf_iterator_wchar *ret,
3750 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, ULONG *pval)
3752 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3753 return ret;
3756 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAK@Z */
3757 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z */
3758 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAK@Z */
3759 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z */
3760 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ulong,36)
3761 istreambuf_iterator_wchar *__thiscall num_get_wchar_get_ulong(const num_get *this, istreambuf_iterator_wchar *ret,
3762 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, ULONG *pval)
3764 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3765 return ret;
3768 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z */
3769 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z */
3770 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z */
3771 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z */
3772 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_long,36)
3773 istreambuf_iterator_wchar *__thiscall num_get_wchar_do_get_long(const num_get *this, istreambuf_iterator_wchar *ret,
3774 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, LONG *pval)
3776 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3777 return ret;
3780 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z */
3781 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z */
3782 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z */
3783 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z */
3784 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_long,36)
3785 istreambuf_iterator_wchar *__thiscall num_get_wchar_get_long(const num_get *this, istreambuf_iterator_wchar *ret,
3786 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, LONG *pval)
3788 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3789 return ret;
3792 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAI@Z */
3793 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z */
3794 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAI@Z */
3795 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z */
3796 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_uint,36)
3797 istreambuf_iterator_wchar *__thiscall num_get_wchar_do_get_uint(const num_get *this, istreambuf_iterator_wchar *ret,
3798 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, unsigned int *pval)
3800 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3801 return ret;
3804 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAI@Z */
3805 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z */
3806 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAI@Z */
3807 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z */
3808 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_uint,36)
3809 istreambuf_iterator_wchar *__thiscall num_get_wchar_get_uint(const num_get *this, istreambuf_iterator_wchar *ret,
3810 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, unsigned int *pval)
3812 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3813 return ret;
3816 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAG@Z */
3817 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z */
3818 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAG@Z */
3819 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z */
3820 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_ushort,36)
3821 istreambuf_iterator_wchar *__thiscall num_get_wchar_do_get_ushort(const num_get *this, istreambuf_iterator_wchar *ret,
3822 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, unsigned short *pval)
3824 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3825 return ret;
3828 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAG@Z */
3829 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z */
3830 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAG@ */
3831 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z */
3832 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ushort,36)
3833 istreambuf_iterator_wchar *__thiscall num_get_wchar_get_ushort(const num_get *this, istreambuf_iterator_wchar *ret,
3834 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, unsigned short *pval)
3836 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3837 return ret;
3840 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z */
3841 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z */
3842 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z */
3843 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z */
3844 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_bool,36)
3845 istreambuf_iterator_wchar *__thiscall num_get_wchar_do_get_bool(const num_get *this, istreambuf_iterator_wchar *ret,
3846 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, MSVCP_bool *pval)
3848 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3849 return ret;
3852 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z */
3853 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z */
3854 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z */
3855 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z */
3856 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_bool,36)
3857 istreambuf_iterator_wchar *__thiscall num_get_wchar_get_bool(const num_get *this, istreambuf_iterator_wchar *ret,
3858 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, MSVCP_bool *pval)
3860 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3861 return ret;
3864 /* ?id@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
3865 locale_id num_get_char_id = {0};
3867 /* ??_7?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
3868 extern const vtable_ptr MSVCP_num_get_char_vtable;
3870 /* ?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
3871 /* ?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
3872 DEFINE_THISCALL_WRAPPER(num_get_char_ctor__Init, 8)
3873 void __thiscall num_get_char_ctor__Init(num_get *this, const _Locinfo *locinfo)
3875 FIXME("(%p %p) stub\n", this, locinfo);
3878 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
3879 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
3880 DEFINE_THISCALL_WRAPPER(num_get_char_ctor_locinfo, 12)
3881 num_get* __thiscall num_get_char_ctor_locinfo(num_get *this,
3882 _Locinfo *locinfo, MSVCP_size_t refs)
3884 FIXME("(%p %p %lu) stub\n", this, locinfo, refs);
3885 return NULL;
3888 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
3889 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
3890 DEFINE_THISCALL_WRAPPER(num_get_char_ctor_refs, 8)
3891 num_get* __thiscall num_get_char_ctor_refs(num_get *this, MSVCP_size_t refs)
3893 FIXME("(%p %lu) stub\n", this, refs);
3894 return NULL;
3897 /* ??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
3898 /* ??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
3899 DEFINE_THISCALL_WRAPPER(num_get_char_ctor, 4)
3900 num_get* __thiscall num_get_char_ctor(num_get *this)
3902 FIXME("(%p) stub\n", this);
3903 return NULL;
3906 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
3907 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
3908 DEFINE_THISCALL_WRAPPER(num_get_char_dtor, 4)
3909 void __thiscall num_get_char_dtor(num_get *this)
3911 FIXME("(%p) stub\n", this);
3914 DEFINE_THISCALL_WRAPPER(MSVCP_num_get_char_vector_dtor, 8)
3915 num_get* __thiscall MSVCP_num_get_char_vector_dtor(num_get *this, unsigned int flags)
3917 TRACE("(%p %x)\n", this, flags);
3918 if(flags & 2) {
3919 /* we have an array, with the number of elements stored before the first object */
3920 int i, *ptr = (int *)this-1;
3922 for(i=*ptr-1; i>=0; i--)
3923 num_get_char_dtor(this+i);
3924 MSVCRT_operator_delete(ptr);
3925 } else {
3926 num_get_char_dtor(this);
3927 if(flags & 1)
3928 MSVCRT_operator_delete(this);
3931 return this;
3934 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3935 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3936 MSVCP_size_t __cdecl num_get_char__Getcat(const locale_facet **facet, const locale *loc)
3938 FIXME("(%p %p) stub\n", facet, loc);
3939 return -1;
3942 /* ?_Getffld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1ABVlocale@2@@Z */
3943 /* ?_Getffld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1AEBVlocale@2@@Z */
3944 int __cdecl num_get_char__Getffld(num_get *this, char *dest, istreambuf_iterator_char *first,
3945 istreambuf_iterator_char *last, const locale *loc)
3947 FIXME("(%p %p %p %p) stub\n", dest, first, last, loc);
3948 return -1;
3951 /* ?_Getffldx@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1AAVios_base@2@PAH@Z */
3952 /* ?_Getffldx@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1AEAVios_base@2@PEAH@Z */
3953 int __cdecl num_get_char__Getffldx(num_get *this, char *dest, istreambuf_iterator_char *first,
3954 istreambuf_iterator_char *last, struct _ios_base *ios, int *phexexp)
3956 FIXME("(%p %p %p %p %p) stub\n", dest, first, last, ios, phexexp);
3957 return -1;
3960 /* ?_Getifld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1HABVlocale@2@@Z */
3961 /* ?_Getifld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1HAEBVlocale@2@@Z */
3962 int __cdecl num_get_char__Getifld(num_get *this, char *dest, istreambuf_iterator_char *first,
3963 istreambuf_iterator_char *last, int fmtflags, const locale *loc)
3965 FIXME("(%p %p %p %04x %p) stub\n", dest, first, last, fmtflags, loc);
3966 return -1;
3969 /* ?_Hexdig@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABEHD000@Z */
3970 /* ?_Hexdig@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHD000@Z */
3971 DEFINE_THISCALL_WRAPPER(MSVCP_num_get_char__Hexdig, 20)
3972 int __thiscall MSVCP_num_get_char__Hexdig(num_get *this, char dig, char e0, char al, char au)
3974 FIXME("(%p %c %c %c %c) stub\n", this, dig, e0, al, au);
3975 return -1;
3978 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z */
3979 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z */
3980 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_void,36)
3981 istreambuf_iterator_char *__thiscall num_get_char_do_get_void(const num_get *this, istreambuf_iterator_char *ret,
3982 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, void **pval)
3984 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3985 return ret;
3988 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z */
3989 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z */
3990 DEFINE_THISCALL_WRAPPER(num_get_char_get_void,36)
3991 istreambuf_iterator_char *__thiscall num_get_char_get_void(const num_get *this, istreambuf_iterator_char *ret,
3992 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, void **pval)
3994 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3995 return ret;
3998 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAO@Z */
3999 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z */
4000 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAN@Z */
4001 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z */
4002 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_double,36)
4003 istreambuf_iterator_char *__thiscall num_get_char_do_get_double(const num_get *this, istreambuf_iterator_char *ret,
4004 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, double *pval)
4006 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
4007 return ret;
4010 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAO@Z */
4011 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z */
4012 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAN@Z */
4013 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z */
4014 DEFINE_THISCALL_WRAPPER(num_get_char_get_double,36)
4015 istreambuf_iterator_char *__thiscall num_get_char_get_double(const num_get *this, istreambuf_iterator_char *ret,
4016 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, double *pval)
4018 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
4019 return ret;
4022 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAM@Z */
4023 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z */
4024 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_float,36)
4025 istreambuf_iterator_char *__thiscall num_get_char_do_get_float(const num_get *this, istreambuf_iterator_char *ret,
4026 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, float *pval)
4028 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
4029 return ret;
4032 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAM@Z */
4033 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z */
4034 DEFINE_THISCALL_WRAPPER(num_get_char_get_float,36)
4035 istreambuf_iterator_char *__thiscall num_get_char_get_float(const num_get *this, istreambuf_iterator_char *ret,
4036 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, float *pval)
4038 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
4039 return ret;
4042 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z */
4043 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z */
4044 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_uint64,36)
4045 istreambuf_iterator_char *__thiscall num_get_char_do_get_uint64(const num_get *this, istreambuf_iterator_char *ret,
4046 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, ULONGLONG *pval)
4048 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
4049 return ret;
4052 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z */
4053 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z */
4054 DEFINE_THISCALL_WRAPPER(num_get_char_get_uint64,36)
4055 istreambuf_iterator_char *__thiscall num_get_char_get_uint64(const num_get *this, istreambuf_iterator_char *ret,
4056 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, ULONGLONG *pval)
4058 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
4059 return ret;
4062 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z */
4063 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z */
4064 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_int64,36)
4065 istreambuf_iterator_char *__thiscall num_get_char_do_get_int64(const num_get *this, istreambuf_iterator_char *ret,
4066 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, LONGLONG *pval)
4068 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
4069 return ret;
4072 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z */
4073 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z */
4074 DEFINE_THISCALL_WRAPPER(num_get_char_get_int64,36)
4075 istreambuf_iterator_char *__thiscall num_get_char_get_int64(const num_get *this, istreambuf_iterator_char *ret,
4076 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, LONGLONG *pval)
4078 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
4079 return ret;
4082 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAK@Z */
4083 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z */
4084 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_ulong,36)
4085 istreambuf_iterator_char *__thiscall num_get_char_do_get_ulong(const num_get *this, istreambuf_iterator_char *ret,
4086 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, ULONG *pval)
4088 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
4089 return ret;
4092 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAK@Z */
4093 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z */
4094 DEFINE_THISCALL_WRAPPER(num_get_char_get_ulong,36)
4095 istreambuf_iterator_char *__thiscall num_get_char_get_ulong(const num_get *this, istreambuf_iterator_char *ret,
4096 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, ULONG *pval)
4098 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
4099 return ret;
4102 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z */
4103 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z */
4104 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_long,36)
4105 istreambuf_iterator_char *__thiscall num_get_char_do_get_long(const num_get *this, istreambuf_iterator_char *ret,
4106 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, LONG *pval)
4108 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
4109 return ret;
4112 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z */
4113 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z */
4114 DEFINE_THISCALL_WRAPPER(num_get_char_get_long,36)
4115 istreambuf_iterator_char *__thiscall num_get_char_get_long(const num_get *this, istreambuf_iterator_char *ret,
4116 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, LONG *pval)
4118 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
4119 return ret;
4122 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAI@Z */
4123 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z */
4124 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_uint,36)
4125 istreambuf_iterator_char *__thiscall num_get_char_do_get_uint(const num_get *this, istreambuf_iterator_char *ret,
4126 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, unsigned int *pval)
4128 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
4129 return ret;
4132 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAI@Z */
4133 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z */
4134 DEFINE_THISCALL_WRAPPER(num_get_char_get_uint,36)
4135 istreambuf_iterator_char *__thiscall num_get_char_get_uint(const num_get *this, istreambuf_iterator_char *ret,
4136 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, unsigned int *pval)
4138 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
4139 return ret;
4142 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAG@Z */
4143 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z */
4144 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_ushort,36)
4145 istreambuf_iterator_char *__thiscall num_get_char_do_get_ushort(const num_get *this, istreambuf_iterator_char *ret,
4146 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, unsigned short *pval)
4148 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
4149 return ret;
4152 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAG@Z */
4153 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z */
4154 DEFINE_THISCALL_WRAPPER(num_get_char_get_ushort,36)
4155 istreambuf_iterator_char *__thiscall num_get_char_get_ushort(const num_get *this, istreambuf_iterator_char *ret,
4156 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, unsigned short *pval)
4158 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
4159 return ret;
4162 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z */
4163 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z */
4164 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_bool,36)
4165 istreambuf_iterator_char *__thiscall num_get_char_do_get_bool(const num_get *this, istreambuf_iterator_char *ret,
4166 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, MSVCP_bool *pval)
4168 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
4169 return ret;
4172 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z */
4173 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z */
4174 DEFINE_THISCALL_WRAPPER(num_get_char_get_bool,36)
4175 istreambuf_iterator_char *__thiscall num_get_char_get_bool(const num_get *this, istreambuf_iterator_char *ret,
4176 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, MSVCP_bool *pval)
4178 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
4179 return ret;
4182 /* ??0_Locimp@locale@std@@AAE@_N@Z */
4183 /* ??0_Locimp@locale@std@@AEAA@_N@Z */
4184 DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor_transparent, 8)
4185 locale__Locimp* __thiscall locale__Locimp_ctor_transparent(locale__Locimp *this, MSVCP_bool transparent)
4187 TRACE("(%p %d)\n", this, transparent);
4189 memset(this, 0, sizeof(locale__Locimp));
4190 locale_facet_ctor_refs(&this->facet, 1);
4191 this->transparent = transparent;
4192 MSVCP_basic_string_char_ctor_cstr(&this->name, "*");
4193 return this;
4196 /* ??_F_Locimp@locale@std@@QAEXXZ */
4197 /* ??_F_Locimp@locale@std@@QEAAXXZ */
4198 DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor, 4)
4199 locale__Locimp* __thiscall locale__Locimp_ctor(locale__Locimp *this)
4201 return locale__Locimp_ctor_transparent(this, FALSE);
4204 /* ??0_Locimp@locale@std@@AAE@ABV012@@Z */
4205 /* ??0_Locimp@locale@std@@AEAA@AEBV012@@Z */
4206 DEFINE_THISCALL_WRAPPER(locale__Locimp_copy_ctor, 8)
4207 locale__Locimp* __thiscall locale__Locimp_copy_ctor(locale__Locimp *this, const locale__Locimp *copy)
4209 _Lockit lock;
4210 MSVCP_size_t i;
4212 TRACE("(%p %p)\n", this, copy);
4214 _Lockit_ctor_locktype(&lock, _LOCK_LOCALE);
4215 memcpy(this, copy, sizeof(locale__Locimp));
4216 locale_facet_ctor_refs(&this->facet, 1);
4217 if(copy->facetvec) {
4218 this->facetvec = MSVCRT_operator_new(copy->facet_cnt*sizeof(locale_facet*));
4219 if(!this->facetvec) {
4220 _Lockit_dtor(&lock);
4221 ERR("Out of memory\n");
4222 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
4223 return NULL;
4225 for(i=0; i<this->facet_cnt; i++)
4226 if(this->facetvec[i])
4227 locale_facet__Incref(this->facetvec[i]);
4229 MSVCP_basic_string_char_copy_ctor(&this->name, &copy->name);
4230 _Lockit_dtor(&lock);
4231 return this;
4234 /* ?_Locimp_ctor@_Locimp@locale@std@@CAXPAV123@ABV123@@Z */
4235 /* ?_Locimp_ctor@_Locimp@locale@std@@CAXPEAV123@AEBV123@@Z */
4236 locale__Locimp* __cdecl locale__Locimp__Locimp_ctor(locale__Locimp *this, const locale__Locimp *copy)
4238 return locale__Locimp_copy_ctor(this, copy);
4241 /* ??1_Locimp@locale@std@@MAE@XZ */
4242 /* ??1_Locimp@locale@std@@MEAA@XZ */
4243 DEFINE_THISCALL_WRAPPER(locale__Locimp_dtor, 4)
4244 void __thiscall locale__Locimp_dtor(locale__Locimp *this)
4246 TRACE("(%p)\n", this);
4248 if(locale_facet__Decref(&this->facet)) {
4249 MSVCP_size_t i;
4250 for(i=0; i<this->facet_cnt; i++)
4251 if(this->facetvec[i] && locale_facet__Decref(this->facetvec[i]))
4252 call_locale_facet_vector_dtor(this->facetvec[i], 0);
4254 MSVCRT_operator_delete(this->facetvec);
4255 MSVCP_basic_string_char_dtor(&this->name);
4259 /* ?_Locimp_dtor@_Locimp@locale@std@@CAXPAV123@@Z */
4260 /* ?_Locimp_dtor@_Locimp@locale@std@@CAXPEAV123@@Z */
4261 void __cdecl locale__Locimp__Locimp_dtor(locale__Locimp *this)
4263 locale__Locimp_dtor(this);
4266 DEFINE_THISCALL_WRAPPER(MSVCP_locale__Locimp_vector_dtor, 8)
4267 locale__Locimp* __thiscall MSVCP_locale__Locimp_vector_dtor(locale__Locimp *this, unsigned int flags)
4269 TRACE("(%p %x)\n", this, flags);
4270 if(flags & 2) {
4271 /* we have an array, with the number of elements stored before the first object */
4272 int i, *ptr = (int *)this-1;
4274 for(i=*ptr-1; i>=0; i--)
4275 locale__Locimp_dtor(this+i);
4276 MSVCRT_operator_delete(ptr);
4277 } else {
4278 locale__Locimp_dtor(this);
4279 if(flags & 1)
4280 MSVCRT_operator_delete(this);
4283 return this;
4286 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z */
4287 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPEAV123@PEAVfacet@23@_K@Z */
4288 void __cdecl locale__Locimp__Locimp_Addfac(locale__Locimp *locimp, locale_facet *facet, MSVCP_size_t id)
4290 _Lockit lock;
4292 TRACE("(%p %p %lu)\n", locimp, facet, id);
4294 _Lockit_ctor_locktype(&lock, _LOCK_LOCALE);
4295 if(id >= locimp->facet_cnt) {
4296 MSVCP_size_t new_size = id+1;
4297 locale_facet **new_facetvec;
4299 if(new_size < locale_id__Id_cnt+1)
4300 new_size = locale_id__Id_cnt+1;
4302 new_facetvec = MSVCRT_operator_new(sizeof(locale_facet*)*new_size);
4303 if(!new_facetvec) {
4304 _Lockit_dtor(&lock);
4305 ERR("Out of memory\n");
4306 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
4307 return;
4310 memset(new_facetvec, 0, sizeof(locale_facet*)*new_size);
4311 memcpy(new_facetvec, locimp->facetvec, sizeof(locale_facet*)*locimp->facet_cnt);
4312 MSVCRT_operator_delete(locimp->facetvec);
4313 locimp->facetvec = new_facetvec;
4314 locimp->facet_cnt = new_size;
4317 if(locimp->facetvec[id] && locale_facet__Decref(locimp->facetvec[id]))
4318 call_locale_facet_vector_dtor(locimp->facetvec[id], 0);
4320 locimp->facetvec[id] = facet;
4321 if(facet)
4322 locale_facet__Incref(facet);
4323 _Lockit_dtor(&lock);
4326 /* ?_Addfac@_Locimp@locale@std@@AAEXPAVfacet@23@I@Z */
4327 /* ?_Addfac@_Locimp@locale@std@@AEAAXPEAVfacet@23@_K@Z */
4328 DEFINE_THISCALL_WRAPPER(locale__Locimp__Addfac, 12)
4329 void __thiscall locale__Locimp__Addfac(locale__Locimp *this, locale_facet *facet, MSVCP_size_t id)
4331 locale__Locimp__Locimp_Addfac(this, facet, id);
4334 /* ?_Clocptr_func@_Locimp@locale@std@@CAAAPAV123@XZ */
4335 /* ?_Clocptr_func@_Locimp@locale@std@@CAAEAPEAV123@XZ */
4336 locale__Locimp** __cdecl locale__Locimp__Clocptr_func(void)
4338 FIXME("stub\n");
4339 return NULL;
4342 /* ?_Makeloc@_Locimp@locale@std@@CAPAV123@ABV_Locinfo@3@HPAV123@PBV23@@Z */
4343 /* ?_Makeloc@_Locimp@locale@std@@CAPEAV123@AEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
4344 locale__Locimp* __cdecl locale__Locimp__Makeloc(const _Locinfo *locinfo, category cat, locale__Locimp *locimp, const locale *loc)
4346 FIXME("(%p %d %p %p) stub\n", locinfo, cat, locimp, loc);
4347 return NULL;
4350 /* ?_Makeushloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
4351 /* ?_Makeushloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
4352 void __cdecl locale__Locimp__Makeushloc(const _Locinfo *locinfo, category cat, locale__Locimp *locimp, const locale *loc)
4354 FIXME("(%p %d %p %p) stub\n", locinfo, cat, locimp, loc);
4357 /* ?_Makewloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
4358 /* ?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
4359 void __cdecl locale__Locimp__Makewloc(const _Locinfo *locinfo, category cat, locale__Locimp *locimp, const locale *loc)
4361 FIXME("(%p %d %p %p) stub\n", locinfo, cat, locimp, loc);
4364 /* ?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
4365 /* ?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
4366 void __cdecl locale__Locimp__Makexloc(const _Locinfo *locinfo, category cat, locale__Locimp *locimp, const locale *loc)
4368 FIXME("(%p %d %p %p) stub\n", locinfo, cat, locimp, loc);
4371 /* ??_7_Locimp@locale@std@@6B@ */
4372 const vtable_ptr MSVCP_locale__Locimp_vtable[] = {
4373 (vtable_ptr)THISCALL_NAME(MSVCP_locale__Locimp_vector_dtor)
4376 /* ??0locale@std@@AAE@PAV_Locimp@01@@Z */
4377 /* ??0locale@std@@AEAA@PEAV_Locimp@01@@Z */
4378 DEFINE_THISCALL_WRAPPER(locale_ctor_locimp, 8)
4379 locale* __thiscall locale_ctor_locimp(locale *this, locale__Locimp *locimp)
4381 TRACE("(%p %p)\n", this, locimp);
4382 /* Don't change locimp reference counter */
4383 this->ptr = locimp;
4384 return this;
4387 /* ?_Init@locale@std@@CAPAV_Locimp@12@XZ */
4388 /* ?_Init@locale@std@@CAPEAV_Locimp@12@XZ */
4389 locale__Locimp* __cdecl locale__Init(void)
4391 _Lockit lock;
4393 TRACE("\n");
4395 _Lockit_ctor_locktype(&lock, _LOCK_LOCALE);
4396 if(global_locale) {
4397 _Lockit_dtor(&lock);
4398 return global_locale;
4401 global_locale = MSVCRT_operator_new(sizeof(locale__Locimp));
4402 if(!global_locale) {
4403 _Lockit_dtor(&lock);
4404 ERR("Out of memory\n");
4405 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
4406 return NULL;
4409 locale__Locimp_ctor(global_locale);
4410 global_locale->catmask = (1<<(LC_MAX+1))-1;
4411 MSVCP_basic_string_char_dtor(&global_locale->name);
4412 MSVCP_basic_string_char_ctor_cstr(&global_locale->name, "C");
4414 locale__Locimp__Clocptr = global_locale;
4415 global_locale->facet.refs++;
4416 locale_ctor_locimp(&classic_locale, locale__Locimp__Clocptr);
4417 _Lockit_dtor(&lock);
4419 return global_locale;
4422 /* ??0locale@std@@QAE@ABV01@0H@Z */
4423 /* ??0locale@std@@QEAA@AEBV01@0H@Z */
4424 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_locale, 16)
4425 locale* __thiscall locale_ctor_locale_locale(locale *this, const locale *loc, const locale *other, category cat)
4427 FIXME("(%p %p %p %d) stub\n", this, loc, other, cat);
4428 return NULL;
4431 /* ??0locale@std@@QAE@ABV01@@Z */
4432 /* ??0locale@std@@QEAA@AEBV01@@Z */
4433 DEFINE_THISCALL_WRAPPER(locale_copy_ctor, 8)
4434 locale* __thiscall locale_copy_ctor(locale *this, const locale *copy)
4436 TRACE("(%p %p)\n", this, copy);
4437 this->ptr = copy->ptr;
4438 locale_facet__Incref(&this->ptr->facet);
4439 return this;
4442 /* ??0locale@std@@QAE@ABV01@PBDH@Z */
4443 /* ??0locale@std@@QEAA@AEBV01@PEBDH@Z */
4444 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_cstr, 16)
4445 locale* __thiscall locale_ctor_locale_cstr(locale *this, const locale *loc, const char *locname, category cat)
4447 FIXME("(%p %p %s %d) stub\n", this, loc, locname, cat);
4448 return NULL;
4451 /* ??0locale@std@@QAE@PBDH@Z */
4452 /* ??0locale@std@@QEAA@PEBDH@Z */
4453 DEFINE_THISCALL_WRAPPER(locale_ctor_cstr, 12)
4454 locale* __thiscall locale_ctor_cstr(locale *this, const char *locname, category cat)
4456 FIXME("(%p %s %d) stub\n", this, locname, cat);
4457 return NULL;
4460 /* ??0locale@std@@QAE@W4_Uninitialized@1@@Z */
4461 /* ??0locale@std@@QEAA@W4_Uninitialized@1@@Z */
4462 DEFINE_THISCALL_WRAPPER(locale_ctor_uninitialized, 8)
4463 locale* __thiscall locale_ctor_uninitialized(locale *this, int uninitialized)
4465 TRACE("(%p)\n", this);
4466 this->ptr = NULL;
4467 return this;
4470 /* ??0locale@std@@QAE@XZ */
4471 /* ??0locale@std@@QEAA@XZ */
4472 DEFINE_THISCALL_WRAPPER(locale_ctor, 4)
4473 locale* __thiscall locale_ctor(locale *this)
4475 TRACE("(%p)\n", this);
4476 this->ptr = locale__Init();
4477 locale_facet__Incref(&this->ptr->facet);
4478 return this;
4481 /* ??1locale@std@@QAE@XZ */
4482 /* ??1locale@std@@QEAA@XZ */
4483 DEFINE_THISCALL_WRAPPER(locale_dtor, 4)
4484 void __thiscall locale_dtor(locale *this)
4486 TRACE("(%p)\n", this);
4487 if(this->ptr)
4488 locale__Locimp_dtor(this->ptr);
4491 DEFINE_THISCALL_WRAPPER(MSVCP_locale_vector_dtor, 8)
4492 locale* __thiscall MSVCP_locale_vector_dtor(locale *this, unsigned int flags)
4494 TRACE("(%p %x)\n", this, flags);
4495 if(flags & 2) {
4496 /* we have an array, with the number of elements stored before the first object */
4497 int i, *ptr = (int *)this-1;
4499 for(i=*ptr-1; i>=0; i--)
4500 locale_dtor(this+i);
4501 MSVCRT_operator_delete(ptr);
4502 } else {
4503 locale_dtor(this);
4504 if(flags & 1)
4505 MSVCRT_operator_delete(this);
4508 return this;
4511 /* ??4locale@std@@QAEAAV01@ABV01@@Z */
4512 /* ??4locale@std@@QEAAAEAV01@AEBV01@@Z */
4513 DEFINE_THISCALL_WRAPPER(locale_operator_assign, 8)
4514 locale* __thiscall locale_operator_assign(locale *this, const locale *loc)
4516 FIXME("(%p %p) stub\n", this, loc);
4517 return NULL;
4520 /* ??8locale@std@@QBE_NABV01@@Z */
4521 /* ??8locale@std@@QEBA_NAEBV01@@Z */
4522 DEFINE_THISCALL_WRAPPER(locale_operator_equal, 8)
4523 MSVCP_bool __thiscall locale_operator_equal(const locale *this, const locale *loc)
4525 FIXME("(%p %p) stub\n", this, loc);
4526 return 0;
4529 /* ??9locale@std@@QBE_NABV01@@Z */
4530 /* ??9locale@std@@QEBA_NAEBV01@@Z */
4531 DEFINE_THISCALL_WRAPPER(locale_operator_not_equal, 8)
4532 MSVCP_bool __thiscall locale_operator_not_equal(const locale *this, locale const *loc)
4534 FIXME("(%p %p) stub\n", this, loc);
4535 return 0;
4538 /* ?_Addfac@locale@std@@QAEAAV12@PAVfacet@12@II@Z */
4539 /* ?_Addfac@locale@std@@QEAAAEAV12@PEAVfacet@12@_K1@Z */
4540 DEFINE_THISCALL_WRAPPER(locale__Addfac, 16)
4541 locale* __thiscall locale__Addfac(locale *this, locale_facet *facet, MSVCP_size_t id, MSVCP_size_t catmask)
4543 TRACE("(%p %p %lu %lu)\n", this, facet, id, catmask);
4545 if(this->ptr->facet.refs > 1) {
4546 locale__Locimp *new_ptr = MSVCRT_operator_new(sizeof(locale__Locimp));
4547 if(!new_ptr) {
4548 ERR("Out of memory\n");
4549 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
4550 return NULL;
4552 locale__Locimp_copy_ctor(new_ptr, this->ptr);
4553 locale_facet__Decref(&this->ptr->facet);
4554 this->ptr = new_ptr;
4557 locale__Locimp__Addfac(this->ptr, facet, id);
4559 if(catmask) {
4560 MSVCP_basic_string_char_dtor(&this->ptr->name);
4561 MSVCP_basic_string_char_ctor_cstr(&this->ptr->name, "*");
4563 return this;
4566 /* ?_Getfacet@locale@std@@QBEPBVfacet@12@I@Z */
4567 /* ?_Getfacet@locale@std@@QEBAPEBVfacet@12@_K@Z */
4568 DEFINE_THISCALL_WRAPPER(locale__Getfacet, 8)
4569 const locale_facet* __thiscall locale__Getfacet(const locale *this, MSVCP_size_t id)
4571 locale_facet *fac;
4573 TRACE("(%p %lu)\n", this, id);
4575 fac = id < this->ptr->facet_cnt ? this->ptr->facetvec[id] : NULL;
4576 if(fac || !this->ptr->transparent)
4577 return fac;
4579 return id < global_locale->facet_cnt ? global_locale->facetvec[id] : NULL;
4582 /* ?_Getgloballocale@locale@std@@CAPAV_Locimp@12@XZ */
4583 /* ?_Getgloballocale@locale@std@@CAPEAV_Locimp@12@XZ */
4584 locale__Locimp* __cdecl locale__Getgloballocale(void)
4586 TRACE("\n");
4587 return global_locale;
4590 /* ?_Setgloballocale@locale@std@@CAXPAX@Z */
4591 /* ?_Setgloballocale@locale@std@@CAXPEAX@Z */
4592 void __cdecl locale__Setgloballocale(void *locimp)
4594 TRACE("(%p)\n", locimp);
4595 global_locale = locimp;
4598 /* ?classic@locale@std@@SAABV12@XZ */
4599 /* ?classic@locale@std@@SAAEBV12@XZ */
4600 const locale* __cdecl locale_classic(void)
4602 TRACE("\n");
4603 locale__Init();
4604 return &classic_locale;
4607 /* ?name@locale@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4608 /* ?name@locale@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4609 DEFINE_THISCALL_WRAPPER(locale_name, 8)
4610 basic_string_char* __thiscall locale_name(const locale *this, basic_string_char *ret)
4612 TRACE( "(%p)\n", this);
4613 MSVCP_basic_string_char_copy_ctor(ret, &this->ptr->name);
4614 return ret;
4617 DEFINE_RTTI_DATA(locale_facet, 0, 0, NULL, NULL, NULL, ".?AVfacet@locale@std@@");
4618 DEFINE_RTTI_DATA(collate_char, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$collate@D@std@@");
4619 DEFINE_RTTI_DATA(collate_wchar, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$collate@_W@std@@");
4620 DEFINE_RTTI_DATA(collate_short, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$collate@G@std@@");
4621 DEFINE_RTTI_DATA(ctype_base, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AUctype_base@std@@");
4622 DEFINE_RTTI_DATA(ctype_char, 0, 2, &ctype_base_rtti_base_descriptor, &locale_facet_rtti_base_descriptor, NULL, ".?AV?$ctype@D@std@@");
4623 DEFINE_RTTI_DATA(ctype_wchar, 0, 2, &ctype_base_rtti_base_descriptor, &locale_facet_rtti_base_descriptor, NULL, ".?AV?$ctype@_W@std@@");
4624 DEFINE_RTTI_DATA(ctype_short, 0, 2, &ctype_base_rtti_base_descriptor, &locale_facet_rtti_base_descriptor, NULL, ".?AV?$ctype@G@std@@");
4625 DEFINE_RTTI_DATA(codecvt_base, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AVcodecvt_base@std@@");
4626 DEFINE_RTTI_DATA(codecvt_char, 0, 2, &codecvt_base_rtti_base_descriptor, &locale_facet_rtti_base_descriptor, NULL, ".?AV?$codecvt@DDH@std@@");
4627 DEFINE_RTTI_DATA(numpunct_char, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$numpunct@D@std@@");
4628 DEFINE_RTTI_DATA(numpunct_wchar, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$numpunct@_W@std@@");
4629 DEFINE_RTTI_DATA(numpunct_short, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$numpunct@G@std@@");
4630 DEFINE_RTTI_DATA(num_get_char, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@");
4631 DEFINE_RTTI_DATA(num_get_wchar, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@");
4632 DEFINE_RTTI_DATA(num_get_short, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@");
4634 #ifndef __GNUC__
4635 void __asm_dummy_vtables(void) {
4636 #endif
4637 __ASM_VTABLE(locale_facet, "");
4638 __ASM_VTABLE(collate_char,
4639 VTABLE_ADD_FUNC(collate_char_do_compare)
4640 VTABLE_ADD_FUNC(collate_char_do_transform)
4641 VTABLE_ADD_FUNC(collate_char_do_hash));
4642 __ASM_VTABLE(collate_wchar,
4643 VTABLE_ADD_FUNC(collate_wchar_do_compare)
4644 VTABLE_ADD_FUNC(collate_wchar_do_transform)
4645 VTABLE_ADD_FUNC(collate_wchar_do_hash));
4646 __ASM_VTABLE(collate_short,
4647 VTABLE_ADD_FUNC(collate_wchar_do_compare)
4648 VTABLE_ADD_FUNC(collate_wchar_do_transform)
4649 VTABLE_ADD_FUNC(collate_wchar_do_hash));
4650 __ASM_VTABLE(ctype_base, "");
4651 __ASM_VTABLE(ctype_char,
4652 VTABLE_ADD_FUNC(ctype_char_do_tolower)
4653 VTABLE_ADD_FUNC(ctype_char_do_tolower_ch)
4654 VTABLE_ADD_FUNC(ctype_char_do_toupper)
4655 VTABLE_ADD_FUNC(ctype_char_do_toupper_ch)
4656 VTABLE_ADD_FUNC(ctype_char_do_widen)
4657 VTABLE_ADD_FUNC(ctype_char_do_widen_ch)
4658 VTABLE_ADD_FUNC(ctype_char__Do_widen_s)
4659 VTABLE_ADD_FUNC(ctype_char_do_narrow)
4660 VTABLE_ADD_FUNC(ctype_char_do_narrow_ch)
4661 VTABLE_ADD_FUNC(ctype_char__Do_narrow_s));
4662 __ASM_VTABLE(ctype_wchar,
4663 VTABLE_ADD_FUNC(ctype_wchar_do_is)
4664 VTABLE_ADD_FUNC(ctype_wchar_do_is_ch)
4665 VTABLE_ADD_FUNC(ctype_wchar_do_scan_is)
4666 VTABLE_ADD_FUNC(ctype_wchar_do_scan_not)
4667 VTABLE_ADD_FUNC(ctype_wchar_do_tolower)
4668 VTABLE_ADD_FUNC(ctype_wchar_do_tolower_ch)
4669 VTABLE_ADD_FUNC(ctype_wchar_do_toupper)
4670 VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch)
4671 VTABLE_ADD_FUNC(ctype_wchar_do_widen)
4672 VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch)
4673 VTABLE_ADD_FUNC(ctype_wchar__Do_widen_s)
4674 VTABLE_ADD_FUNC(ctype_wchar_do_narrow)
4675 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch)
4676 VTABLE_ADD_FUNC(ctype_wchar__Do_narrow_s));
4677 __ASM_VTABLE(ctype_short,
4678 VTABLE_ADD_FUNC(ctype_wchar_do_is)
4679 VTABLE_ADD_FUNC(ctype_wchar_do_is_ch)
4680 VTABLE_ADD_FUNC(ctype_wchar_do_scan_is)
4681 VTABLE_ADD_FUNC(ctype_wchar_do_scan_not)
4682 VTABLE_ADD_FUNC(ctype_wchar_do_tolower)
4683 VTABLE_ADD_FUNC(ctype_wchar_do_tolower_ch)
4684 VTABLE_ADD_FUNC(ctype_wchar_do_toupper)
4685 VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch)
4686 VTABLE_ADD_FUNC(ctype_wchar_do_widen)
4687 VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch)
4688 VTABLE_ADD_FUNC(ctype_wchar__Do_widen_s)
4689 VTABLE_ADD_FUNC(ctype_wchar_do_narrow)
4690 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch)
4691 VTABLE_ADD_FUNC(ctype_wchar__Do_narrow_s));
4692 __ASM_VTABLE(codecvt_base,
4693 VTABLE_ADD_FUNC(codecvt_base_do_always_noconv)
4694 VTABLE_ADD_FUNC(codecvt_base_do_max_length)
4695 VTABLE_ADD_FUNC(codecvt_base_do_encoding));
4696 __ASM_VTABLE(codecvt_char,
4697 VTABLE_ADD_FUNC(codecvt_base_do_always_noconv)
4698 VTABLE_ADD_FUNC(codecvt_base_do_max_length)
4699 VTABLE_ADD_FUNC(codecvt_base_do_encoding)
4700 VTABLE_ADD_FUNC(codecvt_char_do_in)
4701 VTABLE_ADD_FUNC(codecvt_char_do_out)
4702 VTABLE_ADD_FUNC(codecvt_char_do_unshift)
4703 VTABLE_ADD_FUNC(codecvt_char_do_length));
4704 __ASM_VTABLE(numpunct_char,
4705 VTABLE_ADD_FUNC(numpunct_char_do_decimal_point)
4706 VTABLE_ADD_FUNC(numpunct_char_do_thousands_sep)
4707 VTABLE_ADD_FUNC(numpunct_char_do_grouping)
4708 VTABLE_ADD_FUNC(numpunct_char_do_falsename)
4709 VTABLE_ADD_FUNC(numpunct_char_do_truename));
4710 __ASM_VTABLE(numpunct_wchar,
4711 VTABLE_ADD_FUNC(numpunct_wchar_do_decimal_point)
4712 VTABLE_ADD_FUNC(numpunct_wchar_do_thousands_sep)
4713 VTABLE_ADD_FUNC(numpunct_wchar_do_grouping)
4714 VTABLE_ADD_FUNC(numpunct_wchar_do_falsename)
4715 VTABLE_ADD_FUNC(numpunct_wchar_do_truename));
4716 __ASM_VTABLE(numpunct_short,
4717 VTABLE_ADD_FUNC(numpunct_wchar_do_decimal_point)
4718 VTABLE_ADD_FUNC(numpunct_wchar_do_thousands_sep)
4719 VTABLE_ADD_FUNC(numpunct_wchar_do_grouping)
4720 VTABLE_ADD_FUNC(numpunct_wchar_do_falsename)
4721 VTABLE_ADD_FUNC(numpunct_wchar_do_truename));
4722 __ASM_VTABLE(num_get_char,
4723 VTABLE_ADD_FUNC(num_get_char_do_get_void)
4724 VTABLE_ADD_FUNC(num_get_char_do_get_double)
4725 VTABLE_ADD_FUNC(num_get_char_do_get_double)
4726 VTABLE_ADD_FUNC(num_get_char_do_get_float)
4727 VTABLE_ADD_FUNC(num_get_char_do_get_uint64)
4728 VTABLE_ADD_FUNC(num_get_char_do_get_int64)
4729 VTABLE_ADD_FUNC(num_get_char_do_get_ulong)
4730 VTABLE_ADD_FUNC(num_get_char_do_get_long)
4731 VTABLE_ADD_FUNC(num_get_char_do_get_uint)
4732 VTABLE_ADD_FUNC(num_get_char_do_get_ushort)
4733 VTABLE_ADD_FUNC(num_get_char_do_get_bool));
4734 __ASM_VTABLE(num_get_short,
4735 VTABLE_ADD_FUNC(num_get_wchar_do_get_void)
4736 VTABLE_ADD_FUNC(num_get_wchar_do_get_double)
4737 VTABLE_ADD_FUNC(num_get_wchar_do_get_double)
4738 VTABLE_ADD_FUNC(num_get_wchar_do_get_float)
4739 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint64)
4740 VTABLE_ADD_FUNC(num_get_wchar_do_get_int64)
4741 VTABLE_ADD_FUNC(num_get_wchar_do_get_ulong)
4742 VTABLE_ADD_FUNC(num_get_wchar_do_get_long)
4743 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint)
4744 VTABLE_ADD_FUNC(num_get_wchar_do_get_ushort)
4745 VTABLE_ADD_FUNC(num_get_wchar_do_get_bool));
4746 __ASM_VTABLE(num_get_wchar,
4747 VTABLE_ADD_FUNC(num_get_wchar_do_get_void)
4748 VTABLE_ADD_FUNC(num_get_wchar_do_get_double)
4749 VTABLE_ADD_FUNC(num_get_wchar_do_get_double)
4750 VTABLE_ADD_FUNC(num_get_wchar_do_get_float)
4751 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint64)
4752 VTABLE_ADD_FUNC(num_get_wchar_do_get_int64)
4753 VTABLE_ADD_FUNC(num_get_wchar_do_get_ulong)
4754 VTABLE_ADD_FUNC(num_get_wchar_do_get_long)
4755 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint)
4756 VTABLE_ADD_FUNC(num_get_wchar_do_get_ushort)
4757 VTABLE_ADD_FUNC(num_get_wchar_do_get_bool));
4758 #ifndef __GNUC__
4760 #endif
4762 void free_locale(void)
4764 facets_elem *iter, *safe;
4766 if(global_locale) {
4767 locale__Locimp_dtor(global_locale);
4768 locale_dtor(&classic_locale);
4771 LIST_FOR_EACH_ENTRY_SAFE(iter, safe, &lazy_facets, facets_elem, entry) {
4772 list_remove(&iter->entry);
4773 if(locale_facet__Decref(iter->fac))
4774 call_locale_facet_vector_dtor(iter->fac, 1);
4775 MSVCRT_operator_delete(iter);