2 * Copyright 2010 Piotr Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
32 #include "wine/list.h"
37 #include "wine/unicode.h"
38 #include "wine/debug.h"
39 WINE_DEFAULT_DEBUG_CHANNEL(msvcp
);
41 char* __cdecl
_Getdays(void);
42 char* __cdecl
_Getmonths(void);
43 void* __cdecl
_Gettnames(void);
44 unsigned int __cdecl
___lc_codepage_func(void);
45 LCID
* __cdecl
___lc_handle_func(void);
46 const locale_facet
* __thiscall
locale__Getfacet(const locale
*, MSVCP_size_t
);
47 MSVCP_size_t __cdecl
_Strftime(char*, MSVCP_size_t
, const char*,
48 const struct tm
*, struct __lc_time_data
*);
49 const locale
* __cdecl
locale_classic(void);
57 typedef struct _locale__Locimp
{
59 locale_facet
**facetvec
;
60 MSVCP_size_t facet_cnt
;
62 MSVCP_bool transparent
;
63 basic_string_char name
;
72 basic_string_char days
;
73 basic_string_char months
;
74 basic_string_char oldlocname
;
75 basic_string_char newlocname
;
93 const char *false_name
;
94 const char *true_name
;
102 const wchar_t *false_name
;
103 const wchar_t *true_name
;
112 /* ?_Id_cnt@id@locale@std@@0HA */
113 int locale_id__Id_cnt
= 0;
115 static locale__Locimp
*global_locale
;
116 static locale classic_locale
;
118 /* ?_Clocptr@_Locimp@locale@std@@0PAV123@A */
119 /* ?_Clocptr@_Locimp@locale@std@@0PEAV123@EA */
120 locale__Locimp
*locale__Locimp__Clocptr
= NULL
;
122 static char istreambuf_iterator_char_val(istreambuf_iterator_char
*this)
124 if(this->strbuf
&& !this->got
) {
125 int c
= basic_streambuf_char_sgetc(this->strbuf
);
136 static wchar_t istreambuf_iterator_wchar_val(istreambuf_iterator_wchar
*this)
138 if(this->strbuf
&& !this->got
) {
139 unsigned short c
= basic_streambuf_wchar_sgetc(this->strbuf
);
150 static void istreambuf_iterator_char_inc(istreambuf_iterator_char
*this)
152 if(!this->strbuf
|| basic_streambuf_char_sbumpc(this->strbuf
)==EOF
) {
157 istreambuf_iterator_char_val(this);
161 static void istreambuf_iterator_wchar_inc(istreambuf_iterator_wchar
*this)
163 if(!this->strbuf
|| basic_streambuf_wchar_sbumpc(this->strbuf
)==WEOF
) {
168 istreambuf_iterator_wchar_val(this);
172 static void ostreambuf_iterator_char_put(ostreambuf_iterator_char
*this, char ch
)
174 if(this->failed
|| basic_streambuf_char_sputc(this->strbuf
, ch
)==EOF
)
178 static void ostreambuf_iterator_wchar_put(ostreambuf_iterator_wchar
*this, wchar_t ch
)
180 if(this->failed
|| basic_streambuf_wchar_sputc(this->strbuf
, ch
)==WEOF
)
184 /* ??1facet@locale@std@@UAE@XZ */
185 /* ??1facet@locale@std@@UEAA@XZ */
186 DEFINE_THISCALL_WRAPPER(locale_facet_dtor
, 4)
187 void __thiscall
locale_facet_dtor(locale_facet
*this)
189 TRACE("(%p)\n", this);
192 DEFINE_THISCALL_WRAPPER(locale_facet_vector_dtor
, 8)
193 #define call_locale_facet_vector_dtor(this, flags) CALL_VTBL_FUNC(this, 0, \
194 locale_facet*, (locale_facet*, unsigned int), (this, flags))
195 locale_facet
* __thiscall
locale_facet_vector_dtor(locale_facet
*this, unsigned int flags
)
197 TRACE("(%p %x)\n", this, flags
);
199 /* we have an array, with the number of elements stored before the first object */
200 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
202 for(i
=*ptr
-1; i
>=0; i
--)
203 locale_facet_dtor(this+i
);
204 MSVCRT_operator_delete(ptr
);
206 locale_facet_dtor(this);
208 MSVCRT_operator_delete(this);
219 static struct list lazy_facets
= LIST_INIT(lazy_facets
);
221 /* ?facet_Register@facet@locale@std@@CAXPAV123@@Z */
222 /* ?facet_Register@facet@locale@std@@CAXPEAV123@@Z */
223 void __cdecl
locale_facet_register(locale_facet
*add
)
225 facets_elem
*head
= MSVCRT_operator_new(sizeof(*head
));
227 ERR("Out of memory\n");
228 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
232 list_add_head(&lazy_facets
, &head
->entry
);
235 /* ?_Register@facet@locale@std@@QAEXXZ */
236 /* ?_Register@facet@locale@std@@QEAAXXZ */
237 DEFINE_THISCALL_WRAPPER(locale_facet__Register
, 4)
238 void __thiscall
locale_facet__Register(locale_facet
*this)
240 TRACE("(%p)\n", this);
241 locale_facet_register(this);
244 /* ??_7facet@locale@std@@6B@ */
245 extern const vtable_ptr MSVCP_locale_facet_vtable
;
247 /* ??0id@locale@std@@QAE@I@Z */
248 /* ??0id@locale@std@@QEAA@_K@Z */
249 DEFINE_THISCALL_WRAPPER(locale_id_ctor_id
, 8)
250 locale_id
* __thiscall
locale_id_ctor_id(locale_id
*this, MSVCP_size_t id
)
252 TRACE("(%p %lu)\n", this, id
);
258 /* ??_Fid@locale@std@@QAEXXZ */
259 /* ??_Fid@locale@std@@QEAAXXZ */
260 DEFINE_THISCALL_WRAPPER(locale_id_ctor
, 4)
261 locale_id
* __thiscall
locale_id_ctor(locale_id
*this)
263 TRACE("(%p)\n", this);
269 /* ??Bid@locale@std@@QAEIXZ */
270 /* ??Bid@locale@std@@QEAA_KXZ */
271 DEFINE_THISCALL_WRAPPER(locale_id_operator_size_t
, 4)
272 MSVCP_size_t __thiscall
locale_id_operator_size_t(locale_id
*this)
276 TRACE("(%p)\n", this);
279 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
280 this->id
= ++locale_id__Id_cnt
;
287 /* ?_Id_cnt_func@id@locale@std@@CAAAHXZ */
288 /* ?_Id_cnt_func@id@locale@std@@CAAEAHXZ */
289 int* __cdecl
locale_id__Id_cnt_func(void)
292 return &locale_id__Id_cnt
;
295 /* ??_Ffacet@locale@std@@QAEXXZ */
296 /* ??_Ffacet@locale@std@@QEAAXXZ */
297 DEFINE_THISCALL_WRAPPER(locale_facet_ctor
, 4)
298 locale_facet
* __thiscall
locale_facet_ctor(locale_facet
*this)
300 TRACE("(%p)\n", this);
301 this->vtable
= &MSVCP_locale_facet_vtable
;
306 /* ??0facet@locale@std@@IAE@I@Z */
307 /* ??0facet@locale@std@@IEAA@_K@Z */
308 DEFINE_THISCALL_WRAPPER(locale_facet_ctor_refs
, 8)
309 locale_facet
* __thiscall
locale_facet_ctor_refs(locale_facet
*this, MSVCP_size_t refs
)
311 TRACE("(%p %lu)\n", this, refs
);
312 this->vtable
= &MSVCP_locale_facet_vtable
;
317 /* ?_Incref@facet@locale@std@@QAEXXZ */
318 /* ?_Incref@facet@locale@std@@QEAAXXZ */
319 DEFINE_THISCALL_WRAPPER(locale_facet__Incref
, 4)
320 void __thiscall
locale_facet__Incref(locale_facet
*this)
324 TRACE("(%p)\n", this);
326 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
331 /* ?_Decref@facet@locale@std@@QAEPAV123@XZ */
332 /* ?_Decref@facet@locale@std@@QEAAPEAV123@XZ */
333 DEFINE_THISCALL_WRAPPER(locale_facet__Decref
, 4)
334 locale_facet
* __thiscall
locale_facet__Decref(locale_facet
*this)
339 TRACE("(%p)\n", this);
341 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
345 ret
= this->refs
? NULL
: this;
351 /* ??0_Timevec@std@@QAE@ABV01@@Z */
352 /* ??0_Timevec@std@@QEAA@AEBV01@@Z */
353 /* This copy constructor modifies copied object */
354 DEFINE_THISCALL_WRAPPER(_Timevec_copy_ctor
, 8)
355 _Timevec
* __thiscall
_Timevec_copy_ctor(_Timevec
*this, _Timevec
*copy
)
357 TRACE("(%p %p)\n", this, copy
);
358 this->timeptr
= copy
->timeptr
;
359 copy
->timeptr
= NULL
;
363 /* ??0_Timevec@std@@QAE@PAX@Z */
364 /* ??0_Timevec@std@@QEAA@PEAX@Z */
365 DEFINE_THISCALL_WRAPPER(_Timevec_ctor_timeptr
, 8)
366 _Timevec
* __thiscall
_Timevec_ctor_timeptr(_Timevec
*this, void *timeptr
)
368 TRACE("(%p %p)\n", this, timeptr
);
369 this->timeptr
= timeptr
;
373 /* ??_F_Timevec@std@@QAEXXZ */
374 /* ??_F_Timevec@std@@QEAAXXZ */
375 DEFINE_THISCALL_WRAPPER(_Timevec_ctor
, 4)
376 _Timevec
* __thiscall
_Timevec_ctor(_Timevec
*this)
378 TRACE("(%p)\n", this);
379 this->timeptr
= NULL
;
383 /* ??1_Timevec@std@@QAE@XZ */
384 /* ??1_Timevec@std@@QEAA@XZ */
385 DEFINE_THISCALL_WRAPPER(_Timevec_dtor
, 4)
386 void __thiscall
_Timevec_dtor(_Timevec
*this)
388 TRACE("(%p)\n", this);
392 /* ??4_Timevec@std@@QAEAAV01@ABV01@@Z */
393 /* ??4_Timevec@std@@QEAAAEAV01@AEBV01@@Z */
394 DEFINE_THISCALL_WRAPPER(_Timevec_op_assign
, 8)
395 _Timevec
* __thiscall
_Timevec_op_assign(_Timevec
*this, _Timevec
*right
)
397 TRACE("(%p %p)\n", this, right
);
398 this->timeptr
= right
->timeptr
;
399 right
->timeptr
= NULL
;
403 /* ?_Getptr@_Timevec@std@@QBEPAXXZ */
404 /* ?_Getptr@_Timevec@std@@QEBAPEAXXZ */
405 DEFINE_THISCALL_WRAPPER(_Timevec__Getptr
, 4)
406 void* __thiscall
_Timevec__Getptr(_Timevec
*this)
408 TRACE("(%p)\n", this);
409 return this->timeptr
;
412 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@HPBD@Z */
413 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@HPEBD@Z */
414 _Locinfo
* __cdecl
_Locinfo__Locinfo_ctor_cat_cstr(_Locinfo
*locinfo
, int category
, const char *locstr
)
416 const char *locale
= NULL
;
418 /* This function is probably modifying more global objects */
419 FIXME("(%p %d %s) semi-stub\n", locinfo
, category
, locstr
);
422 throw_exception(EXCEPTION_RUNTIME_ERROR
, "bad locale name");
424 _Lockit_ctor_locktype(&locinfo
->lock
, _LOCK_LOCALE
);
425 MSVCP_basic_string_char_ctor_cstr(&locinfo
->days
, "");
426 MSVCP_basic_string_char_ctor_cstr(&locinfo
->months
, "");
427 MSVCP_basic_string_char_ctor_cstr(&locinfo
->oldlocname
, setlocale(LC_ALL
, NULL
));
430 locale
= setlocale(LC_ALL
, locstr
);
432 locale
= setlocale(LC_ALL
, NULL
);
435 MSVCP_basic_string_char_ctor_cstr(&locinfo
->newlocname
, locale
);
437 MSVCP_basic_string_char_ctor_cstr(&locinfo
->newlocname
, "*");
442 /* ??0_Locinfo@std@@QAE@HPBD@Z */
443 /* ??0_Locinfo@std@@QEAA@HPEBD@Z */
444 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cat_cstr
, 12)
445 _Locinfo
* __thiscall
_Locinfo_ctor_cat_cstr(_Locinfo
*this, int category
, const char *locstr
)
447 return _Locinfo__Locinfo_ctor_cat_cstr(this, category
, locstr
);
450 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@PBD@Z */
451 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@PEBD@Z */
452 _Locinfo
* __cdecl
_Locinfo__Locinfo_ctor_cstr(_Locinfo
*locinfo
, const char *locstr
)
454 return _Locinfo__Locinfo_ctor_cat_cstr(locinfo
, 1/*FIXME*/, locstr
);
457 /* ??0_Locinfo@std@@QAE@PBD@Z */
458 /* ??0_Locinfo@std@@QEAA@PEBD@Z */
459 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cstr
, 8)
460 _Locinfo
* __thiscall
_Locinfo_ctor_cstr(_Locinfo
*this, const char *locstr
)
462 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, locstr
);
465 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPAV12@@Z */
466 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPEAV12@@Z */
467 void __cdecl
_Locinfo__Locinfo_dtor(_Locinfo
*locinfo
)
469 TRACE("(%p)\n", locinfo
);
471 setlocale(LC_ALL
, MSVCP_basic_string_char_c_str(&locinfo
->oldlocname
));
472 MSVCP_basic_string_char_dtor(&locinfo
->days
);
473 MSVCP_basic_string_char_dtor(&locinfo
->months
);
474 MSVCP_basic_string_char_dtor(&locinfo
->oldlocname
);
475 MSVCP_basic_string_char_dtor(&locinfo
->newlocname
);
476 _Lockit_dtor(&locinfo
->lock
);
479 /* ??_F_Locinfo@std@@QAEXXZ */
480 /* ??_F_Locinfo@std@@QEAAXXZ */
481 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor
, 4)
482 _Locinfo
* __thiscall
_Locinfo_ctor(_Locinfo
*this)
484 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, "C");
487 /* ??1_Locinfo@std@@QAE@XZ */
488 /* ??1_Locinfo@std@@QEAA@XZ */
489 DEFINE_THISCALL_WRAPPER(_Locinfo_dtor
, 4)
490 void __thiscall
_Locinfo_dtor(_Locinfo
*this)
492 _Locinfo__Locinfo_dtor(this);
495 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAAV12@PAV12@HPBD@Z */
496 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAEAV12@PEAV12@HPEBD@Z */
497 _Locinfo
* __cdecl
_Locinfo__Locinfo_Addcats(_Locinfo
*locinfo
, int category
, const char *locstr
)
499 const char *locale
= NULL
;
501 /* This function is probably modifying more global objects */
502 FIXME("(%p %d %s) semi-stub\n", locinfo
, category
, locstr
);
504 throw_exception(EXCEPTION_RUNTIME_ERROR
, "bad locale name");
506 MSVCP_basic_string_char_dtor(&locinfo
->newlocname
);
509 locale
= setlocale(LC_ALL
, locstr
);
511 locale
= setlocale(LC_ALL
, NULL
);
514 MSVCP_basic_string_char_ctor_cstr(&locinfo
->newlocname
, locale
);
516 MSVCP_basic_string_char_ctor_cstr(&locinfo
->newlocname
, "*");
521 /* ?_Addcats@_Locinfo@std@@QAEAAV12@HPBD@Z */
522 /* ?_Addcats@_Locinfo@std@@QEAAAEAV12@HPEBD@Z */
523 DEFINE_THISCALL_WRAPPER(_Locinfo__Addcats
, 12)
524 _Locinfo
* __thiscall
_Locinfo__Addcats(_Locinfo
*this, int category
, const char *locstr
)
526 return _Locinfo__Locinfo_Addcats(this, category
, locstr
);
530 ULONGLONG __cdecl
_Getcoll(void)
536 _locale_t locale
= _get_current_locale();
540 ret
.collvec
.page
= locale
->locinfo
->lc_collate_cp
;
541 ret
.collvec
.handle
= locale
->locinfo
->lc_handle
[LC_COLLATE
];
542 _free_locale(locale
);
546 /* ?_Getcoll@_Locinfo@std@@QBE?AU_Collvec@@XZ */
547 /* ?_Getcoll@_Locinfo@std@@QEBA?AU_Collvec@@XZ */
548 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcoll
, 8)
549 _Collvec
* __thiscall
_Locinfo__Getcoll(const _Locinfo
*this, _Collvec
*ret
)
551 ULONGLONG ull
= _Getcoll();
552 memcpy(ret
, &ull
, sizeof(ull
));
557 _Ctypevec
* __cdecl
_Getctype(_Ctypevec
*ret
)
559 _locale_t locale
= _get_current_locale();
564 ret
->page
= locale
->locinfo
->lc_codepage
;
565 ret
->handle
= locale
->locinfo
->lc_handle
[LC_COLLATE
];
567 table
= malloc(sizeof(short[256]));
569 _free_locale(locale
);
570 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
572 memcpy(table
, locale
->locinfo
->pctype
, sizeof(short[256]));
574 _free_locale(locale
);
578 /* ?_Getctype@_Locinfo@std@@QBE?AU_Ctypevec@@XZ */
579 /* ?_Getctype@_Locinfo@std@@QEBA?AU_Ctypevec@@XZ */
580 DEFINE_THISCALL_WRAPPER(_Locinfo__Getctype
, 8)
581 _Ctypevec
* __thiscall
_Locinfo__Getctype(const _Locinfo
*this, _Ctypevec
*ret
)
583 return _Getctype(ret
);
587 ULONGLONG __cdecl
_Getcvt(void)
589 _locale_t locale
= _get_current_locale();
597 ret
.cvtvec
.page
= locale
->locinfo
->lc_codepage
;
598 ret
.cvtvec
.handle
= locale
->locinfo
->lc_handle
[LC_CTYPE
];
599 _free_locale(locale
);
603 /* ?_Getcvt@_Locinfo@std@@QBE?AU_Cvtvec@@XZ */
604 /* ?_Getcvt@_Locinfo@std@@QEBA?AU_Cvtvec@@XZ */
605 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcvt
, 8)
606 _Cvtvec
* __thiscall
_Locinfo__Getcvt(const _Locinfo
*this, _Cvtvec
*ret
)
608 ULONGLONG ull
= _Getcvt();
609 memcpy(ret
, &ull
, sizeof(ull
));
613 /* ?_Getdateorder@_Locinfo@std@@QBEHXZ */
614 /* ?_Getdateorder@_Locinfo@std@@QEBAHXZ */
615 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdateorder
, 4)
616 int __thiscall
_Locinfo__Getdateorder(const _Locinfo
*this)
618 FIXME("(%p) stub\n", this);
622 /* ?_Getdays@_Locinfo@std@@QBEPBDXZ */
623 /* ?_Getdays@_Locinfo@std@@QEBAPEBDXZ */
624 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdays
, 4)
625 const char* __thiscall
_Locinfo__Getdays(_Locinfo
*this)
627 char *days
= _Getdays();
629 TRACE("(%p)\n", this);
632 MSVCP_basic_string_char_dtor(&this->days
);
633 MSVCP_basic_string_char_ctor_cstr(&this->days
, days
);
637 return this->days
.size
? MSVCP_basic_string_char_c_str(&this->days
) :
638 ":Sun:Sunday:Mon:Monday:Tue:Tuesday:Wed:Wednesday:Thu:Thursday:Fri:Friday:Sat:Saturday";
641 /* ?_Getmonths@_Locinfo@std@@QBEPBDXZ */
642 /* ?_Getmonths@_Locinfo@std@@QEBAPEBDXZ */
643 DEFINE_THISCALL_WRAPPER(_Locinfo__Getmonths
, 4)
644 const char* __thiscall
_Locinfo__Getmonths(_Locinfo
*this)
646 char *months
= _Getmonths();
648 TRACE("(%p)\n", this);
651 MSVCP_basic_string_char_dtor(&this->months
);
652 MSVCP_basic_string_char_ctor_cstr(&this->months
, months
);
656 return this->months
.size
? MSVCP_basic_string_char_c_str(&this->months
) :
657 ":Jan:January:Feb:February:Mar:March:Apr:April:May:May:Jun:June:Jul:July"
658 ":Aug:August:Sep:September:Oct:October:Nov:November:Dec:December";
661 /* ?_Getfalse@_Locinfo@std@@QBEPBDXZ */
662 /* ?_Getfalse@_Locinfo@std@@QEBAPEBDXZ */
663 DEFINE_THISCALL_WRAPPER(_Locinfo__Getfalse
, 4)
664 const char* __thiscall
_Locinfo__Getfalse(const _Locinfo
*this)
666 TRACE("(%p)\n", this);
670 /* ?_Gettrue@_Locinfo@std@@QBEPBDXZ */
671 /* ?_Gettrue@_Locinfo@std@@QEBAPEBDXZ */
672 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettrue
, 4)
673 const char* __thiscall
_Locinfo__Gettrue(const _Locinfo
*this)
675 TRACE("(%p)\n", this);
679 /* ?_Getlconv@_Locinfo@std@@QBEPBUlconv@@XZ */
680 /* ?_Getlconv@_Locinfo@std@@QEBAPEBUlconv@@XZ */
681 DEFINE_THISCALL_WRAPPER(_Locinfo__Getlconv
, 4)
682 const struct lconv
* __thiscall
_Locinfo__Getlconv(const _Locinfo
*this)
684 TRACE("(%p)\n", this);
688 /* ?_Getname@_Locinfo@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
689 /* ?_Getname@_Locinfo@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
690 DEFINE_THISCALL_WRAPPER(_Locinfo__Getname
, 8)
691 basic_string_char
* __thiscall
_Locinfo__Getname(const _Locinfo
*this, basic_string_char
*ret
)
693 TRACE("(%p)\n", this);
695 MSVCP_basic_string_char_copy_ctor(ret
, &this->newlocname
);
699 /* ?_Gettnames@_Locinfo@std@@QBE?AV_Timevec@2@XZ */
700 /* ?_Gettnames@_Locinfo@std@@QEBA?AV_Timevec@2@XZ */
701 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettnames
, 8)
702 _Timevec
*__thiscall
_Locinfo__Gettnames(const _Locinfo
*this, _Timevec
*ret
)
704 TRACE("(%p)\n", this);
706 _Timevec_ctor_timeptr(ret
, _Gettnames());
710 /* ?id@?$collate@D@std@@2V0locale@2@A */
711 locale_id collate_char_id
= {0};
713 /* ??_7?$collate@D@std@@6B@ */
714 extern const vtable_ptr MSVCP_collate_char_vtable
;
716 /* ?_Init@?$collate@D@std@@IAEXABV_Locinfo@2@@Z */
717 /* ?_Init@?$collate@D@std@@IEAAXAEBV_Locinfo@2@@Z */
718 DEFINE_THISCALL_WRAPPER(collate_char__Init
, 8)
719 void __thiscall
collate_char__Init(collate
*this, const _Locinfo
*locinfo
)
721 TRACE("(%p %p)\n", this, locinfo
);
722 _Locinfo__Getcoll(locinfo
, &this->coll
);
725 /* ??0?$collate@D@std@@IAE@PBDI@Z */
726 /* ??0?$collate@D@std@@IEAA@PEBD_K@Z */
727 DEFINE_THISCALL_WRAPPER(collate_char_ctor_name
, 12)
728 collate
* __thiscall
collate_char_ctor_name(collate
*this, const char *name
, MSVCP_size_t refs
)
732 TRACE("(%p %s %lu)\n", this, name
, refs
);
734 locale_facet_ctor_refs(&this->facet
, refs
);
735 this->facet
.vtable
= &MSVCP_collate_char_vtable
;
737 _Locinfo_ctor_cstr(&locinfo
, name
);
738 collate_char__Init(this, &locinfo
);
739 _Locinfo_dtor(&locinfo
);
743 /* ??0?$collate@D@std@@QAE@ABV_Locinfo@1@I@Z */
744 /* ??0?$collate@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
745 DEFINE_THISCALL_WRAPPER(collate_char_ctor_locinfo
, 12)
746 collate
* __thiscall
collate_char_ctor_locinfo(collate
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
748 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
750 locale_facet_ctor_refs(&this->facet
, refs
);
751 this->facet
.vtable
= &MSVCP_collate_char_vtable
;
752 collate_char__Init(this, locinfo
);
756 /* ??0?$collate@D@std@@QAE@I@Z */
757 /* ??0?$collate@D@std@@QEAA@_K@Z */
758 DEFINE_THISCALL_WRAPPER(collate_char_ctor_refs
, 8)
759 collate
* __thiscall
collate_char_ctor_refs(collate
*this, MSVCP_size_t refs
)
761 return collate_char_ctor_name(this, "C", refs
);
764 /* ??1?$collate@D@std@@MAE@XZ */
765 /* ??1?$collate@D@std@@MEAA@XZ */
766 DEFINE_THISCALL_WRAPPER(collate_char_dtor
, 4)
767 void __thiscall
collate_char_dtor(collate
*this)
769 TRACE("(%p)\n", this);
772 DEFINE_THISCALL_WRAPPER(collate_char_vector_dtor
, 8)
773 collate
* __thiscall
collate_char_vector_dtor(collate
*this, unsigned int flags
)
775 TRACE("(%p %x)\n", this, flags
);
777 /* we have an array, with the number of elements stored before the first object */
778 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
780 for(i
=*ptr
-1; i
>=0; i
--)
781 collate_char_dtor(this+i
);
782 MSVCRT_operator_delete(ptr
);
784 collate_char_dtor(this);
786 MSVCRT_operator_delete(this);
792 /* ??_F?$collate@D@std@@QAEXXZ */
793 /* ??_F?$collate@D@std@@QEAAXXZ */
794 DEFINE_THISCALL_WRAPPER(collate_char_ctor
, 4)
795 collate
* __thiscall
collate_char_ctor(collate
*this)
797 return collate_char_ctor_name(this, "C", 0);
800 /* ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
801 /* ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
802 static MSVCP_size_t
collate_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
804 TRACE("(%p %p)\n", facet
, loc
);
806 if(facet
&& !*facet
) {
807 *facet
= MSVCRT_operator_new(sizeof(collate
));
809 ERR("Out of memory\n");
810 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
813 collate_char_ctor_name((collate
*)*facet
,
814 MSVCP_basic_string_char_c_str(&loc
->ptr
->name
), 0);
820 /* ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@@Z */
821 /* ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
822 MSVCP_size_t __cdecl
collate_char__Getcat_old(const locale_facet
**facet
)
824 return collate_char__Getcat(facet
, locale_classic());
827 static collate
* collate_char_use_facet(const locale
*loc
)
829 static collate
*obj
= NULL
;
832 const locale_facet
*fac
;
834 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
835 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&collate_char_id
));
838 return (collate
*)fac
;
846 collate_char__Getcat(&fac
, loc
);
848 locale_facet__Incref(&obj
->facet
);
849 locale_facet_register(&obj
->facet
);
856 int __cdecl
_Strcoll(const char *first1
, const char *last1
, const char *first2
,
857 const char *last2
, const _Collvec
*coll
)
861 TRACE("(%s %s)\n", debugstr_an(first1
, last1
-first1
), debugstr_an(first2
, last2
-first2
));
866 lcid
= ___lc_handle_func()[LC_COLLATE
];
867 return CompareStringA(lcid
, 0, first1
, last1
-first1
, first2
, last2
-first2
)-CSTR_EQUAL
;
870 /* ?do_compare@?$collate@D@std@@MBEHPBD000@Z */
871 /* ?do_compare@?$collate@D@std@@MEBAHPEBD000@Z */
872 DEFINE_THISCALL_WRAPPER(collate_char_do_compare
, 20)
873 #define call_collate_char_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 4, int, \
874 (const collate*, const char*, const char*, const char*, const char*), \
875 (this, first1, last1, first2, last2))
876 int __thiscall
collate_char_do_compare(const collate
*this, const char *first1
,
877 const char *last1
, const char *first2
, const char *last2
)
879 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
880 return _Strcoll(first1
, last1
, first2
, last2
, &this->coll
);
883 /* ?compare@?$collate@D@std@@QBEHPBD000@Z */
884 /* ?compare@?$collate@D@std@@QEBAHPEBD000@Z */
885 DEFINE_THISCALL_WRAPPER(collate_char_compare
, 20)
886 int __thiscall
collate_char_compare(const collate
*this, const char *first1
,
887 const char *last1
, const char *first2
, const char *last2
)
889 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
890 return call_collate_char_do_compare(this, first1
, last1
, first2
, last2
);
893 /* ?do_hash@?$collate@D@std@@MBEJPBD0@Z */
894 /* ?do_hash@?$collate@D@std@@MEBAJPEBD0@Z */
895 DEFINE_THISCALL_WRAPPER(collate_char_do_hash
, 12)
896 #define call_collate_char_do_hash(this, first, last) CALL_VTBL_FUNC(this, 12, LONG, \
897 (const collate*, const char*, const char*), (this, first, last))
898 LONG __thiscall
collate_char_do_hash(const collate
*this,
899 const char *first
, const char *last
)
903 TRACE("(%p %p %p)\n", this, first
, last
);
905 for(; first
<last
; first
++)
906 ret
= (ret
<<8 | ret
>>24) + *first
;
910 /* ?hash@?$collate@D@std@@QBEJPBD0@Z */
911 /* ?hash@?$collate@D@std@@QEBAJPEBD0@Z */
912 DEFINE_THISCALL_WRAPPER(collate_char_hash
, 12)
913 LONG __thiscall
collate_char_hash(const collate
*this,
914 const char *first
, const char *last
)
916 TRACE("(%p %p %p)\n", this, first
, last
);
917 return call_collate_char_do_hash(this, first
, last
);
920 /* ?do_transform@?$collate@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
921 /* ?do_transform@?$collate@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
922 DEFINE_THISCALL_WRAPPER(collate_char_do_transform
, 16)
923 basic_string_char
* __thiscall
collate_char_do_transform(const collate
*this,
924 basic_string_char
*ret
, const char *first
, const char *last
)
926 FIXME("(%p %p %p) stub\n", this, first
, last
);
930 /* ?transform@?$collate@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
931 /* ?transform@?$collate@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
932 DEFINE_THISCALL_WRAPPER(collate_char_transform
, 16)
933 basic_string_char
* __thiscall
collate_char_transform(const collate
*this,
934 basic_string_char
*ret
, const char *first
, const char *last
)
936 FIXME("(%p %p %p) stub\n", this, first
, last
);
940 /* ?id@?$collate@_W@std@@2V0locale@2@A */
941 locale_id collate_wchar_id
= {0};
942 /* ?id@?$collate@G@std@@2V0locale@2@A */
943 locale_id collate_short_id
= {0};
945 /* ??_7?$collate@_W@std@@6B@ */
946 extern const vtable_ptr MSVCP_collate_wchar_vtable
;
947 /* ??_7?$collate@G@std@@6B@ */
948 extern const vtable_ptr MSVCP_collate_short_vtable
;
950 /* ?_Init@?$collate@_W@std@@IAEXABV_Locinfo@2@@Z */
951 /* ?_Init@?$collate@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
952 /* ?_Init@?$collate@G@std@@IAEXABV_Locinfo@2@@Z */
953 /* ?_Init@?$collate@G@std@@IEAAXAEBV_Locinfo@2@@Z */
954 DEFINE_THISCALL_WRAPPER(collate_wchar__Init
, 8)
955 void __thiscall
collate_wchar__Init(collate
*this, const _Locinfo
*locinfo
)
957 TRACE("(%p %p)\n", this, locinfo
);
958 _Locinfo__Getcoll(locinfo
, &this->coll
);
961 /* ??0?$collate@_W@std@@IAE@PBDI@Z */
962 /* ??0?$collate@_W@std@@IEAA@PEBD_K@Z */
963 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_name
, 12)
964 collate
* __thiscall
collate_wchar_ctor_name(collate
*this, const char *name
, MSVCP_size_t refs
)
968 TRACE("(%p %s %lu)\n", this, name
, refs
);
970 locale_facet_ctor_refs(&this->facet
, refs
);
971 this->facet
.vtable
= &MSVCP_collate_wchar_vtable
;
973 _Locinfo_ctor_cstr(&locinfo
, name
);
974 collate_wchar__Init(this, &locinfo
);
975 _Locinfo_dtor(&locinfo
);
979 /* ??0?$collate@G@std@@IAE@PBDI@Z */
980 /* ??0?$collate@G@std@@IEAA@PEBD_K@Z */
981 DEFINE_THISCALL_WRAPPER(collate_short_ctor_name
, 12)
982 collate
* __thiscall
collate_short_ctor_name(collate
*this, const char *name
, MSVCP_size_t refs
)
984 collate
*ret
= collate_wchar_ctor_name(this, name
, refs
);
985 ret
->facet
.vtable
= &MSVCP_collate_short_vtable
;
989 /* ??0?$collate@_W@std@@QAE@ABV_Locinfo@1@I@Z */
990 /* ??0?$collate@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
991 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_locinfo
, 12)
992 collate
* __thiscall
collate_wchar_ctor_locinfo(collate
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
994 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
996 locale_facet_ctor_refs(&this->facet
, refs
);
997 this->facet
.vtable
= &MSVCP_collate_wchar_vtable
;
998 collate_wchar__Init(this, locinfo
);
1002 /* ??0?$collate@G@std@@QAE@ABV_Locinfo@1@I@Z */
1003 /* ??0?$collate@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1004 DEFINE_THISCALL_WRAPPER(collate_short_ctor_locinfo
, 12)
1005 collate
* __thiscall
collate_short_ctor_locinfo(collate
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
1007 collate
*ret
= collate_wchar_ctor_locinfo(this, locinfo
, refs
);
1008 ret
->facet
.vtable
= &MSVCP_collate_short_vtable
;
1012 /* ??0?$collate@_W@std@@QAE@I@Z */
1013 /* ??0?$collate@_W@std@@QEAA@_K@Z */
1014 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_refs
, 8)
1015 collate
* __thiscall
collate_wchar_ctor_refs(collate
*this, MSVCP_size_t refs
)
1017 return collate_wchar_ctor_name(this, "C", refs
);
1020 /* ??0?$collate@G@std@@QAE@I@Z */
1021 /* ??0?$collate@G@std@@QEAA@_K@Z */
1022 DEFINE_THISCALL_WRAPPER(collate_short_ctor_refs
, 8)
1023 collate
* __thiscall
collate_short_ctor_refs(collate
*this, MSVCP_size_t refs
)
1025 collate
*ret
= collate_wchar_ctor_refs(this, refs
);
1026 ret
->facet
.vtable
= &MSVCP_collate_short_vtable
;
1030 /* ??1?$collate@_W@std@@MAE@XZ */
1031 /* ??1?$collate@_W@std@@MEAA@XZ */
1032 /* ??1?$collate@G@std@@MAE@XZ */
1033 /* ??1?$collate@G@std@@MEAA@XZ */
1034 DEFINE_THISCALL_WRAPPER(collate_wchar_dtor
, 4)
1035 void __thiscall
collate_wchar_dtor(collate
*this)
1037 TRACE("(%p)\n", this);
1040 DEFINE_THISCALL_WRAPPER(collate_wchar_vector_dtor
, 8)
1041 collate
* __thiscall
collate_wchar_vector_dtor(collate
*this, unsigned int flags
)
1043 TRACE("(%p %x)\n", this, flags
);
1045 /* we have an array, with the number of elements stored before the first object */
1046 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1048 for(i
=*ptr
-1; i
>=0; i
--)
1049 collate_wchar_dtor(this+i
);
1050 MSVCRT_operator_delete(ptr
);
1052 collate_wchar_dtor(this);
1054 MSVCRT_operator_delete(this);
1060 /* ??_F?$collate@_W@std@@QAEXXZ */
1061 /* ??_F?$collate@_W@std@@QEAAXXZ */
1062 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor
, 4)
1063 collate
* __thiscall
collate_wchar_ctor(collate
*this)
1065 return collate_wchar_ctor_name(this, "C", 0);
1068 /* ??_F?$collate@G@std@@QAEXXZ */
1069 /* ??_F?$collate@G@std@@QEAAXXZ */
1070 DEFINE_THISCALL_WRAPPER(collate_short_ctor
, 4)
1071 collate
* __thiscall
collate_short_ctor(collate
*this)
1073 collate
*ret
= collate_wchar_ctor(this);
1074 ret
->facet
.vtable
= &MSVCP_collate_short_vtable
;
1078 /* ?_Getcat@?$collate@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1079 /* ?_Getcat@?$collate@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1080 static MSVCP_size_t
collate_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
1082 TRACE("(%p %p)\n", facet
, loc
);
1084 if(facet
&& !*facet
) {
1085 *facet
= MSVCRT_operator_new(sizeof(collate
));
1087 ERR("Out of memory\n");
1088 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
1091 collate_wchar_ctor_name((collate
*)*facet
,
1092 MSVCP_basic_string_char_c_str(&loc
->ptr
->name
), 0);
1098 /* ?_Getcat@?$collate@_W@std@@SAIPAPBVfacet@locale@2@@Z */
1099 /* ?_Getcat@?$collate@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1100 MSVCP_size_t __cdecl
collate_wchar__Getcat_old(const locale_facet
**facet
)
1102 return collate_wchar__Getcat(facet
, locale_classic());
1105 static collate
* collate_wchar_use_facet(const locale
*loc
)
1107 static collate
*obj
= NULL
;
1110 const locale_facet
*fac
;
1112 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1113 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&collate_wchar_id
));
1115 _Lockit_dtor(&lock
);
1116 return (collate
*)fac
;
1120 _Lockit_dtor(&lock
);
1124 collate_wchar__Getcat(&fac
, loc
);
1125 obj
= (collate
*)fac
;
1126 locale_facet__Incref(&obj
->facet
);
1127 locale_facet_register(&obj
->facet
);
1128 _Lockit_dtor(&lock
);
1133 /* ?_Getcat@?$collate@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1134 /* ?_Getcat@?$collate@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1135 static MSVCP_size_t
collate_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
1137 if(facet
&& !*facet
) {
1138 collate_wchar__Getcat(facet
, loc
);
1139 (*(locale_facet
**)facet
)->vtable
= &MSVCP_collate_short_vtable
;
1145 /* ?_Getcat@?$collate@G@std@@SAIPAPBVfacet@locale@2@@Z */
1146 /* ?_Getcat@?$collate@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1147 MSVCP_size_t __cdecl
collate_short__Getcat_old(const locale_facet
**facet
)
1149 return collate_short__Getcat(facet
, locale_classic());
1152 static collate
* collate_short_use_facet(const locale
*loc
)
1154 static collate
*obj
= NULL
;
1157 const locale_facet
*fac
;
1159 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1160 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&collate_short_id
));
1162 _Lockit_dtor(&lock
);
1163 return (collate
*)fac
;
1167 _Lockit_dtor(&lock
);
1171 collate_short__Getcat(&fac
, loc
);
1172 obj
= (collate
*)fac
;
1173 locale_facet__Incref(&obj
->facet
);
1174 locale_facet_register(&obj
->facet
);
1175 _Lockit_dtor(&lock
);
1181 int __cdecl
_Wcscoll(const wchar_t *first1
, const wchar_t *last1
, const wchar_t *first2
,
1182 const wchar_t *last2
, const _Collvec
*coll
)
1186 TRACE("(%s %s)\n", debugstr_wn(first1
, last1
-first1
), debugstr_wn(first2
, last2
-first2
));
1189 lcid
= coll
->handle
;
1191 lcid
= ___lc_handle_func()[LC_COLLATE
];
1192 return CompareStringW(lcid
, 0, first1
, last1
-first1
, first2
, last2
-first2
)-CSTR_EQUAL
;
1195 /* ?do_compare@?$collate@_W@std@@MBEHPB_W000@Z */
1196 /* ?do_compare@?$collate@_W@std@@MEBAHPEB_W000@Z */
1197 /* ?do_compare@?$collate@G@std@@MBEHPBG000@Z */
1198 /* ?do_compare@?$collate@G@std@@MEBAHPEBG000@Z */
1199 DEFINE_THISCALL_WRAPPER(collate_wchar_do_compare
, 20)
1200 #define call_collate_wchar_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 4, int, \
1201 (const collate*, const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*), \
1202 (this, first1, last1, first2, last2))
1203 int __thiscall
collate_wchar_do_compare(const collate
*this, const wchar_t *first1
,
1204 const wchar_t *last1
, const wchar_t *first2
, const wchar_t *last2
)
1206 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1207 return _Wcscoll(first1
, last1
, first2
, last2
, &this->coll
);
1210 /* ?compare@?$collate@_W@std@@QBEHPB_W000@Z */
1211 /* ?compare@?$collate@_W@std@@QEBAHPEB_W000@Z */
1212 /* ?compare@?$collate@G@std@@QBEHPBG000@Z */
1213 /* ?compare@?$collate@G@std@@QEBAHPEBG000@Z */
1214 DEFINE_THISCALL_WRAPPER(collate_wchar_compare
, 20)
1215 int __thiscall
collate_wchar_compare(const collate
*this, const wchar_t *first1
,
1216 const wchar_t *last1
, const wchar_t *first2
, const wchar_t *last2
)
1218 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1219 return call_collate_wchar_do_compare(this, first1
, last1
, first2
, last2
);
1222 /* ?do_hash@?$collate@_W@std@@MBEJPB_W0@Z */
1223 /* ?do_hash@?$collate@_W@std@@MEBAJPEB_W0@Z */
1224 /* ?do_hash@?$collate@G@std@@MBEJPBG0@Z */
1225 /* ?do_hash@?$collate@G@std@@MEBAJPEBG0@Z */
1226 DEFINE_THISCALL_WRAPPER(collate_wchar_do_hash
, 12)
1227 #define call_collate_wchar_do_hash(this, first, last) CALL_VTBL_FUNC(this, 12, LONG, \
1228 (const collate*, const wchar_t*, const wchar_t*), (this, first, last))
1229 LONG __thiscall
collate_wchar_do_hash(const collate
*this,
1230 const wchar_t *first
, const wchar_t *last
)
1234 TRACE("(%p %p %p)\n", this, first
, last
);
1236 for(; first
<last
; first
++)
1237 ret
= (ret
<<8 | ret
>>24) + *first
;
1241 /* ?hash@?$collate@_W@std@@QBEJPB_W0@Z */
1242 /* ?hash@?$collate@_W@std@@QEBAJPEB_W0@Z */
1243 /* ?hash@?$collate@G@std@@QBEJPBG0@Z */
1244 /* ?hash@?$collate@G@std@@QEBAJPEBG0@Z */
1245 DEFINE_THISCALL_WRAPPER(collate_wchar_hash
, 12)
1246 LONG __thiscall
collate_wchar_hash(const collate
*this,
1247 const wchar_t *first
, const wchar_t *last
)
1249 TRACE("(%p %p %p)\n", this, first
, last
);
1250 return call_collate_wchar_do_hash(this, first
, last
);
1253 /* ?do_transform@?$collate@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
1254 /* ?do_transform@?$collate@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
1255 /* ?do_transform@?$collate@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
1256 /* ?do_transform@?$collate@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
1257 DEFINE_THISCALL_WRAPPER(collate_wchar_do_transform
, 16)
1258 basic_string_wchar
* __thiscall
collate_wchar_do_transform(const collate
*this,
1259 basic_string_wchar
*ret
, const wchar_t *first
, const wchar_t *last
)
1261 FIXME("(%p %p %p) stub\n", this, first
, last
);
1265 /* ?transform@?$collate@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
1266 /* ?transform@?$collate@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
1267 /* ?transform@?$collate@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
1268 /* ?transform@?$collate@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
1269 DEFINE_THISCALL_WRAPPER(collate_wchar_transform
, 16)
1270 basic_string_wchar
* __thiscall
collate_wchar_transform(const collate
*this,
1271 basic_string_wchar
*ret
, const wchar_t *first
, const wchar_t *last
)
1273 FIXME("(%p %p %p) stub\n", this, first
, last
);
1277 /* ??_7ctype_base@std@@6B@ */
1278 extern const vtable_ptr MSVCP_ctype_base_vtable
;
1280 /* ??0ctype_base@std@@QAE@I@Z */
1281 /* ??0ctype_base@std@@QEAA@_K@Z */
1282 DEFINE_THISCALL_WRAPPER(ctype_base_ctor_refs
, 8)
1283 ctype_base
* __thiscall
ctype_base_ctor_refs(ctype_base
*this, MSVCP_size_t refs
)
1285 TRACE("(%p %lu)\n", this, refs
);
1286 locale_facet_ctor_refs(&this->facet
, refs
);
1287 this->facet
.vtable
= &MSVCP_ctype_base_vtable
;
1291 /* ??_Fctype_base@std@@QAEXXZ */
1292 /* ??_Fctype_base@std@@QEAAXXZ */
1293 DEFINE_THISCALL_WRAPPER(ctype_base_ctor
, 4)
1294 ctype_base
* __thiscall
ctype_base_ctor(ctype_base
*this)
1296 TRACE("(%p)\n", this);
1297 locale_facet_ctor_refs(&this->facet
, 0);
1298 this->facet
.vtable
= &MSVCP_ctype_base_vtable
;
1302 /* ??1ctype_base@std@@UAE@XZ */
1303 /* ??1ctype_base@std@@UEAA@XZ */
1304 DEFINE_THISCALL_WRAPPER(ctype_base_dtor
, 4)
1305 void __thiscall
ctype_base_dtor(ctype_base
*this)
1307 TRACE("(%p)\n", this);
1310 DEFINE_THISCALL_WRAPPER(ctype_base_vector_dtor
, 8)
1311 ctype_base
* __thiscall
ctype_base_vector_dtor(ctype_base
*this, unsigned int flags
)
1313 TRACE("(%p %x)\n", this, flags
);
1315 /* we have an array, with the number of elements stored before the first object */
1316 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1318 for(i
=*ptr
-1; i
>=0; i
--)
1319 ctype_base_dtor(this+i
);
1320 MSVCRT_operator_delete(ptr
);
1322 ctype_base_dtor(this);
1324 MSVCRT_operator_delete(this);
1330 /* ?_Xran@ctype_base@std@@KAXXZ */
1331 void __cdecl
ctype_base__Xran(void)
1333 throw_exception(EXCEPTION_OUT_OF_RANGE
, "out of range in ctype<T>");
1336 /* ?id@?$ctype@D@std@@2V0locale@2@A */
1337 locale_id ctype_char_id
= {0};
1338 /* ?table_size@?$ctype@D@std@@2IB */
1339 /* ?table_size@?$ctype@D@std@@2_KB */
1340 MSVCP_size_t ctype_char_table_size
= 256;
1342 /* ??_7?$ctype@D@std@@6B@ */
1343 extern const vtable_ptr MSVCP_ctype_char_vtable
;
1345 /* ?_Id_func@?$ctype@D@std@@SAAAVid@locale@2@XZ */
1346 /* ?_Id_func@?$ctype@D@std@@SAAEAVid@locale@2@XZ */
1347 locale_id
* __cdecl
ctype_char__Id_func(void)
1350 return &ctype_char_id
;
1353 /* ?_Init@?$ctype@D@std@@IAEXABV_Locinfo@2@@Z */
1354 /* ?_Init@?$ctype@D@std@@IEAAXAEBV_Locinfo@2@@Z */
1355 DEFINE_THISCALL_WRAPPER(ctype_char__Init
, 8)
1356 void __thiscall
ctype_char__Init(ctype_char
*this, const _Locinfo
*locinfo
)
1358 TRACE("(%p %p)\n", this, locinfo
);
1359 _Locinfo__Getctype(locinfo
, &this->ctype
);
1362 /* ?_Tidy@?$ctype@D@std@@IAEXXZ */
1363 /* ?_Tidy@?$ctype@D@std@@IEAAXXZ */
1364 DEFINE_THISCALL_WRAPPER(ctype_char__Tidy
, 4)
1365 void __thiscall
ctype_char__Tidy(ctype_char
*this)
1367 TRACE("(%p)\n", this);
1369 if(this->ctype
.delfl
)
1370 free((short*)this->ctype
.table
);
1373 /* ?classic_table@?$ctype@D@std@@KAPBFXZ */
1374 /* ?classic_table@?$ctype@D@std@@KAPEBFXZ */
1375 const short* __cdecl
ctype_char_classic_table(void)
1378 return &((short*)GetProcAddress(GetModuleHandleA("msvcrt.dll"), "_ctype"))[1];
1381 /* ??0?$ctype@D@std@@QAE@ABV_Locinfo@1@I@Z */
1382 /* ??0?$ctype@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1383 DEFINE_THISCALL_WRAPPER(ctype_char_ctor_locinfo
, 12)
1384 ctype_char
* __thiscall
ctype_char_ctor_locinfo(ctype_char
*this,
1385 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
1387 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
1388 ctype_base_ctor_refs(&this->base
, refs
);
1389 this->base
.facet
.vtable
= &MSVCP_ctype_char_vtable
;
1390 ctype_char__Init(this, locinfo
);
1394 /* ??0?$ctype@D@std@@QAE@PBF_NI@Z */
1395 /* ??0?$ctype@D@std@@QEAA@PEBF_N_K@Z */
1396 DEFINE_THISCALL_WRAPPER(ctype_char_ctor_table
, 16)
1397 ctype_char
* __thiscall
ctype_char_ctor_table(ctype_char
*this,
1398 const short *table
, MSVCP_bool
delete, MSVCP_size_t refs
)
1402 TRACE("(%p %p %d %lu)\n", this, table
, delete, refs
);
1404 ctype_base_ctor_refs(&this->base
, refs
);
1405 this->base
.facet
.vtable
= &MSVCP_ctype_char_vtable
;
1407 _Locinfo_ctor(&locinfo
);
1408 ctype_char__Init(this, &locinfo
);
1409 _Locinfo_dtor(&locinfo
);
1412 ctype_char__Tidy(this);
1413 this->ctype
.table
= table
;
1414 this->ctype
.delfl
= delete;
1419 /* ??_F?$ctype@D@std@@QAEXXZ */
1420 /* ??_F?$ctype@D@std@@QEAAXXZ */
1421 DEFINE_THISCALL_WRAPPER(ctype_char_ctor
, 4)
1422 ctype_char
* __thiscall
ctype_char_ctor(ctype_char
*this)
1424 return ctype_char_ctor_table(this, NULL
, FALSE
, 0);
1427 /* ??1?$ctype@D@std@@MAE@XZ */
1428 /* ??1?$ctype@D@std@@MEAA@XZ */
1429 DEFINE_THISCALL_WRAPPER(ctype_char_dtor
, 4)
1430 void __thiscall
ctype_char_dtor(ctype_char
*this)
1432 TRACE("(%p)\n", this);
1433 ctype_char__Tidy(this);
1436 DEFINE_THISCALL_WRAPPER(ctype_char_vector_dtor
, 8)
1437 ctype_char
* __thiscall
ctype_char_vector_dtor(ctype_char
*this, unsigned int flags
)
1439 TRACE("(%p %x)\n", this, flags
);
1441 /* we have an array, with the number of elements stored before the first object */
1442 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1444 for(i
=*ptr
-1; i
>=0; i
--)
1445 ctype_char_dtor(this+i
);
1446 MSVCRT_operator_delete(ptr
);
1448 ctype_char_dtor(this);
1450 MSVCRT_operator_delete(this);
1456 /* ?do_narrow@?$ctype@D@std@@MBEDDD@Z */
1457 /* ?do_narrow@?$ctype@D@std@@MEBADDD@Z */
1458 DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow_ch
, 12)
1459 #define call_ctype_char_do_narrow_ch(this, ch, unused) CALL_VTBL_FUNC(this, 36, \
1460 char, (const ctype_char*, char, char), (this, ch, unused))
1461 char __thiscall
ctype_char_do_narrow_ch(const ctype_char
*this, char ch
, char unused
)
1463 TRACE("(%p %c %c)\n", this, ch
, unused
);
1467 /* ?do_narrow@?$ctype@D@std@@MBEPBDPBD0DPAD@Z */
1468 /* ?do_narrow@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD@Z */
1469 DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow
, 20)
1470 #define call_ctype_char_do_narrow(this, first, last, unused, dest) CALL_VTBL_FUNC(this, 32, \
1471 const char*, (const ctype_char*, const char*, const char*, char, char*), \
1472 (this, first, last, unused, dest))
1473 const char* __thiscall
ctype_char_do_narrow(const ctype_char
*this,
1474 const char *first
, const char *last
, char unused
, char *dest
)
1476 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1477 memcpy(dest
, first
, last
-first
);
1481 /* ?_Do_narrow_s@?$ctype@D@std@@MBEPBDPBD0DPADI@Z */
1482 /* ?_Do_narrow_s@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD_K@Z */
1483 DEFINE_THISCALL_WRAPPER(ctype_char__Do_narrow_s
, 24)
1484 #define call_ctype_char__Do_narrow_s(this, first, last, unused, dest, size) CALL_VTBL_FUNC(this, 40, \
1485 const char*, (const ctype_char*, const char*, const char*, char, char*, MSVCP_size_t), \
1486 (this, first, last, unused, dest, size))
1487 const char* __thiscall
ctype_char__Do_narrow_s(const ctype_char
*this, const char *first
,
1488 const char *last
, char unused
, char *dest
, MSVCP_size_t size
)
1490 TRACE("(%p %p %p %p %lu)\n", this, first
, last
, dest
, size
);
1491 memcpy_s(dest
, size
, first
, last
-first
);
1495 /* ?narrow@?$ctype@D@std@@QBEDDD@Z */
1496 /* ?narrow@?$ctype@D@std@@QEBADDD@Z */
1497 DEFINE_THISCALL_WRAPPER(ctype_char_narrow_ch
, 12)
1498 char __thiscall
ctype_char_narrow_ch(const ctype_char
*this, char ch
, char dflt
)
1500 TRACE("(%p %c %c)\n", this, ch
, dflt
);
1501 return call_ctype_char_do_narrow_ch(this, ch
, dflt
);
1504 /* ?narrow@?$ctype@D@std@@QBEPBDPBD0DPAD@Z */
1505 /* ?narrow@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD@Z */
1506 DEFINE_THISCALL_WRAPPER(ctype_char_narrow
, 20)
1507 const char* __thiscall
ctype_char_narrow(const ctype_char
*this,
1508 const char *first
, const char *last
, char dflt
, char *dest
)
1510 TRACE("(%p %p %p %c %p)\n", this, first
, last
, dflt
, dest
);
1511 return call_ctype_char_do_narrow(this, first
, last
, dflt
, dest
);
1514 /* ?_Narrow_s@?$ctype@D@std@@QBEPBDPBD0DPADI@Z */
1515 /* ?_Narrow_s@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD_K@Z */
1516 DEFINE_THISCALL_WRAPPER(ctype_char__Narrow_s
, 24)
1517 const char* __thiscall
ctype_char__Narrow_s(const ctype_char
*this, const char *first
,
1518 const char *last
, char dflt
, char *dest
, MSVCP_size_t size
)
1520 TRACE("(%p %p %p %p %lu)\n", this, first
, last
, dest
, size
);
1521 return call_ctype_char__Do_narrow_s(this, first
, last
, dflt
, dest
, size
);
1524 /* ?do_widen@?$ctype@D@std@@MBEDD@Z */
1525 /* ?do_widen@?$ctype@D@std@@MEBADD@Z */
1526 DEFINE_THISCALL_WRAPPER(ctype_char_do_widen_ch
, 8)
1527 #define call_ctype_char_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
1528 char, (const ctype_char*, char), (this, ch))
1529 char __thiscall
ctype_char_do_widen_ch(const ctype_char
*this, char ch
)
1531 TRACE("(%p %c)\n", this, ch
);
1535 /* ?do_widen@?$ctype@D@std@@MBEPBDPBD0PAD@Z */
1536 /* ?do_widen@?$ctype@D@std@@MEBAPEBDPEBD0PEAD@Z */
1537 DEFINE_THISCALL_WRAPPER(ctype_char_do_widen
, 16)
1538 #define call_ctype_char_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 20, \
1539 const char*, (const ctype_char*, const char*, const char*, char*), \
1540 (this, first, last, dest))
1541 const char* __thiscall
ctype_char_do_widen(const ctype_char
*this,
1542 const char *first
, const char *last
, char *dest
)
1544 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1545 memcpy(dest
, first
, last
-first
);
1549 /* ?_Do_widen_s@?$ctype@D@std@@MBEPBDPBD0PADI@Z */
1550 /* ?_Do_widen_s@?$ctype@D@std@@MEBAPEBDPEBD0PEAD_K@Z */
1551 DEFINE_THISCALL_WRAPPER(ctype_char__Do_widen_s
, 20)
1552 #define call_ctype_char__Do_widen_s(this, first, last, dest, size) CALL_VTBL_FUNC(this, 28, \
1553 const char*, (const ctype_char*, const char*, const char*, char*, MSVCP_size_t), \
1554 (this, first, last, dest, size))
1555 const char* __thiscall
ctype_char__Do_widen_s(const ctype_char
*this,
1556 const char *first
, const char *last
, char *dest
, MSVCP_size_t size
)
1558 TRACE("(%p %p %p %p %lu)\n", this, first
, last
, dest
, size
);
1559 memcpy_s(dest
, size
, first
, last
-first
);
1563 /* ?widen@?$ctype@D@std@@QBEDD@Z */
1564 /* ?widen@?$ctype@D@std@@QEBADD@Z */
1565 DEFINE_THISCALL_WRAPPER(ctype_char_widen_ch
, 8)
1566 char __thiscall
ctype_char_widen_ch(const ctype_char
*this, char ch
)
1568 TRACE("(%p %c)\n", this, ch
);
1569 return call_ctype_char_do_widen_ch(this, ch
);
1572 /* ?widen@?$ctype@D@std@@QBEPBDPBD0PAD@Z */
1573 /* ?widen@?$ctype@D@std@@QEBAPEBDPEBD0PEAD@Z */
1574 DEFINE_THISCALL_WRAPPER(ctype_char_widen
, 16)
1575 const char* __thiscall
ctype_char_widen(const ctype_char
*this,
1576 const char *first
, const char *last
, char *dest
)
1578 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1579 return call_ctype_char_do_widen(this, first
, last
, dest
);
1582 /* ?_Widen_s@?$ctype@D@std@@QBEPBDPBD0PADI@Z */
1583 /* ?_Widen_s@?$ctype@D@std@@QEBAPEBDPEBD0PEAD_K@Z */
1584 DEFINE_THISCALL_WRAPPER(ctype_char__Widen_s
, 20)
1585 const char* __thiscall
ctype_char__Widen_s(const ctype_char
*this,
1586 const char *first
, const char *last
, char *dest
, MSVCP_size_t size
)
1588 TRACE("(%p %p %p %p %lu)\n", this, first
, last
, dest
, size
);
1589 return call_ctype_char__Do_widen_s(this, first
, last
, dest
, size
);
1592 /* ?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1593 /* ?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1594 static MSVCP_size_t
ctype_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
1596 TRACE("(%p %p)\n", facet
, loc
);
1598 if(facet
&& !*facet
) {
1601 *facet
= MSVCRT_operator_new(sizeof(ctype_char
));
1603 ERR("Out of memory\n");
1604 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
1608 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
1609 ctype_char_ctor_locinfo((ctype_char
*)*facet
, &locinfo
, 0);
1610 _Locinfo_dtor(&locinfo
);
1616 /* ?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@@Z */
1617 /* ?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1618 MSVCP_size_t __cdecl
ctype_char__Getcat_old(const locale_facet
**facet
)
1620 return ctype_char__Getcat(facet
, locale_classic());
1623 ctype_char
* ctype_char_use_facet(const locale
*loc
)
1625 static ctype_char
*obj
= NULL
;
1628 const locale_facet
*fac
;
1630 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1631 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_char_id
));
1633 _Lockit_dtor(&lock
);
1634 return (ctype_char
*)fac
;
1638 _Lockit_dtor(&lock
);
1642 ctype_char__Getcat(&fac
, loc
);
1643 obj
= (ctype_char
*)fac
;
1644 locale_facet__Incref(&obj
->base
.facet
);
1645 locale_facet_register(&obj
->base
.facet
);
1646 _Lockit_dtor(&lock
);
1652 int __cdecl
_Tolower(int ch
, const _Ctypevec
*ctype
)
1656 TRACE("%d %p\n", ch
, ctype
);
1661 cp
= ___lc_codepage_func();
1663 /* Don't convert to unicode in case of C locale */
1665 if(ch
>='A' && ch
<='Z')
1674 str
[0] = (ch
>>8) & 255;
1682 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, str
, size
, &wide
, 1))
1685 lower
= tolowerW(wide
);
1689 WideCharToMultiByte(cp
, 0, &lower
, 1, str
, 2, NULL
, NULL
);
1691 return str
[0] + (str
[1]<<8);
1695 /* ?do_tolower@?$ctype@D@std@@MBEDD@Z */
1696 /* ?do_tolower@?$ctype@D@std@@MEBADD@Z */
1697 #define call_ctype_char_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 8, \
1698 char, (const ctype_char*, char), (this, ch))
1699 DEFINE_THISCALL_WRAPPER(ctype_char_do_tolower_ch
, 8)
1700 char __thiscall
ctype_char_do_tolower_ch(const ctype_char
*this, char ch
)
1702 TRACE("(%p %c)\n", this, ch
);
1703 return _Tolower(ch
, &this->ctype
);
1706 /* ?do_tolower@?$ctype@D@std@@MBEPBDPADPBD@Z */
1707 /* ?do_tolower@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z */
1708 #define call_ctype_char_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 4, \
1709 const char*, (const ctype_char*, char*, const char*), (this, first, last))
1710 DEFINE_THISCALL_WRAPPER(ctype_char_do_tolower
, 12)
1711 const char* __thiscall
ctype_char_do_tolower(const ctype_char
*this, char *first
, const char *last
)
1713 TRACE("(%p %p %p)\n", this, first
, last
);
1714 for(; first
<last
; first
++)
1715 *first
= _Tolower(*first
, &this->ctype
);
1719 /* ?tolower@?$ctype@D@std@@QBEDD@Z */
1720 /* ?tolower@?$ctype@D@std@@QEBADD@Z */
1721 DEFINE_THISCALL_WRAPPER(ctype_char_tolower_ch
, 8)
1722 char __thiscall
ctype_char_tolower_ch(const ctype_char
*this, char ch
)
1724 TRACE("(%p %c)\n", this, ch
);
1725 return call_ctype_char_do_tolower_ch(this, ch
);
1728 /* ?tolower@?$ctype@D@std@@QBEPBDPADPBD@Z */
1729 /* ?tolower@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z */
1730 DEFINE_THISCALL_WRAPPER(ctype_char_tolower
, 12)
1731 const char* __thiscall
ctype_char_tolower(const ctype_char
*this, char *first
, const char *last
)
1733 TRACE("(%p %p %p)\n", this, first
, last
);
1734 return call_ctype_char_do_tolower(this, first
, last
);
1738 int __cdecl
_Toupper(int ch
, const _Ctypevec
*ctype
)
1742 TRACE("%d %p\n", ch
, ctype
);
1747 cp
= ___lc_codepage_func();
1749 /* Don't convert to unicode in case of C locale */
1751 if(ch
>='a' && ch
<='z')
1760 str
[0] = (ch
>>8) & 255;
1768 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, str
, size
, &wide
, 1))
1771 upper
= toupperW(wide
);
1775 WideCharToMultiByte(cp
, 0, &upper
, 1, str
, 2, NULL
, NULL
);
1777 return str
[0] + (str
[1]<<8);
1781 /* ?do_toupper@?$ctype@D@std@@MBEDD@Z */
1782 /* ?do_toupper@?$ctype@D@std@@MEBADD@Z */
1783 #define call_ctype_char_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 16, \
1784 char, (const ctype_char*, char), (this, ch))
1785 DEFINE_THISCALL_WRAPPER(ctype_char_do_toupper_ch
, 8)
1786 char __thiscall
ctype_char_do_toupper_ch(const ctype_char
*this, char ch
)
1788 TRACE("(%p %c)\n", this, ch
);
1789 return _Toupper(ch
, &this->ctype
);
1792 /* ?do_toupper@?$ctype@D@std@@MBEPBDPADPBD@Z */
1793 /* ?do_toupper@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z */
1794 #define call_ctype_char_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 12, \
1795 const char*, (const ctype_char*, char*, const char*), (this, first, last))
1796 DEFINE_THISCALL_WRAPPER(ctype_char_do_toupper
, 12)
1797 const char* __thiscall
ctype_char_do_toupper(const ctype_char
*this,
1798 char *first
, const char *last
)
1800 TRACE("(%p %p %p)\n", this, first
, last
);
1801 for(; first
<last
; first
++)
1802 *first
= _Toupper(*first
, &this->ctype
);
1806 /* ?toupper@?$ctype@D@std@@QBEDD@Z */
1807 /* ?toupper@?$ctype@D@std@@QEBADD@Z */
1808 DEFINE_THISCALL_WRAPPER(ctype_char_toupper_ch
, 8)
1809 char __thiscall
ctype_char_toupper_ch(const ctype_char
*this, char ch
)
1811 TRACE("(%p %c)\n", this, ch
);
1812 return call_ctype_char_do_toupper_ch(this, ch
);
1815 /* ?toupper@?$ctype@D@std@@QBEPBDPADPBD@Z */
1816 /* ?toupper@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z */
1817 DEFINE_THISCALL_WRAPPER(ctype_char_toupper
, 12)
1818 const char* __thiscall
ctype_char_toupper(const ctype_char
*this, char *first
, const char *last
)
1820 TRACE("(%p %p %p)\n", this, first
, last
);
1821 return call_ctype_char_do_toupper(this, first
, last
);
1824 /* ?is@?$ctype@D@std@@QBE_NFD@Z */
1825 /* ?is@?$ctype@D@std@@QEBA_NFD@Z */
1826 DEFINE_THISCALL_WRAPPER(ctype_char_is_ch
, 12)
1827 MSVCP_bool __thiscall
ctype_char_is_ch(const ctype_char
*this, short mask
, char ch
)
1829 TRACE("(%p %x %c)\n", this, mask
, ch
);
1830 return (this->ctype
.table
[(unsigned char)ch
] & mask
) != 0;
1833 /* ?is@?$ctype@D@std@@QBEPBDPBD0PAF@Z */
1834 /* ?is@?$ctype@D@std@@QEBAPEBDPEBD0PEAF@Z */
1835 DEFINE_THISCALL_WRAPPER(ctype_char_is
, 16)
1836 const char* __thiscall
ctype_char_is(const ctype_char
*this, const char *first
, const char *last
, short *dest
)
1838 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1839 for(; first
<last
; first
++)
1840 *dest
++ = this->ctype
.table
[(unsigned char)*first
];
1844 /* ?scan_is@?$ctype@D@std@@QBEPBDFPBD0@Z */
1845 /* ?scan_is@?$ctype@D@std@@QEBAPEBDFPEBD0@Z */
1846 DEFINE_THISCALL_WRAPPER(ctype_char_scan_is
, 16)
1847 const char* __thiscall
ctype_char_scan_is(const ctype_char
*this, short mask
, const char *first
, const char *last
)
1849 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
1850 for(; first
<last
; first
++)
1851 if(!ctype_char_is_ch(this, mask
, *first
))
1856 /* ?scan_not@?$ctype@D@std@@QBEPBDFPBD0@Z */
1857 /* ?scan_not@?$ctype@D@std@@QEBAPEBDFPEBD0@Z */
1858 DEFINE_THISCALL_WRAPPER(ctype_char_scan_not
, 16)
1859 const char* __thiscall
ctype_char_scan_not(const ctype_char
*this, short mask
, const char *first
, const char *last
)
1861 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
1862 for(; first
<last
; first
++)
1863 if(ctype_char_is_ch(this, mask
, *first
))
1868 /* ?table@?$ctype@D@std@@IBEPBFXZ */
1869 /* ?table@?$ctype@D@std@@IEBAPEBFXZ */
1870 DEFINE_THISCALL_WRAPPER(ctype_char_table
, 4)
1871 const short* __thiscall
ctype_char_table(const ctype_char
*this)
1873 TRACE("(%p)\n", this);
1874 return this->ctype
.table
;
1877 /* ?id@?$ctype@_W@std@@2V0locale@2@A */
1878 locale_id ctype_wchar_id
= {0};
1879 /* ?id@?$ctype@G@std@@2V0locale@2@A */
1880 locale_id ctype_short_id
= {0};
1882 /* ??_7?$ctype@_W@std@@6B@ */
1883 extern const vtable_ptr MSVCP_ctype_wchar_vtable
;
1884 /* ??_7?$ctype@G@std@@6B@ */
1885 extern const vtable_ptr MSVCP_ctype_short_vtable
;
1887 /* ?_Id_func@?$ctype@_W@std@@SAAAVid@locale@2@XZ */
1888 /* ?_Id_func@?$ctype@_W@std@@SAAEAVid@locale@2@XZ */
1889 locale_id
* __cdecl
ctype_wchar__Id_func(void)
1892 return &ctype_wchar_id
;
1895 /* ?_Id_func@?$ctype@G@std@@SAAAVid@locale@2@XZ */
1896 /* ?_Id_func@?$ctype@G@std@@SAAEAVid@locale@2@XZ */
1897 locale_id
* __cdecl
ctype_short__Id_func(void)
1900 return &ctype_short_id
;
1903 /* ?_Init@?$ctype@_W@std@@IAEXABV_Locinfo@2@@Z */
1904 /* ?_Init@?$ctype@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
1905 /* ?_Init@?$ctype@G@std@@IAEXABV_Locinfo@2@@Z */
1906 /* ?_Init@?$ctype@G@std@@IEAAXAEBV_Locinfo@2@@Z */
1907 DEFINE_THISCALL_WRAPPER(ctype_wchar__Init
, 8)
1908 void __thiscall
ctype_wchar__Init(ctype_wchar
*this, const _Locinfo
*locinfo
)
1910 TRACE("(%p %p)\n", this, locinfo
);
1911 _Locinfo__Getctype(locinfo
, &this->ctype
);
1912 _Locinfo__Getcvt(locinfo
, &this->cvt
);
1915 /* ??0?$ctype@_W@std@@QAE@ABV_Locinfo@1@I@Z */
1916 /* ??0?$ctype@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1917 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor_locinfo
, 12)
1918 ctype_wchar
* __thiscall
ctype_wchar_ctor_locinfo(ctype_wchar
*this,
1919 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
1921 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
1922 ctype_base_ctor_refs(&this->base
, refs
);
1923 this->base
.facet
.vtable
= &MSVCP_ctype_wchar_vtable
;
1924 ctype_wchar__Init(this, locinfo
);
1928 /* ??0?$ctype@G@std@@QAE@ABV_Locinfo@1@I@Z */
1929 /* ??0?$ctype@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1930 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_locinfo
, 12)
1931 ctype_wchar
* __thiscall
ctype_short_ctor_locinfo(ctype_wchar
*this,
1932 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
1934 ctype_wchar
*ret
= ctype_wchar_ctor_locinfo(this, locinfo
, refs
);
1935 this->base
.facet
.vtable
= &MSVCP_ctype_short_vtable
;
1939 /* ??0?$ctype@_W@std@@QAE@I@Z */
1940 /* ??0?$ctype@_W@std@@QEAA@_K@Z */
1941 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor_refs
, 8)
1942 ctype_wchar
* __thiscall
ctype_wchar_ctor_refs(ctype_wchar
*this, MSVCP_size_t refs
)
1946 TRACE("(%p %lu)\n", this, refs
);
1948 ctype_base_ctor_refs(&this->base
, refs
);
1949 this->base
.facet
.vtable
= &MSVCP_ctype_wchar_vtable
;
1951 _Locinfo_ctor(&locinfo
);
1952 ctype_wchar__Init(this, &locinfo
);
1953 _Locinfo_dtor(&locinfo
);
1957 /* ??0?$ctype@G@std@@QAE@I@Z */
1958 /* ??0?$ctype@G@std@@QEAA@_K@Z */
1959 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_refs
, 8)
1960 ctype_wchar
* __thiscall
ctype_short_ctor_refs(ctype_wchar
*this, MSVCP_size_t refs
)
1962 ctype_wchar
*ret
= ctype_wchar_ctor_refs(this, refs
);
1963 this->base
.facet
.vtable
= &MSVCP_ctype_short_vtable
;
1967 /* ??0?$ctype@G@std@@IAE@PBDI@Z */
1968 /* ??0?$ctype@G@std@@IEAA@PEBD_K@Z */
1969 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_name
, 12)
1970 ctype_wchar
* __thiscall
ctype_short_ctor_name(ctype_wchar
*this,
1971 const char *name
, MSVCP_size_t refs
)
1975 TRACE("(%p %s %lu)\n", this, debugstr_a(name
), refs
);
1977 ctype_base_ctor_refs(&this->base
, refs
);
1978 this->base
.facet
.vtable
= &MSVCP_ctype_short_vtable
;
1980 _Locinfo_ctor_cstr(&locinfo
, name
);
1981 ctype_wchar__Init(this, &locinfo
);
1982 _Locinfo_dtor(&locinfo
);
1986 /* ??_F?$ctype@_W@std@@QAEXXZ */
1987 /* ??_F?$ctype@_W@std@@QEAAXXZ */
1988 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor
, 4)
1989 ctype_wchar
* __thiscall
ctype_wchar_ctor(ctype_wchar
*this)
1991 TRACE("(%p)\n", this);
1992 return ctype_short_ctor_refs(this, 0);
1995 /* ??_F?$ctype@G@std@@QAEXXZ */
1996 /* ??_F?$ctype@G@std@@QEAAXXZ */
1997 DEFINE_THISCALL_WRAPPER(ctype_short_ctor
, 4)
1998 ctype_wchar
* __thiscall
ctype_short_ctor(ctype_wchar
*this)
2000 ctype_wchar
*ret
= ctype_wchar_ctor(this);
2001 this->base
.facet
.vtable
= &MSVCP_ctype_short_vtable
;
2005 /* ??1?$ctype@_W@std@@MAE@XZ */
2006 /* ??1?$ctype@_W@std@@MEAA@XZ */
2007 /* ??1?$ctype@G@std@@MAE@XZ */
2008 /* ??1?$ctype@G@std@@MEAA@XZ */
2009 DEFINE_THISCALL_WRAPPER(ctype_wchar_dtor
, 4)
2010 void __thiscall
ctype_wchar_dtor(ctype_wchar
*this)
2012 TRACE("(%p)\n", this);
2013 if(this->ctype
.delfl
)
2014 free((void*)this->ctype
.table
);
2017 DEFINE_THISCALL_WRAPPER(ctype_wchar_vector_dtor
, 8)
2018 ctype_wchar
* __thiscall
ctype_wchar_vector_dtor(ctype_wchar
*this, unsigned int flags
)
2020 TRACE("(%p %x)\n", this, flags
);
2022 /* we have an array, with the number of elements stored before the first object */
2023 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
2025 for(i
=*ptr
-1; i
>=0; i
--)
2026 ctype_wchar_dtor(this+i
);
2027 MSVCRT_operator_delete(ptr
);
2029 ctype_wchar_dtor(this);
2031 MSVCRT_operator_delete(this);
2038 int __cdecl
_Wcrtomb(char *s
, wchar_t wch
, int *state
, const _Cvtvec
*cvt
)
2043 TRACE("%p %d %p %p\n", s
, wch
, state
, cvt
);
2048 cp
= ___lc_codepage_func();
2060 size
= WideCharToMultiByte(cp
, 0, &wch
, 1, s
, MB_LEN_MAX
, NULL
, &def
);
2069 /* ?_Donarrow@?$ctype@_W@std@@IBED_WD@Z */
2070 /* ?_Donarrow@?$ctype@_W@std@@IEBAD_WD@Z */
2071 /* ?_Donarrow@?$ctype@G@std@@IBEDGD@Z */
2072 /* ?_Donarrow@?$ctype@G@std@@IEBADGD@Z */
2073 DEFINE_THISCALL_WRAPPER(ctype_wchar__Donarrow
, 12)
2074 char __thiscall
ctype_wchar__Donarrow(const ctype_wchar
*this, wchar_t ch
, char dflt
)
2076 char buf
[MB_LEN_MAX
];
2078 TRACE("(%p %d %d)\n", this, ch
, dflt
);
2080 return _Wcrtomb(buf
, ch
, NULL
, &this->cvt
)==1 ? buf
[0] : dflt
;
2083 /* ?do_narrow@?$ctype@_W@std@@MBED_WD@Z */
2084 /* ?do_narrow@?$ctype@_W@std@@MEBAD_WD@Z */
2085 /* ?do_narrow@?$ctype@G@std@@MBEDGD@Z */
2086 /* ?do_narrow@?$ctype@G@std@@MEBADGD@Z */
2087 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow_ch
, 12)
2088 #define call_ctype_wchar_do_narrow_ch(this, ch, dflt) CALL_VTBL_FUNC(this, 52, \
2089 char, (const ctype_wchar*, wchar_t, char), (this, ch, dflt))
2090 char __thiscall
ctype_wchar_do_narrow_ch(const ctype_wchar
*this, wchar_t ch
, char dflt
)
2092 return ctype_wchar__Donarrow(this, ch
, dflt
);
2095 /* ?do_narrow@?$ctype@_W@std@@MBEPB_WPB_W0DPAD@Z */
2096 /* ?do_narrow@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD@Z */
2097 /* ?do_narrow@?$ctype@G@std@@MBEPBGPBG0DPAD@Z */
2098 /* ?do_narrow@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD@Z */
2099 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow
, 20)
2100 #define call_ctype_wchar_do_narrow(this, first, last, dflt, dest) CALL_VTBL_FUNC(this, 48, \
2101 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*), \
2102 (this, first, last, dflt, dest))
2103 const wchar_t* __thiscall
ctype_wchar_do_narrow(const ctype_wchar
*this,
2104 const wchar_t *first
, const wchar_t *last
, char dflt
, char *dest
)
2106 TRACE("(%p %p %p %d %p)\n", this, first
, last
, dflt
, dest
);
2107 for(; first
<last
; first
++)
2108 *dest
++ = ctype_wchar__Donarrow(this, *first
, dflt
);
2112 /* ?_Do_narrow_s@?$ctype@_W@std@@MBEPB_WPB_W0DPADI@Z */
2113 /* ?_Do_narrow_s@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD_K@Z */
2114 /* ?_Do_narrow_s@?$ctype@G@std@@MBEPBGPBG0DPADI@Z */
2115 /* ?_Do_narrow_s@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD_K@Z */
2116 DEFINE_THISCALL_WRAPPER(ctype_wchar__Do_narrow_s
, 24)
2117 #define call_ctype_wchar__Do_narrow_s(this, first, last, dflt, dest, size) CALL_VTBL_FUNC(this, 56, \
2118 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*, MSVCP_size_t), \
2119 (this, first, last, dflt, dest, size))
2120 const wchar_t* __thiscall
ctype_wchar__Do_narrow_s(const ctype_wchar
*this,
2121 const wchar_t *first
, const wchar_t *last
, char dflt
, char *dest
, MSVCP_size_t size
)
2123 TRACE("(%p %p %p %d %p %lu)\n", this, first
, last
, dflt
, dest
, size
);
2124 /* This function converts all multi-byte characters to dflt,
2125 * thanks to it result size is known before converting */
2126 if(last
-first
> size
)
2128 return ctype_wchar_do_narrow(this, first
, last
, dflt
, dest
);
2131 /* ?narrow@?$ctype@_W@std@@QBED_WD@Z */
2132 /* ?narrow@?$ctype@_W@std@@QEBAD_WD@Z */
2133 /* ?narrow@?$ctype@G@std@@QBEDGD@Z */
2134 /* ?narrow@?$ctype@G@std@@QEBADGD@Z */
2135 DEFINE_THISCALL_WRAPPER(ctype_wchar_narrow_ch
, 12)
2136 char __thiscall
ctype_wchar_narrow_ch(const ctype_wchar
*this, wchar_t ch
, char dflt
)
2138 TRACE("(%p %d %d)\n", this, ch
, dflt
);
2139 return call_ctype_wchar_do_narrow_ch(this, ch
, dflt
);
2142 /* ?narrow@?$ctype@_W@std@@QBEPB_WPB_W0DPAD@Z */
2143 /* ?narrow@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD@Z */
2144 /* ?narrow@?$ctype@G@std@@QBEPBGPBG0DPAD@Z */
2145 /* ?narrow@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD@Z */
2146 DEFINE_THISCALL_WRAPPER(ctype_wchar_narrow
, 20)
2147 const wchar_t* __thiscall
ctype_wchar_narrow(const ctype_wchar
*this,
2148 const wchar_t *first
, const wchar_t *last
, char dflt
, char *dest
)
2150 TRACE("(%p %p %p %d %p)\n", this, first
, last
, dflt
, dest
);
2151 return call_ctype_wchar_do_narrow(this, first
, last
, dflt
, dest
);
2154 /* ?_Narrow_s@?$ctype@_W@std@@QBEPB_WPB_W0DPADI@Z */
2155 /* ?_Narrow_s@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD_K@Z */
2156 /* ?_Narrow_s@?$ctype@G@std@@QBEPBGPBG0DPADI@Z */
2157 /* ?_Narrow_s@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD_K@Z */
2158 DEFINE_THISCALL_WRAPPER(ctype_wchar__Narrow_s
, 24)
2159 const wchar_t* __thiscall
ctype_wchar__Narrow_s(const ctype_wchar
*this, const wchar_t *first
,
2160 const wchar_t *last
, char dflt
, char *dest
, MSVCP_size_t size
)
2162 TRACE("(%p %p %p %d %p %lu)\n", this, first
, last
, dflt
, dest
, size
);
2163 return call_ctype_wchar__Do_narrow_s(this, first
, last
, dflt
, dest
, size
);
2167 int __cdecl
_Mbrtowc(wchar_t *out
, const char *in
, MSVCP_size_t len
, int *state
, const _Cvtvec
*cvt
)
2173 TRACE("(%p %p %lu %p %p)\n", out
, in
, len
, state
, cvt
);
2181 cp
= ___lc_codepage_func();
2185 *out
= (unsigned char)*in
;
2192 ((char*)state
)[1] = *in
;
2194 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, (char*)state
, 2, out
, out
? 1 : 0)) {
2204 GetCPInfo(cp
, &cp_info
);
2206 for(i
=0; i
<MAX_LEADBYTES
; i
+=2) {
2207 if(!cp_info
.LeadByte
[i
+1])
2209 if((unsigned char)*in
>=cp_info
.LeadByte
[i
] && (unsigned char)*in
<=cp_info
.LeadByte
[i
+1]) {
2217 *state
= (unsigned char)*in
;
2221 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, in
, 2, out
, out
? 1 : 0)) {
2228 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, in
, 1, out
, out
? 1 : 0)) {
2235 /* ?_Dowiden@?$ctype@_W@std@@IBE_WD@Z */
2236 /* ?_Dowiden@?$ctype@_W@std@@IEBA_WD@Z */
2237 /* ?_Dowiden@?$ctype@G@std@@IBEGD@Z */
2238 /* ?_Dowiden@?$ctype@G@std@@IEBAGD@Z */
2239 DEFINE_THISCALL_WRAPPER(ctype_wchar__Dowiden
, 8)
2240 wchar_t __thiscall
ctype_wchar__Dowiden(const ctype_wchar
*this, char ch
)
2244 TRACE("(%p %d)\n", this, ch
);
2245 return _Mbrtowc(&ret
, &ch
, 1, &state
, &this->cvt
)<0 ? WEOF
: ret
;
2248 /* ?do_widen@?$ctype@_W@std@@MBE_WD@Z */
2249 /* ?do_widen@?$ctype@_W@std@@MEBA_WD@Z */
2250 /* ?do_widen@?$ctype@G@std@@MBEGD@Z */
2251 /* ?do_widen@?$ctype@G@std@@MEBAGD@Z */
2252 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_widen_ch
, 8)
2253 #define call_ctype_wchar_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 40, \
2254 wchar_t, (const ctype_wchar*, char), (this, ch))
2255 wchar_t __thiscall
ctype_wchar_do_widen_ch(const ctype_wchar
*this, char ch
)
2257 return ctype_wchar__Dowiden(this, ch
);
2260 /* ?do_widen@?$ctype@_W@std@@MBEPBDPBD0PA_W@Z */
2261 /* ?do_widen@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W@Z */
2262 /* ?do_widen@?$ctype@G@std@@MBEPBDPBD0PAG@Z */
2263 /* ?do_widen@?$ctype@G@std@@MEBAPEBDPEBD0PEAG@Z */
2264 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_widen
, 16)
2265 #define call_ctype_wchar_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 36, \
2266 const char*, (const ctype_wchar*, const char*, const char*, wchar_t*), \
2267 (this, first, last, dest))
2268 const char* __thiscall
ctype_wchar_do_widen(const ctype_wchar
*this,
2269 const char *first
, const char *last
, wchar_t *dest
)
2271 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2272 for(; first
<last
; first
++)
2273 *dest
++ = ctype_wchar__Dowiden(this, *first
);
2277 /* ?_Do_widen_s@?$ctype@_W@std@@MBEPBDPBD0PA_WI@Z */
2278 /* ?_Do_widen_s@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W_K@Z */
2279 /* ?_Do_widen_s@?$ctype@G@std@@MBEPBDPBD0PAGI@Z */
2280 /* ?_Do_widen_s@?$ctype@G@std@@MEBAPEBDPEBD0PEAG_K@Z */
2281 DEFINE_THISCALL_WRAPPER(ctype_wchar__Do_widen_s
, 20)
2282 #define call_ctype_wchar__Do_widen_s(this, first, last, dest, size) CALL_VTBL_FUNC(this, 44, \
2283 const char*, (const ctype_wchar*, const char*, const char*, wchar_t*, MSVCP_size_t), \
2284 (this, first, last, dest, size))
2285 const char* __thiscall
ctype_wchar__Do_widen_s(const ctype_wchar
*this,
2286 const char *first
, const char *last
, wchar_t *dest
, MSVCP_size_t size
)
2288 TRACE("(%p %p %p %p %lu)\n", this, first
, last
, dest
, size
);
2289 /* This function converts all multi-byte characters to WEOF,
2290 * thanks to it result size is known before converting */
2291 if(size
< last
-first
)
2293 return ctype_wchar_do_widen(this, first
, last
, dest
);
2296 /* ?widen@?$ctype@_W@std@@QBE_WD@Z */
2297 /* ?widen@?$ctype@_W@std@@QEBA_WD@Z */
2298 /* ?widen@?$ctype@G@std@@QBEGD@Z */
2299 /* ?widen@?$ctype@G@std@@QEBAGD@Z */
2300 DEFINE_THISCALL_WRAPPER(ctype_wchar_widen_ch
, 8)
2301 wchar_t __thiscall
ctype_wchar_widen_ch(const ctype_wchar
*this, char ch
)
2303 TRACE("(%p %d)\n", this, ch
);
2304 return call_ctype_wchar_do_widen_ch(this, ch
);
2307 /* ?widen@?$ctype@_W@std@@QBEPBDPBD0PA_W@Z */
2308 /* ?widen@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W@Z */
2309 /* ?widen@?$ctype@G@std@@QBEPBDPBD0PAG@Z */
2310 /* ?widen@?$ctype@G@std@@QEBAPEBDPEBD0PEAG@Z */
2311 DEFINE_THISCALL_WRAPPER(ctype_wchar_widen
, 16)
2312 const char* __thiscall
ctype_wchar_widen(const ctype_wchar
*this,
2313 const char *first
, const char *last
, wchar_t *dest
)
2315 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2316 return call_ctype_wchar_do_widen(this, first
, last
, dest
);
2319 /* ?_Widen_s@?$ctype@_W@std@@QBEPBDPBD0PA_WI@Z */
2320 /* ?_Widen_s@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W_K@Z */
2321 /* ?_Widen_s@?$ctype@G@std@@QBEPBDPBD0PAGI@Z */
2322 /* ?_Widen_s@?$ctype@G@std@@QEBAPEBDPEBD0PEAG_K@Z */
2323 DEFINE_THISCALL_WRAPPER(ctype_wchar__Widen_s
, 20)
2324 const char* __thiscall
ctype_wchar__Widen_s(const ctype_wchar
*this,
2325 const char *first
, const char *last
, wchar_t *dest
, MSVCP_size_t size
)
2327 TRACE("(%p %p %p %p %lu)\n", this, first
, last
, dest
, size
);
2328 return call_ctype_wchar__Do_widen_s(this, first
, last
, dest
, size
);
2331 /* ?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2332 /* ?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2333 static MSVCP_size_t
ctype_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
2335 TRACE("(%p %p)\n", facet
, loc
);
2337 if(facet
&& !*facet
) {
2340 *facet
= MSVCRT_operator_new(sizeof(ctype_wchar
));
2342 ERR("Out of memory\n");
2343 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
2347 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
2348 ctype_wchar_ctor_locinfo((ctype_wchar
*)*facet
, &locinfo
, 0);
2349 _Locinfo_dtor(&locinfo
);
2355 /* ?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@@Z */
2356 /* ?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
2357 MSVCP_size_t __cdecl
ctype_wchar__Getcat_old(const locale_facet
**facet
)
2359 return ctype_wchar__Getcat(facet
, locale_classic());
2362 /* ?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2363 /* ?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2364 static MSVCP_size_t
ctype_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
2366 if(facet
&& !*facet
) {
2367 ctype_wchar__Getcat(facet
, loc
);
2368 (*(locale_facet
**)facet
)->vtable
= &MSVCP_ctype_short_vtable
;
2374 /* ?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@@Z */
2375 /* ?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
2376 MSVCP_size_t __cdecl
ctype_short__Getcat_old(const locale_facet
**facet
)
2378 return ctype_short__Getcat(facet
, locale_classic());
2382 wchar_t __cdecl
_Towlower(wchar_t ch
, const _Ctypevec
*ctype
)
2384 TRACE("(%d %p)\n", ch
, ctype
);
2385 return tolowerW(ch
);
2388 ctype_wchar
* ctype_wchar_use_facet(const locale
*loc
)
2390 static ctype_wchar
*obj
= NULL
;
2393 const locale_facet
*fac
;
2395 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
2396 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_wchar_id
));
2398 _Lockit_dtor(&lock
);
2399 return (ctype_wchar
*)fac
;
2403 _Lockit_dtor(&lock
);
2407 ctype_wchar__Getcat(&fac
, loc
);
2408 obj
= (ctype_wchar
*)fac
;
2409 locale_facet__Incref(&obj
->base
.facet
);
2410 locale_facet_register(&obj
->base
.facet
);
2411 _Lockit_dtor(&lock
);
2416 ctype_wchar
* ctype_short_use_facet(const locale
*loc
)
2418 static ctype_wchar
*obj
= NULL
;
2421 const locale_facet
*fac
;
2423 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
2424 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_short_id
));
2426 _Lockit_dtor(&lock
);
2427 return (ctype_wchar
*)fac
;
2431 _Lockit_dtor(&lock
);
2435 ctype_short__Getcat(&fac
, loc
);
2436 obj
= (ctype_wchar
*)fac
;
2437 locale_facet__Incref(&obj
->base
.facet
);
2438 locale_facet_register(&obj
->base
.facet
);
2439 _Lockit_dtor(&lock
);
2444 /* ?do_tolower@?$ctype@_W@std@@MBE_W_W@Z */
2445 /* ?do_tolower@?$ctype@_W@std@@MEBA_W_W@Z */
2446 /* ?do_tolower@?$ctype@G@std@@MBEGG@Z */
2447 /* ?do_tolower@?$ctype@G@std@@MEBAGG@Z */
2448 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_tolower_ch
, 8)
2449 #define call_ctype_wchar_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
2450 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2451 wchar_t __thiscall
ctype_wchar_do_tolower_ch(const ctype_wchar
*this, wchar_t ch
)
2453 return _Towlower(ch
, &this->ctype
);
2456 /* ?do_tolower@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */
2457 /* ?do_tolower@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z */
2458 /* ?do_tolower@?$ctype@G@std@@MBEPBGPAGPBG@Z */
2459 /* ?do_tolower@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */
2460 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_tolower
, 12)
2461 #define call_ctype_wchar_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 20, \
2462 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2463 (this, first, last))
2464 const wchar_t* __thiscall
ctype_wchar_do_tolower(const ctype_wchar
*this,
2465 wchar_t *first
, const wchar_t *last
)
2467 TRACE("(%p %p %p)\n", this, first
, last
);
2468 for(; first
<last
; first
++)
2469 *first
= _Towlower(*first
, &this->ctype
);
2473 /* ?tolower@?$ctype@_W@std@@QBE_W_W@Z */
2474 /* ?tolower@?$ctype@_W@std@@QEBA_W_W@Z */
2475 /* ?tolower@?$ctype@G@std@@QBEGG@Z */
2476 /* ?tolower@?$ctype@G@std@@QEBAGG@Z */
2477 DEFINE_THISCALL_WRAPPER(ctype_wchar_tolower_ch
, 8)
2478 wchar_t __thiscall
ctype_wchar_tolower_ch(const ctype_wchar
*this, wchar_t ch
)
2480 TRACE("(%p %d)\n", this, ch
);
2481 return call_ctype_wchar_do_tolower_ch(this, ch
);
2484 /* ?tolower@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */
2485 /* ?tolower@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z */
2486 /* ?tolower@?$ctype@G@std@@QBEPBGPAGPBG@Z */
2487 /* ?tolower@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z */
2488 DEFINE_THISCALL_WRAPPER(ctype_wchar_tolower
, 12)
2489 const wchar_t* __thiscall
ctype_wchar_tolower(const ctype_wchar
*this,
2490 wchar_t *first
, const wchar_t *last
)
2492 TRACE("(%p %p %p)\n", this, first
, last
);
2493 return call_ctype_wchar_do_tolower(this, first
, last
);
2497 wchar_t __cdecl
_Towupper(wchar_t ch
, const _Ctypevec
*ctype
)
2499 TRACE("(%d %p)\n", ch
, ctype
);
2500 return toupperW(ch
);
2503 /* ?do_toupper@?$ctype@_W@std@@MBE_W_W@Z */
2504 /* ?do_toupper@?$ctype@_W@std@@MEBA_W_W@Z */
2505 /* ?do_toupper@?$ctype@G@std@@MBEGG@Z */
2506 /* ?do_toupper@?$ctype@G@std@@MEBAGG@Z */
2507 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper_ch
, 8)
2508 #define call_ctype_wchar_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 32, \
2509 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2510 wchar_t __thiscall
ctype_wchar_do_toupper_ch(const ctype_wchar
*this, wchar_t ch
)
2512 return _Towupper(ch
, &this->ctype
);
2515 /* ?do_toupper@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */
2516 /* ?do_toupper@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z */
2517 /* ?do_toupper@?$ctype@G@std@@MBEPBGPAGPBG@Z */
2518 /* ?do_toupper@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */
2519 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper
, 12)
2520 #define call_ctype_wchar_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 28, \
2521 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2522 (this, first, last))
2523 const wchar_t* __thiscall
ctype_wchar_do_toupper(const ctype_wchar
*this,
2524 wchar_t *first
, const wchar_t *last
)
2526 TRACE("(%p %p %p)\n", this, first
, last
);
2527 for(; first
<last
; first
++)
2528 *first
= _Towupper(*first
, &this->ctype
);
2532 /* ?toupper@?$ctype@_W@std@@QBE_W_W@Z */
2533 /* ?toupper@?$ctype@_W@std@@QEBA_W_W@Z */
2534 /* ?toupper@?$ctype@G@std@@QBEGG@Z */
2535 /* ?toupper@?$ctype@G@std@@QEBAGG@Z */
2536 DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper_ch
, 8)
2537 wchar_t __thiscall
ctype_wchar_toupper_ch(const ctype_wchar
*this, wchar_t ch
)
2539 TRACE("(%p %d)\n", this, ch
);
2540 return call_ctype_wchar_do_toupper_ch(this, ch
);
2543 /* ?toupper@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */
2544 /* ?toupper@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z */
2545 /* ?toupper@?$ctype@G@std@@QBEPBGPAGPBG@Z */
2546 /* ?toupper@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z */
2547 DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper
, 12)
2548 const wchar_t* __thiscall
ctype_wchar_toupper(const ctype_wchar
*this,
2549 wchar_t *first
, const wchar_t *last
)
2551 TRACE("(%p %p %p)\n", this, first
, last
);
2552 return call_ctype_wchar_do_toupper(this, first
, last
);
2556 const wchar_t* __cdecl
_Getwctypes(const wchar_t *first
, const wchar_t *last
,
2557 short *mask
, const _Ctypevec
*ctype
)
2559 TRACE("(%p %p %p %p)\n", first
, last
, mask
, ctype
);
2560 GetStringTypeW(CT_CTYPE1
, first
, last
-first
, (WORD
*)mask
);
2565 short __cdecl
_Getwctype(wchar_t ch
, const _Ctypevec
*ctype
)
2568 _Getwctypes(&ch
, &ch
+1, &mask
, ctype
);
2572 /* ?do_is@?$ctype@_W@std@@MBE_NF_W@Z */
2573 /* ?do_is@?$ctype@_W@std@@MEBA_NF_W@Z */
2574 /* ?do_is@?$ctype@G@std@@MBE_NFG@Z */
2575 /* ?do_is@?$ctype@G@std@@MEBA_NFG@Z */
2576 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is_ch
, 12)
2577 #define call_ctype_wchar_do_is_ch(this, mask, ch) CALL_VTBL_FUNC(this, 8, \
2578 MSVCP_bool, (const ctype_wchar*, short, wchar_t), (this, mask, ch))
2579 MSVCP_bool __thiscall
ctype_wchar_do_is_ch(const ctype_wchar
*this, short mask
, wchar_t ch
)
2581 TRACE("(%p %x %d)\n", this, mask
, ch
);
2582 return (_Getwctype(ch
, &this->ctype
) & mask
) != 0;
2585 /* ?do_is@?$ctype@_W@std@@MBEPB_WPB_W0PAF@Z */
2586 /* ?do_is@?$ctype@_W@std@@MEBAPEB_WPEB_W0PEAF@Z */
2587 /* ?do_is@?$ctype@G@std@@MBEPBGPBG0PAF@Z */
2588 /* ?do_is@?$ctype@G@std@@MEBAPEBGPEBG0PEAF@Z */
2589 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is
, 16)
2590 #define call_ctype_wchar_do_is(this, first, last, dest) CALL_VTBL_FUNC(this, 4, \
2591 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, short*), \
2592 (this, first, last, dest))
2593 const wchar_t* __thiscall
ctype_wchar_do_is(const ctype_wchar
*this,
2594 const wchar_t *first
, const wchar_t *last
, short *dest
)
2596 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2597 return _Getwctypes(first
, last
, dest
, &this->ctype
);
2600 /* ?is@?$ctype@_W@std@@QBE_NF_W@Z */
2601 /* ?is@?$ctype@_W@std@@QEBA_NF_W@Z */
2602 /* ?is@?$ctype@G@std@@QBE_NFG@Z */
2603 /* ?is@?$ctype@G@std@@QEBA_NFG@Z */
2604 DEFINE_THISCALL_WRAPPER(ctype_wchar_is_ch
, 12)
2605 MSVCP_bool __thiscall
ctype_wchar_is_ch(const ctype_wchar
*this, short mask
, wchar_t ch
)
2607 TRACE("(%p %x %d)\n", this, mask
, ch
);
2608 return call_ctype_wchar_do_is_ch(this, mask
, ch
);
2611 /* ?is@?$ctype@_W@std@@QBEPB_WPB_W0PAF@Z */
2612 /* ?is@?$ctype@_W@std@@QEBAPEB_WPEB_W0PEAF@Z */
2613 /* ?is@?$ctype@G@std@@QBEPBGPBG0PAF@Z */
2614 /* ?is@?$ctype@G@std@@QEBAPEBGPEBG0PEAF@Z */
2615 DEFINE_THISCALL_WRAPPER(ctype_wchar_is
, 16)
2616 const wchar_t* __thiscall
ctype_wchar_is(const ctype_wchar
*this,
2617 const wchar_t *first
, const wchar_t *last
, short *dest
)
2619 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2620 return call_ctype_wchar_do_is(this, first
, last
, dest
);
2623 /* ?do_scan_is@?$ctype@_W@std@@MBEPB_WFPB_W0@Z */
2624 /* ?do_scan_is@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z */
2625 /* ?do_scan_is@?$ctype@G@std@@MBEPBGFPBG0@Z */
2626 /* ?do_scan_is@?$ctype@G@std@@MEBAPEBGFPEBG0@Z */
2627 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_scan_is
, 16)
2628 #define call_ctype_wchar_do_scan_is(this, mask, first, last) CALL_VTBL_FUNC(this, 12, \
2629 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
2630 (this, mask, first, last))
2631 const wchar_t* __thiscall
ctype_wchar_do_scan_is(const ctype_wchar
*this,
2632 short mask
, const wchar_t *first
, const wchar_t *last
)
2634 TRACE("(%p %d %p %p)\n", this, mask
, first
, last
);
2635 for(; first
<last
; first
++)
2636 if(!ctype_wchar_is_ch(this, mask
, *first
))
2641 /* ?scan_is@?$ctype@_W@std@@QBEPB_WFPB_W0@Z */
2642 /* ?scan_is@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z */
2643 /* ?scan_is@?$ctype@G@std@@QBEPBGFPBG0@Z */
2644 /* ?scan_is@?$ctype@G@std@@QEBAPEBGFPEBG0@Z */
2645 DEFINE_THISCALL_WRAPPER(ctype_wchar_scan_is
, 16)
2646 const wchar_t* __thiscall
ctype_wchar_scan_is(const ctype_wchar
*this,
2647 short mask
, const wchar_t *first
, const wchar_t *last
)
2649 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
2650 return call_ctype_wchar_do_scan_is(this, mask
, first
, last
);
2653 /* ?do_scan_not@?$ctype@_W@std@@MBEPB_WFPB_W0@Z */
2654 /* ?do_scan_not@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z */
2655 /* ?do_scan_not@?$ctype@G@std@@MBEPBGFPBG0@Z */
2656 /* ?do_scan_not@?$ctype@G@std@@MEBAPEBGFPEBG0@Z */
2657 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_scan_not
, 16)
2658 #define call_ctype_wchar_do_scan_not(this, mask, first, last) CALL_VTBL_FUNC(this, 16, \
2659 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
2660 (this, mask, first, last))
2661 const wchar_t* __thiscall
ctype_wchar_do_scan_not(const ctype_wchar
*this,
2662 short mask
, const wchar_t *first
, const wchar_t *last
)
2664 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
2665 for(; first
<last
; first
++)
2666 if(ctype_wchar_is_ch(this, mask
, *first
))
2671 /* ?scan_not@?$ctype@_W@std@@QBEPB_WFPB_W0@Z */
2672 /* ?scan_not@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z */
2673 /* ?scan_not@?$ctype@G@std@@QBEPBGFPBG0@Z */
2674 /* ?scan_not@?$ctype@G@std@@QEBAPEBGFPEBG0@Z */
2675 DEFINE_THISCALL_WRAPPER(ctype_wchar_scan_not
, 16)
2676 const wchar_t* __thiscall
ctype_wchar_scan_not(const ctype_wchar
*this,
2677 short mask
, const wchar_t *first
, const wchar_t *last
)
2679 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
2680 return call_ctype_wchar_do_scan_not(this, mask
, first
, last
);
2683 /* ??_7codecvt_base@std@@6B@ */
2684 extern const vtable_ptr MSVCP_codecvt_base_vtable
;
2686 /* ??0codecvt_base@std@@QAE@I@Z */
2687 /* ??0codecvt_base@std@@QEAA@_K@Z */
2688 DEFINE_THISCALL_WRAPPER(codecvt_base_ctor_refs
, 8)
2689 codecvt_base
* __thiscall
codecvt_base_ctor_refs(codecvt_base
*this, MSVCP_size_t refs
)
2691 TRACE("(%p %lu)\n", this, refs
);
2692 locale_facet_ctor_refs(&this->facet
, refs
);
2693 this->facet
.vtable
= &MSVCP_codecvt_base_vtable
;
2697 /* ??_Fcodecvt_base@std@@QAEXXZ */
2698 /* ??_Fcodecvt_base@std@@QEAAXXZ */
2699 DEFINE_THISCALL_WRAPPER(codecvt_base_ctor
, 4)
2700 codecvt_base
* __thiscall
codecvt_base_ctor(codecvt_base
*this)
2702 return codecvt_base_ctor_refs(this, 0);
2705 /* ??1codecvt_base@std@@UAE@XZ */
2706 /* ??1codecvt_base@std@@UEAA@XZ */
2707 DEFINE_THISCALL_WRAPPER(codecvt_base_dtor
, 4)
2708 void __thiscall
codecvt_base_dtor(codecvt_base
*this)
2710 TRACE("(%p)\n", this);
2711 locale_facet_dtor(&this->facet
);
2714 DEFINE_THISCALL_WRAPPER(codecvt_base_vector_dtor
, 8)
2715 codecvt_base
* __thiscall
codecvt_base_vector_dtor(codecvt_base
*this, unsigned int flags
)
2717 TRACE("(%p %x)\n", this, flags
);
2719 /* we have an array, with the number of elements stored before the first object */
2720 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
2722 for(i
=*ptr
-1; i
>=0; i
--)
2723 codecvt_base_dtor(this+i
);
2724 MSVCRT_operator_delete(ptr
);
2726 codecvt_base_dtor(this);
2728 MSVCRT_operator_delete(this);
2734 /* ?do_always_noconv@codecvt_base@std@@MBE_NXZ */
2735 /* ?do_always_noconv@codecvt_base@std@@MEBA_NXZ */
2736 #define call_codecvt_base_do_always_noconv(this) CALL_VTBL_FUNC(this, 4, \
2737 MSVCP_bool, (const codecvt_base*), (this))
2738 DEFINE_THISCALL_WRAPPER(codecvt_base_do_always_noconv
, 4)
2739 MSVCP_bool __thiscall
codecvt_base_do_always_noconv(const codecvt_base
*this)
2741 TRACE("(%p)\n", this);
2745 /* ?always_noconv@codecvt_base@std@@QBE_NXZ */
2746 /* ?always_noconv@codecvt_base@std@@QEBA_NXZ */
2747 DEFINE_THISCALL_WRAPPER(codecvt_base_always_noconv
, 4)
2748 MSVCP_bool __thiscall
codecvt_base_always_noconv(const codecvt_base
*this)
2750 TRACE("(%p)\n", this);
2751 return call_codecvt_base_do_always_noconv(this);
2754 /* ?do_max_length@codecvt_base@std@@MBEHXZ */
2755 /* ?do_max_length@codecvt_base@std@@MEBAHXZ */
2756 #define call_codecvt_base_do_max_length(this) CALL_VTBL_FUNC(this, 8, \
2757 int, (const codecvt_base*), (this))
2758 DEFINE_THISCALL_WRAPPER(codecvt_base_do_max_length
, 4)
2759 int __thiscall
codecvt_base_do_max_length(const codecvt_base
*this)
2761 TRACE("(%p)\n", this);
2765 /* ?max_length@codecvt_base@std@@QBEHXZ */
2766 /* ?max_length@codecvt_base@std@@QEBAHXZ */
2767 DEFINE_THISCALL_WRAPPER(codecvt_base_max_length
, 4)
2768 int __thiscall
codecvt_base_max_length(const codecvt_base
*this)
2770 TRACE("(%p)\n", this);
2771 return call_codecvt_base_do_max_length(this);
2774 /* ?do_encoding@codecvt_base@std@@MBEHXZ */
2775 /* ?do_encoding@codecvt_base@std@@MEBAHXZ */
2776 #define call_codecvt_base_do_encoding(this) CALL_VTBL_FUNC(this, 12, \
2777 int, (const codecvt_base*), (this))
2778 DEFINE_THISCALL_WRAPPER(codecvt_base_do_encoding
, 4)
2779 int __thiscall
codecvt_base_do_encoding(const codecvt_base
*this)
2781 TRACE("(%p)\n", this);
2785 /* ?encoding@codecvt_base@std@@QBEHXZ */
2786 /* ?encoding@codecvt_base@std@@QEBAHXZ */
2787 DEFINE_THISCALL_WRAPPER(codecvt_base_encoding
, 4)
2788 int __thiscall
codecvt_base_encoding(const codecvt_base
*this)
2790 TRACE("(%p)\n", this);
2791 return call_codecvt_base_do_encoding(this);
2794 /* ?id@?$codecvt@DDH@std@@2V0locale@2@A */
2795 locale_id codecvt_char_id
= {0};
2797 /* ??_7?$codecvt@DDH@std@@6B@ */
2798 extern const vtable_ptr MSVCP_codecvt_char_vtable
;
2800 /* ?_Init@?$codecvt@DDH@std@@IAEXABV_Locinfo@2@@Z */
2801 /* ?_Init@?$codecvt@DDH@std@@IEAAXAEBV_Locinfo@2@@Z */
2802 DEFINE_THISCALL_WRAPPER(codecvt_char__Init
, 8)
2803 void __thiscall
codecvt_char__Init(codecvt_char
*this, const _Locinfo
*locinfo
)
2805 TRACE("(%p %p)\n", this, locinfo
);
2808 /* ??0?$codecvt@DDH@std@@QAE@ABV_Locinfo@1@I@Z */
2809 /* ??0?$codecvt@DDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
2810 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor_locinfo
, 12)
2811 codecvt_char
* __thiscall
codecvt_char_ctor_locinfo(codecvt_char
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
2813 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
2814 codecvt_base_ctor_refs(&this->base
, refs
);
2815 this->base
.facet
.vtable
= &MSVCP_codecvt_char_vtable
;
2819 /* ??0?$codecvt@DDH@std@@QAE@I@Z */
2820 /* ??0?$codecvt@DDH@std@@QEAA@_K@Z */
2821 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor_refs
, 8)
2822 codecvt_char
* __thiscall
codecvt_char_ctor_refs(codecvt_char
*this, MSVCP_size_t refs
)
2824 return codecvt_char_ctor_locinfo(this, NULL
, refs
);
2827 /* ??_F?$codecvt@DDH@std@@QAEXXZ */
2828 /* ??_F?$codecvt@DDH@std@@QEAAXXZ */
2829 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor
, 4)
2830 codecvt_char
* __thiscall
codecvt_char_ctor(codecvt_char
*this)
2832 return codecvt_char_ctor_locinfo(this, NULL
, 0);
2835 /* ??1?$codecvt@DDH@std@@MAE@XZ */
2836 /* ??1?$codecvt@DDH@std@@MEAA@XZ */
2837 DEFINE_THISCALL_WRAPPER(codecvt_char_dtor
, 4)
2838 void __thiscall
codecvt_char_dtor(codecvt_char
*this)
2840 TRACE("(%p)\n", this);
2841 codecvt_base_dtor(&this->base
);
2844 DEFINE_THISCALL_WRAPPER(codecvt_char_vector_dtor
, 8)
2845 codecvt_char
* __thiscall
codecvt_char_vector_dtor(codecvt_char
*this, unsigned int flags
)
2847 TRACE("(%p %x)\n", this, flags
);
2849 /* we have an array, with the number of elements stored before the first object */
2850 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
2852 for(i
=*ptr
-1; i
>=0; i
--)
2853 codecvt_char_dtor(this+i
);
2854 MSVCRT_operator_delete(ptr
);
2856 codecvt_char_dtor(this);
2858 MSVCRT_operator_delete(this);
2864 /* ?_Getcat@?$codecvt@DDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2865 /* ?_Getcat@?$codecvt@DDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2866 static MSVCP_size_t
codecvt_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
2868 TRACE("(%p %p)\n", facet
, loc
);
2870 if(facet
&& !*facet
) {
2871 *facet
= MSVCRT_operator_new(sizeof(codecvt_char
));
2873 ERR("Out of memory\n");
2874 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
2877 codecvt_char_ctor((codecvt_char
*)*facet
);
2883 /* ?_Getcat@?$codecvt@DDH@std@@SAIPAPBVfacet@locale@2@@Z */
2884 /* ?_Getcat@?$codecvt@DDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
2885 MSVCP_size_t __cdecl
codecvt_char__Getcat_old(const locale_facet
**facet
)
2887 return codecvt_char__Getcat(facet
, locale_classic());
2890 codecvt_char
* codecvt_char_use_facet(const locale
*loc
)
2892 static codecvt_char
*obj
= NULL
;
2895 const locale_facet
*fac
;
2897 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
2898 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_char_id
));
2900 _Lockit_dtor(&lock
);
2901 return (codecvt_char
*)fac
;
2905 _Lockit_dtor(&lock
);
2909 codecvt_char__Getcat(&fac
, loc
);
2910 obj
= (codecvt_char
*)fac
;
2911 locale_facet__Incref(&obj
->base
.facet
);
2912 locale_facet_register(&obj
->base
.facet
);
2913 _Lockit_dtor(&lock
);
2918 /* ?do_in@?$codecvt@DDH@std@@MBEHAAHPBD1AAPBDPAD3AAPAD@Z */
2919 /* ?do_in@?$codecvt@DDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
2920 #define call_codecvt_char_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
2921 CALL_VTBL_FUNC(this, 16, int, \
2922 (const codecvt_char*, int*, const char*, const char*, const char**, char*, char*, char**), \
2923 (this, state, from, from_end, from_next, to, to_end, to_next))
2924 DEFINE_THISCALL_WRAPPER(codecvt_char_do_in
, 32)
2925 int __thiscall
codecvt_char_do_in(const codecvt_char
*this, int *state
,
2926 const char *from
, const char *from_end
, const char **from_next
,
2927 char *to
, char *to_end
, char **to_next
)
2929 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
2930 from_next
, to
, to_end
, to_next
);
2933 return CODECVT_noconv
;
2936 /* ?in@?$codecvt@DDH@std@@QBEHAAHPBD1AAPBDPAD3AAPAD@Z */
2937 /* ?in@?$codecvt@DDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
2938 DEFINE_THISCALL_WRAPPER(codecvt_char_in
, 32)
2939 int __thiscall
codecvt_char_in(const codecvt_char
*this, int *state
,
2940 const char *from
, const char *from_end
, const char **from_next
,
2941 char *to
, char *to_end
, char **to_next
)
2943 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
2944 from_next
, to
, to_end
, to_next
);
2945 return call_codecvt_char_do_in(this, state
, from
, from_end
, from_next
,
2946 to
, to_end
, to_next
);
2949 /* ?do_out@?$codecvt@DDH@std@@MBEHAAHPBD1AAPBDPAD3AAPAD@Z */
2950 /* ?do_out@?$codecvt@DDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
2951 #define call_codecvt_char_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
2952 CALL_VTBL_FUNC(this, 20, int, \
2953 (const codecvt_char*, int*, const char*, const char*, const char**, char*, char*, char**), \
2954 (this, state, from, from_end, from_next, to, to_end, to_next))
2955 DEFINE_THISCALL_WRAPPER(codecvt_char_do_out
, 32)
2956 int __thiscall
codecvt_char_do_out(const codecvt_char
*this, int *state
,
2957 const char *from
, const char *from_end
, const char **from_next
,
2958 char *to
, char *to_end
, char **to_next
)
2960 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
2961 from_end
, from_next
, to
, to_end
, to_next
);
2964 return CODECVT_noconv
;
2967 /* ?out@?$codecvt@DDH@std@@QBEHAAHPBD1AAPBDPAD3AAPAD@Z */
2968 /* ?out@?$codecvt@DDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
2969 DEFINE_THISCALL_WRAPPER(codecvt_char_out
, 32)
2970 int __thiscall
codecvt_char_out(const codecvt_char
*this, int *state
,
2971 const char *from
, const char *from_end
, const char **from_next
,
2972 char *to
, char *to_end
, char **to_next
)
2974 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
2975 from_next
, to
, to_end
, to_next
);
2976 return call_codecvt_char_do_out(this, state
, from
, from_end
, from_next
,
2977 to
, to_end
, to_next
);
2980 /* ?do_unshift@?$codecvt@DDH@std@@MBEHAAHPAD1AAPAD@Z */
2981 /* ?do_unshift@?$codecvt@DDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
2982 #define call_codecvt_char_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 24, \
2983 int, (const codecvt_char*, int*, char*, char*, char**), (this, state, to, to_end, to_next))
2984 DEFINE_THISCALL_WRAPPER(codecvt_char_do_unshift
, 20)
2985 int __thiscall
codecvt_char_do_unshift(const codecvt_char
*this,
2986 int *state
, char *to
, char *to_end
, char **to_next
)
2988 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
2990 return CODECVT_noconv
;
2993 /* ?unshift@?$codecvt@DDH@std@@QBEHAAHPAD1AAPAD@Z */
2994 /* ?unshift@?$codecvt@DDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
2995 DEFINE_THISCALL_WRAPPER(codecvt_char_unshift
, 20)
2996 int __thiscall
codecvt_char_unshift(const codecvt_char
*this,
2997 int *state
, char *to
, char *to_end
, char **to_next
)
2999 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3000 return call_codecvt_char_do_unshift(this, state
, to
, to_end
, to_next
);
3003 /* ?do_length@?$codecvt@DDH@std@@MBEHABHPBD1I@Z */
3004 /* ?do_length@?$codecvt@DDH@std@@MEBAHAEBHPEBD1_K@Z */
3005 #define call_codecvt_char_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 28, \
3006 int, (const codecvt_char*, const int*, const char*, const char*, MSVCP_size_t), \
3007 (this, state, from, from_end, max))
3008 DEFINE_THISCALL_WRAPPER(codecvt_char_do_length
, 20)
3009 int __thiscall
codecvt_char_do_length(const codecvt_char
*this, const int *state
,
3010 const char *from
, const char *from_end
, MSVCP_size_t max
)
3012 TRACE("(%p %p %p %p %lu)\n", this, state
, from
, from_end
, max
);
3013 return (from_end
-from
> max
? max
: from_end
-from
);
3016 /* ?length@?$codecvt@DDH@std@@QBEHABHPBD1I@Z */
3017 /* ?length@?$codecvt@DDH@std@@QEBAHAEBHPEBD1_K@Z */
3018 DEFINE_THISCALL_WRAPPER(codecvt_char_length
, 20)
3019 int __thiscall
codecvt_char_length(const codecvt_char
*this, const int *state
,
3020 const char *from
, const char *from_end
, MSVCP_size_t max
)
3022 TRACE("(%p %p %p %p %lu)\n", this, state
, from
, from_end
, max
);
3023 return call_codecvt_char_do_length(this, state
, from
, from_end
, max
);
3026 /* ?id@?$codecvt@_WDH@std@@2V0locale@2@A */
3027 locale_id codecvt_wchar_id
= {0};
3028 /* ?id@?$codecvt@GDH@std@@2V0locale@2@A */
3029 locale_id codecvt_short_id
= {0};
3031 /* ??_7?$codecvt@_WDH@std@@6B@ */
3032 extern const vtable_ptr MSVCP_codecvt_wchar_vtable
;
3033 /* ??_7?$codecvt@GDH@std@@6B@ */
3034 extern const vtable_ptr MSVCP_codecvt_short_vtable
;
3036 /* ?_Init@?$codecvt@GDH@std@@IAEXABV_Locinfo@2@@Z */
3037 /* ?_Init@?$codecvt@GDH@std@@IEAAXAEBV_Locinfo@2@@Z */
3038 /* ?_Init@?$codecvt@_WDH@std@@IAEXABV_Locinfo@2@@Z */
3039 /* ?_Init@?$codecvt@_WDH@std@@IEAAXAEBV_Locinfo@2@@Z */
3040 DEFINE_THISCALL_WRAPPER(codecvt_wchar__Init
, 8)
3041 void __thiscall
codecvt_wchar__Init(codecvt_wchar
*this, const _Locinfo
*locinfo
)
3043 TRACE("(%p %p)\n", this, locinfo
);
3044 _Locinfo__Getcvt(locinfo
, &this->cvt
);
3047 /* ??0?$codecvt@_WDH@std@@QAE@ABV_Locinfo@1@I@Z */
3048 /* ??0?$codecvt@_WDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
3049 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor_locinfo
, 12)
3050 codecvt_wchar
* __thiscall
codecvt_wchar_ctor_locinfo(codecvt_wchar
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
3052 TRACE("(%p %p %ld)\n", this, locinfo
, refs
);
3054 codecvt_base_ctor_refs(&this->base
, refs
);
3055 this->base
.facet
.vtable
= &MSVCP_codecvt_wchar_vtable
;
3057 codecvt_wchar__Init(this, locinfo
);
3061 /* ??0?$codecvt@GDH@std@@QAE@ABV_Locinfo@1@I@Z */
3062 /* ??0?$codecvt@GDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
3063 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor_locinfo
, 12)
3064 codecvt_wchar
* __thiscall
codecvt_short_ctor_locinfo(codecvt_wchar
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
3066 TRACE("(%p %p %ld)\n", this, locinfo
, refs
);
3068 codecvt_wchar_ctor_locinfo(this, locinfo
, refs
);
3069 this->base
.facet
.vtable
= &MSVCP_codecvt_short_vtable
;
3073 /* ??0?$codecvt@_WDH@std@@QAE@I@Z */
3074 /* ??0?$codecvt@_WDH@std@@QEAA@_K@Z */
3075 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor_refs
, 8)
3076 codecvt_wchar
* __thiscall
codecvt_wchar_ctor_refs(codecvt_wchar
*this, MSVCP_size_t refs
)
3080 TRACE("(%p %ld)\n", this, refs
);
3082 _Locinfo_ctor(&locinfo
);
3083 codecvt_wchar_ctor_locinfo(this, &locinfo
, refs
);
3084 _Locinfo_dtor(&locinfo
);
3088 /* ??0?$codecvt@GDH@std@@QAE@I@Z */
3089 /* ??0?$codecvt@GDH@std@@QEAA@_K@Z */
3090 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor_refs
, 8)
3091 codecvt_wchar
* __thiscall
codecvt_short_ctor_refs(codecvt_wchar
*this, MSVCP_size_t refs
)
3095 TRACE("(%p %ld)\n", this, refs
);
3097 _Locinfo_ctor(&locinfo
);
3098 codecvt_short_ctor_locinfo(this, &locinfo
, refs
);
3099 _Locinfo_dtor(&locinfo
);
3103 /* ??0?$codecvt@GDH@std@@IAE@PBDI@Z */
3104 /* ??0?$codecvt@GDH@std@@IEAA@PEBD_K@Z */
3105 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor_name
, 12)
3106 codecvt_wchar
* __thiscall
codecvt_short_ctor_name(codecvt_wchar
*this, const char *name
, MSVCP_size_t refs
)
3110 TRACE("(%p %s %ld)\n", this, name
, refs
);
3112 _Locinfo_ctor_cstr(&locinfo
, name
);
3113 codecvt_short_ctor_locinfo(this, &locinfo
, refs
);
3114 _Locinfo_dtor(&locinfo
);
3118 /* ??_F?$codecvt@_WDH@std@@QAEXXZ */
3119 /* ??_F?$codecvt@_WDH@std@@QEAAXXZ */
3120 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor
, 4)
3121 codecvt_wchar
* __thiscall
codecvt_wchar_ctor(codecvt_wchar
*this)
3123 return codecvt_wchar_ctor_refs(this, 0);
3126 /* ??_F?$codecvt@GDH@std@@QAEXXZ */
3127 /* ??_F?$codecvt@GDH@std@@QEAAXXZ */
3128 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor
, 4)
3129 codecvt_wchar
* __thiscall
codecvt_short_ctor(codecvt_wchar
*this)
3131 return codecvt_short_ctor_refs(this, 0);
3134 /* ??1?$codecvt@GDH@std@@MAE@XZ */
3135 /* ??1?$codecvt@GDH@std@@MEAA@XZ */
3136 /* ??1?$codecvt@_WDH@std@@MAE@XZ */
3137 /* ??1?$codecvt@_WDH@std@@MEAA@XZ */
3138 DEFINE_THISCALL_WRAPPER(codecvt_wchar_dtor
, 4)
3139 void __thiscall
codecvt_wchar_dtor(codecvt_wchar
*this)
3141 TRACE("(%p)\n", this);
3142 codecvt_base_dtor(&this->base
);
3145 DEFINE_THISCALL_WRAPPER(codecvt_wchar_vector_dtor
, 8)
3146 codecvt_wchar
* __thiscall
codecvt_wchar_vector_dtor(codecvt_wchar
*this, unsigned int flags
)
3148 TRACE("(%p %x)\n", this, flags
);
3150 /* we have an array, with the number of elements stored before the first object */
3151 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
3153 for(i
=*ptr
-1; i
>=0; i
--)
3154 codecvt_wchar_dtor(this+i
);
3155 MSVCRT_operator_delete(ptr
);
3157 codecvt_wchar_dtor(this);
3159 MSVCRT_operator_delete(this);
3165 /* ?_Getcat@?$codecvt@_WDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3166 /* ?_Getcat@?$codecvt@_WDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3167 static MSVCP_size_t
codecvt_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
3169 TRACE("(%p %p)\n", facet
, loc
);
3171 if(facet
&& !*facet
) {
3174 *facet
= MSVCRT_operator_new(sizeof(codecvt_wchar
));
3176 ERR("Out of memory\n");
3177 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3181 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
3182 codecvt_wchar_ctor_locinfo((codecvt_wchar
*)*facet
, &locinfo
, 0);
3183 _Locinfo_dtor(&locinfo
);
3189 /* ?_Getcat@?$codecvt@_WDH@std@@SAIPAPBVfacet@locale@2@@Z */
3190 /* ?_Getcat@?$codecvt@_WDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3191 MSVCP_size_t __cdecl
codecvt_wchar__Getcat_old(const locale_facet
**facet
)
3193 return codecvt_wchar__Getcat(facet
, locale_classic());
3196 codecvt_wchar
* codecvt_wchar_use_facet(const locale
*loc
)
3198 static codecvt_wchar
*obj
= NULL
;
3201 const locale_facet
*fac
;
3203 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3204 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_wchar_id
));
3206 _Lockit_dtor(&lock
);
3207 return (codecvt_wchar
*)fac
;
3211 _Lockit_dtor(&lock
);
3215 codecvt_wchar__Getcat(&fac
, loc
);
3216 obj
= (codecvt_wchar
*)fac
;
3217 locale_facet__Incref(&obj
->base
.facet
);
3218 locale_facet_register(&obj
->base
.facet
);
3219 _Lockit_dtor(&lock
);
3224 /* ?_Getcat@?$codecvt@GDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3225 /* ?_Getcat@?$codecvt@GDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3226 static MSVCP_size_t
codecvt_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
3228 TRACE("(%p %p)\n", facet
, loc
);
3230 if(facet
&& !*facet
) {
3233 *facet
= MSVCRT_operator_new(sizeof(codecvt_wchar
));
3235 ERR("Out of memory\n");
3236 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3240 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
3241 codecvt_short_ctor((codecvt_wchar
*)*facet
);
3242 _Locinfo_dtor(&locinfo
);
3248 /* ?_Getcat@?$codecvt@GDH@std@@SAIPAPBVfacet@locale@2@@Z */
3249 /* ?_Getcat@?$codecvt@GDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3250 MSVCP_size_t __cdecl
codecvt_short__Getcat_old(const locale_facet
**facet
)
3252 return codecvt_short__Getcat(facet
, locale_classic());
3255 codecvt_wchar
* codecvt_short_use_facet(const locale
*loc
)
3257 static codecvt_wchar
*obj
= NULL
;
3260 const locale_facet
*fac
;
3262 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3263 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_short_id
));
3265 _Lockit_dtor(&lock
);
3266 return (codecvt_wchar
*)fac
;
3270 _Lockit_dtor(&lock
);
3274 codecvt_short__Getcat(&fac
, loc
);
3275 obj
= (codecvt_wchar
*)fac
;
3276 locale_facet__Incref(&obj
->base
.facet
);
3277 locale_facet_register(&obj
->base
.facet
);
3278 _Lockit_dtor(&lock
);
3283 /* ?_Id_func@?$codecvt@_WDH@std@@SAAAVid@locale@2@XZ */
3284 /* ?_Id_func@?$codecvt@_WDH@std@@SAAEAVid@locale@2@XZ */
3285 locale_id
* __cdecl
codecvt_wchar__Id_func(void)
3288 return &codecvt_wchar_id
;
3291 /* ?_Id_func@?$codecvt@GDH@std@@SAAAVid@locale@2@XZ */
3292 /* ?_Id_func@?$codecvt@GDH@std@@SAAEAVid@locale@2@XZ */
3293 locale_id
* __cdecl
codecvt_short__Id_func(void)
3296 return &codecvt_short_id
;
3299 /* ?do_always_noconv@?$codecvt@GDH@std@@MBE_NXZ */
3300 /* ?do_always_noconv@?$codecvt@GDH@std@@MEBA_NXZ */
3301 /* ?do_always_noconv@?$codecvt@_WDH@std@@MBE_NXZ */
3302 /* ?do_always_noconv@?$codecvt@_WDH@std@@MEBA_NXZ */
3303 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_always_noconv
, 4)
3304 MSVCP_bool __thiscall
codecvt_wchar_do_always_noconv(const codecvt_wchar
*this)
3306 TRACE("(%p)\n", this);
3310 /* ?do_max_length@?$codecvt@GDH@std@@MBEHXZ */
3311 /* ?do_max_length@?$codecvt@GDH@std@@MEBAHXZ */
3312 /* ?do_max_length@?$codecvt@_WDH@std@@MBEHXZ */
3313 /* ?do_max_length@?$codecvt@_WDH@std@@MEBAHXZ */
3314 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_max_length
, 4)
3315 int __thiscall
codecvt_wchar_do_max_length(const codecvt_wchar
*this)
3317 TRACE("(%p)\n", this);
3321 /* ?do_in@?$codecvt@GDH@std@@MBEHAAHPBD1AAPBDPAG3AAPAG@Z */
3322 /* ?do_in@?$codecvt@GDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAG3AEAPEAG@Z */
3323 /* ?do_in@?$codecvt@_WDH@std@@MBEHAAHPBD1AAPBDPA_W3AAPA_W@Z */
3324 /* ?do_in@?$codecvt@_WDH@std@@MEBAHAEAHPEBD1AEAPEBDPEA_W3AEAPEA_W@Z */
3325 #define call_codecvt_wchar_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
3326 CALL_VTBL_FUNC(this, 16, int, \
3327 (const codecvt_wchar*, int*, const char*, const char*, const char**, wchar_t*, wchar_t*, wchar_t**), \
3328 (this, state, from, from_end, from_next, to, to_end, to_next))
3329 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_in
, 32)
3330 int __thiscall
codecvt_wchar_do_in(const codecvt_wchar
*this, int *state
,
3331 const char *from
, const char *from_end
, const char **from_next
,
3332 wchar_t *to
, wchar_t *to_end
, wchar_t **to_next
)
3334 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3335 from_end
, from_next
, to
, to_end
, to_next
);
3340 while(*from_next
!=from_end
&& *to_next
!=to_end
) {
3341 switch(_Mbrtowc(*to_next
, *from_next
, from_end
-*from_next
, state
, &this->cvt
)) {
3343 *from_next
= from_end
;
3344 return CODECVT_partial
;
3346 return CODECVT_error
;
3360 /* ?in@?$codecvt@GDH@std@@QBEHAAHPBD1AAPBDPAG3AAPAG@Z */
3361 /* ?in@?$codecvt@GDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAG3AEAPEAG@Z */
3362 /* ?in@?$codecvt@_WDH@std@@QBEHAAHPBD1AAPBDPA_W3AAPA_W@Z */
3363 /* ?in@?$codecvt@_WDH@std@@QEBAHAEAHPEBD1AEAPEBDPEA_W3AEAPEA_W@Z */
3364 DEFINE_THISCALL_WRAPPER(codecvt_wchar_in
, 32)
3365 int __thiscall
codecvt_wchar_in(const codecvt_wchar
*this, int *state
,
3366 const char *from
, const char *from_end
, const char **from_next
,
3367 wchar_t *to
, wchar_t *to_end
, wchar_t **to_next
)
3369 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3370 from_end
, from_next
, to
, to_end
, to_next
);
3371 return call_codecvt_wchar_do_in(this, state
, from
,
3372 from_end
, from_next
, to
, to_end
, to_next
);
3375 /* ?do_out@?$codecvt@GDH@std@@MBEHAAHPBG1AAPBGPAD3AAPAD@Z */
3376 /* ?do_out@?$codecvt@GDH@std@@MEBAHAEAHPEBG1AEAPEBGPEAD3AEAPEAD@Z */
3377 /* ?do_out@?$codecvt@_WDH@std@@MBEHAAHPB_W1AAPB_WPAD3AAPAD@Z */
3378 /* ?do_out@?$codecvt@_WDH@std@@MEBAHAEAHPEB_W1AEAPEB_WPEAD3AEAPEAD@Z */
3379 #define call_codecvt_wchar_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
3380 CALL_VTBL_FUNC(this, 20, int, \
3381 (const codecvt_wchar*, int*, const wchar_t*, const wchar_t*, const wchar_t**, char*, char*, char**), \
3382 (this, state, from, from_end, from_next, to, to_end, to_next))
3383 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_out
, 32)
3384 int __thiscall
codecvt_wchar_do_out(const codecvt_wchar
*this, int *state
,
3385 const wchar_t *from
, const wchar_t *from_end
, const wchar_t **from_next
,
3386 char *to
, char *to_end
, char **to_next
)
3388 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3389 from_end
, from_next
, to
, to_end
, to_next
);
3394 while(*from_next
!=from_end
&& *to_next
!=to_end
) {
3395 int old_state
= *state
, size
;
3396 char buf
[MB_LEN_MAX
];
3398 switch((size
= _Wcrtomb(buf
, **from_next
, state
, &this->cvt
))) {
3400 return CODECVT_error
;
3402 if(size
> from_end
-*from_next
) {
3404 return CODECVT_partial
;
3408 memcpy_s(*to_next
, to_end
-*to_next
, buf
, size
);
3416 /* ?out@?$codecvt@GDH@std@@QBEHAAHPBG1AAPBGPAD3AAPAD@Z */
3417 /* ?out@?$codecvt@GDH@std@@QEBAHAEAHPEBG1AEAPEBGPEAD3AEAPEAD@Z */
3418 /* ?out@?$codecvt@_WDH@std@@QBEHAAHPB_W1AAPB_WPAD3AAPAD@Z */
3419 /* ?out@?$codecvt@_WDH@std@@QEBAHAEAHPEB_W1AEAPEB_WPEAD3AEAPEAD@Z */
3420 DEFINE_THISCALL_WRAPPER(codecvt_wchar_out
, 32)
3421 int __thiscall
codecvt_wchar_out(const codecvt_wchar
*this, int *state
,
3422 const wchar_t *from
, const wchar_t *from_end
, const wchar_t **from_next
,
3423 char *to
, char *to_end
, char **to_next
)
3425 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3426 from_end
, from_next
, to
, to_end
, to_next
);
3427 return call_codecvt_wchar_do_out(this, state
, from
,
3428 from_end
, from_next
, to
, to_end
, to_next
);
3431 /* ?do_unshift@?$codecvt@GDH@std@@MBEHAAHPAD1AAPAD@Z */
3432 /* ?do_unshift@?$codecvt@GDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
3433 /* ?do_unshift@?$codecvt@_WDH@std@@MBEHAAHPAD1AAPAD@Z */
3434 /* ?do_unshift@?$codecvt@_WDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
3435 #define call_codecvt_wchar_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 24, \
3436 int, (const codecvt_wchar*, int*, char*, char*, char**), (this, state, to, to_end, to_next))
3437 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_unshift
, 20)
3438 int __thiscall
codecvt_wchar_do_unshift(const codecvt_wchar
*this,
3439 int *state
, char *to
, char *to_end
, char **to_next
)
3441 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3443 WARN("unexpected state: %x\n", *state
);
3449 /* ?unshift@?$codecvt@GDH@std@@QBEHAAHPAD1AAPAD@Z */
3450 /* ?unshift@?$codecvt@GDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
3451 /* ?unshift@?$codecvt@_WDH@std@@QBEHAAHPAD1AAPAD@Z */
3452 /* ?unshift@?$codecvt@_WDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
3453 DEFINE_THISCALL_WRAPPER(codecvt_wchar_unshift
, 20)
3454 int __thiscall
codecvt_wchar_unshift(const codecvt_wchar
*this,
3455 int *state
, char *to
, char *to_end
, char **to_next
)
3457 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3458 return call_codecvt_wchar_do_unshift(this, state
, to
, to_end
, to_next
);
3461 /* ?do_length@?$codecvt@GDH@std@@MBEHABHPBD1I@Z */
3462 /* ?do_length@?$codecvt@GDH@std@@MEBAHAEBHPEBD1_K@Z */
3463 /* ?do_length@?$codecvt@_WDH@std@@MBEHABHPBD1I@Z */
3464 /* ?do_length@?$codecvt@_WDH@std@@MEBAHAEBHPEBD1_K@Z */
3465 #define call_codecvt_wchar_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 28, \
3466 int, (const codecvt_wchar*, const int*, const char*, const char*, MSVCP_size_t), \
3467 (this, state, from, from_end, max))
3468 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_length
, 20)
3469 int __thiscall
codecvt_wchar_do_length(const codecvt_wchar
*this, const int *state
,
3470 const char *from
, const char *from_end
, MSVCP_size_t max
)
3472 int tmp_state
= *state
, ret
=0;
3474 TRACE("(%p %p %p %p %ld)\n", this, state
, from
, from_end
, max
);
3476 while(ret
<max
&& from
!=from_end
) {
3477 switch(_Mbrtowc(NULL
, from
, from_end
-from
, &tmp_state
, &this->cvt
)) {
3494 /* ?length@?$codecvt@GDH@std@@QBEHABHPBD1I@Z */
3495 /* ?length@?$codecvt@GDH@std@@QEBAHAEBHPEBD1_K@Z */
3496 /* ?length@?$codecvt@_WDH@std@@QBEHABHPBD1I@Z */
3497 /* ?length@?$codecvt@_WDH@std@@QEBAHAEBHPEBD1_K@Z */
3498 DEFINE_THISCALL_WRAPPER(codecvt_wchar_length
, 20)
3499 int __thiscall
codecvt_wchar_length(const codecvt_wchar
*this, const int *state
,
3500 const char *from
, const char *from_end
, MSVCP_size_t max
)
3502 TRACE("(%p %p %p %p %ld)\n", this, state
, from
, from_end
, max
);
3503 return call_codecvt_wchar_do_length(this, state
, from
, from_end
, max
);
3506 /* ?id@?$numpunct@D@std@@2V0locale@2@A */
3507 locale_id numpunct_char_id
= {0};
3509 /* ??_7?$numpunct@D@std@@6B@ */
3510 extern const vtable_ptr MSVCP_numpunct_char_vtable
;
3512 /* ?_Init@?$numpunct@D@std@@IAEXABV_Locinfo@2@_N@Z */
3513 /* ?_Init@?$numpunct@D@std@@IEAAXAEBV_Locinfo@2@_N@Z */
3514 static void numpunct_char__Init(numpunct_char
*this, const _Locinfo
*locinfo
, MSVCP_bool isdef
)
3518 TRACE("(%p %p %d)\n", this, locinfo
, isdef
);
3520 len
= strlen(_Locinfo__Getfalse(locinfo
))+1;
3521 this->false_name
= MSVCRT_operator_new(len
);
3522 if(this->false_name
)
3523 memcpy((char*)this->false_name
, _Locinfo__Getfalse(locinfo
), len
);
3525 len
= strlen(_Locinfo__Gettrue(locinfo
))+1;
3526 this->true_name
= MSVCRT_operator_new(len
);
3528 memcpy((char*)this->true_name
, _Locinfo__Gettrue(locinfo
), len
);
3531 this->grouping
= MSVCRT_operator_new(1);
3533 *(char*)this->grouping
= 0;
3538 const struct lconv
*lc
= _Locinfo__Getlconv(locinfo
);
3540 len
= strlen(lc
->grouping
)+1;
3541 this->grouping
= MSVCRT_operator_new(len
);
3543 memcpy((char*)this->grouping
, lc
->grouping
, len
);
3545 this->dp
= lc
->decimal_point
[0];
3546 this->sep
= lc
->thousands_sep
[0];
3549 if(!this->false_name
|| !this->true_name
|| !this->grouping
) {
3550 MSVCRT_operator_delete((char*)this->grouping
);
3551 MSVCRT_operator_delete((char*)this->false_name
);
3552 MSVCRT_operator_delete((char*)this->true_name
);
3554 ERR("Out of memory\n");
3555 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3559 /* ?_Tidy@?$numpunct@D@std@@AAEXXZ */
3560 /* ?_Tidy@?$numpunct@D@std@@AEAAXXZ */
3561 DEFINE_THISCALL_WRAPPER(numpunct_char__Tidy
, 4)
3562 void __thiscall
numpunct_char__Tidy(numpunct_char
*this)
3564 TRACE("(%p)\n", this);
3566 MSVCRT_operator_delete((char*)this->grouping
);
3567 MSVCRT_operator_delete((char*)this->false_name
);
3568 MSVCRT_operator_delete((char*)this->true_name
);
3571 /* ??0?$numpunct@D@std@@QAE@ABV_Locinfo@1@I_N@Z */
3572 /* ??0?$numpunct@D@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
3573 static numpunct_char
* numpunct_char_ctor_locinfo(numpunct_char
*this,
3574 const _Locinfo
*locinfo
, MSVCP_size_t refs
, MSVCP_bool usedef
)
3576 TRACE("(%p %p %lu %d)\n", this, locinfo
, refs
, usedef
);
3577 locale_facet_ctor_refs(&this->facet
, refs
);
3578 this->facet
.vtable
= &MSVCP_numpunct_char_vtable
;
3579 numpunct_char__Init(this, locinfo
, usedef
);
3583 /* ??0?$numpunct@D@std@@IAE@PBDI_N@Z */
3584 /* ??0?$numpunct@D@std@@IEAA@PEBD_K_N@Z */
3585 static numpunct_char
* numpunct_char_ctor_name(numpunct_char
*this,
3586 const char *name
, MSVCP_size_t refs
, MSVCP_bool usedef
)
3590 TRACE("(%p %s %lu %d)\n", this, debugstr_a(name
), refs
, usedef
);
3591 locale_facet_ctor_refs(&this->facet
, refs
);
3592 this->facet
.vtable
= &MSVCP_numpunct_char_vtable
;
3594 _Locinfo_ctor_cstr(&locinfo
, name
);
3595 numpunct_char__Init(this, &locinfo
, usedef
);
3596 _Locinfo_dtor(&locinfo
);
3600 /* ??0?$numpunct@D@std@@QAE@I@Z */
3601 /* ??0?$numpunct@D@std@@QEAA@_K@Z */
3602 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_refs
, 8)
3603 numpunct_char
* __thiscall
numpunct_char_ctor_refs(numpunct_char
*this, MSVCP_size_t refs
)
3605 TRACE("(%p %lu)\n", this, refs
);
3606 return numpunct_char_ctor_name(this, "C", refs
, FALSE
);
3609 /* ??_F?$numpunct@D@std@@QAEXXZ */
3610 /* ??_F?$numpunct@D@std@@QEAAXXZ */
3611 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor
, 4)
3612 numpunct_char
* __thiscall
numpunct_char_ctor(numpunct_char
*this)
3614 return numpunct_char_ctor_refs(this, 0);
3617 /* ??1?$numpunct@D@std@@MAE@XZ */
3618 /* ??1?$numpunct@D@std@@MEAA@XZ */
3619 DEFINE_THISCALL_WRAPPER(numpunct_char_dtor
, 4)
3620 void __thiscall
numpunct_char_dtor(numpunct_char
*this)
3622 TRACE("(%p)\n", this);
3623 numpunct_char__Tidy(this);
3626 DEFINE_THISCALL_WRAPPER(numpunct_char_vector_dtor
, 8)
3627 numpunct_char
* __thiscall
numpunct_char_vector_dtor(numpunct_char
*this, unsigned int flags
)
3629 TRACE("(%p %x)\n", this, flags
);
3631 /* we have an array, with the number of elements stored before the first object */
3632 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
3634 for(i
=*ptr
-1; i
>=0; i
--)
3635 numpunct_char_dtor(this+i
);
3636 MSVCRT_operator_delete(ptr
);
3638 numpunct_char_dtor(this);
3640 MSVCRT_operator_delete(this);
3646 /* ?_Getcat@?$numpunct@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3647 /* ?_Getcat@?$numpunct@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3648 static MSVCP_size_t
numpunct_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
3650 TRACE("(%p %p)\n", facet
, loc
);
3652 if(facet
&& !*facet
) {
3653 *facet
= MSVCRT_operator_new(sizeof(numpunct_char
));
3655 ERR("Out of memory\n");
3656 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3659 numpunct_char_ctor_name((numpunct_char
*)*facet
,
3660 MSVCP_basic_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
3666 /* ?_Getcat@?$numpunct@D@std@@SAIPAPBVfacet@locale@2@@Z */
3667 /* ?_Getcat@?$numpunct@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3668 MSVCP_size_t __cdecl
numpunct_char__Getcat_old(const locale_facet
**facet
)
3670 return numpunct_char__Getcat(facet
, locale_classic());
3673 static numpunct_char
* numpunct_char_use_facet(const locale
*loc
)
3675 static numpunct_char
*obj
= NULL
;
3678 const locale_facet
*fac
;
3680 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3681 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_char_id
));
3683 _Lockit_dtor(&lock
);
3684 return (numpunct_char
*)fac
;
3688 _Lockit_dtor(&lock
);
3692 numpunct_char__Getcat(&fac
, loc
);
3693 obj
= (numpunct_char
*)fac
;
3694 locale_facet__Incref(&obj
->facet
);
3695 locale_facet_register(&obj
->facet
);
3696 _Lockit_dtor(&lock
);
3701 /* ?do_decimal_point@?$numpunct@D@std@@MBEDXZ */
3702 /* ?do_decimal_point@?$numpunct@D@std@@MEBADXZ */
3703 DEFINE_THISCALL_WRAPPER(numpunct_char_do_decimal_point
, 4)
3704 #define call_numpunct_char_do_decimal_point(this) CALL_VTBL_FUNC(this, 4, \
3705 char, (const numpunct_char *this), (this))
3706 char __thiscall
numpunct_char_do_decimal_point(const numpunct_char
*this)
3708 TRACE("(%p)\n", this);
3712 /* ?decimal_point@?$numpunct@D@std@@QBEDXZ */
3713 /* ?decimal_point@?$numpunct@D@std@@QEBADXZ */
3714 DEFINE_THISCALL_WRAPPER(numpunct_char_decimal_point
, 4)
3715 char __thiscall
numpunct_char_decimal_point(const numpunct_char
*this)
3717 TRACE("(%p)\n", this);
3718 return call_numpunct_char_do_decimal_point(this);
3721 /* ?do_thousands_sep@?$numpunct@D@std@@MBEDXZ */
3722 /* ?do_thousands_sep@?$numpunct@D@std@@MEBADXZ */
3723 DEFINE_THISCALL_WRAPPER(numpunct_char_do_thousands_sep
, 4)
3724 #define call_numpunct_char_do_thousands_sep(this) CALL_VTBL_FUNC(this, 8, \
3725 char, (const numpunct_char*), (this))
3726 char __thiscall
numpunct_char_do_thousands_sep(const numpunct_char
*this)
3728 TRACE("(%p)\n", this);
3732 /* ?thousands_sep@?$numpunct@D@std@@QBEDXZ */
3733 /* ?thousands_sep@?$numpunct@D@std@@QEBADXZ */
3734 DEFINE_THISCALL_WRAPPER(numpunct_char_thousands_sep
, 4)
3735 char __thiscall
numpunct_char_thousands_sep(const numpunct_char
*this)
3737 TRACE("(%p)\n", this);
3738 return call_numpunct_char_do_thousands_sep(this);
3741 /* ?do_grouping@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3742 /* ?do_grouping@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3743 DEFINE_THISCALL_WRAPPER(numpunct_char_do_grouping
, 8)
3744 #define call_numpunct_char_do_grouping(this, ret) CALL_VTBL_FUNC(this, 12, \
3745 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
3746 basic_string_char
* __thiscall
numpunct_char_do_grouping(
3747 const numpunct_char
*this, basic_string_char
*ret
)
3749 TRACE("(%p)\n", this);
3750 return MSVCP_basic_string_char_ctor_cstr(ret
, this->grouping
);
3753 /* ?grouping@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3754 /* ?grouping@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3755 DEFINE_THISCALL_WRAPPER(numpunct_char_grouping
, 8)
3756 basic_string_char
* __thiscall
numpunct_char_grouping(const numpunct_char
*this, basic_string_char
*ret
)
3758 TRACE("(%p)\n", this);
3759 return call_numpunct_char_do_grouping(this, ret
);
3762 /* ?do_falsename@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3763 /* ?do_falsename@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3764 DEFINE_THISCALL_WRAPPER(numpunct_char_do_falsename
, 8)
3765 #define call_numpunct_char_do_falsename(this, ret) CALL_VTBL_FUNC(this, 16, \
3766 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
3767 basic_string_char
* __thiscall
numpunct_char_do_falsename(
3768 const numpunct_char
*this, basic_string_char
*ret
)
3770 TRACE("(%p)\n", this);
3771 return MSVCP_basic_string_char_ctor_cstr(ret
, this->false_name
);
3774 /* ?falsename@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3775 /* ?falsename@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3776 DEFINE_THISCALL_WRAPPER(numpunct_char_falsename
, 8)
3777 basic_string_char
* __thiscall
numpunct_char_falsename(const numpunct_char
*this, basic_string_char
*ret
)
3779 TRACE("(%p)\n", this);
3780 return call_numpunct_char_do_falsename(this, ret
);
3783 /* ?do_truename@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3784 /* ?do_truename@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3785 DEFINE_THISCALL_WRAPPER(numpunct_char_do_truename
, 8)
3786 #define call_numpunct_char_do_truename(this, ret) CALL_VTBL_FUNC(this, 20, \
3787 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
3788 basic_string_char
* __thiscall
numpunct_char_do_truename(
3789 const numpunct_char
*this, basic_string_char
*ret
)
3791 TRACE("(%p)\n", this);
3792 return MSVCP_basic_string_char_ctor_cstr(ret
, this->true_name
);
3795 /* ?truename@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3796 /* ?truename@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
3797 DEFINE_THISCALL_WRAPPER(numpunct_char_truename
, 8)
3798 basic_string_char
* __thiscall
numpunct_char_truename(const numpunct_char
*this, basic_string_char
*ret
)
3800 TRACE("(%p)\n", this);
3801 return call_numpunct_char_do_truename(this, ret
);
3804 /* ?id@?$numpunct@_W@std@@2V0locale@2@A */
3805 locale_id numpunct_wchar_id
= {0};
3806 /* ?id@?$numpunct@G@std@@2V0locale@2@A */
3807 locale_id numpunct_short_id
= {0};
3809 /* ??_7?$numpunct@_W@std@@6B@ */
3810 extern const vtable_ptr MSVCP_numpunct_wchar_vtable
;
3811 /* ??_7?$numpunct@G@std@@6B@ */
3812 extern const vtable_ptr MSVCP_numpunct_short_vtable
;
3814 /* ?_Init@?$numpunct@_W@std@@IAEXABV_Locinfo@2@_N@Z */
3815 /* ?_Init@?$numpunct@_W@std@@IEAAXAEBV_Locinfo@2@_N@Z */
3816 /* ?_Init@?$numpunct@G@std@@IAEXABV_Locinfo@2@_N@Z */
3817 /* ?_Init@?$numpunct@G@std@@IEAAXAEBV_Locinfo@2@_N@Z */
3818 static void numpunct_wchar__Init(numpunct_wchar
*this,
3819 const _Locinfo
*locinfo
, MSVCP_bool isdef
)
3821 const char *to_convert
;
3825 TRACE("(%p %p %d)\n", this, locinfo
, isdef
);
3827 _Locinfo__Getcvt(locinfo
, &cvt
);
3829 to_convert
= _Locinfo__Getfalse(locinfo
);
3830 len
= MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1, NULL
, 0);
3831 this->false_name
= MSVCRT_operator_new(len
*sizeof(WCHAR
));
3832 if(this->false_name
)
3833 MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1,
3834 (wchar_t*)this->false_name
, len
);
3836 to_convert
= _Locinfo__Gettrue(locinfo
);
3837 len
= MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1, NULL
, 0);
3838 this->true_name
= MSVCRT_operator_new(len
*sizeof(WCHAR
));
3840 MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1,
3841 (wchar_t*)this->true_name
, len
);
3844 this->grouping
= MSVCRT_operator_new(1);
3846 *(char*)this->grouping
= 0;
3851 const struct lconv
*lc
= _Locinfo__Getlconv(locinfo
);
3853 len
= strlen(lc
->grouping
)+1;
3854 this->grouping
= MSVCRT_operator_new(len
);
3856 memcpy((char*)this->grouping
, lc
->grouping
, len
);
3858 this->dp
= lc
->decimal_point
[0];
3859 this->sep
= lc
->thousands_sep
[0];
3862 if(!this->false_name
|| !this->true_name
|| !this->grouping
) {
3863 MSVCRT_operator_delete((char*)this->grouping
);
3864 MSVCRT_operator_delete((wchar_t*)this->false_name
);
3865 MSVCRT_operator_delete((wchar_t*)this->true_name
);
3867 ERR("Out of memory\n");
3868 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3872 /* ?_Tidy@?$numpunct@_W@std@@AAEXXZ */
3873 /* ?_Tidy@?$numpunct@_W@std@@AEAAXXZ */
3874 /* ?_Tidy@?$numpunct@G@std@@AAEXXZ */
3875 /* ?_Tidy@?$numpunct@G@std@@AEAAXXZ */
3876 DEFINE_THISCALL_WRAPPER(numpunct_wchar__Tidy
, 4)
3877 void __thiscall
numpunct_wchar__Tidy(numpunct_wchar
*this)
3879 TRACE("(%p)\n", this);
3881 MSVCRT_operator_delete((char*)this->grouping
);
3882 MSVCRT_operator_delete((wchar_t*)this->false_name
);
3883 MSVCRT_operator_delete((wchar_t*)this->true_name
);
3886 /* ??0?$numpunct@_W@std@@QAE@ABV_Locinfo@1@I_N@Z */
3887 /* ??0?$numpunct@_W@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
3888 static numpunct_wchar
* numpunct_wchar_ctor_locinfo(numpunct_wchar
*this,
3889 const _Locinfo
*locinfo
, MSVCP_size_t refs
, MSVCP_bool usedef
)
3891 TRACE("(%p %p %lu %d)\n", this, locinfo
, refs
, usedef
);
3892 locale_facet_ctor_refs(&this->facet
, refs
);
3893 this->facet
.vtable
= &MSVCP_numpunct_wchar_vtable
;
3894 numpunct_wchar__Init(this, locinfo
, usedef
);
3898 /* ??0?$numpunct@G@std@@QAE@ABV_Locinfo@1@I_N@Z */
3899 /* ??0?$numpunct@G@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
3900 static numpunct_wchar
* numpunct_short_ctor_locinfo(numpunct_wchar
*this,
3901 const _Locinfo
*locinfo
, MSVCP_size_t refs
, MSVCP_bool usedef
)
3903 numpunct_wchar_ctor_locinfo(this, locinfo
, refs
, usedef
);
3904 this->facet
.vtable
= &MSVCP_numpunct_short_vtable
;
3908 /* ??0?$numpunct@_W@std@@IAE@PBDI_N@Z */
3909 /* ??0?$numpunct@_W@std@@IEAA@PEBD_K_N@Z */
3910 static numpunct_wchar
* numpunct_wchar_ctor_name(numpunct_wchar
*this,
3911 const char *name
, MSVCP_size_t refs
, MSVCP_bool usedef
)
3915 TRACE("(%p %s %lu %d)\n", this, debugstr_a(name
), refs
, usedef
);
3916 locale_facet_ctor_refs(&this->facet
, refs
);
3917 this->facet
.vtable
= &MSVCP_numpunct_wchar_vtable
;
3919 _Locinfo_ctor_cstr(&locinfo
, name
);
3920 numpunct_wchar__Init(this, &locinfo
, usedef
);
3921 _Locinfo_dtor(&locinfo
);
3925 /* ??0?$numpunct@G@std@@IAE@PBDI_N@Z */
3926 /* ??0?$numpunct@G@std@@IEAA@PEBD_K_N@Z */
3927 static numpunct_wchar
* numpunct_short_ctor_name(numpunct_wchar
*this,
3928 const char *name
, MSVCP_size_t refs
, MSVCP_bool usedef
)
3930 numpunct_wchar_ctor_name(this, name
, refs
, usedef
);
3931 this->facet
.vtable
= &MSVCP_numpunct_short_vtable
;
3935 /* ??0?$numpunct@_W@std@@QAE@I@Z */
3936 /* ??0?$numpunct@_W@std@@QEAA@_K@Z */
3937 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_refs
, 8)
3938 numpunct_wchar
* __thiscall
numpunct_wchar_ctor_refs(numpunct_wchar
*this, MSVCP_size_t refs
)
3940 TRACE("(%p %lu)\n", this, refs
);
3941 return numpunct_wchar_ctor_name(this, "C", refs
, FALSE
);
3944 /* ??0?$numpunct@G@std@@QAE@I@Z */
3945 /* ??0?$numpunct@G@std@@QEAA@_K@Z */
3946 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_refs
, 8)
3947 numpunct_wchar
* __thiscall
numpunct_short_ctor_refs(numpunct_wchar
*this, MSVCP_size_t refs
)
3949 numpunct_wchar_ctor_refs(this, refs
);
3950 this->facet
.vtable
= &MSVCP_numpunct_short_vtable
;
3954 /* ??_F?$numpunct@_W@std@@QAEXXZ */
3955 /* ??_F?$numpunct@_W@std@@QEAAXXZ */
3956 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor
, 4)
3957 numpunct_wchar
* __thiscall
numpunct_wchar_ctor(numpunct_wchar
*this)
3959 return numpunct_wchar_ctor_refs(this, 0);
3962 /* ??_F?$numpunct@G@std@@QAEXXZ */
3963 /* ??_F?$numpunct@G@std@@QEAAXXZ */
3964 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor
, 4)
3965 numpunct_wchar
* __thiscall
numpunct_short_ctor(numpunct_wchar
*this)
3967 return numpunct_short_ctor_refs(this, 0);
3970 /* ??1?$numpunct@_W@std@@MAE@XZ */
3971 /* ??1?$numpunct@_W@std@@MEAA@XZ */
3972 /* ??1?$numpunct@G@std@@MAE@XZ */
3973 /* ??1?$numpunct@G@std@@MEAA@XZ */
3974 DEFINE_THISCALL_WRAPPER(numpunct_wchar_dtor
, 4)
3975 void __thiscall
numpunct_wchar_dtor(numpunct_wchar
*this)
3977 TRACE("(%p)\n", this);
3978 numpunct_wchar__Tidy(this);
3981 DEFINE_THISCALL_WRAPPER(numpunct_wchar_vector_dtor
, 8)
3982 numpunct_wchar
* __thiscall
numpunct_wchar_vector_dtor(numpunct_wchar
*this, unsigned int flags
)
3984 TRACE("(%p %x)\n", this, flags
);
3986 /* we have an array, with the number of elements stored before the first object */
3987 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
3989 for(i
=*ptr
-1; i
>=0; i
--)
3990 numpunct_wchar_dtor(this+i
);
3991 MSVCRT_operator_delete(ptr
);
3993 numpunct_wchar_dtor(this);
3995 MSVCRT_operator_delete(this);
4001 /* ?_Getcat@?$numpunct@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4002 /* ?_Getcat@?$numpunct@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4003 static MSVCP_size_t
numpunct_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
4005 TRACE("(%p %p)\n", facet
, loc
);
4007 if(facet
&& !*facet
) {
4008 *facet
= MSVCRT_operator_new(sizeof(numpunct_wchar
));
4010 ERR("Out of memory\n");
4011 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
4014 numpunct_wchar_ctor_name((numpunct_wchar
*)*facet
,
4015 MSVCP_basic_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
4021 /* ?_Getcat@?$numpunct@_W@std@@SAIPAPBVfacet@locale@2@@Z */
4022 /* ?_Getcat@?$numpunct@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
4023 MSVCP_size_t __cdecl
numpunct_wchar__Getcat_old(const locale_facet
**facet
)
4025 return numpunct_wchar__Getcat(facet
, locale_classic());
4028 static numpunct_wchar
* numpunct_wchar_use_facet(const locale
*loc
)
4030 static numpunct_wchar
*obj
= NULL
;
4033 const locale_facet
*fac
;
4035 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
4036 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_wchar_id
));
4038 _Lockit_dtor(&lock
);
4039 return (numpunct_wchar
*)fac
;
4043 _Lockit_dtor(&lock
);
4047 numpunct_wchar__Getcat(&fac
, loc
);
4048 obj
= (numpunct_wchar
*)fac
;
4049 locale_facet__Incref(&obj
->facet
);
4050 locale_facet_register(&obj
->facet
);
4051 _Lockit_dtor(&lock
);
4056 /* ?_Getcat@?$numpunct@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4057 /* ?_Getcat@?$numpunct@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4058 static MSVCP_size_t
numpunct_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
4060 TRACE("(%p %p)\n", facet
, loc
);
4062 if(facet
&& !*facet
) {
4063 *facet
= MSVCRT_operator_new(sizeof(numpunct_wchar
));
4065 ERR("Out of memory\n");
4066 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
4069 numpunct_short_ctor_name((numpunct_wchar
*)*facet
,
4070 MSVCP_basic_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
4076 /* ?_Getcat@?$numpunct@G@std@@SAIPAPBVfacet@locale@2@@Z */
4077 /* ?_Getcat@?$numpunct@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
4078 MSVCP_size_t __cdecl
numpunct_short__Getcat_old(const locale_facet
**facet
)
4080 return numpunct_short__Getcat(facet
, locale_classic());
4083 static numpunct_wchar
* numpunct_short_use_facet(const locale
*loc
)
4085 static numpunct_wchar
*obj
= NULL
;
4088 const locale_facet
*fac
;
4090 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
4091 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_short_id
));
4093 _Lockit_dtor(&lock
);
4094 return (numpunct_wchar
*)fac
;
4098 _Lockit_dtor(&lock
);
4102 numpunct_short__Getcat(&fac
, loc
);
4103 obj
= (numpunct_wchar
*)fac
;
4104 locale_facet__Incref(&obj
->facet
);
4105 locale_facet_register(&obj
->facet
);
4106 _Lockit_dtor(&lock
);
4111 /* ?do_decimal_point@?$numpunct@_W@std@@MBE_WXZ */
4112 /* ?do_decimal_point@?$numpunct@_W@std@@MEBA_WXZ */
4113 /* ?do_decimal_point@?$numpunct@G@std@@MBEGXZ */
4114 /* ?do_decimal_point@?$numpunct@G@std@@MEBAGXZ */
4115 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_decimal_point
, 4)
4116 #define call_numpunct_wchar_do_decimal_point(this) CALL_VTBL_FUNC(this, 4, \
4117 wchar_t, (const numpunct_wchar *this), (this))
4118 wchar_t __thiscall
numpunct_wchar_do_decimal_point(const numpunct_wchar
*this)
4120 TRACE("(%p)\n", this);
4124 /* ?decimal_point@?$numpunct@_W@std@@QBE_WXZ */
4125 /* ?decimal_point@?$numpunct@_W@std@@QEBA_WXZ */
4126 /* ?decimal_point@?$numpunct@G@std@@QBEGXZ */
4127 /* ?decimal_point@?$numpunct@G@std@@QEBAGXZ */
4128 DEFINE_THISCALL_WRAPPER(numpunct_wchar_decimal_point
, 4)
4129 wchar_t __thiscall
numpunct_wchar_decimal_point(const numpunct_wchar
*this)
4131 TRACE("(%p)\n", this);
4132 return call_numpunct_wchar_do_decimal_point(this);
4135 /* ?do_thousands_sep@?$numpunct@_W@std@@MBE_WXZ */
4136 /* ?do_thousands_sep@?$numpunct@_W@std@@MEBA_WXZ */
4137 /* ?do_thousands_sep@?$numpunct@G@std@@MBEGXZ */
4138 /* ?do_thousands_sep@?$numpunct@G@std@@MEBAGXZ */
4139 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_thousands_sep
, 4)
4140 #define call_numpunct_wchar_do_thousands_sep(this) CALL_VTBL_FUNC(this, 8, \
4141 wchar_t, (const numpunct_wchar *this), (this))
4142 wchar_t __thiscall
numpunct_wchar_do_thousands_sep(const numpunct_wchar
*this)
4144 TRACE("(%p)\n", this);
4148 /* ?thousands_sep@?$numpunct@_W@std@@QBE_WXZ */
4149 /* ?thousands_sep@?$numpunct@_W@std@@QEBA_WXZ */
4150 /* ?thousands_sep@?$numpunct@G@std@@QBEGXZ */
4151 /* ?thousands_sep@?$numpunct@G@std@@QEBAGXZ */
4152 DEFINE_THISCALL_WRAPPER(numpunct_wchar_thousands_sep
, 4)
4153 wchar_t __thiscall
numpunct_wchar_thousands_sep(const numpunct_wchar
*this)
4155 TRACE("(%p)\n", this);
4156 return call_numpunct_wchar_do_thousands_sep(this);
4159 /* ?do_grouping@?$numpunct@_W@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4160 /* ?do_grouping@?$numpunct@_W@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4161 /* ?do_grouping@?$numpunct@G@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4162 /* ?do_grouping@?$numpunct@G@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4163 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_grouping
, 8)
4164 #define call_numpunct_wchar_do_grouping(this, ret) CALL_VTBL_FUNC(this, 12, \
4165 basic_string_char*, (const numpunct_wchar*, basic_string_char*), (this, ret))
4166 basic_string_char
* __thiscall
numpunct_wchar_do_grouping(const numpunct_wchar
*this, basic_string_char
*ret
)
4168 TRACE("(%p)\n", this);
4169 return MSVCP_basic_string_char_ctor_cstr(ret
, this->grouping
);
4172 /* ?grouping@?$numpunct@_W@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4173 /* ?grouping@?$numpunct@_W@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4174 /* ?grouping@?$numpunct@G@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4175 /* ?grouping@?$numpunct@G@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4176 DEFINE_THISCALL_WRAPPER(numpunct_wchar_grouping
, 8)
4177 basic_string_char
* __thiscall
numpunct_wchar_grouping(const numpunct_wchar
*this, basic_string_char
*ret
)
4179 TRACE("(%p)\n", this);
4180 return call_numpunct_wchar_do_grouping(this, ret
);
4183 /* ?do_falsename@?$numpunct@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4184 /* ?do_falsename@?$numpunct@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4185 /* ?do_falsename@?$numpunct@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4186 /* ?do_falsename@?$numpunct@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4187 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_falsename
, 8)
4188 #define call_numpunct_wchar_do_falsename(this, ret) CALL_VTBL_FUNC(this, 16, \
4189 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
4190 basic_string_wchar
* __thiscall
numpunct_wchar_do_falsename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4192 TRACE("(%p)\n", this);
4193 return MSVCP_basic_string_wchar_ctor_cstr(ret
, this->false_name
);
4196 /* ?falsename@?$numpunct@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4197 /* ?falsename@?$numpunct@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4198 /* ?falsename@?$numpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4199 /* ?falsename@?$numpunct@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4200 DEFINE_THISCALL_WRAPPER(numpunct_wchar_falsename
, 8)
4201 basic_string_wchar
* __thiscall
numpunct_wchar_falsename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4203 TRACE("(%p)\n", this);
4204 return call_numpunct_wchar_do_falsename(this, ret
);
4207 /* ?do_truename@?$numpunct@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4208 /* ?do_truename@?$numpunct@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4209 /* ?do_truename@?$numpunct@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4210 /* ?do_truename@?$numpunct@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4211 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_truename
, 8)
4212 #define call_numpunct_wchar_do_truename(this, ret) CALL_VTBL_FUNC(this, 20, \
4213 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
4214 basic_string_wchar
* __thiscall
numpunct_wchar_do_truename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4216 TRACE("(%p)\n", this);
4217 return MSVCP_basic_string_wchar_ctor_cstr(ret
, this->true_name
);
4220 /* ?truename@?$numpunct@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4221 /* ?truename@?$numpunct@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4222 /* ?truename@?$numpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4223 /* ?truename@?$numpunct@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4224 DEFINE_THISCALL_WRAPPER(numpunct_wchar_truename
, 8)
4225 basic_string_wchar
* __thiscall
numpunct_wchar_truename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4227 TRACE("(%p)\n", this);
4228 return call_numpunct_wchar_do_truename(this, ret
);
4231 double __cdecl
_Stod(const char *buf
, char **buf_end
, LONG exp
)
4233 double ret
= strtod(buf
, buf_end
);
4236 ret
*= pow(10, exp
);
4240 double __cdecl
_Stodx(const char *buf
, char **buf_end
, LONG exp
, int *err
)
4246 ret
= _Stod(buf
, buf_end
, exp
);
4256 float __cdecl
_Stof(const char *buf
, char **buf_end
, LONG exp
)
4258 return _Stod(buf
, buf_end
, exp
);
4261 float __cdecl
_Stofx(const char *buf
, char **buf_end
, LONG exp
, int *err
)
4263 return _Stodx(buf
, buf_end
, exp
, err
);
4266 static __int64
_Stollx(const char *buf
, char **buf_end
, int base
, int *err
)
4272 ret
= _strtoi64(buf
, buf_end
, base
);
4282 LONG __cdecl
_Stolx(const char *buf
, char **buf_end
, int base
, int *err
)
4284 __int64 i
= _Stollx(buf
, buf_end
, base
, err
);
4285 if(!*err
&& i
!=(__int64
)((LONG
)i
))
4290 static unsigned __int64
_Stoullx(const char *buf
, char **buf_end
, int base
, int *err
)
4292 unsigned __int64 ret
;
4296 ret
= _strtoui64(buf
, buf_end
, base
);
4306 ULONG __cdecl
_Stoul(const char *buf
, char **buf_end
, int base
)
4309 unsigned __int64 i
= _Stoullx(buf
[0]=='-' ? buf
+1 : buf
, buf_end
, base
, &err
);
4310 if(!err
&& i
!=(unsigned __int64
)((ULONG
)i
))
4312 return buf
[0]=='-' ? -i
: i
;
4315 ULONG __cdecl
_Stoulx(const char *buf
, char **buf_end
, int base
, int *err
)
4317 unsigned __int64 i
= _Stoullx(buf
[0]=='-' ? buf
+1 : buf
, buf_end
, base
, err
);
4318 if(!*err
&& i
!=(unsigned __int64
)((ULONG
)i
))
4320 return buf
[0]=='-' ? -i
: i
;
4323 /* ?id@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
4324 locale_id num_get_wchar_id
= {0};
4325 /* ?id@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
4326 locale_id num_get_short_id
= {0};
4328 /* ??_7?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
4329 extern const vtable_ptr MSVCP_num_get_wchar_vtable
;
4330 /* ??_7?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
4331 extern const vtable_ptr MSVCP_num_get_short_vtable
;
4333 /* ?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
4334 /* ?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
4335 /* ?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
4336 /* ?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
4337 DEFINE_THISCALL_WRAPPER(num_get_wchar__Init
, 8)
4338 void __thiscall
num_get_wchar__Init(num_get
*this, const _Locinfo
*locinfo
)
4340 TRACE("(%p %p)\n", this, locinfo
);
4341 _Locinfo__Getcvt(locinfo
, &this->cvt
);
4344 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
4345 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
4346 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor_locinfo
, 12)
4347 num_get
* __thiscall
num_get_wchar_ctor_locinfo(num_get
*this,
4348 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
4350 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
4352 locale_facet_ctor_refs(&this->facet
, refs
);
4353 this->facet
.vtable
= &MSVCP_num_get_wchar_vtable
;
4355 num_get_wchar__Init(this, locinfo
);
4359 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
4360 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
4361 DEFINE_THISCALL_WRAPPER(num_get_short_ctor_locinfo
, 12)
4362 num_get
* __thiscall
num_get_short_ctor_locinfo(num_get
*this,
4363 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
4365 num_get_wchar_ctor_locinfo(this, locinfo
, refs
);
4366 this->facet
.vtable
= &MSVCP_num_get_short_vtable
;
4370 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
4371 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
4372 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor_refs
, 8)
4373 num_get
* __thiscall
num_get_wchar_ctor_refs(num_get
*this, MSVCP_size_t refs
)
4377 TRACE("(%p %lu)\n", this, refs
);
4379 _Locinfo_ctor(&locinfo
);
4380 num_get_wchar_ctor_locinfo(this, &locinfo
, refs
);
4381 _Locinfo_dtor(&locinfo
);
4385 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
4386 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
4387 DEFINE_THISCALL_WRAPPER(num_get_short_ctor_refs
, 8)
4388 num_get
* __thiscall
num_get_short_ctor_refs(num_get
*this, MSVCP_size_t refs
)
4390 num_get_wchar_ctor_refs(this, refs
);
4391 this->facet
.vtable
= &MSVCP_num_get_short_vtable
;
4395 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
4396 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
4397 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor
, 4)
4398 num_get
* __thiscall
num_get_wchar_ctor(num_get
*this)
4400 return num_get_wchar_ctor_refs(this, 0);
4403 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
4404 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
4405 DEFINE_THISCALL_WRAPPER(num_get_short_ctor
, 4)
4406 num_get
* __thiscall
num_get_short_ctor(num_get
*this)
4408 return num_get_short_ctor_refs(this, 0);
4411 /* ??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
4412 /* ??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
4413 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
4414 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
4415 DEFINE_THISCALL_WRAPPER(num_get_wchar_dtor
, 4)
4416 void __thiscall
num_get_wchar_dtor(num_get
*this)
4418 TRACE("(%p)\n", this);
4419 locale_facet_dtor(&this->facet
);
4422 DEFINE_THISCALL_WRAPPER(num_get_wchar_vector_dtor
, 8)
4423 num_get
* __thiscall
num_get_wchar_vector_dtor(num_get
*this, unsigned int flags
)
4425 TRACE("(%p %x)\n", this, flags
);
4427 /* we have an array, with the number of elements stored before the first object */
4428 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
4430 for(i
=*ptr
-1; i
>=0; i
--)
4431 num_get_wchar_dtor(this+i
);
4432 MSVCRT_operator_delete(ptr
);
4434 num_get_wchar_dtor(this);
4436 MSVCRT_operator_delete(this);
4442 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4443 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4444 static MSVCP_size_t
num_get_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
4446 TRACE("(%p %p)\n", facet
, loc
);
4448 if(facet
&& !*facet
) {
4451 *facet
= MSVCRT_operator_new(sizeof(num_get
));
4453 ERR("Out of memory\n");
4454 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
4458 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
4459 num_get_wchar_ctor_locinfo((num_get
*)*facet
, &locinfo
, 0);
4460 _Locinfo_dtor(&locinfo
);
4466 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
4467 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
4468 MSVCP_size_t __cdecl
num_get_wchar__Getcat_old(const locale_facet
**facet
)
4470 return num_get_wchar__Getcat(facet
, locale_classic());
4473 num_get
* num_get_wchar_use_facet(const locale
*loc
)
4475 static num_get
*obj
= NULL
;
4478 const locale_facet
*fac
;
4480 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
4481 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_wchar_id
));
4483 _Lockit_dtor(&lock
);
4484 return (num_get
*)fac
;
4488 _Lockit_dtor(&lock
);
4492 num_get_wchar__Getcat(&fac
, loc
);
4493 obj
= (num_get
*)fac
;
4494 locale_facet__Incref(&obj
->facet
);
4495 locale_facet_register(&obj
->facet
);
4496 _Lockit_dtor(&lock
);
4501 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4502 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4503 static MSVCP_size_t
num_get_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
4505 if(facet
&& !*facet
) {
4506 num_get_wchar__Getcat(facet
, loc
);
4507 (*(locale_facet
**)facet
)->vtable
= &MSVCP_num_get_short_vtable
;
4513 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
4514 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
4515 MSVCP_size_t __cdecl
num_get_short__Getcat_old(const locale_facet
**facet
)
4517 return num_get_short__Getcat(facet
, locale_classic());
4520 num_get
* num_get_short_use_facet(const locale
*loc
)
4522 static num_get
*obj
= NULL
;
4525 const locale_facet
*fac
;
4527 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
4528 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_short_id
));
4530 _Lockit_dtor(&lock
);
4531 return (num_get
*)fac
;
4535 _Lockit_dtor(&lock
);
4539 num_get_short__Getcat(&fac
, loc
);
4540 obj
= (num_get
*)fac
;
4541 locale_facet__Incref(&obj
->facet
);
4542 locale_facet_register(&obj
->facet
);
4543 _Lockit_dtor(&lock
);
4548 static inline wchar_t mb_to_wc(char ch
, const _Cvtvec
*cvt
)
4553 return _Mbrtowc(&ret
, &ch
, 1, &state
, cvt
) == 1 ? ret
: 0;
4556 static int num_get__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
4557 istreambuf_iterator_wchar
*last
, const locale
*loc
, numpunct_wchar
*numpunct
)
4559 basic_string_char grouping_bstr
;
4560 basic_string_char groups_found
;
4561 int i
, groups_no
= 0, cur_group
= 0, exp
= 0;
4562 char *dest_beg
= dest
, *num_end
= dest
+25, *exp_end
= dest
+31;
4563 wchar_t sep
, digits
[11], *digits_pos
;
4564 const char *grouping
, *groups
;
4565 BOOL error
= FALSE
, got_digit
= FALSE
, got_nonzero
= FALSE
;
4567 TRACE("(%p %p %p %p)\n", dest
, first
, last
, loc
);
4570 digits
[i
] = mb_to_wc('0'+i
, &this->cvt
);
4573 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
4574 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
4575 sep
= grouping
[0] ? numpunct_wchar_thousands_sep(numpunct
) : 0;
4578 MSVCP_basic_string_char_ctor(&groups_found
);
4580 istreambuf_iterator_wchar_val(first
);
4582 if(first
->strbuf
&& first
->val
==mb_to_wc('-', &this->cvt
)) {
4584 istreambuf_iterator_wchar_inc(first
);
4585 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', &this->cvt
)) {
4587 istreambuf_iterator_wchar_inc(first
);
4590 /* read possibly grouped numbers before decimal */
4591 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
4592 if(!(digits_pos
= wcschr(digits
, first
->val
))) {
4593 if(sep
&& first
->val
==sep
) {
4594 if(!groups_no
) break; /* empty group - stop parsing */
4595 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
4602 got_digit
= TRUE
; /* found a digit, zero or non-zero */
4603 /* write digit to dest if not a leading zero (to not waste dest buffer) */
4604 if(!got_nonzero
&& first
->val
== digits
[0])
4611 *dest
++ = '0'+digits_pos
-digits
;
4613 exp
++; /* too many digits, just multiply by 10 */
4614 if(sep
&& groups_no
<CHAR_MAX
)
4619 /* if all leading zeroes, we didn't write anything so put a zero we check for a decimal */
4620 if(got_digit
&& !got_nonzero
)
4623 /* get decimal, if any */
4624 if(first
->strbuf
&& first
->val
==numpunct_wchar_decimal_point(numpunct
)) {
4626 *dest
++ = *localeconv()->decimal_point
;
4627 istreambuf_iterator_wchar_inc(first
);
4630 /* read non-grouped after decimal */
4631 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
4632 if(!(digits_pos
= wcschr(digits
, first
->val
)))
4634 else if(dest
<num_end
) {
4636 *dest
++ = '0'+digits_pos
-digits
;
4640 /* read exponent, if any */
4641 if(first
->strbuf
&& (first
->val
==mb_to_wc('e', &this->cvt
) || first
->val
==mb_to_wc('E', &this->cvt
))) {
4643 istreambuf_iterator_wchar_inc(first
);
4645 if(first
->strbuf
&& first
->val
==mb_to_wc('-', &this->cvt
)) {
4647 istreambuf_iterator_wchar_inc(first
);
4648 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', &this->cvt
)) {
4650 istreambuf_iterator_wchar_inc(first
);
4653 got_digit
= got_nonzero
= FALSE
;
4655 /* skip any leading zeroes */
4656 for(; first
->strbuf
&& first
->val
==digits
[0]; istreambuf_iterator_wchar_inc(first
))
4659 for(; first
->strbuf
&& (digits_pos
= wcschr(digits
, first
->val
)); istreambuf_iterator_wchar_inc(first
)) {
4660 got_digit
= got_nonzero
= TRUE
; /* leading zeroes would have been skipped, so first digit is non-zero */
4663 *dest
++ = '0'+digits_pos
-digits
;
4666 /* if just found zeroes for exponent, use that */
4667 if(got_digit
&& !got_nonzero
)
4675 if(sep
&& groups_no
)
4676 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
4678 if(!cur_group
) /* no groups, skip loop */
4680 else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
])
4681 error
= TRUE
; /* trailing empty */
4683 for(; cur_group
>=0 && !error
; cur_group
--) {
4684 if(*grouping
== CHAR_MAX
) {
4688 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
4689 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
4692 }else if(grouping
[1]) {
4696 MSVCP_basic_string_char_dtor(&grouping_bstr
);
4698 MSVCP_basic_string_char_dtor(&groups_found
);
4708 /* ?_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 */
4709 /* ?_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 */
4710 int __cdecl
num_get_wchar__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
4711 istreambuf_iterator_wchar
*last
, const locale
*loc
)
4713 return num_get__Getffld(this, dest
, first
, last
, loc
, numpunct_wchar_use_facet(loc
));
4716 /* ?_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 */
4717 /* ?_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 */
4718 int __cdecl
num_get_short__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
4719 istreambuf_iterator_wchar
*last
, const locale
*loc
)
4721 return num_get__Getffld(this, dest
, first
, last
, loc
, numpunct_short_use_facet(loc
));
4724 static int num_get__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
4725 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
, numpunct_wchar
*numpunct
)
4727 wchar_t digits
[23], *digits_pos
, sep
;
4728 basic_string_char grouping_bstr
;
4729 basic_string_char groups_found
;
4730 int i
, basefield
, base
, groups_no
= 0, cur_group
= 0;
4731 char *dest_beg
= dest
, *dest_end
= dest
+24;
4732 const char *grouping
, *groups
;
4733 BOOL error
= TRUE
, dest_empty
= TRUE
, found_zero
= FALSE
;
4735 TRACE("(%p %p %p %04x %p)\n", dest
, first
, last
, fmtflags
, loc
);
4738 digits
[i
] = mb_to_wc('0'+i
, &this->cvt
);
4739 for(i
=0; i
<6; i
++) {
4740 digits
[10+i
] = mb_to_wc('a'+i
, &this->cvt
);
4741 digits
[16+i
] = mb_to_wc('A'+i
, &this->cvt
);
4744 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
4745 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
4746 sep
= grouping
[0] ? numpunct_wchar_thousands_sep(numpunct
) : '\0';
4748 basefield
= fmtflags
& FMTFLAG_basefield
;
4749 if(basefield
== FMTFLAG_oct
)
4751 else if(basefield
== FMTFLAG_hex
)
4752 base
= 22; /* equal to the size of digits buffer */
4758 istreambuf_iterator_wchar_val(first
);
4759 if(first
->strbuf
&& first
->val
==mb_to_wc('-', &this->cvt
)) {
4761 istreambuf_iterator_wchar_inc(first
);
4762 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', &this->cvt
)) {
4764 istreambuf_iterator_wchar_inc(first
);
4767 if(first
->strbuf
&& first
->val
==digits
[0]) {
4769 istreambuf_iterator_wchar_inc(first
);
4770 if(first
->strbuf
&& (first
->val
==mb_to_wc('x', &this->cvt
) || first
->val
==mb_to_wc('X', &this->cvt
))) {
4771 if(!base
|| base
== 22) {
4773 istreambuf_iterator_wchar_inc(first
);
4783 if(!base
) base
= 10;
4788 MSVCP_basic_string_char_ctor(&groups_found
);
4789 if(found_zero
) ++groups_no
;
4792 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
4793 if(!(digits_pos
= wcschr(digits
, first
->val
))) {
4794 if(sep
&& first
->val
==sep
) {
4795 if(!groups_no
) break; /* empty group - stop parsing */
4796 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
4804 if(dest_empty
&& first
->val
== digits
[0]) {
4810 /* skip digits that can't be copied to dest buffer, other
4811 * functions are responsible for detecting overflows */
4813 *dest
++ = (digits_pos
-digits
<10 ? '0'+digits_pos
-digits
:
4814 (digits_pos
-digits
<16 ? 'a'+digits_pos
-digits
-10 :
4815 'A'+digits_pos
-digits
-16));
4816 if(sep
&& groups_no
<CHAR_MAX
)
4821 if(sep
&& groups_no
)
4822 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
4824 if(!cur_group
) { /* no groups, skip loop */
4826 }else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
]) {
4827 error
= TRUE
; /* trailing empty */
4831 for(; cur_group
>=0 && !error
; cur_group
--) {
4832 if(*grouping
== CHAR_MAX
) {
4836 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
4837 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
4840 }else if(grouping
[1]) {
4845 MSVCP_basic_string_char_dtor(&grouping_bstr
);
4847 MSVCP_basic_string_char_dtor(&groups_found
);
4854 }else if(dest_empty
)
4858 return (base
==22 ? 16 : base
);
4861 /* ?_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 */
4862 /* ?_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 */
4863 int __cdecl
num_get_wchar__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
4864 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
)
4866 return num_get__Getifld(this, dest
, first
, last
,
4867 fmtflags
, loc
, numpunct_wchar_use_facet(loc
));
4870 /* ?_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 */
4871 /* ?_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 */
4872 int __cdecl
num_get_short__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
4873 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
)
4875 return num_get__Getifld(this, dest
, first
, last
,
4876 fmtflags
, loc
, numpunct_short_use_facet(loc
));
4879 static istreambuf_iterator_wchar
* num_get_do_get_void(const num_get
*this,
4880 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
4881 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
4882 void **pval
, numpunct_wchar
*numpunct
)
4888 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4890 v
= _Stoullx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
4891 &last
, FMTFLAG_hex
, base
->loc
, numpunct
), &err
);
4892 if(v
!=(unsigned __int64
)((INT_PTR
)v
))
4893 *state
|= IOSTATE_failbit
;
4894 else if(end
!=tmp
&& !err
)
4895 *pval
= (void*)((INT_PTR
)v
);
4897 *state
|= IOSTATE_failbit
;
4900 *state
|= IOSTATE_eofbit
;
4906 /* ?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 */
4907 /* ?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 */
4908 #define call_num_get_wchar_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 4, istreambuf_iterator_wchar*, \
4909 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, void**), \
4910 (this, ret, first, last, base, state, pval))
4911 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_void
,36)
4912 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4913 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
4915 return num_get_do_get_void(this, ret
, first
, last
, base
,
4916 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
4919 /* ?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 */
4920 /* ?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 */
4921 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_void
,36)
4922 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4923 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
4925 return num_get_do_get_void(this, ret
, first
, last
, base
,
4926 state
, pval
, numpunct_short_use_facet(base
->loc
));
4929 /* ?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 */
4930 /* ?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 */
4931 /* ?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 */
4932 /* ?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 */
4933 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_void
,36)
4934 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4935 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
4937 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4938 return call_num_get_wchar_do_get_void(this, ret
, first
, last
, base
, state
, pval
);
4941 static istreambuf_iterator_wchar
* num_get_do_get_double(const num_get
*this,
4942 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
4943 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
4944 double *pval
, numpunct_wchar
*numpunct
)
4950 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
4952 v
= _Stodx(tmp
, &end
, num_get__Getffld(this, tmp
, &first
, &last
, base
->loc
, numpunct
), &err
);
4953 if(end
!=tmp
&& !err
)
4956 *state
|= IOSTATE_failbit
;
4959 *state
|= IOSTATE_eofbit
;
4965 /* ?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 */
4966 /* ?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 */
4967 /* ?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 */
4968 /* ?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 */
4969 #define call_num_get_wchar_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_wchar*, \
4970 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
4971 (this, ret, first, last, base, state, pval))
4972 #define call_num_get_wchar_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_wchar*, \
4973 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
4974 (this, ret, first, last, base, state, pval))
4975 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_double
,36)
4976 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4977 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
4979 return num_get_do_get_double(this, ret
, first
, last
, base
,
4980 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
4983 /* ?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 */
4984 /* ?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 */
4985 /* ?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 */
4986 /* ?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 */
4987 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_double
,36)
4988 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
4989 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
4991 return num_get_do_get_double(this, ret
, first
, last
, base
,
4992 state
, pval
, numpunct_short_use_facet(base
->loc
));
4995 /* ?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 */
4996 /* ?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 */
4997 /* ?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 */
4998 /* ?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 */
4999 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ldouble
,36)
5000 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ldouble(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5001 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
5003 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5004 return call_num_get_wchar_do_get_ldouble(this, ret
, first
, last
, base
, state
, pval
);
5007 /* ?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 */
5008 /* ?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 */
5009 /* ?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 */
5010 /* ?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 */
5011 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_double
,36)
5012 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5013 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
5015 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5016 return call_num_get_wchar_do_get_double(this, ret
, first
, last
, base
, state
, pval
);
5019 static istreambuf_iterator_wchar
* num_get_do_get_float(const num_get
*this,
5020 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5021 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5022 float *pval
, numpunct_wchar
*numpunct
)
5028 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5030 v
= _Stofx(tmp
, &end
, num_get__Getffld(this, tmp
, &first
,
5031 &last
, base
->loc
, numpunct
), &err
);
5032 if(end
!=tmp
&& !err
)
5035 *state
|= IOSTATE_failbit
;
5038 *state
|= IOSTATE_eofbit
;
5044 /* ?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 */
5045 /* ?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 */
5046 #define call_num_get_wchar_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_wchar*, \
5047 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, float*), \
5048 (this, ret, first, last, base, state, pval))
5049 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_float
,36)
5050 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5051 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
5053 return num_get_do_get_float(this, ret
, first
, last
, base
,
5054 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
5057 /* ?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 */
5058 /* ?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 */
5059 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_float
,36)
5060 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5061 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
5063 return num_get_do_get_float(this, ret
, first
, last
, base
,
5064 state
, pval
, numpunct_short_use_facet(base
->loc
));
5067 /* ?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 */
5068 /* ?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 */
5069 /* ?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 */
5070 /* ?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 */
5071 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_float
,36)
5072 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5073 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
5075 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5076 return call_num_get_wchar_do_get_float(this, ret
, first
, last
, base
, state
, pval
);
5079 static istreambuf_iterator_wchar
* num_get_do_get_uint64(const num_get
*this,
5080 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5081 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5082 ULONGLONG
*pval
, numpunct_wchar
*numpunct
)
5088 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5090 v
= _Stoullx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5091 &last
, base
->fmtfl
, base
->loc
, numpunct
), &err
);
5092 if(end
!=tmp
&& !err
)
5095 *state
|= IOSTATE_failbit
;
5098 *state
|= IOSTATE_eofbit
;
5104 /* ?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 */
5105 /* ?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 */
5106 #define call_num_get_wchar_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_wchar*, \
5107 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONGLONG*), \
5108 (this, ret, first, last, base, state, pval))
5109 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_uint64
,36)
5110 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5111 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
5113 return num_get_do_get_uint64(this, ret
, first
, last
, base
,
5114 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
5117 /* ?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 */
5118 /* ?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 */
5119 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_uint64
,36)
5120 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5121 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
5123 return num_get_do_get_uint64(this, ret
, first
, last
, base
,
5124 state
, pval
, numpunct_short_use_facet(base
->loc
));
5127 /* ?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 */
5128 /* ?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 */
5129 /* ?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 */
5130 /* ?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 */
5131 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_uint64
,36)
5132 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5133 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
5135 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5136 return call_num_get_wchar_do_get_uint64(this, ret
, first
, last
, base
, state
, pval
);
5139 static istreambuf_iterator_wchar
* num_get_do_get_int64(const num_get
*this,
5140 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5141 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5142 LONGLONG
*pval
, numpunct_wchar
*numpunct
)
5148 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5150 v
= _Stollx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5151 &last
, base
->fmtfl
, base
->loc
, numpunct
), &err
);
5152 if(end
!=tmp
&& !err
)
5155 *state
|= IOSTATE_failbit
;
5158 *state
|= IOSTATE_eofbit
;
5164 /* ?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 */
5165 /* ?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 */
5166 #define call_num_get_wchar_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_wchar*, \
5167 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONGLONG*), \
5168 (this, ret, first, last, base, state, pval))
5169 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_int64
,36)
5170 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5171 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
5173 return num_get_do_get_int64(this, ret
, first
, last
, base
,
5174 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
5177 /* ?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 */
5178 /* ?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 */
5179 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_int64
,36)
5180 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5181 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
5183 return num_get_do_get_int64(this, ret
, first
, last
, base
,
5184 state
, pval
, numpunct_short_use_facet(base
->loc
));
5187 /* ?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 */
5188 /* ?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 */
5189 /* ?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 */
5190 /* ?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 */
5191 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_int64
,36)
5192 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5193 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
5195 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5196 return call_num_get_wchar_do_get_int64(this, ret
, first
, last
, base
, state
, pval
);
5199 static istreambuf_iterator_wchar
* num_get_do_get_ulong(const num_get
*this,
5200 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5201 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5202 ULONG
*pval
, numpunct_wchar
*numpunct
)
5208 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5210 v
= _Stoulx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5211 &last
, base
->fmtfl
, base
->loc
, numpunct
), &err
);
5212 if(end
!=tmp
&& !err
)
5215 *state
|= IOSTATE_failbit
;
5218 *state
|= IOSTATE_eofbit
;
5224 /* ?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 */
5225 /* ?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 */
5226 #define call_num_get_wchar_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_wchar*, \
5227 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONG*), \
5228 (this, ret, first, last, base, state, pval))
5229 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_ulong
,36)
5230 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5231 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
5233 return num_get_do_get_ulong(this, ret
, first
, last
, base
,
5234 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
5237 /* ?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 */
5238 /* ?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 */
5239 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_ulong
,36)
5240 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5241 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
5243 return num_get_do_get_ulong(this, ret
, first
, last
, base
,
5244 state
, pval
, numpunct_short_use_facet(base
->loc
));
5247 /* ?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 */
5248 /* ?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 */
5249 /* ?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 */
5250 /* ?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 */
5251 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ulong
,36)
5252 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5253 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
5255 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5256 return call_num_get_wchar_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
5259 static istreambuf_iterator_wchar
* num_get_do_get_long(const num_get
*this,
5260 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5261 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5262 LONG
*pval
, numpunct_wchar
*numpunct
)
5268 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5270 v
= _Stolx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5271 &last
, base
->fmtfl
, base
->loc
, numpunct
), &err
);
5272 if(end
!=tmp
&& !err
)
5275 *state
|= IOSTATE_failbit
;
5278 *state
|= IOSTATE_eofbit
;
5284 /* ?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 */
5285 /* ?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 */
5286 #define call_num_get_wchar_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_wchar*, \
5287 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONG*), \
5288 (this, ret, first, last, base, state, pval))
5289 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_long
,36)
5290 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5291 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
5293 return num_get_do_get_long(this, ret
, first
, last
, base
,
5294 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
5297 /* ?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 */
5298 /* ?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 */
5299 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_long
,36)
5300 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5301 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
5303 return num_get_do_get_long(this, ret
, first
, last
, base
,
5304 state
, pval
, numpunct_short_use_facet(base
->loc
));
5307 /* ?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 */
5308 /* ?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 */
5309 /* ?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 */
5310 /* ?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 */
5311 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_long
,36)
5312 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5313 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
5315 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5316 return call_num_get_wchar_do_get_long(this, ret
, first
, last
, base
, state
, pval
);
5319 /* ?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 */
5320 /* ?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 */
5321 #define call_num_get_wchar_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_wchar*, \
5322 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned int*), \
5323 (this, ret, first, last, base, state, pval))
5324 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_uint
,36)
5325 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5326 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
5328 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5329 return num_get_wchar_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
5332 /* ?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 */
5333 /* ?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 */
5334 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_uint
,36)
5335 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5336 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
5338 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5339 return num_get_short_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
5342 /* ?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 */
5343 /* ?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 */
5344 /* ?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 */
5345 /* ?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 */
5346 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_uint
,36)
5347 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5348 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
5350 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5351 return call_num_get_wchar_do_get_uint(this, ret
, first
, last
, base
, state
, pval
);
5354 /* ?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 */
5355 /* ?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 */
5356 #define call_num_get_wchar_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_wchar*, \
5357 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned short*), \
5358 (this, ret, first, last, base, state, pval))
5359 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_ushort
,36)
5360 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5361 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
5364 char tmp
[25], *beg
, *end
;
5367 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5369 b
= num_get_wchar__Getifld(this, tmp
,
5370 &first
, &last
, base
->fmtfl
, base
->loc
);
5371 beg
= tmp
+ (tmp
[0]=='-' ? 1 : 0);
5372 v
= _Stoulx(beg
, &end
, b
, &err
);
5374 if(v
!= (ULONG
)((unsigned short)v
))
5375 *state
|= IOSTATE_failbit
;
5376 else if(end
!=beg
&& !err
)
5377 *pval
= (tmp
[0]=='-' ? -((unsigned short)v
) : v
);
5379 *state
|= IOSTATE_failbit
;
5382 *state
|= IOSTATE_eofbit
;
5388 /* ?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 */
5389 /* ?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 */
5390 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_ushort
,36)
5391 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5392 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
5394 FIXME("(%p %p %p %p %p) stub\n", this, ret
, base
, state
, pval
);
5398 /* ?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 */
5399 /* ?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 */
5400 /* ?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@ */
5401 /* ?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 */
5402 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ushort
,36)
5403 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5404 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
5406 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5407 return call_num_get_wchar_do_get_ushort(this, ret
, first
, last
, base
, state
, pval
);
5410 static istreambuf_iterator_wchar
* num_get_do_get_bool(const num_get
*this,
5411 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5412 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5413 MSVCP_bool
*pval
, numpunct_wchar
*numpunct
)
5415 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5417 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
5418 basic_string_wchar false_bstr
, true_bstr
;
5419 const wchar_t *pfalse
, *ptrue
;
5421 numpunct_wchar_falsename(numpunct
, &false_bstr
);
5422 numpunct_wchar_truename(numpunct
, &true_bstr
);
5423 pfalse
= MSVCP_basic_string_wchar_c_str(&false_bstr
);
5424 ptrue
= MSVCP_basic_string_wchar_c_str(&true_bstr
);
5426 for(istreambuf_iterator_wchar_val(&first
); first
.strbuf
;
5427 istreambuf_iterator_wchar_inc(&first
)) {
5428 if(pfalse
&& *pfalse
&& first
.val
!=*pfalse
)
5430 if(ptrue
&& *ptrue
&& first
.val
!=*ptrue
)
5433 if(pfalse
&& *pfalse
&& ptrue
&& !*ptrue
)
5435 if(ptrue
&& *ptrue
&& pfalse
&& !*pfalse
)
5443 if((!pfalse
|| !*pfalse
) && (!ptrue
|| !*ptrue
))
5452 *state
|= IOSTATE_failbit
;
5454 MSVCP_basic_string_wchar_dtor(&false_bstr
);
5455 MSVCP_basic_string_wchar_dtor(&true_bstr
);
5459 LONG v
= _Stolx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5460 &last
, base
->fmtfl
, base
->loc
, numpunct
), &err
);
5462 if(end
!=tmp
&& err
==0 && (v
==0 || v
==1))
5465 *state
|= IOSTATE_failbit
;
5469 *state
|= IOSTATE_eofbit
;
5470 memcpy(ret
, &first
, sizeof(first
));
5474 /* ?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 */
5475 /* ?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 */
5476 #define call_num_get_wchar_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_wchar*, \
5477 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, MSVCP_bool*), \
5478 (this, ret, first, last, base, state, pval))
5479 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_bool
,36)
5480 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5481 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, MSVCP_bool
*pval
)
5483 return num_get_do_get_bool(this, ret
, first
, last
, base
,
5484 state
, pval
, numpunct_wchar_use_facet(base
->loc
));
5487 /* ?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 */
5488 /* ?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 */
5489 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_bool
,36)
5490 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5491 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, MSVCP_bool
*pval
)
5493 return num_get_do_get_bool(this, ret
, first
, last
, base
,
5494 state
, pval
, numpunct_short_use_facet(base
->loc
));
5497 /* ?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 */
5498 /* ?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 */
5499 /* ?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 */
5500 /* ?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 */
5501 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_bool
,36)
5502 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5503 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, MSVCP_bool
*pval
)
5505 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5506 return call_num_get_wchar_do_get_bool(this, ret
, first
, last
, base
, state
, pval
);
5509 /* ?id@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
5510 locale_id num_get_char_id
= {0};
5512 /* ??_7?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
5513 extern const vtable_ptr MSVCP_num_get_char_vtable
;
5515 /* ?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
5516 /* ?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
5517 DEFINE_THISCALL_WRAPPER(num_get_char__Init
, 8)
5518 void __thiscall
num_get_char__Init(num_get
*this, const _Locinfo
*locinfo
)
5520 TRACE("(%p %p)\n", this, locinfo
);
5521 _Locinfo__Getcvt(locinfo
, &this->cvt
);
5524 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
5525 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
5526 DEFINE_THISCALL_WRAPPER(num_get_char_ctor_locinfo
, 12)
5527 num_get
* __thiscall
num_get_char_ctor_locinfo(num_get
*this,
5528 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
5530 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
5532 locale_facet_ctor_refs(&this->facet
, refs
);
5533 this->facet
.vtable
= &MSVCP_num_get_char_vtable
;
5535 num_get_char__Init(this, locinfo
);
5539 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
5540 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
5541 DEFINE_THISCALL_WRAPPER(num_get_char_ctor_refs
, 8)
5542 num_get
* __thiscall
num_get_char_ctor_refs(num_get
*this, MSVCP_size_t refs
)
5546 TRACE("(%p %lu)\n", this, refs
);
5548 _Locinfo_ctor(&locinfo
);
5549 num_get_char_ctor_locinfo(this, &locinfo
, refs
);
5550 _Locinfo_dtor(&locinfo
);
5554 /* ??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
5555 /* ??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
5556 DEFINE_THISCALL_WRAPPER(num_get_char_ctor
, 4)
5557 num_get
* __thiscall
num_get_char_ctor(num_get
*this)
5559 return num_get_char_ctor_refs(this, 0);
5562 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
5563 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
5564 DEFINE_THISCALL_WRAPPER(num_get_char_dtor
, 4)
5565 void __thiscall
num_get_char_dtor(num_get
*this)
5567 TRACE("(%p)\n", this);
5568 locale_facet_dtor(&this->facet
);
5571 DEFINE_THISCALL_WRAPPER(num_get_char_vector_dtor
, 8)
5572 num_get
* __thiscall
num_get_char_vector_dtor(num_get
*this, unsigned int flags
)
5574 TRACE("(%p %x)\n", this, flags
);
5576 /* we have an array, with the number of elements stored before the first object */
5577 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
5579 for(i
=*ptr
-1; i
>=0; i
--)
5580 num_get_char_dtor(this+i
);
5581 MSVCRT_operator_delete(ptr
);
5583 num_get_char_dtor(this);
5585 MSVCRT_operator_delete(this);
5591 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
5592 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
5593 static MSVCP_size_t
num_get_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
5595 TRACE("(%p %p)\n", facet
, loc
);
5597 if(facet
&& !*facet
) {
5600 *facet
= MSVCRT_operator_new(sizeof(num_get
));
5602 ERR("Out of memory\n");
5603 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
5607 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
5608 num_get_char_ctor_locinfo((num_get
*)*facet
, &locinfo
, 0);
5609 _Locinfo_dtor(&locinfo
);
5615 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
5616 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
5617 MSVCP_size_t __cdecl
num_get_char__Getcat_old(const locale_facet
**facet
)
5619 return num_get_char__Getcat(facet
, locale_classic());
5622 num_get
* num_get_char_use_facet(const locale
*loc
)
5624 static num_get
*obj
= NULL
;
5627 const locale_facet
*fac
;
5629 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
5630 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_char_id
));
5632 _Lockit_dtor(&lock
);
5633 return (num_get
*)fac
;
5637 _Lockit_dtor(&lock
);
5641 num_get_char__Getcat(&fac
, loc
);
5642 obj
= (num_get
*)fac
;
5643 locale_facet__Incref(&obj
->facet
);
5644 locale_facet_register(&obj
->facet
);
5645 _Lockit_dtor(&lock
);
5650 /* ?_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 */
5651 /* ?_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 */
5652 /* Copies number to dest buffer, validates grouping and skips separators.
5653 * Updates first so it points past the number, all digits are skipped.
5654 * Returns how exponent needs to changed.
5655 * Size of dest buffer is not specified, assuming it's not smaller than 32:
5656 * strlen(+0.e+) + 22(digits) + 4(expontent) + 1(nullbyte)
5658 int __cdecl
num_get_char__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_char
*first
,
5659 istreambuf_iterator_char
*last
, const locale
*loc
)
5661 numpunct_char
*numpunct
= numpunct_char_use_facet(loc
);
5662 basic_string_char grouping_bstr
;
5663 basic_string_char groups_found
;
5664 int groups_no
= 0, cur_group
= 0, exp
= 0;
5665 char *dest_beg
= dest
, *num_end
= dest
+25, *exp_end
= dest
+31, sep
;
5666 const char *grouping
, *groups
;
5667 BOOL error
= FALSE
, got_digit
= FALSE
, got_nonzero
= FALSE
;
5669 TRACE("(%p %p %p %p)\n", dest
, first
, last
, loc
);
5671 numpunct_char_grouping(numpunct
, &grouping_bstr
);
5672 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
5673 sep
= grouping
[0] ? numpunct_char_thousands_sep(numpunct
) : '\0';
5676 MSVCP_basic_string_char_ctor(&groups_found
);
5678 istreambuf_iterator_char_val(first
);
5680 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
5681 *dest
++ = first
->val
;
5682 istreambuf_iterator_char_inc(first
);
5685 /* read possibly grouped numbers before decimal */
5686 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
5687 if(first
->val
<'0' || first
->val
>'9') {
5688 if(sep
&& first
->val
==sep
) {
5689 if(!groups_no
) break; /* empty group - stop parsing */
5690 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5697 got_digit
= TRUE
; /* found a digit, zero or non-zero */
5698 /* write digit to dest if not a leading zero (to not waste dest buffer) */
5699 if(!got_nonzero
&& first
->val
== '0')
5706 *dest
++ = first
->val
;
5708 exp
++; /* too many digits, just multiply by 10 */
5709 if(sep
&& groups_no
<CHAR_MAX
)
5714 /* if all leading zeroes, we didn't write anything so put a zero we check for a decimal */
5715 if(got_digit
&& !got_nonzero
)
5718 /* get decimal, if any */
5719 if(first
->strbuf
&& first
->val
==numpunct_char_decimal_point(numpunct
)) {
5721 *dest
++ = *localeconv()->decimal_point
;
5722 istreambuf_iterator_char_inc(first
);
5725 /* read non-grouped after decimal */
5726 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
5727 if(first
->val
<'0' || first
->val
>'9')
5729 else if(dest
<num_end
) {
5731 *dest
++ = first
->val
;
5735 /* read exponent, if any */
5736 if(first
->strbuf
&& (first
->val
=='e' || first
->val
=='E')) {
5737 *dest
++ = first
->val
;
5738 istreambuf_iterator_char_inc(first
);
5740 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
5741 *dest
++ = first
->val
;
5742 istreambuf_iterator_char_inc(first
);
5745 got_digit
= got_nonzero
= FALSE
;
5747 /* skip any leading zeroes */
5748 for(; first
->strbuf
&& first
->val
=='0'; istreambuf_iterator_char_inc(first
))
5751 for(; first
->strbuf
&& first
->val
>='0' && first
->val
<='9'; istreambuf_iterator_char_inc(first
)) {
5752 got_digit
= got_nonzero
= TRUE
; /* leading zeroes would have been skipped, so first digit is non-zero */
5755 *dest
++ = first
->val
;
5758 /* if just found zeroes for exponent, use that */
5759 if(got_digit
&& !got_nonzero
)
5767 if(sep
&& groups_no
)
5768 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5770 if(!cur_group
) /* no groups, skip loop */
5772 else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
])
5773 error
= TRUE
; /* trailing empty */
5775 for(; cur_group
>=0 && !error
; cur_group
--) {
5776 if(*grouping
== CHAR_MAX
) {
5780 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
5781 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
5784 }else if(grouping
[1]) {
5788 MSVCP_basic_string_char_dtor(&grouping_bstr
);
5790 MSVCP_basic_string_char_dtor(&groups_found
);
5800 /* ?_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 */
5801 /* ?_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 */
5802 /* Copies number to dest buffer, validates grouping and skips separators.
5803 * Updates first so it points past the number, all digits are skipped.
5804 * Returns number base (8, 10 or 16).
5805 * Size of dest buffer is not specified, assuming it's not smaller than 25:
5806 * 22(8^22>2^64)+1(detect overflows)+1(sign)+1(nullbyte) = 25
5808 int __cdecl
num_get_char__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_char
*first
,
5809 istreambuf_iterator_char
*last
, int fmtflags
, const locale
*loc
)
5811 static const char digits
[] = "0123456789abcdefABCDEF";
5813 numpunct_char
*numpunct
= numpunct_char_use_facet(loc
);
5814 basic_string_char grouping_bstr
;
5815 basic_string_char groups_found
;
5816 int basefield
, base
, groups_no
= 0, cur_group
= 0;
5817 char *dest_beg
= dest
, *dest_end
= dest
+24, sep
;
5818 const char *grouping
, *groups
;
5819 BOOL error
= TRUE
, dest_empty
= TRUE
, found_zero
= FALSE
;
5821 TRACE("(%p %p %p %04x %p)\n", dest
, first
, last
, fmtflags
, loc
);
5823 numpunct_char_grouping(numpunct
, &grouping_bstr
);
5824 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
5825 sep
= grouping
[0] ? numpunct_char_thousands_sep(numpunct
) : '\0';
5827 basefield
= fmtflags
& FMTFLAG_basefield
;
5828 if(basefield
== FMTFLAG_oct
)
5830 else if(basefield
== FMTFLAG_hex
)
5831 base
= 22; /* equal to the size of digits buffer */
5837 istreambuf_iterator_char_val(first
);
5838 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
5839 *dest
++ = first
->val
;
5840 istreambuf_iterator_char_inc(first
);
5843 if(first
->strbuf
&& first
->val
=='0') {
5845 istreambuf_iterator_char_inc(first
);
5846 if(first
->strbuf
&& (first
->val
=='x' || first
->val
=='X')) {
5847 if(!base
|| base
== 22) {
5849 istreambuf_iterator_char_inc(first
);
5859 if (!base
) base
= 10;
5864 MSVCP_basic_string_char_ctor(&groups_found
);
5865 if(found_zero
) ++groups_no
;
5868 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
5869 if(!memchr(digits
, first
->val
, base
)) {
5870 if(sep
&& first
->val
==sep
) {
5871 if(!groups_no
) break; /* empty group - stop parsing */
5872 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5880 if(dest_empty
&& first
->val
== '0')
5887 /* skip digits that can't be copied to dest buffer, other
5888 * functions are responsible for detecting overflows */
5890 *dest
++ = first
->val
;
5891 if(sep
&& groups_no
<CHAR_MAX
)
5896 if(sep
&& groups_no
)
5897 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5899 if(!cur_group
) { /* no groups, skip loop */
5901 }else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
]) {
5902 error
= TRUE
; /* trailing empty */
5906 for(; cur_group
>=0 && !error
; cur_group
--) {
5907 if(*grouping
== CHAR_MAX
) {
5911 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
5912 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
5915 }else if(grouping
[1]) {
5920 MSVCP_basic_string_char_dtor(&grouping_bstr
);
5922 MSVCP_basic_string_char_dtor(&groups_found
);
5929 }else if(dest_empty
)
5933 return (base
==22 ? 16 : base
);
5936 /* ?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 */
5937 /* ?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 */
5938 #define call_num_get_char_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 4, istreambuf_iterator_char*, \
5939 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, void**), \
5940 (this, ret, first, last, base, state, pval))
5941 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_void
,36)
5942 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_void(const num_get
*this, istreambuf_iterator_char
*ret
,
5943 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, void **pval
)
5949 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5951 v
= _Stoullx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
5952 &first
, &last
, FMTFLAG_hex
, base
->loc
), &err
);
5953 if(v
!=(unsigned __int64
)((INT_PTR
)v
))
5954 *state
|= IOSTATE_failbit
;
5955 else if(end
!=tmp
&& !err
)
5956 *pval
= (void*)((INT_PTR
)v
);
5958 *state
|= IOSTATE_failbit
;
5961 *state
|= IOSTATE_eofbit
;
5967 /* ?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 */
5968 /* ?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 */
5969 DEFINE_THISCALL_WRAPPER(num_get_char_get_void
,36)
5970 istreambuf_iterator_char
*__thiscall
num_get_char_get_void(const num_get
*this, istreambuf_iterator_char
*ret
,
5971 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, void **pval
)
5973 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5974 return call_num_get_char_do_get_void(this, ret
, first
, last
, base
, state
, pval
);
5977 /* ?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 */
5978 /* ?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 */
5979 /* ?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 */
5980 /* ?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 */
5981 #define call_num_get_char_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_char*, \
5982 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
5983 (this, ret, first, last, base, state, pval))
5984 #define call_num_get_char_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_char*, \
5985 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
5986 (this, ret, first, last, base, state, pval))
5987 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_double
,36)
5988 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_double(const num_get
*this, istreambuf_iterator_char
*ret
,
5989 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
5995 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5997 v
= _Stodx(tmp
, &end
, num_get_char__Getffld(this, tmp
, &first
, &last
, base
->loc
), &err
);
5998 if(end
!=tmp
&& !err
)
6001 *state
|= IOSTATE_failbit
;
6004 *state
|= IOSTATE_eofbit
;
6010 /* ?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 */
6011 /* ?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 */
6012 DEFINE_THISCALL_WRAPPER(num_get_char_get_ldouble
,36)
6013 istreambuf_iterator_char
*__thiscall
num_get_char_get_ldouble(const num_get
*this, istreambuf_iterator_char
*ret
,
6014 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
6016 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6017 return call_num_get_char_do_get_ldouble(this, ret
, first
, last
, base
, state
, pval
);
6020 /* ?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 */
6021 /* ?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 */
6022 DEFINE_THISCALL_WRAPPER(num_get_char_get_double
,36)
6023 istreambuf_iterator_char
*__thiscall
num_get_char_get_double(const num_get
*this, istreambuf_iterator_char
*ret
,
6024 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
6026 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6027 return call_num_get_char_do_get_double(this, ret
, first
, last
, base
, state
, pval
);
6030 /* ?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 */
6031 /* ?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 */
6032 #define call_num_get_char_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_char*, \
6033 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, float*), \
6034 (this, ret, first, last, base, state, pval))
6035 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_float
,36)
6036 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_float(const num_get
*this, istreambuf_iterator_char
*ret
,
6037 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, float *pval
)
6043 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6045 v
= _Stofx(tmp
, &end
, num_get_char__Getffld(this, tmp
, &first
, &last
, base
->loc
), &err
);
6046 if(end
!=tmp
&& !err
)
6049 *state
|= IOSTATE_failbit
;
6052 *state
|= IOSTATE_eofbit
;
6058 /* ?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 */
6059 /* ?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 */
6060 DEFINE_THISCALL_WRAPPER(num_get_char_get_float
,36)
6061 istreambuf_iterator_char
*__thiscall
num_get_char_get_float(const num_get
*this, istreambuf_iterator_char
*ret
,
6062 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, float *pval
)
6064 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6065 return call_num_get_char_do_get_float(this, ret
, first
, last
, base
, state
, pval
);
6068 /* ?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 */
6069 /* ?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 */
6070 #define call_num_get_char_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_char*, \
6071 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONGLONG*), \
6072 (this, ret, first, last, base, state, pval))
6073 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_uint64
,36)
6074 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_uint64(const num_get
*this, istreambuf_iterator_char
*ret
,
6075 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
6081 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6083 v
= _Stoullx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6084 &first
, &last
, base
->fmtfl
, base
->loc
), &err
);
6085 if(end
!=tmp
&& !err
)
6088 *state
|= IOSTATE_failbit
;
6091 *state
|= IOSTATE_eofbit
;
6097 /* ?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 */
6098 /* ?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 */
6099 DEFINE_THISCALL_WRAPPER(num_get_char_get_uint64
,36)
6100 istreambuf_iterator_char
*__thiscall
num_get_char_get_uint64(const num_get
*this, istreambuf_iterator_char
*ret
,
6101 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
6103 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6104 return call_num_get_char_do_get_uint64(this, ret
, first
, last
, base
, state
, pval
);
6107 /* ?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 */
6108 /* ?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 */
6109 #define call_num_get_char_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_char*, \
6110 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONGLONG*), \
6111 (this, ret, first, last, base, state, pval))
6112 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_int64
,36)
6113 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_int64(const num_get
*this, istreambuf_iterator_char
*ret
,
6114 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
6120 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6122 v
= _Stollx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6123 &first
, &last
, base
->fmtfl
, base
->loc
), &err
);
6124 if(end
!=tmp
&& !err
)
6127 *state
|= IOSTATE_failbit
;
6130 *state
|= IOSTATE_eofbit
;
6136 /* ?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 */
6137 /* ?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 */
6138 DEFINE_THISCALL_WRAPPER(num_get_char_get_int64
,36)
6139 istreambuf_iterator_char
*__thiscall
num_get_char_get_int64(const num_get
*this, istreambuf_iterator_char
*ret
,
6140 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
6142 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6143 return call_num_get_char_do_get_int64(this, ret
, first
, last
, base
, state
, pval
);
6146 /* ?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 */
6147 /* ?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 */
6148 #define call_num_get_char_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_char*, \
6149 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONG*), \
6150 (this, ret, first, last, base, state, pval))
6151 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_ulong
,36)
6152 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_ulong(const num_get
*this, istreambuf_iterator_char
*ret
,
6153 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONG
*pval
)
6159 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6161 v
= _Stoulx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6162 &first
, &last
, base
->fmtfl
, base
->loc
), &err
);
6163 if(end
!=tmp
&& !err
)
6166 *state
|= IOSTATE_failbit
;
6169 *state
|= IOSTATE_eofbit
;
6175 /* ?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 */
6176 /* ?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 */
6177 DEFINE_THISCALL_WRAPPER(num_get_char_get_ulong
,36)
6178 istreambuf_iterator_char
*__thiscall
num_get_char_get_ulong(const num_get
*this, istreambuf_iterator_char
*ret
,
6179 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONG
*pval
)
6181 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6182 return call_num_get_char_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
6185 /* ?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 */
6186 /* ?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 */
6187 #define call_num_get_char_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_char*, \
6188 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONG*), \
6189 (this, ret, first, last, base, state, pval))
6190 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_long
,36)
6191 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_long(const num_get
*this, istreambuf_iterator_char
*ret
,
6192 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONG
*pval
)
6198 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6200 v
= _Stolx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6201 &first
, &last
, base
->fmtfl
, base
->loc
), &err
);
6202 if(end
!=tmp
&& !err
)
6205 *state
|= IOSTATE_failbit
;
6208 *state
|= IOSTATE_eofbit
;
6214 /* ?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 */
6215 /* ?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 */
6216 DEFINE_THISCALL_WRAPPER(num_get_char_get_long
,36)
6217 istreambuf_iterator_char
*__thiscall
num_get_char_get_long(const num_get
*this, istreambuf_iterator_char
*ret
,
6218 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONG
*pval
)
6220 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6221 return call_num_get_char_do_get_long(this, ret
, first
, last
, base
, state
, pval
);
6224 /* ?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 */
6225 /* ?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 */
6226 #define call_num_get_char_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_char*, \
6227 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned int*), \
6228 (this, ret, first, last, base, state, pval))
6229 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_uint
,36)
6230 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_uint(const num_get
*this, istreambuf_iterator_char
*ret
,
6231 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned int *pval
)
6233 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6234 return num_get_char_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
6237 /* ?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 */
6238 /* ?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 */
6239 DEFINE_THISCALL_WRAPPER(num_get_char_get_uint
,36)
6240 istreambuf_iterator_char
*__thiscall
num_get_char_get_uint(const num_get
*this, istreambuf_iterator_char
*ret
,
6241 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned int *pval
)
6243 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6244 return call_num_get_char_do_get_uint(this, ret
, first
, last
, base
, state
, pval
);
6247 /* ?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 */
6248 /* ?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 */
6249 #define call_num_get_char_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_char*, \
6250 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned short*), \
6251 (this, ret, first, last, base, state, pval))
6252 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_ushort
,36)
6253 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_ushort(const num_get
*this, istreambuf_iterator_char
*ret
,
6254 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned short *pval
)
6257 char tmp
[25], *beg
, *end
;
6260 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6262 b
= num_get_char__Getifld(this, tmp
,
6263 &first
, &last
, base
->fmtfl
, base
->loc
);
6264 beg
= tmp
+ (tmp
[0]=='-' ? 1 : 0);
6265 v
= _Stoulx(beg
, &end
, b
, &err
);
6267 if(v
!= (ULONG
)((unsigned short)v
))
6268 *state
|= IOSTATE_failbit
;
6269 else if(end
!=beg
&& !err
)
6270 *pval
= (tmp
[0]=='-' ? -((unsigned short)v
) : v
);
6272 *state
|= IOSTATE_failbit
;
6275 *state
|= IOSTATE_eofbit
;
6281 /* ?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 */
6282 /* ?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 */
6283 DEFINE_THISCALL_WRAPPER(num_get_char_get_ushort
,36)
6284 istreambuf_iterator_char
*__thiscall
num_get_char_get_ushort(const num_get
*this, istreambuf_iterator_char
*ret
,
6285 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned short *pval
)
6287 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6288 return call_num_get_char_do_get_ushort(this, ret
, first
, last
, base
, state
, pval
);
6291 /* ?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 */
6292 /* ?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 */
6293 #define call_num_get_char_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_char*, \
6294 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, MSVCP_bool*), \
6295 (this, ret, first, last, base, state, pval))
6296 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_bool
,36)
6297 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_bool(const num_get
*this, istreambuf_iterator_char
*ret
,
6298 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, MSVCP_bool
*pval
)
6300 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6302 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
6303 numpunct_char
*numpunct
= numpunct_char_use_facet(base
->loc
);
6304 basic_string_char false_bstr
, true_bstr
;
6305 const char *pfalse
, *ptrue
;
6307 numpunct_char_falsename(numpunct
, &false_bstr
);
6308 numpunct_char_truename(numpunct
, &true_bstr
);
6309 pfalse
= MSVCP_basic_string_char_c_str(&false_bstr
);
6310 ptrue
= MSVCP_basic_string_char_c_str(&true_bstr
);
6312 for(istreambuf_iterator_char_val(&first
); first
.strbuf
;
6313 istreambuf_iterator_char_inc(&first
)) {
6314 if(pfalse
&& *pfalse
&& first
.val
!=*pfalse
)
6316 if(ptrue
&& *ptrue
&& first
.val
!=*ptrue
)
6319 if(pfalse
&& *pfalse
&& ptrue
&& !*ptrue
)
6321 if(ptrue
&& *ptrue
&& pfalse
&& !*pfalse
)
6329 if((!pfalse
|| !*pfalse
) && (!ptrue
|| !*ptrue
))
6338 *state
|= IOSTATE_failbit
;
6340 MSVCP_basic_string_char_dtor(&false_bstr
);
6341 MSVCP_basic_string_char_dtor(&true_bstr
);
6345 LONG v
= _Stolx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6346 &first
, &last
, base
->fmtfl
, base
->loc
), &err
);
6348 if(end
!=tmp
&& err
==0 && (v
==0 || v
==1))
6351 *state
|= IOSTATE_failbit
;
6355 *state
|= IOSTATE_eofbit
;
6356 memcpy(ret
, &first
, sizeof(first
));
6360 /* ?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 */
6361 /* ?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 */
6362 DEFINE_THISCALL_WRAPPER(num_get_char_get_bool
,36)
6363 istreambuf_iterator_char
*__thiscall
num_get_char_get_bool(const num_get
*this, istreambuf_iterator_char
*ret
,
6364 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, MSVCP_bool
*pval
)
6366 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6367 return call_num_get_char_do_get_bool(this, ret
, first
, last
, base
, state
, pval
);
6370 /* ?id@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
6371 locale_id num_put_char_id
= {0};
6373 /* num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
6374 extern const vtable_ptr MSVCP_num_put_char_vtable
;
6376 /* ?_Init@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
6377 /* ?_Init@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
6378 DEFINE_THISCALL_WRAPPER(num_put_char__Init
, 8)
6379 void __thiscall
num_put_char__Init(num_put
*this, const _Locinfo
*locinfo
)
6381 TRACE("(%p %p)\n", this, locinfo
);
6382 _Locinfo__Getcvt(locinfo
, &this->cvt
);
6385 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
6386 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
6387 DEFINE_THISCALL_WRAPPER(num_put_char_ctor_locinfo
, 12)
6388 num_put
* __thiscall
num_put_char_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
6390 TRACE("(%p %p %ld)\n", this, locinfo
, refs
);
6392 locale_facet_ctor_refs(&this->facet
, refs
);
6393 this->facet
.vtable
= &MSVCP_num_put_char_vtable
;
6395 num_put_char__Init(this, locinfo
);
6399 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
6400 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
6401 DEFINE_THISCALL_WRAPPER(num_put_char_ctor_refs
, 8)
6402 num_put
* __thiscall
num_put_char_ctor_refs(num_put
*this, MSVCP_size_t refs
)
6406 TRACE("(%p %lu)\n", this, refs
);
6408 _Locinfo_ctor(&locinfo
);
6409 num_put_char_ctor_locinfo(this, &locinfo
, refs
);
6410 _Locinfo_dtor(&locinfo
);
6414 /* ??_F?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
6415 /* ??_F?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
6416 DEFINE_THISCALL_WRAPPER(num_put_char_ctor
, 4)
6417 num_put
* __thiscall
num_put_char_ctor(num_put
*this)
6419 return num_put_char_ctor_refs(this, 0);
6422 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
6423 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
6424 DEFINE_THISCALL_WRAPPER(num_put_char_dtor
, 4)
6425 void __thiscall
num_put_char_dtor(num_put
*this)
6427 TRACE("(%p)\n", this);
6428 locale_facet_dtor(&this->facet
);
6431 DEFINE_THISCALL_WRAPPER(num_put_char_vector_dtor
, 8)
6432 num_put
* __thiscall
num_put_char_vector_dtor(num_put
*this, unsigned int flags
)
6434 TRACE("(%p %x)\n", this, flags
);
6436 /* we have an array, with the number of elements stored before the first object */
6437 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
6439 for(i
=*ptr
-1; i
>=0; i
--)
6440 num_put_char_dtor(this+i
);
6441 MSVCRT_operator_delete(ptr
);
6443 num_put_char_dtor(this);
6445 MSVCRT_operator_delete(this);
6451 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
6452 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
6453 static MSVCP_size_t
num_put_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
6455 TRACE("(%p %p)\n", facet
, loc
);
6457 if(facet
&& !*facet
) {
6460 *facet
= MSVCRT_operator_new(sizeof(num_put
));
6462 ERR("Out of memory\n");
6463 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
6467 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
6468 num_put_char_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
6469 _Locinfo_dtor(&locinfo
);
6475 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
6476 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
6477 MSVCP_size_t __cdecl
num_put_char__Getcat_old(const locale_facet
**facet
)
6479 return num_put_char__Getcat(facet
, locale_classic());
6482 num_put
* num_put_char_use_facet(const locale
*loc
)
6484 static num_put
*obj
= NULL
;
6487 const locale_facet
*fac
;
6489 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
6490 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_char_id
));
6492 _Lockit_dtor(&lock
);
6493 return (num_put
*)fac
;
6497 _Lockit_dtor(&lock
);
6501 num_put_char__Getcat(&fac
, loc
);
6502 obj
= (num_put
*)fac
;
6503 locale_facet__Incref(&obj
->facet
);
6504 locale_facet_register(&obj
->facet
);
6505 _Lockit_dtor(&lock
);
6510 /* ?_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 */
6511 /* ?_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 */
6512 ostreambuf_iterator_char
* __cdecl
num_put_char__Put(const num_put
*this, ostreambuf_iterator_char
*ret
,
6513 ostreambuf_iterator_char dest
, const char *ptr
, MSVCP_size_t count
)
6515 TRACE("(%p %p %p %ld)\n", this, ret
, ptr
, count
);
6517 for(; count
>0; count
--)
6518 ostreambuf_iterator_char_put(&dest
, *ptr
++);
6524 /* ?_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 */
6525 /* ?_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 */
6526 ostreambuf_iterator_char
* __cdecl
num_put_char__Putc(const num_put
*this, ostreambuf_iterator_char
*ret
,
6527 ostreambuf_iterator_char dest
, const char *ptr
, MSVCP_size_t count
)
6529 TRACE("(%p %p %p %ld)\n", this, ret
, ptr
, count
);
6531 for(; count
>0; count
--)
6532 ostreambuf_iterator_char_put(&dest
, *ptr
++);
6538 /* ?_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 */
6539 /* ?_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 */
6540 ostreambuf_iterator_char
* __cdecl
num_put_char__Putgrouped(const num_put
*this, ostreambuf_iterator_char
*ret
,
6541 ostreambuf_iterator_char dest
, const char *ptr
, MSVCP_size_t count
, char delim
)
6543 FIXME("(%p %p %p %ld %d) stub\n", this, ret
, ptr
, count
, delim
);
6547 /* ?_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 */
6548 /* ?_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 */
6549 ostreambuf_iterator_char
* __cdecl
num_put_char__Rep(const num_put
*this, ostreambuf_iterator_char
*ret
,
6550 ostreambuf_iterator_char dest
, char c
, MSVCP_size_t count
)
6552 TRACE("(%p %p %d %ld)\n", this, ret
, c
, count
);
6554 for(; count
>0; count
--)
6555 ostreambuf_iterator_char_put(&dest
, c
);
6561 /* ?_Ffmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAPADPADDH@Z */
6562 /* ?_Ffmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAPEADPEADDH@Z */
6563 char* __cdecl
num_put_char__Ffmt(const num_put
*this, char *fmt
, char spec
, int fmtfl
)
6565 int type
= fmtfl
& FMTFLAG_floatfield
;
6568 TRACE("(%p %p %d %d)\n", this, fmt
, spec
, fmtfl
);
6571 if(fmtfl
& FMTFLAG_showpos
)
6573 if(fmtfl
& FMTFLAG_showbase
)
6580 if(type
== FMTFLAG_fixed
)
6582 else if(type
== FMTFLAG_scientific
)
6583 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'E' : 'e';
6584 else if(type
== (FMTFLAG_fixed
|FMTFLAG_scientific
))
6585 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'A' : 'a';
6587 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'G' : 'g';
6593 /* ?_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 */
6594 /* ?_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 */
6595 ostreambuf_iterator_char
* __cdecl
num_put_char__Fput(const num_put
*this, ostreambuf_iterator_char
*ret
,
6596 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const char *buf
, MSVCP_size_t bef_point
,
6597 MSVCP_size_t aft_point
, MSVCP_size_t trailing
, MSVCP_size_t count
)
6599 FIXME("(%p %p %p %d %p %ld %ld %ld %ld) stub\n", this, ret
, base
,
6600 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
6604 /* TODO: This function should be removed when num_put_char__Fput is implemented */
6605 static ostreambuf_iterator_char
* num_put_char_fput(const num_put
*this, ostreambuf_iterator_char
*ret
,
6606 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, char *buf
, MSVCP_size_t count
)
6608 numpunct_char
*numpunct
= numpunct_char_use_facet(base
->loc
);
6609 basic_string_char grouping_bstr
;
6610 const char *grouping
;
6611 char *p
, sep
= *localeconv()->decimal_point
;
6612 int cur_group
= 0, group_size
= 0;
6613 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
6616 TRACE("(%p %p %p %d %s %ld)\n", this, ret
, base
, fill
, buf
, count
);
6618 /* Change decimal point */
6619 for(p
=buf
; p
<buf
+count
; p
++) {
6621 *p
= numpunct_char_decimal_point(numpunct
);
6627 /* Add separators to number */
6628 numpunct_char_grouping(numpunct
, &grouping_bstr
);
6629 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
6630 sep
= grouping
[0] ? numpunct_char_thousands_sep(numpunct
) : '\0';
6632 for(; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
6634 if(group_size
== grouping
[cur_group
]) {
6636 if(grouping
[cur_group
+1])
6639 memmove(p
+1, p
, buf
+count
-p
);
6644 MSVCP_basic_string_char_dtor(&grouping_bstr
);
6646 /* Display number with padding */
6647 if(count
>= base
->wide
)
6650 pad
= base
->wide
-count
;
6653 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
6654 num_put_char__Putc(this, &dest
, dest
, buf
, 1);
6657 if(adjustfield
!= FMTFLAG_left
) {
6658 num_put_char__Rep(this, ret
, dest
, fill
, pad
);
6661 num_put_char__Putc(this, &dest
, dest
, buf
, count
);
6662 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
6665 /* ?_Ifmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAPADPADPBDH@Z */
6666 /* ?_Ifmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
6667 char* __cdecl
num_put_char__Ifmt(const num_put
*this, char *fmt
, const char *spec
, int fmtfl
)
6669 int base
= fmtfl
& FMTFLAG_basefield
;
6672 TRACE("(%p %p %p %d)\n", this, fmt
, spec
, fmtfl
);
6675 if(fmtfl
& FMTFLAG_showpos
)
6677 if(fmtfl
& FMTFLAG_showbase
)
6684 if(base
== FMTFLAG_oct
)
6686 else if(base
== FMTFLAG_hex
)
6687 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'X' : 'x';
6695 /* ?_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 */
6696 /* ?_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 */
6697 ostreambuf_iterator_char
* __cdecl
num_put_char__Iput(const num_put
*this, ostreambuf_iterator_char
*ret
,
6698 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, char *buf
, MSVCP_size_t count
)
6700 numpunct_char
*numpunct
= numpunct_char_use_facet(base
->loc
);
6701 basic_string_char grouping_bstr
;
6702 const char *grouping
;
6704 int cur_group
= 0, group_size
= 0;
6705 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
6708 TRACE("(%p %p %p %d %s %ld)\n", this, ret
, base
, fill
, buf
, count
);
6710 /* Add separators to number */
6711 numpunct_char_grouping(numpunct
, &grouping_bstr
);
6712 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
6713 sep
= grouping
[0] ? numpunct_char_thousands_sep(numpunct
) : '\0';
6715 for(p
=buf
+count
-1; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
6717 if(group_size
== grouping
[cur_group
]) {
6719 if(grouping
[cur_group
+1])
6722 memmove(p
+1, p
, buf
+count
-p
);
6727 MSVCP_basic_string_char_dtor(&grouping_bstr
);
6729 /* Display number with padding */
6730 if(count
>= base
->wide
)
6733 pad
= base
->wide
-count
;
6736 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
6737 num_put_char__Putc(this, &dest
, dest
, buf
, 1);
6739 }else if((adjustfield
& FMTFLAG_internal
) && (buf
[1]=='x' || buf
[1]=='X')) {
6740 num_put_char__Putc(this, &dest
, dest
, buf
, 2);
6743 if(adjustfield
!= FMTFLAG_left
) {
6744 num_put_char__Rep(this, ret
, dest
, fill
, pad
);
6747 num_put_char__Putc(this, &dest
, dest
, buf
, count
);
6748 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
6751 /* ?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 */
6752 /* ?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 */
6753 #define call_num_put_char_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_char*, \
6754 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, LONG), \
6755 (this, ret, dest, base, fill, v))
6756 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_long
, 28)
6757 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_long(const num_put
*this, ostreambuf_iterator_char
*ret
,
6758 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, LONG v
)
6760 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
6761 char fmt
[7]; /* strlen("%+#lld")+1 */
6763 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
6765 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
6766 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
6769 /* ?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 */
6770 /* ?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 */
6771 DEFINE_THISCALL_WRAPPER(num_put_char_put_long
, 28)
6772 ostreambuf_iterator_char
* __thiscall
num_put_char_put_long(const num_put
*this, ostreambuf_iterator_char
*ret
,
6773 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, LONG v
)
6775 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
6776 return call_num_put_char_do_put_long(this, ret
, dest
, base
, fill
, v
);
6779 /* ?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 */
6780 /* ?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 */
6781 #define call_num_put_char_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_char*, \
6782 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, ULONG), \
6783 (this, ret, dest, base, fill, v))
6784 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ulong
, 28)
6785 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_ulong(const num_put
*this, ostreambuf_iterator_char
*ret
,
6786 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, ULONG v
)
6788 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
6789 char fmt
[7]; /* strlen("%+#lld")+1 */
6791 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
6793 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
6794 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
6797 /* ?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 */
6798 /* ?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 */
6799 DEFINE_THISCALL_WRAPPER(num_put_char_put_ulong
, 28)
6800 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ulong(const num_put
*this, ostreambuf_iterator_char
*ret
,
6801 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, ULONG v
)
6803 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
6804 return call_num_put_char_do_put_ulong(this, ret
, dest
, base
, fill
, v
);
6807 static inline streamsize
get_precision(const ios_base
*base
)
6809 return base
->prec
<= 0 && !(base
->fmtfl
& FMTFLAG_fixed
) ? 6 : base
->prec
;
6812 /* ?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 */
6813 /* ?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 */
6814 /* ?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 */
6815 /* ?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 */
6816 #define call_num_put_char_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_char*, \
6817 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
6818 (this, ret, dest, base, fill, v))
6819 #define call_num_put_char_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 8, ostreambuf_iterator_char*, \
6820 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
6821 (this, ret, dest, base, fill, v))
6822 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_double
, 32)
6823 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_double(const num_put
*this, ostreambuf_iterator_char
*ret
,
6824 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
6827 char fmt
[8]; /* strlen("%+#.*lg")+1 */
6831 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
6833 num_put_char__Ffmt(this, fmt
, '\0', base
->fmtfl
);
6834 prec
= get_precision(base
);
6835 size
= _scprintf(fmt
, prec
, v
);
6837 /* TODO: don't use dynamic allocation */
6838 tmp
= MSVCRT_operator_new(size
*2);
6840 ERR("Out of memory\n");
6841 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
6843 num_put_char_fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, prec
, v
));
6844 MSVCRT_operator_delete(tmp
);
6848 /* ?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 */
6849 /* ?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 */
6850 DEFINE_THISCALL_WRAPPER(num_put_char_put_double
, 32)
6851 ostreambuf_iterator_char
* __thiscall
num_put_char_put_double(const num_put
*this, ostreambuf_iterator_char
*ret
,
6852 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
6854 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
6855 return call_num_put_char_do_put_double(this, ret
, dest
, base
, fill
, v
);
6858 /* ?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 */
6859 /* ?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 */
6860 DEFINE_THISCALL_WRAPPER(num_put_char_put_ldouble
, 32)
6861 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ldouble(const num_put
*this, ostreambuf_iterator_char
*ret
,
6862 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
6864 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
6865 return call_num_put_char_do_put_ldouble(this, ret
, dest
, base
, fill
, v
);
6868 /* ?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 */
6869 /* ?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 */
6870 #define call_num_put_char_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_char*, \
6871 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const void*), \
6872 (this, ret, dest, base, fill, v))
6873 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ptr
, 28)
6874 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_ptr(const num_put
*this, ostreambuf_iterator_char
*ret
,
6875 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const void *v
)
6877 char tmp
[17]; /* 8(16^8==2^64)*2(separators beetwen every digit) + 1 */
6879 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
6881 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
6884 /* ?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 */
6885 /* ?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 */
6886 DEFINE_THISCALL_WRAPPER(num_put_char_put_ptr
, 28)
6887 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ptr(const num_put
*this, ostreambuf_iterator_char
*ret
,
6888 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const void *v
)
6890 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
6891 return call_num_put_char_do_put_ptr(this, ret
, dest
, base
, fill
, v
);
6894 /* ?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 */
6895 /* ?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 */
6896 #define call_num_put_char_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_char*, \
6897 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, __int64), \
6898 (this, ret, dest, base, fill, v))
6899 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_int64
, 32)
6900 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_int64(const num_put
*this, ostreambuf_iterator_char
*ret
,
6901 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, __int64 v
)
6903 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
6904 char fmt
[7]; /* strlen("%+#lld")+1 */
6906 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
6908 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
6909 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
6912 /* ?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 */
6913 /* ?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 */
6914 DEFINE_THISCALL_WRAPPER(num_put_char_put_int64
, 32)
6915 ostreambuf_iterator_char
* __thiscall
num_put_char_put_int64(const num_put
*this, ostreambuf_iterator_char
*ret
,
6916 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, __int64 v
)
6918 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
6919 return call_num_put_char_do_put_int64(this, ret
, dest
, base
, fill
, v
);
6922 /* ?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 */
6923 /* ?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 */
6924 #define call_num_put_char_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_char*, \
6925 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, unsigned __int64), \
6926 (this, ret, dest, base, fill, v))
6927 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_uint64
, 32)
6928 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_uint64(const num_put
*this, ostreambuf_iterator_char
*ret
,
6929 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, unsigned __int64 v
)
6931 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
6932 char fmt
[7]; /* strlen("%+#lld")+1 */
6934 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
6936 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
6937 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
6940 /* ?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 */
6941 /* ?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 */
6942 DEFINE_THISCALL_WRAPPER(num_put_char_put_uint64
, 32)
6943 ostreambuf_iterator_char
* __thiscall
num_put_char_put_uint64(const num_put
*this, ostreambuf_iterator_char
*ret
,
6944 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, unsigned __int64 v
)
6946 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
6947 return call_num_put_char_do_put_uint64(this, ret
, dest
, base
, fill
, v
);
6950 /* ?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 */
6951 /* ?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 */
6952 #define call_num_put_char_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_char*, \
6953 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, MSVCP_bool), \
6954 (this, ret, dest, base, fill, v))
6955 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_bool
, 28)
6956 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_bool(const num_put
*this, ostreambuf_iterator_char
*ret
,
6957 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, MSVCP_bool v
)
6959 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
6961 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
6962 numpunct_char
*numpunct
= numpunct_char_use_facet(base
->loc
);
6963 basic_string_char str
;
6964 MSVCP_size_t pad
, len
;
6967 numpunct_char_truename(numpunct
, &str
);
6969 numpunct_char_falsename(numpunct
, &str
);
6971 len
= MSVCP_basic_string_char_length(&str
);
6972 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
6975 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
6976 num_put_char__Rep(this, &dest
, dest
, fill
, pad
);
6979 num_put_char__Putc(this, &dest
, dest
, MSVCP_basic_string_char_c_str(&str
), len
);
6980 MSVCP_basic_string_char_dtor(&str
);
6981 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
6984 return num_put_char_put_long(this, ret
, dest
, base
, fill
, v
);
6987 /* ?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 */
6988 /* ?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 */
6989 DEFINE_THISCALL_WRAPPER(num_put_char_put_bool
, 28)
6990 ostreambuf_iterator_char
* __thiscall
num_put_char_put_bool(const num_put
*this, ostreambuf_iterator_char
*ret
,
6991 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, MSVCP_bool v
)
6993 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
6994 return call_num_put_char_do_put_bool(this, ret
, dest
, base
, fill
, v
);
6997 /* ?id@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
6998 locale_id num_put_wchar_id
= {0};
6999 /* ?id@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
7000 locale_id num_put_short_id
= {0};
7002 /* num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
7003 extern const vtable_ptr MSVCP_num_put_wchar_vtable
;
7004 /* num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
7005 extern const vtable_ptr MSVCP_num_put_short_vtable
;
7007 /* ?_Init@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
7008 /* ?_Init@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
7009 DEFINE_THISCALL_WRAPPER(num_put_wchar__Init
, 8)
7010 void __thiscall
num_put_wchar__Init(num_put
*this, const _Locinfo
*locinfo
)
7012 TRACE("(%p %p)\n", this, locinfo
);
7013 _Locinfo__Getcvt(locinfo
, &this->cvt
);
7016 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
7017 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
7018 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor_locinfo
, 12)
7019 num_put
* __thiscall
num_put_wchar_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
7021 TRACE("(%p %p %ld)\n", this, locinfo
, refs
);
7023 locale_facet_ctor_refs(&this->facet
, refs
);
7024 this->facet
.vtable
= &MSVCP_num_put_wchar_vtable
;
7026 num_put_wchar__Init(this, locinfo
);
7030 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
7031 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
7032 DEFINE_THISCALL_WRAPPER(num_put_short_ctor_locinfo
, 12)
7033 num_put
* __thiscall
num_put_short_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
7035 num_put_wchar_ctor_locinfo(this, locinfo
, refs
);
7036 this->facet
.vtable
= &MSVCP_num_put_short_vtable
;
7040 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
7041 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
7042 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor_refs
, 8)
7043 num_put
* __thiscall
num_put_wchar_ctor_refs(num_put
*this, MSVCP_size_t refs
)
7047 TRACE("(%p %lu)\n", this, refs
);
7049 _Locinfo_ctor(&locinfo
);
7050 num_put_wchar_ctor_locinfo(this, &locinfo
, refs
);
7051 _Locinfo_dtor(&locinfo
);
7055 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
7056 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
7057 DEFINE_THISCALL_WRAPPER(num_put_short_ctor_refs
, 8)
7058 num_put
* __thiscall
num_put_short_ctor_refs(num_put
*this, MSVCP_size_t refs
)
7060 num_put_wchar_ctor_refs(this, refs
);
7061 this->facet
.vtable
= &MSVCP_num_put_short_vtable
;
7065 /* ??_F?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
7066 /* ??_F?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
7067 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor
, 4)
7068 num_put
* __thiscall
num_put_wchar_ctor(num_put
*this)
7070 return num_put_wchar_ctor_refs(this, 0);
7073 /* ??_F?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ */
7074 /* ??_F?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ */
7075 DEFINE_THISCALL_WRAPPER(num_put_short_ctor
, 4)
7076 num_put
* __thiscall
num_put_short_ctor(num_put
*this)
7078 return num_put_short_ctor_refs(this, 0);
7081 /* ??1?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
7082 /* ??1?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
7083 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
7084 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
7085 DEFINE_THISCALL_WRAPPER(num_put_wchar_dtor
, 4)
7086 void __thiscall
num_put_wchar_dtor(num_put
*this)
7088 TRACE("(%p)\n", this);
7089 locale_facet_dtor(&this->facet
);
7092 DEFINE_THISCALL_WRAPPER(num_put_wchar_vector_dtor
, 8)
7093 num_put
* __thiscall
num_put_wchar_vector_dtor(num_put
*this, unsigned int flags
)
7095 TRACE("(%p %x)\n", this, flags
);
7097 /* we have an array, with the number of elements stored before the first object */
7098 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
7100 for(i
=*ptr
-1; i
>=0; i
--)
7101 num_put_wchar_dtor(this+i
);
7102 MSVCRT_operator_delete(ptr
);
7104 num_put_wchar_dtor(this);
7106 MSVCRT_operator_delete(this);
7112 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
7113 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
7114 static MSVCP_size_t
num_put_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
7116 TRACE("(%p %p)\n", facet
, loc
);
7118 if(facet
&& !*facet
) {
7121 *facet
= MSVCRT_operator_new(sizeof(num_put
));
7123 ERR("Out of memory\n");
7124 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7128 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
7129 num_put_wchar_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
7130 _Locinfo_dtor(&locinfo
);
7136 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
7137 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
7138 MSVCP_size_t __cdecl
num_put_wchar__Getcat_old(const locale_facet
**facet
)
7140 return num_put_wchar__Getcat(facet
, locale_classic());
7143 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
7144 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
7145 static MSVCP_size_t
num_put_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
7147 TRACE("(%p %p)\n", facet
, loc
);
7149 if(facet
&& !*facet
) {
7152 *facet
= MSVCRT_operator_new(sizeof(num_put
));
7154 ERR("Out of memory\n");
7155 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7159 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
7160 num_put_short_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
7161 _Locinfo_dtor(&locinfo
);
7167 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
7168 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
7169 MSVCP_size_t __cdecl
num_put_short__Getcat_old(const locale_facet
**facet
)
7171 return num_put_short__Getcat(facet
, locale_classic());
7174 num_put
* num_put_wchar_use_facet(const locale
*loc
)
7176 static num_put
*obj
= NULL
;
7179 const locale_facet
*fac
;
7181 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
7182 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_wchar_id
));
7184 _Lockit_dtor(&lock
);
7185 return (num_put
*)fac
;
7189 _Lockit_dtor(&lock
);
7193 num_put_wchar__Getcat(&fac
, loc
);
7194 obj
= (num_put
*)fac
;
7195 locale_facet__Incref(&obj
->facet
);
7196 locale_facet_register(&obj
->facet
);
7197 _Lockit_dtor(&lock
);
7202 num_put
* num_put_short_use_facet(const locale
*loc
)
7204 static num_put
*obj
= NULL
;
7207 const locale_facet
*fac
;
7209 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
7210 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_short_id
));
7212 _Lockit_dtor(&lock
);
7213 return (num_put
*)fac
;
7217 _Lockit_dtor(&lock
);
7221 num_put_short__Getcat(&fac
, loc
);
7222 obj
= (num_put
*)fac
;
7223 locale_facet__Incref(&obj
->facet
);
7224 locale_facet_register(&obj
->facet
);
7225 _Lockit_dtor(&lock
);
7230 /* ?_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 */
7231 /* ?_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 */
7232 /* ?_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 */
7233 /* ?_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 */
7234 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Put(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7235 ostreambuf_iterator_wchar dest
, const wchar_t *ptr
, MSVCP_size_t count
)
7237 TRACE("(%p %p %s %ld)\n", this, ret
, debugstr_wn(ptr
, count
), count
);
7239 for(; count
>0; count
--)
7240 ostreambuf_iterator_wchar_put(&dest
, *ptr
++);
7246 /* ?_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 */
7247 /* ?_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 */
7248 /* ?_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 */
7249 /* ?_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 */
7250 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Putc(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7251 ostreambuf_iterator_wchar dest
, const char *ptr
, MSVCP_size_t count
)
7256 TRACE("(%p %p %s %ld)\n", this, ret
, debugstr_an(ptr
, count
), count
);
7258 for(; count
>0; count
--) {
7259 if(_Mbrtowc(&ch
, ptr
++, 1, &state
, &this->cvt
) == 1)
7260 ostreambuf_iterator_wchar_put(&dest
, ch
);
7267 /* ?_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 */
7268 /* ?_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 */
7269 /* ?_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 */
7270 /* ?_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 */
7271 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Putgrouped(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7272 ostreambuf_iterator_wchar dest
, const char *ptr
, MSVCP_size_t count
, wchar_t delim
)
7274 FIXME("(%p %p %p %ld %d) stub\n", this, ret
, ptr
, count
, delim
);
7278 /* ?_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 */
7279 /* ?_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 */
7280 /* ?_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 */
7281 /* ?_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 */
7282 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Rep(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7283 ostreambuf_iterator_wchar dest
, wchar_t c
, MSVCP_size_t count
)
7285 TRACE("(%p %p %d %ld)\n", this, ret
, c
, count
);
7287 for(; count
>0; count
--)
7288 ostreambuf_iterator_wchar_put(&dest
, c
);
7294 /* ?_Ffmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAPADPADDH@Z */
7295 /* ?_Ffmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAPEADPEADDH@Z */
7296 /* ?_Ffmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAPADPADDH@Z */
7297 /* ?_Ffmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAPEADPEADDH@Z */
7298 char* __cdecl
num_put_wchar__Ffmt(const num_put
*this, char *fmt
, char spec
, int fmtfl
)
7300 int type
= fmtfl
& FMTFLAG_floatfield
;
7303 TRACE("(%p %p %d %d)\n", this, fmt
, spec
, fmtfl
);
7306 if(fmtfl
& FMTFLAG_showpos
)
7308 if(fmtfl
& FMTFLAG_showbase
)
7315 if(type
== FMTFLAG_fixed
)
7317 else if(type
== FMTFLAG_scientific
)
7318 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'E' : 'e';
7319 else if(type
== (FMTFLAG_fixed
|FMTFLAG_scientific
))
7320 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'A' : 'a';
7322 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'G' : 'g';
7328 /* ?_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 */
7329 /* ?_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 */
7330 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7331 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const char *buf
, MSVCP_size_t bef_point
,
7332 MSVCP_size_t aft_point
, MSVCP_size_t trailing
, MSVCP_size_t count
)
7334 FIXME("(%p %p %p %d %p %ld %ld %ld %ld) stub\n", this, ret
, base
,
7335 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
7339 /* ?_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 */
7340 /* ?_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 */
7341 ostreambuf_iterator_wchar
* __cdecl
num_put_short__Fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7342 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const char *buf
, MSVCP_size_t bef_point
,
7343 MSVCP_size_t aft_point
, MSVCP_size_t trailing
, MSVCP_size_t count
)
7345 FIXME("(%p %p %p %d %p %ld %ld %ld %ld) stub\n", this, ret
, base
,
7346 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
7350 /* TODO: This function should be removed when num_put_wchar__Fput is implemented */
7351 static ostreambuf_iterator_wchar
* num_put__fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7352 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
,
7353 MSVCP_size_t count
, numpunct_wchar
*numpunct
)
7355 basic_string_char grouping_bstr
;
7356 const char *grouping
;
7357 char *p
, dec_point
= *localeconv()->decimal_point
;
7359 int cur_group
= 0, group_size
= 0;
7360 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
7361 MSVCP_size_t i
, pad
;
7363 TRACE("(%p %p %p %d %s %ld)\n", this, ret
, base
, fill
, buf
, count
);
7365 for(p
=buf
; p
<buf
+count
; p
++) {
7371 /* Add separators to number */
7372 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
7373 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
7374 sep
= grouping
[0] ? numpunct_wchar_thousands_sep(numpunct
) : '\0';
7376 for(; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
7378 if(group_size
== grouping
[cur_group
]) {
7380 if(grouping
[cur_group
+1])
7383 memmove(p
+1, p
, buf
+count
-p
);
7384 *p
= '\0'; /* mark thousands separator positions */
7388 MSVCP_basic_string_char_dtor(&grouping_bstr
);
7390 /* Display number with padding */
7391 if(count
>= base
->wide
)
7394 pad
= base
->wide
-count
;
7397 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
7398 num_put_wchar__Putc(this, &dest
, dest
, buf
, 1);
7401 if(adjustfield
!= FMTFLAG_left
) {
7402 num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
7406 for(i
=0; i
<count
; i
++) {
7407 if(buf
[i
] == dec_point
)
7408 num_put_wchar__Rep(this, &dest
, dest
, numpunct_wchar_decimal_point(numpunct
), 1);
7410 num_put_wchar__Rep(this, &dest
, dest
, sep
, 1);
7412 num_put_wchar__Putc(this, &dest
, dest
, buf
+i
, 1);
7415 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
7418 /* ?_Ifmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAPADPADPBDH@Z */
7419 /* ?_Ifmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
7420 /* ?_Ifmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAPADPADPBDH@Z */
7421 /* ?_Ifmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
7422 char* __cdecl
num_put_wchar__Ifmt(const num_put
*this, char *fmt
, const char *spec
, int fmtfl
)
7424 int base
= fmtfl
& FMTFLAG_basefield
;
7427 TRACE("(%p %p %p %d)\n", this, fmt
, spec
, fmtfl
);
7430 if(fmtfl
& FMTFLAG_showpos
)
7432 if(fmtfl
& FMTFLAG_showbase
)
7439 if(base
== FMTFLAG_oct
)
7441 else if(base
== FMTFLAG_hex
)
7442 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'X' : 'x';
7450 static ostreambuf_iterator_wchar
* num_put__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7451 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
,
7452 MSVCP_size_t count
, numpunct_wchar
*numpunct
)
7454 basic_string_char grouping_bstr
;
7455 const char *grouping
;
7458 int cur_group
= 0, group_size
= 0;
7459 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
7460 MSVCP_size_t i
, pad
;
7462 TRACE("(%p %p %p %d %s %ld)\n", this, ret
, base
, fill
, buf
, count
);
7464 /* Add separators to number */
7465 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
7466 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
7467 sep
= grouping
[0] ? numpunct_wchar_thousands_sep(numpunct
) : '\0';
7469 for(p
=buf
+count
-1; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
7471 if(group_size
== grouping
[cur_group
]) {
7473 if(grouping
[cur_group
+1])
7476 memmove(p
+1, p
, buf
+count
-p
);
7477 *p
= '\0'; /* mark thousands separator positions */
7481 MSVCP_basic_string_char_dtor(&grouping_bstr
);
7483 /* Display number with padding */
7484 if(count
>= base
->wide
)
7487 pad
= base
->wide
-count
;
7490 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
7491 num_put_wchar__Putc(this, &dest
, dest
, buf
, 1);
7493 }else if((adjustfield
& FMTFLAG_internal
) && (buf
[1]=='x' || buf
[1]=='X')) {
7494 num_put_wchar__Putc(this, &dest
, dest
, buf
, 2);
7497 if(adjustfield
!= FMTFLAG_left
) {
7498 num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
7502 for(i
=0; i
<count
; i
++) {
7504 num_put_wchar__Rep(this, &dest
, dest
, sep
, 1);
7506 num_put_wchar__Putc(this, &dest
, dest
, buf
+i
, 1);
7509 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
7512 /* ?_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 */
7513 /* ?_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 */
7514 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7515 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
, MSVCP_size_t count
)
7517 return num_put__Iput(this, ret
, dest
, base
, fill
, buf
, count
, numpunct_wchar_use_facet(base
->loc
));
7520 /* ?_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 */
7521 /* ?_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 */
7522 ostreambuf_iterator_wchar
* __cdecl
num_put_short__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7523 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
, MSVCP_size_t count
)
7525 return num_put__Iput(this, ret
, dest
, base
, fill
, buf
, count
, numpunct_short_use_facet(base
->loc
));
7528 /* ?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 */
7529 /* ?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 */
7530 #define call_num_put_wchar_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_wchar*, \
7531 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, LONG), \
7532 (this, ret, dest, base, fill, v))
7533 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_long
, 28)
7534 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7535 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
7537 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7538 char fmt
[7]; /* strlen("%+#lld")+1 */
7540 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7542 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
7543 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
7546 /* ?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 */
7547 /* ?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 */
7548 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_long
, 28)
7549 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7550 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
7552 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7553 char fmt
[7]; /* strlen("%+#lld")+1 */
7555 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7557 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
7558 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
7561 /* ?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 */
7562 /* ?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 */
7563 /* ?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 */
7564 /* ?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 */
7565 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_long
, 28)
7566 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7567 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
7569 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7570 return call_num_put_wchar_do_put_long(this, ret
, dest
, base
, fill
, v
);
7573 /* ?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 */
7574 /* ?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 */
7575 #define call_num_put_wchar_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_wchar*, \
7576 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, ULONG), \
7577 (this, ret, dest, base, fill, v))
7578 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ulong
, 28)
7579 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7580 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
7582 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7583 char fmt
[7]; /* strlen("%+#lld")+1 */
7585 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7587 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
7588 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
7591 /* ?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 */
7592 /* ?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 */
7593 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ulong
, 28)
7594 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7595 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
7597 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7598 char fmt
[7]; /* strlen("%+#lld")+1 */
7600 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7602 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
7603 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
7606 /* ?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 */
7607 /* ?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 */
7608 /* ?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 */
7609 /* ?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 */
7610 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ulong
, 28)
7611 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7612 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
7614 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7615 return call_num_put_wchar_do_put_ulong(this, ret
, dest
, base
, fill
, v
);
7618 /* ?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 */
7619 /* ?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 */
7620 /* ?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 */
7621 /* ?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 */
7622 #define call_num_put_wchar_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_wchar*, \
7623 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
7624 (this, ret, dest, base, fill, v))
7625 #define call_num_put_wchar_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 8, ostreambuf_iterator_wchar*, \
7626 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
7627 (this, ret, dest, base, fill, v))
7628 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_double
, 32)
7629 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7630 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
7633 char fmt
[8]; /* strlen("%+#.*lg")+1 */
7637 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7639 num_put_wchar__Ffmt(this, fmt
, '\0', base
->fmtfl
);
7640 prec
= get_precision(base
);
7641 size
= _scprintf(fmt
, prec
, v
);
7643 /* TODO: don't use dynamic allocation */
7644 tmp
= MSVCRT_operator_new(size
*2);
7646 ERR("Out of memory\n");
7647 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7649 num_put__fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, prec
, v
),
7650 numpunct_wchar_use_facet(base
->loc
));
7651 MSVCRT_operator_delete(tmp
);
7655 /* ?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 */
7656 /* ?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 */
7657 /* ?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 */
7658 /* ?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 */
7659 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_double
, 32)
7660 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7661 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
7664 char fmt
[8]; /* strlen("%+#.*lg")+1 */
7668 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7670 num_put_wchar__Ffmt(this, fmt
, '\0', base
->fmtfl
);
7671 prec
= get_precision(base
);
7672 size
= _scprintf(fmt
, prec
, v
);
7674 /* TODO: don't use dynamic allocation */
7675 tmp
= MSVCRT_operator_new(size
*2);
7677 ERR("Out of memory\n");
7678 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7680 num_put__fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, prec
, v
),
7681 numpunct_short_use_facet(base
->loc
));
7682 MSVCRT_operator_delete(tmp
);
7686 /* ?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 */
7687 /* ?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 */
7688 /* ?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 */
7689 /* ?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 */
7690 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_double
, 32)
7691 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7692 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
7694 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7695 return call_num_put_wchar_do_put_double(this, ret
, dest
, base
, fill
, v
);
7698 /* ?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 */
7699 /* ?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 */
7700 /* ?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 */
7701 /* ?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 */
7702 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ldouble
, 32)
7703 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ldouble(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7704 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
7706 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7707 return call_num_put_wchar_do_put_ldouble(this, ret
, dest
, base
, fill
, v
);
7710 /* ?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 */
7711 /* ?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 */
7712 #define call_num_put_wchar_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_wchar*, \
7713 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const void*), \
7714 (this, ret, dest, base, fill, v))
7715 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ptr
, 28)
7716 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7717 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
7719 char tmp
[17]; /* 8(16^8==2^64)*2(separators beetwen every digit) + 1 */
7721 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
7723 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
7726 /* ?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 */
7727 /* ?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 */
7728 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ptr
, 28)
7729 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7730 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
7732 char tmp
[17]; /* 8(16^8==2^64)*2(separators beetwen every digit) + 1 */
7734 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
7736 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
7739 /* ?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 */
7740 /* ?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 */
7741 /* ?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 */
7742 /* ?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 */
7743 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ptr
, 28)
7744 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7745 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
7747 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
7748 return call_num_put_wchar_do_put_ptr(this, ret
, dest
, base
, fill
, v
);
7751 /* ?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 */
7752 /* ?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 */
7753 #define call_num_put_wchar_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_wchar*, \
7754 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, __int64), \
7755 (this, ret, dest, base, fill, v))
7756 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_int64
, 32)
7757 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7758 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
7760 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7761 char fmt
[7]; /* strlen("%+#lld")+1 */
7763 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7765 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
7766 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
7769 /* ?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 */
7770 /* ?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 */
7771 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_int64
, 32)
7772 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7773 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
7775 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7776 char fmt
[7]; /* strlen("%+#lld")+1 */
7778 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7780 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
7781 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
7784 /* ?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 */
7785 /* ?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 */
7786 /* ?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 */
7787 /* ?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 */
7788 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_int64
, 32)
7789 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7790 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
7792 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7793 return call_num_put_wchar_do_put_int64(this, ret
, dest
, base
, fill
, v
);
7796 /* ?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 */
7797 /* ?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 */
7798 #define call_num_put_wchar_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_wchar*, \
7799 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, unsigned __int64), \
7800 (this, ret, dest, base, fill, v))
7801 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_uint64
, 32)
7802 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7803 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
7805 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7806 char fmt
[7]; /* strlen("%+#lld")+1 */
7808 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7810 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
7811 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
7814 /* ?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 */
7815 /* ?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 */
7816 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_uint64
, 32)
7817 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7818 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
7820 char tmp
[48]; /* 22(8^22>2^64)*2(separators beetwen every digit) + 3(strlen("+0x"))+1 */
7821 char fmt
[7]; /* strlen("%+#lld")+1 */
7823 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7825 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
7826 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
7829 /* ?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 */
7830 /* ?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 */
7831 /* ?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 */
7832 /* ?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 */
7833 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_uint64
, 32)
7834 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7835 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
7837 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7838 return call_num_put_wchar_do_put_uint64(this, ret
, dest
, base
, fill
, v
);
7841 /* ?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 */
7842 /* ?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 */
7843 #define call_num_put_wchar_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_wchar*, \
7844 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, MSVCP_bool), \
7845 (this, ret, dest, base, fill, v))
7846 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_bool
, 28)
7847 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7848 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, MSVCP_bool v
)
7850 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7852 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
7853 numpunct_wchar
*numpunct
= numpunct_wchar_use_facet(base
->loc
);
7854 basic_string_wchar str
;
7855 MSVCP_size_t pad
, len
;
7858 numpunct_wchar_truename(numpunct
, &str
);
7860 numpunct_wchar_falsename(numpunct
, &str
);
7862 len
= MSVCP_basic_string_wchar_length(&str
);
7863 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
7866 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
7867 num_put_wchar__Rep(this, &dest
, dest
, fill
, pad
);
7870 num_put_wchar__Put(this, &dest
, dest
, MSVCP_basic_string_wchar_c_str(&str
), len
);
7871 MSVCP_basic_string_wchar_dtor(&str
);
7872 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
7875 return num_put_wchar_put_long(this, ret
, dest
, base
, fill
, v
);
7878 /* ?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 */
7879 /* ?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 */
7880 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_bool
, 28)
7881 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7882 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, MSVCP_bool v
)
7884 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7886 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
7887 numpunct_wchar
*numpunct
= numpunct_short_use_facet(base
->loc
);
7888 basic_string_wchar str
;
7889 MSVCP_size_t pad
, len
;
7892 numpunct_wchar_truename(numpunct
, &str
);
7894 numpunct_wchar_falsename(numpunct
, &str
);
7896 len
= MSVCP_basic_string_wchar_length(&str
);
7897 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
7900 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
7901 num_put_wchar__Rep(this, &dest
, dest
, fill
, pad
);
7904 num_put_wchar__Put(this, &dest
, dest
, MSVCP_basic_string_wchar_c_str(&str
), len
);
7905 MSVCP_basic_string_wchar_dtor(&str
);
7906 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
7909 return num_put_wchar_put_long(this, ret
, dest
, base
, fill
, v
);
7912 /* ?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 */
7913 /* ?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 */
7914 /* ?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 */
7915 /* ?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 */
7916 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_bool
, 28)
7917 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
7918 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, MSVCP_bool v
)
7920 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7921 return call_num_put_wchar_do_put_bool(this, ret
, dest
, base
, fill
, v
);
7924 /* ?id@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
7925 locale_id time_put_char_id
= {0};
7927 /* ??_7?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
7928 extern const vtable_ptr MSVCP_time_put_char_vtable
;
7930 /* ?_Init@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
7931 /* ?_Init@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
7932 DEFINE_THISCALL_WRAPPER(time_put_char__Init
, 8)
7933 void __thiscall
time_put_char__Init(time_put
*this, const _Locinfo
*locinfo
)
7935 TRACE("(%p %p)\n", this, locinfo
);
7936 _Locinfo__Gettnames(locinfo
, &this->time
);
7937 _Locinfo__Getcvt(locinfo
, &this->cvt
);
7940 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
7941 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
7942 DEFINE_THISCALL_WRAPPER(time_put_char_ctor_locinfo
, 12)
7943 time_put
* __thiscall
time_put_char_ctor_locinfo(time_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
7945 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
7946 locale_facet_ctor_refs(&this->facet
, refs
);
7947 this->facet
.vtable
= &MSVCP_time_put_char_vtable
;
7948 time_put_char__Init(this, locinfo
);
7952 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
7953 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
7954 DEFINE_THISCALL_WRAPPER(time_put_char_ctor_refs
, 8)
7955 time_put
* __thiscall
time_put_char_ctor_refs(time_put
*this, MSVCP_size_t refs
)
7959 TRACE("(%p %lu)\n", this, refs
);
7961 _Locinfo_ctor(&locinfo
);
7962 time_put_char_ctor_locinfo(this, &locinfo
, refs
);
7963 _Locinfo_dtor(&locinfo
);
7967 /* ??_F?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
7968 /* ??_F?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
7969 DEFINE_THISCALL_WRAPPER(time_put_char_ctor
, 4)
7970 time_put
* __thiscall
time_put_char_ctor(time_put
*this)
7972 return time_put_char_ctor_refs(this, 0);
7975 /* ??1?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
7976 /* ??1?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
7977 DEFINE_THISCALL_WRAPPER(time_put_char_dtor
, 4)
7978 void __thiscall
time_put_char_dtor(time_put
*this)
7980 TRACE("(%p)\n", this);
7981 _Timevec_dtor(&this->time
);
7984 DEFINE_THISCALL_WRAPPER(time_put_char_vector_dtor
, 8)
7985 time_put
* __thiscall
time_put_char_vector_dtor(time_put
*this, unsigned int flags
)
7987 TRACE("(%p %x)\n", this, flags
);
7989 /* we have an array, with the number of elements stored before the first object */
7990 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
7992 for(i
=*ptr
-1; i
>=0; i
--)
7993 time_put_char_dtor(this+i
);
7994 MSVCRT_operator_delete(ptr
);
7996 time_put_char_dtor(this);
7998 MSVCRT_operator_delete(this);
8004 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
8005 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
8006 static MSVCP_size_t
time_put_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
8008 TRACE("(%p %p)\n", facet
, loc
);
8010 if(facet
&& !*facet
) {
8013 *facet
= MSVCRT_operator_new(sizeof(time_put
));
8015 ERR("Out of memory\n");
8016 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8020 _Locinfo_ctor_cstr(&locinfo
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
8021 time_put_char_ctor_locinfo((time_put
*)*facet
, &locinfo
, 0);
8022 _Locinfo_dtor(&locinfo
);
8028 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
8029 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
8030 MSVCP_size_t __cdecl
time_put_char__Getcat_old(const locale_facet
**facet
)
8032 return time_put_char__Getcat(facet
, locale_classic());
8035 static time_put
* time_put_char_use_facet(const locale
*loc
)
8037 static time_put
*obj
= NULL
;
8040 const locale_facet
*fac
;
8042 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
8043 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_put_char_id
));
8045 _Lockit_dtor(&lock
);
8046 return (time_put
*)fac
;
8050 _Lockit_dtor(&lock
);
8054 time_put_char__Getcat(&fac
, loc
);
8055 obj
= (time_put
*)fac
;
8056 locale_facet__Incref(&obj
->facet
);
8057 locale_facet_register(&obj
->facet
);
8058 _Lockit_dtor(&lock
);
8063 /* ?do_put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBUtm@@DD@Z */
8064 /* ?do_put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBUtm@@DD@Z */
8065 DEFINE_THISCALL_WRAPPER(time_put_char_do_put
, 36)
8066 #define call_time_put_char_do_put(this, ret, dest, base, fill, t, spec, mod) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_char*, \
8067 (const time_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const struct tm*, char, char), \
8068 (this, ret, dest, base, fill, t, spec, mod))
8069 ostreambuf_iterator_char
* __thiscall
time_put_char_do_put(const time_put
*this, ostreambuf_iterator_char
*ret
,
8070 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const struct tm
*t
, char spec
, char mod
)
8072 char buf
[64], fmt
[4], *p
= fmt
;
8073 MSVCP_size_t i
, len
;
8075 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
8083 len
= _Strftime(buf
, sizeof(buf
), fmt
, t
, this->time
.timeptr
);
8084 for(i
=0; i
<len
; i
++)
8085 ostreambuf_iterator_char_put(&dest
, buf
[i
]);
8091 /* ?put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBUtm@@DD@Z */
8092 /* ?put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBUtm@@DD@Z */
8093 DEFINE_THISCALL_WRAPPER(time_put_char_put
, 36)
8094 ostreambuf_iterator_char
* __thiscall
time_put_char_put(const time_put
*this, ostreambuf_iterator_char
*ret
,
8095 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const struct tm
*t
, char spec
, char mod
)
8097 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
8098 return call_time_put_char_do_put(this, ret
, dest
, base
, fill
, t
, spec
, mod
);
8101 /* ?put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DPBUtm@@PBD3@Z */
8102 /* ?put@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DPEBUtm@@PEBD3@Z */
8103 DEFINE_THISCALL_WRAPPER(time_put_char_put_format
, 36)
8104 ostreambuf_iterator_char
* __thiscall
time_put_char_put_format(const time_put
*this, ostreambuf_iterator_char
*ret
,
8105 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const struct tm
*t
, const char *pat
, const char *pat_end
)
8107 TRACE("(%p %p %p %c %p %s)\n", this, ret
, base
, fill
, t
, debugstr_an(pat
, pat_end
-pat
));
8109 while(pat
< pat_end
) {
8111 ostreambuf_iterator_char_put(&dest
, *pat
++);
8112 }else if(++pat
== pat_end
) {
8113 ostreambuf_iterator_char_put(&dest
, '%');
8114 }else if(*pat
=='#' && pat
+1==pat_end
) {
8115 ostreambuf_iterator_char_put(&dest
, '%');
8116 ostreambuf_iterator_char_put(&dest
, *pat
++);
8127 time_put_char_put(this, &dest
, dest
, base
, fill
, t
, *pat
++, mod
);
8135 /* ?id@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
8136 locale_id time_put_wchar_id
= {0};
8137 /* ?id@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
8138 locale_id time_put_short_id
= {0};
8140 /* ??_7?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
8141 extern const vtable_ptr MSVCP_time_put_wchar_vtable
;
8142 /* ??_7?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
8143 extern const vtable_ptr MSVCP_time_put_short_vtable
;
8145 /* ?_Init@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
8146 /* ?_Init@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
8147 /* ?_Init@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
8148 /* ?_Init@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
8149 DEFINE_THISCALL_WRAPPER(time_put_wchar__Init
, 8)
8150 void __thiscall
time_put_wchar__Init(time_put
*this, const _Locinfo
*locinfo
)
8152 TRACE("(%p %p)\n", this, locinfo
);
8153 _Locinfo__Gettnames(locinfo
, &this->time
);
8154 _Locinfo__Getcvt(locinfo
, &this->cvt
);
8157 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
8158 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
8159 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor_locinfo
, 12)
8160 time_put
* __thiscall
time_put_wchar_ctor_locinfo(time_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
8162 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
8163 locale_facet_ctor_refs(&this->facet
, refs
);
8164 this->facet
.vtable
= &MSVCP_time_put_wchar_vtable
;
8165 time_put_wchar__Init(this, locinfo
);
8169 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
8170 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
8171 DEFINE_THISCALL_WRAPPER(time_put_short_ctor_locinfo
, 12)
8172 time_put
* __thiscall
time_put_short_ctor_locinfo(time_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
8174 time_put_wchar_ctor_locinfo(this, locinfo
, refs
);
8175 this->facet
.vtable
= &MSVCP_time_put_short_vtable
;
8179 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAE@PBDI@Z */
8180 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAA@PEBD_K@Z */
8181 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor_name
, 12)
8182 time_put
* __thiscall
time_put_wchar_ctor_name(time_put
*this, const char *name
, MSVCP_size_t refs
)
8186 TRACE("(%p %s %lu)\n", this, debugstr_a(name
), refs
);
8188 _Locinfo_ctor_cstr(&locinfo
, name
);
8189 time_put_wchar_ctor_locinfo(this, &locinfo
, refs
);
8190 _Locinfo_dtor(&locinfo
);
8194 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAE@PBDI@Z */
8195 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAA@PEBD_K@Z */
8196 DEFINE_THISCALL_WRAPPER(time_put_short_ctor_name
, 12)
8197 time_put
* __thiscall
time_put_short_ctor_name(time_put
*this, const char *name
, MSVCP_size_t refs
)
8199 time_put_wchar_ctor_name(this, name
, refs
);
8200 this->facet
.vtable
= &MSVCP_time_put_short_vtable
;
8204 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
8205 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
8206 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor_refs
, 8)
8207 time_put
* __thiscall
time_put_wchar_ctor_refs(time_put
*this, MSVCP_size_t refs
)
8211 TRACE("(%p %lu)\n", this, refs
);
8213 _Locinfo_ctor(&locinfo
);
8214 time_put_wchar_ctor_locinfo(this, &locinfo
, refs
);
8215 _Locinfo_dtor(&locinfo
);
8219 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
8220 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
8221 DEFINE_THISCALL_WRAPPER(time_put_short_ctor_refs
, 8)
8222 time_put
* __thiscall
time_put_short_ctor_refs(time_put
*this, MSVCP_size_t refs
)
8224 time_put_wchar_ctor_refs(this, refs
);
8225 this->facet
.vtable
= &MSVCP_time_put_short_vtable
;
8229 /* ??_F?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
8230 /* ??_F?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
8231 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor
, 4)
8232 time_put
* __thiscall
time_put_wchar_ctor(time_put
*this)
8234 return time_put_wchar_ctor_refs(this, 0);
8237 /* ??_F?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ */
8238 /* ??_F?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ */
8239 DEFINE_THISCALL_WRAPPER(time_put_short_ctor
, 4)
8240 time_put
* __thiscall
time_put_short_ctor(time_put
*this)
8242 time_put_wchar_ctor(this);
8243 this->facet
.vtable
= &MSVCP_time_put_short_vtable
;
8247 /* ??1?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
8248 /* ??1?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
8249 /* ??1?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
8250 /* ??1?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
8251 DEFINE_THISCALL_WRAPPER(time_put_wchar_dtor
, 4)
8252 void __thiscall
time_put_wchar_dtor(time_put
*this)
8254 TRACE("(%p)\n", this);
8255 _Timevec_dtor(&this->time
);
8258 DEFINE_THISCALL_WRAPPER(time_put_wchar_vector_dtor
, 8)
8259 time_put
* __thiscall
time_put_wchar_vector_dtor(time_put
*this, unsigned int flags
)
8261 TRACE("(%p %x)\n", this, flags
);
8263 /* we have an array, with the number of elements stored before the first object */
8264 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
8266 for(i
=*ptr
-1; i
>=0; i
--)
8267 time_put_wchar_dtor(this+i
);
8268 MSVCRT_operator_delete(ptr
);
8270 time_put_wchar_dtor(this);
8272 MSVCRT_operator_delete(this);
8278 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
8279 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
8280 static MSVCP_size_t
time_put_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
8282 TRACE("(%p %p)\n", facet
, loc
);
8284 if(facet
&& !*facet
) {
8285 *facet
= MSVCRT_operator_new(sizeof(time_put
));
8287 ERR("Out of memory\n");
8288 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8291 time_put_wchar_ctor_name((time_put
*)*facet
,
8292 MSVCP_basic_string_char_c_str(&loc
->ptr
->name
), 0);
8298 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
8299 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
8300 MSVCP_size_t __cdecl
time_put_wchar__Getcat_old(const locale_facet
**facet
)
8302 return time_put_wchar__Getcat(facet
, locale_classic());
8305 static time_put
* time_put_wchar_use_facet(const locale
*loc
)
8307 static time_put
*obj
= NULL
;
8310 const locale_facet
*fac
;
8312 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
8313 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_put_wchar_id
));
8315 _Lockit_dtor(&lock
);
8316 return (time_put
*)fac
;
8320 _Lockit_dtor(&lock
);
8324 time_put_wchar__Getcat(&fac
, loc
);
8325 obj
= (time_put
*)fac
;
8326 locale_facet__Incref(&obj
->facet
);
8327 locale_facet_register(&obj
->facet
);
8328 _Lockit_dtor(&lock
);
8333 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
8334 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
8335 static MSVCP_size_t
time_put_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
8337 TRACE("(%p %p)\n", facet
, loc
);
8339 if(facet
&& !*facet
) {
8340 *facet
= MSVCRT_operator_new(sizeof(time_put
));
8342 ERR("Out of memory\n");
8343 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8346 time_put_short_ctor_name((time_put
*)*facet
,
8347 MSVCP_basic_string_char_c_str(&loc
->ptr
->name
), 0);
8353 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
8354 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
8355 MSVCP_size_t __cdecl
time_put_short__Getcat_old(const locale_facet
**facet
)
8357 return time_put_short__Getcat(facet
, locale_classic());
8360 static time_put
* time_put_short_use_facet(const locale
*loc
)
8362 static time_put
*obj
= NULL
;
8365 const locale_facet
*fac
;
8367 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
8368 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_put_short_id
));
8370 _Lockit_dtor(&lock
);
8371 return (time_put
*)fac
;
8375 _Lockit_dtor(&lock
);
8379 time_put_short__Getcat(&fac
, loc
);
8380 obj
= (time_put
*)fac
;
8381 locale_facet__Incref(&obj
->facet
);
8382 locale_facet_register(&obj
->facet
);
8383 _Lockit_dtor(&lock
);
8388 /* ?do_put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBUtm@@DD@Z */
8389 /* ?do_put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBUtm@@DD@Z */
8390 /* ?do_put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBUtm@@DD@Z */
8391 /* ?do_put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBUtm@@DD@Z */
8392 DEFINE_THISCALL_WRAPPER(time_put_wchar_do_put
, 36)
8393 #define call_time_put_wchar_do_put(this, ret, dest, base, fill, t, spec, mod) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_wchar*, \
8394 (const time_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const struct tm*, char, char), \
8395 (this, ret, dest, base, fill, t, spec, mod))
8396 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_do_put(const time_put
*this,
8397 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
8398 wchar_t fill
, const struct tm
*t
, char spec
, char mod
)
8400 char buf
[64], fmt
[4], *p
= fmt
;
8401 MSVCP_size_t i
, len
;
8404 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
8412 len
= _Strftime(buf
, sizeof(buf
), fmt
, t
, this->time
.timeptr
);
8413 for(i
=0; i
<len
; i
++) {
8414 c
= mb_to_wc(buf
[i
], &this->cvt
);
8415 ostreambuf_iterator_wchar_put(&dest
, c
);
8422 /* ?put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBUtm@@DD@Z */
8423 /* ?put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBUtm@@DD@Z */
8424 /* ?put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBUtm@@DD@Z */
8425 /* ?put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBUtm@@DD@Z */
8426 DEFINE_THISCALL_WRAPPER(time_put_wchar_put
, 36)
8427 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_put(const time_put
*this,
8428 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
8429 wchar_t fill
, const struct tm
*t
, char spec
, char mod
)
8431 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
8432 return call_time_put_wchar_do_put(this, ret
, dest
, base
, fill
, t
, spec
, mod
);
8435 /* ?put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AAVios_base@2@GPBUtm@@PBG3@Z */
8436 /* ?put@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@GU?$char_traits@G@std@@@2@V32@AEAVios_base@2@GPEBUtm@@PEBG3@Z */
8437 /* ?put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AAVios_base@2@_WPBUtm@@PB_W4@Z */
8438 /* ?put@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@AEAVios_base@2@_WPEBUtm@@PEB_W4@Z */
8439 DEFINE_THISCALL_WRAPPER(time_put_wchar_put_format
, 36)
8440 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_put_format(const time_put
*this,
8441 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
8442 wchar_t fill
, const struct tm
*t
, const wchar_t *pat
, const wchar_t *pat_end
)
8444 wchar_t percent
= mb_to_wc('%', &this->cvt
);
8447 TRACE("(%p %p %p %c %p %s)\n", this, ret
, base
, fill
, t
, debugstr_wn(pat
, pat_end
-pat
));
8449 while(pat
< pat_end
) {
8450 if(*pat
!= percent
) {
8451 ostreambuf_iterator_wchar_put(&dest
, *pat
++);
8452 }else if(++pat
== pat_end
) {
8453 ostreambuf_iterator_wchar_put(&dest
, percent
);
8454 }else if(!_Wcrtomb(c
, *pat
, NULL
, &this->cvt
) || (*c
=='#' && pat
+1==pat_end
)) {
8455 ostreambuf_iterator_wchar_put(&dest
, percent
);
8456 ostreambuf_iterator_wchar_put(&dest
, *pat
++);
8459 if(!_Wcrtomb(c
, *pat
++, NULL
, &this->cvt
)) {
8460 ostreambuf_iterator_wchar_put(&dest
, percent
);
8461 ostreambuf_iterator_wchar_put(&dest
, *(pat
-1));
8462 ostreambuf_iterator_wchar_put(&dest
, *pat
);
8464 time_put_wchar_put(this, &dest
, dest
, base
, fill
, t
, *c
, '#');
8467 time_put_wchar_put(this, &dest
, dest
, base
, fill
, t
, *c
, 0);
8476 /* ??0_Locimp@locale@std@@AAE@_N@Z */
8477 /* ??0_Locimp@locale@std@@AEAA@_N@Z */
8478 DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor_transparent
, 8)
8479 locale__Locimp
* __thiscall
locale__Locimp_ctor_transparent(locale__Locimp
*this, MSVCP_bool transparent
)
8481 TRACE("(%p %d)\n", this, transparent
);
8483 memset(this, 0, sizeof(locale__Locimp
));
8484 locale_facet_ctor_refs(&this->facet
, 1);
8485 this->transparent
= transparent
;
8486 MSVCP_basic_string_char_ctor_cstr(&this->name
, "*");
8490 /* ??_F_Locimp@locale@std@@QAEXXZ */
8491 /* ??_F_Locimp@locale@std@@QEAAXXZ */
8492 DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor
, 4)
8493 locale__Locimp
* __thiscall
locale__Locimp_ctor(locale__Locimp
*this)
8495 return locale__Locimp_ctor_transparent(this, FALSE
);
8498 /* ??0_Locimp@locale@std@@AAE@ABV012@@Z */
8499 /* ??0_Locimp@locale@std@@AEAA@AEBV012@@Z */
8500 DEFINE_THISCALL_WRAPPER(locale__Locimp_copy_ctor
, 8)
8501 locale__Locimp
* __thiscall
locale__Locimp_copy_ctor(locale__Locimp
*this, const locale__Locimp
*copy
)
8506 TRACE("(%p %p)\n", this, copy
);
8508 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
8509 memcpy(this, copy
, sizeof(locale__Locimp
));
8510 locale_facet_ctor_refs(&this->facet
, 1);
8511 if(copy
->facetvec
) {
8512 this->facetvec
= MSVCRT_operator_new(copy
->facet_cnt
*sizeof(locale_facet
*));
8513 if(!this->facetvec
) {
8514 _Lockit_dtor(&lock
);
8515 ERR("Out of memory\n");
8516 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8519 for(i
=0; i
<this->facet_cnt
; i
++)
8521 this->facetvec
[i
] = copy
->facetvec
[i
];
8522 if(this->facetvec
[i
])
8523 locale_facet__Incref(this->facetvec
[i
]);
8526 MSVCP_basic_string_char_copy_ctor(&this->name
, ©
->name
);
8527 _Lockit_dtor(&lock
);
8531 /* ?_Locimp_ctor@_Locimp@locale@std@@CAXPAV123@ABV123@@Z */
8532 /* ?_Locimp_ctor@_Locimp@locale@std@@CAXPEAV123@AEBV123@@Z */
8533 locale__Locimp
* __cdecl
locale__Locimp__Locimp_ctor(locale__Locimp
*this, const locale__Locimp
*copy
)
8535 return locale__Locimp_copy_ctor(this, copy
);
8538 /* ??1_Locimp@locale@std@@MAE@XZ */
8539 /* ??1_Locimp@locale@std@@MEAA@XZ */
8540 DEFINE_THISCALL_WRAPPER(locale__Locimp_dtor
, 4)
8541 void __thiscall
locale__Locimp_dtor(locale__Locimp
*this)
8545 TRACE("(%p)\n", this);
8547 locale_facet_dtor(&this->facet
);
8548 for(i
=0; i
<this->facet_cnt
; i
++)
8549 if(this->facetvec
[i
] && locale_facet__Decref(this->facetvec
[i
]))
8550 call_locale_facet_vector_dtor(this->facetvec
[i
], 1);
8552 MSVCRT_operator_delete(this->facetvec
);
8553 MSVCP_basic_string_char_dtor(&this->name
);
8556 /* ?_Locimp_dtor@_Locimp@locale@std@@CAXPAV123@@Z */
8557 /* ?_Locimp_dtor@_Locimp@locale@std@@CAXPEAV123@@Z */
8558 void __cdecl
locale__Locimp__Locimp_dtor(locale__Locimp
*this)
8560 locale__Locimp_dtor(this);
8563 DEFINE_THISCALL_WRAPPER(locale__Locimp_vector_dtor
, 8)
8564 locale__Locimp
* __thiscall
locale__Locimp_vector_dtor(locale__Locimp
*this, unsigned int flags
)
8566 TRACE("(%p %x)\n", this, flags
);
8568 /* we have an array, with the number of elements stored before the first object */
8569 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
8571 for(i
=*ptr
-1; i
>=0; i
--)
8572 locale__Locimp_dtor(this+i
);
8573 MSVCRT_operator_delete(ptr
);
8575 locale__Locimp_dtor(this);
8577 MSVCRT_operator_delete(this);
8583 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z */
8584 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPEAV123@PEAVfacet@23@_K@Z */
8585 void __cdecl
locale__Locimp__Locimp_Addfac(locale__Locimp
*locimp
, locale_facet
*facet
, MSVCP_size_t id
)
8589 TRACE("(%p %p %lu)\n", locimp
, facet
, id
);
8591 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
8592 if(id
>= locimp
->facet_cnt
) {
8593 MSVCP_size_t new_size
= id
+1;
8594 locale_facet
**new_facetvec
;
8596 if(new_size
< locale_id__Id_cnt
+1)
8597 new_size
= locale_id__Id_cnt
+1;
8599 new_facetvec
= MSVCRT_operator_new(sizeof(locale_facet
*)*new_size
);
8601 _Lockit_dtor(&lock
);
8602 ERR("Out of memory\n");
8603 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8607 memset(new_facetvec
, 0, sizeof(locale_facet
*)*new_size
);
8608 memcpy(new_facetvec
, locimp
->facetvec
, sizeof(locale_facet
*)*locimp
->facet_cnt
);
8609 MSVCRT_operator_delete(locimp
->facetvec
);
8610 locimp
->facetvec
= new_facetvec
;
8611 locimp
->facet_cnt
= new_size
;
8614 if(locimp
->facetvec
[id
] && locale_facet__Decref(locimp
->facetvec
[id
]))
8615 call_locale_facet_vector_dtor(locimp
->facetvec
[id
], 1);
8617 locimp
->facetvec
[id
] = facet
;
8619 locale_facet__Incref(facet
);
8620 _Lockit_dtor(&lock
);
8623 /* ?_Addfac@_Locimp@locale@std@@AAEXPAVfacet@23@I@Z */
8624 /* ?_Addfac@_Locimp@locale@std@@AEAAXPEAVfacet@23@_K@Z */
8625 DEFINE_THISCALL_WRAPPER(locale__Locimp__Addfac
, 12)
8626 void __thiscall
locale__Locimp__Addfac(locale__Locimp
*this, locale_facet
*facet
, MSVCP_size_t id
)
8628 locale__Locimp__Locimp_Addfac(this, facet
, id
);
8631 /* ?_Clocptr_func@_Locimp@locale@std@@CAAAPAV123@XZ */
8632 /* ?_Clocptr_func@_Locimp@locale@std@@CAAEAPEAV123@XZ */
8633 locale__Locimp
** __cdecl
locale__Locimp__Clocptr_func(void)
8639 /* ?_Makeushloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
8640 /* ?_Makeushloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
8641 /* List of missing facets:
8642 * messages, money_get, money_put, moneypunct, moneypunct, time_get
8644 void __cdecl
locale__Locimp__Makeushloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
8646 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
8648 if(cat
& (1<<(ctype_short__Getcat(NULL
, NULL
)-1))) {
8652 ctype
= ctype_short_use_facet(loc
);
8654 ctype
= MSVCRT_operator_new(sizeof(ctype_wchar
));
8656 ERR("Out of memory\n");
8657 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8659 ctype_short_ctor_locinfo(ctype
, locinfo
, 0);
8661 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_short_id
));
8664 if(cat
& (1<<(num_get_short__Getcat(NULL
, NULL
)-1))) {
8668 numget
= num_get_short_use_facet(loc
);
8670 numget
= MSVCRT_operator_new(sizeof(num_get
));
8672 ERR("Out of memory\n");
8673 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8675 num_get_short_ctor_locinfo(numget
, locinfo
, 0);
8677 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_short_id
));
8680 if(cat
& (1<<(num_put_short__Getcat(NULL
, NULL
)-1))) {
8684 numput
= num_put_short_use_facet(loc
);
8686 numput
= MSVCRT_operator_new(sizeof(num_put
));
8688 ERR("Out of memory\n");
8689 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8691 num_put_short_ctor_locinfo(numput
, locinfo
, 0);
8693 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_short_id
));
8696 if(cat
& (1<<(numpunct_short__Getcat(NULL
, NULL
)-1))) {
8697 numpunct_wchar
*numpunct
;
8700 numpunct
= numpunct_short_use_facet(loc
);
8702 numpunct
= MSVCRT_operator_new(sizeof(numpunct_wchar
));
8704 ERR("Out of memory\n");
8705 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8707 numpunct_short_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
8709 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_short_id
));
8712 if(cat
& (1<<(collate_short__Getcat(NULL
, NULL
)-1))) {
8716 c
= collate_short_use_facet(loc
);
8718 c
= MSVCRT_operator_new(sizeof(collate
));
8720 ERR("Out of memory\n");
8721 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8723 collate_short_ctor_locinfo(c
, locinfo
, 0);
8725 locale__Locimp__Addfac(locimp
, &c
->facet
, locale_id_operator_size_t(&collate_short_id
));
8728 if(cat
& (1<<(time_put_short__Getcat(NULL
, NULL
)-1))) {
8732 t
= time_put_short_use_facet(loc
);
8734 t
= MSVCRT_operator_new(sizeof(time_put
));
8736 ERR("Out of memory\n");
8737 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8739 time_put_short_ctor_locinfo(t
, locinfo
, 0);
8741 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_put_short_id
));
8744 if(cat
& (1<<(codecvt_short__Getcat(NULL
, NULL
)-1))) {
8745 codecvt_wchar
*codecvt
;
8748 codecvt
= codecvt_short_use_facet(loc
);
8750 codecvt
= MSVCRT_operator_new(sizeof(codecvt_wchar
));
8752 ERR("Out of memory\n");
8753 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8755 codecvt_short_ctor_locinfo(codecvt
, locinfo
, 0);
8757 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_short_id
));
8761 /* ?_Makewloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
8762 /* ?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
8763 /* List of missing facets:
8764 * messages, money_get, money_put, moneypunct, moneypunct, time_get
8766 void __cdecl
locale__Locimp__Makewloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
8768 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
8770 if(cat
& (1<<(ctype_wchar__Getcat(NULL
, NULL
)-1))) {
8774 ctype
= ctype_wchar_use_facet(loc
);
8776 ctype
= MSVCRT_operator_new(sizeof(ctype_wchar
));
8778 ERR("Out of memory\n");
8779 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8781 ctype_wchar_ctor_locinfo(ctype
, locinfo
, 0);
8783 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_wchar_id
));
8786 if(cat
& (1<<(num_get_wchar__Getcat(NULL
, NULL
)-1))) {
8790 numget
= num_get_wchar_use_facet(loc
);
8792 numget
= MSVCRT_operator_new(sizeof(num_get
));
8794 ERR("Out of memory\n");
8795 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8797 num_get_wchar_ctor_locinfo(numget
, locinfo
, 0);
8799 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_wchar_id
));
8802 if(cat
& (1<<(num_put_wchar__Getcat(NULL
, NULL
)-1))) {
8806 numput
= num_put_wchar_use_facet(loc
);
8808 numput
= MSVCRT_operator_new(sizeof(num_put
));
8810 ERR("Out of memory\n");
8811 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8813 num_put_wchar_ctor_locinfo(numput
, locinfo
, 0);
8815 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_wchar_id
));
8818 if(cat
& (1<<(numpunct_wchar__Getcat(NULL
, NULL
)-1))) {
8819 numpunct_wchar
*numpunct
;
8822 numpunct
= numpunct_wchar_use_facet(loc
);
8824 numpunct
= MSVCRT_operator_new(sizeof(numpunct_wchar
));
8826 ERR("Out of memory\n");
8827 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8829 numpunct_wchar_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
8831 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_wchar_id
));
8834 if(cat
& (1<<(collate_wchar__Getcat(NULL
, NULL
)-1))) {
8838 c
= collate_wchar_use_facet(loc
);
8840 c
= MSVCRT_operator_new(sizeof(collate
));
8842 ERR("Out of memory\n");
8843 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8845 collate_wchar_ctor_locinfo(c
, locinfo
, 0);
8847 locale__Locimp__Addfac(locimp
, &c
->facet
, locale_id_operator_size_t(&collate_wchar_id
));
8850 if(cat
& (1<<(time_put_wchar__Getcat(NULL
, NULL
)-1))) {
8854 t
= time_put_wchar_use_facet(loc
);
8856 t
= MSVCRT_operator_new(sizeof(time_put
));
8858 ERR("Out of memory\n");
8859 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8861 time_put_wchar_ctor_locinfo(t
, locinfo
, 0);
8863 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_put_wchar_id
));
8866 if(cat
& (1<<(codecvt_wchar__Getcat(NULL
, NULL
)-1))) {
8867 codecvt_wchar
*codecvt
;
8870 codecvt
= codecvt_wchar_use_facet(loc
);
8872 codecvt
= MSVCRT_operator_new(sizeof(codecvt_wchar
));
8874 ERR("Out of memory\n");
8875 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8877 codecvt_wchar_ctor_locinfo(codecvt
, locinfo
, 0);
8879 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_wchar_id
));
8883 /* ?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
8884 /* ?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
8885 /* List of missing facets:
8886 * messages, money_get, money_put, moneypunct, moneypunct, time_get
8888 void __cdecl
locale__Locimp__Makexloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
8890 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
8892 if(cat
& (1<<(ctype_char__Getcat(NULL
, NULL
)-1))) {
8896 ctype
= ctype_char_use_facet(loc
);
8898 ctype
= MSVCRT_operator_new(sizeof(ctype_char
));
8900 ERR("Out of memory\n");
8901 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8903 ctype_char_ctor_locinfo(ctype
, locinfo
, 0);
8905 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_char_id
));
8908 if(cat
& (1<<(num_get_char__Getcat(NULL
, NULL
)-1))) {
8912 numget
= num_get_char_use_facet(loc
);
8914 numget
= MSVCRT_operator_new(sizeof(num_get
));
8916 ERR("Out of memory\n");
8917 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8919 num_get_char_ctor_locinfo(numget
, locinfo
, 0);
8921 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_char_id
));
8924 if(cat
& (1<<(num_put_char__Getcat(NULL
, NULL
)-1))) {
8928 numput
= num_put_char_use_facet(loc
);
8930 numput
= MSVCRT_operator_new(sizeof(num_put
));
8932 ERR("Out of memory\n");
8933 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8935 num_put_char_ctor_locinfo(numput
, locinfo
, 0);
8937 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_char_id
));
8940 if(cat
& (1<<(numpunct_char__Getcat(NULL
, NULL
)-1))) {
8941 numpunct_char
*numpunct
;
8944 numpunct
= numpunct_char_use_facet(loc
);
8946 numpunct
= MSVCRT_operator_new(sizeof(numpunct_char
));
8948 ERR("Out of memory\n");
8949 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8951 numpunct_char_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
8953 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_char_id
));
8956 if(cat
& (1<<(collate_char__Getcat(NULL
, NULL
)-1))) {
8960 c
= collate_char_use_facet(loc
);
8962 c
= MSVCRT_operator_new(sizeof(collate
));
8964 ERR("Out of memory\n");
8965 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8967 collate_char_ctor_locinfo(c
, locinfo
, 0);
8969 locale__Locimp__Addfac(locimp
, &c
->facet
, locale_id_operator_size_t(&collate_char_id
));
8972 if(cat
& (1<<(time_put_char__Getcat(NULL
, NULL
)-1))) {
8976 t
= time_put_char_use_facet(loc
);
8978 t
= MSVCRT_operator_new(sizeof(time_put
));
8980 ERR("Out of memory\n");
8981 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8983 time_put_char_ctor_locinfo(t
, locinfo
, 0);
8985 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_put_char_id
));
8988 if(cat
& (1<<(codecvt_char__Getcat(NULL
, NULL
)-1))) {
8989 codecvt_char
*codecvt
;
8992 codecvt
= codecvt_char_use_facet(loc
);
8994 codecvt
= MSVCRT_operator_new(sizeof(codecvt_char
));
8996 ERR("Out of memory\n");
8997 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8999 codecvt_char_ctor_locinfo(codecvt
, locinfo
, 0);
9001 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_char_id
));
9005 /* ?_Makeloc@_Locimp@locale@std@@CAPAV123@ABV_Locinfo@3@HPAV123@PBV23@@Z */
9006 /* ?_Makeloc@_Locimp@locale@std@@CAPEAV123@AEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
9007 locale__Locimp
* __cdecl
locale__Locimp__Makeloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
9009 TRACE("(%p %d %p %p)\n", locinfo
, cat
, locimp
, loc
);
9011 locale__Locimp__Makexloc(locinfo
, cat
, locimp
, loc
);
9012 locale__Locimp__Makewloc(locinfo
, cat
, locimp
, loc
);
9013 locale__Locimp__Makeushloc(locinfo
, cat
, locimp
, loc
);
9015 locimp
->catmask
|= cat
;
9016 MSVCP_basic_string_char_assign(&locimp
->name
, &locinfo
->newlocname
);
9020 /* ??_7_Locimp@locale@std@@6B@ */
9021 const vtable_ptr MSVCP_locale__Locimp_vtable
[] = {
9022 (vtable_ptr
)THISCALL_NAME(locale__Locimp_vector_dtor
)
9025 /* ??0locale@std@@AAE@PAV_Locimp@01@@Z */
9026 /* ??0locale@std@@AEAA@PEAV_Locimp@01@@Z */
9027 DEFINE_THISCALL_WRAPPER(locale_ctor_locimp
, 8)
9028 locale
* __thiscall
locale_ctor_locimp(locale
*this, locale__Locimp
*locimp
)
9030 TRACE("(%p %p)\n", this, locimp
);
9031 /* Don't change locimp reference counter */
9036 /* ?_Init@locale@std@@CAPAV_Locimp@12@XZ */
9037 /* ?_Init@locale@std@@CAPEAV_Locimp@12@XZ */
9038 locale__Locimp
* __cdecl
locale__Init(void)
9044 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
9046 _Lockit_dtor(&lock
);
9047 return global_locale
;
9050 global_locale
= MSVCRT_operator_new(sizeof(locale__Locimp
));
9051 if(!global_locale
) {
9052 _Lockit_dtor(&lock
);
9053 ERR("Out of memory\n");
9054 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
9058 locale__Locimp_ctor(global_locale
);
9059 global_locale
->catmask
= (1<<(LC_MAX
+1))-1;
9060 MSVCP_basic_string_char_dtor(&global_locale
->name
);
9061 MSVCP_basic_string_char_ctor_cstr(&global_locale
->name
, "C");
9063 locale__Locimp__Clocptr
= global_locale
;
9064 global_locale
->facet
.refs
++;
9065 locale_ctor_locimp(&classic_locale
, locale__Locimp__Clocptr
);
9066 _Lockit_dtor(&lock
);
9068 return global_locale
;
9071 /* ??0locale@std@@QAE@ABV01@0H@Z */
9072 /* ??0locale@std@@QEAA@AEBV01@0H@Z */
9073 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_locale
, 16)
9074 locale
* __thiscall
locale_ctor_locale_locale(locale
*this, const locale
*loc
, const locale
*other
, category cat
)
9078 TRACE("(%p %p %p %d)\n", this, loc
, other
, cat
);
9080 this->ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
9082 ERR("Out of memory\n");
9083 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
9085 locale__Locimp_copy_ctor(this->ptr
, loc
->ptr
);
9087 _Locinfo_ctor_cat_cstr(&locinfo
, loc
->ptr
->catmask
, MSVCP_basic_string_char_c_str(&loc
->ptr
->name
));
9088 _Locinfo__Addcats(&locinfo
, cat
& other
->ptr
->catmask
, MSVCP_basic_string_char_c_str(&other
->ptr
->name
));
9089 locale__Locimp__Makeloc(&locinfo
, cat
, this->ptr
, other
);
9090 _Locinfo_dtor(&locinfo
);
9095 /* ??0locale@std@@QAE@ABV01@@Z */
9096 /* ??0locale@std@@QEAA@AEBV01@@Z */
9097 DEFINE_THISCALL_WRAPPER(locale_copy_ctor
, 8)
9098 locale
* __thiscall
locale_copy_ctor(locale
*this, const locale
*copy
)
9100 TRACE("(%p %p)\n", this, copy
);
9101 this->ptr
= copy
->ptr
;
9102 locale_facet__Incref(&this->ptr
->facet
);
9106 /* ??0locale@std@@QAE@ABV01@PBDH@Z */
9107 /* ??0locale@std@@QEAA@AEBV01@PEBDH@Z */
9108 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_cstr
, 16)
9109 locale
* __thiscall
locale_ctor_locale_cstr(locale
*this, const locale
*loc
, const char *locname
, category cat
)
9111 FIXME("(%p %p %s %d) stub\n", this, loc
, locname
, cat
);
9115 /* ??0locale@std@@QAE@PBDH@Z */
9116 /* ??0locale@std@@QEAA@PEBDH@Z */
9117 DEFINE_THISCALL_WRAPPER(locale_ctor_cstr
, 12)
9118 locale
* __thiscall
locale_ctor_cstr(locale
*this, const char *locname
, category cat
)
9122 TRACE("(%p %s %d)\n", this, locname
, cat
);
9124 this->ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
9126 ERR("Out of memory\n");
9127 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
9129 locale__Locimp_ctor(this->ptr
);
9133 _Locinfo_ctor_cat_cstr(&locinfo
, cat
, locname
);
9134 if(!memcmp(MSVCP_basic_string_char_c_str(&locinfo
.newlocname
), "*", 2)) {
9135 _Locinfo_dtor(&locinfo
);
9136 MSVCRT_operator_delete(this->ptr
);
9137 throw_exception(EXCEPTION_RUNTIME_ERROR
, "bad locale name");
9140 locale__Locimp__Makeloc(&locinfo
, cat
, this->ptr
, NULL
);
9141 _Locinfo_dtor(&locinfo
);
9146 /* ??0locale@std@@QAE@W4_Uninitialized@1@@Z */
9147 /* ??0locale@std@@QEAA@W4_Uninitialized@1@@Z */
9148 DEFINE_THISCALL_WRAPPER(locale_ctor_uninitialized
, 8)
9149 locale
* __thiscall
locale_ctor_uninitialized(locale
*this, int uninitialized
)
9151 TRACE("(%p)\n", this);
9156 /* ??0locale@std@@QAE@XZ */
9157 /* ??0locale@std@@QEAA@XZ */
9158 DEFINE_THISCALL_WRAPPER(locale_ctor
, 4)
9159 locale
* __thiscall
locale_ctor(locale
*this)
9161 TRACE("(%p)\n", this);
9162 this->ptr
= locale__Init();
9163 locale_facet__Incref(&this->ptr
->facet
);
9167 /* ??1locale@std@@QAE@XZ */
9168 /* ??1locale@std@@QEAA@XZ */
9169 DEFINE_THISCALL_WRAPPER(locale_dtor
, 4)
9170 void __thiscall
locale_dtor(locale
*this)
9172 TRACE("(%p)\n", this);
9173 if(this->ptr
&& locale_facet__Decref(&this->ptr
->facet
))
9175 locale__Locimp_dtor(this->ptr
);
9176 MSVCRT_operator_delete(this->ptr
);
9180 /* ??4locale@std@@QAEAAV01@ABV01@@Z */
9181 /* ??4locale@std@@QEAAAEAV01@AEBV01@@Z */
9182 DEFINE_THISCALL_WRAPPER(locale_operator_assign
, 8)
9183 locale
* __thiscall
locale_operator_assign(locale
*this, const locale
*loc
)
9185 FIXME("(%p %p) stub\n", this, loc
);
9189 /* ??8locale@std@@QBE_NABV01@@Z */
9190 /* ??8locale@std@@QEBA_NAEBV01@@Z */
9191 DEFINE_THISCALL_WRAPPER(locale_operator_equal
, 8)
9192 MSVCP_bool __thiscall
locale_operator_equal(const locale
*this, const locale
*loc
)
9194 FIXME("(%p %p) stub\n", this, loc
);
9198 /* ??9locale@std@@QBE_NABV01@@Z */
9199 /* ??9locale@std@@QEBA_NAEBV01@@Z */
9200 DEFINE_THISCALL_WRAPPER(locale_operator_not_equal
, 8)
9201 MSVCP_bool __thiscall
locale_operator_not_equal(const locale
*this, locale
const *loc
)
9203 FIXME("(%p %p) stub\n", this, loc
);
9207 /* ?_Addfac@locale@std@@QAEAAV12@PAVfacet@12@II@Z */
9208 /* ?_Addfac@locale@std@@QEAAAEAV12@PEAVfacet@12@_K1@Z */
9209 DEFINE_THISCALL_WRAPPER(locale__Addfac
, 16)
9210 locale
* __thiscall
locale__Addfac(locale
*this, locale_facet
*facet
, MSVCP_size_t id
, MSVCP_size_t catmask
)
9212 TRACE("(%p %p %lu %lu)\n", this, facet
, id
, catmask
);
9214 if(this->ptr
->facet
.refs
> 1) {
9215 locale__Locimp
*new_ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
9217 ERR("Out of memory\n");
9218 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
9221 locale__Locimp_copy_ctor(new_ptr
, this->ptr
);
9222 locale_facet__Decref(&this->ptr
->facet
);
9223 this->ptr
= new_ptr
;
9226 locale__Locimp__Addfac(this->ptr
, facet
, id
);
9229 MSVCP_basic_string_char_dtor(&this->ptr
->name
);
9230 MSVCP_basic_string_char_ctor_cstr(&this->ptr
->name
, "*");
9235 /* ?_Getfacet@locale@std@@QBEPBVfacet@12@I@Z */
9236 /* ?_Getfacet@locale@std@@QEBAPEBVfacet@12@_K@Z */
9237 DEFINE_THISCALL_WRAPPER(locale__Getfacet
, 8)
9238 const locale_facet
* __thiscall
locale__Getfacet(const locale
*this, MSVCP_size_t id
)
9242 TRACE("(%p %lu)\n", this, id
);
9244 fac
= id
< this->ptr
->facet_cnt
? this->ptr
->facetvec
[id
] : NULL
;
9245 if(fac
|| !this->ptr
->transparent
)
9248 return id
< global_locale
->facet_cnt
? global_locale
->facetvec
[id
] : NULL
;
9251 /* ?_Getgloballocale@locale@std@@CAPAV_Locimp@12@XZ */
9252 /* ?_Getgloballocale@locale@std@@CAPEAV_Locimp@12@XZ */
9253 locale__Locimp
* __cdecl
locale__Getgloballocale(void)
9256 return global_locale
;
9259 /* ?_Setgloballocale@locale@std@@CAXPAX@Z */
9260 /* ?_Setgloballocale@locale@std@@CAXPEAX@Z */
9261 void __cdecl
locale__Setgloballocale(void *locimp
)
9263 TRACE("(%p)\n", locimp
);
9264 global_locale
= locimp
;
9267 /* ?classic@locale@std@@SAABV12@XZ */
9268 /* ?classic@locale@std@@SAAEBV12@XZ */
9269 const locale
* __cdecl
locale_classic(void)
9273 return &classic_locale
;
9276 /* ?empty@locale@std@@SA?AV12@XZ */
9277 locale
* __cdecl
locale_empty(locale
*ret
)
9283 ret
->ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
9285 ERR("Out of memory\n");
9286 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
9288 locale__Locimp_ctor_transparent(ret
->ptr
, TRUE
);
9292 /* ?name@locale@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
9293 /* ?name@locale@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
9294 DEFINE_THISCALL_WRAPPER(locale_name
, 8)
9295 basic_string_char
* __thiscall
locale_name(const locale
*this, basic_string_char
*ret
)
9297 TRACE( "(%p)\n", this);
9298 MSVCP_basic_string_char_copy_ctor(ret
, &this->ptr
->name
);
9302 /* ?global@locale@std@@SA?AV12@ABV12@@Z */
9303 /* ?global@locale@std@@SA?AV12@AEBV12@@Z */
9304 locale
* __cdecl
locale_global(locale
*ret
, const locale
*loc
)
9309 TRACE("(%p %p)\n", loc
, ret
);
9311 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
9314 if(loc
->ptr
!= global_locale
) {
9315 locale_facet__Decref(&global_locale
->facet
);
9316 global_locale
= loc
->ptr
;
9317 locale_facet__Incref(&global_locale
->facet
);
9319 for(i
=LC_ALL
+1; i
<=LC_MAX
; i
++) {
9320 if((global_locale
->catmask
& (1<<(i
-1))) == 0)
9322 setlocale(i
, MSVCP_basic_string_char_c_str(&global_locale
->name
));
9325 _Lockit_dtor(&lock
);
9330 wctrans_t __cdecl
wctrans(const char *property
)
9332 static const char str_tolower
[] = "tolower";
9333 static const char str_toupper
[] = "toupper";
9335 if(!strcmp(property
, str_tolower
))
9337 if(!strcmp(property
, str_toupper
))
9343 wint_t __cdecl
towctrans(wint_t c
, wctrans_t category
)
9350 DEFINE_RTTI_DATA0(locale_facet
, 0, ".?AVfacet@locale@std@@")
9351 DEFINE_RTTI_DATA1(collate_char
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@D@std@@")
9352 DEFINE_RTTI_DATA1(collate_wchar
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@_W@std@@")
9353 DEFINE_RTTI_DATA1(collate_short
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@G@std@@")
9354 DEFINE_RTTI_DATA1(ctype_base
, 0, &locale_facet_rtti_base_descriptor
, ".?AUctype_base@std@@")
9355 DEFINE_RTTI_DATA2(ctype_char
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@D@std@@")
9356 DEFINE_RTTI_DATA2(ctype_wchar
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@_W@std@@")
9357 DEFINE_RTTI_DATA2(ctype_short
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@G@std@@")
9358 DEFINE_RTTI_DATA1(codecvt_base
, 0, &locale_facet_rtti_base_descriptor
, ".?AVcodecvt_base@std@@")
9359 DEFINE_RTTI_DATA2(codecvt_char
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@DDH@std@@")
9360 DEFINE_RTTI_DATA2(codecvt_wchar
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@_WDH@std@@")
9361 DEFINE_RTTI_DATA2(codecvt_short
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@GDH@std@@")
9362 DEFINE_RTTI_DATA1(numpunct_char
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@D@std@@")
9363 DEFINE_RTTI_DATA1(numpunct_wchar
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@_W@std@@")
9364 DEFINE_RTTI_DATA1(numpunct_short
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@G@std@@")
9365 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@@")
9366 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@@")
9367 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@@")
9368 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@@")
9369 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@@")
9370 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@@")
9371 DEFINE_RTTI_DATA1(time_put_char
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@")
9372 DEFINE_RTTI_DATA1(time_put_wchar
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@")
9373 DEFINE_RTTI_DATA1(time_put_short
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@")
9376 void __asm_dummy_vtables(void) {
9378 __ASM_VTABLE(locale_facet
,
9379 VTABLE_ADD_FUNC(locale_facet_vector_dtor
));
9380 __ASM_VTABLE(collate_char
,
9381 VTABLE_ADD_FUNC(collate_char_vector_dtor
)
9382 VTABLE_ADD_FUNC(collate_char_do_compare
)
9383 VTABLE_ADD_FUNC(collate_char_do_transform
)
9384 VTABLE_ADD_FUNC(collate_char_do_hash
));
9385 __ASM_VTABLE(collate_wchar
,
9386 VTABLE_ADD_FUNC(collate_wchar_vector_dtor
)
9387 VTABLE_ADD_FUNC(collate_wchar_do_compare
)
9388 VTABLE_ADD_FUNC(collate_wchar_do_transform
)
9389 VTABLE_ADD_FUNC(collate_wchar_do_hash
));
9390 __ASM_VTABLE(collate_short
,
9391 VTABLE_ADD_FUNC(collate_wchar_vector_dtor
)
9392 VTABLE_ADD_FUNC(collate_wchar_do_compare
)
9393 VTABLE_ADD_FUNC(collate_wchar_do_transform
)
9394 VTABLE_ADD_FUNC(collate_wchar_do_hash
));
9395 __ASM_VTABLE(ctype_base
,
9396 VTABLE_ADD_FUNC(ctype_base_vector_dtor
));
9397 __ASM_VTABLE(ctype_char
,
9398 VTABLE_ADD_FUNC(ctype_char_vector_dtor
)
9399 VTABLE_ADD_FUNC(ctype_char_do_tolower
)
9400 VTABLE_ADD_FUNC(ctype_char_do_tolower_ch
)
9401 VTABLE_ADD_FUNC(ctype_char_do_toupper
)
9402 VTABLE_ADD_FUNC(ctype_char_do_toupper_ch
)
9403 VTABLE_ADD_FUNC(ctype_char_do_widen
)
9404 VTABLE_ADD_FUNC(ctype_char_do_widen_ch
)
9405 VTABLE_ADD_FUNC(ctype_char__Do_widen_s
)
9406 VTABLE_ADD_FUNC(ctype_char_do_narrow
)
9407 VTABLE_ADD_FUNC(ctype_char_do_narrow_ch
)
9408 VTABLE_ADD_FUNC(ctype_char__Do_narrow_s
));
9409 __ASM_VTABLE(ctype_wchar
,
9410 VTABLE_ADD_FUNC(ctype_wchar_vector_dtor
)
9411 VTABLE_ADD_FUNC(ctype_wchar_do_is
)
9412 VTABLE_ADD_FUNC(ctype_wchar_do_is_ch
)
9413 VTABLE_ADD_FUNC(ctype_wchar_do_scan_is
)
9414 VTABLE_ADD_FUNC(ctype_wchar_do_scan_not
)
9415 VTABLE_ADD_FUNC(ctype_wchar_do_tolower
)
9416 VTABLE_ADD_FUNC(ctype_wchar_do_tolower_ch
)
9417 VTABLE_ADD_FUNC(ctype_wchar_do_toupper
)
9418 VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch
)
9419 VTABLE_ADD_FUNC(ctype_wchar_do_widen
)
9420 VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch
)
9421 VTABLE_ADD_FUNC(ctype_wchar__Do_widen_s
)
9422 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
9423 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
)
9424 VTABLE_ADD_FUNC(ctype_wchar__Do_narrow_s
));
9425 __ASM_VTABLE(ctype_short
,
9426 VTABLE_ADD_FUNC(ctype_wchar_vector_dtor
)
9427 VTABLE_ADD_FUNC(ctype_wchar_do_is
)
9428 VTABLE_ADD_FUNC(ctype_wchar_do_is_ch
)
9429 VTABLE_ADD_FUNC(ctype_wchar_do_scan_is
)
9430 VTABLE_ADD_FUNC(ctype_wchar_do_scan_not
)
9431 VTABLE_ADD_FUNC(ctype_wchar_do_tolower
)
9432 VTABLE_ADD_FUNC(ctype_wchar_do_tolower_ch
)
9433 VTABLE_ADD_FUNC(ctype_wchar_do_toupper
)
9434 VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch
)
9435 VTABLE_ADD_FUNC(ctype_wchar_do_widen
)
9436 VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch
)
9437 VTABLE_ADD_FUNC(ctype_wchar__Do_widen_s
)
9438 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
9439 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
)
9440 VTABLE_ADD_FUNC(ctype_wchar__Do_narrow_s
));
9441 __ASM_VTABLE(codecvt_base
,
9442 VTABLE_ADD_FUNC(codecvt_base_vector_dtor
)
9443 VTABLE_ADD_FUNC(codecvt_base_do_always_noconv
)
9444 VTABLE_ADD_FUNC(codecvt_base_do_max_length
)
9445 VTABLE_ADD_FUNC(codecvt_base_do_encoding
));
9446 __ASM_VTABLE(codecvt_char
,
9447 VTABLE_ADD_FUNC(codecvt_char_vector_dtor
)
9448 VTABLE_ADD_FUNC(codecvt_base_do_always_noconv
)
9449 VTABLE_ADD_FUNC(codecvt_base_do_max_length
)
9450 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
9451 VTABLE_ADD_FUNC(codecvt_char_do_in
)
9452 VTABLE_ADD_FUNC(codecvt_char_do_out
)
9453 VTABLE_ADD_FUNC(codecvt_char_do_unshift
)
9454 VTABLE_ADD_FUNC(codecvt_char_do_length
));
9455 __ASM_VTABLE(codecvt_wchar
,
9456 VTABLE_ADD_FUNC(codecvt_wchar_vector_dtor
)
9457 VTABLE_ADD_FUNC(codecvt_wchar_do_always_noconv
)
9458 VTABLE_ADD_FUNC(codecvt_wchar_do_max_length
)
9459 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
9460 VTABLE_ADD_FUNC(codecvt_wchar_do_in
)
9461 VTABLE_ADD_FUNC(codecvt_wchar_do_out
)
9462 VTABLE_ADD_FUNC(codecvt_wchar_do_unshift
)
9463 VTABLE_ADD_FUNC(codecvt_wchar_do_length
));
9464 __ASM_VTABLE(codecvt_short
,
9465 VTABLE_ADD_FUNC(codecvt_wchar_vector_dtor
)
9466 VTABLE_ADD_FUNC(codecvt_wchar_do_always_noconv
)
9467 VTABLE_ADD_FUNC(codecvt_wchar_do_max_length
)
9468 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
9469 VTABLE_ADD_FUNC(codecvt_wchar_do_in
)
9470 VTABLE_ADD_FUNC(codecvt_wchar_do_out
)
9471 VTABLE_ADD_FUNC(codecvt_wchar_do_unshift
)
9472 VTABLE_ADD_FUNC(codecvt_wchar_do_length
));
9473 __ASM_VTABLE(numpunct_char
,
9474 VTABLE_ADD_FUNC(numpunct_char_vector_dtor
)
9475 VTABLE_ADD_FUNC(numpunct_char_do_decimal_point
)
9476 VTABLE_ADD_FUNC(numpunct_char_do_thousands_sep
)
9477 VTABLE_ADD_FUNC(numpunct_char_do_grouping
)
9478 VTABLE_ADD_FUNC(numpunct_char_do_falsename
)
9479 VTABLE_ADD_FUNC(numpunct_char_do_truename
));
9480 __ASM_VTABLE(numpunct_wchar
,
9481 VTABLE_ADD_FUNC(numpunct_wchar_vector_dtor
)
9482 VTABLE_ADD_FUNC(numpunct_wchar_do_decimal_point
)
9483 VTABLE_ADD_FUNC(numpunct_wchar_do_thousands_sep
)
9484 VTABLE_ADD_FUNC(numpunct_wchar_do_grouping
)
9485 VTABLE_ADD_FUNC(numpunct_wchar_do_falsename
)
9486 VTABLE_ADD_FUNC(numpunct_wchar_do_truename
));
9487 __ASM_VTABLE(numpunct_short
,
9488 VTABLE_ADD_FUNC(numpunct_wchar_vector_dtor
)
9489 VTABLE_ADD_FUNC(numpunct_wchar_do_decimal_point
)
9490 VTABLE_ADD_FUNC(numpunct_wchar_do_thousands_sep
)
9491 VTABLE_ADD_FUNC(numpunct_wchar_do_grouping
)
9492 VTABLE_ADD_FUNC(numpunct_wchar_do_falsename
)
9493 VTABLE_ADD_FUNC(numpunct_wchar_do_truename
));
9494 __ASM_VTABLE(num_get_char
,
9495 VTABLE_ADD_FUNC(num_get_char_vector_dtor
)
9496 VTABLE_ADD_FUNC(num_get_char_do_get_void
)
9497 VTABLE_ADD_FUNC(num_get_char_do_get_double
)
9498 VTABLE_ADD_FUNC(num_get_char_do_get_double
)
9499 VTABLE_ADD_FUNC(num_get_char_do_get_float
)
9500 VTABLE_ADD_FUNC(num_get_char_do_get_uint64
)
9501 VTABLE_ADD_FUNC(num_get_char_do_get_int64
)
9502 VTABLE_ADD_FUNC(num_get_char_do_get_ulong
)
9503 VTABLE_ADD_FUNC(num_get_char_do_get_long
)
9504 VTABLE_ADD_FUNC(num_get_char_do_get_uint
)
9505 VTABLE_ADD_FUNC(num_get_char_do_get_ushort
)
9506 VTABLE_ADD_FUNC(num_get_char_do_get_bool
));
9507 __ASM_VTABLE(num_get_short
,
9508 VTABLE_ADD_FUNC(num_get_wchar_vector_dtor
)
9509 VTABLE_ADD_FUNC(num_get_short_do_get_void
)
9510 VTABLE_ADD_FUNC(num_get_short_do_get_double
)
9511 VTABLE_ADD_FUNC(num_get_short_do_get_double
)
9512 VTABLE_ADD_FUNC(num_get_short_do_get_float
)
9513 VTABLE_ADD_FUNC(num_get_short_do_get_uint64
)
9514 VTABLE_ADD_FUNC(num_get_short_do_get_int64
)
9515 VTABLE_ADD_FUNC(num_get_short_do_get_ulong
)
9516 VTABLE_ADD_FUNC(num_get_short_do_get_long
)
9517 VTABLE_ADD_FUNC(num_get_short_do_get_uint
)
9518 VTABLE_ADD_FUNC(num_get_short_do_get_ushort
)
9519 VTABLE_ADD_FUNC(num_get_short_do_get_bool
));
9520 __ASM_VTABLE(num_get_wchar
,
9521 VTABLE_ADD_FUNC(num_get_wchar_vector_dtor
)
9522 VTABLE_ADD_FUNC(num_get_wchar_do_get_void
)
9523 VTABLE_ADD_FUNC(num_get_wchar_do_get_double
)
9524 VTABLE_ADD_FUNC(num_get_wchar_do_get_double
)
9525 VTABLE_ADD_FUNC(num_get_wchar_do_get_float
)
9526 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint64
)
9527 VTABLE_ADD_FUNC(num_get_wchar_do_get_int64
)
9528 VTABLE_ADD_FUNC(num_get_wchar_do_get_ulong
)
9529 VTABLE_ADD_FUNC(num_get_wchar_do_get_long
)
9530 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint
)
9531 VTABLE_ADD_FUNC(num_get_wchar_do_get_ushort
)
9532 VTABLE_ADD_FUNC(num_get_wchar_do_get_bool
));
9533 __ASM_VTABLE(num_put_char
,
9534 VTABLE_ADD_FUNC(num_put_char_vector_dtor
)
9535 VTABLE_ADD_FUNC(num_put_char_do_put_ptr
)
9536 VTABLE_ADD_FUNC(num_put_char_do_put_double
)
9537 VTABLE_ADD_FUNC(num_put_char_do_put_double
)
9538 VTABLE_ADD_FUNC(num_put_char_do_put_uint64
)
9539 VTABLE_ADD_FUNC(num_put_char_do_put_int64
)
9540 VTABLE_ADD_FUNC(num_put_char_do_put_ulong
)
9541 VTABLE_ADD_FUNC(num_put_char_do_put_long
)
9542 VTABLE_ADD_FUNC(num_put_char_do_put_bool
));
9543 __ASM_VTABLE(num_put_wchar
,
9544 VTABLE_ADD_FUNC(num_put_wchar_vector_dtor
)
9545 VTABLE_ADD_FUNC(num_put_wchar_do_put_ptr
)
9546 VTABLE_ADD_FUNC(num_put_wchar_do_put_double
)
9547 VTABLE_ADD_FUNC(num_put_wchar_do_put_double
)
9548 VTABLE_ADD_FUNC(num_put_wchar_do_put_uint64
)
9549 VTABLE_ADD_FUNC(num_put_wchar_do_put_int64
)
9550 VTABLE_ADD_FUNC(num_put_wchar_do_put_ulong
)
9551 VTABLE_ADD_FUNC(num_put_wchar_do_put_long
)
9552 VTABLE_ADD_FUNC(num_put_wchar_do_put_bool
));
9553 __ASM_VTABLE(num_put_short
,
9554 VTABLE_ADD_FUNC(num_put_wchar_vector_dtor
)
9555 VTABLE_ADD_FUNC(num_put_short_do_put_ptr
)
9556 VTABLE_ADD_FUNC(num_put_short_do_put_double
)
9557 VTABLE_ADD_FUNC(num_put_short_do_put_double
)
9558 VTABLE_ADD_FUNC(num_put_short_do_put_uint64
)
9559 VTABLE_ADD_FUNC(num_put_short_do_put_int64
)
9560 VTABLE_ADD_FUNC(num_put_short_do_put_ulong
)
9561 VTABLE_ADD_FUNC(num_put_short_do_put_long
)
9562 VTABLE_ADD_FUNC(num_put_short_do_put_bool
));
9563 __ASM_VTABLE(time_put_char
,
9564 VTABLE_ADD_FUNC(time_put_char_vector_dtor
)
9565 VTABLE_ADD_FUNC(time_put_char_do_put
));
9566 __ASM_VTABLE(time_put_wchar
,
9567 VTABLE_ADD_FUNC(time_put_wchar_vector_dtor
)
9568 VTABLE_ADD_FUNC(time_put_wchar_do_put
));
9569 __ASM_VTABLE(time_put_short
,
9570 VTABLE_ADD_FUNC(time_put_wchar_vector_dtor
)
9571 VTABLE_ADD_FUNC(time_put_wchar_do_put
));
9576 void init_locale(void *base
)
9579 init_locale_facet_rtti(base
);
9580 init_collate_char_rtti(base
);
9581 init_collate_wchar_rtti(base
);
9582 init_collate_short_rtti(base
);
9583 init_ctype_base_rtti(base
);
9584 init_ctype_char_rtti(base
);
9585 init_ctype_wchar_rtti(base
);
9586 init_ctype_short_rtti(base
);
9587 init_codecvt_base_rtti(base
);
9588 init_codecvt_char_rtti(base
);
9589 init_codecvt_wchar_rtti(base
);
9590 init_codecvt_short_rtti(base
);
9591 init_numpunct_char_rtti(base
);
9592 init_numpunct_wchar_rtti(base
);
9593 init_numpunct_short_rtti(base
);
9594 init_num_get_char_rtti(base
);
9595 init_num_get_wchar_rtti(base
);
9596 init_num_get_short_rtti(base
);
9597 init_num_put_char_rtti(base
);
9598 init_num_put_wchar_rtti(base
);
9599 init_num_put_short_rtti(base
);
9600 init_time_put_char_rtti(base
);
9601 init_time_put_wchar_rtti(base
);
9602 init_time_put_short_rtti(base
);
9606 void free_locale(void)
9608 facets_elem
*iter
, *safe
;
9611 locale__Locimp_dtor(global_locale
);
9612 locale_dtor(&classic_locale
);
9615 LIST_FOR_EACH_ENTRY_SAFE(iter
, safe
, &lazy_facets
, facets_elem
, entry
) {
9616 list_remove(&iter
->entry
);
9617 if(locale_facet__Decref(iter
->fac
))
9618 call_locale_facet_vector_dtor(iter
->fac
, 1);
9619 MSVCRT_operator_delete(iter
);