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
31 #include "wine/list.h"
36 #include "wine/unicode.h"
37 #include "wine/debug.h"
38 WINE_DEFAULT_DEBUG_CHANNEL(msvcp
);
40 char* __cdecl
_Getdays(void);
41 char* __cdecl
_Getmonths(void);
42 void* __cdecl
_Gettnames(void);
43 unsigned int __cdecl
___lc_codepage_func(void);
44 LCID
* __cdecl
___lc_handle_func(void);
45 const locale_facet
* __thiscall
locale__Getfacet(const locale
*, MSVCP_size_t
);
46 const locale
* __cdecl
locale_classic(void);
54 typedef struct _locale__Locimp
{
56 locale_facet
**facetvec
;
57 MSVCP_size_t facet_cnt
;
59 MSVCP_bool transparent
;
60 basic_string_char name
;
69 basic_string_char days
;
70 basic_string_char months
;
71 basic_string_char oldlocname
;
72 basic_string_char newlocname
;
90 const char *false_name
;
91 const char *true_name
;
99 const wchar_t *false_name
;
100 const wchar_t *true_name
;
103 /* ?_Id_cnt@id@locale@std@@0HA */
104 int locale_id__Id_cnt
= 0;
106 static locale__Locimp
*global_locale
;
107 static locale classic_locale
;
109 /* ?_Clocptr@_Locimp@locale@std@@0PAV123@A */
110 /* ?_Clocptr@_Locimp@locale@std@@0PEAV123@EA */
111 locale__Locimp
*locale__Locimp__Clocptr
= NULL
;
113 static char istreambuf_iterator_char_val(istreambuf_iterator_char
*this)
115 if(this->strbuf
&& !this->got
) {
116 int c
= basic_streambuf_char_sgetc(this->strbuf
);
127 static wchar_t istreambuf_iterator_wchar_val(istreambuf_iterator_wchar
*this)
129 if(this->strbuf
&& !this->got
) {
130 unsigned short c
= basic_streambuf_wchar_sgetc(this->strbuf
);
141 static void istreambuf_iterator_char_inc(istreambuf_iterator_char
*this)
143 if(!this->strbuf
|| basic_streambuf_char_sbumpc(this->strbuf
)==EOF
) {
148 istreambuf_iterator_char_val(this);
152 static void istreambuf_iterator_wchar_inc(istreambuf_iterator_wchar
*this)
154 if(!this->strbuf
|| basic_streambuf_wchar_sbumpc(this->strbuf
)==WEOF
) {
159 istreambuf_iterator_wchar_val(this);
163 static void ostreambuf_iterator_char_put(ostreambuf_iterator_char
*this, char ch
)
165 if(this->failed
|| basic_streambuf_char_sputc(this->strbuf
, ch
)==EOF
)
169 static void ostreambuf_iterator_wchar_put(ostreambuf_iterator_wchar
*this, wchar_t ch
)
171 if(this->failed
|| basic_streambuf_wchar_sputc(this->strbuf
, ch
)==WEOF
)
175 /* ??1facet@locale@std@@UAE@XZ */
176 /* ??1facet@locale@std@@UEAA@XZ */
177 DEFINE_THISCALL_WRAPPER(locale_facet_dtor
, 4)
178 void __thiscall
locale_facet_dtor(locale_facet
*this)
180 TRACE("(%p)\n", this);
183 DEFINE_THISCALL_WRAPPER(locale_facet_vector_dtor
, 8)
184 #define call_locale_facet_vector_dtor(this, flags) CALL_VTBL_FUNC(this, 0, \
185 locale_facet*, (locale_facet*, unsigned int), (this, flags))
186 locale_facet
* __thiscall
locale_facet_vector_dtor(locale_facet
*this, unsigned int flags
)
188 TRACE("(%p %x)\n", this, flags
);
190 /* we have an array, with the number of elements stored before the first object */
191 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
193 for(i
=*ptr
-1; i
>=0; i
--)
194 locale_facet_dtor(this+i
);
195 MSVCRT_operator_delete(ptr
);
197 locale_facet_dtor(this);
199 MSVCRT_operator_delete(this);
210 static struct list lazy_facets
= LIST_INIT(lazy_facets
);
212 /* Not exported from msvcp90 */
213 /* ?facet_Register@facet@locale@std@@CAXPAV123@@Z */
214 /* ?facet_Register@facet@locale@std@@CAXPEAV123@@Z */
215 static void locale_facet_register(locale_facet
*add
)
217 facets_elem
*head
= MSVCRT_operator_new(sizeof(*head
));
219 ERR("Out of memory\n");
220 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
224 list_add_head(&lazy_facets
, &head
->entry
);
227 /* Not exported from msvcp90 */
228 /* ?_Register@facet@locale@std@@QAEXXZ */
229 /* ?_Register@facet@locale@std@@QEAAXXZ */
230 DEFINE_THISCALL_WRAPPER(locale_facet__Register
, 4)
231 void __thiscall
locale_facet__Register(locale_facet
*this)
233 TRACE("(%p)\n", this);
234 locale_facet_register(this);
237 /* Not exported from msvcp90 */
238 /* ??_7facet@locale@std@@6B@ */
239 extern const vtable_ptr MSVCP_locale_facet_vtable
;
241 /* ??0id@locale@std@@QAE@I@Z */
242 /* ??0id@locale@std@@QEAA@_K@Z */
243 DEFINE_THISCALL_WRAPPER(locale_id_ctor_id
, 8)
244 locale_id
* __thiscall
locale_id_ctor_id(locale_id
*this, MSVCP_size_t id
)
246 TRACE("(%p %lu)\n", this, id
);
252 /* ??_Fid@locale@std@@QAEXXZ */
253 /* ??_Fid@locale@std@@QEAAXXZ */
254 DEFINE_THISCALL_WRAPPER(locale_id_ctor
, 4)
255 locale_id
* __thiscall
locale_id_ctor(locale_id
*this)
257 TRACE("(%p)\n", this);
263 /* ??Bid@locale@std@@QAEIXZ */
264 /* ??Bid@locale@std@@QEAA_KXZ */
265 DEFINE_THISCALL_WRAPPER(locale_id_operator_size_t
, 4)
266 MSVCP_size_t __thiscall
locale_id_operator_size_t(locale_id
*this)
270 TRACE("(%p)\n", this);
273 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
274 this->id
= ++locale_id__Id_cnt
;
281 /* ??_Ffacet@locale@std@@QAEXXZ */
282 /* ??_Ffacet@locale@std@@QEAAXXZ */
283 DEFINE_THISCALL_WRAPPER(locale_facet_ctor
, 4)
284 locale_facet
* __thiscall
locale_facet_ctor(locale_facet
*this)
286 TRACE("(%p)\n", this);
287 this->vtable
= &MSVCP_locale_facet_vtable
;
292 /* ??0facet@locale@std@@IAE@I@Z */
293 /* ??0facet@locale@std@@IEAA@_K@Z */
294 DEFINE_THISCALL_WRAPPER(locale_facet_ctor_refs
, 8)
295 locale_facet
* __thiscall
locale_facet_ctor_refs(locale_facet
*this, MSVCP_size_t refs
)
297 TRACE("(%p %lu)\n", this, refs
);
298 this->vtable
= &MSVCP_locale_facet_vtable
;
303 /* ?_Incref@facet@locale@std@@QAEXXZ */
304 /* ?_Incref@facet@locale@std@@QEAAXXZ */
305 DEFINE_THISCALL_WRAPPER(locale_facet__Incref
, 4)
306 void __thiscall
locale_facet__Incref(locale_facet
*this)
310 TRACE("(%p)\n", this);
312 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
317 /* ?_Decref@facet@locale@std@@QAEPAV123@XZ */
318 /* ?_Decref@facet@locale@std@@QEAAPEAV123@XZ */
319 DEFINE_THISCALL_WRAPPER(locale_facet__Decref
, 4)
320 locale_facet
* __thiscall
locale_facet__Decref(locale_facet
*this)
325 TRACE("(%p)\n", this);
327 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
331 ret
= this->refs
? NULL
: this;
337 /* ??0_Timevec@std@@QAE@ABV01@@Z */
338 /* ??0_Timevec@std@@QEAA@AEBV01@@Z */
339 /* This copy constructor modifies copied object */
340 DEFINE_THISCALL_WRAPPER(_Timevec_copy_ctor
, 8)
341 _Timevec
* __thiscall
_Timevec_copy_ctor(_Timevec
*this, _Timevec
*copy
)
343 TRACE("(%p %p)\n", this, copy
);
344 this->timeptr
= copy
->timeptr
;
345 copy
->timeptr
= NULL
;
349 /* ??0_Timevec@std@@QAE@PAX@Z */
350 /* ??0_Timevec@std@@QEAA@PEAX@Z */
351 DEFINE_THISCALL_WRAPPER(_Timevec_ctor_timeptr
, 8)
352 _Timevec
* __thiscall
_Timevec_ctor_timeptr(_Timevec
*this, void *timeptr
)
354 TRACE("(%p %p)\n", this, timeptr
);
355 this->timeptr
= timeptr
;
359 /* ??_F_Timevec@std@@QAEXXZ */
360 /* ??_F_Timevec@std@@QEAAXXZ */
361 DEFINE_THISCALL_WRAPPER(_Timevec_ctor
, 4)
362 _Timevec
* __thiscall
_Timevec_ctor(_Timevec
*this)
364 TRACE("(%p)\n", this);
365 this->timeptr
= NULL
;
369 /* ??1_Timevec@std@@QAE@XZ */
370 /* ??1_Timevec@std@@QEAA@XZ */
371 DEFINE_THISCALL_WRAPPER(_Timevec_dtor
, 4)
372 void __thiscall
_Timevec_dtor(_Timevec
*this)
374 TRACE("(%p)\n", this);
378 /* ??4_Timevec@std@@QAEAAV01@ABV01@@Z */
379 /* ??4_Timevec@std@@QEAAAEAV01@AEBV01@@Z */
380 DEFINE_THISCALL_WRAPPER(_Timevec_op_assign
, 8)
381 _Timevec
* __thiscall
_Timevec_op_assign(_Timevec
*this, _Timevec
*right
)
383 TRACE("(%p %p)\n", this, right
);
384 this->timeptr
= right
->timeptr
;
385 right
->timeptr
= NULL
;
389 /* ?_Getptr@_Timevec@std@@QBEPAXXZ */
390 /* ?_Getptr@_Timevec@std@@QEBAPEAXXZ */
391 DEFINE_THISCALL_WRAPPER(_Timevec__Getptr
, 4)
392 void* __thiscall
_Timevec__Getptr(_Timevec
*this)
394 TRACE("(%p)\n", this);
395 return this->timeptr
;
398 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@HPBD@Z */
399 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@HPEBD@Z */
400 static _Locinfo
* _Locinfo__Locinfo_ctor_cat_cstr(_Locinfo
*locinfo
, int category
, const char *locstr
)
402 const char *locale
= NULL
;
404 /* This function is probably modifying more global objects */
405 FIXME("(%p %d %s) semi-stub\n", locinfo
, category
, locstr
);
408 throw_exception(EXCEPTION_RUNTIME_ERROR
, "bad locale name");
410 _Lockit_ctor_locktype(&locinfo
->lock
, _LOCK_LOCALE
);
411 MSVCP_basic_string_char_ctor_cstr(&locinfo
->days
, "");
412 MSVCP_basic_string_char_ctor_cstr(&locinfo
->months
, "");
413 MSVCP_basic_string_char_ctor_cstr(&locinfo
->oldlocname
, setlocale(LC_ALL
, NULL
));
416 locale
= setlocale(LC_ALL
, locstr
);
418 locale
= setlocale(LC_ALL
, NULL
);
421 MSVCP_basic_string_char_ctor_cstr(&locinfo
->newlocname
, locale
);
423 MSVCP_basic_string_char_ctor_cstr(&locinfo
->newlocname
, "*");
428 /* ??0_Locinfo@std@@QAE@HPBD@Z */
429 /* ??0_Locinfo@std@@QEAA@HPEBD@Z */
430 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cat_cstr
, 12)
431 _Locinfo
* __thiscall
_Locinfo_ctor_cat_cstr(_Locinfo
*this, int category
, const char *locstr
)
433 return _Locinfo__Locinfo_ctor_cat_cstr(this, category
, locstr
);
436 /* ??0_Locinfo@std@@QAE@PBD@Z */
437 /* ??0_Locinfo@std@@QEAA@PEBD@Z */
438 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cstr
, 8)
439 _Locinfo
* __thiscall
_Locinfo_ctor_cstr(_Locinfo
*this, const char *locstr
)
441 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, locstr
);
444 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPAV12@@Z */
445 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPEAV12@@Z */
446 static void _Locinfo__Locinfo_dtor(_Locinfo
*locinfo
)
448 TRACE("(%p)\n", locinfo
);
450 setlocale(LC_ALL
, MSVCP_basic_string_char_c_str(&locinfo
->oldlocname
));
451 MSVCP_basic_string_char_dtor(&locinfo
->days
);
452 MSVCP_basic_string_char_dtor(&locinfo
->months
);
453 MSVCP_basic_string_char_dtor(&locinfo
->oldlocname
);
454 MSVCP_basic_string_char_dtor(&locinfo
->newlocname
);
455 _Lockit_dtor(&locinfo
->lock
);
458 /* ??_F_Locinfo@std@@QAEXXZ */
459 /* ??_F_Locinfo@std@@QEAAXXZ */
460 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor
, 4)
461 _Locinfo
* __thiscall
_Locinfo_ctor(_Locinfo
*this)
463 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, "C");
466 /* ??1_Locinfo@std@@QAE@XZ */
467 /* ??1_Locinfo@std@@QEAA@XZ */
468 DEFINE_THISCALL_WRAPPER(_Locinfo_dtor
, 4)
469 void __thiscall
_Locinfo_dtor(_Locinfo
*this)
471 _Locinfo__Locinfo_dtor(this);
474 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAAV12@PAV12@HPBD@Z */
475 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAEAV12@PEAV12@HPEBD@Z */
476 static _Locinfo
* _Locinfo__Locinfo_Addcats(_Locinfo
*locinfo
, int category
, const char *locstr
)
478 const char *locale
= NULL
;
480 /* This function is probably modifying more global objects */
481 FIXME("(%p %d %s) semi-stub\n", locinfo
, category
, locstr
);
483 throw_exception(EXCEPTION_RUNTIME_ERROR
, "bad locale name");
485 MSVCP_basic_string_char_dtor(&locinfo
->newlocname
);
488 locale
= setlocale(LC_ALL
, locstr
);
490 locale
= setlocale(LC_ALL
, NULL
);
493 MSVCP_basic_string_char_ctor_cstr(&locinfo
->newlocname
, locale
);
495 MSVCP_basic_string_char_ctor_cstr(&locinfo
->newlocname
, "*");
500 /* ?_Addcats@_Locinfo@std@@QAEAAV12@HPBD@Z */
501 /* ?_Addcats@_Locinfo@std@@QEAAAEAV12@HPEBD@Z */
502 DEFINE_THISCALL_WRAPPER(_Locinfo__Addcats
, 12)
503 _Locinfo
* __thiscall
_Locinfo__Addcats(_Locinfo
*this, int category
, const char *locstr
)
505 return _Locinfo__Locinfo_Addcats(this, category
, locstr
);
509 ULONGLONG __cdecl
_Getcoll(void)
515 _locale_t locale
= _get_current_locale();
519 ret
.collvec
.page
= locale
->locinfo
->lc_collate_cp
;
520 ret
.collvec
.handle
= locale
->locinfo
->lc_handle
[LC_COLLATE
];
521 _free_locale(locale
);
525 /* ?_Getcoll@_Locinfo@std@@QBE?AU_Collvec@@XZ */
526 /* ?_Getcoll@_Locinfo@std@@QEBA?AU_Collvec@@XZ */
527 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcoll
, 8)
528 _Collvec
* __thiscall
_Locinfo__Getcoll(const _Locinfo
*this, _Collvec
*ret
)
530 ULONGLONG ull
= _Getcoll();
531 memcpy(ret
, &ull
, sizeof(ull
));
536 _Ctypevec
* __cdecl
_Getctype(_Ctypevec
*ret
)
538 _locale_t locale
= _get_current_locale();
543 ret
->page
= locale
->locinfo
->lc_codepage
;
544 ret
->handle
= locale
->locinfo
->lc_handle
[LC_COLLATE
];
546 table
= malloc(sizeof(short[256]));
548 _free_locale(locale
);
549 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
551 memcpy(table
, locale
->locinfo
->pctype
, sizeof(short[256]));
553 _free_locale(locale
);
557 /* ?_Getctype@_Locinfo@std@@QBE?AU_Ctypevec@@XZ */
558 /* ?_Getctype@_Locinfo@std@@QEBA?AU_Ctypevec@@XZ */
559 DEFINE_THISCALL_WRAPPER(_Locinfo__Getctype
, 8)
560 _Ctypevec
* __thiscall
_Locinfo__Getctype(const _Locinfo
*this, _Ctypevec
*ret
)
562 return _Getctype(ret
);
566 ULONGLONG __cdecl
_Getcvt(void)
568 _locale_t locale
= _get_current_locale();
576 ret
.cvtvec
.page
= locale
->locinfo
->lc_codepage
;
577 ret
.cvtvec
.handle
= locale
->locinfo
->lc_handle
[LC_CTYPE
];
578 _free_locale(locale
);
582 /* ?_Getcvt@_Locinfo@std@@QBE?AU_Cvtvec@@XZ */
583 /* ?_Getcvt@_Locinfo@std@@QEBA?AU_Cvtvec@@XZ */
584 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcvt
, 8)
585 _Cvtvec
* __thiscall
_Locinfo__Getcvt(const _Locinfo
*this, _Cvtvec
*ret
)
587 ULONGLONG ull
= _Getcvt();
588 memcpy(ret
, &ull
, sizeof(ull
));
592 /* ?_Getdateorder@_Locinfo@std@@QBEHXZ */
593 /* ?_Getdateorder@_Locinfo@std@@QEBAHXZ */
594 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdateorder
, 4)
595 int __thiscall
_Locinfo__Getdateorder(const _Locinfo
*this)
597 FIXME("(%p) stub\n", this);
601 /* ?_Getdays@_Locinfo@std@@QBEPBDXZ */
602 /* ?_Getdays@_Locinfo@std@@QEBAPEBDXZ */
603 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdays
, 4)
604 const char* __thiscall
_Locinfo__Getdays(_Locinfo
*this)
606 char *days
= _Getdays();
608 TRACE("(%p)\n", this);
611 MSVCP_basic_string_char_dtor(&this->days
);
612 MSVCP_basic_string_char_ctor_cstr(&this->days
, days
);
616 return this->days
.size
? MSVCP_basic_string_char_c_str(&this->days
) :
617 ":Sun:Sunday:Mon:Monday:Tue:Tuesday:Wed:Wednesday:Thu:Thursday:Fri:Friday:Sat:Saturday";
620 /* ?_Getmonths@_Locinfo@std@@QBEPBDXZ */
621 /* ?_Getmonths@_Locinfo@std@@QEBAPEBDXZ */
622 DEFINE_THISCALL_WRAPPER(_Locinfo__Getmonths
, 4)
623 const char* __thiscall
_Locinfo__Getmonths(_Locinfo
*this)
625 char *months
= _Getmonths();
627 TRACE("(%p)\n", this);
630 MSVCP_basic_string_char_dtor(&this->months
);
631 MSVCP_basic_string_char_ctor_cstr(&this->months
, months
);
635 return this->months
.size
? MSVCP_basic_string_char_c_str(&this->months
) :
636 ":Jan:January:Feb:February:Mar:March:Apr:April:May:May:Jun:June:Jul:July"
637 ":Aug:August:Sep:September:Oct:October:Nov:November:Dec:December";
640 /* ?_Getfalse@_Locinfo@std@@QBEPBDXZ */
641 /* ?_Getfalse@_Locinfo@std@@QEBAPEBDXZ */
642 DEFINE_THISCALL_WRAPPER(_Locinfo__Getfalse
, 4)
643 const char* __thiscall
_Locinfo__Getfalse(const _Locinfo
*this)
645 TRACE("(%p)\n", this);
649 /* ?_Gettrue@_Locinfo@std@@QBEPBDXZ */
650 /* ?_Gettrue@_Locinfo@std@@QEBAPEBDXZ */
651 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettrue
, 4)
652 const char* __thiscall
_Locinfo__Gettrue(const _Locinfo
*this)
654 TRACE("(%p)\n", this);
658 /* ?_Getlconv@_Locinfo@std@@QBEPBUlconv@@XZ */
659 /* ?_Getlconv@_Locinfo@std@@QEBAPEBUlconv@@XZ */
660 DEFINE_THISCALL_WRAPPER(_Locinfo__Getlconv
, 4)
661 const struct lconv
* __thiscall
_Locinfo__Getlconv(const _Locinfo
*this)
663 TRACE("(%p)\n", this);
667 /* ?_Getname@_Locinfo@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
668 /* ?_Getname@_Locinfo@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
669 DEFINE_THISCALL_WRAPPER(_Locinfo__Getname
, 8)
670 basic_string_char
* __thiscall
_Locinfo__Getname(const _Locinfo
*this, basic_string_char
*ret
)
672 TRACE("(%p)\n", this);
674 MSVCP_basic_string_char_copy_ctor(ret
, &this->newlocname
);
678 /* ?_Gettnames@_Locinfo@std@@QBE?AV_Timevec@2@XZ */
679 /* ?_Gettnames@_Locinfo@std@@QEBA?AV_Timevec@2@XZ */
680 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettnames
, 8)
681 _Timevec
*__thiscall
_Locinfo__Gettnames(const _Locinfo
*this, _Timevec
*ret
)
683 TRACE("(%p)\n", this);
685 _Timevec_ctor_timeptr(ret
, _Gettnames());
689 /* ?id@?$collate@D@std@@2V0locale@2@A */
690 locale_id collate_char_id
= {0};
692 /* ??_7?$collate@D@std@@6B@ */
693 extern const vtable_ptr MSVCP_collate_char_vtable
;
695 /* ?_Init@?$collate@D@std@@IAEXABV_Locinfo@2@@Z */
696 /* ?_Init@?$collate@D@std@@IEAAXAEBV_Locinfo@2@@Z */
697 DEFINE_THISCALL_WRAPPER(collate_char__Init
, 8)
698 void __thiscall
collate_char__Init(collate
*this, const _Locinfo
*locinfo
)
700 TRACE("(%p %p)\n", this, locinfo
);
701 _Locinfo__Getcoll(locinfo
, &this->coll
);
704 /* ??0?$collate@D@std@@IAE@PBDI@Z */
705 /* ??0?$collate@D@std@@IEAA@PEBD_K@Z */
706 static collate
* collate_char_ctor_name(collate
*this, const char *name
, MSVCP_size_t refs
)
710 TRACE("(%p %s %lu)\n", this, name
, refs
);
712 locale_facet_ctor_refs(&this->facet
, refs
);
713 this->facet
.vtable
= &MSVCP_collate_char_vtable
;
715 _Locinfo_ctor_cstr(&locinfo
, name
);
716 collate_char__Init(this, &locinfo
);
717 _Locinfo_dtor(&locinfo
);
721 /* ??0?$collate@D@std@@QAE@ABV_Locinfo@1@I@Z */
722 /* ??0?$collate@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
723 DEFINE_THISCALL_WRAPPER(collate_char_ctor_locinfo
, 12)
724 collate
* __thiscall
collate_char_ctor_locinfo(collate
*this, _Locinfo
*locinfo
, MSVCP_size_t refs
)
726 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
728 locale_facet_ctor_refs(&this->facet
, refs
);
729 this->facet
.vtable
= &MSVCP_collate_char_vtable
;
730 collate_char__Init(this, locinfo
);
734 /* ??0?$collate@D@std@@QAE@I@Z */
735 /* ??0?$collate@D@std@@QEAA@_K@Z */
736 DEFINE_THISCALL_WRAPPER(collate_char_ctor_refs
, 8)
737 collate
* __thiscall
collate_char_ctor_refs(collate
*this, MSVCP_size_t refs
)
739 return collate_char_ctor_name(this, "C", refs
);
742 /* ??1?$collate@D@std@@MAE@XZ */
743 /* ??1?$collate@D@std@@MEAA@XZ */
744 DEFINE_THISCALL_WRAPPER(collate_char_dtor
, 4)
745 void __thiscall
collate_char_dtor(collate
*this)
747 TRACE("(%p)\n", this);
750 DEFINE_THISCALL_WRAPPER(collate_char_vector_dtor
, 8)
751 collate
* __thiscall
collate_char_vector_dtor(collate
*this, unsigned int flags
)
753 TRACE("(%p %x)\n", this, flags
);
755 /* we have an array, with the number of elements stored before the first object */
756 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
758 for(i
=*ptr
-1; i
>=0; i
--)
759 collate_char_dtor(this+i
);
760 MSVCRT_operator_delete(ptr
);
762 collate_char_dtor(this);
764 MSVCRT_operator_delete(this);
770 /* ??_F?$collate@D@std@@QAEXXZ */
771 /* ??_F?$collate@D@std@@QEAAXXZ */
772 DEFINE_THISCALL_WRAPPER(collate_char_ctor
, 4)
773 collate
* __thiscall
collate_char_ctor(collate
*this)
775 return collate_char_ctor_name(this, "C", 0);
778 /* ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
779 /* ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
780 static MSVCP_size_t
collate_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
782 TRACE("(%p %p)\n", facet
, loc
);
784 if(facet
&& !*facet
) {
785 *facet
= MSVCRT_operator_new(sizeof(collate
));
787 ERR("Out of memory\n");
788 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
791 collate_char_ctor_name((collate
*)*facet
,
792 MSVCP_basic_string_char_c_str(&loc
->ptr
->name
), 0);
798 /* ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@@Z */
799 /* ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
800 MSVCP_size_t __cdecl
collate_char__Getcat_old(const locale_facet
**facet
)
802 return collate_char__Getcat(facet
, locale_classic());
806 int __cdecl
_Strcoll(const char *first1
, const char *last1
, const char *first2
,
807 const char *last2
, const _Collvec
*coll
)
811 TRACE("(%s %s)\n", debugstr_an(first1
, last1
-first1
), debugstr_an(first2
, last2
-first2
));
816 lcid
= ___lc_handle_func()[LC_COLLATE
];
817 return CompareStringA(lcid
, 0, first1
, last1
-first1
, first2
, last2
-first2
)-CSTR_EQUAL
;
820 /* ?do_compare@?$collate@D@std@@MBEHPBD000@Z */
821 /* ?do_compare@?$collate@D@std@@MEBAHPEBD000@Z */
822 DEFINE_THISCALL_WRAPPER(collate_char_do_compare
, 20)
823 #define call_collate_char_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 4, int, \
824 (const collate*, const char*, const char*, const char*, const char*), \
825 (this, first1, last1, first2, last2))
826 int __thiscall
collate_char_do_compare(const collate
*this, const char *first1
,
827 const char *last1
, const char *first2
, const char *last2
)
829 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
830 return _Strcoll(first1
, last1
, first2
, last2
, &this->coll
);
833 /* ?compare@?$collate@D@std@@QBEHPBD000@Z */
834 /* ?compare@?$collate@D@std@@QEBAHPEBD000@Z */
835 DEFINE_THISCALL_WRAPPER(collate_char_compare
, 20)
836 int __thiscall
collate_char_compare(const collate
*this, const char *first1
,
837 const char *last1
, const char *first2
, const char *last2
)
839 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
840 return call_collate_char_do_compare(this, first1
, last1
, first2
, last2
);
843 /* ?do_hash@?$collate@D@std@@MBEJPBD0@Z */
844 /* ?do_hash@?$collate@D@std@@MEBAJPEBD0@Z */
845 DEFINE_THISCALL_WRAPPER(collate_char_do_hash
, 12)
846 #define call_collate_char_do_hash(this, first, last) CALL_VTBL_FUNC(this, 12, LONG, \
847 (const collate*, const char*, const char*), (this, first, last))
848 LONG __thiscall
collate_char_do_hash(const collate
*this,
849 const char *first
, const char *last
)
853 TRACE("(%p %p %p)\n", this, first
, last
);
855 for(; first
<last
; first
++)
856 ret
= (ret
<<8 | ret
>>24) + *first
;
860 /* ?hash@?$collate@D@std@@QBEJPBD0@Z */
861 /* ?hash@?$collate@D@std@@QEBAJPEBD0@Z */
862 DEFINE_THISCALL_WRAPPER(collate_char_hash
, 12)
863 LONG __thiscall
collate_char_hash(const collate
*this,
864 const char *first
, const char *last
)
866 TRACE("(%p %p %p)\n", this, first
, last
);
867 return call_collate_char_do_hash(this, first
, last
);
870 /* ?do_transform@?$collate@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
871 /* ?do_transform@?$collate@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
872 DEFINE_THISCALL_WRAPPER(collate_char_do_transform
, 16)
873 basic_string_char
* __thiscall
collate_char_do_transform(const collate
*this,
874 basic_string_char
*ret
, const char *first
, const char *last
)
876 FIXME("(%p %p %p) stub\n", this, first
, last
);
880 /* ?transform@?$collate@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
881 /* ?transform@?$collate@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
882 DEFINE_THISCALL_WRAPPER(collate_char_transform
, 16)
883 basic_string_char
* __thiscall
collate_char_transform(const collate
*this,
884 basic_string_char
*ret
, const char *first
, const char *last
)
886 FIXME("(%p %p %p) stub\n", this, first
, last
);
890 /* ?id@?$collate@_W@std@@2V0locale@2@A */
891 locale_id collate_wchar_id
= {0};
892 /* ?id@?$collate@G@std@@2V0locale@2@A */
893 locale_id collate_short_id
= {0};
895 /* ??_7?$collate@_W@std@@6B@ */
896 extern const vtable_ptr MSVCP_collate_wchar_vtable
;
897 /* ??_7?$collate@G@std@@6B@ */
898 extern const vtable_ptr MSVCP_collate_short_vtable
;
900 /* ?_Init@?$collate@_W@std@@IAEXABV_Locinfo@2@@Z */
901 /* ?_Init@?$collate@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
902 /* ?_Init@?$collate@G@std@@IAEXABV_Locinfo@2@@Z */
903 /* ?_Init@?$collate@G@std@@IEAAXAEBV_Locinfo@2@@Z */
904 DEFINE_THISCALL_WRAPPER(collate_wchar__Init
, 8)
905 void __thiscall
collate_wchar__Init(collate
*this, const _Locinfo
*locinfo
)
907 TRACE("(%p %p)\n", this, locinfo
);
908 _Locinfo__Getcoll(locinfo
, &this->coll
);
911 /* ??0?$collate@_W@std@@IAE@PBDI@Z */
912 /* ??0?$collate@_W@std@@IEAA@PEBD_K@Z */
913 static collate
* collate_wchar_ctor_name(collate
*this, const char *name
, MSVCP_size_t refs
)
917 TRACE("(%p %s %lu)\n", this, name
, refs
);
919 locale_facet_ctor_refs(&this->facet
, refs
);
920 this->facet
.vtable
= &MSVCP_collate_wchar_vtable
;
922 _Locinfo_ctor_cstr(&locinfo
, name
);
923 collate_wchar__Init(this, &locinfo
);
924 _Locinfo_dtor(&locinfo
);
928 /* ??0?$collate@_W@std@@QAE@ABV_Locinfo@1@I@Z */
929 /* ??0?$collate@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
930 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_locinfo
, 12)
931 collate
* __thiscall
collate_wchar_ctor_locinfo(collate
*this, _Locinfo
*locinfo
, MSVCP_size_t refs
)
933 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
935 locale_facet_ctor_refs(&this->facet
, refs
);
936 this->facet
.vtable
= &MSVCP_collate_wchar_vtable
;
937 collate_wchar__Init(this, locinfo
);
941 /* ??0?$collate@G@std@@QAE@ABV_Locinfo@1@I@Z */
942 /* ??0?$collate@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
943 DEFINE_THISCALL_WRAPPER(collate_short_ctor_locinfo
, 12)
944 collate
* __thiscall
collate_short_ctor_locinfo(collate
*this, _Locinfo
*locinfo
, MSVCP_size_t refs
)
946 collate
*ret
= collate_wchar_ctor_locinfo(this, locinfo
, refs
);
947 ret
->facet
.vtable
= &MSVCP_collate_short_vtable
;
951 /* ??0?$collate@_W@std@@QAE@I@Z */
952 /* ??0?$collate@_W@std@@QEAA@_K@Z */
953 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_refs
, 8)
954 collate
* __thiscall
collate_wchar_ctor_refs(collate
*this, MSVCP_size_t refs
)
956 return collate_wchar_ctor_name(this, "C", refs
);
959 /* ??0?$collate@G@std@@QAE@I@Z */
960 /* ??0?$collate@G@std@@QEAA@_K@Z */
961 DEFINE_THISCALL_WRAPPER(collate_short_ctor_refs
, 8)
962 collate
* __thiscall
collate_short_ctor_refs(collate
*this, MSVCP_size_t refs
)
964 collate
*ret
= collate_wchar_ctor_refs(this, refs
);
965 ret
->facet
.vtable
= &MSVCP_collate_short_vtable
;
969 /* ??1?$collate@_W@std@@MAE@XZ */
970 /* ??1?$collate@_W@std@@MEAA@XZ */
971 /* ??1?$collate@G@std@@MAE@XZ */
972 /* ??1?$collate@G@std@@MEAA@XZ */
973 DEFINE_THISCALL_WRAPPER(collate_wchar_dtor
, 4)
974 void __thiscall
collate_wchar_dtor(collate
*this)
976 TRACE("(%p)\n", this);
979 DEFINE_THISCALL_WRAPPER(collate_wchar_vector_dtor
, 8)
980 collate
* __thiscall
collate_wchar_vector_dtor(collate
*this, unsigned int flags
)
982 TRACE("(%p %x)\n", this, flags
);
984 /* we have an array, with the number of elements stored before the first object */
985 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
987 for(i
=*ptr
-1; i
>=0; i
--)
988 collate_wchar_dtor(this+i
);
989 MSVCRT_operator_delete(ptr
);
991 collate_wchar_dtor(this);
993 MSVCRT_operator_delete(this);
999 /* ??_F?$collate@_W@std@@QAEXXZ */
1000 /* ??_F?$collate@_W@std@@QEAAXXZ */
1001 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor
, 4)
1002 collate
* __thiscall
collate_wchar_ctor(collate
*this)
1004 return collate_wchar_ctor_name(this, "C", 0);
1007 /* ??_F?$collate@G@std@@QAEXXZ */
1008 /* ??_F?$collate@G@std@@QEAAXXZ */
1009 DEFINE_THISCALL_WRAPPER(collate_short_ctor
, 4)
1010 collate
* __thiscall
collate_short_ctor(collate
*this)
1012 collate
*ret
= collate_wchar_ctor(this);
1013 ret
->facet
.vtable
= &MSVCP_collate_short_vtable
;
1017 /* ?_Getcat@?$collate@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1018 /* ?_Getcat@?$collate@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1019 static MSVCP_size_t
collate_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
1021 TRACE("(%p %p)\n", facet
, loc
);
1023 if(facet
&& !*facet
) {
1024 *facet
= MSVCRT_operator_new(sizeof(collate
));
1026 ERR("Out of memory\n");
1027 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
1030 collate_wchar_ctor_name((collate
*)*facet
,
1031 MSVCP_basic_string_char_c_str(&loc
->ptr
->name
), 0);
1037 /* ?_Getcat@?$collate@_W@std@@SAIPAPBVfacet@locale@2@@Z */
1038 /* ?_Getcat@?$collate@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1039 MSVCP_size_t __cdecl
collate_wchar__Getcat_old(const locale_facet
**facet
)
1041 return collate_wchar__Getcat(facet
, locale_classic());
1044 /* ?_Getcat@?$collate@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1045 /* ?_Getcat@?$collate@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1046 static MSVCP_size_t
collate_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
1048 if(facet
&& !*facet
) {
1049 collate_wchar__Getcat(facet
, loc
);
1050 (*(locale_facet
**)facet
)->vtable
= &MSVCP_collate_short_vtable
;
1056 /* ?_Getcat@?$collate@G@std@@SAIPAPBVfacet@locale@2@@Z */
1057 /* ?_Getcat@?$collate@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1058 MSVCP_size_t __cdecl
collate_short__Getcat_old(const locale_facet
**facet
)
1060 return collate_short__Getcat(facet
, locale_classic());
1064 int __cdecl
_Wcscoll(const wchar_t *first1
, const wchar_t *last1
, const wchar_t *first2
,
1065 const wchar_t *last2
, const _Collvec
*coll
)
1069 TRACE("(%s %s)\n", debugstr_wn(first1
, last1
-first1
), debugstr_wn(first2
, last2
-first2
));
1072 lcid
= coll
->handle
;
1074 lcid
= ___lc_handle_func()[LC_COLLATE
];
1075 return CompareStringW(lcid
, 0, first1
, last1
-first1
, first2
, last2
-first2
)-CSTR_EQUAL
;
1078 /* ?do_compare@?$collate@_W@std@@MBEHPB_W000@Z */
1079 /* ?do_compare@?$collate@_W@std@@MEBAHPEB_W000@Z */
1080 /* ?do_compare@?$collate@G@std@@MBEHPBG000@Z */
1081 /* ?do_compare@?$collate@G@std@@MEBAHPEBG000@Z */
1082 DEFINE_THISCALL_WRAPPER(collate_wchar_do_compare
, 20)
1083 #define call_collate_wchar_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 4, int, \
1084 (const collate*, const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*), \
1085 (this, first1, last1, first2, last2))
1086 int __thiscall
collate_wchar_do_compare(const collate
*this, const wchar_t *first1
,
1087 const wchar_t *last1
, const wchar_t *first2
, const wchar_t *last2
)
1089 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1090 return _Wcscoll(first1
, last1
, first2
, last2
, &this->coll
);
1093 /* ?compare@?$collate@_W@std@@QBEHPB_W000@Z */
1094 /* ?compare@?$collate@_W@std@@QEBAHPEB_W000@Z */
1095 /* ?compare@?$collate@G@std@@QBEHPBG000@Z */
1096 /* ?compare@?$collate@G@std@@QEBAHPEBG000@Z */
1097 DEFINE_THISCALL_WRAPPER(collate_wchar_compare
, 20)
1098 int __thiscall
collate_wchar_compare(const collate
*this, const wchar_t *first1
,
1099 const wchar_t *last1
, const wchar_t *first2
, const wchar_t *last2
)
1101 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1102 return call_collate_wchar_do_compare(this, first1
, last1
, first2
, last2
);
1105 /* ?do_hash@?$collate@_W@std@@MBEJPB_W0@Z */
1106 /* ?do_hash@?$collate@_W@std@@MEBAJPEB_W0@Z */
1107 /* ?do_hash@?$collate@G@std@@MBEJPBG0@Z */
1108 /* ?do_hash@?$collate@G@std@@MEBAJPEBG0@Z */
1109 DEFINE_THISCALL_WRAPPER(collate_wchar_do_hash
, 12)
1110 #define call_collate_wchar_do_hash(this, first, last) CALL_VTBL_FUNC(this, 12, LONG, \
1111 (const collate*, const wchar_t*, const wchar_t*), (this, first, last))
1112 LONG __thiscall
collate_wchar_do_hash(const collate
*this,
1113 const wchar_t *first
, const wchar_t *last
)
1117 TRACE("(%p %p %p)\n", this, first
, last
);
1119 for(; first
<last
; first
++)
1120 ret
= (ret
<<8 | ret
>>24) + *first
;
1124 /* ?hash@?$collate@_W@std@@QBEJPB_W0@Z */
1125 /* ?hash@?$collate@_W@std@@QEBAJPEB_W0@Z */
1126 /* ?hash@?$collate@G@std@@QBEJPBG0@Z */
1127 /* ?hash@?$collate@G@std@@QEBAJPEBG0@Z */
1128 DEFINE_THISCALL_WRAPPER(collate_wchar_hash
, 12)
1129 LONG __thiscall
collate_wchar_hash(const collate
*this,
1130 const wchar_t *first
, const wchar_t *last
)
1132 TRACE("(%p %p %p)\n", this, first
, last
);
1133 return call_collate_wchar_do_hash(this, first
, last
);
1136 /* ?do_transform@?$collate@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
1137 /* ?do_transform@?$collate@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
1138 /* ?do_transform@?$collate@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
1139 /* ?do_transform@?$collate@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
1140 DEFINE_THISCALL_WRAPPER(collate_wchar_do_transform
, 16)
1141 basic_string_wchar
* __thiscall
collate_wchar_do_transform(const collate
*this,
1142 basic_string_wchar
*ret
, const wchar_t *first
, const wchar_t *last
)
1144 FIXME("(%p %p %p) stub\n", this, first
, last
);
1148 /* ?transform@?$collate@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
1149 /* ?transform@?$collate@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
1150 /* ?transform@?$collate@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
1151 /* ?transform@?$collate@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
1152 DEFINE_THISCALL_WRAPPER(collate_wchar_transform
, 16)
1153 basic_string_wchar
* __thiscall
collate_wchar_transform(const collate
*this,
1154 basic_string_wchar
*ret
, const wchar_t *first
, const wchar_t *last
)
1156 FIXME("(%p %p %p) stub\n", this, first
, last
);
1160 /* ??_7ctype_base@std@@6B@ */
1161 extern const vtable_ptr MSVCP_ctype_base_vtable
;
1163 /* ??0ctype_base@std@@QAE@I@Z */
1164 /* ??0ctype_base@std@@QEAA@_K@Z */
1165 DEFINE_THISCALL_WRAPPER(ctype_base_ctor_refs
, 8)
1166 ctype_base
* __thiscall
ctype_base_ctor_refs(ctype_base
*this, MSVCP_size_t refs
)
1168 TRACE("(%p %lu)\n", this, refs
);
1169 locale_facet_ctor_refs(&this->facet
, refs
);
1170 this->facet
.vtable
= &MSVCP_ctype_base_vtable
;
1174 /* ??_Fctype_base@std@@QAEXXZ */
1175 /* ??_Fctype_base@std@@QEAAXXZ */
1176 DEFINE_THISCALL_WRAPPER(ctype_base_ctor
, 4)
1177 ctype_base
* __thiscall
ctype_base_ctor(ctype_base
*this)
1179 TRACE("(%p)\n", this);
1180 locale_facet_ctor_refs(&this->facet
, 0);
1181 this->facet
.vtable
= &MSVCP_ctype_base_vtable
;
1185 /* ??1ctype_base@std@@UAE@XZ */
1186 /* ??1ctype_base@std@@UEAA@XZ */
1187 DEFINE_THISCALL_WRAPPER(ctype_base_dtor
, 4)
1188 void __thiscall
ctype_base_dtor(ctype_base
*this)
1190 TRACE("(%p)\n", this);
1193 DEFINE_THISCALL_WRAPPER(ctype_base_vector_dtor
, 8)
1194 ctype_base
* __thiscall
ctype_base_vector_dtor(ctype_base
*this, unsigned int flags
)
1196 TRACE("(%p %x)\n", this, flags
);
1198 /* we have an array, with the number of elements stored before the first object */
1199 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1201 for(i
=*ptr
-1; i
>=0; i
--)
1202 ctype_base_dtor(this+i
);
1203 MSVCRT_operator_delete(ptr
);
1205 ctype_base_dtor(this);
1207 MSVCRT_operator_delete(this);
1213 /* ?id@?$ctype@D@std@@2V0locale@2@A */
1214 locale_id ctype_char_id
= {0};
1215 /* ?table_size@?$ctype@D@std@@2IB */
1216 /* ?table_size@?$ctype@D@std@@2_KB */
1217 MSVCP_size_t ctype_char_table_size
= 256;
1219 /* ??_7?$ctype@D@std@@6B@ */
1220 extern const vtable_ptr MSVCP_ctype_char_vtable
;
1222 /* ?_Init@?$ctype@D@std@@IAEXABV_Locinfo@2@@Z */
1223 /* ?_Init@?$ctype@D@std@@IEAAXAEBV_Locinfo@2@@Z */
1224 DEFINE_THISCALL_WRAPPER(ctype_char__Init
, 8)
1225 void __thiscall
ctype_char__Init(ctype_char
*this, const _Locinfo
*locinfo
)
1227 TRACE("(%p %p)\n", this, locinfo
);
1228 _Locinfo__Getctype(locinfo
, &this->ctype
);
1231 /* ?_Tidy@?$ctype@D@std@@IAEXXZ */
1232 /* ?_Tidy@?$ctype@D@std@@IEAAXXZ */
1233 DEFINE_THISCALL_WRAPPER(ctype_char__Tidy
, 4)
1234 void __thiscall
ctype_char__Tidy(ctype_char
*this)
1236 TRACE("(%p)\n", this);
1238 if(this->ctype
.delfl
)
1239 free((short*)this->ctype
.table
);
1242 /* ?classic_table@?$ctype@D@std@@KAPBFXZ */
1243 /* ?classic_table@?$ctype@D@std@@KAPEBFXZ */
1244 const short* __cdecl
ctype_char_classic_table(void)
1247 return &((short*)GetProcAddress(GetModuleHandleA("msvcrt.dll"), "_ctype"))[1];
1250 /* ??0?$ctype@D@std@@QAE@ABV_Locinfo@1@I@Z */
1251 /* ??0?$ctype@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1252 DEFINE_THISCALL_WRAPPER(ctype_char_ctor_locinfo
, 12)
1253 ctype_char
* __thiscall
ctype_char_ctor_locinfo(ctype_char
*this,
1254 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
1256 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
1257 ctype_base_ctor_refs(&this->base
, refs
);
1258 this->base
.facet
.vtable
= &MSVCP_ctype_char_vtable
;
1259 ctype_char__Init(this, locinfo
);
1263 /* ??0?$ctype@D@std@@QAE@PBF_NI@Z */
1264 /* ??0?$ctype@D@std@@QEAA@PEBF_N_K@Z */
1265 DEFINE_THISCALL_WRAPPER(ctype_char_ctor_table
, 16)
1266 ctype_char
* __thiscall
ctype_char_ctor_table(ctype_char
*this,
1267 const short *table
, MSVCP_bool
delete, MSVCP_size_t refs
)
1271 TRACE("(%p %p %d %lu)\n", this, table
, delete, refs
);
1273 ctype_base_ctor_refs(&this->base
, refs
);
1274 this->base
.facet
.vtable
= &MSVCP_ctype_char_vtable
;
1276 _Locinfo_ctor(&locinfo
);
1277 ctype_char__Init(this, &locinfo
);
1278 _Locinfo_dtor(&locinfo
);
1281 ctype_char__Tidy(this);
1282 this->ctype
.table
= table
;
1283 this->ctype
.delfl
= delete;
1288 /* ??_F?$ctype@D@std@@QAEXXZ */
1289 /* ??_F?$ctype@D@std@@QEAAXXZ */
1290 DEFINE_THISCALL_WRAPPER(ctype_char_ctor
, 4)
1291 ctype_char
* __thiscall
ctype_char_ctor(ctype_char
*this)
1293 return ctype_char_ctor_table(this, NULL
, FALSE
, 0);
1296 /* ??1?$ctype@D@std@@MAE@XZ */
1297 /* ??1?$ctype@D@std@@MEAA@XZ */
1298 DEFINE_THISCALL_WRAPPER(ctype_char_dtor
, 4)
1299 void __thiscall
ctype_char_dtor(ctype_char
*this)
1301 TRACE("(%p)\n", this);
1302 ctype_char__Tidy(this);
1305 DEFINE_THISCALL_WRAPPER(ctype_char_vector_dtor
, 8)
1306 ctype_char
* __thiscall
ctype_char_vector_dtor(ctype_char
*this, unsigned int flags
)
1308 TRACE("(%p %x)\n", this, flags
);
1310 /* we have an array, with the number of elements stored before the first object */
1311 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1313 for(i
=*ptr
-1; i
>=0; i
--)
1314 ctype_char_dtor(this+i
);
1315 MSVCRT_operator_delete(ptr
);
1317 ctype_char_dtor(this);
1319 MSVCRT_operator_delete(this);
1325 /* ?do_narrow@?$ctype@D@std@@MBEDDD@Z */
1326 /* ?do_narrow@?$ctype@D@std@@MEBADDD@Z */
1327 DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow_ch
, 12)
1328 #define call_ctype_char_do_narrow_ch(this, ch, unused) CALL_VTBL_FUNC(this, 32, \
1329 char, (const ctype_char*, char, char), (this, ch, unused))
1330 char __thiscall
ctype_char_do_narrow_ch(const ctype_char
*this, char ch
, char unused
)
1332 TRACE("(%p %c %c)\n", this, ch
, unused
);
1336 /* ?do_narrow@?$ctype@D@std@@MBEPBDPBD0DPAD@Z */
1337 /* ?do_narrow@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD@Z */
1338 DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow
, 20)
1339 #define call_ctype_char_do_narrow(this, first, last, unused, dest) CALL_VTBL_FUNC(this, 28, \
1340 const char*, (const ctype_char*, const char*, const char*, char, char*), \
1341 (this, first, last, unused, dest))
1342 const char* __thiscall
ctype_char_do_narrow(const ctype_char
*this,
1343 const char *first
, const char *last
, char unused
, char *dest
)
1345 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1346 memcpy(dest
, first
, last
-first
);
1350 /* ?narrow@?$ctype@D@std@@QBEDDD@Z */
1351 /* ?narrow@?$ctype@D@std@@QEBADDD@Z */
1352 DEFINE_THISCALL_WRAPPER(ctype_char_narrow_ch
, 12)
1353 char __thiscall
ctype_char_narrow_ch(const ctype_char
*this, char ch
, char dflt
)
1355 TRACE("(%p %c %c)\n", this, ch
, dflt
);
1356 return call_ctype_char_do_narrow_ch(this, ch
, dflt
);
1359 /* ?narrow@?$ctype@D@std@@QBEPBDPBD0DPAD@Z */
1360 /* ?narrow@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD@Z */
1361 DEFINE_THISCALL_WRAPPER(ctype_char_narrow
, 20)
1362 const char* __thiscall
ctype_char_narrow(const ctype_char
*this,
1363 const char *first
, const char *last
, char dflt
, char *dest
)
1365 TRACE("(%p %p %p %c %p)\n", this, first
, last
, dflt
, dest
);
1366 return call_ctype_char_do_narrow(this, first
, last
, dflt
, dest
);
1369 /* ?do_widen@?$ctype@D@std@@MBEDD@Z */
1370 /* ?do_widen@?$ctype@D@std@@MEBADD@Z */
1371 DEFINE_THISCALL_WRAPPER(ctype_char_do_widen_ch
, 8)
1372 #define call_ctype_char_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
1373 char, (const ctype_char*, char), (this, ch))
1374 char __thiscall
ctype_char_do_widen_ch(const ctype_char
*this, char ch
)
1376 TRACE("(%p %c)\n", this, ch
);
1380 /* ?do_widen@?$ctype@D@std@@MBEPBDPBD0PAD@Z */
1381 /* ?do_widen@?$ctype@D@std@@MEBAPEBDPEBD0PEAD@Z */
1382 DEFINE_THISCALL_WRAPPER(ctype_char_do_widen
, 16)
1383 #define call_ctype_char_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 20, \
1384 const char*, (const ctype_char*, const char*, const char*, char*), \
1385 (this, first, last, dest))
1386 const char* __thiscall
ctype_char_do_widen(const ctype_char
*this,
1387 const char *first
, const char *last
, char *dest
)
1389 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1390 memcpy(dest
, first
, last
-first
);
1394 /* ?widen@?$ctype@D@std@@QBEDD@Z */
1395 /* ?widen@?$ctype@D@std@@QEBADD@Z */
1396 DEFINE_THISCALL_WRAPPER(ctype_char_widen_ch
, 8)
1397 char __thiscall
ctype_char_widen_ch(const ctype_char
*this, char ch
)
1399 TRACE("(%p %c)\n", this, ch
);
1400 return call_ctype_char_do_widen_ch(this, ch
);
1403 /* ?widen@?$ctype@D@std@@QBEPBDPBD0PAD@Z */
1404 /* ?widen@?$ctype@D@std@@QEBAPEBDPEBD0PEAD@Z */
1405 DEFINE_THISCALL_WRAPPER(ctype_char_widen
, 16)
1406 const char* __thiscall
ctype_char_widen(const ctype_char
*this,
1407 const char *first
, const char *last
, char *dest
)
1409 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1410 return call_ctype_char_do_widen(this, first
, last
, dest
);
1413 /* ?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1414 /* ?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1415 static MSVCP_size_t
ctype_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
1417 TRACE("(%p %p)\n", facet
, loc
);
1419 if(facet
&& !*facet
) {
1422 *facet
= MSVCRT_operator_new(sizeof(ctype_char
));
1424 ERR("Out of memory\n");
1425 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
1429 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
1430 ctype_char_ctor_locinfo((ctype_char
*)*facet
, &locinfo
, 0);
1431 _Locinfo_dtor(&locinfo
);
1437 /* ?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@@Z */
1438 /* ?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1439 MSVCP_size_t __cdecl
ctype_char__Getcat_old(const locale_facet
**facet
)
1441 return ctype_char__Getcat(facet
, locale_classic());
1444 ctype_char
* ctype_char_use_facet(const locale
*loc
)
1446 static ctype_char
*obj
= NULL
;
1449 const locale_facet
*fac
;
1451 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1452 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_char_id
));
1454 _Lockit_dtor(&lock
);
1455 return (ctype_char
*)fac
;
1459 _Lockit_dtor(&lock
);
1463 ctype_char__Getcat(&fac
, loc
);
1464 obj
= (ctype_char
*)fac
;
1465 locale_facet__Incref(&obj
->base
.facet
);
1466 locale_facet_register(&obj
->base
.facet
);
1467 _Lockit_dtor(&lock
);
1473 int __cdecl
_Tolower(int ch
, const _Ctypevec
*ctype
)
1477 TRACE("%d %p\n", ch
, ctype
);
1482 cp
= ___lc_codepage_func();
1484 /* Don't convert to unicode in case of C locale */
1486 if(ch
>='A' && ch
<='Z')
1495 str
[0] = (ch
>>8) & 255;
1503 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, str
, size
, &wide
, 1))
1506 lower
= tolowerW(wide
);
1510 WideCharToMultiByte(cp
, 0, &lower
, 1, str
, 2, NULL
, NULL
);
1512 return str
[0] + (str
[1]<<8);
1516 /* ?do_tolower@?$ctype@D@std@@MBEDD@Z */
1517 /* ?do_tolower@?$ctype@D@std@@MEBADD@Z */
1518 #define call_ctype_char_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 8, \
1519 char, (const ctype_char*, char), (this, ch))
1520 DEFINE_THISCALL_WRAPPER(ctype_char_do_tolower_ch
, 8)
1521 char __thiscall
ctype_char_do_tolower_ch(const ctype_char
*this, char ch
)
1523 TRACE("(%p %c)\n", this, ch
);
1524 return _Tolower(ch
, &this->ctype
);
1527 /* ?do_tolower@?$ctype@D@std@@MBEPBDPADPBD@Z */
1528 /* ?do_tolower@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z */
1529 #define call_ctype_char_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 4, \
1530 const char*, (const ctype_char*, char*, const char*), (this, first, last))
1531 DEFINE_THISCALL_WRAPPER(ctype_char_do_tolower
, 12)
1532 const char* __thiscall
ctype_char_do_tolower(const ctype_char
*this, char *first
, const char *last
)
1534 TRACE("(%p %p %p)\n", this, first
, last
);
1535 for(; first
<last
; first
++)
1536 *first
= _Tolower(*first
, &this->ctype
);
1540 /* ?tolower@?$ctype@D@std@@QBEDD@Z */
1541 /* ?tolower@?$ctype@D@std@@QEBADD@Z */
1542 DEFINE_THISCALL_WRAPPER(ctype_char_tolower_ch
, 8)
1543 char __thiscall
ctype_char_tolower_ch(const ctype_char
*this, char ch
)
1545 TRACE("(%p %c)\n", this, ch
);
1546 return call_ctype_char_do_tolower_ch(this, ch
);
1549 /* ?tolower@?$ctype@D@std@@QBEPBDPADPBD@Z */
1550 /* ?tolower@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z */
1551 DEFINE_THISCALL_WRAPPER(ctype_char_tolower
, 12)
1552 const char* __thiscall
ctype_char_tolower(const ctype_char
*this, char *first
, const char *last
)
1554 TRACE("(%p %p %p)\n", this, first
, last
);
1555 return call_ctype_char_do_tolower(this, first
, last
);
1559 int __cdecl
_Toupper(int ch
, const _Ctypevec
*ctype
)
1563 TRACE("%d %p\n", ch
, ctype
);
1568 cp
= ___lc_codepage_func();
1570 /* Don't convert to unicode in case of C locale */
1572 if(ch
>='a' && ch
<='z')
1581 str
[0] = (ch
>>8) & 255;
1589 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, str
, size
, &wide
, 1))
1592 upper
= toupperW(wide
);
1596 WideCharToMultiByte(cp
, 0, &upper
, 1, str
, 2, NULL
, NULL
);
1598 return str
[0] + (str
[1]<<8);
1602 /* ?do_toupper@?$ctype@D@std@@MBEDD@Z */
1603 /* ?do_toupper@?$ctype@D@std@@MEBADD@Z */
1604 #define call_ctype_char_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 16, \
1605 char, (const ctype_char*, char), (this, ch))
1606 DEFINE_THISCALL_WRAPPER(ctype_char_do_toupper_ch
, 8)
1607 char __thiscall
ctype_char_do_toupper_ch(const ctype_char
*this, char ch
)
1609 TRACE("(%p %c)\n", this, ch
);
1610 return _Toupper(ch
, &this->ctype
);
1613 /* ?do_toupper@?$ctype@D@std@@MBEPBDPADPBD@Z */
1614 /* ?do_toupper@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z */
1615 #define call_ctype_char_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 12, \
1616 const char*, (const ctype_char*, char*, const char*), (this, first, last))
1617 DEFINE_THISCALL_WRAPPER(ctype_char_do_toupper
, 12)
1618 const char* __thiscall
ctype_char_do_toupper(const ctype_char
*this,
1619 char *first
, const char *last
)
1621 TRACE("(%p %p %p)\n", this, first
, last
);
1622 for(; first
<last
; first
++)
1623 *first
= _Toupper(*first
, &this->ctype
);
1627 /* ?toupper@?$ctype@D@std@@QBEDD@Z */
1628 /* ?toupper@?$ctype@D@std@@QEBADD@Z */
1629 DEFINE_THISCALL_WRAPPER(ctype_char_toupper_ch
, 8)
1630 char __thiscall
ctype_char_toupper_ch(const ctype_char
*this, char ch
)
1632 TRACE("(%p %c)\n", this, ch
);
1633 return call_ctype_char_do_toupper_ch(this, ch
);
1636 /* ?toupper@?$ctype@D@std@@QBEPBDPADPBD@Z */
1637 /* ?toupper@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z */
1638 DEFINE_THISCALL_WRAPPER(ctype_char_toupper
, 12)
1639 const char* __thiscall
ctype_char_toupper(const ctype_char
*this, char *first
, const char *last
)
1641 TRACE("(%p %p %p)\n", this, first
, last
);
1642 return call_ctype_char_do_toupper(this, first
, last
);
1645 /* ?is@?$ctype@D@std@@QBE_NFD@Z */
1646 /* ?is@?$ctype@D@std@@QEBA_NFD@Z */
1647 DEFINE_THISCALL_WRAPPER(ctype_char_is_ch
, 12)
1648 MSVCP_bool __thiscall
ctype_char_is_ch(const ctype_char
*this, short mask
, char ch
)
1650 TRACE("(%p %x %c)\n", this, mask
, ch
);
1651 return (this->ctype
.table
[(unsigned char)ch
] & mask
) != 0;
1654 /* ?is@?$ctype@D@std@@QBEPBDPBD0PAF@Z */
1655 /* ?is@?$ctype@D@std@@QEBAPEBDPEBD0PEAF@Z */
1656 DEFINE_THISCALL_WRAPPER(ctype_char_is
, 16)
1657 const char* __thiscall
ctype_char_is(const ctype_char
*this, const char *first
, const char *last
, short *dest
)
1659 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1660 for(; first
<last
; first
++)
1661 *dest
++ = this->ctype
.table
[(unsigned char)*first
];
1665 /* ?scan_is@?$ctype@D@std@@QBEPBDFPBD0@Z */
1666 /* ?scan_is@?$ctype@D@std@@QEBAPEBDFPEBD0@Z */
1667 DEFINE_THISCALL_WRAPPER(ctype_char_scan_is
, 16)
1668 const char* __thiscall
ctype_char_scan_is(const ctype_char
*this, short mask
, const char *first
, const char *last
)
1670 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
1671 for(; first
<last
; first
++)
1672 if(!ctype_char_is_ch(this, mask
, *first
))
1677 /* ?scan_not@?$ctype@D@std@@QBEPBDFPBD0@Z */
1678 /* ?scan_not@?$ctype@D@std@@QEBAPEBDFPEBD0@Z */
1679 DEFINE_THISCALL_WRAPPER(ctype_char_scan_not
, 16)
1680 const char* __thiscall
ctype_char_scan_not(const ctype_char
*this, short mask
, const char *first
, const char *last
)
1682 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
1683 for(; first
<last
; first
++)
1684 if(ctype_char_is_ch(this, mask
, *first
))
1689 /* ?table@?$ctype@D@std@@IBEPBFXZ */
1690 /* ?table@?$ctype@D@std@@IEBAPEBFXZ */
1691 DEFINE_THISCALL_WRAPPER(ctype_char_table
, 4)
1692 const short* __thiscall
ctype_char_table(const ctype_char
*this)
1694 TRACE("(%p)\n", this);
1695 return this->ctype
.table
;
1698 /* ?id@?$ctype@_W@std@@2V0locale@2@A */
1699 locale_id ctype_wchar_id
= {0};
1700 /* ?id@?$ctype@G@std@@2V0locale@2@A */
1701 locale_id ctype_short_id
= {0};
1703 /* ??_7?$ctype@_W@std@@6B@ */
1704 extern const vtable_ptr MSVCP_ctype_wchar_vtable
;
1705 /* ??_7?$ctype@G@std@@6B@ */
1706 extern const vtable_ptr MSVCP_ctype_short_vtable
;
1708 /* ?_Init@?$ctype@_W@std@@IAEXABV_Locinfo@2@@Z */
1709 /* ?_Init@?$ctype@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
1710 /* ?_Init@?$ctype@G@std@@IAEXABV_Locinfo@2@@Z */
1711 /* ?_Init@?$ctype@G@std@@IEAAXAEBV_Locinfo@2@@Z */
1712 DEFINE_THISCALL_WRAPPER(ctype_wchar__Init
, 8)
1713 void __thiscall
ctype_wchar__Init(ctype_wchar
*this, const _Locinfo
*locinfo
)
1715 TRACE("(%p %p)\n", this, locinfo
);
1716 _Locinfo__Getctype(locinfo
, &this->ctype
);
1717 _Locinfo__Getcvt(locinfo
, &this->cvt
);
1720 /* ??0?$ctype@_W@std@@QAE@ABV_Locinfo@1@I@Z */
1721 /* ??0?$ctype@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1722 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor_locinfo
, 12)
1723 ctype_wchar
* __thiscall
ctype_wchar_ctor_locinfo(ctype_wchar
*this,
1724 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
1726 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
1727 ctype_base_ctor_refs(&this->base
, refs
);
1728 this->base
.facet
.vtable
= &MSVCP_ctype_wchar_vtable
;
1729 ctype_wchar__Init(this, locinfo
);
1733 /* ??0?$ctype@G@std@@QAE@ABV_Locinfo@1@I@Z */
1734 /* ??0?$ctype@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1735 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_locinfo
, 12)
1736 ctype_wchar
* __thiscall
ctype_short_ctor_locinfo(ctype_wchar
*this,
1737 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
1739 ctype_wchar
*ret
= ctype_wchar_ctor_locinfo(this, locinfo
, refs
);
1740 this->base
.facet
.vtable
= &MSVCP_ctype_short_vtable
;
1744 /* ??0?$ctype@_W@std@@QAE@I@Z */
1745 /* ??0?$ctype@_W@std@@QEAA@_K@Z */
1746 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor_refs
, 8)
1747 ctype_wchar
* __thiscall
ctype_wchar_ctor_refs(ctype_wchar
*this, MSVCP_size_t refs
)
1751 TRACE("(%p %lu)\n", this, refs
);
1753 ctype_base_ctor_refs(&this->base
, refs
);
1754 this->base
.facet
.vtable
= &MSVCP_ctype_wchar_vtable
;
1756 _Locinfo_ctor(&locinfo
);
1757 ctype_wchar__Init(this, &locinfo
);
1758 _Locinfo_dtor(&locinfo
);
1762 /* ??0?$ctype@G@std@@QAE@I@Z */
1763 /* ??0?$ctype@G@std@@QEAA@_K@Z */
1764 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_refs
, 8)
1765 ctype_wchar
* __thiscall
ctype_short_ctor_refs(ctype_wchar
*this, MSVCP_size_t refs
)
1767 ctype_wchar
*ret
= ctype_wchar_ctor_refs(this, refs
);
1768 this->base
.facet
.vtable
= &MSVCP_ctype_short_vtable
;
1772 /* ??_F?$ctype@_W@std@@QAEXXZ */
1773 /* ??_F?$ctype@_W@std@@QEAAXXZ */
1774 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor
, 4)
1775 ctype_wchar
* __thiscall
ctype_wchar_ctor(ctype_wchar
*this)
1777 TRACE("(%p)\n", this);
1778 return ctype_short_ctor_refs(this, 0);
1781 /* ??_F?$ctype@G@std@@QAEXXZ */
1782 /* ??_F?$ctype@G@std@@QEAAXXZ */
1783 DEFINE_THISCALL_WRAPPER(ctype_short_ctor
, 4)
1784 ctype_wchar
* __thiscall
ctype_short_ctor(ctype_wchar
*this)
1786 ctype_wchar
*ret
= ctype_wchar_ctor(this);
1787 this->base
.facet
.vtable
= &MSVCP_ctype_short_vtable
;
1791 /* ??1?$ctype@_W@std@@MAE@XZ */
1792 /* ??1?$ctype@_W@std@@MEAA@XZ */
1793 /* ??1?$ctype@G@std@@MAE@XZ */
1794 /* ??1?$ctype@G@std@@MEAA@XZ */
1795 DEFINE_THISCALL_WRAPPER(ctype_wchar_dtor
, 4)
1796 void __thiscall
ctype_wchar_dtor(ctype_wchar
*this)
1798 TRACE("(%p)\n", this);
1799 if(this->ctype
.delfl
)
1800 free((void*)this->ctype
.table
);
1803 DEFINE_THISCALL_WRAPPER(ctype_wchar_vector_dtor
, 8)
1804 ctype_wchar
* __thiscall
ctype_wchar_vector_dtor(ctype_wchar
*this, unsigned int flags
)
1806 TRACE("(%p %x)\n", this, flags
);
1808 /* we have an array, with the number of elements stored before the first object */
1809 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1811 for(i
=*ptr
-1; i
>=0; i
--)
1812 ctype_wchar_dtor(this+i
);
1813 MSVCRT_operator_delete(ptr
);
1815 ctype_wchar_dtor(this);
1817 MSVCRT_operator_delete(this);
1824 int __cdecl
_Wcrtomb(char *s
, wchar_t wch
, int *state
, const _Cvtvec
*cvt
)
1829 TRACE("%p %d %p %p\n", s
, wch
, state
, cvt
);
1834 cp
= ___lc_codepage_func();
1846 size
= WideCharToMultiByte(cp
, 0, &wch
, 1, s
, MB_LEN_MAX
, NULL
, &def
);
1855 /* ?_Donarrow@?$ctype@_W@std@@IBED_WD@Z */
1856 /* ?_Donarrow@?$ctype@_W@std@@IEBAD_WD@Z */
1857 /* ?_Donarrow@?$ctype@G@std@@IBEDGD@Z */
1858 /* ?_Donarrow@?$ctype@G@std@@IEBADGD@Z */
1859 DEFINE_THISCALL_WRAPPER(ctype_wchar__Donarrow
, 12)
1860 char __thiscall
ctype_wchar__Donarrow(const ctype_wchar
*this, wchar_t ch
, char dflt
)
1862 char buf
[MB_LEN_MAX
];
1864 TRACE("(%p %d %d)\n", this, ch
, dflt
);
1866 return _Wcrtomb(buf
, ch
, NULL
, &this->cvt
)==1 ? buf
[0] : dflt
;
1869 /* ?do_narrow@?$ctype@_W@std@@MBED_WD@Z */
1870 /* ?do_narrow@?$ctype@_W@std@@MEBAD_WD@Z */
1871 /* ?do_narrow@?$ctype@G@std@@MBEDGD@Z */
1872 /* ?do_narrow@?$ctype@G@std@@MEBADGD@Z */
1873 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow_ch
, 12)
1874 #define call_ctype_wchar_do_narrow_ch(this, ch, dflt) CALL_VTBL_FUNC(this, 48, \
1875 char, (const ctype_wchar*, wchar_t, char), (this, ch, dflt))
1876 char __thiscall
ctype_wchar_do_narrow_ch(const ctype_wchar
*this, wchar_t ch
, char dflt
)
1878 return ctype_wchar__Donarrow(this, ch
, dflt
);
1881 /* ?do_narrow@?$ctype@_W@std@@MBEPB_WPB_W0DPAD@Z */
1882 /* ?do_narrow@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD@Z */
1883 /* ?do_narrow@?$ctype@G@std@@MBEPBGPBG0DPAD@Z */
1884 /* ?do_narrow@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD@Z */
1885 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow
, 20)
1886 #define call_ctype_wchar_do_narrow(this, first, last, dflt, dest) CALL_VTBL_FUNC(this, 44, \
1887 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*), \
1888 (this, first, last, dflt, dest))
1889 const wchar_t* __thiscall
ctype_wchar_do_narrow(const ctype_wchar
*this,
1890 const wchar_t *first
, const wchar_t *last
, char dflt
, char *dest
)
1892 TRACE("(%p %p %p %d %p)\n", this, first
, last
, dflt
, dest
);
1893 for(; first
<last
; first
++)
1894 *dest
++ = ctype_wchar__Donarrow(this, *first
, dflt
);
1898 /* ?narrow@?$ctype@_W@std@@QBED_WD@Z */
1899 /* ?narrow@?$ctype@_W@std@@QEBAD_WD@Z */
1900 /* ?narrow@?$ctype@G@std@@QBEDGD@Z */
1901 /* ?narrow@?$ctype@G@std@@QEBADGD@Z */
1902 DEFINE_THISCALL_WRAPPER(ctype_wchar_narrow_ch
, 12)
1903 char __thiscall
ctype_wchar_narrow_ch(const ctype_wchar
*this, wchar_t ch
, char dflt
)
1905 TRACE("(%p %d %d)\n", this, ch
, dflt
);
1906 return call_ctype_wchar_do_narrow_ch(this, ch
, dflt
);
1909 /* ?narrow@?$ctype@_W@std@@QBEPB_WPB_W0DPAD@Z */
1910 /* ?narrow@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD@Z */
1911 /* ?narrow@?$ctype@G@std@@QBEPBGPBG0DPAD@Z */
1912 /* ?narrow@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD@Z */
1913 DEFINE_THISCALL_WRAPPER(ctype_wchar_narrow
, 20)
1914 const wchar_t* __thiscall
ctype_wchar_narrow(const ctype_wchar
*this,
1915 const wchar_t *first
, const wchar_t *last
, char dflt
, char *dest
)
1917 TRACE("(%p %p %p %d %p)\n", this, first
, last
, dflt
, dest
);
1918 return call_ctype_wchar_do_narrow(this, first
, last
, dflt
, dest
);
1922 int __cdecl
_Mbrtowc(wchar_t *out
, const char *in
, MSVCP_size_t len
, int *state
, const _Cvtvec
*cvt
)
1928 TRACE("(%p %p %lu %p %p)\n", out
, in
, len
, state
, cvt
);
1936 cp
= ___lc_codepage_func();
1940 *out
= (unsigned char)*in
;
1947 ((char*)state
)[1] = *in
;
1949 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, (char*)state
, 2, out
, out
? 1 : 0)) {
1959 GetCPInfo(cp
, &cp_info
);
1961 for(i
=0; i
<MAX_LEADBYTES
; i
+=2) {
1962 if(!cp_info
.LeadByte
[i
+1])
1964 if((unsigned char)*in
>=cp_info
.LeadByte
[i
] && (unsigned char)*in
<=cp_info
.LeadByte
[i
+1]) {
1972 *state
= (unsigned char)*in
;
1976 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, in
, 2, out
, out
? 1 : 0)) {
1983 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, in
, 1, out
, out
? 1 : 0)) {
1990 /* ?_Dowiden@?$ctype@_W@std@@IBE_WD@Z */
1991 /* ?_Dowiden@?$ctype@_W@std@@IEBA_WD@Z */
1992 /* ?_Dowiden@?$ctype@G@std@@IBEGD@Z */
1993 /* ?_Dowiden@?$ctype@G@std@@IEBAGD@Z */
1994 DEFINE_THISCALL_WRAPPER(ctype_wchar__Dowiden
, 8)
1995 wchar_t __thiscall
ctype_wchar__Dowiden(const ctype_wchar
*this, char ch
)
1999 TRACE("(%p %d)\n", this, ch
);
2000 return _Mbrtowc(&ret
, &ch
, 1, &state
, &this->cvt
)<0 ? WEOF
: ret
;
2003 /* ?do_widen@?$ctype@_W@std@@MBE_WD@Z */
2004 /* ?do_widen@?$ctype@_W@std@@MEBA_WD@Z */
2005 /* ?do_widen@?$ctype@G@std@@MBEGD@Z */
2006 /* ?do_widen@?$ctype@G@std@@MEBAGD@Z */
2007 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_widen_ch
, 8)
2008 #define call_ctype_wchar_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 40, \
2009 wchar_t, (const ctype_wchar*, char), (this, ch))
2010 wchar_t __thiscall
ctype_wchar_do_widen_ch(const ctype_wchar
*this, char ch
)
2012 return ctype_wchar__Dowiden(this, ch
);
2015 /* ?do_widen@?$ctype@_W@std@@MBEPBDPBD0PA_W@Z */
2016 /* ?do_widen@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W@Z */
2017 /* ?do_widen@?$ctype@G@std@@MBEPBDPBD0PAG@Z */
2018 /* ?do_widen@?$ctype@G@std@@MEBAPEBDPEBD0PEAG@Z */
2019 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_widen
, 16)
2020 #define call_ctype_wchar_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 36, \
2021 const char*, (const ctype_wchar*, const char*, const char*, wchar_t*), \
2022 (this, first, last, dest))
2023 const char* __thiscall
ctype_wchar_do_widen(const ctype_wchar
*this,
2024 const char *first
, const char *last
, wchar_t *dest
)
2026 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2027 for(; first
<last
; first
++)
2028 *dest
++ = ctype_wchar__Dowiden(this, *first
);
2032 /* ?widen@?$ctype@_W@std@@QBE_WD@Z */
2033 /* ?widen@?$ctype@_W@std@@QEBA_WD@Z */
2034 /* ?widen@?$ctype@G@std@@QBEGD@Z */
2035 /* ?widen@?$ctype@G@std@@QEBAGD@Z */
2036 DEFINE_THISCALL_WRAPPER(ctype_wchar_widen_ch
, 8)
2037 wchar_t __thiscall
ctype_wchar_widen_ch(const ctype_wchar
*this, char ch
)
2039 TRACE("(%p %d)\n", this, ch
);
2040 return call_ctype_wchar_do_widen_ch(this, ch
);
2043 /* ?widen@?$ctype@_W@std@@QBEPBDPBD0PA_W@Z */
2044 /* ?widen@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W@Z */
2045 /* ?widen@?$ctype@G@std@@QBEPBDPBD0PAG@Z */
2046 /* ?widen@?$ctype@G@std@@QEBAPEBDPEBD0PEAG@Z */
2047 DEFINE_THISCALL_WRAPPER(ctype_wchar_widen
, 16)
2048 const char* __thiscall
ctype_wchar_widen(const ctype_wchar
*this,
2049 const char *first
, const char *last
, wchar_t *dest
)
2051 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2052 return call_ctype_wchar_do_widen(this, first
, last
, dest
);
2055 /* ?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2056 /* ?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2057 static MSVCP_size_t
ctype_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
2059 TRACE("(%p %p)\n", facet
, loc
);
2061 if(facet
&& !*facet
) {
2064 *facet
= MSVCRT_operator_new(sizeof(ctype_wchar
));
2066 ERR("Out of memory\n");
2067 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
2071 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
2072 ctype_wchar_ctor_locinfo((ctype_wchar
*)*facet
, &locinfo
, 0);
2073 _Locinfo_dtor(&locinfo
);
2079 /* ?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@@Z */
2080 /* ?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
2081 MSVCP_size_t __cdecl
ctype_wchar__Getcat_old(const locale_facet
**facet
)
2083 return ctype_wchar__Getcat(facet
, locale_classic());
2086 /* ?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2087 /* ?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2088 static MSVCP_size_t
ctype_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
2090 if(facet
&& !*facet
) {
2091 ctype_wchar__Getcat(facet
, loc
);
2092 (*(locale_facet
**)facet
)->vtable
= &MSVCP_ctype_short_vtable
;
2098 /* ?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@@Z */
2099 /* ?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
2100 MSVCP_size_t __cdecl
ctype_short__Getcat_old(const locale_facet
**facet
)
2102 return ctype_short__Getcat(facet
, locale_classic());
2106 wchar_t __cdecl
_Towlower(wchar_t ch
, const _Ctypevec
*ctype
)
2108 TRACE("(%d %p)\n", ch
, ctype
);
2109 return tolowerW(ch
);
2112 ctype_wchar
* ctype_wchar_use_facet(const locale
*loc
)
2114 static ctype_wchar
*obj
= NULL
;
2117 const locale_facet
*fac
;
2119 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
2120 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_wchar_id
));
2122 _Lockit_dtor(&lock
);
2123 return (ctype_wchar
*)fac
;
2127 _Lockit_dtor(&lock
);
2131 ctype_wchar__Getcat(&fac
, loc
);
2132 obj
= (ctype_wchar
*)fac
;
2133 locale_facet__Incref(&obj
->base
.facet
);
2134 locale_facet_register(&obj
->base
.facet
);
2135 _Lockit_dtor(&lock
);
2140 ctype_wchar
* ctype_short_use_facet(const locale
*loc
)
2142 static ctype_wchar
*obj
= NULL
;
2145 const locale_facet
*fac
;
2147 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
2148 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_short_id
));
2150 _Lockit_dtor(&lock
);
2151 return (ctype_wchar
*)fac
;
2155 _Lockit_dtor(&lock
);
2159 ctype_short__Getcat(&fac
, loc
);
2160 obj
= (ctype_wchar
*)fac
;
2161 locale_facet__Incref(&obj
->base
.facet
);
2162 locale_facet_register(&obj
->base
.facet
);
2163 _Lockit_dtor(&lock
);
2168 /* ?do_tolower@?$ctype@_W@std@@MBE_W_W@Z */
2169 /* ?do_tolower@?$ctype@_W@std@@MEBA_W_W@Z */
2170 /* ?do_tolower@?$ctype@G@std@@MBEGG@Z */
2171 /* ?do_tolower@?$ctype@G@std@@MEBAGG@Z */
2172 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_tolower_ch
, 8)
2173 #define call_ctype_wchar_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
2174 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2175 wchar_t __thiscall
ctype_wchar_do_tolower_ch(const ctype_wchar
*this, wchar_t ch
)
2177 return _Towlower(ch
, &this->ctype
);
2180 /* ?do_tolower@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */
2181 /* ?do_tolower@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z */
2182 /* ?do_tolower@?$ctype@G@std@@MBEPBGPAGPBG@Z */
2183 /* ?do_tolower@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */
2184 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_tolower
, 12)
2185 #define call_ctype_wchar_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 20, \
2186 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2187 (this, first, last))
2188 const wchar_t* __thiscall
ctype_wchar_do_tolower(const ctype_wchar
*this,
2189 wchar_t *first
, const wchar_t *last
)
2191 TRACE("(%p %p %p)\n", this, first
, last
);
2192 for(; first
<last
; first
++)
2193 *first
= _Towlower(*first
, &this->ctype
);
2197 /* ?tolower@?$ctype@_W@std@@QBE_W_W@Z */
2198 /* ?tolower@?$ctype@_W@std@@QEBA_W_W@Z */
2199 /* ?tolower@?$ctype@G@std@@QBEGG@Z */
2200 /* ?tolower@?$ctype@G@std@@QEBAGG@Z */
2201 DEFINE_THISCALL_WRAPPER(ctype_wchar_tolower_ch
, 8)
2202 wchar_t __thiscall
ctype_wchar_tolower_ch(const ctype_wchar
*this, wchar_t ch
)
2204 TRACE("(%p %d)\n", this, ch
);
2205 return call_ctype_wchar_do_tolower_ch(this, ch
);
2208 /* ?tolower@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */
2209 /* ?tolower@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z */
2210 /* ?tolower@?$ctype@G@std@@QBEPBGPAGPBG@Z */
2211 /* ?tolower@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z */
2212 DEFINE_THISCALL_WRAPPER(ctype_wchar_tolower
, 12)
2213 const wchar_t* __thiscall
ctype_wchar_tolower(const ctype_wchar
*this,
2214 wchar_t *first
, const wchar_t *last
)
2216 TRACE("(%p %p %p)\n", this, first
, last
);
2217 return call_ctype_wchar_do_tolower(this, first
, last
);
2221 wchar_t __cdecl
_Towupper(wchar_t ch
, const _Ctypevec
*ctype
)
2223 TRACE("(%d %p)\n", ch
, ctype
);
2224 return toupperW(ch
);
2227 /* ?do_toupper@?$ctype@_W@std@@MBE_W_W@Z */
2228 /* ?do_toupper@?$ctype@_W@std@@MEBA_W_W@Z */
2229 /* ?do_toupper@?$ctype@G@std@@MBEGG@Z */
2230 /* ?do_toupper@?$ctype@G@std@@MEBAGG@Z */
2231 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper_ch
, 8)
2232 #define call_ctype_wchar_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 32, \
2233 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2234 wchar_t __thiscall
ctype_wchar_do_toupper_ch(const ctype_wchar
*this, wchar_t ch
)
2236 return _Towupper(ch
, &this->ctype
);
2239 /* ?do_toupper@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */
2240 /* ?do_toupper@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z */
2241 /* ?do_toupper@?$ctype@G@std@@MBEPBGPAGPBG@Z */
2242 /* ?do_toupper@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */
2243 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper
, 12)
2244 #define call_ctype_wchar_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 28, \
2245 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2246 (this, first, last))
2247 const wchar_t* __thiscall
ctype_wchar_do_toupper(const ctype_wchar
*this,
2248 wchar_t *first
, const wchar_t *last
)
2250 TRACE("(%p %p %p)\n", this, first
, last
);
2251 for(; first
<last
; first
++)
2252 *first
= _Towupper(*first
, &this->ctype
);
2256 /* ?toupper@?$ctype@_W@std@@QBE_W_W@Z */
2257 /* ?toupper@?$ctype@_W@std@@QEBA_W_W@Z */
2258 /* ?toupper@?$ctype@G@std@@QBEGG@Z */
2259 /* ?toupper@?$ctype@G@std@@QEBAGG@Z */
2260 DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper_ch
, 8)
2261 wchar_t __thiscall
ctype_wchar_toupper_ch(const ctype_wchar
*this, wchar_t ch
)
2263 TRACE("(%p %d)\n", this, ch
);
2264 return call_ctype_wchar_do_toupper_ch(this, ch
);
2267 /* ?toupper@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */
2268 /* ?toupper@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z */
2269 /* ?toupper@?$ctype@G@std@@QBEPBGPAGPBG@Z */
2270 /* ?toupper@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z */
2271 DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper
, 12)
2272 const wchar_t* __thiscall
ctype_wchar_toupper(const ctype_wchar
*this,
2273 wchar_t *first
, const wchar_t *last
)
2275 TRACE("(%p %p %p)\n", this, first
, last
);
2276 return call_ctype_wchar_do_toupper(this, first
, last
);
2280 const wchar_t* __cdecl
_Getwctypes(const wchar_t *first
, const wchar_t *last
,
2281 short *mask
, const _Ctypevec
*ctype
)
2283 TRACE("(%p %p %p %p)\n", first
, last
, mask
, ctype
);
2284 GetStringTypeW(CT_CTYPE1
, first
, last
-first
, (WORD
*)mask
);
2289 short __cdecl
_Getwctype(wchar_t ch
, const _Ctypevec
*ctype
)
2292 _Getwctypes(&ch
, &ch
+1, &mask
, ctype
);
2296 /* ?do_is@?$ctype@_W@std@@MBE_NF_W@Z */
2297 /* ?do_is@?$ctype@_W@std@@MEBA_NF_W@Z */
2298 /* ?do_is@?$ctype@G@std@@MBE_NFG@Z */
2299 /* ?do_is@?$ctype@G@std@@MEBA_NFG@Z */
2300 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is_ch
, 12)
2301 #define call_ctype_wchar_do_is_ch(this, mask, ch) CALL_VTBL_FUNC(this, 8, \
2302 MSVCP_bool, (const ctype_wchar*, short, wchar_t), (this, mask, ch))
2303 MSVCP_bool __thiscall
ctype_wchar_do_is_ch(const ctype_wchar
*this, short mask
, wchar_t ch
)
2305 TRACE("(%p %x %d)\n", this, mask
, ch
);
2306 return (_Getwctype(ch
, &this->ctype
) & mask
) != 0;
2309 /* ?do_is@?$ctype@_W@std@@MBEPB_WPB_W0PAF@Z */
2310 /* ?do_is@?$ctype@_W@std@@MEBAPEB_WPEB_W0PEAF@Z */
2311 /* ?do_is@?$ctype@G@std@@MBEPBGPBG0PAF@Z */
2312 /* ?do_is@?$ctype@G@std@@MEBAPEBGPEBG0PEAF@Z */
2313 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is
, 16)
2314 #define call_ctype_wchar_do_is(this, first, last, dest) CALL_VTBL_FUNC(this, 4, \
2315 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, short*), \
2316 (this, first, last, dest))
2317 const wchar_t* __thiscall
ctype_wchar_do_is(const ctype_wchar
*this,
2318 const wchar_t *first
, const wchar_t *last
, short *dest
)
2320 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2321 return _Getwctypes(first
, last
, dest
, &this->ctype
);
2324 /* ?is@?$ctype@_W@std@@QBE_NF_W@Z */
2325 /* ?is@?$ctype@_W@std@@QEBA_NF_W@Z */
2326 /* ?is@?$ctype@G@std@@QBE_NFG@Z */
2327 /* ?is@?$ctype@G@std@@QEBA_NFG@Z */
2328 DEFINE_THISCALL_WRAPPER(ctype_wchar_is_ch
, 12)
2329 MSVCP_bool __thiscall
ctype_wchar_is_ch(const ctype_wchar
*this, short mask
, wchar_t ch
)
2331 TRACE("(%p %x %d)\n", this, mask
, ch
);
2332 return call_ctype_wchar_do_is_ch(this, mask
, ch
);
2335 /* ?is@?$ctype@_W@std@@QBEPB_WPB_W0PAF@Z */
2336 /* ?is@?$ctype@_W@std@@QEBAPEB_WPEB_W0PEAF@Z */
2337 /* ?is@?$ctype@G@std@@QBEPBGPBG0PAF@Z */
2338 /* ?is@?$ctype@G@std@@QEBAPEBGPEBG0PEAF@Z */
2339 DEFINE_THISCALL_WRAPPER(ctype_wchar_is
, 16)
2340 const wchar_t* __thiscall
ctype_wchar_is(const ctype_wchar
*this,
2341 const wchar_t *first
, const wchar_t *last
, short *dest
)
2343 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2344 return call_ctype_wchar_do_is(this, first
, last
, dest
);
2347 /* ?do_scan_is@?$ctype@_W@std@@MBEPB_WFPB_W0@Z */
2348 /* ?do_scan_is@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z */
2349 /* ?do_scan_is@?$ctype@G@std@@MBEPBGFPBG0@Z */
2350 /* ?do_scan_is@?$ctype@G@std@@MEBAPEBGFPEBG0@Z */
2351 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_scan_is
, 16)
2352 #define call_ctype_wchar_do_scan_is(this, mask, first, last) CALL_VTBL_FUNC(this, 12, \
2353 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
2354 (this, mask, first, last))
2355 const wchar_t* __thiscall
ctype_wchar_do_scan_is(const ctype_wchar
*this,
2356 short mask
, const wchar_t *first
, const wchar_t *last
)
2358 TRACE("(%p %d %p %p)\n", this, mask
, first
, last
);
2359 for(; first
<last
; first
++)
2360 if(!ctype_wchar_is_ch(this, mask
, *first
))
2365 /* ?scan_is@?$ctype@_W@std@@QBEPB_WFPB_W0@Z */
2366 /* ?scan_is@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z */
2367 /* ?scan_is@?$ctype@G@std@@QBEPBGFPBG0@Z */
2368 /* ?scan_is@?$ctype@G@std@@QEBAPEBGFPEBG0@Z */
2369 DEFINE_THISCALL_WRAPPER(ctype_wchar_scan_is
, 16)
2370 const wchar_t* __thiscall
ctype_wchar_scan_is(const ctype_wchar
*this,
2371 short mask
, const wchar_t *first
, const wchar_t *last
)
2373 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
2374 return call_ctype_wchar_do_scan_is(this, mask
, first
, last
);
2377 /* ?do_scan_not@?$ctype@_W@std@@MBEPB_WFPB_W0@Z */
2378 /* ?do_scan_not@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z */
2379 /* ?do_scan_not@?$ctype@G@std@@MBEPBGFPBG0@Z */
2380 /* ?do_scan_not@?$ctype@G@std@@MEBAPEBGFPEBG0@Z */
2381 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_scan_not
, 16)
2382 #define call_ctype_wchar_do_scan_not(this, mask, first, last) CALL_VTBL_FUNC(this, 16, \
2383 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
2384 (this, mask, first, last))
2385 const wchar_t* __thiscall
ctype_wchar_do_scan_not(const ctype_wchar
*this,
2386 short mask
, const wchar_t *first
, const wchar_t *last
)
2388 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
2389 for(; first
<last
; first
++)
2390 if(ctype_wchar_is_ch(this, mask
, *first
))
2395 /* ?scan_not@?$ctype@_W@std@@QBEPB_WFPB_W0@Z */
2396 /* ?scan_not@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z */
2397 /* ?scan_not@?$ctype@G@std@@QBEPBGFPBG0@Z */
2398 /* ?scan_not@?$ctype@G@std@@QEBAPEBGFPEBG0@Z */
2399 DEFINE_THISCALL_WRAPPER(ctype_wchar_scan_not
, 16)
2400 const wchar_t* __thiscall
ctype_wchar_scan_not(const ctype_wchar
*this,
2401 short mask
, const wchar_t *first
, const wchar_t *last
)
2403 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
2404 return call_ctype_wchar_do_scan_not(this, mask
, first
, last
);
2407 /* ??_7codecvt_base@std@@6B@ */
2408 extern const vtable_ptr MSVCP_codecvt_base_vtable
;
2410 /* ??0codecvt_base@std@@QAE@I@Z */
2411 /* ??0codecvt_base@std@@QEAA@_K@Z */
2412 DEFINE_THISCALL_WRAPPER(codecvt_base_ctor_refs
, 8)
2413 codecvt_base
* __thiscall
codecvt_base_ctor_refs(codecvt_base
*this, MSVCP_size_t refs
)
2415 TRACE("(%p %lu)\n", this, refs
);
2416 locale_facet_ctor_refs(&this->facet
, refs
);
2417 this->facet
.vtable
= &MSVCP_codecvt_base_vtable
;
2421 /* ??_Fcodecvt_base@std@@QAEXXZ */
2422 /* ??_Fcodecvt_base@std@@QEAAXXZ */
2423 DEFINE_THISCALL_WRAPPER(codecvt_base_ctor
, 4)
2424 codecvt_base
* __thiscall
codecvt_base_ctor(codecvt_base
*this)
2426 return codecvt_base_ctor_refs(this, 0);
2429 /* ??1codecvt_base@std@@UAE@XZ */
2430 /* ??1codecvt_base@std@@UEAA@XZ */
2431 DEFINE_THISCALL_WRAPPER(codecvt_base_dtor
, 4)
2432 void __thiscall
codecvt_base_dtor(codecvt_base
*this)
2434 TRACE("(%p)\n", this);
2435 locale_facet_dtor(&this->facet
);
2438 DEFINE_THISCALL_WRAPPER(codecvt_base_vector_dtor
, 8)
2439 codecvt_base
* __thiscall
codecvt_base_vector_dtor(codecvt_base
*this, unsigned int flags
)
2441 TRACE("(%p %x)\n", this, flags
);
2443 /* we have an array, with the number of elements stored before the first object */
2444 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
2446 for(i
=*ptr
-1; i
>=0; i
--)
2447 codecvt_base_dtor(this+i
);
2448 MSVCRT_operator_delete(ptr
);
2450 codecvt_base_dtor(this);
2452 MSVCRT_operator_delete(this);
2458 /* ?do_always_noconv@codecvt_base@std@@MBE_NXZ */
2459 /* ?do_always_noconv@codecvt_base@std@@MEBA_NXZ */
2460 #define call_codecvt_base_do_always_noconv(this) CALL_VTBL_FUNC(this, 4, \
2461 MSVCP_bool, (const codecvt_base*), (this))
2462 DEFINE_THISCALL_WRAPPER(codecvt_base_do_always_noconv
, 4)
2463 MSVCP_bool __thiscall
codecvt_base_do_always_noconv(const codecvt_base
*this)
2465 TRACE("(%p)\n", this);
2469 /* ?always_noconv@codecvt_base@std@@QBE_NXZ */
2470 /* ?always_noconv@codecvt_base@std@@QEBA_NXZ */
2471 DEFINE_THISCALL_WRAPPER(codecvt_base_always_noconv
, 4)
2472 MSVCP_bool __thiscall
codecvt_base_always_noconv(const codecvt_base
*this)
2474 TRACE("(%p)\n", this);
2475 return call_codecvt_base_do_always_noconv(this);
2478 /* ?do_max_length@codecvt_base@std@@MBEHXZ */
2479 /* ?do_max_length@codecvt_base@std@@MEBAHXZ */
2480 #define call_codecvt_base_do_max_length(this) CALL_VTBL_FUNC(this, 8, \
2481 int, (const codecvt_base*), (this))
2482 DEFINE_THISCALL_WRAPPER(codecvt_base_do_max_length
, 4)
2483 int __thiscall
codecvt_base_do_max_length(const codecvt_base
*this)
2485 TRACE("(%p)\n", this);
2489 /* ?max_length@codecvt_base@std@@QBEHXZ */
2490 /* ?max_length@codecvt_base@std@@QEBAHXZ */
2491 DEFINE_THISCALL_WRAPPER(codecvt_base_max_length
, 4)
2492 int __thiscall
codecvt_base_max_length(const codecvt_base
*this)
2494 TRACE("(%p)\n", this);
2495 return call_codecvt_base_do_max_length(this);
2498 /* ?do_encoding@codecvt_base@std@@MBEHXZ */
2499 /* ?do_encoding@codecvt_base@std@@MEBAHXZ */
2500 #define call_codecvt_base_do_encoding(this) CALL_VTBL_FUNC(this, 12, \
2501 int, (const codecvt_base*), (this))
2502 DEFINE_THISCALL_WRAPPER(codecvt_base_do_encoding
, 4)
2503 int __thiscall
codecvt_base_do_encoding(const codecvt_base
*this)
2505 TRACE("(%p)\n", this);
2509 /* ?encoding@codecvt_base@std@@QBEHXZ */
2510 /* ?encoding@codecvt_base@std@@QEBAHXZ */
2511 DEFINE_THISCALL_WRAPPER(codecvt_base_encoding
, 4)
2512 int __thiscall
codecvt_base_encoding(const codecvt_base
*this)
2514 TRACE("(%p)\n", this);
2515 return call_codecvt_base_do_encoding(this);
2518 /* ?id@?$codecvt@DDH@std@@2V0locale@2@A */
2519 locale_id codecvt_char_id
= {0};
2521 /* ??_7?$codecvt@DDH@std@@6B@ */
2522 extern const vtable_ptr MSVCP_codecvt_char_vtable
;
2524 /* ?_Init@?$codecvt@DDH@std@@IAEXABV_Locinfo@2@@Z */
2525 /* ?_Init@?$codecvt@DDH@std@@IEAAXAEBV_Locinfo@2@@Z */
2526 DEFINE_THISCALL_WRAPPER(codecvt_char__Init
, 8)
2527 void __thiscall
codecvt_char__Init(codecvt_char
*this, const _Locinfo
*locinfo
)
2529 TRACE("(%p %p)\n", this, locinfo
);
2532 /* ??0?$codecvt@DDH@std@@QAE@ABV_Locinfo@1@I@Z */
2533 /* ??0?$codecvt@DDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
2534 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor_locinfo
, 12)
2535 codecvt_char
* __thiscall
codecvt_char_ctor_locinfo(codecvt_char
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
2537 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
2538 codecvt_base_ctor_refs(&this->base
, refs
);
2539 this->base
.facet
.vtable
= &MSVCP_codecvt_char_vtable
;
2543 /* ??0?$codecvt@DDH@std@@QAE@I@Z */
2544 /* ??0?$codecvt@DDH@std@@QEAA@_K@Z */
2545 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor_refs
, 8)
2546 codecvt_char
* __thiscall
codecvt_char_ctor_refs(codecvt_char
*this, MSVCP_size_t refs
)
2548 return codecvt_char_ctor_locinfo(this, NULL
, refs
);
2551 /* ??_F?$codecvt@DDH@std@@QAEXXZ */
2552 /* ??_F?$codecvt@DDH@std@@QEAAXXZ */
2553 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor
, 4)
2554 codecvt_char
* __thiscall
codecvt_char_ctor(codecvt_char
*this)
2556 return codecvt_char_ctor_locinfo(this, NULL
, 0);
2559 /* ??1?$codecvt@DDH@std@@MAE@XZ */
2560 /* ??1?$codecvt@DDH@std@@MEAA@XZ */
2561 DEFINE_THISCALL_WRAPPER(codecvt_char_dtor
, 4)
2562 void __thiscall
codecvt_char_dtor(codecvt_char
*this)
2564 TRACE("(%p)\n", this);
2565 codecvt_base_dtor(&this->base
);
2568 DEFINE_THISCALL_WRAPPER(codecvt_char_vector_dtor
, 8)
2569 codecvt_char
* __thiscall
codecvt_char_vector_dtor(codecvt_char
*this, unsigned int flags
)
2571 TRACE("(%p %x)\n", this, flags
);
2573 /* we have an array, with the number of elements stored before the first object */
2574 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
2576 for(i
=*ptr
-1; i
>=0; i
--)
2577 codecvt_char_dtor(this+i
);
2578 MSVCRT_operator_delete(ptr
);
2580 codecvt_char_dtor(this);
2582 MSVCRT_operator_delete(this);
2588 /* ?_Getcat@?$codecvt@DDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2589 /* ?_Getcat@?$codecvt@DDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2590 static MSVCP_size_t
codecvt_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
2592 TRACE("(%p %p)\n", facet
, loc
);
2594 if(facet
&& !*facet
) {
2595 *facet
= MSVCRT_operator_new(sizeof(codecvt_char
));
2597 ERR("Out of memory\n");
2598 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
2601 codecvt_char_ctor((codecvt_char
*)*facet
);
2607 /* ?_Getcat@?$codecvt@DDH@std@@SAIPAPBVfacet@locale@2@@Z */
2608 /* ?_Getcat@?$codecvt@DDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
2609 MSVCP_size_t __cdecl
codecvt_char__Getcat_old(const locale_facet
**facet
)
2611 return codecvt_char__Getcat(facet
, locale_classic());
2614 codecvt_char
* codecvt_char_use_facet(const locale
*loc
)
2616 static codecvt_char
*obj
= NULL
;
2619 const locale_facet
*fac
;
2621 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
2622 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_char_id
));
2624 _Lockit_dtor(&lock
);
2625 return (codecvt_char
*)fac
;
2629 _Lockit_dtor(&lock
);
2633 codecvt_char__Getcat(&fac
, loc
);
2634 obj
= (codecvt_char
*)fac
;
2635 locale_facet__Incref(&obj
->base
.facet
);
2636 locale_facet_register(&obj
->base
.facet
);
2637 _Lockit_dtor(&lock
);
2642 /* ?do_in@?$codecvt@DDH@std@@MBEHAAHPBD1AAPBDPAD3AAPAD@Z */
2643 /* ?do_in@?$codecvt@DDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
2644 #define call_codecvt_char_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
2645 CALL_VTBL_FUNC(this, 16, int, \
2646 (const codecvt_char*, int*, const char*, const char*, const char**, char*, char*, char**), \
2647 (this, state, from, from_end, from_next, to, to_end, to_next))
2648 DEFINE_THISCALL_WRAPPER(codecvt_char_do_in
, 32)
2649 int __thiscall
codecvt_char_do_in(const codecvt_char
*this, int *state
,
2650 const char *from
, const char *from_end
, const char **from_next
,
2651 char *to
, char *to_end
, char **to_next
)
2653 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
2654 from_next
, to
, to_end
, to_next
);
2657 return CODECVT_noconv
;
2660 /* ?in@?$codecvt@DDH@std@@QBEHAAHPBD1AAPBDPAD3AAPAD@Z */
2661 /* ?in@?$codecvt@DDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
2662 DEFINE_THISCALL_WRAPPER(codecvt_char_in
, 32)
2663 int __thiscall
codecvt_char_in(const codecvt_char
*this, int *state
,
2664 const char *from
, const char *from_end
, const char **from_next
,
2665 char *to
, char *to_end
, char **to_next
)
2667 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
2668 from_next
, to
, to_end
, to_next
);
2669 return call_codecvt_char_do_in(this, state
, from
, from_end
, from_next
,
2670 to
, to_end
, to_next
);
2673 /* ?do_out@?$codecvt@DDH@std@@MBEHAAHPBD1AAPBDPAD3AAPAD@Z */
2674 /* ?do_out@?$codecvt@DDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
2675 #define call_codecvt_char_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
2676 CALL_VTBL_FUNC(this, 20, int, \
2677 (const codecvt_char*, int*, const char*, const char*, const char**, char*, char*, char**), \
2678 (this, state, from, from_end, from_next, to, to_end, to_next))
2679 DEFINE_THISCALL_WRAPPER(codecvt_char_do_out
, 32)
2680 int __thiscall
codecvt_char_do_out(const codecvt_char
*this, int *state
,
2681 const char *from
, const char *from_end
, const char **from_next
,
2682 char *to
, char *to_end
, char **to_next
)
2684 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
2685 from_end
, from_next
, to
, to_end
, to_next
);
2688 return CODECVT_noconv
;
2691 /* ?out@?$codecvt@DDH@std@@QBEHAAHPBD1AAPBDPAD3AAPAD@Z */
2692 /* ?out@?$codecvt@DDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
2693 DEFINE_THISCALL_WRAPPER(codecvt_char_out
, 32)
2694 int __thiscall
codecvt_char_out(const codecvt_char
*this, int *state
,
2695 const char *from
, const char *from_end
, const char **from_next
,
2696 char *to
, char *to_end
, char **to_next
)
2698 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
2699 from_next
, to
, to_end
, to_next
);
2700 return call_codecvt_char_do_out(this, state
, from
, from_end
, from_next
,
2701 to
, to_end
, to_next
);
2704 /* ?do_unshift@?$codecvt@DDH@std@@MBEHAAHPAD1AAPAD@Z */
2705 /* ?do_unshift@?$codecvt@DDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
2706 #define call_codecvt_char_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 24, \
2707 int, (const codecvt_char*, int*, char*, char*, char**), (this, state, to, to_end, to_next))
2708 DEFINE_THISCALL_WRAPPER(codecvt_char_do_unshift
, 20)
2709 int __thiscall
codecvt_char_do_unshift(const codecvt_char
*this,
2710 int *state
, char *to
, char *to_end
, char **to_next
)
2712 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
2714 return CODECVT_noconv
;
2717 /* ?unshift@?$codecvt@DDH@std@@QBEHAAHPAD1AAPAD@Z */
2718 /* ?unshift@?$codecvt@DDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
2719 DEFINE_THISCALL_WRAPPER(codecvt_char_unshift
, 20)
2720 int __thiscall
codecvt_char_unshift(const codecvt_char
*this,
2721 int *state
, char *to
, char *to_end
, char **to_next
)
2723 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
2724 return call_codecvt_char_do_unshift(this, state
, to
, to_end
, to_next
);
2727 /* ?do_length@?$codecvt@DDH@std@@MBEHABHPBD1I@Z */
2728 /* ?do_length@?$codecvt@DDH@std@@MEBAHAEBHPEBD1_K@Z */
2729 #define call_codecvt_char_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 28, \
2730 int, (const codecvt_char*, const int*, const char*, const char*, MSVCP_size_t), \
2731 (this, state, from, from_end, max))
2732 DEFINE_THISCALL_WRAPPER(codecvt_char_do_length
, 20)
2733 int __thiscall
codecvt_char_do_length(const codecvt_char
*this, const int *state
,
2734 const char *from
, const char *from_end
, MSVCP_size_t max
)
2736 TRACE("(%p %p %p %p %lu)\n", this, state
, from
, from_end
, max
);
2737 return (from_end
-from
> max
? max
: from_end
-from
);
2740 /* ?length@?$codecvt@DDH@std@@QBEHABHPBD1I@Z */
2741 /* ?length@?$codecvt@DDH@std@@QEBAHAEBHPEBD1_K@Z */
2742 DEFINE_THISCALL_WRAPPER(codecvt_char_length
, 20)
2743 int __thiscall
codecvt_char_length(const codecvt_char
*this, const int *state
,
2744 const char *from
, const char *from_end
, MSVCP_size_t max
)
2746 TRACE("(%p %p %p %p %lu)\n", this, state
, from
, from_end
, max
);
2747 return call_codecvt_char_do_length(this, state
, from
, from_end
, max
);
2750 /* ?id@?$codecvt@_WDH@std@@2V0locale@2@A */
2751 locale_id codecvt_wchar_id
= {0};
2752 /* ?id@?$codecvt@GDH@std@@2V0locale@2@A */
2753 locale_id codecvt_short_id
= {0};
2755 /* ??_7?$codecvt@_WDH@std@@6B@ */
2756 extern const vtable_ptr MSVCP_codecvt_wchar_vtable
;
2757 /* ??_7?$codecvt@GDH@std@@6B@ */
2758 extern const vtable_ptr MSVCP_codecvt_short_vtable
;
2760 /* ?_Init@?$codecvt@GDH@std@@IAEXABV_Locinfo@2@@Z */
2761 /* ?_Init@?$codecvt@GDH@std@@IEAAXAEBV_Locinfo@2@@Z */
2762 /* ?_Init@?$codecvt@_WDH@std@@IAEXABV_Locinfo@2@@Z */
2763 /* ?_Init@?$codecvt@_WDH@std@@IEAAXAEBV_Locinfo@2@@Z */
2764 DEFINE_THISCALL_WRAPPER(codecvt_wchar__Init
, 8)
2765 void __thiscall
codecvt_wchar__Init(codecvt_wchar
*this, const _Locinfo
*locinfo
)
2767 TRACE("(%p %p)\n", this, locinfo
);
2768 _Locinfo__Getcvt(locinfo
, &this->cvt
);
2771 /* ??0?$codecvt@_WDH@std@@QAE@ABV_Locinfo@1@I@Z */
2772 /* ??0?$codecvt@_WDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
2773 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor_locinfo
, 12)
2774 codecvt_wchar
* __thiscall
codecvt_wchar_ctor_locinfo(codecvt_wchar
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
2776 TRACE("(%p %p %ld)\n", this, locinfo
, refs
);
2778 codecvt_base_ctor_refs(&this->base
, refs
);
2779 this->base
.facet
.vtable
= &MSVCP_codecvt_wchar_vtable
;
2781 codecvt_wchar__Init(this, locinfo
);
2785 /* ??0?$codecvt@GDH@std@@QAE@ABV_Locinfo@1@I@Z */
2786 /* ??0?$codecvt@GDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
2787 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor_locinfo
, 12)
2788 codecvt_wchar
* __thiscall
codecvt_short_ctor_locinfo(codecvt_wchar
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
2790 TRACE("(%p %p %ld)\n", this, locinfo
, refs
);
2792 codecvt_wchar_ctor_locinfo(this, locinfo
, refs
);
2793 this->base
.facet
.vtable
= &MSVCP_codecvt_short_vtable
;
2797 /* ??0?$codecvt@_WDH@std@@QAE@I@Z */
2798 /* ??0?$codecvt@_WDH@std@@QEAA@_K@Z */
2799 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor_refs
, 8)
2800 codecvt_wchar
* __thiscall
codecvt_wchar_ctor_refs(codecvt_wchar
*this, MSVCP_size_t refs
)
2804 TRACE("(%p %ld)\n", this, refs
);
2806 _Locinfo_ctor(&locinfo
);
2807 codecvt_wchar_ctor_locinfo(this, &locinfo
, refs
);
2808 _Locinfo_dtor(&locinfo
);
2812 /* ??0?$codecvt@GDH@std@@QAE@I@Z */
2813 /* ??0?$codecvt@GDH@std@@QEAA@_K@Z */
2814 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor_refs
, 8)
2815 codecvt_wchar
* __thiscall
codecvt_short_ctor_refs(codecvt_wchar
*this, MSVCP_size_t refs
)
2819 TRACE("(%p %ld)\n", this, refs
);
2821 _Locinfo_ctor(&locinfo
);
2822 codecvt_short_ctor_locinfo(this, &locinfo
, refs
);
2823 _Locinfo_dtor(&locinfo
);
2827 /* ??_F?$codecvt@_WDH@std@@QAEXXZ */
2828 /* ??_F?$codecvt@_WDH@std@@QEAAXXZ */
2829 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor
, 4)
2830 codecvt_wchar
* __thiscall
codecvt_wchar_ctor(codecvt_wchar
*this)
2832 return codecvt_wchar_ctor_refs(this, 0);
2835 /* ??_F?$codecvt@GDH@std@@QAEXXZ */
2836 /* ??_F?$codecvt@GDH@std@@QEAAXXZ */
2837 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor
, 4)
2838 codecvt_wchar
* __thiscall
codecvt_short_ctor(codecvt_wchar
*this)
2840 return codecvt_short_ctor_refs(this, 0);
2843 /* ??1?$codecvt@GDH@std@@MAE@XZ */
2844 /* ??1?$codecvt@GDH@std@@MEAA@XZ */
2845 /* ??1?$codecvt@_WDH@std@@MAE@XZ */
2846 /* ??1?$codecvt@_WDH@std@@MEAA@XZ */
2847 DEFINE_THISCALL_WRAPPER(codecvt_wchar_dtor
, 4)
2848 void __thiscall
codecvt_wchar_dtor(codecvt_wchar
*this)
2850 TRACE("(%p)\n", this);
2851 codecvt_base_dtor(&this->base
);
2854 DEFINE_THISCALL_WRAPPER(codecvt_wchar_vector_dtor
, 8)
2855 codecvt_wchar
* __thiscall
codecvt_wchar_vector_dtor(codecvt_wchar
*this, unsigned int flags
)
2857 TRACE("(%p %x)\n", this, flags
);
2859 /* we have an array, with the number of elements stored before the first object */
2860 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
2862 for(i
=*ptr
-1; i
>=0; i
--)
2863 codecvt_wchar_dtor(this+i
);
2864 MSVCRT_operator_delete(ptr
);
2866 codecvt_wchar_dtor(this);
2868 MSVCRT_operator_delete(this);
2874 /* ?_Getcat@?$codecvt@_WDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2875 /* ?_Getcat@?$codecvt@_WDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2876 static MSVCP_size_t
codecvt_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
2878 TRACE("(%p %p)\n", facet
, loc
);
2880 if(facet
&& !*facet
) {
2883 *facet
= MSVCRT_operator_new(sizeof(codecvt_wchar
));
2885 ERR("Out of memory\n");
2886 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
2890 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
2891 codecvt_wchar_ctor_locinfo((codecvt_wchar
*)*facet
, &locinfo
, 0);
2892 _Locinfo_dtor(&locinfo
);
2898 /* ?_Getcat@?$codecvt@_WDH@std@@SAIPAPBVfacet@locale@2@@Z */
2899 /* ?_Getcat@?$codecvt@_WDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
2900 MSVCP_size_t __cdecl
codecvt_wchar__Getcat_old(const locale_facet
**facet
)
2902 return codecvt_wchar__Getcat(facet
, locale_classic());
2905 codecvt_wchar
* codecvt_wchar_use_facet(const locale
*loc
)
2907 static codecvt_wchar
*obj
= NULL
;
2910 const locale_facet
*fac
;
2912 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
2913 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_wchar_id
));
2915 _Lockit_dtor(&lock
);
2916 return (codecvt_wchar
*)fac
;
2920 _Lockit_dtor(&lock
);
2924 codecvt_wchar__Getcat(&fac
, loc
);
2925 obj
= (codecvt_wchar
*)fac
;
2926 locale_facet__Incref(&obj
->base
.facet
);
2927 locale_facet_register(&obj
->base
.facet
);
2928 _Lockit_dtor(&lock
);
2933 /* ?_Getcat@?$codecvt@GDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2934 /* ?_Getcat@?$codecvt@GDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2935 static MSVCP_size_t
codecvt_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
2937 TRACE("(%p %p)\n", facet
, loc
);
2939 if(facet
&& !*facet
) {
2942 *facet
= MSVCRT_operator_new(sizeof(codecvt_wchar
));
2944 ERR("Out of memory\n");
2945 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
2949 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
2950 codecvt_short_ctor((codecvt_wchar
*)*facet
);
2951 _Locinfo_dtor(&locinfo
);
2957 /* ?_Getcat@?$codecvt@GDH@std@@SAIPAPBVfacet@locale@2@@Z */
2958 /* ?_Getcat@?$codecvt@GDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
2959 MSVCP_size_t __cdecl
codecvt_short__Getcat_old(const locale_facet
**facet
)
2961 return codecvt_short__Getcat(facet
, locale_classic());
2964 codecvt_wchar
* codecvt_short_use_facet(const locale
*loc
)
2966 static codecvt_wchar
*obj
= NULL
;
2969 const locale_facet
*fac
;
2971 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
2972 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_short_id
));
2974 _Lockit_dtor(&lock
);
2975 return (codecvt_wchar
*)fac
;
2979 _Lockit_dtor(&lock
);
2983 codecvt_short__Getcat(&fac
, loc
);
2984 obj
= (codecvt_wchar
*)fac
;
2985 locale_facet__Incref(&obj
->base
.facet
);
2986 locale_facet_register(&obj
->base
.facet
);
2987 _Lockit_dtor(&lock
);
2992 /* ?do_always_noconv@?$codecvt@GDH@std@@MBE_NXZ */
2993 /* ?do_always_noconv@?$codecvt@GDH@std@@MEBA_NXZ */
2994 /* ?do_always_noconv@?$codecvt@_WDH@std@@MBE_NXZ */
2995 /* ?do_always_noconv@?$codecvt@_WDH@std@@MEBA_NXZ */
2996 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_always_noconv
, 4)
2997 MSVCP_bool __thiscall
codecvt_wchar_do_always_noconv(const codecvt_wchar
*this)
2999 TRACE("(%p)\n", this);
3003 /* ?do_max_length@?$codecvt@GDH@std@@MBEHXZ */
3004 /* ?do_max_length@?$codecvt@GDH@std@@MEBAHXZ */
3005 /* ?do_max_length@?$codecvt@_WDH@std@@MBEHXZ */
3006 /* ?do_max_length@?$codecvt@_WDH@std@@MEBAHXZ */
3007 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_max_length
, 4)
3008 int __thiscall
codecvt_wchar_do_max_length(const codecvt_wchar
*this)
3010 TRACE("(%p)\n", this);
3014 /* ?do_in@?$codecvt@GDH@std@@MBEHAAHPBD1AAPBDPAG3AAPAG@Z */
3015 /* ?do_in@?$codecvt@GDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAG3AEAPEAG@Z */
3016 /* ?do_in@?$codecvt@_WDH@std@@MBEHAAHPBD1AAPBDPA_W3AAPA_W@Z */
3017 /* ?do_in@?$codecvt@_WDH@std@@MEBAHAEAHPEBD1AEAPEBDPEA_W3AEAPEA_W@Z */
3018 #define call_codecvt_wchar_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
3019 CALL_VTBL_FUNC(this, 16, int, \
3020 (const codecvt_wchar*, int*, const char*, const char*, const char**, wchar_t*, wchar_t*, wchar_t**), \
3021 (this, state, from, from_end, from_next, to, to_end, to_next))
3022 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_in
, 32)
3023 int __thiscall
codecvt_wchar_do_in(const codecvt_wchar
*this, int *state
,
3024 const char *from
, const char *from_end
, const char **from_next
,
3025 wchar_t *to
, wchar_t *to_end
, wchar_t **to_next
)
3027 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3028 from_end
, from_next
, to
, to_end
, to_next
);
3033 while(*from_next
!=from_end
&& *to_next
!=to_end
) {
3034 switch(_Mbrtowc(*to_next
, *from_next
, from_end
-*from_next
, state
, &this->cvt
)) {
3036 *from_next
= from_end
;
3037 return CODECVT_partial
;
3039 return CODECVT_error
;
3053 /* ?in@?$codecvt@GDH@std@@QBEHAAHPBD1AAPBDPAG3AAPAG@Z */
3054 /* ?in@?$codecvt@GDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAG3AEAPEAG@Z */
3055 /* ?in@?$codecvt@_WDH@std@@QBEHAAHPBD1AAPBDPA_W3AAPA_W@Z */
3056 /* ?in@?$codecvt@_WDH@std@@QEBAHAEAHPEBD1AEAPEBDPEA_W3AEAPEA_W@Z */
3057 DEFINE_THISCALL_WRAPPER(codecvt_wchar_in
, 32)
3058 int __thiscall
codecvt_wchar_in(const codecvt_wchar
*this, int *state
,
3059 const char *from
, const char *from_end
, const char **from_next
,
3060 wchar_t *to
, wchar_t *to_end
, wchar_t **to_next
)
3062 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3063 from_end
, from_next
, to
, to_end
, to_next
);
3064 return call_codecvt_wchar_do_in(this, state
, from
,
3065 from_end
, from_next
, to
, to_end
, to_next
);
3068 /* ?do_out@?$codecvt@GDH@std@@MBEHAAHPBG1AAPBGPAD3AAPAD@Z */
3069 /* ?do_out@?$codecvt@GDH@std@@MEBAHAEAHPEBG1AEAPEBGPEAD3AEAPEAD@Z */
3070 /* ?do_out@?$codecvt@_WDH@std@@MBEHAAHPB_W1AAPB_WPAD3AAPAD@Z */
3071 /* ?do_out@?$codecvt@_WDH@std@@MEBAHAEAHPEB_W1AEAPEB_WPEAD3AEAPEAD@Z */
3072 #define call_codecvt_wchar_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
3073 CALL_VTBL_FUNC(this, 20, int, \
3074 (const codecvt_wchar*, int*, const wchar_t*, const wchar_t*, const wchar_t**, char*, char*, char**), \
3075 (this, state, from, from_end, from_next, to, to_end, to_next))
3076 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_out
, 32)
3077 int __thiscall
codecvt_wchar_do_out(const codecvt_wchar
*this, int *state
,
3078 const wchar_t *from
, const wchar_t *from_end
, const wchar_t **from_next
,
3079 char *to
, char *to_end
, char **to_next
)
3081 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3082 from_end
, from_next
, to
, to_end
, to_next
);
3087 while(*from_next
!=from_end
&& *to_next
!=to_end
) {
3088 int old_state
= *state
, size
;
3089 char buf
[MB_LEN_MAX
];
3091 switch((size
= _Wcrtomb(buf
, **from_next
, state
, &this->cvt
))) {
3093 return CODECVT_error
;
3095 if(size
> from_end
-*from_next
) {
3097 return CODECVT_partial
;
3101 memcpy_s(*to_next
, to_end
-*to_next
, buf
, size
);
3109 /* ?out@?$codecvt@GDH@std@@QBEHAAHPBG1AAPBGPAD3AAPAD@Z */
3110 /* ?out@?$codecvt@GDH@std@@QEBAHAEAHPEBG1AEAPEBGPEAD3AEAPEAD@Z */
3111 /* ?out@?$codecvt@_WDH@std@@QBEHAAHPB_W1AAPB_WPAD3AAPAD@Z */
3112 /* ?out@?$codecvt@_WDH@std@@QEBAHAEAHPEB_W1AEAPEB_WPEAD3AEAPEAD@Z */
3113 DEFINE_THISCALL_WRAPPER(codecvt_wchar_out
, 32)
3114 int __thiscall
codecvt_wchar_out(const codecvt_wchar
*this, int *state
,
3115 const wchar_t *from
, const wchar_t *from_end
, const wchar_t **from_next
,
3116 char *to
, char *to_end
, char **to_next
)
3118 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3119 from_end
, from_next
, to
, to_end
, to_next
);
3120 return call_codecvt_wchar_do_out(this, state
, from
,
3121 from_end
, from_next
, to
, to_end
, to_next
);
3124 /* ?do_unshift@?$codecvt@GDH@std@@MBEHAAHPAD1AAPAD@Z */
3125 /* ?do_unshift@?$codecvt@GDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
3126 /* ?do_unshift@?$codecvt@_WDH@std@@MBEHAAHPAD1AAPAD@Z */
3127 /* ?do_unshift@?$codecvt@_WDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
3128 #define call_codecvt_wchar_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 24, \
3129 int, (const codecvt_wchar*, int*, char*, char*, char**), (this, state, to, to_end, to_next))
3130 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_unshift
, 20)
3131 int __thiscall
codecvt_wchar_do_unshift(const codecvt_wchar
*this,
3132 int *state
, char *to
, char *to_end
, char **to_next
)
3134 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3136 WARN("unexpected state: %x\n", *state
);
3142 /* ?unshift@?$codecvt@GDH@std@@QBEHAAHPAD1AAPAD@Z */
3143 /* ?unshift@?$codecvt@GDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
3144 /* ?unshift@?$codecvt@_WDH@std@@QBEHAAHPAD1AAPAD@Z */
3145 /* ?unshift@?$codecvt@_WDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
3146 DEFINE_THISCALL_WRAPPER(codecvt_wchar_unshift
, 20)
3147 int __thiscall
codecvt_wchar_unshift(const codecvt_wchar
*this,
3148 int *state
, char *to
, char *to_end
, char **to_next
)
3150 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3151 return call_codecvt_wchar_do_unshift(this, state
, to
, to_end
, to_next
);
3154 /* ?do_length@?$codecvt@GDH@std@@MBEHABHPBD1I@Z */
3155 /* ?do_length@?$codecvt@GDH@std@@MEBAHAEBHPEBD1_K@Z */
3156 /* ?do_length@?$codecvt@_WDH@std@@MBEHABHPBD1I@Z */
3157 /* ?do_length@?$codecvt@_WDH@std@@MEBAHAEBHPEBD1_K@Z */
3158 #define call_codecvt_wchar_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 28, \
3159 int, (const codecvt_wchar*, const int*, const char*, const char*, MSVCP_size_t), \
3160 (this, state, from, from_end, max))
3161 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_length
, 20)
3162 int __thiscall
codecvt_wchar_do_length(const codecvt_wchar
*this, const int *state
,
3163 const char *from
, const char *from_end
, MSVCP_size_t max
)
3165 int tmp_state
= *state
, ret
=0;
3167 TRACE("(%p %p %p %p %ld)\n", this, state
, from
, from_end
, max
);
3169 while(ret
<max
&& from
!=from_end
) {
3170 switch(_Mbrtowc(NULL
, from
, from_end
-from
, &tmp_state
, &this->cvt
)) {
3187 /* ?length@?$codecvt@GDH@std@@QBEHABHPBD1I@Z */
3188 /* ?length@?$codecvt@GDH@std@@QEBAHAEBHPEBD1_K@Z */
3189 /* ?length@?$codecvt@_WDH@std@@QBEHABHPBD1I@Z */
3190 /* ?length@?$codecvt@_WDH@std@@QEBAHAEBHPEBD1_K@Z */
3191 DEFINE_THISCALL_WRAPPER(codecvt_wchar_length
, 20)
3192 int __thiscall
codecvt_wchar_length(const codecvt_wchar
*this, const int *state
,
3193 const char *from
, const char *from_end
, MSVCP_size_t max
)
3195 TRACE("(%p %p %p %p %ld)\n", this, state
, from
, from_end
, max
);
3196 return call_codecvt_wchar_do_length(this, state
, from
, from_end
, max
);
3199 /* ?id@?$numpunct@D@std@@2V0locale@2@A */
3200 locale_id numpunct_char_id
= {0};
3202 /* ??_7?$numpunct@D@std@@6B@ */
3203 extern const vtable_ptr MSVCP_numpunct_char_vtable
;
3205 /* ?_Init@?$numpunct@D@std@@IAEXABV_Locinfo@2@_N@Z */
3206 /* ?_Init@?$numpunct@D@std@@IEAAXAEBV_Locinfo@2@_N@Z */
3207 static void numpunct_char__Init(numpunct_char
*this, const _Locinfo
*locinfo
, MSVCP_bool isdef
)
3211 TRACE("(%p %p %d)\n", this, locinfo
, isdef
);
3213 len
= strlen(_Locinfo__Getfalse(locinfo
))+1;
3214 this->false_name
= MSVCRT_operator_new(len
);
3215 if(this->false_name
)
3216 memcpy((char*)this->false_name
, _Locinfo__Getfalse(locinfo
), len
);
3218 len
= strlen(_Locinfo__Gettrue(locinfo
))+1;
3219 this->true_name
= MSVCRT_operator_new(len
);
3221 memcpy((char*)this->true_name
, _Locinfo__Gettrue(locinfo
), len
);
3224 this->grouping
= MSVCRT_operator_new(1);
3226 *(char*)this->grouping
= 0;
3231 const struct lconv
*lc
= _Locinfo__Getlconv(locinfo
);
3233 len
= strlen(lc
->grouping
)+1;
3234 this->grouping
= MSVCRT_operator_new(len
);
3236 memcpy((char*)this->grouping
, lc
->grouping
, len
);
3238 this->dp
= lc
->decimal_point
[0];
3239 this->sep
= lc
->thousands_sep
[0];
3242 if(!this->false_name
|| !this->true_name
|| !this->grouping
) {
3243 MSVCRT_operator_delete((char*)this->grouping
);
3244 MSVCRT_operator_delete((char*)this->false_name
);
3245 MSVCRT_operator_delete((char*)this->true_name
);
3247 ERR("Out of memory\n");
3248 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3252 /* ?_Tidy@?$numpunct@D@std@@AAEXXZ */
3253 /* ?_Tidy@?$numpunct@D@std@@AEAAXXZ */
3254 DEFINE_THISCALL_WRAPPER(numpunct_char__Tidy
, 4)
3255 void __thiscall
numpunct_char__Tidy(numpunct_char
*this)
3257 TRACE("(%p)\n", this);
3259 MSVCRT_operator_delete((char*)this->grouping
);
3260 MSVCRT_operator_delete((char*)this->false_name
);
3261 MSVCRT_operator_delete((char*)this->true_name
);
3264 /* ??0?$numpunct@D@std@@QAE@ABV_Locinfo@1@I_N@Z */
3265 /* ??0?$numpunct@D@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
3266 static numpunct_char
* numpunct_char_ctor_locinfo(numpunct_char
*this,
3267 const _Locinfo
*locinfo
, MSVCP_size_t refs
, MSVCP_bool usedef
)
3269 TRACE("(%p %p %lu %d)\n", this, locinfo
, refs
, usedef
);
3270 locale_facet_ctor_refs(&this->facet
, refs
);
3271 this->facet
.vtable
= &MSVCP_numpunct_char_vtable
;
3272 numpunct_char__Init(this, locinfo
, usedef
);
3276 /* ??0?$numpunct@D@std@@IAE@PBDI_N@Z */
3277 /* ??0?$numpunct@D@std@@IEAA@PEBD_K_N@Z */
3278 static numpunct_char
* numpunct_char_ctor_name(numpunct_char
*this,
3279 const char *name
, MSVCP_size_t refs
, MSVCP_bool usedef
)
3283 TRACE("(%p %s %lu %d)\n", this, debugstr_a(name
), refs
, usedef
);
3284 locale_facet_ctor_refs(&this->facet
, refs
);
3285 this->facet
.vtable
= &MSVCP_numpunct_char_vtable
;
3287 _Locinfo_ctor_cstr(&locinfo
, name
);
3288 numpunct_char__Init(this, &locinfo
, usedef
);
3289 _Locinfo_dtor(&locinfo
);
3293 /* ??0?$numpunct@D@std@@QAE@I@Z */
3294 /* ??0?$numpunct@D@std@@QEAA@_K@Z */
3295 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_refs
, 8)
3296 numpunct_char
* __thiscall
numpunct_char_ctor_refs(numpunct_char
*this, MSVCP_size_t refs
)
3298 TRACE("(%p %lu)\n", this, refs
);
3299 return numpunct_char_ctor_name(this, "C", refs
, FALSE
);
3302 /* ??_F?$numpunct@D@std@@QAEXXZ */
3303 /* ??_F?$numpunct@D@std@@QEAAXXZ */
3304 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor
, 4)
3305 numpunct_char
* __thiscall
numpunct_char_ctor(numpunct_char
*this)
3307 return numpunct_char_ctor_refs(this, 0);
3310 /* ??1?$numpunct@D@std@@MAE@XZ */
3311 /* ??1?$numpunct@D@std@@MEAA@XZ */
3312 DEFINE_THISCALL_WRAPPER(numpunct_char_dtor
, 4)
3313 void __thiscall
numpunct_char_dtor(numpunct_char
*this)
3315 TRACE("(%p)\n", this);
3316 numpunct_char__Tidy(this);
3319 DEFINE_THISCALL_WRAPPER(numpunct_char_vector_dtor
, 8)
3320 numpunct_char
* __thiscall
numpunct_char_vector_dtor(numpunct_char
*this, unsigned int flags
)
3322 TRACE("(%p %x)\n", this, flags
);
3324 /* we have an array, with the number of elements stored before the first object */
3325 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
3327 for(i
=*ptr
-1; i
>=0; i
--)
3328 numpunct_char_dtor(this+i
);
3329 MSVCRT_operator_delete(ptr
);
3331 numpunct_char_dtor(this);
3333 MSVCRT_operator_delete(this);
3339 /* ?_Getcat@?$numpunct@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3340 /* ?_Getcat@?$numpunct@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3341 static MSVCP_size_t
numpunct_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
3343 TRACE("(%p %p)\n", facet
, loc
);
3345 if(facet
&& !*facet
) {
3346 *facet
= MSVCRT_operator_new(sizeof(numpunct_char
));
3348 ERR("Out of memory\n");
3349 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3352 numpunct_char_ctor_name((numpunct_char
*)*facet
,
3353 MSVCP_basic_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
3359 /* ?_Getcat@?$numpunct@D@std@@SAIPAPBVfacet@locale@2@@Z */
3360 /* ?_Getcat@?$numpunct@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3361 MSVCP_size_t __cdecl
numpunct_char__Getcat_old(const locale_facet
**facet
)
3363 return numpunct_char__Getcat(facet
, locale_classic());
3366 static numpunct_char
* numpunct_char_use_facet(const locale
*loc
)
3368 static numpunct_char
*obj
= NULL
;
3371 const locale_facet
*fac
;
3373 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3374 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_char_id
));
3376 _Lockit_dtor(&lock
);
3377 return (numpunct_char
*)fac
;
3381 _Lockit_dtor(&lock
);
3385 numpunct_char__Getcat(&fac
, loc
);
3386 obj
= (numpunct_char
*)fac
;
3387 locale_facet__Incref(&obj
->facet
);
3388 locale_facet_register(&obj
->facet
);
3389 _Lockit_dtor(&lock
);
3394 /* ?do_decimal_point@?$numpunct@D@std@@MBEDXZ */
3395 /* ?do_decimal_point@?$numpunct@D@std@@MEBADXZ */
3396 DEFINE_THISCALL_WRAPPER(numpunct_char_do_decimal_point
, 4)
3397 #define call_numpunct_char_do_decimal_point(this) CALL_VTBL_FUNC(this, 4, \
3398 char, (const numpunct_char *this), (this))
3399 char __thiscall
numpunct_char_do_decimal_point(const numpunct_char
*this)
3401 TRACE("(%p)\n", this);
3405 /* ?decimal_point@?$numpunct@D@std@@QBEDXZ */
3406 /* ?decimal_point@?$numpunct@D@std@@QEBADXZ */
3407 DEFINE_THISCALL_WRAPPER(numpunct_char_decimal_point
, 4)
3408 char __thiscall
numpunct_char_decimal_point(const numpunct_char
*this)
3410 TRACE("(%p)\n", this);
3411 return call_numpunct_char_do_decimal_point(this);
3414 /* ?do_thousands_sep@?$numpunct@D@std@@MBEDXZ */
3415 /* ?do_thousands_sep@?$numpunct@D@std@@MEBADXZ */
3416 DEFINE_THISCALL_WRAPPER(numpunct_char_do_thousands_sep
, 4)
3417 #define call_numpunct_char_do_thousands_sep(this) CALL_VTBL_FUNC(this, 8, \
3418 char, (const numpunct_char*), (this))
3419 char __thiscall
numpunct_char_do_thousands_sep(const numpunct_char
*this)
3421 TRACE("(%p)\n", this);
3425 /* ?thousands_sep@?$numpunct@D@std@@QBEDXZ */
3426 /* ?thousands_sep@?$numpunct@D@std@@QEBADXZ */
3427 DEFINE_THISCALL_WRAPPER(numpunct_char_thousands_sep
, 4)
3428 char __thiscall
numpunct_char_thousands_sep(const numpunct_char
*this)
3430 TRACE("(%p)\n", this);
3431 return call_numpunct_char_do_thousands_sep(this);
3434 /* ?do_grouping@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3435 /* ?do_grouping@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3436 DEFINE_THISCALL_WRAPPER(numpunct_char_do_grouping
, 8)
3437 #define call_numpunct_char_do_grouping(this, ret) CALL_VTBL_FUNC(this, 12, \
3438 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
3439 basic_string_char
* __thiscall
numpunct_char_do_grouping(
3440 const numpunct_char
*this, basic_string_char
*ret
)
3442 TRACE("(%p)\n", this);
3443 return MSVCP_basic_string_char_ctor_cstr(ret
, this->grouping
);
3446 /* ?grouping@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3447 /* ?grouping@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3448 DEFINE_THISCALL_WRAPPER(numpunct_char_grouping
, 8)
3449 basic_string_char
* __thiscall
numpunct_char_grouping(const numpunct_char
*this, basic_string_char
*ret
)
3451 TRACE("(%p)\n", this);
3452 return call_numpunct_char_do_grouping(this, ret
);
3455 /* ?do_falsename@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3456 /* ?do_falsename@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3457 DEFINE_THISCALL_WRAPPER(numpunct_char_do_falsename
, 8)
3458 #define call_numpunct_char_do_falsename(this, ret) CALL_VTBL_FUNC(this, 16, \
3459 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
3460 basic_string_char
* __thiscall
numpunct_char_do_falsename(
3461 const numpunct_char
*this, basic_string_char
*ret
)
3463 TRACE("(%p)\n", this);
3464 return MSVCP_basic_string_char_ctor_cstr(ret
, this->false_name
);
3467 /* ?falsename@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3468 /* ?falsename@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3469 DEFINE_THISCALL_WRAPPER(numpunct_char_falsename
, 8)
3470 basic_string_char
* __thiscall
numpunct_char_falsename(const numpunct_char
*this, basic_string_char
*ret
)
3472 TRACE("(%p)\n", this);
3473 return call_numpunct_char_do_falsename(this, ret
);
3476 /* ?do_truename@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3477 /* ?do_truename@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3478 DEFINE_THISCALL_WRAPPER(numpunct_char_do_truename
, 8)
3479 #define call_numpunct_char_do_truename(this, ret) CALL_VTBL_FUNC(this, 20, \
3480 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
3481 basic_string_char
* __thiscall
numpunct_char_do_truename(
3482 const numpunct_char
*this, basic_string_char
*ret
)
3484 TRACE("(%p)\n", this);
3485 return MSVCP_basic_string_char_ctor_cstr(ret
, this->true_name
);
3488 /* ?truename@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3489 /* ?truename@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3490 DEFINE_THISCALL_WRAPPER(numpunct_char_truename
, 8)
3491 basic_string_char
* __thiscall
numpunct_char_truename(const numpunct_char
*this, basic_string_char
*ret
)
3493 TRACE("(%p)\n", this);
3494 return call_numpunct_char_do_truename(this, ret
);
3497 /* ?id@?$numpunct@_W@std@@2V0locale@2@A */
3498 locale_id numpunct_wchar_id
= {0};
3499 /* ?id@?$numpunct@G@std@@2V0locale@2@A */
3500 locale_id numpunct_short_id
= {0};
3502 /* ??_7?$numpunct@_W@std@@6B@ */
3503 extern const vtable_ptr MSVCP_numpunct_wchar_vtable
;
3504 /* ??_7?$numpunct@G@std@@6B@ */
3505 extern const vtable_ptr MSVCP_numpunct_short_vtable
;
3507 /* ?_Init@?$numpunct@_W@std@@IAEXABV_Locinfo@2@_N@Z */
3508 /* ?_Init@?$numpunct@_W@std@@IEAAXAEBV_Locinfo@2@_N@Z */
3509 /* ?_Init@?$numpunct@G@std@@IAEXABV_Locinfo@2@_N@Z */
3510 /* ?_Init@?$numpunct@G@std@@IEAAXAEBV_Locinfo@2@_N@Z */
3511 static void numpunct_wchar__Init(numpunct_wchar
*this,
3512 const _Locinfo
*locinfo
, MSVCP_bool isdef
)
3514 const char *to_convert
;
3518 TRACE("(%p %p %d)\n", this, locinfo
, isdef
);
3520 _Locinfo__Getcvt(locinfo
, &cvt
);
3522 to_convert
= _Locinfo__Getfalse(locinfo
);
3523 len
= MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1, NULL
, 0);
3524 this->false_name
= MSVCRT_operator_new(len
*sizeof(WCHAR
));
3525 if(this->false_name
)
3526 MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1,
3527 (wchar_t*)this->false_name
, len
);
3529 to_convert
= _Locinfo__Gettrue(locinfo
);
3530 len
= MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1, NULL
, 0);
3531 this->true_name
= MSVCRT_operator_new(len
*sizeof(WCHAR
));
3533 MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1,
3534 (wchar_t*)this->true_name
, len
);
3537 this->grouping
= MSVCRT_operator_new(1);
3539 *(char*)this->grouping
= 0;
3544 const struct lconv
*lc
= _Locinfo__Getlconv(locinfo
);
3546 len
= strlen(lc
->grouping
)+1;
3547 this->grouping
= MSVCRT_operator_new(len
);
3549 memcpy((char*)this->grouping
, lc
->grouping
, len
);
3551 this->dp
= lc
->decimal_point
[0];
3552 this->sep
= lc
->thousands_sep
[0];
3555 if(!this->false_name
|| !this->true_name
|| !this->grouping
) {
3556 MSVCRT_operator_delete((char*)this->grouping
);
3557 MSVCRT_operator_delete((wchar_t*)this->false_name
);
3558 MSVCRT_operator_delete((wchar_t*)this->true_name
);
3560 ERR("Out of memory\n");
3561 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3565 /* ?_Tidy@?$numpunct@_W@std@@AAEXXZ */
3566 /* ?_Tidy@?$numpunct@_W@std@@AEAAXXZ */
3567 /* ?_Tidy@?$numpunct@G@std@@AAEXXZ */
3568 /* ?_Tidy@?$numpunct@G@std@@AEAAXXZ */
3569 DEFINE_THISCALL_WRAPPER(numpunct_wchar__Tidy
, 4)
3570 void __thiscall
numpunct_wchar__Tidy(numpunct_wchar
*this)
3572 TRACE("(%p)\n", this);
3574 MSVCRT_operator_delete((char*)this->grouping
);
3575 MSVCRT_operator_delete((wchar_t*)this->false_name
);
3576 MSVCRT_operator_delete((wchar_t*)this->true_name
);
3579 /* ??0?$numpunct@_W@std@@QAE@ABV_Locinfo@1@I_N@Z */
3580 /* ??0?$numpunct@_W@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
3581 static numpunct_wchar
* numpunct_wchar_ctor_locinfo(numpunct_wchar
*this,
3582 const _Locinfo
*locinfo
, MSVCP_size_t refs
, MSVCP_bool usedef
)
3584 TRACE("(%p %p %lu %d)\n", this, locinfo
, refs
, usedef
);
3585 locale_facet_ctor_refs(&this->facet
, refs
);
3586 this->facet
.vtable
= &MSVCP_numpunct_wchar_vtable
;
3587 numpunct_wchar__Init(this, locinfo
, usedef
);
3591 /* ??0?$numpunct@G@std@@QAE@ABV_Locinfo@1@I_N@Z */
3592 /* ??0?$numpunct@G@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
3593 static numpunct_wchar
* numpunct_short_ctor_locinfo(numpunct_wchar
*this,
3594 const _Locinfo
*locinfo
, MSVCP_size_t refs
, MSVCP_bool usedef
)
3596 numpunct_wchar_ctor_locinfo(this, locinfo
, refs
, usedef
);
3597 this->facet
.vtable
= &MSVCP_numpunct_short_vtable
;
3601 /* ??0?$numpunct@_W@std@@IAE@PBDI_N@Z */
3602 /* ??0?$numpunct@_W@std@@IEAA@PEBD_K_N@Z */
3603 static numpunct_wchar
* numpunct_wchar_ctor_name(numpunct_wchar
*this,
3604 const char *name
, MSVCP_size_t refs
, MSVCP_bool usedef
)
3608 TRACE("(%p %s %lu %d)\n", this, debugstr_a(name
), refs
, usedef
);
3609 locale_facet_ctor_refs(&this->facet
, refs
);
3610 this->facet
.vtable
= &MSVCP_numpunct_wchar_vtable
;
3612 _Locinfo_ctor_cstr(&locinfo
, name
);
3613 numpunct_wchar__Init(this, &locinfo
, usedef
);
3614 _Locinfo_dtor(&locinfo
);
3618 /* ??0?$numpunct@G@std@@IAE@PBDI_N@Z */
3619 /* ??0?$numpunct@G@std@@IEAA@PEBD_K_N@Z */
3620 static numpunct_wchar
* numpunct_short_ctor_name(numpunct_wchar
*this,
3621 const char *name
, MSVCP_size_t refs
, MSVCP_bool usedef
)
3623 numpunct_wchar_ctor_name(this, name
, refs
, usedef
);
3624 this->facet
.vtable
= &MSVCP_numpunct_short_vtable
;
3628 /* ??0?$numpunct@_W@std@@QAE@I@Z */
3629 /* ??0?$numpunct@_W@std@@QEAA@_K@Z */
3630 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_refs
, 8)
3631 numpunct_wchar
* __thiscall
numpunct_wchar_ctor_refs(numpunct_wchar
*this, MSVCP_size_t refs
)
3633 TRACE("(%p %lu)\n", this, refs
);
3634 return numpunct_wchar_ctor_name(this, "C", refs
, FALSE
);
3637 /* ??0?$numpunct@G@std@@QAE@I@Z */
3638 /* ??0?$numpunct@G@std@@QEAA@_K@Z */
3639 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_refs
, 8)
3640 numpunct_wchar
* __thiscall
numpunct_short_ctor_refs(numpunct_wchar
*this, MSVCP_size_t refs
)
3642 numpunct_wchar_ctor_refs(this, refs
);
3643 this->facet
.vtable
= &MSVCP_numpunct_short_vtable
;
3647 /* ??_F?$numpunct@_W@std@@QAEXXZ */
3648 /* ??_F?$numpunct@_W@std@@QEAAXXZ */
3649 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor
, 4)
3650 numpunct_wchar
* __thiscall
numpunct_wchar_ctor(numpunct_wchar
*this)
3652 return numpunct_wchar_ctor_refs(this, 0);
3655 /* ??_F?$numpunct@G@std@@QAEXXZ */
3656 /* ??_F?$numpunct@G@std@@QEAAXXZ */
3657 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor
, 4)
3658 numpunct_wchar
* __thiscall
numpunct_short_ctor(numpunct_wchar
*this)
3660 return numpunct_short_ctor_refs(this, 0);
3663 /* ??1?$numpunct@_W@std@@MAE@XZ */
3664 /* ??1?$numpunct@_W@std@@MEAA@XZ */
3665 /* ??1?$numpunct@G@std@@MAE@XZ */
3666 /* ??1?$numpunct@G@std@@MEAA@XZ */
3667 DEFINE_THISCALL_WRAPPER(numpunct_wchar_dtor
, 4)
3668 void __thiscall
numpunct_wchar_dtor(numpunct_wchar
*this)
3670 TRACE("(%p)\n", this);
3671 numpunct_wchar__Tidy(this);
3674 DEFINE_THISCALL_WRAPPER(numpunct_wchar_vector_dtor
, 8)
3675 numpunct_wchar
* __thiscall
numpunct_wchar_vector_dtor(numpunct_wchar
*this, unsigned int flags
)
3677 TRACE("(%p %x)\n", this, flags
);
3679 /* we have an array, with the number of elements stored before the first object */
3680 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
3682 for(i
=*ptr
-1; i
>=0; i
--)
3683 numpunct_wchar_dtor(this+i
);
3684 MSVCRT_operator_delete(ptr
);
3686 numpunct_wchar_dtor(this);
3688 MSVCRT_operator_delete(this);
3694 /* ?_Getcat@?$numpunct@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3695 /* ?_Getcat@?$numpunct@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3696 static MSVCP_size_t
numpunct_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
3698 TRACE("(%p %p)\n", facet
, loc
);
3700 if(facet
&& !*facet
) {
3701 *facet
= MSVCRT_operator_new(sizeof(numpunct_wchar
));
3703 ERR("Out of memory\n");
3704 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3707 numpunct_wchar_ctor_name((numpunct_wchar
*)*facet
,
3708 MSVCP_basic_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
3714 /* ?_Getcat@?$numpunct@_W@std@@SAIPAPBVfacet@locale@2@@Z */
3715 /* ?_Getcat@?$numpunct@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3716 MSVCP_size_t __cdecl
numpunct_wchar__Getcat_old(const locale_facet
**facet
)
3718 return numpunct_wchar__Getcat(facet
, locale_classic());
3721 static numpunct_wchar
* numpunct_wchar_use_facet(const locale
*loc
)
3723 static numpunct_wchar
*obj
= NULL
;
3726 const locale_facet
*fac
;
3728 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3729 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_wchar_id
));
3731 _Lockit_dtor(&lock
);
3732 return (numpunct_wchar
*)fac
;
3736 _Lockit_dtor(&lock
);
3740 numpunct_wchar__Getcat(&fac
, loc
);
3741 obj
= (numpunct_wchar
*)fac
;
3742 locale_facet__Incref(&obj
->facet
);
3743 locale_facet_register(&obj
->facet
);
3744 _Lockit_dtor(&lock
);
3749 /* ?_Getcat@?$numpunct@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3750 /* ?_Getcat@?$numpunct@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3751 static MSVCP_size_t
numpunct_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
3753 TRACE("(%p %p)\n", facet
, loc
);
3755 if(facet
&& !*facet
) {
3756 *facet
= MSVCRT_operator_new(sizeof(numpunct_wchar
));
3758 ERR("Out of memory\n");
3759 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3762 numpunct_short_ctor_name((numpunct_wchar
*)*facet
,
3763 MSVCP_basic_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
3769 /* ?_Getcat@?$numpunct@G@std@@SAIPAPBVfacet@locale@2@@Z */
3770 /* ?_Getcat@?$numpunct@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3771 MSVCP_size_t __cdecl
numpunct_short__Getcat_old(const locale_facet
**facet
)
3773 return numpunct_short__Getcat(facet
, locale_classic());
3776 static numpunct_wchar
* numpunct_short_use_facet(const locale
*loc
)
3778 static numpunct_wchar
*obj
= NULL
;
3781 const locale_facet
*fac
;
3783 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3784 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_short_id
));
3786 _Lockit_dtor(&lock
);
3787 return (numpunct_wchar
*)fac
;
3791 _Lockit_dtor(&lock
);
3795 numpunct_short__Getcat(&fac
, loc
);
3796 obj
= (numpunct_wchar
*)fac
;
3797 locale_facet__Incref(&obj
->facet
);
3798 locale_facet_register(&obj
->facet
);
3799 _Lockit_dtor(&lock
);
3804 /* ?do_decimal_point@?$numpunct@_W@std@@MBE_WXZ */
3805 /* ?do_decimal_point@?$numpunct@_W@std@@MEBA_WXZ */
3806 /* ?do_decimal_point@?$numpunct@G@std@@MBEGXZ */
3807 /* ?do_decimal_point@?$numpunct@G@std@@MEBAGXZ */
3808 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_decimal_point
, 4)
3809 #define call_numpunct_wchar_do_decimal_point(this) CALL_VTBL_FUNC(this, 4, \
3810 wchar_t, (const numpunct_wchar *this), (this))
3811 wchar_t __thiscall
numpunct_wchar_do_decimal_point(const numpunct_wchar
*this)
3813 TRACE("(%p)\n", this);
3817 /* ?decimal_point@?$numpunct@_W@std@@QBE_WXZ */
3818 /* ?decimal_point@?$numpunct@_W@std@@QEBA_WXZ */
3819 /* ?decimal_point@?$numpunct@G@std@@QBEGXZ */
3820 /* ?decimal_point@?$numpunct@G@std@@QEBAGXZ */
3821 DEFINE_THISCALL_WRAPPER(numpunct_wchar_decimal_point
, 4)
3822 wchar_t __thiscall
numpunct_wchar_decimal_point(const numpunct_wchar
*this)
3824 TRACE("(%p)\n", this);
3825 return call_numpunct_wchar_do_decimal_point(this);
3828 /* ?do_thousands_sep@?$numpunct@_W@std@@MBE_WXZ */
3829 /* ?do_thousands_sep@?$numpunct@_W@std@@MEBA_WXZ */
3830 /* ?do_thousands_sep@?$numpunct@G@std@@MBEGXZ */
3831 /* ?do_thousands_sep@?$numpunct@G@std@@MEBAGXZ */
3832 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_thousands_sep
, 4)
3833 #define call_numpunct_wchar_do_thousands_sep(this) CALL_VTBL_FUNC(this, 8, \
3834 wchar_t, (const numpunct_wchar *this), (this))
3835 wchar_t __thiscall
numpunct_wchar_do_thousands_sep(const numpunct_wchar
*this)
3837 TRACE("(%p)\n", this);
3841 /* ?thousands_sep@?$numpunct@_W@std@@QBE_WXZ */
3842 /* ?thousands_sep@?$numpunct@_W@std@@QEBA_WXZ */
3843 /* ?thousands_sep@?$numpunct@G@std@@QBEGXZ */
3844 /* ?thousands_sep@?$numpunct@G@std@@QEBAGXZ */
3845 DEFINE_THISCALL_WRAPPER(numpunct_wchar_thousands_sep
, 4)
3846 wchar_t __thiscall
numpunct_wchar_thousands_sep(const numpunct_wchar
*this)
3848 TRACE("(%p)\n", this);
3849 return call_numpunct_wchar_do_thousands_sep(this);
3852 /* ?do_grouping@?$numpunct@_W@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3853 /* ?do_grouping@?$numpunct@_W@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3854 /* ?do_grouping@?$numpunct@G@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3855 /* ?do_grouping@?$numpunct@G@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3856 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_grouping
, 8)
3857 #define call_numpunct_wchar_do_grouping(this, ret) CALL_VTBL_FUNC(this, 12, \
3858 basic_string_char*, (const numpunct_wchar*, basic_string_char*), (this, ret))
3859 basic_string_char
* __thiscall
numpunct_wchar_do_grouping(const numpunct_wchar
*this, basic_string_char
*ret
)
3861 TRACE("(%p)\n", this);
3862 return MSVCP_basic_string_char_ctor_cstr(ret
, this->grouping
);
3865 /* ?grouping@?$numpunct@_W@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3866 /* ?grouping@?$numpunct@_W@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3867 /* ?grouping@?$numpunct@G@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3868 /* ?grouping@?$numpunct@G@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3869 DEFINE_THISCALL_WRAPPER(numpunct_wchar_grouping
, 8)
3870 basic_string_char
* __thiscall
numpunct_wchar_grouping(const numpunct_wchar
*this, basic_string_char
*ret
)
3872 TRACE("(%p)\n", this);
3873 return call_numpunct_wchar_do_grouping(this, ret
);
3876 /* ?do_falsename@?$numpunct@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3877 /* ?do_falsename@?$numpunct@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3878 /* ?do_falsename@?$numpunct@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3879 /* ?do_falsename@?$numpunct@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3880 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_falsename
, 8)
3881 #define call_numpunct_wchar_do_falsename(this, ret) CALL_VTBL_FUNC(this, 16, \
3882 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
3883 basic_string_wchar
* __thiscall
numpunct_wchar_do_falsename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
3885 TRACE("(%p)\n", this);
3886 return MSVCP_basic_string_wchar_ctor_cstr(ret
, this->false_name
);
3889 /* ?falsename@?$numpunct@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3890 /* ?falsename@?$numpunct@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3891 /* ?falsename@?$numpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3892 /* ?falsename@?$numpunct@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3893 DEFINE_THISCALL_WRAPPER(numpunct_wchar_falsename
, 8)
3894 basic_string_wchar
* __thiscall
numpunct_wchar_falsename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
3896 TRACE("(%p)\n", this);
3897 return call_numpunct_wchar_do_falsename(this, ret
);
3900 /* ?do_truename@?$numpunct@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3901 /* ?do_truename@?$numpunct@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3902 /* ?do_truename@?$numpunct@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3903 /* ?do_truename@?$numpunct@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3904 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_truename
, 8)
3905 #define call_numpunct_wchar_do_truename(this, ret) CALL_VTBL_FUNC(this, 20, \
3906 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
3907 basic_string_wchar
* __thiscall
numpunct_wchar_do_truename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
3909 TRACE("(%p)\n", this);
3910 return MSVCP_basic_string_wchar_ctor_cstr(ret
, this->true_name
);
3913 /* ?truename@?$numpunct@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3914 /* ?truename@?$numpunct@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
3915 /* ?truename@?$numpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3916 /* ?truename@?$numpunct@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
3917 DEFINE_THISCALL_WRAPPER(numpunct_wchar_truename
, 8)
3918 basic_string_wchar
* __thiscall
numpunct_wchar_truename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
3920 TRACE("(%p)\n", this);
3921 return call_numpunct_wchar_do_truename(this, ret
);
3924 double __cdecl
_Stod(const char *buf
, char **buf_end
, LONG exp
)
3926 double ret
= strtod(buf
, buf_end
);
3929 ret
*= pow(10, exp
);
3933 static double _Stodx(const char *buf
, char **buf_end
, LONG exp
, int *err
)
3939 ret
= _Stod(buf
, buf_end
, exp
);
3949 float __cdecl
_Stof(const char *buf
, char **buf_end
, LONG exp
)
3951 return _Stod(buf
, buf_end
, exp
);
3954 static float _Stofx(const char *buf
, char **buf_end
, LONG exp
, int *err
)
3956 return _Stodx(buf
, buf_end
, exp
, err
);
3959 static __int64
_Stollx(const char *buf
, char **buf_end
, int base
, int *err
)
3965 ret
= _strtoi64(buf
, buf_end
, base
);
3975 static LONG
_Stolx(const char *buf
, char **buf_end
, int base
, int *err
)
3977 __int64 i
= _Stollx(buf
, buf_end
, base
, err
);
3978 if(!*err
&& i
!=(__int64
)((LONG
)i
))
3983 static unsigned __int64
_Stoullx(const char *buf
, char **buf_end
, int base
, int *err
)
3985 unsigned __int64 ret
;
3989 ret
= _strtoui64(buf
, buf_end
, base
);
3999 static ULONG
_Stoulx(const char *buf
, char **buf_end
, int base
, int *err
)
4001 unsigned __int64 i
= _Stoullx(buf
[0]=='-' ? buf
+1 : buf
, buf_end
, base
, err
);
4002 if(!*err
&& i
!=(unsigned __int64
)((ULONG
)i
))
4004 return buf
[0]=='-' ? -i
: i
;
4007 /* ?id@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
4008 locale_id num_get_wchar_id
= {0};
4009 /* ?id@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
4010 locale_id num_get_short_id
= {0};
4012 /* ??_7?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
4013 extern const vtable_ptr MSVCP_num_get_wchar_vtable
;
4014 /* ??_7?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
4015 extern const vtable_ptr MSVCP_num_get_short_vtable
;
4017 /* ?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
4018 /* ?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
4019 /* ?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
4020 /* ?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
4021 DEFINE_THISCALL_WRAPPER(num_get_wchar__Init
, 8)
4022 void __thiscall
num_get_wchar__Init(num_get
*this, const _Locinfo
*locinfo
)
4024 TRACE("(%p %p)\n", this, locinfo
);
4025 _Locinfo__Getcvt(locinfo
, &this->cvt
);
4028 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
4029 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
4030 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor_locinfo
, 12)
4031 num_get
* __thiscall
num_get_wchar_ctor_locinfo(num_get
*this,
4032 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
4034 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
4036 locale_facet_ctor_refs(&this->facet
, refs
);
4037 this->facet
.vtable
= &MSVCP_num_get_wchar_vtable
;
4039 num_get_wchar__Init(this, locinfo
);
4043 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
4044 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
4045 DEFINE_THISCALL_WRAPPER(num_get_short_ctor_locinfo
, 12)
4046 num_get
* __thiscall
num_get_short_ctor_locinfo(num_get
*this,
4047 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
4049 num_get_wchar_ctor_locinfo(this, locinfo
, refs
);
4050 this->facet
.vtable
= &MSVCP_num_get_short_vtable
;
4054 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
4055 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
4056 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor_refs
, 8)
4057 num_get
* __thiscall
num_get_wchar_ctor_refs(num_get
*this, MSVCP_size_t refs
)
4061 TRACE("(%p %lu)\n", this, refs
);
4063 _Locinfo_ctor(&locinfo
);
4064 num_get_wchar_ctor_locinfo(this, &locinfo
, refs
);
4065 _Locinfo_dtor(&locinfo
);
4069 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
4070 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
4071 DEFINE_THISCALL_WRAPPER(num_get_short_ctor_refs
, 8)
4072 num_get
* __thiscall
num_get_short_ctor_refs(num_get
*this, MSVCP_size_t refs
)
4074 num_get_wchar_ctor_refs(this, refs
);
4075 this->facet
.vtable
= &MSVCP_num_get_short_vtable
;
4079 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
4080 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
4081 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor
, 4)
4082 num_get
* __thiscall
num_get_wchar_ctor(num_get
*this)
4084 return num_get_wchar_ctor_refs(this, 0);
4087 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
4088 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
4089 DEFINE_THISCALL_WRAPPER(num_get_short_ctor
, 4)
4090 num_get
* __thiscall
num_get_short_ctor(num_get
*this)
4092 return num_get_short_ctor_refs(this, 0);
4095 /* ??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
4096 /* ??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
4097 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
4098 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
4099 DEFINE_THISCALL_WRAPPER(num_get_wchar_dtor
, 4)
4100 void __thiscall
num_get_wchar_dtor(num_get
*this)
4102 TRACE("(%p)\n", this);
4103 locale_facet_dtor(&this->facet
);
4106 DEFINE_THISCALL_WRAPPER(num_get_wchar_vector_dtor
, 8)
4107 num_get
* __thiscall
num_get_wchar_vector_dtor(num_get
*this, unsigned int flags
)
4109 TRACE("(%p %x)\n", this, flags
);
4111 /* we have an array, with the number of elements stored before the first object */
4112 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
4114 for(i
=*ptr
-1; i
>=0; i
--)
4115 num_get_wchar_dtor(this+i
);
4116 MSVCRT_operator_delete(ptr
);
4118 num_get_wchar_dtor(this);
4120 MSVCRT_operator_delete(this);
4126 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4127 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4128 static MSVCP_size_t
num_get_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
4130 TRACE("(%p %p)\n", facet
, loc
);
4132 if(facet
&& !*facet
) {
4135 *facet
= MSVCRT_operator_new(sizeof(num_get
));
4137 ERR("Out of memory\n");
4138 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
4142 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
4143 num_get_wchar_ctor_locinfo((num_get
*)*facet
, &locinfo
, 0);
4144 _Locinfo_dtor(&locinfo
);
4150 num_get
* num_get_wchar_use_facet(const locale
*loc
)
4152 static num_get
*obj
= NULL
;
4155 const locale_facet
*fac
;
4157 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
4158 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_wchar_id
));
4160 _Lockit_dtor(&lock
);
4161 return (num_get
*)fac
;
4165 _Lockit_dtor(&lock
);
4169 num_get_wchar__Getcat(&fac
, loc
);
4170 obj
= (num_get
*)fac
;
4171 locale_facet__Incref(&obj
->facet
);
4172 locale_facet_register(&obj
->facet
);
4173 _Lockit_dtor(&lock
);
4178 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4179 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4180 static MSVCP_size_t
num_get_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
4182 if(facet
&& !*facet
) {
4183 num_get_wchar__Getcat(facet
, loc
);
4184 (*(locale_facet
**)facet
)->vtable
= &MSVCP_num_get_short_vtable
;
4190 num_get
* num_get_short_use_facet(const locale
*loc
)
4192 static num_get
*obj
= NULL
;
4195 const locale_facet
*fac
;
4197 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
4198 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_short_id
));
4200 _Lockit_dtor(&lock
);
4201 return (num_get
*)fac
;
4205 _Lockit_dtor(&lock
);
4209 num_get_short__Getcat(&fac
, loc
);
4210 obj
= (num_get
*)fac
;
4211 locale_facet__Incref(&obj
->facet
);
4212 locale_facet_register(&obj
->facet
);
4213 _Lockit_dtor(&lock
);
4218 static inline wchar_t mb_to_wc(char ch
, const _Cvtvec
*cvt
)
4223 return _Mbrtowc(&ret
, &ch
, 1, &state
, cvt
) == 1 ? ret
: 0;
4226 static int num_get__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
4227 istreambuf_iterator_wchar
*last
, const locale
*loc
, numpunct_wchar
*numpunct
)
4229 basic_string_char grouping_bstr
;
4230 basic_string_char groups_found
;
4231 int i
, groups_no
= 0, cur_group
= 0, exp
= 0;
4232 char *dest_beg
= dest
, *num_end
= dest
+25, *exp_end
= dest
+31;
4233 wchar_t sep
, digits
[11], *digits_pos
;
4234 const char *grouping
, *groups
;
4235 BOOL error
= FALSE
, got_digit
= FALSE
, got_nonzero
= FALSE
;
4237 TRACE("(%p %p %p %p)\n", dest
, first
, last
, loc
);
4240 digits
[i
] = mb_to_wc('0'+i
, &this->cvt
);
4243 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
4244 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
4245 sep
= grouping
[0] ? numpunct_wchar_thousands_sep(numpunct
) : 0;
4248 MSVCP_basic_string_char_ctor(&groups_found
);
4250 istreambuf_iterator_wchar_val(first
);
4252 if(first
->strbuf
&& first
->val
==mb_to_wc('-', &this->cvt
)) {
4254 istreambuf_iterator_wchar_inc(first
);
4255 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', &this->cvt
)) {
4257 istreambuf_iterator_wchar_inc(first
);
4260 /* read possibly grouped numbers before decimal */
4261 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
4262 if(!(digits_pos
= wcschr(digits
, first
->val
))) {
4263 if(sep
&& first
->val
==sep
) {
4264 if(!groups_no
) break; /* empty group - stop parsing */
4265 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
4272 got_digit
= TRUE
; /* found a digit, zero or non-zero */
4273 /* write digit to dest if not a leading zero (to not waste dest buffer) */
4274 if(!got_nonzero
&& first
->val
== digits
[0])
4281 *dest
++ = '0'+digits_pos
-digits
;
4283 exp
++; /* too many digits, just multiply by 10 */
4284 if(sep
&& groups_no
<CHAR_MAX
)
4289 /* if all leading zeroes, we didn't write anything so put a zero we check for a decimal */
4290 if(got_digit
&& !got_nonzero
)
4293 /* get decimal, if any */
4294 if(first
->strbuf
&& first
->val
==numpunct_wchar_decimal_point(numpunct
)) {
4296 *dest
++ = *localeconv()->decimal_point
;
4297 istreambuf_iterator_wchar_inc(first
);
4300 /* read non-grouped after decimal */
4301 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
4302 if(!(digits_pos
= wcschr(digits
, first
->val
)))
4304 else if(dest
<num_end
) {
4306 *dest
++ = '0'+digits_pos
-digits
;
4310 /* read exponent, if any */
4311 if(first
->strbuf
&& (first
->val
==mb_to_wc('e', &this->cvt
) || first
->val
==mb_to_wc('E', &this->cvt
))) {
4313 istreambuf_iterator_wchar_inc(first
);
4315 if(first
->strbuf
&& first
->val
==mb_to_wc('-', &this->cvt
)) {
4317 istreambuf_iterator_wchar_inc(first
);
4318 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', &this->cvt
)) {
4320 istreambuf_iterator_wchar_inc(first
);
4323 got_digit
= got_nonzero
= FALSE
;
4325 /* skip any leading zeroes */
4326 for(; first
->strbuf
&& first
->val
==digits
[0]; istreambuf_iterator_wchar_inc(first
))
4329 for(; first
->strbuf
&& (digits_pos
= wcschr(digits
, first
->val
)); istreambuf_iterator_wchar_inc(first
)) {
4330 got_digit
= got_nonzero
= TRUE
; /* leading zeroes would have been skipped, so first digit is non-zero */
4333 *dest
++ = '0'+digits_pos
-digits
;
4336 /* if just found zeroes for exponent, use that */
4337 if(got_digit
&& !got_nonzero
)
4345 if(sep
&& groups_no
)
4346 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
4348 if(!cur_group
) /* no groups, skip loop */
4350 else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
])
4351 error
= TRUE
; /* trailing empty */
4353 for(; cur_group
>=0 && !error
; cur_group
--) {
4354 if(*grouping
== CHAR_MAX
) {
4358 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
4359 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
4362 }else if(grouping
[1]) {
4366 MSVCP_basic_string_char_dtor(&grouping_bstr
);
4368 MSVCP_basic_string_char_dtor(&groups_found
);
4378 /* ?_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 */
4379 /* ?_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 */
4380 int __cdecl
num_get_wchar__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
4381 istreambuf_iterator_wchar
*last
, const locale
*loc
)
4383 return num_get__Getffld(this, dest
, first
, last
, loc
, numpunct_wchar_use_facet(loc
));
4386 /* ?_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 */
4387 /* ?_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 */
4388 int __cdecl
num_get_short__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
4389 istreambuf_iterator_wchar
*last
, const locale
*loc
)
4391 return num_get__Getffld(this, dest
, first
, last
, loc
, numpunct_short_use_facet(loc
));
4394 static int num_get__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
4395 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
, numpunct_wchar
*numpunct
)
4397 wchar_t digits
[23], *digits_pos
, sep
;
4398 basic_string_char grouping_bstr
;
4399 basic_string_char groups_found
;
4400 int i
, basefield
, base
, groups_no
= 0, cur_group
= 0;
4401 char *dest_beg
= dest
, *dest_end
= dest
+24;
4402 const char *grouping
, *groups
;
4403 BOOL error
= TRUE
, dest_empty
= TRUE
, found_zero
= FALSE
;
4405 TRACE("(%p %p %p %04x %p)\n", dest
, first
, last
, fmtflags
, loc
);
4408 digits
[i
] = mb_to_wc('0'+i
, &this->cvt
);
4409 for(i
=0; i
<6; i
++) {
4410 digits
[10+i
] = mb_to_wc('a'+i
, &this->cvt
);
4411 digits
[16+i
] = mb_to_wc('A'+i
, &this->cvt
);
4414 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
4415 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
4416 sep
= grouping
[0] ? numpunct_wchar_thousands_sep(numpunct
) : '\0';
4418 basefield
= fmtflags
& FMTFLAG_basefield
;
4419 if(basefield
== FMTFLAG_oct
)
4421 else if(basefield
== FMTFLAG_hex
)
4422 base
= 22; /* equal to the size of digits buffer */
4428 istreambuf_iterator_wchar_val(first
);
4429 if(first
->strbuf
&& first
->val
==mb_to_wc('-', &this->cvt
)) {
4431 istreambuf_iterator_wchar_inc(first
);
4432 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', &this->cvt
)) {
4434 istreambuf_iterator_wchar_inc(first
);
4437 if(first
->strbuf
&& first
->val
==digits
[0]) {
4439 istreambuf_iterator_wchar_inc(first
);
4440 if(first
->strbuf
&& (first
->val
==mb_to_wc('x', &this->cvt
) || first
->val
==mb_to_wc('X', &this->cvt
))) {
4441 if(!base
|| base
== 22) {
4443 istreambuf_iterator_wchar_inc(first
);
4453 if(!base
) base
= 10;
4458 MSVCP_basic_string_char_ctor(&groups_found
);
4459 if(found_zero
) ++groups_no
;
4462 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
4463 if(!(digits_pos
= wcschr(digits
, first
->val
))) {
4464 if(sep
&& first
->val
==sep
) {
4465 if(!groups_no
) break; /* empty group - stop parsing */
4466 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
4474 if(dest_empty
&& first
->val
== digits
[0]) {
4480 /* skip digits that can't be copied to dest buffer, other
4481 * functions are responsible for detecting overflows */
4483 *dest
++ = (digits_pos
-digits
<10 ? '0'+digits_pos
-digits
:
4484 (digits_pos
-digits
<16 ? 'a'+digits_pos
-digits
-10 :
4485 'A'+digits_pos
-digits
-16));
4486 if(sep
&& groups_no
<CHAR_MAX
)
4491 if(sep
&& groups_no
)
4492 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
4494 if(!cur_group
) { /* no groups, skip loop */
4496 }else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
]) {
4497 error
= TRUE
; /* trailing empty */
4501 for(; cur_group
>=0 && !error
; cur_group
--) {
4502 if(*grouping
== CHAR_MAX
) {
4506 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
4507 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
4510 }else if(grouping
[1]) {
4515 MSVCP_basic_string_char_dtor(&grouping_bstr
);
4517 MSVCP_basic_string_char_dtor(&groups_found
);
4524 }else if(dest_empty
)
4528 return (base
==22 ? 16 : base
);
4531 /* ?_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 */
4532 /* ?_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 */
4533 int __cdecl
num_get_wchar__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
4534 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
)
4536 return num_get__Getifld(this, dest
, first
, last
,
4537 fmtflags
, loc
, numpunct_wchar_use_facet(loc
));
4540 /* ?_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 */
4541 /* ?_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 */
4542 int __cdecl
num_get_short__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
4543 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
)
4545 return num_get__Getifld(this, dest
, first
, last
,
4546 fmtflags
, loc
, numpunct_short_use_facet(loc
));
4549 static istreambuf_iterator_wchar
* num_get_do_get_void(const num_get
*this,
4550 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
4551 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
4552 void **pval
, numpunct_wchar
*numpunct
)
4558 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4560 v
= _Stoullx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
4561 &last
, FMTFLAG_hex
, base
->loc
, numpunct
), &err
);
4562 if(v
!=(unsigned __int64
)((INT_PTR
)v
))
4563 *state
|= IOSTATE_failbit
;
4564 else if(end
!=tmp
&& !err
)
4565 *pval
= (void*)((INT_PTR
)v
);
4567 *state
|= IOSTATE_failbit
;
4570 *state
|= IOSTATE_eofbit
;
4576 /* ?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 */
4577 /* ?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 */
4578 #define call_num_get_wchar_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 4, istreambuf_iterator_wchar*, \
4579 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, void**), \
4580 (this, ret, first, last, base, state, pval))
4581 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_void
,36)
4582 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4583 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
4585 return num_get_do_get_void(this, ret
, first
, last
, base
,
4586 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
4589 /* ?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 */
4590 /* ?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 */
4591 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_void
,36)
4592 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4593 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
4595 return num_get_do_get_void(this, ret
, first
, last
, base
,
4596 state
, pval
, numpunct_short_use_facet(base
->loc
));
4599 /* ?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 */
4600 /* ?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 */
4601 /* ?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 */
4602 /* ?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 */
4603 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_void
,36)
4604 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4605 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
4607 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4608 return call_num_get_wchar_do_get_void(this, ret
, first
, last
, base
, state
, pval
);
4611 static istreambuf_iterator_wchar
* num_get_do_get_double(const num_get
*this,
4612 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
4613 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
4614 double *pval
, numpunct_wchar
*numpunct
)
4620 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4622 v
= _Stodx(tmp
, &end
, num_get__Getffld(this, tmp
, &first
, &last
, base
->loc
, numpunct
), &err
);
4623 if(end
!=tmp
&& !err
)
4626 *state
|= IOSTATE_failbit
;
4629 *state
|= IOSTATE_eofbit
;
4635 /* ?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 */
4636 /* ?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 */
4637 /* ?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 */
4638 /* ?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 */
4639 #define call_num_get_wchar_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_wchar*, \
4640 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
4641 (this, ret, first, last, base, state, pval))
4642 #define call_num_get_wchar_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_wchar*, \
4643 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
4644 (this, ret, first, last, base, state, pval))
4645 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_double
,36)
4646 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4647 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
4649 return num_get_do_get_double(this, ret
, first
, last
, base
,
4650 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
4653 /* ?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 */
4654 /* ?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 */
4655 /* ?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 */
4656 /* ?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 */
4657 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_double
,36)
4658 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4659 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
4661 return num_get_do_get_double(this, ret
, first
, last
, base
,
4662 state
, pval
, numpunct_short_use_facet(base
->loc
));
4665 /* ?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 */
4666 /* ?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 */
4667 /* ?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 */
4668 /* ?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 */
4669 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ldouble
,36)
4670 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ldouble(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4671 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
4673 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4674 return call_num_get_wchar_do_get_ldouble(this, ret
, first
, last
, base
, state
, pval
);
4677 /* ?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 */
4678 /* ?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 */
4679 /* ?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 */
4680 /* ?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 */
4681 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_double
,36)
4682 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4683 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
4685 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4686 return call_num_get_wchar_do_get_double(this, ret
, first
, last
, base
, state
, pval
);
4689 static istreambuf_iterator_wchar
* num_get_do_get_float(const num_get
*this,
4690 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
4691 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
4692 float *pval
, numpunct_wchar
*numpunct
)
4698 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4700 v
= _Stofx(tmp
, &end
, num_get__Getffld(this, tmp
, &first
,
4701 &last
, base
->loc
, numpunct
), &err
);
4702 if(end
!=tmp
&& !err
)
4705 *state
|= IOSTATE_failbit
;
4708 *state
|= IOSTATE_eofbit
;
4714 /* ?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 */
4715 /* ?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 */
4716 #define call_num_get_wchar_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_wchar*, \
4717 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, float*), \
4718 (this, ret, first, last, base, state, pval))
4719 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_float
,36)
4720 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4721 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
4723 return num_get_do_get_float(this, ret
, first
, last
, base
,
4724 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
4727 /* ?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 */
4728 /* ?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 */
4729 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_float
,36)
4730 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4731 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
4733 return num_get_do_get_float(this, ret
, first
, last
, base
,
4734 state
, pval
, numpunct_short_use_facet(base
->loc
));
4737 /* ?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 */
4738 /* ?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 */
4739 /* ?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 */
4740 /* ?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 */
4741 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_float
,36)
4742 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4743 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
4745 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4746 return call_num_get_wchar_do_get_float(this, ret
, first
, last
, base
, state
, pval
);
4749 static istreambuf_iterator_wchar
* num_get_do_get_uint64(const num_get
*this,
4750 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
4751 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
4752 ULONGLONG
*pval
, numpunct_wchar
*numpunct
)
4758 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4760 v
= _Stoullx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
4761 &last
, base
->fmtfl
, base
->loc
, numpunct
), &err
);
4762 if(end
!=tmp
&& !err
)
4765 *state
|= IOSTATE_failbit
;
4768 *state
|= IOSTATE_eofbit
;
4774 /* ?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 */
4775 /* ?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 */
4776 #define call_num_get_wchar_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_wchar*, \
4777 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONGLONG*), \
4778 (this, ret, first, last, base, state, pval))
4779 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_uint64
,36)
4780 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4781 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
4783 return num_get_do_get_uint64(this, ret
, first
, last
, base
,
4784 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
4787 /* ?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 */
4788 /* ?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 */
4789 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_uint64
,36)
4790 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4791 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
4793 return num_get_do_get_uint64(this, ret
, first
, last
, base
,
4794 state
, pval
, numpunct_short_use_facet(base
->loc
));
4797 /* ?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 */
4798 /* ?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 */
4799 /* ?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 */
4800 /* ?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 */
4801 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_uint64
,36)
4802 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4803 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
4805 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4806 return call_num_get_wchar_do_get_uint64(this, ret
, first
, last
, base
, state
, pval
);
4809 static istreambuf_iterator_wchar
* num_get_do_get_int64(const num_get
*this,
4810 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
4811 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
4812 LONGLONG
*pval
, numpunct_wchar
*numpunct
)
4818 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4820 v
= _Stollx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
4821 &last
, base
->fmtfl
, base
->loc
, numpunct
), &err
);
4822 if(end
!=tmp
&& !err
)
4825 *state
|= IOSTATE_failbit
;
4828 *state
|= IOSTATE_eofbit
;
4834 /* ?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 */
4835 /* ?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 */
4836 #define call_num_get_wchar_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_wchar*, \
4837 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONGLONG*), \
4838 (this, ret, first, last, base, state, pval))
4839 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_int64
,36)
4840 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4841 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
4843 return num_get_do_get_int64(this, ret
, first
, last
, base
,
4844 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
4847 /* ?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 */
4848 /* ?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 */
4849 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_int64
,36)
4850 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4851 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
4853 return num_get_do_get_int64(this, ret
, first
, last
, base
,
4854 state
, pval
, numpunct_short_use_facet(base
->loc
));
4857 /* ?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 */
4858 /* ?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 */
4859 /* ?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 */
4860 /* ?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 */
4861 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_int64
,36)
4862 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4863 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
4865 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4866 return call_num_get_wchar_do_get_int64(this, ret
, first
, last
, base
, state
, pval
);
4869 static istreambuf_iterator_wchar
* num_get_do_get_ulong(const num_get
*this,
4870 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
4871 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
4872 ULONG
*pval
, numpunct_wchar
*numpunct
)
4878 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4880 v
= _Stoulx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
4881 &last
, base
->fmtfl
, base
->loc
, numpunct
), &err
);
4882 if(end
!=tmp
&& !err
)
4885 *state
|= IOSTATE_failbit
;
4888 *state
|= IOSTATE_eofbit
;
4894 /* ?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 */
4895 /* ?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 */
4896 #define call_num_get_wchar_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_wchar*, \
4897 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONG*), \
4898 (this, ret, first, last, base, state, pval))
4899 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_ulong
,36)
4900 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4901 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
4903 return num_get_do_get_ulong(this, ret
, first
, last
, base
,
4904 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
4907 /* ?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 */
4908 /* ?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 */
4909 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_ulong
,36)
4910 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4911 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
4913 return num_get_do_get_ulong(this, ret
, first
, last
, base
,
4914 state
, pval
, numpunct_short_use_facet(base
->loc
));
4917 /* ?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 */
4918 /* ?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 */
4919 /* ?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 */
4920 /* ?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 */
4921 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ulong
,36)
4922 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4923 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
4925 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4926 return call_num_get_wchar_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
4929 static istreambuf_iterator_wchar
* num_get_do_get_long(const num_get
*this,
4930 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
4931 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
4932 LONG
*pval
, numpunct_wchar
*numpunct
)
4938 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4940 v
= _Stolx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
4941 &last
, base
->fmtfl
, base
->loc
, numpunct
), &err
);
4942 if(end
!=tmp
&& !err
)
4945 *state
|= IOSTATE_failbit
;
4948 *state
|= IOSTATE_eofbit
;
4954 /* ?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 */
4955 /* ?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 */
4956 #define call_num_get_wchar_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_wchar*, \
4957 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONG*), \
4958 (this, ret, first, last, base, state, pval))
4959 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_long
,36)
4960 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4961 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
4963 return num_get_do_get_long(this, ret
, first
, last
, base
,
4964 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
4967 /* ?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 */
4968 /* ?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 */
4969 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_long
,36)
4970 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4971 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
4973 return num_get_do_get_long(this, ret
, first
, last
, base
,
4974 state
, pval
, numpunct_short_use_facet(base
->loc
));
4977 /* ?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 */
4978 /* ?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 */
4979 /* ?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 */
4980 /* ?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 */
4981 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_long
,36)
4982 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4983 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
4985 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4986 return call_num_get_wchar_do_get_long(this, ret
, first
, last
, base
, state
, pval
);
4989 /* ?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 */
4990 /* ?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 */
4991 #define call_num_get_wchar_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_wchar*, \
4992 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned int*), \
4993 (this, ret, first, last, base, state, pval))
4994 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_uint
,36)
4995 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4996 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
4998 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4999 return num_get_wchar_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
5002 /* ?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 */
5003 /* ?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 */
5004 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_uint
,36)
5005 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5006 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
5008 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5009 return num_get_short_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
5012 /* ?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 */
5013 /* ?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 */
5014 /* ?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 */
5015 /* ?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 */
5016 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_uint
,36)
5017 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5018 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
5020 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5021 return call_num_get_wchar_do_get_uint(this, ret
, first
, last
, base
, state
, pval
);
5024 /* ?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 */
5025 /* ?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 */
5026 #define call_num_get_wchar_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_wchar*, \
5027 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned short*), \
5028 (this, ret, first, last, base, state, pval))
5029 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_ushort
,36)
5030 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5031 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
5034 char tmp
[25], *beg
, *end
;
5037 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5039 b
= num_get_wchar__Getifld(this, tmp
,
5040 &first
, &last
, base
->fmtfl
, base
->loc
);
5041 beg
= tmp
+ (tmp
[0]=='-' ? 1 : 0);
5042 v
= _Stoulx(beg
, &end
, b
, &err
);
5044 if(v
!= (ULONG
)((unsigned short)v
))
5045 *state
|= IOSTATE_failbit
;
5046 else if(end
!=beg
&& !err
)
5047 *pval
= (tmp
[0]=='-' ? -((unsigned short)v
) : v
);
5049 *state
|= IOSTATE_failbit
;
5052 *state
|= IOSTATE_eofbit
;
5058 /* ?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 */
5059 /* ?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 */
5060 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_ushort
,36)
5061 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5062 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
5064 FIXME("(%p %p %p %p %p) stub\n", this, ret
, base
, state
, pval
);
5068 /* ?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 */
5069 /* ?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 */
5070 /* ?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@ */
5071 /* ?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 */
5072 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ushort
,36)
5073 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5074 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
5076 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5077 return call_num_get_wchar_do_get_ushort(this, ret
, first
, last
, base
, state
, pval
);
5080 static istreambuf_iterator_wchar
* num_get_do_get_bool(const num_get
*this,
5081 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5082 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5083 MSVCP_bool
*pval
, numpunct_wchar
*numpunct
)
5085 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5087 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
5088 basic_string_wchar false_bstr
, true_bstr
;
5089 const wchar_t *pfalse
, *ptrue
;
5091 numpunct_wchar_falsename(numpunct
, &false_bstr
);
5092 numpunct_wchar_truename(numpunct
, &true_bstr
);
5093 pfalse
= MSVCP_basic_string_wchar_c_str(&false_bstr
);
5094 ptrue
= MSVCP_basic_string_wchar_c_str(&true_bstr
);
5096 for(istreambuf_iterator_wchar_val(&first
); first
.strbuf
;
5097 istreambuf_iterator_wchar_inc(&first
)) {
5098 if(pfalse
&& *pfalse
&& first
.val
!=*pfalse
)
5100 if(ptrue
&& *ptrue
&& first
.val
!=*ptrue
)
5103 if(pfalse
&& *pfalse
&& ptrue
&& !*ptrue
)
5105 if(ptrue
&& *ptrue
&& pfalse
&& !*pfalse
)
5113 if((!pfalse
|| !*pfalse
) && (!ptrue
|| !*ptrue
))
5122 *state
|= IOSTATE_failbit
;
5124 MSVCP_basic_string_wchar_dtor(&false_bstr
);
5125 MSVCP_basic_string_wchar_dtor(&true_bstr
);
5129 LONG v
= _Stolx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5130 &last
, base
->fmtfl
, base
->loc
, numpunct
), &err
);
5132 if(end
!=tmp
&& err
==0 && (v
==0 || v
==1))
5135 *state
|= IOSTATE_failbit
;
5139 *state
|= IOSTATE_eofbit
;
5140 memcpy(ret
, &first
, sizeof(first
));
5144 /* ?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 */
5145 /* ?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 */
5146 #define call_num_get_wchar_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_wchar*, \
5147 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, MSVCP_bool*), \
5148 (this, ret, first, last, base, state, pval))
5149 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_bool
,36)
5150 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5151 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, MSVCP_bool
*pval
)
5153 return num_get_do_get_bool(this, ret
, first
, last
, base
,
5154 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
5157 /* ?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 */
5158 /* ?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 */
5159 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_bool
,36)
5160 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5161 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, MSVCP_bool
*pval
)
5163 return num_get_do_get_bool(this, ret
, first
, last
, base
,
5164 state
, pval
, numpunct_short_use_facet(base
->loc
));
5167 /* ?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 */
5168 /* ?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 */
5169 /* ?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 */
5170 /* ?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 */
5171 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_bool
,36)
5172 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5173 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, MSVCP_bool
*pval
)
5175 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5176 return call_num_get_wchar_do_get_bool(this, ret
, first
, last
, base
, state
, pval
);
5179 /* ?id@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
5180 locale_id num_get_char_id
= {0};
5182 /* ??_7?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
5183 extern const vtable_ptr MSVCP_num_get_char_vtable
;
5185 /* ?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
5186 /* ?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
5187 DEFINE_THISCALL_WRAPPER(num_get_char__Init
, 8)
5188 void __thiscall
num_get_char__Init(num_get
*this, const _Locinfo
*locinfo
)
5190 TRACE("(%p %p)\n", this, locinfo
);
5191 _Locinfo__Getcvt(locinfo
, &this->cvt
);
5194 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
5195 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
5196 DEFINE_THISCALL_WRAPPER(num_get_char_ctor_locinfo
, 12)
5197 num_get
* __thiscall
num_get_char_ctor_locinfo(num_get
*this,
5198 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
5200 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
5202 locale_facet_ctor_refs(&this->facet
, refs
);
5203 this->facet
.vtable
= &MSVCP_num_get_char_vtable
;
5205 num_get_char__Init(this, locinfo
);
5209 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
5210 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
5211 DEFINE_THISCALL_WRAPPER(num_get_char_ctor_refs
, 8)
5212 num_get
* __thiscall
num_get_char_ctor_refs(num_get
*this, MSVCP_size_t refs
)
5216 TRACE("(%p %lu)\n", this, refs
);
5218 _Locinfo_ctor(&locinfo
);
5219 num_get_char_ctor_locinfo(this, &locinfo
, refs
);
5220 _Locinfo_dtor(&locinfo
);
5224 /* ??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
5225 /* ??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
5226 DEFINE_THISCALL_WRAPPER(num_get_char_ctor
, 4)
5227 num_get
* __thiscall
num_get_char_ctor(num_get
*this)
5229 return num_get_char_ctor_refs(this, 0);
5232 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
5233 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
5234 DEFINE_THISCALL_WRAPPER(num_get_char_dtor
, 4)
5235 void __thiscall
num_get_char_dtor(num_get
*this)
5237 TRACE("(%p)\n", this);
5238 locale_facet_dtor(&this->facet
);
5241 DEFINE_THISCALL_WRAPPER(num_get_char_vector_dtor
, 8)
5242 num_get
* __thiscall
num_get_char_vector_dtor(num_get
*this, unsigned int flags
)
5244 TRACE("(%p %x)\n", this, flags
);
5246 /* we have an array, with the number of elements stored before the first object */
5247 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
5249 for(i
=*ptr
-1; i
>=0; i
--)
5250 num_get_char_dtor(this+i
);
5251 MSVCRT_operator_delete(ptr
);
5253 num_get_char_dtor(this);
5255 MSVCRT_operator_delete(this);
5261 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
5262 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
5263 static MSVCP_size_t
num_get_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
5265 TRACE("(%p %p)\n", facet
, loc
);
5267 if(facet
&& !*facet
) {
5270 *facet
= MSVCRT_operator_new(sizeof(num_get
));
5272 ERR("Out of memory\n");
5273 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
5277 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
5278 num_get_char_ctor_locinfo((num_get
*)*facet
, &locinfo
, 0);
5279 _Locinfo_dtor(&locinfo
);
5285 num_get
* num_get_char_use_facet(const locale
*loc
)
5287 static num_get
*obj
= NULL
;
5290 const locale_facet
*fac
;
5292 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
5293 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_char_id
));
5295 _Lockit_dtor(&lock
);
5296 return (num_get
*)fac
;
5300 _Lockit_dtor(&lock
);
5304 num_get_char__Getcat(&fac
, loc
);
5305 obj
= (num_get
*)fac
;
5306 locale_facet__Incref(&obj
->facet
);
5307 locale_facet_register(&obj
->facet
);
5308 _Lockit_dtor(&lock
);
5313 /* ?_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 */
5314 /* ?_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 */
5315 /* Copies number to dest buffer, validates grouping and skips separators.
5316 * Updates first so it points past the number, all digits are skipped.
5317 * Returns how exponent needs to changed.
5318 * Size of dest buffer is not specified, assuming it's not smaller than 32:
5319 * strlen(+0.e+) + 22(digits) + 4(expontent) + 1(nullbyte)
5321 int __cdecl
num_get_char__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_char
*first
,
5322 istreambuf_iterator_char
*last
, const locale
*loc
)
5324 numpunct_char
*numpunct
= numpunct_char_use_facet(loc
);
5325 basic_string_char grouping_bstr
;
5326 basic_string_char groups_found
;
5327 int groups_no
= 0, cur_group
= 0, exp
= 0;
5328 char *dest_beg
= dest
, *num_end
= dest
+25, *exp_end
= dest
+31, sep
;
5329 const char *grouping
, *groups
;
5330 BOOL error
= FALSE
, got_digit
= FALSE
, got_nonzero
= FALSE
;
5332 TRACE("(%p %p %p %p)\n", dest
, first
, last
, loc
);
5334 numpunct_char_grouping(numpunct
, &grouping_bstr
);
5335 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
5336 sep
= grouping
[0] ? numpunct_char_thousands_sep(numpunct
) : '\0';
5339 MSVCP_basic_string_char_ctor(&groups_found
);
5341 istreambuf_iterator_char_val(first
);
5343 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
5344 *dest
++ = first
->val
;
5345 istreambuf_iterator_char_inc(first
);
5348 /* read possibly grouped numbers before decimal */
5349 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
5350 if(first
->val
<'0' || first
->val
>'9') {
5351 if(sep
&& first
->val
==sep
) {
5352 if(!groups_no
) break; /* empty group - stop parsing */
5353 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5360 got_digit
= TRUE
; /* found a digit, zero or non-zero */
5361 /* write digit to dest if not a leading zero (to not waste dest buffer) */
5362 if(!got_nonzero
&& first
->val
== '0')
5369 *dest
++ = first
->val
;
5371 exp
++; /* too many digits, just multiply by 10 */
5372 if(sep
&& groups_no
<CHAR_MAX
)
5377 /* if all leading zeroes, we didn't write anything so put a zero we check for a decimal */
5378 if(got_digit
&& !got_nonzero
)
5381 /* get decimal, if any */
5382 if(first
->strbuf
&& first
->val
==numpunct_char_decimal_point(numpunct
)) {
5384 *dest
++ = *localeconv()->decimal_point
;
5385 istreambuf_iterator_char_inc(first
);
5388 /* read non-grouped after decimal */
5389 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
5390 if(first
->val
<'0' || first
->val
>'9')
5392 else if(dest
<num_end
) {
5394 *dest
++ = first
->val
;
5398 /* read exponent, if any */
5399 if(first
->strbuf
&& (first
->val
=='e' || first
->val
=='E')) {
5400 *dest
++ = first
->val
;
5401 istreambuf_iterator_char_inc(first
);
5403 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
5404 *dest
++ = first
->val
;
5405 istreambuf_iterator_char_inc(first
);
5408 got_digit
= got_nonzero
= FALSE
;
5410 /* skip any leading zeroes */
5411 for(; first
->strbuf
&& first
->val
=='0'; istreambuf_iterator_char_inc(first
))
5414 for(; first
->strbuf
&& first
->val
>='0' && first
->val
<='9'; istreambuf_iterator_char_inc(first
)) {
5415 got_digit
= got_nonzero
= TRUE
; /* leading zeroes would have been skipped, so first digit is non-zero */
5418 *dest
++ = first
->val
;
5421 /* if just found zeroes for exponent, use that */
5422 if(got_digit
&& !got_nonzero
)
5430 if(sep
&& groups_no
)
5431 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5433 if(!cur_group
) /* no groups, skip loop */
5435 else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
])
5436 error
= TRUE
; /* trailing empty */
5438 for(; cur_group
>=0 && !error
; cur_group
--) {
5439 if(*grouping
== CHAR_MAX
) {
5443 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
5444 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
5447 }else if(grouping
[1]) {
5451 MSVCP_basic_string_char_dtor(&grouping_bstr
);
5453 MSVCP_basic_string_char_dtor(&groups_found
);
5463 /* ?_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 */
5464 /* ?_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 */
5465 /* Copies number to dest buffer, validates grouping and skips separators.
5466 * Updates first so it points past the number, all digits are skipped.
5467 * Returns number base (8, 10 or 16).
5468 * Size of dest buffer is not specified, assuming it's not smaller than 25:
5469 * 22(8^22>2^64)+1(detect overflows)+1(sign)+1(nullbyte) = 25
5471 int __cdecl
num_get_char__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_char
*first
,
5472 istreambuf_iterator_char
*last
, int fmtflags
, const locale
*loc
)
5474 static const char digits
[] = "0123456789abcdefABCDEF";
5476 numpunct_char
*numpunct
= numpunct_char_use_facet(loc
);
5477 basic_string_char grouping_bstr
;
5478 basic_string_char groups_found
;
5479 int basefield
, base
, groups_no
= 0, cur_group
= 0;
5480 char *dest_beg
= dest
, *dest_end
= dest
+24, sep
;
5481 const char *grouping
, *groups
;
5482 BOOL error
= TRUE
, dest_empty
= TRUE
, found_zero
= FALSE
;
5484 TRACE("(%p %p %p %04x %p)\n", dest
, first
, last
, fmtflags
, loc
);
5486 numpunct_char_grouping(numpunct
, &grouping_bstr
);
5487 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
5488 sep
= grouping
[0] ? numpunct_char_thousands_sep(numpunct
) : '\0';
5490 basefield
= fmtflags
& FMTFLAG_basefield
;
5491 if(basefield
== FMTFLAG_oct
)
5493 else if(basefield
== FMTFLAG_hex
)
5494 base
= 22; /* equal to the size of digits buffer */
5500 istreambuf_iterator_char_val(first
);
5501 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
5502 *dest
++ = first
->val
;
5503 istreambuf_iterator_char_inc(first
);
5506 if(first
->strbuf
&& first
->val
=='0') {
5508 istreambuf_iterator_char_inc(first
);
5509 if(first
->strbuf
&& (first
->val
=='x' || first
->val
=='X')) {
5510 if(!base
|| base
== 22) {
5512 istreambuf_iterator_char_inc(first
);
5522 if (!base
) base
= 10;
5527 MSVCP_basic_string_char_ctor(&groups_found
);
5528 if(found_zero
) ++groups_no
;
5531 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
5532 if(!memchr(digits
, first
->val
, base
)) {
5533 if(sep
&& first
->val
==sep
) {
5534 if(!groups_no
) break; /* empty group - stop parsing */
5535 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5543 if(dest_empty
&& first
->val
== '0')
5550 /* skip digits that can't be copied to dest buffer, other
5551 * functions are responsible for detecting overflows */
5553 *dest
++ = first
->val
;
5554 if(sep
&& groups_no
<CHAR_MAX
)
5559 if(sep
&& groups_no
)
5560 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5562 if(!cur_group
) { /* no groups, skip loop */
5564 }else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
]) {
5565 error
= TRUE
; /* trailing empty */
5569 for(; cur_group
>=0 && !error
; cur_group
--) {
5570 if(*grouping
== CHAR_MAX
) {
5574 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
5575 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
5578 }else if(grouping
[1]) {
5583 MSVCP_basic_string_char_dtor(&grouping_bstr
);
5585 MSVCP_basic_string_char_dtor(&groups_found
);
5592 }else if(dest_empty
)
5596 return (base
==22 ? 16 : base
);
5599 /* ?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 */
5600 /* ?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 */
5601 #define call_num_get_char_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 4, istreambuf_iterator_char*, \
5602 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, void**), \
5603 (this, ret, first, last, base, state, pval))
5604 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_void
,36)
5605 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_void(const num_get
*this, istreambuf_iterator_char
*ret
,
5606 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, void **pval
)
5612 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5614 v
= _Stoullx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
5615 &first
, &last
, FMTFLAG_hex
, base
->loc
), &err
);
5616 if(v
!=(unsigned __int64
)((INT_PTR
)v
))
5617 *state
|= IOSTATE_failbit
;
5618 else if(end
!=tmp
&& !err
)
5619 *pval
= (void*)((INT_PTR
)v
);
5621 *state
|= IOSTATE_failbit
;
5624 *state
|= IOSTATE_eofbit
;
5630 /* ?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 */
5631 /* ?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 */
5632 DEFINE_THISCALL_WRAPPER(num_get_char_get_void
,36)
5633 istreambuf_iterator_char
*__thiscall
num_get_char_get_void(const num_get
*this, istreambuf_iterator_char
*ret
,
5634 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, void **pval
)
5636 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5637 return call_num_get_char_do_get_void(this, ret
, first
, last
, base
, state
, pval
);
5640 /* ?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 */
5641 /* ?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 */
5642 /* ?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 */
5643 /* ?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 */
5644 #define call_num_get_char_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_char*, \
5645 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
5646 (this, ret, first, last, base, state, pval))
5647 #define call_num_get_char_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_char*, \
5648 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
5649 (this, ret, first, last, base, state, pval))
5650 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_double
,36)
5651 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_double(const num_get
*this, istreambuf_iterator_char
*ret
,
5652 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
5658 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5660 v
= _Stodx(tmp
, &end
, num_get_char__Getffld(this, tmp
, &first
, &last
, base
->loc
), &err
);
5661 if(end
!=tmp
&& !err
)
5664 *state
|= IOSTATE_failbit
;
5667 *state
|= IOSTATE_eofbit
;
5673 /* ?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 */
5674 /* ?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 */
5675 DEFINE_THISCALL_WRAPPER(num_get_char_get_ldouble
,36)
5676 istreambuf_iterator_char
*__thiscall
num_get_char_get_ldouble(const num_get
*this, istreambuf_iterator_char
*ret
,
5677 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
5679 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5680 return call_num_get_char_do_get_ldouble(this, ret
, first
, last
, base
, state
, pval
);
5683 /* ?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 */
5684 /* ?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 */
5685 DEFINE_THISCALL_WRAPPER(num_get_char_get_double
,36)
5686 istreambuf_iterator_char
*__thiscall
num_get_char_get_double(const num_get
*this, istreambuf_iterator_char
*ret
,
5687 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
5689 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5690 return call_num_get_char_do_get_double(this, ret
, first
, last
, base
, state
, pval
);
5693 /* ?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 */
5694 /* ?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 */
5695 #define call_num_get_char_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_char*, \
5696 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, float*), \
5697 (this, ret, first, last, base, state, pval))
5698 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_float
,36)
5699 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_float(const num_get
*this, istreambuf_iterator_char
*ret
,
5700 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, float *pval
)
5706 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5708 v
= _Stofx(tmp
, &end
, num_get_char__Getffld(this, tmp
, &first
, &last
, base
->loc
), &err
);
5709 if(end
!=tmp
&& !err
)
5712 *state
|= IOSTATE_failbit
;
5715 *state
|= IOSTATE_eofbit
;
5721 /* ?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 */
5722 /* ?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 */
5723 DEFINE_THISCALL_WRAPPER(num_get_char_get_float
,36)
5724 istreambuf_iterator_char
*__thiscall
num_get_char_get_float(const num_get
*this, istreambuf_iterator_char
*ret
,
5725 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, float *pval
)
5727 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5728 return call_num_get_char_do_get_float(this, ret
, first
, last
, base
, state
, pval
);
5731 /* ?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 */
5732 /* ?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 */
5733 #define call_num_get_char_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_char*, \
5734 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONGLONG*), \
5735 (this, ret, first, last, base, state, pval))
5736 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_uint64
,36)
5737 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_uint64(const num_get
*this, istreambuf_iterator_char
*ret
,
5738 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
5744 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5746 v
= _Stoullx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
5747 &first
, &last
, base
->fmtfl
, base
->loc
), &err
);
5748 if(end
!=tmp
&& !err
)
5751 *state
|= IOSTATE_failbit
;
5754 *state
|= IOSTATE_eofbit
;
5760 /* ?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 */
5761 /* ?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 */
5762 DEFINE_THISCALL_WRAPPER(num_get_char_get_uint64
,36)
5763 istreambuf_iterator_char
*__thiscall
num_get_char_get_uint64(const num_get
*this, istreambuf_iterator_char
*ret
,
5764 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
5766 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5767 return call_num_get_char_do_get_uint64(this, ret
, first
, last
, base
, state
, pval
);
5770 /* ?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 */
5771 /* ?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 */
5772 #define call_num_get_char_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_char*, \
5773 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONGLONG*), \
5774 (this, ret, first, last, base, state, pval))
5775 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_int64
,36)
5776 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_int64(const num_get
*this, istreambuf_iterator_char
*ret
,
5777 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
5783 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5785 v
= _Stollx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
5786 &first
, &last
, base
->fmtfl
, base
->loc
), &err
);
5787 if(end
!=tmp
&& !err
)
5790 *state
|= IOSTATE_failbit
;
5793 *state
|= IOSTATE_eofbit
;
5799 /* ?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 */
5800 /* ?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 */
5801 DEFINE_THISCALL_WRAPPER(num_get_char_get_int64
,36)
5802 istreambuf_iterator_char
*__thiscall
num_get_char_get_int64(const num_get
*this, istreambuf_iterator_char
*ret
,
5803 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
5805 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5806 return call_num_get_char_do_get_int64(this, ret
, first
, last
, base
, state
, pval
);
5809 /* ?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 */
5810 /* ?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 */
5811 #define call_num_get_char_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_char*, \
5812 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONG*), \
5813 (this, ret, first, last, base, state, pval))
5814 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_ulong
,36)
5815 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_ulong(const num_get
*this, istreambuf_iterator_char
*ret
,
5816 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONG
*pval
)
5822 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5824 v
= _Stoulx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
5825 &first
, &last
, base
->fmtfl
, base
->loc
), &err
);
5826 if(end
!=tmp
&& !err
)
5829 *state
|= IOSTATE_failbit
;
5832 *state
|= IOSTATE_eofbit
;
5838 /* ?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 */
5839 /* ?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 */
5840 DEFINE_THISCALL_WRAPPER(num_get_char_get_ulong
,36)
5841 istreambuf_iterator_char
*__thiscall
num_get_char_get_ulong(const num_get
*this, istreambuf_iterator_char
*ret
,
5842 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONG
*pval
)
5844 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5845 return call_num_get_char_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
5848 /* ?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 */
5849 /* ?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 */
5850 #define call_num_get_char_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_char*, \
5851 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONG*), \
5852 (this, ret, first, last, base, state, pval))
5853 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_long
,36)
5854 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_long(const num_get
*this, istreambuf_iterator_char
*ret
,
5855 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONG
*pval
)
5861 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5863 v
= _Stolx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
5864 &first
, &last
, base
->fmtfl
, base
->loc
), &err
);
5865 if(end
!=tmp
&& !err
)
5868 *state
|= IOSTATE_failbit
;
5871 *state
|= IOSTATE_eofbit
;
5877 /* ?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 */
5878 /* ?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 */
5879 DEFINE_THISCALL_WRAPPER(num_get_char_get_long
,36)
5880 istreambuf_iterator_char
*__thiscall
num_get_char_get_long(const num_get
*this, istreambuf_iterator_char
*ret
,
5881 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONG
*pval
)
5883 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5884 return call_num_get_char_do_get_long(this, ret
, first
, last
, base
, state
, pval
);
5887 /* ?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 */
5888 /* ?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 */
5889 #define call_num_get_char_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_char*, \
5890 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned int*), \
5891 (this, ret, first, last, base, state, pval))
5892 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_uint
,36)
5893 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_uint(const num_get
*this, istreambuf_iterator_char
*ret
,
5894 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned int *pval
)
5896 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5897 return num_get_char_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
5900 /* ?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 */
5901 /* ?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 */
5902 DEFINE_THISCALL_WRAPPER(num_get_char_get_uint
,36)
5903 istreambuf_iterator_char
*__thiscall
num_get_char_get_uint(const num_get
*this, istreambuf_iterator_char
*ret
,
5904 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned int *pval
)
5906 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5907 return call_num_get_char_do_get_uint(this, ret
, first
, last
, base
, state
, pval
);
5910 /* ?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 */
5911 /* ?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 */
5912 #define call_num_get_char_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_char*, \
5913 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned short*), \
5914 (this, ret, first, last, base, state, pval))
5915 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_ushort
,36)
5916 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_ushort(const num_get
*this, istreambuf_iterator_char
*ret
,
5917 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned short *pval
)
5920 char tmp
[25], *beg
, *end
;
5923 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5925 b
= num_get_char__Getifld(this, tmp
,
5926 &first
, &last
, base
->fmtfl
, base
->loc
);
5927 beg
= tmp
+ (tmp
[0]=='-' ? 1 : 0);
5928 v
= _Stoulx(beg
, &end
, b
, &err
);
5930 if(v
!= (ULONG
)((unsigned short)v
))
5931 *state
|= IOSTATE_failbit
;
5932 else if(end
!=beg
&& !err
)
5933 *pval
= (tmp
[0]=='-' ? -((unsigned short)v
) : v
);
5935 *state
|= IOSTATE_failbit
;
5938 *state
|= IOSTATE_eofbit
;
5944 /* ?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 */
5945 /* ?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 */
5946 DEFINE_THISCALL_WRAPPER(num_get_char_get_ushort
,36)
5947 istreambuf_iterator_char
*__thiscall
num_get_char_get_ushort(const num_get
*this, istreambuf_iterator_char
*ret
,
5948 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned short *pval
)
5950 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5951 return call_num_get_char_do_get_ushort(this, ret
, first
, last
, base
, state
, pval
);
5954 /* ?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 */
5955 /* ?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 */
5956 #define call_num_get_char_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_char*, \
5957 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, MSVCP_bool*), \
5958 (this, ret, first, last, base, state, pval))
5959 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_bool
,36)
5960 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_bool(const num_get
*this, istreambuf_iterator_char
*ret
,
5961 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, MSVCP_bool
*pval
)
5963 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5965 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
5966 numpunct_char
*numpunct
= numpunct_char_use_facet(base
->loc
);
5967 basic_string_char false_bstr
, true_bstr
;
5968 const char *pfalse
, *ptrue
;
5970 numpunct_char_falsename(numpunct
, &false_bstr
);
5971 numpunct_char_truename(numpunct
, &true_bstr
);
5972 pfalse
= MSVCP_basic_string_char_c_str(&false_bstr
);
5973 ptrue
= MSVCP_basic_string_char_c_str(&true_bstr
);
5975 for(istreambuf_iterator_char_val(&first
); first
.strbuf
;
5976 istreambuf_iterator_char_inc(&first
)) {
5977 if(pfalse
&& *pfalse
&& first
.val
!=*pfalse
)
5979 if(ptrue
&& *ptrue
&& first
.val
!=*ptrue
)
5982 if(pfalse
&& *pfalse
&& ptrue
&& !*ptrue
)
5984 if(ptrue
&& *ptrue
&& pfalse
&& !*pfalse
)
5992 if((!pfalse
|| !*pfalse
) && (!ptrue
|| !*ptrue
))
6001 *state
|= IOSTATE_failbit
;
6003 MSVCP_basic_string_char_dtor(&false_bstr
);
6004 MSVCP_basic_string_char_dtor(&true_bstr
);
6008 LONG v
= _Stolx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6009 &first
, &last
, base
->fmtfl
, base
->loc
), &err
);
6011 if(end
!=tmp
&& err
==0 && (v
==0 || v
==1))
6014 *state
|= IOSTATE_failbit
;
6018 *state
|= IOSTATE_eofbit
;
6019 memcpy(ret
, &first
, sizeof(first
));
6023 /* ?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 */
6024 /* ?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 */
6025 DEFINE_THISCALL_WRAPPER(num_get_char_get_bool
,36)
6026 istreambuf_iterator_char
*__thiscall
num_get_char_get_bool(const num_get
*this, istreambuf_iterator_char
*ret
,
6027 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, MSVCP_bool
*pval
)
6029 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6030 return call_num_get_char_do_get_bool(this, ret
, first
, last
, base
, state
, pval
);
6033 /* ?id@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
6034 locale_id num_put_char_id
= {0};
6036 /* num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
6037 extern const vtable_ptr MSVCP_num_put_char_vtable
;
6039 /* ?_Init@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
6040 /* ?_Init@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
6041 DEFINE_THISCALL_WRAPPER(num_put_char__Init
, 8)
6042 void __thiscall
num_put_char__Init(num_put
*this, const _Locinfo
*locinfo
)
6044 TRACE("(%p %p)\n", this, locinfo
);
6045 _Locinfo__Getcvt(locinfo
, &this->cvt
);
6048 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
6049 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
6050 DEFINE_THISCALL_WRAPPER(num_put_char_ctor_locinfo
, 12)
6051 num_put
* __thiscall
num_put_char_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
6053 TRACE("(%p %p %ld)\n", this, locinfo
, refs
);
6055 locale_facet_ctor_refs(&this->facet
, refs
);
6056 this->facet
.vtable
= &MSVCP_num_put_char_vtable
;
6058 num_put_char__Init(this, locinfo
);
6062 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
6063 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
6064 DEFINE_THISCALL_WRAPPER(num_put_char_ctor_refs
, 8)
6065 num_put
* __thiscall
num_put_char_ctor_refs(num_put
*this, MSVCP_size_t refs
)
6069 TRACE("(%p %lu)\n", this, refs
);
6071 _Locinfo_ctor(&locinfo
);
6072 num_put_char_ctor_locinfo(this, &locinfo
, refs
);
6073 _Locinfo_dtor(&locinfo
);
6077 /* ??_F?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
6078 /* ??_F?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
6079 DEFINE_THISCALL_WRAPPER(num_put_char_ctor
, 4)
6080 num_put
* __thiscall
num_put_char_ctor(num_put
*this)
6082 return num_put_char_ctor_refs(this, 0);
6085 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
6086 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
6087 DEFINE_THISCALL_WRAPPER(num_put_char_dtor
, 4)
6088 void __thiscall
num_put_char_dtor(num_put
*this)
6090 TRACE("(%p)\n", this);
6091 locale_facet_dtor(&this->facet
);
6094 DEFINE_THISCALL_WRAPPER(num_put_char_vector_dtor
, 8)
6095 num_put
* __thiscall
num_put_char_vector_dtor(num_put
*this, unsigned int flags
)
6097 TRACE("(%p %x)\n", this, flags
);
6099 /* we have an array, with the number of elements stored before the first object */
6100 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
6102 for(i
=*ptr
-1; i
>=0; i
--)
6103 num_put_char_dtor(this+i
);
6104 MSVCRT_operator_delete(ptr
);
6106 num_put_char_dtor(this);
6108 MSVCRT_operator_delete(this);
6114 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
6115 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
6116 static MSVCP_size_t
num_put_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
6118 TRACE("(%p %p)\n", facet
, loc
);
6120 if(facet
&& !*facet
) {
6123 *facet
= MSVCRT_operator_new(sizeof(num_put
));
6125 ERR("Out of memory\n");
6126 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
6130 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
6131 num_put_char_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
6132 _Locinfo_dtor(&locinfo
);
6138 num_put
* num_put_char_use_facet(const locale
*loc
)
6140 static num_put
*obj
= NULL
;
6143 const locale_facet
*fac
;
6145 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
6146 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_char_id
));
6148 _Lockit_dtor(&lock
);
6149 return (num_put
*)fac
;
6153 _Lockit_dtor(&lock
);
6157 num_put_char__Getcat(&fac
, loc
);
6158 obj
= (num_put
*)fac
;
6159 locale_facet__Incref(&obj
->facet
);
6160 locale_facet_register(&obj
->facet
);
6161 _Lockit_dtor(&lock
);
6166 /* ?_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 */
6167 /* ?_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 */
6168 ostreambuf_iterator_char
* __cdecl
num_put_char__Put(const num_put
*this, ostreambuf_iterator_char
*ret
,
6169 ostreambuf_iterator_char dest
, const char *ptr
, MSVCP_size_t count
)
6171 TRACE("(%p %p %p %ld)\n", this, ret
, ptr
, count
);
6173 for(; count
>0; count
--)
6174 ostreambuf_iterator_char_put(&dest
, *ptr
++);
6180 /* ?_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 */
6181 /* ?_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 */
6182 ostreambuf_iterator_char
* __cdecl
num_put_char__Putc(const num_put
*this, ostreambuf_iterator_char
*ret
,
6183 ostreambuf_iterator_char dest
, const char *ptr
, MSVCP_size_t count
)
6185 TRACE("(%p %p %p %ld)\n", this, ret
, ptr
, count
);
6187 for(; count
>0; count
--)
6188 ostreambuf_iterator_char_put(&dest
, *ptr
++);
6194 /* ?_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 */
6195 /* ?_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 */
6196 ostreambuf_iterator_char
* __cdecl
num_put_char__Putgrouped(const num_put
*this, ostreambuf_iterator_char
*ret
,
6197 ostreambuf_iterator_char dest
, const char *ptr
, MSVCP_size_t count
, char delim
)
6199 FIXME("(%p %p %p %ld %d) stub\n", this, ret
, ptr
, count
, delim
);
6203 /* ?_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 */
6204 /* ?_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 */
6205 ostreambuf_iterator_char
* __cdecl
num_put_char__Rep(const num_put
*this, ostreambuf_iterator_char
*ret
,
6206 ostreambuf_iterator_char dest
, char c
, MSVCP_size_t count
)
6208 TRACE("(%p %p %d %ld)\n", this, ret
, c
, count
);
6210 for(; count
>0; count
--)
6211 ostreambuf_iterator_char_put(&dest
, c
);
6217 /* ?_Ffmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAPADPADDH@Z */
6218 /* ?_Ffmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAPEADPEADDH@Z */
6219 char* __cdecl
num_put_char__Ffmt(const num_put
*this, char *fmt
, char spec
, int fmtfl
)
6221 int type
= fmtfl
& FMTFLAG_floatfield
;
6224 TRACE("(%p %p %d %d)\n", this, fmt
, spec
, fmtfl
);
6227 if(fmtfl
& FMTFLAG_showpos
)
6229 if(fmtfl
& FMTFLAG_showbase
)
6236 if(type
== FMTFLAG_fixed
)
6238 else if(type
== FMTFLAG_scientific
)
6239 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'E' : 'e';
6240 else if(type
== (FMTFLAG_fixed
|FMTFLAG_scientific
))
6241 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'A' : 'a';
6243 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'G' : 'g';
6249 /* ?_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 */
6250 /* ?_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 */
6251 ostreambuf_iterator_char
* __cdecl
num_put_char__Fput(const num_put
*this, ostreambuf_iterator_char
*ret
,
6252 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const char *buf
, MSVCP_size_t bef_point
,
6253 MSVCP_size_t aft_point
, MSVCP_size_t trailing
, MSVCP_size_t count
)
6255 FIXME("(%p %p %p %d %p %ld %ld %ld %ld) stub\n", this, ret
, base
,
6256 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
6260 /* TODO: This function should be removed when num_put_char__Fput is implemented */
6261 static ostreambuf_iterator_char
* num_put_char_fput(const num_put
*this, ostreambuf_iterator_char
*ret
,
6262 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, char *buf
, MSVCP_size_t count
)
6264 numpunct_char
*numpunct
= numpunct_char_use_facet(base
->loc
);
6265 basic_string_char grouping_bstr
;
6266 const char *grouping
;
6267 char *p
, sep
= *localeconv()->decimal_point
;
6268 int cur_group
= 0, group_size
= 0;
6269 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
6272 TRACE("(%p %p %p %d %s %ld)\n", this, ret
, base
, fill
, buf
, count
);
6274 /* Change decimal point */
6275 for(p
=buf
; p
<buf
+count
; p
++) {
6277 *p
= numpunct_char_decimal_point(numpunct
);
6283 /* Add separators to number */
6284 numpunct_char_grouping(numpunct
, &grouping_bstr
);
6285 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
6286 sep
= grouping
[0] ? numpunct_char_thousands_sep(numpunct
) : '\0';
6288 for(; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
6290 if(group_size
== grouping
[cur_group
]) {
6292 if(grouping
[cur_group
+1])
6295 memmove(p
+1, p
, buf
+count
-p
);
6300 MSVCP_basic_string_char_dtor(&grouping_bstr
);
6302 /* Display number with padding */
6303 if(count
>= base
->wide
)
6306 pad
= base
->wide
-count
;
6309 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
6310 num_put_char__Putc(this, &dest
, dest
, buf
, 1);
6313 if(adjustfield
!= FMTFLAG_left
) {
6314 num_put_char__Rep(this, ret
, dest
, fill
, pad
);
6317 num_put_char__Putc(this, &dest
, dest
, buf
, count
);
6318 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
6321 /* ?_Ifmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAPADPADPBDH@Z */
6322 /* ?_Ifmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
6323 char* __cdecl
num_put_char__Ifmt(const num_put
*this, char *fmt
, const char *spec
, int fmtfl
)
6325 int base
= fmtfl
& FMTFLAG_basefield
;
6328 TRACE("(%p %p %p %d)\n", this, fmt
, spec
, fmtfl
);
6331 if(fmtfl
& FMTFLAG_showpos
)
6333 if(fmtfl
& FMTFLAG_showbase
)
6340 if(base
== FMTFLAG_oct
)
6342 else if(base
== FMTFLAG_hex
)
6343 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'X' : 'x';
6351 /* ?_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 */
6352 /* ?_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 */
6353 ostreambuf_iterator_char
* __cdecl
num_put_char__Iput(const num_put
*this, ostreambuf_iterator_char
*ret
,
6354 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, char *buf
, MSVCP_size_t count
)
6356 numpunct_char
*numpunct
= numpunct_char_use_facet(base
->loc
);
6357 basic_string_char grouping_bstr
;
6358 const char *grouping
;
6360 int cur_group
= 0, group_size
= 0;
6361 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
6364 TRACE("(%p %p %p %d %s %ld)\n", this, ret
, base
, fill
, buf
, count
);
6366 /* Add separators to number */
6367 numpunct_char_grouping(numpunct
, &grouping_bstr
);
6368 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
6369 sep
= grouping
[0] ? numpunct_char_thousands_sep(numpunct
) : '\0';
6371 for(p
=buf
+count
-1; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
6373 if(group_size
== grouping
[cur_group
]) {
6375 if(grouping
[cur_group
+1])
6378 memmove(p
+1, p
, buf
+count
-p
);
6383 MSVCP_basic_string_char_dtor(&grouping_bstr
);
6385 /* Display number with padding */
6386 if(count
>= base
->wide
)
6389 pad
= base
->wide
-count
;
6392 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
6393 num_put_char__Putc(this, &dest
, dest
, buf
, 1);
6395 }else if((adjustfield
& FMTFLAG_internal
) && (buf
[1]=='x' || buf
[1]=='X')) {
6396 num_put_char__Putc(this, &dest
, dest
, buf
, 2);
6399 if(adjustfield
!= FMTFLAG_left
) {
6400 num_put_char__Rep(this, ret
, dest
, fill
, pad
);
6403 num_put_char__Putc(this, &dest
, dest
, buf
, count
);
6404 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
6407 /* ?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 */
6408 /* ?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 */
6409 #define call_num_put_char_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_char*, \
6410 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, LONG), \
6411 (this, ret, dest, base, fill, v))
6412 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_long
, 28)
6413 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_long(const num_put
*this, ostreambuf_iterator_char
*ret
,
6414 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, LONG v
)
6416 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
6417 char fmt
[7]; /* strlen("%+#lld")+1 */
6419 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
6421 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
6422 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
6425 /* ?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 */
6426 /* ?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 */
6427 DEFINE_THISCALL_WRAPPER(num_put_char_put_long
, 28)
6428 ostreambuf_iterator_char
* __thiscall
num_put_char_put_long(const num_put
*this, ostreambuf_iterator_char
*ret
,
6429 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, LONG v
)
6431 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
6432 return call_num_put_char_do_put_long(this, ret
, dest
, base
, fill
, v
);
6435 /* ?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 */
6436 /* ?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 */
6437 #define call_num_put_char_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_char*, \
6438 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, ULONG), \
6439 (this, ret, dest, base, fill, v))
6440 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ulong
, 28)
6441 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_ulong(const num_put
*this, ostreambuf_iterator_char
*ret
,
6442 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, ULONG v
)
6444 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
6445 char fmt
[7]; /* strlen("%+#lld")+1 */
6447 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
6449 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
6450 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
6453 /* ?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 */
6454 /* ?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 */
6455 DEFINE_THISCALL_WRAPPER(num_put_char_put_ulong
, 28)
6456 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ulong(const num_put
*this, ostreambuf_iterator_char
*ret
,
6457 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, ULONG v
)
6459 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
6460 return call_num_put_char_do_put_ulong(this, ret
, dest
, base
, fill
, v
);
6463 static inline streamsize
get_precision(const ios_base
*base
)
6465 return base
->prec
<= 0 && !(base
->fmtfl
& FMTFLAG_fixed
) ? 6 : base
->prec
;
6468 /* ?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 */
6469 /* ?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 */
6470 /* ?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 */
6471 /* ?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 */
6472 #define call_num_put_char_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_char*, \
6473 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
6474 (this, ret, dest, base, fill, v))
6475 #define call_num_put_char_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 8, ostreambuf_iterator_char*, \
6476 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
6477 (this, ret, dest, base, fill, v))
6478 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_double
, 32)
6479 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_double(const num_put
*this, ostreambuf_iterator_char
*ret
,
6480 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
6483 char fmt
[8]; /* strlen("%+#.*lg")+1 */
6487 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
6489 num_put_char__Ffmt(this, fmt
, '\0', base
->fmtfl
);
6490 prec
= get_precision(base
);
6491 size
= _scprintf(fmt
, prec
, v
);
6493 /* TODO: don't use dynamic allocation */
6494 tmp
= MSVCRT_operator_new(size
*2);
6496 ERR("Out of memory\n");
6497 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
6499 num_put_char_fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, prec
, v
));
6500 MSVCRT_operator_delete(tmp
);
6504 /* ?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 */
6505 /* ?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 */
6506 DEFINE_THISCALL_WRAPPER(num_put_char_put_double
, 32)
6507 ostreambuf_iterator_char
* __thiscall
num_put_char_put_double(const num_put
*this, ostreambuf_iterator_char
*ret
,
6508 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
6510 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
6511 return call_num_put_char_do_put_double(this, ret
, dest
, base
, fill
, v
);
6514 /* ?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 */
6515 /* ?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 */
6516 DEFINE_THISCALL_WRAPPER(num_put_char_put_ldouble
, 32)
6517 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ldouble(const num_put
*this, ostreambuf_iterator_char
*ret
,
6518 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
6520 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
6521 return call_num_put_char_do_put_ldouble(this, ret
, dest
, base
, fill
, v
);
6524 /* ?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 */
6525 /* ?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 */
6526 #define call_num_put_char_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_char*, \
6527 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const void*), \
6528 (this, ret, dest, base, fill, v))
6529 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ptr
, 28)
6530 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_ptr(const num_put
*this, ostreambuf_iterator_char
*ret
,
6531 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const void *v
)
6533 char tmp
[17]; /* 8(16^8==2^64)*2(separators beetwen every digit) + 1 */
6535 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
6537 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
6540 /* ?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 */
6541 /* ?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 */
6542 DEFINE_THISCALL_WRAPPER(num_put_char_put_ptr
, 28)
6543 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ptr(const num_put
*this, ostreambuf_iterator_char
*ret
,
6544 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const void *v
)
6546 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
6547 return call_num_put_char_do_put_ptr(this, ret
, dest
, base
, fill
, v
);
6550 /* ?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 */
6551 /* ?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 */
6552 #define call_num_put_char_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_char*, \
6553 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, __int64), \
6554 (this, ret, dest, base, fill, v))
6555 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_int64
, 32)
6556 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_int64(const num_put
*this, ostreambuf_iterator_char
*ret
,
6557 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, __int64 v
)
6559 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
6560 char fmt
[7]; /* strlen("%+#lld")+1 */
6562 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
6564 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
6565 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
6568 /* ?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 */
6569 /* ?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 */
6570 DEFINE_THISCALL_WRAPPER(num_put_char_put_int64
, 32)
6571 ostreambuf_iterator_char
* __thiscall
num_put_char_put_int64(const num_put
*this, ostreambuf_iterator_char
*ret
,
6572 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, __int64 v
)
6574 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
6575 return call_num_put_char_do_put_int64(this, ret
, dest
, base
, fill
, v
);
6578 /* ?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 */
6579 /* ?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 */
6580 #define call_num_put_char_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_char*, \
6581 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, unsigned __int64), \
6582 (this, ret, dest, base, fill, v))
6583 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_uint64
, 32)
6584 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_uint64(const num_put
*this, ostreambuf_iterator_char
*ret
,
6585 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, unsigned __int64 v
)
6587 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
6588 char fmt
[7]; /* strlen("%+#lld")+1 */
6590 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
6592 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
6593 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
6596 /* ?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 */
6597 /* ?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 */
6598 DEFINE_THISCALL_WRAPPER(num_put_char_put_uint64
, 32)
6599 ostreambuf_iterator_char
* __thiscall
num_put_char_put_uint64(const num_put
*this, ostreambuf_iterator_char
*ret
,
6600 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, unsigned __int64 v
)
6602 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
6603 return call_num_put_char_do_put_uint64(this, ret
, dest
, base
, fill
, v
);
6606 /* ?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 */
6607 /* ?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 */
6608 #define call_num_put_char_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_char*, \
6609 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, MSVCP_bool), \
6610 (this, ret, dest, base, fill, v))
6611 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_bool
, 28)
6612 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_bool(const num_put
*this, ostreambuf_iterator_char
*ret
,
6613 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, MSVCP_bool v
)
6615 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
6617 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
6618 numpunct_char
*numpunct
= numpunct_char_use_facet(base
->loc
);
6619 basic_string_char str
;
6620 MSVCP_size_t pad
, len
;
6623 numpunct_char_truename(numpunct
, &str
);
6625 numpunct_char_falsename(numpunct
, &str
);
6627 len
= MSVCP_basic_string_char_length(&str
);
6628 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
6631 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
6632 num_put_char__Rep(this, &dest
, dest
, fill
, pad
);
6635 num_put_char__Putc(this, &dest
, dest
, MSVCP_basic_string_char_c_str(&str
), len
);
6636 MSVCP_basic_string_char_dtor(&str
);
6637 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
6640 return num_put_char_put_long(this, ret
, dest
, base
, fill
, v
);
6643 /* ?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 */
6644 /* ?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 */
6645 DEFINE_THISCALL_WRAPPER(num_put_char_put_bool
, 28)
6646 ostreambuf_iterator_char
* __thiscall
num_put_char_put_bool(const num_put
*this, ostreambuf_iterator_char
*ret
,
6647 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, MSVCP_bool v
)
6649 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
6650 return call_num_put_char_do_put_bool(this, ret
, dest
, base
, fill
, v
);
6653 /* ?id@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
6654 locale_id num_put_wchar_id
= {0};
6655 /* ?id@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
6656 locale_id num_put_short_id
= {0};
6658 /* num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
6659 extern const vtable_ptr MSVCP_num_put_wchar_vtable
;
6660 /* num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
6661 extern const vtable_ptr MSVCP_num_put_short_vtable
;
6663 /* ?_Init@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
6664 /* ?_Init@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
6665 DEFINE_THISCALL_WRAPPER(num_put_wchar__Init
, 8)
6666 void __thiscall
num_put_wchar__Init(num_put
*this, const _Locinfo
*locinfo
)
6668 TRACE("(%p %p)\n", this, locinfo
);
6669 _Locinfo__Getcvt(locinfo
, &this->cvt
);
6672 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
6673 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
6674 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor_locinfo
, 12)
6675 num_put
* __thiscall
num_put_wchar_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
6677 TRACE("(%p %p %ld)\n", this, locinfo
, refs
);
6679 locale_facet_ctor_refs(&this->facet
, refs
);
6680 this->facet
.vtable
= &MSVCP_num_put_wchar_vtable
;
6682 num_put_wchar__Init(this, locinfo
);
6686 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
6687 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
6688 DEFINE_THISCALL_WRAPPER(num_put_short_ctor_locinfo
, 12)
6689 num_put
* __thiscall
num_put_short_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
6691 num_put_wchar_ctor_locinfo(this, locinfo
, refs
);
6692 this->facet
.vtable
= &MSVCP_num_put_short_vtable
;
6696 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
6697 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
6698 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor_refs
, 8)
6699 num_put
* __thiscall
num_put_wchar_ctor_refs(num_put
*this, MSVCP_size_t refs
)
6703 TRACE("(%p %lu)\n", this, refs
);
6705 _Locinfo_ctor(&locinfo
);
6706 num_put_wchar_ctor_locinfo(this, &locinfo
, refs
);
6707 _Locinfo_dtor(&locinfo
);
6711 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
6712 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
6713 DEFINE_THISCALL_WRAPPER(num_put_short_ctor_refs
, 8)
6714 num_put
* __thiscall
num_put_short_ctor_refs(num_put
*this, MSVCP_size_t refs
)
6716 num_put_wchar_ctor_refs(this, refs
);
6717 this->facet
.vtable
= &MSVCP_num_put_short_vtable
;
6721 /* ??_F?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
6722 /* ??_F?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
6723 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor
, 4)
6724 num_put
* __thiscall
num_put_wchar_ctor(num_put
*this)
6726 return num_put_wchar_ctor_refs(this, 0);
6729 /* ??_F?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ */
6730 /* ??_F?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ */
6731 DEFINE_THISCALL_WRAPPER(num_put_short_ctor
, 4)
6732 num_put
* __thiscall
num_put_short_ctor(num_put
*this)
6734 return num_put_short_ctor_refs(this, 0);
6737 /* ??1?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
6738 /* ??1?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
6739 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
6740 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
6741 DEFINE_THISCALL_WRAPPER(num_put_wchar_dtor
, 4)
6742 void __thiscall
num_put_wchar_dtor(num_put
*this)
6744 TRACE("(%p)\n", this);
6745 locale_facet_dtor(&this->facet
);
6748 DEFINE_THISCALL_WRAPPER(num_put_wchar_vector_dtor
, 8)
6749 num_put
* __thiscall
num_put_wchar_vector_dtor(num_put
*this, unsigned int flags
)
6751 TRACE("(%p %x)\n", this, flags
);
6753 /* we have an array, with the number of elements stored before the first object */
6754 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
6756 for(i
=*ptr
-1; i
>=0; i
--)
6757 num_put_wchar_dtor(this+i
);
6758 MSVCRT_operator_delete(ptr
);
6760 num_put_wchar_dtor(this);
6762 MSVCRT_operator_delete(this);
6768 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
6769 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
6770 static MSVCP_size_t
num_put_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
6772 TRACE("(%p %p)\n", facet
, loc
);
6774 if(facet
&& !*facet
) {
6777 *facet
= MSVCRT_operator_new(sizeof(num_put
));
6779 ERR("Out of memory\n");
6780 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
6784 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
6785 num_put_wchar_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
6786 _Locinfo_dtor(&locinfo
);
6792 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
6793 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
6794 static MSVCP_size_t
num_put_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
6796 TRACE("(%p %p)\n", facet
, loc
);
6798 if(facet
&& !*facet
) {
6801 *facet
= MSVCRT_operator_new(sizeof(num_put
));
6803 ERR("Out of memory\n");
6804 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
6808 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
6809 num_put_short_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
6810 _Locinfo_dtor(&locinfo
);
6816 num_put
* num_put_wchar_use_facet(const locale
*loc
)
6818 static num_put
*obj
= NULL
;
6821 const locale_facet
*fac
;
6823 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
6824 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_wchar_id
));
6826 _Lockit_dtor(&lock
);
6827 return (num_put
*)fac
;
6831 _Lockit_dtor(&lock
);
6835 num_put_wchar__Getcat(&fac
, loc
);
6836 obj
= (num_put
*)fac
;
6837 locale_facet__Incref(&obj
->facet
);
6838 locale_facet_register(&obj
->facet
);
6839 _Lockit_dtor(&lock
);
6844 num_put
* num_put_short_use_facet(const locale
*loc
)
6846 static num_put
*obj
= NULL
;
6849 const locale_facet
*fac
;
6851 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
6852 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_short_id
));
6854 _Lockit_dtor(&lock
);
6855 return (num_put
*)fac
;
6859 _Lockit_dtor(&lock
);
6863 num_put_short__Getcat(&fac
, loc
);
6864 obj
= (num_put
*)fac
;
6865 locale_facet__Incref(&obj
->facet
);
6866 locale_facet_register(&obj
->facet
);
6867 _Lockit_dtor(&lock
);
6872 /* ?_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 */
6873 /* ?_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 */
6874 /* ?_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 */
6875 /* ?_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 */
6876 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Put(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
6877 ostreambuf_iterator_wchar dest
, const wchar_t *ptr
, MSVCP_size_t count
)
6879 TRACE("(%p %p %s %ld)\n", this, ret
, debugstr_wn(ptr
, count
), count
);
6881 for(; count
>0; count
--)
6882 ostreambuf_iterator_wchar_put(&dest
, *ptr
++);
6888 /* ?_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 */
6889 /* ?_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 */
6890 /* ?_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 */
6891 /* ?_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 */
6892 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Putc(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
6893 ostreambuf_iterator_wchar dest
, const char *ptr
, MSVCP_size_t count
)
6898 TRACE("(%p %p %s %ld)\n", this, ret
, debugstr_an(ptr
, count
), count
);
6900 for(; count
>0; count
--) {
6901 if(_Mbrtowc(&ch
, ptr
++, 1, &state
, &this->cvt
) == 1)
6902 ostreambuf_iterator_wchar_put(&dest
, ch
);
6909 /* ?_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 */
6910 /* ?_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 */
6911 /* ?_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 */
6912 /* ?_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 */
6913 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Putgrouped(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
6914 ostreambuf_iterator_wchar dest
, const char *ptr
, MSVCP_size_t count
, wchar_t delim
)
6916 FIXME("(%p %p %p %ld %d) stub\n", this, ret
, ptr
, count
, delim
);
6920 /* ?_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 */
6921 /* ?_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 */
6922 /* ?_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 */
6923 /* ?_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 */
6924 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Rep(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
6925 ostreambuf_iterator_wchar dest
, wchar_t c
, MSVCP_size_t count
)
6927 TRACE("(%p %p %d %ld)\n", this, ret
, c
, count
);
6929 for(; count
>0; count
--)
6930 ostreambuf_iterator_wchar_put(&dest
, c
);
6936 /* ?_Ffmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAPADPADDH@Z */
6937 /* ?_Ffmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAPEADPEADDH@Z */
6938 /* ?_Ffmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAPADPADDH@Z */
6939 /* ?_Ffmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAPEADPEADDH@Z */
6940 char* __cdecl
num_put_wchar__Ffmt(const num_put
*this, char *fmt
, char spec
, int fmtfl
)
6942 int type
= fmtfl
& FMTFLAG_floatfield
;
6945 TRACE("(%p %p %d %d)\n", this, fmt
, spec
, fmtfl
);
6948 if(fmtfl
& FMTFLAG_showpos
)
6950 if(fmtfl
& FMTFLAG_showbase
)
6957 if(type
== FMTFLAG_fixed
)
6959 else if(type
== FMTFLAG_scientific
)
6960 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'E' : 'e';
6961 else if(type
== (FMTFLAG_fixed
|FMTFLAG_scientific
))
6962 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'A' : 'a';
6964 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'G' : 'g';
6970 /* ?_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 */
6971 /* ?_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 */
6972 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
6973 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const char *buf
, MSVCP_size_t bef_point
,
6974 MSVCP_size_t aft_point
, MSVCP_size_t trailing
, MSVCP_size_t count
)
6976 FIXME("(%p %p %p %d %p %ld %ld %ld %ld) stub\n", this, ret
, base
,
6977 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
6981 /* ?_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 */
6982 /* ?_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 */
6983 ostreambuf_iterator_wchar
* __cdecl
num_put_short__Fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
6984 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const char *buf
, MSVCP_size_t bef_point
,
6985 MSVCP_size_t aft_point
, MSVCP_size_t trailing
, MSVCP_size_t count
)
6987 FIXME("(%p %p %p %d %p %ld %ld %ld %ld) stub\n", this, ret
, base
,
6988 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
6992 /* TODO: This function should be removed when num_put_wchar__Fput is implemented */
6993 static ostreambuf_iterator_wchar
* num_put__fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
6994 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
,
6995 MSVCP_size_t count
, numpunct_wchar
*numpunct
)
6997 basic_string_char grouping_bstr
;
6998 const char *grouping
;
6999 char *p
, dec_point
= *localeconv()->decimal_point
;
7001 int cur_group
= 0, group_size
= 0;
7002 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
7003 MSVCP_size_t i
, pad
;
7005 TRACE("(%p %p %p %d %s %ld)\n", this, ret
, base
, fill
, buf
, count
);
7007 for(p
=buf
; p
<buf
+count
; p
++) {
7013 /* Add separators to number */
7014 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
7015 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
7016 sep
= grouping
[0] ? numpunct_wchar_thousands_sep(numpunct
) : '\0';
7018 for(; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
7020 if(group_size
== grouping
[cur_group
]) {
7022 if(grouping
[cur_group
+1])
7025 memmove(p
+1, p
, buf
+count
-p
);
7026 *p
= '\0'; /* mark thousands separator positions */
7030 MSVCP_basic_string_char_dtor(&grouping_bstr
);
7032 /* Display number with padding */
7033 if(count
>= base
->wide
)
7036 pad
= base
->wide
-count
;
7039 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
7040 num_put_wchar__Putc(this, &dest
, dest
, buf
, 1);
7043 if(adjustfield
!= FMTFLAG_left
) {
7044 num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
7048 for(i
=0; i
<count
; i
++) {
7049 if(buf
[i
] == dec_point
)
7050 num_put_wchar__Rep(this, &dest
, dest
, numpunct_wchar_decimal_point(numpunct
), 1);
7052 num_put_wchar__Rep(this, &dest
, dest
, sep
, 1);
7054 num_put_wchar__Putc(this, &dest
, dest
, buf
+i
, 1);
7057 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
7060 /* ?_Ifmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAPADPADPBDH@Z */
7061 /* ?_Ifmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
7062 /* ?_Ifmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAPADPADPBDH@Z */
7063 /* ?_Ifmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
7064 char* __cdecl
num_put_wchar__Ifmt(const num_put
*this, char *fmt
, const char *spec
, int fmtfl
)
7066 int base
= fmtfl
& FMTFLAG_basefield
;
7069 TRACE("(%p %p %p %d)\n", this, fmt
, spec
, fmtfl
);
7072 if(fmtfl
& FMTFLAG_showpos
)
7074 if(fmtfl
& FMTFLAG_showbase
)
7081 if(base
== FMTFLAG_oct
)
7083 else if(base
== FMTFLAG_hex
)
7084 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'X' : 'x';
7092 static ostreambuf_iterator_wchar
* num_put__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7093 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
,
7094 MSVCP_size_t count
, numpunct_wchar
*numpunct
)
7096 basic_string_char grouping_bstr
;
7097 const char *grouping
;
7100 int cur_group
= 0, group_size
= 0;
7101 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
7102 MSVCP_size_t i
, pad
;
7104 TRACE("(%p %p %p %d %s %ld)\n", this, ret
, base
, fill
, buf
, count
);
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
+count
-1; 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);
7135 }else if((adjustfield
& FMTFLAG_internal
) && (buf
[1]=='x' || buf
[1]=='X')) {
7136 num_put_wchar__Putc(this, &dest
, dest
, buf
, 2);
7139 if(adjustfield
!= FMTFLAG_left
) {
7140 num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
7144 for(i
=0; i
<count
; i
++) {
7146 num_put_wchar__Rep(this, &dest
, dest
, sep
, 1);
7148 num_put_wchar__Putc(this, &dest
, dest
, buf
+i
, 1);
7151 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
7154 /* ?_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 */
7155 /* ?_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 */
7156 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7157 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
, MSVCP_size_t count
)
7159 return num_put__Iput(this, ret
, dest
, base
, fill
, buf
, count
, numpunct_wchar_use_facet(base
->loc
));
7162 /* ?_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 */
7163 /* ?_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 */
7164 ostreambuf_iterator_wchar
* __cdecl
num_put_short__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7165 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
, MSVCP_size_t count
)
7167 return num_put__Iput(this, ret
, dest
, base
, fill
, buf
, count
, numpunct_short_use_facet(base
->loc
));
7170 /* ?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 */
7171 /* ?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 */
7172 #define call_num_put_wchar_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_wchar*, \
7173 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, LONG), \
7174 (this, ret, dest, base, fill, v))
7175 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_long
, 28)
7176 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7177 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
7179 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7180 char fmt
[7]; /* strlen("%+#lld")+1 */
7182 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7184 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
7185 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
7188 /* ?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 */
7189 /* ?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 */
7190 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_long
, 28)
7191 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7192 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
7194 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7195 char fmt
[7]; /* strlen("%+#lld")+1 */
7197 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7199 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
7200 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
7203 /* ?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 */
7204 /* ?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 */
7205 /* ?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 */
7206 /* ?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 */
7207 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_long
, 28)
7208 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7209 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
7211 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7212 return call_num_put_wchar_do_put_long(this, ret
, dest
, base
, fill
, v
);
7215 /* ?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 */
7216 /* ?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 */
7217 #define call_num_put_wchar_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_wchar*, \
7218 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, ULONG), \
7219 (this, ret, dest, base, fill, v))
7220 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ulong
, 28)
7221 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7222 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
7224 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7225 char fmt
[7]; /* strlen("%+#lld")+1 */
7227 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7229 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
7230 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
7233 /* ?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 */
7234 /* ?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 */
7235 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ulong
, 28)
7236 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7237 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
7239 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7240 char fmt
[7]; /* strlen("%+#lld")+1 */
7242 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7244 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
7245 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
7248 /* ?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 */
7249 /* ?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 */
7250 /* ?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 */
7251 /* ?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 */
7252 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ulong
, 28)
7253 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7254 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
7256 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7257 return call_num_put_wchar_do_put_ulong(this, ret
, dest
, base
, fill
, v
);
7260 /* ?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 */
7261 /* ?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 */
7262 /* ?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 */
7263 /* ?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 */
7264 #define call_num_put_wchar_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_wchar*, \
7265 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
7266 (this, ret, dest, base, fill, v))
7267 #define call_num_put_wchar_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 8, ostreambuf_iterator_wchar*, \
7268 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
7269 (this, ret, dest, base, fill, v))
7270 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_double
, 32)
7271 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7272 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
7275 char fmt
[8]; /* strlen("%+#.*lg")+1 */
7278 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7280 num_put_wchar__Ffmt(this, fmt
, '\0', base
->fmtfl
);
7281 size
= _scprintf(fmt
, base
->prec
, v
);
7283 /* TODO: don't use dynamic allocation */
7284 tmp
= MSVCRT_operator_new(size
*2);
7286 ERR("Out of memory\n");
7287 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7289 num_put__fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, base
->prec
, v
),
7290 numpunct_wchar_use_facet(base
->loc
));
7291 MSVCRT_operator_delete(tmp
);
7295 /* ?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 */
7296 /* ?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 */
7297 /* ?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 */
7298 /* ?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 */
7299 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_double
, 32)
7300 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7301 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
7304 char fmt
[8]; /* strlen("%+#.*lg")+1 */
7308 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7310 num_put_wchar__Ffmt(this, fmt
, '\0', base
->fmtfl
);
7311 prec
= get_precision(base
);
7312 size
= _scprintf(fmt
, prec
, v
);
7314 /* TODO: don't use dynamic allocation */
7315 tmp
= MSVCRT_operator_new(size
*2);
7317 ERR("Out of memory\n");
7318 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7320 num_put__fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, prec
, v
),
7321 numpunct_short_use_facet(base
->loc
));
7322 MSVCRT_operator_delete(tmp
);
7326 /* ?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 */
7327 /* ?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 */
7328 /* ?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 */
7329 /* ?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 */
7330 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_double
, 32)
7331 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7332 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
7334 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7335 return call_num_put_wchar_do_put_double(this, ret
, dest
, base
, fill
, v
);
7338 /* ?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 */
7339 /* ?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 */
7340 /* ?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 */
7341 /* ?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 */
7342 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ldouble
, 32)
7343 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ldouble(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7344 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
7346 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7347 return call_num_put_wchar_do_put_ldouble(this, ret
, dest
, base
, fill
, v
);
7350 /* ?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 */
7351 /* ?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 */
7352 #define call_num_put_wchar_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_wchar*, \
7353 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const void*), \
7354 (this, ret, dest, base, fill, v))
7355 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ptr
, 28)
7356 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7357 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
7359 char tmp
[17]; /* 8(16^8==2^64)*2(separators beetwen every digit) + 1 */
7361 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
7363 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
7366 /* ?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 */
7367 /* ?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 */
7368 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ptr
, 28)
7369 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7370 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
7372 char tmp
[17]; /* 8(16^8==2^64)*2(separators beetwen every digit) + 1 */
7374 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
7376 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
7379 /* ?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 */
7380 /* ?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 */
7381 /* ?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 */
7382 /* ?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 */
7383 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ptr
, 28)
7384 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7385 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
7387 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
7388 return call_num_put_wchar_do_put_ptr(this, ret
, dest
, base
, fill
, v
);
7391 /* ?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 */
7392 /* ?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 */
7393 #define call_num_put_wchar_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_wchar*, \
7394 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, __int64), \
7395 (this, ret, dest, base, fill, v))
7396 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_int64
, 32)
7397 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7398 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
7400 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7401 char fmt
[7]; /* strlen("%+#lld")+1 */
7403 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7405 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
7406 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
7409 /* ?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 */
7410 /* ?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 */
7411 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_int64
, 32)
7412 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7413 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
7415 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7416 char fmt
[7]; /* strlen("%+#lld")+1 */
7418 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7420 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
7421 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
7424 /* ?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 */
7425 /* ?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 */
7426 /* ?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 */
7427 /* ?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 */
7428 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_int64
, 32)
7429 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7430 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
7432 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7433 return call_num_put_wchar_do_put_int64(this, ret
, dest
, base
, fill
, v
);
7436 /* ?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 */
7437 /* ?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 */
7438 #define call_num_put_wchar_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_wchar*, \
7439 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, unsigned __int64), \
7440 (this, ret, dest, base, fill, v))
7441 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_uint64
, 32)
7442 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7443 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
7445 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7446 char fmt
[7]; /* strlen("%+#lld")+1 */
7448 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7450 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
7451 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
7454 /* ?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 */
7455 /* ?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 */
7456 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_uint64
, 32)
7457 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7458 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
7460 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7461 char fmt
[7]; /* strlen("%+#lld")+1 */
7463 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7465 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
7466 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
7469 /* ?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 */
7470 /* ?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 */
7471 /* ?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 */
7472 /* ?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 */
7473 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_uint64
, 32)
7474 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7475 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
7477 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7478 return call_num_put_wchar_do_put_uint64(this, ret
, dest
, base
, fill
, v
);
7481 /* ?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 */
7482 /* ?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 */
7483 #define call_num_put_wchar_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_wchar*, \
7484 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, MSVCP_bool), \
7485 (this, ret, dest, base, fill, v))
7486 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_bool
, 28)
7487 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7488 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, MSVCP_bool v
)
7490 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7492 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
7493 numpunct_wchar
*numpunct
= numpunct_wchar_use_facet(base
->loc
);
7494 basic_string_wchar str
;
7495 MSVCP_size_t pad
, len
;
7498 numpunct_wchar_truename(numpunct
, &str
);
7500 numpunct_wchar_falsename(numpunct
, &str
);
7502 len
= MSVCP_basic_string_wchar_length(&str
);
7503 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
7506 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
7507 num_put_wchar__Rep(this, &dest
, dest
, fill
, pad
);
7510 num_put_wchar__Put(this, &dest
, dest
, MSVCP_basic_string_wchar_c_str(&str
), len
);
7511 MSVCP_basic_string_wchar_dtor(&str
);
7512 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
7515 return num_put_wchar_put_long(this, ret
, dest
, base
, fill
, v
);
7518 /* ?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 */
7519 /* ?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 */
7520 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_bool
, 28)
7521 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7522 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, MSVCP_bool v
)
7524 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7526 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
7527 numpunct_wchar
*numpunct
= numpunct_short_use_facet(base
->loc
);
7528 basic_string_wchar str
;
7529 MSVCP_size_t pad
, len
;
7532 numpunct_wchar_truename(numpunct
, &str
);
7534 numpunct_wchar_falsename(numpunct
, &str
);
7536 len
= MSVCP_basic_string_wchar_length(&str
);
7537 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
7540 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
7541 num_put_wchar__Rep(this, &dest
, dest
, fill
, pad
);
7544 num_put_wchar__Put(this, &dest
, dest
, MSVCP_basic_string_wchar_c_str(&str
), len
);
7545 MSVCP_basic_string_wchar_dtor(&str
);
7546 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
7549 return num_put_wchar_put_long(this, ret
, dest
, base
, fill
, v
);
7552 /* ?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 */
7553 /* ?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 */
7554 /* ?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 */
7555 /* ?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 */
7556 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_bool
, 28)
7557 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7558 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, MSVCP_bool v
)
7560 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7561 return call_num_put_wchar_do_put_bool(this, ret
, dest
, base
, fill
, v
);
7564 /* ??0_Locimp@locale@std@@AAE@_N@Z */
7565 /* ??0_Locimp@locale@std@@AEAA@_N@Z */
7566 static locale__Locimp
* locale__Locimp_ctor_transparent(locale__Locimp
*this, MSVCP_bool transparent
)
7568 TRACE("(%p %d)\n", this, transparent
);
7570 memset(this, 0, sizeof(locale__Locimp
));
7571 locale_facet_ctor_refs(&this->facet
, 1);
7572 this->transparent
= transparent
;
7573 MSVCP_basic_string_char_ctor_cstr(&this->name
, "*");
7577 /* ??_F_Locimp@locale@std@@QAEXXZ */
7578 /* ??_F_Locimp@locale@std@@QEAAXXZ */
7579 static locale__Locimp
* locale__Locimp_ctor(locale__Locimp
*this)
7581 return locale__Locimp_ctor_transparent(this, FALSE
);
7584 /* ??0_Locimp@locale@std@@AAE@ABV012@@Z */
7585 /* ??0_Locimp@locale@std@@AEAA@AEBV012@@Z */
7586 DEFINE_THISCALL_WRAPPER(locale__Locimp_copy_ctor
, 8)
7587 locale__Locimp
* __thiscall
locale__Locimp_copy_ctor(locale__Locimp
*this, const locale__Locimp
*copy
)
7592 TRACE("(%p %p)\n", this, copy
);
7594 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
7595 memcpy(this, copy
, sizeof(locale__Locimp
));
7596 locale_facet_ctor_refs(&this->facet
, 1);
7597 if(copy
->facetvec
) {
7598 this->facetvec
= MSVCRT_operator_new(copy
->facet_cnt
*sizeof(locale_facet
*));
7599 if(!this->facetvec
) {
7600 _Lockit_dtor(&lock
);
7601 ERR("Out of memory\n");
7602 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7605 for(i
=0; i
<this->facet_cnt
; i
++)
7607 this->facetvec
[i
] = copy
->facetvec
[i
];
7608 if(this->facetvec
[i
])
7609 locale_facet__Incref(this->facetvec
[i
]);
7612 MSVCP_basic_string_char_copy_ctor(&this->name
, ©
->name
);
7613 _Lockit_dtor(&lock
);
7617 /* ??1_Locimp@locale@std@@MAE@XZ */
7618 /* ??1_Locimp@locale@std@@MEAA@XZ */
7619 static void locale__Locimp_dtor(locale__Locimp
*this)
7623 TRACE("(%p)\n", this);
7625 locale_facet_dtor(&this->facet
);
7626 for(i
=0; i
<this->facet_cnt
; i
++)
7627 if(this->facetvec
[i
] && locale_facet__Decref(this->facetvec
[i
]))
7628 call_locale_facet_vector_dtor(this->facetvec
[i
], 1);
7630 MSVCRT_operator_delete(this->facetvec
);
7631 MSVCP_basic_string_char_dtor(&this->name
);
7634 DEFINE_THISCALL_WRAPPER(locale__Locimp_vector_dtor
, 8)
7635 locale__Locimp
* __thiscall
locale__Locimp_vector_dtor(locale__Locimp
*this, unsigned int flags
)
7637 TRACE("(%p %x)\n", this, flags
);
7639 /* we have an array, with the number of elements stored before the first object */
7640 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
7642 for(i
=*ptr
-1; i
>=0; i
--)
7643 locale__Locimp_dtor(this+i
);
7644 MSVCRT_operator_delete(ptr
);
7646 locale__Locimp_dtor(this);
7648 MSVCRT_operator_delete(this);
7654 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z */
7655 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPEAV123@PEAVfacet@23@_K@Z */
7656 static void locale__Locimp__Locimp_Addfac(locale__Locimp
*locimp
, locale_facet
*facet
, MSVCP_size_t id
)
7660 TRACE("(%p %p %lu)\n", locimp
, facet
, id
);
7662 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
7663 if(id
>= locimp
->facet_cnt
) {
7664 MSVCP_size_t new_size
= id
+1;
7665 locale_facet
**new_facetvec
;
7667 if(new_size
< locale_id__Id_cnt
+1)
7668 new_size
= locale_id__Id_cnt
+1;
7670 new_facetvec
= MSVCRT_operator_new(sizeof(locale_facet
*)*new_size
);
7672 _Lockit_dtor(&lock
);
7673 ERR("Out of memory\n");
7674 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7678 memset(new_facetvec
, 0, sizeof(locale_facet
*)*new_size
);
7679 memcpy(new_facetvec
, locimp
->facetvec
, sizeof(locale_facet
*)*locimp
->facet_cnt
);
7680 MSVCRT_operator_delete(locimp
->facetvec
);
7681 locimp
->facetvec
= new_facetvec
;
7682 locimp
->facet_cnt
= new_size
;
7685 if(locimp
->facetvec
[id
] && locale_facet__Decref(locimp
->facetvec
[id
]))
7686 call_locale_facet_vector_dtor(locimp
->facetvec
[id
], 1);
7688 locimp
->facetvec
[id
] = facet
;
7690 locale_facet__Incref(facet
);
7691 _Lockit_dtor(&lock
);
7694 /* ?_Addfac@_Locimp@locale@std@@AAEXPAVfacet@23@I@Z */
7695 /* ?_Addfac@_Locimp@locale@std@@AEAAXPEAVfacet@23@_K@Z */
7696 DEFINE_THISCALL_WRAPPER(locale__Locimp__Addfac
, 12)
7697 void __thiscall
locale__Locimp__Addfac(locale__Locimp
*this, locale_facet
*facet
, MSVCP_size_t id
)
7699 locale__Locimp__Locimp_Addfac(this, facet
, id
);
7702 /* ?_Makeushloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
7703 /* ?_Makeushloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
7704 /* List of missing facets:
7705 * num_put, collate, messages, money_get, money_put, moneypunct, moneypunct, time_get, time_put
7707 static void locale__Locimp__Makeushloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
7709 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
7711 if(cat
& (1<<(ctype_short__Getcat(NULL
, NULL
)-1))) {
7715 ctype
= ctype_short_use_facet(loc
);
7717 ctype
= MSVCRT_operator_new(sizeof(ctype_wchar
));
7719 ERR("Out of memory\n");
7720 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7722 ctype_short_ctor_locinfo(ctype
, locinfo
, 0);
7724 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_short_id
));
7727 if(cat
& (1<<(num_get_short__Getcat(NULL
, NULL
)-1))) {
7731 numget
= num_get_short_use_facet(loc
);
7733 numget
= MSVCRT_operator_new(sizeof(num_get
));
7735 ERR("Out of memory\n");
7736 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7738 num_get_short_ctor_locinfo(numget
, locinfo
, 0);
7740 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_short_id
));
7743 if(cat
& (1<<(num_put_short__Getcat(NULL
, NULL
)-1))) {
7747 numput
= num_put_short_use_facet(loc
);
7749 numput
= MSVCRT_operator_new(sizeof(num_put
));
7751 ERR("Out of memory\n");
7752 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7754 num_put_short_ctor_locinfo(numput
, locinfo
, 0);
7756 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_short_id
));
7759 if(cat
& (1<<(numpunct_short__Getcat(NULL
, NULL
)-1))) {
7760 numpunct_wchar
*numpunct
;
7763 numpunct
= numpunct_short_use_facet(loc
);
7765 numpunct
= MSVCRT_operator_new(sizeof(numpunct_wchar
));
7767 ERR("Out of memory\n");
7768 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7770 numpunct_short_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
7772 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_short_id
));
7775 if(cat
& (1<<(codecvt_short__Getcat(NULL
, NULL
)-1))) {
7776 codecvt_wchar
*codecvt
;
7779 codecvt
= codecvt_short_use_facet(loc
);
7781 codecvt
= MSVCRT_operator_new(sizeof(codecvt_wchar
));
7783 ERR("Out of memory\n");
7784 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7786 codecvt_short_ctor_locinfo(codecvt
, locinfo
, 0);
7788 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_short_id
));
7792 /* ?_Makewloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
7793 /* ?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
7794 /* List of missing facets:
7795 * collate, messages, money_get, money_put, moneypunct, moneypunct, time_get, time_put
7797 static void locale__Locimp__Makewloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
7799 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
7801 if(cat
& (1<<(ctype_wchar__Getcat(NULL
, NULL
)-1))) {
7805 ctype
= ctype_wchar_use_facet(loc
);
7807 ctype
= MSVCRT_operator_new(sizeof(ctype_wchar
));
7809 ERR("Out of memory\n");
7810 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7812 ctype_wchar_ctor_locinfo(ctype
, locinfo
, 0);
7814 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_wchar_id
));
7817 if(cat
& (1<<(num_get_wchar__Getcat(NULL
, NULL
)-1))) {
7821 numget
= num_get_wchar_use_facet(loc
);
7823 numget
= MSVCRT_operator_new(sizeof(num_get
));
7825 ERR("Out of memory\n");
7826 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7828 num_get_wchar_ctor_locinfo(numget
, locinfo
, 0);
7830 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_wchar_id
));
7833 if(cat
& (1<<(num_put_wchar__Getcat(NULL
, NULL
)-1))) {
7837 numput
= num_put_wchar_use_facet(loc
);
7839 numput
= MSVCRT_operator_new(sizeof(num_put
));
7841 ERR("Out of memory\n");
7842 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7844 num_put_wchar_ctor_locinfo(numput
, locinfo
, 0);
7846 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_wchar_id
));
7849 if(cat
& (1<<(numpunct_wchar__Getcat(NULL
, NULL
)-1))) {
7850 numpunct_wchar
*numpunct
;
7853 numpunct
= numpunct_wchar_use_facet(loc
);
7855 numpunct
= MSVCRT_operator_new(sizeof(numpunct_wchar
));
7857 ERR("Out of memory\n");
7858 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7860 numpunct_wchar_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
7862 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_wchar_id
));
7865 if(cat
& (1<<(codecvt_wchar__Getcat(NULL
, NULL
)-1))) {
7866 codecvt_wchar
*codecvt
;
7869 codecvt
= codecvt_wchar_use_facet(loc
);
7871 codecvt
= MSVCRT_operator_new(sizeof(codecvt_wchar
));
7873 ERR("Out of memory\n");
7874 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7876 codecvt_wchar_ctor_locinfo(codecvt
, locinfo
, 0);
7878 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_wchar_id
));
7882 /* ?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
7883 /* ?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
7884 /* List of missing facets:
7885 * collate, messages, money_get, money_put, moneypunct, moneypunct, time_get, time_put
7887 static void locale__Locimp__Makexloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
7889 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
7891 if(cat
& (1<<(ctype_char__Getcat(NULL
, NULL
)-1))) {
7895 ctype
= ctype_char_use_facet(loc
);
7897 ctype
= MSVCRT_operator_new(sizeof(ctype_char
));
7899 ERR("Out of memory\n");
7900 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7902 ctype_char_ctor_locinfo(ctype
, locinfo
, 0);
7904 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_char_id
));
7907 if(cat
& (1<<(num_get_char__Getcat(NULL
, NULL
)-1))) {
7911 numget
= num_get_char_use_facet(loc
);
7913 numget
= MSVCRT_operator_new(sizeof(num_get
));
7915 ERR("Out of memory\n");
7916 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7918 num_get_char_ctor_locinfo(numget
, locinfo
, 0);
7920 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_char_id
));
7923 if(cat
& (1<<(num_put_char__Getcat(NULL
, NULL
)-1))) {
7927 numput
= num_put_char_use_facet(loc
);
7929 numput
= MSVCRT_operator_new(sizeof(num_put
));
7931 ERR("Out of memory\n");
7932 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7934 num_put_char_ctor_locinfo(numput
, locinfo
, 0);
7936 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_char_id
));
7939 if(cat
& (1<<(numpunct_char__Getcat(NULL
, NULL
)-1))) {
7940 numpunct_char
*numpunct
;
7943 numpunct
= numpunct_char_use_facet(loc
);
7945 numpunct
= MSVCRT_operator_new(sizeof(numpunct_char
));
7947 ERR("Out of memory\n");
7948 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7950 numpunct_char_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
7952 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_char_id
));
7955 if(cat
& (1<<(codecvt_char__Getcat(NULL
, NULL
)-1))) {
7956 codecvt_char
*codecvt
;
7959 codecvt
= codecvt_char_use_facet(loc
);
7961 codecvt
= MSVCRT_operator_new(sizeof(codecvt_char
));
7963 ERR("Out of memory\n");
7964 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7966 codecvt_char_ctor_locinfo(codecvt
, locinfo
, 0);
7968 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_char_id
));
7972 /* ?_Makeloc@_Locimp@locale@std@@CAPAV123@ABV_Locinfo@3@HPAV123@PBV23@@Z */
7973 /* ?_Makeloc@_Locimp@locale@std@@CAPEAV123@AEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
7974 static locale__Locimp
* locale__Locimp__Makeloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
7976 TRACE("(%p %d %p %p)\n", locinfo
, cat
, locimp
, loc
);
7978 locale__Locimp__Makexloc(locinfo
, cat
, locimp
, loc
);
7979 locale__Locimp__Makewloc(locinfo
, cat
, locimp
, loc
);
7980 locale__Locimp__Makeushloc(locinfo
, cat
, locimp
, loc
);
7982 locimp
->catmask
|= cat
;
7983 MSVCP_basic_string_char_copy_ctor(&locimp
->name
, &locinfo
->newlocname
);
7987 /* ??_7_Locimp@locale@std@@6B@ */
7988 const vtable_ptr MSVCP_locale__Locimp_vtable
[] = {
7989 (vtable_ptr
)THISCALL_NAME(locale__Locimp_vector_dtor
)
7992 /* ??0locale@std@@AAE@PAV_Locimp@01@@Z */
7993 /* ??0locale@std@@AEAA@PEAV_Locimp@01@@Z */
7994 DEFINE_THISCALL_WRAPPER(locale_ctor_locimp
, 8)
7995 locale
* __thiscall
locale_ctor_locimp(locale
*this, locale__Locimp
*locimp
)
7997 TRACE("(%p %p)\n", this, locimp
);
7998 /* Don't change locimp reference counter */
8003 /* ?_Init@locale@std@@CAPAV_Locimp@12@XZ */
8004 /* ?_Init@locale@std@@CAPEAV_Locimp@12@XZ */
8005 locale__Locimp
* __cdecl
locale__Init(void)
8011 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
8013 _Lockit_dtor(&lock
);
8014 return global_locale
;
8017 global_locale
= MSVCRT_operator_new(sizeof(locale__Locimp
));
8018 if(!global_locale
) {
8019 _Lockit_dtor(&lock
);
8020 ERR("Out of memory\n");
8021 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8025 locale__Locimp_ctor(global_locale
);
8026 global_locale
->catmask
= (1<<(LC_MAX
+1))-1;
8027 MSVCP_basic_string_char_dtor(&global_locale
->name
);
8028 MSVCP_basic_string_char_ctor_cstr(&global_locale
->name
, "C");
8030 locale__Locimp__Clocptr
= global_locale
;
8031 global_locale
->facet
.refs
++;
8032 locale_ctor_locimp(&classic_locale
, locale__Locimp__Clocptr
);
8033 _Lockit_dtor(&lock
);
8035 return global_locale
;
8038 /* ??0locale@std@@QAE@ABV01@0H@Z */
8039 /* ??0locale@std@@QEAA@AEBV01@0H@Z */
8040 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_locale
, 16)
8041 locale
* __thiscall
locale_ctor_locale_locale(locale
*this, const locale
*loc
, const locale
*other
, category cat
)
8045 TRACE("(%p %p %p %d)\n", this, loc
, other
, cat
);
8047 this->ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
8049 ERR("Out of memory\n");
8050 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8052 locale__Locimp_copy_ctor(this->ptr
, loc
->ptr
);
8054 _Locinfo_ctor_cat_cstr(&locinfo
, loc
->ptr
->catmask
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
8055 _Locinfo__Addcats(&locinfo
, cat
& other
->ptr
->catmask
, MSVCP_basic_string_char_c_str(&other
->ptr
->name
));
8056 locale__Locimp__Makeloc(&locinfo
, cat
, this->ptr
, other
);
8057 _Locinfo_dtor(&locinfo
);
8062 /* ??0locale@std@@QAE@ABV01@@Z */
8063 /* ??0locale@std@@QEAA@AEBV01@@Z */
8064 DEFINE_THISCALL_WRAPPER(locale_copy_ctor
, 8)
8065 locale
* __thiscall
locale_copy_ctor(locale
*this, const locale
*copy
)
8067 TRACE("(%p %p)\n", this, copy
);
8068 this->ptr
= copy
->ptr
;
8069 locale_facet__Incref(&this->ptr
->facet
);
8073 /* ??0locale@std@@QAE@ABV01@PBDH@Z */
8074 /* ??0locale@std@@QEAA@AEBV01@PEBDH@Z */
8075 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_cstr
, 16)
8076 locale
* __thiscall
locale_ctor_locale_cstr(locale
*this, const locale
*loc
, const char *locname
, category cat
)
8078 FIXME("(%p %p %s %d) stub\n", this, loc
, locname
, cat
);
8082 /* ??0locale@std@@QAE@PBDH@Z */
8083 /* ??0locale@std@@QEAA@PEBDH@Z */
8084 DEFINE_THISCALL_WRAPPER(locale_ctor_cstr
, 12)
8085 locale
* __thiscall
locale_ctor_cstr(locale
*this, const char *locname
, category cat
)
8089 TRACE("(%p %s %d)\n", this, locname
, cat
);
8091 this->ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
8093 ERR("Out of memory\n");
8094 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8096 locale__Locimp_ctor(this->ptr
);
8100 _Locinfo_ctor_cat_cstr(&locinfo
, cat
, locname
);
8101 if(!memcmp(MSVCP_basic_string_char_c_str(&locinfo
.newlocname
), "*", 2)) {
8102 _Locinfo_dtor(&locinfo
);
8103 MSVCRT_operator_delete(this->ptr
);
8104 throw_exception(EXCEPTION_RUNTIME_ERROR
, "bad locale name");
8107 locale__Locimp__Makeloc(&locinfo
, cat
, this->ptr
, NULL
);
8108 _Locinfo_dtor(&locinfo
);
8113 /* ??0locale@std@@QAE@W4_Uninitialized@1@@Z */
8114 /* ??0locale@std@@QEAA@W4_Uninitialized@1@@Z */
8115 DEFINE_THISCALL_WRAPPER(locale_ctor_uninitialized
, 8)
8116 locale
* __thiscall
locale_ctor_uninitialized(locale
*this, int uninitialized
)
8118 TRACE("(%p)\n", this);
8123 /* ??0locale@std@@QAE@XZ */
8124 /* ??0locale@std@@QEAA@XZ */
8125 DEFINE_THISCALL_WRAPPER(locale_ctor
, 4)
8126 locale
* __thiscall
locale_ctor(locale
*this)
8128 TRACE("(%p)\n", this);
8129 this->ptr
= locale__Init();
8130 locale_facet__Incref(&this->ptr
->facet
);
8134 /* ??1locale@std@@QAE@XZ */
8135 /* ??1locale@std@@QEAA@XZ */
8136 DEFINE_THISCALL_WRAPPER(locale_dtor
, 4)
8137 void __thiscall
locale_dtor(locale
*this)
8139 TRACE("(%p)\n", this);
8140 if(this->ptr
&& locale_facet__Decref(&this->ptr
->facet
)) {
8141 locale__Locimp_dtor(this->ptr
);
8142 MSVCRT_operator_delete(this);
8146 /* ??4locale@std@@QAEAAV01@ABV01@@Z */
8147 /* ??4locale@std@@QEAAAEAV01@AEBV01@@Z */
8148 DEFINE_THISCALL_WRAPPER(locale_operator_assign
, 8)
8149 locale
* __thiscall
locale_operator_assign(locale
*this, const locale
*loc
)
8151 FIXME("(%p %p) stub\n", this, loc
);
8155 /* ??8locale@std@@QBE_NABV01@@Z */
8156 /* ??8locale@std@@QEBA_NAEBV01@@Z */
8157 DEFINE_THISCALL_WRAPPER(locale_operator_equal
, 8)
8158 MSVCP_bool __thiscall
locale_operator_equal(const locale
*this, const locale
*loc
)
8160 FIXME("(%p %p) stub\n", this, loc
);
8164 /* ??9locale@std@@QBE_NABV01@@Z */
8165 /* ??9locale@std@@QEBA_NAEBV01@@Z */
8166 DEFINE_THISCALL_WRAPPER(locale_operator_not_equal
, 8)
8167 MSVCP_bool __thiscall
locale_operator_not_equal(const locale
*this, locale
const *loc
)
8169 FIXME("(%p %p) stub\n", this, loc
);
8173 /* ?_Addfac@locale@std@@QAEAAV12@PAVfacet@12@II@Z */
8174 /* ?_Addfac@locale@std@@QEAAAEAV12@PEAVfacet@12@_K1@Z */
8175 DEFINE_THISCALL_WRAPPER(locale__Addfac
, 16)
8176 locale
* __thiscall
locale__Addfac(locale
*this, locale_facet
*facet
, MSVCP_size_t id
, MSVCP_size_t catmask
)
8178 TRACE("(%p %p %lu %lu)\n", this, facet
, id
, catmask
);
8180 if(this->ptr
->facet
.refs
> 1) {
8181 locale__Locimp
*new_ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
8183 ERR("Out of memory\n");
8184 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8187 locale__Locimp_copy_ctor(new_ptr
, this->ptr
);
8188 locale_facet__Decref(&this->ptr
->facet
);
8189 this->ptr
= new_ptr
;
8192 locale__Locimp__Addfac(this->ptr
, facet
, id
);
8195 MSVCP_basic_string_char_dtor(&this->ptr
->name
);
8196 MSVCP_basic_string_char_ctor_cstr(&this->ptr
->name
, "*");
8201 /* ?_Getfacet@locale@std@@QBEPBVfacet@12@I@Z */
8202 /* ?_Getfacet@locale@std@@QEBAPEBVfacet@12@_K@Z */
8203 DEFINE_THISCALL_WRAPPER(locale__Getfacet
, 8)
8204 const locale_facet
* __thiscall
locale__Getfacet(const locale
*this, MSVCP_size_t id
)
8208 TRACE("(%p %lu)\n", this, id
);
8210 fac
= id
< this->ptr
->facet_cnt
? this->ptr
->facetvec
[id
] : NULL
;
8211 if(fac
|| !this->ptr
->transparent
)
8214 return id
< global_locale
->facet_cnt
? global_locale
->facetvec
[id
] : NULL
;
8217 /* ?classic@locale@std@@SAABV12@XZ */
8218 /* ?classic@locale@std@@SAAEBV12@XZ */
8219 const locale
* __cdecl
locale_classic(void)
8223 return &classic_locale
;
8226 /* ?empty@locale@std@@SA?AV12@XZ */
8227 locale
* __cdecl
locale_empty(locale
*ret
)
8233 ret
->ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
8235 ERR("Out of memory\n");
8236 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8238 locale__Locimp_ctor_transparent(ret
->ptr
, TRUE
);
8242 /* ?name@locale@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
8243 /* ?name@locale@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
8244 DEFINE_THISCALL_WRAPPER(locale_name
, 8)
8245 basic_string_char
* __thiscall
locale_name(const locale
*this, basic_string_char
*ret
)
8247 TRACE( "(%p)\n", this);
8248 MSVCP_basic_string_char_copy_ctor(ret
, &this->ptr
->name
);
8252 /* ?global@locale@std@@SA?AV12@ABV12@@Z */
8253 /* ?global@locale@std@@SA?AV12@AEBV12@@Z */
8254 locale
* __cdecl
locale_global(locale
*ret
, const locale
*loc
)
8259 TRACE("(%p %p)\n", loc
, ret
);
8261 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
8264 if(loc
->ptr
!= global_locale
) {
8265 locale_facet__Decref(&global_locale
->facet
);
8266 global_locale
= loc
->ptr
;
8267 locale_facet__Incref(&global_locale
->facet
);
8269 for(i
=LC_ALL
+1; i
<=LC_MAX
; i
++) {
8270 if((global_locale
->catmask
& (1<<(i
-1))) == 0)
8272 setlocale(i
, MSVCP_basic_string_char_c_str(&global_locale
->name
));
8275 _Lockit_dtor(&lock
);
8280 wctrans_t __cdecl
wctrans(const char *property
)
8282 static const char str_tolower
[] = "tolower";
8283 static const char str_toupper
[] = "toupper";
8285 if(!strcmp(property
, str_tolower
))
8287 if(!strcmp(property
, str_toupper
))
8293 wint_t __cdecl
towctrans(wint_t c
, wctrans_t category
)
8300 DEFINE_RTTI_DATA0(locale_facet
, 0, ".?AVfacet@locale@std@@")
8301 DEFINE_RTTI_DATA1(collate_char
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@D@std@@")
8302 DEFINE_RTTI_DATA1(collate_wchar
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@_W@std@@")
8303 DEFINE_RTTI_DATA1(collate_short
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@G@std@@")
8304 DEFINE_RTTI_DATA1(ctype_base
, 0, &locale_facet_rtti_base_descriptor
, ".?AUctype_base@std@@")
8305 DEFINE_RTTI_DATA2(ctype_char
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@D@std@@")
8306 DEFINE_RTTI_DATA2(ctype_wchar
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@_W@std@@")
8307 DEFINE_RTTI_DATA2(ctype_short
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@G@std@@")
8308 DEFINE_RTTI_DATA1(codecvt_base
, 0, &locale_facet_rtti_base_descriptor
, ".?AVcodecvt_base@std@@")
8309 DEFINE_RTTI_DATA2(codecvt_char
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@DDH@std@@")
8310 DEFINE_RTTI_DATA2(codecvt_wchar
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@_WDH@std@@")
8311 DEFINE_RTTI_DATA2(codecvt_short
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@GDH@std@@")
8312 DEFINE_RTTI_DATA1(numpunct_char
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@D@std@@")
8313 DEFINE_RTTI_DATA1(numpunct_wchar
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@_W@std@@")
8314 DEFINE_RTTI_DATA1(numpunct_short
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@G@std@@")
8315 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@@")
8316 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@@")
8317 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@@")
8318 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@@")
8319 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@@")
8320 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@@")
8323 void __asm_dummy_vtables(void) {
8325 __ASM_VTABLE(locale_facet
,
8326 VTABLE_ADD_FUNC(locale_facet_vector_dtor
));
8327 __ASM_VTABLE(collate_char
,
8328 VTABLE_ADD_FUNC(collate_char_vector_dtor
)
8329 VTABLE_ADD_FUNC(collate_char_do_compare
)
8330 VTABLE_ADD_FUNC(collate_char_do_transform
)
8331 VTABLE_ADD_FUNC(collate_char_do_hash
));
8332 __ASM_VTABLE(collate_wchar
,
8333 VTABLE_ADD_FUNC(collate_wchar_vector_dtor
)
8334 VTABLE_ADD_FUNC(collate_wchar_do_compare
)
8335 VTABLE_ADD_FUNC(collate_wchar_do_transform
)
8336 VTABLE_ADD_FUNC(collate_wchar_do_hash
));
8337 __ASM_VTABLE(collate_short
,
8338 VTABLE_ADD_FUNC(collate_wchar_vector_dtor
)
8339 VTABLE_ADD_FUNC(collate_wchar_do_compare
)
8340 VTABLE_ADD_FUNC(collate_wchar_do_transform
)
8341 VTABLE_ADD_FUNC(collate_wchar_do_hash
));
8342 __ASM_VTABLE(ctype_base
,
8343 VTABLE_ADD_FUNC(ctype_base_vector_dtor
));
8344 __ASM_VTABLE(ctype_char
,
8345 VTABLE_ADD_FUNC(ctype_char_vector_dtor
)
8346 VTABLE_ADD_FUNC(ctype_char_do_tolower
)
8347 VTABLE_ADD_FUNC(ctype_char_do_tolower_ch
)
8348 VTABLE_ADD_FUNC(ctype_char_do_toupper
)
8349 VTABLE_ADD_FUNC(ctype_char_do_toupper_ch
)
8350 VTABLE_ADD_FUNC(ctype_char_do_widen
)
8351 VTABLE_ADD_FUNC(ctype_char_do_widen_ch
)
8352 VTABLE_ADD_FUNC(ctype_char_do_narrow
)
8353 VTABLE_ADD_FUNC(ctype_char_do_narrow_ch
));
8354 __ASM_VTABLE(ctype_wchar
,
8355 VTABLE_ADD_FUNC(ctype_wchar_vector_dtor
)
8356 VTABLE_ADD_FUNC(ctype_wchar_do_is
)
8357 VTABLE_ADD_FUNC(ctype_wchar_do_is_ch
)
8358 VTABLE_ADD_FUNC(ctype_wchar_do_scan_is
)
8359 VTABLE_ADD_FUNC(ctype_wchar_do_scan_not
)
8360 VTABLE_ADD_FUNC(ctype_wchar_do_tolower
)
8361 VTABLE_ADD_FUNC(ctype_wchar_do_tolower_ch
)
8362 VTABLE_ADD_FUNC(ctype_wchar_do_toupper
)
8363 VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch
)
8364 VTABLE_ADD_FUNC(ctype_wchar_do_widen
)
8365 VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch
)
8366 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
8367 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
));
8368 __ASM_VTABLE(ctype_short
,
8369 VTABLE_ADD_FUNC(ctype_wchar_vector_dtor
)
8370 VTABLE_ADD_FUNC(ctype_wchar_do_is
)
8371 VTABLE_ADD_FUNC(ctype_wchar_do_is_ch
)
8372 VTABLE_ADD_FUNC(ctype_wchar_do_scan_is
)
8373 VTABLE_ADD_FUNC(ctype_wchar_do_scan_not
)
8374 VTABLE_ADD_FUNC(ctype_wchar_do_tolower
)
8375 VTABLE_ADD_FUNC(ctype_wchar_do_tolower_ch
)
8376 VTABLE_ADD_FUNC(ctype_wchar_do_toupper
)
8377 VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch
)
8378 VTABLE_ADD_FUNC(ctype_wchar_do_widen
)
8379 VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch
)
8380 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
8381 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
));
8382 __ASM_VTABLE(codecvt_base
,
8383 VTABLE_ADD_FUNC(codecvt_base_vector_dtor
)
8384 VTABLE_ADD_FUNC(codecvt_base_do_always_noconv
)
8385 VTABLE_ADD_FUNC(codecvt_base_do_max_length
)
8386 VTABLE_ADD_FUNC(codecvt_base_do_encoding
));
8387 __ASM_VTABLE(codecvt_char
,
8388 VTABLE_ADD_FUNC(codecvt_char_vector_dtor
)
8389 VTABLE_ADD_FUNC(codecvt_base_do_always_noconv
)
8390 VTABLE_ADD_FUNC(codecvt_base_do_max_length
)
8391 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
8392 VTABLE_ADD_FUNC(codecvt_char_do_in
)
8393 VTABLE_ADD_FUNC(codecvt_char_do_out
)
8394 VTABLE_ADD_FUNC(codecvt_char_do_unshift
)
8395 VTABLE_ADD_FUNC(codecvt_char_do_length
));
8396 __ASM_VTABLE(codecvt_wchar
,
8397 VTABLE_ADD_FUNC(codecvt_wchar_vector_dtor
)
8398 VTABLE_ADD_FUNC(codecvt_wchar_do_always_noconv
)
8399 VTABLE_ADD_FUNC(codecvt_wchar_do_max_length
)
8400 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
8401 VTABLE_ADD_FUNC(codecvt_wchar_do_in
)
8402 VTABLE_ADD_FUNC(codecvt_wchar_do_out
)
8403 VTABLE_ADD_FUNC(codecvt_wchar_do_unshift
)
8404 VTABLE_ADD_FUNC(codecvt_wchar_do_length
));
8405 __ASM_VTABLE(codecvt_short
,
8406 VTABLE_ADD_FUNC(codecvt_wchar_vector_dtor
)
8407 VTABLE_ADD_FUNC(codecvt_wchar_do_always_noconv
)
8408 VTABLE_ADD_FUNC(codecvt_wchar_do_max_length
)
8409 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
8410 VTABLE_ADD_FUNC(codecvt_wchar_do_in
)
8411 VTABLE_ADD_FUNC(codecvt_wchar_do_out
)
8412 VTABLE_ADD_FUNC(codecvt_wchar_do_unshift
)
8413 VTABLE_ADD_FUNC(codecvt_wchar_do_length
));
8414 __ASM_VTABLE(numpunct_char
,
8415 VTABLE_ADD_FUNC(numpunct_char_vector_dtor
)
8416 VTABLE_ADD_FUNC(numpunct_char_do_decimal_point
)
8417 VTABLE_ADD_FUNC(numpunct_char_do_thousands_sep
)
8418 VTABLE_ADD_FUNC(numpunct_char_do_grouping
)
8419 VTABLE_ADD_FUNC(numpunct_char_do_falsename
)
8420 VTABLE_ADD_FUNC(numpunct_char_do_truename
));
8421 __ASM_VTABLE(numpunct_wchar
,
8422 VTABLE_ADD_FUNC(numpunct_wchar_vector_dtor
)
8423 VTABLE_ADD_FUNC(numpunct_wchar_do_decimal_point
)
8424 VTABLE_ADD_FUNC(numpunct_wchar_do_thousands_sep
)
8425 VTABLE_ADD_FUNC(numpunct_wchar_do_grouping
)
8426 VTABLE_ADD_FUNC(numpunct_wchar_do_falsename
)
8427 VTABLE_ADD_FUNC(numpunct_wchar_do_truename
));
8428 __ASM_VTABLE(numpunct_short
,
8429 VTABLE_ADD_FUNC(numpunct_wchar_vector_dtor
)
8430 VTABLE_ADD_FUNC(numpunct_wchar_do_decimal_point
)
8431 VTABLE_ADD_FUNC(numpunct_wchar_do_thousands_sep
)
8432 VTABLE_ADD_FUNC(numpunct_wchar_do_grouping
)
8433 VTABLE_ADD_FUNC(numpunct_wchar_do_falsename
)
8434 VTABLE_ADD_FUNC(numpunct_wchar_do_truename
));
8435 __ASM_VTABLE(num_get_char
,
8436 VTABLE_ADD_FUNC(num_get_char_vector_dtor
)
8437 VTABLE_ADD_FUNC(num_get_char_do_get_void
)
8438 VTABLE_ADD_FUNC(num_get_char_do_get_double
)
8439 VTABLE_ADD_FUNC(num_get_char_do_get_double
)
8440 VTABLE_ADD_FUNC(num_get_char_do_get_float
)
8441 VTABLE_ADD_FUNC(num_get_char_do_get_uint64
)
8442 VTABLE_ADD_FUNC(num_get_char_do_get_int64
)
8443 VTABLE_ADD_FUNC(num_get_char_do_get_ulong
)
8444 VTABLE_ADD_FUNC(num_get_char_do_get_long
)
8445 VTABLE_ADD_FUNC(num_get_char_do_get_uint
)
8446 VTABLE_ADD_FUNC(num_get_char_do_get_ushort
)
8447 VTABLE_ADD_FUNC(num_get_char_do_get_bool
));
8448 __ASM_VTABLE(num_get_short
,
8449 VTABLE_ADD_FUNC(num_get_wchar_vector_dtor
)
8450 VTABLE_ADD_FUNC(num_get_short_do_get_void
)
8451 VTABLE_ADD_FUNC(num_get_short_do_get_double
)
8452 VTABLE_ADD_FUNC(num_get_short_do_get_double
)
8453 VTABLE_ADD_FUNC(num_get_short_do_get_float
)
8454 VTABLE_ADD_FUNC(num_get_short_do_get_uint64
)
8455 VTABLE_ADD_FUNC(num_get_short_do_get_int64
)
8456 VTABLE_ADD_FUNC(num_get_short_do_get_ulong
)
8457 VTABLE_ADD_FUNC(num_get_short_do_get_long
)
8458 VTABLE_ADD_FUNC(num_get_short_do_get_uint
)
8459 VTABLE_ADD_FUNC(num_get_short_do_get_ushort
)
8460 VTABLE_ADD_FUNC(num_get_short_do_get_bool
));
8461 __ASM_VTABLE(num_get_wchar
,
8462 VTABLE_ADD_FUNC(num_get_wchar_vector_dtor
)
8463 VTABLE_ADD_FUNC(num_get_wchar_do_get_void
)
8464 VTABLE_ADD_FUNC(num_get_wchar_do_get_double
)
8465 VTABLE_ADD_FUNC(num_get_wchar_do_get_double
)
8466 VTABLE_ADD_FUNC(num_get_wchar_do_get_float
)
8467 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint64
)
8468 VTABLE_ADD_FUNC(num_get_wchar_do_get_int64
)
8469 VTABLE_ADD_FUNC(num_get_wchar_do_get_ulong
)
8470 VTABLE_ADD_FUNC(num_get_wchar_do_get_long
)
8471 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint
)
8472 VTABLE_ADD_FUNC(num_get_wchar_do_get_ushort
)
8473 VTABLE_ADD_FUNC(num_get_wchar_do_get_bool
));
8474 __ASM_VTABLE(num_put_char
,
8475 VTABLE_ADD_FUNC(num_put_char_vector_dtor
)
8476 VTABLE_ADD_FUNC(num_put_char_do_put_ptr
)
8477 VTABLE_ADD_FUNC(num_put_char_do_put_double
)
8478 VTABLE_ADD_FUNC(num_put_char_do_put_double
)
8479 VTABLE_ADD_FUNC(num_put_char_do_put_uint64
)
8480 VTABLE_ADD_FUNC(num_put_char_do_put_int64
)
8481 VTABLE_ADD_FUNC(num_put_char_do_put_ulong
)
8482 VTABLE_ADD_FUNC(num_put_char_do_put_long
)
8483 VTABLE_ADD_FUNC(num_put_char_do_put_bool
));
8484 __ASM_VTABLE(num_put_wchar
,
8485 VTABLE_ADD_FUNC(num_put_wchar_vector_dtor
)
8486 VTABLE_ADD_FUNC(num_put_wchar_do_put_ptr
)
8487 VTABLE_ADD_FUNC(num_put_wchar_do_put_double
)
8488 VTABLE_ADD_FUNC(num_put_wchar_do_put_double
)
8489 VTABLE_ADD_FUNC(num_put_wchar_do_put_uint64
)
8490 VTABLE_ADD_FUNC(num_put_wchar_do_put_int64
)
8491 VTABLE_ADD_FUNC(num_put_wchar_do_put_ulong
)
8492 VTABLE_ADD_FUNC(num_put_wchar_do_put_long
)
8493 VTABLE_ADD_FUNC(num_put_wchar_do_put_bool
));
8494 __ASM_VTABLE(num_put_short
,
8495 VTABLE_ADD_FUNC(num_put_wchar_vector_dtor
)
8496 VTABLE_ADD_FUNC(num_put_short_do_put_ptr
)
8497 VTABLE_ADD_FUNC(num_put_short_do_put_double
)
8498 VTABLE_ADD_FUNC(num_put_short_do_put_double
)
8499 VTABLE_ADD_FUNC(num_put_short_do_put_uint64
)
8500 VTABLE_ADD_FUNC(num_put_short_do_put_int64
)
8501 VTABLE_ADD_FUNC(num_put_short_do_put_ulong
)
8502 VTABLE_ADD_FUNC(num_put_short_do_put_long
)
8503 VTABLE_ADD_FUNC(num_put_short_do_put_bool
));
8508 void init_locale(void *base
)
8511 init_locale_facet_rtti(base
);
8512 init_collate_char_rtti(base
);
8513 init_collate_wchar_rtti(base
);
8514 init_collate_short_rtti(base
);
8515 init_ctype_base_rtti(base
);
8516 init_ctype_char_rtti(base
);
8517 init_ctype_wchar_rtti(base
);
8518 init_ctype_short_rtti(base
);
8519 init_codecvt_base_rtti(base
);
8520 init_codecvt_char_rtti(base
);
8521 init_codecvt_wchar_rtti(base
);
8522 init_codecvt_short_rtti(base
);
8523 init_numpunct_char_rtti(base
);
8524 init_numpunct_wchar_rtti(base
);
8525 init_numpunct_short_rtti(base
);
8526 init_num_get_char_rtti(base
);
8527 init_num_get_wchar_rtti(base
);
8528 init_num_get_short_rtti(base
);
8529 init_num_put_char_rtti(base
);
8530 init_num_put_wchar_rtti(base
);
8531 init_num_put_short_rtti(base
);
8535 void free_locale(void)
8537 facets_elem
*iter
, *safe
;
8540 locale__Locimp_dtor(global_locale
);
8541 locale_dtor(&classic_locale
);
8544 LIST_FOR_EACH_ENTRY_SAFE(iter
, safe
, &lazy_facets
, facets_elem
, entry
) {
8545 list_remove(&iter
->entry
);
8546 if(locale_facet__Decref(iter
->fac
))
8547 call_locale_facet_vector_dtor(iter
->fac
, 1);
8548 MSVCRT_operator_delete(iter
);