msvcp90: Added codecvt_base class implementation.
[wine/multimedia.git] / dlls / msvcp90 / locale.c
bloba1cfd1c91adfad637b600a9f3ce41969a6baf7f9
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 "windef.h"
29 #include "winbase.h"
30 #include "winnls.h"
31 #include "wine/unicode.h"
32 #include "wine/debug.h"
33 WINE_DEFAULT_DEBUG_CHANNEL(msvcp90);
35 char* __cdecl _Getdays(void);
36 char* __cdecl _Getmonths(void);
37 void* __cdecl _Gettnames(void);
38 unsigned int __cdecl ___lc_codepage_func(void);
39 LCID* __cdecl ___lc_handle_func(void);
41 typedef int category;
43 typedef struct {
44 MSVCP_size_t id;
45 } locale_id;
47 typedef struct {
48 const vtable_ptr *vtable;
49 MSVCP_size_t refs;
50 } locale_facet;
52 typedef struct _locale__Locimp {
53 locale_facet facet;
54 locale_facet **facetvec;
55 MSVCP_size_t facet_cnt;
56 category catmask;
57 MSVCP_bool transparent;
58 basic_string_char name;
59 } locale__Locimp;
61 typedef struct {
62 void *timeptr;
63 } _Timevec;
65 typedef struct {
66 _Lockit lock;
67 basic_string_char days;
68 basic_string_char months;
69 basic_string_char oldlocname;
70 basic_string_char newlocname;
71 } _Locinfo;
73 typedef struct {
74 LCID handle;
75 unsigned page;
76 } _Collvec;
78 typedef struct {
79 LCID handle;
80 unsigned page;
81 const short *table;
82 int delfl;
83 } _Ctypevec;
85 typedef struct {
86 LCID handle;
87 unsigned page;
88 } _Cvtvec;
90 typedef struct {
91 locale_facet facet;
92 _Collvec coll;
93 } collate;
95 typedef struct {
96 locale_facet facet;
97 } ctype_base;
99 typedef struct {
100 ctype_base base;
101 _Ctypevec ctype;
102 } ctype_char;
104 typedef struct {
105 ctype_base base;
106 _Ctypevec ctype;
107 _Cvtvec cvt;
108 } ctype_wchar;
110 typedef struct {
111 locale_facet facet;
112 } codecvt_base;
114 typedef struct {
115 locale_facet facet;
116 const char *grouping;
117 char dp;
118 char sep;
119 const char *false_name;
120 const char *true_name;
121 } numpunct_char;
123 typedef struct {
124 locale_facet facet;
125 const char *grouping;
126 wchar_t dp;
127 wchar_t sep;
128 const wchar_t *false_name;
129 const wchar_t *true_name;
130 } numpunct_wchar;
132 typedef struct {
133 locale_facet facet;
134 _Cvtvec cvt;
135 } num_get;
137 struct _ios_base;
138 typedef struct _istreambuf_iterator_char
140 struct _basic_streambuf_char *strbuf;
141 MSVCP_bool got;
142 char val;
143 } istreambuf_iterator_char;
145 typedef struct _istreambuf_iterator_wchar
147 struct _basic_streambuf_wchar *strbuf;
148 MSVCP_bool got;
149 wchar_t val;
150 } istreambuf_iterator_wchar;
152 /* ?_Id_cnt@id@locale@std@@0HA */
153 int locale_id__Id_cnt = 0;
155 /* ?_Clocptr@_Locimp@locale@std@@0PAV123@A */
156 /* ?_Clocptr@_Locimp@locale@std@@0PEAV123@EA */
157 locale__Locimp *locale__Locimp__Clocptr = NULL;
159 /* ??1facet@locale@std@@UAE@XZ */
160 /* ??1facet@locale@std@@UEAA@XZ */
161 DEFINE_THISCALL_WRAPPER(locale_facet_dtor, 4)
162 void __thiscall locale_facet_dtor(locale_facet *this)
164 TRACE("(%p)\n", this);
167 DEFINE_THISCALL_WRAPPER(MSVCP_locale_facet_vector_dtor, 8)
168 #define call_locale_facet_vector_dtor(this, flags) CALL_VTBL_FUNC(this, 0, \
169 locale_facet*, (locale_facet*, unsigned int), (this, flags))
170 locale_facet* __thiscall MSVCP_locale_facet_vector_dtor(locale_facet *this, unsigned int flags)
172 TRACE("(%p %x)\n", this, flags);
173 if(flags & 2) {
174 /* we have an array, with the number of elements stored before the first object */
175 int i, *ptr = (int *)this-1;
177 for(i=*ptr-1; i>=0; i--)
178 locale_facet_dtor(this+i);
179 MSVCRT_operator_delete(ptr);
180 } else {
181 locale_facet_dtor(this);
182 if(flags & 1)
183 MSVCRT_operator_delete(this);
186 return this;
189 extern const vtable_ptr MSVCP_locale_facet_vtable;
191 /* ??0id@locale@std@@QAE@I@Z */
192 /* ??0id@locale@std@@QEAA@_K@Z */
193 DEFINE_THISCALL_WRAPPER(locale_id_ctor_id, 8)
194 locale_id* __thiscall locale_id_ctor_id(locale_id *this, MSVCP_size_t id)
196 TRACE("(%p %lu)\n", this, id);
198 this->id = id;
199 return this;
202 /* ??_Fid@locale@std@@QAEXXZ */
203 /* ??_Fid@locale@std@@QEAAXXZ */
204 DEFINE_THISCALL_WRAPPER(locale_id_ctor, 4)
205 locale_id* __thiscall locale_id_ctor(locale_id *this)
207 TRACE("(%p)\n", this);
209 this->id = 0;
210 return this;
213 /* ??Bid@locale@std@@QAEIXZ */
214 /* ??Bid@locale@std@@QEAA_KXZ */
215 DEFINE_THISCALL_WRAPPER(locale_id_operator_size_t, 4)
216 MSVCP_size_t __thiscall locale_id_operator_size_t(locale_id *this)
218 _Lockit lock;
220 TRACE("(%p)\n", this);
222 if(!this->id) {
223 _Lockit_ctor_locktype(&lock, _LOCK_LOCALE);
224 this->id = ++locale_id__Id_cnt;
225 _Lockit_dtor(&lock);
228 return this->id;
231 /* ?_Id_cnt_func@id@locale@std@@CAAAHXZ */
232 /* ?_Id_cnt_func@id@locale@std@@CAAEAHXZ */
233 int* __cdecl locale_id__Id_cnt_func(void)
235 TRACE("\n");
236 return &locale_id__Id_cnt;
239 /* ??_Ffacet@locale@std@@QAEXXZ */
240 /* ??_Ffacet@locale@std@@QEAAXXZ */
241 DEFINE_THISCALL_WRAPPER(locale_facet_ctor, 4)
242 locale_facet* __thiscall locale_facet_ctor(locale_facet *this)
244 TRACE("(%p)\n", this);
245 this->vtable = &MSVCP_locale_facet_vtable;
246 this->refs = 0;
247 return this;
250 /* ??0facet@locale@std@@IAE@I@Z */
251 /* ??0facet@locale@std@@IEAA@_K@Z */
252 DEFINE_THISCALL_WRAPPER(locale_facet_ctor_refs, 8)
253 locale_facet* __thiscall locale_facet_ctor_refs(locale_facet *this, MSVCP_size_t refs)
255 TRACE("(%p %lu)\n", this, refs);
256 this->vtable = &MSVCP_locale_facet_vtable;
257 this->refs = refs;
258 return this;
261 /* ?_Incref@facet@locale@std@@QAEXXZ */
262 /* ?_Incref@facet@locale@std@@QEAAXXZ */
263 DEFINE_THISCALL_WRAPPER(locale_facet__Incref, 4)
264 void __thiscall locale_facet__Incref(locale_facet *this)
266 _Lockit lock;
268 TRACE("(%p)\n", this);
270 _Lockit_ctor_locktype(&lock, _LOCK_LOCALE);
271 this->refs++;
272 _Lockit_dtor(&lock);
275 /* ?_Decref@facet@locale@std@@QAEPAV123@XZ */
276 /* ?_Decref@facet@locale@std@@QEAAPEAV123@XZ */
277 DEFINE_THISCALL_WRAPPER(locale_facet__Decref, 4)
278 locale_facet* __thiscall locale_facet__Decref(locale_facet *this)
280 _Lockit lock;
281 locale_facet *ret;
283 TRACE("(%p)\n", this);
285 _Lockit_ctor_locktype(&lock, _LOCK_LOCALE);
286 if(this->refs)
287 this->refs--;
289 ret = this->refs ? NULL : this;
290 _Lockit_dtor(&lock);
292 return ret;
295 /* ?_Getcat@facet@locale@std@@SAIPAPBV123@PBV23@@Z */
296 /* ?_Getcat@facet@locale@std@@SA_KPEAPEBV123@PEBV23@@Z */
297 MSVCP_size_t __cdecl locale_facet__Getcat(const locale_facet **facet, const locale *loc)
299 TRACE("(%p %p)\n", facet, loc);
300 return -1;
303 /* ??0_Timevec@std@@QAE@ABV01@@Z */
304 /* ??0_Timevec@std@@QEAA@AEBV01@@Z */
305 /* This copy constructor modifies copied object */
306 DEFINE_THISCALL_WRAPPER(_Timevec_copy_ctor, 8)
307 _Timevec* __thiscall _Timevec_copy_ctor(_Timevec *this, _Timevec *copy)
309 TRACE("(%p %p)\n", this, copy);
310 this->timeptr = copy->timeptr;
311 copy->timeptr = NULL;
312 return this;
315 /* ??0_Timevec@std@@QAE@PAX@Z */
316 /* ??0_Timevec@std@@QEAA@PEAX@Z */
317 DEFINE_THISCALL_WRAPPER(_Timevec_ctor_timeptr, 8)
318 _Timevec* __thiscall _Timevec_ctor_timeptr(_Timevec *this, void *timeptr)
320 TRACE("(%p %p)\n", this, timeptr);
321 this->timeptr = timeptr;
322 return this;
325 /* ??_F_Timevec@std@@QAEXXZ */
326 /* ??_F_Timevec@std@@QEAAXXZ */
327 DEFINE_THISCALL_WRAPPER(_Timevec_ctor, 4)
328 _Timevec* __thiscall _Timevec_ctor(_Timevec *this)
330 TRACE("(%p)\n", this);
331 this->timeptr = NULL;
332 return this;
335 /* ??1_Timevec@std@@QAE@XZ */
336 /* ??1_Timevec@std@@QEAA@XZ */
337 DEFINE_THISCALL_WRAPPER(_Timevec_dtor, 4)
338 void __thiscall _Timevec_dtor(_Timevec *this)
340 TRACE("(%p)\n", this);
341 free(this->timeptr);
344 /* ??4_Timevec@std@@QAEAAV01@ABV01@@Z */
345 /* ??4_Timevec@std@@QEAAAEAV01@AEBV01@@Z */
346 DEFINE_THISCALL_WRAPPER(_Timevec_op_assign, 8)
347 _Timevec* __thiscall _Timevec_op_assign(_Timevec *this, _Timevec *right)
349 TRACE("(%p %p)\n", this, right);
350 this->timeptr = right->timeptr;
351 right->timeptr = NULL;
352 return this;
355 /* ?_Getptr@_Timevec@std@@QBEPAXXZ */
356 /* ?_Getptr@_Timevec@std@@QEBAPEAXXZ */
357 DEFINE_THISCALL_WRAPPER(_Timevec__Getptr, 4)
358 void* __thiscall _Timevec__Getptr(_Timevec *this)
360 TRACE("(%p)\n", this);
361 return this->timeptr;
364 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@HPBD@Z */
365 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@HPEBD@Z */
366 _Locinfo* __cdecl _Locinfo__Locinfo_ctor_cat_cstr(_Locinfo *locinfo, int category, const char *locstr)
368 const char *locale = NULL;
370 /* This function is probably modifying more global objects */
371 FIXME("(%p %d %s) semi-stub\n", locinfo, category, locstr);
373 if(!locstr)
374 throw_exception(EXCEPTION_RUNTIME_ERROR, "bad locale name");
376 _Lockit_ctor_locktype(&locinfo->lock, _LOCK_LOCALE);
377 MSVCP_basic_string_char_ctor_cstr(&locinfo->days, "");
378 MSVCP_basic_string_char_ctor_cstr(&locinfo->months, "");
379 MSVCP_basic_string_char_ctor_cstr(&locinfo->oldlocname, setlocale(LC_ALL, NULL));
381 if(category)
382 locale = setlocale(LC_ALL, locstr);
383 else
384 locale = setlocale(LC_ALL, NULL);
386 if(locale)
387 MSVCP_basic_string_char_ctor_cstr(&locinfo->newlocname, locale);
388 else
389 MSVCP_basic_string_char_ctor_cstr(&locinfo->newlocname, "*");
391 return locinfo;
394 /* ??0_Locinfo@std@@QAE@HPBD@Z */
395 /* ??0_Locinfo@std@@QEAA@HPEBD@Z */
396 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cat_cstr, 12)
397 _Locinfo* __thiscall _Locinfo_ctor_cat_cstr(_Locinfo *this, int category, const char *locstr)
399 return _Locinfo__Locinfo_ctor_cat_cstr(this, category, locstr);
402 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
403 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
404 _Locinfo* __cdecl _Locinfo__Locinfo_ctor_bstr(_Locinfo *locinfo, const basic_string_char *locstr)
406 return _Locinfo__Locinfo_ctor_cat_cstr(locinfo, 1/*FIXME*/, MSVCP_basic_string_char_c_str(locstr));
409 /* ??0_Locinfo@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z */
410 /* ??0_Locinfo@std@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z */
411 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_bstr, 8)
412 _Locinfo* __thiscall _Locinfo_ctor_bstr(_Locinfo *this, const basic_string_char *locstr)
414 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, MSVCP_basic_string_char_c_str(locstr));
417 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@PBD@Z */
418 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@PEBD@Z */
419 _Locinfo* __cdecl _Locinfo__Locinfo_ctor_cstr(_Locinfo *locinfo, const char *locstr)
421 return _Locinfo__Locinfo_ctor_cat_cstr(locinfo, 1/*FIXME*/, locstr);
424 /* ??0_Locinfo@std@@QAE@PBD@Z */
425 /* ??0_Locinfo@std@@QEAA@PEBD@Z */
426 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cstr, 8)
427 _Locinfo* __thiscall _Locinfo_ctor_cstr(_Locinfo *this, const char *locstr)
429 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, locstr);
432 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPAV12@@Z */
433 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPEAV12@@Z */
434 void __cdecl _Locinfo__Locinfo_dtor(_Locinfo *locinfo)
436 TRACE("(%p)\n", locinfo);
438 setlocale(LC_ALL, MSVCP_basic_string_char_c_str(&locinfo->oldlocname));
439 MSVCP_basic_string_char_dtor(&locinfo->days);
440 MSVCP_basic_string_char_dtor(&locinfo->months);
441 MSVCP_basic_string_char_dtor(&locinfo->oldlocname);
442 MSVCP_basic_string_char_dtor(&locinfo->newlocname);
443 _Lockit_dtor(&locinfo->lock);
446 /* ??_F_Locinfo@std@@QAEXXZ */
447 /* ??_F_Locinfo@std@@QEAAXXZ */
448 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor, 4)
449 _Locinfo* __thiscall _Locinfo_ctor(_Locinfo *this)
451 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, "C");
454 /* ??1_Locinfo@std@@QAE@XZ */
455 /* ??1_Locinfo@std@@QEAA@XZ */
456 DEFINE_THISCALL_WRAPPER(_Locinfo_dtor, 4)
457 void __thiscall _Locinfo_dtor(_Locinfo *this)
459 _Locinfo__Locinfo_dtor(this);
462 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAAV12@PAV12@HPBD@Z */
463 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAEAV12@PEAV12@HPEBD@Z */
464 _Locinfo* __cdecl _Locinfo__Locinfo_Addcats(_Locinfo *locinfo, int category, const char *locstr)
466 const char *locale = NULL;
468 /* This function is probably modifying more global objects */
469 FIXME("(%p %d %s) semi-stub\n", locinfo, category, locstr);
470 if(!locstr)
471 throw_exception(EXCEPTION_RUNTIME_ERROR, "bad locale name");
473 MSVCP_basic_string_char_dtor(&locinfo->newlocname);
475 if(category)
476 locale = setlocale(LC_ALL, locstr);
477 else
478 locale = setlocale(LC_ALL, NULL);
480 if(locale)
481 MSVCP_basic_string_char_ctor_cstr(&locinfo->newlocname, locale);
482 else
483 MSVCP_basic_string_char_ctor_cstr(&locinfo->newlocname, "*");
485 return locinfo;
488 /* ?_Addcats@_Locinfo@std@@QAEAAV12@HPBD@Z */
489 /* ?_Addcats@_Locinfo@std@@QEAAAEAV12@HPEBD@Z */
490 DEFINE_THISCALL_WRAPPER(_Locinfo__Addcats, 12)
491 _Locinfo* __thiscall _Locinfo__Addcats(_Locinfo *this, int category, const char *locstr)
493 return _Locinfo__Locinfo_Addcats(this, category, locstr);
496 /* _Getcoll */
497 _Collvec __cdecl _Getcoll(void)
499 _Collvec ret;
500 _locale_t locale = _get_current_locale();
502 TRACE("\n");
504 ret.page = locale->locinfo->lc_collate_cp;
505 ret.handle = locale->locinfo->lc_handle[LC_COLLATE];
506 _free_locale(locale);
507 return ret;
510 /* ?_Getcoll@_Locinfo@std@@QBE?AU_Collvec@@XZ */
511 /* ?_Getcoll@_Locinfo@std@@QEBA?AU_Collvec@@XZ */
512 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcoll, 8)
513 _Collvec* __thiscall _Locinfo__Getcoll(const _Locinfo *this, _Collvec *ret)
515 *ret = _Getcoll();
516 return ret;
519 /* _Getctype */
520 _Ctypevec __cdecl _Getctype(void)
522 _Ctypevec ret;
523 _locale_t locale = _get_current_locale();
524 short *table;
526 TRACE("\n");
528 ret.page = locale->locinfo->lc_codepage;
529 ret.handle = locale->locinfo->lc_handle[LC_COLLATE];
530 ret.delfl = TRUE;
531 table = malloc(sizeof(short[256]));
532 if(!table) {
533 _free_locale(locale);
534 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
536 memcpy(table, locale->locinfo->pctype, sizeof(short[256]));
537 ret.table = table;
538 _free_locale(locale);
539 return ret;
542 /* ?_Getctype@_Locinfo@std@@QBE?AU_Ctypevec@@XZ */
543 /* ?_Getctype@_Locinfo@std@@QEBA?AU_Ctypevec@@XZ */
544 DEFINE_THISCALL_WRAPPER(_Locinfo__Getctype, 8)
545 _Ctypevec* __thiscall _Locinfo__Getctype(const _Locinfo *this, _Ctypevec *ret)
547 *ret = _Getctype();
548 return ret;
551 /* _Getcvt */
552 _Cvtvec __cdecl _Getcvt(void)
554 _Cvtvec ret;
555 _locale_t locale = _get_current_locale();
557 TRACE("\n");
559 ret.page = locale->locinfo->lc_codepage;
560 ret.handle = locale->locinfo->lc_handle[LC_CTYPE];
561 _free_locale(locale);
562 return ret;
565 /* ?_Getcvt@_Locinfo@std@@QBE?AU_Cvtvec@@XZ */
566 /* ?_Getcvt@_Locinfo@std@@QEBA?AU_Cvtvec@@XZ */
567 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcvt, 8)
568 _Cvtvec* __thiscall _Locinfo__Getcvt(const _Locinfo *this, _Cvtvec *ret)
570 *ret = _Getcvt();
571 return ret;
574 /* ?_Getdateorder@_Locinfo@std@@QBEHXZ */
575 /* ?_Getdateorder@_Locinfo@std@@QEBAHXZ */
576 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdateorder, 4)
577 int __thiscall _Locinfo__Getdateorder(const _Locinfo *this)
579 FIXME("(%p) stub\n", this);
580 return 0;
583 /* ?_Getdays@_Locinfo@std@@QBEPBDXZ */
584 /* ?_Getdays@_Locinfo@std@@QEBAPEBDXZ */
585 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdays, 4)
586 const char* __thiscall _Locinfo__Getdays(_Locinfo *this)
588 char *days = _Getdays();
590 TRACE("(%p)\n", this);
592 if(days) {
593 MSVCP_basic_string_char_dtor(&this->days);
594 MSVCP_basic_string_char_ctor_cstr(&this->days, days);
595 free(days);
598 return this->days.size ? MSVCP_basic_string_char_c_str(&this->days) :
599 ":Sun:Sunday:Mon:Monday:Tue:Tuesday:Wed:Wednesday:Thu:Thursday:Fri:Friday:Sat:Saturday";
602 /* ?_Getmonths@_Locinfo@std@@QBEPBDXZ */
603 /* ?_Getmonths@_Locinfo@std@@QEBAPEBDXZ */
604 DEFINE_THISCALL_WRAPPER(_Locinfo__Getmonths, 4)
605 const char* __thiscall _Locinfo__Getmonths(_Locinfo *this)
607 char *months = _Getmonths();
609 TRACE("(%p)\n", this);
611 if(months) {
612 MSVCP_basic_string_char_dtor(&this->months);
613 MSVCP_basic_string_char_ctor_cstr(&this->months, months);
614 free(months);
617 return this->months.size ? MSVCP_basic_string_char_c_str(&this->months) :
618 ":Jan:January:Feb:February:Mar:March:Apr:April:May:May:Jun:June:Jul:July"
619 ":Aug:August:Sep:September:Oct:October:Nov:November:Dec:December";
622 /* ?_Getfalse@_Locinfo@std@@QBEPBDXZ */
623 /* ?_Getfalse@_Locinfo@std@@QEBAPEBDXZ */
624 DEFINE_THISCALL_WRAPPER(_Locinfo__Getfalse, 4)
625 const char* __thiscall _Locinfo__Getfalse(const _Locinfo *this)
627 TRACE("(%p)\n", this);
628 return "false";
631 /* ?_Gettrue@_Locinfo@std@@QBEPBDXZ */
632 /* ?_Gettrue@_Locinfo@std@@QEBAPEBDXZ */
633 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettrue, 4)
634 const char* __thiscall _Locinfo__Gettrue(const _Locinfo *this)
636 TRACE("(%p)\n", this);
637 return "true";
640 /* ?_Getlconv@_Locinfo@std@@QBEPBUlconv@@XZ */
641 /* ?_Getlconv@_Locinfo@std@@QEBAPEBUlconv@@XZ */
642 DEFINE_THISCALL_WRAPPER(_Locinfo__Getlconv, 4)
643 const struct lconv* __thiscall _Locinfo__Getlconv(const _Locinfo *this)
645 TRACE("(%p)\n", this);
646 return localeconv();
649 /* ?_Getname@_Locinfo@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
650 /* ?_Getname@_Locinfo@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
651 DEFINE_THISCALL_WRAPPER(_Locinfo__Getname, 8)
652 basic_string_char* __thiscall _Locinfo__Getname(const _Locinfo *this, basic_string_char *ret)
654 TRACE("(%p)\n", this);
656 MSVCP_basic_string_char_copy_ctor(ret, &this->newlocname);
657 return ret;
660 /* ?_Gettnames@_Locinfo@std@@QBE?AV_Timevec@2@XZ */
661 /* ?_Gettnames@_Locinfo@std@@QEBA?AV_Timevec@2@XZ */
662 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettnames, 8)
663 _Timevec*__thiscall _Locinfo__Gettnames(const _Locinfo *this, _Timevec *ret)
665 TRACE("(%p)\n", this);
667 _Timevec_ctor_timeptr(ret, _Gettnames());
668 return ret;
671 /* ?id@?$collate@D@std@@2V0locale@2@A */
672 locale_id collate_char_id = {0};
674 /* ??_7?$collate@D@std@@6B@ */
675 extern const vtable_ptr MSVCP_collate_char_vtable;
677 /* ?_Init@?$collate@D@std@@IAEXABV_Locinfo@2@@Z */
678 /* ?_Init@?$collate@D@std@@IEAAXAEBV_Locinfo@2@@Z */
679 DEFINE_THISCALL_WRAPPER(collate_char__Init, 8)
680 void __thiscall collate_char__Init(collate *this, const _Locinfo *locinfo)
682 TRACE("(%p %p)\n", this, locinfo);
683 _Locinfo__Getcoll(locinfo, &this->coll);
686 /* ??0?$collate@D@std@@IAE@PBDI@Z */
687 /* ??0?$collate@D@std@@IEAA@PEBD_K@Z */
688 DEFINE_THISCALL_WRAPPER(collate_char_ctor_name, 12)
689 collate* __thiscall collate_char_ctor_name(collate *this, const char *name, MSVCP_size_t refs)
691 _Locinfo locinfo;
693 TRACE("(%p %s %lu)\n", this, name, refs);
695 locale_facet_ctor_refs(&this->facet, refs);
696 this->facet.vtable = &MSVCP_collate_char_vtable;
698 _Locinfo_ctor_cstr(&locinfo, name);
699 collate_char__Init(this, &locinfo);
700 _Locinfo_dtor(&locinfo);
701 return this;
704 /* ??0?$collate@D@std@@QAE@ABV_Locinfo@1@I@Z */
705 /* ??0?$collate@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
706 DEFINE_THISCALL_WRAPPER(collate_char_ctor_locinfo, 12)
707 collate* __thiscall collate_char_ctor_locinfo(collate *this, _Locinfo *locinfo, MSVCP_size_t refs)
709 TRACE("(%p %p %lu)\n", this, locinfo, refs);
711 locale_facet_ctor_refs(&this->facet, refs);
712 this->facet.vtable = &MSVCP_collate_char_vtable;
713 collate_char__Init(this, locinfo);
714 return this;
717 /* ??0?$collate@D@std@@QAE@I@Z */
718 /* ??0?$collate@D@std@@QEAA@_K@Z */
719 DEFINE_THISCALL_WRAPPER(collate_char_ctor_refs, 8)
720 collate* __thiscall collate_char_ctor_refs(collate *this, MSVCP_size_t refs)
722 return collate_char_ctor_name(this, "C", refs);
725 /* ??1?$collate@D@std@@MAE@XZ */
726 /* ??1?$collate@D@std@@MEAA@XZ */
727 DEFINE_THISCALL_WRAPPER(collate_char_dtor, 4)
728 void __thiscall collate_char_dtor(collate *this)
730 TRACE("(%p)\n", this);
733 DEFINE_THISCALL_WRAPPER(MSVCP_collate_char_vector_dtor, 8)
734 collate* __thiscall MSVCP_collate_char_vector_dtor(collate *this, unsigned int flags)
736 TRACE("(%p %x)\n", this, flags);
737 if(flags & 2) {
738 /* we have an array, with the number of elements stored before the first object */
739 int i, *ptr = (int *)this-1;
741 for(i=*ptr-1; i>=0; i--)
742 collate_char_dtor(this+i);
743 MSVCRT_operator_delete(ptr);
744 } else {
745 collate_char_dtor(this);
746 if(flags & 1)
747 MSVCRT_operator_delete(this);
750 return this;
753 /* ??_F?$collate@D@std@@QAEXXZ */
754 /* ??_F?$collate@D@std@@QEAAXXZ */
755 DEFINE_THISCALL_WRAPPER(collate_char_ctor, 4)
756 collate* __thiscall collate_char_ctor(collate *this)
758 return collate_char_ctor_name(this, "C", 0);
761 /* ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
762 /* ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
763 MSVCP_size_t __cdecl collate_char__Getcat(const locale_facet **facet, const locale *loc)
765 TRACE("(%p %p)\n", facet, loc);
767 if(facet && !*facet) {
768 *facet = MSVCRT_operator_new(sizeof(collate));
769 if(!*facet) {
770 ERR("Out of memory\n");
771 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
772 return 0;
774 collate_char_ctor_name((collate*)*facet,
775 MSVCP_basic_string_char_c_str(&loc->ptr->name), 0);
778 return LC_COLLATE;
781 /* _Strcoll */
782 int __cdecl _Strcoll(const char *first1, const char *last1, const char *first2,
783 const char *last2, const _Collvec *coll)
785 LCID lcid;
787 TRACE("(%s %s)\n", debugstr_an(first1, last1-first1), debugstr_an(first2, last2-first2));
789 if(coll)
790 lcid = coll->handle;
791 else
792 lcid = ___lc_handle_func()[LC_COLLATE];
793 return CompareStringA(lcid, 0, first1, last1-first1, first2, last2-first2)-2;
796 /* ?do_compare@?$collate@D@std@@MBEHPBD000@Z */
797 /* ?do_compare@?$collate@D@std@@MEBAHPEBD000@Z */
798 DEFINE_THISCALL_WRAPPER(collate_char_do_compare, 20)
799 #define call_collate_char_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 4, int, \
800 (const collate*, const char*, const char*, const char*, const char*), \
801 (this, first1, last1, first2, last2))
802 int __thiscall collate_char_do_compare(const collate *this, const char *first1,
803 const char *last1, const char *first2, const char *last2)
805 TRACE("(%p %p %p %p %p)\n", this, first1, last1, first2, last2);
806 return _Strcoll(first1, last1, first2, last2, &this->coll);
809 /* ?compare@?$collate@D@std@@QBEHPBD000@Z */
810 /* ?compare@?$collate@D@std@@QEBAHPEBD000@Z */
811 DEFINE_THISCALL_WRAPPER(collate_char_compare, 20)
812 int __thiscall collate_char_compare(const collate *this, const char *first1,
813 const char *last1, const char *first2, const char *last2)
815 TRACE("(%p %p %p %p %p)\n", this, first1, last1, first2, last2);
816 return call_collate_char_do_compare(this, first1, last1, first2, last2);
819 /* ?do_hash@?$collate@D@std@@MBEJPBD0@Z */
820 /* ?do_hash@?$collate@D@std@@MEBAJPEBD0@Z */
821 DEFINE_THISCALL_WRAPPER(collate_char_do_hash, 12)
822 #define call_collate_char_do_hash(this, first, last) CALL_VTBL_FUNC(this, 12, LONG, \
823 (const collate*, const char*, const char*), (this, first, last))
824 LONG __thiscall collate_char_do_hash(const collate *this,
825 const char *first, const char *last)
827 ULONG ret = 0;
829 TRACE("(%p %p %p)\n", this, first, last);
831 for(; first<last; first++)
832 ret = (ret<<8 | ret>>24) + *first;
833 return ret;
836 /* ?hash@?$collate@D@std@@QBEJPBD0@Z */
837 /* ?hash@?$collate@D@std@@QEBAJPEBD0@Z */
838 DEFINE_THISCALL_WRAPPER(collate_char_hash, 12)
839 LONG __thiscall collate_char_hash(const collate *this,
840 const char *first, const char *last)
842 TRACE("(%p %p %p)\n", this, first, last);
843 return call_collate_char_do_hash(this, first, last);
846 /* ?do_transform@?$collate@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
847 /* ?do_transform@?$collate@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
848 DEFINE_THISCALL_WRAPPER(collate_char_do_transform, 16)
849 basic_string_char* __thiscall collate_char_do_transform(const collate *this,
850 basic_string_char *ret, const char *first, const char *last)
852 FIXME("(%p %p %p) stub\n", this, first, last);
853 return ret;
856 /* ?transform@?$collate@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
857 /* ?transform@?$collate@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
858 DEFINE_THISCALL_WRAPPER(collate_char_transform, 16)
859 basic_string_char* __thiscall collate_char_transform(const collate *this,
860 basic_string_char *ret, const char *first, const char *last)
862 FIXME("(%p %p %p) stub\n", this, first, last);
863 return ret;
866 /* ?id@?$collate@_W@std@@2V0locale@2@A */
867 locale_id collate_wchar_id = {0};
868 /* ?id@?$collate@G@std@@2V0locale@2@A */
869 locale_id collate_short_id = {0};
871 /* ??_7?$collate@_W@std@@6B@ */
872 extern const vtable_ptr MSVCP_collate_wchar_vtable;
873 /* ??_7?$collate@G@std@@6B@ */
874 extern const vtable_ptr MSVCP_collate_short_vtable;
876 /* ?_Init@?$collate@_W@std@@IAEXABV_Locinfo@2@@Z */
877 /* ?_Init@?$collate@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
878 /* ?_Init@?$collate@G@std@@IAEXABV_Locinfo@2@@Z */
879 /* ?_Init@?$collate@G@std@@IEAAXAEBV_Locinfo@2@@Z */
880 DEFINE_THISCALL_WRAPPER(collate_wchar__Init, 8)
881 void __thiscall collate_wchar__Init(collate *this, const _Locinfo *locinfo)
883 TRACE("(%p %p)\n", this, locinfo);
884 _Locinfo__Getcoll(locinfo, &this->coll);
887 /* ??0?$collate@_W@std@@IAE@PBDI@Z */
888 /* ??0?$collate@_W@std@@IEAA@PEBD_K@Z */
889 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_name, 12)
890 collate* __thiscall collate_wchar_ctor_name(collate *this, const char *name, MSVCP_size_t refs)
892 _Locinfo locinfo;
894 TRACE("(%p %s %lu)\n", this, name, refs);
896 locale_facet_ctor_refs(&this->facet, refs);
897 this->facet.vtable = &MSVCP_collate_wchar_vtable;
899 _Locinfo_ctor_cstr(&locinfo, name);
900 collate_wchar__Init(this, &locinfo);
901 _Locinfo_dtor(&locinfo);
902 return this;
905 /* ??0?$collate@G@std@@IAE@PBDI@Z */
906 /* ??0?$collate@G@std@@IEAA@PEBD_K@Z */
907 DEFINE_THISCALL_WRAPPER(collate_short_ctor_name, 12)
908 collate* __thiscall collate_short_ctor_name(collate *this, const char *name, MSVCP_size_t refs)
910 collate *ret = collate_wchar_ctor_name(this, name, refs);
911 ret->facet.vtable = &MSVCP_collate_short_vtable;
912 return ret;
915 /* ??0?$collate@_W@std@@QAE@ABV_Locinfo@1@I@Z */
916 /* ??0?$collate@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
917 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_locinfo, 12)
918 collate* __thiscall collate_wchar_ctor_locinfo(collate *this, _Locinfo *locinfo, MSVCP_size_t refs)
920 TRACE("(%p %p %lu)\n", this, locinfo, refs);
922 locale_facet_ctor_refs(&this->facet, refs);
923 this->facet.vtable = &MSVCP_collate_wchar_vtable;
924 collate_wchar__Init(this, locinfo);
925 return this;
928 /* ??0?$collate@G@std@@QAE@ABV_Locinfo@1@I@Z */
929 /* ??0?$collate@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
930 DEFINE_THISCALL_WRAPPER(collate_short_ctor_locinfo, 12)
931 collate* __thiscall collate_short_ctor_locinfo(collate *this, _Locinfo *locinfo, MSVCP_size_t refs)
933 collate *ret = collate_wchar_ctor_locinfo(this, locinfo, refs);
934 ret->facet.vtable = &MSVCP_collate_short_vtable;
935 return ret;
938 /* ??0?$collate@_W@std@@QAE@I@Z */
939 /* ??0?$collate@_W@std@@QEAA@_K@Z */
940 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_refs, 8)
941 collate* __thiscall collate_wchar_ctor_refs(collate *this, MSVCP_size_t refs)
943 return collate_wchar_ctor_name(this, "C", refs);
946 /* ??0?$collate@G@std@@QAE@I@Z */
947 /* ??0?$collate@G@std@@QEAA@_K@Z */
948 DEFINE_THISCALL_WRAPPER(collate_short_ctor_refs, 8)
949 collate* __thiscall collate_short_ctor_refs(collate *this, MSVCP_size_t refs)
951 collate *ret = collate_wchar_ctor_refs(this, refs);
952 ret->facet.vtable = &MSVCP_collate_short_vtable;
953 return ret;
956 /* ??1?$collate@_W@std@@MAE@XZ */
957 /* ??1?$collate@_W@std@@MEAA@XZ */
958 /* ??1?$collate@G@std@@MAE@XZ */
959 /* ??1?$collate@G@std@@MEAA@XZ */
960 DEFINE_THISCALL_WRAPPER(collate_wchar_dtor, 4)
961 void __thiscall collate_wchar_dtor(collate *this)
963 TRACE("(%p)\n", this);
966 DEFINE_THISCALL_WRAPPER(MSVCP_collate_wchar_vector_dtor, 8)
967 collate* __thiscall MSVCP_collate_wchar_vector_dtor(collate *this, unsigned int flags)
969 TRACE("(%p %x)\n", this, flags);
970 if(flags & 2) {
971 /* we have an array, with the number of elements stored before the first object */
972 int i, *ptr = (int *)this-1;
974 for(i=*ptr-1; i>=0; i--)
975 collate_wchar_dtor(this+i);
976 MSVCRT_operator_delete(ptr);
977 } else {
978 collate_wchar_dtor(this);
979 if(flags & 1)
980 MSVCRT_operator_delete(this);
983 return this;
986 DEFINE_THISCALL_WRAPPER(MSVCP_collate_short_vector_dtor, 8)
987 collate* __thiscall MSVCP_collate_short_vector_dtor(collate *this, unsigned int flags)
989 return MSVCP_collate_wchar_vector_dtor(this, flags);
992 /* ??_F?$collate@_W@std@@QAEXXZ */
993 /* ??_F?$collate@_W@std@@QEAAXXZ */
994 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor, 4)
995 collate* __thiscall collate_wchar_ctor(collate *this)
997 return collate_wchar_ctor_name(this, "C", 0);
1000 /* ??_F?$collate@G@std@@QAEXXZ */
1001 /* ??_F?$collate@G@std@@QEAAXXZ */
1002 DEFINE_THISCALL_WRAPPER(collate_short_ctor, 4)
1003 collate* __thiscall collate_short_ctor(collate *this)
1005 collate *ret = collate_wchar_ctor(this);
1006 ret->facet.vtable = &MSVCP_collate_short_vtable;
1007 return ret;
1010 /* ?_Getcat@?$collate@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1011 /* ?_Getcat@?$collate@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1012 MSVCP_size_t __cdecl collate_wchar__Getcat(const locale_facet **facet, const locale *loc)
1014 TRACE("(%p %p)\n", facet, loc);
1016 if(facet && !*facet) {
1017 *facet = MSVCRT_operator_new(sizeof(collate));
1018 if(!*facet) {
1019 ERR("Out of memory\n");
1020 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
1021 return 0;
1023 collate_wchar_ctor_name((collate*)*facet,
1024 MSVCP_basic_string_char_c_str(&loc->ptr->name), 0);
1027 return LC_COLLATE;
1030 /* ?_Getcat@?$collate@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1031 /* ?_Getcat@?$collate@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1032 MSVCP_size_t __cdecl collate_short__Getcat(const locale_facet **facet, const locale *loc)
1034 if(facet && !*facet) {
1035 collate_wchar__Getcat(facet, loc);
1036 (*(locale_facet**)facet)->vtable = &MSVCP_collate_short_vtable;
1039 return LC_COLLATE;
1042 /* _Wcscoll */
1043 int __cdecl _Wcscoll(const wchar_t *first1, const wchar_t *last1, const wchar_t *first2,
1044 const wchar_t *last2, const _Collvec *coll)
1046 LCID lcid;
1048 TRACE("(%s %s)\n", debugstr_wn(first1, last1-first1), debugstr_wn(first2, last2-first2));
1050 if(coll)
1051 lcid = coll->handle;
1052 else
1053 lcid = ___lc_handle_func()[LC_COLLATE];
1054 return CompareStringW(lcid, 0, first1, last1-first1, first2, last2-first2)-2;
1057 /* ?do_compare@?$collate@_W@std@@MBEHPB_W000@Z */
1058 /* ?do_compare@?$collate@_W@std@@MEBAHPEB_W000@Z */
1059 /* ?do_compare@?$collate@G@std@@MBEHPBG000@Z */
1060 /* ?do_compare@?$collate@G@std@@MEBAHPEBG000@Z */
1061 DEFINE_THISCALL_WRAPPER(collate_wchar_do_compare, 20)
1062 #define call_collate_wchar_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 4, int, \
1063 (const collate*, const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*), \
1064 (this, first1, last1, first2, last2))
1065 int __thiscall collate_wchar_do_compare(const collate *this, const wchar_t *first1,
1066 const wchar_t *last1, const wchar_t *first2, const wchar_t *last2)
1068 TRACE("(%p %p %p %p %p)\n", this, first1, last1, first2, last2);
1069 return _Wcscoll(first1, last1, first2, last2, &this->coll);
1072 /* ?compare@?$collate@_W@std@@QBEHPB_W000@Z */
1073 /* ?compare@?$collate@_W@std@@QEBAHPEB_W000@Z */
1074 /* ?compare@?$collate@G@std@@QBEHPBG000@Z */
1075 /* ?compare@?$collate@G@std@@QEBAHPEBG000@Z */
1076 DEFINE_THISCALL_WRAPPER(collate_wchar_compare, 20)
1077 int __thiscall collate_wchar_compare(const collate *this, const wchar_t *first1,
1078 const wchar_t *last1, const wchar_t *first2, const wchar_t *last2)
1080 TRACE("(%p %p %p %p %p)\n", this, first1, last1, first2, last2);
1081 return call_collate_wchar_do_compare(this, first1, last1, first2, last2);
1084 /* ?do_hash@?$collate@_W@std@@MBEJPB_W0@Z */
1085 /* ?do_hash@?$collate@_W@std@@MEBAJPEB_W0@Z */
1086 /* ?do_hash@?$collate@G@std@@MBEJPBG0@Z */
1087 /* ?do_hash@?$collate@G@std@@MEBAJPEBG0@Z */
1088 DEFINE_THISCALL_WRAPPER(collate_wchar_do_hash, 12)
1089 #define call_collate_wchar_do_hash(this, first, last) CALL_VTBL_FUNC(this, 12, LONG, \
1090 (const collate*, const wchar_t*, const wchar_t*), (this, first, last))
1091 LONG __thiscall collate_wchar_do_hash(const collate *this,
1092 const wchar_t *first, const wchar_t *last)
1094 ULONG ret = 0;
1096 TRACE("(%p %p %p)\n", this, first, last);
1098 for(; first<last; first++)
1099 ret = (ret<<8 | ret>>24) + *first;
1100 return ret;
1103 /* ?hash@?$collate@_W@std@@QBEJPB_W0@Z */
1104 /* ?hash@?$collate@_W@std@@QEBAJPEB_W0@Z */
1105 /* ?hash@?$collate@G@std@@QBEJPBG0@Z */
1106 /* ?hash@?$collate@G@std@@QEBAJPEBG0@Z */
1107 DEFINE_THISCALL_WRAPPER(collate_wchar_hash, 12)
1108 LONG __thiscall collate_wchar_hash(const collate *this,
1109 const wchar_t *first, const wchar_t *last)
1111 TRACE("(%p %p %p)\n", this, first, last);
1112 return call_collate_wchar_do_hash(this, first, last);
1115 /* ?do_transform@?$collate@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
1116 /* ?do_transform@?$collate@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
1117 /* ?do_transform@?$collate@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
1118 /* ?do_transform@?$collate@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
1119 DEFINE_THISCALL_WRAPPER(collate_wchar_do_transform, 16)
1120 basic_string_wchar* __thiscall collate_wchar_do_transform(const collate *this,
1121 basic_string_wchar *ret, const wchar_t *first, const wchar_t *last)
1123 FIXME("(%p %p %p) stub\n", this, first, last);
1124 return ret;
1127 /* ?transform@?$collate@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
1128 /* ?transform@?$collate@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
1129 /* ?transform@?$collate@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
1130 /* ?transform@?$collate@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
1131 DEFINE_THISCALL_WRAPPER(collate_wchar_transform, 16)
1132 basic_string_wchar* __thiscall collate_wchar_transform(const collate *this,
1133 basic_string_wchar *ret, const wchar_t *first, const wchar_t *last)
1135 FIXME("(%p %p %p) stub\n", this, first, last);
1136 return ret;
1139 /* ??_7ctype_base@std@@6B@ */
1140 extern const vtable_ptr MSVCP_ctype_base_vtable;
1142 /* ??0ctype_base@std@@QAE@I@Z */
1143 /* ??0ctype_base@std@@QEAA@_K@Z */
1144 DEFINE_THISCALL_WRAPPER(ctype_base_ctor_refs, 8)
1145 ctype_base* __thiscall ctype_base_ctor_refs(ctype_base *this, MSVCP_size_t refs)
1147 TRACE("(%p %lu)\n", this, refs);
1148 locale_facet_ctor_refs(&this->facet, refs);
1149 this->facet.vtable = &MSVCP_ctype_base_vtable;
1150 return this;
1153 /* ??_Fctype_base@std@@QAEXXZ */
1154 /* ??_Fctype_base@std@@QEAAXXZ */
1155 DEFINE_THISCALL_WRAPPER(ctype_base_ctor, 4)
1156 ctype_base* __thiscall ctype_base_ctor(ctype_base *this)
1158 TRACE("(%p)\n", this);
1159 locale_facet_ctor_refs(&this->facet, 0);
1160 this->facet.vtable = &MSVCP_ctype_base_vtable;
1161 return this;
1164 /* ??1ctype_base@std@@UAE@XZ */
1165 /* ??1ctype_base@std@@UEAA@XZ */
1166 DEFINE_THISCALL_WRAPPER(ctype_base_dtor, 4)
1167 void __thiscall ctype_base_dtor(ctype_base *this)
1169 TRACE("(%p)\n", this);
1172 DEFINE_THISCALL_WRAPPER(MSVCP_ctype_base_vector_dtor, 8)
1173 ctype_base* __thiscall MSVCP_ctype_base_vector_dtor(ctype_base *this, unsigned int flags)
1175 TRACE("(%p %x)\n", this, flags);
1176 if(flags & 2) {
1177 /* we have an array, with the number of elements stored before the first object */
1178 int i, *ptr = (int *)this-1;
1180 for(i=*ptr-1; i>=0; i--)
1181 ctype_base_dtor(this+i);
1182 MSVCRT_operator_delete(ptr);
1183 } else {
1184 ctype_base_dtor(this);
1185 if(flags & 1)
1186 MSVCRT_operator_delete(this);
1189 return this;
1192 /* ?_Xran@ctype_base@std@@KAXXZ */
1193 void __cdecl ctype_base__Xran(void)
1195 throw_exception(EXCEPTION_OUT_OF_RANGE, "out of range in ctype<T>");
1198 /* ?id@?$ctype@D@std@@2V0locale@2@A */
1199 locale_id ctype_char_id = {0};
1200 /* ?table_size@?$ctype@D@std@@2IB */
1201 /* ?table_size@?$ctype@D@std@@2_KB */
1202 MSVCP_size_t ctype_char_table_size = 256;
1204 /* ??_7?$ctype@D@std@@6B@ */
1205 extern const vtable_ptr MSVCP_ctype_char_vtable;
1207 /* ?_Id_func@?$ctype@D@std@@SAAAVid@locale@2@XZ */
1208 /* ?_Id_func@?$ctype@D@std@@SAAEAVid@locale@2@XZ */
1209 locale_id* __cdecl ctype_char__Id_func(void)
1211 TRACE("()\n");
1212 return &ctype_char_id;
1215 /* ?_Init@?$ctype@D@std@@IAEXABV_Locinfo@2@@Z */
1216 /* ?_Init@?$ctype@D@std@@IEAAXAEBV_Locinfo@2@@Z */
1217 DEFINE_THISCALL_WRAPPER(ctype_char__Init, 8)
1218 void __thiscall ctype_char__Init(ctype_char *this, _Locinfo *locinfo)
1220 TRACE("(%p %p)\n", this, locinfo);
1221 _Locinfo__Getctype(locinfo, &this->ctype);
1224 /* ?_Tidy@?$ctype@D@std@@IAEXXZ */
1225 /* ?_Tidy@?$ctype@D@std@@IEAAXXZ */
1226 DEFINE_THISCALL_WRAPPER(ctype_char__Tidy, 4)
1227 void __thiscall ctype_char__Tidy(ctype_char *this)
1229 TRACE("(%p)\n", this);
1231 if(this->ctype.delfl)
1232 free((short*)this->ctype.table);
1235 /* ?classic_table@?$ctype@D@std@@KAPBFXZ */
1236 /* ?classic_table@?$ctype@D@std@@KAPEBFXZ */
1237 const short* __cdecl ctype_char_classic_table(void)
1239 TRACE("()\n");
1240 return &((short*)GetProcAddress(GetModuleHandleA("msvcrt.dll"), "_ctype"))[1];
1243 /* ??0?$ctype@D@std@@QAE@ABV_Locinfo@1@I@Z */
1244 /* ??0?$ctype@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1245 DEFINE_THISCALL_WRAPPER(ctype_char_ctor_locinfo, 12)
1246 ctype_char* __thiscall ctype_char_ctor_locinfo(ctype_char *this,
1247 _Locinfo *locinfo, MSVCP_size_t refs)
1249 TRACE("(%p %p %lu)\n", this, locinfo, refs);
1250 ctype_base_ctor_refs(&this->base, refs);
1251 this->base.facet.vtable = &MSVCP_ctype_char_vtable;
1252 ctype_char__Init(this, locinfo);
1253 return this;
1256 /* ??0?$ctype@D@std@@QAE@PBF_NI@Z */
1257 /* ??0?$ctype@D@std@@QEAA@PEBF_N_K@Z */
1258 DEFINE_THISCALL_WRAPPER(ctype_char_ctor_table, 16)
1259 ctype_char* __thiscall ctype_char_ctor_table(ctype_char *this,
1260 const short *table, MSVCP_bool delete, MSVCP_size_t refs)
1262 _Locinfo locinfo;
1264 TRACE("(%p %p %d %lu)\n", this, table, delete, refs);
1266 ctype_base_ctor_refs(&this->base, refs);
1267 this->base.facet.vtable = &MSVCP_ctype_char_vtable;
1269 _Locinfo_ctor(&locinfo);
1270 ctype_char__Init(this, &locinfo);
1271 _Locinfo_dtor(&locinfo);
1273 if(table) {
1274 ctype_char__Tidy(this);
1275 this->ctype.table = table;
1276 this->ctype.delfl = delete;
1278 return this;
1281 /* ??_F?$ctype@D@std@@QAEXXZ */
1282 /* ??_F?$ctype@D@std@@QEAAXXZ */
1283 DEFINE_THISCALL_WRAPPER(ctype_char_ctor, 4)
1284 ctype_char* __thiscall ctype_char_ctor(ctype_char *this)
1286 return ctype_char_ctor_table(this, NULL, FALSE, 0);
1289 /* ??1?$ctype@D@std@@MAE@XZ */
1290 /* ??1?$ctype@D@std@@MEAA@XZ */
1291 DEFINE_THISCALL_WRAPPER(ctype_char_dtor, 4)
1292 void __thiscall ctype_char_dtor(ctype_char *this)
1294 TRACE("(%p)\n", this);
1295 ctype_char__Tidy(this);
1298 DEFINE_THISCALL_WRAPPER(MSVCP_ctype_char_vector_dtor, 8)
1299 ctype_char* __thiscall MSVCP_ctype_char_vector_dtor(ctype_char *this, unsigned int flags)
1301 TRACE("(%p %x)\n", this, flags);
1302 if(flags & 2) {
1303 /* we have an array, with the number of elements stored before the first object */
1304 int i, *ptr = (int *)this-1;
1306 for(i=*ptr-1; i>=0; i--)
1307 ctype_char_dtor(this+i);
1308 MSVCRT_operator_delete(ptr);
1309 } else {
1310 ctype_char_dtor(this);
1311 if(flags & 1)
1312 MSVCRT_operator_delete(this);
1315 return this;
1318 /* ?do_narrow@?$ctype@D@std@@MBEDDD@Z */
1319 /* ?do_narrow@?$ctype@D@std@@MEBADDD@Z */
1320 DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow_ch, 12)
1321 #define call_ctype_char_do_narrow_ch(this, ch, unused) CALL_VTBL_FUNC(this, 36, \
1322 char, (const ctype_char*, char, char), (this, ch, unused))
1323 char __thiscall ctype_char_do_narrow_ch(const ctype_char *this, char ch, char unused)
1325 TRACE("(%p %c %c)\n", this, ch, unused);
1326 return ch;
1329 /* ?do_narrow@?$ctype@D@std@@MBEPBDPBD0DPAD@Z */
1330 /* ?do_narrow@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD@Z */
1331 DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow, 20)
1332 #define call_ctype_char_do_narrow(this, first, last, unused, dest) CALL_VTBL_FUNC(this, 32, \
1333 const char*, (const ctype_char*, const char*, const char*, char, char*), \
1334 (this, first, last, unused, dest))
1335 const char* __thiscall ctype_char_do_narrow(const ctype_char *this,
1336 const char *first, const char *last, char unused, char *dest)
1338 TRACE("(%p %p %p %p)\n", this, first, last, dest);
1339 memcpy(dest, first, last-first);
1340 return last;
1343 /* ?_Do_narrow_s@?$ctype@D@std@@MBEPBDPBD0DPADI@Z */
1344 /* ?_Do_narrow_s@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD_K@Z */
1345 DEFINE_THISCALL_WRAPPER(ctype_char__Do_narrow_s, 24)
1346 #define call_ctype_char__Do_narrow_s(this, first, last, unused, dest, size) CALL_VTBL_FUNC(this, 40, \
1347 const char*, (const ctype_char*, const char*, const char*, char, char*, MSVCP_size_t), \
1348 (this, first, last, unused, dest, size))
1349 const char* __thiscall ctype_char__Do_narrow_s(const ctype_char *this, const char *first,
1350 const char *last, char unused, char *dest, MSVCP_size_t size)
1352 TRACE("(%p %p %p %p %lu)\n", this, first, last, dest, size);
1353 memcpy_s(dest, size, first, last-first);
1354 return last;
1357 /* ?narrow@?$ctype@D@std@@QBEDDD@Z */
1358 /* ?narrow@?$ctype@D@std@@QEBADDD@Z */
1359 DEFINE_THISCALL_WRAPPER(ctype_char_narrow_ch, 12)
1360 char __thiscall ctype_char_narrow_ch(const ctype_char *this, char ch, char dflt)
1362 TRACE("(%p %c %c)\n", this, ch, dflt);
1363 return call_ctype_char_do_narrow_ch(this, ch, dflt);
1366 /* ?narrow@?$ctype@D@std@@QBEPBDPBD0DPAD@Z */
1367 /* ?narrow@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD@Z */
1368 DEFINE_THISCALL_WRAPPER(ctype_char_narrow, 20)
1369 const char* __thiscall ctype_char_narrow(const ctype_char *this,
1370 const char *first, const char *last, char dflt, char *dest)
1372 TRACE("(%p %p %p %c %p)\n", this, first, last, dflt, dest);
1373 return call_ctype_char_do_narrow(this, first, last, dflt, dest);
1376 /* ?_Narrow_s@?$ctype@D@std@@QBEPBDPBD0DPADI@Z */
1377 /* ?_Narrow_s@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD_K@Z */
1378 DEFINE_THISCALL_WRAPPER(ctype_char__Narrow_s, 24)
1379 const char* __thiscall ctype_char__Narrow_s(const ctype_char *this, const char *first,
1380 const char *last, char dflt, char *dest, MSVCP_size_t size)
1382 TRACE("(%p %p %p %p %lu)\n", this, first, last, dest, size);
1383 return call_ctype_char__Do_narrow_s(this, first, last, dflt, dest, size);
1386 /* ?do_widen@?$ctype@D@std@@MBEDD@Z */
1387 /* ?do_widen@?$ctype@D@std@@MEBADD@Z */
1388 DEFINE_THISCALL_WRAPPER(ctype_char_do_widen_ch, 8)
1389 #define call_ctype_char_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
1390 char, (const ctype_char*, char), (this, ch))
1391 char __thiscall ctype_char_do_widen_ch(const ctype_char *this, char ch)
1393 TRACE("(%p %c)\n", this, ch);
1394 return ch;
1397 /* ?do_widen@?$ctype@D@std@@MBEPBDPBD0PAD@Z */
1398 /* ?do_widen@?$ctype@D@std@@MEBAPEBDPEBD0PEAD@Z */
1399 DEFINE_THISCALL_WRAPPER(ctype_char_do_widen, 16)
1400 #define call_ctype_char_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 20, \
1401 const char*, (const ctype_char*, const char*, const char*, char*), \
1402 (this, first, last, dest))
1403 const char* __thiscall ctype_char_do_widen(const ctype_char *this,
1404 const char *first, const char *last, char *dest)
1406 TRACE("(%p %p %p %p)\n", this, first, last, dest);
1407 memcpy(dest, first, last-first);
1408 return last;
1411 /* ?_Do_widen_s@?$ctype@D@std@@MBEPBDPBD0PADI@Z */
1412 /* ?_Do_widen_s@?$ctype@D@std@@MEBAPEBDPEBD0PEAD_K@Z */
1413 DEFINE_THISCALL_WRAPPER(ctype_char__Do_widen_s, 20)
1414 #define call_ctype_char__Do_widen_s(this, first, last, dest, size) CALL_VTBL_FUNC(this, 28, \
1415 const char*, (const ctype_char*, const char*, const char*, char*, MSVCP_size_t), \
1416 (this, first, last, dest, size))
1417 const char* __thiscall ctype_char__Do_widen_s(const ctype_char *this,
1418 const char *first, const char *last, char *dest, MSVCP_size_t size)
1420 TRACE("(%p %p %p %p %lu)\n", this, first, last, dest, size);
1421 memcpy_s(dest, size, first, last-first);
1422 return last;
1425 /* ?widen@?$ctype@D@std@@QBEDD@Z */
1426 /* ?widen@?$ctype@D@std@@QEBADD@Z */
1427 DEFINE_THISCALL_WRAPPER(ctype_char_widen_ch, 8)
1428 char __thiscall ctype_char_widen_ch(const ctype_char *this, char ch)
1430 TRACE("(%p %c)\n", this, ch);
1431 return call_ctype_char_do_widen_ch(this, ch);
1434 /* ?widen@?$ctype@D@std@@QBEPBDPBD0PAD@Z */
1435 /* ?widen@?$ctype@D@std@@QEBAPEBDPEBD0PEAD@Z */
1436 DEFINE_THISCALL_WRAPPER(ctype_char_widen, 16)
1437 const char* __thiscall ctype_char_widen(const ctype_char *this,
1438 const char *first, const char *last, char *dest)
1440 TRACE("(%p %p %p %p)\n", this, first, last, dest);
1441 return call_ctype_char_do_widen(this, first, last, dest);
1444 /* ?_Widen_s@?$ctype@D@std@@QBEPBDPBD0PADI@Z */
1445 /* ?_Widen_s@?$ctype@D@std@@QEBAPEBDPEBD0PEAD_K@Z */
1446 DEFINE_THISCALL_WRAPPER(ctype_char__Widen_s, 20)
1447 const char* __thiscall ctype_char__Widen_s(const ctype_char *this,
1448 const char *first, const char *last, char *dest, MSVCP_size_t size)
1450 TRACE("(%p %p %p %p %lu)\n", this, first, last, dest, size);
1451 return call_ctype_char__Do_widen_s(this, first, last, dest, size);
1454 /* ?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1455 /* ?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1456 MSVCP_size_t __cdecl ctype_char__Getcat(const locale_facet **facet, const locale *loc)
1458 TRACE("(%p %p)\n", facet, loc);
1460 if(facet && !*facet) {
1461 _Locinfo locinfo;
1463 *facet = MSVCRT_operator_new(sizeof(ctype_char));
1464 if(!*facet) {
1465 ERR("Out of memory\n");
1466 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
1467 return 0;
1470 _Locinfo_ctor_cstr(&locinfo, MSVCP_basic_string_char_c_str(&loc->ptr->name));
1471 ctype_char_ctor_locinfo((ctype_char*)*facet, &locinfo, 0);
1472 _Locinfo_dtor(&locinfo);
1475 return LC_CTYPE;
1478 /* _Tolower */
1479 int __cdecl _Tolower(int ch, const _Ctypevec *ctype)
1481 unsigned int cp;
1483 TRACE("%d %p\n", ch, ctype);
1485 if(ctype)
1486 cp = ctype->page;
1487 else
1488 cp = ___lc_codepage_func();
1490 /* Don't convert to unicode in case of C locale */
1491 if(!cp) {
1492 if(ch>='A' && ch<='Z')
1493 ch = ch-'A'+'a';
1494 return ch;
1495 } else {
1496 WCHAR wide, lower;
1497 char str[2];
1498 int size;
1500 if(ch > 255) {
1501 str[0] = (ch>>8) & 255;
1502 str[1] = ch & 255;
1503 size = 2;
1504 } else {
1505 str[0] = ch & 255;
1506 size = 1;
1509 if(!MultiByteToWideChar(cp, MB_ERR_INVALID_CHARS, str, size, &wide, 1))
1510 return ch;
1512 lower = tolowerW(wide);
1513 if(lower == wide)
1514 return ch;
1516 WideCharToMultiByte(cp, 0, &lower, 1, str, 2, NULL, NULL);
1518 return str[0] + (str[1]<<8);
1522 /* ?do_tolower@?$ctype@D@std@@MBEDD@Z */
1523 /* ?do_tolower@?$ctype@D@std@@MEBADD@Z */
1524 #define call_ctype_char_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 8, \
1525 char, (const ctype_char*, char), (this, ch))
1526 DEFINE_THISCALL_WRAPPER(ctype_char_do_tolower_ch, 8)
1527 char __thiscall ctype_char_do_tolower_ch(const ctype_char *this, char ch)
1529 TRACE("(%p %c)\n", this, ch);
1530 return _Tolower(ch, &this->ctype);
1533 /* ?do_tolower@?$ctype@D@std@@MBEPBDPADPBD@Z */
1534 /* ?do_tolower@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z */
1535 #define call_ctype_char_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 4, \
1536 const char*, (const ctype_char*, char*, const char*), (this, first, last))
1537 DEFINE_THISCALL_WRAPPER(ctype_char_do_tolower, 12)
1538 const char* __thiscall ctype_char_do_tolower(const ctype_char *this, char *first, const char *last)
1540 TRACE("(%p %p %p)\n", this, first, last);
1541 for(; first<last; first++)
1542 *first = _Tolower(*first, &this->ctype);
1543 return last;
1546 /* ?tolower@?$ctype@D@std@@QBEDD@Z */
1547 /* ?tolower@?$ctype@D@std@@QEBADD@Z */
1548 DEFINE_THISCALL_WRAPPER(ctype_char_tolower_ch, 8)
1549 char __thiscall ctype_char_tolower_ch(const ctype_char *this, char ch)
1551 TRACE("(%p %c)\n", this, ch);
1552 return call_ctype_char_do_tolower_ch(this, ch);
1555 /* ?tolower@?$ctype@D@std@@QBEPBDPADPBD@Z */
1556 /* ?tolower@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z */
1557 DEFINE_THISCALL_WRAPPER(ctype_char_tolower, 12)
1558 const char* __thiscall ctype_char_tolower(const ctype_char *this, char *first, const char *last)
1560 TRACE("(%p %p %p)\n", this, first, last);
1561 return call_ctype_char_do_tolower(this, first, last);
1564 /* _Toupper */
1565 int __cdecl _Toupper(int ch, const _Ctypevec *ctype)
1567 unsigned int cp;
1569 TRACE("%d %p\n", ch, ctype);
1571 if(ctype)
1572 cp = ctype->page;
1573 else
1574 cp = ___lc_codepage_func();
1576 /* Don't convert to unicode in case of C locale */
1577 if(!cp) {
1578 if(ch>='a' && ch<='z')
1579 ch = ch-'a'+'A';
1580 return ch;
1581 } else {
1582 WCHAR wide, upper;
1583 char str[2];
1584 int size;
1586 if(ch > 255) {
1587 str[0] = (ch>>8) & 255;
1588 str[1] = ch & 255;
1589 size = 2;
1590 } else {
1591 str[0] = ch & 255;
1592 size = 1;
1595 if(!MultiByteToWideChar(cp, MB_ERR_INVALID_CHARS, str, size, &wide, 1))
1596 return ch;
1598 upper = toupperW(wide);
1599 if(upper == wide)
1600 return ch;
1602 WideCharToMultiByte(cp, 0, &upper, 1, str, 2, NULL, NULL);
1604 return str[0] + (str[1]<<8);
1608 /* ?do_toupper@?$ctype@D@std@@MBEDD@Z */
1609 /* ?do_toupper@?$ctype@D@std@@MEBADD@Z */
1610 #define call_ctype_char_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 16, \
1611 char, (const ctype_char*, char), (this, ch))
1612 DEFINE_THISCALL_WRAPPER(ctype_char_do_toupper_ch, 8)
1613 char __thiscall ctype_char_do_toupper_ch(const ctype_char *this, char ch)
1615 TRACE("(%p %c)\n", this, ch);
1616 return _Toupper(ch, &this->ctype);
1619 /* ?do_toupper@?$ctype@D@std@@MBEPBDPADPBD@Z */
1620 /* ?do_toupper@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z */
1621 #define call_ctype_char_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 12, \
1622 const char*, (const ctype_char*, char*, const char*), (this, first, last))
1623 DEFINE_THISCALL_WRAPPER(ctype_char_do_toupper, 12)
1624 const char* __thiscall ctype_char_do_toupper(const ctype_char *this,
1625 char *first, const char *last)
1627 TRACE("(%p %p %p)\n", this, first, last);
1628 for(; first<last; first++)
1629 *first = _Toupper(*first, &this->ctype);
1630 return last;
1633 /* ?toupper@?$ctype@D@std@@QBEDD@Z */
1634 /* ?toupper@?$ctype@D@std@@QEBADD@Z */
1635 DEFINE_THISCALL_WRAPPER(ctype_char_toupper_ch, 8)
1636 char __thiscall ctype_char_toupper_ch(const ctype_char *this, char ch)
1638 TRACE("(%p %c)\n", this, ch);
1639 return call_ctype_char_do_toupper_ch(this, ch);
1642 /* ?toupper@?$ctype@D@std@@QBEPBDPADPBD@Z */
1643 /* ?toupper@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z */
1644 DEFINE_THISCALL_WRAPPER(ctype_char_toupper, 12)
1645 const char* __thiscall ctype_char_toupper(const ctype_char *this, char *first, const char *last)
1647 TRACE("(%p %p %p)\n", this, first, last);
1648 return call_ctype_char_do_toupper(this, first, last);
1651 /* ?is@?$ctype@D@std@@QBE_NFD@Z */
1652 /* ?is@?$ctype@D@std@@QEBA_NFD@Z */
1653 DEFINE_THISCALL_WRAPPER(ctype_char_is_ch, 12)
1654 MSVCP_bool __thiscall ctype_char_is_ch(const ctype_char *this, short mask, char ch)
1656 TRACE("(%p %x %c)\n", this, mask, ch);
1657 return (this->ctype.table[(unsigned char)ch] & mask) != 0;
1660 /* ?is@?$ctype@D@std@@QBEPBDPBD0PAF@Z */
1661 /* ?is@?$ctype@D@std@@QEBAPEBDPEBD0PEAF@Z */
1662 DEFINE_THISCALL_WRAPPER(ctype_char_is, 16)
1663 const char* __thiscall ctype_char_is(const ctype_char *this, const char *first, const char *last, short *dest)
1665 TRACE("(%p %p %p %p)\n", this, first, last, dest);
1666 for(; first<last; first++)
1667 *dest++ = this->ctype.table[(unsigned char)*first];
1668 return last;
1671 /* ?scan_is@?$ctype@D@std@@QBEPBDFPBD0@Z */
1672 /* ?scan_is@?$ctype@D@std@@QEBAPEBDFPEBD0@Z */
1673 DEFINE_THISCALL_WRAPPER(ctype_char_scan_is, 16)
1674 const char* __thiscall ctype_char_scan_is(const ctype_char *this, short mask, const char *first, const char *last)
1676 TRACE("(%p %x %p %p)\n", this, mask, first, last);
1677 for(; first<last; first++)
1678 if(!ctype_char_is_ch(this, mask, *first))
1679 break;
1680 return first;
1683 /* ?scan_not@?$ctype@D@std@@QBEPBDFPBD0@Z */
1684 /* ?scan_not@?$ctype@D@std@@QEBAPEBDFPEBD0@Z */
1685 DEFINE_THISCALL_WRAPPER(ctype_char_scan_not, 16)
1686 const char* __thiscall ctype_char_scan_not(const ctype_char *this, short mask, const char *first, const char *last)
1688 TRACE("(%p %x %p %p)\n", this, mask, first, last);
1689 for(; first<last; first++)
1690 if(ctype_char_is_ch(this, mask, *first))
1691 break;
1692 return first;
1695 /* ?table@?$ctype@D@std@@IBEPBFXZ */
1696 /* ?table@?$ctype@D@std@@IEBAPEBFXZ */
1697 DEFINE_THISCALL_WRAPPER(ctype_char_table, 4)
1698 const short* __thiscall ctype_char_table(const ctype_char *this)
1700 TRACE("(%p)\n", this);
1701 return this->ctype.table;
1704 /* ?id@?$ctype@_W@std@@2V0locale@2@A */
1705 locale_id ctype_wchar_id = {0};
1706 /* ?id@?$ctype@G@std@@2V0locale@2@A */
1707 locale_id ctype_short_id = {0};
1709 /* ??_7?$ctype@_W@std@@6B@ */
1710 extern const vtable_ptr MSVCP_ctype_wchar_vtable;
1711 /* ??_7?$ctype@G@std@@6B@ */
1712 extern const vtable_ptr MSVCP_ctype_short_vtable;
1714 /* ?_Id_func@?$ctype@_W@std@@SAAAVid@locale@2@XZ */
1715 /* ?_Id_func@?$ctype@_W@std@@SAAEAVid@locale@2@XZ */
1716 locale_id* __cdecl ctype_wchar__Id_func(void)
1718 TRACE("()\n");
1719 return &ctype_wchar_id;
1722 /* ?_Id_func@?$ctype@G@std@@SAAAVid@locale@2@XZ */
1723 /* ?_Id_func@?$ctype@G@std@@SAAEAVid@locale@2@XZ */
1724 locale_id* __cdecl ctype_short__Id_func(void)
1726 TRACE("()\n");
1727 return &ctype_short_id;
1730 /* ?_Init@?$ctype@_W@std@@IAEXABV_Locinfo@2@@Z */
1731 /* ?_Init@?$ctype@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
1732 /* ?_Init@?$ctype@G@std@@IAEXABV_Locinfo@2@@Z */
1733 /* ?_Init@?$ctype@G@std@@IEAAXAEBV_Locinfo@2@@Z */
1734 DEFINE_THISCALL_WRAPPER(ctype_wchar__Init, 8)
1735 void __thiscall ctype_wchar__Init(ctype_wchar *this, _Locinfo *locinfo)
1737 TRACE("(%p %p)\n", this, locinfo);
1738 _Locinfo__Getctype(locinfo, &this->ctype);
1739 _Locinfo__Getcvt(locinfo, &this->cvt);
1742 /* ??0?$ctype@_W@std@@QAE@ABV_Locinfo@1@I@Z */
1743 /* ??0?$ctype@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1744 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor_locinfo, 12)
1745 ctype_wchar* __thiscall ctype_wchar_ctor_locinfo(ctype_wchar *this,
1746 _Locinfo *locinfo, MSVCP_size_t refs)
1748 TRACE("(%p %p %lu)\n", this, locinfo, refs);
1749 ctype_base_ctor_refs(&this->base, refs);
1750 this->base.facet.vtable = &MSVCP_ctype_wchar_vtable;
1751 ctype_wchar__Init(this, locinfo);
1752 return this;
1755 /* ??0?$ctype@G@std@@QAE@ABV_Locinfo@1@I@Z */
1756 /* ??0?$ctype@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1757 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_locinfo, 12)
1758 ctype_wchar* __thiscall ctype_short_ctor_locinfo(ctype_wchar *this,
1759 _Locinfo *locinfo, MSVCP_size_t refs)
1761 ctype_wchar *ret = ctype_wchar_ctor_locinfo(this, locinfo, refs);
1762 this->base.facet.vtable = &MSVCP_ctype_short_vtable;
1763 return ret;
1766 /* ??0?$ctype@_W@std@@QAE@I@Z */
1767 /* ??0?$ctype@_W@std@@QEAA@_K@Z */
1768 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor_refs, 8)
1769 ctype_wchar* __thiscall ctype_wchar_ctor_refs(ctype_wchar *this, MSVCP_size_t refs)
1771 _Locinfo locinfo;
1773 TRACE("(%p %lu)\n", this, refs);
1775 ctype_base_ctor_refs(&this->base, refs);
1776 this->base.facet.vtable = &MSVCP_ctype_wchar_vtable;
1778 _Locinfo_ctor(&locinfo);
1779 ctype_wchar__Init(this, &locinfo);
1780 _Locinfo_dtor(&locinfo);
1781 return this;
1784 /* ??0?$ctype@G@std@@QAE@I@Z */
1785 /* ??0?$ctype@G@std@@QEAA@_K@Z */
1786 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_refs, 8)
1787 ctype_wchar* __thiscall ctype_short_ctor_refs(ctype_wchar *this, MSVCP_size_t refs)
1789 ctype_wchar *ret = ctype_wchar_ctor_refs(this, refs);
1790 this->base.facet.vtable = &MSVCP_ctype_short_vtable;
1791 return ret;
1794 /* ??0?$ctype@G@std@@IAE@PBDI@Z */
1795 /* ??0?$ctype@G@std@@IEAA@PEBD_K@Z */
1796 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_name, 12)
1797 ctype_wchar* __thiscall ctype_short_ctor_name(ctype_wchar *this,
1798 const char *name, MSVCP_size_t refs)
1800 _Locinfo locinfo;
1802 TRACE("(%p %s %lu)\n", this, debugstr_a(name), refs);
1804 ctype_base_ctor_refs(&this->base, refs);
1805 this->base.facet.vtable = &MSVCP_ctype_short_vtable;
1807 _Locinfo_ctor_cstr(&locinfo, name);
1808 ctype_wchar__Init(this, &locinfo);
1809 _Locinfo_dtor(&locinfo);
1810 return this;
1813 /* ??_F?$ctype@_W@std@@QAEXXZ */
1814 /* ??_F?$ctype@_W@std@@QEAAXXZ */
1815 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor, 4)
1816 ctype_wchar* __thiscall ctype_wchar_ctor(ctype_wchar *this)
1818 TRACE("(%p)\n", this);
1819 return ctype_short_ctor_refs(this, 0);
1822 /* ??_F?$ctype@G@std@@QAEXXZ */
1823 /* ??_F?$ctype@G@std@@QEAAXXZ */
1824 DEFINE_THISCALL_WRAPPER(ctype_short_ctor, 4)
1825 ctype_wchar* __thiscall ctype_short_ctor(ctype_wchar *this)
1827 ctype_wchar *ret = ctype_wchar_ctor(this);
1828 this->base.facet.vtable = &MSVCP_ctype_short_vtable;
1829 return ret;
1832 /* ??1?$ctype@_W@std@@MAE@XZ */
1833 /* ??1?$ctype@_W@std@@MEAA@XZ */
1834 /* ??1?$ctype@G@std@@MAE@XZ */
1835 /* ??1?$ctype@G@std@@MEAA@XZ */
1836 DEFINE_THISCALL_WRAPPER(ctype_wchar_dtor, 4)
1837 void __thiscall ctype_wchar_dtor(ctype_wchar *this)
1839 TRACE("(%p)\n", this);
1840 if(this->ctype.delfl)
1841 free((void*)this->ctype.table);
1844 DEFINE_THISCALL_WRAPPER(MSVCP_ctype_wchar_vector_dtor, 8)
1845 ctype_wchar* __thiscall MSVCP_ctype_wchar_vector_dtor(ctype_wchar *this, unsigned int flags)
1847 TRACE("(%p %x)\n", this, flags);
1848 if(flags & 2) {
1849 /* we have an array, with the number of elements stored before the first object */
1850 int i, *ptr = (int *)this-1;
1852 for(i=*ptr-1; i>=0; i--)
1853 ctype_wchar_dtor(this+i);
1854 MSVCRT_operator_delete(ptr);
1855 } else {
1856 ctype_wchar_dtor(this);
1857 if(flags & 1)
1858 MSVCRT_operator_delete(this);
1861 return this;
1864 DEFINE_THISCALL_WRAPPER(MSVCP_ctype_short_vector_dtor, 8)
1865 ctype_wchar* __thiscall MSVCP_ctype_short_vector_dtor(ctype_wchar *this, unsigned int flags)
1867 return MSVCP_ctype_wchar_vector_dtor(this, flags);
1870 /* _Wcrtomb */
1871 int __cdecl _Wcrtomb(char *s, wchar_t wch, int *state, const _Cvtvec *cvt)
1873 int cp, size;
1874 BOOL def;
1876 TRACE("%p %d %p %p\n", s, wch, state, cvt);
1878 if(cvt)
1879 cp = cvt->page;
1880 else
1881 cp = ___lc_codepage_func();
1883 if(!cp) {
1884 if(wch > 255) {
1885 *_errno() = EILSEQ;
1886 return -1;
1889 *s = wch & 255;
1890 return 1;
1893 size = WideCharToMultiByte(cp, 0, &wch, 1, s, MB_LEN_MAX, NULL, &def);
1894 if(!size || def) {
1895 *_errno() = EILSEQ;
1896 return -1;
1899 return size;
1902 /* ?_Donarrow@?$ctype@_W@std@@IBED_WD@Z */
1903 /* ?_Donarrow@?$ctype@_W@std@@IEBAD_WD@Z */
1904 /* ?_Donarrow@?$ctype@G@std@@IBEDGD@Z */
1905 /* ?_Donarrow@?$ctype@G@std@@IEBADGD@Z */
1906 DEFINE_THISCALL_WRAPPER(ctype_wchar__Donarrow, 12)
1907 char __thiscall ctype_wchar__Donarrow(const ctype_wchar *this, wchar_t ch, char dflt)
1909 char buf[MB_LEN_MAX];
1911 TRACE("(%p %d %d)\n", this, ch, dflt);
1913 return _Wcrtomb(buf, ch, NULL, &this->cvt)==1 ? buf[0] : dflt;
1916 /* ?do_narrow@?$ctype@_W@std@@MBED_WD@Z */
1917 /* ?do_narrow@?$ctype@_W@std@@MEBAD_WD@Z */
1918 /* ?do_narrow@?$ctype@G@std@@MBEDGD@Z */
1919 /* ?do_narrow@?$ctype@G@std@@MEBADGD@Z */
1920 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow_ch, 12)
1921 #define call_ctype_wchar_do_narrow_ch(this, ch, dflt) CALL_VTBL_FUNC(this, 52, \
1922 char, (const ctype_wchar*, wchar_t, char), (this, ch, dflt))
1923 char __thiscall ctype_wchar_do_narrow_ch(const ctype_wchar *this, wchar_t ch, char dflt)
1925 return ctype_wchar__Donarrow(this, ch, dflt);
1928 /* ?do_narrow@?$ctype@_W@std@@MBEPB_WPB_W0DPAD@Z */
1929 /* ?do_narrow@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD@Z */
1930 /* ?do_narrow@?$ctype@G@std@@MBEPBGPBG0DPAD@Z */
1931 /* ?do_narrow@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD@Z */
1932 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow, 20)
1933 #define call_ctype_wchar_do_narrow(this, first, last, dflt, dest) CALL_VTBL_FUNC(this, 48, \
1934 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*), \
1935 (this, first, last, dflt, dest))
1936 const wchar_t* __thiscall ctype_wchar_do_narrow(const ctype_wchar *this,
1937 const wchar_t *first, const wchar_t *last, char dflt, char *dest)
1939 TRACE("(%p %p %p %d %p)\n", this, first, last, dflt, dest);
1940 for(; first<last; first++)
1941 *dest++ = ctype_wchar__Donarrow(this, *first, dflt);
1942 return last;
1945 /* ?_Do_narrow_s@?$ctype@_W@std@@MBEPB_WPB_W0DPADI@Z */
1946 /* ?_Do_narrow_s@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD_K@Z */
1947 /* ?_Do_narrow_s@?$ctype@G@std@@MBEPBGPBG0DPADI@Z */
1948 /* ?_Do_narrow_s@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD_K@Z */
1949 DEFINE_THISCALL_WRAPPER(ctype_wchar__Do_narrow_s, 24)
1950 #define call_ctype_wchar__Do_narrow_s(this, first, last, dflt, dest, size) CALL_VTBL_FUNC(this, 56, \
1951 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*, MSVCP_size_t), \
1952 (this, first, last, dflt, dest, size))
1953 const wchar_t* __thiscall ctype_wchar__Do_narrow_s(const ctype_wchar *this,
1954 const wchar_t *first, const wchar_t *last, char dflt, char *dest, MSVCP_size_t size)
1956 TRACE("(%p %p %p %d %p %lu)\n", this, first, last, dflt, dest, size);
1957 /* This function converts all multi-byte characters to dflt,
1958 * thanks to it result size is known before converting */
1959 if(last-first > size)
1960 ctype_base__Xran();
1961 return ctype_wchar_do_narrow(this, first, last, dflt, dest);
1964 /* ?narrow@?$ctype@_W@std@@QBED_WD@Z */
1965 /* ?narrow@?$ctype@_W@std@@QEBAD_WD@Z */
1966 /* ?narrow@?$ctype@G@std@@QBEDGD@Z */
1967 /* ?narrow@?$ctype@G@std@@QEBADGD@Z */
1968 DEFINE_THISCALL_WRAPPER(ctype_wchar_narrow_ch, 12)
1969 char __thiscall ctype_wchar_narrow_ch(const ctype_wchar *this, wchar_t ch, char dflt)
1971 TRACE("(%p %d %d)\n", this, ch, dflt);
1972 return call_ctype_wchar_do_narrow_ch(this, ch, dflt);
1975 /* ?narrow@?$ctype@_W@std@@QBEPB_WPB_W0DPAD@Z */
1976 /* ?narrow@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD@Z */
1977 /* ?narrow@?$ctype@G@std@@QBEPBGPBG0DPAD@Z */
1978 /* ?narrow@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD@Z */
1979 DEFINE_THISCALL_WRAPPER(ctype_wchar_narrow, 20)
1980 const wchar_t* __thiscall ctype_wchar_narrow(const ctype_wchar *this,
1981 const wchar_t *first, const wchar_t *last, char dflt, char *dest)
1983 TRACE("(%p %p %p %d %p)\n", this, first, last, dflt, dest);
1984 return call_ctype_wchar_do_narrow(this, first, last, dflt, dest);
1987 /* ?_Narrow_s@?$ctype@_W@std@@QBEPB_WPB_W0DPADI@Z */
1988 /* ?_Narrow_s@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD_K@Z */
1989 /* ?_Narrow_s@?$ctype@G@std@@QBEPBGPBG0DPADI@Z */
1990 /* ?_Narrow_s@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD_K@Z */
1991 DEFINE_THISCALL_WRAPPER(ctype_wchar__Narrow_s, 24)
1992 const wchar_t* __thiscall ctype_wchar__Narrow_s(const ctype_wchar *this, const wchar_t *first,
1993 const wchar_t *last, char dflt, char *dest, MSVCP_size_t size)
1995 TRACE("(%p %p %p %d %p %lu)\n", this, first, last, dflt, dest, size);
1996 return call_ctype_wchar__Do_narrow_s(this, first, last, dflt, dest, size);
1999 /* _Mbrtowc */
2000 int __cdecl _Mbrtowc(wchar_t *out, const char *in, MSVCP_size_t len, int *state, const _Cvtvec *cvt)
2002 int i, cp;
2003 CPINFO cp_info;
2004 BOOL is_lead;
2006 TRACE("(%p %p %lu %p %p)\n", out, in, len, state, cvt);
2008 if(!len)
2009 return 0;
2011 if(cvt)
2012 cp = cvt->page;
2013 else
2014 cp = ___lc_codepage_func();
2016 if(!cp) {
2017 if(out)
2018 *out = (unsigned char)*in;
2020 *state = 0;
2021 return *in ? 1 : 0;
2024 if(*state) {
2025 ((char*)state)[1] = *in;
2027 if(!MultiByteToWideChar(cp, MB_ERR_INVALID_CHARS, (char*)state, 2, out, out ? 1 : 0)) {
2028 *state = 0;
2029 *_errno() = EILSEQ;
2030 return -1;
2033 *state = 0;
2034 return 2;
2037 GetCPInfo(cp, &cp_info);
2038 is_lead = FALSE;
2039 for(i=0; i<MAX_LEADBYTES; i+=2) {
2040 if(!cp_info.LeadByte[i+1])
2041 break;
2042 if((unsigned char)*in>=cp_info.LeadByte[i] && (unsigned char)*in<=cp_info.LeadByte[i+1]) {
2043 is_lead = TRUE;
2044 break;
2048 if(is_lead) {
2049 if(len == 1) {
2050 *state = (unsigned char)*in;
2051 return -2;
2054 if(!MultiByteToWideChar(cp, MB_ERR_INVALID_CHARS, in, 2, out, out ? 1 : 0)) {
2055 *_errno() = EILSEQ;
2056 return -1;
2058 return 2;
2061 if(!MultiByteToWideChar(cp, MB_ERR_INVALID_CHARS, in, 1, out, out ? 1 : 0)) {
2062 *_errno() = EILSEQ;
2063 return -1;
2065 return 1;
2068 /* ?_Dowiden@?$ctype@_W@std@@IBE_WD@Z */
2069 /* ?_Dowiden@?$ctype@_W@std@@IEBA_WD@Z */
2070 /* ?_Dowiden@?$ctype@G@std@@IBEGD@Z */
2071 /* ?_Dowiden@?$ctype@G@std@@IEBAGD@Z */
2072 DEFINE_THISCALL_WRAPPER(ctype_wchar__Dowiden, 8)
2073 wchar_t __thiscall ctype_wchar__Dowiden(const ctype_wchar *this, char ch)
2075 wchar_t ret;
2076 int state = 0;
2077 TRACE("(%p %d)\n", this, ch);
2078 return _Mbrtowc(&ret, &ch, 1, &state, &this->cvt)<0 ? WEOF : ret;
2081 /* ?do_widen@?$ctype@_W@std@@MBE_WD@Z */
2082 /* ?do_widen@?$ctype@_W@std@@MEBA_WD@Z */
2083 /* ?do_widen@?$ctype@G@std@@MBEGD@Z */
2084 /* ?do_widen@?$ctype@G@std@@MEBAGD@Z */
2085 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_widen_ch, 8)
2086 #define call_ctype_wchar_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 40, \
2087 wchar_t, (const ctype_wchar*, char), (this, ch))
2088 wchar_t __thiscall ctype_wchar_do_widen_ch(const ctype_wchar *this, char ch)
2090 return ctype_wchar__Dowiden(this, ch);
2093 /* ?do_widen@?$ctype@_W@std@@MBEPBDPBD0PA_W@Z */
2094 /* ?do_widen@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W@Z */
2095 /* ?do_widen@?$ctype@G@std@@MBEPBDPBD0PAG@Z */
2096 /* ?do_widen@?$ctype@G@std@@MEBAPEBDPEBD0PEAG@Z */
2097 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_widen, 16)
2098 #define call_ctype_wchar_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 36, \
2099 const char*, (const ctype_wchar*, const char*, const char*, wchar_t*), \
2100 (this, first, last, dest))
2101 const char* __thiscall ctype_wchar_do_widen(const ctype_wchar *this,
2102 const char *first, const char *last, wchar_t *dest)
2104 TRACE("(%p %p %p %p)\n", this, first, last, dest);
2105 for(; first<last; first++)
2106 *dest++ = ctype_wchar__Dowiden(this, *first);
2107 return last;
2110 /* ?_Do_widen_s@?$ctype@_W@std@@MBEPBDPBD0PA_WI@Z */
2111 /* ?_Do_widen_s@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W_K@Z */
2112 /* ?_Do_widen_s@?$ctype@G@std@@MBEPBDPBD0PAGI@Z */
2113 /* ?_Do_widen_s@?$ctype@G@std@@MEBAPEBDPEBD0PEAG_K@Z */
2114 DEFINE_THISCALL_WRAPPER(ctype_wchar__Do_widen_s, 20)
2115 #define call_ctype_wchar__Do_widen_s(this, first, last, dest, size) CALL_VTBL_FUNC(this, 44, \
2116 const char*, (const ctype_wchar*, const char*, const char*, wchar_t*, MSVCP_size_t), \
2117 (this, first, last, dest, size))
2118 const char* __thiscall ctype_wchar__Do_widen_s(const ctype_wchar *this,
2119 const char *first, const char *last, wchar_t *dest, MSVCP_size_t size)
2121 TRACE("(%p %p %p %p %lu)\n", this, first, last, dest, size);
2122 /* This function converts all multi-byte characters to WEOF,
2123 * thanks to it result size is known before converting */
2124 if(size < last-first)
2125 ctype_base__Xran();
2126 return ctype_wchar_do_widen(this, first, last, dest);
2129 /* ?widen@?$ctype@_W@std@@QBE_WD@Z */
2130 /* ?widen@?$ctype@_W@std@@QEBA_WD@Z */
2131 /* ?widen@?$ctype@G@std@@QBEGD@Z */
2132 /* ?widen@?$ctype@G@std@@QEBAGD@Z */
2133 DEFINE_THISCALL_WRAPPER(ctype_wchar_widen_ch, 8)
2134 wchar_t __thiscall ctype_wchar_widen_ch(const ctype_wchar *this, char ch)
2136 TRACE("(%p %d)\n", this, ch);
2137 return call_ctype_wchar_do_widen_ch(this, ch);
2140 /* ?widen@?$ctype@_W@std@@QBEPBDPBD0PA_W@Z */
2141 /* ?widen@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W@Z */
2142 /* ?widen@?$ctype@G@std@@QBEPBDPBD0PAG@Z */
2143 /* ?widen@?$ctype@G@std@@QEBAPEBDPEBD0PEAG@Z */
2144 DEFINE_THISCALL_WRAPPER(ctype_wchar_widen, 16)
2145 const char* __thiscall ctype_wchar_widen(const ctype_wchar *this,
2146 const char *first, const char *last, wchar_t *dest)
2148 TRACE("(%p %p %p %p)\n", this, first, last, dest);
2149 return call_ctype_wchar_do_widen(this, first, last, dest);
2152 /* ?_Widen_s@?$ctype@_W@std@@QBEPBDPBD0PA_WI@Z */
2153 /* ?_Widen_s@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W_K@Z */
2154 /* ?_Widen_s@?$ctype@G@std@@QBEPBDPBD0PAGI@Z */
2155 /* ?_Widen_s@?$ctype@G@std@@QEBAPEBDPEBD0PEAG_K@Z */
2156 DEFINE_THISCALL_WRAPPER(ctype_wchar__Widen_s, 20)
2157 const char* __thiscall ctype_wchar__Widen_s(const ctype_wchar *this,
2158 const char *first, const char *last, wchar_t *dest, MSVCP_size_t size)
2160 TRACE("(%p %p %p %p %lu)\n", this, first, last, dest, size);
2161 return call_ctype_wchar__Do_widen_s(this, first, last, dest, size);
2164 /* ?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2165 /* ?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2166 MSVCP_size_t __cdecl ctype_wchar__Getcat(const locale_facet **facet, const locale *loc)
2168 TRACE("(%p %p)\n", facet, loc);
2170 if(facet && !*facet) {
2171 _Locinfo locinfo;
2173 *facet = MSVCRT_operator_new(sizeof(ctype_wchar));
2174 if(!*facet) {
2175 ERR("Out of memory\n");
2176 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
2177 return 0;
2180 _Locinfo_ctor_cstr(&locinfo, MSVCP_basic_string_char_c_str(&loc->ptr->name));
2181 ctype_wchar_ctor_locinfo((ctype_wchar*)*facet, &locinfo, 0);
2182 _Locinfo_dtor(&locinfo);
2185 return LC_CTYPE;
2188 /* ?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2189 /* ?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2190 MSVCP_size_t __cdecl ctype_short__Getcat(const locale_facet **facet, const locale *loc)
2192 if(facet && !*facet) {
2193 ctype_wchar__Getcat(facet, loc);
2194 (*(locale_facet**)facet)->vtable = &MSVCP_ctype_short_vtable;
2197 return LC_CTYPE;
2200 /* _Towlower */
2201 wchar_t __cdecl _Towlower(wchar_t ch, const _Ctypevec *ctype)
2203 TRACE("(%d %p)\n", ch, ctype);
2204 return tolowerW(ch);
2207 /* ?do_tolower@?$ctype@_W@std@@MBE_W_W@Z */
2208 /* ?do_tolower@?$ctype@_W@std@@MEBA_W_W@Z */
2209 /* ?do_tolower@?$ctype@G@std@@MBEGG@Z */
2210 /* ?do_tolower@?$ctype@G@std@@MEBAGG@Z */
2211 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_tolower_ch, 8)
2212 #define call_ctype_wchar_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
2213 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2214 wchar_t __thiscall ctype_wchar_do_tolower_ch(const ctype_wchar *this, wchar_t ch)
2216 return _Towlower(ch, &this->ctype);
2219 /* ?do_tolower@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */
2220 /* ?do_tolower@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z */
2221 /* ?do_tolower@?$ctype@G@std@@MBEPBGPAGPBG@Z */
2222 /* ?do_tolower@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */
2223 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_tolower, 12)
2224 #define call_ctype_wchar_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 20, \
2225 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2226 (this, first, last))
2227 const wchar_t* __thiscall ctype_wchar_do_tolower(const ctype_wchar *this,
2228 wchar_t *first, const wchar_t *last)
2230 TRACE("(%p %p %p)\n", this, first, last);
2231 for(; first<last; first++)
2232 *first = _Towlower(*first, &this->ctype);
2233 return last;
2236 /* ?tolower@?$ctype@_W@std@@QBE_W_W@Z */
2237 /* ?tolower@?$ctype@_W@std@@QEBA_W_W@Z */
2238 /* ?tolower@?$ctype@G@std@@QBEGG@Z */
2239 /* ?tolower@?$ctype@G@std@@QEBAGG@Z */
2240 DEFINE_THISCALL_WRAPPER(ctype_wchar_tolower_ch, 8)
2241 wchar_t __thiscall ctype_wchar_tolower_ch(const ctype_wchar *this, wchar_t ch)
2243 TRACE("(%p %d)\n", this, ch);
2244 return call_ctype_wchar_do_tolower_ch(this, ch);
2247 /* ?tolower@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */
2248 /* ?tolower@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z */
2249 /* ?tolower@?$ctype@G@std@@QBEPBGPAGPBG@Z */
2250 /* ?tolower@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z */
2251 DEFINE_THISCALL_WRAPPER(ctype_wchar_tolower, 12)
2252 const wchar_t* __thiscall ctype_wchar_tolower(const ctype_wchar *this,
2253 wchar_t *first, const wchar_t *last)
2255 TRACE("(%p %p %p)\n", this, first, last);
2256 return call_ctype_wchar_do_tolower(this, first, last);
2259 /* _Towupper */
2260 wchar_t __cdecl _Towupper(wchar_t ch, const _Ctypevec *ctype)
2262 TRACE("(%d %p)\n", ch, ctype);
2263 return toupperW(ch);
2266 /* ?do_toupper@?$ctype@_W@std@@MBE_W_W@Z */
2267 /* ?do_toupper@?$ctype@_W@std@@MEBA_W_W@Z */
2268 /* ?do_toupper@?$ctype@G@std@@MBEGG@Z */
2269 /* ?do_toupper@?$ctype@G@std@@MEBAGG@Z */
2270 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper_ch, 8)
2271 #define call_ctype_wchar_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 32, \
2272 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2273 wchar_t __thiscall ctype_wchar_do_toupper_ch(const ctype_wchar *this, wchar_t ch)
2275 return _Towupper(ch, &this->ctype);
2278 /* ?do_toupper@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */
2279 /* ?do_toupper@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z */
2280 /* ?do_toupper@?$ctype@G@std@@MBEPBGPAGPBG@Z */
2281 /* ?do_toupper@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */
2282 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper, 12)
2283 #define call_ctype_wchar_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 28, \
2284 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2285 (this, first, last))
2286 const wchar_t* __thiscall ctype_wchar_do_toupper(const ctype_wchar *this,
2287 wchar_t *first, const wchar_t *last)
2289 TRACE("(%p %p %p)\n", this, first, last);
2290 for(; first<last; first++)
2291 *first = _Towupper(*first, &this->ctype);
2292 return last;
2295 /* ?toupper@?$ctype@_W@std@@QBE_W_W@Z */
2296 /* ?toupper@?$ctype@_W@std@@QEBA_W_W@Z */
2297 /* ?toupper@?$ctype@G@std@@QBEGG@Z */
2298 /* ?toupper@?$ctype@G@std@@QEBAGG@Z */
2299 DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper_ch, 8)
2300 wchar_t __thiscall ctype_wchar_toupper_ch(const ctype_wchar *this, wchar_t ch)
2302 TRACE("(%p %d)\n", this, ch);
2303 return call_ctype_wchar_do_toupper_ch(this, ch);
2306 /* ?toupper@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */
2307 /* ?toupper@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z */
2308 /* ?toupper@?$ctype@G@std@@QBEPBGPAGPBG@Z */
2309 /* ?toupper@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z */
2310 DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper, 12)
2311 const wchar_t* __thiscall ctype_wchar_toupper(const ctype_wchar *this,
2312 wchar_t *first, const wchar_t *last)
2314 TRACE("(%p %p %p)\n", this, first, last);
2315 return call_ctype_wchar_do_toupper(this, first, last);
2318 /* _Getwctypes */
2319 const wchar_t* __cdecl _Getwctypes(const wchar_t *first, const wchar_t *last,
2320 short *mask, const _Ctypevec *ctype)
2322 TRACE("(%p %p %p %p)\n", first, last, mask, ctype);
2323 GetStringTypeW(CT_CTYPE1, first, last-first, (WORD*)mask);
2324 return last;
2327 /* _Getwctype */
2328 short __cdecl _Getwctype(wchar_t ch, const _Ctypevec *ctype)
2330 short mask = 0;
2331 _Getwctypes(&ch, &ch+1, &mask, ctype);
2332 return mask;
2335 /* ?do_is@?$ctype@_W@std@@MBE_NF_W@Z */
2336 /* ?do_is@?$ctype@_W@std@@MEBA_NF_W@Z */
2337 /* ?do_is@?$ctype@G@std@@MBE_NFG@Z */
2338 /* ?do_is@?$ctype@G@std@@MEBA_NFG@Z */
2339 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is_ch, 12)
2340 #define call_ctype_wchar_do_is_ch(this, mask, ch) CALL_VTBL_FUNC(this, 8, \
2341 MSVCP_bool, (const ctype_wchar*, short, wchar_t), (this, mask, ch))
2342 MSVCP_bool __thiscall ctype_wchar_do_is_ch(const ctype_wchar *this, short mask, wchar_t ch)
2344 TRACE("(%p %x %d)\n", this, mask, ch);
2345 return (_Getwctype(ch, &this->ctype) & mask) != 0;
2348 /* ?do_is@?$ctype@_W@std@@MBEPB_WPB_W0PAF@Z */
2349 /* ?do_is@?$ctype@_W@std@@MEBAPEB_WPEB_W0PEAF@Z */
2350 /* ?do_is@?$ctype@G@std@@MBEPBGPBG0PAF@Z */
2351 /* ?do_is@?$ctype@G@std@@MEBAPEBGPEBG0PEAF@Z */
2352 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is, 16)
2353 #define call_ctype_wchar_do_is(this, first, last, dest) CALL_VTBL_FUNC(this, 4, \
2354 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, short*), \
2355 (this, first, last, dest))
2356 const wchar_t* __thiscall ctype_wchar_do_is(const ctype_wchar *this,
2357 const wchar_t *first, const wchar_t *last, short *dest)
2359 TRACE("(%p %p %p %p)\n", this, first, last, dest);
2360 return _Getwctypes(first, last, dest, &this->ctype);
2363 /* ?is@?$ctype@_W@std@@QBE_NF_W@Z */
2364 /* ?is@?$ctype@_W@std@@QEBA_NF_W@Z */
2365 /* ?is@?$ctype@G@std@@QBE_NFG@Z */
2366 /* ?is@?$ctype@G@std@@QEBA_NFG@Z */
2367 DEFINE_THISCALL_WRAPPER(ctype_wchar_is_ch, 12)
2368 MSVCP_bool __thiscall ctype_wchar_is_ch(const ctype_wchar *this, short mask, wchar_t ch)
2370 TRACE("(%p %x %d)\n", this, mask, ch);
2371 return call_ctype_wchar_do_is_ch(this, mask, ch);
2374 /* ?is@?$ctype@_W@std@@QBEPB_WPB_W0PAF@Z */
2375 /* ?is@?$ctype@_W@std@@QEBAPEB_WPEB_W0PEAF@Z */
2376 /* ?is@?$ctype@G@std@@QBEPBGPBG0PAF@Z */
2377 /* ?is@?$ctype@G@std@@QEBAPEBGPEBG0PEAF@Z */
2378 DEFINE_THISCALL_WRAPPER(ctype_wchar_is, 16)
2379 const wchar_t* __thiscall ctype_wchar_is(const ctype_wchar *this,
2380 const wchar_t *first, const wchar_t *last, short *dest)
2382 TRACE("(%p %p %p %p)\n", this, first, last, dest);
2383 return call_ctype_wchar_do_is(this, first, last, dest);
2386 /* ?do_scan_is@?$ctype@_W@std@@MBEPB_WFPB_W0@Z */
2387 /* ?do_scan_is@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z */
2388 /* ?do_scan_is@?$ctype@G@std@@MBEPBGFPBG0@Z */
2389 /* ?do_scan_is@?$ctype@G@std@@MEBAPEBGFPEBG0@Z */
2390 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_scan_is, 16)
2391 #define call_ctype_wchar_do_scan_is(this, mask, first, last) CALL_VTBL_FUNC(this, 12, \
2392 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
2393 (this, mask, first, last))
2394 const wchar_t* __thiscall ctype_wchar_do_scan_is(const ctype_wchar *this,
2395 short mask, const wchar_t *first, const wchar_t *last)
2397 TRACE("(%p %d %p %p)\n", this, mask, first, last);
2398 for(; first<last; first++)
2399 if(!ctype_wchar_is_ch(this, mask, *first))
2400 break;
2401 return first;
2404 /* ?scan_is@?$ctype@_W@std@@QBEPB_WFPB_W0@Z */
2405 /* ?scan_is@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z */
2406 /* ?scan_is@?$ctype@G@std@@QBEPBGFPBG0@Z */
2407 /* ?scan_is@?$ctype@G@std@@QEBAPEBGFPEBG0@Z */
2408 DEFINE_THISCALL_WRAPPER(ctype_wchar_scan_is, 16)
2409 const wchar_t* __thiscall ctype_wchar_scan_is(const ctype_wchar *this,
2410 short mask, const wchar_t *first, const wchar_t *last)
2412 TRACE("(%p %x %p %p)\n", this, mask, first, last);
2413 return call_ctype_wchar_do_scan_is(this, mask, first, last);
2416 /* ?do_scan_not@?$ctype@_W@std@@MBEPB_WFPB_W0@Z */
2417 /* ?do_scan_not@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z */
2418 /* ?do_scan_not@?$ctype@G@std@@MBEPBGFPBG0@Z */
2419 /* ?do_scan_not@?$ctype@G@std@@MEBAPEBGFPEBG0@Z */
2420 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_scan_not, 16)
2421 #define call_ctype_wchar_do_scan_not(this, mask, first, last) CALL_VTBL_FUNC(this, 16, \
2422 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
2423 (this, mask, first, last))
2424 const wchar_t* __thiscall ctype_wchar_do_scan_not(const ctype_wchar *this,
2425 short mask, const wchar_t *first, const wchar_t *last)
2427 TRACE("(%p %x %p %p)\n", this, mask, first, last);
2428 for(; first<last; first++)
2429 if(ctype_wchar_is_ch(this, mask, *first))
2430 break;
2431 return first;
2434 /* ?scan_not@?$ctype@_W@std@@QBEPB_WFPB_W0@Z */
2435 /* ?scan_not@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z */
2436 /* ?scan_not@?$ctype@G@std@@QBEPBGFPBG0@Z */
2437 /* ?scan_not@?$ctype@G@std@@QEBAPEBGFPEBG0@Z */
2438 DEFINE_THISCALL_WRAPPER(ctype_wchar_scan_not, 16)
2439 const wchar_t* __thiscall ctype_wchar_scan_not(const ctype_wchar *this,
2440 short mask, const wchar_t *first, const wchar_t *last)
2442 TRACE("(%p %x %p %p)\n", this, mask, first, last);
2443 return call_ctype_wchar_do_scan_not(this, mask, first, last);
2446 /* ??_7codecvt_base@std@@6B@ */
2447 extern const vtable_ptr MSVCP_codecvt_base_vtable;
2449 /* ??0codecvt_base@std@@QAE@I@Z */
2450 /* ??0codecvt_base@std@@QEAA@_K@Z */
2451 DEFINE_THISCALL_WRAPPER(codecvt_base_ctor_refs, 8)
2452 codecvt_base* __thiscall codecvt_base_ctor_refs(codecvt_base *this, MSVCP_size_t refs)
2454 TRACE("(%p %lu)\n", this, refs);
2455 locale_facet_ctor_refs(&this->facet, refs);
2456 this->facet.vtable = &MSVCP_codecvt_base_vtable;
2457 return this;
2460 /* ??_Fcodecvt_base@std@@QAEXXZ */
2461 /* ??_Fcodecvt_base@std@@QEAAXXZ */
2462 DEFINE_THISCALL_WRAPPER(codecvt_base_ctor, 4)
2463 codecvt_base* __thiscall codecvt_base_ctor(codecvt_base *this)
2465 return codecvt_base_ctor_refs(this, 0);
2468 /* ??1codecvt_base@std@@UAE@XZ */
2469 /* ??1codecvt_base@std@@UEAA@XZ */
2470 DEFINE_THISCALL_WRAPPER(codecvt_base_dtor, 4)
2471 void __thiscall codecvt_base_dtor(codecvt_base *this)
2473 TRACE("(%p)\n", this);
2474 locale_facet_dtor(&this->facet);
2477 DEFINE_THISCALL_WRAPPER(MSVCP_codecvt_base_vector_dtor, 8)
2478 codecvt_base* __thiscall MSVCP_codecvt_base_vector_dtor(codecvt_base *this, unsigned int flags)
2480 TRACE("(%p %x)\n", this, flags);
2481 if(flags & 2) {
2482 /* we have an array, with the number of elements stored before the first object */
2483 int i, *ptr = (int *)this-1;
2485 for(i=*ptr-1; i>=0; i--)
2486 codecvt_base_dtor(this+i);
2487 MSVCRT_operator_delete(ptr);
2488 } else {
2489 codecvt_base_dtor(this);
2490 if(flags & 1)
2491 MSVCRT_operator_delete(this);
2494 return this;
2497 /* ?do_always_noconv@codecvt_base@std@@MBE_NXZ */
2498 /* ?do_always_noconv@codecvt_base@std@@MEBA_NXZ */
2499 #define call_codecvt_base_do_always_noconv(this) CALL_VTBL_FUNC(this, 4, \
2500 MSVCP_bool, (const codecvt_base*), (this))
2501 DEFINE_THISCALL_WRAPPER(codecvt_base_do_always_noconv, 4)
2502 MSVCP_bool __thiscall codecvt_base_do_always_noconv(const codecvt_base *this)
2504 TRACE("(%p)\n", this);
2505 return TRUE;
2508 /* ?always_noconv@codecvt_base@std@@QBE_NXZ */
2509 /* ?always_noconv@codecvt_base@std@@QEBA_NXZ */
2510 DEFINE_THISCALL_WRAPPER(codecvt_base_always_noconv, 4)
2511 MSVCP_bool __thiscall codecvt_base_always_noconv(const codecvt_base *this)
2513 TRACE("(%p)\n", this);
2514 return call_codecvt_base_do_always_noconv(this);
2517 /* ?do_max_length@codecvt_base@std@@MBEHXZ */
2518 /* ?do_max_length@codecvt_base@std@@MEBAHXZ */
2519 #define call_codecvt_base_do_max_length(this) CALL_VTBL_FUNC(this, 8, \
2520 int, (const codecvt_base*), (this))
2521 DEFINE_THISCALL_WRAPPER(codecvt_base_do_max_length, 4)
2522 int __thiscall codecvt_base_do_max_length(const codecvt_base *this)
2524 TRACE("(%p)\n", this);
2525 return 1;
2528 /* ?max_length@codecvt_base@std@@QBEHXZ */
2529 /* ?max_length@codecvt_base@std@@QEBAHXZ */
2530 DEFINE_THISCALL_WRAPPER(codecvt_base_max_length, 4)
2531 int __thiscall codecvt_base_max_length(const codecvt_base *this)
2533 TRACE("(%p)\n", this);
2534 return call_codecvt_base_do_max_length(this);
2537 /* ?do_encoding@codecvt_base@std@@MBEHXZ */
2538 /* ?do_encoding@codecvt_base@std@@MEBAHXZ */
2539 #define call_codecvt_base_do_encoding(this) CALL_VTBL_FUNC(this, 12, \
2540 int, (const codecvt_base*), (this))
2541 DEFINE_THISCALL_WRAPPER(codecvt_base_do_encoding, 4)
2542 int __thiscall codecvt_base_do_encoding(const codecvt_base *this)
2544 TRACE("(%p)\n", this);
2545 return 1;
2548 /* ?encoding@codecvt_base@std@@QBEHXZ */
2549 /* ?encoding@codecvt_base@std@@QEBAHXZ */
2550 DEFINE_THISCALL_WRAPPER(codecvt_base_encoding, 4)
2551 int __thiscall codecvt_base_encoding(const codecvt_base *this)
2553 TRACE("(%p)\n", this);
2554 return call_codecvt_base_do_encoding(this);
2557 /* ?id@?$numpunct@D@std@@2V0locale@2@A */
2558 locale_id numpunct_char_id = {0};
2560 /* ??_7?$numpunct@D@std@@6B@ */
2561 extern const vtable_ptr MSVCP_numpunct_char_vtable;
2563 /* ?_Init@?$numpunct@D@std@@IAEXABV_Locinfo@2@_N@Z */
2564 /* ?_Init@?$numpunct@D@std@@IEAAXAEBV_Locinfo@2@_N@Z */
2565 DEFINE_THISCALL_WRAPPER(numpunct_char__Init, 12)
2566 void __thiscall numpunct_char__Init(numpunct_char *this, _Locinfo *locinfo, MSVCP_bool isdef)
2568 int len;
2570 TRACE("(%p %p %d)\n", this, locinfo, isdef);
2572 len = strlen(_Locinfo__Getfalse(locinfo))+1;
2573 this->false_name = MSVCRT_operator_new(len);
2574 if(this->false_name)
2575 memcpy((char*)this->false_name, _Locinfo__Getfalse(locinfo), len);
2577 len = strlen(_Locinfo__Gettrue(locinfo))+1;
2578 this->true_name = MSVCRT_operator_new(len);
2579 if(this->true_name)
2580 memcpy((char*)this->true_name, _Locinfo__Gettrue(locinfo), len);
2582 if(isdef) {
2583 this->grouping = MSVCRT_operator_new(1);
2584 if(this->grouping)
2585 *(char*)this->grouping = 0;
2587 this->dp = '.';
2588 this->sep = ',';
2589 } else {
2590 const struct lconv *lc = _Locinfo__Getlconv(locinfo);
2592 len = strlen(lc->grouping)+1;
2593 this->grouping = MSVCRT_operator_new(len);
2594 if(this->grouping)
2595 memcpy((char*)this->grouping, lc->grouping, len);
2597 this->dp = lc->decimal_point[0];
2598 this->sep = lc->thousands_sep[0];
2601 if(!this->false_name || !this->true_name || !this->grouping) {
2602 MSVCRT_operator_delete((char*)this->grouping);
2603 MSVCRT_operator_delete((char*)this->false_name);
2604 MSVCRT_operator_delete((char*)this->true_name);
2606 ERR("Out of memory\n");
2607 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
2611 /* ?_Tidy@?$numpunct@D@std@@AAEXXZ */
2612 /* ?_Tidy@?$numpunct@D@std@@AEAAXXZ */
2613 DEFINE_THISCALL_WRAPPER(numpunct_char__Tidy, 4)
2614 void __thiscall numpunct_char__Tidy(numpunct_char *this)
2616 TRACE("(%p)\n", this);
2618 MSVCRT_operator_delete((char*)this->grouping);
2619 MSVCRT_operator_delete((char*)this->false_name);
2620 MSVCRT_operator_delete((char*)this->true_name);
2623 /* ??0?$numpunct@D@std@@QAE@ABV_Locinfo@1@I_N@Z */
2624 /* ??0?$numpunct@D@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
2625 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_locinfo, 16)
2626 numpunct_char* __thiscall numpunct_char_ctor_locinfo(numpunct_char *this,
2627 _Locinfo *locinfo, MSVCP_size_t refs, MSVCP_bool usedef)
2629 TRACE("(%p %p %lu %d)\n", this, locinfo, refs, usedef);
2630 locale_facet_ctor_refs(&this->facet, refs);
2631 this->facet.vtable = &MSVCP_numpunct_char_vtable;
2632 numpunct_char__Init(this, locinfo, usedef);
2633 return this;
2636 /* ??0?$numpunct@D@std@@IAE@PBDI_N@Z */
2637 /* ??0?$numpunct@D@std@@IEAA@PEBD_K_N@Z */
2638 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_name, 16)
2639 numpunct_char* __thiscall numpunct_char_ctor_name(numpunct_char *this,
2640 const char *name, MSVCP_size_t refs, MSVCP_bool usedef)
2642 _Locinfo locinfo;
2644 TRACE("(%p %s %lu %d)\n", this, debugstr_a(name), refs, usedef);
2645 locale_facet_ctor_refs(&this->facet, refs);
2646 this->facet.vtable = &MSVCP_numpunct_char_vtable;
2648 _Locinfo_ctor_cstr(&locinfo, name);
2649 numpunct_char__Init(this, &locinfo, usedef);
2650 _Locinfo_dtor(&locinfo);
2651 return this;
2654 /* ??0?$numpunct@D@std@@QAE@I@Z */
2655 /* ??0?$numpunct@D@std@@QEAA@_K@Z */
2656 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_refs, 8)
2657 numpunct_char* __thiscall numpunct_char_ctor_refs(numpunct_char *this, MSVCP_size_t refs)
2659 TRACE("(%p %lu)\n", this, refs);
2660 return numpunct_char_ctor_name(this, "C", refs, FALSE);
2663 /* ??_F?$numpunct@D@std@@QAEXXZ */
2664 /* ??_F?$numpunct@D@std@@QEAAXXZ */
2665 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor, 4)
2666 numpunct_char* __thiscall numpunct_char_ctor(numpunct_char *this)
2668 return numpunct_char_ctor_refs(this, 0);
2671 /* ??1?$numpunct@D@std@@MAE@XZ */
2672 /* ??1?$numpunct@D@std@@MEAA@XZ */
2673 DEFINE_THISCALL_WRAPPER(numpunct_char_dtor, 4)
2674 void __thiscall numpunct_char_dtor(numpunct_char *this)
2676 TRACE("(%p)\n", this);
2677 numpunct_char__Tidy(this);
2680 DEFINE_THISCALL_WRAPPER(MSVCP_numpunct_char_vector_dtor, 8)
2681 numpunct_char* __thiscall MSVCP_numpunct_char_vector_dtor(numpunct_char *this, unsigned int flags)
2683 TRACE("(%p %x)\n", this, flags);
2684 if(flags & 2) {
2685 /* we have an array, with the number of elements stored before the first object */
2686 int i, *ptr = (int *)this-1;
2688 for(i=*ptr-1; i>=0; i--)
2689 numpunct_char_dtor(this+i);
2690 MSVCRT_operator_delete(ptr);
2691 } else {
2692 numpunct_char_dtor(this);
2693 if(flags & 1)
2694 MSVCRT_operator_delete(this);
2697 return this;
2700 /* ?_Getcat@?$numpunct@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2701 /* ?_Getcat@?$numpunct@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2702 MSVCP_size_t __cdecl numpunct_char__Getcat(const locale_facet **facet, const locale *loc)
2704 TRACE("(%p %p)\n", facet, loc);
2706 if(facet && !*facet) {
2707 *facet = MSVCRT_operator_new(sizeof(numpunct_char));
2708 if(!*facet) {
2709 ERR("Out of memory\n");
2710 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
2711 return 0;
2713 numpunct_char_ctor_name((numpunct_char*)*facet,
2714 MSVCP_basic_string_char_c_str(&loc->ptr->name), 0, TRUE);
2717 return LC_NUMERIC;
2720 /* ?do_decimal_point@?$numpunct@D@std@@MBEDXZ */
2721 /* ?do_decimal_point@?$numpunct@D@std@@MEBADXZ */
2722 DEFINE_THISCALL_WRAPPER(numpunct_char_do_decimal_point, 4)
2723 #define call_numpunct_char_do_decimal_point(this) CALL_VTBL_FUNC(this, 4, \
2724 char, (const numpunct_char *this), (this))
2725 char __thiscall numpunct_char_do_decimal_point(const numpunct_char *this)
2727 TRACE("(%p)\n", this);
2728 return this->dp;
2731 /* ?decimal_point@?$numpunct@D@std@@QBEDXZ */
2732 /* ?decimal_point@?$numpunct@D@std@@QEBADXZ */
2733 DEFINE_THISCALL_WRAPPER(numpunct_char_decimal_point, 4)
2734 char __thiscall numpunct_char_decimal_point(const numpunct_char *this)
2736 TRACE("(%p)\n", this);
2737 return call_numpunct_char_do_decimal_point(this);
2740 /* ?do_thousands_sep@?$numpunct@D@std@@MBEDXZ */
2741 /* ?do_thousands_sep@?$numpunct@D@std@@MEBADXZ */
2742 DEFINE_THISCALL_WRAPPER(numpunct_char_do_thousands_sep, 4)
2743 #define call_numpunct_char_do_thousands_sep(this) CALL_VTBL_FUNC(this, 8, \
2744 char, (const numpunct_char*), (this))
2745 char __thiscall numpunct_char_do_thousands_sep(const numpunct_char *this)
2747 TRACE("(%p)\n", this);
2748 return this->sep;
2751 /* ?thousands_sep@?$numpunct@D@std@@QBEDXZ */
2752 /* ?thousands_sep@?$numpunct@D@std@@QEBADXZ */
2753 DEFINE_THISCALL_WRAPPER(numpunct_char_thousands_sep, 4)
2754 char __thiscall numpunct_char_thousands_sep(const numpunct_char *this)
2756 TRACE("(%p)\n", this);
2757 return call_numpunct_char_do_thousands_sep(this);
2760 /* ?do_grouping@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
2761 /* ?do_grouping@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
2762 DEFINE_THISCALL_WRAPPER(numpunct_char_do_grouping, 8)
2763 #define call_numpunct_char_do_grouping(this, ret) CALL_VTBL_FUNC(this, 12, \
2764 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
2765 basic_string_char* __thiscall numpunct_char_do_grouping(
2766 const numpunct_char *this, basic_string_char *ret)
2768 TRACE("(%p)\n", this);
2769 return MSVCP_basic_string_char_ctor_cstr(ret, this->grouping);
2772 /* ?grouping@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
2773 /* ?grouping@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
2774 DEFINE_THISCALL_WRAPPER(numpunct_char_grouping, 8)
2775 basic_string_char* __thiscall numpunct_char_grouping(const numpunct_char *this, basic_string_char *ret)
2777 TRACE("(%p)\n", this);
2778 return call_numpunct_char_do_grouping(this, ret);
2781 /* ?do_falsename@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
2782 /* ?do_falsename@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
2783 DEFINE_THISCALL_WRAPPER(numpunct_char_do_falsename, 8)
2784 #define call_numpunct_char_do_falsename(this, ret) CALL_VTBL_FUNC(this, 16, \
2785 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
2786 basic_string_char* __thiscall numpunct_char_do_falsename(
2787 const numpunct_char *this, basic_string_char *ret)
2789 TRACE("(%p)\n", this);
2790 return MSVCP_basic_string_char_ctor_cstr(ret, this->false_name);
2793 /* ?falsename@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
2794 /* ?falsename@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
2795 DEFINE_THISCALL_WRAPPER(numpunct_char_falsename, 8)
2796 basic_string_char* __thiscall numpunct_char_falsename(const numpunct_char *this, basic_string_char *ret)
2798 TRACE("(%p)\n", this);
2799 return call_numpunct_char_do_falsename(this, ret);
2802 /* ?do_truename@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
2803 /* ?do_truename@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
2804 DEFINE_THISCALL_WRAPPER(numpunct_char_do_truename, 8)
2805 #define call_numpunct_char_do_truename(this, ret) CALL_VTBL_FUNC(this, 20, \
2806 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
2807 basic_string_char* __thiscall numpunct_char_do_truename(
2808 const numpunct_char *this, basic_string_char *ret)
2810 TRACE("(%p)\n", this);
2811 return MSVCP_basic_string_char_ctor_cstr(ret, this->true_name);
2814 /* ?truename@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
2815 /* ?truename@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
2816 DEFINE_THISCALL_WRAPPER(numpunct_char_truename, 8)
2817 basic_string_char* __thiscall numpunct_char_truename(const numpunct_char *this, basic_string_char *ret)
2819 TRACE("(%p)\n", this);
2820 return call_numpunct_char_do_truename(this, ret);
2823 /* ?id@?$numpunct@_W@std@@2V0locale@2@A */
2824 locale_id numpunct_wchar_id = {0};
2825 /* ?id@?$numpunct@G@std@@2V0locale@2@A */
2826 locale_id numpunct_short_id = {0};
2828 /* ??_7?$numpunct@_W@std@@6B@ */
2829 extern const vtable_ptr MSVCP_numpunct_wchar_vtable;
2830 /* ??_7?$numpunct@G@std@@6B@ */
2831 extern const vtable_ptr MSVCP_numpunct_short_vtable;
2833 /* ?_Init@?$numpunct@_W@std@@IAEXABV_Locinfo@2@_N@Z */
2834 /* ?_Init@?$numpunct@_W@std@@IEAAXAEBV_Locinfo@2@_N@Z */
2835 /* ?_Init@?$numpunct@G@std@@IAEXABV_Locinfo@2@_N@Z */
2836 /* ?_Init@?$numpunct@G@std@@IEAAXAEBV_Locinfo@2@_N@Z */
2837 DEFINE_THISCALL_WRAPPER(numpunct_wchar__Init, 12)
2838 void __thiscall numpunct_wchar__Init(numpunct_wchar *this, _Locinfo *locinfo, MSVCP_bool isdef)
2840 const char *to_convert;
2841 _Cvtvec cvt;
2842 int len;
2844 TRACE("(%p %p %d)\n", this, locinfo, isdef);
2846 _Locinfo__Getcvt(locinfo, &cvt);
2848 to_convert = _Locinfo__Getfalse(locinfo);
2849 len = MultiByteToWideChar(cvt.page, 0, to_convert, -1, NULL, 0);
2850 this->false_name = MSVCRT_operator_new(len*sizeof(WCHAR));
2851 if(this->false_name)
2852 MultiByteToWideChar(cvt.page, 0, to_convert, -1,
2853 (wchar_t*)this->false_name, len);
2855 to_convert = _Locinfo__Gettrue(locinfo);
2856 len = MultiByteToWideChar(cvt.page, 0, to_convert, -1, NULL, 0);
2857 this->true_name = MSVCRT_operator_new(len*sizeof(WCHAR));
2858 if(this->true_name)
2859 MultiByteToWideChar(cvt.page, 0, to_convert, -1,
2860 (wchar_t*)this->true_name, len);
2862 if(isdef) {
2863 this->grouping = MSVCRT_operator_new(1);
2864 if(this->grouping)
2865 *(char*)this->grouping = 0;
2867 this->dp = '.';
2868 this->sep = ',';
2869 } else {
2870 const struct lconv *lc = _Locinfo__Getlconv(locinfo);
2872 len = strlen(lc->grouping)+1;
2873 this->grouping = MSVCRT_operator_new(len);
2874 if(this->grouping)
2875 memcpy((char*)this->grouping, lc->grouping, len);
2877 this->dp = lc->decimal_point[0];
2878 this->sep = lc->thousands_sep[0];
2881 if(!this->false_name || !this->true_name || !this->grouping) {
2882 MSVCRT_operator_delete((char*)this->grouping);
2883 MSVCRT_operator_delete((wchar_t*)this->false_name);
2884 MSVCRT_operator_delete((wchar_t*)this->true_name);
2886 ERR("Out of memory\n");
2887 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
2891 /* ?_Tidy@?$numpunct@_W@std@@AAEXXZ */
2892 /* ?_Tidy@?$numpunct@_W@std@@AEAAXXZ */
2893 /* ?_Tidy@?$numpunct@G@std@@AAEXXZ */
2894 /* ?_Tidy@?$numpunct@G@std@@AEAAXXZ */
2895 DEFINE_THISCALL_WRAPPER(numpunct_wchar__Tidy, 4)
2896 void __thiscall numpunct_wchar__Tidy(numpunct_wchar *this)
2898 TRACE("(%p)\n", this);
2900 MSVCRT_operator_delete((char*)this->grouping);
2901 MSVCRT_operator_delete((wchar_t*)this->false_name);
2902 MSVCRT_operator_delete((wchar_t*)this->true_name);
2905 /* ??0?$numpunct@_W@std@@QAE@ABV_Locinfo@1@I_N@Z */
2906 /* ??0?$numpunct@_W@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
2907 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_locinfo, 16)
2908 numpunct_wchar* __thiscall numpunct_wchar_ctor_locinfo(numpunct_wchar *this,
2909 _Locinfo *locinfo, MSVCP_size_t refs, MSVCP_bool usedef)
2911 TRACE("(%p %p %lu %d)\n", this, locinfo, refs, usedef);
2912 locale_facet_ctor_refs(&this->facet, refs);
2913 this->facet.vtable = &MSVCP_numpunct_wchar_vtable;
2914 numpunct_wchar__Init(this, locinfo, usedef);
2915 return this;
2918 /* ??0?$numpunct@G@std@@QAE@ABV_Locinfo@1@I_N@Z */
2919 /* ??0?$numpunct@G@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
2920 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_locinfo, 16)
2921 numpunct_wchar* __thiscall numpunct_short_ctor_locinfo(numpunct_wchar *this,
2922 _Locinfo *locinfo, MSVCP_size_t refs, MSVCP_bool usedef)
2924 numpunct_wchar_ctor_locinfo(this, locinfo, refs, usedef);
2925 this->facet.vtable = &MSVCP_numpunct_short_vtable;
2926 return this;
2929 /* ??0?$numpunct@_W@std@@IAE@PBDI_N@Z */
2930 /* ??0?$numpunct@_W@std@@IEAA@PEBD_K_N@Z */
2931 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_name, 16)
2932 numpunct_wchar* __thiscall numpunct_wchar_ctor_name(numpunct_wchar *this,
2933 const char *name, MSVCP_size_t refs, MSVCP_bool usedef)
2935 _Locinfo locinfo;
2937 TRACE("(%p %s %lu %d)\n", this, debugstr_a(name), refs, usedef);
2938 locale_facet_ctor_refs(&this->facet, refs);
2939 this->facet.vtable = &MSVCP_numpunct_wchar_vtable;
2941 _Locinfo_ctor_cstr(&locinfo, name);
2942 numpunct_wchar__Init(this, &locinfo, usedef);
2943 _Locinfo_dtor(&locinfo);
2944 return this;
2947 /* ??0?$numpunct@G@std@@IAE@PBDI_N@Z */
2948 /* ??0?$numpunct@G@std@@IEAA@PEBD_K_N@Z */
2949 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_name, 16)
2950 numpunct_wchar* __thiscall numpunct_short_ctor_name(numpunct_wchar *this,
2951 const char *name, MSVCP_size_t refs, MSVCP_bool usedef)
2953 numpunct_wchar_ctor_name(this, name, refs, usedef);
2954 this->facet.vtable = &MSVCP_numpunct_short_vtable;
2955 return this;
2958 /* ??0?$numpunct@_W@std@@QAE@I@Z */
2959 /* ??0?$numpunct@_W@std@@QEAA@_K@Z */
2960 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_refs, 8)
2961 numpunct_wchar* __thiscall numpunct_wchar_ctor_refs(numpunct_wchar *this, MSVCP_size_t refs)
2963 TRACE("(%p %lu)\n", this, refs);
2964 return numpunct_wchar_ctor_name(this, "C", refs, FALSE);
2967 /* ??0?$numpunct@G@std@@QAE@I@Z */
2968 /* ??0?$numpunct@G@std@@QEAA@_K@Z */
2969 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_refs, 8)
2970 numpunct_wchar* __thiscall numpunct_short_ctor_refs(numpunct_wchar *this, MSVCP_size_t refs)
2972 numpunct_wchar_ctor_refs(this, refs);
2973 this->facet.vtable = &MSVCP_numpunct_short_vtable;
2974 return this;
2977 /* ??_F?$numpunct@_W@std@@QAEXXZ */
2978 /* ??_F?$numpunct@_W@std@@QEAAXXZ */
2979 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor, 4)
2980 numpunct_wchar* __thiscall numpunct_wchar_ctor(numpunct_wchar *this)
2982 return numpunct_wchar_ctor_refs(this, 0);
2985 /* ??_F?$numpunct@G@std@@QAEXXZ */
2986 /* ??_F?$numpunct@G@std@@QEAAXXZ */
2987 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor, 4)
2988 numpunct_wchar* __thiscall numpunct_short_ctor(numpunct_wchar *this)
2990 return numpunct_short_ctor_refs(this, 0);
2993 /* ??1?$numpunct@_W@std@@MAE@XZ */
2994 /* ??1?$numpunct@_W@std@@MEAA@XZ */
2995 /* ??1?$numpunct@G@std@@MAE@XZ */
2996 /* ??1?$numpunct@G@std@@MEAA@XZ */
2997 DEFINE_THISCALL_WRAPPER(numpunct_wchar_dtor, 4)
2998 void __thiscall numpunct_wchar_dtor(numpunct_wchar *this)
3000 TRACE("(%p)\n", this);
3001 numpunct_wchar__Tidy(this);
3004 DEFINE_THISCALL_WRAPPER(MSVCP_numpunct_wchar_vector_dtor, 8)
3005 numpunct_wchar* __thiscall MSVCP_numpunct_wchar_vector_dtor(numpunct_wchar *this, unsigned int flags)
3007 TRACE("(%p %x)\n", this, flags);
3008 if(flags & 2) {
3009 /* we have an array, with the number of elements stored before the first object */
3010 int i, *ptr = (int *)this-1;
3012 for(i=*ptr-1; i>=0; i--)
3013 numpunct_wchar_dtor(this+i);
3014 MSVCRT_operator_delete(ptr);
3015 } else {
3016 numpunct_wchar_dtor(this);
3017 if(flags & 1)
3018 MSVCRT_operator_delete(this);
3021 return this;
3024 DEFINE_THISCALL_WRAPPER(MSVCP_numpunct_short_vector_dtor, 8)
3025 numpunct_wchar* __thiscall MSVCP_numpunct_short_vector_dtor(numpunct_wchar *this, unsigned int flags)
3027 return MSVCP_numpunct_wchar_vector_dtor(this, flags);
3030 /* ?_Getcat@?$numpunct@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3031 /* ?_Getcat@?$numpunct@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3032 MSVCP_size_t __cdecl numpunct_wchar__Getcat(const locale_facet **facet, const locale *loc)
3034 TRACE("(%p %p)\n", facet, loc);
3036 if(facet && !*facet) {
3037 *facet = MSVCRT_operator_new(sizeof(numpunct_wchar));
3038 if(!*facet) {
3039 ERR("Out of memory\n");
3040 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
3041 return 0;
3043 numpunct_wchar_ctor_name((numpunct_wchar*)*facet,
3044 MSVCP_basic_string_char_c_str(&loc->ptr->name), 0, TRUE);
3047 return LC_NUMERIC;
3050 /* ?_Getcat@?$numpunct@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3051 /* ?_Getcat@?$numpunct@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3052 MSVCP_size_t __cdecl numpunct_short__Getcat(const locale_facet **facet, const locale *loc)
3054 TRACE("(%p %p)\n", facet, loc);
3056 if(facet && !*facet) {
3057 *facet = MSVCRT_operator_new(sizeof(numpunct_wchar));
3058 if(!*facet) {
3059 ERR("Out of memory\n");
3060 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
3061 return 0;
3063 numpunct_short_ctor_name((numpunct_wchar*)*facet,
3064 MSVCP_basic_string_char_c_str(&loc->ptr->name), 0, TRUE);
3067 return LC_NUMERIC;
3070 /* ?do_decimal_point@?$numpunct@_W@std@@MBE_WXZ */
3071 /* ?do_decimal_point@?$numpunct@_W@std@@MEBA_WXZ */
3072 /* ?do_decimal_point@?$numpunct@G@std@@MBEGXZ */
3073 /* ?do_decimal_point@?$numpunct@G@std@@MEBAGXZ */
3074 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_decimal_point, 4)
3075 #define call_numpunct_wchar_do_decimal_point(this) CALL_VTBL_FUNC(this, 4, \
3076 wchar_t, (const numpunct_wchar *this), (this))
3077 wchar_t __thiscall numpunct_wchar_do_decimal_point(const numpunct_wchar *this)
3079 TRACE("(%p)\n", this);
3080 return this->dp;
3083 /* ?decimal_point@?$numpunct@_W@std@@QBE_WXZ */
3084 /* ?decimal_point@?$numpunct@_W@std@@QEBA_WXZ */
3085 /* ?decimal_point@?$numpunct@G@std@@QBEGXZ */
3086 /* ?decimal_point@?$numpunct@G@std@@QEBAGXZ */
3087 DEFINE_THISCALL_WRAPPER(numpunct_wchar_decimal_point, 4)
3088 wchar_t __thiscall numpunct_wchar_decimal_point(const numpunct_wchar *this)
3090 TRACE("(%p)\n", this);
3091 return call_numpunct_wchar_do_decimal_point(this);
3094 /* ?do_thousands_sep@?$numpunct@_W@std@@MBE_WXZ */
3095 /* ?do_thousands_sep@?$numpunct@_W@std@@MEBA_WXZ */
3096 /* ?do_thousands_sep@?$numpunct@G@std@@MBEGXZ */
3097 /* ?do_thousands_sep@?$numpunct@G@std@@MEBAGXZ */
3098 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_thousands_sep, 4)
3099 #define call_numpunct_wchar_do_thousands_sep(this) CALL_VTBL_FUNC(this, 8, \
3100 wchar_t, (const numpunct_wchar *this), (this))
3101 wchar_t __thiscall numpunct_wchar_do_thousands_sep(const numpunct_wchar *this)
3103 TRACE("(%p)\n", this);
3104 return this->sep;
3107 /* ?thousands_sep@?$numpunct@_W@std@@QBE_WXZ */
3108 /* ?thousands_sep@?$numpunct@_W@std@@QEBA_WXZ */
3109 /* ?thousands_sep@?$numpunct@G@std@@QBEGXZ */
3110 /* ?thousands_sep@?$numpunct@G@std@@QEBAGXZ */
3111 DEFINE_THISCALL_WRAPPER(numpunct_wchar_thousands_sep, 4)
3112 wchar_t __thiscall numpunct_wchar_thousands_sep(const numpunct_wchar *this)
3114 TRACE("(%p)\n", this);
3115 return call_numpunct_wchar_do_thousands_sep(this);
3118 /* ?do_grouping@?$numpunct@_W@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3119 /* ?do_grouping@?$numpunct@_W@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3120 /* ?do_grouping@?$numpunct@G@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3121 /* ?do_grouping@?$numpunct@G@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3122 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_grouping, 8)
3123 #define call_numpunct_wchar_do_grouping(this, ret) CALL_VTBL_FUNC(this, 12, \
3124 basic_string_char*, (const numpunct_wchar*, basic_string_char*), (this, ret))
3125 basic_string_char* __thiscall numpunct_wchar_do_grouping(const numpunct_wchar *this, basic_string_char *ret)
3127 TRACE("(%p)\n", this);
3128 return MSVCP_basic_string_char_ctor_cstr(ret, this->grouping);
3131 /* ?grouping@?$numpunct@_W@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3132 /* ?grouping@?$numpunct@_W@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3133 /* ?grouping@?$numpunct@G@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3134 /* ?grouping@?$numpunct@G@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3135 DEFINE_THISCALL_WRAPPER(numpunct_wchar_grouping, 8)
3136 basic_string_char* __thiscall numpunct_wchar_grouping(const numpunct_wchar *this, basic_string_char *ret)
3138 TRACE("(%p)\n", this);
3139 return call_numpunct_wchar_do_grouping(this, ret);
3142 /* ?do_falsename@?$numpunct@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3143 /* ?do_falsename@?$numpunct@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3144 /* ?do_falsename@?$numpunct@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3145 /* ?do_falsename@?$numpunct@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3146 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_falsename, 8)
3147 #define call_numpunct_wchar_do_falsename(this, ret) CALL_VTBL_FUNC(this, 16, \
3148 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
3149 basic_string_wchar* __thiscall numpunct_wchar_do_falsename(const numpunct_wchar *this, basic_string_wchar *ret)
3151 TRACE("(%p)\n", this);
3152 return MSVCP_basic_string_wchar_ctor_cstr(ret, this->false_name);
3155 /* ?falsename@?$numpunct@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3156 /* ?falsename@?$numpunct@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3157 /* ?falsename@?$numpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3158 /* ?falsename@?$numpunct@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3159 DEFINE_THISCALL_WRAPPER(numpunct_wchar_falsename, 8)
3160 basic_string_wchar* __thiscall numpunct_wchar_falsename(const numpunct_wchar *this, basic_string_wchar *ret)
3162 TRACE("(%p)\n", this);
3163 return call_numpunct_wchar_do_falsename(this, ret);
3166 /* ?do_truename@?$numpunct@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3167 /* ?do_truename@?$numpunct@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3168 /* ?do_truename@?$numpunct@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3169 /* ?do_truename@?$numpunct@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3170 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_truename, 8)
3171 #define call_numpunct_wchar_do_truename(this, ret) CALL_VTBL_FUNC(this, 20, \
3172 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
3173 basic_string_wchar* __thiscall numpunct_wchar_do_truename(const numpunct_wchar *this, basic_string_wchar *ret)
3175 TRACE("(%p)\n", this);
3176 return MSVCP_basic_string_wchar_ctor_cstr(ret, this->true_name);
3179 /* ?truename@?$numpunct@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3180 /* ?truename@?$numpunct@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3181 /* ?truename@?$numpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3182 /* ?truename@?$numpunct@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3183 DEFINE_THISCALL_WRAPPER(numpunct_wchar_truename, 8)
3184 basic_string_wchar* __thiscall numpunct_wchar_truename(const numpunct_wchar *this, basic_string_wchar *ret)
3186 TRACE("(%p)\n", this);
3187 return call_numpunct_wchar_do_truename(this, ret);
3190 /* ?id@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
3191 locale_id num_get_wchar_id = {0};
3192 /* ?id@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
3193 locale_id num_get_short_id = {0};
3195 /* ??_7?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
3196 extern const vtable_ptr MSVCP_num_get_wchar_vtable;
3197 /* ??_7?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
3198 extern const vtable_ptr MSVCP_num_get_short_vtable;
3200 /* ?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
3201 /* ?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
3202 /* ?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
3203 /* ?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
3204 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor__Init, 8)
3205 void __thiscall num_get_wchar_ctor__Init(num_get *this, const _Locinfo *locinfo)
3207 FIXME("(%p %p) stub\n", this, locinfo);
3210 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
3211 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
3212 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor_locinfo, 12)
3213 num_get* __thiscall num_get_wchar_ctor_locinfo(num_get *this,
3214 _Locinfo *locinfo, MSVCP_size_t refs)
3216 FIXME("(%p %p %lu) stub\n", this, locinfo, refs);
3217 return NULL;
3220 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
3221 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
3222 DEFINE_THISCALL_WRAPPER(num_get_short_ctor_locinfo, 12)
3223 num_get* __thiscall num_get_short_ctor_locinfo(num_get *this,
3224 _Locinfo *locinfo, MSVCP_size_t refs)
3226 FIXME("(%p %p %lu) stub\n", this, locinfo, refs);
3227 return NULL;
3230 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
3231 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
3232 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor_refs, 8)
3233 num_get* __thiscall num_get_wchar_ctor_refs(num_get *this, MSVCP_size_t refs)
3235 FIXME("(%p %lu) stub\n", this, refs);
3236 return NULL;
3239 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
3240 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
3241 DEFINE_THISCALL_WRAPPER(num_get_short_ctor_refs, 8)
3242 num_get* __thiscall num_get_short_ctor_refs(num_get *this, MSVCP_size_t refs)
3244 FIXME("(%p %lu) stub\n", this, refs);
3245 return NULL;
3248 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
3249 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
3250 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor, 4)
3251 num_get* __thiscall num_get_wchar_ctor(num_get *this)
3253 FIXME("(%p) stub\n", this);
3254 return NULL;
3257 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
3258 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
3259 DEFINE_THISCALL_WRAPPER(num_get_short_ctor, 4)
3260 num_get* __thiscall num_get_short_ctor(num_get *this)
3262 FIXME("(%p) stub\n", this);
3263 return NULL;
3266 /* ??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
3267 /* ??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
3268 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
3269 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
3270 DEFINE_THISCALL_WRAPPER(num_get_wchar_dtor, 4)
3271 void __thiscall num_get_wchar_dtor(num_get *this)
3273 FIXME("(%p) stub\n", this);
3276 DEFINE_THISCALL_WRAPPER(MSVCP_num_get_wchar_vector_dtor, 8)
3277 num_get* __thiscall MSVCP_num_get_wchar_vector_dtor(num_get *this, unsigned int flags)
3279 TRACE("(%p %x)\n", this, flags);
3280 if(flags & 2) {
3281 /* we have an array, with the number of elements stored before the first object */
3282 int i, *ptr = (int *)this-1;
3284 for(i=*ptr-1; i>=0; i--)
3285 num_get_wchar_dtor(this+i);
3286 MSVCRT_operator_delete(ptr);
3287 } else {
3288 num_get_wchar_dtor(this);
3289 if(flags & 1)
3290 MSVCRT_operator_delete(this);
3293 return this;
3296 DEFINE_THISCALL_WRAPPER(MSVCP_num_get_short_vector_dtor, 8)
3297 num_get* __thiscall MSVCP_num_get_short_vector_dtor(num_get *this, unsigned int flags)
3299 return MSVCP_num_get_wchar_vector_dtor(this, flags);
3302 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3303 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3304 MSVCP_size_t __cdecl num_get_wchar__Getcat(const locale_facet **facet, const locale *loc)
3306 FIXME("(%p %p) stub\n", facet, loc);
3307 return -1;
3310 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3311 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3312 MSVCP_size_t __cdecl num_get_short__Getcat(const locale_facet **facet, const locale *loc)
3314 FIXME("(%p %p) stub\n", facet, loc);
3315 return -1;
3318 /* ?_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 */
3319 /* ?_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 */
3320 /* ?_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 */
3321 /* ?_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 */
3322 int __cdecl num_get_wchar__Getffld(num_get *this, char *dest, istreambuf_iterator_wchar *first,
3323 istreambuf_iterator_wchar *last, const locale *loc)
3325 FIXME("(%p %p %p %p) stub\n", dest, first, last, loc);
3326 return -1;
3329 /* ?_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 */
3330 /* ?_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 */
3331 /* ?_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 */
3332 /* ?_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 */
3333 int __cdecl num_get_wchar__Getffldx(num_get *this, char *dest, istreambuf_iterator_wchar *first,
3334 istreambuf_iterator_wchar *last, struct _ios_base *ios, int *phexexp)
3336 FIXME("(%p %p %p %p %p) stub\n", dest, first, last, ios, phexexp);
3337 return -1;
3340 /* ?_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 */
3341 /* ?_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 */
3342 /* ?_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 */
3343 /* ?_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 */
3344 int __cdecl num_get_wchar__Getifld(num_get *this, char *dest, istreambuf_iterator_wchar *first,
3345 istreambuf_iterator_wchar *last, int fmtflags, const locale *loc)
3347 FIXME("(%p %p %p %04x %p) stub\n", dest, first, last, fmtflags, loc);
3348 return -1;
3351 /* ?_Hexdig@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABEH_W000@Z */
3352 /* ?_Hexdig@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAH_W000@Z */
3353 /* ?_Hexdig@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABEHGGGG@Z */
3354 /* ?_Hexdig@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHGGGG@Z */
3355 DEFINE_THISCALL_WRAPPER(MSVCP_num_get_wchar__Hexdig, 20)
3356 int __thiscall MSVCP_num_get_wchar__Hexdig(num_get *this, wchar_t dig, wchar_t e0, wchar_t al, wchar_t au)
3358 FIXME("(%p %c %c %c %c) stub\n", this, dig, e0, al, au);
3359 return -1;
3362 /* ?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 */
3363 /* ?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 */
3364 /* ?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 */
3365 /* ?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 */
3366 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_void,36)
3367 istreambuf_iterator_wchar *__thiscall num_get_wchar_do_get_void(const num_get *this, istreambuf_iterator_wchar *ret,
3368 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, void **pval)
3370 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3371 return ret;
3374 /* ?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 */
3375 /* ?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 */
3376 /* ?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 */
3377 /* ?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 */
3378 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_void,36)
3379 istreambuf_iterator_wchar *__thiscall num_get_wchar_get_void(const num_get *this, istreambuf_iterator_wchar *ret,
3380 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, void **pval)
3382 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3383 return ret;
3386 /* ?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 */
3387 /* ?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 */
3388 /* ?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 */
3389 /* ?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 */
3390 /* ?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 */
3391 /* ?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 */
3392 /* ?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 */
3393 /* ?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 */
3394 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_double,36)
3395 istreambuf_iterator_wchar *__thiscall num_get_wchar_do_get_double(const num_get *this, istreambuf_iterator_wchar *ret,
3396 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, double *pval)
3398 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3399 return ret;
3402 /* ?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 */
3403 /* ?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 */
3404 /* ?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 */
3405 /* ?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 */
3406 /* ?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 */
3407 /* ?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 */
3408 /* ?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 */
3409 /* ?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 */
3410 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_double,36)
3411 istreambuf_iterator_wchar *__thiscall num_get_wchar_get_double(const num_get *this, istreambuf_iterator_wchar *ret,
3412 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, double *pval)
3414 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3415 return ret;
3418 /* ?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 */
3419 /* ?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 */
3420 /* ?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 */
3421 /* ?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 */
3422 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_float,36)
3423 istreambuf_iterator_wchar *__thiscall num_get_wchar_do_get_float(const num_get *this, istreambuf_iterator_wchar *ret,
3424 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, float *pval)
3426 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3427 return ret;
3430 /* ?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 */
3431 /* ?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 */
3432 /* ?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 */
3433 /* ?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 */
3434 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_float,36)
3435 istreambuf_iterator_wchar *__thiscall num_get_wchar_get_float(const num_get *this, istreambuf_iterator_wchar *ret,
3436 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, float *pval)
3438 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3439 return ret;
3442 /* ?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 */
3443 /* ?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 */
3444 /* ?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 */
3445 /* ?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 */
3446 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_uint64,36)
3447 istreambuf_iterator_wchar *__thiscall num_get_wchar_do_get_uint64(const num_get *this, istreambuf_iterator_wchar *ret,
3448 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, ULONGLONG *pval)
3450 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3451 return ret;
3454 /* ?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 */
3455 /* ?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 */
3456 /* ?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 */
3457 /* ?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 */
3458 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_uint64,36)
3459 istreambuf_iterator_wchar *__thiscall num_get_wchar_get_uint64(const num_get *this, istreambuf_iterator_wchar *ret,
3460 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, ULONGLONG *pval)
3462 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3463 return ret;
3466 /* ?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 */
3467 /* ?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 */
3468 /* ?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 */
3469 /* ?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 */
3470 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_int64,36)
3471 istreambuf_iterator_wchar *__thiscall num_get_wchar_do_get_int64(const num_get *this, istreambuf_iterator_wchar *ret,
3472 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, LONGLONG *pval)
3474 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3475 return ret;
3478 /* ?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 */
3479 /* ?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 */
3480 /* ?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 */
3481 /* ?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 */
3482 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_int64,36)
3483 istreambuf_iterator_wchar *__thiscall num_get_wchar_get_int64(const num_get *this, istreambuf_iterator_wchar *ret,
3484 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, LONGLONG *pval)
3486 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3487 return ret;
3490 /* ?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 */
3491 /* ?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 */
3492 /* ?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 */
3493 /* ?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 */
3494 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_ulong,36)
3495 istreambuf_iterator_wchar *__thiscall num_get_wchar_do_get_ulong(const num_get *this, istreambuf_iterator_wchar *ret,
3496 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, ULONG *pval)
3498 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3499 return ret;
3502 /* ?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 */
3503 /* ?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 */
3504 /* ?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 */
3505 /* ?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 */
3506 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ulong,36)
3507 istreambuf_iterator_wchar *__thiscall num_get_wchar_get_ulong(const num_get *this, istreambuf_iterator_wchar *ret,
3508 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, ULONG *pval)
3510 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3511 return ret;
3514 /* ?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 */
3515 /* ?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 */
3516 /* ?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 */
3517 /* ?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 */
3518 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_long,36)
3519 istreambuf_iterator_wchar *__thiscall num_get_wchar_do_get_long(const num_get *this, istreambuf_iterator_wchar *ret,
3520 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, LONG *pval)
3522 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3523 return ret;
3526 /* ?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 */
3527 /* ?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 */
3528 /* ?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 */
3529 /* ?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 */
3530 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_long,36)
3531 istreambuf_iterator_wchar *__thiscall num_get_wchar_get_long(const num_get *this, istreambuf_iterator_wchar *ret,
3532 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, LONG *pval)
3534 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3535 return ret;
3538 /* ?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 */
3539 /* ?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 */
3540 /* ?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 */
3541 /* ?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 */
3542 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_uint,36)
3543 istreambuf_iterator_wchar *__thiscall num_get_wchar_do_get_uint(const num_get *this, istreambuf_iterator_wchar *ret,
3544 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, unsigned int *pval)
3546 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3547 return ret;
3550 /* ?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 */
3551 /* ?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 */
3552 /* ?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 */
3553 /* ?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 */
3554 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_uint,36)
3555 istreambuf_iterator_wchar *__thiscall num_get_wchar_get_uint(const num_get *this, istreambuf_iterator_wchar *ret,
3556 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, unsigned int *pval)
3558 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3559 return ret;
3562 /* ?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 */
3563 /* ?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 */
3564 /* ?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 */
3565 /* ?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 */
3566 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_ushort,36)
3567 istreambuf_iterator_wchar *__thiscall num_get_wchar_do_get_ushort(const num_get *this, istreambuf_iterator_wchar *ret,
3568 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, unsigned short *pval)
3570 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3571 return ret;
3574 /* ?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 */
3575 /* ?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 */
3576 /* ?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@ */
3577 /* ?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 */
3578 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ushort,36)
3579 istreambuf_iterator_wchar *__thiscall num_get_wchar_get_ushort(const num_get *this, istreambuf_iterator_wchar *ret,
3580 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, unsigned short *pval)
3582 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3583 return ret;
3586 /* ?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 */
3587 /* ?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 */
3588 /* ?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 */
3589 /* ?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 */
3590 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_bool,36)
3591 istreambuf_iterator_wchar *__thiscall num_get_wchar_do_get_bool(const num_get *this, istreambuf_iterator_wchar *ret,
3592 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, MSVCP_bool *pval)
3594 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3595 return ret;
3598 /* ?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 */
3599 /* ?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 */
3600 /* ?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 */
3601 /* ?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 */
3602 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_bool,36)
3603 istreambuf_iterator_wchar *__thiscall num_get_wchar_get_bool(const num_get *this, istreambuf_iterator_wchar *ret,
3604 istreambuf_iterator_wchar first, istreambuf_iterator_wchar last, struct _ios_base *base, int *state, MSVCP_bool *pval)
3606 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3607 return ret;
3610 /* ?id@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
3611 locale_id num_get_char_id = {0};
3613 /* ??_7?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
3614 extern const vtable_ptr MSVCP_num_get_char_vtable;
3616 /* ?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
3617 /* ?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
3618 DEFINE_THISCALL_WRAPPER(num_get_char_ctor__Init, 8)
3619 void __thiscall num_get_char_ctor__Init(num_get *this, const _Locinfo *locinfo)
3621 FIXME("(%p %p) stub\n", this, locinfo);
3624 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
3625 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
3626 DEFINE_THISCALL_WRAPPER(num_get_char_ctor_locinfo, 12)
3627 num_get* __thiscall num_get_char_ctor_locinfo(num_get *this,
3628 _Locinfo *locinfo, MSVCP_size_t refs)
3630 FIXME("(%p %p %lu) stub\n", this, locinfo, refs);
3631 return NULL;
3634 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
3635 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
3636 DEFINE_THISCALL_WRAPPER(num_get_char_ctor_refs, 8)
3637 num_get* __thiscall num_get_char_ctor_refs(num_get *this, MSVCP_size_t refs)
3639 FIXME("(%p %lu) stub\n", this, refs);
3640 return NULL;
3643 /* ??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
3644 /* ??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
3645 DEFINE_THISCALL_WRAPPER(num_get_char_ctor, 4)
3646 num_get* __thiscall num_get_char_ctor(num_get *this)
3648 FIXME("(%p) stub\n", this);
3649 return NULL;
3652 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
3653 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
3654 DEFINE_THISCALL_WRAPPER(num_get_char_dtor, 4)
3655 void __thiscall num_get_char_dtor(num_get *this)
3657 FIXME("(%p) stub\n", this);
3660 DEFINE_THISCALL_WRAPPER(MSVCP_num_get_char_vector_dtor, 8)
3661 num_get* __thiscall MSVCP_num_get_char_vector_dtor(num_get *this, unsigned int flags)
3663 TRACE("(%p %x)\n", this, flags);
3664 if(flags & 2) {
3665 /* we have an array, with the number of elements stored before the first object */
3666 int i, *ptr = (int *)this-1;
3668 for(i=*ptr-1; i>=0; i--)
3669 num_get_char_dtor(this+i);
3670 MSVCRT_operator_delete(ptr);
3671 } else {
3672 num_get_char_dtor(this);
3673 if(flags & 1)
3674 MSVCRT_operator_delete(this);
3677 return this;
3680 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3681 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3682 MSVCP_size_t __cdecl num_get_char__Getcat(const locale_facet **facet, const locale *loc)
3684 FIXME("(%p %p) stub\n", facet, loc);
3685 return -1;
3688 /* ?_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 */
3689 /* ?_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 */
3690 int __cdecl num_get_char__Getffld(num_get *this, char *dest, istreambuf_iterator_char *first,
3691 istreambuf_iterator_char *last, const locale *loc)
3693 FIXME("(%p %p %p %p) stub\n", dest, first, last, loc);
3694 return -1;
3697 /* ?_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 */
3698 /* ?_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 */
3699 int __cdecl num_get_char__Getffldx(num_get *this, char *dest, istreambuf_iterator_char *first,
3700 istreambuf_iterator_char *last, struct _ios_base *ios, int *phexexp)
3702 FIXME("(%p %p %p %p %p) stub\n", dest, first, last, ios, phexexp);
3703 return -1;
3706 /* ?_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 */
3707 /* ?_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 */
3708 int __cdecl num_get_char__Getifld(num_get *this, char *dest, istreambuf_iterator_char *first,
3709 istreambuf_iterator_char *last, int fmtflags, const locale *loc)
3711 FIXME("(%p %p %p %04x %p) stub\n", dest, first, last, fmtflags, loc);
3712 return -1;
3715 /* ?_Hexdig@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABEHD000@Z */
3716 /* ?_Hexdig@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHD000@Z */
3717 DEFINE_THISCALL_WRAPPER(MSVCP_num_get_char__Hexdig, 20)
3718 int __thiscall MSVCP_num_get_char__Hexdig(num_get *this, char dig, char e0, char al, char au)
3720 FIXME("(%p %c %c %c %c) stub\n", this, dig, e0, al, au);
3721 return -1;
3724 /* ?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 */
3725 /* ?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 */
3726 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_void,36)
3727 istreambuf_iterator_char *__thiscall num_get_char_do_get_void(const num_get *this, istreambuf_iterator_char *ret,
3728 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, void **pval)
3730 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3731 return ret;
3734 /* ?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 */
3735 /* ?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 */
3736 DEFINE_THISCALL_WRAPPER(num_get_char_get_void,36)
3737 istreambuf_iterator_char *__thiscall num_get_char_get_void(const num_get *this, istreambuf_iterator_char *ret,
3738 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, void **pval)
3740 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3741 return ret;
3744 /* ?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 */
3745 /* ?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 */
3746 /* ?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 */
3747 /* ?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 */
3748 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_double,36)
3749 istreambuf_iterator_char *__thiscall num_get_char_do_get_double(const num_get *this, istreambuf_iterator_char *ret,
3750 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, double *pval)
3752 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3753 return ret;
3756 /* ?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 */
3757 /* ?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 */
3758 /* ?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 */
3759 /* ?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 */
3760 DEFINE_THISCALL_WRAPPER(num_get_char_get_double,36)
3761 istreambuf_iterator_char *__thiscall num_get_char_get_double(const num_get *this, istreambuf_iterator_char *ret,
3762 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, double *pval)
3764 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3765 return ret;
3768 /* ?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 */
3769 /* ?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 */
3770 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_float,36)
3771 istreambuf_iterator_char *__thiscall num_get_char_do_get_float(const num_get *this, istreambuf_iterator_char *ret,
3772 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, float *pval)
3774 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3775 return ret;
3778 /* ?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 */
3779 /* ?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 */
3780 DEFINE_THISCALL_WRAPPER(num_get_char_get_float,36)
3781 istreambuf_iterator_char *__thiscall num_get_char_get_float(const num_get *this, istreambuf_iterator_char *ret,
3782 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, float *pval)
3784 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3785 return ret;
3788 /* ?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 */
3789 /* ?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 */
3790 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_uint64,36)
3791 istreambuf_iterator_char *__thiscall num_get_char_do_get_uint64(const num_get *this, istreambuf_iterator_char *ret,
3792 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, ULONGLONG *pval)
3794 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3795 return ret;
3798 /* ?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 */
3799 /* ?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 */
3800 DEFINE_THISCALL_WRAPPER(num_get_char_get_uint64,36)
3801 istreambuf_iterator_char *__thiscall num_get_char_get_uint64(const num_get *this, istreambuf_iterator_char *ret,
3802 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, ULONGLONG *pval)
3804 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3805 return ret;
3808 /* ?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 */
3809 /* ?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 */
3810 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_int64,36)
3811 istreambuf_iterator_char *__thiscall num_get_char_do_get_int64(const num_get *this, istreambuf_iterator_char *ret,
3812 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, LONGLONG *pval)
3814 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3815 return ret;
3818 /* ?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 */
3819 /* ?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 */
3820 DEFINE_THISCALL_WRAPPER(num_get_char_get_int64,36)
3821 istreambuf_iterator_char *__thiscall num_get_char_get_int64(const num_get *this, istreambuf_iterator_char *ret,
3822 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, LONGLONG *pval)
3824 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3825 return ret;
3828 /* ?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 */
3829 /* ?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 */
3830 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_ulong,36)
3831 istreambuf_iterator_char *__thiscall num_get_char_do_get_ulong(const num_get *this, istreambuf_iterator_char *ret,
3832 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, ULONG *pval)
3834 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3835 return ret;
3838 /* ?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 */
3839 /* ?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 */
3840 DEFINE_THISCALL_WRAPPER(num_get_char_get_ulong,36)
3841 istreambuf_iterator_char *__thiscall num_get_char_get_ulong(const num_get *this, istreambuf_iterator_char *ret,
3842 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, ULONG *pval)
3844 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3845 return ret;
3848 /* ?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 */
3849 /* ?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 */
3850 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_long,36)
3851 istreambuf_iterator_char *__thiscall num_get_char_do_get_long(const num_get *this, istreambuf_iterator_char *ret,
3852 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, LONG *pval)
3854 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3855 return ret;
3858 /* ?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 */
3859 /* ?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 */
3860 DEFINE_THISCALL_WRAPPER(num_get_char_get_long,36)
3861 istreambuf_iterator_char *__thiscall num_get_char_get_long(const num_get *this, istreambuf_iterator_char *ret,
3862 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, LONG *pval)
3864 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3865 return ret;
3868 /* ?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 */
3869 /* ?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 */
3870 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_uint,36)
3871 istreambuf_iterator_char *__thiscall num_get_char_do_get_uint(const num_get *this, istreambuf_iterator_char *ret,
3872 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, unsigned int *pval)
3874 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3875 return ret;
3878 /* ?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 */
3879 /* ?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 */
3880 DEFINE_THISCALL_WRAPPER(num_get_char_get_uint,36)
3881 istreambuf_iterator_char *__thiscall num_get_char_get_uint(const num_get *this, istreambuf_iterator_char *ret,
3882 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, unsigned int *pval)
3884 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3885 return ret;
3888 /* ?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 */
3889 /* ?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 */
3890 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_ushort,36)
3891 istreambuf_iterator_char *__thiscall num_get_char_do_get_ushort(const num_get *this, istreambuf_iterator_char *ret,
3892 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, unsigned short *pval)
3894 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3895 return ret;
3898 /* ?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 */
3899 /* ?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 */
3900 DEFINE_THISCALL_WRAPPER(num_get_char_get_ushort,36)
3901 istreambuf_iterator_char *__thiscall num_get_char_get_ushort(const num_get *this, istreambuf_iterator_char *ret,
3902 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, unsigned short *pval)
3904 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3905 return ret;
3908 /* ?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 */
3909 /* ?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 */
3910 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_bool,36)
3911 istreambuf_iterator_char *__thiscall num_get_char_do_get_bool(const num_get *this, istreambuf_iterator_char *ret,
3912 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, MSVCP_bool *pval)
3914 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3915 return ret;
3918 /* ?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 */
3919 /* ?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 */
3920 DEFINE_THISCALL_WRAPPER(num_get_char_get_bool,36)
3921 istreambuf_iterator_char *__thiscall num_get_char_get_bool(const num_get *this, istreambuf_iterator_char *ret,
3922 istreambuf_iterator_char first, istreambuf_iterator_char last, struct _ios_base *base, int *state, MSVCP_bool *pval)
3924 FIXME("(%p %p %p %p %p) stub\n", this, ret, base, state, pval);
3925 return ret;
3928 /* ??0_Locimp@locale@std@@AAE@_N@Z */
3929 /* ??0_Locimp@locale@std@@AEAA@_N@Z */
3930 DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor_transparent, 8)
3931 locale__Locimp* __thiscall locale__Locimp_ctor_transparent(locale__Locimp *this, MSVCP_bool transparent)
3933 TRACE("(%p %d)\n", this, transparent);
3935 memset(this, 0, sizeof(locale__Locimp));
3936 locale_facet_ctor_refs(&this->facet, 1);
3937 this->transparent = transparent;
3938 MSVCP_basic_string_char_ctor_cstr(&this->name, "*");
3939 return this;
3942 /* ??_F_Locimp@locale@std@@QAEXXZ */
3943 /* ??_F_Locimp@locale@std@@QEAAXXZ */
3944 DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor, 4)
3945 locale__Locimp* __thiscall locale__Locimp_ctor(locale__Locimp *this)
3947 return locale__Locimp_ctor_transparent(this, FALSE);
3950 /* ??0_Locimp@locale@std@@AAE@ABV012@@Z */
3951 /* ??0_Locimp@locale@std@@AEAA@AEBV012@@Z */
3952 DEFINE_THISCALL_WRAPPER(locale__Locimp_copy_ctor, 8)
3953 locale__Locimp* __thiscall locale__Locimp_copy_ctor(locale__Locimp *this, const locale__Locimp *copy)
3955 _Lockit lock;
3956 MSVCP_size_t i;
3958 TRACE("(%p %p)\n", this, copy);
3960 _Lockit_ctor_locktype(&lock, _LOCK_LOCALE);
3961 memcpy(this, copy, sizeof(locale__Locimp));
3962 locale_facet_ctor_refs(&this->facet, 1);
3963 if(copy->facetvec) {
3964 this->facetvec = MSVCRT_operator_new(copy->facet_cnt*sizeof(locale_facet*));
3965 if(!this->facetvec) {
3966 _Lockit_dtor(&lock);
3967 ERR("Out of memory\n");
3968 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
3969 return NULL;
3971 for(i=0; i<this->facet_cnt; i++)
3972 if(this->facetvec[i])
3973 locale_facet__Incref(this->facetvec[i]);
3975 MSVCP_basic_string_char_copy_ctor(&this->name, &copy->name);
3976 _Lockit_dtor(&lock);
3977 return this;
3980 /* ?_Locimp_ctor@_Locimp@locale@std@@CAXPAV123@ABV123@@Z */
3981 /* ?_Locimp_ctor@_Locimp@locale@std@@CAXPEAV123@AEBV123@@Z */
3982 locale__Locimp* __cdecl locale__Locimp__Locimp_ctor(locale__Locimp *this, const locale__Locimp *copy)
3984 return locale__Locimp_copy_ctor(this, copy);
3987 /* ??1_Locimp@locale@std@@MAE@XZ */
3988 /* ??1_Locimp@locale@std@@MEAA@XZ */
3989 DEFINE_THISCALL_WRAPPER(locale__Locimp_dtor, 4)
3990 void __thiscall locale__Locimp_dtor(locale__Locimp *this)
3992 TRACE("(%p)\n", this);
3994 if(locale_facet__Decref(&this->facet)) {
3995 MSVCP_size_t i;
3996 for(i=0; i<this->facet_cnt; i++)
3997 if(this->facetvec[i] && locale_facet__Decref(this->facetvec[i]))
3998 call_locale_facet_vector_dtor(this->facetvec[i], 0);
4000 MSVCRT_operator_delete(this->facetvec);
4001 MSVCP_basic_string_char_dtor(&this->name);
4005 /* ?_Locimp_dtor@_Locimp@locale@std@@CAXPAV123@@Z */
4006 /* ?_Locimp_dtor@_Locimp@locale@std@@CAXPEAV123@@Z */
4007 void __cdecl locale__Locimp__Locimp_dtor(locale__Locimp *this)
4009 locale__Locimp_dtor(this);
4012 DEFINE_THISCALL_WRAPPER(MSVCP_locale__Locimp_vector_dtor, 8)
4013 locale__Locimp* __thiscall MSVCP_locale__Locimp_vector_dtor(locale__Locimp *this, unsigned int flags)
4015 TRACE("(%p %x)\n", this, flags);
4016 if(flags & 2) {
4017 /* we have an array, with the number of elements stored before the first object */
4018 int i, *ptr = (int *)this-1;
4020 for(i=*ptr-1; i>=0; i--)
4021 locale__Locimp_dtor(this+i);
4022 MSVCRT_operator_delete(ptr);
4023 } else {
4024 locale__Locimp_dtor(this);
4025 if(flags & 1)
4026 MSVCRT_operator_delete(this);
4029 return this;
4032 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z */
4033 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPEAV123@PEAVfacet@23@_K@Z */
4034 void __cdecl locale__Locimp__Locimp_Addfac(locale__Locimp *locimp, locale_facet *facet, MSVCP_size_t id)
4036 _Lockit lock;
4038 TRACE("(%p %p %lu)\n", locimp, facet, id);
4040 _Lockit_ctor_locktype(&lock, _LOCK_LOCALE);
4041 if(id >= locimp->facet_cnt) {
4042 MSVCP_size_t new_size = id+1;
4043 locale_facet **new_facetvec;
4045 if(new_size < locale_id__Id_cnt+1)
4046 new_size = locale_id__Id_cnt+1;
4048 new_facetvec = MSVCRT_operator_new(sizeof(locale_facet*)*new_size);
4049 if(!new_facetvec) {
4050 _Lockit_dtor(&lock);
4051 ERR("Out of memory\n");
4052 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
4053 return;
4056 memset(new_facetvec, 0, sizeof(locale_facet*)*new_size);
4057 memcpy(new_facetvec, locimp->facetvec, sizeof(locale_facet*)*locimp->facet_cnt);
4058 MSVCRT_operator_delete(locimp->facetvec);
4059 locimp->facetvec = new_facetvec;
4060 locimp->facet_cnt = new_size;
4063 if(locimp->facetvec[id] && locale_facet__Decref(locimp->facetvec[id]))
4064 call_locale_facet_vector_dtor(locimp->facetvec[id], 0);
4066 locimp->facetvec[id] = facet;
4067 if(facet)
4068 locale_facet__Incref(facet);
4069 _Lockit_dtor(&lock);
4072 /* ?_Addfac@_Locimp@locale@std@@AAEXPAVfacet@23@I@Z */
4073 /* ?_Addfac@_Locimp@locale@std@@AEAAXPEAVfacet@23@_K@Z */
4074 DEFINE_THISCALL_WRAPPER(locale__Locimp__Addfac, 12)
4075 void __thiscall locale__Locimp__Addfac(locale__Locimp *this, locale_facet *facet, MSVCP_size_t id)
4077 locale__Locimp__Locimp_Addfac(this, facet, id);
4080 /* ?_Clocptr_func@_Locimp@locale@std@@CAAAPAV123@XZ */
4081 /* ?_Clocptr_func@_Locimp@locale@std@@CAAEAPEAV123@XZ */
4082 locale__Locimp** __cdecl locale__Locimp__Clocptr_func(void)
4084 FIXME("stub\n");
4085 return NULL;
4088 /* ?_Makeloc@_Locimp@locale@std@@CAPAV123@ABV_Locinfo@3@HPAV123@PBV23@@Z */
4089 /* ?_Makeloc@_Locimp@locale@std@@CAPEAV123@AEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
4090 locale__Locimp* __cdecl locale__Locimp__Makeloc(const _Locinfo *locinfo, category cat, locale__Locimp *locimp, const locale *loc)
4092 FIXME("(%p %d %p %p) stub\n", locinfo, cat, locimp, loc);
4093 return NULL;
4096 /* ?_Makeushloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
4097 /* ?_Makeushloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
4098 void __cdecl locale__Locimp__Makeushloc(const _Locinfo *locinfo, category cat, locale__Locimp *locimp, const locale *loc)
4100 FIXME("(%p %d %p %p) stub\n", locinfo, cat, locimp, loc);
4103 /* ?_Makewloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
4104 /* ?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
4105 void __cdecl locale__Locimp__Makewloc(const _Locinfo *locinfo, category cat, locale__Locimp *locimp, const locale *loc)
4107 FIXME("(%p %d %p %p) stub\n", locinfo, cat, locimp, loc);
4110 /* ?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
4111 /* ?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
4112 void __cdecl locale__Locimp__Makexloc(const _Locinfo *locinfo, category cat, locale__Locimp *locimp, const locale *loc)
4114 FIXME("(%p %d %p %p) stub\n", locinfo, cat, locimp, loc);
4117 /* ??_7_Locimp@locale@std@@6B@ */
4118 const vtable_ptr MSVCP_locale__Locimp_vtable[] = {
4119 (vtable_ptr)THISCALL_NAME(MSVCP_locale__Locimp_vector_dtor)
4122 /* ??0locale@std@@AAE@PAV_Locimp@01@@Z */
4123 /* ??0locale@std@@AEAA@PEAV_Locimp@01@@Z */
4124 DEFINE_THISCALL_WRAPPER(locale_ctor_locimp, 8)
4125 locale* __thiscall locale_ctor_locimp(locale *this, locale__Locimp *locimp)
4127 TRACE("(%p %p)\n", this, locimp);
4128 /* Don't change locimp reference counter */
4129 this->ptr = locimp;
4130 return this;
4133 /* ??0locale@std@@QAE@ABV01@0H@Z */
4134 /* ??0locale@std@@QEAA@AEBV01@0H@Z */
4135 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_locale, 16)
4136 locale* __thiscall locale_ctor_locale_locale(locale *this, const locale *loc, const locale *other, category cat)
4138 FIXME("(%p %p %p %d) stub\n", this, loc, other, cat);
4139 return NULL;
4142 /* ??0locale@std@@QAE@ABV01@@Z */
4143 /* ??0locale@std@@QEAA@AEBV01@@Z */
4144 DEFINE_THISCALL_WRAPPER(locale_copy_ctor, 8)
4145 locale* __thiscall locale_copy_ctor(locale *this, const locale *copy)
4147 TRACE("(%p %p)\n", this, copy);
4148 this->ptr = copy->ptr;
4149 locale_facet__Incref(&this->ptr->facet);
4150 return this;
4153 /* ??0locale@std@@QAE@ABV01@PBDH@Z */
4154 /* ??0locale@std@@QEAA@AEBV01@PEBDH@Z */
4155 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_cstr, 16)
4156 locale* __thiscall locale_ctor_locale_cstr(locale *this, const locale *loc, const char *locname, category cat)
4158 FIXME("(%p %p %s %d) stub\n", this, loc, locname, cat);
4159 return NULL;
4162 /* ??0locale@std@@QAE@PBDH@Z */
4163 /* ??0locale@std@@QEAA@PEBDH@Z */
4164 DEFINE_THISCALL_WRAPPER(locale_ctor_cstr, 12)
4165 locale* __thiscall locale_ctor_cstr(locale *this, const char *locname, category cat)
4167 FIXME("(%p %s %d) stub\n", this, locname, cat);
4168 return NULL;
4171 /* ??0locale@std@@QAE@W4_Uninitialized@1@@Z */
4172 /* ??0locale@std@@QEAA@W4_Uninitialized@1@@Z */
4173 DEFINE_THISCALL_WRAPPER(locale_ctor_uninitialized, 8)
4174 locale* __thiscall locale_ctor_uninitialized(locale *this, int uninitialized)
4176 TRACE("(%p)\n", this);
4177 this->ptr = NULL;
4178 return this;
4181 /* ??0locale@std@@QAE@XZ */
4182 /* ??0locale@std@@QEAA@XZ */
4183 DEFINE_THISCALL_WRAPPER(locale_ctor, 4)
4184 locale* __thiscall locale_ctor(locale *this)
4186 TRACE("(%p)\n", this);
4187 this->ptr = MSVCRT_operator_new(sizeof(locale__Locimp));
4188 if(!this->ptr) {
4189 ERR("Out of memory\n");
4190 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
4191 return NULL;
4194 locale__Locimp_ctor(this->ptr);
4195 return this;
4198 /* ??1locale@std@@QAE@XZ */
4199 /* ??1locale@std@@QEAA@XZ */
4200 DEFINE_THISCALL_WRAPPER(locale_dtor, 4)
4201 void __thiscall locale_dtor(locale *this)
4203 TRACE("(%p)\n", this);
4204 if(this->ptr)
4205 locale__Locimp_dtor(this->ptr);
4208 DEFINE_THISCALL_WRAPPER(MSVCP_locale_vector_dtor, 8)
4209 locale* __thiscall MSVCP_locale_vector_dtor(locale *this, unsigned int flags)
4211 TRACE("(%p %x)\n", this, flags);
4212 if(flags & 2) {
4213 /* we have an array, with the number of elements stored before the first object */
4214 int i, *ptr = (int *)this-1;
4216 for(i=*ptr-1; i>=0; i--)
4217 locale_dtor(this+i);
4218 MSVCRT_operator_delete(ptr);
4219 } else {
4220 locale_dtor(this);
4221 if(flags & 1)
4222 MSVCRT_operator_delete(this);
4225 return this;
4228 /* ??4locale@std@@QAEAAV01@ABV01@@Z */
4229 /* ??4locale@std@@QEAAAEAV01@AEBV01@@Z */
4230 DEFINE_THISCALL_WRAPPER(locale_operator_assign, 8)
4231 locale* __thiscall locale_operator_assign(locale *this, const locale *loc)
4233 FIXME("(%p %p) stub\n", this, loc);
4234 return NULL;
4237 /* ??8locale@std@@QBE_NABV01@@Z */
4238 /* ??8locale@std@@QEBA_NAEBV01@@Z */
4239 DEFINE_THISCALL_WRAPPER(locale_operator_equal, 8)
4240 MSVCP_bool __thiscall locale_operator_equal(const locale *this, const locale *loc)
4242 FIXME("(%p %p) stub\n", this, loc);
4243 return 0;
4246 /* ??9locale@std@@QBE_NABV01@@Z */
4247 /* ??9locale@std@@QEBA_NAEBV01@@Z */
4248 DEFINE_THISCALL_WRAPPER(locale_operator_not_equal, 8)
4249 MSVCP_bool __thiscall locale_operator_not_equal(const locale *this, locale const *loc)
4251 FIXME("(%p %p) stub\n", this, loc);
4252 return 0;
4255 /* ?_Addfac@locale@std@@QAEAAV12@PAVfacet@12@II@Z */
4256 /* ?_Addfac@locale@std@@QEAAAEAV12@PEAVfacet@12@_K1@Z */
4257 DEFINE_THISCALL_WRAPPER(locale__Addfac, 16)
4258 locale* __thiscall locale__Addfac(locale *this, locale_facet *facet, MSVCP_size_t id, MSVCP_size_t catmask)
4260 TRACE("(%p %p %lu %lu)\n", this, facet, id, catmask);
4262 if(this->ptr->facet.refs > 1) {
4263 locale__Locimp *new_ptr = MSVCRT_operator_new(sizeof(locale__Locimp));
4264 if(!new_ptr) {
4265 ERR("Out of memory\n");
4266 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
4267 return NULL;
4269 locale__Locimp_copy_ctor(new_ptr, this->ptr);
4270 locale_facet__Decref(&this->ptr->facet);
4271 this->ptr = new_ptr;
4274 locale__Locimp__Addfac(this->ptr, facet, id);
4276 if(catmask) {
4277 MSVCP_basic_string_char_dtor(&this->ptr->name);
4278 MSVCP_basic_string_char_ctor_cstr(&this->ptr->name, "*");
4280 return this;
4283 /* ?_Getfacet@locale@std@@QBEPBVfacet@12@I@Z */
4284 /* ?_Getfacet@locale@std@@QEBAPEBVfacet@12@_K@Z */
4285 DEFINE_THISCALL_WRAPPER(locale__Getfacet, 8)
4286 const locale_facet* __thiscall locale__Getfacet(const locale *this, MSVCP_size_t id)
4288 FIXME("(%p %lu) stub\n", this, id);
4289 return NULL;
4292 /* ?_Init@locale@std@@CAPAV_Locimp@12@XZ */
4293 /* ?_Init@locale@std@@CAPEAV_Locimp@12@XZ */
4294 locale__Locimp* __cdecl locale__Init(void)
4296 FIXME("stub\n");
4297 return NULL;
4300 /* ?_Getgloballocale@locale@std@@CAPAV_Locimp@12@XZ */
4301 /* ?_Getgloballocale@locale@std@@CAPEAV_Locimp@12@XZ */
4302 locale__Locimp* __cdecl locale__Getgloballocale(void)
4304 FIXME("stub\n");
4305 return NULL;
4308 /* ?_Setgloballocale@locale@std@@CAXPAX@Z */
4309 /* ?_Setgloballocale@locale@std@@CAXPEAX@Z */
4310 void __cdecl locale__Setgloballocale(void *locimp)
4312 FIXME("(%p) stub\n", locimp);
4315 /* ?classic@locale@std@@SAABV12@XZ */
4316 /* ?classic@locale@std@@SAAEBV12@XZ */
4317 const locale* __cdecl locale_classic(void)
4319 FIXME("stub\n");
4320 return NULL;
4323 /* ?name@locale@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4324 /* ?name@locale@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4325 DEFINE_THISCALL_WRAPPER(locale_name, 8)
4326 basic_string_char* __thiscall locale_name(const locale *this, basic_string_char *ret)
4328 TRACE( "(%p)\n", this);
4329 MSVCP_basic_string_char_copy_ctor(ret, &this->ptr->name);
4330 return ret;
4333 DEFINE_RTTI_DATA(locale_facet, 0, 0, NULL, NULL, NULL, ".?AVfacet@locale@std@@");
4334 DEFINE_RTTI_DATA(collate_char, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$collate@D@std@@");
4335 DEFINE_RTTI_DATA(collate_wchar, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$collate@_W@std@@");
4336 DEFINE_RTTI_DATA(collate_short, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$collate@G@std@@");
4337 DEFINE_RTTI_DATA(ctype_base, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AUctype_base@std@@");
4338 DEFINE_RTTI_DATA(ctype_char, 0, 2, &ctype_base_rtti_base_descriptor, &locale_facet_rtti_base_descriptor, NULL, ".?AV?$ctype@D@std@@");
4339 DEFINE_RTTI_DATA(ctype_wchar, 0, 2, &ctype_base_rtti_base_descriptor, &locale_facet_rtti_base_descriptor, NULL, ".?AV?$ctype@_W@std@@");
4340 DEFINE_RTTI_DATA(ctype_short, 0, 2, &ctype_base_rtti_base_descriptor, &locale_facet_rtti_base_descriptor, NULL, ".?AV?$ctype@G@std@@");
4341 DEFINE_RTTI_DATA(codecvt_base, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AVcodecvt_base@std@@");
4342 DEFINE_RTTI_DATA(numpunct_char, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$numpunct@D@std@@");
4343 DEFINE_RTTI_DATA(numpunct_wchar, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$numpunct@_W@std@@");
4344 DEFINE_RTTI_DATA(numpunct_short, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$numpunct@G@std@@");
4345 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@@");
4346 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@@");
4347 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@@");
4349 #ifndef __GNUC__
4350 void __asm_dummy_vtables(void) {
4351 #endif
4352 __ASM_VTABLE(locale_facet, "");
4353 __ASM_VTABLE(collate_char,
4354 VTABLE_ADD_FUNC(collate_char_do_compare)
4355 VTABLE_ADD_FUNC(collate_char_do_transform)
4356 VTABLE_ADD_FUNC(collate_char_do_hash));
4357 __ASM_VTABLE(collate_wchar,
4358 VTABLE_ADD_FUNC(collate_wchar_do_compare)
4359 VTABLE_ADD_FUNC(collate_wchar_do_transform)
4360 VTABLE_ADD_FUNC(collate_wchar_do_hash));
4361 __ASM_VTABLE(collate_short,
4362 VTABLE_ADD_FUNC(collate_wchar_do_compare)
4363 VTABLE_ADD_FUNC(collate_wchar_do_transform)
4364 VTABLE_ADD_FUNC(collate_wchar_do_hash));
4365 __ASM_VTABLE(ctype_base, "");
4366 __ASM_VTABLE(ctype_char,
4367 VTABLE_ADD_FUNC(ctype_char_do_tolower)
4368 VTABLE_ADD_FUNC(ctype_char_do_tolower_ch)
4369 VTABLE_ADD_FUNC(ctype_char_do_toupper)
4370 VTABLE_ADD_FUNC(ctype_char_do_toupper_ch)
4371 VTABLE_ADD_FUNC(ctype_char_do_widen)
4372 VTABLE_ADD_FUNC(ctype_char_do_widen_ch)
4373 VTABLE_ADD_FUNC(ctype_char__Do_widen_s)
4374 VTABLE_ADD_FUNC(ctype_char_do_narrow)
4375 VTABLE_ADD_FUNC(ctype_char_do_narrow_ch)
4376 VTABLE_ADD_FUNC(ctype_char__Do_narrow_s));
4377 __ASM_VTABLE(ctype_wchar,
4378 VTABLE_ADD_FUNC(ctype_wchar_do_is)
4379 VTABLE_ADD_FUNC(ctype_wchar_do_is_ch)
4380 VTABLE_ADD_FUNC(ctype_wchar_do_scan_is)
4381 VTABLE_ADD_FUNC(ctype_wchar_do_scan_not)
4382 VTABLE_ADD_FUNC(ctype_wchar_do_tolower)
4383 VTABLE_ADD_FUNC(ctype_wchar_do_tolower_ch)
4384 VTABLE_ADD_FUNC(ctype_wchar_do_toupper)
4385 VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch)
4386 VTABLE_ADD_FUNC(ctype_wchar_do_widen)
4387 VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch)
4388 VTABLE_ADD_FUNC(ctype_wchar__Do_widen_s)
4389 VTABLE_ADD_FUNC(ctype_wchar_do_narrow)
4390 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch)
4391 VTABLE_ADD_FUNC(ctype_wchar__Do_narrow_s));
4392 __ASM_VTABLE(ctype_short,
4393 VTABLE_ADD_FUNC(ctype_wchar_do_is)
4394 VTABLE_ADD_FUNC(ctype_wchar_do_is_ch)
4395 VTABLE_ADD_FUNC(ctype_wchar_do_scan_is)
4396 VTABLE_ADD_FUNC(ctype_wchar_do_scan_not)
4397 VTABLE_ADD_FUNC(ctype_wchar_do_tolower)
4398 VTABLE_ADD_FUNC(ctype_wchar_do_tolower_ch)
4399 VTABLE_ADD_FUNC(ctype_wchar_do_toupper)
4400 VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch)
4401 VTABLE_ADD_FUNC(ctype_wchar_do_widen)
4402 VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch)
4403 VTABLE_ADD_FUNC(ctype_wchar__Do_widen_s)
4404 VTABLE_ADD_FUNC(ctype_wchar_do_narrow)
4405 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch)
4406 VTABLE_ADD_FUNC(ctype_wchar__Do_narrow_s));
4407 __ASM_VTABLE(codecvt_base,
4408 VTABLE_ADD_FUNC(codecvt_base_do_always_noconv)
4409 VTABLE_ADD_FUNC(codecvt_base_do_max_length)
4410 VTABLE_ADD_FUNC(codecvt_base_do_encoding));
4411 __ASM_VTABLE(numpunct_char,
4412 VTABLE_ADD_FUNC(numpunct_char_do_decimal_point)
4413 VTABLE_ADD_FUNC(numpunct_char_do_thousands_sep)
4414 VTABLE_ADD_FUNC(numpunct_char_do_grouping)
4415 VTABLE_ADD_FUNC(numpunct_char_do_falsename)
4416 VTABLE_ADD_FUNC(numpunct_char_do_truename));
4417 __ASM_VTABLE(numpunct_wchar,
4418 VTABLE_ADD_FUNC(numpunct_wchar_do_decimal_point)
4419 VTABLE_ADD_FUNC(numpunct_wchar_do_thousands_sep)
4420 VTABLE_ADD_FUNC(numpunct_wchar_do_grouping)
4421 VTABLE_ADD_FUNC(numpunct_wchar_do_falsename)
4422 VTABLE_ADD_FUNC(numpunct_wchar_do_truename));
4423 __ASM_VTABLE(numpunct_short,
4424 VTABLE_ADD_FUNC(numpunct_wchar_do_decimal_point)
4425 VTABLE_ADD_FUNC(numpunct_wchar_do_thousands_sep)
4426 VTABLE_ADD_FUNC(numpunct_wchar_do_grouping)
4427 VTABLE_ADD_FUNC(numpunct_wchar_do_falsename)
4428 VTABLE_ADD_FUNC(numpunct_wchar_do_truename));
4429 __ASM_VTABLE(num_get_char,
4430 VTABLE_ADD_FUNC(num_get_char_do_get_void)
4431 VTABLE_ADD_FUNC(num_get_char_do_get_double)
4432 VTABLE_ADD_FUNC(num_get_char_do_get_double)
4433 VTABLE_ADD_FUNC(num_get_char_do_get_float)
4434 VTABLE_ADD_FUNC(num_get_char_do_get_uint64)
4435 VTABLE_ADD_FUNC(num_get_char_do_get_int64)
4436 VTABLE_ADD_FUNC(num_get_char_do_get_ulong)
4437 VTABLE_ADD_FUNC(num_get_char_do_get_long)
4438 VTABLE_ADD_FUNC(num_get_char_do_get_uint)
4439 VTABLE_ADD_FUNC(num_get_char_do_get_ushort)
4440 VTABLE_ADD_FUNC(num_get_char_do_get_bool));
4441 __ASM_VTABLE(num_get_short,
4442 VTABLE_ADD_FUNC(num_get_wchar_do_get_void)
4443 VTABLE_ADD_FUNC(num_get_wchar_do_get_double)
4444 VTABLE_ADD_FUNC(num_get_wchar_do_get_double)
4445 VTABLE_ADD_FUNC(num_get_wchar_do_get_float)
4446 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint64)
4447 VTABLE_ADD_FUNC(num_get_wchar_do_get_int64)
4448 VTABLE_ADD_FUNC(num_get_wchar_do_get_ulong)
4449 VTABLE_ADD_FUNC(num_get_wchar_do_get_long)
4450 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint)
4451 VTABLE_ADD_FUNC(num_get_wchar_do_get_ushort)
4452 VTABLE_ADD_FUNC(num_get_wchar_do_get_bool));
4453 __ASM_VTABLE(num_get_wchar,
4454 VTABLE_ADD_FUNC(num_get_wchar_do_get_void)
4455 VTABLE_ADD_FUNC(num_get_wchar_do_get_double)
4456 VTABLE_ADD_FUNC(num_get_wchar_do_get_double)
4457 VTABLE_ADD_FUNC(num_get_wchar_do_get_float)
4458 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint64)
4459 VTABLE_ADD_FUNC(num_get_wchar_do_get_int64)
4460 VTABLE_ADD_FUNC(num_get_wchar_do_get_ulong)
4461 VTABLE_ADD_FUNC(num_get_wchar_do_get_long)
4462 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint)
4463 VTABLE_ADD_FUNC(num_get_wchar_do_get_ushort)
4464 VTABLE_ADD_FUNC(num_get_wchar_do_get_bool));
4465 #ifndef __GNUC__
4467 #endif