msvcp90: Use macro to define RTTI data.
[wine/multimedia.git] / dlls / msvcp90 / locale.c
blob16eda9833f396e322c553ab06b3843f957294280
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"
26 #include "windef.h"
27 #include "winbase.h"
28 #include "wine/debug.h"
29 WINE_DEFAULT_DEBUG_CHANNEL(msvcp90);
31 char* __cdecl _Getdays(void);
32 char* __cdecl _Getmonths(void);
33 void* __cdecl _Gettnames(void);
35 typedef int category;
37 typedef struct {
38 MSVCP_size_t id;
39 } locale_id;
41 typedef struct {
42 const vtable_ptr *vtable;
43 MSVCP_size_t refs;
44 } locale_facet;
46 typedef struct _locale__Locimp {
47 locale_facet facet;
48 locale_facet **facetvec;
49 MSVCP_size_t facet_cnt;
50 category catmask;
51 MSVCP_bool transparent;
52 basic_string_char name;
53 } locale__Locimp;
55 typedef struct {
56 void *timeptr;
57 } _Timevec;
59 typedef struct {
60 _Lockit lock;
61 basic_string_char days;
62 basic_string_char months;
63 basic_string_char oldlocname;
64 basic_string_char newlocname;
65 } _Locinfo;
67 typedef struct {
68 LCID handle;
69 unsigned page;
70 } _Collvec;
72 typedef struct {
73 LCID handle;
74 unsigned page;
75 short *table;
76 int delfl;
77 } _Ctypevec;
79 typedef struct {
80 LCID handle;
81 unsigned page;
82 } _Cvtvec;
84 typedef struct {
85 locale_facet facet;
86 _Collvec coll;
87 } collate;
89 typedef struct {
90 locale_facet facet;
91 } ctype_base;
93 typedef struct {
94 ctype_base base;
95 _Ctypevec ctype;
96 } ctype_char;
98 typedef struct {
99 ctype_base base;
100 _Ctypevec ctype;
101 _Cvtvec cvt;
102 } ctype_wchar;
104 /* ?_Id_cnt@id@locale@std@@0HA */
105 int locale_id__Id_cnt = 0;
107 /* ?_Clocptr@_Locimp@locale@std@@0PAV123@A */
108 /* ?_Clocptr@_Locimp@locale@std@@0PEAV123@EA */
109 locale__Locimp *locale__Locimp__Clocptr = NULL;
111 /* ??1facet@locale@std@@UAE@XZ */
112 /* ??1facet@locale@std@@UEAA@XZ */
113 DEFINE_THISCALL_WRAPPER(locale_facet_dtor, 4)
114 void __thiscall locale_facet_dtor(locale_facet *this)
116 TRACE("(%p)\n", this);
119 DEFINE_THISCALL_WRAPPER(MSVCP_locale_facet_vector_dtor, 8)
120 locale_facet* __thiscall MSVCP_locale_facet_vector_dtor(locale_facet *this, unsigned int flags)
122 TRACE("(%p %x)\n", this, flags);
123 if(flags & 2) {
124 /* we have an array, with the number of elements stored before the first object */
125 int i, *ptr = (int *)this-1;
127 for(i=*ptr-1; i>=0; i--)
128 locale_facet_dtor(this+i);
129 MSVCRT_operator_delete(ptr);
130 } else {
131 locale_facet_dtor(this);
132 if(flags & 1)
133 MSVCRT_operator_delete(this);
136 return this;
139 const vtable_ptr MSVCP_locale_facet_vtable[] = {
140 (vtable_ptr)THISCALL_NAME(MSVCP_locale_facet_vector_dtor)
142 #ifdef __i386__
143 static inline locale_facet* call_locale_facet_vector_dtor(locale_facet *this, unsigned int flags)
145 locale_facet *ret;
146 void *dummy;
148 __asm__ __volatile__ ("pushl %3\n\tcall *%2"
149 : "=a" (ret), "=c" (dummy)
150 : "r" (this->vtable[0]), "r" (flags), "1" (this)
151 : "edx", "memory" );
152 return ret;
154 #else
155 static inline locale_facet* call_locale_facet_vector_dtor(locale_facet *this, unsigned int flags)
157 locale_facet * (__thiscall *dtor)(locale_facet *, unsigned int) = (void *)this->vtable[0];
158 return dtor(this, flags);
160 #endif
162 /* ??0id@locale@std@@QAE@I@Z */
163 /* ??0id@locale@std@@QEAA@_K@Z */
164 DEFINE_THISCALL_WRAPPER(locale_id_ctor_id, 8)
165 locale_id* __thiscall locale_id_ctor_id(locale_id *this, MSVCP_size_t id)
167 TRACE("(%p %lu)\n", this, id);
169 this->id = id;
170 return this;
173 /* ??_Fid@locale@std@@QAEXXZ */
174 /* ??_Fid@locale@std@@QEAAXXZ */
175 DEFINE_THISCALL_WRAPPER(locale_id_ctor, 4)
176 locale_id* __thiscall locale_id_ctor(locale_id *this)
178 TRACE("(%p)\n", this);
180 this->id = 0;
181 return this;
184 /* ??Bid@locale@std@@QAEIXZ */
185 /* ??Bid@locale@std@@QEAA_KXZ */
186 DEFINE_THISCALL_WRAPPER(locale_id_operator_size_t, 4)
187 MSVCP_size_t __thiscall locale_id_operator_size_t(locale_id *this)
189 _Lockit lock;
191 TRACE("(%p)\n", this);
193 if(!this->id) {
194 _Lockit_ctor_locktype(&lock, _LOCK_LOCALE);
195 this->id = ++locale_id__Id_cnt;
196 _Lockit_dtor(&lock);
199 return this->id;
202 /* ?_Id_cnt_func@id@locale@std@@CAAAHXZ */
203 /* ?_Id_cnt_func@id@locale@std@@CAAEAHXZ */
204 int* __cdecl locale_id__Id_cnt_func(void)
206 TRACE("\n");
207 return &locale_id__Id_cnt;
210 /* ??_Ffacet@locale@std@@QAEXXZ */
211 /* ??_Ffacet@locale@std@@QEAAXXZ */
212 DEFINE_THISCALL_WRAPPER(locale_facet_ctor, 4)
213 locale_facet* __thiscall locale_facet_ctor(locale_facet *this)
215 TRACE("(%p)\n", this);
216 this->vtable = MSVCP_locale_facet_vtable;
217 this->refs = 0;
218 return this;
221 /* ??0facet@locale@std@@IAE@I@Z */
222 /* ??0facet@locale@std@@IEAA@_K@Z */
223 DEFINE_THISCALL_WRAPPER(locale_facet_ctor_refs, 8)
224 locale_facet* __thiscall locale_facet_ctor_refs(locale_facet *this, MSVCP_size_t refs)
226 TRACE("(%p %lu)\n", this, refs);
227 this->vtable = MSVCP_locale_facet_vtable;
228 this->refs = refs;
229 return this;
232 /* ?_Incref@facet@locale@std@@QAEXXZ */
233 /* ?_Incref@facet@locale@std@@QEAAXXZ */
234 DEFINE_THISCALL_WRAPPER(locale_facet__Incref, 4)
235 void __thiscall locale_facet__Incref(locale_facet *this)
237 _Lockit lock;
239 TRACE("(%p)\n", this);
241 _Lockit_ctor_locktype(&lock, _LOCK_LOCALE);
242 this->refs++;
243 _Lockit_dtor(&lock);
246 /* ?_Decref@facet@locale@std@@QAEPAV123@XZ */
247 /* ?_Decref@facet@locale@std@@QEAAPEAV123@XZ */
248 DEFINE_THISCALL_WRAPPER(locale_facet__Decref, 4)
249 locale_facet* __thiscall locale_facet__Decref(locale_facet *this)
251 _Lockit lock;
252 locale_facet *ret;
254 TRACE("(%p)\n", this);
256 _Lockit_ctor_locktype(&lock, _LOCK_LOCALE);
257 if(this->refs)
258 this->refs--;
260 ret = this->refs ? NULL : this;
261 _Lockit_dtor(&lock);
263 return ret;
266 /* ?_Getcat@facet@locale@std@@SAIPAPBV123@PBV23@@Z */
267 /* ?_Getcat@facet@locale@std@@SA_KPEAPEBV123@PEBV23@@Z */
268 MSVCP_size_t __cdecl locale_facet__Getcat(const locale_facet **facet, const locale *loc)
270 TRACE("(%p %p)\n", facet, loc);
271 return -1;
274 /* ??0_Timevec@std@@QAE@ABV01@@Z */
275 /* ??0_Timevec@std@@QEAA@AEBV01@@Z */
276 /* This copy constructor modifies copied object */
277 DEFINE_THISCALL_WRAPPER(_Timevec_copy_ctor, 8)
278 _Timevec* __thiscall _Timevec_copy_ctor(_Timevec *this, _Timevec *copy)
280 TRACE("(%p %p)\n", this, copy);
281 this->timeptr = copy->timeptr;
282 copy->timeptr = NULL;
283 return this;
286 /* ??0_Timevec@std@@QAE@PAX@Z */
287 /* ??0_Timevec@std@@QEAA@PEAX@Z */
288 DEFINE_THISCALL_WRAPPER(_Timevec_ctor_timeptr, 8)
289 _Timevec* __thiscall _Timevec_ctor_timeptr(_Timevec *this, void *timeptr)
291 TRACE("(%p %p)\n", this, timeptr);
292 this->timeptr = timeptr;
293 return this;
296 /* ??_F_Timevec@std@@QAEXXZ */
297 /* ??_F_Timevec@std@@QEAAXXZ */
298 DEFINE_THISCALL_WRAPPER(_Timevec_ctor, 4)
299 _Timevec* __thiscall _Timevec_ctor(_Timevec *this)
301 TRACE("(%p)\n", this);
302 this->timeptr = NULL;
303 return this;
306 /* ??1_Timevec@std@@QAE@XZ */
307 /* ??1_Timevec@std@@QEAA@XZ */
308 DEFINE_THISCALL_WRAPPER(_Timevec_dtor, 4)
309 void __thiscall _Timevec_dtor(_Timevec *this)
311 TRACE("(%p)\n", this);
312 free(this->timeptr);
315 /* ??4_Timevec@std@@QAEAAV01@ABV01@@Z */
316 /* ??4_Timevec@std@@QEAAAEAV01@AEBV01@@Z */
317 DEFINE_THISCALL_WRAPPER(_Timevec_op_assign, 8)
318 _Timevec* __thiscall _Timevec_op_assign(_Timevec *this, _Timevec *right)
320 TRACE("(%p %p)\n", this, right);
321 this->timeptr = right->timeptr;
322 right->timeptr = NULL;
323 return this;
326 /* ?_Getptr@_Timevec@std@@QBEPAXXZ */
327 /* ?_Getptr@_Timevec@std@@QEBAPEAXXZ */
328 DEFINE_THISCALL_WRAPPER(_Timevec__Getptr, 4)
329 void* __thiscall _Timevec__Getptr(_Timevec *this)
331 TRACE("(%p)\n", this);
332 return this->timeptr;
335 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@HPBD@Z */
336 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@HPEBD@Z */
337 _Locinfo* __cdecl _Locinfo__Locinfo_ctor_cat_cstr(_Locinfo *locinfo, int category, const char *locstr)
339 const char *locale = NULL;
341 /* This function is probably modifying more global objects */
342 FIXME("(%p %d %s) semi-stub\n", locinfo, category, locstr);
344 if(!locstr)
345 throw_exception(EXCEPTION_RUNTIME_ERROR, "bad locale name");
347 _Lockit_ctor_locktype(&locinfo->lock, _LOCK_LOCALE);
348 MSVCP_basic_string_char_ctor_cstr(&locinfo->days, "");
349 MSVCP_basic_string_char_ctor_cstr(&locinfo->months, "");
350 MSVCP_basic_string_char_ctor_cstr(&locinfo->oldlocname, setlocale(LC_ALL, NULL));
352 if(category)
353 locale = setlocale(LC_ALL, locstr);
354 else
355 locale = setlocale(LC_ALL, NULL);
357 if(locale)
358 MSVCP_basic_string_char_ctor_cstr(&locinfo->newlocname, locale);
359 else
360 MSVCP_basic_string_char_ctor_cstr(&locinfo->newlocname, "*");
361 _Lockit_dtor(&locinfo->lock);
363 return locinfo;
366 /* ??0_Locinfo@std@@QAE@HPBD@Z */
367 /* ??0_Locinfo@std@@QEAA@HPEBD@Z */
368 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cat_cstr, 12)
369 _Locinfo* __thiscall _Locinfo_ctor_cat_cstr(_Locinfo *this, int category, const char *locstr)
371 return _Locinfo__Locinfo_ctor_cat_cstr(this, category, locstr);
374 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
375 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
376 _Locinfo* __cdecl _Locinfo__Locinfo_ctor_bstr(_Locinfo *locinfo, const basic_string_char *locstr)
378 return _Locinfo__Locinfo_ctor_cat_cstr(locinfo, 1/*FIXME*/, MSVCP_basic_string_char_c_str(locstr));
381 /* ??0_Locinfo@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z */
382 /* ??0_Locinfo@std@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z */
383 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_bstr, 8)
384 _Locinfo* __thiscall _Locinfo_ctor_bstr(_Locinfo *this, const basic_string_char *locstr)
386 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, MSVCP_basic_string_char_c_str(locstr));
389 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@PBD@Z */
390 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@PEBD@Z */
391 _Locinfo* __cdecl _Locinfo__Locinfo_ctor_cstr(_Locinfo *locinfo, const char *locstr)
393 return _Locinfo__Locinfo_ctor_cat_cstr(locinfo, 1/*FIXME*/, locstr);
396 /* ??0_Locinfo@std@@QAE@PBD@Z */
397 /* ??0_Locinfo@std@@QEAA@PEBD@Z */
398 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cstr, 8)
399 _Locinfo* __thiscall _Locinfo_ctor_cstr(_Locinfo *this, const char *locstr)
401 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, locstr);
404 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPAV12@@Z */
405 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPEAV12@@Z */
406 void __cdecl _Locinfo__Locinfo_dtor(_Locinfo *locinfo)
408 TRACE("(%p)\n", locinfo);
410 setlocale(LC_ALL, MSVCP_basic_string_char_c_str(&locinfo->oldlocname));
411 MSVCP_basic_string_char_dtor(&locinfo->days);
412 MSVCP_basic_string_char_dtor(&locinfo->months);
413 MSVCP_basic_string_char_dtor(&locinfo->oldlocname);
414 MSVCP_basic_string_char_dtor(&locinfo->newlocname);
417 /* ??_F_Locinfo@std@@QAEXXZ */
418 /* ??_F_Locinfo@std@@QEAAXXZ */
419 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor, 4)
420 _Locinfo* __thiscall _Locinfo_ctor(_Locinfo *this)
422 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, "C");
425 /* ??1_Locinfo@std@@QAE@XZ */
426 /* ??1_Locinfo@std@@QEAA@XZ */
427 DEFINE_THISCALL_WRAPPER(_Locinfo_dtor, 4)
428 void __thiscall _Locinfo_dtor(_Locinfo *this)
430 _Locinfo__Locinfo_dtor(this);
433 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAAV12@PAV12@HPBD@Z */
434 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAEAV12@PEAV12@HPEBD@Z */
435 _Locinfo* __cdecl _Locinfo__Locinfo_Addcats(_Locinfo *locinfo, int category, const char *locstr)
437 const char *locale = NULL;
439 /* This function is probably modifying more global objects */
440 FIXME("(%p %d %s) semi-stub\n", locinfo, category, locstr);
441 if(!locstr)
442 throw_exception(EXCEPTION_RUNTIME_ERROR, "bad locale name");
444 _Lockit_ctor_locktype(&locinfo->lock, _LOCK_LOCALE);
445 MSVCP_basic_string_char_dtor(&locinfo->newlocname);
447 if(category)
448 locale = setlocale(LC_ALL, locstr);
449 else
450 locale = setlocale(LC_ALL, NULL);
452 if(locale)
453 MSVCP_basic_string_char_ctor_cstr(&locinfo->newlocname, locale);
454 else
455 MSVCP_basic_string_char_ctor_cstr(&locinfo->newlocname, "*");
456 _Lockit_dtor(&locinfo->lock);
458 return locinfo;
461 /* ?_Addcats@_Locinfo@std@@QAEAAV12@HPBD@Z */
462 /* ?_Addcats@_Locinfo@std@@QEAAAEAV12@HPEBD@Z */
463 DEFINE_THISCALL_WRAPPER(_Locinfo__Addcats, 12)
464 _Locinfo* __thiscall _Locinfo__Addcats(_Locinfo *this, int category, const char *locstr)
466 return _Locinfo__Locinfo_Addcats(this, category, locstr);
469 /* _Getcoll */
470 _Collvec __cdecl _Getcoll(void)
472 _Collvec ret;
473 _locale_t locale = _get_current_locale();
475 TRACE("\n");
477 ret.page = locale->locinfo->lc_collate_cp;
478 ret.handle = locale->locinfo->lc_handle[LC_COLLATE];
479 _free_locale(locale);
480 return ret;
483 /* ?_Getcoll@_Locinfo@std@@QBE?AU_Collvec@@XZ */
484 /* ?_Getcoll@_Locinfo@std@@QEBA?AU_Collvec@@XZ */
485 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcoll, 4)
486 _Collvec __thiscall _Locinfo__Getcoll(const _Locinfo *this)
488 return _Getcoll();
491 /* _Getctype */
492 _Ctypevec __cdecl _Getctype(void)
494 _Ctypevec ret;
495 _locale_t locale = _get_current_locale();
497 TRACE("\n");
499 ret.page = locale->locinfo->lc_codepage;
500 ret.handle = locale->locinfo->lc_handle[LC_COLLATE];
501 ret.delfl = TRUE;
502 ret.table = malloc(sizeof(short[256]));
503 if(!ret.table) {
504 _free_locale(locale);
505 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
507 memcpy(ret.table, locale->locinfo->pctype, sizeof(short[256]));
508 _free_locale(locale);
509 return ret;
512 /* ?_Getctype@_Locinfo@std@@QBE?AU_Ctypevec@@XZ */
513 /* ?_Getctype@_Locinfo@std@@QEBA?AU_Ctypevec@@XZ */
514 DEFINE_THISCALL_WRAPPER_RETPTR(_Locinfo__Getctype, 4)
515 _Ctypevec __thiscall _Locinfo__Getctype(const _Locinfo *this)
517 return _Getctype();
520 /* _Getcvt */
521 _Cvtvec __cdecl _Getcvt(void)
523 _Cvtvec ret;
524 _locale_t locale = _get_current_locale();
526 TRACE("\n");
528 ret.page = locale->locinfo->lc_codepage;
529 ret.handle = locale->locinfo->lc_handle[LC_CTYPE];
530 _free_locale(locale);
531 return ret;
534 /* ?_Getcvt@_Locinfo@std@@QBE?AU_Cvtvec@@XZ */
535 /* ?_Getcvt@_Locinfo@std@@QEBA?AU_Cvtvec@@XZ */
536 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcvt, 4)
537 _Cvtvec __thiscall _Locinfo__Getcvt(const _Locinfo *this)
539 return _Getcvt();
542 /* ?_Getdateorder@_Locinfo@std@@QBEHXZ */
543 /* ?_Getdateorder@_Locinfo@std@@QEBAHXZ */
544 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdateorder, 4)
545 int __thiscall _Locinfo__Getdateorder(const _Locinfo *this)
547 FIXME("(%p) stub\n", this);
548 return 0;
551 /* ?_Getdays@_Locinfo@std@@QBEPBDXZ */
552 /* ?_Getdays@_Locinfo@std@@QEBAPEBDXZ */
553 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdays, 4)
554 const char* __thiscall _Locinfo__Getdays(_Locinfo *this)
556 char *days = _Getdays();
558 TRACE("(%p)\n", this);
560 if(days) {
561 MSVCP_basic_string_char_dtor(&this->days);
562 MSVCP_basic_string_char_ctor_cstr(&this->days, days);
563 free(days);
566 return this->days.size ? MSVCP_basic_string_char_c_str(&this->days) :
567 ":Sun:Sunday:Mon:Monday:Tue:Tuesday:Wed:Wednesday:Thu:Thursday:Fri:Friday:Sat:Saturday";
570 /* ?_Getmonths@_Locinfo@std@@QBEPBDXZ */
571 /* ?_Getmonths@_Locinfo@std@@QEBAPEBDXZ */
572 DEFINE_THISCALL_WRAPPER(_Locinfo__Getmonths, 4)
573 const char* __thiscall _Locinfo__Getmonths(_Locinfo *this)
575 char *months = _Getmonths();
577 TRACE("(%p)\n", this);
579 if(months) {
580 MSVCP_basic_string_char_dtor(&this->months);
581 MSVCP_basic_string_char_ctor_cstr(&this->months, months);
582 free(months);
585 return this->months.size ? MSVCP_basic_string_char_c_str(&this->months) :
586 ":Jan:January:Feb:February:Mar:March:Apr:April:May:May:Jun:June:Jul:July"
587 ":Aug:August:Sep:September:Oct:October:Nov:November:Dec:December";
590 /* ?_Getfalse@_Locinfo@std@@QBEPBDXZ */
591 /* ?_Getfalse@_Locinfo@std@@QEBAPEBDXZ */
592 DEFINE_THISCALL_WRAPPER(_Locinfo__Getfalse, 4)
593 const char* __thiscall _Locinfo__Getfalse(const _Locinfo *this)
595 TRACE("(%p)\n", this);
596 return "false";
599 /* ?_Gettrue@_Locinfo@std@@QBEPBDXZ */
600 /* ?_Gettrue@_Locinfo@std@@QEBAPEBDXZ */
601 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettrue, 4)
602 const char* __thiscall _Locinfo__Gettrue(const _Locinfo *this)
604 TRACE("(%p)\n", this);
605 return "true";
608 /* ?_Getlconv@_Locinfo@std@@QBEPBUlconv@@XZ */
609 /* ?_Getlconv@_Locinfo@std@@QEBAPEBUlconv@@XZ */
610 DEFINE_THISCALL_WRAPPER(_Locinfo__Getlconv, 4)
611 const struct lconv* __thiscall _Locinfo__Getlconv(const _Locinfo *this)
613 TRACE("(%p)\n", this);
614 return localeconv();
617 /* ?_Getname@_Locinfo@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
618 /* ?_Getname@_Locinfo@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
619 DEFINE_THISCALL_WRAPPER_RETPTR(_Locinfo__Getname, 4)
620 basic_string_char __thiscall _Locinfo__Getname(const _Locinfo *this)
622 basic_string_char ret;
624 TRACE("(%p)\n", this);
626 MSVCP_basic_string_char_copy_ctor(&ret, &this->newlocname);
627 return ret;
630 /* ?_Gettnames@_Locinfo@std@@QBE?AV_Timevec@2@XZ */
631 /* ?_Gettnames@_Locinfo@std@@QEBA?AV_Timevec@2@XZ */
632 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettnames, 4)
633 _Timevec __thiscall _Locinfo__Gettnames(const _Locinfo *this)
635 _Timevec ret;
637 TRACE("(%p)\n", this);
639 _Timevec_ctor_timeptr(&ret, _Gettnames());
640 return ret;
643 static const type_info locale_facet_type_info = {
644 MSVCP_locale_facet_vtable,
645 NULL,
646 ".?AVfacet@locale@std@@"
649 /* ?id@?$collate@D@std@@2V0locale@2@A */
650 locale_id collate_char_id = {0};
652 /* ??_7?$collate@D@std@@6B@ */
653 extern const vtable_ptr MSVCP_collate_char_vtable;
655 /* ?_Init@?$collate@D@std@@IAEXABV_Locinfo@2@@Z */
656 /* ?_Init@?$collate@D@std@@IEAAXAEBV_Locinfo@2@@Z */
657 DEFINE_THISCALL_WRAPPER(collate_char__Init, 8)
658 void __thiscall collate_char__Init(collate *this, const _Locinfo *locinfo)
660 TRACE("(%p %p)\n", this, locinfo);
661 this->coll = _Locinfo__Getcoll(locinfo);
664 /* ??0?$collate@D@std@@IAE@PBDI@Z */
665 /* ??0?$collate@D@std@@IEAA@PEBD_K@Z */
666 DEFINE_THISCALL_WRAPPER(collate_char_ctor_name, 12)
667 collate* __thiscall collate_char_ctor_name(collate *this, const char *name, MSVCP_size_t refs)
669 _Lockit lockit;
670 _Locinfo locinfo;
672 TRACE("(%p %s %lu)\n", this, name, refs);
674 locale_facet_ctor_refs(&this->facet, refs);
675 this->facet.vtable = &MSVCP_collate_char_vtable;
677 _Lockit_ctor_locktype(&lockit, _LOCK_LOCALE);
678 _Locinfo_ctor_cstr(&locinfo, name);
679 collate_char__Init(this, &locinfo);
680 _Locinfo_dtor(&locinfo);
681 _Lockit_dtor(&lockit);
682 return this;
685 /* ??0?$collate@D@std@@QAE@ABV_Locinfo@1@I@Z */
686 /* ??0?$collate@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
687 DEFINE_THISCALL_WRAPPER(collate_char_ctor_locinfo, 12)
688 collate* __thiscall collate_char_ctor_locinfo(collate *this, _Locinfo *locinfo, MSVCP_size_t refs)
690 TRACE("(%p %p %lu)\n", this, locinfo, refs);
692 locale_facet_ctor_refs(&this->facet, refs);
693 this->facet.vtable = &MSVCP_collate_char_vtable;
694 collate_char__Init(this, locinfo);
695 return this;
698 /* ??0?$collate@D@std@@QAE@I@Z */
699 /* ??0?$collate@D@std@@QEAA@_K@Z */
700 DEFINE_THISCALL_WRAPPER(collate_char_ctor_refs, 8)
701 collate* __thiscall collate_char_ctor_refs(collate *this, MSVCP_size_t refs)
703 return collate_char_ctor_name(this, "C", refs);
706 /* ??1?$collate@D@std@@MAE@XZ */
707 /* ??1?$collate@D@std@@MEAA@XZ */
708 DEFINE_THISCALL_WRAPPER(collate_char_dtor, 4)
709 void __thiscall collate_char_dtor(collate *this)
711 TRACE("(%p)\n", this);
714 DEFINE_THISCALL_WRAPPER(MSVCP_collate_char_vector_dtor, 8)
715 collate* __thiscall MSVCP_collate_char_vector_dtor(collate *this, unsigned int flags)
717 TRACE("(%p %x)\n", this, flags);
718 if(flags & 2) {
719 /* we have an array, with the number of elements stored before the first object */
720 int i, *ptr = (int *)this-1;
722 for(i=*ptr-1; i>=0; i--)
723 collate_char_dtor(this+i);
724 MSVCRT_operator_delete(ptr);
725 } else {
726 collate_char_dtor(this);
727 if(flags & 1)
728 MSVCRT_operator_delete(this);
731 return this;
734 /* ??_F?$collate@D@std@@QAEXXZ */
735 /* ??_F?$collate@D@std@@QEAAXXZ */
736 DEFINE_THISCALL_WRAPPER(collate_char_ctor, 4)
737 collate* __thiscall collate_char_ctor(collate *this)
739 return collate_char_ctor_name(this, "C", 0);
742 /* ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
743 /* ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
744 MSVCP_size_t __cdecl collate_char__Getcat(const locale_facet **facet, const locale *loc)
746 TRACE("(%p %p)\n", facet, loc);
748 if(facet && !*facet) {
749 *facet = MSVCRT_operator_new(sizeof(collate));
750 if(!*facet) {
751 ERR("Out of memory\n");
752 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
753 return 0;
755 collate_char_ctor_name((collate*)*facet,
756 MSVCP_basic_string_char_c_str(&loc->ptr->name), 0);
759 return LC_COLLATE;
762 /* ?do_compare@?$collate@D@std@@MBEHPBD000@Z */
763 /* ?do_compare@?$collate@D@std@@MEBAHPEBD000@Z */
764 DEFINE_THISCALL_WRAPPER(collate_char_do_compare, 20)
765 int __thiscall collate_char_do_compare(const collate *this, const char *first1,
766 const char *last1, const char *first2, const char *last2)
768 FIXME("(%p %p %p %p %p) stub\n", this, first1, last1, first2, last2);
769 return 0;
772 /* ?compare@?$collate@D@std@@QBEHPBD000@Z */
773 /* ?compare@?$collate@D@std@@QEBAHPEBD000@Z */
774 DEFINE_THISCALL_WRAPPER(collate_char_compare, 20)
775 int __thiscall collate_char_compare(const collate *this, const char *first1,
776 const char *last1, const char *first2, const char *last2)
778 FIXME("(%p %p %p %p %p) stub\n", this, first1, last1, first2, last2);
779 return 0;
782 /* ?do_hash@?$collate@D@std@@MBEJPBD0@Z */
783 /* ?do_hash@?$collate@D@std@@MEBAJPEBD0@Z */
784 DEFINE_THISCALL_WRAPPER(collate_char_do_hash, 12)
785 LONG __thiscall collate_char_do_hash(const collate *this,
786 const char *first, const char *last)
788 FIXME("(%p %p %p) stub\n", this, first, last);
789 return 0;
792 /* ?hash@?$collate@D@std@@QBEJPBD0@Z */
793 /* ?hash@?$collate@D@std@@QEBAJPEBD0@Z */
794 DEFINE_THISCALL_WRAPPER(collate_char_hash, 12)
795 LONG __thiscall collate_char_hash(const collate *this,
796 const char *first, const char *last)
798 FIXME("(%p %p %p) stub\n", this, first, last);
799 return 0;
802 /* ?do_transform@?$collate@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
803 /* ?do_transform@?$collate@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
804 DEFINE_THISCALL_WRAPPER_RETPTR(collate_char_do_transform, 12)
805 basic_string_char __thiscall collate_char_do_transform(const collate *this,
806 const char *first, const char *last)
808 basic_string_char ret = {0}; /* FIXME */
809 FIXME("(%p %p %p) stub\n", this, first, last);
810 return ret;
813 /* ?transform@?$collate@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
814 /* ?transform@?$collate@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
815 DEFINE_THISCALL_WRAPPER_RETPTR(collate_char_transform, 12)
816 basic_string_char __thiscall collate_char_transform(const collate *this,
817 const char *first, const char *last)
819 basic_string_char ret = {0}; /* FIXME */
820 FIXME("(%p %p %p) stub\n", this, first, last);
821 return ret;
824 /* ?id@?$collate@_W@std@@2V0locale@2@A */
825 locale_id collate_wchar_id = {0};
826 /* ?id@?$collate@G@std@@2V0locale@2@A */
827 locale_id collate_short_id = {0};
829 /* ??_7?$collate@_W@std@@6B@ */
830 extern const vtable_ptr MSVCP_collate_wchar_vtable;
831 /* ??_7?$collate@G@std@@6B@ */
832 extern const vtable_ptr MSVCP_collate_short_vtable;
834 /* ??0?$collate@_W@std@@IAE@PBDI@Z */
835 /* ??0?$collate@_W@std@@IEAA@PEBD_K@Z */
836 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_name, 12)
837 collate* __thiscall collate_wchar_ctor_name(collate *this, const char *name, MSVCP_size_t refs)
839 FIXME("(%p %s %lu) stub\n", this, name, refs);
840 this->facet.vtable = &MSVCP_collate_wchar_vtable;
841 return NULL;
844 /* ??0?$collate@G@std@@IAE@PBDI@Z */
845 /* ??0?$collate@G@std@@IEAA@PEBD_K@Z */
846 DEFINE_THISCALL_WRAPPER(collate_short_ctor_name, 12)
847 collate* __thiscall collate_short_ctor_name(collate *this, const char *name, MSVCP_size_t refs)
849 collate *ret = collate_wchar_ctor_name(this, name, refs);
850 ret->facet.vtable = &MSVCP_collate_short_vtable;
851 return ret;
854 /* ??0?$collate@_W@std@@QAE@ABV_Locinfo@1@I@Z */
855 /* ??0?$collate@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
856 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_locinfo, 12)
857 collate* __thiscall collate_wchar_ctor_locinfo(collate *this, _Locinfo *locinfo, MSVCP_size_t refs)
859 FIXME("(%p %p %lu) stub\n", this, locinfo, refs);
860 this->facet.vtable = &MSVCP_collate_wchar_vtable;
861 return NULL;
864 /* ??0?$collate@G@std@@QAE@ABV_Locinfo@1@I@Z */
865 /* ??0?$collate@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
866 DEFINE_THISCALL_WRAPPER(collate_short_ctor_locinfo, 12)
867 collate* __thiscall collate_short_ctor_locinfo(collate *this, _Locinfo *locinfo, MSVCP_size_t refs)
869 collate *ret = collate_wchar_ctor_locinfo(this, locinfo, refs);
870 ret->facet.vtable = &MSVCP_collate_short_vtable;
871 return ret;
874 /* ??0?$collate@_W@std@@QAE@I@Z */
875 /* ??0?$collate@_W@std@@QEAA@_K@Z */
876 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_refs, 8)
877 collate* __thiscall collate_wchar_ctor_refs(collate *this, MSVCP_size_t refs)
879 FIXME("(%p %lu) stub\n", this, refs);
880 this->facet.vtable = &MSVCP_collate_wchar_vtable;
881 return NULL;
884 /* ??0?$collate@G@std@@QAE@I@Z */
885 /* ??0?$collate@G@std@@QEAA@_K@Z */
886 DEFINE_THISCALL_WRAPPER(collate_short_ctor_refs, 8)
887 collate* __thiscall collate_short_ctor_refs(collate *this, MSVCP_size_t refs)
889 collate *ret = collate_wchar_ctor_refs(this, refs);
890 ret->facet.vtable = &MSVCP_collate_short_vtable;
891 return ret;
894 /* ??1?$collate@_W@std@@MAE@XZ */
895 /* ??1?$collate@_W@std@@MEAA@XZ */
896 /* ??1?$collate@G@std@@MAE@XZ */
897 /* ??1?$collate@G@std@@MEAA@XZ */
898 DEFINE_THISCALL_WRAPPER(collate_wchar_dtor, 4)
899 void __thiscall collate_wchar_dtor(collate *this)
901 FIXME("(%p) stub\n", this);
904 DEFINE_THISCALL_WRAPPER(MSVCP_collate_wchar_vector_dtor, 8)
905 collate* __thiscall MSVCP_collate_wchar_vector_dtor(collate *this, unsigned int flags)
907 TRACE("(%p %x)\n", this, flags);
908 if(flags & 2) {
909 /* we have an array, with the number of elements stored before the first object */
910 int i, *ptr = (int *)this-1;
912 for(i=*ptr-1; i>=0; i--)
913 collate_wchar_dtor(this+i);
914 MSVCRT_operator_delete(ptr);
915 } else {
916 collate_wchar_dtor(this);
917 if(flags & 1)
918 MSVCRT_operator_delete(this);
921 return this;
924 DEFINE_THISCALL_WRAPPER(MSVCP_collate_short_vector_dtor, 8)
925 collate* __thiscall MSVCP_collate_short_vector_dtor(collate *this, unsigned int flags)
927 return MSVCP_collate_wchar_vector_dtor(this, flags);
930 /* ??_F?$collate@_W@std@@QAEXXZ */
931 /* ??_F?$collate@_W@std@@QEAAXXZ */
932 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor, 4)
933 collate* __thiscall collate_wchar_ctor(collate *this)
935 FIXME("(%p) stub\n", this);
936 this->facet.vtable = &MSVCP_collate_wchar_vtable;
937 return NULL;
940 /* ??_F?$collate@G@std@@QAEXXZ */
941 /* ??_F?$collate@G@std@@QEAAXXZ */
942 DEFINE_THISCALL_WRAPPER(collate_short_ctor, 4)
943 collate* __thiscall collate_short_ctor(collate *this)
945 collate *ret = collate_wchar_ctor(this);
946 ret->facet.vtable = &MSVCP_collate_short_vtable;
947 return ret;
950 /* ?_Getcat@?$collate@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
951 /* ?_Getcat@?$collate@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
952 /* ?_Getcat@?$collate@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
953 /* ?_Getcat@?$collate@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
954 MSVCP_size_t __cdecl collate_wchar__Getcat(const locale_facet **facet, const locale *loc)
956 FIXME("(%p %p) stub\n", facet, loc);
957 return 0;
960 /* ?_Init@?$collate@_W@std@@IAEXABV_Locinfo@2@@Z */
961 /* ?_Init@?$collate@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
962 /* ?_Init@?$collate@G@std@@IAEXABV_Locinfo@2@@Z */
963 /* ?_Init@?$collate@G@std@@IEAAXAEBV_Locinfo@2@@Z */
964 DEFINE_THISCALL_WRAPPER(collate_wchar__Init, 8)
965 void __thiscall collate_wchar__Init(collate *this, const _Locinfo *locinfo)
967 FIXME("(%p %p) stub\n", this, locinfo);
970 /* ?do_compare@?$collate@_W@std@@MBEHPB_W000@Z */
971 /* ?do_compare@?$collate@_W@std@@MEBAHPEB_W000@Z */
972 /* ?do_compare@?$collate@G@std@@MBEHPBG000@Z */
973 /* ?do_compare@?$collate@G@std@@MEBAHPEBG000@Z */
974 DEFINE_THISCALL_WRAPPER(collate_wchar_do_compare, 20)
975 int __thiscall collate_wchar_do_compare(const collate *this, const wchar_t *first1,
976 const wchar_t *last1, const wchar_t *first2, const wchar_t *last2)
978 FIXME("(%p %p %p %p %p) stub\n", this, first1, last1, first2, last2);
979 return 0;
982 /* ?compare@?$collate@_W@std@@QBEHPB_W000@Z */
983 /* ?compare@?$collate@_W@std@@QEBAHPEB_W000@Z */
984 /* ?compare@?$collate@G@std@@QBEHPBG000@Z */
985 /* ?compare@?$collate@G@std@@QEBAHPEBG000@Z */
986 DEFINE_THISCALL_WRAPPER(collate_wchar_compare, 20)
987 int __thiscall collate_wchar_compare(const collate *this, const wchar_t *first1,
988 const wchar_t *last1, const wchar_t *first2, const wchar_t *last2)
990 FIXME("(%p %p %p %p %p) stub\n", this, first1, last1, first2, last2);
991 return 0;
994 /* ?do_hash@?$collate@_W@std@@MBEJPB_W0@Z */
995 /* ?do_hash@?$collate@_W@std@@MEBAJPEB_W0@Z */
996 /* ?do_hash@?$collate@G@std@@MBEJPBG0@Z */
997 /* ?do_hash@?$collate@G@std@@MEBAJPEBG0@Z */
998 DEFINE_THISCALL_WRAPPER(collate_wchar_do_hash, 12)
999 LONG __thiscall collate_wchar_do_hash(const collate *this,
1000 const wchar_t *first, const wchar_t *last)
1002 FIXME("(%p %p %p) stub\n", this, first, last);
1003 return 0;
1006 /* ?hash@?$collate@_W@std@@QBEJPB_W0@Z */
1007 /* ?hash@?$collate@_W@std@@QEBAJPEB_W0@Z */
1008 /* ?hash@?$collate@G@std@@QBEJPBG0@Z */
1009 /* ?hash@?$collate@G@std@@QEBAJPEBG0@Z */
1010 DEFINE_THISCALL_WRAPPER(collate_wchar_hash, 12)
1011 LONG __thiscall collate_wchar_hash(const collate *this,
1012 const wchar_t *first, const wchar_t *last)
1014 FIXME("(%p %p %p) stub\n", this, first, last);
1015 return 0;
1018 /* ?do_transform@?$collate@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
1019 /* ?do_transform@?$collate@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
1020 /* ?do_transform@?$collate@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
1021 /* ?do_transform@?$collate@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
1022 DEFINE_THISCALL_WRAPPER_RETPTR(collate_wchar_do_transform, 12)
1023 basic_string_wchar __thiscall collate_wchar_do_transform(const collate *this,
1024 const wchar_t *first, const wchar_t *last)
1026 basic_string_wchar ret = {0}; /* FIXME */
1027 FIXME("(%p %p %p) stub\n", this, first, last);
1028 return ret;
1031 /* ?transform@?$collate@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
1032 /* ?transform@?$collate@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
1033 /* ?transform@?$collate@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
1034 /* ?transform@?$collate@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
1035 DEFINE_THISCALL_WRAPPER_RETPTR(collate_wchar_transform, 12)
1036 basic_string_wchar __thiscall collate_wchar_transform(const collate *this,
1037 const wchar_t *first, const wchar_t *last)
1039 basic_string_wchar ret = {0}; /* FIXME */
1040 FIXME("(%p %p %p) stub\n", this, first, last);
1041 return ret;
1044 /* ??_7ctype_base@std@@6B@ */
1045 extern const vtable_ptr MSVCP_ctype_base_vtable;
1047 /* ??0ctype_base@std@@QAE@I@Z */
1048 /* ??0ctype_base@std@@QEAA@_K@Z */
1049 DEFINE_THISCALL_WRAPPER(ctype_base_ctor_refs, 8)
1050 ctype_base* __thiscall ctype_base_ctor_refs(ctype_base *this, MSVCP_size_t refs)
1052 TRACE("(%p %lu)\n", this, refs);
1053 locale_facet_ctor_refs(&this->facet, refs);
1054 this->facet.vtable = &MSVCP_ctype_base_vtable;
1055 return this;
1058 /* ??_Fctype_base@std@@QAEXXZ */
1059 /* ??_Fctype_base@std@@QEAAXXZ */
1060 DEFINE_THISCALL_WRAPPER(ctype_base_ctor, 4)
1061 ctype_base* __thiscall ctype_base_ctor(ctype_base *this)
1063 TRACE("(%p)\n", this);
1064 locale_facet_ctor_refs(&this->facet, 0);
1065 this->facet.vtable = &MSVCP_ctype_base_vtable;
1066 return this;
1069 /* ??1ctype_base@std@@UAE@XZ */
1070 /* ??1ctype_base@std@@UEAA@XZ */
1071 DEFINE_THISCALL_WRAPPER(ctype_base_dtor, 4)
1072 void __thiscall ctype_base_dtor(ctype_base *this)
1074 TRACE("(%p)\n", this);
1077 DEFINE_THISCALL_WRAPPER(MSVCP_ctype_base_vector_dtor, 8)
1078 ctype_base* __thiscall MSVCP_ctype_base_vector_dtor(ctype_base *this, unsigned int flags)
1080 TRACE("(%p %x)\n", this, flags);
1081 if(flags & 2) {
1082 /* we have an array, with the number of elements stored before the first object */
1083 int i, *ptr = (int *)this-1;
1085 for(i=*ptr-1; i>=0; i--)
1086 ctype_base_dtor(this+i);
1087 MSVCRT_operator_delete(ptr);
1088 } else {
1089 ctype_base_dtor(this);
1090 if(flags & 1)
1091 MSVCRT_operator_delete(this);
1094 return this;
1097 /* ?_Xran@ctype_base@std@@KAXXZ */
1098 void __cdecl ctype_base__Xran(void)
1100 throw_exception(EXCEPTION_OUT_OF_RANGE, "out of range in ctype<T>");
1103 /* ?id@?$ctype@D@std@@2V0locale@2@A */
1104 locale_id ctype_char_id = {0};
1105 /* ?table_size@?$ctype@D@std@@2IB */
1106 /* ?table_size@?$ctype@D@std@@2_KB */
1107 MSVCP_size_t ctype_char_table_size = 256;
1109 /* ??_7?$ctype@D@std@@6B@ */
1110 extern const vtable_ptr MSVCP_ctype_char_vtable;
1112 /* ?_Id_func@?$ctype@D@std@@SAAAVid@locale@2@XZ */
1113 /* ?_Id_func@?$ctype@D@std@@SAAEAVid@locale@2@XZ */
1114 locale_id* __cdecl ctype_char__Id_func(void)
1116 FIXME("() stub\n");
1117 return NULL;
1120 /* ?_Init@?$ctype@D@std@@IAEXABV_Locinfo@2@@Z */
1121 /* ?_Init@?$ctype@D@std@@IEAAXAEBV_Locinfo@2@@Z */
1122 DEFINE_THISCALL_WRAPPER(ctype_char__Init, 8)
1123 void __thiscall ctype_char__Init(ctype_char *this, _Locinfo *locinfo)
1125 FIXME("(%p %p) stub\n", this, locinfo);
1128 /* ?_Tidy@?$ctype@D@std@@IAEXXZ */
1129 /* ?_Tidy@?$ctype@D@std@@IEAAXXZ */
1130 DEFINE_THISCALL_WRAPPER(ctype_char__Tidy, 4)
1131 void __thiscall ctype_char__Tidy(ctype_char *this)
1133 FIXME("(%p) stub\n", this);
1136 /* ?classic_table@?$ctype@D@std@@KAPBFXZ */
1137 /* ?classic_table@?$ctype@D@std@@KAPEBFXZ */
1138 const short* __cdecl ctype_char_classic_table(void)
1140 FIXME("() stub\n");
1141 return NULL;
1144 /* ??0?$ctype@D@std@@QAE@ABV_Locinfo@1@I@Z */
1145 /* ??0?$ctype@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1146 DEFINE_THISCALL_WRAPPER(ctype_char_ctor_locinfo, 12)
1147 ctype_char* __thiscall ctype_char_ctor_locinfo(ctype_char *this,
1148 _Locinfo *locinfo, MSVCP_size_t refs)
1150 FIXME("(%p %p %lu) stub\n", this, locinfo, refs);
1151 this->base.facet.vtable = &MSVCP_ctype_char_vtable;
1152 return NULL;
1155 /* ??0?$ctype@D@std@@QAE@PBF_NI@Z */
1156 /* ??0?$ctype@D@std@@QEAA@PEBF_N_K@Z */
1157 DEFINE_THISCALL_WRAPPER(ctype_char_ctor_table, 16)
1158 ctype_char* __thiscall ctype_char_ctor_table(ctype_char *this,
1159 const short *table, MSVCP_bool delete, MSVCP_size_t refs)
1161 FIXME("(%p %p %d %lu) stub\n", this, table, delete, refs);
1162 this->base.facet.vtable = &MSVCP_ctype_char_vtable;
1163 return NULL;
1166 /* ??_F?$ctype@D@std@@QAEXXZ */
1167 /* ??_F?$ctype@D@std@@QEAAXXZ */
1168 DEFINE_THISCALL_WRAPPER(ctype_char_ctor, 4)
1169 ctype_char* __thiscall ctype_char_ctor(ctype_char *this)
1171 FIXME("(%p) stub\n", this);
1172 this->base.facet.vtable = &MSVCP_ctype_char_vtable;
1173 return NULL;
1176 /* ??1?$ctype@D@std@@MAE@XZ */
1177 /* ??1?$ctype@D@std@@MEAA@XZ */
1178 DEFINE_THISCALL_WRAPPER(ctype_char_dtor, 4)
1179 void __thiscall ctype_char_dtor(ctype_char *this)
1181 FIXME("(%p) stub\n", this);
1184 DEFINE_THISCALL_WRAPPER(MSVCP_ctype_char_vector_dtor, 8)
1185 ctype_char* __thiscall MSVCP_ctype_char_vector_dtor(ctype_char *this, unsigned int flags)
1187 TRACE("(%p %x)\n", this, flags);
1188 if(flags & 2) {
1189 /* we have an array, with the number of elements stored before the first object */
1190 int i, *ptr = (int *)this-1;
1192 for(i=*ptr-1; i>=0; i--)
1193 ctype_char_dtor(this+i);
1194 MSVCRT_operator_delete(ptr);
1195 } else {
1196 ctype_char_dtor(this);
1197 if(flags & 1)
1198 MSVCRT_operator_delete(this);
1201 return this;
1204 /* ?do_narrow@?$ctype@D@std@@MBEDDD@Z */
1205 /* ?do_narrow@?$ctype@D@std@@MEBADDD@Z */
1206 DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow_ch, 12)
1207 char __thiscall ctype_char_do_narrow_ch(const ctype_char *this, char ch, char unused)
1209 FIXME("(%p %c %c) stub\n", this, ch, unused);
1210 return 0;
1213 /* ?do_narrow@?$ctype@D@std@@MBEPBDPBD0DPAD@Z */
1214 /* ?do_narrow@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD@Z */
1215 DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow, 20)
1216 const char* __thiscall ctype_char_do_narrow(const ctype_char *this,
1217 const char *first, const char *last, char unused, char *dest)
1219 FIXME("(%p %p %p %p) stub\n", this, first, last, dest);
1220 return NULL;
1223 /* ?_Do_narrow_s@?$ctype@D@std@@MBEPBDPBD0DPADI@Z */
1224 /* ?_Do_narrow_s@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD_K@Z */
1225 DEFINE_THISCALL_WRAPPER(ctype_char__Do_narrow_s, 24)
1226 const char* __thiscall ctype_char__Do_narrow_s(const ctype_char *this, const char *first,
1227 const char *last, char unused, char *dest, MSVCP_size_t size)
1229 FIXME("(%p %p %p %p %lu) stub\n", this, first, last, dest, size);
1230 return NULL;
1233 /* ?narrow@?$ctype@D@std@@QBEDDD@Z */
1234 /* ?narrow@?$ctype@D@std@@QEBADDD@Z */
1235 DEFINE_THISCALL_WRAPPER(ctype_char_narrow_ch, 12)
1236 char __thiscall ctype_char_narrow_ch(const ctype_char *this, char ch, char dflt)
1238 FIXME("(%p %c %c) stub\n", this, ch, dflt);
1239 return 0;
1242 /* ?narrow@?$ctype@D@std@@QBEPBDPBD0DPAD@Z */
1243 /* ?narrow@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD@Z */
1244 DEFINE_THISCALL_WRAPPER(ctype_char_narrow, 20)
1245 const char* __thiscall ctype_char_narrow(const ctype_char *this,
1246 const char *first, const char *last, char dflt, char *dest)
1248 FIXME("(%p %p %p %c %p) stub\n", this, first, last, dflt, dest);
1249 return NULL;
1252 /* ?_Narrow_s@?$ctype@D@std@@QBEPBDPBD0DPADI@Z */
1253 /* ?_Narrow_s@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD_K@Z */
1254 DEFINE_THISCALL_WRAPPER(ctype_char__Narrow_s, 24)
1255 const char* __thiscall ctype_char__Narrow_s(const ctype_char *this, const char *first,
1256 const char *last, char unused, char *dest, MSVCP_size_t size)
1258 FIXME("(%p %p %p %p %lu) stub\n", this, first, last, dest, size);
1259 return NULL;
1262 /* ?do_widen@?$ctype@D@std@@MBEDD@Z */
1263 /* ?do_widen@?$ctype@D@std@@MEBADD@Z */
1264 DEFINE_THISCALL_WRAPPER(ctype_char_do_widen_ch, 8)
1265 char __thiscall ctype_char_do_widen_ch(const ctype_char *this, char ch)
1267 FIXME("(%p %c) stub\n", this, ch);
1268 return 0;
1271 /* ?do_widen@?$ctype@D@std@@MBEPBDPBD0PAD@Z */
1272 /* ?do_widen@?$ctype@D@std@@MEBAPEBDPEBD0PEAD@Z */
1273 DEFINE_THISCALL_WRAPPER(ctype_char_do_widen, 16)
1274 const char* __thiscall ctype_char_do_widen(const ctype_char *this,
1275 const char *first, const char *last, char *dest)
1277 FIXME("(%p %p %p %p) stub\n", this, first, last, dest);
1278 return NULL;
1281 /* ?_Do_widen_s@?$ctype@D@std@@MBEPBDPBD0PADI@Z */
1282 /* ?_Do_widen_s@?$ctype@D@std@@MEBAPEBDPEBD0PEAD_K@Z */
1283 DEFINE_THISCALL_WRAPPER(ctype_char__Do_widen_s, 20)
1284 const char* __thiscall ctype_char__Do_widen_s(const ctype_char *this,
1285 const char *first, const char *last, char *dest, MSVCP_size_t size)
1287 FIXME("(%p %p %p %p %lu) stub\n", this, first, last, dest, size);
1288 return NULL;
1291 /* ?widen@?$ctype@D@std@@QBEDD@Z */
1292 /* ?widen@?$ctype@D@std@@QEBADD@Z */
1293 DEFINE_THISCALL_WRAPPER(ctype_char_widen_ch, 8)
1294 char __thiscall ctype_char_widen_ch(const ctype_char *this, char ch)
1296 FIXME("(%p %c) stub\n", this, ch);
1297 return 0;
1300 /* ?widen@?$ctype@D@std@@QBEPBDPBD0PAD@Z */
1301 /* ?widen@?$ctype@D@std@@QEBAPEBDPEBD0PEAD@Z */
1302 DEFINE_THISCALL_WRAPPER(ctype_char_widen, 16)
1303 const char* __thiscall ctype_char_widen(const ctype_char *this,
1304 const char *first, const char *last, char *dest)
1306 FIXME("(%p %p %p %p) stub\n", this, first, last, dest);
1307 return NULL;
1310 /* ?_Widen_s@?$ctype@D@std@@QBEPBDPBD0PADI@Z */
1311 /* ?_Widen_s@?$ctype@D@std@@QEBAPEBDPEBD0PEAD_K@Z */
1312 DEFINE_THISCALL_WRAPPER(ctype_char__Widen_s, 20)
1313 const char* __thiscall ctype_char__Widen_s(const ctype_char *this,
1314 const char *first, const char *last, char *dest, MSVCP_size_t size)
1316 FIXME("(%p %p %p %p %lu) stub\n", this, first, last, dest, size);
1317 return NULL;
1320 /* ?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1321 /* ?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1322 MSVCP_size_t __cdecl ctype_char__Getcat(const locale_facet **facet, const locale *loc)
1324 FIXME("(%p %p) stub\n", facet, loc);
1325 return 0;
1328 /* ?do_tolower@?$ctype@D@std@@MBEDD@Z */
1329 /* ?do_tolower@?$ctype@D@std@@MEBADD@Z */
1330 DEFINE_THISCALL_WRAPPER(ctype_char_do_tolower_ch, 8)
1331 char __thiscall ctype_char_do_tolower_ch(const ctype_char *this, char ch)
1333 FIXME("(%p %c) stub\n", this, ch);
1334 return 0;
1337 /* ?do_tolower@?$ctype@D@std@@MBEPBDPADPBD@Z */
1338 /* ?do_tolower@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z */
1339 DEFINE_THISCALL_WRAPPER(ctype_char_do_tolower, 12)
1340 const char* __thiscall ctype_char_do_tolower(const ctype_char *this, char *first, const char *last)
1342 FIXME("(%p %p %p) stub\n", this, first, last);
1343 return NULL;
1346 /* ?tolower@?$ctype@D@std@@QBEDD@Z */
1347 /* ?tolower@?$ctype@D@std@@QEBADD@Z */
1348 DEFINE_THISCALL_WRAPPER(ctype_char_tolower_ch, 8)
1349 char __thiscall ctype_char_tolower_ch(const ctype_char *this, char ch)
1351 FIXME("(%p %c) stub\n", this, ch);
1352 return 0;
1355 /* ?tolower@?$ctype@D@std@@QBEPBDPADPBD@Z */
1356 /* ?tolower@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z */
1357 DEFINE_THISCALL_WRAPPER(ctype_char_tolower, 12)
1358 const char* __thiscall ctype_char_tolower(const ctype_char *this, char *first, const char *last)
1360 FIXME("(%p %p %p) stub\n", this, first, last);
1361 return NULL;
1364 /* ?do_toupper@?$ctype@D@std@@MBEDD@Z */
1365 /* ?do_toupper@?$ctype@D@std@@MEBADD@Z */
1366 DEFINE_THISCALL_WRAPPER(ctype_char_do_toupper_ch, 8)
1367 char __thiscall ctype_char_do_toupper_ch(const ctype_char *this, char ch)
1369 FIXME("(%p %c) stub\n", this, ch);
1370 return 0;
1373 /* ?do_toupper@?$ctype@D@std@@MBEPBDPADPBD@Z */
1374 /* ?do_toupper@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z */
1375 DEFINE_THISCALL_WRAPPER(ctype_char_do_toupper, 12)
1376 const char* __thiscall ctype_char_do_toupper(const ctype_char *this,
1377 char *first, const char *last)
1379 FIXME("(%p %p %p) stub\n", this, first, last);
1380 return NULL;
1383 /* ?toupper@?$ctype@D@std@@QBEDD@Z */
1384 /* ?toupper@?$ctype@D@std@@QEBADD@Z */
1385 DEFINE_THISCALL_WRAPPER(ctype_char_toupper_ch, 8)
1386 char __thiscall ctype_char_toupper_ch(const ctype_char *this, char ch)
1388 FIXME("(%p %c) stub\n", this, ch);
1389 return 0;
1392 /* ?toupper@?$ctype@D@std@@QBEPBDPADPBD@Z */
1393 /* ?toupper@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z */
1394 DEFINE_THISCALL_WRAPPER(ctype_char_toupper, 12)
1395 const char* __thiscall ctype_char_toupper(const ctype_char *this, char *first, const char *last)
1397 FIXME("(%p %p %p) stub\n", this, first, last);
1398 return NULL;
1401 /* ?is@?$ctype@D@std@@QBE_NFD@Z */
1402 /* ?is@?$ctype@D@std@@QEBA_NFD@Z */
1403 DEFINE_THISCALL_WRAPPER(ctype_char_is_ch, 12)
1404 MSVCP_bool __thiscall ctype_char_is_ch(const ctype_char *this, short mask, char ch)
1406 FIXME("(%p %x %c) stub\n", this, mask, ch);
1407 return 0;
1410 /* ?is@?$ctype@D@std@@QBEPBDPBD0PAF@Z */
1411 /* ?is@?$ctype@D@std@@QEBAPEBDPEBD0PEAF@Z */
1412 DEFINE_THISCALL_WRAPPER(ctype_char_is, 16)
1413 const char* __thiscall ctype_char_is(const ctype_char *this, const char *first, const char *last, short *dest)
1415 FIXME("(%p %p %p %p) stub\n", this, first, last, dest);
1416 return NULL;
1419 /* ?scan_is@?$ctype@D@std@@QBEPBDFPBD0@Z */
1420 /* ?scan_is@?$ctype@D@std@@QEBAPEBDFPEBD0@Z */
1421 DEFINE_THISCALL_WRAPPER(ctype_char_scan_is, 16)
1422 const char* __thiscall ctype_char_scan_is(const ctype_char *this, short mask, const char *first, const char *last)
1424 FIXME("(%p %x %p %p) stub\n", this, mask, first, last);
1425 return NULL;
1428 /* ?scan_not@?$ctype@D@std@@QBEPBDFPBD0@Z */
1429 /* ?scan_not@?$ctype@D@std@@QEBAPEBDFPEBD0@Z */
1430 DEFINE_THISCALL_WRAPPER(ctype_char_scan_not, 16)
1431 const char* __thiscall ctype_char_scan_not(const ctype_char *this, short mask, const char *first, const char *last)
1433 FIXME("(%p %x %p %p) stub\n", this, mask, first, last);
1434 return NULL;
1437 /* ?table@?$ctype@D@std@@IBEPBFXZ */
1438 /* ?table@?$ctype@D@std@@IEBAPEBFXZ */
1439 DEFINE_THISCALL_WRAPPER(ctype_char_table, 4)
1440 const short* __thiscall ctype_char_table(const ctype_char *this)
1442 FIXME("(%p) stub\n", this);
1443 return NULL;
1446 /* ?id@?$ctype@_W@std@@2V0locale@2@A */
1447 locale_id ctype_wchar_id = {0};
1448 /* ?id@?$ctype@G@std@@2V0locale@2@A */
1449 locale_id ctype_short_id = {0};
1451 /* ??_7?$ctype@_W@std@@6B@ */
1452 extern const vtable_ptr MSVCP_ctype_wchar_vtable;
1453 /* ??_7?$ctype@G@std@@6B@ */
1454 extern const vtable_ptr MSVCP_ctype_short_vtable;
1456 /* ?_Id_func@?$ctype@_W@std@@SAAAVid@locale@2@XZ */
1457 /* ?_Id_func@?$ctype@_W@std@@SAAEAVid@locale@2@XZ */
1458 locale_id* __cdecl ctype_wchar__Id_func(void)
1460 FIXME("() stub\n");
1461 return NULL;
1464 /* ?_Id_func@?$ctype@G@std@@SAAAVid@locale@2@XZ */
1465 /* ?_Id_func@?$ctype@G@std@@SAAEAVid@locale@2@XZ */
1466 locale_id* __cdecl ctype_short__Id_func(void)
1468 FIXME("() stub\n");
1469 return NULL;
1472 /* ?_Init@?$ctype@_W@std@@IAEXABV_Locinfo@2@@Z */
1473 /* ?_Init@?$ctype@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
1474 /* ?_Init@?$ctype@G@std@@IAEXABV_Locinfo@2@@Z */
1475 /* ?_Init@?$ctype@G@std@@IEAAXAEBV_Locinfo@2@@Z */
1476 DEFINE_THISCALL_WRAPPER(ctype_wchar__Init, 8)
1477 void __thiscall ctype_wchar__Init(ctype_wchar *this, _Locinfo *locinfo)
1479 FIXME("(%p %p) stub\n", this, locinfo);
1482 /* ??0?$ctype@_W@std@@QAE@ABV_Locinfo@1@I@Z */
1483 /* ??0?$ctype@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1484 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor_locinfo, 12)
1485 ctype_wchar* __thiscall ctype_wchar_ctor_locinfo(ctype_wchar *this,
1486 _Locinfo *locinfo, MSVCP_size_t refs)
1488 FIXME("(%p %p %lu) stub\n", this, locinfo, refs);
1489 this->base.facet.vtable = &MSVCP_ctype_wchar_vtable;
1490 return NULL;
1493 /* ??0?$ctype@G@std@@QAE@ABV_Locinfo@1@I@Z */
1494 /* ??0?$ctype@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1495 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_locinfo, 12)
1496 ctype_wchar* __thiscall ctype_short_ctor_locinfo(ctype_wchar *this,
1497 _Locinfo *locinfo, MSVCP_size_t refs)
1499 ctype_wchar *ret = ctype_wchar_ctor_locinfo(this, locinfo, refs);
1500 this->base.facet.vtable = &MSVCP_ctype_short_vtable;
1501 return ret;
1504 /* ??0?$ctype@_W@std@@QAE@I@Z */
1505 /* ??0?$ctype@_W@std@@QEAA@_K@Z */
1506 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor_refs, 8)
1507 ctype_wchar* __thiscall ctype_wchar_ctor_refs(ctype_wchar *this, MSVCP_size_t refs)
1509 FIXME("(%p %lu) stub\n", this, refs);
1510 this->base.facet.vtable = &MSVCP_ctype_wchar_vtable;
1511 return NULL;
1514 /* ??0?$ctype@G@std@@QAE@I@Z */
1515 /* ??0?$ctype@G@std@@QEAA@_K@Z */
1516 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_refs, 8)
1517 ctype_wchar* __thiscall ctype_short_ctor_refs(ctype_wchar *this, MSVCP_size_t refs)
1519 ctype_wchar *ret = ctype_wchar_ctor_refs(this, refs);
1520 this->base.facet.vtable = &MSVCP_ctype_short_vtable;
1521 return ret;
1524 /* ??0?$ctype@G@std@@IAE@PBDI@Z */
1525 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_name, 12)
1526 ctype_wchar* __thiscall ctype_short_ctor_name(ctype_wchar *this,
1527 const char *name, MSVCP_size_t refs)
1529 FIXME("(%p %s %lu) stub\n", this, debugstr_a(name), refs);
1530 this->base.facet.vtable = &MSVCP_ctype_short_vtable;
1531 return NULL;
1534 /* ??_F?$ctype@_W@std@@QAEXXZ */
1535 /* ??_F?$ctype@_W@std@@QEAAXXZ */
1536 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor, 4)
1537 ctype_wchar* __thiscall ctype_wchar_ctor(ctype_wchar *this)
1539 FIXME("(%p) stub\n", this);
1540 this->base.facet.vtable = &MSVCP_ctype_wchar_vtable;
1541 return NULL;
1544 /* ??_F?$ctype@G@std@@QAEXXZ */
1545 /* ??_F?$ctype@G@std@@QEAAXXZ */
1546 DEFINE_THISCALL_WRAPPER(ctype_short_ctor, 4)
1547 ctype_wchar* __thiscall ctype_short_ctor(ctype_wchar *this)
1549 ctype_wchar *ret = ctype_wchar_ctor(this);
1550 this->base.facet.vtable = &MSVCP_ctype_short_vtable;
1551 return ret;
1554 /* ??1?$ctype@_W@std@@MAE@XZ */
1555 /* ??1?$ctype@_W@std@@MEAA@XZ */
1556 /* ??1?$ctype@G@std@@MAE@XZ */
1557 /* ??1?$ctype@G@std@@MEAA@XZ */
1558 DEFINE_THISCALL_WRAPPER(ctype_wchar_dtor, 4)
1559 void __thiscall ctype_wchar_dtor(ctype_wchar *this)
1561 FIXME("(%p) stub\n", this);
1564 DEFINE_THISCALL_WRAPPER(MSVCP_ctype_wchar_vector_dtor, 8)
1565 ctype_wchar* __thiscall MSVCP_ctype_wchar_vector_dtor(ctype_wchar *this, unsigned int flags)
1567 TRACE("(%p %x)\n", this, flags);
1568 if(flags & 2) {
1569 /* we have an array, with the number of elements stored before the first object */
1570 int i, *ptr = (int *)this-1;
1572 for(i=*ptr-1; i>=0; i--)
1573 ctype_wchar_dtor(this+i);
1574 MSVCRT_operator_delete(ptr);
1575 } else {
1576 ctype_wchar_dtor(this);
1577 if(flags & 1)
1578 MSVCRT_operator_delete(this);
1581 return this;
1584 DEFINE_THISCALL_WRAPPER(MSVCP_ctype_short_vector_dtor, 8)
1585 ctype_wchar* __thiscall MSVCP_ctype_short_vector_dtor(ctype_wchar *this, unsigned int flags)
1587 return MSVCP_ctype_wchar_vector_dtor(this, flags);
1590 /* ?_Donarrow@?$ctype@_W@std@@IBED_WD@Z */
1591 /* ?_Donarrow@?$ctype@_W@std@@IEBAD_WD@Z */
1592 /* ?_Donarrow@?$ctype@G@std@@IBEDGD@Z */
1593 /* ?_Donarrow@?$ctype@G@std@@IEBADGD@Z */
1594 DEFINE_THISCALL_WRAPPER(ctype_wchar__Donarrow, 12)
1595 char __thiscall ctype_wchar__Donarrow(const ctype_wchar *this, wchar_t ch, char dflt)
1597 FIXME("(%p %d %d) stub\n", this, ch, dflt);
1598 return 0;
1601 /* ?do_narrow@?$ctype@_W@std@@MBED_WD@Z */
1602 /* ?do_narrow@?$ctype@_W@std@@MEBAD_WD@Z */
1603 /* ?do_narrow@?$ctype@G@std@@MBEDGD@Z */
1604 /* ?do_narrow@?$ctype@G@std@@MEBADGD@Z */
1605 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow_ch, 12)
1606 wchar_t __thiscall ctype_wchar_do_narrow_ch(const ctype_wchar *this, wchar_t ch, char dflt)
1608 FIXME("(%p %d %d) stub\n", this, ch, dflt);
1609 return 0;
1612 /* ?do_narrow@?$ctype@_W@std@@MBEPB_WPB_W0DPAD@Z */
1613 /* ?do_narrow@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD@Z */
1614 /* ?do_narrow@?$ctype@G@std@@MBEPBGPBG0DPAD@Z */
1615 /* ?do_narrow@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD@Z */
1616 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow, 20)
1617 const wchar_t* __thiscall ctype_wchar_do_narrow(const ctype_wchar *this,
1618 const wchar_t *first, const wchar_t *last, char dflt, char *dest)
1620 FIXME("(%p %p %p %d %p) stub\n", this, first, last, dflt, dest);
1621 return NULL;
1624 /* ?_Do_narrow_s@?$ctype@_W@std@@MBEPB_WPB_W0DPADI@Z */
1625 /* ?_Do_narrow_s@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD_K@Z */
1626 /* ?_Do_narrow_s@?$ctype@G@std@@MBEPBGPBG0DPADI@Z */
1627 /* ?_Do_narrow_s@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD_K@Z */
1628 DEFINE_THISCALL_WRAPPER(ctype_wchar__Do_narrow_s, 24)
1629 const wchar_t* __thiscall ctype_wchar__Do_narrow_s(const ctype_wchar *this,
1630 const wchar_t *first, const wchar_t *last, char dflt, char *dest, MSVCP_size_t size)
1632 FIXME("(%p %p %p %d %p %lu) stub\n", this, first, last, dflt, dest, size);
1633 return NULL;
1636 /* ?narrow@?$ctype@_W@std@@QBED_WD@Z */
1637 /* ?narrow@?$ctype@_W@std@@QEBAD_WD@Z */
1638 /* ?narrow@?$ctype@G@std@@QBEDGD@Z */
1639 /* ?narrow@?$ctype@G@std@@QEBADGD@Z */
1640 DEFINE_THISCALL_WRAPPER(ctype_wchar_narrow_ch, 12)
1641 char __thiscall ctype_wchar_narrow_ch(const ctype_wchar *this, wchar_t ch, char dflt)
1643 FIXME("(%p %d %d) stub\n", this, ch, dflt);
1644 return 0;
1647 /* ?narrow@?$ctype@_W@std@@QBEPB_WPB_W0DPAD@Z */
1648 /* ?narrow@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD@Z */
1649 /* ?narrow@?$ctype@G@std@@QBEPBGPBG0DPAD@Z */
1650 /* ?narrow@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD@Z */
1651 DEFINE_THISCALL_WRAPPER(ctype_wchar_narrow, 20)
1652 const wchar_t* __thiscall ctype_wchar_narrow(const ctype_wchar *this,
1653 const wchar_t *first, const wchar_t *last, char dflt, char *dest)
1655 FIXME("(%p %p %p %d %p) stub\n", this, first, last, dflt, dest);
1656 return NULL;
1659 /* ?_Narrow_s@?$ctype@_W@std@@QBEPB_WPB_W0DPADI@Z */
1660 /* ?_Narrow_s@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD_K@Z */
1661 /* ?_Narrow_s@?$ctype@G@std@@QBEPBGPBG0DPADI@Z */
1662 /* ?_Narrow_s@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD_K@Z */
1663 DEFINE_THISCALL_WRAPPER(ctype_wchar__Narrow_s, 24)
1664 const wchar_t* __thiscall ctype_wchar__Narrow_s(const ctype_wchar *this, const wchar_t *first,
1665 const wchar_t *last, char dflt, char *dest, unsigned int size)
1667 FIXME("(%p %p %p %d %p %d) stub\n", this, first, last, dflt, dest, size);
1668 return NULL;
1671 /* ?_Dowiden@?$ctype@_W@std@@IBE_WD@Z */
1672 /* ?_Dowiden@?$ctype@_W@std@@IEBA_WD@Z */
1673 /* ?_Dowiden@?$ctype@G@std@@IBEGD@Z */
1674 /* ?_Dowiden@?$ctype@G@std@@IEBAGD@Z */
1675 DEFINE_THISCALL_WRAPPER(ctype_wchar__Dowiden, 8)
1676 wchar_t __thiscall ctype_wchar__Dowiden(const ctype_wchar *this, char ch)
1678 FIXME("(%p %d) stub\n", this, ch);
1679 return 0;
1682 /* ?do_widen@?$ctype@_W@std@@MBE_WD@Z */
1683 /* ?do_widen@?$ctype@_W@std@@MEBA_WD@Z */
1684 /* ?do_widen@?$ctype@G@std@@MBEGD@Z */
1685 /* ?do_widen@?$ctype@G@std@@MEBAGD@Z */
1686 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_widen_ch, 8)
1687 wchar_t __thiscall ctype_wchar_do_widen_ch(const ctype_wchar *this, char ch)
1689 FIXME("(%p %d) stub\n", this, ch);
1690 return 0;
1693 /* ?do_widen@?$ctype@_W@std@@MBEPBDPBD0PA_W@Z */
1694 /* ?do_widen@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W@Z */
1695 /* ?do_widen@?$ctype@G@std@@MBEPBDPBD0PAG@Z */
1696 /* ?do_widen@?$ctype@G@std@@MEBAPEBDPEBD0PEAG@Z */
1697 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_widen, 16)
1698 const char* __thiscall ctype_wchar_do_widen(const ctype_wchar *this,
1699 const char *first, const char *last, wchar_t *dest)
1701 FIXME("(%p %p %p %p) stub\n", this, first, last, dest);
1702 return NULL;
1705 /* ?_Do_widen_s@?$ctype@_W@std@@MBEPBDPBD0PA_WI@Z */
1706 /* ?_Do_widen_s@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W_K@Z */
1707 /* ?_Do_widen_s@?$ctype@G@std@@MBEPBDPBD0PAGI@Z */
1708 /* ?_Do_widen_s@?$ctype@G@std@@MEBAPEBDPEBD0PEAG_K@Z */
1709 DEFINE_THISCALL_WRAPPER(ctype_wchar__Do_widen_s, 20)
1710 const char* __thiscall ctype_wchar__Do_widen_s(const ctype_wchar *this,
1711 const char *first, const char *last, wchar_t *dest, MSVCP_size_t size)
1713 FIXME("(%p %p %p %p %lu) stub\n", this, first, last, dest, size);
1714 return NULL;
1717 /* ?widen@?$ctype@_W@std@@QBE_WD@Z */
1718 /* ?widen@?$ctype@_W@std@@QEBA_WD@Z */
1719 /* ?widen@?$ctype@G@std@@QBEGD@Z */
1720 /* ?widen@?$ctype@G@std@@QEBAGD@Z */
1721 DEFINE_THISCALL_WRAPPER(ctype_wchar_widen_ch, 8)
1722 wchar_t __thiscall ctype_wchar_widen_ch(const ctype_wchar *this, char ch)
1724 FIXME("(%p %d) stub\n", this, ch);
1725 return 0;
1728 /* ?widen@?$ctype@_W@std@@QBEPBDPBD0PA_W@Z */
1729 /* ?widen@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W@Z */
1730 /* ?widen@?$ctype@G@std@@QBEPBDPBD0PAG@Z */
1731 /* ?widen@?$ctype@G@std@@QEBAPEBDPEBD0PEAG@Z */
1732 DEFINE_THISCALL_WRAPPER(ctype_wchar_widen, 16)
1733 const char* __thiscall ctype_wchar_widen(const ctype_wchar *this,
1734 const char *first, const char *last, wchar_t *dest)
1736 FIXME("(%p %p %p %p) stub\n", this, first, last, dest);
1737 return NULL;
1740 /* ?_Widen_s@?$ctype@_W@std@@QBEPBDPBD0PA_WI@Z */
1741 /* ?_Widen_s@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W_K@Z */
1742 /* ?_Widen_s@?$ctype@G@std@@QBEPBDPBD0PAGI@Z */
1743 /* ?_Widen_s@?$ctype@G@std@@QEBAPEBDPEBD0PEAG_K@Z */
1744 DEFINE_THISCALL_WRAPPER(ctype_wchar__Widen_s, 20)
1745 const char* __thiscall ctype_wchar__Widen_s(const ctype_wchar *this,
1746 const char *first, const char *last, wchar_t *dest, MSVCP_size_t size)
1748 FIXME("(%p %p %p %p %lu) stub\n", this, first, last, dest, size);
1749 return NULL;
1752 /* ?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1753 /* ?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1754 /* ?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1755 /* ?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1756 MSVCP_size_t __cdecl ctype_wchar__Getcat(const locale_facet **facet, const locale *loc)
1758 FIXME("(%p %p) stub\n", facet, loc);
1759 return 0;
1762 /* ?do_tolower@?$ctype@_W@std@@MBE_W_W@Z */
1763 /* ?do_tolower@?$ctype@_W@std@@MEBA_W_W@Z */
1764 /* ?do_tolower@?$ctype@G@std@@MBEGG@Z */
1765 /* ?do_tolower@?$ctype@G@std@@MEBAGG@Z */
1766 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_tolower_ch, 8)
1767 char __thiscall ctype_wchar_do_tolower_ch(const ctype_wchar *this, wchar_t ch)
1769 FIXME("(%p %d) stub\n", this, ch);
1770 return 0;
1773 /* ?do_tolower@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */
1774 /* ?do_tolower@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z */
1775 /* ?do_tolower@?$ctype@G@std@@MBEPBGPAGPBG@Z */
1776 /* ?do_tolower@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */
1777 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_tolower, 12)
1778 const wchar_t* __thiscall ctype_wchar_do_tolower(const ctype_wchar *this,
1779 wchar_t *first, const wchar_t *last)
1781 FIXME("(%p %p %p) stub\n", this, first, last);
1782 return NULL;
1785 /* ?tolower@?$ctype@_W@std@@QBE_W_W@Z */
1786 /* ?tolower@?$ctype@_W@std@@QEBA_W_W@Z */
1787 /* ?tolower@?$ctype@G@std@@QBEGG@Z */
1788 /* ?tolower@?$ctype@G@std@@QEBAGG@Z */
1789 DEFINE_THISCALL_WRAPPER(ctype_wchar_tolower_ch, 8)
1790 wchar_t __thiscall ctype_wchar_tolower_ch(const ctype_wchar *this, wchar_t ch)
1792 FIXME("(%p %d) stub\n", this, ch);
1793 return 0;
1796 /* ?tolower@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */
1797 /* ?tolower@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z */
1798 /* ?tolower@?$ctype@G@std@@QBEPBGPAGPBG@Z */
1799 /* ?tolower@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z */
1800 DEFINE_THISCALL_WRAPPER(ctype_wchar_tolower, 12)
1801 const wchar_t* __thiscall ctype_wchar_tolower(const ctype_wchar *this,
1802 wchar_t *first, const wchar_t *last)
1804 FIXME("(%p %p %p) stub\n", this, first, last);
1805 return NULL;
1808 /* ?do_toupper@?$ctype@_W@std@@MBE_W_W@Z */
1809 /* ?do_toupper@?$ctype@_W@std@@MEBA_W_W@Z */
1810 /* ?do_toupper@?$ctype@G@std@@MBEGG@Z */
1811 /* ?do_toupper@?$ctype@G@std@@MEBAGG@Z */
1812 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper_ch, 8)
1813 wchar_t __thiscall ctype_wchar_do_toupper_ch(const ctype_wchar *this, wchar_t ch)
1815 FIXME("(%p %d) stub\n", this, ch);
1816 return 0;
1819 /* ?do_toupper@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */
1820 /* ?do_toupper@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z */
1821 /* ?do_toupper@?$ctype@G@std@@MBEPBGPAGPBG@Z */
1822 /* ?do_toupper@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */
1823 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper, 12)
1824 const wchar_t* __thiscall ctype_wchar_do_toupper(const ctype_wchar *this,
1825 wchar_t *first, const wchar_t *last)
1827 FIXME("(%p %p %p) stub\n", this, first, last);
1828 return NULL;
1831 /* ?toupper@?$ctype@_W@std@@QBE_W_W@Z */
1832 /* ?toupper@?$ctype@_W@std@@QEBA_W_W@Z */
1833 /* ?toupper@?$ctype@G@std@@QBEGG@Z */
1834 /* ?toupper@?$ctype@G@std@@QEBAGG@Z */
1835 DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper_ch, 8)
1836 wchar_t __thiscall ctype_wchar_toupper_ch(const ctype_wchar *this, wchar_t ch)
1838 FIXME("(%p %d) stub\n", this, ch);
1839 return 0;
1842 /* ?toupper@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */
1843 /* ?toupper@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z */
1844 /* ?toupper@?$ctype@G@std@@QBEPBGPAGPBG@Z */
1845 /* ?toupper@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z */
1846 DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper, 12)
1847 const wchar_t* __thiscall ctype_wchar_toupper(const ctype_wchar *this,
1848 wchar_t *first, const wchar_t *last)
1850 FIXME("(%p %p %p) stub\n", this, first, last);
1851 return NULL;
1854 /* ?do_is@?$ctype@_W@std@@MBE_NF_W@Z */
1855 /* ?do_is@?$ctype@_W@std@@MEBA_NF_W@Z */
1856 /* ?do_is@?$ctype@G@std@@MBE_NFG@Z */
1857 /* ?do_is@?$ctype@G@std@@MEBA_NFG@Z */
1858 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is_ch, 12)
1859 MSVCP_bool __thiscall ctype_wchar_do_is_ch(const ctype_wchar *this, short mask, wchar_t ch)
1861 FIXME("(%p %x %d) stub\n", this, mask, ch);
1862 return 0;
1865 /* ?do_is@?$ctype@_W@std@@MBEPB_WPB_W0PAF@Z */
1866 /* ?do_is@?$ctype@_W@std@@MEBAPEB_WPEB_W0PEAF@Z */
1867 /* ?do_is@?$ctype@G@std@@MBEPBGPBG0PAF@Z */
1868 /* ?do_is@?$ctype@G@std@@MEBAPEBGPEBG0PEAF@Z */
1869 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is, 16)
1870 const wchar_t* __thiscall ctype_wchar_do_is(const ctype_wchar *this,
1871 const wchar_t *first, const wchar_t *last, short *dest)
1873 FIXME("(%p %p %p %p) stub\n", this, first, last, dest);
1874 return NULL;
1877 /* ?is@?$ctype@_W@std@@QBE_NF_W@Z */
1878 /* ?is@?$ctype@_W@std@@QEBA_NF_W@Z */
1879 /* ?is@?$ctype@G@std@@QBE_NFG@Z */
1880 /* ?is@?$ctype@G@std@@QEBA_NFG@Z */
1881 DEFINE_THISCALL_WRAPPER(ctype_wchar_is_ch, 12)
1882 MSVCP_bool __thiscall ctype_wchar_is_ch(const ctype_wchar *this, short mask, wchar_t ch)
1884 FIXME("(%p %x %d) stub\n", this, mask, ch);
1885 return 0;
1888 /* ?is@?$ctype@_W@std@@QBEPB_WPB_W0PAF@Z */
1889 /* ?is@?$ctype@_W@std@@QEBAPEB_WPEB_W0PEAF@Z */
1890 /* ?is@?$ctype@G@std@@QBEPBGPBG0PAF@Z */
1891 /* ?is@?$ctype@G@std@@QEBAPEBGPEBG0PEAF@Z */
1892 DEFINE_THISCALL_WRAPPER(ctype_wchar_is, 16)
1893 const wchar_t* __thiscall ctype_wchar_is(const ctype_wchar *this,
1894 const wchar_t *first, const wchar_t *last, short *dest)
1896 FIXME("(%p %p %p %p) stub\n", this, first, last, dest);
1897 return NULL;
1900 /* ?do_scan_is@?$ctype@_W@std@@MBEPB_WFPB_W0@Z */
1901 /* ?do_scan_is@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z */
1902 /* ?do_scan_is@?$ctype@G@std@@MBEPBGFPBG0@Z */
1903 /* ?do_scan_is@?$ctype@G@std@@MEBAPEBGFPEBG0@Z */
1904 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_scan_is, 16)
1905 const wchar_t* __thiscall ctype_wchar_do_scan_is(const ctype_wchar *this,
1906 short mask, const wchar_t *first, const wchar_t *last)
1908 FIXME("(%p %d %p %p) stub\n", this, mask, first, last);
1909 return NULL;
1912 /* ?scan_is@?$ctype@_W@std@@QBEPB_WFPB_W0@Z */
1913 /* ?scan_is@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z */
1914 /* ?scan_is@?$ctype@G@std@@QBEPBGFPBG0@Z */
1915 /* ?scan_is@?$ctype@G@std@@QEBAPEBGFPEBG0@Z */
1916 DEFINE_THISCALL_WRAPPER(ctype_wchar_scan_is, 16)
1917 const wchar_t* __thiscall ctype_wchar_scan_is(const ctype_wchar *this,
1918 short mask, const wchar_t *first, const wchar_t *last)
1920 FIXME("(%p %x %p %p) stub\n", this, mask, first, last);
1921 return NULL;
1924 /* ?do_scan_not@?$ctype@_W@std@@MBEPB_WFPB_W0@Z */
1925 /* ?do_scan_not@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z */
1926 /* ?do_scan_not@?$ctype@G@std@@MBEPBGFPBG0@Z */
1927 /* ?do_scan_not@?$ctype@G@std@@MEBAPEBGFPEBG0@Z */
1928 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_scan_not, 16)
1929 const wchar_t* __thiscall ctype_wchar_do_scan_not(const ctype_wchar *this,
1930 short mask, const wchar_t *first, const wchar_t *last)
1932 FIXME("(%p %x %p %p) stub\n", this, mask, first, last);
1933 return NULL;
1936 /* ?scan_not@?$ctype@_W@std@@QBEPB_WFPB_W0@Z */
1937 /* ?scan_not@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z */
1938 /* ?scan_not@?$ctype@G@std@@QBEPBGFPBG0@Z */
1939 /* ?scan_not@?$ctype@G@std@@QEBAPEBGFPEBG0@Z */
1940 DEFINE_THISCALL_WRAPPER(ctype_wchar_scan_not, 16)
1941 const wchar_t* __thiscall ctype_wchar_scan_not(const ctype_wchar *this,
1942 short mask, const wchar_t *first, const wchar_t *last)
1944 FIXME("(%p %x %p %p) stub\n", this, mask, first, last);
1945 return NULL;
1948 /* ??0_Locimp@locale@std@@AAE@_N@Z */
1949 /* ??0_Locimp@locale@std@@AEAA@_N@Z */
1950 DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor_transparent, 8)
1951 locale__Locimp* __thiscall locale__Locimp_ctor_transparent(locale__Locimp *this, MSVCP_bool transparent)
1953 TRACE("(%p %d)\n", this, transparent);
1955 memset(this, 0, sizeof(locale__Locimp));
1956 locale_facet_ctor_refs(&this->facet, 1);
1957 this->transparent = transparent;
1958 MSVCP_basic_string_char_ctor_cstr(&this->name, "*");
1959 return this;
1962 /* ??_F_Locimp@locale@std@@QAEXXZ */
1963 /* ??_F_Locimp@locale@std@@QEAAXXZ */
1964 DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor, 4)
1965 locale__Locimp* __thiscall locale__Locimp_ctor(locale__Locimp *this)
1967 return locale__Locimp_ctor_transparent(this, FALSE);
1970 /* ??0_Locimp@locale@std@@AAE@ABV012@@Z */
1971 /* ??0_Locimp@locale@std@@AEAA@AEBV012@@Z */
1972 DEFINE_THISCALL_WRAPPER(locale__Locimp_copy_ctor, 8)
1973 locale__Locimp* __thiscall locale__Locimp_copy_ctor(locale__Locimp *this, const locale__Locimp *copy)
1975 _Lockit lock;
1976 MSVCP_size_t i;
1978 TRACE("(%p %p)\n", this, copy);
1980 _Lockit_ctor_locktype(&lock, _LOCK_LOCALE);
1981 memcpy(this, copy, sizeof(locale__Locimp));
1982 locale_facet_ctor_refs(&this->facet, 1);
1983 if(copy->facetvec) {
1984 this->facetvec = MSVCRT_operator_new(copy->facet_cnt*sizeof(locale_facet*));
1985 if(!this->facetvec) {
1986 _Lockit_dtor(&lock);
1987 ERR("Out of memory\n");
1988 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
1989 return NULL;
1991 for(i=0; i<this->facet_cnt; i++)
1992 if(this->facetvec[i])
1993 locale_facet__Incref(this->facetvec[i]);
1995 MSVCP_basic_string_char_copy_ctor(&this->name, &copy->name);
1996 _Lockit_dtor(&lock);
1997 return this;
2000 /* ?_Locimp_ctor@_Locimp@locale@std@@CAXPAV123@ABV123@@Z */
2001 /* ?_Locimp_ctor@_Locimp@locale@std@@CAXPEAV123@AEBV123@@Z */
2002 locale__Locimp* __cdecl locale__Locimp__Locimp_ctor(locale__Locimp *this, const locale__Locimp *copy)
2004 return locale__Locimp_copy_ctor(this, copy);
2007 /* ??1_Locimp@locale@std@@MAE@XZ */
2008 /* ??1_Locimp@locale@std@@MEAA@XZ */
2009 DEFINE_THISCALL_WRAPPER(locale__Locimp_dtor, 4)
2010 void __thiscall locale__Locimp_dtor(locale__Locimp *this)
2012 TRACE("(%p)\n", this);
2014 if(locale_facet__Decref(&this->facet)) {
2015 MSVCP_size_t i;
2016 for(i=0; i<this->facet_cnt; i++)
2017 if(this->facetvec[i] && locale_facet__Decref(this->facetvec[i]))
2018 call_locale_facet_vector_dtor(this->facetvec[i], 0);
2020 MSVCRT_operator_delete(this->facetvec);
2021 MSVCP_basic_string_char_dtor(&this->name);
2025 /* ?_Locimp_dtor@_Locimp@locale@std@@CAXPAV123@@Z */
2026 /* ?_Locimp_dtor@_Locimp@locale@std@@CAXPEAV123@@Z */
2027 void __cdecl locale__Locimp__Locimp_dtor(locale__Locimp *this)
2029 locale__Locimp_dtor(this);
2032 DEFINE_THISCALL_WRAPPER(MSVCP_locale__Locimp_vector_dtor, 8)
2033 locale__Locimp* __thiscall MSVCP_locale__Locimp_vector_dtor(locale__Locimp *this, unsigned int flags)
2035 TRACE("(%p %x)\n", this, flags);
2036 if(flags & 2) {
2037 /* we have an array, with the number of elements stored before the first object */
2038 int i, *ptr = (int *)this-1;
2040 for(i=*ptr-1; i>=0; i--)
2041 locale__Locimp_dtor(this+i);
2042 MSVCRT_operator_delete(ptr);
2043 } else {
2044 locale__Locimp_dtor(this);
2045 if(flags & 1)
2046 MSVCRT_operator_delete(this);
2049 return this;
2052 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z */
2053 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPEAV123@PEAVfacet@23@_K@Z */
2054 void __cdecl locale__Locimp__Locimp_Addfac(locale__Locimp *locimp, locale_facet *facet, MSVCP_size_t id)
2056 _Lockit lock;
2058 TRACE("(%p %p %lu)\n", locimp, facet, id);
2060 _Lockit_ctor_locktype(&lock, _LOCK_LOCALE);
2061 if(id >= locimp->facet_cnt) {
2062 MSVCP_size_t new_size = id+1;
2063 locale_facet **new_facetvec;
2065 if(new_size < locale_id__Id_cnt+1)
2066 new_size = locale_id__Id_cnt+1;
2068 new_facetvec = MSVCRT_operator_new(sizeof(locale_facet*)*new_size);
2069 if(!new_facetvec) {
2070 _Lockit_dtor(&lock);
2071 ERR("Out of memory\n");
2072 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
2073 return;
2076 memset(new_facetvec, 0, sizeof(locale_facet*)*new_size);
2077 memcpy(new_facetvec, locimp->facetvec, sizeof(locale_facet*)*locimp->facet_cnt);
2078 MSVCRT_operator_delete(locimp->facetvec);
2079 locimp->facetvec = new_facetvec;
2080 locimp->facet_cnt = new_size;
2083 if(locimp->facetvec[id] && locale_facet__Decref(locimp->facetvec[id]))
2084 call_locale_facet_vector_dtor(locimp->facetvec[id], 0);
2086 locimp->facetvec[id] = facet;
2087 if(facet)
2088 locale_facet__Incref(facet);
2089 _Lockit_dtor(&lock);
2092 /* ?_Addfac@_Locimp@locale@std@@AAEXPAVfacet@23@I@Z */
2093 /* ?_Addfac@_Locimp@locale@std@@AEAAXPEAVfacet@23@_K@Z */
2094 DEFINE_THISCALL_WRAPPER(locale__Locimp__Addfac, 12)
2095 void __thiscall locale__Locimp__Addfac(locale__Locimp *this, locale_facet *facet, MSVCP_size_t id)
2097 locale__Locimp__Locimp_Addfac(this, facet, id);
2100 /* ?_Clocptr_func@_Locimp@locale@std@@CAAAPAV123@XZ */
2101 /* ?_Clocptr_func@_Locimp@locale@std@@CAAEAPEAV123@XZ */
2102 locale__Locimp** __cdecl locale__Locimp__Clocptr_func(void)
2104 FIXME("stub\n");
2105 return NULL;
2108 /* ?_Makeloc@_Locimp@locale@std@@CAPAV123@ABV_Locinfo@3@HPAV123@PBV23@@Z */
2109 /* ?_Makeloc@_Locimp@locale@std@@CAPEAV123@AEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
2110 locale__Locimp* __cdecl locale__Locimp__Makeloc(const _Locinfo *locinfo, category cat, locale__Locimp *locimp, const locale *loc)
2112 FIXME("(%p %d %p %p) stub\n", locinfo, cat, locimp, loc);
2113 return NULL;
2116 /* ?_Makeushloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
2117 /* ?_Makeushloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
2118 void __cdecl locale__Locimp__Makeushloc(const _Locinfo *locinfo, category cat, locale__Locimp *locimp, const locale *loc)
2120 FIXME("(%p %d %p %p) stub\n", locinfo, cat, locimp, loc);
2123 /* ?_Makewloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
2124 /* ?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
2125 void __cdecl locale__Locimp__Makewloc(const _Locinfo *locinfo, category cat, locale__Locimp *locimp, const locale *loc)
2127 FIXME("(%p %d %p %p) stub\n", locinfo, cat, locimp, loc);
2130 /* ?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
2131 /* ?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
2132 void __cdecl locale__Locimp__Makexloc(const _Locinfo *locinfo, category cat, locale__Locimp *locimp, const locale *loc)
2134 FIXME("(%p %d %p %p) stub\n", locinfo, cat, locimp, loc);
2137 /* ??_7_Locimp@locale@std@@6B@ */
2138 const vtable_ptr MSVCP_locale__Locimp_vtable[] = {
2139 (vtable_ptr)THISCALL_NAME(MSVCP_locale__Locimp_vector_dtor)
2142 /* ??0locale@std@@AAE@PAV_Locimp@01@@Z */
2143 /* ??0locale@std@@AEAA@PEAV_Locimp@01@@Z */
2144 DEFINE_THISCALL_WRAPPER(locale_ctor_locimp, 8)
2145 locale* __thiscall locale_ctor_locimp(locale *this, locale__Locimp *locimp)
2147 TRACE("(%p %p)\n", this, locimp);
2148 /* Don't change locimp reference counter */
2149 this->ptr = locimp;
2150 return this;
2153 /* ??0locale@std@@QAE@ABV01@0H@Z */
2154 /* ??0locale@std@@QEAA@AEBV01@0H@Z */
2155 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_locale, 16)
2156 locale* __thiscall locale_ctor_locale_locale(locale *this, const locale *loc, const locale *other, category cat)
2158 FIXME("(%p %p %p %d) stub\n", this, loc, other, cat);
2159 return NULL;
2162 /* ??0locale@std@@QAE@ABV01@@Z */
2163 /* ??0locale@std@@QEAA@AEBV01@@Z */
2164 DEFINE_THISCALL_WRAPPER(locale_copy_ctor, 8)
2165 locale* __thiscall locale_copy_ctor(locale *this, const locale *copy)
2167 TRACE("(%p %p)\n", this, copy);
2168 this->ptr = copy->ptr;
2169 locale_facet__Incref(&this->ptr->facet);
2170 return this;
2173 /* ??0locale@std@@QAE@ABV01@PBDH@Z */
2174 /* ??0locale@std@@QEAA@AEBV01@PEBDH@Z */
2175 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_cstr, 16)
2176 locale* __thiscall locale_ctor_locale_cstr(locale *this, const locale *loc, const char *locname, category cat)
2178 FIXME("(%p %p %s %d) stub\n", this, loc, locname, cat);
2179 return NULL;
2182 /* ??0locale@std@@QAE@PBDH@Z */
2183 /* ??0locale@std@@QEAA@PEBDH@Z */
2184 DEFINE_THISCALL_WRAPPER(locale_ctor_cstr, 12)
2185 locale* __thiscall locale_ctor_cstr(locale *this, const char *locname, category cat)
2187 FIXME("(%p %s %d) stub\n", this, locname, cat);
2188 return NULL;
2191 /* ??0locale@std@@QAE@W4_Uninitialized@1@@Z */
2192 /* ??0locale@std@@QEAA@W4_Uninitialized@1@@Z */
2193 DEFINE_THISCALL_WRAPPER(locale_ctor_uninitialized, 8)
2194 locale* __thiscall locale_ctor_uninitialized(locale *this, int uninitialized)
2196 TRACE("(%p)\n", this);
2197 this->ptr = NULL;
2198 return this;
2201 /* ??0locale@std@@QAE@XZ */
2202 /* ??0locale@std@@QEAA@XZ */
2203 DEFINE_THISCALL_WRAPPER(locale_ctor, 4)
2204 locale* __thiscall locale_ctor(locale *this)
2206 TRACE("(%p)\n", this);
2207 this->ptr = MSVCRT_operator_new(sizeof(locale__Locimp));
2208 if(!this->ptr) {
2209 ERR("Out of memory\n");
2210 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
2211 return NULL;
2214 locale__Locimp_ctor(this->ptr);
2215 return this;
2218 /* ??1locale@std@@QAE@XZ */
2219 /* ??1locale@std@@QEAA@XZ */
2220 DEFINE_THISCALL_WRAPPER(locale_dtor, 4)
2221 void __thiscall locale_dtor(locale *this)
2223 TRACE("(%p)\n", this);
2224 if(this->ptr)
2225 locale__Locimp_dtor(this->ptr);
2228 DEFINE_THISCALL_WRAPPER(MSVCP_locale_vector_dtor, 8)
2229 locale* __thiscall MSVCP_locale_vector_dtor(locale *this, unsigned int flags)
2231 TRACE("(%p %x)\n", this, flags);
2232 if(flags & 2) {
2233 /* we have an array, with the number of elements stored before the first object */
2234 int i, *ptr = (int *)this-1;
2236 for(i=*ptr-1; i>=0; i--)
2237 locale_dtor(this+i);
2238 MSVCRT_operator_delete(ptr);
2239 } else {
2240 locale_dtor(this);
2241 if(flags & 1)
2242 MSVCRT_operator_delete(this);
2245 return this;
2248 /* ??4locale@std@@QAEAAV01@ABV01@@Z */
2249 /* ??4locale@std@@QEAAAEAV01@AEBV01@@Z */
2250 DEFINE_THISCALL_WRAPPER(locale_operator_assign, 8)
2251 locale* __thiscall locale_operator_assign(locale *this, const locale *loc)
2253 FIXME("(%p %p) stub\n", this, loc);
2254 return NULL;
2257 /* ??8locale@std@@QBE_NABV01@@Z */
2258 /* ??8locale@std@@QEBA_NAEBV01@@Z */
2259 DEFINE_THISCALL_WRAPPER(locale_operator_equal, 8)
2260 MSVCP_bool __thiscall locale_operator_equal(const locale *this, const locale *loc)
2262 FIXME("(%p %p) stub\n", this, loc);
2263 return 0;
2266 /* ??9locale@std@@QBE_NABV01@@Z */
2267 /* ??9locale@std@@QEBA_NAEBV01@@Z */
2268 DEFINE_THISCALL_WRAPPER(locale_operator_not_equal, 8)
2269 MSVCP_bool __thiscall locale_operator_not_equal(const locale *this, locale const *loc)
2271 FIXME("(%p %p) stub\n", this, loc);
2272 return 0;
2275 /* ?_Addfac@locale@std@@QAEAAV12@PAVfacet@12@II@Z */
2276 /* ?_Addfac@locale@std@@QEAAAEAV12@PEAVfacet@12@_K1@Z */
2277 DEFINE_THISCALL_WRAPPER(locale__Addfac, 16)
2278 locale* __thiscall locale__Addfac(locale *this, locale_facet *facet, MSVCP_size_t id, MSVCP_size_t catmask)
2280 TRACE("(%p %p %lu %lu)\n", this, facet, id, catmask);
2282 if(this->ptr->facet.refs > 1) {
2283 locale__Locimp *new_ptr = MSVCRT_operator_new(sizeof(locale__Locimp));
2284 if(!new_ptr) {
2285 ERR("Out of memory\n");
2286 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
2287 return NULL;
2289 locale__Locimp_copy_ctor(new_ptr, this->ptr);
2290 locale_facet__Decref(&this->ptr->facet);
2291 this->ptr = new_ptr;
2294 locale__Locimp__Addfac(this->ptr, facet, id);
2296 if(catmask) {
2297 MSVCP_basic_string_char_dtor(&this->ptr->name);
2298 MSVCP_basic_string_char_ctor_cstr(&this->ptr->name, "*");
2300 return this;
2303 /* ?_Getfacet@locale@std@@QBEPBVfacet@12@I@Z */
2304 /* ?_Getfacet@locale@std@@QEBAPEBVfacet@12@_K@Z */
2305 DEFINE_THISCALL_WRAPPER(locale__Getfacet, 8)
2306 const locale_facet* __thiscall locale__Getfacet(const locale *this, MSVCP_size_t id)
2308 FIXME("(%p %lu) stub\n", this, id);
2309 return NULL;
2312 /* ?_Init@locale@std@@CAPAV_Locimp@12@XZ */
2313 /* ?_Init@locale@std@@CAPEAV_Locimp@12@XZ */
2314 locale__Locimp* __cdecl locale__Init(void)
2316 FIXME("stub\n");
2317 return NULL;
2320 /* ?_Getgloballocale@locale@std@@CAPAV_Locimp@12@XZ */
2321 /* ?_Getgloballocale@locale@std@@CAPEAV_Locimp@12@XZ */
2322 locale__Locimp* __cdecl locale__Getgloballocale(void)
2324 FIXME("stub\n");
2325 return NULL;
2328 /* ?_Setgloballocale@locale@std@@CAXPAX@Z */
2329 /* ?_Setgloballocale@locale@std@@CAXPEAX@Z */
2330 void __cdecl locale__Setgloballocale(void *locimp)
2332 FIXME("(%p) stub\n", locimp);
2335 /* ?classic@locale@std@@SAABV12@XZ */
2336 /* ?classic@locale@std@@SAAEBV12@XZ */
2337 const locale* __cdecl locale_classic(void)
2339 FIXME("stub\n");
2340 return NULL;
2343 /* ?name@locale@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
2344 /* ?name@locale@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
2345 DEFINE_THISCALL_WRAPPER_RETPTR(locale_name, 4)
2346 basic_string_char __thiscall locale_name(const locale *this)
2348 TRACE( "(%p)\n", this);
2349 return this->ptr->name;
2352 static const rtti_base_descriptor locale_facet_rtti_base_descriptor = {
2353 &locale_facet_type_info,
2355 { 0, -1, 0},
2359 DEFINE_RTTI_DATA(collate_char, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$collate@D@std@@");
2360 DEFINE_RTTI_DATA(collate_wchar, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$collate@_W@std@@");
2361 DEFINE_RTTI_DATA(collate_short, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$collate@G@std@@");
2362 DEFINE_RTTI_DATA(ctype_base, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AUctype_base@std@@");
2363 DEFINE_RTTI_DATA(ctype_char, 0, 2, &ctype_base_rtti_base_descriptor, &locale_facet_rtti_base_descriptor, NULL, ".?AV?$ctype@D@std@@");
2364 DEFINE_RTTI_DATA(ctype_wchar, 0, 2, &ctype_base_rtti_base_descriptor, &locale_facet_rtti_base_descriptor, NULL, ".?AV?$ctype@_W@std@@");
2365 DEFINE_RTTI_DATA(ctype_short, 0, 2, &ctype_base_rtti_base_descriptor, &locale_facet_rtti_base_descriptor, NULL, ".?AV?$ctype@G@std@@");
2367 #ifndef __GNUC__
2368 void __asm_dummy_vtables(void) {
2369 #endif
2370 __ASM_VTABLE(collate_char,
2371 VTABLE_ADD_FUNC(collate_char_do_compare)
2372 VTABLE_ADD_FUNC(collate_char_do_transform)
2373 VTABLE_ADD_FUNC(collate_char_do_hash));
2374 __ASM_VTABLE(collate_wchar,
2375 VTABLE_ADD_FUNC(collate_wchar_do_compare)
2376 VTABLE_ADD_FUNC(collate_wchar_do_transform)
2377 VTABLE_ADD_FUNC(collate_wchar_do_hash));
2378 __ASM_VTABLE(collate_short,
2379 VTABLE_ADD_FUNC(collate_wchar_do_compare)
2380 VTABLE_ADD_FUNC(collate_wchar_do_transform)
2381 VTABLE_ADD_FUNC(collate_wchar_do_hash));
2382 __ASM_VTABLE(ctype_base, "");
2383 __ASM_VTABLE(ctype_char,
2384 VTABLE_ADD_FUNC(ctype_char_do_tolower)
2385 VTABLE_ADD_FUNC(ctype_char_do_tolower_ch)
2386 VTABLE_ADD_FUNC(ctype_char_do_toupper)
2387 VTABLE_ADD_FUNC(ctype_char_do_toupper_ch)
2388 VTABLE_ADD_FUNC(ctype_char_do_widen)
2389 VTABLE_ADD_FUNC(ctype_char_do_widen_ch)
2390 VTABLE_ADD_FUNC(ctype_char__Do_widen_s)
2391 VTABLE_ADD_FUNC(ctype_char_do_narrow)
2392 VTABLE_ADD_FUNC(ctype_char_do_narrow_ch)
2393 VTABLE_ADD_FUNC(ctype_char__Do_narrow_s));
2394 __ASM_VTABLE(ctype_wchar,
2395 VTABLE_ADD_FUNC(ctype_wchar_do_is)
2396 VTABLE_ADD_FUNC(ctype_wchar_do_is_ch)
2397 VTABLE_ADD_FUNC(ctype_wchar_do_scan_is)
2398 VTABLE_ADD_FUNC(ctype_wchar_do_scan_not)
2399 VTABLE_ADD_FUNC(ctype_wchar_do_tolower)
2400 VTABLE_ADD_FUNC(ctype_wchar_do_tolower_ch)
2401 VTABLE_ADD_FUNC(ctype_wchar_do_toupper)
2402 VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch)
2403 VTABLE_ADD_FUNC(ctype_wchar_do_widen)
2404 VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch)
2405 VTABLE_ADD_FUNC(ctype_wchar__Do_widen_s)
2406 VTABLE_ADD_FUNC(ctype_wchar_do_narrow)
2407 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch)
2408 VTABLE_ADD_FUNC(ctype_wchar__Do_narrow_s));
2409 __ASM_VTABLE(ctype_short,
2410 VTABLE_ADD_FUNC(ctype_wchar_do_is)
2411 VTABLE_ADD_FUNC(ctype_wchar_do_is_ch)
2412 VTABLE_ADD_FUNC(ctype_wchar_do_scan_is)
2413 VTABLE_ADD_FUNC(ctype_wchar_do_scan_not)
2414 VTABLE_ADD_FUNC(ctype_wchar_do_tolower)
2415 VTABLE_ADD_FUNC(ctype_wchar_do_tolower_ch)
2416 VTABLE_ADD_FUNC(ctype_wchar_do_toupper)
2417 VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch)
2418 VTABLE_ADD_FUNC(ctype_wchar_do_widen)
2419 VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch)
2420 VTABLE_ADD_FUNC(ctype_wchar__Do_widen_s)
2421 VTABLE_ADD_FUNC(ctype_wchar_do_narrow)
2422 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch)
2423 VTABLE_ADD_FUNC(ctype_wchar__Do_narrow_s));
2424 #ifndef __GNUC__
2426 #endif