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
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);
42 const vtable_ptr
*vtable
;
46 typedef struct _locale__Locimp
{
48 locale_facet
**facetvec
;
49 MSVCP_size_t facet_cnt
;
51 MSVCP_bool transparent
;
52 basic_string_char name
;
61 basic_string_char days
;
62 basic_string_char months
;
63 basic_string_char oldlocname
;
64 basic_string_char newlocname
;
89 /* ?_Id_cnt@id@locale@std@@0HA */
90 int locale_id__Id_cnt
= 0;
92 /* ?_Clocptr@_Locimp@locale@std@@0PAV123@A */
93 /* ?_Clocptr@_Locimp@locale@std@@0PEAV123@EA */
94 locale__Locimp
*locale__Locimp__Clocptr
= NULL
;
96 /* ??1facet@locale@std@@UAE@XZ */
97 /* ??1facet@locale@std@@UEAA@XZ */
98 DEFINE_THISCALL_WRAPPER(locale_facet_dtor
, 4)
99 void __thiscall
locale_facet_dtor(locale_facet
*this)
101 TRACE("(%p)\n", this);
104 DEFINE_THISCALL_WRAPPER(MSVCP_locale_facet_vector_dtor
, 8)
105 locale_facet
* __thiscall
MSVCP_locale_facet_vector_dtor(locale_facet
*this, unsigned int flags
)
107 TRACE("(%p %x)\n", this, flags
);
109 /* we have an array, with the number of elements stored before the first object */
110 int i
, *ptr
= (int *)this-1;
112 for(i
=*ptr
-1; i
>=0; i
--)
113 locale_facet_dtor(this+i
);
114 MSVCRT_operator_delete(ptr
);
116 locale_facet_dtor(this);
118 MSVCRT_operator_delete(this);
124 const vtable_ptr MSVCP_locale_facet_vtable
[] = {
125 (vtable_ptr
)THISCALL_NAME(MSVCP_locale_facet_vector_dtor
)
128 static inline locale_facet
* call_locale_facet_vector_dtor(locale_facet
*this, unsigned int flags
)
133 __asm__
__volatile__ ("pushl %3\n\tcall *%2"
134 : "=a" (ret
), "=c" (dummy
)
135 : "r" (this->vtable
[0]), "r" (flags
), "1" (this)
140 static inline locale_facet
* call_locale_facet_vector_dtor(locale_facet
*this, unsigned int flags
)
142 locale_facet
* (__thiscall
*dtor
)(locale_facet
*, unsigned int) = (void *)this->vtable
[0];
143 return dtor(this, flags
);
147 /* ??0id@locale@std@@QAE@I@Z */
148 /* ??0id@locale@std@@QEAA@_K@Z */
149 DEFINE_THISCALL_WRAPPER(locale_id_ctor_id
, 8)
150 locale_id
* __thiscall
locale_id_ctor_id(locale_id
*this, MSVCP_size_t id
)
152 TRACE("(%p %lu)\n", this, id
);
158 /* ??_Fid@locale@std@@QAEXXZ */
159 /* ??_Fid@locale@std@@QEAAXXZ */
160 DEFINE_THISCALL_WRAPPER(locale_id_ctor
, 4)
161 locale_id
* __thiscall
locale_id_ctor(locale_id
*this)
163 TRACE("(%p)\n", this);
169 /* ??Bid@locale@std@@QAEIXZ */
170 /* ??Bid@locale@std@@QEAA_KXZ */
171 DEFINE_THISCALL_WRAPPER(locale_id_operator_size_t
, 4)
172 MSVCP_size_t __thiscall
locale_id_operator_size_t(locale_id
*this)
176 TRACE("(%p)\n", this);
179 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
180 this->id
= ++locale_id__Id_cnt
;
187 /* ?_Id_cnt_func@id@locale@std@@CAAAHXZ */
188 /* ?_Id_cnt_func@id@locale@std@@CAAEAHXZ */
189 int* __cdecl
locale_id__Id_cnt_func(void)
192 return &locale_id__Id_cnt
;
195 /* ??_Ffacet@locale@std@@QAEXXZ */
196 /* ??_Ffacet@locale@std@@QEAAXXZ */
197 DEFINE_THISCALL_WRAPPER(locale_facet_ctor
, 4)
198 locale_facet
* __thiscall
locale_facet_ctor(locale_facet
*this)
200 TRACE("(%p)\n", this);
201 this->vtable
= MSVCP_locale_facet_vtable
;
206 /* ??0facet@locale@std@@IAE@I@Z */
207 /* ??0facet@locale@std@@IEAA@_K@Z */
208 DEFINE_THISCALL_WRAPPER(locale_facet_ctor_refs
, 8)
209 locale_facet
* __thiscall
locale_facet_ctor_refs(locale_facet
*this, MSVCP_size_t refs
)
211 TRACE("(%p %lu)\n", this, refs
);
212 this->vtable
= MSVCP_locale_facet_vtable
;
217 /* ?_Incref@facet@locale@std@@QAEXXZ */
218 /* ?_Incref@facet@locale@std@@QEAAXXZ */
219 DEFINE_THISCALL_WRAPPER(locale_facet__Incref
, 4)
220 void __thiscall
locale_facet__Incref(locale_facet
*this)
224 TRACE("(%p)\n", this);
226 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
231 /* ?_Decref@facet@locale@std@@QAEPAV123@XZ */
232 /* ?_Decref@facet@locale@std@@QEAAPEAV123@XZ */
233 DEFINE_THISCALL_WRAPPER(locale_facet__Decref
, 4)
234 locale_facet
* __thiscall
locale_facet__Decref(locale_facet
*this)
239 TRACE("(%p)\n", this);
241 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
245 ret
= this->refs
? NULL
: this;
251 /* ?_Getcat@facet@locale@std@@SAIPAPBV123@PBV23@@Z */
252 /* ?_Getcat@facet@locale@std@@SA_KPEAPEBV123@PEBV23@@Z */
253 MSVCP_size_t __cdecl
locale_facet__Getcat(const locale_facet
**facet
, const locale
*loc
)
255 TRACE("(%p %p)\n", facet
, loc
);
259 /* ?id@?$collate@D@std@@2V0locale@2@A */
260 locale_id collate_char_id
= {0};
262 /* ??_7?$collate@D@std@@6B@ */
263 extern const vtable_ptr MSVCP_collate_char_vtable
;
265 /* ??0?$collate@D@std@@IAE@PBDI@Z */
266 /* ??0?$collate@D@std@@IEAA@PEBD_K@Z */
267 DEFINE_THISCALL_WRAPPER(collate_char_ctor_name
, 12)
268 collate
* __thiscall
collate_char_ctor_name(collate
*this, const char *name
, MSVCP_size_t refs
)
270 FIXME("(%p %s %lu) stub\n", this, name
, refs
);
271 this->facet
.vtable
= &MSVCP_collate_char_vtable
;
275 /* ??0?$collate@D@std@@QAE@ABV_Locinfo@1@I@Z */
276 /* ??0?$collate@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
277 DEFINE_THISCALL_WRAPPER(collate_char_ctor_locinfo
, 12)
278 collate
* __thiscall
collate_char_ctor_locinfo(collate
*this, _Locinfo
*locinfo
, MSVCP_size_t refs
)
280 FIXME("(%p %p %lu) stub\n", this, locinfo
, refs
);
281 this->facet
.vtable
= &MSVCP_collate_char_vtable
;
285 /* ??0?$collate@D@std@@QAE@I@Z */
286 /* ??0?$collate@D@std@@QEAA@_K@Z */
287 DEFINE_THISCALL_WRAPPER(collate_char_ctor_refs
, 8)
288 collate
* __thiscall
collate_char_ctor_refs(collate
*this, MSVCP_size_t refs
)
290 FIXME("(%p %lu) stub\n", this, refs
);
291 this->facet
.vtable
= &MSVCP_collate_char_vtable
;
295 /* ??1?$collate@D@std@@MAE@XZ */
296 /* ??1?$collate@D@std@@MEAA@XZ */
297 DEFINE_THISCALL_WRAPPER(collate_char_dtor
, 4)
298 void __thiscall
collate_char_dtor(collate
*this)
300 FIXME("(%p) stub\n", this);
303 DEFINE_THISCALL_WRAPPER(MSVCP_collate_char_vector_dtor
, 8)
304 collate
* __thiscall
MSVCP_collate_char_vector_dtor(collate
*this, unsigned int flags
)
306 TRACE("(%p %x)\n", this, flags
);
308 /* we have an array, with the number of elements stored before the first object */
309 int i
, *ptr
= (int *)this-1;
311 for(i
=*ptr
-1; i
>=0; i
--)
312 collate_char_dtor(this+i
);
313 MSVCRT_operator_delete(ptr
);
315 collate_char_dtor(this);
317 MSVCRT_operator_delete(this);
323 /* ??_F?$collate@D@std@@QAEXXZ */
324 /* ??_F?$collate@D@std@@QEAAXXZ */
325 DEFINE_THISCALL_WRAPPER(collate_char_ctor
, 4)
326 collate
* __thiscall
collate_char_ctor(collate
*this)
328 FIXME("(%p) stub\n", this);
329 this->facet
.vtable
= &MSVCP_collate_char_vtable
;
333 /* ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
334 /* ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
335 MSVCP_size_t __cdecl
collate_char__Getcat(const locale_facet
**facet
, const locale_facet
*loc
)
337 FIXME("(%p %p) stub\n", facet
, loc
);
341 /* ?_Init@?$collate@D@std@@IAEXABV_Locinfo@2@@Z */
342 /* ?_Init@?$collate@D@std@@IEAAXAEBV_Locinfo@2@@Z */
343 DEFINE_THISCALL_WRAPPER(collate_char__Init
, 8)
344 void __thiscall
collate_char__Init(collate
*this, const _Locinfo
*locinfo
)
346 FIXME("(%p %p) stub\n", this, locinfo
);
349 /* ?do_compare@?$collate@D@std@@MBEHPBD000@Z */
350 /* ?do_compare@?$collate@D@std@@MEBAHPEBD000@Z */
351 DEFINE_THISCALL_WRAPPER(collate_char_do_compare
, 20)
352 int __thiscall
collate_char_do_compare(const collate
*this, const char *first1
,
353 const char *last1
, const char *first2
, const char *last2
)
355 FIXME("(%p %p %p %p %p) stub\n", this, first1
, last1
, first2
, last2
);
359 /* ?compare@?$collate@D@std@@QBEHPBD000@Z */
360 /* ?compare@?$collate@D@std@@QEBAHPEBD000@Z */
361 DEFINE_THISCALL_WRAPPER(collate_char_compare
, 20)
362 int __thiscall
collate_char_compare(const collate
*this, const char *first1
,
363 const char *last1
, const char *first2
, const char *last2
)
365 FIXME("(%p %p %p %p %p) stub\n", this, first1
, last1
, first2
, last2
);
369 /* ?do_hash@?$collate@D@std@@MBEJPBD0@Z */
370 /* ?do_hash@?$collate@D@std@@MEBAJPEBD0@Z */
371 DEFINE_THISCALL_WRAPPER(collate_char_do_hash
, 12)
372 LONG __thiscall
collate_char_do_hash(const collate
*this,
373 const char *first
, const char *last
)
375 FIXME("(%p %p %p) stub\n", this, first
, last
);
379 /* ?hash@?$collate@D@std@@QBEJPBD0@Z */
380 /* ?hash@?$collate@D@std@@QEBAJPEBD0@Z */
381 DEFINE_THISCALL_WRAPPER(collate_char_hash
, 12)
382 LONG __thiscall
collate_char_hash(const collate
*this,
383 const char *first
, const char *last
)
385 FIXME("(%p %p %p) stub\n", this, first
, last
);
389 /* ?do_transform@?$collate@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
390 /* ?do_transform@?$collate@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
391 DEFINE_THISCALL_WRAPPER_RETPTR(collate_char_do_transform
, 12)
392 basic_string_char __thiscall
collate_char_do_transform(const collate
*this,
393 const char *first
, const char *last
)
395 basic_string_char ret
= {0}; /* FIXME */
396 FIXME("(%p %p %p) stub\n", this, first
, last
);
400 /* ?transform@?$collate@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
401 /* ?transform@?$collate@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
402 DEFINE_THISCALL_WRAPPER_RETPTR(collate_char_transform
, 12)
403 basic_string_char __thiscall
collate_char_transform(const collate
*this,
404 const char *first
, const char *last
)
406 basic_string_char ret
= {0}; /* FIXME */
407 FIXME("(%p %p %p) stub\n", this, first
, last
);
411 /* ?id@?$collate@_W@std@@2V0locale@2@A */
412 locale_id collate_wchar_id
= {0};
413 /* ?id@?$collate@G@std@@2V0locale@2@A */
414 locale_id collate_short_id
= {0};
416 /* ??_7?$collate@_W@std@@6B@ */
417 extern const vtable_ptr MSVCP_collate_wchar_vtable
;
418 /* ??_7?$collate@G@std@@6B@ */
419 extern const vtable_ptr MSVCP_collate_short_vtable
;
421 /* ??0?$collate@_W@std@@IAE@PBDI@Z */
422 /* ??0?$collate@_W@std@@IEAA@PEBD_K@Z */
423 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_name
, 12)
424 collate
* __thiscall
collate_wchar_ctor_name(collate
*this, const char *name
, MSVCP_size_t refs
)
426 FIXME("(%p %s %lu) stub\n", this, name
, refs
);
427 this->facet
.vtable
= &MSVCP_collate_wchar_vtable
;
431 /* ??0?$collate@G@std@@IAE@PBDI@Z */
432 /* ??0?$collate@G@std@@IEAA@PEBD_K@Z */
433 DEFINE_THISCALL_WRAPPER(collate_short_ctor_name
, 12)
434 collate
* __thiscall
collate_short_ctor_name(collate
*this, const char *name
, MSVCP_size_t refs
)
436 collate
*ret
= collate_wchar_ctor_name(this, name
, refs
);
437 ret
->facet
.vtable
= &MSVCP_collate_short_vtable
;
441 /* ??0?$collate@_W@std@@QAE@ABV_Locinfo@1@I@Z */
442 /* ??0?$collate@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
443 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_locinfo
, 12)
444 collate
* __thiscall
collate_wchar_ctor_locinfo(collate
*this, _Locinfo
*locinfo
, MSVCP_size_t refs
)
446 FIXME("(%p %p %lu) stub\n", this, locinfo
, refs
);
447 this->facet
.vtable
= &MSVCP_collate_wchar_vtable
;
451 /* ??0?$collate@G@std@@QAE@ABV_Locinfo@1@I@Z */
452 /* ??0?$collate@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
453 DEFINE_THISCALL_WRAPPER(collate_short_ctor_locinfo
, 12)
454 collate
* __thiscall
collate_short_ctor_locinfo(collate
*this, _Locinfo
*locinfo
, MSVCP_size_t refs
)
456 collate
*ret
= collate_wchar_ctor_locinfo(this, locinfo
, refs
);
457 ret
->facet
.vtable
= &MSVCP_collate_short_vtable
;
461 /* ??0?$collate@_W@std@@QAE@I@Z */
462 /* ??0?$collate@_W@std@@QEAA@_K@Z */
463 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_refs
, 8)
464 collate
* __thiscall
collate_wchar_ctor_refs(collate
*this, MSVCP_size_t refs
)
466 FIXME("(%p %lu) stub\n", this, refs
);
467 this->facet
.vtable
= &MSVCP_collate_wchar_vtable
;
471 /* ??0?$collate@G@std@@QAE@I@Z */
472 /* ??0?$collate@G@std@@QEAA@_K@Z */
473 DEFINE_THISCALL_WRAPPER(collate_short_ctor_refs
, 8)
474 collate
* __thiscall
collate_short_ctor_refs(collate
*this, MSVCP_size_t refs
)
476 collate
*ret
= collate_wchar_ctor_refs(this, refs
);
477 ret
->facet
.vtable
= &MSVCP_collate_short_vtable
;
481 /* ??1?$collate@_W@std@@MAE@XZ */
482 /* ??1?$collate@_W@std@@MEAA@XZ */
483 /* ??1?$collate@G@std@@MAE@XZ */
484 /* ??1?$collate@G@std@@MEAA@XZ */
485 DEFINE_THISCALL_WRAPPER(collate_wchar_dtor
, 4)
486 void __thiscall
collate_wchar_dtor(collate
*this)
488 FIXME("(%p) stub\n", this);
491 DEFINE_THISCALL_WRAPPER(MSVCP_collate_wchar_vector_dtor
, 8)
492 collate
* __thiscall
MSVCP_collate_wchar_vector_dtor(collate
*this, unsigned int flags
)
494 TRACE("(%p %x)\n", this, flags
);
496 /* we have an array, with the number of elements stored before the first object */
497 int i
, *ptr
= (int *)this-1;
499 for(i
=*ptr
-1; i
>=0; i
--)
500 collate_wchar_dtor(this+i
);
501 MSVCRT_operator_delete(ptr
);
503 collate_wchar_dtor(this);
505 MSVCRT_operator_delete(this);
511 DEFINE_THISCALL_WRAPPER(MSVCP_collate_short_vector_dtor
, 8)
512 collate
* __thiscall
MSVCP_collate_short_vector_dtor(collate
*this, unsigned int flags
)
514 return MSVCP_collate_wchar_vector_dtor(this, flags
);
517 /* ??_F?$collate@_W@std@@QAEXXZ */
518 /* ??_F?$collate@_W@std@@QEAAXXZ */
519 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor
, 4)
520 collate
* __thiscall
collate_wchar_ctor(collate
*this)
522 FIXME("(%p) stub\n", this);
523 this->facet
.vtable
= &MSVCP_collate_wchar_vtable
;
527 /* ??_F?$collate@G@std@@QAEXXZ */
528 /* ??_F?$collate@G@std@@QEAAXXZ */
529 DEFINE_THISCALL_WRAPPER(collate_short_ctor
, 4)
530 collate
* __thiscall
collate_short_ctor(collate
*this)
532 collate
*ret
= collate_wchar_ctor(this);
533 ret
->facet
.vtable
= &MSVCP_collate_short_vtable
;
537 /* ?_Getcat@?$collate@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
538 /* ?_Getcat@?$collate@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
539 /* ?_Getcat@?$collate@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
540 /* ?_Getcat@?$collate@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
541 MSVCP_size_t __cdecl
collate_wchar__Getcat(const locale_facet
**facet
, const locale_facet
*loc
)
543 FIXME("(%p %p) stub\n", facet
, loc
);
547 /* ?_Init@?$collate@_W@std@@IAEXABV_Locinfo@2@@Z */
548 /* ?_Init@?$collate@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
549 /* ?_Init@?$collate@G@std@@IAEXABV_Locinfo@2@@Z */
550 /* ?_Init@?$collate@G@std@@IEAAXAEBV_Locinfo@2@@Z */
551 DEFINE_THISCALL_WRAPPER(collate_wchar__Init
, 8)
552 void __thiscall
collate_wchar__Init(collate
*this, const _Locinfo
*locinfo
)
554 FIXME("(%p %p) stub\n", this, locinfo
);
557 /* ?do_compare@?$collate@_W@std@@MBEHPB_W000@Z */
558 /* ?do_compare@?$collate@_W@std@@MEBAHPEB_W000@Z */
559 /* ?do_compare@?$collate@G@std@@MBEHPBG000@Z */
560 /* ?do_compare@?$collate@G@std@@MEBAHPEBG000@Z */
561 DEFINE_THISCALL_WRAPPER(collate_wchar_do_compare
, 20)
562 int __thiscall
collate_wchar_do_compare(const collate
*this, const wchar_t *first1
,
563 const wchar_t *last1
, const wchar_t *first2
, const wchar_t *last2
)
565 FIXME("(%p %p %p %p %p) stub\n", this, first1
, last1
, first2
, last2
);
569 /* ?compare@?$collate@_W@std@@QBEHPB_W000@Z */
570 /* ?compare@?$collate@_W@std@@QEBAHPEB_W000@Z */
571 /* ?compare@?$collate@G@std@@QBEHPBG000@Z */
572 /* ?compare@?$collate@G@std@@QEBAHPEBG000@Z */
573 DEFINE_THISCALL_WRAPPER(collate_wchar_compare
, 20)
574 int __thiscall
collate_wchar_compare(const collate
*this, const wchar_t *first1
,
575 const wchar_t *last1
, const wchar_t *first2
, const wchar_t *last2
)
577 FIXME("(%p %p %p %p %p) stub\n", this, first1
, last1
, first2
, last2
);
581 /* ?do_hash@?$collate@_W@std@@MBEJPB_W0@Z */
582 /* ?do_hash@?$collate@_W@std@@MEBAJPEB_W0@Z */
583 /* ?do_hash@?$collate@G@std@@MBEJPBG0@Z */
584 /* ?do_hash@?$collate@G@std@@MEBAJPEBG0@Z */
585 DEFINE_THISCALL_WRAPPER(collate_wchar_do_hash
, 12)
586 LONG __thiscall
collate_wchar_do_hash(const collate
*this,
587 const wchar_t *first
, const wchar_t *last
)
589 FIXME("(%p %p %p) stub\n", this, first
, last
);
593 /* ?hash@?$collate@_W@std@@QBEJPB_W0@Z */
594 /* ?hash@?$collate@_W@std@@QEBAJPEB_W0@Z */
595 /* ?hash@?$collate@G@std@@QBEJPBG0@Z */
596 /* ?hash@?$collate@G@std@@QEBAJPEBG0@Z */
597 DEFINE_THISCALL_WRAPPER(collate_wchar_hash
, 12)
598 LONG __thiscall
collate_wchar_hash(const collate
*this,
599 const wchar_t *first
, const wchar_t *last
)
601 FIXME("(%p %p %p) stub\n", this, first
, last
);
605 /* ?do_transform@?$collate@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
606 /* ?do_transform@?$collate@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
607 /* ?do_transform@?$collate@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
608 /* ?do_transform@?$collate@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
609 DEFINE_THISCALL_WRAPPER_RETPTR(collate_wchar_do_transform
, 12)
610 basic_string_wchar __thiscall
collate_wchar_do_transform(const collate
*this,
611 const wchar_t *first
, const wchar_t *last
)
613 basic_string_wchar ret
= {0}; /* FIXME */
614 FIXME("(%p %p %p) stub\n", this, first
, last
);
618 /* ?transform@?$collate@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
619 /* ?transform@?$collate@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
620 /* ?transform@?$collate@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
621 /* ?transform@?$collate@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
622 DEFINE_THISCALL_WRAPPER_RETPTR(collate_wchar_transform
, 12)
623 basic_string_wchar __thiscall
collate_wchar_transform(const collate
*this,
624 const wchar_t *first
, const wchar_t *last
)
626 basic_string_wchar ret
= {0}; /* FIXME */
627 FIXME("(%p %p %p) stub\n", this, first
, last
);
631 /* ??0_Locimp@locale@std@@AAE@_N@Z */
632 /* ??0_Locimp@locale@std@@AEAA@_N@Z */
633 DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor_transparent
, 8)
634 locale__Locimp
* __thiscall
locale__Locimp_ctor_transparent(locale__Locimp
*this, MSVCP_bool transparent
)
636 TRACE("(%p %d)\n", this, transparent
);
638 memset(this, 0, sizeof(locale__Locimp
));
639 locale_facet_ctor_refs(&this->facet
, 1);
640 this->transparent
= transparent
;
641 MSVCP_basic_string_char_ctor_cstr(&this->name
, "*");
645 /* ??_F_Locimp@locale@std@@QAEXXZ */
646 /* ??_F_Locimp@locale@std@@QEAAXXZ */
647 DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor
, 4)
648 locale__Locimp
* __thiscall
locale__Locimp_ctor(locale__Locimp
*this)
650 return locale__Locimp_ctor_transparent(this, FALSE
);
653 /* ??0_Locimp@locale@std@@AAE@ABV012@@Z */
654 /* ??0_Locimp@locale@std@@AEAA@AEBV012@@Z */
655 DEFINE_THISCALL_WRAPPER(locale__Locimp_copy_ctor
, 8)
656 locale__Locimp
* __thiscall
locale__Locimp_copy_ctor(locale__Locimp
*this, const locale__Locimp
*copy
)
661 TRACE("(%p %p)\n", this, copy
);
663 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
664 memcpy(this, copy
, sizeof(locale__Locimp
));
665 locale_facet_ctor_refs(&this->facet
, 1);
667 this->facetvec
= MSVCRT_operator_new(copy
->facet_cnt
*sizeof(locale_facet
*));
668 if(!this->facetvec
) {
670 ERR("Out of memory\n");
671 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
674 for(i
=0; i
<this->facet_cnt
; i
++)
675 if(this->facetvec
[i
])
676 locale_facet__Incref(this->facetvec
[i
]);
678 MSVCP_basic_string_char_copy_ctor(&this->name
, ©
->name
);
683 /* ?_Locimp_ctor@_Locimp@locale@std@@CAXPAV123@ABV123@@Z */
684 /* ?_Locimp_ctor@_Locimp@locale@std@@CAXPEAV123@AEBV123@@Z */
685 locale__Locimp
* __cdecl
locale__Locimp__Locimp_ctor(locale__Locimp
*this, const locale__Locimp
*copy
)
687 return locale__Locimp_copy_ctor(this, copy
);
690 /* ??1_Locimp@locale@std@@MAE@XZ */
691 /* ??1_Locimp@locale@std@@MEAA@XZ */
692 DEFINE_THISCALL_WRAPPER(locale__Locimp_dtor
, 4)
693 void __thiscall
locale__Locimp_dtor(locale__Locimp
*this)
695 TRACE("(%p)\n", this);
697 if(locale_facet__Decref(&this->facet
)) {
699 for(i
=0; i
<this->facet_cnt
; i
++)
700 if(this->facetvec
[i
] && locale_facet__Decref(this->facetvec
[i
]))
701 call_locale_facet_vector_dtor(this->facetvec
[i
], 0);
703 MSVCRT_operator_delete(this->facetvec
);
704 MSVCP_basic_string_char_dtor(&this->name
);
708 /* ?_Locimp_dtor@_Locimp@locale@std@@CAXPAV123@@Z */
709 /* ?_Locimp_dtor@_Locimp@locale@std@@CAXPEAV123@@Z */
710 void __cdecl
locale__Locimp__Locimp_dtor(locale__Locimp
*this)
712 locale__Locimp_dtor(this);
715 DEFINE_THISCALL_WRAPPER(MSVCP_locale__Locimp_vector_dtor
, 8)
716 locale__Locimp
* __thiscall
MSVCP_locale__Locimp_vector_dtor(locale__Locimp
*this, unsigned int flags
)
718 TRACE("(%p %x)\n", this, flags
);
720 /* we have an array, with the number of elements stored before the first object */
721 int i
, *ptr
= (int *)this-1;
723 for(i
=*ptr
-1; i
>=0; i
--)
724 locale__Locimp_dtor(this+i
);
725 MSVCRT_operator_delete(ptr
);
727 locale__Locimp_dtor(this);
729 MSVCRT_operator_delete(this);
735 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z */
736 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPEAV123@PEAVfacet@23@_K@Z */
737 void __cdecl
locale__Locimp__Locimp_Addfac(locale__Locimp
*locimp
, locale_facet
*facet
, MSVCP_size_t id
)
741 TRACE("(%p %p %lu)\n", locimp
, facet
, id
);
743 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
744 if(id
>= locimp
->facet_cnt
) {
745 MSVCP_size_t new_size
= id
+1;
746 locale_facet
**new_facetvec
;
748 if(new_size
< locale_id__Id_cnt
+1)
749 new_size
= locale_id__Id_cnt
+1;
751 new_facetvec
= MSVCRT_operator_new(sizeof(locale_facet
*)*new_size
);
754 ERR("Out of memory\n");
755 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
759 memset(new_facetvec
, 0, sizeof(locale_facet
*)*new_size
);
760 memcpy(new_facetvec
, locimp
->facetvec
, sizeof(locale_facet
*)*locimp
->facet_cnt
);
761 MSVCRT_operator_delete(locimp
->facetvec
);
762 locimp
->facetvec
= new_facetvec
;
763 locimp
->facet_cnt
= new_size
;
766 if(locimp
->facetvec
[id
] && locale_facet__Decref(locimp
->facetvec
[id
]))
767 call_locale_facet_vector_dtor(locimp
->facetvec
[id
], 0);
769 locimp
->facetvec
[id
] = facet
;
771 locale_facet__Incref(facet
);
775 /* ?_Addfac@_Locimp@locale@std@@AAEXPAVfacet@23@I@Z */
776 /* ?_Addfac@_Locimp@locale@std@@AEAAXPEAVfacet@23@_K@Z */
777 DEFINE_THISCALL_WRAPPER(locale__Locimp__Addfac
, 12)
778 void __thiscall
locale__Locimp__Addfac(locale__Locimp
*this, locale_facet
*facet
, MSVCP_size_t id
)
780 locale__Locimp__Locimp_Addfac(this, facet
, id
);
783 /* ?_Clocptr_func@_Locimp@locale@std@@CAAAPAV123@XZ */
784 /* ?_Clocptr_func@_Locimp@locale@std@@CAAEAPEAV123@XZ */
785 locale__Locimp
** __cdecl
locale__Locimp__Clocptr_func(void)
791 /* ?_Makeloc@_Locimp@locale@std@@CAPAV123@ABV_Locinfo@3@HPAV123@PBV23@@Z */
792 /* ?_Makeloc@_Locimp@locale@std@@CAPEAV123@AEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
793 locale__Locimp
* __cdecl
locale__Locimp__Makeloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
795 FIXME("(%p %d %p %p) stub\n", locinfo
, cat
, locimp
, loc
);
799 /* ?_Makeushloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
800 /* ?_Makeushloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
801 void __cdecl
locale__Locimp__Makeushloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
803 FIXME("(%p %d %p %p) stub\n", locinfo
, cat
, locimp
, loc
);
806 /* ?_Makewloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
807 /* ?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
808 void __cdecl
locale__Locimp__Makewloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
810 FIXME("(%p %d %p %p) stub\n", locinfo
, cat
, locimp
, loc
);
813 /* ?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
814 /* ?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
815 void __cdecl
locale__Locimp__Makexloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
817 FIXME("(%p %d %p %p) stub\n", locinfo
, cat
, locimp
, loc
);
820 /* ??_7_Locimp@locale@std@@6B@ */
821 const vtable_ptr MSVCP_locale__Locimp_vtable
[] = {
822 (vtable_ptr
)THISCALL_NAME(MSVCP_locale__Locimp_vector_dtor
)
825 /* ??0locale@std@@AAE@PAV_Locimp@01@@Z */
826 /* ??0locale@std@@AEAA@PEAV_Locimp@01@@Z */
827 DEFINE_THISCALL_WRAPPER(locale_ctor_locimp
, 8)
828 locale
* __thiscall
locale_ctor_locimp(locale
*this, locale__Locimp
*locimp
)
830 TRACE("(%p %p)\n", this, locimp
);
831 /* Don't change locimp reference counter */
836 /* ??0locale@std@@QAE@ABV01@0H@Z */
837 /* ??0locale@std@@QEAA@AEBV01@0H@Z */
838 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_locale
, 16)
839 locale
* __thiscall
locale_ctor_locale_locale(locale
*this, const locale
*loc
, const locale
*other
, category cat
)
841 FIXME("(%p %p %p %d) stub\n", this, loc
, other
, cat
);
845 /* ??0locale@std@@QAE@ABV01@@Z */
846 /* ??0locale@std@@QEAA@AEBV01@@Z */
847 DEFINE_THISCALL_WRAPPER(locale_copy_ctor
, 8)
848 locale
* __thiscall
locale_copy_ctor(locale
*this, const locale
*copy
)
850 TRACE("(%p %p)\n", this, copy
);
851 this->ptr
= copy
->ptr
;
852 locale_facet__Incref(&this->ptr
->facet
);
856 /* ??0locale@std@@QAE@ABV01@PBDH@Z */
857 /* ??0locale@std@@QEAA@AEBV01@PEBDH@Z */
858 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_cstr
, 16)
859 locale
* __thiscall
locale_ctor_locale_cstr(locale
*this, const locale
*loc
, const char *locname
, category cat
)
861 FIXME("(%p %p %s %d) stub\n", this, loc
, locname
, cat
);
865 /* ??0locale@std@@QAE@PBDH@Z */
866 /* ??0locale@std@@QEAA@PEBDH@Z */
867 DEFINE_THISCALL_WRAPPER(locale_ctor_cstr
, 12)
868 locale
* __thiscall
locale_ctor_cstr(locale
*this, const char *locname
, category cat
)
870 FIXME("(%p %s %d) stub\n", this, locname
, cat
);
874 /* ??0locale@std@@QAE@W4_Uninitialized@1@@Z */
875 /* ??0locale@std@@QEAA@W4_Uninitialized@1@@Z */
876 DEFINE_THISCALL_WRAPPER(locale_ctor_uninitialized
, 8)
877 locale
* __thiscall
locale_ctor_uninitialized(locale
*this, int uninitialized
)
879 TRACE("(%p)\n", this);
884 /* ??0locale@std@@QAE@XZ */
885 /* ??0locale@std@@QEAA@XZ */
886 DEFINE_THISCALL_WRAPPER(locale_ctor
, 4)
887 locale
* __thiscall
locale_ctor(locale
*this)
889 TRACE("(%p)\n", this);
890 this->ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
892 ERR("Out of memory\n");
893 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
897 locale__Locimp_ctor(this->ptr
);
901 /* ??1locale@std@@QAE@XZ */
902 /* ??1locale@std@@QEAA@XZ */
903 DEFINE_THISCALL_WRAPPER(locale_dtor
, 4)
904 void __thiscall
locale_dtor(locale
*this)
906 TRACE("(%p)\n", this);
908 locale__Locimp_dtor(this->ptr
);
911 DEFINE_THISCALL_WRAPPER(MSVCP_locale_vector_dtor
, 8)
912 locale
* __thiscall
MSVCP_locale_vector_dtor(locale
*this, unsigned int flags
)
914 TRACE("(%p %x)\n", this, flags
);
916 /* we have an array, with the number of elements stored before the first object */
917 int i
, *ptr
= (int *)this-1;
919 for(i
=*ptr
-1; i
>=0; i
--)
921 MSVCRT_operator_delete(ptr
);
925 MSVCRT_operator_delete(this);
931 /* ??4locale@std@@QAEAAV01@ABV01@@Z */
932 /* ??4locale@std@@QEAAAEAV01@AEBV01@@Z */
933 DEFINE_THISCALL_WRAPPER(locale_operator_assign
, 8)
934 locale
* __thiscall
locale_operator_assign(locale
*this, const locale
*loc
)
936 FIXME("(%p %p) stub\n", this, loc
);
940 /* ??8locale@std@@QBE_NABV01@@Z */
941 /* ??8locale@std@@QEBA_NAEBV01@@Z */
942 DEFINE_THISCALL_WRAPPER(locale_operator_equal
, 8)
943 MSVCP_bool __thiscall
locale_operator_equal(const locale
*this, const locale
*loc
)
945 FIXME("(%p %p) stub\n", this, loc
);
949 /* ??9locale@std@@QBE_NABV01@@Z */
950 /* ??9locale@std@@QEBA_NAEBV01@@Z */
951 DEFINE_THISCALL_WRAPPER(locale_operator_not_equal
, 8)
952 MSVCP_bool __thiscall
locale_operator_not_equal(const locale
*this, locale
const *loc
)
954 FIXME("(%p %p) stub\n", this, loc
);
958 /* ?_Addfac@locale@std@@QAEAAV12@PAVfacet@12@II@Z */
959 /* ?_Addfac@locale@std@@QEAAAEAV12@PEAVfacet@12@_K1@Z */
960 DEFINE_THISCALL_WRAPPER(locale__Addfac
, 16)
961 locale
* __thiscall
locale__Addfac(locale
*this, locale_facet
*facet
, MSVCP_size_t id
, MSVCP_size_t catmask
)
963 TRACE("(%p %p %lu %lu)\n", this, facet
, id
, catmask
);
965 if(this->ptr
->facet
.refs
> 1) {
966 locale__Locimp
*new_ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
968 ERR("Out of memory\n");
969 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
972 locale__Locimp_copy_ctor(new_ptr
, this->ptr
);
973 locale_facet__Decref(&this->ptr
->facet
);
977 locale__Locimp__Addfac(this->ptr
, facet
, id
);
980 MSVCP_basic_string_char_dtor(&this->ptr
->name
);
981 MSVCP_basic_string_char_ctor_cstr(&this->ptr
->name
, "*");
986 /* ?_Getfacet@locale@std@@QBEPBVfacet@12@I@Z */
987 /* ?_Getfacet@locale@std@@QEBAPEBVfacet@12@_K@Z */
988 DEFINE_THISCALL_WRAPPER(locale__Getfacet
, 8)
989 const locale_facet
* __thiscall
locale__Getfacet(const locale
*this, MSVCP_size_t id
)
991 FIXME("(%p %lu) stub\n", this, id
);
995 /* ?_Init@locale@std@@CAPAV_Locimp@12@XZ */
996 /* ?_Init@locale@std@@CAPEAV_Locimp@12@XZ */
997 locale__Locimp
* __cdecl
locale__Init(void)
1003 /* ?_Getgloballocale@locale@std@@CAPAV_Locimp@12@XZ */
1004 /* ?_Getgloballocale@locale@std@@CAPEAV_Locimp@12@XZ */
1005 locale__Locimp
* __cdecl
locale__Getgloballocale(void)
1011 /* ?_Setgloballocale@locale@std@@CAXPAX@Z */
1012 /* ?_Setgloballocale@locale@std@@CAXPEAX@Z */
1013 void __cdecl
locale__Setgloballocale(void *locimp
)
1015 FIXME("(%p) stub\n", locimp
);
1018 /* ?classic@locale@std@@SAABV12@XZ */
1019 /* ?classic@locale@std@@SAAEBV12@XZ */
1020 const locale
* __cdecl
locale_classic(void)
1026 /* ?name@locale@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
1027 /* ?name@locale@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
1028 DEFINE_THISCALL_WRAPPER_RETPTR(locale_name
, 4)
1029 basic_string_char __thiscall
locale_name(const locale
*this)
1031 TRACE( "(%p)\n", this);
1032 return this->ptr
->name
;
1035 /* ??0_Timevec@std@@QAE@ABV01@@Z */
1036 /* ??0_Timevec@std@@QEAA@AEBV01@@Z */
1037 /* This copy constructor modifies copied object */
1038 DEFINE_THISCALL_WRAPPER(_Timevec_copy_ctor
, 8)
1039 _Timevec
* __thiscall
_Timevec_copy_ctor(_Timevec
*this, _Timevec
*copy
)
1041 TRACE("(%p %p)\n", this, copy
);
1042 this->timeptr
= copy
->timeptr
;
1043 copy
->timeptr
= NULL
;
1047 /* ??0_Timevec@std@@QAE@PAX@Z */
1048 /* ??0_Timevec@std@@QEAA@PEAX@Z */
1049 DEFINE_THISCALL_WRAPPER(_Timevec_ctor_timeptr
, 8)
1050 _Timevec
* __thiscall
_Timevec_ctor_timeptr(_Timevec
*this, void *timeptr
)
1052 TRACE("(%p %p)\n", this, timeptr
);
1053 this->timeptr
= timeptr
;
1057 /* ??_F_Timevec@std@@QAEXXZ */
1058 /* ??_F_Timevec@std@@QEAAXXZ */
1059 DEFINE_THISCALL_WRAPPER(_Timevec_ctor
, 4)
1060 _Timevec
* __thiscall
_Timevec_ctor(_Timevec
*this)
1062 TRACE("(%p)\n", this);
1063 this->timeptr
= NULL
;
1067 /* ??1_Timevec@std@@QAE@XZ */
1068 /* ??1_Timevec@std@@QEAA@XZ */
1069 DEFINE_THISCALL_WRAPPER(_Timevec_dtor
, 4)
1070 void __thiscall
_Timevec_dtor(_Timevec
*this)
1072 TRACE("(%p)\n", this);
1073 free(this->timeptr
);
1076 /* ??4_Timevec@std@@QAEAAV01@ABV01@@Z */
1077 /* ??4_Timevec@std@@QEAAAEAV01@AEBV01@@Z */
1078 DEFINE_THISCALL_WRAPPER(_Timevec_op_assign
, 8)
1079 _Timevec
* __thiscall
_Timevec_op_assign(_Timevec
*this, _Timevec
*right
)
1081 TRACE("(%p %p)\n", this, right
);
1082 this->timeptr
= right
->timeptr
;
1083 right
->timeptr
= NULL
;
1087 /* ?_Getptr@_Timevec@std@@QBEPAXXZ */
1088 /* ?_Getptr@_Timevec@std@@QEBAPEAXXZ */
1089 DEFINE_THISCALL_WRAPPER(_Timevec__Getptr
, 4)
1090 void* __thiscall
_Timevec__Getptr(_Timevec
*this)
1092 TRACE("(%p)\n", this);
1093 return this->timeptr
;
1096 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@HPBD@Z */
1097 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@HPEBD@Z */
1098 _Locinfo
* __cdecl
_Locinfo__Locinfo_ctor_cat_cstr(_Locinfo
*locinfo
, int category
, const char *locstr
)
1100 const char *locale
= NULL
;
1102 /* This function is probably modifying more global objects */
1103 FIXME("(%p %d %s) semi-stub\n", locinfo
, category
, locstr
);
1106 throw_exception(EXCEPTION_RUNTIME_ERROR
, "bad locale name");
1108 _Lockit_ctor_locktype(&locinfo
->lock
, _LOCK_LOCALE
);
1109 MSVCP_basic_string_char_ctor_cstr(&locinfo
->days
, "");
1110 MSVCP_basic_string_char_ctor_cstr(&locinfo
->months
, "");
1111 MSVCP_basic_string_char_ctor_cstr(&locinfo
->oldlocname
, setlocale(LC_ALL
, NULL
));
1114 locale
= setlocale(LC_ALL
, locstr
);
1116 locale
= setlocale(LC_ALL
, NULL
);
1119 MSVCP_basic_string_char_ctor_cstr(&locinfo
->newlocname
, locale
);
1121 MSVCP_basic_string_char_ctor_cstr(&locinfo
->newlocname
, "*");
1122 _Lockit_dtor(&locinfo
->lock
);
1127 /* ??0_Locinfo@std@@QAE@HPBD@Z */
1128 /* ??0_Locinfo@std@@QEAA@HPEBD@Z */
1129 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cat_cstr
, 12)
1130 _Locinfo
* __thiscall
_Locinfo_ctor_cat_cstr(_Locinfo
*this, int category
, const char *locstr
)
1132 return _Locinfo__Locinfo_ctor_cat_cstr(this, category
, locstr
);
1135 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
1136 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
1137 _Locinfo
* __cdecl
_Locinfo__Locinfo_ctor_bstr(_Locinfo
*locinfo
, const basic_string_char
*locstr
)
1139 return _Locinfo__Locinfo_ctor_cat_cstr(locinfo
, 1/*FIXME*/, MSVCP_basic_string_char_c_str(locstr
));
1142 /* ??0_Locinfo@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z */
1143 /* ??0_Locinfo@std@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z */
1144 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_bstr
, 8)
1145 _Locinfo
* __thiscall
_Locinfo_ctor_bstr(_Locinfo
*this, const basic_string_char
*locstr
)
1147 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, MSVCP_basic_string_char_c_str(locstr
));
1150 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@PBD@Z */
1151 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@PEBD@Z */
1152 _Locinfo
* __cdecl
_Locinfo__Locinfo_ctor_cstr(_Locinfo
*locinfo
, const char *locstr
)
1154 return _Locinfo__Locinfo_ctor_cat_cstr(locinfo
, 1/*FIXME*/, locstr
);
1157 /* ??0_Locinfo@std@@QAE@PBD@Z */
1158 /* ??0_Locinfo@std@@QEAA@PEBD@Z */
1159 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cstr
, 8)
1160 _Locinfo
* __thiscall
_Locinfo_ctor_cstr(_Locinfo
*this, const char *locstr
)
1162 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, locstr
);
1165 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPAV12@@Z */
1166 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPEAV12@@Z */
1167 void __cdecl
_Locinfo__Locinfo_dtor(_Locinfo
*locinfo
)
1169 TRACE("(%p)\n", locinfo
);
1171 setlocale(LC_ALL
, MSVCP_basic_string_char_c_str(&locinfo
->oldlocname
));
1172 MSVCP_basic_string_char_dtor(&locinfo
->days
);
1173 MSVCP_basic_string_char_dtor(&locinfo
->months
);
1174 MSVCP_basic_string_char_dtor(&locinfo
->oldlocname
);
1175 MSVCP_basic_string_char_dtor(&locinfo
->newlocname
);
1178 /* ??_F_Locinfo@std@@QAEXXZ */
1179 /* ??_F_Locinfo@std@@QEAAXXZ */
1180 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor
, 4)
1181 _Locinfo
* __thiscall
_Locinfo_ctor(_Locinfo
*this)
1183 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, "C");
1186 /* ??1_Locinfo@std@@QAE@XZ */
1187 /* ??1_Locinfo@std@@QEAA@XZ */
1188 DEFINE_THISCALL_WRAPPER(_Locinfo_dtor
, 4)
1189 void __thiscall
_Locinfo_dtor(_Locinfo
*this)
1191 _Locinfo__Locinfo_dtor(this);
1194 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAAV12@PAV12@HPBD@Z */
1195 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAEAV12@PEAV12@HPEBD@Z */
1196 _Locinfo
* __cdecl
_Locinfo__Locinfo_Addcats(_Locinfo
*locinfo
, int category
, const char *locstr
)
1198 const char *locale
= NULL
;
1200 /* This function is probably modifying more global objects */
1201 FIXME("(%p %d %s) semi-stub\n", locinfo
, category
, locstr
);
1203 throw_exception(EXCEPTION_RUNTIME_ERROR
, "bad locale name");
1205 _Lockit_ctor_locktype(&locinfo
->lock
, _LOCK_LOCALE
);
1206 MSVCP_basic_string_char_dtor(&locinfo
->newlocname
);
1209 locale
= setlocale(LC_ALL
, locstr
);
1211 locale
= setlocale(LC_ALL
, NULL
);
1214 MSVCP_basic_string_char_ctor_cstr(&locinfo
->newlocname
, locale
);
1216 MSVCP_basic_string_char_ctor_cstr(&locinfo
->newlocname
, "*");
1217 _Lockit_dtor(&locinfo
->lock
);
1222 /* ?_Addcats@_Locinfo@std@@QAEAAV12@HPBD@Z */
1223 /* ?_Addcats@_Locinfo@std@@QEAAAEAV12@HPEBD@Z */
1224 DEFINE_THISCALL_WRAPPER(_Locinfo__Addcats
, 12)
1225 _Locinfo
* __thiscall
_Locinfo__Addcats(_Locinfo
*this, int category
, const char *locstr
)
1227 return _Locinfo__Locinfo_Addcats(this, category
, locstr
);
1231 _Collvec __cdecl
_Getcoll(void)
1234 _locale_t locale
= _get_current_locale();
1238 ret
.page
= locale
->locinfo
->lc_collate_cp
;
1239 ret
.handle
= locale
->locinfo
->lc_handle
[LC_COLLATE
];
1240 _free_locale(locale
);
1244 /* ?_Getcoll@_Locinfo@std@@QBE?AU_Collvec@@XZ */
1245 /* ?_Getcoll@_Locinfo@std@@QEBA?AU_Collvec@@XZ */
1246 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcoll
, 4)
1247 _Collvec __thiscall
_Locinfo__Getcoll(const _Locinfo
*this)
1253 _Ctypevec __cdecl
_Getctype(void)
1256 _locale_t locale
= _get_current_locale();
1260 ret
.page
= locale
->locinfo
->lc_codepage
;
1261 ret
.handle
= locale
->locinfo
->lc_handle
[LC_COLLATE
];
1263 ret
.table
= malloc(sizeof(short[256]));
1265 _free_locale(locale
);
1266 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
1268 memcpy(ret
.table
, locale
->locinfo
->pctype
, sizeof(short[256]));
1269 _free_locale(locale
);
1273 /* ?_Getctype@_Locinfo@std@@QBE?AU_Ctypevec@@XZ */
1274 /* ?_Getctype@_Locinfo@std@@QEBA?AU_Ctypevec@@XZ */
1275 DEFINE_THISCALL_WRAPPER_RETPTR(_Locinfo__Getctype
, 4)
1276 _Ctypevec __thiscall
_Locinfo__Getctype(const _Locinfo
*this)
1282 _Cvtvec __cdecl
_Getcvt(void)
1285 _locale_t locale
= _get_current_locale();
1289 ret
.page
= locale
->locinfo
->lc_codepage
;
1290 ret
.handle
= locale
->locinfo
->lc_handle
[LC_CTYPE
];
1291 _free_locale(locale
);
1295 /* ?_Getcvt@_Locinfo@std@@QBE?AU_Cvtvec@@XZ */
1296 /* ?_Getcvt@_Locinfo@std@@QEBA?AU_Cvtvec@@XZ */
1297 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcvt
, 4)
1298 _Cvtvec __thiscall
_Locinfo__Getcvt(const _Locinfo
*this)
1303 /* ?_Getdateorder@_Locinfo@std@@QBEHXZ */
1304 /* ?_Getdateorder@_Locinfo@std@@QEBAHXZ */
1305 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdateorder
, 4)
1306 int __thiscall
_Locinfo__Getdateorder(const _Locinfo
*this)
1308 FIXME("(%p) stub\n", this);
1312 /* ?_Getdays@_Locinfo@std@@QBEPBDXZ */
1313 /* ?_Getdays@_Locinfo@std@@QEBAPEBDXZ */
1314 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdays
, 4)
1315 const char* __thiscall
_Locinfo__Getdays(_Locinfo
*this)
1317 char *days
= _Getdays();
1319 TRACE("(%p)\n", this);
1322 MSVCP_basic_string_char_dtor(&this->days
);
1323 MSVCP_basic_string_char_ctor_cstr(&this->days
, days
);
1327 return this->days
.size
? MSVCP_basic_string_char_c_str(&this->days
) :
1328 ":Sun:Sunday:Mon:Monday:Tue:Tuesday:Wed:Wednesday:Thu:Thursday:Fri:Friday:Sat:Saturday";
1331 /* ?_Getmonths@_Locinfo@std@@QBEPBDXZ */
1332 /* ?_Getmonths@_Locinfo@std@@QEBAPEBDXZ */
1333 DEFINE_THISCALL_WRAPPER(_Locinfo__Getmonths
, 4)
1334 const char* __thiscall
_Locinfo__Getmonths(_Locinfo
*this)
1336 char *months
= _Getmonths();
1338 TRACE("(%p)\n", this);
1341 MSVCP_basic_string_char_dtor(&this->months
);
1342 MSVCP_basic_string_char_ctor_cstr(&this->months
, months
);
1346 return this->months
.size
? MSVCP_basic_string_char_c_str(&this->months
) :
1347 ":Jan:January:Feb:February:Mar:March:Apr:April:May:May:Jun:June:Jul:July"
1348 ":Aug:August:Sep:September:Oct:October:Nov:November:Dec:December";
1351 /* ?_Getfalse@_Locinfo@std@@QBEPBDXZ */
1352 /* ?_Getfalse@_Locinfo@std@@QEBAPEBDXZ */
1353 DEFINE_THISCALL_WRAPPER(_Locinfo__Getfalse
, 4)
1354 const char* __thiscall
_Locinfo__Getfalse(const _Locinfo
*this)
1356 TRACE("(%p)\n", this);
1360 /* ?_Gettrue@_Locinfo@std@@QBEPBDXZ */
1361 /* ?_Gettrue@_Locinfo@std@@QEBAPEBDXZ */
1362 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettrue
, 4)
1363 const char* __thiscall
_Locinfo__Gettrue(const _Locinfo
*this)
1365 TRACE("(%p)\n", this);
1369 /* ?_Getlconv@_Locinfo@std@@QBEPBUlconv@@XZ */
1370 /* ?_Getlconv@_Locinfo@std@@QEBAPEBUlconv@@XZ */
1371 DEFINE_THISCALL_WRAPPER(_Locinfo__Getlconv
, 4)
1372 const struct lconv
* __thiscall
_Locinfo__Getlconv(const _Locinfo
*this)
1374 TRACE("(%p)\n", this);
1375 return localeconv();
1378 /* ?_Getname@_Locinfo@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
1379 /* ?_Getname@_Locinfo@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
1380 DEFINE_THISCALL_WRAPPER_RETPTR(_Locinfo__Getname
, 4)
1381 basic_string_char __thiscall
_Locinfo__Getname(const _Locinfo
*this)
1383 basic_string_char ret
;
1385 TRACE("(%p)\n", this);
1387 MSVCP_basic_string_char_copy_ctor(&ret
, &this->newlocname
);
1391 /* ?_Gettnames@_Locinfo@std@@QBE?AV_Timevec@2@XZ */
1392 /* ?_Gettnames@_Locinfo@std@@QEBA?AV_Timevec@2@XZ */
1393 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettnames
, 4)
1394 _Timevec __thiscall
_Locinfo__Gettnames(const _Locinfo
*this)
1398 TRACE("(%p)\n", this);
1400 _Timevec_ctor_timeptr(&ret
, _Gettnames());
1404 static const type_info locale_facet_type_info
= {
1405 MSVCP_locale_facet_vtable
,
1407 ".?AVfacet@locale@std@@"
1410 static const rtti_base_descriptor locale_facet_rtti_base_descriptor
= {
1411 &locale_facet_type_info
,
1417 static const type_info collate_char_type_info
= {
1418 &MSVCP_collate_char_vtable
,
1420 ".?AV?$collate@D@std@@"
1423 static const rtti_base_descriptor collate_char_rtti_base_descriptor
= {
1424 &collate_char_type_info
,
1430 static const rtti_base_array collate_char_rtti_base_array
= {
1432 &collate_char_rtti_base_descriptor
,
1433 &locale_facet_rtti_base_descriptor
,
1439 static const rtti_object_hierarchy collate_char_hierarchy
= {
1443 &collate_char_rtti_base_array
1446 const rtti_object_locator collate_char_rtti
= {
1450 &collate_char_type_info
,
1451 &collate_char_hierarchy
1454 static const type_info collate_wchar_type_info
= {
1455 &MSVCP_collate_wchar_vtable
,
1457 ".?AV?$collate@_W@std@@"
1460 static const rtti_base_descriptor collate_wchar_rtti_base_descriptor
= {
1461 &collate_wchar_type_info
,
1467 static const rtti_base_array collate_wchar_rtti_base_array
= {
1469 &collate_wchar_rtti_base_descriptor
,
1470 &locale_facet_rtti_base_descriptor
,
1476 static const rtti_object_hierarchy collate_wchar_hierarchy
= {
1480 &collate_wchar_rtti_base_array
1483 const rtti_object_locator collate_wchar_rtti
= {
1487 &collate_wchar_type_info
,
1488 &collate_wchar_hierarchy
1491 static const type_info collate_short_type_info
= {
1492 &MSVCP_collate_short_vtable
,
1494 ".?AV?$collate@G@std@@"
1497 static const rtti_base_descriptor collate_short_rtti_base_descriptor
= {
1498 &collate_short_type_info
,
1504 static const rtti_base_array collate_short_rtti_base_array
= {
1506 &collate_short_rtti_base_descriptor
,
1507 &locale_facet_rtti_base_descriptor
,
1513 static const rtti_object_hierarchy collate_short_hierarchy
= {
1517 &collate_short_rtti_base_array
1520 const rtti_object_locator collate_short_rtti
= {
1524 &collate_short_type_info
,
1525 &collate_short_hierarchy
1529 void __asm_dummy_vtables(void) {
1531 __ASM_VTABLE(collate_char
,
1532 VTABLE_ADD_FUNC(collate_char_do_compare
)
1533 VTABLE_ADD_FUNC(collate_char_do_transform
)
1534 VTABLE_ADD_FUNC(collate_char_do_hash
));
1535 __ASM_VTABLE(collate_wchar
,
1536 VTABLE_ADD_FUNC(collate_wchar_do_compare
)
1537 VTABLE_ADD_FUNC(collate_wchar_do_transform
)
1538 VTABLE_ADD_FUNC(collate_wchar_do_hash
));
1539 __ASM_VTABLE(collate_short
,
1540 VTABLE_ADD_FUNC(collate_wchar_do_compare
)
1541 VTABLE_ADD_FUNC(collate_wchar_do_transform
)
1542 VTABLE_ADD_FUNC(collate_wchar_do_hash
));