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
32 #include "wine/list.h"
37 #include "wine/unicode.h"
38 #include "wine/debug.h"
39 WINE_DEFAULT_DEBUG_CHANNEL(msvcp
);
41 char* __cdecl
_Getdays(void);
42 char* __cdecl
_Getmonths(void);
43 void* __cdecl
_Gettnames(void);
44 unsigned int __cdecl
___lc_codepage_func(void);
45 LCID
* __cdecl
___lc_handle_func(void);
46 const locale_facet
* __thiscall
locale__Getfacet(const locale
*, MSVCP_size_t
);
47 const locale
* __cdecl
locale_classic(void);
48 MSVCP_size_t __cdecl
_Strftime(char*, MSVCP_size_t
, const char*,
49 const struct tm
*, struct __lc_time_data
*);
57 typedef struct _locale__Locimp
{
59 locale_facet
**facetvec
;
60 MSVCP_size_t facet_cnt
;
62 MSVCP_bool transparent
;
63 basic_string_char name
;
72 basic_string_char days
;
73 basic_string_char months
;
74 basic_string_char oldlocname
;
75 basic_string_char newlocname
;
93 const char *false_name
;
94 const char *true_name
;
102 const wchar_t *false_name
;
103 const wchar_t *true_name
;
112 /* ?_Id_cnt@id@locale@std@@0HA */
113 int locale_id__Id_cnt
= 0;
115 static locale__Locimp
*global_locale
;
116 static locale classic_locale
;
118 /* ?_Clocptr@_Locimp@locale@std@@0PAV123@A */
119 /* ?_Clocptr@_Locimp@locale@std@@0PEAV123@EA */
120 locale__Locimp
*locale__Locimp__Clocptr
= NULL
;
122 static char istreambuf_iterator_char_val(istreambuf_iterator_char
*this)
124 if(this->strbuf
&& !this->got
) {
125 int c
= basic_streambuf_char_sgetc(this->strbuf
);
136 static wchar_t istreambuf_iterator_wchar_val(istreambuf_iterator_wchar
*this)
138 if(this->strbuf
&& !this->got
) {
139 unsigned short c
= basic_streambuf_wchar_sgetc(this->strbuf
);
150 static void istreambuf_iterator_char_inc(istreambuf_iterator_char
*this)
152 if(!this->strbuf
|| basic_streambuf_char_sbumpc(this->strbuf
)==EOF
) {
157 istreambuf_iterator_char_val(this);
161 static void istreambuf_iterator_wchar_inc(istreambuf_iterator_wchar
*this)
163 if(!this->strbuf
|| basic_streambuf_wchar_sbumpc(this->strbuf
)==WEOF
) {
168 istreambuf_iterator_wchar_val(this);
172 static void ostreambuf_iterator_char_put(ostreambuf_iterator_char
*this, char ch
)
174 if(this->failed
|| basic_streambuf_char_sputc(this->strbuf
, ch
)==EOF
)
178 static void ostreambuf_iterator_wchar_put(ostreambuf_iterator_wchar
*this, wchar_t ch
)
180 if(this->failed
|| basic_streambuf_wchar_sputc(this->strbuf
, ch
)==WEOF
)
184 /* ??1facet@locale@std@@UAE@XZ */
185 /* ??1facet@locale@std@@UEAA@XZ */
186 DEFINE_THISCALL_WRAPPER(locale_facet_dtor
, 4)
187 void __thiscall
locale_facet_dtor(locale_facet
*this)
189 TRACE("(%p)\n", this);
192 DEFINE_THISCALL_WRAPPER(locale_facet_vector_dtor
, 8)
193 #define call_locale_facet_vector_dtor(this, flags) CALL_VTBL_FUNC(this, 0, \
194 locale_facet*, (locale_facet*, unsigned int), (this, flags))
195 locale_facet
* __thiscall
locale_facet_vector_dtor(locale_facet
*this, unsigned int flags
)
197 TRACE("(%p %x)\n", this, flags
);
199 /* we have an array, with the number of elements stored before the first object */
200 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
202 for(i
=*ptr
-1; i
>=0; i
--)
203 locale_facet_dtor(this+i
);
204 MSVCRT_operator_delete(ptr
);
206 locale_facet_dtor(this);
208 MSVCRT_operator_delete(this);
219 static struct list lazy_facets
= LIST_INIT(lazy_facets
);
221 /* Not exported from msvcp90 */
222 /* ?facet_Register@facet@locale@std@@CAXPAV123@@Z */
223 /* ?facet_Register@facet@locale@std@@CAXPEAV123@@Z */
224 static void locale_facet_register(locale_facet
*add
)
226 facets_elem
*head
= MSVCRT_operator_new(sizeof(*head
));
228 ERR("Out of memory\n");
229 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
233 list_add_head(&lazy_facets
, &head
->entry
);
236 /* Not exported from msvcp90 */
237 /* ?_Register@facet@locale@std@@QAEXXZ */
238 /* ?_Register@facet@locale@std@@QEAAXXZ */
239 DEFINE_THISCALL_WRAPPER(locale_facet__Register
, 4)
240 void __thiscall
locale_facet__Register(locale_facet
*this)
242 TRACE("(%p)\n", this);
243 locale_facet_register(this);
246 /* Not exported from msvcp90 */
247 /* ??_7facet@locale@std@@6B@ */
248 extern const vtable_ptr MSVCP_locale_facet_vtable
;
250 /* ??0id@locale@std@@QAE@I@Z */
251 /* ??0id@locale@std@@QEAA@_K@Z */
252 DEFINE_THISCALL_WRAPPER(locale_id_ctor_id
, 8)
253 locale_id
* __thiscall
locale_id_ctor_id(locale_id
*this, MSVCP_size_t id
)
255 TRACE("(%p %lu)\n", this, id
);
261 /* ??_Fid@locale@std@@QAEXXZ */
262 /* ??_Fid@locale@std@@QEAAXXZ */
263 DEFINE_THISCALL_WRAPPER(locale_id_ctor
, 4)
264 locale_id
* __thiscall
locale_id_ctor(locale_id
*this)
266 TRACE("(%p)\n", this);
272 /* ??Bid@locale@std@@QAEIXZ */
273 /* ??Bid@locale@std@@QEAA_KXZ */
274 DEFINE_THISCALL_WRAPPER(locale_id_operator_size_t
, 4)
275 MSVCP_size_t __thiscall
locale_id_operator_size_t(locale_id
*this)
279 TRACE("(%p)\n", this);
282 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
283 this->id
= ++locale_id__Id_cnt
;
290 /* ??_Ffacet@locale@std@@QAEXXZ */
291 /* ??_Ffacet@locale@std@@QEAAXXZ */
292 DEFINE_THISCALL_WRAPPER(locale_facet_ctor
, 4)
293 locale_facet
* __thiscall
locale_facet_ctor(locale_facet
*this)
295 TRACE("(%p)\n", this);
296 this->vtable
= &MSVCP_locale_facet_vtable
;
301 /* ??0facet@locale@std@@IAE@I@Z */
302 /* ??0facet@locale@std@@IEAA@_K@Z */
303 DEFINE_THISCALL_WRAPPER(locale_facet_ctor_refs
, 8)
304 locale_facet
* __thiscall
locale_facet_ctor_refs(locale_facet
*this, MSVCP_size_t refs
)
306 TRACE("(%p %lu)\n", this, refs
);
307 this->vtable
= &MSVCP_locale_facet_vtable
;
312 /* ?_Incref@facet@locale@std@@QAEXXZ */
313 /* ?_Incref@facet@locale@std@@QEAAXXZ */
314 DEFINE_THISCALL_WRAPPER(locale_facet__Incref
, 4)
315 void __thiscall
locale_facet__Incref(locale_facet
*this)
319 TRACE("(%p)\n", this);
321 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
326 /* ?_Decref@facet@locale@std@@QAEPAV123@XZ */
327 /* ?_Decref@facet@locale@std@@QEAAPEAV123@XZ */
328 DEFINE_THISCALL_WRAPPER(locale_facet__Decref
, 4)
329 locale_facet
* __thiscall
locale_facet__Decref(locale_facet
*this)
334 TRACE("(%p)\n", this);
336 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
340 ret
= this->refs
? NULL
: this;
346 /* ??0_Timevec@std@@QAE@ABV01@@Z */
347 /* ??0_Timevec@std@@QEAA@AEBV01@@Z */
348 /* This copy constructor modifies copied object */
349 DEFINE_THISCALL_WRAPPER(_Timevec_copy_ctor
, 8)
350 _Timevec
* __thiscall
_Timevec_copy_ctor(_Timevec
*this, _Timevec
*copy
)
352 TRACE("(%p %p)\n", this, copy
);
353 this->timeptr
= copy
->timeptr
;
354 copy
->timeptr
= NULL
;
358 /* ??0_Timevec@std@@QAE@PAX@Z */
359 /* ??0_Timevec@std@@QEAA@PEAX@Z */
360 DEFINE_THISCALL_WRAPPER(_Timevec_ctor_timeptr
, 8)
361 _Timevec
* __thiscall
_Timevec_ctor_timeptr(_Timevec
*this, void *timeptr
)
363 TRACE("(%p %p)\n", this, timeptr
);
364 this->timeptr
= timeptr
;
368 /* ??_F_Timevec@std@@QAEXXZ */
369 /* ??_F_Timevec@std@@QEAAXXZ */
370 DEFINE_THISCALL_WRAPPER(_Timevec_ctor
, 4)
371 _Timevec
* __thiscall
_Timevec_ctor(_Timevec
*this)
373 TRACE("(%p)\n", this);
374 this->timeptr
= NULL
;
378 /* ??1_Timevec@std@@QAE@XZ */
379 /* ??1_Timevec@std@@QEAA@XZ */
380 DEFINE_THISCALL_WRAPPER(_Timevec_dtor
, 4)
381 void __thiscall
_Timevec_dtor(_Timevec
*this)
383 TRACE("(%p)\n", this);
387 /* ??4_Timevec@std@@QAEAAV01@ABV01@@Z */
388 /* ??4_Timevec@std@@QEAAAEAV01@AEBV01@@Z */
389 DEFINE_THISCALL_WRAPPER(_Timevec_op_assign
, 8)
390 _Timevec
* __thiscall
_Timevec_op_assign(_Timevec
*this, _Timevec
*right
)
392 TRACE("(%p %p)\n", this, right
);
393 this->timeptr
= right
->timeptr
;
394 right
->timeptr
= NULL
;
398 /* ?_Getptr@_Timevec@std@@QBEPAXXZ */
399 /* ?_Getptr@_Timevec@std@@QEBAPEAXXZ */
400 DEFINE_THISCALL_WRAPPER(_Timevec__Getptr
, 4)
401 void* __thiscall
_Timevec__Getptr(_Timevec
*this)
403 TRACE("(%p)\n", this);
404 return this->timeptr
;
407 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@HPBD@Z */
408 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@HPEBD@Z */
409 static _Locinfo
* _Locinfo__Locinfo_ctor_cat_cstr(_Locinfo
*locinfo
, int category
, const char *locstr
)
411 const char *locale
= NULL
;
413 /* This function is probably modifying more global objects */
414 FIXME("(%p %d %s) semi-stub\n", locinfo
, category
, locstr
);
417 throw_exception(EXCEPTION_RUNTIME_ERROR
, "bad locale name");
419 _Lockit_ctor_locktype(&locinfo
->lock
, _LOCK_LOCALE
);
420 MSVCP_basic_string_char_ctor_cstr(&locinfo
->days
, "");
421 MSVCP_basic_string_char_ctor_cstr(&locinfo
->months
, "");
422 MSVCP_basic_string_char_ctor_cstr(&locinfo
->oldlocname
, setlocale(LC_ALL
, NULL
));
425 locale
= setlocale(LC_ALL
, locstr
);
427 locale
= setlocale(LC_ALL
, NULL
);
430 MSVCP_basic_string_char_ctor_cstr(&locinfo
->newlocname
, locale
);
432 MSVCP_basic_string_char_ctor_cstr(&locinfo
->newlocname
, "*");
437 /* ??0_Locinfo@std@@QAE@HPBD@Z */
438 /* ??0_Locinfo@std@@QEAA@HPEBD@Z */
439 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cat_cstr
, 12)
440 _Locinfo
* __thiscall
_Locinfo_ctor_cat_cstr(_Locinfo
*this, int category
, const char *locstr
)
442 return _Locinfo__Locinfo_ctor_cat_cstr(this, category
, locstr
);
445 /* ??0_Locinfo@std@@QAE@PBD@Z */
446 /* ??0_Locinfo@std@@QEAA@PEBD@Z */
447 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cstr
, 8)
448 _Locinfo
* __thiscall
_Locinfo_ctor_cstr(_Locinfo
*this, const char *locstr
)
450 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, locstr
);
453 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPAV12@@Z */
454 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPEAV12@@Z */
455 static void _Locinfo__Locinfo_dtor(_Locinfo
*locinfo
)
457 TRACE("(%p)\n", locinfo
);
459 setlocale(LC_ALL
, MSVCP_basic_string_char_c_str(&locinfo
->oldlocname
));
460 MSVCP_basic_string_char_dtor(&locinfo
->days
);
461 MSVCP_basic_string_char_dtor(&locinfo
->months
);
462 MSVCP_basic_string_char_dtor(&locinfo
->oldlocname
);
463 MSVCP_basic_string_char_dtor(&locinfo
->newlocname
);
464 _Lockit_dtor(&locinfo
->lock
);
467 /* ??_F_Locinfo@std@@QAEXXZ */
468 /* ??_F_Locinfo@std@@QEAAXXZ */
469 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor
, 4)
470 _Locinfo
* __thiscall
_Locinfo_ctor(_Locinfo
*this)
472 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, "C");
475 /* ??1_Locinfo@std@@QAE@XZ */
476 /* ??1_Locinfo@std@@QEAA@XZ */
477 DEFINE_THISCALL_WRAPPER(_Locinfo_dtor
, 4)
478 void __thiscall
_Locinfo_dtor(_Locinfo
*this)
480 _Locinfo__Locinfo_dtor(this);
483 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAAV12@PAV12@HPBD@Z */
484 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAEAV12@PEAV12@HPEBD@Z */
485 static _Locinfo
* _Locinfo__Locinfo_Addcats(_Locinfo
*locinfo
, int category
, const char *locstr
)
487 const char *locale
= NULL
;
489 /* This function is probably modifying more global objects */
490 FIXME("(%p %d %s) semi-stub\n", locinfo
, category
, locstr
);
492 throw_exception(EXCEPTION_RUNTIME_ERROR
, "bad locale name");
494 MSVCP_basic_string_char_dtor(&locinfo
->newlocname
);
497 locale
= setlocale(LC_ALL
, locstr
);
499 locale
= setlocale(LC_ALL
, NULL
);
502 MSVCP_basic_string_char_ctor_cstr(&locinfo
->newlocname
, locale
);
504 MSVCP_basic_string_char_ctor_cstr(&locinfo
->newlocname
, "*");
509 /* ?_Addcats@_Locinfo@std@@QAEAAV12@HPBD@Z */
510 /* ?_Addcats@_Locinfo@std@@QEAAAEAV12@HPEBD@Z */
511 DEFINE_THISCALL_WRAPPER(_Locinfo__Addcats
, 12)
512 _Locinfo
* __thiscall
_Locinfo__Addcats(_Locinfo
*this, int category
, const char *locstr
)
514 return _Locinfo__Locinfo_Addcats(this, category
, locstr
);
518 ULONGLONG __cdecl
_Getcoll(void)
524 _locale_t locale
= _get_current_locale();
528 ret
.collvec
.page
= locale
->locinfo
->lc_collate_cp
;
529 ret
.collvec
.handle
= locale
->locinfo
->lc_handle
[LC_COLLATE
];
530 _free_locale(locale
);
534 /* ?_Getcoll@_Locinfo@std@@QBE?AU_Collvec@@XZ */
535 /* ?_Getcoll@_Locinfo@std@@QEBA?AU_Collvec@@XZ */
536 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcoll
, 8)
537 _Collvec
* __thiscall
_Locinfo__Getcoll(const _Locinfo
*this, _Collvec
*ret
)
539 ULONGLONG ull
= _Getcoll();
540 memcpy(ret
, &ull
, sizeof(ull
));
545 _Ctypevec
* __cdecl
_Getctype(_Ctypevec
*ret
)
547 _locale_t locale
= _get_current_locale();
552 ret
->page
= locale
->locinfo
->lc_codepage
;
553 ret
->handle
= locale
->locinfo
->lc_handle
[LC_COLLATE
];
555 table
= malloc(sizeof(short[256]));
557 _free_locale(locale
);
558 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
560 memcpy(table
, locale
->locinfo
->pctype
, sizeof(short[256]));
562 _free_locale(locale
);
566 /* ?_Getctype@_Locinfo@std@@QBE?AU_Ctypevec@@XZ */
567 /* ?_Getctype@_Locinfo@std@@QEBA?AU_Ctypevec@@XZ */
568 DEFINE_THISCALL_WRAPPER(_Locinfo__Getctype
, 8)
569 _Ctypevec
* __thiscall
_Locinfo__Getctype(const _Locinfo
*this, _Ctypevec
*ret
)
571 return _Getctype(ret
);
575 ULONGLONG __cdecl
_Getcvt(void)
577 _locale_t locale
= _get_current_locale();
585 ret
.cvtvec
.page
= locale
->locinfo
->lc_codepage
;
586 ret
.cvtvec
.handle
= locale
->locinfo
->lc_handle
[LC_CTYPE
];
587 _free_locale(locale
);
591 /* ?_Getcvt@_Locinfo@std@@QBE?AU_Cvtvec@@XZ */
592 /* ?_Getcvt@_Locinfo@std@@QEBA?AU_Cvtvec@@XZ */
593 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcvt
, 8)
594 _Cvtvec
* __thiscall
_Locinfo__Getcvt(const _Locinfo
*this, _Cvtvec
*ret
)
596 ULONGLONG ull
= _Getcvt();
597 memcpy(ret
, &ull
, sizeof(ull
));
601 /* ?_Getdateorder@_Locinfo@std@@QBEHXZ */
602 /* ?_Getdateorder@_Locinfo@std@@QEBAHXZ */
603 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdateorder
, 4)
604 int __thiscall
_Locinfo__Getdateorder(const _Locinfo
*this)
606 FIXME("(%p) stub\n", this);
610 /* ?_Getdays@_Locinfo@std@@QBEPBDXZ */
611 /* ?_Getdays@_Locinfo@std@@QEBAPEBDXZ */
612 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdays
, 4)
613 const char* __thiscall
_Locinfo__Getdays(_Locinfo
*this)
615 char *days
= _Getdays();
617 TRACE("(%p)\n", this);
620 MSVCP_basic_string_char_dtor(&this->days
);
621 MSVCP_basic_string_char_ctor_cstr(&this->days
, days
);
625 return this->days
.size
? MSVCP_basic_string_char_c_str(&this->days
) :
626 ":Sun:Sunday:Mon:Monday:Tue:Tuesday:Wed:Wednesday:Thu:Thursday:Fri:Friday:Sat:Saturday";
629 /* ?_Getmonths@_Locinfo@std@@QBEPBDXZ */
630 /* ?_Getmonths@_Locinfo@std@@QEBAPEBDXZ */
631 DEFINE_THISCALL_WRAPPER(_Locinfo__Getmonths
, 4)
632 const char* __thiscall
_Locinfo__Getmonths(_Locinfo
*this)
634 char *months
= _Getmonths();
636 TRACE("(%p)\n", this);
639 MSVCP_basic_string_char_dtor(&this->months
);
640 MSVCP_basic_string_char_ctor_cstr(&this->months
, months
);
644 return this->months
.size
? MSVCP_basic_string_char_c_str(&this->months
) :
645 ":Jan:January:Feb:February:Mar:March:Apr:April:May:May:Jun:June:Jul:July"
646 ":Aug:August:Sep:September:Oct:October:Nov:November:Dec:December";
649 /* ?_Getfalse@_Locinfo@std@@QBEPBDXZ */
650 /* ?_Getfalse@_Locinfo@std@@QEBAPEBDXZ */
651 DEFINE_THISCALL_WRAPPER(_Locinfo__Getfalse
, 4)
652 const char* __thiscall
_Locinfo__Getfalse(const _Locinfo
*this)
654 TRACE("(%p)\n", this);
658 /* ?_Gettrue@_Locinfo@std@@QBEPBDXZ */
659 /* ?_Gettrue@_Locinfo@std@@QEBAPEBDXZ */
660 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettrue
, 4)
661 const char* __thiscall
_Locinfo__Gettrue(const _Locinfo
*this)
663 TRACE("(%p)\n", this);
667 /* ?_Getlconv@_Locinfo@std@@QBEPBUlconv@@XZ */
668 /* ?_Getlconv@_Locinfo@std@@QEBAPEBUlconv@@XZ */
669 DEFINE_THISCALL_WRAPPER(_Locinfo__Getlconv
, 4)
670 const struct lconv
* __thiscall
_Locinfo__Getlconv(const _Locinfo
*this)
672 TRACE("(%p)\n", this);
676 /* ?_Getname@_Locinfo@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
677 /* ?_Getname@_Locinfo@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
678 DEFINE_THISCALL_WRAPPER(_Locinfo__Getname
, 8)
679 basic_string_char
* __thiscall
_Locinfo__Getname(const _Locinfo
*this, basic_string_char
*ret
)
681 TRACE("(%p)\n", this);
683 MSVCP_basic_string_char_copy_ctor(ret
, &this->newlocname
);
687 /* ?_Gettnames@_Locinfo@std@@QBE?AV_Timevec@2@XZ */
688 /* ?_Gettnames@_Locinfo@std@@QEBA?AV_Timevec@2@XZ */
689 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettnames
, 8)
690 _Timevec
*__thiscall
_Locinfo__Gettnames(const _Locinfo
*this, _Timevec
*ret
)
692 TRACE("(%p)\n", this);
694 _Timevec_ctor_timeptr(ret
, _Gettnames());
698 /* ?id@?$collate@D@std@@2V0locale@2@A */
699 locale_id collate_char_id
= {0};
701 /* ??_7?$collate@D@std@@6B@ */
702 extern const vtable_ptr MSVCP_collate_char_vtable
;
704 /* ?_Init@?$collate@D@std@@IAEXABV_Locinfo@2@@Z */
705 /* ?_Init@?$collate@D@std@@IEAAXAEBV_Locinfo@2@@Z */
706 DEFINE_THISCALL_WRAPPER(collate_char__Init
, 8)
707 void __thiscall
collate_char__Init(collate
*this, const _Locinfo
*locinfo
)
709 TRACE("(%p %p)\n", this, locinfo
);
710 _Locinfo__Getcoll(locinfo
, &this->coll
);
713 /* ??0?$collate@D@std@@IAE@PBDI@Z */
714 /* ??0?$collate@D@std@@IEAA@PEBD_K@Z */
715 static collate
* collate_char_ctor_name(collate
*this, const char *name
, MSVCP_size_t refs
)
719 TRACE("(%p %s %lu)\n", this, name
, refs
);
721 locale_facet_ctor_refs(&this->facet
, refs
);
722 this->facet
.vtable
= &MSVCP_collate_char_vtable
;
724 _Locinfo_ctor_cstr(&locinfo
, name
);
725 collate_char__Init(this, &locinfo
);
726 _Locinfo_dtor(&locinfo
);
730 /* ??0?$collate@D@std@@QAE@ABV_Locinfo@1@I@Z */
731 /* ??0?$collate@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
732 DEFINE_THISCALL_WRAPPER(collate_char_ctor_locinfo
, 12)
733 collate
* __thiscall
collate_char_ctor_locinfo(collate
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
735 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
737 locale_facet_ctor_refs(&this->facet
, refs
);
738 this->facet
.vtable
= &MSVCP_collate_char_vtable
;
739 collate_char__Init(this, locinfo
);
743 /* ??0?$collate@D@std@@QAE@I@Z */
744 /* ??0?$collate@D@std@@QEAA@_K@Z */
745 DEFINE_THISCALL_WRAPPER(collate_char_ctor_refs
, 8)
746 collate
* __thiscall
collate_char_ctor_refs(collate
*this, MSVCP_size_t refs
)
748 return collate_char_ctor_name(this, "C", refs
);
751 /* ??1?$collate@D@std@@MAE@XZ */
752 /* ??1?$collate@D@std@@MEAA@XZ */
753 DEFINE_THISCALL_WRAPPER(collate_char_dtor
, 4)
754 void __thiscall
collate_char_dtor(collate
*this)
756 TRACE("(%p)\n", this);
759 DEFINE_THISCALL_WRAPPER(collate_char_vector_dtor
, 8)
760 collate
* __thiscall
collate_char_vector_dtor(collate
*this, unsigned int flags
)
762 TRACE("(%p %x)\n", this, flags
);
764 /* we have an array, with the number of elements stored before the first object */
765 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
767 for(i
=*ptr
-1; i
>=0; i
--)
768 collate_char_dtor(this+i
);
769 MSVCRT_operator_delete(ptr
);
771 collate_char_dtor(this);
773 MSVCRT_operator_delete(this);
779 /* ??_F?$collate@D@std@@QAEXXZ */
780 /* ??_F?$collate@D@std@@QEAAXXZ */
781 DEFINE_THISCALL_WRAPPER(collate_char_ctor
, 4)
782 collate
* __thiscall
collate_char_ctor(collate
*this)
784 return collate_char_ctor_name(this, "C", 0);
787 /* ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
788 /* ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
789 static MSVCP_size_t
collate_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
791 TRACE("(%p %p)\n", facet
, loc
);
793 if(facet
&& !*facet
) {
794 *facet
= MSVCRT_operator_new(sizeof(collate
));
796 ERR("Out of memory\n");
797 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
800 collate_char_ctor_name((collate
*)*facet
,
801 MSVCP_basic_string_char_c_str(&loc
->ptr
->name
), 0);
807 /* ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@@Z */
808 /* ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
809 MSVCP_size_t __cdecl
collate_char__Getcat_old(const locale_facet
**facet
)
811 return collate_char__Getcat(facet
, locale_classic());
814 static collate
* collate_char_use_facet(const locale
*loc
)
816 static collate
*obj
= NULL
;
819 const locale_facet
*fac
;
821 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
822 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&collate_char_id
));
825 return (collate
*)fac
;
833 collate_char__Getcat(&fac
, loc
);
835 locale_facet__Incref(&obj
->facet
);
836 locale_facet_register(&obj
->facet
);
843 int __cdecl
_Strcoll(const char *first1
, const char *last1
, const char *first2
,
844 const char *last2
, const _Collvec
*coll
)
848 TRACE("(%s %s)\n", debugstr_an(first1
, last1
-first1
), debugstr_an(first2
, last2
-first2
));
853 lcid
= ___lc_handle_func()[LC_COLLATE
];
854 return CompareStringA(lcid
, 0, first1
, last1
-first1
, first2
, last2
-first2
)-CSTR_EQUAL
;
857 /* ?do_compare@?$collate@D@std@@MBEHPBD000@Z */
858 /* ?do_compare@?$collate@D@std@@MEBAHPEBD000@Z */
859 DEFINE_THISCALL_WRAPPER(collate_char_do_compare
, 20)
860 #define call_collate_char_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 4, int, \
861 (const collate*, const char*, const char*, const char*, const char*), \
862 (this, first1, last1, first2, last2))
863 int __thiscall
collate_char_do_compare(const collate
*this, const char *first1
,
864 const char *last1
, const char *first2
, const char *last2
)
866 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
867 return _Strcoll(first1
, last1
, first2
, last2
, &this->coll
);
870 /* ?compare@?$collate@D@std@@QBEHPBD000@Z */
871 /* ?compare@?$collate@D@std@@QEBAHPEBD000@Z */
872 DEFINE_THISCALL_WRAPPER(collate_char_compare
, 20)
873 int __thiscall
collate_char_compare(const collate
*this, const char *first1
,
874 const char *last1
, const char *first2
, const char *last2
)
876 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
877 return call_collate_char_do_compare(this, first1
, last1
, first2
, last2
);
880 /* ?do_hash@?$collate@D@std@@MBEJPBD0@Z */
881 /* ?do_hash@?$collate@D@std@@MEBAJPEBD0@Z */
882 DEFINE_THISCALL_WRAPPER(collate_char_do_hash
, 12)
883 #define call_collate_char_do_hash(this, first, last) CALL_VTBL_FUNC(this, 12, LONG, \
884 (const collate*, const char*, const char*), (this, first, last))
885 LONG __thiscall
collate_char_do_hash(const collate
*this,
886 const char *first
, const char *last
)
890 TRACE("(%p %p %p)\n", this, first
, last
);
892 for(; first
<last
; first
++)
893 ret
= (ret
<<8 | ret
>>24) + *first
;
897 /* ?hash@?$collate@D@std@@QBEJPBD0@Z */
898 /* ?hash@?$collate@D@std@@QEBAJPEBD0@Z */
899 DEFINE_THISCALL_WRAPPER(collate_char_hash
, 12)
900 LONG __thiscall
collate_char_hash(const collate
*this,
901 const char *first
, const char *last
)
903 TRACE("(%p %p %p)\n", this, first
, last
);
904 return call_collate_char_do_hash(this, first
, last
);
907 /* ?do_transform@?$collate@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
908 /* ?do_transform@?$collate@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
909 DEFINE_THISCALL_WRAPPER(collate_char_do_transform
, 16)
910 basic_string_char
* __thiscall
collate_char_do_transform(const collate
*this,
911 basic_string_char
*ret
, const char *first
, const char *last
)
913 FIXME("(%p %p %p) stub\n", this, first
, last
);
917 /* ?transform@?$collate@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
918 /* ?transform@?$collate@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
919 DEFINE_THISCALL_WRAPPER(collate_char_transform
, 16)
920 basic_string_char
* __thiscall
collate_char_transform(const collate
*this,
921 basic_string_char
*ret
, const char *first
, const char *last
)
923 FIXME("(%p %p %p) stub\n", this, first
, last
);
927 /* ?id@?$collate@_W@std@@2V0locale@2@A */
928 locale_id collate_wchar_id
= {0};
929 /* ?id@?$collate@G@std@@2V0locale@2@A */
930 locale_id collate_short_id
= {0};
932 /* ??_7?$collate@_W@std@@6B@ */
933 extern const vtable_ptr MSVCP_collate_wchar_vtable
;
934 /* ??_7?$collate@G@std@@6B@ */
935 extern const vtable_ptr MSVCP_collate_short_vtable
;
937 /* ?_Init@?$collate@_W@std@@IAEXABV_Locinfo@2@@Z */
938 /* ?_Init@?$collate@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
939 /* ?_Init@?$collate@G@std@@IAEXABV_Locinfo@2@@Z */
940 /* ?_Init@?$collate@G@std@@IEAAXAEBV_Locinfo@2@@Z */
941 DEFINE_THISCALL_WRAPPER(collate_wchar__Init
, 8)
942 void __thiscall
collate_wchar__Init(collate
*this, const _Locinfo
*locinfo
)
944 TRACE("(%p %p)\n", this, locinfo
);
945 _Locinfo__Getcoll(locinfo
, &this->coll
);
948 /* ??0?$collate@_W@std@@IAE@PBDI@Z */
949 /* ??0?$collate@_W@std@@IEAA@PEBD_K@Z */
950 static collate
* collate_wchar_ctor_name(collate
*this, const char *name
, MSVCP_size_t refs
)
954 TRACE("(%p %s %lu)\n", this, name
, refs
);
956 locale_facet_ctor_refs(&this->facet
, refs
);
957 this->facet
.vtable
= &MSVCP_collate_wchar_vtable
;
959 _Locinfo_ctor_cstr(&locinfo
, name
);
960 collate_wchar__Init(this, &locinfo
);
961 _Locinfo_dtor(&locinfo
);
965 /* ??0?$collate@_W@std@@QAE@ABV_Locinfo@1@I@Z */
966 /* ??0?$collate@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
967 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_locinfo
, 12)
968 collate
* __thiscall
collate_wchar_ctor_locinfo(collate
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
970 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
972 locale_facet_ctor_refs(&this->facet
, refs
);
973 this->facet
.vtable
= &MSVCP_collate_wchar_vtable
;
974 collate_wchar__Init(this, locinfo
);
978 /* ??0?$collate@G@std@@QAE@ABV_Locinfo@1@I@Z */
979 /* ??0?$collate@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
980 DEFINE_THISCALL_WRAPPER(collate_short_ctor_locinfo
, 12)
981 collate
* __thiscall
collate_short_ctor_locinfo(collate
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
983 collate
*ret
= collate_wchar_ctor_locinfo(this, locinfo
, refs
);
984 ret
->facet
.vtable
= &MSVCP_collate_short_vtable
;
988 /* ??0?$collate@_W@std@@QAE@I@Z */
989 /* ??0?$collate@_W@std@@QEAA@_K@Z */
990 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_refs
, 8)
991 collate
* __thiscall
collate_wchar_ctor_refs(collate
*this, MSVCP_size_t refs
)
993 return collate_wchar_ctor_name(this, "C", refs
);
996 /* ??0?$collate@G@std@@QAE@I@Z */
997 /* ??0?$collate@G@std@@QEAA@_K@Z */
998 DEFINE_THISCALL_WRAPPER(collate_short_ctor_refs
, 8)
999 collate
* __thiscall
collate_short_ctor_refs(collate
*this, MSVCP_size_t refs
)
1001 collate
*ret
= collate_wchar_ctor_refs(this, refs
);
1002 ret
->facet
.vtable
= &MSVCP_collate_short_vtable
;
1006 /* ??1?$collate@_W@std@@MAE@XZ */
1007 /* ??1?$collate@_W@std@@MEAA@XZ */
1008 /* ??1?$collate@G@std@@MAE@XZ */
1009 /* ??1?$collate@G@std@@MEAA@XZ */
1010 DEFINE_THISCALL_WRAPPER(collate_wchar_dtor
, 4)
1011 void __thiscall
collate_wchar_dtor(collate
*this)
1013 TRACE("(%p)\n", this);
1016 DEFINE_THISCALL_WRAPPER(collate_wchar_vector_dtor
, 8)
1017 collate
* __thiscall
collate_wchar_vector_dtor(collate
*this, unsigned int flags
)
1019 TRACE("(%p %x)\n", this, flags
);
1021 /* we have an array, with the number of elements stored before the first object */
1022 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1024 for(i
=*ptr
-1; i
>=0; i
--)
1025 collate_wchar_dtor(this+i
);
1026 MSVCRT_operator_delete(ptr
);
1028 collate_wchar_dtor(this);
1030 MSVCRT_operator_delete(this);
1036 /* ??_F?$collate@_W@std@@QAEXXZ */
1037 /* ??_F?$collate@_W@std@@QEAAXXZ */
1038 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor
, 4)
1039 collate
* __thiscall
collate_wchar_ctor(collate
*this)
1041 return collate_wchar_ctor_name(this, "C", 0);
1044 /* ??_F?$collate@G@std@@QAEXXZ */
1045 /* ??_F?$collate@G@std@@QEAAXXZ */
1046 DEFINE_THISCALL_WRAPPER(collate_short_ctor
, 4)
1047 collate
* __thiscall
collate_short_ctor(collate
*this)
1049 collate
*ret
= collate_wchar_ctor(this);
1050 ret
->facet
.vtable
= &MSVCP_collate_short_vtable
;
1054 /* ?_Getcat@?$collate@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1055 /* ?_Getcat@?$collate@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1056 static MSVCP_size_t
collate_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
1058 TRACE("(%p %p)\n", facet
, loc
);
1060 if(facet
&& !*facet
) {
1061 *facet
= MSVCRT_operator_new(sizeof(collate
));
1063 ERR("Out of memory\n");
1064 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
1067 collate_wchar_ctor_name((collate
*)*facet
,
1068 MSVCP_basic_string_char_c_str(&loc
->ptr
->name
), 0);
1074 /* ?_Getcat@?$collate@_W@std@@SAIPAPBVfacet@locale@2@@Z */
1075 /* ?_Getcat@?$collate@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1076 MSVCP_size_t __cdecl
collate_wchar__Getcat_old(const locale_facet
**facet
)
1078 return collate_wchar__Getcat(facet
, locale_classic());
1081 static collate
* collate_wchar_use_facet(const locale
*loc
)
1083 static collate
*obj
= NULL
;
1086 const locale_facet
*fac
;
1088 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1089 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&collate_wchar_id
));
1091 _Lockit_dtor(&lock
);
1092 return (collate
*)fac
;
1096 _Lockit_dtor(&lock
);
1100 collate_wchar__Getcat(&fac
, loc
);
1101 obj
= (collate
*)fac
;
1102 locale_facet__Incref(&obj
->facet
);
1103 locale_facet_register(&obj
->facet
);
1104 _Lockit_dtor(&lock
);
1109 /* ?_Getcat@?$collate@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1110 /* ?_Getcat@?$collate@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1111 static MSVCP_size_t
collate_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
1113 if(facet
&& !*facet
) {
1114 collate_wchar__Getcat(facet
, loc
);
1115 (*(locale_facet
**)facet
)->vtable
= &MSVCP_collate_short_vtable
;
1121 /* ?_Getcat@?$collate@G@std@@SAIPAPBVfacet@locale@2@@Z */
1122 /* ?_Getcat@?$collate@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1123 MSVCP_size_t __cdecl
collate_short__Getcat_old(const locale_facet
**facet
)
1125 return collate_short__Getcat(facet
, locale_classic());
1128 static collate
* collate_short_use_facet(const locale
*loc
)
1130 static collate
*obj
= NULL
;
1133 const locale_facet
*fac
;
1135 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1136 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&collate_short_id
));
1138 _Lockit_dtor(&lock
);
1139 return (collate
*)fac
;
1143 _Lockit_dtor(&lock
);
1147 collate_short__Getcat(&fac
, loc
);
1148 obj
= (collate
*)fac
;
1149 locale_facet__Incref(&obj
->facet
);
1150 locale_facet_register(&obj
->facet
);
1151 _Lockit_dtor(&lock
);
1157 int __cdecl
_Wcscoll(const wchar_t *first1
, const wchar_t *last1
, const wchar_t *first2
,
1158 const wchar_t *last2
, const _Collvec
*coll
)
1162 TRACE("(%s %s)\n", debugstr_wn(first1
, last1
-first1
), debugstr_wn(first2
, last2
-first2
));
1165 lcid
= coll
->handle
;
1167 lcid
= ___lc_handle_func()[LC_COLLATE
];
1168 return CompareStringW(lcid
, 0, first1
, last1
-first1
, first2
, last2
-first2
)-CSTR_EQUAL
;
1171 /* ?do_compare@?$collate@_W@std@@MBEHPB_W000@Z */
1172 /* ?do_compare@?$collate@_W@std@@MEBAHPEB_W000@Z */
1173 /* ?do_compare@?$collate@G@std@@MBEHPBG000@Z */
1174 /* ?do_compare@?$collate@G@std@@MEBAHPEBG000@Z */
1175 DEFINE_THISCALL_WRAPPER(collate_wchar_do_compare
, 20)
1176 #define call_collate_wchar_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 4, int, \
1177 (const collate*, const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*), \
1178 (this, first1, last1, first2, last2))
1179 int __thiscall
collate_wchar_do_compare(const collate
*this, const wchar_t *first1
,
1180 const wchar_t *last1
, const wchar_t *first2
, const wchar_t *last2
)
1182 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1183 return _Wcscoll(first1
, last1
, first2
, last2
, &this->coll
);
1186 /* ?compare@?$collate@_W@std@@QBEHPB_W000@Z */
1187 /* ?compare@?$collate@_W@std@@QEBAHPEB_W000@Z */
1188 /* ?compare@?$collate@G@std@@QBEHPBG000@Z */
1189 /* ?compare@?$collate@G@std@@QEBAHPEBG000@Z */
1190 DEFINE_THISCALL_WRAPPER(collate_wchar_compare
, 20)
1191 int __thiscall
collate_wchar_compare(const collate
*this, const wchar_t *first1
,
1192 const wchar_t *last1
, const wchar_t *first2
, const wchar_t *last2
)
1194 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1195 return call_collate_wchar_do_compare(this, first1
, last1
, first2
, last2
);
1198 /* ?do_hash@?$collate@_W@std@@MBEJPB_W0@Z */
1199 /* ?do_hash@?$collate@_W@std@@MEBAJPEB_W0@Z */
1200 /* ?do_hash@?$collate@G@std@@MBEJPBG0@Z */
1201 /* ?do_hash@?$collate@G@std@@MEBAJPEBG0@Z */
1202 DEFINE_THISCALL_WRAPPER(collate_wchar_do_hash
, 12)
1203 #define call_collate_wchar_do_hash(this, first, last) CALL_VTBL_FUNC(this, 12, LONG, \
1204 (const collate*, const wchar_t*, const wchar_t*), (this, first, last))
1205 LONG __thiscall
collate_wchar_do_hash(const collate
*this,
1206 const wchar_t *first
, const wchar_t *last
)
1210 TRACE("(%p %p %p)\n", this, first
, last
);
1212 for(; first
<last
; first
++)
1213 ret
= (ret
<<8 | ret
>>24) + *first
;
1217 /* ?hash@?$collate@_W@std@@QBEJPB_W0@Z */
1218 /* ?hash@?$collate@_W@std@@QEBAJPEB_W0@Z */
1219 /* ?hash@?$collate@G@std@@QBEJPBG0@Z */
1220 /* ?hash@?$collate@G@std@@QEBAJPEBG0@Z */
1221 DEFINE_THISCALL_WRAPPER(collate_wchar_hash
, 12)
1222 LONG __thiscall
collate_wchar_hash(const collate
*this,
1223 const wchar_t *first
, const wchar_t *last
)
1225 TRACE("(%p %p %p)\n", this, first
, last
);
1226 return call_collate_wchar_do_hash(this, first
, last
);
1229 /* ?do_transform@?$collate@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
1230 /* ?do_transform@?$collate@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
1231 /* ?do_transform@?$collate@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
1232 /* ?do_transform@?$collate@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
1233 DEFINE_THISCALL_WRAPPER(collate_wchar_do_transform
, 16)
1234 basic_string_wchar
* __thiscall
collate_wchar_do_transform(const collate
*this,
1235 basic_string_wchar
*ret
, const wchar_t *first
, const wchar_t *last
)
1237 FIXME("(%p %p %p) stub\n", this, first
, last
);
1241 /* ?transform@?$collate@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
1242 /* ?transform@?$collate@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
1243 /* ?transform@?$collate@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
1244 /* ?transform@?$collate@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
1245 DEFINE_THISCALL_WRAPPER(collate_wchar_transform
, 16)
1246 basic_string_wchar
* __thiscall
collate_wchar_transform(const collate
*this,
1247 basic_string_wchar
*ret
, const wchar_t *first
, const wchar_t *last
)
1249 FIXME("(%p %p %p) stub\n", this, first
, last
);
1253 /* ??_7ctype_base@std@@6B@ */
1254 extern const vtable_ptr MSVCP_ctype_base_vtable
;
1256 /* ??0ctype_base@std@@QAE@I@Z */
1257 /* ??0ctype_base@std@@QEAA@_K@Z */
1258 DEFINE_THISCALL_WRAPPER(ctype_base_ctor_refs
, 8)
1259 ctype_base
* __thiscall
ctype_base_ctor_refs(ctype_base
*this, MSVCP_size_t refs
)
1261 TRACE("(%p %lu)\n", this, refs
);
1262 locale_facet_ctor_refs(&this->facet
, refs
);
1263 this->facet
.vtable
= &MSVCP_ctype_base_vtable
;
1267 /* ??_Fctype_base@std@@QAEXXZ */
1268 /* ??_Fctype_base@std@@QEAAXXZ */
1269 DEFINE_THISCALL_WRAPPER(ctype_base_ctor
, 4)
1270 ctype_base
* __thiscall
ctype_base_ctor(ctype_base
*this)
1272 TRACE("(%p)\n", this);
1273 locale_facet_ctor_refs(&this->facet
, 0);
1274 this->facet
.vtable
= &MSVCP_ctype_base_vtable
;
1278 /* ??1ctype_base@std@@UAE@XZ */
1279 /* ??1ctype_base@std@@UEAA@XZ */
1280 DEFINE_THISCALL_WRAPPER(ctype_base_dtor
, 4)
1281 void __thiscall
ctype_base_dtor(ctype_base
*this)
1283 TRACE("(%p)\n", this);
1286 DEFINE_THISCALL_WRAPPER(ctype_base_vector_dtor
, 8)
1287 ctype_base
* __thiscall
ctype_base_vector_dtor(ctype_base
*this, unsigned int flags
)
1289 TRACE("(%p %x)\n", this, flags
);
1291 /* we have an array, with the number of elements stored before the first object */
1292 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1294 for(i
=*ptr
-1; i
>=0; i
--)
1295 ctype_base_dtor(this+i
);
1296 MSVCRT_operator_delete(ptr
);
1298 ctype_base_dtor(this);
1300 MSVCRT_operator_delete(this);
1306 /* ?id@?$ctype@D@std@@2V0locale@2@A */
1307 locale_id ctype_char_id
= {0};
1308 /* ?table_size@?$ctype@D@std@@2IB */
1309 /* ?table_size@?$ctype@D@std@@2_KB */
1310 MSVCP_size_t ctype_char_table_size
= 256;
1312 /* ??_7?$ctype@D@std@@6B@ */
1313 extern const vtable_ptr MSVCP_ctype_char_vtable
;
1315 /* ?_Init@?$ctype@D@std@@IAEXABV_Locinfo@2@@Z */
1316 /* ?_Init@?$ctype@D@std@@IEAAXAEBV_Locinfo@2@@Z */
1317 DEFINE_THISCALL_WRAPPER(ctype_char__Init
, 8)
1318 void __thiscall
ctype_char__Init(ctype_char
*this, const _Locinfo
*locinfo
)
1320 TRACE("(%p %p)\n", this, locinfo
);
1321 _Locinfo__Getctype(locinfo
, &this->ctype
);
1324 /* ?_Tidy@?$ctype@D@std@@IAEXXZ */
1325 /* ?_Tidy@?$ctype@D@std@@IEAAXXZ */
1326 DEFINE_THISCALL_WRAPPER(ctype_char__Tidy
, 4)
1327 void __thiscall
ctype_char__Tidy(ctype_char
*this)
1329 TRACE("(%p)\n", this);
1331 if(this->ctype
.delfl
)
1332 free((short*)this->ctype
.table
);
1335 /* ?classic_table@?$ctype@D@std@@KAPBFXZ */
1336 /* ?classic_table@?$ctype@D@std@@KAPEBFXZ */
1337 const short* __cdecl
ctype_char_classic_table(void)
1340 return &((short*)GetProcAddress(GetModuleHandleA("msvcrt.dll"), "_ctype"))[1];
1343 /* ??0?$ctype@D@std@@QAE@ABV_Locinfo@1@I@Z */
1344 /* ??0?$ctype@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1345 DEFINE_THISCALL_WRAPPER(ctype_char_ctor_locinfo
, 12)
1346 ctype_char
* __thiscall
ctype_char_ctor_locinfo(ctype_char
*this,
1347 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
1349 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
1350 ctype_base_ctor_refs(&this->base
, refs
);
1351 this->base
.facet
.vtable
= &MSVCP_ctype_char_vtable
;
1352 ctype_char__Init(this, locinfo
);
1356 /* ??0?$ctype@D@std@@QAE@PBF_NI@Z */
1357 /* ??0?$ctype@D@std@@QEAA@PEBF_N_K@Z */
1358 DEFINE_THISCALL_WRAPPER(ctype_char_ctor_table
, 16)
1359 ctype_char
* __thiscall
ctype_char_ctor_table(ctype_char
*this,
1360 const short *table
, MSVCP_bool
delete, MSVCP_size_t refs
)
1364 TRACE("(%p %p %d %lu)\n", this, table
, delete, refs
);
1366 ctype_base_ctor_refs(&this->base
, refs
);
1367 this->base
.facet
.vtable
= &MSVCP_ctype_char_vtable
;
1369 _Locinfo_ctor(&locinfo
);
1370 ctype_char__Init(this, &locinfo
);
1371 _Locinfo_dtor(&locinfo
);
1374 ctype_char__Tidy(this);
1375 this->ctype
.table
= table
;
1376 this->ctype
.delfl
= delete;
1381 /* ??_F?$ctype@D@std@@QAEXXZ */
1382 /* ??_F?$ctype@D@std@@QEAAXXZ */
1383 DEFINE_THISCALL_WRAPPER(ctype_char_ctor
, 4)
1384 ctype_char
* __thiscall
ctype_char_ctor(ctype_char
*this)
1386 return ctype_char_ctor_table(this, NULL
, FALSE
, 0);
1389 /* ??1?$ctype@D@std@@MAE@XZ */
1390 /* ??1?$ctype@D@std@@MEAA@XZ */
1391 DEFINE_THISCALL_WRAPPER(ctype_char_dtor
, 4)
1392 void __thiscall
ctype_char_dtor(ctype_char
*this)
1394 TRACE("(%p)\n", this);
1395 ctype_char__Tidy(this);
1398 DEFINE_THISCALL_WRAPPER(ctype_char_vector_dtor
, 8)
1399 ctype_char
* __thiscall
ctype_char_vector_dtor(ctype_char
*this, unsigned int flags
)
1401 TRACE("(%p %x)\n", this, flags
);
1403 /* we have an array, with the number of elements stored before the first object */
1404 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1406 for(i
=*ptr
-1; i
>=0; i
--)
1407 ctype_char_dtor(this+i
);
1408 MSVCRT_operator_delete(ptr
);
1410 ctype_char_dtor(this);
1412 MSVCRT_operator_delete(this);
1418 /* ?do_narrow@?$ctype@D@std@@MBEDDD@Z */
1419 /* ?do_narrow@?$ctype@D@std@@MEBADDD@Z */
1420 DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow_ch
, 12)
1421 #define call_ctype_char_do_narrow_ch(this, ch, unused) CALL_VTBL_FUNC(this, 32, \
1422 char, (const ctype_char*, char, char), (this, ch, unused))
1423 char __thiscall
ctype_char_do_narrow_ch(const ctype_char
*this, char ch
, char unused
)
1425 TRACE("(%p %c %c)\n", this, ch
, unused
);
1429 /* ?do_narrow@?$ctype@D@std@@MBEPBDPBD0DPAD@Z */
1430 /* ?do_narrow@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD@Z */
1431 DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow
, 20)
1432 #define call_ctype_char_do_narrow(this, first, last, unused, dest) CALL_VTBL_FUNC(this, 28, \
1433 const char*, (const ctype_char*, const char*, const char*, char, char*), \
1434 (this, first, last, unused, dest))
1435 const char* __thiscall
ctype_char_do_narrow(const ctype_char
*this,
1436 const char *first
, const char *last
, char unused
, char *dest
)
1438 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1439 memcpy(dest
, first
, last
-first
);
1443 /* ?narrow@?$ctype@D@std@@QBEDDD@Z */
1444 /* ?narrow@?$ctype@D@std@@QEBADDD@Z */
1445 DEFINE_THISCALL_WRAPPER(ctype_char_narrow_ch
, 12)
1446 char __thiscall
ctype_char_narrow_ch(const ctype_char
*this, char ch
, char dflt
)
1448 TRACE("(%p %c %c)\n", this, ch
, dflt
);
1449 return call_ctype_char_do_narrow_ch(this, ch
, dflt
);
1452 /* ?narrow@?$ctype@D@std@@QBEPBDPBD0DPAD@Z */
1453 /* ?narrow@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD@Z */
1454 DEFINE_THISCALL_WRAPPER(ctype_char_narrow
, 20)
1455 const char* __thiscall
ctype_char_narrow(const ctype_char
*this,
1456 const char *first
, const char *last
, char dflt
, char *dest
)
1458 TRACE("(%p %p %p %c %p)\n", this, first
, last
, dflt
, dest
);
1459 return call_ctype_char_do_narrow(this, first
, last
, dflt
, dest
);
1462 /* ?do_widen@?$ctype@D@std@@MBEDD@Z */
1463 /* ?do_widen@?$ctype@D@std@@MEBADD@Z */
1464 DEFINE_THISCALL_WRAPPER(ctype_char_do_widen_ch
, 8)
1465 #define call_ctype_char_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
1466 char, (const ctype_char*, char), (this, ch))
1467 char __thiscall
ctype_char_do_widen_ch(const ctype_char
*this, char ch
)
1469 TRACE("(%p %c)\n", this, ch
);
1473 /* ?do_widen@?$ctype@D@std@@MBEPBDPBD0PAD@Z */
1474 /* ?do_widen@?$ctype@D@std@@MEBAPEBDPEBD0PEAD@Z */
1475 DEFINE_THISCALL_WRAPPER(ctype_char_do_widen
, 16)
1476 #define call_ctype_char_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 20, \
1477 const char*, (const ctype_char*, const char*, const char*, char*), \
1478 (this, first, last, dest))
1479 const char* __thiscall
ctype_char_do_widen(const ctype_char
*this,
1480 const char *first
, const char *last
, char *dest
)
1482 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1483 memcpy(dest
, first
, last
-first
);
1487 /* ?widen@?$ctype@D@std@@QBEDD@Z */
1488 /* ?widen@?$ctype@D@std@@QEBADD@Z */
1489 DEFINE_THISCALL_WRAPPER(ctype_char_widen_ch
, 8)
1490 char __thiscall
ctype_char_widen_ch(const ctype_char
*this, char ch
)
1492 TRACE("(%p %c)\n", this, ch
);
1493 return call_ctype_char_do_widen_ch(this, ch
);
1496 /* ?widen@?$ctype@D@std@@QBEPBDPBD0PAD@Z */
1497 /* ?widen@?$ctype@D@std@@QEBAPEBDPEBD0PEAD@Z */
1498 DEFINE_THISCALL_WRAPPER(ctype_char_widen
, 16)
1499 const char* __thiscall
ctype_char_widen(const ctype_char
*this,
1500 const char *first
, const char *last
, char *dest
)
1502 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1503 return call_ctype_char_do_widen(this, first
, last
, dest
);
1506 /* ?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1507 /* ?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1508 static MSVCP_size_t
ctype_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
1510 TRACE("(%p %p)\n", facet
, loc
);
1512 if(facet
&& !*facet
) {
1515 *facet
= MSVCRT_operator_new(sizeof(ctype_char
));
1517 ERR("Out of memory\n");
1518 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
1522 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
1523 ctype_char_ctor_locinfo((ctype_char
*)*facet
, &locinfo
, 0);
1524 _Locinfo_dtor(&locinfo
);
1530 /* ?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@@Z */
1531 /* ?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1532 MSVCP_size_t __cdecl
ctype_char__Getcat_old(const locale_facet
**facet
)
1534 return ctype_char__Getcat(facet
, locale_classic());
1537 ctype_char
* ctype_char_use_facet(const locale
*loc
)
1539 static ctype_char
*obj
= NULL
;
1542 const locale_facet
*fac
;
1544 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1545 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_char_id
));
1547 _Lockit_dtor(&lock
);
1548 return (ctype_char
*)fac
;
1552 _Lockit_dtor(&lock
);
1556 ctype_char__Getcat(&fac
, loc
);
1557 obj
= (ctype_char
*)fac
;
1558 locale_facet__Incref(&obj
->base
.facet
);
1559 locale_facet_register(&obj
->base
.facet
);
1560 _Lockit_dtor(&lock
);
1566 int __cdecl
_Tolower(int ch
, const _Ctypevec
*ctype
)
1570 TRACE("%d %p\n", ch
, ctype
);
1575 cp
= ___lc_codepage_func();
1577 /* Don't convert to unicode in case of C locale */
1579 if(ch
>='A' && ch
<='Z')
1588 str
[0] = (ch
>>8) & 255;
1596 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, str
, size
, &wide
, 1))
1599 lower
= tolowerW(wide
);
1603 WideCharToMultiByte(cp
, 0, &lower
, 1, str
, 2, NULL
, NULL
);
1605 return str
[0] + (str
[1]<<8);
1609 /* ?do_tolower@?$ctype@D@std@@MBEDD@Z */
1610 /* ?do_tolower@?$ctype@D@std@@MEBADD@Z */
1611 #define call_ctype_char_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 8, \
1612 char, (const ctype_char*, char), (this, ch))
1613 DEFINE_THISCALL_WRAPPER(ctype_char_do_tolower_ch
, 8)
1614 char __thiscall
ctype_char_do_tolower_ch(const ctype_char
*this, char ch
)
1616 TRACE("(%p %c)\n", this, ch
);
1617 return _Tolower(ch
, &this->ctype
);
1620 /* ?do_tolower@?$ctype@D@std@@MBEPBDPADPBD@Z */
1621 /* ?do_tolower@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z */
1622 #define call_ctype_char_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 4, \
1623 const char*, (const ctype_char*, char*, const char*), (this, first, last))
1624 DEFINE_THISCALL_WRAPPER(ctype_char_do_tolower
, 12)
1625 const char* __thiscall
ctype_char_do_tolower(const ctype_char
*this, char *first
, const char *last
)
1627 TRACE("(%p %p %p)\n", this, first
, last
);
1628 for(; first
<last
; first
++)
1629 *first
= _Tolower(*first
, &this->ctype
);
1633 /* ?tolower@?$ctype@D@std@@QBEDD@Z */
1634 /* ?tolower@?$ctype@D@std@@QEBADD@Z */
1635 DEFINE_THISCALL_WRAPPER(ctype_char_tolower_ch
, 8)
1636 char __thiscall
ctype_char_tolower_ch(const ctype_char
*this, char ch
)
1638 TRACE("(%p %c)\n", this, ch
);
1639 return call_ctype_char_do_tolower_ch(this, ch
);
1642 /* ?tolower@?$ctype@D@std@@QBEPBDPADPBD@Z */
1643 /* ?tolower@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z */
1644 DEFINE_THISCALL_WRAPPER(ctype_char_tolower
, 12)
1645 const char* __thiscall
ctype_char_tolower(const ctype_char
*this, char *first
, const char *last
)
1647 TRACE("(%p %p %p)\n", this, first
, last
);
1648 return call_ctype_char_do_tolower(this, first
, last
);
1652 int __cdecl
_Toupper(int ch
, const _Ctypevec
*ctype
)
1656 TRACE("%d %p\n", ch
, ctype
);
1661 cp
= ___lc_codepage_func();
1663 /* Don't convert to unicode in case of C locale */
1665 if(ch
>='a' && ch
<='z')
1674 str
[0] = (ch
>>8) & 255;
1682 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, str
, size
, &wide
, 1))
1685 upper
= toupperW(wide
);
1689 WideCharToMultiByte(cp
, 0, &upper
, 1, str
, 2, NULL
, NULL
);
1691 return str
[0] + (str
[1]<<8);
1695 /* ?do_toupper@?$ctype@D@std@@MBEDD@Z */
1696 /* ?do_toupper@?$ctype@D@std@@MEBADD@Z */
1697 #define call_ctype_char_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 16, \
1698 char, (const ctype_char*, char), (this, ch))
1699 DEFINE_THISCALL_WRAPPER(ctype_char_do_toupper_ch
, 8)
1700 char __thiscall
ctype_char_do_toupper_ch(const ctype_char
*this, char ch
)
1702 TRACE("(%p %c)\n", this, ch
);
1703 return _Toupper(ch
, &this->ctype
);
1706 /* ?do_toupper@?$ctype@D@std@@MBEPBDPADPBD@Z */
1707 /* ?do_toupper@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z */
1708 #define call_ctype_char_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 12, \
1709 const char*, (const ctype_char*, char*, const char*), (this, first, last))
1710 DEFINE_THISCALL_WRAPPER(ctype_char_do_toupper
, 12)
1711 const char* __thiscall
ctype_char_do_toupper(const ctype_char
*this,
1712 char *first
, const char *last
)
1714 TRACE("(%p %p %p)\n", this, first
, last
);
1715 for(; first
<last
; first
++)
1716 *first
= _Toupper(*first
, &this->ctype
);
1720 /* ?toupper@?$ctype@D@std@@QBEDD@Z */
1721 /* ?toupper@?$ctype@D@std@@QEBADD@Z */
1722 DEFINE_THISCALL_WRAPPER(ctype_char_toupper_ch
, 8)
1723 char __thiscall
ctype_char_toupper_ch(const ctype_char
*this, char ch
)
1725 TRACE("(%p %c)\n", this, ch
);
1726 return call_ctype_char_do_toupper_ch(this, ch
);
1729 /* ?toupper@?$ctype@D@std@@QBEPBDPADPBD@Z */
1730 /* ?toupper@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z */
1731 DEFINE_THISCALL_WRAPPER(ctype_char_toupper
, 12)
1732 const char* __thiscall
ctype_char_toupper(const ctype_char
*this, char *first
, const char *last
)
1734 TRACE("(%p %p %p)\n", this, first
, last
);
1735 return call_ctype_char_do_toupper(this, first
, last
);
1738 /* ?is@?$ctype@D@std@@QBE_NFD@Z */
1739 /* ?is@?$ctype@D@std@@QEBA_NFD@Z */
1740 DEFINE_THISCALL_WRAPPER(ctype_char_is_ch
, 12)
1741 MSVCP_bool __thiscall
ctype_char_is_ch(const ctype_char
*this, short mask
, char ch
)
1743 TRACE("(%p %x %c)\n", this, mask
, ch
);
1744 return (this->ctype
.table
[(unsigned char)ch
] & mask
) != 0;
1747 /* ?is@?$ctype@D@std@@QBEPBDPBD0PAF@Z */
1748 /* ?is@?$ctype@D@std@@QEBAPEBDPEBD0PEAF@Z */
1749 DEFINE_THISCALL_WRAPPER(ctype_char_is
, 16)
1750 const char* __thiscall
ctype_char_is(const ctype_char
*this, const char *first
, const char *last
, short *dest
)
1752 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1753 for(; first
<last
; first
++)
1754 *dest
++ = this->ctype
.table
[(unsigned char)*first
];
1758 /* ?scan_is@?$ctype@D@std@@QBEPBDFPBD0@Z */
1759 /* ?scan_is@?$ctype@D@std@@QEBAPEBDFPEBD0@Z */
1760 DEFINE_THISCALL_WRAPPER(ctype_char_scan_is
, 16)
1761 const char* __thiscall
ctype_char_scan_is(const ctype_char
*this, short mask
, const char *first
, const char *last
)
1763 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
1764 for(; first
<last
; first
++)
1765 if(!ctype_char_is_ch(this, mask
, *first
))
1770 /* ?scan_not@?$ctype@D@std@@QBEPBDFPBD0@Z */
1771 /* ?scan_not@?$ctype@D@std@@QEBAPEBDFPEBD0@Z */
1772 DEFINE_THISCALL_WRAPPER(ctype_char_scan_not
, 16)
1773 const char* __thiscall
ctype_char_scan_not(const ctype_char
*this, short mask
, const char *first
, const char *last
)
1775 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
1776 for(; first
<last
; first
++)
1777 if(ctype_char_is_ch(this, mask
, *first
))
1782 /* ?table@?$ctype@D@std@@IBEPBFXZ */
1783 /* ?table@?$ctype@D@std@@IEBAPEBFXZ */
1784 DEFINE_THISCALL_WRAPPER(ctype_char_table
, 4)
1785 const short* __thiscall
ctype_char_table(const ctype_char
*this)
1787 TRACE("(%p)\n", this);
1788 return this->ctype
.table
;
1791 /* ?id@?$ctype@_W@std@@2V0locale@2@A */
1792 locale_id ctype_wchar_id
= {0};
1793 /* ?id@?$ctype@G@std@@2V0locale@2@A */
1794 locale_id ctype_short_id
= {0};
1796 /* ??_7?$ctype@_W@std@@6B@ */
1797 extern const vtable_ptr MSVCP_ctype_wchar_vtable
;
1798 /* ??_7?$ctype@G@std@@6B@ */
1799 extern const vtable_ptr MSVCP_ctype_short_vtable
;
1801 /* ?_Init@?$ctype@_W@std@@IAEXABV_Locinfo@2@@Z */
1802 /* ?_Init@?$ctype@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
1803 /* ?_Init@?$ctype@G@std@@IAEXABV_Locinfo@2@@Z */
1804 /* ?_Init@?$ctype@G@std@@IEAAXAEBV_Locinfo@2@@Z */
1805 DEFINE_THISCALL_WRAPPER(ctype_wchar__Init
, 8)
1806 void __thiscall
ctype_wchar__Init(ctype_wchar
*this, const _Locinfo
*locinfo
)
1808 TRACE("(%p %p)\n", this, locinfo
);
1809 _Locinfo__Getctype(locinfo
, &this->ctype
);
1810 _Locinfo__Getcvt(locinfo
, &this->cvt
);
1813 /* ??0?$ctype@_W@std@@QAE@ABV_Locinfo@1@I@Z */
1814 /* ??0?$ctype@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1815 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor_locinfo
, 12)
1816 ctype_wchar
* __thiscall
ctype_wchar_ctor_locinfo(ctype_wchar
*this,
1817 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
1819 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
1820 ctype_base_ctor_refs(&this->base
, refs
);
1821 this->base
.facet
.vtable
= &MSVCP_ctype_wchar_vtable
;
1822 ctype_wchar__Init(this, locinfo
);
1826 /* ??0?$ctype@G@std@@QAE@ABV_Locinfo@1@I@Z */
1827 /* ??0?$ctype@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1828 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_locinfo
, 12)
1829 ctype_wchar
* __thiscall
ctype_short_ctor_locinfo(ctype_wchar
*this,
1830 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
1832 ctype_wchar
*ret
= ctype_wchar_ctor_locinfo(this, locinfo
, refs
);
1833 this->base
.facet
.vtable
= &MSVCP_ctype_short_vtable
;
1837 /* ??0?$ctype@_W@std@@QAE@I@Z */
1838 /* ??0?$ctype@_W@std@@QEAA@_K@Z */
1839 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor_refs
, 8)
1840 ctype_wchar
* __thiscall
ctype_wchar_ctor_refs(ctype_wchar
*this, MSVCP_size_t refs
)
1844 TRACE("(%p %lu)\n", this, refs
);
1846 ctype_base_ctor_refs(&this->base
, refs
);
1847 this->base
.facet
.vtable
= &MSVCP_ctype_wchar_vtable
;
1849 _Locinfo_ctor(&locinfo
);
1850 ctype_wchar__Init(this, &locinfo
);
1851 _Locinfo_dtor(&locinfo
);
1855 /* ??0?$ctype@G@std@@QAE@I@Z */
1856 /* ??0?$ctype@G@std@@QEAA@_K@Z */
1857 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_refs
, 8)
1858 ctype_wchar
* __thiscall
ctype_short_ctor_refs(ctype_wchar
*this, MSVCP_size_t refs
)
1860 ctype_wchar
*ret
= ctype_wchar_ctor_refs(this, refs
);
1861 this->base
.facet
.vtable
= &MSVCP_ctype_short_vtable
;
1865 /* ??_F?$ctype@_W@std@@QAEXXZ */
1866 /* ??_F?$ctype@_W@std@@QEAAXXZ */
1867 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor
, 4)
1868 ctype_wchar
* __thiscall
ctype_wchar_ctor(ctype_wchar
*this)
1870 TRACE("(%p)\n", this);
1871 return ctype_short_ctor_refs(this, 0);
1874 /* ??_F?$ctype@G@std@@QAEXXZ */
1875 /* ??_F?$ctype@G@std@@QEAAXXZ */
1876 DEFINE_THISCALL_WRAPPER(ctype_short_ctor
, 4)
1877 ctype_wchar
* __thiscall
ctype_short_ctor(ctype_wchar
*this)
1879 ctype_wchar
*ret
= ctype_wchar_ctor(this);
1880 this->base
.facet
.vtable
= &MSVCP_ctype_short_vtable
;
1884 /* ??1?$ctype@_W@std@@MAE@XZ */
1885 /* ??1?$ctype@_W@std@@MEAA@XZ */
1886 /* ??1?$ctype@G@std@@MAE@XZ */
1887 /* ??1?$ctype@G@std@@MEAA@XZ */
1888 DEFINE_THISCALL_WRAPPER(ctype_wchar_dtor
, 4)
1889 void __thiscall
ctype_wchar_dtor(ctype_wchar
*this)
1891 TRACE("(%p)\n", this);
1892 if(this->ctype
.delfl
)
1893 free((void*)this->ctype
.table
);
1896 DEFINE_THISCALL_WRAPPER(ctype_wchar_vector_dtor
, 8)
1897 ctype_wchar
* __thiscall
ctype_wchar_vector_dtor(ctype_wchar
*this, unsigned int flags
)
1899 TRACE("(%p %x)\n", this, flags
);
1901 /* we have an array, with the number of elements stored before the first object */
1902 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1904 for(i
=*ptr
-1; i
>=0; i
--)
1905 ctype_wchar_dtor(this+i
);
1906 MSVCRT_operator_delete(ptr
);
1908 ctype_wchar_dtor(this);
1910 MSVCRT_operator_delete(this);
1917 int __cdecl
_Wcrtomb(char *s
, wchar_t wch
, int *state
, const _Cvtvec
*cvt
)
1922 TRACE("%p %d %p %p\n", s
, wch
, state
, cvt
);
1927 cp
= ___lc_codepage_func();
1939 size
= WideCharToMultiByte(cp
, 0, &wch
, 1, s
, MB_LEN_MAX
, NULL
, &def
);
1948 /* ?_Donarrow@?$ctype@_W@std@@IBED_WD@Z */
1949 /* ?_Donarrow@?$ctype@_W@std@@IEBAD_WD@Z */
1950 /* ?_Donarrow@?$ctype@G@std@@IBEDGD@Z */
1951 /* ?_Donarrow@?$ctype@G@std@@IEBADGD@Z */
1952 DEFINE_THISCALL_WRAPPER(ctype_wchar__Donarrow
, 12)
1953 char __thiscall
ctype_wchar__Donarrow(const ctype_wchar
*this, wchar_t ch
, char dflt
)
1955 char buf
[MB_LEN_MAX
];
1957 TRACE("(%p %d %d)\n", this, ch
, dflt
);
1959 return _Wcrtomb(buf
, ch
, NULL
, &this->cvt
)==1 ? buf
[0] : dflt
;
1962 /* ?do_narrow@?$ctype@_W@std@@MBED_WD@Z */
1963 /* ?do_narrow@?$ctype@_W@std@@MEBAD_WD@Z */
1964 /* ?do_narrow@?$ctype@G@std@@MBEDGD@Z */
1965 /* ?do_narrow@?$ctype@G@std@@MEBADGD@Z */
1966 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow_ch
, 12)
1967 #define call_ctype_wchar_do_narrow_ch(this, ch, dflt) CALL_VTBL_FUNC(this, 48, \
1968 char, (const ctype_wchar*, wchar_t, char), (this, ch, dflt))
1969 char __thiscall
ctype_wchar_do_narrow_ch(const ctype_wchar
*this, wchar_t ch
, char dflt
)
1971 return ctype_wchar__Donarrow(this, ch
, dflt
);
1974 /* ?do_narrow@?$ctype@_W@std@@MBEPB_WPB_W0DPAD@Z */
1975 /* ?do_narrow@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD@Z */
1976 /* ?do_narrow@?$ctype@G@std@@MBEPBGPBG0DPAD@Z */
1977 /* ?do_narrow@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD@Z */
1978 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow
, 20)
1979 #define call_ctype_wchar_do_narrow(this, first, last, dflt, dest) CALL_VTBL_FUNC(this, 44, \
1980 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*), \
1981 (this, first, last, dflt, dest))
1982 const wchar_t* __thiscall
ctype_wchar_do_narrow(const ctype_wchar
*this,
1983 const wchar_t *first
, const wchar_t *last
, char dflt
, char *dest
)
1985 TRACE("(%p %p %p %d %p)\n", this, first
, last
, dflt
, dest
);
1986 for(; first
<last
; first
++)
1987 *dest
++ = ctype_wchar__Donarrow(this, *first
, dflt
);
1991 /* ?narrow@?$ctype@_W@std@@QBED_WD@Z */
1992 /* ?narrow@?$ctype@_W@std@@QEBAD_WD@Z */
1993 /* ?narrow@?$ctype@G@std@@QBEDGD@Z */
1994 /* ?narrow@?$ctype@G@std@@QEBADGD@Z */
1995 DEFINE_THISCALL_WRAPPER(ctype_wchar_narrow_ch
, 12)
1996 char __thiscall
ctype_wchar_narrow_ch(const ctype_wchar
*this, wchar_t ch
, char dflt
)
1998 TRACE("(%p %d %d)\n", this, ch
, dflt
);
1999 return call_ctype_wchar_do_narrow_ch(this, ch
, dflt
);
2002 /* ?narrow@?$ctype@_W@std@@QBEPB_WPB_W0DPAD@Z */
2003 /* ?narrow@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD@Z */
2004 /* ?narrow@?$ctype@G@std@@QBEPBGPBG0DPAD@Z */
2005 /* ?narrow@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD@Z */
2006 DEFINE_THISCALL_WRAPPER(ctype_wchar_narrow
, 20)
2007 const wchar_t* __thiscall
ctype_wchar_narrow(const ctype_wchar
*this,
2008 const wchar_t *first
, const wchar_t *last
, char dflt
, char *dest
)
2010 TRACE("(%p %p %p %d %p)\n", this, first
, last
, dflt
, dest
);
2011 return call_ctype_wchar_do_narrow(this, first
, last
, dflt
, dest
);
2015 int __cdecl
_Mbrtowc(wchar_t *out
, const char *in
, MSVCP_size_t len
, int *state
, const _Cvtvec
*cvt
)
2021 TRACE("(%p %p %lu %p %p)\n", out
, in
, len
, state
, cvt
);
2029 cp
= ___lc_codepage_func();
2033 *out
= (unsigned char)*in
;
2040 ((char*)state
)[1] = *in
;
2042 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, (char*)state
, 2, out
, out
? 1 : 0)) {
2052 GetCPInfo(cp
, &cp_info
);
2054 for(i
=0; i
<MAX_LEADBYTES
; i
+=2) {
2055 if(!cp_info
.LeadByte
[i
+1])
2057 if((unsigned char)*in
>=cp_info
.LeadByte
[i
] && (unsigned char)*in
<=cp_info
.LeadByte
[i
+1]) {
2065 *state
= (unsigned char)*in
;
2069 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, in
, 2, out
, out
? 1 : 0)) {
2076 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, in
, 1, out
, out
? 1 : 0)) {
2083 /* ?_Dowiden@?$ctype@_W@std@@IBE_WD@Z */
2084 /* ?_Dowiden@?$ctype@_W@std@@IEBA_WD@Z */
2085 /* ?_Dowiden@?$ctype@G@std@@IBEGD@Z */
2086 /* ?_Dowiden@?$ctype@G@std@@IEBAGD@Z */
2087 DEFINE_THISCALL_WRAPPER(ctype_wchar__Dowiden
, 8)
2088 wchar_t __thiscall
ctype_wchar__Dowiden(const ctype_wchar
*this, char ch
)
2092 TRACE("(%p %d)\n", this, ch
);
2093 return _Mbrtowc(&ret
, &ch
, 1, &state
, &this->cvt
)<0 ? WEOF
: ret
;
2096 /* ?do_widen@?$ctype@_W@std@@MBE_WD@Z */
2097 /* ?do_widen@?$ctype@_W@std@@MEBA_WD@Z */
2098 /* ?do_widen@?$ctype@G@std@@MBEGD@Z */
2099 /* ?do_widen@?$ctype@G@std@@MEBAGD@Z */
2100 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_widen_ch
, 8)
2101 #define call_ctype_wchar_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 40, \
2102 wchar_t, (const ctype_wchar*, char), (this, ch))
2103 wchar_t __thiscall
ctype_wchar_do_widen_ch(const ctype_wchar
*this, char ch
)
2105 return ctype_wchar__Dowiden(this, ch
);
2108 /* ?do_widen@?$ctype@_W@std@@MBEPBDPBD0PA_W@Z */
2109 /* ?do_widen@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W@Z */
2110 /* ?do_widen@?$ctype@G@std@@MBEPBDPBD0PAG@Z */
2111 /* ?do_widen@?$ctype@G@std@@MEBAPEBDPEBD0PEAG@Z */
2112 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_widen
, 16)
2113 #define call_ctype_wchar_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 36, \
2114 const char*, (const ctype_wchar*, const char*, const char*, wchar_t*), \
2115 (this, first, last, dest))
2116 const char* __thiscall
ctype_wchar_do_widen(const ctype_wchar
*this,
2117 const char *first
, const char *last
, wchar_t *dest
)
2119 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2120 for(; first
<last
; first
++)
2121 *dest
++ = ctype_wchar__Dowiden(this, *first
);
2125 /* ?widen@?$ctype@_W@std@@QBE_WD@Z */
2126 /* ?widen@?$ctype@_W@std@@QEBA_WD@Z */
2127 /* ?widen@?$ctype@G@std@@QBEGD@Z */
2128 /* ?widen@?$ctype@G@std@@QEBAGD@Z */
2129 DEFINE_THISCALL_WRAPPER(ctype_wchar_widen_ch
, 8)
2130 wchar_t __thiscall
ctype_wchar_widen_ch(const ctype_wchar
*this, char ch
)
2132 TRACE("(%p %d)\n", this, ch
);
2133 return call_ctype_wchar_do_widen_ch(this, ch
);
2136 /* ?widen@?$ctype@_W@std@@QBEPBDPBD0PA_W@Z */
2137 /* ?widen@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W@Z */
2138 /* ?widen@?$ctype@G@std@@QBEPBDPBD0PAG@Z */
2139 /* ?widen@?$ctype@G@std@@QEBAPEBDPEBD0PEAG@Z */
2140 DEFINE_THISCALL_WRAPPER(ctype_wchar_widen
, 16)
2141 const char* __thiscall
ctype_wchar_widen(const ctype_wchar
*this,
2142 const char *first
, const char *last
, wchar_t *dest
)
2144 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2145 return call_ctype_wchar_do_widen(this, first
, last
, dest
);
2148 /* ?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2149 /* ?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2150 static MSVCP_size_t
ctype_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
2152 TRACE("(%p %p)\n", facet
, loc
);
2154 if(facet
&& !*facet
) {
2157 *facet
= MSVCRT_operator_new(sizeof(ctype_wchar
));
2159 ERR("Out of memory\n");
2160 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
2164 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
2165 ctype_wchar_ctor_locinfo((ctype_wchar
*)*facet
, &locinfo
, 0);
2166 _Locinfo_dtor(&locinfo
);
2172 /* ?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@@Z */
2173 /* ?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
2174 MSVCP_size_t __cdecl
ctype_wchar__Getcat_old(const locale_facet
**facet
)
2176 return ctype_wchar__Getcat(facet
, locale_classic());
2179 /* ?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2180 /* ?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2181 static MSVCP_size_t
ctype_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
2183 if(facet
&& !*facet
) {
2184 ctype_wchar__Getcat(facet
, loc
);
2185 (*(locale_facet
**)facet
)->vtable
= &MSVCP_ctype_short_vtable
;
2191 /* ?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@@Z */
2192 /* ?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
2193 MSVCP_size_t __cdecl
ctype_short__Getcat_old(const locale_facet
**facet
)
2195 return ctype_short__Getcat(facet
, locale_classic());
2199 wchar_t __cdecl
_Towlower(wchar_t ch
, const _Ctypevec
*ctype
)
2201 TRACE("(%d %p)\n", ch
, ctype
);
2202 return tolowerW(ch
);
2205 ctype_wchar
* ctype_wchar_use_facet(const locale
*loc
)
2207 static ctype_wchar
*obj
= NULL
;
2210 const locale_facet
*fac
;
2212 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
2213 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_wchar_id
));
2215 _Lockit_dtor(&lock
);
2216 return (ctype_wchar
*)fac
;
2220 _Lockit_dtor(&lock
);
2224 ctype_wchar__Getcat(&fac
, loc
);
2225 obj
= (ctype_wchar
*)fac
;
2226 locale_facet__Incref(&obj
->base
.facet
);
2227 locale_facet_register(&obj
->base
.facet
);
2228 _Lockit_dtor(&lock
);
2233 ctype_wchar
* ctype_short_use_facet(const locale
*loc
)
2235 static ctype_wchar
*obj
= NULL
;
2238 const locale_facet
*fac
;
2240 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
2241 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_short_id
));
2243 _Lockit_dtor(&lock
);
2244 return (ctype_wchar
*)fac
;
2248 _Lockit_dtor(&lock
);
2252 ctype_short__Getcat(&fac
, loc
);
2253 obj
= (ctype_wchar
*)fac
;
2254 locale_facet__Incref(&obj
->base
.facet
);
2255 locale_facet_register(&obj
->base
.facet
);
2256 _Lockit_dtor(&lock
);
2261 /* ?do_tolower@?$ctype@_W@std@@MBE_W_W@Z */
2262 /* ?do_tolower@?$ctype@_W@std@@MEBA_W_W@Z */
2263 /* ?do_tolower@?$ctype@G@std@@MBEGG@Z */
2264 /* ?do_tolower@?$ctype@G@std@@MEBAGG@Z */
2265 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_tolower_ch
, 8)
2266 #define call_ctype_wchar_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
2267 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2268 wchar_t __thiscall
ctype_wchar_do_tolower_ch(const ctype_wchar
*this, wchar_t ch
)
2270 return _Towlower(ch
, &this->ctype
);
2273 /* ?do_tolower@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */
2274 /* ?do_tolower@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z */
2275 /* ?do_tolower@?$ctype@G@std@@MBEPBGPAGPBG@Z */
2276 /* ?do_tolower@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */
2277 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_tolower
, 12)
2278 #define call_ctype_wchar_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 20, \
2279 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2280 (this, first, last))
2281 const wchar_t* __thiscall
ctype_wchar_do_tolower(const ctype_wchar
*this,
2282 wchar_t *first
, const wchar_t *last
)
2284 TRACE("(%p %p %p)\n", this, first
, last
);
2285 for(; first
<last
; first
++)
2286 *first
= _Towlower(*first
, &this->ctype
);
2290 /* ?tolower@?$ctype@_W@std@@QBE_W_W@Z */
2291 /* ?tolower@?$ctype@_W@std@@QEBA_W_W@Z */
2292 /* ?tolower@?$ctype@G@std@@QBEGG@Z */
2293 /* ?tolower@?$ctype@G@std@@QEBAGG@Z */
2294 DEFINE_THISCALL_WRAPPER(ctype_wchar_tolower_ch
, 8)
2295 wchar_t __thiscall
ctype_wchar_tolower_ch(const ctype_wchar
*this, wchar_t ch
)
2297 TRACE("(%p %d)\n", this, ch
);
2298 return call_ctype_wchar_do_tolower_ch(this, ch
);
2301 /* ?tolower@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */
2302 /* ?tolower@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z */
2303 /* ?tolower@?$ctype@G@std@@QBEPBGPAGPBG@Z */
2304 /* ?tolower@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z */
2305 DEFINE_THISCALL_WRAPPER(ctype_wchar_tolower
, 12)
2306 const wchar_t* __thiscall
ctype_wchar_tolower(const ctype_wchar
*this,
2307 wchar_t *first
, const wchar_t *last
)
2309 TRACE("(%p %p %p)\n", this, first
, last
);
2310 return call_ctype_wchar_do_tolower(this, first
, last
);
2314 wchar_t __cdecl
_Towupper(wchar_t ch
, const _Ctypevec
*ctype
)
2316 TRACE("(%d %p)\n", ch
, ctype
);
2317 return toupperW(ch
);
2320 /* ?do_toupper@?$ctype@_W@std@@MBE_W_W@Z */
2321 /* ?do_toupper@?$ctype@_W@std@@MEBA_W_W@Z */
2322 /* ?do_toupper@?$ctype@G@std@@MBEGG@Z */
2323 /* ?do_toupper@?$ctype@G@std@@MEBAGG@Z */
2324 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper_ch
, 8)
2325 #define call_ctype_wchar_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 32, \
2326 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2327 wchar_t __thiscall
ctype_wchar_do_toupper_ch(const ctype_wchar
*this, wchar_t ch
)
2329 return _Towupper(ch
, &this->ctype
);
2332 /* ?do_toupper@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */
2333 /* ?do_toupper@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z */
2334 /* ?do_toupper@?$ctype@G@std@@MBEPBGPAGPBG@Z */
2335 /* ?do_toupper@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */
2336 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper
, 12)
2337 #define call_ctype_wchar_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 28, \
2338 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2339 (this, first, last))
2340 const wchar_t* __thiscall
ctype_wchar_do_toupper(const ctype_wchar
*this,
2341 wchar_t *first
, const wchar_t *last
)
2343 TRACE("(%p %p %p)\n", this, first
, last
);
2344 for(; first
<last
; first
++)
2345 *first
= _Towupper(*first
, &this->ctype
);
2349 /* ?toupper@?$ctype@_W@std@@QBE_W_W@Z */
2350 /* ?toupper@?$ctype@_W@std@@QEBA_W_W@Z */
2351 /* ?toupper@?$ctype@G@std@@QBEGG@Z */
2352 /* ?toupper@?$ctype@G@std@@QEBAGG@Z */
2353 DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper_ch
, 8)
2354 wchar_t __thiscall
ctype_wchar_toupper_ch(const ctype_wchar
*this, wchar_t ch
)
2356 TRACE("(%p %d)\n", this, ch
);
2357 return call_ctype_wchar_do_toupper_ch(this, ch
);
2360 /* ?toupper@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */
2361 /* ?toupper@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z */
2362 /* ?toupper@?$ctype@G@std@@QBEPBGPAGPBG@Z */
2363 /* ?toupper@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z */
2364 DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper
, 12)
2365 const wchar_t* __thiscall
ctype_wchar_toupper(const ctype_wchar
*this,
2366 wchar_t *first
, const wchar_t *last
)
2368 TRACE("(%p %p %p)\n", this, first
, last
);
2369 return call_ctype_wchar_do_toupper(this, first
, last
);
2373 const wchar_t* __cdecl
_Getwctypes(const wchar_t *first
, const wchar_t *last
,
2374 short *mask
, const _Ctypevec
*ctype
)
2376 TRACE("(%p %p %p %p)\n", first
, last
, mask
, ctype
);
2377 GetStringTypeW(CT_CTYPE1
, first
, last
-first
, (WORD
*)mask
);
2382 short __cdecl
_Getwctype(wchar_t ch
, const _Ctypevec
*ctype
)
2385 _Getwctypes(&ch
, &ch
+1, &mask
, ctype
);
2389 /* ?do_is@?$ctype@_W@std@@MBE_NF_W@Z */
2390 /* ?do_is@?$ctype@_W@std@@MEBA_NF_W@Z */
2391 /* ?do_is@?$ctype@G@std@@MBE_NFG@Z */
2392 /* ?do_is@?$ctype@G@std@@MEBA_NFG@Z */
2393 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is_ch
, 12)
2394 #define call_ctype_wchar_do_is_ch(this, mask, ch) CALL_VTBL_FUNC(this, 8, \
2395 MSVCP_bool, (const ctype_wchar*, short, wchar_t), (this, mask, ch))
2396 MSVCP_bool __thiscall
ctype_wchar_do_is_ch(const ctype_wchar
*this, short mask
, wchar_t ch
)
2398 TRACE("(%p %x %d)\n", this, mask
, ch
);
2399 return (_Getwctype(ch
, &this->ctype
) & mask
) != 0;
2402 /* ?do_is@?$ctype@_W@std@@MBEPB_WPB_W0PAF@Z */
2403 /* ?do_is@?$ctype@_W@std@@MEBAPEB_WPEB_W0PEAF@Z */
2404 /* ?do_is@?$ctype@G@std@@MBEPBGPBG0PAF@Z */
2405 /* ?do_is@?$ctype@G@std@@MEBAPEBGPEBG0PEAF@Z */
2406 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is
, 16)
2407 #define call_ctype_wchar_do_is(this, first, last, dest) CALL_VTBL_FUNC(this, 4, \
2408 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, short*), \
2409 (this, first, last, dest))
2410 const wchar_t* __thiscall
ctype_wchar_do_is(const ctype_wchar
*this,
2411 const wchar_t *first
, const wchar_t *last
, short *dest
)
2413 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2414 return _Getwctypes(first
, last
, dest
, &this->ctype
);
2417 /* ?is@?$ctype@_W@std@@QBE_NF_W@Z */
2418 /* ?is@?$ctype@_W@std@@QEBA_NF_W@Z */
2419 /* ?is@?$ctype@G@std@@QBE_NFG@Z */
2420 /* ?is@?$ctype@G@std@@QEBA_NFG@Z */
2421 DEFINE_THISCALL_WRAPPER(ctype_wchar_is_ch
, 12)
2422 MSVCP_bool __thiscall
ctype_wchar_is_ch(const ctype_wchar
*this, short mask
, wchar_t ch
)
2424 TRACE("(%p %x %d)\n", this, mask
, ch
);
2425 return call_ctype_wchar_do_is_ch(this, mask
, ch
);
2428 /* ?is@?$ctype@_W@std@@QBEPB_WPB_W0PAF@Z */
2429 /* ?is@?$ctype@_W@std@@QEBAPEB_WPEB_W0PEAF@Z */
2430 /* ?is@?$ctype@G@std@@QBEPBGPBG0PAF@Z */
2431 /* ?is@?$ctype@G@std@@QEBAPEBGPEBG0PEAF@Z */
2432 DEFINE_THISCALL_WRAPPER(ctype_wchar_is
, 16)
2433 const wchar_t* __thiscall
ctype_wchar_is(const ctype_wchar
*this,
2434 const wchar_t *first
, const wchar_t *last
, short *dest
)
2436 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2437 return call_ctype_wchar_do_is(this, first
, last
, dest
);
2440 /* ?do_scan_is@?$ctype@_W@std@@MBEPB_WFPB_W0@Z */
2441 /* ?do_scan_is@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z */
2442 /* ?do_scan_is@?$ctype@G@std@@MBEPBGFPBG0@Z */
2443 /* ?do_scan_is@?$ctype@G@std@@MEBAPEBGFPEBG0@Z */
2444 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_scan_is
, 16)
2445 #define call_ctype_wchar_do_scan_is(this, mask, first, last) CALL_VTBL_FUNC(this, 12, \
2446 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
2447 (this, mask, first, last))
2448 const wchar_t* __thiscall
ctype_wchar_do_scan_is(const ctype_wchar
*this,
2449 short mask
, const wchar_t *first
, const wchar_t *last
)
2451 TRACE("(%p %d %p %p)\n", this, mask
, first
, last
);
2452 for(; first
<last
; first
++)
2453 if(!ctype_wchar_is_ch(this, mask
, *first
))
2458 /* ?scan_is@?$ctype@_W@std@@QBEPB_WFPB_W0@Z */
2459 /* ?scan_is@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z */
2460 /* ?scan_is@?$ctype@G@std@@QBEPBGFPBG0@Z */
2461 /* ?scan_is@?$ctype@G@std@@QEBAPEBGFPEBG0@Z */
2462 DEFINE_THISCALL_WRAPPER(ctype_wchar_scan_is
, 16)
2463 const wchar_t* __thiscall
ctype_wchar_scan_is(const ctype_wchar
*this,
2464 short mask
, const wchar_t *first
, const wchar_t *last
)
2466 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
2467 return call_ctype_wchar_do_scan_is(this, mask
, first
, last
);
2470 /* ?do_scan_not@?$ctype@_W@std@@MBEPB_WFPB_W0@Z */
2471 /* ?do_scan_not@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z */
2472 /* ?do_scan_not@?$ctype@G@std@@MBEPBGFPBG0@Z */
2473 /* ?do_scan_not@?$ctype@G@std@@MEBAPEBGFPEBG0@Z */
2474 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_scan_not
, 16)
2475 #define call_ctype_wchar_do_scan_not(this, mask, first, last) CALL_VTBL_FUNC(this, 16, \
2476 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
2477 (this, mask, first, last))
2478 const wchar_t* __thiscall
ctype_wchar_do_scan_not(const ctype_wchar
*this,
2479 short mask
, const wchar_t *first
, const wchar_t *last
)
2481 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
2482 for(; first
<last
; first
++)
2483 if(ctype_wchar_is_ch(this, mask
, *first
))
2488 /* ?scan_not@?$ctype@_W@std@@QBEPB_WFPB_W0@Z */
2489 /* ?scan_not@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z */
2490 /* ?scan_not@?$ctype@G@std@@QBEPBGFPBG0@Z */
2491 /* ?scan_not@?$ctype@G@std@@QEBAPEBGFPEBG0@Z */
2492 DEFINE_THISCALL_WRAPPER(ctype_wchar_scan_not
, 16)
2493 const wchar_t* __thiscall
ctype_wchar_scan_not(const ctype_wchar
*this,
2494 short mask
, const wchar_t *first
, const wchar_t *last
)
2496 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
2497 return call_ctype_wchar_do_scan_not(this, mask
, first
, last
);
2500 /* ??_7codecvt_base@std@@6B@ */
2501 extern const vtable_ptr MSVCP_codecvt_base_vtable
;
2503 /* ??0codecvt_base@std@@QAE@I@Z */
2504 /* ??0codecvt_base@std@@QEAA@_K@Z */
2505 DEFINE_THISCALL_WRAPPER(codecvt_base_ctor_refs
, 8)
2506 codecvt_base
* __thiscall
codecvt_base_ctor_refs(codecvt_base
*this, MSVCP_size_t refs
)
2508 TRACE("(%p %lu)\n", this, refs
);
2509 locale_facet_ctor_refs(&this->facet
, refs
);
2510 this->facet
.vtable
= &MSVCP_codecvt_base_vtable
;
2514 /* ??_Fcodecvt_base@std@@QAEXXZ */
2515 /* ??_Fcodecvt_base@std@@QEAAXXZ */
2516 DEFINE_THISCALL_WRAPPER(codecvt_base_ctor
, 4)
2517 codecvt_base
* __thiscall
codecvt_base_ctor(codecvt_base
*this)
2519 return codecvt_base_ctor_refs(this, 0);
2522 /* ??1codecvt_base@std@@UAE@XZ */
2523 /* ??1codecvt_base@std@@UEAA@XZ */
2524 DEFINE_THISCALL_WRAPPER(codecvt_base_dtor
, 4)
2525 void __thiscall
codecvt_base_dtor(codecvt_base
*this)
2527 TRACE("(%p)\n", this);
2528 locale_facet_dtor(&this->facet
);
2531 DEFINE_THISCALL_WRAPPER(codecvt_base_vector_dtor
, 8)
2532 codecvt_base
* __thiscall
codecvt_base_vector_dtor(codecvt_base
*this, unsigned int flags
)
2534 TRACE("(%p %x)\n", this, flags
);
2536 /* we have an array, with the number of elements stored before the first object */
2537 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
2539 for(i
=*ptr
-1; i
>=0; i
--)
2540 codecvt_base_dtor(this+i
);
2541 MSVCRT_operator_delete(ptr
);
2543 codecvt_base_dtor(this);
2545 MSVCRT_operator_delete(this);
2551 /* ?do_always_noconv@codecvt_base@std@@MBE_NXZ */
2552 /* ?do_always_noconv@codecvt_base@std@@MEBA_NXZ */
2553 #define call_codecvt_base_do_always_noconv(this) CALL_VTBL_FUNC(this, 4, \
2554 MSVCP_bool, (const codecvt_base*), (this))
2555 DEFINE_THISCALL_WRAPPER(codecvt_base_do_always_noconv
, 4)
2556 MSVCP_bool __thiscall
codecvt_base_do_always_noconv(const codecvt_base
*this)
2558 TRACE("(%p)\n", this);
2562 /* ?always_noconv@codecvt_base@std@@QBE_NXZ */
2563 /* ?always_noconv@codecvt_base@std@@QEBA_NXZ */
2564 DEFINE_THISCALL_WRAPPER(codecvt_base_always_noconv
, 4)
2565 MSVCP_bool __thiscall
codecvt_base_always_noconv(const codecvt_base
*this)
2567 TRACE("(%p)\n", this);
2568 return call_codecvt_base_do_always_noconv(this);
2571 /* ?do_max_length@codecvt_base@std@@MBEHXZ */
2572 /* ?do_max_length@codecvt_base@std@@MEBAHXZ */
2573 #define call_codecvt_base_do_max_length(this) CALL_VTBL_FUNC(this, 8, \
2574 int, (const codecvt_base*), (this))
2575 DEFINE_THISCALL_WRAPPER(codecvt_base_do_max_length
, 4)
2576 int __thiscall
codecvt_base_do_max_length(const codecvt_base
*this)
2578 TRACE("(%p)\n", this);
2582 /* ?max_length@codecvt_base@std@@QBEHXZ */
2583 /* ?max_length@codecvt_base@std@@QEBAHXZ */
2584 DEFINE_THISCALL_WRAPPER(codecvt_base_max_length
, 4)
2585 int __thiscall
codecvt_base_max_length(const codecvt_base
*this)
2587 TRACE("(%p)\n", this);
2588 return call_codecvt_base_do_max_length(this);
2591 /* ?do_encoding@codecvt_base@std@@MBEHXZ */
2592 /* ?do_encoding@codecvt_base@std@@MEBAHXZ */
2593 #define call_codecvt_base_do_encoding(this) CALL_VTBL_FUNC(this, 12, \
2594 int, (const codecvt_base*), (this))
2595 DEFINE_THISCALL_WRAPPER(codecvt_base_do_encoding
, 4)
2596 int __thiscall
codecvt_base_do_encoding(const codecvt_base
*this)
2598 TRACE("(%p)\n", this);
2602 /* ?encoding@codecvt_base@std@@QBEHXZ */
2603 /* ?encoding@codecvt_base@std@@QEBAHXZ */
2604 DEFINE_THISCALL_WRAPPER(codecvt_base_encoding
, 4)
2605 int __thiscall
codecvt_base_encoding(const codecvt_base
*this)
2607 TRACE("(%p)\n", this);
2608 return call_codecvt_base_do_encoding(this);
2611 /* ?id@?$codecvt@DDH@std@@2V0locale@2@A */
2612 locale_id codecvt_char_id
= {0};
2614 /* ??_7?$codecvt@DDH@std@@6B@ */
2615 extern const vtable_ptr MSVCP_codecvt_char_vtable
;
2617 /* ?_Init@?$codecvt@DDH@std@@IAEXABV_Locinfo@2@@Z */
2618 /* ?_Init@?$codecvt@DDH@std@@IEAAXAEBV_Locinfo@2@@Z */
2619 DEFINE_THISCALL_WRAPPER(codecvt_char__Init
, 8)
2620 void __thiscall
codecvt_char__Init(codecvt_char
*this, const _Locinfo
*locinfo
)
2622 TRACE("(%p %p)\n", this, locinfo
);
2625 /* ??0?$codecvt@DDH@std@@QAE@ABV_Locinfo@1@I@Z */
2626 /* ??0?$codecvt@DDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
2627 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor_locinfo
, 12)
2628 codecvt_char
* __thiscall
codecvt_char_ctor_locinfo(codecvt_char
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
2630 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
2631 codecvt_base_ctor_refs(&this->base
, refs
);
2632 this->base
.facet
.vtable
= &MSVCP_codecvt_char_vtable
;
2636 /* ??0?$codecvt@DDH@std@@QAE@I@Z */
2637 /* ??0?$codecvt@DDH@std@@QEAA@_K@Z */
2638 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor_refs
, 8)
2639 codecvt_char
* __thiscall
codecvt_char_ctor_refs(codecvt_char
*this, MSVCP_size_t refs
)
2641 return codecvt_char_ctor_locinfo(this, NULL
, refs
);
2644 /* ??_F?$codecvt@DDH@std@@QAEXXZ */
2645 /* ??_F?$codecvt@DDH@std@@QEAAXXZ */
2646 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor
, 4)
2647 codecvt_char
* __thiscall
codecvt_char_ctor(codecvt_char
*this)
2649 return codecvt_char_ctor_locinfo(this, NULL
, 0);
2652 /* ??1?$codecvt@DDH@std@@MAE@XZ */
2653 /* ??1?$codecvt@DDH@std@@MEAA@XZ */
2654 DEFINE_THISCALL_WRAPPER(codecvt_char_dtor
, 4)
2655 void __thiscall
codecvt_char_dtor(codecvt_char
*this)
2657 TRACE("(%p)\n", this);
2658 codecvt_base_dtor(&this->base
);
2661 DEFINE_THISCALL_WRAPPER(codecvt_char_vector_dtor
, 8)
2662 codecvt_char
* __thiscall
codecvt_char_vector_dtor(codecvt_char
*this, unsigned int flags
)
2664 TRACE("(%p %x)\n", this, flags
);
2666 /* we have an array, with the number of elements stored before the first object */
2667 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
2669 for(i
=*ptr
-1; i
>=0; i
--)
2670 codecvt_char_dtor(this+i
);
2671 MSVCRT_operator_delete(ptr
);
2673 codecvt_char_dtor(this);
2675 MSVCRT_operator_delete(this);
2681 /* ?_Getcat@?$codecvt@DDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2682 /* ?_Getcat@?$codecvt@DDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2683 static MSVCP_size_t
codecvt_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
2685 TRACE("(%p %p)\n", facet
, loc
);
2687 if(facet
&& !*facet
) {
2688 *facet
= MSVCRT_operator_new(sizeof(codecvt_char
));
2690 ERR("Out of memory\n");
2691 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
2694 codecvt_char_ctor((codecvt_char
*)*facet
);
2700 /* ?_Getcat@?$codecvt@DDH@std@@SAIPAPBVfacet@locale@2@@Z */
2701 /* ?_Getcat@?$codecvt@DDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
2702 MSVCP_size_t __cdecl
codecvt_char__Getcat_old(const locale_facet
**facet
)
2704 return codecvt_char__Getcat(facet
, locale_classic());
2707 codecvt_char
* codecvt_char_use_facet(const locale
*loc
)
2709 static codecvt_char
*obj
= NULL
;
2712 const locale_facet
*fac
;
2714 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
2715 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_char_id
));
2717 _Lockit_dtor(&lock
);
2718 return (codecvt_char
*)fac
;
2722 _Lockit_dtor(&lock
);
2726 codecvt_char__Getcat(&fac
, loc
);
2727 obj
= (codecvt_char
*)fac
;
2728 locale_facet__Incref(&obj
->base
.facet
);
2729 locale_facet_register(&obj
->base
.facet
);
2730 _Lockit_dtor(&lock
);
2735 /* ?do_in@?$codecvt@DDH@std@@MBEHAAHPBD1AAPBDPAD3AAPAD@Z */
2736 /* ?do_in@?$codecvt@DDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
2737 #define call_codecvt_char_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
2738 CALL_VTBL_FUNC(this, 16, int, \
2739 (const codecvt_char*, int*, const char*, const char*, const char**, char*, char*, char**), \
2740 (this, state, from, from_end, from_next, to, to_end, to_next))
2741 DEFINE_THISCALL_WRAPPER(codecvt_char_do_in
, 32)
2742 int __thiscall
codecvt_char_do_in(const codecvt_char
*this, int *state
,
2743 const char *from
, const char *from_end
, const char **from_next
,
2744 char *to
, char *to_end
, char **to_next
)
2746 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
2747 from_next
, to
, to_end
, to_next
);
2750 return CODECVT_noconv
;
2753 /* ?in@?$codecvt@DDH@std@@QBEHAAHPBD1AAPBDPAD3AAPAD@Z */
2754 /* ?in@?$codecvt@DDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
2755 DEFINE_THISCALL_WRAPPER(codecvt_char_in
, 32)
2756 int __thiscall
codecvt_char_in(const codecvt_char
*this, int *state
,
2757 const char *from
, const char *from_end
, const char **from_next
,
2758 char *to
, char *to_end
, char **to_next
)
2760 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
2761 from_next
, to
, to_end
, to_next
);
2762 return call_codecvt_char_do_in(this, state
, from
, from_end
, from_next
,
2763 to
, to_end
, to_next
);
2766 /* ?do_out@?$codecvt@DDH@std@@MBEHAAHPBD1AAPBDPAD3AAPAD@Z */
2767 /* ?do_out@?$codecvt@DDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
2768 #define call_codecvt_char_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
2769 CALL_VTBL_FUNC(this, 20, int, \
2770 (const codecvt_char*, int*, const char*, const char*, const char**, char*, char*, char**), \
2771 (this, state, from, from_end, from_next, to, to_end, to_next))
2772 DEFINE_THISCALL_WRAPPER(codecvt_char_do_out
, 32)
2773 int __thiscall
codecvt_char_do_out(const codecvt_char
*this, int *state
,
2774 const char *from
, const char *from_end
, const char **from_next
,
2775 char *to
, char *to_end
, char **to_next
)
2777 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
2778 from_end
, from_next
, to
, to_end
, to_next
);
2781 return CODECVT_noconv
;
2784 /* ?out@?$codecvt@DDH@std@@QBEHAAHPBD1AAPBDPAD3AAPAD@Z */
2785 /* ?out@?$codecvt@DDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
2786 DEFINE_THISCALL_WRAPPER(codecvt_char_out
, 32)
2787 int __thiscall
codecvt_char_out(const codecvt_char
*this, int *state
,
2788 const char *from
, const char *from_end
, const char **from_next
,
2789 char *to
, char *to_end
, char **to_next
)
2791 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
2792 from_next
, to
, to_end
, to_next
);
2793 return call_codecvt_char_do_out(this, state
, from
, from_end
, from_next
,
2794 to
, to_end
, to_next
);
2797 /* ?do_unshift@?$codecvt@DDH@std@@MBEHAAHPAD1AAPAD@Z */
2798 /* ?do_unshift@?$codecvt@DDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
2799 #define call_codecvt_char_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 24, \
2800 int, (const codecvt_char*, int*, char*, char*, char**), (this, state, to, to_end, to_next))
2801 DEFINE_THISCALL_WRAPPER(codecvt_char_do_unshift
, 20)
2802 int __thiscall
codecvt_char_do_unshift(const codecvt_char
*this,
2803 int *state
, char *to
, char *to_end
, char **to_next
)
2805 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
2807 return CODECVT_noconv
;
2810 /* ?unshift@?$codecvt@DDH@std@@QBEHAAHPAD1AAPAD@Z */
2811 /* ?unshift@?$codecvt@DDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
2812 DEFINE_THISCALL_WRAPPER(codecvt_char_unshift
, 20)
2813 int __thiscall
codecvt_char_unshift(const codecvt_char
*this,
2814 int *state
, char *to
, char *to_end
, char **to_next
)
2816 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
2817 return call_codecvt_char_do_unshift(this, state
, to
, to_end
, to_next
);
2820 /* ?do_length@?$codecvt@DDH@std@@MBEHABHPBD1I@Z */
2821 /* ?do_length@?$codecvt@DDH@std@@MEBAHAEBHPEBD1_K@Z */
2822 #define call_codecvt_char_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 28, \
2823 int, (const codecvt_char*, const int*, const char*, const char*, MSVCP_size_t), \
2824 (this, state, from, from_end, max))
2825 DEFINE_THISCALL_WRAPPER(codecvt_char_do_length
, 20)
2826 int __thiscall
codecvt_char_do_length(const codecvt_char
*this, const int *state
,
2827 const char *from
, const char *from_end
, MSVCP_size_t max
)
2829 TRACE("(%p %p %p %p %lu)\n", this, state
, from
, from_end
, max
);
2830 return (from_end
-from
> max
? max
: from_end
-from
);
2833 /* ?length@?$codecvt@DDH@std@@QBEHABHPBD1I@Z */
2834 /* ?length@?$codecvt@DDH@std@@QEBAHAEBHPEBD1_K@Z */
2835 DEFINE_THISCALL_WRAPPER(codecvt_char_length
, 20)
2836 int __thiscall
codecvt_char_length(const codecvt_char
*this, const int *state
,
2837 const char *from
, const char *from_end
, MSVCP_size_t max
)
2839 TRACE("(%p %p %p %p %lu)\n", this, state
, from
, from_end
, max
);
2840 return call_codecvt_char_do_length(this, state
, from
, from_end
, max
);
2843 /* ?id@?$codecvt@_WDH@std@@2V0locale@2@A */
2844 locale_id codecvt_wchar_id
= {0};
2845 /* ?id@?$codecvt@GDH@std@@2V0locale@2@A */
2846 locale_id codecvt_short_id
= {0};
2848 /* ??_7?$codecvt@_WDH@std@@6B@ */
2849 extern const vtable_ptr MSVCP_codecvt_wchar_vtable
;
2850 /* ??_7?$codecvt@GDH@std@@6B@ */
2851 extern const vtable_ptr MSVCP_codecvt_short_vtable
;
2853 /* ?_Init@?$codecvt@GDH@std@@IAEXABV_Locinfo@2@@Z */
2854 /* ?_Init@?$codecvt@GDH@std@@IEAAXAEBV_Locinfo@2@@Z */
2855 /* ?_Init@?$codecvt@_WDH@std@@IAEXABV_Locinfo@2@@Z */
2856 /* ?_Init@?$codecvt@_WDH@std@@IEAAXAEBV_Locinfo@2@@Z */
2857 DEFINE_THISCALL_WRAPPER(codecvt_wchar__Init
, 8)
2858 void __thiscall
codecvt_wchar__Init(codecvt_wchar
*this, const _Locinfo
*locinfo
)
2860 TRACE("(%p %p)\n", this, locinfo
);
2861 _Locinfo__Getcvt(locinfo
, &this->cvt
);
2864 /* ??0?$codecvt@_WDH@std@@QAE@ABV_Locinfo@1@I@Z */
2865 /* ??0?$codecvt@_WDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
2866 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor_locinfo
, 12)
2867 codecvt_wchar
* __thiscall
codecvt_wchar_ctor_locinfo(codecvt_wchar
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
2869 TRACE("(%p %p %ld)\n", this, locinfo
, refs
);
2871 codecvt_base_ctor_refs(&this->base
, refs
);
2872 this->base
.facet
.vtable
= &MSVCP_codecvt_wchar_vtable
;
2874 codecvt_wchar__Init(this, locinfo
);
2878 /* ??0?$codecvt@GDH@std@@QAE@ABV_Locinfo@1@I@Z */
2879 /* ??0?$codecvt@GDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
2880 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor_locinfo
, 12)
2881 codecvt_wchar
* __thiscall
codecvt_short_ctor_locinfo(codecvt_wchar
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
2883 TRACE("(%p %p %ld)\n", this, locinfo
, refs
);
2885 codecvt_wchar_ctor_locinfo(this, locinfo
, refs
);
2886 this->base
.facet
.vtable
= &MSVCP_codecvt_short_vtable
;
2890 /* ??0?$codecvt@_WDH@std@@QAE@I@Z */
2891 /* ??0?$codecvt@_WDH@std@@QEAA@_K@Z */
2892 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor_refs
, 8)
2893 codecvt_wchar
* __thiscall
codecvt_wchar_ctor_refs(codecvt_wchar
*this, MSVCP_size_t refs
)
2897 TRACE("(%p %ld)\n", this, refs
);
2899 _Locinfo_ctor(&locinfo
);
2900 codecvt_wchar_ctor_locinfo(this, &locinfo
, refs
);
2901 _Locinfo_dtor(&locinfo
);
2905 /* ??0?$codecvt@GDH@std@@QAE@I@Z */
2906 /* ??0?$codecvt@GDH@std@@QEAA@_K@Z */
2907 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor_refs
, 8)
2908 codecvt_wchar
* __thiscall
codecvt_short_ctor_refs(codecvt_wchar
*this, MSVCP_size_t refs
)
2912 TRACE("(%p %ld)\n", this, refs
);
2914 _Locinfo_ctor(&locinfo
);
2915 codecvt_short_ctor_locinfo(this, &locinfo
, refs
);
2916 _Locinfo_dtor(&locinfo
);
2920 /* ??_F?$codecvt@_WDH@std@@QAEXXZ */
2921 /* ??_F?$codecvt@_WDH@std@@QEAAXXZ */
2922 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor
, 4)
2923 codecvt_wchar
* __thiscall
codecvt_wchar_ctor(codecvt_wchar
*this)
2925 return codecvt_wchar_ctor_refs(this, 0);
2928 /* ??_F?$codecvt@GDH@std@@QAEXXZ */
2929 /* ??_F?$codecvt@GDH@std@@QEAAXXZ */
2930 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor
, 4)
2931 codecvt_wchar
* __thiscall
codecvt_short_ctor(codecvt_wchar
*this)
2933 return codecvt_short_ctor_refs(this, 0);
2936 /* ??1?$codecvt@GDH@std@@MAE@XZ */
2937 /* ??1?$codecvt@GDH@std@@MEAA@XZ */
2938 /* ??1?$codecvt@_WDH@std@@MAE@XZ */
2939 /* ??1?$codecvt@_WDH@std@@MEAA@XZ */
2940 DEFINE_THISCALL_WRAPPER(codecvt_wchar_dtor
, 4)
2941 void __thiscall
codecvt_wchar_dtor(codecvt_wchar
*this)
2943 TRACE("(%p)\n", this);
2944 codecvt_base_dtor(&this->base
);
2947 DEFINE_THISCALL_WRAPPER(codecvt_wchar_vector_dtor
, 8)
2948 codecvt_wchar
* __thiscall
codecvt_wchar_vector_dtor(codecvt_wchar
*this, unsigned int flags
)
2950 TRACE("(%p %x)\n", this, flags
);
2952 /* we have an array, with the number of elements stored before the first object */
2953 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
2955 for(i
=*ptr
-1; i
>=0; i
--)
2956 codecvt_wchar_dtor(this+i
);
2957 MSVCRT_operator_delete(ptr
);
2959 codecvt_wchar_dtor(this);
2961 MSVCRT_operator_delete(this);
2967 /* ?_Getcat@?$codecvt@_WDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2968 /* ?_Getcat@?$codecvt@_WDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2969 static MSVCP_size_t
codecvt_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
2971 TRACE("(%p %p)\n", facet
, loc
);
2973 if(facet
&& !*facet
) {
2976 *facet
= MSVCRT_operator_new(sizeof(codecvt_wchar
));
2978 ERR("Out of memory\n");
2979 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
2983 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
2984 codecvt_wchar_ctor_locinfo((codecvt_wchar
*)*facet
, &locinfo
, 0);
2985 _Locinfo_dtor(&locinfo
);
2991 /* ?_Getcat@?$codecvt@_WDH@std@@SAIPAPBVfacet@locale@2@@Z */
2992 /* ?_Getcat@?$codecvt@_WDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
2993 MSVCP_size_t __cdecl
codecvt_wchar__Getcat_old(const locale_facet
**facet
)
2995 return codecvt_wchar__Getcat(facet
, locale_classic());
2998 codecvt_wchar
* codecvt_wchar_use_facet(const locale
*loc
)
3000 static codecvt_wchar
*obj
= NULL
;
3003 const locale_facet
*fac
;
3005 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3006 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_wchar_id
));
3008 _Lockit_dtor(&lock
);
3009 return (codecvt_wchar
*)fac
;
3013 _Lockit_dtor(&lock
);
3017 codecvt_wchar__Getcat(&fac
, loc
);
3018 obj
= (codecvt_wchar
*)fac
;
3019 locale_facet__Incref(&obj
->base
.facet
);
3020 locale_facet_register(&obj
->base
.facet
);
3021 _Lockit_dtor(&lock
);
3026 /* ?_Getcat@?$codecvt@GDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3027 /* ?_Getcat@?$codecvt@GDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3028 static MSVCP_size_t
codecvt_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
3030 TRACE("(%p %p)\n", facet
, loc
);
3032 if(facet
&& !*facet
) {
3035 *facet
= MSVCRT_operator_new(sizeof(codecvt_wchar
));
3037 ERR("Out of memory\n");
3038 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3042 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
3043 codecvt_short_ctor((codecvt_wchar
*)*facet
);
3044 _Locinfo_dtor(&locinfo
);
3050 /* ?_Getcat@?$codecvt@GDH@std@@SAIPAPBVfacet@locale@2@@Z */
3051 /* ?_Getcat@?$codecvt@GDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3052 MSVCP_size_t __cdecl
codecvt_short__Getcat_old(const locale_facet
**facet
)
3054 return codecvt_short__Getcat(facet
, locale_classic());
3057 codecvt_wchar
* codecvt_short_use_facet(const locale
*loc
)
3059 static codecvt_wchar
*obj
= NULL
;
3062 const locale_facet
*fac
;
3064 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3065 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_short_id
));
3067 _Lockit_dtor(&lock
);
3068 return (codecvt_wchar
*)fac
;
3072 _Lockit_dtor(&lock
);
3076 codecvt_short__Getcat(&fac
, loc
);
3077 obj
= (codecvt_wchar
*)fac
;
3078 locale_facet__Incref(&obj
->base
.facet
);
3079 locale_facet_register(&obj
->base
.facet
);
3080 _Lockit_dtor(&lock
);
3085 /* ?do_always_noconv@?$codecvt@GDH@std@@MBE_NXZ */
3086 /* ?do_always_noconv@?$codecvt@GDH@std@@MEBA_NXZ */
3087 /* ?do_always_noconv@?$codecvt@_WDH@std@@MBE_NXZ */
3088 /* ?do_always_noconv@?$codecvt@_WDH@std@@MEBA_NXZ */
3089 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_always_noconv
, 4)
3090 MSVCP_bool __thiscall
codecvt_wchar_do_always_noconv(const codecvt_wchar
*this)
3092 TRACE("(%p)\n", this);
3096 /* ?do_max_length@?$codecvt@GDH@std@@MBEHXZ */
3097 /* ?do_max_length@?$codecvt@GDH@std@@MEBAHXZ */
3098 /* ?do_max_length@?$codecvt@_WDH@std@@MBEHXZ */
3099 /* ?do_max_length@?$codecvt@_WDH@std@@MEBAHXZ */
3100 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_max_length
, 4)
3101 int __thiscall
codecvt_wchar_do_max_length(const codecvt_wchar
*this)
3103 TRACE("(%p)\n", this);
3107 /* ?do_in@?$codecvt@GDH@std@@MBEHAAHPBD1AAPBDPAG3AAPAG@Z */
3108 /* ?do_in@?$codecvt@GDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAG3AEAPEAG@Z */
3109 /* ?do_in@?$codecvt@_WDH@std@@MBEHAAHPBD1AAPBDPA_W3AAPA_W@Z */
3110 /* ?do_in@?$codecvt@_WDH@std@@MEBAHAEAHPEBD1AEAPEBDPEA_W3AEAPEA_W@Z */
3111 #define call_codecvt_wchar_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
3112 CALL_VTBL_FUNC(this, 16, int, \
3113 (const codecvt_wchar*, int*, const char*, const char*, const char**, wchar_t*, wchar_t*, wchar_t**), \
3114 (this, state, from, from_end, from_next, to, to_end, to_next))
3115 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_in
, 32)
3116 int __thiscall
codecvt_wchar_do_in(const codecvt_wchar
*this, int *state
,
3117 const char *from
, const char *from_end
, const char **from_next
,
3118 wchar_t *to
, wchar_t *to_end
, wchar_t **to_next
)
3120 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3121 from_end
, from_next
, to
, to_end
, to_next
);
3126 while(*from_next
!=from_end
&& *to_next
!=to_end
) {
3127 switch(_Mbrtowc(*to_next
, *from_next
, from_end
-*from_next
, state
, &this->cvt
)) {
3129 *from_next
= from_end
;
3130 return CODECVT_partial
;
3132 return CODECVT_error
;
3146 /* ?in@?$codecvt@GDH@std@@QBEHAAHPBD1AAPBDPAG3AAPAG@Z */
3147 /* ?in@?$codecvt@GDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAG3AEAPEAG@Z */
3148 /* ?in@?$codecvt@_WDH@std@@QBEHAAHPBD1AAPBDPA_W3AAPA_W@Z */
3149 /* ?in@?$codecvt@_WDH@std@@QEBAHAEAHPEBD1AEAPEBDPEA_W3AEAPEA_W@Z */
3150 DEFINE_THISCALL_WRAPPER(codecvt_wchar_in
, 32)
3151 int __thiscall
codecvt_wchar_in(const codecvt_wchar
*this, int *state
,
3152 const char *from
, const char *from_end
, const char **from_next
,
3153 wchar_t *to
, wchar_t *to_end
, wchar_t **to_next
)
3155 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3156 from_end
, from_next
, to
, to_end
, to_next
);
3157 return call_codecvt_wchar_do_in(this, state
, from
,
3158 from_end
, from_next
, to
, to_end
, to_next
);
3161 /* ?do_out@?$codecvt@GDH@std@@MBEHAAHPBG1AAPBGPAD3AAPAD@Z */
3162 /* ?do_out@?$codecvt@GDH@std@@MEBAHAEAHPEBG1AEAPEBGPEAD3AEAPEAD@Z */
3163 /* ?do_out@?$codecvt@_WDH@std@@MBEHAAHPB_W1AAPB_WPAD3AAPAD@Z */
3164 /* ?do_out@?$codecvt@_WDH@std@@MEBAHAEAHPEB_W1AEAPEB_WPEAD3AEAPEAD@Z */
3165 #define call_codecvt_wchar_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
3166 CALL_VTBL_FUNC(this, 20, int, \
3167 (const codecvt_wchar*, int*, const wchar_t*, const wchar_t*, const wchar_t**, char*, char*, char**), \
3168 (this, state, from, from_end, from_next, to, to_end, to_next))
3169 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_out
, 32)
3170 int __thiscall
codecvt_wchar_do_out(const codecvt_wchar
*this, int *state
,
3171 const wchar_t *from
, const wchar_t *from_end
, const wchar_t **from_next
,
3172 char *to
, char *to_end
, char **to_next
)
3174 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3175 from_end
, from_next
, to
, to_end
, to_next
);
3180 while(*from_next
!=from_end
&& *to_next
!=to_end
) {
3181 int old_state
= *state
, size
;
3182 char buf
[MB_LEN_MAX
];
3184 switch((size
= _Wcrtomb(buf
, **from_next
, state
, &this->cvt
))) {
3186 return CODECVT_error
;
3188 if(size
> from_end
-*from_next
) {
3190 return CODECVT_partial
;
3194 memcpy_s(*to_next
, to_end
-*to_next
, buf
, size
);
3202 /* ?out@?$codecvt@GDH@std@@QBEHAAHPBG1AAPBGPAD3AAPAD@Z */
3203 /* ?out@?$codecvt@GDH@std@@QEBAHAEAHPEBG1AEAPEBGPEAD3AEAPEAD@Z */
3204 /* ?out@?$codecvt@_WDH@std@@QBEHAAHPB_W1AAPB_WPAD3AAPAD@Z */
3205 /* ?out@?$codecvt@_WDH@std@@QEBAHAEAHPEB_W1AEAPEB_WPEAD3AEAPEAD@Z */
3206 DEFINE_THISCALL_WRAPPER(codecvt_wchar_out
, 32)
3207 int __thiscall
codecvt_wchar_out(const codecvt_wchar
*this, int *state
,
3208 const wchar_t *from
, const wchar_t *from_end
, const wchar_t **from_next
,
3209 char *to
, char *to_end
, char **to_next
)
3211 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3212 from_end
, from_next
, to
, to_end
, to_next
);
3213 return call_codecvt_wchar_do_out(this, state
, from
,
3214 from_end
, from_next
, to
, to_end
, to_next
);
3217 /* ?do_unshift@?$codecvt@GDH@std@@MBEHAAHPAD1AAPAD@Z */
3218 /* ?do_unshift@?$codecvt@GDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
3219 /* ?do_unshift@?$codecvt@_WDH@std@@MBEHAAHPAD1AAPAD@Z */
3220 /* ?do_unshift@?$codecvt@_WDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
3221 #define call_codecvt_wchar_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 24, \
3222 int, (const codecvt_wchar*, int*, char*, char*, char**), (this, state, to, to_end, to_next))
3223 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_unshift
, 20)
3224 int __thiscall
codecvt_wchar_do_unshift(const codecvt_wchar
*this,
3225 int *state
, char *to
, char *to_end
, char **to_next
)
3227 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3229 WARN("unexpected state: %x\n", *state
);
3235 /* ?unshift@?$codecvt@GDH@std@@QBEHAAHPAD1AAPAD@Z */
3236 /* ?unshift@?$codecvt@GDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
3237 /* ?unshift@?$codecvt@_WDH@std@@QBEHAAHPAD1AAPAD@Z */
3238 /* ?unshift@?$codecvt@_WDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
3239 DEFINE_THISCALL_WRAPPER(codecvt_wchar_unshift
, 20)
3240 int __thiscall
codecvt_wchar_unshift(const codecvt_wchar
*this,
3241 int *state
, char *to
, char *to_end
, char **to_next
)
3243 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3244 return call_codecvt_wchar_do_unshift(this, state
, to
, to_end
, to_next
);
3247 /* ?do_length@?$codecvt@GDH@std@@MBEHABHPBD1I@Z */
3248 /* ?do_length@?$codecvt@GDH@std@@MEBAHAEBHPEBD1_K@Z */
3249 /* ?do_length@?$codecvt@_WDH@std@@MBEHABHPBD1I@Z */
3250 /* ?do_length@?$codecvt@_WDH@std@@MEBAHAEBHPEBD1_K@Z */
3251 #define call_codecvt_wchar_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 28, \
3252 int, (const codecvt_wchar*, const int*, const char*, const char*, MSVCP_size_t), \
3253 (this, state, from, from_end, max))
3254 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_length
, 20)
3255 int __thiscall
codecvt_wchar_do_length(const codecvt_wchar
*this, const int *state
,
3256 const char *from
, const char *from_end
, MSVCP_size_t max
)
3258 int tmp_state
= *state
, ret
=0;
3260 TRACE("(%p %p %p %p %ld)\n", this, state
, from
, from_end
, max
);
3262 while(ret
<max
&& from
!=from_end
) {
3263 switch(_Mbrtowc(NULL
, from
, from_end
-from
, &tmp_state
, &this->cvt
)) {
3280 /* ?length@?$codecvt@GDH@std@@QBEHABHPBD1I@Z */
3281 /* ?length@?$codecvt@GDH@std@@QEBAHAEBHPEBD1_K@Z */
3282 /* ?length@?$codecvt@_WDH@std@@QBEHABHPBD1I@Z */
3283 /* ?length@?$codecvt@_WDH@std@@QEBAHAEBHPEBD1_K@Z */
3284 DEFINE_THISCALL_WRAPPER(codecvt_wchar_length
, 20)
3285 int __thiscall
codecvt_wchar_length(const codecvt_wchar
*this, const int *state
,
3286 const char *from
, const char *from_end
, MSVCP_size_t max
)
3288 TRACE("(%p %p %p %p %ld)\n", this, state
, from
, from_end
, max
);
3289 return call_codecvt_wchar_do_length(this, state
, from
, from_end
, max
);
3292 /* ?id@?$numpunct@D@std@@2V0locale@2@A */
3293 locale_id numpunct_char_id
= {0};
3295 /* ??_7?$numpunct@D@std@@6B@ */
3296 extern const vtable_ptr MSVCP_numpunct_char_vtable
;
3298 /* ?_Init@?$numpunct@D@std@@IAEXABV_Locinfo@2@_N@Z */
3299 /* ?_Init@?$numpunct@D@std@@IEAAXAEBV_Locinfo@2@_N@Z */
3300 static void numpunct_char__Init(numpunct_char
*this, const _Locinfo
*locinfo
, MSVCP_bool isdef
)
3304 TRACE("(%p %p %d)\n", this, locinfo
, isdef
);
3306 len
= strlen(_Locinfo__Getfalse(locinfo
))+1;
3307 this->false_name
= MSVCRT_operator_new(len
);
3308 if(this->false_name
)
3309 memcpy((char*)this->false_name
, _Locinfo__Getfalse(locinfo
), len
);
3311 len
= strlen(_Locinfo__Gettrue(locinfo
))+1;
3312 this->true_name
= MSVCRT_operator_new(len
);
3314 memcpy((char*)this->true_name
, _Locinfo__Gettrue(locinfo
), len
);
3317 this->grouping
= MSVCRT_operator_new(1);
3319 *(char*)this->grouping
= 0;
3324 const struct lconv
*lc
= _Locinfo__Getlconv(locinfo
);
3326 len
= strlen(lc
->grouping
)+1;
3327 this->grouping
= MSVCRT_operator_new(len
);
3329 memcpy((char*)this->grouping
, lc
->grouping
, len
);
3331 this->dp
= lc
->decimal_point
[0];
3332 this->sep
= lc
->thousands_sep
[0];
3335 if(!this->false_name
|| !this->true_name
|| !this->grouping
) {
3336 MSVCRT_operator_delete((char*)this->grouping
);
3337 MSVCRT_operator_delete((char*)this->false_name
);
3338 MSVCRT_operator_delete((char*)this->true_name
);
3340 ERR("Out of memory\n");
3341 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3345 /* ?_Tidy@?$numpunct@D@std@@AAEXXZ */
3346 /* ?_Tidy@?$numpunct@D@std@@AEAAXXZ */
3347 DEFINE_THISCALL_WRAPPER(numpunct_char__Tidy
, 4)
3348 void __thiscall
numpunct_char__Tidy(numpunct_char
*this)
3350 TRACE("(%p)\n", this);
3352 MSVCRT_operator_delete((char*)this->grouping
);
3353 MSVCRT_operator_delete((char*)this->false_name
);
3354 MSVCRT_operator_delete((char*)this->true_name
);
3357 /* ??0?$numpunct@D@std@@QAE@ABV_Locinfo@1@I_N@Z */
3358 /* ??0?$numpunct@D@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
3359 static numpunct_char
* numpunct_char_ctor_locinfo(numpunct_char
*this,
3360 const _Locinfo
*locinfo
, MSVCP_size_t refs
, MSVCP_bool usedef
)
3362 TRACE("(%p %p %lu %d)\n", this, locinfo
, refs
, usedef
);
3363 locale_facet_ctor_refs(&this->facet
, refs
);
3364 this->facet
.vtable
= &MSVCP_numpunct_char_vtable
;
3365 numpunct_char__Init(this, locinfo
, usedef
);
3369 /* ??0?$numpunct@D@std@@IAE@PBDI_N@Z */
3370 /* ??0?$numpunct@D@std@@IEAA@PEBD_K_N@Z */
3371 static numpunct_char
* numpunct_char_ctor_name(numpunct_char
*this,
3372 const char *name
, MSVCP_size_t refs
, MSVCP_bool usedef
)
3376 TRACE("(%p %s %lu %d)\n", this, debugstr_a(name
), refs
, usedef
);
3377 locale_facet_ctor_refs(&this->facet
, refs
);
3378 this->facet
.vtable
= &MSVCP_numpunct_char_vtable
;
3380 _Locinfo_ctor_cstr(&locinfo
, name
);
3381 numpunct_char__Init(this, &locinfo
, usedef
);
3382 _Locinfo_dtor(&locinfo
);
3386 /* ??0?$numpunct@D@std@@QAE@I@Z */
3387 /* ??0?$numpunct@D@std@@QEAA@_K@Z */
3388 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_refs
, 8)
3389 numpunct_char
* __thiscall
numpunct_char_ctor_refs(numpunct_char
*this, MSVCP_size_t refs
)
3391 TRACE("(%p %lu)\n", this, refs
);
3392 return numpunct_char_ctor_name(this, "C", refs
, FALSE
);
3395 /* ??_F?$numpunct@D@std@@QAEXXZ */
3396 /* ??_F?$numpunct@D@std@@QEAAXXZ */
3397 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor
, 4)
3398 numpunct_char
* __thiscall
numpunct_char_ctor(numpunct_char
*this)
3400 return numpunct_char_ctor_refs(this, 0);
3403 /* ??1?$numpunct@D@std@@MAE@XZ */
3404 /* ??1?$numpunct@D@std@@MEAA@XZ */
3405 DEFINE_THISCALL_WRAPPER(numpunct_char_dtor
, 4)
3406 void __thiscall
numpunct_char_dtor(numpunct_char
*this)
3408 TRACE("(%p)\n", this);
3409 numpunct_char__Tidy(this);
3412 DEFINE_THISCALL_WRAPPER(numpunct_char_vector_dtor
, 8)
3413 numpunct_char
* __thiscall
numpunct_char_vector_dtor(numpunct_char
*this, unsigned int flags
)
3415 TRACE("(%p %x)\n", this, flags
);
3417 /* we have an array, with the number of elements stored before the first object */
3418 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
3420 for(i
=*ptr
-1; i
>=0; i
--)
3421 numpunct_char_dtor(this+i
);
3422 MSVCRT_operator_delete(ptr
);
3424 numpunct_char_dtor(this);
3426 MSVCRT_operator_delete(this);
3432 /* ?_Getcat@?$numpunct@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3433 /* ?_Getcat@?$numpunct@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3434 static MSVCP_size_t
numpunct_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
3436 TRACE("(%p %p)\n", facet
, loc
);
3438 if(facet
&& !*facet
) {
3439 *facet
= MSVCRT_operator_new(sizeof(numpunct_char
));
3441 ERR("Out of memory\n");
3442 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3445 numpunct_char_ctor_name((numpunct_char
*)*facet
,
3446 MSVCP_basic_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
3452 /* ?_Getcat@?$numpunct@D@std@@SAIPAPBVfacet@locale@2@@Z */
3453 /* ?_Getcat@?$numpunct@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3454 MSVCP_size_t __cdecl
numpunct_char__Getcat_old(const locale_facet
**facet
)
3456 return numpunct_char__Getcat(facet
, locale_classic());
3459 static numpunct_char
* numpunct_char_use_facet(const locale
*loc
)
3461 static numpunct_char
*obj
= NULL
;
3464 const locale_facet
*fac
;
3466 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3467 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_char_id
));
3469 _Lockit_dtor(&lock
);
3470 return (numpunct_char
*)fac
;
3474 _Lockit_dtor(&lock
);
3478 numpunct_char__Getcat(&fac
, loc
);
3479 obj
= (numpunct_char
*)fac
;
3480 locale_facet__Incref(&obj
->facet
);
3481 locale_facet_register(&obj
->facet
);
3482 _Lockit_dtor(&lock
);
3487 /* ?do_decimal_point@?$numpunct@D@std@@MBEDXZ */
3488 /* ?do_decimal_point@?$numpunct@D@std@@MEBADXZ */
3489 DEFINE_THISCALL_WRAPPER(numpunct_char_do_decimal_point
, 4)
3490 #define call_numpunct_char_do_decimal_point(this) CALL_VTBL_FUNC(this, 4, \
3491 char, (const numpunct_char *this), (this))
3492 char __thiscall
numpunct_char_do_decimal_point(const numpunct_char
*this)
3494 TRACE("(%p)\n", this);
3498 /* ?decimal_point@?$numpunct@D@std@@QBEDXZ */
3499 /* ?decimal_point@?$numpunct@D@std@@QEBADXZ */
3500 DEFINE_THISCALL_WRAPPER(numpunct_char_decimal_point
, 4)
3501 char __thiscall
numpunct_char_decimal_point(const numpunct_char
*this)
3503 TRACE("(%p)\n", this);
3504 return call_numpunct_char_do_decimal_point(this);
3507 /* ?do_thousands_sep@?$numpunct@D@std@@MBEDXZ */
3508 /* ?do_thousands_sep@?$numpunct@D@std@@MEBADXZ */
3509 DEFINE_THISCALL_WRAPPER(numpunct_char_do_thousands_sep
, 4)
3510 #define call_numpunct_char_do_thousands_sep(this) CALL_VTBL_FUNC(this, 8, \
3511 char, (const numpunct_char*), (this))
3512 char __thiscall
numpunct_char_do_thousands_sep(const numpunct_char
*this)
3514 TRACE("(%p)\n", this);
3518 /* ?thousands_sep@?$numpunct@D@std@@QBEDXZ */
3519 /* ?thousands_sep@?$numpunct@D@std@@QEBADXZ */
3520 DEFINE_THISCALL_WRAPPER(numpunct_char_thousands_sep
, 4)
3521 char __thiscall
numpunct_char_thousands_sep(const numpunct_char
*this)
3523 TRACE("(%p)\n", this);
3524 return call_numpunct_char_do_thousands_sep(this);
3527 /* ?do_grouping@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3528 /* ?do_grouping@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3529 DEFINE_THISCALL_WRAPPER(numpunct_char_do_grouping
, 8)
3530 #define call_numpunct_char_do_grouping(this, ret) CALL_VTBL_FUNC(this, 12, \
3531 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
3532 basic_string_char
* __thiscall
numpunct_char_do_grouping(
3533 const numpunct_char
*this, basic_string_char
*ret
)
3535 TRACE("(%p)\n", this);
3536 return MSVCP_basic_string_char_ctor_cstr(ret
, this->grouping
);
3539 /* ?grouping@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3540 /* ?grouping@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3541 DEFINE_THISCALL_WRAPPER(numpunct_char_grouping
, 8)
3542 basic_string_char
* __thiscall
numpunct_char_grouping(const numpunct_char
*this, basic_string_char
*ret
)
3544 TRACE("(%p)\n", this);
3545 return call_numpunct_char_do_grouping(this, ret
);
3548 /* ?do_falsename@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3549 /* ?do_falsename@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3550 DEFINE_THISCALL_WRAPPER(numpunct_char_do_falsename
, 8)
3551 #define call_numpunct_char_do_falsename(this, ret) CALL_VTBL_FUNC(this, 16, \
3552 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
3553 basic_string_char
* __thiscall
numpunct_char_do_falsename(
3554 const numpunct_char
*this, basic_string_char
*ret
)
3556 TRACE("(%p)\n", this);
3557 return MSVCP_basic_string_char_ctor_cstr(ret
, this->false_name
);
3560 /* ?falsename@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3561 /* ?falsename@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3562 DEFINE_THISCALL_WRAPPER(numpunct_char_falsename
, 8)
3563 basic_string_char
* __thiscall
numpunct_char_falsename(const numpunct_char
*this, basic_string_char
*ret
)
3565 TRACE("(%p)\n", this);
3566 return call_numpunct_char_do_falsename(this, ret
);
3569 /* ?do_truename@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3570 /* ?do_truename@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3571 DEFINE_THISCALL_WRAPPER(numpunct_char_do_truename
, 8)
3572 #define call_numpunct_char_do_truename(this, ret) CALL_VTBL_FUNC(this, 20, \
3573 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
3574 basic_string_char
* __thiscall
numpunct_char_do_truename(
3575 const numpunct_char
*this, basic_string_char
*ret
)
3577 TRACE("(%p)\n", this);
3578 return MSVCP_basic_string_char_ctor_cstr(ret
, this->true_name
);
3581 /* ?truename@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3582 /* ?truename@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3583 DEFINE_THISCALL_WRAPPER(numpunct_char_truename
, 8)
3584 basic_string_char
* __thiscall
numpunct_char_truename(const numpunct_char
*this, basic_string_char
*ret
)
3586 TRACE("(%p)\n", this);
3587 return call_numpunct_char_do_truename(this, ret
);
3590 /* ?id@?$numpunct@_W@std@@2V0locale@2@A */
3591 locale_id numpunct_wchar_id
= {0};
3592 /* ?id@?$numpunct@G@std@@2V0locale@2@A */
3593 locale_id numpunct_short_id
= {0};
3595 /* ??_7?$numpunct@_W@std@@6B@ */
3596 extern const vtable_ptr MSVCP_numpunct_wchar_vtable
;
3597 /* ??_7?$numpunct@G@std@@6B@ */
3598 extern const vtable_ptr MSVCP_numpunct_short_vtable
;
3600 /* ?_Init@?$numpunct@_W@std@@IAEXABV_Locinfo@2@_N@Z */
3601 /* ?_Init@?$numpunct@_W@std@@IEAAXAEBV_Locinfo@2@_N@Z */
3602 /* ?_Init@?$numpunct@G@std@@IAEXABV_Locinfo@2@_N@Z */
3603 /* ?_Init@?$numpunct@G@std@@IEAAXAEBV_Locinfo@2@_N@Z */
3604 static void numpunct_wchar__Init(numpunct_wchar
*this,
3605 const _Locinfo
*locinfo
, MSVCP_bool isdef
)
3607 const char *to_convert
;
3611 TRACE("(%p %p %d)\n", this, locinfo
, isdef
);
3613 _Locinfo__Getcvt(locinfo
, &cvt
);
3615 to_convert
= _Locinfo__Getfalse(locinfo
);
3616 len
= MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1, NULL
, 0);
3617 this->false_name
= MSVCRT_operator_new(len
*sizeof(WCHAR
));
3618 if(this->false_name
)
3619 MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1,
3620 (wchar_t*)this->false_name
, len
);
3622 to_convert
= _Locinfo__Gettrue(locinfo
);
3623 len
= MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1, NULL
, 0);
3624 this->true_name
= MSVCRT_operator_new(len
*sizeof(WCHAR
));
3626 MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1,
3627 (wchar_t*)this->true_name
, len
);
3630 this->grouping
= MSVCRT_operator_new(1);
3632 *(char*)this->grouping
= 0;
3637 const struct lconv
*lc
= _Locinfo__Getlconv(locinfo
);
3639 len
= strlen(lc
->grouping
)+1;
3640 this->grouping
= MSVCRT_operator_new(len
);
3642 memcpy((char*)this->grouping
, lc
->grouping
, len
);
3644 this->dp
= lc
->decimal_point
[0];
3645 this->sep
= lc
->thousands_sep
[0];
3648 if(!this->false_name
|| !this->true_name
|| !this->grouping
) {
3649 MSVCRT_operator_delete((char*)this->grouping
);
3650 MSVCRT_operator_delete((wchar_t*)this->false_name
);
3651 MSVCRT_operator_delete((wchar_t*)this->true_name
);
3653 ERR("Out of memory\n");
3654 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3658 /* ?_Tidy@?$numpunct@_W@std@@AAEXXZ */
3659 /* ?_Tidy@?$numpunct@_W@std@@AEAAXXZ */
3660 /* ?_Tidy@?$numpunct@G@std@@AAEXXZ */
3661 /* ?_Tidy@?$numpunct@G@std@@AEAAXXZ */
3662 DEFINE_THISCALL_WRAPPER(numpunct_wchar__Tidy
, 4)
3663 void __thiscall
numpunct_wchar__Tidy(numpunct_wchar
*this)
3665 TRACE("(%p)\n", this);
3667 MSVCRT_operator_delete((char*)this->grouping
);
3668 MSVCRT_operator_delete((wchar_t*)this->false_name
);
3669 MSVCRT_operator_delete((wchar_t*)this->true_name
);
3672 /* ??0?$numpunct@_W@std@@QAE@ABV_Locinfo@1@I_N@Z */
3673 /* ??0?$numpunct@_W@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
3674 static numpunct_wchar
* numpunct_wchar_ctor_locinfo(numpunct_wchar
*this,
3675 const _Locinfo
*locinfo
, MSVCP_size_t refs
, MSVCP_bool usedef
)
3677 TRACE("(%p %p %lu %d)\n", this, locinfo
, refs
, usedef
);
3678 locale_facet_ctor_refs(&this->facet
, refs
);
3679 this->facet
.vtable
= &MSVCP_numpunct_wchar_vtable
;
3680 numpunct_wchar__Init(this, locinfo
, usedef
);
3684 /* ??0?$numpunct@G@std@@QAE@ABV_Locinfo@1@I_N@Z */
3685 /* ??0?$numpunct@G@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
3686 static numpunct_wchar
* numpunct_short_ctor_locinfo(numpunct_wchar
*this,
3687 const _Locinfo
*locinfo
, MSVCP_size_t refs
, MSVCP_bool usedef
)
3689 numpunct_wchar_ctor_locinfo(this, locinfo
, refs
, usedef
);
3690 this->facet
.vtable
= &MSVCP_numpunct_short_vtable
;
3694 /* ??0?$numpunct@_W@std@@IAE@PBDI_N@Z */
3695 /* ??0?$numpunct@_W@std@@IEAA@PEBD_K_N@Z */
3696 static numpunct_wchar
* numpunct_wchar_ctor_name(numpunct_wchar
*this,
3697 const char *name
, MSVCP_size_t refs
, MSVCP_bool usedef
)
3701 TRACE("(%p %s %lu %d)\n", this, debugstr_a(name
), refs
, usedef
);
3702 locale_facet_ctor_refs(&this->facet
, refs
);
3703 this->facet
.vtable
= &MSVCP_numpunct_wchar_vtable
;
3705 _Locinfo_ctor_cstr(&locinfo
, name
);
3706 numpunct_wchar__Init(this, &locinfo
, usedef
);
3707 _Locinfo_dtor(&locinfo
);
3711 /* ??0?$numpunct@G@std@@IAE@PBDI_N@Z */
3712 /* ??0?$numpunct@G@std@@IEAA@PEBD_K_N@Z */
3713 static numpunct_wchar
* numpunct_short_ctor_name(numpunct_wchar
*this,
3714 const char *name
, MSVCP_size_t refs
, MSVCP_bool usedef
)
3716 numpunct_wchar_ctor_name(this, name
, refs
, usedef
);
3717 this->facet
.vtable
= &MSVCP_numpunct_short_vtable
;
3721 /* ??0?$numpunct@_W@std@@QAE@I@Z */
3722 /* ??0?$numpunct@_W@std@@QEAA@_K@Z */
3723 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_refs
, 8)
3724 numpunct_wchar
* __thiscall
numpunct_wchar_ctor_refs(numpunct_wchar
*this, MSVCP_size_t refs
)
3726 TRACE("(%p %lu)\n", this, refs
);
3727 return numpunct_wchar_ctor_name(this, "C", refs
, FALSE
);
3730 /* ??0?$numpunct@G@std@@QAE@I@Z */
3731 /* ??0?$numpunct@G@std@@QEAA@_K@Z */
3732 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_refs
, 8)
3733 numpunct_wchar
* __thiscall
numpunct_short_ctor_refs(numpunct_wchar
*this, MSVCP_size_t refs
)
3735 numpunct_wchar_ctor_refs(this, refs
);
3736 this->facet
.vtable
= &MSVCP_numpunct_short_vtable
;
3740 /* ??_F?$numpunct@_W@std@@QAEXXZ */
3741 /* ??_F?$numpunct@_W@std@@QEAAXXZ */
3742 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor
, 4)
3743 numpunct_wchar
* __thiscall
numpunct_wchar_ctor(numpunct_wchar
*this)
3745 return numpunct_wchar_ctor_refs(this, 0);
3748 /* ??_F?$numpunct@G@std@@QAEXXZ */
3749 /* ??_F?$numpunct@G@std@@QEAAXXZ */
3750 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor
, 4)
3751 numpunct_wchar
* __thiscall
numpunct_short_ctor(numpunct_wchar
*this)
3753 return numpunct_short_ctor_refs(this, 0);
3756 /* ??1?$numpunct@_W@std@@MAE@XZ */
3757 /* ??1?$numpunct@_W@std@@MEAA@XZ */
3758 /* ??1?$numpunct@G@std@@MAE@XZ */
3759 /* ??1?$numpunct@G@std@@MEAA@XZ */
3760 DEFINE_THISCALL_WRAPPER(numpunct_wchar_dtor
, 4)
3761 void __thiscall
numpunct_wchar_dtor(numpunct_wchar
*this)
3763 TRACE("(%p)\n", this);
3764 numpunct_wchar__Tidy(this);
3767 DEFINE_THISCALL_WRAPPER(numpunct_wchar_vector_dtor
, 8)
3768 numpunct_wchar
* __thiscall
numpunct_wchar_vector_dtor(numpunct_wchar
*this, unsigned int flags
)
3770 TRACE("(%p %x)\n", this, flags
);
3772 /* we have an array, with the number of elements stored before the first object */
3773 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
3775 for(i
=*ptr
-1; i
>=0; i
--)
3776 numpunct_wchar_dtor(this+i
);
3777 MSVCRT_operator_delete(ptr
);
3779 numpunct_wchar_dtor(this);
3781 MSVCRT_operator_delete(this);
3787 /* ?_Getcat@?$numpunct@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3788 /* ?_Getcat@?$numpunct@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3789 static MSVCP_size_t
numpunct_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
3791 TRACE("(%p %p)\n", facet
, loc
);
3793 if(facet
&& !*facet
) {
3794 *facet
= MSVCRT_operator_new(sizeof(numpunct_wchar
));
3796 ERR("Out of memory\n");
3797 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3800 numpunct_wchar_ctor_name((numpunct_wchar
*)*facet
,
3801 MSVCP_basic_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
3807 /* ?_Getcat@?$numpunct@_W@std@@SAIPAPBVfacet@locale@2@@Z */
3808 /* ?_Getcat@?$numpunct@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3809 MSVCP_size_t __cdecl
numpunct_wchar__Getcat_old(const locale_facet
**facet
)
3811 return numpunct_wchar__Getcat(facet
, locale_classic());
3814 static numpunct_wchar
* numpunct_wchar_use_facet(const locale
*loc
)
3816 static numpunct_wchar
*obj
= NULL
;
3819 const locale_facet
*fac
;
3821 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3822 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_wchar_id
));
3824 _Lockit_dtor(&lock
);
3825 return (numpunct_wchar
*)fac
;
3829 _Lockit_dtor(&lock
);
3833 numpunct_wchar__Getcat(&fac
, loc
);
3834 obj
= (numpunct_wchar
*)fac
;
3835 locale_facet__Incref(&obj
->facet
);
3836 locale_facet_register(&obj
->facet
);
3837 _Lockit_dtor(&lock
);
3842 /* ?_Getcat@?$numpunct@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3843 /* ?_Getcat@?$numpunct@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3844 static MSVCP_size_t
numpunct_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
3846 TRACE("(%p %p)\n", facet
, loc
);
3848 if(facet
&& !*facet
) {
3849 *facet
= MSVCRT_operator_new(sizeof(numpunct_wchar
));
3851 ERR("Out of memory\n");
3852 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3855 numpunct_short_ctor_name((numpunct_wchar
*)*facet
,
3856 MSVCP_basic_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
3862 /* ?_Getcat@?$numpunct@G@std@@SAIPAPBVfacet@locale@2@@Z */
3863 /* ?_Getcat@?$numpunct@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3864 MSVCP_size_t __cdecl
numpunct_short__Getcat_old(const locale_facet
**facet
)
3866 return numpunct_short__Getcat(facet
, locale_classic());
3869 static numpunct_wchar
* numpunct_short_use_facet(const locale
*loc
)
3871 static numpunct_wchar
*obj
= NULL
;
3874 const locale_facet
*fac
;
3876 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3877 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_short_id
));
3879 _Lockit_dtor(&lock
);
3880 return (numpunct_wchar
*)fac
;
3884 _Lockit_dtor(&lock
);
3888 numpunct_short__Getcat(&fac
, loc
);
3889 obj
= (numpunct_wchar
*)fac
;
3890 locale_facet__Incref(&obj
->facet
);
3891 locale_facet_register(&obj
->facet
);
3892 _Lockit_dtor(&lock
);
3897 /* ?do_decimal_point@?$numpunct@_W@std@@MBE_WXZ */
3898 /* ?do_decimal_point@?$numpunct@_W@std@@MEBA_WXZ */
3899 /* ?do_decimal_point@?$numpunct@G@std@@MBEGXZ */
3900 /* ?do_decimal_point@?$numpunct@G@std@@MEBAGXZ */
3901 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_decimal_point
, 4)
3902 #define call_numpunct_wchar_do_decimal_point(this) CALL_VTBL_FUNC(this, 4, \
3903 wchar_t, (const numpunct_wchar *this), (this))
3904 wchar_t __thiscall
numpunct_wchar_do_decimal_point(const numpunct_wchar
*this)
3906 TRACE("(%p)\n", this);
3910 /* ?decimal_point@?$numpunct@_W@std@@QBE_WXZ */
3911 /* ?decimal_point@?$numpunct@_W@std@@QEBA_WXZ */
3912 /* ?decimal_point@?$numpunct@G@std@@QBEGXZ */
3913 /* ?decimal_point@?$numpunct@G@std@@QEBAGXZ */
3914 DEFINE_THISCALL_WRAPPER(numpunct_wchar_decimal_point
, 4)
3915 wchar_t __thiscall
numpunct_wchar_decimal_point(const numpunct_wchar
*this)
3917 TRACE("(%p)\n", this);
3918 return call_numpunct_wchar_do_decimal_point(this);
3921 /* ?do_thousands_sep@?$numpunct@_W@std@@MBE_WXZ */
3922 /* ?do_thousands_sep@?$numpunct@_W@std@@MEBA_WXZ */
3923 /* ?do_thousands_sep@?$numpunct@G@std@@MBEGXZ */
3924 /* ?do_thousands_sep@?$numpunct@G@std@@MEBAGXZ */
3925 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_thousands_sep
, 4)
3926 #define call_numpunct_wchar_do_thousands_sep(this) CALL_VTBL_FUNC(this, 8, \
3927 wchar_t, (const numpunct_wchar *this), (this))
3928 wchar_t __thiscall
numpunct_wchar_do_thousands_sep(const numpunct_wchar
*this)
3930 TRACE("(%p)\n", this);
3934 /* ?thousands_sep@?$numpunct@_W@std@@QBE_WXZ */
3935 /* ?thousands_sep@?$numpunct@_W@std@@QEBA_WXZ */
3936 /* ?thousands_sep@?$numpunct@G@std@@QBEGXZ */
3937 /* ?thousands_sep@?$numpunct@G@std@@QEBAGXZ */
3938 DEFINE_THISCALL_WRAPPER(numpunct_wchar_thousands_sep
, 4)
3939 wchar_t __thiscall
numpunct_wchar_thousands_sep(const numpunct_wchar
*this)
3941 TRACE("(%p)\n", this);
3942 return call_numpunct_wchar_do_thousands_sep(this);
3945 /* ?do_grouping@?$numpunct@_W@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3946 /* ?do_grouping@?$numpunct@_W@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3947 /* ?do_grouping@?$numpunct@G@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3948 /* ?do_grouping@?$numpunct@G@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3949 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_grouping
, 8)
3950 #define call_numpunct_wchar_do_grouping(this, ret) CALL_VTBL_FUNC(this, 12, \
3951 basic_string_char*, (const numpunct_wchar*, basic_string_char*), (this, ret))
3952 basic_string_char
* __thiscall
numpunct_wchar_do_grouping(const numpunct_wchar
*this, basic_string_char
*ret
)
3954 TRACE("(%p)\n", this);
3955 return MSVCP_basic_string_char_ctor_cstr(ret
, this->grouping
);
3958 /* ?grouping@?$numpunct@_W@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3959 /* ?grouping@?$numpunct@_W@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3960 /* ?grouping@?$numpunct@G@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3961 /* ?grouping@?$numpunct@G@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3962 DEFINE_THISCALL_WRAPPER(numpunct_wchar_grouping
, 8)
3963 basic_string_char
* __thiscall
numpunct_wchar_grouping(const numpunct_wchar
*this, basic_string_char
*ret
)
3965 TRACE("(%p)\n", this);
3966 return call_numpunct_wchar_do_grouping(this, ret
);
3969 /* ?do_falsename@?$numpunct@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3970 /* ?do_falsename@?$numpunct@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3971 /* ?do_falsename@?$numpunct@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3972 /* ?do_falsename@?$numpunct@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3973 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_falsename
, 8)
3974 #define call_numpunct_wchar_do_falsename(this, ret) CALL_VTBL_FUNC(this, 16, \
3975 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
3976 basic_string_wchar
* __thiscall
numpunct_wchar_do_falsename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
3978 TRACE("(%p)\n", this);
3979 return MSVCP_basic_string_wchar_ctor_cstr(ret
, this->false_name
);
3982 /* ?falsename@?$numpunct@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3983 /* ?falsename@?$numpunct@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3984 /* ?falsename@?$numpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3985 /* ?falsename@?$numpunct@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3986 DEFINE_THISCALL_WRAPPER(numpunct_wchar_falsename
, 8)
3987 basic_string_wchar
* __thiscall
numpunct_wchar_falsename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
3989 TRACE("(%p)\n", this);
3990 return call_numpunct_wchar_do_falsename(this, ret
);
3993 /* ?do_truename@?$numpunct@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3994 /* ?do_truename@?$numpunct@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3995 /* ?do_truename@?$numpunct@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3996 /* ?do_truename@?$numpunct@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3997 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_truename
, 8)
3998 #define call_numpunct_wchar_do_truename(this, ret) CALL_VTBL_FUNC(this, 20, \
3999 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
4000 basic_string_wchar
* __thiscall
numpunct_wchar_do_truename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4002 TRACE("(%p)\n", this);
4003 return MSVCP_basic_string_wchar_ctor_cstr(ret
, this->true_name
);
4006 /* ?truename@?$numpunct@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4007 /* ?truename@?$numpunct@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4008 /* ?truename@?$numpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4009 /* ?truename@?$numpunct@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4010 DEFINE_THISCALL_WRAPPER(numpunct_wchar_truename
, 8)
4011 basic_string_wchar
* __thiscall
numpunct_wchar_truename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4013 TRACE("(%p)\n", this);
4014 return call_numpunct_wchar_do_truename(this, ret
);
4017 double __cdecl
_Stod(const char *buf
, char **buf_end
, LONG exp
)
4019 double ret
= strtod(buf
, buf_end
);
4022 ret
*= pow(10, exp
);
4026 static double _Stodx(const char *buf
, char **buf_end
, LONG exp
, int *err
)
4032 ret
= _Stod(buf
, buf_end
, exp
);
4042 float __cdecl
_Stof(const char *buf
, char **buf_end
, LONG exp
)
4044 return _Stod(buf
, buf_end
, exp
);
4047 static float _Stofx(const char *buf
, char **buf_end
, LONG exp
, int *err
)
4049 return _Stodx(buf
, buf_end
, exp
, err
);
4052 static __int64
_Stollx(const char *buf
, char **buf_end
, int base
, int *err
)
4058 ret
= _strtoi64(buf
, buf_end
, base
);
4068 static LONG
_Stolx(const char *buf
, char **buf_end
, int base
, int *err
)
4070 __int64 i
= _Stollx(buf
, buf_end
, base
, err
);
4071 if(!*err
&& i
!=(__int64
)((LONG
)i
))
4076 static unsigned __int64
_Stoullx(const char *buf
, char **buf_end
, int base
, int *err
)
4078 unsigned __int64 ret
;
4082 ret
= _strtoui64(buf
, buf_end
, base
);
4092 static ULONG
_Stoulx(const char *buf
, char **buf_end
, int base
, int *err
)
4094 unsigned __int64 i
= _Stoullx(buf
[0]=='-' ? buf
+1 : buf
, buf_end
, base
, err
);
4095 if(!*err
&& i
!=(unsigned __int64
)((ULONG
)i
))
4097 return buf
[0]=='-' ? -i
: i
;
4100 /* ?id@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
4101 locale_id num_get_wchar_id
= {0};
4102 /* ?id@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
4103 locale_id num_get_short_id
= {0};
4105 /* ??_7?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
4106 extern const vtable_ptr MSVCP_num_get_wchar_vtable
;
4107 /* ??_7?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
4108 extern const vtable_ptr MSVCP_num_get_short_vtable
;
4110 /* ?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
4111 /* ?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
4112 /* ?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
4113 /* ?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
4114 DEFINE_THISCALL_WRAPPER(num_get_wchar__Init
, 8)
4115 void __thiscall
num_get_wchar__Init(num_get
*this, const _Locinfo
*locinfo
)
4117 TRACE("(%p %p)\n", this, locinfo
);
4118 _Locinfo__Getcvt(locinfo
, &this->cvt
);
4121 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
4122 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
4123 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor_locinfo
, 12)
4124 num_get
* __thiscall
num_get_wchar_ctor_locinfo(num_get
*this,
4125 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
4127 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
4129 locale_facet_ctor_refs(&this->facet
, refs
);
4130 this->facet
.vtable
= &MSVCP_num_get_wchar_vtable
;
4132 num_get_wchar__Init(this, locinfo
);
4136 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
4137 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
4138 DEFINE_THISCALL_WRAPPER(num_get_short_ctor_locinfo
, 12)
4139 num_get
* __thiscall
num_get_short_ctor_locinfo(num_get
*this,
4140 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
4142 num_get_wchar_ctor_locinfo(this, locinfo
, refs
);
4143 this->facet
.vtable
= &MSVCP_num_get_short_vtable
;
4147 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
4148 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
4149 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor_refs
, 8)
4150 num_get
* __thiscall
num_get_wchar_ctor_refs(num_get
*this, MSVCP_size_t refs
)
4154 TRACE("(%p %lu)\n", this, refs
);
4156 _Locinfo_ctor(&locinfo
);
4157 num_get_wchar_ctor_locinfo(this, &locinfo
, refs
);
4158 _Locinfo_dtor(&locinfo
);
4162 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
4163 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
4164 DEFINE_THISCALL_WRAPPER(num_get_short_ctor_refs
, 8)
4165 num_get
* __thiscall
num_get_short_ctor_refs(num_get
*this, MSVCP_size_t refs
)
4167 num_get_wchar_ctor_refs(this, refs
);
4168 this->facet
.vtable
= &MSVCP_num_get_short_vtable
;
4172 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
4173 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
4174 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor
, 4)
4175 num_get
* __thiscall
num_get_wchar_ctor(num_get
*this)
4177 return num_get_wchar_ctor_refs(this, 0);
4180 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
4181 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
4182 DEFINE_THISCALL_WRAPPER(num_get_short_ctor
, 4)
4183 num_get
* __thiscall
num_get_short_ctor(num_get
*this)
4185 return num_get_short_ctor_refs(this, 0);
4188 /* ??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
4189 /* ??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
4190 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
4191 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
4192 DEFINE_THISCALL_WRAPPER(num_get_wchar_dtor
, 4)
4193 void __thiscall
num_get_wchar_dtor(num_get
*this)
4195 TRACE("(%p)\n", this);
4196 locale_facet_dtor(&this->facet
);
4199 DEFINE_THISCALL_WRAPPER(num_get_wchar_vector_dtor
, 8)
4200 num_get
* __thiscall
num_get_wchar_vector_dtor(num_get
*this, unsigned int flags
)
4202 TRACE("(%p %x)\n", this, flags
);
4204 /* we have an array, with the number of elements stored before the first object */
4205 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
4207 for(i
=*ptr
-1; i
>=0; i
--)
4208 num_get_wchar_dtor(this+i
);
4209 MSVCRT_operator_delete(ptr
);
4211 num_get_wchar_dtor(this);
4213 MSVCRT_operator_delete(this);
4219 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4220 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4221 static MSVCP_size_t
num_get_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
4223 TRACE("(%p %p)\n", facet
, loc
);
4225 if(facet
&& !*facet
) {
4228 *facet
= MSVCRT_operator_new(sizeof(num_get
));
4230 ERR("Out of memory\n");
4231 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
4235 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
4236 num_get_wchar_ctor_locinfo((num_get
*)*facet
, &locinfo
, 0);
4237 _Locinfo_dtor(&locinfo
);
4243 num_get
* num_get_wchar_use_facet(const locale
*loc
)
4245 static num_get
*obj
= NULL
;
4248 const locale_facet
*fac
;
4250 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
4251 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_wchar_id
));
4253 _Lockit_dtor(&lock
);
4254 return (num_get
*)fac
;
4258 _Lockit_dtor(&lock
);
4262 num_get_wchar__Getcat(&fac
, loc
);
4263 obj
= (num_get
*)fac
;
4264 locale_facet__Incref(&obj
->facet
);
4265 locale_facet_register(&obj
->facet
);
4266 _Lockit_dtor(&lock
);
4271 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4272 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4273 static MSVCP_size_t
num_get_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
4275 if(facet
&& !*facet
) {
4276 num_get_wchar__Getcat(facet
, loc
);
4277 (*(locale_facet
**)facet
)->vtable
= &MSVCP_num_get_short_vtable
;
4283 num_get
* num_get_short_use_facet(const locale
*loc
)
4285 static num_get
*obj
= NULL
;
4288 const locale_facet
*fac
;
4290 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
4291 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_short_id
));
4293 _Lockit_dtor(&lock
);
4294 return (num_get
*)fac
;
4298 _Lockit_dtor(&lock
);
4302 num_get_short__Getcat(&fac
, loc
);
4303 obj
= (num_get
*)fac
;
4304 locale_facet__Incref(&obj
->facet
);
4305 locale_facet_register(&obj
->facet
);
4306 _Lockit_dtor(&lock
);
4311 static inline wchar_t mb_to_wc(char ch
, const _Cvtvec
*cvt
)
4316 return _Mbrtowc(&ret
, &ch
, 1, &state
, cvt
) == 1 ? ret
: 0;
4319 static int num_get__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
4320 istreambuf_iterator_wchar
*last
, const locale
*loc
, numpunct_wchar
*numpunct
)
4322 basic_string_char grouping_bstr
;
4323 basic_string_char groups_found
;
4324 int i
, groups_no
= 0, cur_group
= 0, exp
= 0;
4325 char *dest_beg
= dest
, *num_end
= dest
+25, *exp_end
= dest
+31;
4326 wchar_t sep
, digits
[11], *digits_pos
;
4327 const char *grouping
, *groups
;
4328 BOOL error
= FALSE
, got_digit
= FALSE
, got_nonzero
= FALSE
;
4330 TRACE("(%p %p %p %p)\n", dest
, first
, last
, loc
);
4333 digits
[i
] = mb_to_wc('0'+i
, &this->cvt
);
4336 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
4337 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
4338 sep
= grouping
[0] ? numpunct_wchar_thousands_sep(numpunct
) : 0;
4341 MSVCP_basic_string_char_ctor(&groups_found
);
4343 istreambuf_iterator_wchar_val(first
);
4345 if(first
->strbuf
&& first
->val
==mb_to_wc('-', &this->cvt
)) {
4347 istreambuf_iterator_wchar_inc(first
);
4348 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', &this->cvt
)) {
4350 istreambuf_iterator_wchar_inc(first
);
4353 /* read possibly grouped numbers before decimal */
4354 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
4355 if(!(digits_pos
= wcschr(digits
, first
->val
))) {
4356 if(sep
&& first
->val
==sep
) {
4357 if(!groups_no
) break; /* empty group - stop parsing */
4358 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
4365 got_digit
= TRUE
; /* found a digit, zero or non-zero */
4366 /* write digit to dest if not a leading zero (to not waste dest buffer) */
4367 if(!got_nonzero
&& first
->val
== digits
[0])
4374 *dest
++ = '0'+digits_pos
-digits
;
4376 exp
++; /* too many digits, just multiply by 10 */
4377 if(sep
&& groups_no
<CHAR_MAX
)
4382 /* if all leading zeroes, we didn't write anything so put a zero we check for a decimal */
4383 if(got_digit
&& !got_nonzero
)
4386 /* get decimal, if any */
4387 if(first
->strbuf
&& first
->val
==numpunct_wchar_decimal_point(numpunct
)) {
4389 *dest
++ = *localeconv()->decimal_point
;
4390 istreambuf_iterator_wchar_inc(first
);
4393 /* read non-grouped after decimal */
4394 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
4395 if(!(digits_pos
= wcschr(digits
, first
->val
)))
4397 else if(dest
<num_end
) {
4399 *dest
++ = '0'+digits_pos
-digits
;
4403 /* read exponent, if any */
4404 if(first
->strbuf
&& (first
->val
==mb_to_wc('e', &this->cvt
) || first
->val
==mb_to_wc('E', &this->cvt
))) {
4406 istreambuf_iterator_wchar_inc(first
);
4408 if(first
->strbuf
&& first
->val
==mb_to_wc('-', &this->cvt
)) {
4410 istreambuf_iterator_wchar_inc(first
);
4411 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', &this->cvt
)) {
4413 istreambuf_iterator_wchar_inc(first
);
4416 got_digit
= got_nonzero
= FALSE
;
4418 /* skip any leading zeroes */
4419 for(; first
->strbuf
&& first
->val
==digits
[0]; istreambuf_iterator_wchar_inc(first
))
4422 for(; first
->strbuf
&& (digits_pos
= wcschr(digits
, first
->val
)); istreambuf_iterator_wchar_inc(first
)) {
4423 got_digit
= got_nonzero
= TRUE
; /* leading zeroes would have been skipped, so first digit is non-zero */
4426 *dest
++ = '0'+digits_pos
-digits
;
4429 /* if just found zeroes for exponent, use that */
4430 if(got_digit
&& !got_nonzero
)
4438 if(sep
&& groups_no
)
4439 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
4441 if(!cur_group
) /* no groups, skip loop */
4443 else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
])
4444 error
= TRUE
; /* trailing empty */
4446 for(; cur_group
>=0 && !error
; cur_group
--) {
4447 if(*grouping
== CHAR_MAX
) {
4451 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
4452 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
4455 }else if(grouping
[1]) {
4459 MSVCP_basic_string_char_dtor(&grouping_bstr
);
4461 MSVCP_basic_string_char_dtor(&groups_found
);
4471 /* ?_Getffld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1ABVlocale@2@@Z */
4472 /* ?_Getffld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1AEBVlocale@2@@Z */
4473 int __cdecl
num_get_wchar__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
4474 istreambuf_iterator_wchar
*last
, const locale
*loc
)
4476 return num_get__Getffld(this, dest
, first
, last
, loc
, numpunct_wchar_use_facet(loc
));
4479 /* ?_Getffld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1ABVlocale@2@@Z */
4480 /* ?_Getffld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1AEBVlocale@2@@Z */
4481 int __cdecl
num_get_short__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
4482 istreambuf_iterator_wchar
*last
, const locale
*loc
)
4484 return num_get__Getffld(this, dest
, first
, last
, loc
, numpunct_short_use_facet(loc
));
4487 static int num_get__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
4488 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
, numpunct_wchar
*numpunct
)
4490 wchar_t digits
[23], *digits_pos
, sep
;
4491 basic_string_char grouping_bstr
;
4492 basic_string_char groups_found
;
4493 int i
, basefield
, base
, groups_no
= 0, cur_group
= 0;
4494 char *dest_beg
= dest
, *dest_end
= dest
+24;
4495 const char *grouping
, *groups
;
4496 BOOL error
= TRUE
, dest_empty
= TRUE
, found_zero
= FALSE
;
4498 TRACE("(%p %p %p %04x %p)\n", dest
, first
, last
, fmtflags
, loc
);
4501 digits
[i
] = mb_to_wc('0'+i
, &this->cvt
);
4502 for(i
=0; i
<6; i
++) {
4503 digits
[10+i
] = mb_to_wc('a'+i
, &this->cvt
);
4504 digits
[16+i
] = mb_to_wc('A'+i
, &this->cvt
);
4507 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
4508 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
4509 sep
= grouping
[0] ? numpunct_wchar_thousands_sep(numpunct
) : '\0';
4511 basefield
= fmtflags
& FMTFLAG_basefield
;
4512 if(basefield
== FMTFLAG_oct
)
4514 else if(basefield
== FMTFLAG_hex
)
4515 base
= 22; /* equal to the size of digits buffer */
4521 istreambuf_iterator_wchar_val(first
);
4522 if(first
->strbuf
&& first
->val
==mb_to_wc('-', &this->cvt
)) {
4524 istreambuf_iterator_wchar_inc(first
);
4525 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', &this->cvt
)) {
4527 istreambuf_iterator_wchar_inc(first
);
4530 if(first
->strbuf
&& first
->val
==digits
[0]) {
4532 istreambuf_iterator_wchar_inc(first
);
4533 if(first
->strbuf
&& (first
->val
==mb_to_wc('x', &this->cvt
) || first
->val
==mb_to_wc('X', &this->cvt
))) {
4534 if(!base
|| base
== 22) {
4536 istreambuf_iterator_wchar_inc(first
);
4546 if(!base
) base
= 10;
4551 MSVCP_basic_string_char_ctor(&groups_found
);
4552 if(found_zero
) ++groups_no
;
4555 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
4556 if(!(digits_pos
= wcschr(digits
, first
->val
))) {
4557 if(sep
&& first
->val
==sep
) {
4558 if(!groups_no
) break; /* empty group - stop parsing */
4559 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
4567 if(dest_empty
&& first
->val
== digits
[0]) {
4573 /* skip digits that can't be copied to dest buffer, other
4574 * functions are responsible for detecting overflows */
4576 *dest
++ = (digits_pos
-digits
<10 ? '0'+digits_pos
-digits
:
4577 (digits_pos
-digits
<16 ? 'a'+digits_pos
-digits
-10 :
4578 'A'+digits_pos
-digits
-16));
4579 if(sep
&& groups_no
<CHAR_MAX
)
4584 if(sep
&& groups_no
)
4585 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
4587 if(!cur_group
) { /* no groups, skip loop */
4589 }else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
]) {
4590 error
= TRUE
; /* trailing empty */
4594 for(; cur_group
>=0 && !error
; cur_group
--) {
4595 if(*grouping
== CHAR_MAX
) {
4599 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
4600 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
4603 }else if(grouping
[1]) {
4608 MSVCP_basic_string_char_dtor(&grouping_bstr
);
4610 MSVCP_basic_string_char_dtor(&groups_found
);
4617 }else if(dest_empty
)
4621 return (base
==22 ? 16 : base
);
4624 /* ?_Getifld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1HABVlocale@2@@Z */
4625 /* ?_Getifld@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1HAEBVlocale@2@@Z */
4626 int __cdecl
num_get_wchar__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
4627 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
)
4629 return num_get__Getifld(this, dest
, first
, last
,
4630 fmtflags
, loc
, numpunct_wchar_use_facet(loc
));
4633 /* ?_Getifld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1HABVlocale@2@@Z */
4634 /* ?_Getifld@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1HAEBVlocale@2@@Z */
4635 int __cdecl
num_get_short__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
4636 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
)
4638 return num_get__Getifld(this, dest
, first
, last
,
4639 fmtflags
, loc
, numpunct_short_use_facet(loc
));
4642 static istreambuf_iterator_wchar
* num_get_do_get_void(const num_get
*this,
4643 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
4644 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
4645 void **pval
, numpunct_wchar
*numpunct
)
4651 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4653 v
= _Stoullx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
4654 &last
, FMTFLAG_hex
, base
->loc
, numpunct
), &err
);
4655 if(v
!=(unsigned __int64
)((INT_PTR
)v
))
4656 *state
|= IOSTATE_failbit
;
4657 else if(end
!=tmp
&& !err
)
4658 *pval
= (void*)((INT_PTR
)v
);
4660 *state
|= IOSTATE_failbit
;
4663 *state
|= IOSTATE_eofbit
;
4669 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z */
4670 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z */
4671 #define call_num_get_wchar_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 4, istreambuf_iterator_wchar*, \
4672 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, void**), \
4673 (this, ret, first, last, base, state, pval))
4674 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_void
,36)
4675 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4676 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
4678 return num_get_do_get_void(this, ret
, first
, last
, base
,
4679 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
4682 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z */
4683 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z */
4684 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_void
,36)
4685 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4686 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
4688 return num_get_do_get_void(this, ret
, first
, last
, base
,
4689 state
, pval
, numpunct_short_use_facet(base
->loc
));
4692 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z */
4693 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z */
4694 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z */
4695 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z */
4696 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_void
,36)
4697 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4698 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
4700 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4701 return call_num_get_wchar_do_get_void(this, ret
, first
, last
, base
, state
, pval
);
4704 static istreambuf_iterator_wchar
* num_get_do_get_double(const num_get
*this,
4705 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
4706 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
4707 double *pval
, numpunct_wchar
*numpunct
)
4713 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4715 v
= _Stodx(tmp
, &end
, num_get__Getffld(this, tmp
, &first
, &last
, base
->loc
, numpunct
), &err
);
4716 if(end
!=tmp
&& !err
)
4719 *state
|= IOSTATE_failbit
;
4722 *state
|= IOSTATE_eofbit
;
4728 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAO@Z */
4729 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z */
4730 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAN@Z */
4731 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z */
4732 #define call_num_get_wchar_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_wchar*, \
4733 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
4734 (this, ret, first, last, base, state, pval))
4735 #define call_num_get_wchar_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_wchar*, \
4736 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
4737 (this, ret, first, last, base, state, pval))
4738 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_double
,36)
4739 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4740 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
4742 return num_get_do_get_double(this, ret
, first
, last
, base
,
4743 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
4746 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAO@Z */
4747 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z */
4748 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAN@Z */
4749 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z */
4750 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_double
,36)
4751 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4752 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
4754 return num_get_do_get_double(this, ret
, first
, last
, base
,
4755 state
, pval
, numpunct_short_use_facet(base
->loc
));
4758 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAO@Z */
4759 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z */
4760 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAO@Z */
4761 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z */
4762 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ldouble
,36)
4763 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ldouble(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4764 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
4766 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4767 return call_num_get_wchar_do_get_ldouble(this, ret
, first
, last
, base
, state
, pval
);
4770 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAN@Z */
4771 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z */
4772 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAN@Z */
4773 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z */
4774 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_double
,36)
4775 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4776 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
4778 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4779 return call_num_get_wchar_do_get_double(this, ret
, first
, last
, base
, state
, pval
);
4782 static istreambuf_iterator_wchar
* num_get_do_get_float(const num_get
*this,
4783 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
4784 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
4785 float *pval
, numpunct_wchar
*numpunct
)
4791 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4793 v
= _Stofx(tmp
, &end
, num_get__Getffld(this, tmp
, &first
,
4794 &last
, base
->loc
, numpunct
), &err
);
4795 if(end
!=tmp
&& !err
)
4798 *state
|= IOSTATE_failbit
;
4801 *state
|= IOSTATE_eofbit
;
4807 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAM@Z */
4808 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z */
4809 #define call_num_get_wchar_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_wchar*, \
4810 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, float*), \
4811 (this, ret, first, last, base, state, pval))
4812 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_float
,36)
4813 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4814 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
4816 return num_get_do_get_float(this, ret
, first
, last
, base
,
4817 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
4820 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAM@Z */
4821 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z */
4822 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_float
,36)
4823 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4824 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
4826 return num_get_do_get_float(this, ret
, first
, last
, base
,
4827 state
, pval
, numpunct_short_use_facet(base
->loc
));
4830 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAM@Z */
4831 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z */
4832 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAM@Z */
4833 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z */
4834 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_float
,36)
4835 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4836 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
4838 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4839 return call_num_get_wchar_do_get_float(this, ret
, first
, last
, base
, state
, pval
);
4842 static istreambuf_iterator_wchar
* num_get_do_get_uint64(const num_get
*this,
4843 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
4844 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
4845 ULONGLONG
*pval
, numpunct_wchar
*numpunct
)
4851 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4853 v
= _Stoullx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
4854 &last
, base
->fmtfl
, base
->loc
, numpunct
), &err
);
4855 if(end
!=tmp
&& !err
)
4858 *state
|= IOSTATE_failbit
;
4861 *state
|= IOSTATE_eofbit
;
4867 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z */
4868 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z */
4869 #define call_num_get_wchar_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_wchar*, \
4870 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONGLONG*), \
4871 (this, ret, first, last, base, state, pval))
4872 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_uint64
,36)
4873 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4874 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
4876 return num_get_do_get_uint64(this, ret
, first
, last
, base
,
4877 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
4880 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z */
4881 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z */
4882 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_uint64
,36)
4883 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4884 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
4886 return num_get_do_get_uint64(this, ret
, first
, last
, base
,
4887 state
, pval
, numpunct_short_use_facet(base
->loc
));
4890 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z */
4891 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z */
4892 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z */
4893 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z */
4894 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_uint64
,36)
4895 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4896 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
4898 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4899 return call_num_get_wchar_do_get_uint64(this, ret
, first
, last
, base
, state
, pval
);
4902 static istreambuf_iterator_wchar
* num_get_do_get_int64(const num_get
*this,
4903 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
4904 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
4905 LONGLONG
*pval
, numpunct_wchar
*numpunct
)
4911 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4913 v
= _Stollx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
4914 &last
, base
->fmtfl
, base
->loc
, numpunct
), &err
);
4915 if(end
!=tmp
&& !err
)
4918 *state
|= IOSTATE_failbit
;
4921 *state
|= IOSTATE_eofbit
;
4927 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z */
4928 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z */
4929 #define call_num_get_wchar_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_wchar*, \
4930 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONGLONG*), \
4931 (this, ret, first, last, base, state, pval))
4932 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_int64
,36)
4933 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4934 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
4936 return num_get_do_get_int64(this, ret
, first
, last
, base
,
4937 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
4940 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z */
4941 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z */
4942 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_int64
,36)
4943 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4944 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
4946 return num_get_do_get_int64(this, ret
, first
, last
, base
,
4947 state
, pval
, numpunct_short_use_facet(base
->loc
));
4950 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z */
4951 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z */
4952 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z */
4953 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z */
4954 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_int64
,36)
4955 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4956 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
4958 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4959 return call_num_get_wchar_do_get_int64(this, ret
, first
, last
, base
, state
, pval
);
4962 static istreambuf_iterator_wchar
* num_get_do_get_ulong(const num_get
*this,
4963 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
4964 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
4965 ULONG
*pval
, numpunct_wchar
*numpunct
)
4971 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4973 v
= _Stoulx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
4974 &last
, base
->fmtfl
, base
->loc
, numpunct
), &err
);
4975 if(end
!=tmp
&& !err
)
4978 *state
|= IOSTATE_failbit
;
4981 *state
|= IOSTATE_eofbit
;
4987 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAK@Z */
4988 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z */
4989 #define call_num_get_wchar_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_wchar*, \
4990 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONG*), \
4991 (this, ret, first, last, base, state, pval))
4992 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_ulong
,36)
4993 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4994 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
4996 return num_get_do_get_ulong(this, ret
, first
, last
, base
,
4997 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
5000 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAK@Z */
5001 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z */
5002 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_ulong
,36)
5003 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5004 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
5006 return num_get_do_get_ulong(this, ret
, first
, last
, base
,
5007 state
, pval
, numpunct_short_use_facet(base
->loc
));
5010 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAK@Z */
5011 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z */
5012 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAK@Z */
5013 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z */
5014 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ulong
,36)
5015 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5016 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
5018 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5019 return call_num_get_wchar_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
5022 static istreambuf_iterator_wchar
* num_get_do_get_long(const num_get
*this,
5023 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5024 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5025 LONG
*pval
, numpunct_wchar
*numpunct
)
5031 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5033 v
= _Stolx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5034 &last
, base
->fmtfl
, base
->loc
, numpunct
), &err
);
5035 if(end
!=tmp
&& !err
)
5038 *state
|= IOSTATE_failbit
;
5041 *state
|= IOSTATE_eofbit
;
5047 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z */
5048 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z */
5049 #define call_num_get_wchar_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_wchar*, \
5050 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONG*), \
5051 (this, ret, first, last, base, state, pval))
5052 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_long
,36)
5053 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5054 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
5056 return num_get_do_get_long(this, ret
, first
, last
, base
,
5057 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
5060 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z */
5061 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z */
5062 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_long
,36)
5063 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5064 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
5066 return num_get_do_get_long(this, ret
, first
, last
, base
,
5067 state
, pval
, numpunct_short_use_facet(base
->loc
));
5070 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z */
5071 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z */
5072 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z */
5073 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z */
5074 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_long
,36)
5075 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5076 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
5078 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5079 return call_num_get_wchar_do_get_long(this, ret
, first
, last
, base
, state
, pval
);
5082 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAI@Z */
5083 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z */
5084 #define call_num_get_wchar_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_wchar*, \
5085 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned int*), \
5086 (this, ret, first, last, base, state, pval))
5087 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_uint
,36)
5088 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5089 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
5091 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5092 return num_get_wchar_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
5095 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAI@Z */
5096 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z */
5097 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_uint
,36)
5098 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5099 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
5101 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5102 return num_get_short_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
5105 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAI@Z */
5106 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z */
5107 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAI@Z */
5108 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z */
5109 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_uint
,36)
5110 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5111 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
5113 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5114 return call_num_get_wchar_do_get_uint(this, ret
, first
, last
, base
, state
, pval
);
5117 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAG@Z */
5118 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z */
5119 #define call_num_get_wchar_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_wchar*, \
5120 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned short*), \
5121 (this, ret, first, last, base, state, pval))
5122 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_ushort
,36)
5123 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5124 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
5127 char tmp
[25], *beg
, *end
;
5130 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5132 b
= num_get_wchar__Getifld(this, tmp
,
5133 &first
, &last
, base
->fmtfl
, base
->loc
);
5134 beg
= tmp
+ (tmp
[0]=='-' ? 1 : 0);
5135 v
= _Stoulx(beg
, &end
, b
, &err
);
5137 if(v
!= (ULONG
)((unsigned short)v
))
5138 *state
|= IOSTATE_failbit
;
5139 else if(end
!=beg
&& !err
)
5140 *pval
= (tmp
[0]=='-' ? -((unsigned short)v
) : v
);
5142 *state
|= IOSTATE_failbit
;
5145 *state
|= IOSTATE_eofbit
;
5151 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAG@Z */
5152 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z */
5153 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_ushort
,36)
5154 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5155 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
5157 FIXME("(%p %p %p %p %p) stub\n", this, ret
, base
, state
, pval
);
5161 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAAG@Z */
5162 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z */
5163 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAG@ */
5164 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z */
5165 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ushort
,36)
5166 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5167 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
5169 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5170 return call_num_get_wchar_do_get_ushort(this, ret
, first
, last
, base
, state
, pval
);
5173 static istreambuf_iterator_wchar
* num_get_do_get_bool(const num_get
*this,
5174 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5175 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5176 MSVCP_bool
*pval
, numpunct_wchar
*numpunct
)
5178 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5180 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
5181 basic_string_wchar false_bstr
, true_bstr
;
5182 const wchar_t *pfalse
, *ptrue
;
5184 numpunct_wchar_falsename(numpunct
, &false_bstr
);
5185 numpunct_wchar_truename(numpunct
, &true_bstr
);
5186 pfalse
= MSVCP_basic_string_wchar_c_str(&false_bstr
);
5187 ptrue
= MSVCP_basic_string_wchar_c_str(&true_bstr
);
5189 for(istreambuf_iterator_wchar_val(&first
); first
.strbuf
;
5190 istreambuf_iterator_wchar_inc(&first
)) {
5191 if(pfalse
&& *pfalse
&& first
.val
!=*pfalse
)
5193 if(ptrue
&& *ptrue
&& first
.val
!=*ptrue
)
5196 if(pfalse
&& *pfalse
&& ptrue
&& !*ptrue
)
5198 if(ptrue
&& *ptrue
&& pfalse
&& !*pfalse
)
5206 if((!pfalse
|| !*pfalse
) && (!ptrue
|| !*ptrue
))
5215 *state
|= IOSTATE_failbit
;
5217 MSVCP_basic_string_wchar_dtor(&false_bstr
);
5218 MSVCP_basic_string_wchar_dtor(&true_bstr
);
5222 LONG v
= _Stolx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5223 &last
, base
->fmtfl
, base
->loc
, numpunct
), &err
);
5225 if(end
!=tmp
&& err
==0 && (v
==0 || v
==1))
5228 *state
|= IOSTATE_failbit
;
5232 *state
|= IOSTATE_eofbit
;
5233 memcpy(ret
, &first
, sizeof(first
));
5237 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z */
5238 /* ?do_get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z */
5239 #define call_num_get_wchar_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_wchar*, \
5240 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, MSVCP_bool*), \
5241 (this, ret, first, last, base, state, pval))
5242 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_bool
,36)
5243 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5244 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, MSVCP_bool
*pval
)
5246 return num_get_do_get_bool(this, ret
, first
, last
, base
,
5247 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
5250 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z */
5251 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z */
5252 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_bool
,36)
5253 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5254 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, MSVCP_bool
*pval
)
5256 return num_get_do_get_bool(this, ret
, first
, last
, base
,
5257 state
, pval
, numpunct_short_use_facet(base
->loc
));
5260 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z */
5261 /* ?get@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z */
5262 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z */
5263 /* ?get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z */
5264 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_bool
,36)
5265 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5266 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, MSVCP_bool
*pval
)
5268 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5269 return call_num_get_wchar_do_get_bool(this, ret
, first
, last
, base
, state
, pval
);
5272 /* ?id@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
5273 locale_id num_get_char_id
= {0};
5275 /* ??_7?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
5276 extern const vtable_ptr MSVCP_num_get_char_vtable
;
5278 /* ?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
5279 /* ?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
5280 DEFINE_THISCALL_WRAPPER(num_get_char__Init
, 8)
5281 void __thiscall
num_get_char__Init(num_get
*this, const _Locinfo
*locinfo
)
5283 TRACE("(%p %p)\n", this, locinfo
);
5284 _Locinfo__Getcvt(locinfo
, &this->cvt
);
5287 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
5288 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
5289 DEFINE_THISCALL_WRAPPER(num_get_char_ctor_locinfo
, 12)
5290 num_get
* __thiscall
num_get_char_ctor_locinfo(num_get
*this,
5291 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
5293 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
5295 locale_facet_ctor_refs(&this->facet
, refs
);
5296 this->facet
.vtable
= &MSVCP_num_get_char_vtable
;
5298 num_get_char__Init(this, locinfo
);
5302 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
5303 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
5304 DEFINE_THISCALL_WRAPPER(num_get_char_ctor_refs
, 8)
5305 num_get
* __thiscall
num_get_char_ctor_refs(num_get
*this, MSVCP_size_t refs
)
5309 TRACE("(%p %lu)\n", this, refs
);
5311 _Locinfo_ctor(&locinfo
);
5312 num_get_char_ctor_locinfo(this, &locinfo
, refs
);
5313 _Locinfo_dtor(&locinfo
);
5317 /* ??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
5318 /* ??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
5319 DEFINE_THISCALL_WRAPPER(num_get_char_ctor
, 4)
5320 num_get
* __thiscall
num_get_char_ctor(num_get
*this)
5322 return num_get_char_ctor_refs(this, 0);
5325 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
5326 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
5327 DEFINE_THISCALL_WRAPPER(num_get_char_dtor
, 4)
5328 void __thiscall
num_get_char_dtor(num_get
*this)
5330 TRACE("(%p)\n", this);
5331 locale_facet_dtor(&this->facet
);
5334 DEFINE_THISCALL_WRAPPER(num_get_char_vector_dtor
, 8)
5335 num_get
* __thiscall
num_get_char_vector_dtor(num_get
*this, unsigned int flags
)
5337 TRACE("(%p %x)\n", this, flags
);
5339 /* we have an array, with the number of elements stored before the first object */
5340 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
5342 for(i
=*ptr
-1; i
>=0; i
--)
5343 num_get_char_dtor(this+i
);
5344 MSVCRT_operator_delete(ptr
);
5346 num_get_char_dtor(this);
5348 MSVCRT_operator_delete(this);
5354 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
5355 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
5356 static MSVCP_size_t
num_get_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
5358 TRACE("(%p %p)\n", facet
, loc
);
5360 if(facet
&& !*facet
) {
5363 *facet
= MSVCRT_operator_new(sizeof(num_get
));
5365 ERR("Out of memory\n");
5366 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
5370 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
5371 num_get_char_ctor_locinfo((num_get
*)*facet
, &locinfo
, 0);
5372 _Locinfo_dtor(&locinfo
);
5378 num_get
* num_get_char_use_facet(const locale
*loc
)
5380 static num_get
*obj
= NULL
;
5383 const locale_facet
*fac
;
5385 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
5386 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_char_id
));
5388 _Lockit_dtor(&lock
);
5389 return (num_get
*)fac
;
5393 _Lockit_dtor(&lock
);
5397 num_get_char__Getcat(&fac
, loc
);
5398 obj
= (num_get
*)fac
;
5399 locale_facet__Incref(&obj
->facet
);
5400 locale_facet_register(&obj
->facet
);
5401 _Lockit_dtor(&lock
);
5406 /* ?_Getffld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1ABVlocale@2@@Z */
5407 /* ?_Getffld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1AEBVlocale@2@@Z */
5408 /* Copies number to dest buffer, validates grouping and skips separators.
5409 * Updates first so it points past the number, all digits are skipped.
5410 * Returns how exponent needs to changed.
5411 * Size of dest buffer is not specified, assuming it's not smaller than 32:
5412 * strlen(+0.e+) + 22(digits) + 4(expontent) + 1(nullbyte)
5414 int __cdecl
num_get_char__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_char
*first
,
5415 istreambuf_iterator_char
*last
, const locale
*loc
)
5417 numpunct_char
*numpunct
= numpunct_char_use_facet(loc
);
5418 basic_string_char grouping_bstr
;
5419 basic_string_char groups_found
;
5420 int groups_no
= 0, cur_group
= 0, exp
= 0;
5421 char *dest_beg
= dest
, *num_end
= dest
+25, *exp_end
= dest
+31, sep
;
5422 const char *grouping
, *groups
;
5423 BOOL error
= FALSE
, got_digit
= FALSE
, got_nonzero
= FALSE
;
5425 TRACE("(%p %p %p %p)\n", dest
, first
, last
, loc
);
5427 numpunct_char_grouping(numpunct
, &grouping_bstr
);
5428 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
5429 sep
= grouping
[0] ? numpunct_char_thousands_sep(numpunct
) : '\0';
5432 MSVCP_basic_string_char_ctor(&groups_found
);
5434 istreambuf_iterator_char_val(first
);
5436 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
5437 *dest
++ = first
->val
;
5438 istreambuf_iterator_char_inc(first
);
5441 /* read possibly grouped numbers before decimal */
5442 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
5443 if(first
->val
<'0' || first
->val
>'9') {
5444 if(sep
&& first
->val
==sep
) {
5445 if(!groups_no
) break; /* empty group - stop parsing */
5446 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5453 got_digit
= TRUE
; /* found a digit, zero or non-zero */
5454 /* write digit to dest if not a leading zero (to not waste dest buffer) */
5455 if(!got_nonzero
&& first
->val
== '0')
5462 *dest
++ = first
->val
;
5464 exp
++; /* too many digits, just multiply by 10 */
5465 if(sep
&& groups_no
<CHAR_MAX
)
5470 /* if all leading zeroes, we didn't write anything so put a zero we check for a decimal */
5471 if(got_digit
&& !got_nonzero
)
5474 /* get decimal, if any */
5475 if(first
->strbuf
&& first
->val
==numpunct_char_decimal_point(numpunct
)) {
5477 *dest
++ = *localeconv()->decimal_point
;
5478 istreambuf_iterator_char_inc(first
);
5481 /* read non-grouped after decimal */
5482 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
5483 if(first
->val
<'0' || first
->val
>'9')
5485 else if(dest
<num_end
) {
5487 *dest
++ = first
->val
;
5491 /* read exponent, if any */
5492 if(first
->strbuf
&& (first
->val
=='e' || first
->val
=='E')) {
5493 *dest
++ = first
->val
;
5494 istreambuf_iterator_char_inc(first
);
5496 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
5497 *dest
++ = first
->val
;
5498 istreambuf_iterator_char_inc(first
);
5501 got_digit
= got_nonzero
= FALSE
;
5503 /* skip any leading zeroes */
5504 for(; first
->strbuf
&& first
->val
=='0'; istreambuf_iterator_char_inc(first
))
5507 for(; first
->strbuf
&& first
->val
>='0' && first
->val
<='9'; istreambuf_iterator_char_inc(first
)) {
5508 got_digit
= got_nonzero
= TRUE
; /* leading zeroes would have been skipped, so first digit is non-zero */
5511 *dest
++ = first
->val
;
5514 /* if just found zeroes for exponent, use that */
5515 if(got_digit
&& !got_nonzero
)
5523 if(sep
&& groups_no
)
5524 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5526 if(!cur_group
) /* no groups, skip loop */
5528 else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
])
5529 error
= TRUE
; /* trailing empty */
5531 for(; cur_group
>=0 && !error
; cur_group
--) {
5532 if(*grouping
== CHAR_MAX
) {
5536 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
5537 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
5540 }else if(grouping
[1]) {
5544 MSVCP_basic_string_char_dtor(&grouping_bstr
);
5546 MSVCP_basic_string_char_dtor(&groups_found
);
5556 /* ?_Getifld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1HABVlocale@2@@Z */
5557 /* ?_Getifld@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1HAEBVlocale@2@@Z */
5558 /* Copies number to dest buffer, validates grouping and skips separators.
5559 * Updates first so it points past the number, all digits are skipped.
5560 * Returns number base (8, 10 or 16).
5561 * Size of dest buffer is not specified, assuming it's not smaller than 25:
5562 * 22(8^22>2^64)+1(detect overflows)+1(sign)+1(nullbyte) = 25
5564 int __cdecl
num_get_char__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_char
*first
,
5565 istreambuf_iterator_char
*last
, int fmtflags
, const locale
*loc
)
5567 static const char digits
[] = "0123456789abcdefABCDEF";
5569 numpunct_char
*numpunct
= numpunct_char_use_facet(loc
);
5570 basic_string_char grouping_bstr
;
5571 basic_string_char groups_found
;
5572 int basefield
, base
, groups_no
= 0, cur_group
= 0;
5573 char *dest_beg
= dest
, *dest_end
= dest
+24, sep
;
5574 const char *grouping
, *groups
;
5575 BOOL error
= TRUE
, dest_empty
= TRUE
, found_zero
= FALSE
;
5577 TRACE("(%p %p %p %04x %p)\n", dest
, first
, last
, fmtflags
, loc
);
5579 numpunct_char_grouping(numpunct
, &grouping_bstr
);
5580 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
5581 sep
= grouping
[0] ? numpunct_char_thousands_sep(numpunct
) : '\0';
5583 basefield
= fmtflags
& FMTFLAG_basefield
;
5584 if(basefield
== FMTFLAG_oct
)
5586 else if(basefield
== FMTFLAG_hex
)
5587 base
= 22; /* equal to the size of digits buffer */
5593 istreambuf_iterator_char_val(first
);
5594 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
5595 *dest
++ = first
->val
;
5596 istreambuf_iterator_char_inc(first
);
5599 if(first
->strbuf
&& first
->val
=='0') {
5601 istreambuf_iterator_char_inc(first
);
5602 if(first
->strbuf
&& (first
->val
=='x' || first
->val
=='X')) {
5603 if(!base
|| base
== 22) {
5605 istreambuf_iterator_char_inc(first
);
5615 if (!base
) base
= 10;
5620 MSVCP_basic_string_char_ctor(&groups_found
);
5621 if(found_zero
) ++groups_no
;
5624 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
5625 if(!memchr(digits
, first
->val
, base
)) {
5626 if(sep
&& first
->val
==sep
) {
5627 if(!groups_no
) break; /* empty group - stop parsing */
5628 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5636 if(dest_empty
&& first
->val
== '0')
5643 /* skip digits that can't be copied to dest buffer, other
5644 * functions are responsible for detecting overflows */
5646 *dest
++ = first
->val
;
5647 if(sep
&& groups_no
<CHAR_MAX
)
5652 if(sep
&& groups_no
)
5653 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5655 if(!cur_group
) { /* no groups, skip loop */
5657 }else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
]) {
5658 error
= TRUE
; /* trailing empty */
5662 for(; cur_group
>=0 && !error
; cur_group
--) {
5663 if(*grouping
== CHAR_MAX
) {
5667 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
5668 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
5671 }else if(grouping
[1]) {
5676 MSVCP_basic_string_char_dtor(&grouping_bstr
);
5678 MSVCP_basic_string_char_dtor(&groups_found
);
5685 }else if(dest_empty
)
5689 return (base
==22 ? 16 : base
);
5692 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z */
5693 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z */
5694 #define call_num_get_char_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 4, istreambuf_iterator_char*, \
5695 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, void**), \
5696 (this, ret, first, last, base, state, pval))
5697 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_void
,36)
5698 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_void(const num_get
*this, istreambuf_iterator_char
*ret
,
5699 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, void **pval
)
5705 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5707 v
= _Stoullx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
5708 &first
, &last
, FMTFLAG_hex
, base
->loc
), &err
);
5709 if(v
!=(unsigned __int64
)((INT_PTR
)v
))
5710 *state
|= IOSTATE_failbit
;
5711 else if(end
!=tmp
&& !err
)
5712 *pval
= (void*)((INT_PTR
)v
);
5714 *state
|= IOSTATE_failbit
;
5717 *state
|= IOSTATE_eofbit
;
5723 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAPAX@Z */
5724 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAPEAX@Z */
5725 DEFINE_THISCALL_WRAPPER(num_get_char_get_void
,36)
5726 istreambuf_iterator_char
*__thiscall
num_get_char_get_void(const num_get
*this, istreambuf_iterator_char
*ret
,
5727 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, void **pval
)
5729 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5730 return call_num_get_char_do_get_void(this, ret
, first
, last
, base
, state
, pval
);
5733 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAO@Z */
5734 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z */
5735 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAN@Z */
5736 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z */
5737 #define call_num_get_char_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_char*, \
5738 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
5739 (this, ret, first, last, base, state, pval))
5740 #define call_num_get_char_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_char*, \
5741 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
5742 (this, ret, first, last, base, state, pval))
5743 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_double
,36)
5744 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_double(const num_get
*this, istreambuf_iterator_char
*ret
,
5745 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
5751 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5753 v
= _Stodx(tmp
, &end
, num_get_char__Getffld(this, tmp
, &first
, &last
, base
->loc
), &err
);
5754 if(end
!=tmp
&& !err
)
5757 *state
|= IOSTATE_failbit
;
5760 *state
|= IOSTATE_eofbit
;
5766 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAO@Z */
5767 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z */
5768 DEFINE_THISCALL_WRAPPER(num_get_char_get_ldouble
,36)
5769 istreambuf_iterator_char
*__thiscall
num_get_char_get_ldouble(const num_get
*this, istreambuf_iterator_char
*ret
,
5770 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
5772 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5773 return call_num_get_char_do_get_ldouble(this, ret
, first
, last
, base
, state
, pval
);
5776 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAN@Z */
5777 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAN@Z */
5778 DEFINE_THISCALL_WRAPPER(num_get_char_get_double
,36)
5779 istreambuf_iterator_char
*__thiscall
num_get_char_get_double(const num_get
*this, istreambuf_iterator_char
*ret
,
5780 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
5782 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5783 return call_num_get_char_do_get_double(this, ret
, first
, last
, base
, state
, pval
);
5786 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAM@Z */
5787 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z */
5788 #define call_num_get_char_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_char*, \
5789 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, float*), \
5790 (this, ret, first, last, base, state, pval))
5791 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_float
,36)
5792 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_float(const num_get
*this, istreambuf_iterator_char
*ret
,
5793 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, float *pval
)
5799 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5801 v
= _Stofx(tmp
, &end
, num_get_char__Getffld(this, tmp
, &first
, &last
, base
->loc
), &err
);
5802 if(end
!=tmp
&& !err
)
5805 *state
|= IOSTATE_failbit
;
5808 *state
|= IOSTATE_eofbit
;
5814 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAM@Z */
5815 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAM@Z */
5816 DEFINE_THISCALL_WRAPPER(num_get_char_get_float
,36)
5817 istreambuf_iterator_char
*__thiscall
num_get_char_get_float(const num_get
*this, istreambuf_iterator_char
*ret
,
5818 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, float *pval
)
5820 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5821 return call_num_get_char_do_get_float(this, ret
, first
, last
, base
, state
, pval
);
5824 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z */
5825 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z */
5826 #define call_num_get_char_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_char*, \
5827 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONGLONG*), \
5828 (this, ret, first, last, base, state, pval))
5829 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_uint64
,36)
5830 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_uint64(const num_get
*this, istreambuf_iterator_char
*ret
,
5831 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
5837 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5839 v
= _Stoullx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
5840 &first
, &last
, base
->fmtfl
, base
->loc
), &err
);
5841 if(end
!=tmp
&& !err
)
5844 *state
|= IOSTATE_failbit
;
5847 *state
|= IOSTATE_eofbit
;
5853 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z */
5854 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z */
5855 DEFINE_THISCALL_WRAPPER(num_get_char_get_uint64
,36)
5856 istreambuf_iterator_char
*__thiscall
num_get_char_get_uint64(const num_get
*this, istreambuf_iterator_char
*ret
,
5857 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
5859 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5860 return call_num_get_char_do_get_uint64(this, ret
, first
, last
, base
, state
, pval
);
5863 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z */
5864 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z */
5865 #define call_num_get_char_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_char*, \
5866 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONGLONG*), \
5867 (this, ret, first, last, base, state, pval))
5868 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_int64
,36)
5869 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_int64(const num_get
*this, istreambuf_iterator_char
*ret
,
5870 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
5876 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5878 v
= _Stollx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
5879 &first
, &last
, base
->fmtfl
, base
->loc
), &err
);
5880 if(end
!=tmp
&& !err
)
5883 *state
|= IOSTATE_failbit
;
5886 *state
|= IOSTATE_eofbit
;
5892 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_J@Z */
5893 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_J@Z */
5894 DEFINE_THISCALL_WRAPPER(num_get_char_get_int64
,36)
5895 istreambuf_iterator_char
*__thiscall
num_get_char_get_int64(const num_get
*this, istreambuf_iterator_char
*ret
,
5896 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
5898 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5899 return call_num_get_char_do_get_int64(this, ret
, first
, last
, base
, state
, pval
);
5902 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAK@Z */
5903 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z */
5904 #define call_num_get_char_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_char*, \
5905 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONG*), \
5906 (this, ret, first, last, base, state, pval))
5907 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_ulong
,36)
5908 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_ulong(const num_get
*this, istreambuf_iterator_char
*ret
,
5909 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONG
*pval
)
5915 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5917 v
= _Stoulx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
5918 &first
, &last
, base
->fmtfl
, base
->loc
), &err
);
5919 if(end
!=tmp
&& !err
)
5922 *state
|= IOSTATE_failbit
;
5925 *state
|= IOSTATE_eofbit
;
5931 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAK@Z */
5932 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAK@Z */
5933 DEFINE_THISCALL_WRAPPER(num_get_char_get_ulong
,36)
5934 istreambuf_iterator_char
*__thiscall
num_get_char_get_ulong(const num_get
*this, istreambuf_iterator_char
*ret
,
5935 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONG
*pval
)
5937 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5938 return call_num_get_char_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
5941 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z */
5942 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z */
5943 #define call_num_get_char_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_char*, \
5944 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONG*), \
5945 (this, ret, first, last, base, state, pval))
5946 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_long
,36)
5947 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_long(const num_get
*this, istreambuf_iterator_char
*ret
,
5948 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONG
*pval
)
5954 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5956 v
= _Stolx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
5957 &first
, &last
, base
->fmtfl
, base
->loc
), &err
);
5958 if(end
!=tmp
&& !err
)
5961 *state
|= IOSTATE_failbit
;
5964 *state
|= IOSTATE_eofbit
;
5970 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z */
5971 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAJ@Z */
5972 DEFINE_THISCALL_WRAPPER(num_get_char_get_long
,36)
5973 istreambuf_iterator_char
*__thiscall
num_get_char_get_long(const num_get
*this, istreambuf_iterator_char
*ret
,
5974 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONG
*pval
)
5976 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5977 return call_num_get_char_do_get_long(this, ret
, first
, last
, base
, state
, pval
);
5980 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAI@Z */
5981 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z */
5982 #define call_num_get_char_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_char*, \
5983 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned int*), \
5984 (this, ret, first, last, base, state, pval))
5985 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_uint
,36)
5986 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_uint(const num_get
*this, istreambuf_iterator_char
*ret
,
5987 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned int *pval
)
5989 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5990 return num_get_char_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
5993 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAI@Z */
5994 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAI@Z */
5995 DEFINE_THISCALL_WRAPPER(num_get_char_get_uint
,36)
5996 istreambuf_iterator_char
*__thiscall
num_get_char_get_uint(const num_get
*this, istreambuf_iterator_char
*ret
,
5997 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned int *pval
)
5999 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6000 return call_num_get_char_do_get_uint(this, ret
, first
, last
, base
, state
, pval
);
6003 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAG@Z */
6004 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z */
6005 #define call_num_get_char_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_char*, \
6006 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned short*), \
6007 (this, ret, first, last, base, state, pval))
6008 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_ushort
,36)
6009 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_ushort(const num_get
*this, istreambuf_iterator_char
*ret
,
6010 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned short *pval
)
6013 char tmp
[25], *beg
, *end
;
6016 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6018 b
= num_get_char__Getifld(this, tmp
,
6019 &first
, &last
, base
->fmtfl
, base
->loc
);
6020 beg
= tmp
+ (tmp
[0]=='-' ? 1 : 0);
6021 v
= _Stoulx(beg
, &end
, b
, &err
);
6023 if(v
!= (ULONG
)((unsigned short)v
))
6024 *state
|= IOSTATE_failbit
;
6025 else if(end
!=beg
&& !err
)
6026 *pval
= (tmp
[0]=='-' ? -((unsigned short)v
) : v
);
6028 *state
|= IOSTATE_failbit
;
6031 *state
|= IOSTATE_eofbit
;
6037 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAG@Z */
6038 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEAG@Z */
6039 DEFINE_THISCALL_WRAPPER(num_get_char_get_ushort
,36)
6040 istreambuf_iterator_char
*__thiscall
num_get_char_get_ushort(const num_get
*this, istreambuf_iterator_char
*ret
,
6041 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned short *pval
)
6043 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6044 return call_num_get_char_do_get_ushort(this, ret
, first
, last
, base
, state
, pval
);
6047 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z */
6048 /* ?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z */
6049 #define call_num_get_char_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_char*, \
6050 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, MSVCP_bool*), \
6051 (this, ret, first, last, base, state, pval))
6052 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_bool
,36)
6053 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_bool(const num_get
*this, istreambuf_iterator_char
*ret
,
6054 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, MSVCP_bool
*pval
)
6056 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6058 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
6059 numpunct_char
*numpunct
= numpunct_char_use_facet(base
->loc
);
6060 basic_string_char false_bstr
, true_bstr
;
6061 const char *pfalse
, *ptrue
;
6063 numpunct_char_falsename(numpunct
, &false_bstr
);
6064 numpunct_char_truename(numpunct
, &true_bstr
);
6065 pfalse
= MSVCP_basic_string_char_c_str(&false_bstr
);
6066 ptrue
= MSVCP_basic_string_char_c_str(&true_bstr
);
6068 for(istreambuf_iterator_char_val(&first
); first
.strbuf
;
6069 istreambuf_iterator_char_inc(&first
)) {
6070 if(pfalse
&& *pfalse
&& first
.val
!=*pfalse
)
6072 if(ptrue
&& *ptrue
&& first
.val
!=*ptrue
)
6075 if(pfalse
&& *pfalse
&& ptrue
&& !*ptrue
)
6077 if(ptrue
&& *ptrue
&& pfalse
&& !*pfalse
)
6085 if((!pfalse
|| !*pfalse
) && (!ptrue
|| !*ptrue
))
6094 *state
|= IOSTATE_failbit
;
6096 MSVCP_basic_string_char_dtor(&false_bstr
);
6097 MSVCP_basic_string_char_dtor(&true_bstr
);
6101 LONG v
= _Stolx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6102 &first
, &last
, base
->fmtfl
, base
->loc
), &err
);
6104 if(end
!=tmp
&& err
==0 && (v
==0 || v
==1))
6107 *state
|= IOSTATE_failbit
;
6111 *state
|= IOSTATE_eofbit
;
6112 memcpy(ret
, &first
, sizeof(first
));
6116 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_N@Z */
6117 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_N@Z */
6118 DEFINE_THISCALL_WRAPPER(num_get_char_get_bool
,36)
6119 istreambuf_iterator_char
*__thiscall
num_get_char_get_bool(const num_get
*this, istreambuf_iterator_char
*ret
,
6120 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, MSVCP_bool
*pval
)
6122 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6123 return call_num_get_char_do_get_bool(this, ret
, first
, last
, base
, state
, pval
);
6126 /* ?id@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
6127 locale_id num_put_char_id
= {0};
6129 /* num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
6130 extern const vtable_ptr MSVCP_num_put_char_vtable
;
6132 /* ?_Init@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
6133 /* ?_Init@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
6134 DEFINE_THISCALL_WRAPPER(num_put_char__Init
, 8)
6135 void __thiscall
num_put_char__Init(num_put
*this, const _Locinfo
*locinfo
)
6137 TRACE("(%p %p)\n", this, locinfo
);
6138 _Locinfo__Getcvt(locinfo
, &this->cvt
);
6141 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
6142 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
6143 DEFINE_THISCALL_WRAPPER(num_put_char_ctor_locinfo
, 12)
6144 num_put
* __thiscall
num_put_char_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
6146 TRACE("(%p %p %ld)\n", this, locinfo
, refs
);
6148 locale_facet_ctor_refs(&this->facet
, refs
);
6149 this->facet
.vtable
= &MSVCP_num_put_char_vtable
;
6151 num_put_char__Init(this, locinfo
);
6155 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
6156 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
6157 DEFINE_THISCALL_WRAPPER(num_put_char_ctor_refs
, 8)
6158 num_put
* __thiscall
num_put_char_ctor_refs(num_put
*this, MSVCP_size_t refs
)
6162 TRACE("(%p %lu)\n", this, refs
);
6164 _Locinfo_ctor(&locinfo
);
6165 num_put_char_ctor_locinfo(this, &locinfo
, refs
);
6166 _Locinfo_dtor(&locinfo
);
6170 /* ??_F?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
6171 /* ??_F?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
6172 DEFINE_THISCALL_WRAPPER(num_put_char_ctor
, 4)
6173 num_put
* __thiscall
num_put_char_ctor(num_put
*this)
6175 return num_put_char_ctor_refs(this, 0);
6178 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
6179 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
6180 DEFINE_THISCALL_WRAPPER(num_put_char_dtor
, 4)
6181 void __thiscall
num_put_char_dtor(num_put
*this)
6183 TRACE("(%p)\n", this);
6184 locale_facet_dtor(&this->facet
);
6187 DEFINE_THISCALL_WRAPPER(num_put_char_vector_dtor
, 8)
6188 num_put
* __thiscall
num_put_char_vector_dtor(num_put
*this, unsigned int flags
)
6190 TRACE("(%p %x)\n", this, flags
);
6192 /* we have an array, with the number of elements stored before the first object */
6193 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
6195 for(i
=*ptr
-1; i
>=0; i
--)
6196 num_put_char_dtor(this+i
);
6197 MSVCRT_operator_delete(ptr
);
6199 num_put_char_dtor(this);
6201 MSVCRT_operator_delete(this);
6207 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
6208 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
6209 static MSVCP_size_t
num_put_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
6211 TRACE("(%p %p)\n", facet
, loc
);
6213 if(facet
&& !*facet
) {
6216 *facet
= MSVCRT_operator_new(sizeof(num_put
));
6218 ERR("Out of memory\n");
6219 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
6223 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
6224 num_put_char_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
6225 _Locinfo_dtor(&locinfo
);
6231 num_put
* num_put_char_use_facet(const locale
*loc
)
6233 static num_put
*obj
= NULL
;
6236 const locale_facet
*fac
;
6238 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
6239 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_char_id
));
6241 _Lockit_dtor(&lock
);
6242 return (num_put
*)fac
;
6246 _Lockit_dtor(&lock
);
6250 num_put_char__Getcat(&fac
, loc
);
6251 obj
= (num_put
*)fac
;
6252 locale_facet__Incref(&obj
->facet
);
6253 locale_facet_register(&obj
->facet
);
6254 _Lockit_dtor(&lock
);
6259 /* ?_Put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@PBDI@Z */
6260 /* ?_Put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@PEBD_K@Z */
6261 ostreambuf_iterator_char
* __cdecl
num_put_char__Put(const num_put
*this, ostreambuf_iterator_char
*ret
,
6262 ostreambuf_iterator_char dest
, const char *ptr
, MSVCP_size_t count
)
6264 TRACE("(%p %p %p %ld)\n", this, ret
, ptr
, count
);
6266 for(; count
>0; count
--)
6267 ostreambuf_iterator_char_put(&dest
, *ptr
++);
6273 /* ?_Putc@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@PBDI@Z */
6274 /* ?_Putc@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@PEBD_K@Z */
6275 ostreambuf_iterator_char
* __cdecl
num_put_char__Putc(const num_put
*this, ostreambuf_iterator_char
*ret
,
6276 ostreambuf_iterator_char dest
, const char *ptr
, MSVCP_size_t count
)
6278 TRACE("(%p %p %p %ld)\n", this, ret
, ptr
, count
);
6280 for(; count
>0; count
--)
6281 ostreambuf_iterator_char_put(&dest
, *ptr
++);
6287 /* ?_Putgrouped@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@PBDID@Z */
6288 /* ?_Putgrouped@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@PEBD_KD@Z */
6289 ostreambuf_iterator_char
* __cdecl
num_put_char__Putgrouped(const num_put
*this, ostreambuf_iterator_char
*ret
,
6290 ostreambuf_iterator_char dest
, const char *ptr
, MSVCP_size_t count
, char delim
)
6292 FIXME("(%p %p %p %ld %d) stub\n", this, ret
, ptr
, count
, delim
);
6296 /* ?_Rep@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@DI@Z */
6297 /* ?_Rep@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@D_K@Z */
6298 ostreambuf_iterator_char
* __cdecl
num_put_char__Rep(const num_put
*this, ostreambuf_iterator_char
*ret
,
6299 ostreambuf_iterator_char dest
, char c
, MSVCP_size_t count
)
6301 TRACE("(%p %p %d %ld)\n", this, ret
, c
, count
);
6303 for(; count
>0; count
--)
6304 ostreambuf_iterator_char_put(&dest
, c
);
6310 /* ?_Ffmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAPADPADDH@Z */
6311 /* ?_Ffmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAPEADPEADDH@Z */
6312 char* __cdecl
num_put_char__Ffmt(const num_put
*this, char *fmt
, char spec
, int fmtfl
)
6314 int type
= fmtfl
& FMTFLAG_floatfield
;
6317 TRACE("(%p %p %d %d)\n", this, fmt
, spec
, fmtfl
);
6320 if(fmtfl
& FMTFLAG_showpos
)
6322 if(fmtfl
& FMTFLAG_showbase
)
6329 if(type
== FMTFLAG_fixed
)
6331 else if(type
== FMTFLAG_scientific
)
6332 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'E' : 'e';
6333 else if(type
== (FMTFLAG_fixed
|FMTFLAG_scientific
))
6334 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'A' : 'a';
6336 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'G' : 'g';
6342 /* ?_Fput@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBDIIII@Z */
6343 /* ?_Fput@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBD_K333@Z */
6344 ostreambuf_iterator_char
* __cdecl
num_put_char__Fput(const num_put
*this, ostreambuf_iterator_char
*ret
,
6345 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const char *buf
, MSVCP_size_t bef_point
,
6346 MSVCP_size_t aft_point
, MSVCP_size_t trailing
, MSVCP_size_t count
)
6348 FIXME("(%p %p %p %d %p %ld %ld %ld %ld) stub\n", this, ret
, base
,
6349 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
6353 /* TODO: This function should be removed when num_put_char__Fput is implemented */
6354 static ostreambuf_iterator_char
* num_put_char_fput(const num_put
*this, ostreambuf_iterator_char
*ret
,
6355 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, char *buf
, MSVCP_size_t count
)
6357 numpunct_char
*numpunct
= numpunct_char_use_facet(base
->loc
);
6358 basic_string_char grouping_bstr
;
6359 const char *grouping
;
6360 char *p
, sep
= *localeconv()->decimal_point
;
6361 int cur_group
= 0, group_size
= 0;
6362 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
6365 TRACE("(%p %p %p %d %s %ld)\n", this, ret
, base
, fill
, buf
, count
);
6367 /* Change decimal point */
6368 for(p
=buf
; p
<buf
+count
; p
++) {
6370 *p
= numpunct_char_decimal_point(numpunct
);
6376 /* Add separators to number */
6377 numpunct_char_grouping(numpunct
, &grouping_bstr
);
6378 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
6379 sep
= grouping
[0] ? numpunct_char_thousands_sep(numpunct
) : '\0';
6381 for(; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
6383 if(group_size
== grouping
[cur_group
]) {
6385 if(grouping
[cur_group
+1])
6388 memmove(p
+1, p
, buf
+count
-p
);
6393 MSVCP_basic_string_char_dtor(&grouping_bstr
);
6395 /* Display number with padding */
6396 if(count
>= base
->wide
)
6399 pad
= base
->wide
-count
;
6402 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
6403 num_put_char__Putc(this, &dest
, dest
, buf
, 1);
6406 if(adjustfield
!= FMTFLAG_left
) {
6407 num_put_char__Rep(this, ret
, dest
, fill
, pad
);
6410 num_put_char__Putc(this, &dest
, dest
, buf
, count
);
6411 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
6414 /* ?_Ifmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAPADPADPBDH@Z */
6415 /* ?_Ifmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
6416 char* __cdecl
num_put_char__Ifmt(const num_put
*this, char *fmt
, const char *spec
, int fmtfl
)
6418 int base
= fmtfl
& FMTFLAG_basefield
;
6421 TRACE("(%p %p %p %d)\n", this, fmt
, spec
, fmtfl
);
6424 if(fmtfl
& FMTFLAG_showpos
)
6426 if(fmtfl
& FMTFLAG_showbase
)
6433 if(base
== FMTFLAG_oct
)
6435 else if(base
== FMTFLAG_hex
)
6436 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'X' : 'x';
6444 /* ?_Iput@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPADI@Z */
6445 /* ?_Iput@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEAD_K@Z */
6446 ostreambuf_iterator_char
* __cdecl
num_put_char__Iput(const num_put
*this, ostreambuf_iterator_char
*ret
,
6447 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, char *buf
, MSVCP_size_t count
)
6449 numpunct_char
*numpunct
= numpunct_char_use_facet(base
->loc
);
6450 basic_string_char grouping_bstr
;
6451 const char *grouping
;
6453 int cur_group
= 0, group_size
= 0;
6454 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
6457 TRACE("(%p %p %p %d %s %ld)\n", this, ret
, base
, fill
, buf
, count
);
6459 /* Add separators to number */
6460 numpunct_char_grouping(numpunct
, &grouping_bstr
);
6461 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
6462 sep
= grouping
[0] ? numpunct_char_thousands_sep(numpunct
) : '\0';
6464 for(p
=buf
+count
-1; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
6466 if(group_size
== grouping
[cur_group
]) {
6468 if(grouping
[cur_group
+1])
6471 memmove(p
+1, p
, buf
+count
-p
);
6476 MSVCP_basic_string_char_dtor(&grouping_bstr
);
6478 /* Display number with padding */
6479 if(count
>= base
->wide
)
6482 pad
= base
->wide
-count
;
6485 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
6486 num_put_char__Putc(this, &dest
, dest
, buf
, 1);
6488 }else if((adjustfield
& FMTFLAG_internal
) && (buf
[1]=='x' || buf
[1]=='X')) {
6489 num_put_char__Putc(this, &dest
, dest
, buf
, 2);
6492 if(adjustfield
!= FMTFLAG_left
) {
6493 num_put_char__Rep(this, ret
, dest
, fill
, pad
);
6496 num_put_char__Putc(this, &dest
, dest
, buf
, count
);
6497 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
6500 /* ?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DJ@Z */
6501 /* ?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DJ@Z */
6502 #define call_num_put_char_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_char*, \
6503 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, LONG), \
6504 (this, ret, dest, base, fill, v))
6505 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_long
, 28)
6506 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_long(const num_put
*this, ostreambuf_iterator_char
*ret
,
6507 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, LONG v
)
6509 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
6510 char fmt
[7]; /* strlen("%+#lld")+1 */
6512 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
6514 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
6515 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
6518 /* ?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DJ@Z */
6519 /* ?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DJ@Z */
6520 DEFINE_THISCALL_WRAPPER(num_put_char_put_long
, 28)
6521 ostreambuf_iterator_char
* __thiscall
num_put_char_put_long(const num_put
*this, ostreambuf_iterator_char
*ret
,
6522 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, LONG v
)
6524 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
6525 return call_num_put_char_do_put_long(this, ret
, dest
, base
, fill
, v
);
6528 /* ?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DK@Z */
6529 /* ?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DK@Z */
6530 #define call_num_put_char_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_char*, \
6531 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, ULONG), \
6532 (this, ret, dest, base, fill, v))
6533 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ulong
, 28)
6534 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_ulong(const num_put
*this, ostreambuf_iterator_char
*ret
,
6535 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, ULONG v
)
6537 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
6538 char fmt
[7]; /* strlen("%+#lld")+1 */
6540 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
6542 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
6543 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
6546 /* ?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DK@Z */
6547 /* ?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DK@Z */
6548 DEFINE_THISCALL_WRAPPER(num_put_char_put_ulong
, 28)
6549 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ulong(const num_put
*this, ostreambuf_iterator_char
*ret
,
6550 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, ULONG v
)
6552 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
6553 return call_num_put_char_do_put_ulong(this, ret
, dest
, base
, fill
, v
);
6556 static inline streamsize
get_precision(const ios_base
*base
)
6558 return base
->prec
<= 0 && !(base
->fmtfl
& FMTFLAG_fixed
) ? 6 : base
->prec
;
6561 /* ?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DN@Z */
6562 /* ?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DN@Z */
6563 /* ?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DO@Z */
6564 /* ?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DO@Z */
6565 #define call_num_put_char_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_char*, \
6566 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
6567 (this, ret, dest, base, fill, v))
6568 #define call_num_put_char_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 8, ostreambuf_iterator_char*, \
6569 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
6570 (this, ret, dest, base, fill, v))
6571 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_double
, 32)
6572 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_double(const num_put
*this, ostreambuf_iterator_char
*ret
,
6573 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
6576 char fmt
[8]; /* strlen("%+#.*lg")+1 */
6580 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
6582 num_put_char__Ffmt(this, fmt
, '\0', base
->fmtfl
);
6583 prec
= get_precision(base
);
6584 size
= _scprintf(fmt
, prec
, v
);
6586 /* TODO: don't use dynamic allocation */
6587 tmp
= MSVCRT_operator_new(size
*2);
6589 ERR("Out of memory\n");
6590 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
6592 num_put_char_fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, prec
, v
));
6593 MSVCRT_operator_delete(tmp
);
6597 /* ?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DN@Z */
6598 /* ?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DN@Z */
6599 DEFINE_THISCALL_WRAPPER(num_put_char_put_double
, 32)
6600 ostreambuf_iterator_char
* __thiscall
num_put_char_put_double(const num_put
*this, ostreambuf_iterator_char
*ret
,
6601 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
6603 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
6604 return call_num_put_char_do_put_double(this, ret
, dest
, base
, fill
, v
);
6607 /* ?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DO@Z */
6608 /* ?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DO@Z */
6609 DEFINE_THISCALL_WRAPPER(num_put_char_put_ldouble
, 32)
6610 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ldouble(const num_put
*this, ostreambuf_iterator_char
*ret
,
6611 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
6613 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
6614 return call_num_put_char_do_put_ldouble(this, ret
, dest
, base
, fill
, v
);
6617 /* ?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBX@Z */
6618 /* ?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBX@Z */
6619 #define call_num_put_char_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_char*, \
6620 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const void*), \
6621 (this, ret, dest, base, fill, v))
6622 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ptr
, 28)
6623 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_ptr(const num_put
*this, ostreambuf_iterator_char
*ret
,
6624 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const void *v
)
6626 char tmp
[17]; /* 8(16^8==2^64)*2(separators beetwen every digit) + 1 */
6628 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
6630 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
6633 /* ?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBX@Z */
6634 /* ?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBX@Z */
6635 DEFINE_THISCALL_WRAPPER(num_put_char_put_ptr
, 28)
6636 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ptr(const num_put
*this, ostreambuf_iterator_char
*ret
,
6637 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const void *v
)
6639 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
6640 return call_num_put_char_do_put_ptr(this, ret
, dest
, base
, fill
, v
);
6643 /* ?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@D_J@Z */
6644 /* ?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_J@Z */
6645 #define call_num_put_char_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_char*, \
6646 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, __int64), \
6647 (this, ret, dest, base, fill, v))
6648 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_int64
, 32)
6649 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_int64(const num_put
*this, ostreambuf_iterator_char
*ret
,
6650 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, __int64 v
)
6652 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
6653 char fmt
[7]; /* strlen("%+#lld")+1 */
6655 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
6657 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
6658 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
6661 /* ?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@D_J@Z */
6662 /* ?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_J@Z */
6663 DEFINE_THISCALL_WRAPPER(num_put_char_put_int64
, 32)
6664 ostreambuf_iterator_char
* __thiscall
num_put_char_put_int64(const num_put
*this, ostreambuf_iterator_char
*ret
,
6665 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, __int64 v
)
6667 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
6668 return call_num_put_char_do_put_int64(this, ret
, dest
, base
, fill
, v
);
6671 /* ?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@D_K@Z */
6672 /* ?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_K@Z */
6673 #define call_num_put_char_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_char*, \
6674 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, unsigned __int64), \
6675 (this, ret, dest, base, fill, v))
6676 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_uint64
, 32)
6677 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_uint64(const num_put
*this, ostreambuf_iterator_char
*ret
,
6678 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, unsigned __int64 v
)
6680 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
6681 char fmt
[7]; /* strlen("%+#lld")+1 */
6683 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
6685 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
6686 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
6689 /* ?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@D_K@Z */
6690 /* ?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_K@Z */
6691 DEFINE_THISCALL_WRAPPER(num_put_char_put_uint64
, 32)
6692 ostreambuf_iterator_char
* __thiscall
num_put_char_put_uint64(const num_put
*this, ostreambuf_iterator_char
*ret
,
6693 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, unsigned __int64 v
)
6695 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
6696 return call_num_put_char_do_put_uint64(this, ret
, dest
, base
, fill
, v
);
6699 /* ?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@D_N@Z */
6700 /* ?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_N@Z */
6701 #define call_num_put_char_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_char*, \
6702 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, MSVCP_bool), \
6703 (this, ret, dest, base, fill, v))
6704 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_bool
, 28)
6705 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_bool(const num_put
*this, ostreambuf_iterator_char
*ret
,
6706 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, MSVCP_bool v
)
6708 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
6710 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
6711 numpunct_char
*numpunct
= numpunct_char_use_facet(base
->loc
);
6712 basic_string_char str
;
6713 MSVCP_size_t pad
, len
;
6716 numpunct_char_truename(numpunct
, &str
);
6718 numpunct_char_falsename(numpunct
, &str
);
6720 len
= MSVCP_basic_string_char_length(&str
);
6721 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
6724 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
6725 num_put_char__Rep(this, &dest
, dest
, fill
, pad
);
6728 num_put_char__Putc(this, &dest
, dest
, MSVCP_basic_string_char_c_str(&str
), len
);
6729 MSVCP_basic_string_char_dtor(&str
);
6730 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
6733 return num_put_char_put_long(this, ret
, dest
, base
, fill
, v
);
6736 /* ?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@D_N@Z */
6737 /* ?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@D_N@Z */
6738 DEFINE_THISCALL_WRAPPER(num_put_char_put_bool
, 28)
6739 ostreambuf_iterator_char
* __thiscall
num_put_char_put_bool(const num_put
*this, ostreambuf_iterator_char
*ret
,
6740 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, MSVCP_bool v
)
6742 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
6743 return call_num_put_char_do_put_bool(this, ret
, dest
, base
, fill
, v
);
6746 /* ?id@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
6747 locale_id num_put_wchar_id
= {0};
6748 /* ?id@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
6749 locale_id num_put_short_id
= {0};
6751 /* num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
6752 extern const vtable_ptr MSVCP_num_put_wchar_vtable
;
6753 /* num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
6754 extern const vtable_ptr MSVCP_num_put_short_vtable
;
6756 /* ?_Init@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
6757 /* ?_Init@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
6758 DEFINE_THISCALL_WRAPPER(num_put_wchar__Init
, 8)
6759 void __thiscall
num_put_wchar__Init(num_put
*this, const _Locinfo
*locinfo
)
6761 TRACE("(%p %p)\n", this, locinfo
);
6762 _Locinfo__Getcvt(locinfo
, &this->cvt
);
6765 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
6766 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
6767 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor_locinfo
, 12)
6768 num_put
* __thiscall
num_put_wchar_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
6770 TRACE("(%p %p %ld)\n", this, locinfo
, refs
);
6772 locale_facet_ctor_refs(&this->facet
, refs
);
6773 this->facet
.vtable
= &MSVCP_num_put_wchar_vtable
;
6775 num_put_wchar__Init(this, locinfo
);
6779 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
6780 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
6781 DEFINE_THISCALL_WRAPPER(num_put_short_ctor_locinfo
, 12)
6782 num_put
* __thiscall
num_put_short_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
6784 num_put_wchar_ctor_locinfo(this, locinfo
, refs
);
6785 this->facet
.vtable
= &MSVCP_num_put_short_vtable
;
6789 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
6790 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
6791 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor_refs
, 8)
6792 num_put
* __thiscall
num_put_wchar_ctor_refs(num_put
*this, MSVCP_size_t refs
)
6796 TRACE("(%p %lu)\n", this, refs
);
6798 _Locinfo_ctor(&locinfo
);
6799 num_put_wchar_ctor_locinfo(this, &locinfo
, refs
);
6800 _Locinfo_dtor(&locinfo
);
6804 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
6805 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
6806 DEFINE_THISCALL_WRAPPER(num_put_short_ctor_refs
, 8)
6807 num_put
* __thiscall
num_put_short_ctor_refs(num_put
*this, MSVCP_size_t refs
)
6809 num_put_wchar_ctor_refs(this, refs
);
6810 this->facet
.vtable
= &MSVCP_num_put_short_vtable
;
6814 /* ??_F?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
6815 /* ??_F?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
6816 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor
, 4)
6817 num_put
* __thiscall
num_put_wchar_ctor(num_put
*this)
6819 return num_put_wchar_ctor_refs(this, 0);
6822 /* ??_F?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ */
6823 /* ??_F?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ */
6824 DEFINE_THISCALL_WRAPPER(num_put_short_ctor
, 4)
6825 num_put
* __thiscall
num_put_short_ctor(num_put
*this)
6827 return num_put_short_ctor_refs(this, 0);
6830 /* ??1?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
6831 /* ??1?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
6832 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
6833 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
6834 DEFINE_THISCALL_WRAPPER(num_put_wchar_dtor
, 4)
6835 void __thiscall
num_put_wchar_dtor(num_put
*this)
6837 TRACE("(%p)\n", this);
6838 locale_facet_dtor(&this->facet
);
6841 DEFINE_THISCALL_WRAPPER(num_put_wchar_vector_dtor
, 8)
6842 num_put
* __thiscall
num_put_wchar_vector_dtor(num_put
*this, unsigned int flags
)
6844 TRACE("(%p %x)\n", this, flags
);
6846 /* we have an array, with the number of elements stored before the first object */
6847 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
6849 for(i
=*ptr
-1; i
>=0; i
--)
6850 num_put_wchar_dtor(this+i
);
6851 MSVCRT_operator_delete(ptr
);
6853 num_put_wchar_dtor(this);
6855 MSVCRT_operator_delete(this);
6861 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
6862 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
6863 static MSVCP_size_t
num_put_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
6865 TRACE("(%p %p)\n", facet
, loc
);
6867 if(facet
&& !*facet
) {
6870 *facet
= MSVCRT_operator_new(sizeof(num_put
));
6872 ERR("Out of memory\n");
6873 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
6877 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
6878 num_put_wchar_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
6879 _Locinfo_dtor(&locinfo
);
6885 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
6886 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
6887 static MSVCP_size_t
num_put_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
6889 TRACE("(%p %p)\n", facet
, loc
);
6891 if(facet
&& !*facet
) {
6894 *facet
= MSVCRT_operator_new(sizeof(num_put
));
6896 ERR("Out of memory\n");
6897 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
6901 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
6902 num_put_short_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
6903 _Locinfo_dtor(&locinfo
);
6909 num_put
* num_put_wchar_use_facet(const locale
*loc
)
6911 static num_put
*obj
= NULL
;
6914 const locale_facet
*fac
;
6916 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
6917 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_wchar_id
));
6919 _Lockit_dtor(&lock
);
6920 return (num_put
*)fac
;
6924 _Lockit_dtor(&lock
);
6928 num_put_wchar__Getcat(&fac
, loc
);
6929 obj
= (num_put
*)fac
;
6930 locale_facet__Incref(&obj
->facet
);
6931 locale_facet_register(&obj
->facet
);
6932 _Lockit_dtor(&lock
);
6937 num_put
* num_put_short_use_facet(const locale
*loc
)
6939 static num_put
*obj
= NULL
;
6942 const locale_facet
*fac
;
6944 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
6945 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_short_id
));
6947 _Lockit_dtor(&lock
);
6948 return (num_put
*)fac
;
6952 _Lockit_dtor(&lock
);
6956 num_put_short__Getcat(&fac
, loc
);
6957 obj
= (num_put
*)fac
;
6958 locale_facet__Incref(&obj
->facet
);
6959 locale_facet_register(&obj
->facet
);
6960 _Lockit_dtor(&lock
);
6965 /* ?_Put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@PB_WI@Z */
6966 /* ?_Put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@PEB_W_K@Z */
6967 /* ?_Put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@PBGI@Z */
6968 /* ?_Put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@PEBG_K@Z */
6969 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Put(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
6970 ostreambuf_iterator_wchar dest
, const wchar_t *ptr
, MSVCP_size_t count
)
6972 TRACE("(%p %p %s %ld)\n", this, ret
, debugstr_wn(ptr
, count
), count
);
6974 for(; count
>0; count
--)
6975 ostreambuf_iterator_wchar_put(&dest
, *ptr
++);
6981 /* ?_Putc@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@PBDI@Z */
6982 /* ?_Putc@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@PEBD_K@Z */
6983 /* ?_Putc@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@PBDI@Z */
6984 /* ?_Putc@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@PEBD_K@Z */
6985 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Putc(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
6986 ostreambuf_iterator_wchar dest
, const char *ptr
, MSVCP_size_t count
)
6991 TRACE("(%p %p %s %ld)\n", this, ret
, debugstr_an(ptr
, count
), count
);
6993 for(; count
>0; count
--) {
6994 if(_Mbrtowc(&ch
, ptr
++, 1, &state
, &this->cvt
) == 1)
6995 ostreambuf_iterator_wchar_put(&dest
, ch
);
7002 /* ?_Putgrouped@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@PBDI_W@Z */
7003 /* ?_Putgrouped@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@PEBD_K_W@Z */
7004 /* ?_Putgrouped@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@PBDIG@Z */
7005 /* ?_Putgrouped@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@PEBD_KG@Z */
7006 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Putgrouped(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7007 ostreambuf_iterator_wchar dest
, const char *ptr
, MSVCP_size_t count
, wchar_t delim
)
7009 FIXME("(%p %p %p %ld %d) stub\n", this, ret
, ptr
, count
, delim
);
7013 /* ?_Rep@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@_WI@Z */
7014 /* ?_Rep@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@_W_K@Z */
7015 /* ?_Rep@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@GI@Z */
7016 /* ?_Rep@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@G_K@Z */
7017 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Rep(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7018 ostreambuf_iterator_wchar dest
, wchar_t c
, MSVCP_size_t count
)
7020 TRACE("(%p %p %d %ld)\n", this, ret
, c
, count
);
7022 for(; count
>0; count
--)
7023 ostreambuf_iterator_wchar_put(&dest
, c
);
7029 /* ?_Ffmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAPADPADDH@Z */
7030 /* ?_Ffmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAPEADPEADDH@Z */
7031 /* ?_Ffmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAPADPADDH@Z */
7032 /* ?_Ffmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAPEADPEADDH@Z */
7033 char* __cdecl
num_put_wchar__Ffmt(const num_put
*this, char *fmt
, char spec
, int fmtfl
)
7035 int type
= fmtfl
& FMTFLAG_floatfield
;
7038 TRACE("(%p %p %d %d)\n", this, fmt
, spec
, fmtfl
);
7041 if(fmtfl
& FMTFLAG_showpos
)
7043 if(fmtfl
& FMTFLAG_showbase
)
7050 if(type
== FMTFLAG_fixed
)
7052 else if(type
== FMTFLAG_scientific
)
7053 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'E' : 'e';
7054 else if(type
== (FMTFLAG_fixed
|FMTFLAG_scientific
))
7055 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'A' : 'a';
7057 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'G' : 'g';
7063 /* ?_Fput@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBDIIII@Z */
7064 /* ?_Fput@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBD_K444@Z */
7065 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7066 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const char *buf
, MSVCP_size_t bef_point
,
7067 MSVCP_size_t aft_point
, MSVCP_size_t trailing
, MSVCP_size_t count
)
7069 FIXME("(%p %p %p %d %p %ld %ld %ld %ld) stub\n", this, ret
, base
,
7070 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
7074 /* ?_Fput@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBDIIII@Z */
7075 /* ?_Fput@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBD_K333@Z */
7076 ostreambuf_iterator_wchar
* __cdecl
num_put_short__Fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7077 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const char *buf
, MSVCP_size_t bef_point
,
7078 MSVCP_size_t aft_point
, MSVCP_size_t trailing
, MSVCP_size_t count
)
7080 FIXME("(%p %p %p %d %p %ld %ld %ld %ld) stub\n", this, ret
, base
,
7081 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
7085 /* TODO: This function should be removed when num_put_wchar__Fput is implemented */
7086 static ostreambuf_iterator_wchar
* num_put__fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7087 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
,
7088 MSVCP_size_t count
, numpunct_wchar
*numpunct
)
7090 basic_string_char grouping_bstr
;
7091 const char *grouping
;
7092 char *p
, dec_point
= *localeconv()->decimal_point
;
7094 int cur_group
= 0, group_size
= 0;
7095 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
7096 MSVCP_size_t i
, pad
;
7098 TRACE("(%p %p %p %d %s %ld)\n", this, ret
, base
, fill
, buf
, count
);
7100 for(p
=buf
; p
<buf
+count
; p
++) {
7106 /* Add separators to number */
7107 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
7108 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
7109 sep
= grouping
[0] ? numpunct_wchar_thousands_sep(numpunct
) : '\0';
7111 for(; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
7113 if(group_size
== grouping
[cur_group
]) {
7115 if(grouping
[cur_group
+1])
7118 memmove(p
+1, p
, buf
+count
-p
);
7119 *p
= '\0'; /* mark thousands separator positions */
7123 MSVCP_basic_string_char_dtor(&grouping_bstr
);
7125 /* Display number with padding */
7126 if(count
>= base
->wide
)
7129 pad
= base
->wide
-count
;
7132 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
7133 num_put_wchar__Putc(this, &dest
, dest
, buf
, 1);
7136 if(adjustfield
!= FMTFLAG_left
) {
7137 num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
7141 for(i
=0; i
<count
; i
++) {
7142 if(buf
[i
] == dec_point
)
7143 num_put_wchar__Rep(this, &dest
, dest
, numpunct_wchar_decimal_point(numpunct
), 1);
7145 num_put_wchar__Rep(this, &dest
, dest
, sep
, 1);
7147 num_put_wchar__Putc(this, &dest
, dest
, buf
+i
, 1);
7150 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
7153 /* ?_Ifmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAPADPADPBDH@Z */
7154 /* ?_Ifmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
7155 /* ?_Ifmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAPADPADPBDH@Z */
7156 /* ?_Ifmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
7157 char* __cdecl
num_put_wchar__Ifmt(const num_put
*this, char *fmt
, const char *spec
, int fmtfl
)
7159 int base
= fmtfl
& FMTFLAG_basefield
;
7162 TRACE("(%p %p %p %d)\n", this, fmt
, spec
, fmtfl
);
7165 if(fmtfl
& FMTFLAG_showpos
)
7167 if(fmtfl
& FMTFLAG_showbase
)
7174 if(base
== FMTFLAG_oct
)
7176 else if(base
== FMTFLAG_hex
)
7177 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'X' : 'x';
7185 static ostreambuf_iterator_wchar
* num_put__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7186 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
,
7187 MSVCP_size_t count
, numpunct_wchar
*numpunct
)
7189 basic_string_char grouping_bstr
;
7190 const char *grouping
;
7193 int cur_group
= 0, group_size
= 0;
7194 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
7195 MSVCP_size_t i
, pad
;
7197 TRACE("(%p %p %p %d %s %ld)\n", this, ret
, base
, fill
, buf
, count
);
7199 /* Add separators to number */
7200 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
7201 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
7202 sep
= grouping
[0] ? numpunct_wchar_thousands_sep(numpunct
) : '\0';
7204 for(p
=buf
+count
-1; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
7206 if(group_size
== grouping
[cur_group
]) {
7208 if(grouping
[cur_group
+1])
7211 memmove(p
+1, p
, buf
+count
-p
);
7212 *p
= '\0'; /* mark thousands separator positions */
7216 MSVCP_basic_string_char_dtor(&grouping_bstr
);
7218 /* Display number with padding */
7219 if(count
>= base
->wide
)
7222 pad
= base
->wide
-count
;
7225 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
7226 num_put_wchar__Putc(this, &dest
, dest
, buf
, 1);
7228 }else if((adjustfield
& FMTFLAG_internal
) && (buf
[1]=='x' || buf
[1]=='X')) {
7229 num_put_wchar__Putc(this, &dest
, dest
, buf
, 2);
7232 if(adjustfield
!= FMTFLAG_left
) {
7233 num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
7237 for(i
=0; i
<count
; i
++) {
7239 num_put_wchar__Rep(this, &dest
, dest
, sep
, 1);
7241 num_put_wchar__Putc(this, &dest
, dest
, buf
+i
, 1);
7244 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
7247 /* ?_Iput@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPADI@Z */
7248 /* ?_Iput@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEAD_K@Z */
7249 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7250 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
, MSVCP_size_t count
)
7252 return num_put__Iput(this, ret
, dest
, base
, fill
, buf
, count
, numpunct_wchar_use_facet(base
->loc
));
7255 /* ?_Iput@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPADI@Z */
7256 /* ?_Iput@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEAD_K@Z */
7257 ostreambuf_iterator_wchar
* __cdecl
num_put_short__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7258 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
, MSVCP_size_t count
)
7260 return num_put__Iput(this, ret
, dest
, base
, fill
, buf
, count
, numpunct_short_use_facet(base
->loc
));
7263 /* ?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WJ@Z */
7264 /* ?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WJ@Z */
7265 #define call_num_put_wchar_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_wchar*, \
7266 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, LONG), \
7267 (this, ret, dest, base, fill, v))
7268 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_long
, 28)
7269 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7270 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
7272 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7273 char fmt
[7]; /* strlen("%+#lld")+1 */
7275 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7277 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
7278 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
7281 /* ?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GJ@Z */
7282 /* ?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GJ@Z */
7283 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_long
, 28)
7284 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7285 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
7287 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7288 char fmt
[7]; /* strlen("%+#lld")+1 */
7290 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7292 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
7293 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
7296 /* ?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WJ@Z */
7297 /* ?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WJ@Z */
7298 /* ?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GJ@Z */
7299 /* ?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GJ@Z */
7300 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_long
, 28)
7301 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7302 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
7304 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7305 return call_num_put_wchar_do_put_long(this, ret
, dest
, base
, fill
, v
);
7308 /* ?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WK@Z */
7309 /* ?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WK@Z */
7310 #define call_num_put_wchar_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_wchar*, \
7311 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, ULONG), \
7312 (this, ret, dest, base, fill, v))
7313 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ulong
, 28)
7314 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7315 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
7317 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7318 char fmt
[7]; /* strlen("%+#lld")+1 */
7320 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7322 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
7323 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
7326 /* ?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GK@Z */
7327 /* ?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GK@Z */
7328 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ulong
, 28)
7329 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7330 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
7332 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7333 char fmt
[7]; /* strlen("%+#lld")+1 */
7335 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7337 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
7338 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
7341 /* ?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WK@Z */
7342 /* ?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WK@Z */
7343 /* ?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GK@Z */
7344 /* ?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GK@Z */
7345 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ulong
, 28)
7346 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7347 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
7349 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7350 return call_num_put_wchar_do_put_ulong(this, ret
, dest
, base
, fill
, v
);
7353 /* ?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WN@Z */
7354 /* ?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WN@Z */
7355 /* ?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WO@Z */
7356 /* ?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WO@Z */
7357 #define call_num_put_wchar_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_wchar*, \
7358 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
7359 (this, ret, dest, base, fill, v))
7360 #define call_num_put_wchar_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 8, ostreambuf_iterator_wchar*, \
7361 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
7362 (this, ret, dest, base, fill, v))
7363 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_double
, 32)
7364 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7365 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
7368 char fmt
[8]; /* strlen("%+#.*lg")+1 */
7371 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7373 num_put_wchar__Ffmt(this, fmt
, '\0', base
->fmtfl
);
7374 size
= _scprintf(fmt
, base
->prec
, v
);
7376 /* TODO: don't use dynamic allocation */
7377 tmp
= MSVCRT_operator_new(size
*2);
7379 ERR("Out of memory\n");
7380 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7382 num_put__fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, base
->prec
, v
),
7383 numpunct_wchar_use_facet(base
->loc
));
7384 MSVCRT_operator_delete(tmp
);
7388 /* ?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GN@Z */
7389 /* ?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GN@Z */
7390 /* ?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GO@Z */
7391 /* ?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GO@Z */
7392 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_double
, 32)
7393 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7394 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
7397 char fmt
[8]; /* strlen("%+#.*lg")+1 */
7401 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7403 num_put_wchar__Ffmt(this, fmt
, '\0', base
->fmtfl
);
7404 prec
= get_precision(base
);
7405 size
= _scprintf(fmt
, prec
, v
);
7407 /* TODO: don't use dynamic allocation */
7408 tmp
= MSVCRT_operator_new(size
*2);
7410 ERR("Out of memory\n");
7411 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7413 num_put__fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, prec
, v
),
7414 numpunct_short_use_facet(base
->loc
));
7415 MSVCRT_operator_delete(tmp
);
7419 /* ?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WN@Z */
7420 /* ?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WN@Z */
7421 /* ?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GN@Z */
7422 /* ?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GN@Z */
7423 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_double
, 32)
7424 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7425 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
7427 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7428 return call_num_put_wchar_do_put_double(this, ret
, dest
, base
, fill
, v
);
7431 /* ?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WO@Z */
7432 /* ?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WO@Z */
7433 /* ?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GO@Z */
7434 /* ?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GO@Z */
7435 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ldouble
, 32)
7436 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ldouble(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7437 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
7439 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7440 return call_num_put_wchar_do_put_ldouble(this, ret
, dest
, base
, fill
, v
);
7443 /* ?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBX@Z */
7444 /* ?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBX@Z */
7445 #define call_num_put_wchar_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_wchar*, \
7446 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const void*), \
7447 (this, ret, dest, base, fill, v))
7448 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ptr
, 28)
7449 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7450 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
7452 char tmp
[17]; /* 8(16^8==2^64)*2(separators beetwen every digit) + 1 */
7454 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
7456 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
7459 /* ?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBX@Z */
7460 /* ?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBX@Z */
7461 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ptr
, 28)
7462 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7463 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
7465 char tmp
[17]; /* 8(16^8==2^64)*2(separators beetwen every digit) + 1 */
7467 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
7469 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
7472 /* ?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBX@Z */
7473 /* ?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBX@Z */
7474 /* ?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBX@Z */
7475 /* ?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBX@Z */
7476 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ptr
, 28)
7477 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7478 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
7480 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
7481 return call_num_put_wchar_do_put_ptr(this, ret
, dest
, base
, fill
, v
);
7484 /* ?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_W_J@Z */
7485 /* ?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_J@Z */
7486 #define call_num_put_wchar_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_wchar*, \
7487 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, __int64), \
7488 (this, ret, dest, base, fill, v))
7489 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_int64
, 32)
7490 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7491 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
7493 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7494 char fmt
[7]; /* strlen("%+#lld")+1 */
7496 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7498 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
7499 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
7502 /* ?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@G_J@Z */
7503 /* ?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_J@Z */
7504 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_int64
, 32)
7505 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7506 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
7508 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7509 char fmt
[7]; /* strlen("%+#lld")+1 */
7511 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7513 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
7514 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
7517 /* ?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_W_J@Z */
7518 /* ?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_J@Z */
7519 /* ?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@G_J@Z */
7520 /* ?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_J@Z */
7521 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_int64
, 32)
7522 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7523 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
7525 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7526 return call_num_put_wchar_do_put_int64(this, ret
, dest
, base
, fill
, v
);
7529 /* ?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_W_K@Z */
7530 /* ?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_K@Z */
7531 #define call_num_put_wchar_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_wchar*, \
7532 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, unsigned __int64), \
7533 (this, ret, dest, base, fill, v))
7534 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_uint64
, 32)
7535 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7536 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
7538 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7539 char fmt
[7]; /* strlen("%+#lld")+1 */
7541 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7543 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
7544 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
7547 /* ?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@G_K@Z */
7548 /* ?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_K@Z */
7549 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_uint64
, 32)
7550 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7551 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
7553 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7554 char fmt
[7]; /* strlen("%+#lld")+1 */
7556 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7558 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
7559 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
7562 /* ?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_W_K@Z */
7563 /* ?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_K@Z */
7564 /* ?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@G_K@Z */
7565 /* ?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_K@Z */
7566 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_uint64
, 32)
7567 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7568 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
7570 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7571 return call_num_put_wchar_do_put_uint64(this, ret
, dest
, base
, fill
, v
);
7574 /* ?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_W_N@Z */
7575 /* ?do_put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_N@Z */
7576 #define call_num_put_wchar_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_wchar*, \
7577 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, MSVCP_bool), \
7578 (this, ret, dest, base, fill, v))
7579 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_bool
, 28)
7580 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7581 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, MSVCP_bool v
)
7583 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7585 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
7586 numpunct_wchar
*numpunct
= numpunct_wchar_use_facet(base
->loc
);
7587 basic_string_wchar str
;
7588 MSVCP_size_t pad
, len
;
7591 numpunct_wchar_truename(numpunct
, &str
);
7593 numpunct_wchar_falsename(numpunct
, &str
);
7595 len
= MSVCP_basic_string_wchar_length(&str
);
7596 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
7599 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
7600 num_put_wchar__Rep(this, &dest
, dest
, fill
, pad
);
7603 num_put_wchar__Put(this, &dest
, dest
, MSVCP_basic_string_wchar_c_str(&str
), len
);
7604 MSVCP_basic_string_wchar_dtor(&str
);
7605 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
7608 return num_put_wchar_put_long(this, ret
, dest
, base
, fill
, v
);
7611 /* ?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@G_N@Z */
7612 /* ?do_put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_N@Z */
7613 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_bool
, 28)
7614 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7615 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, MSVCP_bool v
)
7617 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7619 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
7620 numpunct_wchar
*numpunct
= numpunct_short_use_facet(base
->loc
);
7621 basic_string_wchar str
;
7622 MSVCP_size_t pad
, len
;
7625 numpunct_wchar_truename(numpunct
, &str
);
7627 numpunct_wchar_falsename(numpunct
, &str
);
7629 len
= MSVCP_basic_string_wchar_length(&str
);
7630 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
7633 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
7634 num_put_wchar__Rep(this, &dest
, dest
, fill
, pad
);
7637 num_put_wchar__Put(this, &dest
, dest
, MSVCP_basic_string_wchar_c_str(&str
), len
);
7638 MSVCP_basic_string_wchar_dtor(&str
);
7639 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
7642 return num_put_wchar_put_long(this, ret
, dest
, base
, fill
, v
);
7645 /* ?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_W_N@Z */
7646 /* ?put@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_W_N@Z */
7647 /* ?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@G_N@Z */
7648 /* ?put@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@G_N@Z */
7649 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_bool
, 28)
7650 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7651 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, MSVCP_bool v
)
7653 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7654 return call_num_put_wchar_do_put_bool(this, ret
, dest
, base
, fill
, v
);
7657 /* ?id@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
7658 locale_id time_put_char_id
= {0};
7660 /* ??_7?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
7661 extern const vtable_ptr MSVCP_time_put_char_vtable
;
7663 /* ?_Init@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
7664 /* ?_Init@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
7665 DEFINE_THISCALL_WRAPPER(time_put_char__Init
, 8)
7666 void __thiscall
time_put_char__Init(time_put
*this, const _Locinfo
*locinfo
)
7668 TRACE("(%p %p)\n", this, locinfo
);
7669 _Locinfo__Gettnames(locinfo
, &this->time
);
7670 _Locinfo__Getcvt(locinfo
, &this->cvt
);
7673 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
7674 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
7675 DEFINE_THISCALL_WRAPPER(time_put_char_ctor_locinfo
, 12)
7676 time_put
* __thiscall
time_put_char_ctor_locinfo(time_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
7678 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
7679 locale_facet_ctor_refs(&this->facet
, refs
);
7680 this->facet
.vtable
= &MSVCP_time_put_char_vtable
;
7681 time_put_char__Init(this, locinfo
);
7685 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
7686 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
7687 DEFINE_THISCALL_WRAPPER(time_put_char_ctor_refs
, 8)
7688 time_put
* __thiscall
time_put_char_ctor_refs(time_put
*this, MSVCP_size_t refs
)
7692 TRACE("(%p %lu)\n", this, refs
);
7694 _Locinfo_ctor(&locinfo
);
7695 time_put_char_ctor_locinfo(this, &locinfo
, refs
);
7696 _Locinfo_dtor(&locinfo
);
7700 /* ??_F?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
7701 /* ??_F?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
7702 DEFINE_THISCALL_WRAPPER(time_put_char_ctor
, 4)
7703 time_put
* __thiscall
time_put_char_ctor(time_put
*this)
7705 return time_put_char_ctor_refs(this, 0);
7708 /* ??1?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
7709 /* ??1?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
7710 DEFINE_THISCALL_WRAPPER(time_put_char_dtor
, 4)
7711 void __thiscall
time_put_char_dtor(time_put
*this)
7713 TRACE("(%p)\n", this);
7714 _Timevec_dtor(&this->time
);
7717 DEFINE_THISCALL_WRAPPER(time_put_char_vector_dtor
, 8)
7718 time_put
* __thiscall
time_put_char_vector_dtor(time_put
*this, unsigned int flags
)
7720 TRACE("(%p %x)\n", this, flags
);
7722 /* we have an array, with the number of elements stored before the first object */
7723 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
7725 for(i
=*ptr
-1; i
>=0; i
--)
7726 time_put_char_dtor(this+i
);
7727 MSVCRT_operator_delete(ptr
);
7729 time_put_char_dtor(this);
7731 MSVCRT_operator_delete(this);
7737 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
7738 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
7739 static MSVCP_size_t
time_put_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
7741 TRACE("(%p %p)\n", facet
, loc
);
7743 if(facet
&& !*facet
) {
7746 *facet
= MSVCRT_operator_new(sizeof(time_put
));
7748 ERR("Out of memory\n");
7749 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7753 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
7754 time_put_char_ctor_locinfo((time_put
*)*facet
, &locinfo
, 0);
7755 _Locinfo_dtor(&locinfo
);
7761 static time_put
* time_put_char_use_facet(const locale
*loc
)
7763 static time_put
*obj
= NULL
;
7766 const locale_facet
*fac
;
7768 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
7769 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_put_char_id
));
7771 _Lockit_dtor(&lock
);
7772 return (time_put
*)fac
;
7776 _Lockit_dtor(&lock
);
7780 time_put_char__Getcat(&fac
, loc
);
7781 obj
= (time_put
*)fac
;
7782 locale_facet__Incref(&obj
->facet
);
7783 locale_facet_register(&obj
->facet
);
7784 _Lockit_dtor(&lock
);
7789 /* ?do_put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBUtm@@DD@Z */
7790 /* ?do_put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBUtm@@DD@Z */
7791 DEFINE_THISCALL_WRAPPER(time_put_char_do_put
, 36)
7792 #define call_time_put_char_do_put(this, ret, dest, base, fill, t, spec, mod) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_char*, \
7793 (const time_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const struct tm*, char, char), \
7794 (this, ret, dest, base, fill, t, spec, mod))
7795 ostreambuf_iterator_char
* __thiscall
time_put_char_do_put(const time_put
*this, ostreambuf_iterator_char
*ret
,
7796 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const struct tm
*t
, char spec
, char mod
)
7798 char buf
[64], fmt
[4], *p
= fmt
;
7799 MSVCP_size_t i
, len
;
7801 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
7809 len
= _Strftime(buf
, sizeof(buf
), fmt
, t
, this->time
.timeptr
);
7810 for(i
=0; i
<len
; i
++)
7811 ostreambuf_iterator_char_put(&dest
, buf
[i
]);
7817 /* ?put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBUtm@@DD@Z */
7818 /* ?put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBUtm@@DD@Z */
7819 DEFINE_THISCALL_WRAPPER(time_put_char_put
, 36)
7820 ostreambuf_iterator_char
* __thiscall
time_put_char_put(const time_put
*this, ostreambuf_iterator_char
*ret
,
7821 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const struct tm
*t
, char spec
, char mod
)
7823 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
7824 return call_time_put_char_do_put(this, ret
, dest
, base
, fill
, t
, spec
, mod
);
7827 /* ?put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBUtm@@PBD3@Z */
7828 /* ?put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBUtm@@PEBD3@Z */
7829 DEFINE_THISCALL_WRAPPER(time_put_char_put_format
, 36)
7830 ostreambuf_iterator_char
* __thiscall
time_put_char_put_format(const time_put
*this, ostreambuf_iterator_char
*ret
,
7831 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const struct tm
*t
, const char *pat
, const char *pat_end
)
7833 TRACE("(%p %p %p %c %p %s)\n", this, ret
, base
, fill
, t
, debugstr_an(pat
, pat_end
-pat
));
7835 while(pat
< pat_end
) {
7837 ostreambuf_iterator_char_put(&dest
, *pat
++);
7838 }else if(++pat
== pat_end
) {
7839 ostreambuf_iterator_char_put(&dest
, '%');
7840 }else if(*pat
=='#' && pat
+1==pat_end
) {
7841 ostreambuf_iterator_char_put(&dest
, '%');
7842 ostreambuf_iterator_char_put(&dest
, *pat
++);
7853 time_put_char_put(this, &dest
, dest
, base
, fill
, t
, *pat
++, mod
);
7861 /* ?id@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
7862 locale_id time_put_wchar_id
= {0};
7863 /* ?id@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
7864 locale_id time_put_short_id
= {0};
7866 /* ??_7?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
7867 extern const vtable_ptr MSVCP_time_put_wchar_vtable
;
7868 /* ??_7?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
7869 extern const vtable_ptr MSVCP_time_put_short_vtable
;
7871 /* ?_Init@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
7872 /* ?_Init@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
7873 /* ?_Init@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
7874 /* ?_Init@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
7875 DEFINE_THISCALL_WRAPPER(time_put_wchar__Init
, 8)
7876 void __thiscall
time_put_wchar__Init(time_put
*this, const _Locinfo
*locinfo
)
7878 TRACE("(%p %p)\n", this, locinfo
);
7879 _Locinfo__Gettnames(locinfo
, &this->time
);
7880 _Locinfo__Getcvt(locinfo
, &this->cvt
);
7883 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
7884 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
7885 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor_locinfo
, 12)
7886 time_put
* __thiscall
time_put_wchar_ctor_locinfo(time_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
7888 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
7889 locale_facet_ctor_refs(&this->facet
, refs
);
7890 this->facet
.vtable
= &MSVCP_time_put_wchar_vtable
;
7891 time_put_wchar__Init(this, locinfo
);
7895 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
7896 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
7897 DEFINE_THISCALL_WRAPPER(time_put_short_ctor_locinfo
, 12)
7898 time_put
* __thiscall
time_put_short_ctor_locinfo(time_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
7900 time_put_wchar_ctor_locinfo(this, locinfo
, refs
);
7901 this->facet
.vtable
= &MSVCP_time_put_short_vtable
;
7905 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
7906 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
7907 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor_refs
, 8)
7908 time_put
* __thiscall
time_put_wchar_ctor_refs(time_put
*this, MSVCP_size_t refs
)
7912 TRACE("(%p %lu)\n", this, refs
);
7914 _Locinfo_ctor(&locinfo
);
7915 time_put_wchar_ctor_locinfo(this, &locinfo
, refs
);
7916 _Locinfo_dtor(&locinfo
);
7920 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
7921 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
7922 DEFINE_THISCALL_WRAPPER(time_put_short_ctor_refs
, 8)
7923 time_put
* __thiscall
time_put_short_ctor_refs(time_put
*this, MSVCP_size_t refs
)
7925 time_put_wchar_ctor_refs(this, refs
);
7926 this->facet
.vtable
= &MSVCP_time_put_short_vtable
;
7930 /* ??_F?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
7931 /* ??_F?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
7932 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor
, 4)
7933 time_put
* __thiscall
time_put_wchar_ctor(time_put
*this)
7935 return time_put_wchar_ctor_refs(this, 0);
7938 /* ??_F?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ */
7939 /* ??_F?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ */
7940 DEFINE_THISCALL_WRAPPER(time_put_short_ctor
, 4)
7941 time_put
* __thiscall
time_put_short_ctor(time_put
*this)
7943 time_put_wchar_ctor(this);
7944 this->facet
.vtable
= &MSVCP_time_put_short_vtable
;
7948 /* ??1?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
7949 /* ??1?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
7950 /* ??1?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
7951 /* ??1?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
7952 DEFINE_THISCALL_WRAPPER(time_put_wchar_dtor
, 4)
7953 void __thiscall
time_put_wchar_dtor(time_put
*this)
7955 TRACE("(%p)\n", this);
7956 _Timevec_dtor(&this->time
);
7959 DEFINE_THISCALL_WRAPPER(time_put_wchar_vector_dtor
, 8)
7960 time_put
* __thiscall
time_put_wchar_vector_dtor(time_put
*this, unsigned int flags
)
7962 TRACE("(%p %x)\n", this, flags
);
7964 /* we have an array, with the number of elements stored before the first object */
7965 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
7967 for(i
=*ptr
-1; i
>=0; i
--)
7968 time_put_wchar_dtor(this+i
);
7969 MSVCRT_operator_delete(ptr
);
7971 time_put_wchar_dtor(this);
7973 MSVCRT_operator_delete(this);
7979 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
7980 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
7981 static MSVCP_size_t
time_put_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
7983 FIXME("(%p %p) stub\n", facet
, loc
);
7987 static time_put
* time_put_wchar_use_facet(const locale
*loc
)
7989 static time_put
*obj
= NULL
;
7992 const locale_facet
*fac
;
7994 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
7995 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_put_wchar_id
));
7997 _Lockit_dtor(&lock
);
7998 return (time_put
*)fac
;
8002 _Lockit_dtor(&lock
);
8006 time_put_wchar__Getcat(&fac
, loc
);
8007 obj
= (time_put
*)fac
;
8008 locale_facet__Incref(&obj
->facet
);
8009 locale_facet_register(&obj
->facet
);
8010 _Lockit_dtor(&lock
);
8015 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
8016 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
8017 static MSVCP_size_t
time_put_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
8019 FIXME("(%p %p) stub\n", facet
, loc
);
8023 static time_put
* time_put_short_use_facet(const locale
*loc
)
8025 static time_put
*obj
= NULL
;
8028 const locale_facet
*fac
;
8030 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
8031 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_put_short_id
));
8033 _Lockit_dtor(&lock
);
8034 return (time_put
*)fac
;
8038 _Lockit_dtor(&lock
);
8042 time_put_short__Getcat(&fac
, loc
);
8043 obj
= (time_put
*)fac
;
8044 locale_facet__Incref(&obj
->facet
);
8045 locale_facet_register(&obj
->facet
);
8046 _Lockit_dtor(&lock
);
8051 /* ?do_put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBUtm@@DD@Z */
8052 /* ?do_put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBUtm@@DD@Z */
8053 /* ?do_put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBUtm@@DD@Z */
8054 /* ?do_put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBUtm@@DD@Z */
8055 DEFINE_THISCALL_WRAPPER(time_put_wchar_do_put
, 36)
8056 #define call_time_put_wchar_do_put(this, ret, dest, base, fill, t, spec, mod) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_wchar*, \
8057 (const time_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const struct tm*, char, char), \
8058 (this, ret, dest, base, fill, t, spec, mod))
8059 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_do_put(const time_put
*this,
8060 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
8061 wchar_t fill
, const struct tm
*t
, char spec
, char mod
)
8063 char buf
[64], fmt
[4], *p
= fmt
;
8064 MSVCP_size_t i
, len
;
8067 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
8075 len
= _Strftime(buf
, sizeof(buf
), fmt
, t
, this->time
.timeptr
);
8076 for(i
=0; i
<len
; i
++) {
8077 c
= mb_to_wc(buf
[i
], &this->cvt
);
8078 ostreambuf_iterator_wchar_put(&dest
, c
);
8085 /* ?put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBUtm@@DD@Z */
8086 /* ?put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBUtm@@DD@Z */
8087 /* ?put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBUtm@@DD@Z */
8088 /* ?put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBUtm@@DD@Z */
8089 DEFINE_THISCALL_WRAPPER(time_put_wchar_put
, 36)
8090 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_put(const time_put
*this,
8091 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
8092 wchar_t fill
, const struct tm
*t
, char spec
, char mod
)
8094 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
8095 return call_time_put_wchar_do_put(this, ret
, dest
, base
, fill
, t
, spec
, mod
);
8098 /* ?put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBUtm@@PBG3@Z */
8099 /* ?put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBUtm@@PEBG3@Z */
8100 /* ?put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBUtm@@PB_W4@Z */
8101 /* ?put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBUtm@@PEB_W4@Z */
8102 DEFINE_THISCALL_WRAPPER(time_put_wchar_put_format
, 36)
8103 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_put_format(const time_put
*this,
8104 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
8105 wchar_t fill
, const struct tm
*t
, const wchar_t *pat
, const wchar_t *pat_end
)
8107 wchar_t percent
= mb_to_wc('%', &this->cvt
);
8110 TRACE("(%p %p %p %c %p %s)\n", this, ret
, base
, fill
, t
, debugstr_wn(pat
, pat_end
-pat
));
8112 while(pat
< pat_end
) {
8113 if(*pat
!= percent
) {
8114 ostreambuf_iterator_wchar_put(&dest
, *pat
++);
8115 }else if(++pat
== pat_end
) {
8116 ostreambuf_iterator_wchar_put(&dest
, percent
);
8117 }else if(!_Wcrtomb(c
, *pat
, NULL
, &this->cvt
) || (*c
=='#' && pat
+1==pat_end
)) {
8118 ostreambuf_iterator_wchar_put(&dest
, percent
);
8119 ostreambuf_iterator_wchar_put(&dest
, *pat
++);
8122 if(!_Wcrtomb(c
, *pat
++, NULL
, &this->cvt
)) {
8123 ostreambuf_iterator_wchar_put(&dest
, percent
);
8124 ostreambuf_iterator_wchar_put(&dest
, *(pat
-1));
8125 ostreambuf_iterator_wchar_put(&dest
, *pat
);
8127 time_put_wchar_put(this, &dest
, dest
, base
, fill
, t
, *c
, '#');
8130 time_put_wchar_put(this, &dest
, dest
, base
, fill
, t
, *c
, 0);
8139 /* ??0_Locimp@locale@std@@AAE@_N@Z */
8140 /* ??0_Locimp@locale@std@@AEAA@_N@Z */
8141 static locale__Locimp
* locale__Locimp_ctor_transparent(locale__Locimp
*this, MSVCP_bool transparent
)
8143 TRACE("(%p %d)\n", this, transparent
);
8145 memset(this, 0, sizeof(locale__Locimp
));
8146 locale_facet_ctor_refs(&this->facet
, 1);
8147 this->transparent
= transparent
;
8148 MSVCP_basic_string_char_ctor_cstr(&this->name
, "*");
8152 /* ??_F_Locimp@locale@std@@QAEXXZ */
8153 /* ??_F_Locimp@locale@std@@QEAAXXZ */
8154 static locale__Locimp
* locale__Locimp_ctor(locale__Locimp
*this)
8156 return locale__Locimp_ctor_transparent(this, FALSE
);
8159 /* ??0_Locimp@locale@std@@AAE@ABV012@@Z */
8160 /* ??0_Locimp@locale@std@@AEAA@AEBV012@@Z */
8161 DEFINE_THISCALL_WRAPPER(locale__Locimp_copy_ctor
, 8)
8162 locale__Locimp
* __thiscall
locale__Locimp_copy_ctor(locale__Locimp
*this, const locale__Locimp
*copy
)
8167 TRACE("(%p %p)\n", this, copy
);
8169 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
8170 memcpy(this, copy
, sizeof(locale__Locimp
));
8171 locale_facet_ctor_refs(&this->facet
, 1);
8172 if(copy
->facetvec
) {
8173 this->facetvec
= MSVCRT_operator_new(copy
->facet_cnt
*sizeof(locale_facet
*));
8174 if(!this->facetvec
) {
8175 _Lockit_dtor(&lock
);
8176 ERR("Out of memory\n");
8177 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8180 for(i
=0; i
<this->facet_cnt
; i
++)
8182 this->facetvec
[i
] = copy
->facetvec
[i
];
8183 if(this->facetvec
[i
])
8184 locale_facet__Incref(this->facetvec
[i
]);
8187 MSVCP_basic_string_char_copy_ctor(&this->name
, ©
->name
);
8188 _Lockit_dtor(&lock
);
8192 /* ??1_Locimp@locale@std@@MAE@XZ */
8193 /* ??1_Locimp@locale@std@@MEAA@XZ */
8194 static void locale__Locimp_dtor(locale__Locimp
*this)
8198 TRACE("(%p)\n", this);
8200 locale_facet_dtor(&this->facet
);
8201 for(i
=0; i
<this->facet_cnt
; i
++)
8202 if(this->facetvec
[i
] && locale_facet__Decref(this->facetvec
[i
]))
8203 call_locale_facet_vector_dtor(this->facetvec
[i
], 1);
8205 MSVCRT_operator_delete(this->facetvec
);
8206 MSVCP_basic_string_char_dtor(&this->name
);
8209 DEFINE_THISCALL_WRAPPER(locale__Locimp_vector_dtor
, 8)
8210 locale__Locimp
* __thiscall
locale__Locimp_vector_dtor(locale__Locimp
*this, unsigned int flags
)
8212 TRACE("(%p %x)\n", this, flags
);
8214 /* we have an array, with the number of elements stored before the first object */
8215 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
8217 for(i
=*ptr
-1; i
>=0; i
--)
8218 locale__Locimp_dtor(this+i
);
8219 MSVCRT_operator_delete(ptr
);
8221 locale__Locimp_dtor(this);
8223 MSVCRT_operator_delete(this);
8229 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z */
8230 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPEAV123@PEAVfacet@23@_K@Z */
8231 static void locale__Locimp__Locimp_Addfac(locale__Locimp
*locimp
, locale_facet
*facet
, MSVCP_size_t id
)
8235 TRACE("(%p %p %lu)\n", locimp
, facet
, id
);
8237 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
8238 if(id
>= locimp
->facet_cnt
) {
8239 MSVCP_size_t new_size
= id
+1;
8240 locale_facet
**new_facetvec
;
8242 if(new_size
< locale_id__Id_cnt
+1)
8243 new_size
= locale_id__Id_cnt
+1;
8245 new_facetvec
= MSVCRT_operator_new(sizeof(locale_facet
*)*new_size
);
8247 _Lockit_dtor(&lock
);
8248 ERR("Out of memory\n");
8249 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8253 memset(new_facetvec
, 0, sizeof(locale_facet
*)*new_size
);
8254 memcpy(new_facetvec
, locimp
->facetvec
, sizeof(locale_facet
*)*locimp
->facet_cnt
);
8255 MSVCRT_operator_delete(locimp
->facetvec
);
8256 locimp
->facetvec
= new_facetvec
;
8257 locimp
->facet_cnt
= new_size
;
8260 if(locimp
->facetvec
[id
] && locale_facet__Decref(locimp
->facetvec
[id
]))
8261 call_locale_facet_vector_dtor(locimp
->facetvec
[id
], 1);
8263 locimp
->facetvec
[id
] = facet
;
8265 locale_facet__Incref(facet
);
8266 _Lockit_dtor(&lock
);
8269 /* ?_Addfac@_Locimp@locale@std@@AAEXPAVfacet@23@I@Z */
8270 /* ?_Addfac@_Locimp@locale@std@@AEAAXPEAVfacet@23@_K@Z */
8271 DEFINE_THISCALL_WRAPPER(locale__Locimp__Addfac
, 12)
8272 void __thiscall
locale__Locimp__Addfac(locale__Locimp
*this, locale_facet
*facet
, MSVCP_size_t id
)
8274 locale__Locimp__Locimp_Addfac(this, facet
, id
);
8277 /* ?_Makeushloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
8278 /* ?_Makeushloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
8279 /* List of missing facets:
8280 * messages, money_get, money_put, moneypunct, moneypunct, time_get
8282 static void locale__Locimp__Makeushloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
8284 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
8286 if(cat
& (1<<(ctype_short__Getcat(NULL
, NULL
)-1))) {
8290 ctype
= ctype_short_use_facet(loc
);
8292 ctype
= MSVCRT_operator_new(sizeof(ctype_wchar
));
8294 ERR("Out of memory\n");
8295 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8297 ctype_short_ctor_locinfo(ctype
, locinfo
, 0);
8299 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_short_id
));
8302 if(cat
& (1<<(num_get_short__Getcat(NULL
, NULL
)-1))) {
8306 numget
= num_get_short_use_facet(loc
);
8308 numget
= MSVCRT_operator_new(sizeof(num_get
));
8310 ERR("Out of memory\n");
8311 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8313 num_get_short_ctor_locinfo(numget
, locinfo
, 0);
8315 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_short_id
));
8318 if(cat
& (1<<(num_put_short__Getcat(NULL
, NULL
)-1))) {
8322 numput
= num_put_short_use_facet(loc
);
8324 numput
= MSVCRT_operator_new(sizeof(num_put
));
8326 ERR("Out of memory\n");
8327 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8329 num_put_short_ctor_locinfo(numput
, locinfo
, 0);
8331 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_short_id
));
8334 if(cat
& (1<<(numpunct_short__Getcat(NULL
, NULL
)-1))) {
8335 numpunct_wchar
*numpunct
;
8338 numpunct
= numpunct_short_use_facet(loc
);
8340 numpunct
= MSVCRT_operator_new(sizeof(numpunct_wchar
));
8342 ERR("Out of memory\n");
8343 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8345 numpunct_short_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
8347 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_short_id
));
8350 if(cat
& (1<<(collate_short__Getcat(NULL
, NULL
)-1))) {
8354 c
= collate_short_use_facet(loc
);
8356 c
= MSVCRT_operator_new(sizeof(collate
));
8358 ERR("Out of memory\n");
8359 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8361 collate_short_ctor_locinfo(c
, locinfo
, 0);
8363 locale__Locimp__Addfac(locimp
, &c
->facet
, locale_id_operator_size_t(&collate_short_id
));
8366 if(cat
& (1<<(time_put_short__Getcat(NULL
, NULL
)-1))) {
8370 t
= time_put_short_use_facet(loc
);
8372 t
= MSVCRT_operator_new(sizeof(time_put
));
8374 ERR("Out of memory\n");
8375 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8377 time_put_short_ctor_locinfo(t
, locinfo
, 0);
8379 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_put_short_id
));
8382 if(cat
& (1<<(codecvt_short__Getcat(NULL
, NULL
)-1))) {
8383 codecvt_wchar
*codecvt
;
8386 codecvt
= codecvt_short_use_facet(loc
);
8388 codecvt
= MSVCRT_operator_new(sizeof(codecvt_wchar
));
8390 ERR("Out of memory\n");
8391 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8393 codecvt_short_ctor_locinfo(codecvt
, locinfo
, 0);
8395 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_short_id
));
8399 /* ?_Makewloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
8400 /* ?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
8401 /* List of missing facets:
8402 * messages, money_get, money_put, moneypunct, moneypunct, time_get
8404 static void locale__Locimp__Makewloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
8406 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
8408 if(cat
& (1<<(ctype_wchar__Getcat(NULL
, NULL
)-1))) {
8412 ctype
= ctype_wchar_use_facet(loc
);
8414 ctype
= MSVCRT_operator_new(sizeof(ctype_wchar
));
8416 ERR("Out of memory\n");
8417 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8419 ctype_wchar_ctor_locinfo(ctype
, locinfo
, 0);
8421 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_wchar_id
));
8424 if(cat
& (1<<(num_get_wchar__Getcat(NULL
, NULL
)-1))) {
8428 numget
= num_get_wchar_use_facet(loc
);
8430 numget
= MSVCRT_operator_new(sizeof(num_get
));
8432 ERR("Out of memory\n");
8433 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8435 num_get_wchar_ctor_locinfo(numget
, locinfo
, 0);
8437 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_wchar_id
));
8440 if(cat
& (1<<(num_put_wchar__Getcat(NULL
, NULL
)-1))) {
8444 numput
= num_put_wchar_use_facet(loc
);
8446 numput
= MSVCRT_operator_new(sizeof(num_put
));
8448 ERR("Out of memory\n");
8449 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8451 num_put_wchar_ctor_locinfo(numput
, locinfo
, 0);
8453 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_wchar_id
));
8456 if(cat
& (1<<(numpunct_wchar__Getcat(NULL
, NULL
)-1))) {
8457 numpunct_wchar
*numpunct
;
8460 numpunct
= numpunct_wchar_use_facet(loc
);
8462 numpunct
= MSVCRT_operator_new(sizeof(numpunct_wchar
));
8464 ERR("Out of memory\n");
8465 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8467 numpunct_wchar_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
8469 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_wchar_id
));
8472 if(cat
& (1<<(collate_wchar__Getcat(NULL
, NULL
)-1))) {
8476 c
= collate_wchar_use_facet(loc
);
8478 c
= MSVCRT_operator_new(sizeof(collate
));
8480 ERR("Out of memory\n");
8481 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8483 collate_wchar_ctor_locinfo(c
, locinfo
, 0);
8485 locale__Locimp__Addfac(locimp
, &c
->facet
, locale_id_operator_size_t(&collate_wchar_id
));
8488 if(cat
& (1<<(time_put_wchar__Getcat(NULL
, NULL
)-1))) {
8492 t
= time_put_wchar_use_facet(loc
);
8494 t
= MSVCRT_operator_new(sizeof(time_put
));
8496 ERR("Out of memory\n");
8497 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8499 time_put_wchar_ctor_locinfo(t
, locinfo
, 0);
8501 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_put_wchar_id
));
8504 if(cat
& (1<<(codecvt_wchar__Getcat(NULL
, NULL
)-1))) {
8505 codecvt_wchar
*codecvt
;
8508 codecvt
= codecvt_wchar_use_facet(loc
);
8510 codecvt
= MSVCRT_operator_new(sizeof(codecvt_wchar
));
8512 ERR("Out of memory\n");
8513 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8515 codecvt_wchar_ctor_locinfo(codecvt
, locinfo
, 0);
8517 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_wchar_id
));
8521 /* ?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
8522 /* ?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
8523 /* List of missing facets:
8524 * messages, money_get, money_put, moneypunct, moneypunct, time_get
8526 static void locale__Locimp__Makexloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
8528 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
8530 if(cat
& (1<<(ctype_char__Getcat(NULL
, NULL
)-1))) {
8534 ctype
= ctype_char_use_facet(loc
);
8536 ctype
= MSVCRT_operator_new(sizeof(ctype_char
));
8538 ERR("Out of memory\n");
8539 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8541 ctype_char_ctor_locinfo(ctype
, locinfo
, 0);
8543 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_char_id
));
8546 if(cat
& (1<<(num_get_char__Getcat(NULL
, NULL
)-1))) {
8550 numget
= num_get_char_use_facet(loc
);
8552 numget
= MSVCRT_operator_new(sizeof(num_get
));
8554 ERR("Out of memory\n");
8555 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8557 num_get_char_ctor_locinfo(numget
, locinfo
, 0);
8559 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_char_id
));
8562 if(cat
& (1<<(num_put_char__Getcat(NULL
, NULL
)-1))) {
8566 numput
= num_put_char_use_facet(loc
);
8568 numput
= MSVCRT_operator_new(sizeof(num_put
));
8570 ERR("Out of memory\n");
8571 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8573 num_put_char_ctor_locinfo(numput
, locinfo
, 0);
8575 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_char_id
));
8578 if(cat
& (1<<(numpunct_char__Getcat(NULL
, NULL
)-1))) {
8579 numpunct_char
*numpunct
;
8582 numpunct
= numpunct_char_use_facet(loc
);
8584 numpunct
= MSVCRT_operator_new(sizeof(numpunct_char
));
8586 ERR("Out of memory\n");
8587 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8589 numpunct_char_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
8591 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_char_id
));
8594 if(cat
& (1<<(collate_char__Getcat(NULL
, NULL
)-1))) {
8598 c
= collate_char_use_facet(loc
);
8600 c
= MSVCRT_operator_new(sizeof(collate
));
8602 ERR("Out of memory\n");
8603 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8605 collate_char_ctor_locinfo(c
, locinfo
, 0);
8607 locale__Locimp__Addfac(locimp
, &c
->facet
, locale_id_operator_size_t(&collate_char_id
));
8610 if(cat
& (1<<(time_put_char__Getcat(NULL
, NULL
)-1))) {
8614 t
= time_put_char_use_facet(loc
);
8616 t
= MSVCRT_operator_new(sizeof(time_put
));
8618 ERR("Out of memory\n");
8619 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8621 time_put_char_ctor_locinfo(t
, locinfo
, 0);
8623 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_put_char_id
));
8626 if(cat
& (1<<(codecvt_char__Getcat(NULL
, NULL
)-1))) {
8627 codecvt_char
*codecvt
;
8630 codecvt
= codecvt_char_use_facet(loc
);
8632 codecvt
= MSVCRT_operator_new(sizeof(codecvt_char
));
8634 ERR("Out of memory\n");
8635 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8637 codecvt_char_ctor_locinfo(codecvt
, locinfo
, 0);
8639 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_char_id
));
8643 /* ?_Makeloc@_Locimp@locale@std@@CAPAV123@ABV_Locinfo@3@HPAV123@PBV23@@Z */
8644 /* ?_Makeloc@_Locimp@locale@std@@CAPEAV123@AEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
8645 static locale__Locimp
* locale__Locimp__Makeloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
8647 TRACE("(%p %d %p %p)\n", locinfo
, cat
, locimp
, loc
);
8649 locale__Locimp__Makexloc(locinfo
, cat
, locimp
, loc
);
8650 locale__Locimp__Makewloc(locinfo
, cat
, locimp
, loc
);
8651 locale__Locimp__Makeushloc(locinfo
, cat
, locimp
, loc
);
8653 locimp
->catmask
|= cat
;
8654 MSVCP_basic_string_char_copy_ctor(&locimp
->name
, &locinfo
->newlocname
);
8658 /* ??_7_Locimp@locale@std@@6B@ */
8659 const vtable_ptr MSVCP_locale__Locimp_vtable
[] = {
8660 (vtable_ptr
)THISCALL_NAME(locale__Locimp_vector_dtor
)
8663 /* ??0locale@std@@AAE@PAV_Locimp@01@@Z */
8664 /* ??0locale@std@@AEAA@PEAV_Locimp@01@@Z */
8665 DEFINE_THISCALL_WRAPPER(locale_ctor_locimp
, 8)
8666 locale
* __thiscall
locale_ctor_locimp(locale
*this, locale__Locimp
*locimp
)
8668 TRACE("(%p %p)\n", this, locimp
);
8669 /* Don't change locimp reference counter */
8674 /* ?_Init@locale@std@@CAPAV_Locimp@12@XZ */
8675 /* ?_Init@locale@std@@CAPEAV_Locimp@12@XZ */
8676 locale__Locimp
* __cdecl
locale__Init(void)
8682 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
8684 _Lockit_dtor(&lock
);
8685 return global_locale
;
8688 global_locale
= MSVCRT_operator_new(sizeof(locale__Locimp
));
8689 if(!global_locale
) {
8690 _Lockit_dtor(&lock
);
8691 ERR("Out of memory\n");
8692 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8696 locale__Locimp_ctor(global_locale
);
8697 global_locale
->catmask
= (1<<(LC_MAX
+1))-1;
8698 MSVCP_basic_string_char_dtor(&global_locale
->name
);
8699 MSVCP_basic_string_char_ctor_cstr(&global_locale
->name
, "C");
8701 locale__Locimp__Clocptr
= global_locale
;
8702 global_locale
->facet
.refs
++;
8703 locale_ctor_locimp(&classic_locale
, locale__Locimp__Clocptr
);
8704 _Lockit_dtor(&lock
);
8706 return global_locale
;
8709 /* ??0locale@std@@QAE@ABV01@0H@Z */
8710 /* ??0locale@std@@QEAA@AEBV01@0H@Z */
8711 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_locale
, 16)
8712 locale
* __thiscall
locale_ctor_locale_locale(locale
*this, const locale
*loc
, const locale
*other
, category cat
)
8716 TRACE("(%p %p %p %d)\n", this, loc
, other
, cat
);
8718 this->ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
8720 ERR("Out of memory\n");
8721 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8723 locale__Locimp_copy_ctor(this->ptr
, loc
->ptr
);
8725 _Locinfo_ctor_cat_cstr(&locinfo
, loc
->ptr
->catmask
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
8726 _Locinfo__Addcats(&locinfo
, cat
& other
->ptr
->catmask
, MSVCP_basic_string_char_c_str(&other
->ptr
->name
));
8727 locale__Locimp__Makeloc(&locinfo
, cat
, this->ptr
, other
);
8728 _Locinfo_dtor(&locinfo
);
8733 /* ??0locale@std@@QAE@ABV01@@Z */
8734 /* ??0locale@std@@QEAA@AEBV01@@Z */
8735 DEFINE_THISCALL_WRAPPER(locale_copy_ctor
, 8)
8736 locale
* __thiscall
locale_copy_ctor(locale
*this, const locale
*copy
)
8738 TRACE("(%p %p)\n", this, copy
);
8739 this->ptr
= copy
->ptr
;
8740 locale_facet__Incref(&this->ptr
->facet
);
8744 /* ??0locale@std@@QAE@ABV01@PBDH@Z */
8745 /* ??0locale@std@@QEAA@AEBV01@PEBDH@Z */
8746 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_cstr
, 16)
8747 locale
* __thiscall
locale_ctor_locale_cstr(locale
*this, const locale
*loc
, const char *locname
, category cat
)
8749 FIXME("(%p %p %s %d) stub\n", this, loc
, locname
, cat
);
8753 /* ??0locale@std@@QAE@PBDH@Z */
8754 /* ??0locale@std@@QEAA@PEBDH@Z */
8755 DEFINE_THISCALL_WRAPPER(locale_ctor_cstr
, 12)
8756 locale
* __thiscall
locale_ctor_cstr(locale
*this, const char *locname
, category cat
)
8760 TRACE("(%p %s %d)\n", this, locname
, cat
);
8762 this->ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
8764 ERR("Out of memory\n");
8765 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8767 locale__Locimp_ctor(this->ptr
);
8771 _Locinfo_ctor_cat_cstr(&locinfo
, cat
, locname
);
8772 if(!memcmp(MSVCP_basic_string_char_c_str(&locinfo
.newlocname
), "*", 2)) {
8773 _Locinfo_dtor(&locinfo
);
8774 MSVCRT_operator_delete(this->ptr
);
8775 throw_exception(EXCEPTION_RUNTIME_ERROR
, "bad locale name");
8778 locale__Locimp__Makeloc(&locinfo
, cat
, this->ptr
, NULL
);
8779 _Locinfo_dtor(&locinfo
);
8784 /* ??0locale@std@@QAE@W4_Uninitialized@1@@Z */
8785 /* ??0locale@std@@QEAA@W4_Uninitialized@1@@Z */
8786 DEFINE_THISCALL_WRAPPER(locale_ctor_uninitialized
, 8)
8787 locale
* __thiscall
locale_ctor_uninitialized(locale
*this, int uninitialized
)
8789 TRACE("(%p)\n", this);
8794 /* ??0locale@std@@QAE@XZ */
8795 /* ??0locale@std@@QEAA@XZ */
8796 DEFINE_THISCALL_WRAPPER(locale_ctor
, 4)
8797 locale
* __thiscall
locale_ctor(locale
*this)
8799 TRACE("(%p)\n", this);
8800 this->ptr
= locale__Init();
8801 locale_facet__Incref(&this->ptr
->facet
);
8805 /* ??1locale@std@@QAE@XZ */
8806 /* ??1locale@std@@QEAA@XZ */
8807 DEFINE_THISCALL_WRAPPER(locale_dtor
, 4)
8808 void __thiscall
locale_dtor(locale
*this)
8810 TRACE("(%p)\n", this);
8811 if(this->ptr
&& locale_facet__Decref(&this->ptr
->facet
)) {
8812 locale__Locimp_dtor(this->ptr
);
8813 MSVCRT_operator_delete(this);
8817 /* ??4locale@std@@QAEAAV01@ABV01@@Z */
8818 /* ??4locale@std@@QEAAAEAV01@AEBV01@@Z */
8819 DEFINE_THISCALL_WRAPPER(locale_operator_assign
, 8)
8820 locale
* __thiscall
locale_operator_assign(locale
*this, const locale
*loc
)
8822 FIXME("(%p %p) stub\n", this, loc
);
8826 /* ??8locale@std@@QBE_NABV01@@Z */
8827 /* ??8locale@std@@QEBA_NAEBV01@@Z */
8828 DEFINE_THISCALL_WRAPPER(locale_operator_equal
, 8)
8829 MSVCP_bool __thiscall
locale_operator_equal(const locale
*this, const locale
*loc
)
8831 FIXME("(%p %p) stub\n", this, loc
);
8835 /* ??9locale@std@@QBE_NABV01@@Z */
8836 /* ??9locale@std@@QEBA_NAEBV01@@Z */
8837 DEFINE_THISCALL_WRAPPER(locale_operator_not_equal
, 8)
8838 MSVCP_bool __thiscall
locale_operator_not_equal(const locale
*this, locale
const *loc
)
8840 FIXME("(%p %p) stub\n", this, loc
);
8844 /* ?_Addfac@locale@std@@QAEAAV12@PAVfacet@12@II@Z */
8845 /* ?_Addfac@locale@std@@QEAAAEAV12@PEAVfacet@12@_K1@Z */
8846 DEFINE_THISCALL_WRAPPER(locale__Addfac
, 16)
8847 locale
* __thiscall
locale__Addfac(locale
*this, locale_facet
*facet
, MSVCP_size_t id
, MSVCP_size_t catmask
)
8849 TRACE("(%p %p %lu %lu)\n", this, facet
, id
, catmask
);
8851 if(this->ptr
->facet
.refs
> 1) {
8852 locale__Locimp
*new_ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
8854 ERR("Out of memory\n");
8855 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8858 locale__Locimp_copy_ctor(new_ptr
, this->ptr
);
8859 locale_facet__Decref(&this->ptr
->facet
);
8860 this->ptr
= new_ptr
;
8863 locale__Locimp__Addfac(this->ptr
, facet
, id
);
8866 MSVCP_basic_string_char_dtor(&this->ptr
->name
);
8867 MSVCP_basic_string_char_ctor_cstr(&this->ptr
->name
, "*");
8872 /* ?_Getfacet@locale@std@@QBEPBVfacet@12@I@Z */
8873 /* ?_Getfacet@locale@std@@QEBAPEBVfacet@12@_K@Z */
8874 DEFINE_THISCALL_WRAPPER(locale__Getfacet
, 8)
8875 const locale_facet
* __thiscall
locale__Getfacet(const locale
*this, MSVCP_size_t id
)
8879 TRACE("(%p %lu)\n", this, id
);
8881 fac
= id
< this->ptr
->facet_cnt
? this->ptr
->facetvec
[id
] : NULL
;
8882 if(fac
|| !this->ptr
->transparent
)
8885 return id
< global_locale
->facet_cnt
? global_locale
->facetvec
[id
] : NULL
;
8888 /* ?classic@locale@std@@SAABV12@XZ */
8889 /* ?classic@locale@std@@SAAEBV12@XZ */
8890 const locale
* __cdecl
locale_classic(void)
8894 return &classic_locale
;
8897 /* ?empty@locale@std@@SA?AV12@XZ */
8898 locale
* __cdecl
locale_empty(locale
*ret
)
8904 ret
->ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
8906 ERR("Out of memory\n");
8907 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8909 locale__Locimp_ctor_transparent(ret
->ptr
, TRUE
);
8913 /* ?name@locale@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
8914 /* ?name@locale@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
8915 DEFINE_THISCALL_WRAPPER(locale_name
, 8)
8916 basic_string_char
* __thiscall
locale_name(const locale
*this, basic_string_char
*ret
)
8918 TRACE( "(%p)\n", this);
8919 MSVCP_basic_string_char_copy_ctor(ret
, &this->ptr
->name
);
8923 /* ?global@locale@std@@SA?AV12@ABV12@@Z */
8924 /* ?global@locale@std@@SA?AV12@AEBV12@@Z */
8925 locale
* __cdecl
locale_global(locale
*ret
, const locale
*loc
)
8930 TRACE("(%p %p)\n", loc
, ret
);
8932 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
8935 if(loc
->ptr
!= global_locale
) {
8936 locale_facet__Decref(&global_locale
->facet
);
8937 global_locale
= loc
->ptr
;
8938 locale_facet__Incref(&global_locale
->facet
);
8940 for(i
=LC_ALL
+1; i
<=LC_MAX
; i
++) {
8941 if((global_locale
->catmask
& (1<<(i
-1))) == 0)
8943 setlocale(i
, MSVCP_basic_string_char_c_str(&global_locale
->name
));
8946 _Lockit_dtor(&lock
);
8951 wctrans_t __cdecl
wctrans(const char *property
)
8953 static const char str_tolower
[] = "tolower";
8954 static const char str_toupper
[] = "toupper";
8956 if(!strcmp(property
, str_tolower
))
8958 if(!strcmp(property
, str_toupper
))
8964 wint_t __cdecl
towctrans(wint_t c
, wctrans_t category
)
8971 DEFINE_RTTI_DATA0(locale_facet
, 0, ".?AVfacet@locale@std@@")
8972 DEFINE_RTTI_DATA1(collate_char
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@D@std@@")
8973 DEFINE_RTTI_DATA1(collate_wchar
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@_W@std@@")
8974 DEFINE_RTTI_DATA1(collate_short
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@G@std@@")
8975 DEFINE_RTTI_DATA1(ctype_base
, 0, &locale_facet_rtti_base_descriptor
, ".?AUctype_base@std@@")
8976 DEFINE_RTTI_DATA2(ctype_char
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@D@std@@")
8977 DEFINE_RTTI_DATA2(ctype_wchar
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@_W@std@@")
8978 DEFINE_RTTI_DATA2(ctype_short
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@G@std@@")
8979 DEFINE_RTTI_DATA1(codecvt_base
, 0, &locale_facet_rtti_base_descriptor
, ".?AVcodecvt_base@std@@")
8980 DEFINE_RTTI_DATA2(codecvt_char
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@DDH@std@@")
8981 DEFINE_RTTI_DATA2(codecvt_wchar
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@_WDH@std@@")
8982 DEFINE_RTTI_DATA2(codecvt_short
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@GDH@std@@")
8983 DEFINE_RTTI_DATA1(numpunct_char
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@D@std@@")
8984 DEFINE_RTTI_DATA1(numpunct_wchar
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@_W@std@@")
8985 DEFINE_RTTI_DATA1(numpunct_short
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@G@std@@")
8986 DEFINE_RTTI_DATA1(num_get_char
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@")
8987 DEFINE_RTTI_DATA1(num_get_wchar
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@")
8988 DEFINE_RTTI_DATA1(num_get_short
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@")
8989 DEFINE_RTTI_DATA1(num_put_char
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@")
8990 DEFINE_RTTI_DATA1(num_put_wchar
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@")
8991 DEFINE_RTTI_DATA1(num_put_short
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@")
8992 DEFINE_RTTI_DATA1(time_put_char
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@")
8993 DEFINE_RTTI_DATA1(time_put_wchar
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@")
8994 DEFINE_RTTI_DATA1(time_put_short
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@")
8997 void __asm_dummy_vtables(void) {
8999 __ASM_VTABLE(locale_facet
,
9000 VTABLE_ADD_FUNC(locale_facet_vector_dtor
));
9001 __ASM_VTABLE(collate_char
,
9002 VTABLE_ADD_FUNC(collate_char_vector_dtor
)
9003 VTABLE_ADD_FUNC(collate_char_do_compare
)
9004 VTABLE_ADD_FUNC(collate_char_do_transform
)
9005 VTABLE_ADD_FUNC(collate_char_do_hash
));
9006 __ASM_VTABLE(collate_wchar
,
9007 VTABLE_ADD_FUNC(collate_wchar_vector_dtor
)
9008 VTABLE_ADD_FUNC(collate_wchar_do_compare
)
9009 VTABLE_ADD_FUNC(collate_wchar_do_transform
)
9010 VTABLE_ADD_FUNC(collate_wchar_do_hash
));
9011 __ASM_VTABLE(collate_short
,
9012 VTABLE_ADD_FUNC(collate_wchar_vector_dtor
)
9013 VTABLE_ADD_FUNC(collate_wchar_do_compare
)
9014 VTABLE_ADD_FUNC(collate_wchar_do_transform
)
9015 VTABLE_ADD_FUNC(collate_wchar_do_hash
));
9016 __ASM_VTABLE(ctype_base
,
9017 VTABLE_ADD_FUNC(ctype_base_vector_dtor
));
9018 __ASM_VTABLE(ctype_char
,
9019 VTABLE_ADD_FUNC(ctype_char_vector_dtor
)
9020 VTABLE_ADD_FUNC(ctype_char_do_tolower
)
9021 VTABLE_ADD_FUNC(ctype_char_do_tolower_ch
)
9022 VTABLE_ADD_FUNC(ctype_char_do_toupper
)
9023 VTABLE_ADD_FUNC(ctype_char_do_toupper_ch
)
9024 VTABLE_ADD_FUNC(ctype_char_do_widen
)
9025 VTABLE_ADD_FUNC(ctype_char_do_widen_ch
)
9026 VTABLE_ADD_FUNC(ctype_char_do_narrow
)
9027 VTABLE_ADD_FUNC(ctype_char_do_narrow_ch
));
9028 __ASM_VTABLE(ctype_wchar
,
9029 VTABLE_ADD_FUNC(ctype_wchar_vector_dtor
)
9030 VTABLE_ADD_FUNC(ctype_wchar_do_is
)
9031 VTABLE_ADD_FUNC(ctype_wchar_do_is_ch
)
9032 VTABLE_ADD_FUNC(ctype_wchar_do_scan_is
)
9033 VTABLE_ADD_FUNC(ctype_wchar_do_scan_not
)
9034 VTABLE_ADD_FUNC(ctype_wchar_do_tolower
)
9035 VTABLE_ADD_FUNC(ctype_wchar_do_tolower_ch
)
9036 VTABLE_ADD_FUNC(ctype_wchar_do_toupper
)
9037 VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch
)
9038 VTABLE_ADD_FUNC(ctype_wchar_do_widen
)
9039 VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch
)
9040 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
9041 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
));
9042 __ASM_VTABLE(ctype_short
,
9043 VTABLE_ADD_FUNC(ctype_wchar_vector_dtor
)
9044 VTABLE_ADD_FUNC(ctype_wchar_do_is
)
9045 VTABLE_ADD_FUNC(ctype_wchar_do_is_ch
)
9046 VTABLE_ADD_FUNC(ctype_wchar_do_scan_is
)
9047 VTABLE_ADD_FUNC(ctype_wchar_do_scan_not
)
9048 VTABLE_ADD_FUNC(ctype_wchar_do_tolower
)
9049 VTABLE_ADD_FUNC(ctype_wchar_do_tolower_ch
)
9050 VTABLE_ADD_FUNC(ctype_wchar_do_toupper
)
9051 VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch
)
9052 VTABLE_ADD_FUNC(ctype_wchar_do_widen
)
9053 VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch
)
9054 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
9055 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
));
9056 __ASM_VTABLE(codecvt_base
,
9057 VTABLE_ADD_FUNC(codecvt_base_vector_dtor
)
9058 VTABLE_ADD_FUNC(codecvt_base_do_always_noconv
)
9059 VTABLE_ADD_FUNC(codecvt_base_do_max_length
)
9060 VTABLE_ADD_FUNC(codecvt_base_do_encoding
));
9061 __ASM_VTABLE(codecvt_char
,
9062 VTABLE_ADD_FUNC(codecvt_char_vector_dtor
)
9063 VTABLE_ADD_FUNC(codecvt_base_do_always_noconv
)
9064 VTABLE_ADD_FUNC(codecvt_base_do_max_length
)
9065 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
9066 VTABLE_ADD_FUNC(codecvt_char_do_in
)
9067 VTABLE_ADD_FUNC(codecvt_char_do_out
)
9068 VTABLE_ADD_FUNC(codecvt_char_do_unshift
)
9069 VTABLE_ADD_FUNC(codecvt_char_do_length
));
9070 __ASM_VTABLE(codecvt_wchar
,
9071 VTABLE_ADD_FUNC(codecvt_wchar_vector_dtor
)
9072 VTABLE_ADD_FUNC(codecvt_wchar_do_always_noconv
)
9073 VTABLE_ADD_FUNC(codecvt_wchar_do_max_length
)
9074 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
9075 VTABLE_ADD_FUNC(codecvt_wchar_do_in
)
9076 VTABLE_ADD_FUNC(codecvt_wchar_do_out
)
9077 VTABLE_ADD_FUNC(codecvt_wchar_do_unshift
)
9078 VTABLE_ADD_FUNC(codecvt_wchar_do_length
));
9079 __ASM_VTABLE(codecvt_short
,
9080 VTABLE_ADD_FUNC(codecvt_wchar_vector_dtor
)
9081 VTABLE_ADD_FUNC(codecvt_wchar_do_always_noconv
)
9082 VTABLE_ADD_FUNC(codecvt_wchar_do_max_length
)
9083 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
9084 VTABLE_ADD_FUNC(codecvt_wchar_do_in
)
9085 VTABLE_ADD_FUNC(codecvt_wchar_do_out
)
9086 VTABLE_ADD_FUNC(codecvt_wchar_do_unshift
)
9087 VTABLE_ADD_FUNC(codecvt_wchar_do_length
));
9088 __ASM_VTABLE(numpunct_char
,
9089 VTABLE_ADD_FUNC(numpunct_char_vector_dtor
)
9090 VTABLE_ADD_FUNC(numpunct_char_do_decimal_point
)
9091 VTABLE_ADD_FUNC(numpunct_char_do_thousands_sep
)
9092 VTABLE_ADD_FUNC(numpunct_char_do_grouping
)
9093 VTABLE_ADD_FUNC(numpunct_char_do_falsename
)
9094 VTABLE_ADD_FUNC(numpunct_char_do_truename
));
9095 __ASM_VTABLE(numpunct_wchar
,
9096 VTABLE_ADD_FUNC(numpunct_wchar_vector_dtor
)
9097 VTABLE_ADD_FUNC(numpunct_wchar_do_decimal_point
)
9098 VTABLE_ADD_FUNC(numpunct_wchar_do_thousands_sep
)
9099 VTABLE_ADD_FUNC(numpunct_wchar_do_grouping
)
9100 VTABLE_ADD_FUNC(numpunct_wchar_do_falsename
)
9101 VTABLE_ADD_FUNC(numpunct_wchar_do_truename
));
9102 __ASM_VTABLE(numpunct_short
,
9103 VTABLE_ADD_FUNC(numpunct_wchar_vector_dtor
)
9104 VTABLE_ADD_FUNC(numpunct_wchar_do_decimal_point
)
9105 VTABLE_ADD_FUNC(numpunct_wchar_do_thousands_sep
)
9106 VTABLE_ADD_FUNC(numpunct_wchar_do_grouping
)
9107 VTABLE_ADD_FUNC(numpunct_wchar_do_falsename
)
9108 VTABLE_ADD_FUNC(numpunct_wchar_do_truename
));
9109 __ASM_VTABLE(num_get_char
,
9110 VTABLE_ADD_FUNC(num_get_char_vector_dtor
)
9111 VTABLE_ADD_FUNC(num_get_char_do_get_void
)
9112 VTABLE_ADD_FUNC(num_get_char_do_get_double
)
9113 VTABLE_ADD_FUNC(num_get_char_do_get_double
)
9114 VTABLE_ADD_FUNC(num_get_char_do_get_float
)
9115 VTABLE_ADD_FUNC(num_get_char_do_get_uint64
)
9116 VTABLE_ADD_FUNC(num_get_char_do_get_int64
)
9117 VTABLE_ADD_FUNC(num_get_char_do_get_ulong
)
9118 VTABLE_ADD_FUNC(num_get_char_do_get_long
)
9119 VTABLE_ADD_FUNC(num_get_char_do_get_uint
)
9120 VTABLE_ADD_FUNC(num_get_char_do_get_ushort
)
9121 VTABLE_ADD_FUNC(num_get_char_do_get_bool
));
9122 __ASM_VTABLE(num_get_short
,
9123 VTABLE_ADD_FUNC(num_get_wchar_vector_dtor
)
9124 VTABLE_ADD_FUNC(num_get_short_do_get_void
)
9125 VTABLE_ADD_FUNC(num_get_short_do_get_double
)
9126 VTABLE_ADD_FUNC(num_get_short_do_get_double
)
9127 VTABLE_ADD_FUNC(num_get_short_do_get_float
)
9128 VTABLE_ADD_FUNC(num_get_short_do_get_uint64
)
9129 VTABLE_ADD_FUNC(num_get_short_do_get_int64
)
9130 VTABLE_ADD_FUNC(num_get_short_do_get_ulong
)
9131 VTABLE_ADD_FUNC(num_get_short_do_get_long
)
9132 VTABLE_ADD_FUNC(num_get_short_do_get_uint
)
9133 VTABLE_ADD_FUNC(num_get_short_do_get_ushort
)
9134 VTABLE_ADD_FUNC(num_get_short_do_get_bool
));
9135 __ASM_VTABLE(num_get_wchar
,
9136 VTABLE_ADD_FUNC(num_get_wchar_vector_dtor
)
9137 VTABLE_ADD_FUNC(num_get_wchar_do_get_void
)
9138 VTABLE_ADD_FUNC(num_get_wchar_do_get_double
)
9139 VTABLE_ADD_FUNC(num_get_wchar_do_get_double
)
9140 VTABLE_ADD_FUNC(num_get_wchar_do_get_float
)
9141 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint64
)
9142 VTABLE_ADD_FUNC(num_get_wchar_do_get_int64
)
9143 VTABLE_ADD_FUNC(num_get_wchar_do_get_ulong
)
9144 VTABLE_ADD_FUNC(num_get_wchar_do_get_long
)
9145 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint
)
9146 VTABLE_ADD_FUNC(num_get_wchar_do_get_ushort
)
9147 VTABLE_ADD_FUNC(num_get_wchar_do_get_bool
));
9148 __ASM_VTABLE(num_put_char
,
9149 VTABLE_ADD_FUNC(num_put_char_vector_dtor
)
9150 VTABLE_ADD_FUNC(num_put_char_do_put_ptr
)
9151 VTABLE_ADD_FUNC(num_put_char_do_put_double
)
9152 VTABLE_ADD_FUNC(num_put_char_do_put_double
)
9153 VTABLE_ADD_FUNC(num_put_char_do_put_uint64
)
9154 VTABLE_ADD_FUNC(num_put_char_do_put_int64
)
9155 VTABLE_ADD_FUNC(num_put_char_do_put_ulong
)
9156 VTABLE_ADD_FUNC(num_put_char_do_put_long
)
9157 VTABLE_ADD_FUNC(num_put_char_do_put_bool
));
9158 __ASM_VTABLE(num_put_wchar
,
9159 VTABLE_ADD_FUNC(num_put_wchar_vector_dtor
)
9160 VTABLE_ADD_FUNC(num_put_wchar_do_put_ptr
)
9161 VTABLE_ADD_FUNC(num_put_wchar_do_put_double
)
9162 VTABLE_ADD_FUNC(num_put_wchar_do_put_double
)
9163 VTABLE_ADD_FUNC(num_put_wchar_do_put_uint64
)
9164 VTABLE_ADD_FUNC(num_put_wchar_do_put_int64
)
9165 VTABLE_ADD_FUNC(num_put_wchar_do_put_ulong
)
9166 VTABLE_ADD_FUNC(num_put_wchar_do_put_long
)
9167 VTABLE_ADD_FUNC(num_put_wchar_do_put_bool
));
9168 __ASM_VTABLE(num_put_short
,
9169 VTABLE_ADD_FUNC(num_put_wchar_vector_dtor
)
9170 VTABLE_ADD_FUNC(num_put_short_do_put_ptr
)
9171 VTABLE_ADD_FUNC(num_put_short_do_put_double
)
9172 VTABLE_ADD_FUNC(num_put_short_do_put_double
)
9173 VTABLE_ADD_FUNC(num_put_short_do_put_uint64
)
9174 VTABLE_ADD_FUNC(num_put_short_do_put_int64
)
9175 VTABLE_ADD_FUNC(num_put_short_do_put_ulong
)
9176 VTABLE_ADD_FUNC(num_put_short_do_put_long
)
9177 VTABLE_ADD_FUNC(num_put_short_do_put_bool
));
9178 __ASM_VTABLE(time_put_char
,
9179 VTABLE_ADD_FUNC(time_put_char_vector_dtor
)
9180 VTABLE_ADD_FUNC(time_put_char_do_put
));
9181 __ASM_VTABLE(time_put_wchar
,
9182 VTABLE_ADD_FUNC(time_put_wchar_vector_dtor
)
9183 VTABLE_ADD_FUNC(time_put_wchar_do_put
));
9184 __ASM_VTABLE(time_put_short
,
9185 VTABLE_ADD_FUNC(time_put_wchar_vector_dtor
)
9186 VTABLE_ADD_FUNC(time_put_wchar_do_put
));
9191 void init_locale(void *base
)
9194 init_locale_facet_rtti(base
);
9195 init_collate_char_rtti(base
);
9196 init_collate_wchar_rtti(base
);
9197 init_collate_short_rtti(base
);
9198 init_ctype_base_rtti(base
);
9199 init_ctype_char_rtti(base
);
9200 init_ctype_wchar_rtti(base
);
9201 init_ctype_short_rtti(base
);
9202 init_codecvt_base_rtti(base
);
9203 init_codecvt_char_rtti(base
);
9204 init_codecvt_wchar_rtti(base
);
9205 init_codecvt_short_rtti(base
);
9206 init_numpunct_char_rtti(base
);
9207 init_numpunct_wchar_rtti(base
);
9208 init_numpunct_short_rtti(base
);
9209 init_num_get_char_rtti(base
);
9210 init_num_get_wchar_rtti(base
);
9211 init_num_get_short_rtti(base
);
9212 init_num_put_char_rtti(base
);
9213 init_num_put_wchar_rtti(base
);
9214 init_num_put_short_rtti(base
);
9215 init_time_put_char_rtti(base
);
9216 init_time_put_wchar_rtti(base
);
9217 init_time_put_short_rtti(base
);
9221 void free_locale(void)
9223 facets_elem
*iter
, *safe
;
9226 locale__Locimp_dtor(global_locale
);
9227 locale_dtor(&classic_locale
);
9230 LIST_FOR_EACH_ENTRY_SAFE(iter
, safe
, &lazy_facets
, facets_elem
, entry
) {
9231 list_remove(&iter
->entry
);
9232 if(locale_facet__Decref(iter
->fac
))
9233 call_locale_facet_vector_dtor(iter
->fac
, 1);
9234 MSVCRT_operator_delete(iter
);