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
35 #include "wine/heap.h"
36 #include "wine/list.h"
37 #include "wine/debug.h"
39 WINE_DEFAULT_DEBUG_CHANNEL(msvcp
);
49 char* __cdecl
_Getdays(void);
50 wchar_t* __cdecl
_W_Getdays(void);
51 char* __cdecl
_Getmonths(void);
52 wchar_t* __cdecl
_W_Getmonths(void);
53 void* __cdecl
_Gettnames(void);
54 unsigned int __cdecl
___lc_codepage_func(void);
55 int __cdecl
___lc_collate_cp_func(void);
56 const unsigned short* __cdecl
__pctype_func(void);
57 const locale_facet
* __thiscall
locale__Getfacet(const locale
*, size_t);
58 const locale
* __cdecl
locale_classic(void);
61 wchar_t ** __cdecl
___lc_locale_name_func(void);
63 LCID
* __cdecl
___lc_handle_func(void);
67 #define locale_string basic_string_char
68 #define locale_string_char_ctor(this) MSVCP_basic_string_char_ctor(this)
69 #define locale_string_char_ctor_cstr(this,str) MSVCP_basic_string_char_ctor_cstr(this,str)
70 #define locale_string_char_copy_ctor(this,copy) MSVCP_basic_string_char_copy_ctor(this,copy)
71 #define locale_string_char_dtor(this) MSVCP_basic_string_char_dtor(this)
72 #define locale_string_char_c_str(this) MSVCP_basic_string_char_c_str(this)
73 #define locale_string_char_assign(this,assign) MSVCP_basic_string_char_assign(this,assign)
75 #define locale_string _Yarn_char
76 #define locale_string_char_ctor(this) _Yarn_char_ctor(this)
77 #define locale_string_char_ctor_cstr(this,str) _Yarn_char_ctor_cstr(this,str)
78 #define locale_string_char_copy_ctor(this,copy) _Yarn_char_copy_ctor(this,copy)
79 #define locale_string_char_dtor(this) _Yarn_char_dtor(this)
80 #define locale_string_char_c_str(this) _Yarn_char_c_str(this)
81 #define locale_string_char_assign(this,assign) _Yarn_char_op_assign(this,assign)
83 #define locale_string_wchar _Yarn_wchar
84 #define locale_string_wchar_ctor(this) _Yarn_wchar_ctor(this)
85 #define locale_string_wchar_dtor(this) _Yarn_wchar_dtor(this)
86 #define locale_string_wchar_c_str(this) _Yarn_wchar__C_str(this)
87 #define locale_string_wchar_assign(this,str) _Yarn_wchar_op_assign_cstr(this,str)
96 typedef struct _locale__Locimp
{
98 locale_facet
**facetvec
;
112 locale_string months
;
113 #if _MSVCP_VER >= 110
114 locale_string_wchar wdays
;
115 locale_string_wchar wmonths
;
117 locale_string oldlocname
;
118 locale_string newlocname
;
126 #if _MSVCP_VER >= 110
138 const char *grouping
;
141 const char *false_name
;
142 const char *true_name
;
147 const char *grouping
;
150 const wchar_t *false_name
;
151 const wchar_t *true_name
;
157 #if _MSVCP_VER <= 100
173 const wchar_t *months
;
178 /* ?_Id_cnt@id@locale@std@@0HA */
179 int locale_id__Id_cnt
= 0;
181 static locale classic_locale
;
183 /* ?_Global@_Locimp@locale@std@@0PAV123@A */
184 /* ?_Global@_Locimp@locale@std@@0PEAV123@EA */
185 locale__Locimp
*global_locale
= NULL
;
187 /* ?_Clocptr@_Locimp@locale@std@@0PAV123@A */
188 /* ?_Clocptr@_Locimp@locale@std@@0PEAV123@EA */
189 locale__Locimp
*locale__Locimp__Clocptr
= NULL
;
191 static char istreambuf_iterator_char_val(istreambuf_iterator_char
*this)
193 if(this->strbuf
&& !this->got
) {
194 int c
= basic_streambuf_char_sgetc(this->strbuf
);
205 static wchar_t istreambuf_iterator_wchar_val(istreambuf_iterator_wchar
*this)
207 if(this->strbuf
&& !this->got
) {
208 unsigned short c
= basic_streambuf_wchar_sgetc(this->strbuf
);
219 static void istreambuf_iterator_char_inc(istreambuf_iterator_char
*this)
221 if(!this->strbuf
|| basic_streambuf_char_sbumpc(this->strbuf
)==EOF
) {
226 istreambuf_iterator_char_val(this);
230 static void istreambuf_iterator_wchar_inc(istreambuf_iterator_wchar
*this)
232 if(!this->strbuf
|| basic_streambuf_wchar_sbumpc(this->strbuf
)==WEOF
) {
237 istreambuf_iterator_wchar_val(this);
241 static void ostreambuf_iterator_char_put(ostreambuf_iterator_char
*this, char ch
)
243 if(this->failed
|| basic_streambuf_char_sputc(this->strbuf
, ch
)==EOF
)
247 static void ostreambuf_iterator_wchar_put(ostreambuf_iterator_wchar
*this, wchar_t ch
)
249 if(this->failed
|| basic_streambuf_wchar_sputc(this->strbuf
, ch
)==WEOF
)
253 /* ??1facet@locale@std@@UAE@XZ */
254 /* ??1facet@locale@std@@UEAA@XZ */
255 /* ??1facet@locale@std@@MAA@XZ */
256 /* ??1facet@locale@std@@MAE@XZ */
257 /* ??1facet@locale@std@@MEAA@XZ */
258 DEFINE_THISCALL_WRAPPER(locale_facet_dtor
, 4)
259 void __thiscall
locale_facet_dtor(locale_facet
*this)
261 TRACE("(%p)\n", this);
264 DEFINE_THISCALL_WRAPPER(locale_facet_vector_dtor
, 8)
265 #define call_locale_facet_vector_dtor(this, flags) CALL_VTBL_FUNC(this, 0, \
266 locale_facet*, (locale_facet*, unsigned int), (this, flags))
267 locale_facet
* __thiscall
locale_facet_vector_dtor(locale_facet
*this, unsigned int flags
)
269 TRACE("(%p %x)\n", this, flags
);
271 /* we have an array, with the number of elements stored before the first object */
272 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
274 for(i
=*ptr
-1; i
>=0; i
--)
275 locale_facet_dtor(this+i
);
276 MSVCRT_operator_delete(ptr
);
278 locale_facet_dtor(this);
280 MSVCRT_operator_delete(this);
291 static struct list lazy_facets
= LIST_INIT(lazy_facets
);
293 /* Not exported from msvcp90 */
294 /* ?facet_Register@facet@locale@std@@CAXPAV123@@Z */
295 /* ?facet_Register@facet@locale@std@@CAXPEAV123@@Z */
296 void __cdecl
locale_facet_register(locale_facet
*add
)
298 facets_elem
*head
= MSVCRT_operator_new(sizeof(*head
));
300 ERR("Out of memory\n");
301 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
305 list_add_head(&lazy_facets
, &head
->entry
);
308 /* Not exported from msvcp90 */
309 /* ?_Register@facet@locale@std@@QAEXXZ */
310 /* ?_Register@facet@locale@std@@QEAAXXZ */
311 DEFINE_THISCALL_WRAPPER(locale_facet__Register
, 4)
312 void __thiscall
locale_facet__Register(locale_facet
*this)
314 TRACE("(%p)\n", this);
315 locale_facet_register(this);
318 /* Not exported from msvcp90 */
319 /* ??_7facet@locale@std@@6B@ */
320 extern const vtable_ptr locale_facet_vtable
;
322 /* ??0id@locale@std@@QAE@I@Z */
323 /* ??0id@locale@std@@QEAA@_K@Z */
324 DEFINE_THISCALL_WRAPPER(locale_id_ctor_id
, 8)
325 locale_id
* __thiscall
locale_id_ctor_id(locale_id
*this, size_t id
)
327 TRACE("(%p %Iu)\n", this, id
);
333 /* ??_Fid@locale@std@@QAEXXZ */
334 /* ??_Fid@locale@std@@QEAAXXZ */
335 DEFINE_THISCALL_WRAPPER(locale_id_ctor
, 4)
336 locale_id
* __thiscall
locale_id_ctor(locale_id
*this)
338 TRACE("(%p)\n", this);
344 /* ??Bid@locale@std@@QAEIXZ */
345 /* ??Bid@locale@std@@QEAA_KXZ */
346 DEFINE_THISCALL_WRAPPER(locale_id_operator_size_t
, 4)
347 size_t __thiscall
locale_id_operator_size_t(locale_id
*this)
351 TRACE("(%p)\n", this);
354 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
355 this->id
= ++locale_id__Id_cnt
;
362 /* ?_Id_cnt_func@id@locale@std@@CAAAHXZ */
363 /* ?_Id_cnt_func@id@locale@std@@CAAEAHXZ */
364 int* __cdecl
locale_id__Id_cnt_func(void)
367 return &locale_id__Id_cnt
;
370 /* ??_Ffacet@locale@std@@QAEXXZ */
371 /* ??_Ffacet@locale@std@@QEAAXXZ */
372 DEFINE_THISCALL_WRAPPER(locale_facet_ctor
, 4)
373 locale_facet
* __thiscall
locale_facet_ctor(locale_facet
*this)
375 TRACE("(%p)\n", this);
376 this->vtable
= &locale_facet_vtable
;
381 /* ??0facet@locale@std@@IAE@I@Z */
382 /* ??0facet@locale@std@@IEAA@_K@Z */
383 DEFINE_THISCALL_WRAPPER(locale_facet_ctor_refs
, 8)
384 locale_facet
* __thiscall
locale_facet_ctor_refs(locale_facet
*this, size_t refs
)
386 TRACE("(%p %Iu)\n", this, refs
);
387 this->vtable
= &locale_facet_vtable
;
392 /* ?_Incref@facet@locale@std@@QAEXXZ */
393 /* ?_Incref@facet@locale@std@@QEAAXXZ */
394 /* ?_Incref@facet@locale@std@@UAEXXZ */
395 /* ?_Incref@facet@locale@std@@UEAAXXZ */
396 #if _MSVCP_VER >= 110
397 #define call_locale_facet__Incref(this) CALL_VTBL_FUNC(this, 4, void, (locale_facet*), (this))
399 #define call_locale_facet__Incref locale_facet__Incref
401 DEFINE_THISCALL_WRAPPER(locale_facet__Incref
, 4)
402 void __thiscall
locale_facet__Incref(locale_facet
*this)
406 TRACE("(%p)\n", this);
408 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
413 /* ?_Decref@facet@locale@std@@QAEPAV123@XZ */
414 /* ?_Decref@facet@locale@std@@QEAAPEAV123@XZ */
415 /* ?_Decref@facet@locale@std@@UAEPAV_Facet_base@3@XZ */
416 /* ?_Decref@facet@locale@std@@UEAAPEAV_Facet_base@3@XZ */
417 #if _MSVCP_VER >= 110
418 #define call_locale_facet__Decref(this) CALL_VTBL_FUNC(this, 8, \
419 locale_facet*, (locale_facet*), (this))
421 #define call_locale_facet__Decref locale_facet__Decref
423 DEFINE_THISCALL_WRAPPER(locale_facet__Decref
, 4)
424 locale_facet
* __thiscall
locale_facet__Decref(locale_facet
*this)
429 TRACE("(%p)\n", this);
431 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
435 ret
= this->refs
? NULL
: this;
441 /* ?_Getcat@facet@locale@std@@SAIPAPBV123@PBV23@@Z */
442 /* ?_Getcat@facet@locale@std@@SA_KPEAPEBV123@PEBV23@@Z */
443 size_t __cdecl
locale_facet__Getcat(const locale_facet
**facet
, const locale
*loc
)
445 TRACE("(%p %p)\n", facet
, loc
);
449 /* ?_Getcat@facet@locale@std@@SAIPAPBV123@@Z */
450 /* ?_Getcat@facet@locale@std@@SA_KPEAPEBV123@@Z */
451 size_t __cdecl
locale_facet__Getcat_old(const locale_facet
**facet
)
453 TRACE("(%p)\n", facet
);
457 /* ??0_Timevec@std@@QAE@ABV01@@Z */
458 /* ??0_Timevec@std@@QEAA@AEBV01@@Z */
459 /* This copy constructor modifies copied object */
460 DEFINE_THISCALL_WRAPPER(_Timevec_copy_ctor
, 8)
461 _Timevec
* __thiscall
_Timevec_copy_ctor(_Timevec
*this, _Timevec
*copy
)
463 TRACE("(%p %p)\n", this, copy
);
464 this->timeptr
= copy
->timeptr
;
465 copy
->timeptr
= NULL
;
469 /* ??0_Timevec@std@@QAE@PAX@Z */
470 /* ??0_Timevec@std@@QEAA@PEAX@Z */
471 DEFINE_THISCALL_WRAPPER(_Timevec_ctor_timeptr
, 8)
472 _Timevec
* __thiscall
_Timevec_ctor_timeptr(_Timevec
*this, void *timeptr
)
474 TRACE("(%p %p)\n", this, timeptr
);
475 this->timeptr
= timeptr
;
479 /* ??_F_Timevec@std@@QAEXXZ */
480 /* ??_F_Timevec@std@@QEAAXXZ */
481 DEFINE_THISCALL_WRAPPER(_Timevec_ctor
, 4)
482 _Timevec
* __thiscall
_Timevec_ctor(_Timevec
*this)
484 TRACE("(%p)\n", this);
485 this->timeptr
= NULL
;
489 /* ??1_Timevec@std@@QAE@XZ */
490 /* ??1_Timevec@std@@QEAA@XZ */
491 DEFINE_THISCALL_WRAPPER(_Timevec_dtor
, 4)
492 void __thiscall
_Timevec_dtor(_Timevec
*this)
494 TRACE("(%p)\n", this);
498 /* ??4_Timevec@std@@QAEAAV01@ABV01@@Z */
499 /* ??4_Timevec@std@@QEAAAEAV01@AEBV01@@Z */
500 DEFINE_THISCALL_WRAPPER(_Timevec_op_assign
, 8)
501 _Timevec
* __thiscall
_Timevec_op_assign(_Timevec
*this, _Timevec
*right
)
503 TRACE("(%p %p)\n", this, right
);
504 this->timeptr
= right
->timeptr
;
505 right
->timeptr
= NULL
;
509 /* ?_Getptr@_Timevec@std@@QBEPAXXZ */
510 /* ?_Getptr@_Timevec@std@@QEBAPEAXXZ */
511 DEFINE_THISCALL_WRAPPER(_Timevec__Getptr
, 4)
512 void* __thiscall
_Timevec__Getptr(_Timevec
*this)
514 TRACE("(%p)\n", this);
515 return this->timeptr
;
518 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@HPBD@Z */
519 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@HPEBD@Z */
520 _Locinfo
* __cdecl
_Locinfo__Locinfo_ctor_cat_cstr(_Locinfo
*locinfo
, int category
, const char *locstr
)
522 const char *locale
= NULL
;
524 /* This function is probably modifying more global objects */
525 FIXME("(%p %d %s) semi-stub\n", locinfo
, category
, locstr
);
528 throw_exception(EXCEPTION_RUNTIME_ERROR
, "bad locale name");
530 _Lockit_ctor_locktype(&locinfo
->lock
, _LOCK_LOCALE
);
531 locale_string_char_ctor(&locinfo
->days
);
532 locale_string_char_ctor(&locinfo
->months
);
533 #if _MSVCP_VER >= 110
534 locale_string_wchar_ctor(&locinfo
->wdays
);
535 locale_string_wchar_ctor(&locinfo
->wmonths
);
537 locale_string_char_ctor_cstr(&locinfo
->oldlocname
, setlocale(LC_ALL
, NULL
));
540 locale
= setlocale(LC_ALL
, locstr
);
542 locale
= setlocale(LC_ALL
, NULL
);
545 locale_string_char_ctor_cstr(&locinfo
->newlocname
, locale
);
547 locale_string_char_ctor_cstr(&locinfo
->newlocname
, "*");
552 /* ??0_Locinfo@std@@QAE@HPBD@Z */
553 /* ??0_Locinfo@std@@QEAA@HPEBD@Z */
554 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cat_cstr
, 12)
555 _Locinfo
* __thiscall
_Locinfo_ctor_cat_cstr(_Locinfo
*this, int category
, const char *locstr
)
557 return _Locinfo__Locinfo_ctor_cat_cstr(this, category
, locstr
);
560 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
561 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
562 _Locinfo
* __cdecl
_Locinfo__Locinfo_ctor_bstr(_Locinfo
*locinfo
, const basic_string_char
*locstr
)
564 return _Locinfo__Locinfo_ctor_cat_cstr(locinfo
, 1/*FIXME*/, MSVCP_basic_string_char_c_str(locstr
));
567 /* ??0_Locinfo@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z */
568 /* ??0_Locinfo@std@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z */
569 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_bstr
, 8)
570 _Locinfo
* __thiscall
_Locinfo_ctor_bstr(_Locinfo
*this, const basic_string_char
*locstr
)
572 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, MSVCP_basic_string_char_c_str(locstr
));
575 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@PBD@Z */
576 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@PEBD@Z */
577 _Locinfo
* __cdecl
_Locinfo__Locinfo_ctor_cstr(_Locinfo
*locinfo
, const char *locstr
)
579 return _Locinfo__Locinfo_ctor_cat_cstr(locinfo
, 1/*FIXME*/, locstr
);
582 /* ??0_Locinfo@std@@QAE@PBD@Z */
583 /* ??0_Locinfo@std@@QEAA@PEBD@Z */
584 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cstr
, 8)
585 _Locinfo
* __thiscall
_Locinfo_ctor_cstr(_Locinfo
*this, const char *locstr
)
587 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, locstr
);
590 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPAV12@@Z */
591 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPEAV12@@Z */
592 void __cdecl
_Locinfo__Locinfo_dtor(_Locinfo
*locinfo
)
594 TRACE("(%p)\n", locinfo
);
596 setlocale(LC_ALL
, locale_string_char_c_str(&locinfo
->oldlocname
));
597 locale_string_char_dtor(&locinfo
->days
);
598 locale_string_char_dtor(&locinfo
->months
);
599 #if _MSVCP_VER >= 110
600 locale_string_wchar_dtor(&locinfo
->wdays
);
601 locale_string_wchar_dtor(&locinfo
->wmonths
);
603 locale_string_char_dtor(&locinfo
->oldlocname
);
604 locale_string_char_dtor(&locinfo
->newlocname
);
605 _Lockit_dtor(&locinfo
->lock
);
608 /* ??_F_Locinfo@std@@QAEXXZ */
609 /* ??_F_Locinfo@std@@QEAAXXZ */
610 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor
, 4)
611 _Locinfo
* __thiscall
_Locinfo_ctor(_Locinfo
*this)
613 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, "C");
616 /* ??1_Locinfo@std@@QAE@XZ */
617 /* ??1_Locinfo@std@@QEAA@XZ */
618 DEFINE_THISCALL_WRAPPER(_Locinfo_dtor
, 4)
619 void __thiscall
_Locinfo_dtor(_Locinfo
*this)
621 _Locinfo__Locinfo_dtor(this);
624 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAAV12@PAV12@HPBD@Z */
625 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAEAV12@PEAV12@HPEBD@Z */
626 _Locinfo
* __cdecl
_Locinfo__Locinfo_Addcats(_Locinfo
*locinfo
, int category
, const char *locstr
)
628 const char *locale
= NULL
;
630 /* This function is probably modifying more global objects */
631 FIXME("(%p %d %s) semi-stub\n", locinfo
, category
, locstr
);
633 throw_exception(EXCEPTION_RUNTIME_ERROR
, "bad locale name");
635 locale_string_char_dtor(&locinfo
->newlocname
);
638 locale
= setlocale(LC_ALL
, locstr
);
640 locale
= setlocale(LC_ALL
, NULL
);
643 locale_string_char_ctor_cstr(&locinfo
->newlocname
, locale
);
645 locale_string_char_ctor_cstr(&locinfo
->newlocname
, "*");
650 /* ?_Addcats@_Locinfo@std@@QAEAAV12@HPBD@Z */
651 /* ?_Addcats@_Locinfo@std@@QEAAAEAV12@HPEBD@Z */
652 DEFINE_THISCALL_WRAPPER(_Locinfo__Addcats
, 12)
653 _Locinfo
* __thiscall
_Locinfo__Addcats(_Locinfo
*this, int category
, const char *locstr
)
655 return _Locinfo__Locinfo_Addcats(this, category
, locstr
);
658 static _Collvec
* getcoll(_Collvec
*ret
)
662 ret
->page
= ___lc_collate_cp_func();
664 ret
->handle
= ___lc_handle_func()[LC_COLLATE
];
666 ret
->lc_name
= ___lc_locale_name_func()[LC_COLLATE
];
672 #if defined(__i386__)
673 /* Work around a gcc bug */
674 ULONGLONG __cdecl
_Getcoll(void)
676 C_ASSERT(sizeof(_Collvec
) == sizeof(ULONGLONG
));
679 getcoll((_Collvec
*)&ret
);
683 _Collvec __cdecl
_Getcoll(void)
692 /* ?_Getcoll@_Locinfo@std@@QBE?AU_Collvec@@XZ */
693 /* ?_Getcoll@_Locinfo@std@@QEBA?AU_Collvec@@XZ */
694 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcoll
, 8)
695 _Collvec
* __thiscall
_Locinfo__Getcoll(const _Locinfo
*this, _Collvec
*ret
)
701 _Ctypevec __cdecl
_Getctype(void)
705 #if _MSVCP_VER >= 110
712 ret
.page
= ___lc_codepage_func();
714 ret
.handle
= ___lc_handle_func()[LC_COLLATE
];
716 if((name
= ___lc_locale_name_func()[LC_COLLATE
])) {
717 size
= wcslen(name
)+1;
718 ret
.name
= malloc(size
*sizeof(*name
));
719 if(!ret
.name
) throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
720 memcpy(ret
.name
, name
, size
*sizeof(*name
));
726 table
= malloc(sizeof(short[256]));
727 if(!table
) throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
728 memcpy(table
, __pctype_func(), sizeof(short[256]));
733 /* ?_Getctype@_Locinfo@std@@QBE?AU_Ctypevec@@XZ */
734 /* ?_Getctype@_Locinfo@std@@QEBA?AU_Ctypevec@@XZ */
735 DEFINE_THISCALL_WRAPPER(_Locinfo__Getctype
, 8)
736 _Ctypevec
* __thiscall
_Locinfo__Getctype(const _Locinfo
*this, _Ctypevec
*ret
)
743 #if _MSVCP_VER < 110 && defined(__i386__)
744 /* Work around a gcc bug */
745 ULONGLONG __cdecl
_Getcvt(void)
747 C_ASSERT(sizeof(_Cvtvec
) == sizeof(ULONGLONG
));
755 ret
.cvtvec
.page
= ___lc_codepage_func();
756 ret
.cvtvec
.handle
= ___lc_handle_func()[LC_CTYPE
];
759 #elif _MSVCP_VER < 110
760 _Cvtvec __cdecl
_Getcvt(void)
766 ret
.page
= ___lc_codepage_func();
767 ret
.handle
= ___lc_handle_func()[LC_CTYPE
];
771 _Cvtvec __cdecl
_Getcvt(void)
778 memset(&ret
, 0, sizeof(ret
));
779 ret
.page
= ___lc_codepage_func();
780 ret
.mb_max
= ___mb_cur_max_func();
784 if(_ismbblead(i
)) ret
.isleadbyte
[i
/8] |= 1 << (i
&7);
790 /* ?_Getcvt@_Locinfo@std@@QBE?AU_Cvtvec@@XZ */
791 /* ?_Getcvt@_Locinfo@std@@QEBA?AU_Cvtvec@@XZ */
792 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcvt
, 8)
793 _Cvtvec
* __thiscall
_Locinfo__Getcvt(const _Locinfo
*this, _Cvtvec
*ret
)
795 #if _MSVCP_VER < 110 && defined(__i386__)
802 memcpy(ret
, &cvtvec
, sizeof(cvtvec
));
806 int __cdecl
_Getdateorder(void)
811 if(!GetLocaleInfoW(___lc_handle_func()[LC_TIME
], LOCALE_ILDATE
,
812 date_fmt
, ARRAY_SIZE(date_fmt
)))
813 return DATEORDER_no_order
;
815 if(!GetLocaleInfoEx(___lc_locale_name_func()[LC_TIME
], LOCALE_ILDATE
,
816 date_fmt
, ARRAY_SIZE(date_fmt
)))
817 return DATEORDER_no_order
;
820 if(*date_fmt
== '0') return DATEORDER_mdy
;
821 if(*date_fmt
== '1') return DATEORDER_dmy
;
822 if(*date_fmt
== '2') return DATEORDER_ymd
;
823 return DATEORDER_no_order
;
826 /* ?_Getdateorder@_Locinfo@std@@QBEHXZ */
827 /* ?_Getdateorder@_Locinfo@std@@QEBAHXZ */
828 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdateorder
, 4)
829 int __thiscall
_Locinfo__Getdateorder(const _Locinfo
*this)
831 TRACE("(%p)\n", this);
832 return _Getdateorder();
835 /* ?_Getdays@_Locinfo@std@@QBEPBDXZ */
836 /* ?_Getdays@_Locinfo@std@@QEBAPEBDXZ */
837 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdays
, 4)
838 const char* __thiscall
_Locinfo__Getdays(const _Locinfo
*this)
840 char *days
= _Getdays();
843 TRACE("(%p)\n", this);
846 locale_string_char_dtor((locale_string
*)&this->days
);
847 locale_string_char_ctor_cstr((locale_string
*)&this->days
, days
);
851 ret
= locale_string_char_c_str(&this->days
);
852 if (!ret
[0]) ret
= ":Sun:Sunday:Mon:Monday:Tue:Tuesday:Wed:Wednesday:Thu:Thursday:Fri:Friday:Sat:Saturday";
856 #if _MSVCP_VER >= 110
857 /* ?_W_Getdays@_Locinfo@std@@QBEPBGXZ */
858 /* ?_W_Getdays@_Locinfo@std@@QEBAPEBGXZ */
859 DEFINE_THISCALL_WRAPPER(_Locinfo__W_Getdays
, 4)
860 const wchar_t* __thiscall
_Locinfo__W_Getdays(const _Locinfo
*this)
862 static const wchar_t defdays
[] =
864 ':','S','u','n',':','S','u','n','d','a','y',
865 ':','M','o','n',':','M','o','n','d','a','y',
866 ':','T','u','e',':','T','u','e','s','d','a','y',
867 ':','W','e','d',':','W','e','d','n','e','s','d','a','y',
868 ':','T','h','u',':','T','h','u','r','s','d','a','y',
869 ':','F','r','i',':','F','r','i','d','a','y',
870 ':','S','a','t',':','S','a','t','u','r','d','a','y'
872 wchar_t *wdays
= _W_Getdays();
875 TRACE("(%p)\n", this);
878 locale_string_wchar_assign((locale_string_wchar
*)&this->wdays
, wdays
);
882 ret
= locale_string_wchar_c_str(&this->wdays
);
883 if (!ret
[0]) ret
= defdays
;
887 /* ?_W_Getmonths@_Locinfo@std@@QBEPBGXZ */
888 /* ?_W_Getmonths@_Locinfo@std@@QEBAPEBGXZ */
889 DEFINE_THISCALL_WRAPPER(_Locinfo__W_Getmonths
, 4)
890 const wchar_t* __thiscall
_Locinfo__W_Getmonths(const _Locinfo
*this)
892 static const wchar_t defmonths
[] =
894 ':','J','a','n',':','J','a','n','u','a','r','y',
895 ':','F','e','b',':','F','e','b','r','u','a','r','y',
896 ':','M','a','r',':','M','a','r','c','h',
897 ':','A','p','r',':','A','p','r','i','l',
898 ':','M','a','y',':','M','a','y',
899 ':','J','u','n',':','J','u','n','e',
900 ':','J','u','l',':','J','u','l','y',
901 ':','A','u','g',':','A','u','g','u','s','t',
902 ':','S','e','p',':','S','e','p','t','e','m','b','e','r',
903 ':','O','c','t',':','O','c','t','o','b','e','r',
904 ':','N','o','v',':','N','o','v','e','m','b','e','r',
905 ':','D','e','c',':','D','e','c','e','m','b','e','r'
907 wchar_t *wmonths
= _W_Getmonths();
910 TRACE("(%p)\n", this);
913 locale_string_wchar_assign((locale_string_wchar
*)&this->wmonths
, wmonths
);
917 ret
= locale_string_wchar_c_str(&this->wmonths
);
918 if (!ret
[0]) ret
= defmonths
;
923 /* ?_Getmonths@_Locinfo@std@@QBEPBDXZ */
924 /* ?_Getmonths@_Locinfo@std@@QEBAPEBDXZ */
925 DEFINE_THISCALL_WRAPPER(_Locinfo__Getmonths
, 4)
926 const char* __thiscall
_Locinfo__Getmonths(const _Locinfo
*this)
928 char *months
= _Getmonths();
931 TRACE("(%p)\n", this);
934 locale_string_char_dtor((locale_string
*)&this->months
);
935 locale_string_char_ctor_cstr((locale_string
*)&this->months
, months
);
939 ret
= locale_string_char_c_str(&this->months
);
940 if (!ret
[0]) ret
= ":Jan:January:Feb:February:Mar:March:Apr:April:May:May:Jun:June:Jul:July"
941 ":Aug:August:Sep:September:Oct:October:Nov:November:Dec:December";
945 /* ?_Getfalse@_Locinfo@std@@QBEPBDXZ */
946 /* ?_Getfalse@_Locinfo@std@@QEBAPEBDXZ */
947 DEFINE_THISCALL_WRAPPER(_Locinfo__Getfalse
, 4)
948 const char* __thiscall
_Locinfo__Getfalse(const _Locinfo
*this)
950 TRACE("(%p)\n", this);
954 /* ?_Gettrue@_Locinfo@std@@QBEPBDXZ */
955 /* ?_Gettrue@_Locinfo@std@@QEBAPEBDXZ */
956 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettrue
, 4)
957 const char* __thiscall
_Locinfo__Gettrue(const _Locinfo
*this)
959 TRACE("(%p)\n", this);
963 /* ?_Getlconv@_Locinfo@std@@QBEPBUlconv@@XZ */
964 /* ?_Getlconv@_Locinfo@std@@QEBAPEBUlconv@@XZ */
965 DEFINE_THISCALL_WRAPPER(_Locinfo__Getlconv
, 4)
966 const struct lconv
* __thiscall
_Locinfo__Getlconv(const _Locinfo
*this)
968 TRACE("(%p)\n", this);
972 /* ?_Gettnames@_Locinfo@std@@QBE?AV_Timevec@2@XZ */
973 /* ?_Gettnames@_Locinfo@std@@QEBA?AV_Timevec@2@XZ */
974 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettnames
, 8)
975 _Timevec
*__thiscall
_Locinfo__Gettnames(const _Locinfo
*this, _Timevec
*ret
)
977 TRACE("(%p)\n", this);
979 _Timevec_ctor_timeptr(ret
, _Gettnames());
983 /* ?id@?$collate@D@std@@2V0locale@2@A */
984 locale_id collate_char_id
= {0};
986 /* ??_7?$collate@D@std@@6B@ */
987 extern const vtable_ptr collate_char_vtable
;
989 /* ?_Init@?$collate@D@std@@IAEXABV_Locinfo@2@@Z */
990 /* ?_Init@?$collate@D@std@@IEAAXAEBV_Locinfo@2@@Z */
991 DEFINE_THISCALL_WRAPPER(collate_char__Init
, 8)
992 void __thiscall
collate_char__Init(collate
*this, const _Locinfo
*locinfo
)
994 TRACE("(%p %p)\n", this, locinfo
);
995 _Locinfo__Getcoll(locinfo
, &this->coll
);
998 /* ??0?$collate@D@std@@IAE@PBDI@Z */
999 /* ??0?$collate@D@std@@IEAA@PEBD_K@Z */
1000 DEFINE_THISCALL_WRAPPER(collate_char_ctor_name
, 12)
1001 collate
* __thiscall
collate_char_ctor_name(collate
*this, const char *name
, size_t refs
)
1005 TRACE("(%p %s %Iu)\n", this, name
, refs
);
1007 locale_facet_ctor_refs(&this->facet
, refs
);
1008 this->facet
.vtable
= &collate_char_vtable
;
1010 _Locinfo_ctor_cstr(&locinfo
, name
);
1011 collate_char__Init(this, &locinfo
);
1012 _Locinfo_dtor(&locinfo
);
1016 /* ??0?$collate@D@std@@QAE@ABV_Locinfo@1@I@Z */
1017 /* ??0?$collate@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1018 DEFINE_THISCALL_WRAPPER(collate_char_ctor_locinfo
, 12)
1019 collate
* __thiscall
collate_char_ctor_locinfo(collate
*this, const _Locinfo
*locinfo
, size_t refs
)
1021 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
1023 locale_facet_ctor_refs(&this->facet
, refs
);
1024 this->facet
.vtable
= &collate_char_vtable
;
1025 collate_char__Init(this, locinfo
);
1029 /* ??0?$collate@D@std@@QAE@I@Z */
1030 /* ??0?$collate@D@std@@QEAA@_K@Z */
1031 DEFINE_THISCALL_WRAPPER(collate_char_ctor_refs
, 8)
1032 collate
* __thiscall
collate_char_ctor_refs(collate
*this, size_t refs
)
1034 return collate_char_ctor_name(this, "C", refs
);
1037 /* ??1?$collate@D@std@@UAE@XZ */
1038 /* ??1?$collate@D@std@@UEAA@XZ */
1039 /* ??1?$collate@D@std@@MAE@XZ */
1040 /* ??1?$collate@D@std@@MEAA@XZ */
1041 DEFINE_THISCALL_WRAPPER(collate_char_dtor
, 4)
1042 void __thiscall
collate_char_dtor(collate
*this)
1044 TRACE("(%p)\n", this);
1047 DEFINE_THISCALL_WRAPPER(collate_char_vector_dtor
, 8)
1048 collate
* __thiscall
collate_char_vector_dtor(collate
*this, unsigned int flags
)
1050 TRACE("(%p %x)\n", this, flags
);
1052 /* we have an array, with the number of elements stored before the first object */
1053 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1055 for(i
=*ptr
-1; i
>=0; i
--)
1056 collate_char_dtor(this+i
);
1057 MSVCRT_operator_delete(ptr
);
1059 collate_char_dtor(this);
1061 MSVCRT_operator_delete(this);
1067 /* ??_F?$collate@D@std@@QAEXXZ */
1068 /* ??_F?$collate@D@std@@QEAAXXZ */
1069 DEFINE_THISCALL_WRAPPER(collate_char_ctor
, 4)
1070 collate
* __thiscall
collate_char_ctor(collate
*this)
1072 return collate_char_ctor_name(this, "C", 0);
1075 /* ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1076 /* ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1077 size_t __cdecl
collate_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
1079 TRACE("(%p %p)\n", facet
, loc
);
1081 if(facet
&& !*facet
) {
1082 *facet
= MSVCRT_operator_new(sizeof(collate
));
1084 ERR("Out of memory\n");
1085 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
1088 collate_char_ctor_name((collate
*)*facet
,
1089 locale_string_char_c_str(&loc
->ptr
->name
), 0);
1095 /* ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@@Z */
1096 /* ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1097 size_t __cdecl
collate_char__Getcat_old(const locale_facet
**facet
)
1099 return collate_char__Getcat(facet
, locale_classic());
1102 static collate
* collate_char_use_facet(const locale
*loc
)
1104 static collate
*obj
= NULL
;
1107 const locale_facet
*fac
;
1109 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1110 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&collate_char_id
));
1112 _Lockit_dtor(&lock
);
1113 return (collate
*)fac
;
1117 _Lockit_dtor(&lock
);
1121 collate_char__Getcat(&fac
, loc
);
1122 obj
= (collate
*)fac
;
1123 call_locale_facet__Incref(&obj
->facet
);
1124 locale_facet_register(&obj
->facet
);
1125 _Lockit_dtor(&lock
);
1131 int __cdecl
_Strcoll(const char *first1
, const char *last1
, const char *first2
,
1132 const char *last2
, const _Collvec
*coll
)
1136 TRACE("(%s %s)\n", debugstr_an(first1
, last1
-first1
), debugstr_an(first2
, last2
-first2
));
1138 #if _MSVCP_VER < 110
1139 lcid
= (coll
? coll
->handle
: ___lc_handle_func()[LC_COLLATE
]);
1141 lcid
= LocaleNameToLCID(coll
? coll
->lc_name
: ___lc_locale_name_func()[LC_COLLATE
], 0);
1143 return CompareStringA(lcid
, 0, first1
, last1
-first1
, first2
, last2
-first2
)-CSTR_EQUAL
;
1146 /* ?do_compare@?$collate@D@std@@MBEHPBD000@Z */
1147 /* ?do_compare@?$collate@D@std@@MEBAHPEBD000@Z */
1148 DEFINE_THISCALL_WRAPPER(collate_char_do_compare
, 20)
1149 #if _MSVCP_VER <= 100
1150 #define call_collate_char_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 4, int, \
1151 (const collate*, const char*, const char*, const char*, const char*), \
1152 (this, first1, last1, first2, last2))
1154 #define call_collate_char_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 12, int, \
1155 (const collate*, const char*, const char*, const char*, const char*), \
1156 (this, first1, last1, first2, last2))
1158 int __thiscall
collate_char_do_compare(const collate
*this, const char *first1
,
1159 const char *last1
, const char *first2
, const char *last2
)
1161 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1162 return _Strcoll(first1
, last1
, first2
, last2
, &this->coll
);
1165 /* ?compare@?$collate@D@std@@QBEHPBD000@Z */
1166 /* ?compare@?$collate@D@std@@QEBAHPEBD000@Z */
1167 DEFINE_THISCALL_WRAPPER(collate_char_compare
, 20)
1168 int __thiscall
collate_char_compare(const collate
*this, const char *first1
,
1169 const char *last1
, const char *first2
, const char *last2
)
1171 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1172 return call_collate_char_do_compare(this, first1
, last1
, first2
, last2
);
1175 /* ?do_hash@?$collate@D@std@@MBEJPBD0@Z */
1176 /* ?do_hash@?$collate@D@std@@MEBAJPEBD0@Z */
1177 DEFINE_THISCALL_WRAPPER(collate_char_do_hash
, 12)
1178 #if _MSVCP_VER <= 100
1179 #define call_collate_char_do_hash(this, first, last) CALL_VTBL_FUNC(this, 12, LONG, \
1180 (const collate*, const char*, const char*), (this, first, last))
1182 #define call_collate_char_do_hash(this, first, last) CALL_VTBL_FUNC(this, 20, LONG, \
1183 (const collate*, const char*, const char*), (this, first, last))
1185 LONG __thiscall
collate_char_do_hash(const collate
*this,
1186 const char *first
, const char *last
)
1190 TRACE("(%p %p %p)\n", this, first
, last
);
1192 for(; first
<last
; first
++)
1193 ret
= (ret
<<8 | ret
>>24) + *first
;
1197 /* ?hash@?$collate@D@std@@QBEJPBD0@Z */
1198 /* ?hash@?$collate@D@std@@QEBAJPEBD0@Z */
1199 DEFINE_THISCALL_WRAPPER(collate_char_hash
, 12)
1200 LONG __thiscall
collate_char_hash(const collate
*this,
1201 const char *first
, const char *last
)
1203 TRACE("(%p %p %p)\n", this, first
, last
);
1204 return call_collate_char_do_hash(this, first
, last
);
1207 /* ?do_transform@?$collate@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
1208 /* ?do_transform@?$collate@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
1209 DEFINE_THISCALL_WRAPPER(collate_char_do_transform
, 16)
1210 basic_string_char
* __thiscall
collate_char_do_transform(const collate
*this,
1211 basic_string_char
*ret
, const char *first
, const char *last
)
1213 FIXME("(%p %p %p) stub\n", this, first
, last
);
1217 /* ?transform@?$collate@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
1218 /* ?transform@?$collate@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
1219 DEFINE_THISCALL_WRAPPER(collate_char_transform
, 16)
1220 basic_string_char
* __thiscall
collate_char_transform(const collate
*this,
1221 basic_string_char
*ret
, const char *first
, const char *last
)
1223 FIXME("(%p %p %p) stub\n", this, first
, last
);
1227 /* ?id@?$collate@_W@std@@2V0locale@2@A */
1228 locale_id collate_wchar_id
= {0};
1229 /* ?id@?$collate@G@std@@2V0locale@2@A */
1230 locale_id collate_short_id
= {0};
1232 /* ??_7?$collate@_W@std@@6B@ */
1233 extern const vtable_ptr collate_wchar_vtable
;
1234 /* ??_7?$collate@G@std@@6B@ */
1235 extern const vtable_ptr collate_short_vtable
;
1237 /* ?_Init@?$collate@_W@std@@IAEXABV_Locinfo@2@@Z */
1238 /* ?_Init@?$collate@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
1239 /* ?_Init@?$collate@G@std@@IAEXABV_Locinfo@2@@Z */
1240 /* ?_Init@?$collate@G@std@@IEAAXAEBV_Locinfo@2@@Z */
1241 DEFINE_THISCALL_WRAPPER(collate_wchar__Init
, 8)
1242 void __thiscall
collate_wchar__Init(collate
*this, const _Locinfo
*locinfo
)
1244 TRACE("(%p %p)\n", this, locinfo
);
1245 _Locinfo__Getcoll(locinfo
, &this->coll
);
1248 /* ??0?$collate@_W@std@@IAE@PBDI@Z */
1249 /* ??0?$collate@_W@std@@IEAA@PEBD_K@Z */
1250 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_name
, 12)
1251 collate
* __thiscall
collate_wchar_ctor_name(collate
*this, const char *name
, size_t refs
)
1255 TRACE("(%p %s %Iu)\n", this, name
, refs
);
1257 locale_facet_ctor_refs(&this->facet
, refs
);
1258 this->facet
.vtable
= &collate_wchar_vtable
;
1260 _Locinfo_ctor_cstr(&locinfo
, name
);
1261 collate_wchar__Init(this, &locinfo
);
1262 _Locinfo_dtor(&locinfo
);
1266 /* ??0?$collate@G@std@@IAE@PBDI@Z */
1267 /* ??0?$collate@G@std@@IEAA@PEBD_K@Z */
1268 DEFINE_THISCALL_WRAPPER(collate_short_ctor_name
, 12)
1269 collate
* __thiscall
collate_short_ctor_name(collate
*this, const char *name
, size_t refs
)
1271 collate
*ret
= collate_wchar_ctor_name(this, name
, refs
);
1272 ret
->facet
.vtable
= &collate_short_vtable
;
1276 /* ??0?$collate@_W@std@@QAE@ABV_Locinfo@1@I@Z */
1277 /* ??0?$collate@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1278 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_locinfo
, 12)
1279 collate
* __thiscall
collate_wchar_ctor_locinfo(collate
*this, const _Locinfo
*locinfo
, size_t refs
)
1281 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
1283 locale_facet_ctor_refs(&this->facet
, refs
);
1284 this->facet
.vtable
= &collate_wchar_vtable
;
1285 collate_wchar__Init(this, locinfo
);
1289 /* ??0?$collate@G@std@@QAE@ABV_Locinfo@1@I@Z */
1290 /* ??0?$collate@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1291 DEFINE_THISCALL_WRAPPER(collate_short_ctor_locinfo
, 12)
1292 collate
* __thiscall
collate_short_ctor_locinfo(collate
*this, const _Locinfo
*locinfo
, size_t refs
)
1294 collate
*ret
= collate_wchar_ctor_locinfo(this, locinfo
, refs
);
1295 ret
->facet
.vtable
= &collate_short_vtable
;
1299 /* ??0?$collate@_W@std@@QAE@I@Z */
1300 /* ??0?$collate@_W@std@@QEAA@_K@Z */
1301 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_refs
, 8)
1302 collate
* __thiscall
collate_wchar_ctor_refs(collate
*this, size_t refs
)
1304 return collate_wchar_ctor_name(this, "C", refs
);
1307 /* ??0?$collate@G@std@@QAE@I@Z */
1308 /* ??0?$collate@G@std@@QEAA@_K@Z */
1309 DEFINE_THISCALL_WRAPPER(collate_short_ctor_refs
, 8)
1310 collate
* __thiscall
collate_short_ctor_refs(collate
*this, size_t refs
)
1312 collate
*ret
= collate_wchar_ctor_refs(this, refs
);
1313 ret
->facet
.vtable
= &collate_short_vtable
;
1317 /* ??1?$collate@G@std@@UAE@XZ */
1318 /* ??1?$collate@G@std@@UEAA@XZ */
1319 /* ??1?$collate@_W@std@@MAE@XZ */
1320 /* ??1?$collate@_W@std@@MEAA@XZ */
1321 /* ??1?$collate@G@std@@MAE@XZ */
1322 /* ??1?$collate@G@std@@MEAA@XZ */
1323 DEFINE_THISCALL_WRAPPER(collate_wchar_dtor
, 4)
1324 void __thiscall
collate_wchar_dtor(collate
*this)
1326 TRACE("(%p)\n", this);
1329 DEFINE_THISCALL_WRAPPER(collate_wchar_vector_dtor
, 8)
1330 collate
* __thiscall
collate_wchar_vector_dtor(collate
*this, unsigned int flags
)
1332 TRACE("(%p %x)\n", this, flags
);
1334 /* we have an array, with the number of elements stored before the first object */
1335 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1337 for(i
=*ptr
-1; i
>=0; i
--)
1338 collate_wchar_dtor(this+i
);
1339 MSVCRT_operator_delete(ptr
);
1341 collate_wchar_dtor(this);
1343 MSVCRT_operator_delete(this);
1349 /* ??_F?$collate@_W@std@@QAEXXZ */
1350 /* ??_F?$collate@_W@std@@QEAAXXZ */
1351 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor
, 4)
1352 collate
* __thiscall
collate_wchar_ctor(collate
*this)
1354 return collate_wchar_ctor_name(this, "C", 0);
1357 /* ??_F?$collate@G@std@@QAEXXZ */
1358 /* ??_F?$collate@G@std@@QEAAXXZ */
1359 DEFINE_THISCALL_WRAPPER(collate_short_ctor
, 4)
1360 collate
* __thiscall
collate_short_ctor(collate
*this)
1362 collate
*ret
= collate_wchar_ctor(this);
1363 ret
->facet
.vtable
= &collate_short_vtable
;
1367 /* ?_Getcat@?$collate@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1368 /* ?_Getcat@?$collate@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1369 size_t __cdecl
collate_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
1371 TRACE("(%p %p)\n", facet
, loc
);
1373 if(facet
&& !*facet
) {
1374 *facet
= MSVCRT_operator_new(sizeof(collate
));
1376 ERR("Out of memory\n");
1377 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
1380 collate_wchar_ctor_name((collate
*)*facet
,
1381 locale_string_char_c_str(&loc
->ptr
->name
), 0);
1387 /* ?_Getcat@?$collate@_W@std@@SAIPAPBVfacet@locale@2@@Z */
1388 /* ?_Getcat@?$collate@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1389 size_t __cdecl
collate_wchar__Getcat_old(const locale_facet
**facet
)
1391 return collate_wchar__Getcat(facet
, locale_classic());
1394 static collate
* collate_wchar_use_facet(const locale
*loc
)
1396 static collate
*obj
= NULL
;
1399 const locale_facet
*fac
;
1401 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1402 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&collate_wchar_id
));
1404 _Lockit_dtor(&lock
);
1405 return (collate
*)fac
;
1409 _Lockit_dtor(&lock
);
1413 collate_wchar__Getcat(&fac
, loc
);
1414 obj
= (collate
*)fac
;
1415 call_locale_facet__Incref(&obj
->facet
);
1416 locale_facet_register(&obj
->facet
);
1417 _Lockit_dtor(&lock
);
1422 /* ?_Getcat@?$collate@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1423 /* ?_Getcat@?$collate@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1424 size_t __cdecl
collate_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
1426 if(facet
&& !*facet
) {
1427 collate_wchar__Getcat(facet
, loc
);
1428 (*(locale_facet
**)facet
)->vtable
= &collate_short_vtable
;
1434 /* ?_Getcat@?$collate@G@std@@SAIPAPBVfacet@locale@2@@Z */
1435 /* ?_Getcat@?$collate@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1436 size_t __cdecl
collate_short__Getcat_old(const locale_facet
**facet
)
1438 return collate_short__Getcat(facet
, locale_classic());
1441 static collate
* collate_short_use_facet(const locale
*loc
)
1443 static collate
*obj
= NULL
;
1446 const locale_facet
*fac
;
1448 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1449 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&collate_short_id
));
1451 _Lockit_dtor(&lock
);
1452 return (collate
*)fac
;
1456 _Lockit_dtor(&lock
);
1460 collate_short__Getcat(&fac
, loc
);
1461 obj
= (collate
*)fac
;
1462 call_locale_facet__Incref(&obj
->facet
);
1463 locale_facet_register(&obj
->facet
);
1464 _Lockit_dtor(&lock
);
1470 int __cdecl
_Wcscoll(const wchar_t *first1
, const wchar_t *last1
, const wchar_t *first2
,
1471 const wchar_t *last2
, const _Collvec
*coll
)
1473 TRACE("(%s %s)\n", debugstr_wn(first1
, last1
-first1
), debugstr_wn(first2
, last2
-first2
));
1475 #if _MSVCP_VER < 110
1476 return CompareStringW(coll
? coll
->handle
: ___lc_handle_func()[LC_COLLATE
],
1477 0, first1
, last1
-first1
, first2
, last2
-first2
)-CSTR_EQUAL
;
1479 return CompareStringEx(coll
? coll
->lc_name
: ___lc_locale_name_func()[LC_COLLATE
],
1480 0, first1
, last1
-first1
, first2
, last2
-first2
, NULL
, NULL
, 0)-CSTR_EQUAL
;
1484 /* ?do_compare@?$collate@_W@std@@MBEHPB_W000@Z */
1485 /* ?do_compare@?$collate@_W@std@@MEBAHPEB_W000@Z */
1486 /* ?do_compare@?$collate@G@std@@MBEHPBG000@Z */
1487 /* ?do_compare@?$collate@G@std@@MEBAHPEBG000@Z */
1488 DEFINE_THISCALL_WRAPPER(collate_wchar_do_compare
, 20)
1489 #if _MSVCP_VER <= 100
1490 #define call_collate_wchar_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 4, int, \
1491 (const collate*, const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*), \
1492 (this, first1, last1, first2, last2))
1494 #define call_collate_wchar_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 12, int, \
1495 (const collate*, const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*), \
1496 (this, first1, last1, first2, last2))
1498 int __thiscall
collate_wchar_do_compare(const collate
*this, const wchar_t *first1
,
1499 const wchar_t *last1
, const wchar_t *first2
, const wchar_t *last2
)
1501 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1502 return _Wcscoll(first1
, last1
, first2
, last2
, &this->coll
);
1505 /* ?compare@?$collate@_W@std@@QBEHPB_W000@Z */
1506 /* ?compare@?$collate@_W@std@@QEBAHPEB_W000@Z */
1507 /* ?compare@?$collate@G@std@@QBEHPBG000@Z */
1508 /* ?compare@?$collate@G@std@@QEBAHPEBG000@Z */
1509 DEFINE_THISCALL_WRAPPER(collate_wchar_compare
, 20)
1510 int __thiscall
collate_wchar_compare(const collate
*this, const wchar_t *first1
,
1511 const wchar_t *last1
, const wchar_t *first2
, const wchar_t *last2
)
1513 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1514 return call_collate_wchar_do_compare(this, first1
, last1
, first2
, last2
);
1517 /* ?do_hash@?$collate@_W@std@@MBEJPB_W0@Z */
1518 /* ?do_hash@?$collate@_W@std@@MEBAJPEB_W0@Z */
1519 /* ?do_hash@?$collate@G@std@@MBEJPBG0@Z */
1520 /* ?do_hash@?$collate@G@std@@MEBAJPEBG0@Z */
1521 DEFINE_THISCALL_WRAPPER(collate_wchar_do_hash
, 12)
1522 #if _MSVCP_VER <= 100
1523 #define call_collate_wchar_do_hash(this, first, last) CALL_VTBL_FUNC(this, 12, LONG, \
1524 (const collate*, const wchar_t*, const wchar_t*), (this, first, last))
1526 #define call_collate_wchar_do_hash(this, first, last) CALL_VTBL_FUNC(this, 20, LONG, \
1527 (const collate*, const wchar_t*, const wchar_t*), (this, first, last))
1529 LONG __thiscall
collate_wchar_do_hash(const collate
*this,
1530 const wchar_t *first
, const wchar_t *last
)
1534 TRACE("(%p %p %p)\n", this, first
, last
);
1536 for(; first
<last
; first
++)
1537 ret
= (ret
<<8 | ret
>>24) + *first
;
1541 /* ?hash@?$collate@_W@std@@QBEJPB_W0@Z */
1542 /* ?hash@?$collate@_W@std@@QEBAJPEB_W0@Z */
1543 /* ?hash@?$collate@G@std@@QBEJPBG0@Z */
1544 /* ?hash@?$collate@G@std@@QEBAJPEBG0@Z */
1545 DEFINE_THISCALL_WRAPPER(collate_wchar_hash
, 12)
1546 LONG __thiscall
collate_wchar_hash(const collate
*this,
1547 const wchar_t *first
, const wchar_t *last
)
1549 TRACE("(%p %p %p)\n", this, first
, last
);
1550 return call_collate_wchar_do_hash(this, first
, last
);
1553 /* ?do_transform@?$collate@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
1554 /* ?do_transform@?$collate@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
1555 /* ?do_transform@?$collate@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
1556 /* ?do_transform@?$collate@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
1557 DEFINE_THISCALL_WRAPPER(collate_wchar_do_transform
, 16)
1558 basic_string_wchar
* __thiscall
collate_wchar_do_transform(const collate
*this,
1559 basic_string_wchar
*ret
, const wchar_t *first
, const wchar_t *last
)
1561 FIXME("(%p %p %p) stub\n", this, first
, last
);
1565 /* ?transform@?$collate@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
1566 /* ?transform@?$collate@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
1567 /* ?transform@?$collate@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
1568 /* ?transform@?$collate@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
1569 DEFINE_THISCALL_WRAPPER(collate_wchar_transform
, 16)
1570 basic_string_wchar
* __thiscall
collate_wchar_transform(const collate
*this,
1571 basic_string_wchar
*ret
, const wchar_t *first
, const wchar_t *last
)
1573 FIXME("(%p %p %p) stub\n", this, first
, last
);
1577 /* ??_7ctype_base@std@@6B@ */
1578 extern const vtable_ptr ctype_base_vtable
;
1580 /* ??0ctype_base@std@@QAE@I@Z */
1581 /* ??0ctype_base@std@@QEAA@_K@Z */
1582 DEFINE_THISCALL_WRAPPER(ctype_base_ctor_refs
, 8)
1583 ctype_base
* __thiscall
ctype_base_ctor_refs(ctype_base
*this, size_t refs
)
1585 TRACE("(%p %Iu)\n", this, refs
);
1586 locale_facet_ctor_refs(&this->facet
, refs
);
1587 this->facet
.vtable
= &ctype_base_vtable
;
1591 /* ??_Fctype_base@std@@QAEXXZ */
1592 /* ??_Fctype_base@std@@QEAAXXZ */
1593 DEFINE_THISCALL_WRAPPER(ctype_base_ctor
, 4)
1594 ctype_base
* __thiscall
ctype_base_ctor(ctype_base
*this)
1596 TRACE("(%p)\n", this);
1597 locale_facet_ctor_refs(&this->facet
, 0);
1598 this->facet
.vtable
= &ctype_base_vtable
;
1602 /* ??1ctype_base@std@@UAE@XZ */
1603 /* ??1ctype_base@std@@UEAA@XZ */
1604 DEFINE_THISCALL_WRAPPER(ctype_base_dtor
, 4)
1605 void __thiscall
ctype_base_dtor(ctype_base
*this)
1607 TRACE("(%p)\n", this);
1610 DEFINE_THISCALL_WRAPPER(ctype_base_vector_dtor
, 8)
1611 ctype_base
* __thiscall
ctype_base_vector_dtor(ctype_base
*this, unsigned int flags
)
1613 TRACE("(%p %x)\n", this, flags
);
1615 /* we have an array, with the number of elements stored before the first object */
1616 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1618 for(i
=*ptr
-1; i
>=0; i
--)
1619 ctype_base_dtor(this+i
);
1620 MSVCRT_operator_delete(ptr
);
1622 ctype_base_dtor(this);
1624 MSVCRT_operator_delete(this);
1630 /* ?_Xran@ctype_base@std@@KAXXZ */
1631 void __cdecl
ctype_base__Xran(void)
1633 throw_exception(EXCEPTION_OUT_OF_RANGE
, "out of range in ctype<T>");
1636 /* ?id@?$ctype@D@std@@2V0locale@2@A */
1637 locale_id ctype_char_id
= {0};
1638 /* ?table_size@?$ctype@D@std@@2IB */
1639 /* ?table_size@?$ctype@D@std@@2_KB */
1640 size_t ctype_char_table_size
= 256;
1642 /* ??_7?$ctype@D@std@@6B@ */
1643 extern const vtable_ptr ctype_char_vtable
;
1645 /* ?_Id_func@?$ctype@D@std@@SAAAVid@locale@2@XZ */
1646 /* ?_Id_func@?$ctype@D@std@@SAAEAVid@locale@2@XZ */
1647 locale_id
* __cdecl
ctype_char__Id_func(void)
1650 return &ctype_char_id
;
1653 /* ?_Init@?$ctype@D@std@@IAEXABV_Locinfo@2@@Z */
1654 /* ?_Init@?$ctype@D@std@@IEAAXAEBV_Locinfo@2@@Z */
1655 DEFINE_THISCALL_WRAPPER(ctype_char__Init
, 8)
1656 void __thiscall
ctype_char__Init(ctype_char
*this, const _Locinfo
*locinfo
)
1658 TRACE("(%p %p)\n", this, locinfo
);
1659 _Locinfo__Getctype(locinfo
, &this->ctype
);
1662 /* ?_Tidy@?$ctype@D@std@@IAEXXZ */
1663 /* ?_Tidy@?$ctype@D@std@@IEAAXXZ */
1664 DEFINE_THISCALL_WRAPPER(ctype_char__Tidy
, 4)
1665 void __thiscall
ctype_char__Tidy(ctype_char
*this)
1667 TRACE("(%p)\n", this);
1669 if(this->ctype
.delfl
)
1670 free((short*)this->ctype
.table
);
1671 #if _MSVCP_VER >= 110
1672 free(this->ctype
.name
);
1676 /* ?classic_table@?$ctype@D@std@@KAPBFXZ */
1677 /* ?classic_table@?$ctype@D@std@@KAPEBFXZ */
1678 const short* __cdecl
ctype_char_classic_table(void)
1683 ctype
= ctype_char_use_facet( locale_classic() );
1684 return ctype
->ctype
.table
;
1687 /* ??0?$ctype@D@std@@QAE@ABV_Locinfo@1@I@Z */
1688 /* ??0?$ctype@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1689 DEFINE_THISCALL_WRAPPER(ctype_char_ctor_locinfo
, 12)
1690 ctype_char
* __thiscall
ctype_char_ctor_locinfo(ctype_char
*this,
1691 const _Locinfo
*locinfo
, size_t refs
)
1693 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
1694 ctype_base_ctor_refs(&this->base
, refs
);
1695 this->base
.facet
.vtable
= &ctype_char_vtable
;
1696 ctype_char__Init(this, locinfo
);
1700 /* ??0?$ctype@D@std@@QAE@PBF_NI@Z */
1701 /* ??0?$ctype@D@std@@QEAA@PEBF_N_K@Z */
1702 DEFINE_THISCALL_WRAPPER(ctype_char_ctor_table
, 16)
1703 ctype_char
* __thiscall
ctype_char_ctor_table(ctype_char
*this,
1704 const short *table
, bool delete, size_t refs
)
1708 TRACE("(%p %p %d %Iu)\n", this, table
, delete, refs
);
1710 ctype_base_ctor_refs(&this->base
, refs
);
1711 this->base
.facet
.vtable
= &ctype_char_vtable
;
1713 _Locinfo_ctor(&locinfo
);
1714 ctype_char__Init(this, &locinfo
);
1715 _Locinfo_dtor(&locinfo
);
1718 ctype_char__Tidy(this);
1719 this->ctype
.table
= table
;
1720 this->ctype
.delfl
= delete;
1725 /* ??_F?$ctype@D@std@@QAEXXZ */
1726 /* ??_F?$ctype@D@std@@QEAAXXZ */
1727 DEFINE_THISCALL_WRAPPER(ctype_char_ctor
, 4)
1728 ctype_char
* __thiscall
ctype_char_ctor(ctype_char
*this)
1730 return ctype_char_ctor_table(this, NULL
, FALSE
, 0);
1733 /* ??1?$ctype@D@std@@UAE@XZ */
1734 /* ??1?$ctype@D@std@@UEAA@XZ */
1735 /* ??1?$ctype@D@std@@MAE@XZ */
1736 /* ??1?$ctype@D@std@@MEAA@XZ */
1737 DEFINE_THISCALL_WRAPPER(ctype_char_dtor
, 4)
1738 void __thiscall
ctype_char_dtor(ctype_char
*this)
1740 TRACE("(%p)\n", this);
1741 ctype_char__Tidy(this);
1744 DEFINE_THISCALL_WRAPPER(ctype_char_vector_dtor
, 8)
1745 ctype_char
* __thiscall
ctype_char_vector_dtor(ctype_char
*this, unsigned int flags
)
1747 TRACE("(%p %x)\n", this, flags
);
1749 /* we have an array, with the number of elements stored before the first object */
1750 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1752 for(i
=*ptr
-1; i
>=0; i
--)
1753 ctype_char_dtor(this+i
);
1754 MSVCRT_operator_delete(ptr
);
1756 ctype_char_dtor(this);
1758 MSVCRT_operator_delete(this);
1764 /* ?do_narrow@?$ctype@D@std@@MBEDDD@Z */
1765 /* ?do_narrow@?$ctype@D@std@@MEBADDD@Z */
1766 DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow_ch
, 12)
1767 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
1768 #define call_ctype_char_do_narrow_ch(this, ch, unused) CALL_VTBL_FUNC(this, 36, \
1769 char, (const ctype_char*, char, char), (this, ch, unused))
1770 #elif _MSVCP_VER <= 100
1771 #define call_ctype_char_do_narrow_ch(this, ch, unused) CALL_VTBL_FUNC(this, 32, \
1772 char, (const ctype_char*, char, char), (this, ch, unused))
1774 #define call_ctype_char_do_narrow_ch(this, ch, unused) CALL_VTBL_FUNC(this, 40, \
1775 char, (const ctype_char*, char, char), (this, ch, unused))
1777 char __thiscall
ctype_char_do_narrow_ch(const ctype_char
*this, char ch
, char unused
)
1779 TRACE("(%p %c %c)\n", this, ch
, unused
);
1783 /* ?do_narrow@?$ctype@D@std@@MBEPBDPBD0DPAD@Z */
1784 /* ?do_narrow@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD@Z */
1785 DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow
, 20)
1786 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
1787 #define call_ctype_char_do_narrow(this, first, last, unused, dest) CALL_VTBL_FUNC(this, 32, \
1788 const char*, (const ctype_char*, const char*, const char*, char, char*), \
1789 (this, first, last, unused, dest))
1790 #elif _MSVCP_VER <= 100
1791 #define call_ctype_char_do_narrow(this, first, last, unused, dest) CALL_VTBL_FUNC(this, 28, \
1792 const char*, (const ctype_char*, const char*, const char*, char, char*), \
1793 (this, first, last, unused, dest))
1795 #define call_ctype_char_do_narrow(this, first, last, unused, dest) CALL_VTBL_FUNC(this, 36, \
1796 const char*, (const ctype_char*, const char*, const char*, char, char*), \
1797 (this, first, last, unused, dest))
1799 const char* __thiscall
ctype_char_do_narrow(const ctype_char
*this,
1800 const char *first
, const char *last
, char unused
, char *dest
)
1802 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1803 memcpy(dest
, first
, last
-first
);
1807 /* ?_Do_narrow_s@?$ctype@D@std@@MBEPBDPBD0DPADI@Z */
1808 /* ?_Do_narrow_s@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD_K@Z */
1809 DEFINE_THISCALL_WRAPPER(ctype_char__Do_narrow_s
, 24)
1810 #define call_ctype_char__Do_narrow_s(this, first, last, unused, dest, size) CALL_VTBL_FUNC(this, 40, \
1811 const char*, (const ctype_char*, const char*, const char*, char, char*, size_t), \
1812 (this, first, last, unused, dest, size))
1813 const char* __thiscall
ctype_char__Do_narrow_s(const ctype_char
*this, const char *first
,
1814 const char *last
, char unused
, char *dest
, size_t size
)
1816 TRACE("(%p %p %p %p %Iu)\n", this, first
, last
, dest
, size
);
1817 memcpy_s(dest
, size
, first
, last
-first
);
1821 /* ?narrow@?$ctype@D@std@@QBEDDD@Z */
1822 /* ?narrow@?$ctype@D@std@@QEBADDD@Z */
1823 DEFINE_THISCALL_WRAPPER(ctype_char_narrow_ch
, 12)
1824 char __thiscall
ctype_char_narrow_ch(const ctype_char
*this, char ch
, char dflt
)
1826 TRACE("(%p %c %c)\n", this, ch
, dflt
);
1827 return call_ctype_char_do_narrow_ch(this, ch
, dflt
);
1830 /* ?narrow@?$ctype@D@std@@QBEPBDPBD0DPAD@Z */
1831 /* ?narrow@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD@Z */
1832 DEFINE_THISCALL_WRAPPER(ctype_char_narrow
, 20)
1833 const char* __thiscall
ctype_char_narrow(const ctype_char
*this,
1834 const char *first
, const char *last
, char dflt
, char *dest
)
1836 TRACE("(%p %p %p %c %p)\n", this, first
, last
, dflt
, dest
);
1837 return call_ctype_char_do_narrow(this, first
, last
, dflt
, dest
);
1840 /* ?_Narrow_s@?$ctype@D@std@@QBEPBDPBD0DPADI@Z */
1841 /* ?_Narrow_s@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD_K@Z */
1842 DEFINE_THISCALL_WRAPPER(ctype_char__Narrow_s
, 24)
1843 const char* __thiscall
ctype_char__Narrow_s(const ctype_char
*this, const char *first
,
1844 const char *last
, char dflt
, char *dest
, size_t size
)
1846 TRACE("(%p %p %p %p %Iu)\n", this, first
, last
, dest
, size
);
1847 return call_ctype_char__Do_narrow_s(this, first
, last
, dflt
, dest
, size
);
1850 /* ?do_widen@?$ctype@D@std@@MBEDD@Z */
1851 /* ?do_widen@?$ctype@D@std@@MEBADD@Z */
1852 DEFINE_THISCALL_WRAPPER(ctype_char_do_widen_ch
, 8)
1853 #if _MSVCP_VER <= 100
1854 #define call_ctype_char_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
1855 char, (const ctype_char*, char), (this, ch))
1857 #define call_ctype_char_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 32, \
1858 char, (const ctype_char*, char), (this, ch))
1860 char __thiscall
ctype_char_do_widen_ch(const ctype_char
*this, char ch
)
1862 TRACE("(%p %c)\n", this, ch
);
1866 /* ?do_widen@?$ctype@D@std@@MBEPBDPBD0PAD@Z */
1867 /* ?do_widen@?$ctype@D@std@@MEBAPEBDPEBD0PEAD@Z */
1868 DEFINE_THISCALL_WRAPPER(ctype_char_do_widen
, 16)
1869 #if _MSVCP_VER <= 100
1870 #define call_ctype_char_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 20, \
1871 const char*, (const ctype_char*, const char*, const char*, char*), \
1872 (this, first, last, dest))
1874 #define call_ctype_char_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 28, \
1875 const char*, (const ctype_char*, const char*, const char*, char*), \
1876 (this, first, last, dest))
1878 const char* __thiscall
ctype_char_do_widen(const ctype_char
*this,
1879 const char *first
, const char *last
, char *dest
)
1881 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1882 memcpy(dest
, first
, last
-first
);
1886 /* ?_Do_widen_s@?$ctype@D@std@@MBEPBDPBD0PADI@Z */
1887 /* ?_Do_widen_s@?$ctype@D@std@@MEBAPEBDPEBD0PEAD_K@Z */
1888 DEFINE_THISCALL_WRAPPER(ctype_char__Do_widen_s
, 20)
1889 #define call_ctype_char__Do_widen_s(this, first, last, dest, size) CALL_VTBL_FUNC(this, 28, \
1890 const char*, (const ctype_char*, const char*, const char*, char*, size_t), \
1891 (this, first, last, dest, size))
1892 const char* __thiscall
ctype_char__Do_widen_s(const ctype_char
*this,
1893 const char *first
, const char *last
, char *dest
, size_t size
)
1895 TRACE("(%p %p %p %p %Iu)\n", this, first
, last
, dest
, size
);
1896 memcpy_s(dest
, size
, first
, last
-first
);
1900 /* ?widen@?$ctype@D@std@@QBEDD@Z */
1901 /* ?widen@?$ctype@D@std@@QEBADD@Z */
1902 DEFINE_THISCALL_WRAPPER(ctype_char_widen_ch
, 8)
1903 char __thiscall
ctype_char_widen_ch(const ctype_char
*this, char ch
)
1905 TRACE("(%p %c)\n", this, ch
);
1906 return call_ctype_char_do_widen_ch(this, ch
);
1909 /* ?widen@?$ctype@D@std@@QBEPBDPBD0PAD@Z */
1910 /* ?widen@?$ctype@D@std@@QEBAPEBDPEBD0PEAD@Z */
1911 DEFINE_THISCALL_WRAPPER(ctype_char_widen
, 16)
1912 const char* __thiscall
ctype_char_widen(const ctype_char
*this,
1913 const char *first
, const char *last
, char *dest
)
1915 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1916 return call_ctype_char_do_widen(this, first
, last
, dest
);
1919 /* ?_Widen_s@?$ctype@D@std@@QBEPBDPBD0PADI@Z */
1920 /* ?_Widen_s@?$ctype@D@std@@QEBAPEBDPEBD0PEAD_K@Z */
1921 DEFINE_THISCALL_WRAPPER(ctype_char__Widen_s
, 20)
1922 const char* __thiscall
ctype_char__Widen_s(const ctype_char
*this,
1923 const char *first
, const char *last
, char *dest
, size_t size
)
1925 TRACE("(%p %p %p %p %Iu)\n", this, first
, last
, dest
, size
);
1926 return call_ctype_char__Do_widen_s(this, first
, last
, dest
, size
);
1929 /* ?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1930 /* ?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1931 size_t __cdecl
ctype_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
1933 TRACE("(%p %p)\n", facet
, loc
);
1935 if(facet
&& !*facet
) {
1938 *facet
= MSVCRT_operator_new(sizeof(ctype_char
));
1940 ERR("Out of memory\n");
1941 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
1945 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
1946 ctype_char_ctor_locinfo((ctype_char
*)*facet
, &locinfo
, 0);
1947 _Locinfo_dtor(&locinfo
);
1953 /* ?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@@Z */
1954 /* ?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1955 size_t __cdecl
ctype_char__Getcat_old(const locale_facet
**facet
)
1957 return ctype_char__Getcat(facet
, locale_classic());
1960 ctype_char
* ctype_char_use_facet(const locale
*loc
)
1962 static ctype_char
*obj
= NULL
;
1965 const locale_facet
*fac
;
1967 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1968 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_char_id
));
1970 _Lockit_dtor(&lock
);
1971 return (ctype_char
*)fac
;
1975 _Lockit_dtor(&lock
);
1979 ctype_char__Getcat(&fac
, loc
);
1980 obj
= (ctype_char
*)fac
;
1981 call_locale_facet__Incref(&obj
->base
.facet
);
1982 locale_facet_register(&obj
->base
.facet
);
1983 _Lockit_dtor(&lock
);
1989 int __cdecl
_Tolower(int ch
, const _Ctypevec
*ctype
)
1993 TRACE("%d %p\n", ch
, ctype
);
1998 cp
= ___lc_codepage_func();
2000 /* Don't convert to unicode in case of C locale */
2002 if(ch
>='A' && ch
<='Z')
2011 str
[0] = (ch
>>8) & 255;
2019 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, str
, size
, &wide
, 1))
2022 lower
= towlower(wide
);
2026 WideCharToMultiByte(cp
, 0, &lower
, 1, str
, 2, NULL
, NULL
);
2028 return str
[0] + (str
[1]<<8);
2032 /* ?do_tolower@?$ctype@D@std@@MBEDD@Z */
2033 /* ?do_tolower@?$ctype@D@std@@MEBADD@Z */
2034 #if _MSVCP_VER <= 100
2035 #define call_ctype_char_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 8, \
2036 char, (const ctype_char*, char), (this, ch))
2038 #define call_ctype_char_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 16, \
2039 char, (const ctype_char*, char), (this, ch))
2041 DEFINE_THISCALL_WRAPPER(ctype_char_do_tolower_ch
, 8)
2042 char __thiscall
ctype_char_do_tolower_ch(const ctype_char
*this, char ch
)
2044 TRACE("(%p %c)\n", this, ch
);
2045 return _Tolower(ch
, &this->ctype
);
2048 /* ?do_tolower@?$ctype@D@std@@MBEPBDPADPBD@Z */
2049 /* ?do_tolower@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z */
2050 #if _MSVCP_VER <= 100
2051 #define call_ctype_char_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 4, \
2052 const char*, (const ctype_char*, char*, const char*), (this, first, last))
2054 #define call_ctype_char_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 12, \
2055 const char*, (const ctype_char*, char*, const char*), (this, first, last))
2057 DEFINE_THISCALL_WRAPPER(ctype_char_do_tolower
, 12)
2058 const char* __thiscall
ctype_char_do_tolower(const ctype_char
*this, char *first
, const char *last
)
2060 TRACE("(%p %p %p)\n", this, first
, last
);
2061 for(; first
<last
; first
++)
2062 *first
= _Tolower(*first
, &this->ctype
);
2066 /* ?tolower@?$ctype@D@std@@QBEDD@Z */
2067 /* ?tolower@?$ctype@D@std@@QEBADD@Z */
2068 DEFINE_THISCALL_WRAPPER(ctype_char_tolower_ch
, 8)
2069 char __thiscall
ctype_char_tolower_ch(const ctype_char
*this, char ch
)
2071 TRACE("(%p %c)\n", this, ch
);
2072 return call_ctype_char_do_tolower_ch(this, ch
);
2075 /* ?tolower@?$ctype@D@std@@QBEPBDPADPBD@Z */
2076 /* ?tolower@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z */
2077 DEFINE_THISCALL_WRAPPER(ctype_char_tolower
, 12)
2078 const char* __thiscall
ctype_char_tolower(const ctype_char
*this, char *first
, const char *last
)
2080 TRACE("(%p %p %p)\n", this, first
, last
);
2081 return call_ctype_char_do_tolower(this, first
, last
);
2085 int __cdecl
_Toupper(int ch
, const _Ctypevec
*ctype
)
2089 TRACE("%d %p\n", ch
, ctype
);
2094 cp
= ___lc_codepage_func();
2096 /* Don't convert to unicode in case of C locale */
2098 if(ch
>='a' && ch
<='z')
2107 str
[0] = (ch
>>8) & 255;
2115 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, str
, size
, &wide
, 1))
2118 upper
= towupper(wide
);
2122 WideCharToMultiByte(cp
, 0, &upper
, 1, str
, 2, NULL
, NULL
);
2124 return str
[0] + (str
[1]<<8);
2128 /* ?do_toupper@?$ctype@D@std@@MBEDD@Z */
2129 /* ?do_toupper@?$ctype@D@std@@MEBADD@Z */
2130 #if _MSVCP_VER <= 100
2131 #define call_ctype_char_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 16, \
2132 char, (const ctype_char*, char), (this, ch))
2134 #define call_ctype_char_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
2135 char, (const ctype_char*, char), (this, ch))
2137 DEFINE_THISCALL_WRAPPER(ctype_char_do_toupper_ch
, 8)
2138 char __thiscall
ctype_char_do_toupper_ch(const ctype_char
*this, char ch
)
2140 TRACE("(%p %c)\n", this, ch
);
2141 return _Toupper(ch
, &this->ctype
);
2144 /* ?do_toupper@?$ctype@D@std@@MBEPBDPADPBD@Z */
2145 /* ?do_toupper@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z */
2146 #if _MSVCP_VER <= 100
2147 #define call_ctype_char_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 12, \
2148 const char*, (const ctype_char*, char*, const char*), (this, first, last))
2150 #define call_ctype_char_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 20, \
2151 const char*, (const ctype_char*, char*, const char*), (this, first, last))
2153 DEFINE_THISCALL_WRAPPER(ctype_char_do_toupper
, 12)
2154 const char* __thiscall
ctype_char_do_toupper(const ctype_char
*this,
2155 char *first
, const char *last
)
2157 TRACE("(%p %p %p)\n", this, first
, last
);
2158 for(; first
<last
; first
++)
2159 *first
= _Toupper(*first
, &this->ctype
);
2163 /* ?toupper@?$ctype@D@std@@QBEDD@Z */
2164 /* ?toupper@?$ctype@D@std@@QEBADD@Z */
2165 DEFINE_THISCALL_WRAPPER(ctype_char_toupper_ch
, 8)
2166 char __thiscall
ctype_char_toupper_ch(const ctype_char
*this, char ch
)
2168 TRACE("(%p %c)\n", this, ch
);
2169 return call_ctype_char_do_toupper_ch(this, ch
);
2172 /* ?toupper@?$ctype@D@std@@QBEPBDPADPBD@Z */
2173 /* ?toupper@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z */
2174 DEFINE_THISCALL_WRAPPER(ctype_char_toupper
, 12)
2175 const char* __thiscall
ctype_char_toupper(const ctype_char
*this, char *first
, const char *last
)
2177 TRACE("(%p %p %p)\n", this, first
, last
);
2178 return call_ctype_char_do_toupper(this, first
, last
);
2181 /* ?is@?$ctype@D@std@@QBE_NFD@Z */
2182 /* ?is@?$ctype@D@std@@QEBA_NFD@Z */
2183 DEFINE_THISCALL_WRAPPER(ctype_char_is_ch
, 12)
2184 bool __thiscall
ctype_char_is_ch(const ctype_char
*this, short mask
, char ch
)
2186 TRACE("(%p %x %c)\n", this, mask
, ch
);
2187 return (this->ctype
.table
[(unsigned char)ch
] & mask
) != 0;
2190 /* ?is@?$ctype@D@std@@QBEPBDPBD0PAF@Z */
2191 /* ?is@?$ctype@D@std@@QEBAPEBDPEBD0PEAF@Z */
2192 DEFINE_THISCALL_WRAPPER(ctype_char_is
, 16)
2193 const char* __thiscall
ctype_char_is(const ctype_char
*this, const char *first
, const char *last
, short *dest
)
2195 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2196 for(; first
<last
; first
++)
2197 *dest
++ = this->ctype
.table
[(unsigned char)*first
];
2201 /* ?scan_is@?$ctype@D@std@@QBEPBDFPBD0@Z */
2202 /* ?scan_is@?$ctype@D@std@@QEBAPEBDFPEBD0@Z */
2203 DEFINE_THISCALL_WRAPPER(ctype_char_scan_is
, 16)
2204 const char* __thiscall
ctype_char_scan_is(const ctype_char
*this, short mask
, const char *first
, const char *last
)
2206 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
2207 for(; first
<last
; first
++)
2208 if(!ctype_char_is_ch(this, mask
, *first
))
2213 /* ?scan_not@?$ctype@D@std@@QBEPBDFPBD0@Z */
2214 /* ?scan_not@?$ctype@D@std@@QEBAPEBDFPEBD0@Z */
2215 DEFINE_THISCALL_WRAPPER(ctype_char_scan_not
, 16)
2216 const char* __thiscall
ctype_char_scan_not(const ctype_char
*this, short mask
, const char *first
, const char *last
)
2218 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
2219 for(; first
<last
; first
++)
2220 if(ctype_char_is_ch(this, mask
, *first
))
2225 /* ?table@?$ctype@D@std@@IBEPBFXZ */
2226 /* ?table@?$ctype@D@std@@IEBAPEBFXZ */
2227 DEFINE_THISCALL_WRAPPER(ctype_char_table
, 4)
2228 const short* __thiscall
ctype_char_table(const ctype_char
*this)
2230 TRACE("(%p)\n", this);
2231 return this->ctype
.table
;
2234 /* ?id@?$ctype@_W@std@@2V0locale@2@A */
2235 locale_id ctype_wchar_id
= {0};
2236 /* ?id@?$ctype@G@std@@2V0locale@2@A */
2237 locale_id ctype_short_id
= {0};
2239 /* ??_7?$ctype@_W@std@@6B@ */
2240 extern const vtable_ptr ctype_wchar_vtable
;
2241 /* ??_7?$ctype@G@std@@6B@ */
2242 extern const vtable_ptr ctype_short_vtable
;
2244 /* ?_Id_func@?$ctype@_W@std@@SAAAVid@locale@2@XZ */
2245 /* ?_Id_func@?$ctype@_W@std@@SAAEAVid@locale@2@XZ */
2246 locale_id
* __cdecl
ctype_wchar__Id_func(void)
2249 return &ctype_wchar_id
;
2252 /* ?_Id_func@?$ctype@G@std@@SAAAVid@locale@2@XZ */
2253 /* ?_Id_func@?$ctype@G@std@@SAAEAVid@locale@2@XZ */
2254 locale_id
* __cdecl
ctype_short__Id_func(void)
2257 return &ctype_short_id
;
2260 /* ?_Init@?$ctype@_W@std@@IAEXABV_Locinfo@2@@Z */
2261 /* ?_Init@?$ctype@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
2262 /* ?_Init@?$ctype@G@std@@IAEXABV_Locinfo@2@@Z */
2263 /* ?_Init@?$ctype@G@std@@IEAAXAEBV_Locinfo@2@@Z */
2264 DEFINE_THISCALL_WRAPPER(ctype_wchar__Init
, 8)
2265 void __thiscall
ctype_wchar__Init(ctype_wchar
*this, const _Locinfo
*locinfo
)
2267 TRACE("(%p %p)\n", this, locinfo
);
2268 _Locinfo__Getctype(locinfo
, &this->ctype
);
2269 _Locinfo__Getcvt(locinfo
, &this->cvt
);
2272 /* ??0?$ctype@_W@std@@QAE@ABV_Locinfo@1@I@Z */
2273 /* ??0?$ctype@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
2274 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor_locinfo
, 12)
2275 ctype_wchar
* __thiscall
ctype_wchar_ctor_locinfo(ctype_wchar
*this,
2276 const _Locinfo
*locinfo
, size_t refs
)
2278 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
2279 ctype_base_ctor_refs(&this->base
, refs
);
2280 this->base
.facet
.vtable
= &ctype_wchar_vtable
;
2281 ctype_wchar__Init(this, locinfo
);
2285 /* ??0?$ctype@G@std@@QAE@ABV_Locinfo@1@I@Z */
2286 /* ??0?$ctype@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
2287 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_locinfo
, 12)
2288 ctype_wchar
* __thiscall
ctype_short_ctor_locinfo(ctype_wchar
*this,
2289 const _Locinfo
*locinfo
, size_t refs
)
2291 ctype_wchar
*ret
= ctype_wchar_ctor_locinfo(this, locinfo
, refs
);
2292 this->base
.facet
.vtable
= &ctype_short_vtable
;
2296 /* ??0?$ctype@_W@std@@QAE@I@Z */
2297 /* ??0?$ctype@_W@std@@QEAA@_K@Z */
2298 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor_refs
, 8)
2299 ctype_wchar
* __thiscall
ctype_wchar_ctor_refs(ctype_wchar
*this, size_t refs
)
2303 TRACE("(%p %Iu)\n", this, refs
);
2305 ctype_base_ctor_refs(&this->base
, refs
);
2306 this->base
.facet
.vtable
= &ctype_wchar_vtable
;
2308 _Locinfo_ctor(&locinfo
);
2309 ctype_wchar__Init(this, &locinfo
);
2310 _Locinfo_dtor(&locinfo
);
2314 /* ??0?$ctype@G@std@@QAE@I@Z */
2315 /* ??0?$ctype@G@std@@QEAA@_K@Z */
2316 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_refs
, 8)
2317 ctype_wchar
* __thiscall
ctype_short_ctor_refs(ctype_wchar
*this, size_t refs
)
2319 ctype_wchar
*ret
= ctype_wchar_ctor_refs(this, refs
);
2320 this->base
.facet
.vtable
= &ctype_short_vtable
;
2324 /* ??0?$ctype@G@std@@IAE@PBDI@Z */
2325 /* ??0?$ctype@G@std@@IEAA@PEBD_K@Z */
2326 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_name
, 12)
2327 ctype_wchar
* __thiscall
ctype_short_ctor_name(ctype_wchar
*this,
2328 const char *name
, size_t refs
)
2332 TRACE("(%p %s %Iu)\n", this, debugstr_a(name
), refs
);
2334 ctype_base_ctor_refs(&this->base
, refs
);
2335 this->base
.facet
.vtable
= &ctype_short_vtable
;
2337 _Locinfo_ctor_cstr(&locinfo
, name
);
2338 ctype_wchar__Init(this, &locinfo
);
2339 _Locinfo_dtor(&locinfo
);
2343 /* ??_F?$ctype@_W@std@@QAEXXZ */
2344 /* ??_F?$ctype@_W@std@@QEAAXXZ */
2345 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor
, 4)
2346 ctype_wchar
* __thiscall
ctype_wchar_ctor(ctype_wchar
*this)
2348 TRACE("(%p)\n", this);
2349 return ctype_short_ctor_refs(this, 0);
2352 /* ??_F?$ctype@G@std@@QAEXXZ */
2353 /* ??_F?$ctype@G@std@@QEAAXXZ */
2354 DEFINE_THISCALL_WRAPPER(ctype_short_ctor
, 4)
2355 ctype_wchar
* __thiscall
ctype_short_ctor(ctype_wchar
*this)
2357 ctype_wchar
*ret
= ctype_wchar_ctor(this);
2358 this->base
.facet
.vtable
= &ctype_short_vtable
;
2362 /* ??1?$ctype@G@std@@UAE@XZ */
2363 /* ??1?$ctype@G@std@@UEAA@XZ */
2364 /* ??1?$ctype@_W@std@@MAE@XZ */
2365 /* ??1?$ctype@_W@std@@MEAA@XZ */
2366 /* ??1?$ctype@G@std@@MAE@XZ */
2367 /* ??1?$ctype@G@std@@MEAA@XZ */
2368 DEFINE_THISCALL_WRAPPER(ctype_wchar_dtor
, 4)
2369 void __thiscall
ctype_wchar_dtor(ctype_wchar
*this)
2371 TRACE("(%p)\n", this);
2372 if(this->ctype
.delfl
)
2373 free((void*)this->ctype
.table
);
2374 #if _MSVCP_VER >= 110
2375 free(this->ctype
.name
);
2379 DEFINE_THISCALL_WRAPPER(ctype_wchar_vector_dtor
, 8)
2380 ctype_wchar
* __thiscall
ctype_wchar_vector_dtor(ctype_wchar
*this, unsigned int flags
)
2382 TRACE("(%p %x)\n", this, flags
);
2384 /* we have an array, with the number of elements stored before the first object */
2385 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
2387 for(i
=*ptr
-1; i
>=0; i
--)
2388 ctype_wchar_dtor(this+i
);
2389 MSVCRT_operator_delete(ptr
);
2391 ctype_wchar_dtor(this);
2393 MSVCRT_operator_delete(this);
2400 int __cdecl
_Wcrtomb(char *s
, wchar_t wch
, _Mbstatet
*state
, const _Cvtvec
*cvt
)
2405 TRACE("%p %d %p %p\n", s
, wch
, state
, cvt
);
2410 cp
= ___lc_codepage_func();
2422 size
= WideCharToMultiByte(cp
, 0, &wch
, 1, s
, MB_LEN_MAX
, NULL
, &def
);
2431 /* ?_Donarrow@?$ctype@_W@std@@IBED_WD@Z */
2432 /* ?_Donarrow@?$ctype@_W@std@@IEBAD_WD@Z */
2433 /* ?_Donarrow@?$ctype@G@std@@IBEDGD@Z */
2434 /* ?_Donarrow@?$ctype@G@std@@IEBADGD@Z */
2435 DEFINE_THISCALL_WRAPPER(ctype_wchar__Donarrow
, 12)
2436 char __thiscall
ctype_wchar__Donarrow(const ctype_wchar
*this, wchar_t ch
, char dflt
)
2438 char buf
[MB_LEN_MAX
];
2440 TRACE("(%p %d %d)\n", this, ch
, dflt
);
2442 return _Wcrtomb(buf
, ch
, NULL
, &this->cvt
)==1 ? buf
[0] : dflt
;
2445 /* ?do_narrow@?$ctype@_W@std@@MBED_WD@Z */
2446 /* ?do_narrow@?$ctype@_W@std@@MEBAD_WD@Z */
2447 /* ?do_narrow@?$ctype@G@std@@MBEDGD@Z */
2448 /* ?do_narrow@?$ctype@G@std@@MEBADGD@Z */
2449 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow_ch
, 12)
2450 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
2451 #define call_ctype_wchar_do_narrow_ch(this, ch, dflt) CALL_VTBL_FUNC(this, 52, \
2452 char, (const ctype_wchar*, wchar_t, char), (this, ch, dflt))
2453 #elif _MSVCP_VER <= 100
2454 #define call_ctype_wchar_do_narrow_ch(this, ch, dflt) CALL_VTBL_FUNC(this, 48, \
2455 char, (const ctype_wchar*, wchar_t, char), (this, ch, dflt))
2457 #define call_ctype_wchar_do_narrow_ch(this, ch, dflt) CALL_VTBL_FUNC(this, 56, \
2458 char, (const ctype_wchar*, wchar_t, char), (this, ch, dflt))
2460 char __thiscall
ctype_wchar_do_narrow_ch(const ctype_wchar
*this, wchar_t ch
, char dflt
)
2462 return ctype_wchar__Donarrow(this, ch
, dflt
);
2465 /* ?do_narrow@?$ctype@_W@std@@MBEPB_WPB_W0DPAD@Z */
2466 /* ?do_narrow@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD@Z */
2467 /* ?do_narrow@?$ctype@G@std@@MBEPBGPBG0DPAD@Z */
2468 /* ?do_narrow@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD@Z */
2469 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow
, 20)
2470 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
2471 #define call_ctype_wchar_do_narrow(this, first, last, dflt, dest) CALL_VTBL_FUNC(this, 48, \
2472 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*), \
2473 (this, first, last, dflt, dest))
2474 #elif _MSVCP_VER <= 100
2475 #define call_ctype_wchar_do_narrow(this, first, last, dflt, dest) CALL_VTBL_FUNC(this, 44, \
2476 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*), \
2477 (this, first, last, dflt, dest))
2479 #define call_ctype_wchar_do_narrow(this, first, last, dflt, dest) CALL_VTBL_FUNC(this, 52, \
2480 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*), \
2481 (this, first, last, dflt, dest))
2483 const wchar_t* __thiscall
ctype_wchar_do_narrow(const ctype_wchar
*this,
2484 const wchar_t *first
, const wchar_t *last
, char dflt
, char *dest
)
2486 TRACE("(%p %p %p %d %p)\n", this, first
, last
, dflt
, dest
);
2487 for(; first
<last
; first
++)
2488 *dest
++ = ctype_wchar__Donarrow(this, *first
, dflt
);
2492 /* ?_Do_narrow_s@?$ctype@_W@std@@MBEPB_WPB_W0DPADI@Z */
2493 /* ?_Do_narrow_s@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD_K@Z */
2494 /* ?_Do_narrow_s@?$ctype@G@std@@MBEPBGPBG0DPADI@Z */
2495 /* ?_Do_narrow_s@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD_K@Z */
2496 DEFINE_THISCALL_WRAPPER(ctype_wchar__Do_narrow_s
, 24)
2497 #define call_ctype_wchar__Do_narrow_s(this, first, last, dflt, dest, size) CALL_VTBL_FUNC(this, 56, \
2498 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*, size_t), \
2499 (this, first, last, dflt, dest, size))
2500 const wchar_t* __thiscall
ctype_wchar__Do_narrow_s(const ctype_wchar
*this,
2501 const wchar_t *first
, const wchar_t *last
, char dflt
, char *dest
, size_t size
)
2503 TRACE("(%p %p %p %d %p %Iu)\n", this, first
, last
, dflt
, dest
, size
);
2504 /* This function converts all multi-byte characters to dflt,
2505 * thanks to it result size is known before converting */
2506 if(last
-first
> size
)
2508 return ctype_wchar_do_narrow(this, first
, last
, dflt
, dest
);
2511 /* ?narrow@?$ctype@_W@std@@QBED_WD@Z */
2512 /* ?narrow@?$ctype@_W@std@@QEBAD_WD@Z */
2513 /* ?narrow@?$ctype@G@std@@QBEDGD@Z */
2514 /* ?narrow@?$ctype@G@std@@QEBADGD@Z */
2515 DEFINE_THISCALL_WRAPPER(ctype_wchar_narrow_ch
, 12)
2516 char __thiscall
ctype_wchar_narrow_ch(const ctype_wchar
*this, wchar_t ch
, char dflt
)
2518 TRACE("(%p %d %d)\n", this, ch
, dflt
);
2519 return call_ctype_wchar_do_narrow_ch(this, ch
, dflt
);
2522 /* ?narrow@?$ctype@_W@std@@QBEPB_WPB_W0DPAD@Z */
2523 /* ?narrow@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD@Z */
2524 /* ?narrow@?$ctype@G@std@@QBEPBGPBG0DPAD@Z */
2525 /* ?narrow@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD@Z */
2526 DEFINE_THISCALL_WRAPPER(ctype_wchar_narrow
, 20)
2527 const wchar_t* __thiscall
ctype_wchar_narrow(const ctype_wchar
*this,
2528 const wchar_t *first
, const wchar_t *last
, char dflt
, char *dest
)
2530 TRACE("(%p %p %p %d %p)\n", this, first
, last
, dflt
, dest
);
2531 return call_ctype_wchar_do_narrow(this, first
, last
, dflt
, dest
);
2534 /* ?_Narrow_s@?$ctype@_W@std@@QBEPB_WPB_W0DPADI@Z */
2535 /* ?_Narrow_s@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD_K@Z */
2536 /* ?_Narrow_s@?$ctype@G@std@@QBEPBGPBG0DPADI@Z */
2537 /* ?_Narrow_s@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD_K@Z */
2538 DEFINE_THISCALL_WRAPPER(ctype_wchar__Narrow_s
, 24)
2539 const wchar_t* __thiscall
ctype_wchar__Narrow_s(const ctype_wchar
*this, const wchar_t *first
,
2540 const wchar_t *last
, char dflt
, char *dest
, size_t size
)
2542 TRACE("(%p %p %p %d %p %Iu)\n", this, first
, last
, dflt
, dest
, size
);
2543 return call_ctype_wchar__Do_narrow_s(this, first
, last
, dflt
, dest
, size
);
2547 int __cdecl
_Mbrtowc(wchar_t *out
, const char *in
, size_t len
, _Mbstatet
*state
, const _Cvtvec
*cvt
)
2553 TRACE("(%p %p %Iu %p %p)\n", out
, in
, len
, state
, cvt
);
2561 cp
= ___lc_codepage_func();
2565 *out
= (unsigned char)*in
;
2567 memset(state
, 0, sizeof(*state
));
2571 if(MBSTATET_TO_INT(state
)) {
2572 ((char*)&MBSTATET_TO_INT(state
))[1] = *in
;
2574 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, (char*)&MBSTATET_TO_INT(state
), 2, out
, out
? 1 : 0)) {
2575 memset(state
, 0, sizeof(*state
));
2580 memset(state
, 0, sizeof(*state
));
2584 GetCPInfo(cp
, &cp_info
);
2586 for(i
=0; i
<MAX_LEADBYTES
; i
+=2) {
2587 if(!cp_info
.LeadByte
[i
+1])
2589 if((unsigned char)*in
>=cp_info
.LeadByte
[i
] && (unsigned char)*in
<=cp_info
.LeadByte
[i
+1]) {
2597 MBSTATET_TO_INT(state
) = (unsigned char)*in
;
2601 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, in
, 2, out
, out
? 1 : 0)) {
2608 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, in
, 1, out
, out
? 1 : 0)) {
2615 static inline wchar_t mb_to_wc(char ch
, const _Cvtvec
*cvt
)
2620 memset(&state
, 0, sizeof(state
));
2621 return _Mbrtowc(&ret
, &ch
, 1, &state
, cvt
) == 1 ? ret
: 0;
2624 /* ?_Dowiden@?$ctype@_W@std@@IBE_WD@Z */
2625 /* ?_Dowiden@?$ctype@_W@std@@IEBA_WD@Z */
2626 /* ?_Dowiden@?$ctype@G@std@@IBEGD@Z */
2627 /* ?_Dowiden@?$ctype@G@std@@IEBAGD@Z */
2628 DEFINE_THISCALL_WRAPPER(ctype_wchar__Dowiden
, 8)
2629 wchar_t __thiscall
ctype_wchar__Dowiden(const ctype_wchar
*this, char ch
)
2634 TRACE("(%p %d)\n", this, ch
);
2636 memset(&state
, 0, sizeof(state
));
2637 return _Mbrtowc(&ret
, &ch
, 1, &state
, &this->cvt
)<0 ? WEOF
: ret
;
2640 /* ?do_widen@?$ctype@_W@std@@MBE_WD@Z */
2641 /* ?do_widen@?$ctype@_W@std@@MEBA_WD@Z */
2642 /* ?do_widen@?$ctype@G@std@@MBEGD@Z */
2643 /* ?do_widen@?$ctype@G@std@@MEBAGD@Z */
2644 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_widen_ch
, 8)
2645 #if _MSVCP_VER <= 100
2646 #define call_ctype_wchar_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 40, \
2647 wchar_t, (const ctype_wchar*, char), (this, ch))
2649 #define call_ctype_wchar_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 48, \
2650 wchar_t, (const ctype_wchar*, char), (this, ch))
2652 wchar_t __thiscall
ctype_wchar_do_widen_ch(const ctype_wchar
*this, char ch
)
2654 return ctype_wchar__Dowiden(this, ch
);
2657 /* ?do_widen@?$ctype@_W@std@@MBEPBDPBD0PA_W@Z */
2658 /* ?do_widen@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W@Z */
2659 /* ?do_widen@?$ctype@G@std@@MBEPBDPBD0PAG@Z */
2660 /* ?do_widen@?$ctype@G@std@@MEBAPEBDPEBD0PEAG@Z */
2661 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_widen
, 16)
2662 #if _MSVCP_VER <= 100
2663 #define call_ctype_wchar_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 36, \
2664 const char*, (const ctype_wchar*, const char*, const char*, wchar_t*), \
2665 (this, first, last, dest))
2667 #define call_ctype_wchar_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 44, \
2668 const char*, (const ctype_wchar*, const char*, const char*, wchar_t*), \
2669 (this, first, last, dest))
2671 const char* __thiscall
ctype_wchar_do_widen(const ctype_wchar
*this,
2672 const char *first
, const char *last
, wchar_t *dest
)
2674 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2675 for(; first
<last
; first
++)
2676 *dest
++ = ctype_wchar__Dowiden(this, *first
);
2680 /* ?_Do_widen_s@?$ctype@_W@std@@MBEPBDPBD0PA_WI@Z */
2681 /* ?_Do_widen_s@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W_K@Z */
2682 /* ?_Do_widen_s@?$ctype@G@std@@MBEPBDPBD0PAGI@Z */
2683 /* ?_Do_widen_s@?$ctype@G@std@@MEBAPEBDPEBD0PEAG_K@Z */
2684 DEFINE_THISCALL_WRAPPER(ctype_wchar__Do_widen_s
, 20)
2685 #define call_ctype_wchar__Do_widen_s(this, first, last, dest, size) CALL_VTBL_FUNC(this, 44, \
2686 const char*, (const ctype_wchar*, const char*, const char*, wchar_t*, size_t), \
2687 (this, first, last, dest, size))
2688 const char* __thiscall
ctype_wchar__Do_widen_s(const ctype_wchar
*this,
2689 const char *first
, const char *last
, wchar_t *dest
, size_t size
)
2691 TRACE("(%p %p %p %p %Iu)\n", this, first
, last
, dest
, size
);
2692 /* This function converts all multi-byte characters to WEOF,
2693 * thanks to it result size is known before converting */
2694 if(size
< last
-first
)
2696 return ctype_wchar_do_widen(this, first
, last
, dest
);
2699 /* ?widen@?$ctype@_W@std@@QBE_WD@Z */
2700 /* ?widen@?$ctype@_W@std@@QEBA_WD@Z */
2701 /* ?widen@?$ctype@G@std@@QBEGD@Z */
2702 /* ?widen@?$ctype@G@std@@QEBAGD@Z */
2703 DEFINE_THISCALL_WRAPPER(ctype_wchar_widen_ch
, 8)
2704 wchar_t __thiscall
ctype_wchar_widen_ch(const ctype_wchar
*this, char ch
)
2706 TRACE("(%p %d)\n", this, ch
);
2707 return call_ctype_wchar_do_widen_ch(this, ch
);
2710 /* ?widen@?$ctype@_W@std@@QBEPBDPBD0PA_W@Z */
2711 /* ?widen@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W@Z */
2712 /* ?widen@?$ctype@G@std@@QBEPBDPBD0PAG@Z */
2713 /* ?widen@?$ctype@G@std@@QEBAPEBDPEBD0PEAG@Z */
2714 DEFINE_THISCALL_WRAPPER(ctype_wchar_widen
, 16)
2715 const char* __thiscall
ctype_wchar_widen(const ctype_wchar
*this,
2716 const char *first
, const char *last
, wchar_t *dest
)
2718 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2719 return call_ctype_wchar_do_widen(this, first
, last
, dest
);
2722 /* ?_Widen_s@?$ctype@_W@std@@QBEPBDPBD0PA_WI@Z */
2723 /* ?_Widen_s@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W_K@Z */
2724 /* ?_Widen_s@?$ctype@G@std@@QBEPBDPBD0PAGI@Z */
2725 /* ?_Widen_s@?$ctype@G@std@@QEBAPEBDPEBD0PEAG_K@Z */
2726 DEFINE_THISCALL_WRAPPER(ctype_wchar__Widen_s
, 20)
2727 const char* __thiscall
ctype_wchar__Widen_s(const ctype_wchar
*this,
2728 const char *first
, const char *last
, wchar_t *dest
, size_t size
)
2730 TRACE("(%p %p %p %p %Iu)\n", this, first
, last
, dest
, size
);
2731 return call_ctype_wchar__Do_widen_s(this, first
, last
, dest
, size
);
2734 /* ?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2735 /* ?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2736 size_t __cdecl
ctype_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
2738 TRACE("(%p %p)\n", facet
, loc
);
2740 if(facet
&& !*facet
) {
2743 *facet
= MSVCRT_operator_new(sizeof(ctype_wchar
));
2745 ERR("Out of memory\n");
2746 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
2750 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
2751 ctype_wchar_ctor_locinfo((ctype_wchar
*)*facet
, &locinfo
, 0);
2752 _Locinfo_dtor(&locinfo
);
2758 /* ?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@@Z */
2759 /* ?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
2760 size_t __cdecl
ctype_wchar__Getcat_old(const locale_facet
**facet
)
2762 return ctype_wchar__Getcat(facet
, locale_classic());
2765 /* ?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2766 /* ?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2767 size_t __cdecl
ctype_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
2769 if(facet
&& !*facet
) {
2770 ctype_wchar__Getcat(facet
, loc
);
2771 (*(locale_facet
**)facet
)->vtable
= &ctype_short_vtable
;
2777 /* ?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@@Z */
2778 /* ?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
2779 size_t __cdecl
ctype_short__Getcat_old(const locale_facet
**facet
)
2781 return ctype_short__Getcat(facet
, locale_classic());
2785 wchar_t __cdecl
_Towlower(wchar_t ch
, const _Ctypevec
*ctype
)
2787 TRACE("(%d %p)\n", ch
, ctype
);
2788 return towlower(ch
);
2791 ctype_wchar
* ctype_wchar_use_facet(const locale
*loc
)
2793 static ctype_wchar
*obj
= NULL
;
2796 const locale_facet
*fac
;
2798 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
2799 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_wchar_id
));
2801 _Lockit_dtor(&lock
);
2802 return (ctype_wchar
*)fac
;
2806 _Lockit_dtor(&lock
);
2810 ctype_wchar__Getcat(&fac
, loc
);
2811 obj
= (ctype_wchar
*)fac
;
2812 call_locale_facet__Incref(&obj
->base
.facet
);
2813 locale_facet_register(&obj
->base
.facet
);
2814 _Lockit_dtor(&lock
);
2819 ctype_wchar
* ctype_short_use_facet(const locale
*loc
)
2821 static ctype_wchar
*obj
= NULL
;
2824 const locale_facet
*fac
;
2826 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
2827 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_short_id
));
2829 _Lockit_dtor(&lock
);
2830 return (ctype_wchar
*)fac
;
2834 _Lockit_dtor(&lock
);
2838 ctype_short__Getcat(&fac
, loc
);
2839 obj
= (ctype_wchar
*)fac
;
2840 call_locale_facet__Incref(&obj
->base
.facet
);
2841 locale_facet_register(&obj
->base
.facet
);
2842 _Lockit_dtor(&lock
);
2847 /* ?do_tolower@?$ctype@_W@std@@MBE_W_W@Z */
2848 /* ?do_tolower@?$ctype@_W@std@@MEBA_W_W@Z */
2849 /* ?do_tolower@?$ctype@G@std@@MBEGG@Z */
2850 /* ?do_tolower@?$ctype@G@std@@MEBAGG@Z */
2851 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_tolower_ch
, 8)
2852 #if _MSVCP_VER <= 100
2853 #define call_ctype_wchar_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
2854 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2856 #define call_ctype_wchar_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 32, \
2857 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2859 wchar_t __thiscall
ctype_wchar_do_tolower_ch(const ctype_wchar
*this, wchar_t ch
)
2861 return _Towlower(ch
, &this->ctype
);
2864 /* ?do_tolower@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */
2865 /* ?do_tolower@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z */
2866 /* ?do_tolower@?$ctype@G@std@@MBEPBGPAGPBG@Z */
2867 /* ?do_tolower@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */
2868 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_tolower
, 12)
2869 #if _MSVCP_VER <= 100
2870 #define call_ctype_wchar_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 20, \
2871 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2872 (this, first, last))
2874 #define call_ctype_wchar_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 28, \
2875 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2876 (this, first, last))
2878 const wchar_t* __thiscall
ctype_wchar_do_tolower(const ctype_wchar
*this,
2879 wchar_t *first
, const wchar_t *last
)
2881 TRACE("(%p %p %p)\n", this, first
, last
);
2882 for(; first
<last
; first
++)
2883 *first
= _Towlower(*first
, &this->ctype
);
2887 /* ?tolower@?$ctype@_W@std@@QBE_W_W@Z */
2888 /* ?tolower@?$ctype@_W@std@@QEBA_W_W@Z */
2889 /* ?tolower@?$ctype@G@std@@QBEGG@Z */
2890 /* ?tolower@?$ctype@G@std@@QEBAGG@Z */
2891 DEFINE_THISCALL_WRAPPER(ctype_wchar_tolower_ch
, 8)
2892 wchar_t __thiscall
ctype_wchar_tolower_ch(const ctype_wchar
*this, wchar_t ch
)
2894 TRACE("(%p %d)\n", this, ch
);
2895 return call_ctype_wchar_do_tolower_ch(this, ch
);
2898 /* ?tolower@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */
2899 /* ?tolower@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z */
2900 /* ?tolower@?$ctype@G@std@@QBEPBGPAGPBG@Z */
2901 /* ?tolower@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z */
2902 DEFINE_THISCALL_WRAPPER(ctype_wchar_tolower
, 12)
2903 const wchar_t* __thiscall
ctype_wchar_tolower(const ctype_wchar
*this,
2904 wchar_t *first
, const wchar_t *last
)
2906 TRACE("(%p %p %p)\n", this, first
, last
);
2907 return call_ctype_wchar_do_tolower(this, first
, last
);
2911 wchar_t __cdecl
_Towupper(wchar_t ch
, const _Ctypevec
*ctype
)
2913 TRACE("(%d %p)\n", ch
, ctype
);
2914 return towupper(ch
);
2917 /* ?do_toupper@?$ctype@_W@std@@MBE_W_W@Z */
2918 /* ?do_toupper@?$ctype@_W@std@@MEBA_W_W@Z */
2919 /* ?do_toupper@?$ctype@G@std@@MBEGG@Z */
2920 /* ?do_toupper@?$ctype@G@std@@MEBAGG@Z */
2921 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper_ch
, 8)
2922 #if _MSVCP_VER <= 100
2923 #define call_ctype_wchar_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 32, \
2924 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2926 #define call_ctype_wchar_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 40, \
2927 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2929 wchar_t __thiscall
ctype_wchar_do_toupper_ch(const ctype_wchar
*this, wchar_t ch
)
2931 return _Towupper(ch
, &this->ctype
);
2934 /* ?do_toupper@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */
2935 /* ?do_toupper@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z */
2936 /* ?do_toupper@?$ctype@G@std@@MBEPBGPAGPBG@Z */
2937 /* ?do_toupper@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */
2938 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper
, 12)
2939 #if _MSVCP_VER <= 100
2940 #define call_ctype_wchar_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 28, \
2941 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2942 (this, first, last))
2944 #define call_ctype_wchar_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 36, \
2945 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2946 (this, first, last))
2948 const wchar_t* __thiscall
ctype_wchar_do_toupper(const ctype_wchar
*this,
2949 wchar_t *first
, const wchar_t *last
)
2951 TRACE("(%p %p %p)\n", this, first
, last
);
2952 for(; first
<last
; first
++)
2953 *first
= _Towupper(*first
, &this->ctype
);
2957 /* ?toupper@?$ctype@_W@std@@QBE_W_W@Z */
2958 /* ?toupper@?$ctype@_W@std@@QEBA_W_W@Z */
2959 /* ?toupper@?$ctype@G@std@@QBEGG@Z */
2960 /* ?toupper@?$ctype@G@std@@QEBAGG@Z */
2961 DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper_ch
, 8)
2962 wchar_t __thiscall
ctype_wchar_toupper_ch(const ctype_wchar
*this, wchar_t ch
)
2964 TRACE("(%p %d)\n", this, ch
);
2965 return call_ctype_wchar_do_toupper_ch(this, ch
);
2968 /* ?toupper@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */
2969 /* ?toupper@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z */
2970 /* ?toupper@?$ctype@G@std@@QBEPBGPAGPBG@Z */
2971 /* ?toupper@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z */
2972 DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper
, 12)
2973 const wchar_t* __thiscall
ctype_wchar_toupper(const ctype_wchar
*this,
2974 wchar_t *first
, const wchar_t *last
)
2976 TRACE("(%p %p %p)\n", this, first
, last
);
2977 return call_ctype_wchar_do_toupper(this, first
, last
);
2981 const wchar_t* __cdecl
_Getwctypes(const wchar_t *first
, const wchar_t *last
,
2982 short *mask
, const _Ctypevec
*ctype
)
2984 TRACE("(%p %p %p %p)\n", first
, last
, mask
, ctype
);
2985 GetStringTypeW(CT_CTYPE1
, first
, last
-first
, (WORD
*)mask
);
2990 short __cdecl
_Getwctype(wchar_t ch
, const _Ctypevec
*ctype
)
2993 _Getwctypes(&ch
, &ch
+1, &mask
, ctype
);
2997 /* ?do_is@?$ctype@_W@std@@MBE_NF_W@Z */
2998 /* ?do_is@?$ctype@_W@std@@MEBA_NF_W@Z */
2999 /* ?do_is@?$ctype@G@std@@MBE_NFG@Z */
3000 /* ?do_is@?$ctype@G@std@@MEBA_NFG@Z */
3001 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is_ch
, 12)
3002 #if _MSVCP_VER <= 100
3003 #define call_ctype_wchar_do_is_ch(this, mask, ch) CALL_VTBL_FUNC(this, 8, \
3004 bool, (const ctype_wchar*, short, wchar_t), (this, mask, ch))
3006 #define call_ctype_wchar_do_is_ch(this, mask, ch) CALL_VTBL_FUNC(this, 16, \
3007 bool, (const ctype_wchar*, short, wchar_t), (this, mask, ch))
3009 bool __thiscall
ctype_wchar_do_is_ch(const ctype_wchar
*this, short mask
, wchar_t ch
)
3011 TRACE("(%p %x %d)\n", this, mask
, ch
);
3012 return (_Getwctype(ch
, &this->ctype
) & mask
) != 0;
3015 /* ?do_is@?$ctype@_W@std@@MBEPB_WPB_W0PAF@Z */
3016 /* ?do_is@?$ctype@_W@std@@MEBAPEB_WPEB_W0PEAF@Z */
3017 /* ?do_is@?$ctype@G@std@@MBEPBGPBG0PAF@Z */
3018 /* ?do_is@?$ctype@G@std@@MEBAPEBGPEBG0PEAF@Z */
3019 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is
, 16)
3020 #if _MSVCP_VER <= 100
3021 #define call_ctype_wchar_do_is(this, first, last, dest) CALL_VTBL_FUNC(this, 4, \
3022 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, short*), \
3023 (this, first, last, dest))
3025 #define call_ctype_wchar_do_is(this, first, last, dest) CALL_VTBL_FUNC(this, 12, \
3026 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, short*), \
3027 (this, first, last, dest))
3029 const wchar_t* __thiscall
ctype_wchar_do_is(const ctype_wchar
*this,
3030 const wchar_t *first
, const wchar_t *last
, short *dest
)
3032 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
3033 return _Getwctypes(first
, last
, dest
, &this->ctype
);
3036 /* ?is@?$ctype@_W@std@@QBE_NF_W@Z */
3037 /* ?is@?$ctype@_W@std@@QEBA_NF_W@Z */
3038 /* ?is@?$ctype@G@std@@QBE_NFG@Z */
3039 /* ?is@?$ctype@G@std@@QEBA_NFG@Z */
3040 DEFINE_THISCALL_WRAPPER(ctype_wchar_is_ch
, 12)
3041 bool __thiscall
ctype_wchar_is_ch(const ctype_wchar
*this, short mask
, wchar_t ch
)
3043 TRACE("(%p %x %d)\n", this, mask
, ch
);
3044 return call_ctype_wchar_do_is_ch(this, mask
, ch
);
3047 /* ?is@?$ctype@_W@std@@QBEPB_WPB_W0PAF@Z */
3048 /* ?is@?$ctype@_W@std@@QEBAPEB_WPEB_W0PEAF@Z */
3049 /* ?is@?$ctype@G@std@@QBEPBGPBG0PAF@Z */
3050 /* ?is@?$ctype@G@std@@QEBAPEBGPEBG0PEAF@Z */
3051 DEFINE_THISCALL_WRAPPER(ctype_wchar_is
, 16)
3052 const wchar_t* __thiscall
ctype_wchar_is(const ctype_wchar
*this,
3053 const wchar_t *first
, const wchar_t *last
, short *dest
)
3055 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
3056 return call_ctype_wchar_do_is(this, first
, last
, dest
);
3059 /* ?do_scan_is@?$ctype@_W@std@@MBEPB_WFPB_W0@Z */
3060 /* ?do_scan_is@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z */
3061 /* ?do_scan_is@?$ctype@G@std@@MBEPBGFPBG0@Z */
3062 /* ?do_scan_is@?$ctype@G@std@@MEBAPEBGFPEBG0@Z */
3063 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_scan_is
, 16)
3064 #if _MSVCP_VER <= 100
3065 #define call_ctype_wchar_do_scan_is(this, mask, first, last) CALL_VTBL_FUNC(this, 12, \
3066 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
3067 (this, mask, first, last))
3069 #define call_ctype_wchar_do_scan_is(this, mask, first, last) CALL_VTBL_FUNC(this, 20, \
3070 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
3071 (this, mask, first, last))
3073 const wchar_t* __thiscall
ctype_wchar_do_scan_is(const ctype_wchar
*this,
3074 short mask
, const wchar_t *first
, const wchar_t *last
)
3076 TRACE("(%p %d %p %p)\n", this, mask
, first
, last
);
3077 for(; first
<last
; first
++)
3078 if(!ctype_wchar_is_ch(this, mask
, *first
))
3083 /* ?scan_is@?$ctype@_W@std@@QBEPB_WFPB_W0@Z */
3084 /* ?scan_is@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z */
3085 /* ?scan_is@?$ctype@G@std@@QBEPBGFPBG0@Z */
3086 /* ?scan_is@?$ctype@G@std@@QEBAPEBGFPEBG0@Z */
3087 DEFINE_THISCALL_WRAPPER(ctype_wchar_scan_is
, 16)
3088 const wchar_t* __thiscall
ctype_wchar_scan_is(const ctype_wchar
*this,
3089 short mask
, const wchar_t *first
, const wchar_t *last
)
3091 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
3092 return call_ctype_wchar_do_scan_is(this, mask
, first
, last
);
3095 /* ?do_scan_not@?$ctype@_W@std@@MBEPB_WFPB_W0@Z */
3096 /* ?do_scan_not@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z */
3097 /* ?do_scan_not@?$ctype@G@std@@MBEPBGFPBG0@Z */
3098 /* ?do_scan_not@?$ctype@G@std@@MEBAPEBGFPEBG0@Z */
3099 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_scan_not
, 16)
3100 #if _MSVCP_VER <= 100
3101 #define call_ctype_wchar_do_scan_not(this, mask, first, last) CALL_VTBL_FUNC(this, 16, \
3102 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
3103 (this, mask, first, last))
3105 #define call_ctype_wchar_do_scan_not(this, mask, first, last) CALL_VTBL_FUNC(this, 24, \
3106 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
3107 (this, mask, first, last))
3109 const wchar_t* __thiscall
ctype_wchar_do_scan_not(const ctype_wchar
*this,
3110 short mask
, const wchar_t *first
, const wchar_t *last
)
3112 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
3113 for(; first
<last
; first
++)
3114 if(ctype_wchar_is_ch(this, mask
, *first
))
3119 /* ?scan_not@?$ctype@_W@std@@QBEPB_WFPB_W0@Z */
3120 /* ?scan_not@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z */
3121 /* ?scan_not@?$ctype@G@std@@QBEPBGFPBG0@Z */
3122 /* ?scan_not@?$ctype@G@std@@QEBAPEBGFPEBG0@Z */
3123 DEFINE_THISCALL_WRAPPER(ctype_wchar_scan_not
, 16)
3124 const wchar_t* __thiscall
ctype_wchar_scan_not(const ctype_wchar
*this,
3125 short mask
, const wchar_t *first
, const wchar_t *last
)
3127 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
3128 return call_ctype_wchar_do_scan_not(this, mask
, first
, last
);
3131 /* ??_7codecvt_base@std@@6B@ */
3132 extern const vtable_ptr codecvt_base_vtable
;
3134 /* ??0codecvt_base@std@@QAE@I@Z */
3135 /* ??0codecvt_base@std@@QEAA@_K@Z */
3136 DEFINE_THISCALL_WRAPPER(codecvt_base_ctor_refs
, 8)
3137 codecvt_base
* __thiscall
codecvt_base_ctor_refs(codecvt_base
*this, size_t refs
)
3139 TRACE("(%p %Iu)\n", this, refs
);
3140 locale_facet_ctor_refs(&this->facet
, refs
);
3141 this->facet
.vtable
= &codecvt_base_vtable
;
3145 /* ??_Fcodecvt_base@std@@QAEXXZ */
3146 /* ??_Fcodecvt_base@std@@QEAAXXZ */
3147 DEFINE_THISCALL_WRAPPER(codecvt_base_ctor
, 4)
3148 codecvt_base
* __thiscall
codecvt_base_ctor(codecvt_base
*this)
3150 return codecvt_base_ctor_refs(this, 0);
3153 /* ??1codecvt_base@std@@UAE@XZ */
3154 /* ??1codecvt_base@std@@UEAA@XZ */
3155 DEFINE_THISCALL_WRAPPER(codecvt_base_dtor
, 4)
3156 void __thiscall
codecvt_base_dtor(codecvt_base
*this)
3158 TRACE("(%p)\n", this);
3159 locale_facet_dtor(&this->facet
);
3162 DEFINE_THISCALL_WRAPPER(codecvt_base_vector_dtor
, 8)
3163 codecvt_base
* __thiscall
codecvt_base_vector_dtor(codecvt_base
*this, unsigned int flags
)
3165 TRACE("(%p %x)\n", this, flags
);
3167 /* we have an array, with the number of elements stored before the first object */
3168 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
3170 for(i
=*ptr
-1; i
>=0; i
--)
3171 codecvt_base_dtor(this+i
);
3172 MSVCRT_operator_delete(ptr
);
3174 codecvt_base_dtor(this);
3176 MSVCRT_operator_delete(this);
3182 /* ?do_always_noconv@codecvt_base@std@@MBE_NXZ */
3183 /* ?do_always_noconv@codecvt_base@std@@MEBA_NXZ */
3184 #if _MSVCP_VER <= 100
3185 #define call_codecvt_base_do_always_noconv(this) CALL_VTBL_FUNC(this, 4, \
3186 bool, (const codecvt_base*), (this))
3188 #define call_codecvt_base_do_always_noconv(this) CALL_VTBL_FUNC(this, 12, \
3189 bool, (const codecvt_base*), (this))
3191 DEFINE_THISCALL_WRAPPER(codecvt_base_do_always_noconv
, 4)
3192 bool __thiscall
codecvt_base_do_always_noconv(const codecvt_base
*this)
3194 TRACE("(%p)\n", this);
3195 return _MSVCP_VER
<= 100;
3198 /* ?always_noconv@codecvt_base@std@@QBE_NXZ */
3199 /* ?always_noconv@codecvt_base@std@@QEBA_NXZ */
3200 DEFINE_THISCALL_WRAPPER(codecvt_base_always_noconv
, 4)
3201 bool __thiscall
codecvt_base_always_noconv(const codecvt_base
*this)
3203 TRACE("(%p)\n", this);
3204 return call_codecvt_base_do_always_noconv(this);
3207 /* ?do_max_length@codecvt_base@std@@MBEHXZ */
3208 /* ?do_max_length@codecvt_base@std@@MEBAHXZ */
3209 #if _MSVCP_VER <= 100
3210 #define call_codecvt_base_do_max_length(this) CALL_VTBL_FUNC(this, 8, \
3211 int, (const codecvt_base*), (this))
3213 #define call_codecvt_base_do_max_length(this) CALL_VTBL_FUNC(this, 16, \
3214 int, (const codecvt_base*), (this))
3216 DEFINE_THISCALL_WRAPPER(codecvt_base_do_max_length
, 4)
3217 int __thiscall
codecvt_base_do_max_length(const codecvt_base
*this)
3219 TRACE("(%p)\n", this);
3223 /* ?max_length@codecvt_base@std@@QBEHXZ */
3224 /* ?max_length@codecvt_base@std@@QEBAHXZ */
3225 DEFINE_THISCALL_WRAPPER(codecvt_base_max_length
, 4)
3226 int __thiscall
codecvt_base_max_length(const codecvt_base
*this)
3228 TRACE("(%p)\n", this);
3229 return call_codecvt_base_do_max_length(this);
3232 /* ?do_encoding@codecvt_base@std@@MBEHXZ */
3233 /* ?do_encoding@codecvt_base@std@@MEBAHXZ */
3234 #if _MSVCP_VER <= 100
3235 #define call_codecvt_base_do_encoding(this) CALL_VTBL_FUNC(this, 12, \
3236 int, (const codecvt_base*), (this))
3238 #define call_codecvt_base_do_encoding(this) CALL_VTBL_FUNC(this, 20, \
3239 int, (const codecvt_base*), (this))
3241 DEFINE_THISCALL_WRAPPER(codecvt_base_do_encoding
, 4)
3242 int __thiscall
codecvt_base_do_encoding(const codecvt_base
*this)
3244 TRACE("(%p)\n", this);
3248 /* ?encoding@codecvt_base@std@@QBEHXZ */
3249 /* ?encoding@codecvt_base@std@@QEBAHXZ */
3250 DEFINE_THISCALL_WRAPPER(codecvt_base_encoding
, 4)
3251 int __thiscall
codecvt_base_encoding(const codecvt_base
*this)
3253 TRACE("(%p)\n", this);
3254 return call_codecvt_base_do_encoding(this);
3257 /* ?id@?$codecvt@DDH@std@@2V0locale@2@A */
3258 locale_id codecvt_char_id
= {0};
3260 /* ??_7?$codecvt@DDH@std@@6B@ */
3261 extern const vtable_ptr codecvt_char_vtable
;
3263 /* ?_Init@?$codecvt@DDH@std@@IAEXABV_Locinfo@2@@Z */
3264 /* ?_Init@?$codecvt@DDH@std@@IEAAXAEBV_Locinfo@2@@Z */
3265 DEFINE_THISCALL_WRAPPER(codecvt_char__Init
, 8)
3266 void __thiscall
codecvt_char__Init(codecvt_char
*this, const _Locinfo
*locinfo
)
3268 TRACE("(%p %p)\n", this, locinfo
);
3271 /* ??0?$codecvt@DDH@std@@QAE@ABV_Locinfo@1@I@Z */
3272 /* ??0?$codecvt@DDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
3273 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor_locinfo
, 12)
3274 codecvt_char
* __thiscall
codecvt_char_ctor_locinfo(codecvt_char
*this, const _Locinfo
*locinfo
, size_t refs
)
3276 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
3277 codecvt_base_ctor_refs(&this->base
, refs
);
3278 this->base
.facet
.vtable
= &codecvt_char_vtable
;
3282 /* ??0?$codecvt@DDH@std@@QAE@I@Z */
3283 /* ??0?$codecvt@DDH@std@@QEAA@_K@Z */
3284 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor_refs
, 8)
3285 codecvt_char
* __thiscall
codecvt_char_ctor_refs(codecvt_char
*this, size_t refs
)
3287 return codecvt_char_ctor_locinfo(this, NULL
, refs
);
3290 /* ??_F?$codecvt@DDH@std@@QAEXXZ */
3291 /* ??_F?$codecvt@DDH@std@@QEAAXXZ */
3292 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor
, 4)
3293 codecvt_char
* __thiscall
codecvt_char_ctor(codecvt_char
*this)
3295 return codecvt_char_ctor_locinfo(this, NULL
, 0);
3298 /* ??1?$codecvt@DDH@std@@UAE@XZ */
3299 /* ??1?$codecvt@DDH@std@@UEAA@XZ */
3300 /* ??1?$codecvt@DDH@std@@MAE@XZ */
3301 /* ??1?$codecvt@DDH@std@@MEAA@XZ */
3302 DEFINE_THISCALL_WRAPPER(codecvt_char_dtor
, 4)
3303 void __thiscall
codecvt_char_dtor(codecvt_char
*this)
3305 TRACE("(%p)\n", this);
3306 codecvt_base_dtor(&this->base
);
3309 DEFINE_THISCALL_WRAPPER(codecvt_char_vector_dtor
, 8)
3310 codecvt_char
* __thiscall
codecvt_char_vector_dtor(codecvt_char
*this, unsigned int flags
)
3312 TRACE("(%p %x)\n", this, flags
);
3314 /* we have an array, with the number of elements stored before the first object */
3315 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
3317 for(i
=*ptr
-1; i
>=0; i
--)
3318 codecvt_char_dtor(this+i
);
3319 MSVCRT_operator_delete(ptr
);
3321 codecvt_char_dtor(this);
3323 MSVCRT_operator_delete(this);
3329 /* ?_Getcat@?$codecvt@DDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3330 /* ?_Getcat@?$codecvt@DDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3331 size_t __cdecl
codecvt_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
3333 TRACE("(%p %p)\n", facet
, loc
);
3335 if(facet
&& !*facet
) {
3336 *facet
= MSVCRT_operator_new(sizeof(codecvt_char
));
3338 ERR("Out of memory\n");
3339 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3342 codecvt_char_ctor((codecvt_char
*)*facet
);
3348 /* ?_Getcat@?$codecvt@DDH@std@@SAIPAPBVfacet@locale@2@@Z */
3349 /* ?_Getcat@?$codecvt@DDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3350 size_t __cdecl
codecvt_char__Getcat_old(const locale_facet
**facet
)
3352 return codecvt_char__Getcat(facet
, locale_classic());
3355 codecvt_char
* codecvt_char_use_facet(const locale
*loc
)
3357 static codecvt_char
*obj
= NULL
;
3360 const locale_facet
*fac
;
3362 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3363 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_char_id
));
3365 _Lockit_dtor(&lock
);
3366 return (codecvt_char
*)fac
;
3370 _Lockit_dtor(&lock
);
3374 codecvt_char__Getcat(&fac
, loc
);
3375 obj
= (codecvt_char
*)fac
;
3376 call_locale_facet__Incref(&obj
->base
.facet
);
3377 locale_facet_register(&obj
->base
.facet
);
3378 _Lockit_dtor(&lock
);
3383 /* ?do_always_noconv@?$codecvt@DDH@std@@MBE_NXZ */
3384 /* ?do_always_noconv@?$codecvt@DDH@std@@MEBA_NXZ */
3385 DEFINE_THISCALL_WRAPPER(codecvt_char_do_always_noconv
, 4)
3386 bool __thiscall
codecvt_char_do_always_noconv(const codecvt_char
*this)
3388 TRACE("(%p)\n", this);
3392 /* ?do_in@?$codecvt@DDH@std@@MBEHAAHPBD1AAPBDPAD3AAPAD@Z */
3393 /* ?do_in@?$codecvt@DDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
3394 #if _MSVCP_VER <= 100
3395 #define call_codecvt_char_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
3396 CALL_VTBL_FUNC(this, 16, int, \
3397 (const codecvt_char*, _Mbstatet*, const char*, const char*, const char**, char*, char*, char**), \
3398 (this, state, from, from_end, from_next, to, to_end, to_next))
3400 #define call_codecvt_char_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
3401 CALL_VTBL_FUNC(this, 24, int, \
3402 (const codecvt_char*, _Mbstatet*, const char*, const char*, const char**, char*, char*, char**), \
3403 (this, state, from, from_end, from_next, to, to_end, to_next))
3405 DEFINE_THISCALL_WRAPPER(codecvt_char_do_in
, 32)
3406 int __thiscall
codecvt_char_do_in(const codecvt_char
*this, _Mbstatet
*state
,
3407 const char *from
, const char *from_end
, const char **from_next
,
3408 char *to
, char *to_end
, char **to_next
)
3410 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
3411 from_next
, to
, to_end
, to_next
);
3414 return CODECVT_noconv
;
3417 /* ?in@?$codecvt@DDH@std@@QBEHAAHPBD1AAPBDPAD3AAPAD@Z */
3418 /* ?in@?$codecvt@DDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
3419 DEFINE_THISCALL_WRAPPER(codecvt_char_in
, 32)
3420 int __thiscall
codecvt_char_in(const codecvt_char
*this, _Mbstatet
*state
,
3421 const char *from
, const char *from_end
, const char **from_next
,
3422 char *to
, char *to_end
, char **to_next
)
3424 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
3425 from_next
, to
, to_end
, to_next
);
3426 return call_codecvt_char_do_in(this, state
, from
, from_end
, from_next
,
3427 to
, to_end
, to_next
);
3430 /* ?do_out@?$codecvt@DDH@std@@MBEHAAHPBD1AAPBDPAD3AAPAD@Z */
3431 /* ?do_out@?$codecvt@DDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
3432 #if _MSVCP_VER <= 100
3433 #define call_codecvt_char_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
3434 CALL_VTBL_FUNC(this, 20, int, \
3435 (const codecvt_char*, _Mbstatet*, const char*, const char*, const char**, char*, char*, char**), \
3436 (this, state, from, from_end, from_next, to, to_end, to_next))
3438 #define call_codecvt_char_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
3439 CALL_VTBL_FUNC(this, 28, int, \
3440 (const codecvt_char*, _Mbstatet*, const char*, const char*, const char**, char*, char*, char**), \
3441 (this, state, from, from_end, from_next, to, to_end, to_next))
3443 DEFINE_THISCALL_WRAPPER(codecvt_char_do_out
, 32)
3444 int __thiscall
codecvt_char_do_out(const codecvt_char
*this, _Mbstatet
*state
,
3445 const char *from
, const char *from_end
, const char **from_next
,
3446 char *to
, char *to_end
, char **to_next
)
3448 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3449 from_end
, from_next
, to
, to_end
, to_next
);
3452 return CODECVT_noconv
;
3455 /* ?out@?$codecvt@DDH@std@@QBEHAAHPBD1AAPBDPAD3AAPAD@Z */
3456 /* ?out@?$codecvt@DDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
3457 DEFINE_THISCALL_WRAPPER(codecvt_char_out
, 32)
3458 int __thiscall
codecvt_char_out(const codecvt_char
*this, _Mbstatet
*state
,
3459 const char *from
, const char *from_end
, const char **from_next
,
3460 char *to
, char *to_end
, char **to_next
)
3462 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
3463 from_next
, to
, to_end
, to_next
);
3464 return call_codecvt_char_do_out(this, state
, from
, from_end
, from_next
,
3465 to
, to_end
, to_next
);
3468 /* ?do_unshift@?$codecvt@DDH@std@@MBEHAAHPAD1AAPAD@Z */
3469 /* ?do_unshift@?$codecvt@DDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
3470 #if _MSVCP_VER <= 100
3471 #define call_codecvt_char_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 24, \
3472 int, (const codecvt_char*, _Mbstatet*, char*, char*, char**), (this, state, to, to_end, to_next))
3474 #define call_codecvt_char_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 32, \
3475 int, (const codecvt_char*, _Mbstatet*, char*, char*, char**), (this, state, to, to_end, to_next))
3477 DEFINE_THISCALL_WRAPPER(codecvt_char_do_unshift
, 20)
3478 int __thiscall
codecvt_char_do_unshift(const codecvt_char
*this,
3479 _Mbstatet
*state
, char *to
, char *to_end
, char **to_next
)
3481 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3483 return CODECVT_noconv
;
3486 /* ?unshift@?$codecvt@DDH@std@@QBEHAAHPAD1AAPAD@Z */
3487 /* ?unshift@?$codecvt@DDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
3488 DEFINE_THISCALL_WRAPPER(codecvt_char_unshift
, 20)
3489 int __thiscall
codecvt_char_unshift(const codecvt_char
*this,
3490 _Mbstatet
*state
, char *to
, char *to_end
, char **to_next
)
3492 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3493 return call_codecvt_char_do_unshift(this, state
, to
, to_end
, to_next
);
3496 /* ?do_length@?$codecvt@DDH@std@@MBEHABHPBD1I@Z */
3497 /* ?do_length@?$codecvt@DDH@std@@MEBAHAEBHPEBD1_K@Z */
3498 #if _MSVCP_VER <= 100
3499 #define call_codecvt_char_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 28, \
3500 int, (const codecvt_char*, const _Mbstatet*, const char*, const char*, size_t), \
3501 (this, state, from, from_end, max))
3503 #define call_codecvt_char_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 36, \
3504 int, (const codecvt_char*, const _Mbstatet*, const char*, const char*, size_t), \
3505 (this, state, from, from_end, max))
3507 DEFINE_THISCALL_WRAPPER(codecvt_char_do_length
, 20)
3508 int __thiscall
codecvt_char_do_length(const codecvt_char
*this, const _Mbstatet
*state
,
3509 const char *from
, const char *from_end
, size_t max
)
3511 TRACE("(%p %p %p %p %Iu)\n", this, state
, from
, from_end
, max
);
3512 return (from_end
-from
> max
? max
: from_end
-from
);
3515 /* ?length@?$codecvt@DDH@std@@QBEHABHPBD1I@Z */
3516 /* ?length@?$codecvt@DDH@std@@QEBAHAEBHPEBD1_K@Z */
3517 DEFINE_THISCALL_WRAPPER(codecvt_char_length
, 20)
3518 int __thiscall
codecvt_char_length(const codecvt_char
*this, const _Mbstatet
*state
,
3519 const char *from
, const char *from_end
, size_t max
)
3521 TRACE("(%p %p %p %p %Iu)\n", this, state
, from
, from_end
, max
);
3522 return call_codecvt_char_do_length(this, state
, from
, from_end
, max
);
3525 /* ?id@?$codecvt@_WDH@std@@2V0locale@2@A */
3526 locale_id codecvt_wchar_id
= {0};
3527 /* ?id@?$codecvt@GDH@std@@2V0locale@2@A */
3528 locale_id codecvt_short_id
= {0};
3530 /* ??_7?$codecvt@_WDH@std@@6B@ */
3531 extern const vtable_ptr codecvt_wchar_vtable
;
3532 /* ??_7?$codecvt@GDH@std@@6B@ */
3533 extern const vtable_ptr codecvt_short_vtable
;
3535 /* ?_Init@?$codecvt@GDH@std@@IAEXABV_Locinfo@2@@Z */
3536 /* ?_Init@?$codecvt@GDH@std@@IEAAXAEBV_Locinfo@2@@Z */
3537 /* ?_Init@?$codecvt@_WDH@std@@IAEXABV_Locinfo@2@@Z */
3538 /* ?_Init@?$codecvt@_WDH@std@@IEAAXAEBV_Locinfo@2@@Z */
3539 DEFINE_THISCALL_WRAPPER(codecvt_wchar__Init
, 8)
3540 void __thiscall
codecvt_wchar__Init(codecvt_wchar
*this, const _Locinfo
*locinfo
)
3542 TRACE("(%p %p)\n", this, locinfo
);
3543 _Locinfo__Getcvt(locinfo
, &this->cvt
);
3546 /* ??0?$codecvt@_WDH@std@@QAE@ABV_Locinfo@1@I@Z */
3547 /* ??0?$codecvt@_WDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
3548 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor_locinfo
, 12)
3549 codecvt_wchar
* __thiscall
codecvt_wchar_ctor_locinfo(codecvt_wchar
*this, const _Locinfo
*locinfo
, size_t refs
)
3551 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
3553 codecvt_base_ctor_refs(&this->base
, refs
);
3554 this->base
.facet
.vtable
= &codecvt_wchar_vtable
;
3556 codecvt_wchar__Init(this, locinfo
);
3560 /* ??0?$codecvt@GDH@std@@QAE@ABV_Locinfo@1@I@Z */
3561 /* ??0?$codecvt@GDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
3562 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor_locinfo
, 12)
3563 codecvt_wchar
* __thiscall
codecvt_short_ctor_locinfo(codecvt_wchar
*this, const _Locinfo
*locinfo
, size_t refs
)
3565 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
3567 codecvt_wchar_ctor_locinfo(this, locinfo
, refs
);
3568 this->base
.facet
.vtable
= &codecvt_short_vtable
;
3572 /* ??0?$codecvt@_WDH@std@@QAE@I@Z */
3573 /* ??0?$codecvt@_WDH@std@@QEAA@_K@Z */
3574 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor_refs
, 8)
3575 codecvt_wchar
* __thiscall
codecvt_wchar_ctor_refs(codecvt_wchar
*this, size_t refs
)
3579 TRACE("(%p %Iu)\n", this, refs
);
3581 _Locinfo_ctor(&locinfo
);
3582 codecvt_wchar_ctor_locinfo(this, &locinfo
, refs
);
3583 _Locinfo_dtor(&locinfo
);
3587 /* ??0?$codecvt@GDH@std@@QAE@I@Z */
3588 /* ??0?$codecvt@GDH@std@@QEAA@_K@Z */
3589 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor_refs
, 8)
3590 codecvt_wchar
* __thiscall
codecvt_short_ctor_refs(codecvt_wchar
*this, size_t refs
)
3594 TRACE("(%p %Iu)\n", this, refs
);
3596 _Locinfo_ctor(&locinfo
);
3597 codecvt_short_ctor_locinfo(this, &locinfo
, refs
);
3598 _Locinfo_dtor(&locinfo
);
3602 /* ??0?$codecvt@GDH@std@@IAE@PBDI@Z */
3603 /* ??0?$codecvt@GDH@std@@IEAA@PEBD_K@Z */
3604 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor_name
, 12)
3605 codecvt_wchar
* __thiscall
codecvt_short_ctor_name(codecvt_wchar
*this, const char *name
, size_t refs
)
3609 TRACE("(%p %s %Iu)\n", this, name
, refs
);
3611 _Locinfo_ctor_cstr(&locinfo
, name
);
3612 codecvt_short_ctor_locinfo(this, &locinfo
, refs
);
3613 _Locinfo_dtor(&locinfo
);
3617 /* ??_F?$codecvt@_WDH@std@@QAEXXZ */
3618 /* ??_F?$codecvt@_WDH@std@@QEAAXXZ */
3619 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor
, 4)
3620 codecvt_wchar
* __thiscall
codecvt_wchar_ctor(codecvt_wchar
*this)
3622 return codecvt_wchar_ctor_refs(this, 0);
3625 /* ??_F?$codecvt@GDH@std@@QAEXXZ */
3626 /* ??_F?$codecvt@GDH@std@@QEAAXXZ */
3627 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor
, 4)
3628 codecvt_wchar
* __thiscall
codecvt_short_ctor(codecvt_wchar
*this)
3630 return codecvt_short_ctor_refs(this, 0);
3633 /* ??1?$codecvt@GDH@std@@UAE@XZ */
3634 /* ??1?$codecvt@GDH@std@@UEAA@XZ */
3635 /* ??1?$codecvt@GDH@std@@MAE@XZ */
3636 /* ??1?$codecvt@GDH@std@@MEAA@XZ */
3637 /* ??1?$codecvt@_WDH@std@@MAE@XZ */
3638 /* ??1?$codecvt@_WDH@std@@MEAA@XZ */
3639 DEFINE_THISCALL_WRAPPER(codecvt_wchar_dtor
, 4)
3640 void __thiscall
codecvt_wchar_dtor(codecvt_wchar
*this)
3642 TRACE("(%p)\n", this);
3643 codecvt_base_dtor(&this->base
);
3646 DEFINE_THISCALL_WRAPPER(codecvt_wchar_vector_dtor
, 8)
3647 codecvt_wchar
* __thiscall
codecvt_wchar_vector_dtor(codecvt_wchar
*this, unsigned int flags
)
3649 TRACE("(%p %x)\n", this, flags
);
3651 /* we have an array, with the number of elements stored before the first object */
3652 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
3654 for(i
=*ptr
-1; i
>=0; i
--)
3655 codecvt_wchar_dtor(this+i
);
3656 MSVCRT_operator_delete(ptr
);
3658 codecvt_wchar_dtor(this);
3660 MSVCRT_operator_delete(this);
3666 /* ?_Getcat@?$codecvt@_WDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3667 /* ?_Getcat@?$codecvt@_WDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3668 size_t __cdecl
codecvt_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
3670 TRACE("(%p %p)\n", facet
, loc
);
3672 if(facet
&& !*facet
) {
3675 *facet
= MSVCRT_operator_new(sizeof(codecvt_wchar
));
3677 ERR("Out of memory\n");
3678 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3682 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
3683 codecvt_wchar_ctor_locinfo((codecvt_wchar
*)*facet
, &locinfo
, 0);
3684 _Locinfo_dtor(&locinfo
);
3690 /* ?_Getcat@?$codecvt@_WDH@std@@SAIPAPBVfacet@locale@2@@Z */
3691 /* ?_Getcat@?$codecvt@_WDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3692 size_t __cdecl
codecvt_wchar__Getcat_old(const locale_facet
**facet
)
3694 return codecvt_wchar__Getcat(facet
, locale_classic());
3697 codecvt_wchar
* codecvt_wchar_use_facet(const locale
*loc
)
3699 static codecvt_wchar
*obj
= NULL
;
3702 const locale_facet
*fac
;
3704 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3705 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_wchar_id
));
3707 _Lockit_dtor(&lock
);
3708 return (codecvt_wchar
*)fac
;
3712 _Lockit_dtor(&lock
);
3716 codecvt_wchar__Getcat(&fac
, loc
);
3717 obj
= (codecvt_wchar
*)fac
;
3718 call_locale_facet__Incref(&obj
->base
.facet
);
3719 locale_facet_register(&obj
->base
.facet
);
3720 _Lockit_dtor(&lock
);
3725 /* ?_Getcat@?$codecvt@GDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3726 /* ?_Getcat@?$codecvt@GDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3727 size_t __cdecl
codecvt_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
3729 TRACE("(%p %p)\n", facet
, loc
);
3731 if(facet
&& !*facet
) {
3734 *facet
= MSVCRT_operator_new(sizeof(codecvt_wchar
));
3736 ERR("Out of memory\n");
3737 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3741 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
3742 codecvt_short_ctor((codecvt_wchar
*)*facet
);
3743 _Locinfo_dtor(&locinfo
);
3749 /* ?_Getcat@?$codecvt@GDH@std@@SAIPAPBVfacet@locale@2@@Z */
3750 /* ?_Getcat@?$codecvt@GDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3751 size_t __cdecl
codecvt_short__Getcat_old(const locale_facet
**facet
)
3753 return codecvt_short__Getcat(facet
, locale_classic());
3756 codecvt_wchar
* codecvt_short_use_facet(const locale
*loc
)
3758 static codecvt_wchar
*obj
= NULL
;
3761 const locale_facet
*fac
;
3763 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3764 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_short_id
));
3766 _Lockit_dtor(&lock
);
3767 return (codecvt_wchar
*)fac
;
3771 _Lockit_dtor(&lock
);
3775 codecvt_short__Getcat(&fac
, loc
);
3776 obj
= (codecvt_wchar
*)fac
;
3777 call_locale_facet__Incref(&obj
->base
.facet
);
3778 locale_facet_register(&obj
->base
.facet
);
3779 _Lockit_dtor(&lock
);
3784 /* ?_Id_func@?$codecvt@_WDH@std@@SAAAVid@locale@2@XZ */
3785 /* ?_Id_func@?$codecvt@_WDH@std@@SAAEAVid@locale@2@XZ */
3786 locale_id
* __cdecl
codecvt_wchar__Id_func(void)
3789 return &codecvt_wchar_id
;
3792 /* ?_Id_func@?$codecvt@GDH@std@@SAAAVid@locale@2@XZ */
3793 /* ?_Id_func@?$codecvt@GDH@std@@SAAEAVid@locale@2@XZ */
3794 locale_id
* __cdecl
codecvt_short__Id_func(void)
3797 return &codecvt_short_id
;
3800 /* ?do_always_noconv@?$codecvt@GDH@std@@MBE_NXZ */
3801 /* ?do_always_noconv@?$codecvt@GDH@std@@MEBA_NXZ */
3802 /* ?do_always_noconv@?$codecvt@_WDH@std@@MBE_NXZ */
3803 /* ?do_always_noconv@?$codecvt@_WDH@std@@MEBA_NXZ */
3804 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_always_noconv
, 4)
3805 bool __thiscall
codecvt_wchar_do_always_noconv(const codecvt_wchar
*this)
3807 TRACE("(%p)\n", this);
3811 /* ?do_max_length@?$codecvt@GDH@std@@MBEHXZ */
3812 /* ?do_max_length@?$codecvt@GDH@std@@MEBAHXZ */
3813 /* ?do_max_length@?$codecvt@_WDH@std@@MBEHXZ */
3814 /* ?do_max_length@?$codecvt@_WDH@std@@MEBAHXZ */
3815 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_max_length
, 4)
3816 int __thiscall
codecvt_wchar_do_max_length(const codecvt_wchar
*this)
3818 TRACE("(%p)\n", this);
3822 /* ?do_encoding@?$codecvt@GDH@std@@MBEHXZ */
3823 /* ?do_encoding@?$codecvt@GDH@std@@MEBAHXZ */
3824 /* ?do_encoding@?$codecvt@_WDH@std@@MBEHXZ */
3825 /* ?do_encoding@?$codecvt@_WDH@std@@MEBAHXZ */
3826 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_encoding
, 4)
3827 int __thiscall
codecvt_wchar_do_encoding(const codecvt_wchar
*this)
3829 TRACE("(%p)\n", this);
3833 /* ?do_in@?$codecvt@GDH@std@@MBEHAAHPBD1AAPBDPAG3AAPAG@Z */
3834 /* ?do_in@?$codecvt@GDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAG3AEAPEAG@Z */
3835 /* ?do_in@?$codecvt@_WDH@std@@MBEHAAHPBD1AAPBDPA_W3AAPA_W@Z */
3836 /* ?do_in@?$codecvt@_WDH@std@@MEBAHAEAHPEBD1AEAPEBDPEA_W3AEAPEA_W@Z */
3837 #if _MSVCP_VER <= 100
3838 #define call_codecvt_wchar_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
3839 CALL_VTBL_FUNC(this, 16, int, \
3840 (const codecvt_wchar*, _Mbstatet*, const char*, const char*, const char**, wchar_t*, wchar_t*, wchar_t**), \
3841 (this, state, from, from_end, from_next, to, to_end, to_next))
3843 #define call_codecvt_wchar_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
3844 CALL_VTBL_FUNC(this, 24, int, \
3845 (const codecvt_wchar*, _Mbstatet*, const char*, const char*, const char**, wchar_t*, wchar_t*, wchar_t**), \
3846 (this, state, from, from_end, from_next, to, to_end, to_next))
3848 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_in
, 32)
3849 int __thiscall
codecvt_wchar_do_in(const codecvt_wchar
*this, _Mbstatet
*state
,
3850 const char *from
, const char *from_end
, const char **from_next
,
3851 wchar_t *to
, wchar_t *to_end
, wchar_t **to_next
)
3853 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3854 from_end
, from_next
, to
, to_end
, to_next
);
3859 while(*from_next
!=from_end
&& *to_next
!=to_end
) {
3860 switch(_Mbrtowc(*to_next
, *from_next
, from_end
-*from_next
, state
, &this->cvt
)) {
3862 *from_next
= from_end
;
3863 return CODECVT_partial
;
3865 return CODECVT_error
;
3879 /* ?in@?$codecvt@GDH@std@@QBEHAAHPBD1AAPBDPAG3AAPAG@Z */
3880 /* ?in@?$codecvt@GDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAG3AEAPEAG@Z */
3881 /* ?in@?$codecvt@_WDH@std@@QBEHAAHPBD1AAPBDPA_W3AAPA_W@Z */
3882 /* ?in@?$codecvt@_WDH@std@@QEBAHAEAHPEBD1AEAPEBDPEA_W3AEAPEA_W@Z */
3883 DEFINE_THISCALL_WRAPPER(codecvt_wchar_in
, 32)
3884 int __thiscall
codecvt_wchar_in(const codecvt_wchar
*this, _Mbstatet
*state
,
3885 const char *from
, const char *from_end
, const char **from_next
,
3886 wchar_t *to
, wchar_t *to_end
, wchar_t **to_next
)
3888 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3889 from_end
, from_next
, to
, to_end
, to_next
);
3890 return call_codecvt_wchar_do_in(this, state
, from
,
3891 from_end
, from_next
, to
, to_end
, to_next
);
3894 /* ?do_out@?$codecvt@GDH@std@@MBEHAAHPBG1AAPBGPAD3AAPAD@Z */
3895 /* ?do_out@?$codecvt@GDH@std@@MEBAHAEAHPEBG1AEAPEBGPEAD3AEAPEAD@Z */
3896 /* ?do_out@?$codecvt@_WDH@std@@MBEHAAHPB_W1AAPB_WPAD3AAPAD@Z */
3897 /* ?do_out@?$codecvt@_WDH@std@@MEBAHAEAHPEB_W1AEAPEB_WPEAD3AEAPEAD@Z */
3898 #if _MSVCP_VER <= 100
3899 #define call_codecvt_wchar_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
3900 CALL_VTBL_FUNC(this, 20, int, \
3901 (const codecvt_wchar*, _Mbstatet*, const wchar_t*, const wchar_t*, const wchar_t**, char*, char*, char**), \
3902 (this, state, from, from_end, from_next, to, to_end, to_next))
3904 #define call_codecvt_wchar_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
3905 CALL_VTBL_FUNC(this, 28, int, \
3906 (const codecvt_wchar*, _Mbstatet*, const wchar_t*, const wchar_t*, const wchar_t**, char*, char*, char**), \
3907 (this, state, from, from_end, from_next, to, to_end, to_next))
3909 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_out
, 32)
3910 int __thiscall
codecvt_wchar_do_out(const codecvt_wchar
*this, _Mbstatet
*state
,
3911 const wchar_t *from
, const wchar_t *from_end
, const wchar_t **from_next
,
3912 char *to
, char *to_end
, char **to_next
)
3914 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3915 from_end
, from_next
, to
, to_end
, to_next
);
3920 while(*from_next
!=from_end
&& *to_next
!=to_end
) {
3921 _Mbstatet old_state
= *state
;
3923 char buf
[MB_LEN_MAX
];
3925 switch((size
= _Wcrtomb(buf
, **from_next
, state
, &this->cvt
))) {
3927 return CODECVT_error
;
3929 if(size
> from_end
-*from_next
) {
3931 return CODECVT_partial
;
3935 memcpy_s(*to_next
, to_end
-*to_next
, buf
, size
);
3943 /* ?out@?$codecvt@GDH@std@@QBEHAAHPBG1AAPBGPAD3AAPAD@Z */
3944 /* ?out@?$codecvt@GDH@std@@QEBAHAEAHPEBG1AEAPEBGPEAD3AEAPEAD@Z */
3945 /* ?out@?$codecvt@_WDH@std@@QBEHAAHPB_W1AAPB_WPAD3AAPAD@Z */
3946 /* ?out@?$codecvt@_WDH@std@@QEBAHAEAHPEB_W1AEAPEB_WPEAD3AEAPEAD@Z */
3947 DEFINE_THISCALL_WRAPPER(codecvt_wchar_out
, 32)
3948 int __thiscall
codecvt_wchar_out(const codecvt_wchar
*this, _Mbstatet
*state
,
3949 const wchar_t *from
, const wchar_t *from_end
, const wchar_t **from_next
,
3950 char *to
, char *to_end
, char **to_next
)
3952 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3953 from_end
, from_next
, to
, to_end
, to_next
);
3954 return call_codecvt_wchar_do_out(this, state
, from
,
3955 from_end
, from_next
, to
, to_end
, to_next
);
3958 /* ?do_unshift@?$codecvt@GDH@std@@MBEHAAHPAD1AAPAD@Z */
3959 /* ?do_unshift@?$codecvt@GDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
3960 /* ?do_unshift@?$codecvt@_WDH@std@@MBEHAAHPAD1AAPAD@Z */
3961 /* ?do_unshift@?$codecvt@_WDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
3962 #if _MSVCP_VER <= 100
3963 #define call_codecvt_wchar_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 24, \
3964 int, (const codecvt_wchar*, _Mbstatet*, char*, char*, char**), (this, state, to, to_end, to_next))
3966 #define call_codecvt_wchar_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 32, \
3967 int, (const codecvt_wchar*, _Mbstatet*, char*, char*, char**), (this, state, to, to_end, to_next))
3969 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_unshift
, 20)
3970 int __thiscall
codecvt_wchar_do_unshift(const codecvt_wchar
*this,
3971 _Mbstatet
*state
, char *to
, char *to_end
, char **to_next
)
3973 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3974 if(MBSTATET_TO_INT(state
))
3975 WARN("unexpected state: %x\n", MBSTATET_TO_INT(state
));
3981 /* ?unshift@?$codecvt@GDH@std@@QBEHAAHPAD1AAPAD@Z */
3982 /* ?unshift@?$codecvt@GDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
3983 /* ?unshift@?$codecvt@_WDH@std@@QBEHAAHPAD1AAPAD@Z */
3984 /* ?unshift@?$codecvt@_WDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
3985 DEFINE_THISCALL_WRAPPER(codecvt_wchar_unshift
, 20)
3986 int __thiscall
codecvt_wchar_unshift(const codecvt_wchar
*this,
3987 _Mbstatet
*state
, char *to
, char *to_end
, char **to_next
)
3989 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3990 return call_codecvt_wchar_do_unshift(this, state
, to
, to_end
, to_next
);
3993 /* ?do_length@?$codecvt@GDH@std@@MBEHABHPBD1I@Z */
3994 /* ?do_length@?$codecvt@GDH@std@@MEBAHAEBHPEBD1_K@Z */
3995 /* ?do_length@?$codecvt@_WDH@std@@MBEHABHPBD1I@Z */
3996 /* ?do_length@?$codecvt@_WDH@std@@MEBAHAEBHPEBD1_K@Z */
3997 #if _MSVCP_VER <= 100
3998 #define call_codecvt_wchar_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 28, \
3999 int, (const codecvt_wchar*, const _Mbstatet*, const char*, const char*, size_t), \
4000 (this, state, from, from_end, max))
4002 #define call_codecvt_wchar_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 36, \
4003 int, (const codecvt_wchar*, const _Mbstatet*, const char*, const char*, size_t), \
4004 (this, state, from, from_end, max))
4006 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_length
, 20)
4007 int __thiscall
codecvt_wchar_do_length(const codecvt_wchar
*this, const _Mbstatet
*state
,
4008 const char *from
, const char *from_end
, size_t max
)
4010 _Mbstatet tmp_state
= *state
;
4013 TRACE("(%p %p %p %p %Iu)\n", this, state
, from
, from_end
, max
);
4015 while(ret
<max
&& from
!=from_end
) {
4016 switch(_Mbrtowc(NULL
, from
, from_end
-from
, &tmp_state
, &this->cvt
)) {
4033 /* ?length@?$codecvt@GDH@std@@QBEHABHPBD1I@Z */
4034 /* ?length@?$codecvt@GDH@std@@QEBAHAEBHPEBD1_K@Z */
4035 /* ?length@?$codecvt@_WDH@std@@QBEHABHPBD1I@Z */
4036 /* ?length@?$codecvt@_WDH@std@@QEBAHAEBHPEBD1_K@Z */
4037 DEFINE_THISCALL_WRAPPER(codecvt_wchar_length
, 20)
4038 int __thiscall
codecvt_wchar_length(const codecvt_wchar
*this, const _Mbstatet
*state
,
4039 const char *from
, const char *from_end
, size_t max
)
4041 TRACE("(%p %p %p %p %Iu)\n", this, state
, from
, from_end
, max
);
4042 return call_codecvt_wchar_do_length(this, state
, from
, from_end
, max
);
4045 /* ?id@?$numpunct@D@std@@2V0locale@2@A */
4046 locale_id numpunct_char_id
= {0};
4048 /* ??_7?$numpunct@D@std@@6B@ */
4049 extern const vtable_ptr numpunct_char_vtable
;
4051 /* ?_Init@?$numpunct@D@std@@IAEXABV_Locinfo@2@_N@Z */
4052 /* ?_Init@?$numpunct@D@std@@IEAAXAEBV_Locinfo@2@_N@Z */
4053 DEFINE_THISCALL_WRAPPER(numpunct_char__Init
, 12)
4054 void __thiscall
numpunct_char__Init(numpunct_char
*this, const _Locinfo
*locinfo
, bool isdef
)
4058 TRACE("(%p %p %d)\n", this, locinfo
, isdef
);
4060 len
= strlen(_Locinfo__Getfalse(locinfo
))+1;
4061 this->false_name
= MSVCRT_operator_new(len
);
4062 if(this->false_name
)
4063 memcpy((char*)this->false_name
, _Locinfo__Getfalse(locinfo
), len
);
4065 len
= strlen(_Locinfo__Gettrue(locinfo
))+1;
4066 this->true_name
= MSVCRT_operator_new(len
);
4068 memcpy((char*)this->true_name
, _Locinfo__Gettrue(locinfo
), len
);
4071 this->grouping
= MSVCRT_operator_new(1);
4073 *(char*)this->grouping
= 0;
4078 const struct lconv
*lc
= _Locinfo__Getlconv(locinfo
);
4080 len
= strlen(lc
->grouping
)+1;
4081 this->grouping
= MSVCRT_operator_new(len
);
4083 memcpy((char*)this->grouping
, lc
->grouping
, len
);
4085 this->dp
= lc
->decimal_point
[0];
4086 this->sep
= lc
->thousands_sep
[0];
4089 if(!this->false_name
|| !this->true_name
|| !this->grouping
) {
4090 MSVCRT_operator_delete((char*)this->grouping
);
4091 MSVCRT_operator_delete((char*)this->false_name
);
4092 MSVCRT_operator_delete((char*)this->true_name
);
4094 ERR("Out of memory\n");
4095 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
4099 /* ?_Tidy@?$numpunct@D@std@@AAEXXZ */
4100 /* ?_Tidy@?$numpunct@D@std@@AEAAXXZ */
4101 DEFINE_THISCALL_WRAPPER(numpunct_char__Tidy
, 4)
4102 void __thiscall
numpunct_char__Tidy(numpunct_char
*this)
4104 TRACE("(%p)\n", this);
4106 MSVCRT_operator_delete((char*)this->grouping
);
4107 MSVCRT_operator_delete((char*)this->false_name
);
4108 MSVCRT_operator_delete((char*)this->true_name
);
4111 /* ??0?$numpunct@D@std@@QAE@ABV_Locinfo@1@I_N@Z */
4112 /* ??0?$numpunct@D@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
4113 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_locinfo
, 16)
4114 numpunct_char
* __thiscall
numpunct_char_ctor_locinfo(numpunct_char
*this,
4115 const _Locinfo
*locinfo
, size_t refs
, bool usedef
)
4117 TRACE("(%p %p %Iu %d)\n", this, locinfo
, refs
, usedef
);
4118 locale_facet_ctor_refs(&this->facet
, refs
);
4119 this->facet
.vtable
= &numpunct_char_vtable
;
4120 numpunct_char__Init(this, locinfo
, usedef
);
4124 /* ??0?$numpunct@D@std@@IAE@PBDI_N@Z */
4125 /* ??0?$numpunct@D@std@@IEAA@PEBD_K_N@Z */
4126 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_name
, 16)
4127 numpunct_char
* __thiscall
numpunct_char_ctor_name(numpunct_char
*this,
4128 const char *name
, size_t refs
, bool usedef
)
4132 TRACE("(%p %s %Iu %d)\n", this, debugstr_a(name
), refs
, usedef
);
4133 locale_facet_ctor_refs(&this->facet
, refs
);
4134 this->facet
.vtable
= &numpunct_char_vtable
;
4136 _Locinfo_ctor_cstr(&locinfo
, name
);
4137 numpunct_char__Init(this, &locinfo
, usedef
);
4138 _Locinfo_dtor(&locinfo
);
4142 /* ??0?$numpunct@D@std@@QAE@I@Z */
4143 /* ??0?$numpunct@D@std@@QEAA@_K@Z */
4144 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_refs
, 8)
4145 numpunct_char
* __thiscall
numpunct_char_ctor_refs(numpunct_char
*this, size_t refs
)
4147 TRACE("(%p %Iu)\n", this, refs
);
4148 return numpunct_char_ctor_name(this, "C", refs
, FALSE
);
4151 /* ??_F?$numpunct@D@std@@QAEXXZ */
4152 /* ??_F?$numpunct@D@std@@QEAAXXZ */
4153 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor
, 4)
4154 numpunct_char
* __thiscall
numpunct_char_ctor(numpunct_char
*this)
4156 return numpunct_char_ctor_refs(this, 0);
4159 /* ??1?$numpunct@D@std@@UAE@XZ */
4160 /* ??1?$numpunct@D@std@@UEAA@XZ */
4161 /* ??1?$numpunct@D@std@@MAE@XZ */
4162 /* ??1?$numpunct@D@std@@MEAA@XZ */
4163 DEFINE_THISCALL_WRAPPER(numpunct_char_dtor
, 4)
4164 void __thiscall
numpunct_char_dtor(numpunct_char
*this)
4166 TRACE("(%p)\n", this);
4167 numpunct_char__Tidy(this);
4170 DEFINE_THISCALL_WRAPPER(numpunct_char_vector_dtor
, 8)
4171 numpunct_char
* __thiscall
numpunct_char_vector_dtor(numpunct_char
*this, unsigned int flags
)
4173 TRACE("(%p %x)\n", this, flags
);
4175 /* we have an array, with the number of elements stored before the first object */
4176 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
4178 for(i
=*ptr
-1; i
>=0; i
--)
4179 numpunct_char_dtor(this+i
);
4180 MSVCRT_operator_delete(ptr
);
4182 numpunct_char_dtor(this);
4184 MSVCRT_operator_delete(this);
4190 /* ?_Getcat@?$numpunct@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4191 /* ?_Getcat@?$numpunct@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4192 size_t __cdecl
numpunct_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
4194 TRACE("(%p %p)\n", facet
, loc
);
4196 if(facet
&& !*facet
) {
4197 *facet
= MSVCRT_operator_new(sizeof(numpunct_char
));
4199 ERR("Out of memory\n");
4200 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
4203 numpunct_char_ctor_name((numpunct_char
*)*facet
,
4204 locale_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
4210 /* ?_Getcat@?$numpunct@D@std@@SAIPAPBVfacet@locale@2@@Z */
4211 /* ?_Getcat@?$numpunct@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
4212 size_t __cdecl
numpunct_char__Getcat_old(const locale_facet
**facet
)
4214 return numpunct_char__Getcat(facet
, locale_classic());
4217 static numpunct_char
* numpunct_char_use_facet(const locale
*loc
)
4219 static numpunct_char
*obj
= NULL
;
4222 const locale_facet
*fac
;
4224 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
4225 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_char_id
));
4227 _Lockit_dtor(&lock
);
4228 return (numpunct_char
*)fac
;
4232 _Lockit_dtor(&lock
);
4236 numpunct_char__Getcat(&fac
, loc
);
4237 obj
= (numpunct_char
*)fac
;
4238 call_locale_facet__Incref(&obj
->facet
);
4239 locale_facet_register(&obj
->facet
);
4240 _Lockit_dtor(&lock
);
4245 /* ?do_decimal_point@?$numpunct@D@std@@MBEDXZ */
4246 /* ?do_decimal_point@?$numpunct@D@std@@MEBADXZ */
4247 DEFINE_THISCALL_WRAPPER(numpunct_char_do_decimal_point
, 4)
4248 #if _MSVCP_VER <= 100
4249 #define call_numpunct_char_do_decimal_point(this) CALL_VTBL_FUNC(this, 4, \
4250 char, (const numpunct_char *this), (this))
4252 #define call_numpunct_char_do_decimal_point(this) CALL_VTBL_FUNC(this, 12, \
4253 char, (const numpunct_char *this), (this))
4255 char __thiscall
numpunct_char_do_decimal_point(const numpunct_char
*this)
4257 TRACE("(%p)\n", this);
4261 /* ?decimal_point@?$numpunct@D@std@@QBEDXZ */
4262 /* ?decimal_point@?$numpunct@D@std@@QEBADXZ */
4263 DEFINE_THISCALL_WRAPPER(numpunct_char_decimal_point
, 4)
4264 char __thiscall
numpunct_char_decimal_point(const numpunct_char
*this)
4266 TRACE("(%p)\n", this);
4267 return call_numpunct_char_do_decimal_point(this);
4270 /* ?do_thousands_sep@?$numpunct@D@std@@MBEDXZ */
4271 /* ?do_thousands_sep@?$numpunct@D@std@@MEBADXZ */
4272 DEFINE_THISCALL_WRAPPER(numpunct_char_do_thousands_sep
, 4)
4273 #if _MSVCP_VER <= 100
4274 #define call_numpunct_char_do_thousands_sep(this) CALL_VTBL_FUNC(this, 8, \
4275 char, (const numpunct_char*), (this))
4277 #define call_numpunct_char_do_thousands_sep(this) CALL_VTBL_FUNC(this, 16, \
4278 char, (const numpunct_char*), (this))
4280 char __thiscall
numpunct_char_do_thousands_sep(const numpunct_char
*this)
4282 TRACE("(%p)\n", this);
4286 /* ?thousands_sep@?$numpunct@D@std@@QBEDXZ */
4287 /* ?thousands_sep@?$numpunct@D@std@@QEBADXZ */
4288 DEFINE_THISCALL_WRAPPER(numpunct_char_thousands_sep
, 4)
4289 char __thiscall
numpunct_char_thousands_sep(const numpunct_char
*this)
4291 TRACE("(%p)\n", this);
4292 return call_numpunct_char_do_thousands_sep(this);
4295 /* ?do_grouping@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4296 /* ?do_grouping@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4297 DEFINE_THISCALL_WRAPPER(numpunct_char_do_grouping
, 8)
4298 #if _MSVCP_VER <= 100
4299 #define call_numpunct_char_do_grouping(this, ret) CALL_VTBL_FUNC(this, 12, \
4300 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4302 #define call_numpunct_char_do_grouping(this, ret) CALL_VTBL_FUNC(this, 20, \
4303 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4305 basic_string_char
* __thiscall
numpunct_char_do_grouping(
4306 const numpunct_char
*this, basic_string_char
*ret
)
4308 TRACE("(%p)\n", this);
4309 return MSVCP_basic_string_char_ctor_cstr(ret
, this->grouping
);
4312 /* ?grouping@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4313 /* ?grouping@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4314 DEFINE_THISCALL_WRAPPER(numpunct_char_grouping
, 8)
4315 basic_string_char
* __thiscall
numpunct_char_grouping(const numpunct_char
*this, basic_string_char
*ret
)
4317 TRACE("(%p)\n", this);
4318 return call_numpunct_char_do_grouping(this, ret
);
4321 /* ?do_falsename@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4322 /* ?do_falsename@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4323 DEFINE_THISCALL_WRAPPER(numpunct_char_do_falsename
, 8)
4324 #if _MSVCP_VER <= 100
4325 #define call_numpunct_char_do_falsename(this, ret) CALL_VTBL_FUNC(this, 16, \
4326 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4328 #define call_numpunct_char_do_falsename(this, ret) CALL_VTBL_FUNC(this, 24, \
4329 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4331 basic_string_char
* __thiscall
numpunct_char_do_falsename(
4332 const numpunct_char
*this, basic_string_char
*ret
)
4334 TRACE("(%p)\n", this);
4335 return MSVCP_basic_string_char_ctor_cstr(ret
, this->false_name
);
4338 /* ?falsename@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4339 /* ?falsename@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4340 DEFINE_THISCALL_WRAPPER(numpunct_char_falsename
, 8)
4341 basic_string_char
* __thiscall
numpunct_char_falsename(const numpunct_char
*this, basic_string_char
*ret
)
4343 TRACE("(%p)\n", this);
4344 return call_numpunct_char_do_falsename(this, ret
);
4347 /* ?do_truename@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4348 /* ?do_truename@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4349 DEFINE_THISCALL_WRAPPER(numpunct_char_do_truename
, 8)
4350 #if _MSVCP_VER <= 100
4351 #define call_numpunct_char_do_truename(this, ret) CALL_VTBL_FUNC(this, 20, \
4352 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4354 #define call_numpunct_char_do_truename(this, ret) CALL_VTBL_FUNC(this, 28, \
4355 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4357 basic_string_char
* __thiscall
numpunct_char_do_truename(
4358 const numpunct_char
*this, basic_string_char
*ret
)
4360 TRACE("(%p)\n", this);
4361 return MSVCP_basic_string_char_ctor_cstr(ret
, this->true_name
);
4364 /* ?truename@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4365 /* ?truename@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4366 DEFINE_THISCALL_WRAPPER(numpunct_char_truename
, 8)
4367 basic_string_char
* __thiscall
numpunct_char_truename(const numpunct_char
*this, basic_string_char
*ret
)
4369 TRACE("(%p)\n", this);
4370 return call_numpunct_char_do_truename(this, ret
);
4373 /* ?id@?$numpunct@_W@std@@2V0locale@2@A */
4374 locale_id numpunct_wchar_id
= {0};
4375 /* ?id@?$numpunct@G@std@@2V0locale@2@A */
4376 locale_id numpunct_short_id
= {0};
4378 /* ??_7?$numpunct@_W@std@@6B@ */
4379 extern const vtable_ptr numpunct_wchar_vtable
;
4380 /* ??_7?$numpunct@G@std@@6B@ */
4381 extern const vtable_ptr numpunct_short_vtable
;
4383 /* ?_Init@?$numpunct@_W@std@@IAEXABV_Locinfo@2@_N@Z */
4384 /* ?_Init@?$numpunct@_W@std@@IEAAXAEBV_Locinfo@2@_N@Z */
4385 /* ?_Init@?$numpunct@G@std@@IAEXABV_Locinfo@2@_N@Z */
4386 /* ?_Init@?$numpunct@G@std@@IEAAXAEBV_Locinfo@2@_N@Z */
4387 DEFINE_THISCALL_WRAPPER(numpunct_wchar__Init
, 12)
4388 void __thiscall
numpunct_wchar__Init(numpunct_wchar
*this,
4389 const _Locinfo
*locinfo
, bool isdef
)
4391 const char *to_convert
;
4395 TRACE("(%p %p %d)\n", this, locinfo
, isdef
);
4397 _Locinfo__Getcvt(locinfo
, &cvt
);
4399 to_convert
= _Locinfo__Getfalse(locinfo
);
4400 len
= MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1, NULL
, 0);
4401 this->false_name
= MSVCRT_operator_new(len
*sizeof(WCHAR
));
4402 if(this->false_name
)
4403 MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1,
4404 (wchar_t*)this->false_name
, len
);
4406 to_convert
= _Locinfo__Gettrue(locinfo
);
4407 len
= MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1, NULL
, 0);
4408 this->true_name
= MSVCRT_operator_new(len
*sizeof(WCHAR
));
4410 MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1,
4411 (wchar_t*)this->true_name
, len
);
4414 this->grouping
= MSVCRT_operator_new(1);
4416 *(char*)this->grouping
= 0;
4421 const struct lconv
*lc
= _Locinfo__Getlconv(locinfo
);
4423 len
= strlen(lc
->grouping
)+1;
4424 this->grouping
= MSVCRT_operator_new(len
);
4426 memcpy((char*)this->grouping
, lc
->grouping
, len
);
4428 this->dp
= mb_to_wc(lc
->decimal_point
[0], &cvt
);
4429 this->sep
= mb_to_wc(lc
->thousands_sep
[0], &cvt
);
4432 if(!this->false_name
|| !this->true_name
|| !this->grouping
) {
4433 MSVCRT_operator_delete((char*)this->grouping
);
4434 MSVCRT_operator_delete((wchar_t*)this->false_name
);
4435 MSVCRT_operator_delete((wchar_t*)this->true_name
);
4437 ERR("Out of memory\n");
4438 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
4442 /* ?_Tidy@?$numpunct@_W@std@@AAEXXZ */
4443 /* ?_Tidy@?$numpunct@_W@std@@AEAAXXZ */
4444 /* ?_Tidy@?$numpunct@G@std@@AAEXXZ */
4445 /* ?_Tidy@?$numpunct@G@std@@AEAAXXZ */
4446 DEFINE_THISCALL_WRAPPER(numpunct_wchar__Tidy
, 4)
4447 void __thiscall
numpunct_wchar__Tidy(numpunct_wchar
*this)
4449 TRACE("(%p)\n", this);
4451 MSVCRT_operator_delete((char*)this->grouping
);
4452 MSVCRT_operator_delete((wchar_t*)this->false_name
);
4453 MSVCRT_operator_delete((wchar_t*)this->true_name
);
4456 /* ??0?$numpunct@_W@std@@QAE@ABV_Locinfo@1@I_N@Z */
4457 /* ??0?$numpunct@_W@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
4458 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_locinfo
, 16)
4459 numpunct_wchar
* __thiscall
numpunct_wchar_ctor_locinfo(numpunct_wchar
*this,
4460 const _Locinfo
*locinfo
, size_t refs
, bool usedef
)
4462 TRACE("(%p %p %Iu %d)\n", this, locinfo
, refs
, usedef
);
4463 locale_facet_ctor_refs(&this->facet
, refs
);
4464 this->facet
.vtable
= &numpunct_wchar_vtable
;
4465 numpunct_wchar__Init(this, locinfo
, usedef
);
4469 /* ??0?$numpunct@G@std@@QAE@ABV_Locinfo@1@I_N@Z */
4470 /* ??0?$numpunct@G@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
4471 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_locinfo
, 16)
4472 numpunct_wchar
* __thiscall
numpunct_short_ctor_locinfo(numpunct_wchar
*this,
4473 const _Locinfo
*locinfo
, size_t refs
, bool usedef
)
4475 numpunct_wchar_ctor_locinfo(this, locinfo
, refs
, usedef
);
4476 this->facet
.vtable
= &numpunct_short_vtable
;
4480 /* ??0?$numpunct@_W@std@@IAE@PBDI_N@Z */
4481 /* ??0?$numpunct@_W@std@@IEAA@PEBD_K_N@Z */
4482 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_name
, 16)
4483 numpunct_wchar
* __thiscall
numpunct_wchar_ctor_name(numpunct_wchar
*this,
4484 const char *name
, size_t refs
, bool usedef
)
4488 TRACE("(%p %s %Iu %d)\n", this, debugstr_a(name
), refs
, usedef
);
4489 locale_facet_ctor_refs(&this->facet
, refs
);
4490 this->facet
.vtable
= &numpunct_wchar_vtable
;
4492 _Locinfo_ctor_cstr(&locinfo
, name
);
4493 numpunct_wchar__Init(this, &locinfo
, usedef
);
4494 _Locinfo_dtor(&locinfo
);
4498 /* ??0?$numpunct@G@std@@IAE@PBDI_N@Z */
4499 /* ??0?$numpunct@G@std@@IEAA@PEBD_K_N@Z */
4500 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_name
, 16)
4501 numpunct_wchar
* __thiscall
numpunct_short_ctor_name(numpunct_wchar
*this,
4502 const char *name
, size_t refs
, bool usedef
)
4504 numpunct_wchar_ctor_name(this, name
, refs
, usedef
);
4505 this->facet
.vtable
= &numpunct_short_vtable
;
4509 /* ??0?$numpunct@_W@std@@QAE@I@Z */
4510 /* ??0?$numpunct@_W@std@@QEAA@_K@Z */
4511 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_refs
, 8)
4512 numpunct_wchar
* __thiscall
numpunct_wchar_ctor_refs(numpunct_wchar
*this, size_t refs
)
4514 TRACE("(%p %Iu)\n", this, refs
);
4515 return numpunct_wchar_ctor_name(this, "C", refs
, FALSE
);
4518 /* ??0?$numpunct@G@std@@QAE@I@Z */
4519 /* ??0?$numpunct@G@std@@QEAA@_K@Z */
4520 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_refs
, 8)
4521 numpunct_wchar
* __thiscall
numpunct_short_ctor_refs(numpunct_wchar
*this, size_t refs
)
4523 numpunct_wchar_ctor_refs(this, refs
);
4524 this->facet
.vtable
= &numpunct_short_vtable
;
4528 /* ??_F?$numpunct@_W@std@@QAEXXZ */
4529 /* ??_F?$numpunct@_W@std@@QEAAXXZ */
4530 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor
, 4)
4531 numpunct_wchar
* __thiscall
numpunct_wchar_ctor(numpunct_wchar
*this)
4533 return numpunct_wchar_ctor_refs(this, 0);
4536 /* ??_F?$numpunct@G@std@@QAEXXZ */
4537 /* ??_F?$numpunct@G@std@@QEAAXXZ */
4538 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor
, 4)
4539 numpunct_wchar
* __thiscall
numpunct_short_ctor(numpunct_wchar
*this)
4541 return numpunct_short_ctor_refs(this, 0);
4544 /* ??1?$numpunct@G@std@@UAE@XZ */
4545 /* ??1?$numpunct@G@std@@UEAA@XZ */
4546 /* ??1?$numpunct@_W@std@@MAE@XZ */
4547 /* ??1?$numpunct@_W@std@@MEAA@XZ */
4548 /* ??1?$numpunct@G@std@@MAE@XZ */
4549 /* ??1?$numpunct@G@std@@MEAA@XZ */
4550 DEFINE_THISCALL_WRAPPER(numpunct_wchar_dtor
, 4)
4551 void __thiscall
numpunct_wchar_dtor(numpunct_wchar
*this)
4553 TRACE("(%p)\n", this);
4554 numpunct_wchar__Tidy(this);
4557 DEFINE_THISCALL_WRAPPER(numpunct_wchar_vector_dtor
, 8)
4558 numpunct_wchar
* __thiscall
numpunct_wchar_vector_dtor(numpunct_wchar
*this, unsigned int flags
)
4560 TRACE("(%p %x)\n", this, flags
);
4562 /* we have an array, with the number of elements stored before the first object */
4563 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
4565 for(i
=*ptr
-1; i
>=0; i
--)
4566 numpunct_wchar_dtor(this+i
);
4567 MSVCRT_operator_delete(ptr
);
4569 numpunct_wchar_dtor(this);
4571 MSVCRT_operator_delete(this);
4577 /* ?_Getcat@?$numpunct@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4578 /* ?_Getcat@?$numpunct@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4579 size_t __cdecl
numpunct_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
4581 TRACE("(%p %p)\n", facet
, loc
);
4583 if(facet
&& !*facet
) {
4584 *facet
= MSVCRT_operator_new(sizeof(numpunct_wchar
));
4586 ERR("Out of memory\n");
4587 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
4590 numpunct_wchar_ctor_name((numpunct_wchar
*)*facet
,
4591 locale_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
4597 /* ?_Getcat@?$numpunct@_W@std@@SAIPAPBVfacet@locale@2@@Z */
4598 /* ?_Getcat@?$numpunct@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
4599 size_t __cdecl
numpunct_wchar__Getcat_old(const locale_facet
**facet
)
4601 return numpunct_wchar__Getcat(facet
, locale_classic());
4604 static numpunct_wchar
* numpunct_wchar_use_facet(const locale
*loc
)
4606 static numpunct_wchar
*obj
= NULL
;
4609 const locale_facet
*fac
;
4611 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
4612 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_wchar_id
));
4614 _Lockit_dtor(&lock
);
4615 return (numpunct_wchar
*)fac
;
4619 _Lockit_dtor(&lock
);
4623 numpunct_wchar__Getcat(&fac
, loc
);
4624 obj
= (numpunct_wchar
*)fac
;
4625 call_locale_facet__Incref(&obj
->facet
);
4626 locale_facet_register(&obj
->facet
);
4627 _Lockit_dtor(&lock
);
4632 /* ?_Getcat@?$numpunct@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4633 /* ?_Getcat@?$numpunct@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4634 size_t __cdecl
numpunct_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
4636 TRACE("(%p %p)\n", facet
, loc
);
4638 if(facet
&& !*facet
) {
4639 *facet
= MSVCRT_operator_new(sizeof(numpunct_wchar
));
4641 ERR("Out of memory\n");
4642 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
4645 numpunct_short_ctor_name((numpunct_wchar
*)*facet
,
4646 locale_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
4652 /* ?_Getcat@?$numpunct@G@std@@SAIPAPBVfacet@locale@2@@Z */
4653 /* ?_Getcat@?$numpunct@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
4654 size_t __cdecl
numpunct_short__Getcat_old(const locale_facet
**facet
)
4656 return numpunct_short__Getcat(facet
, locale_classic());
4659 static numpunct_wchar
* numpunct_short_use_facet(const locale
*loc
)
4661 static numpunct_wchar
*obj
= NULL
;
4664 const locale_facet
*fac
;
4666 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
4667 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_short_id
));
4669 _Lockit_dtor(&lock
);
4670 return (numpunct_wchar
*)fac
;
4674 _Lockit_dtor(&lock
);
4678 numpunct_short__Getcat(&fac
, loc
);
4679 obj
= (numpunct_wchar
*)fac
;
4680 call_locale_facet__Incref(&obj
->facet
);
4681 locale_facet_register(&obj
->facet
);
4682 _Lockit_dtor(&lock
);
4687 /* ?do_decimal_point@?$numpunct@_W@std@@MBE_WXZ */
4688 /* ?do_decimal_point@?$numpunct@_W@std@@MEBA_WXZ */
4689 /* ?do_decimal_point@?$numpunct@G@std@@MBEGXZ */
4690 /* ?do_decimal_point@?$numpunct@G@std@@MEBAGXZ */
4691 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_decimal_point
, 4)
4692 #if _MSVCP_VER <= 100
4693 #define call_numpunct_wchar_do_decimal_point(this) CALL_VTBL_FUNC(this, 4, \
4694 wchar_t, (const numpunct_wchar *this), (this))
4696 #define call_numpunct_wchar_do_decimal_point(this) CALL_VTBL_FUNC(this, 12, \
4697 wchar_t, (const numpunct_wchar *this), (this))
4699 wchar_t __thiscall
numpunct_wchar_do_decimal_point(const numpunct_wchar
*this)
4701 TRACE("(%p)\n", this);
4705 /* ?decimal_point@?$numpunct@_W@std@@QBE_WXZ */
4706 /* ?decimal_point@?$numpunct@_W@std@@QEBA_WXZ */
4707 /* ?decimal_point@?$numpunct@G@std@@QBEGXZ */
4708 /* ?decimal_point@?$numpunct@G@std@@QEBAGXZ */
4709 DEFINE_THISCALL_WRAPPER(numpunct_wchar_decimal_point
, 4)
4710 wchar_t __thiscall
numpunct_wchar_decimal_point(const numpunct_wchar
*this)
4712 TRACE("(%p)\n", this);
4713 return call_numpunct_wchar_do_decimal_point(this);
4716 /* ?do_thousands_sep@?$numpunct@_W@std@@MBE_WXZ */
4717 /* ?do_thousands_sep@?$numpunct@_W@std@@MEBA_WXZ */
4718 /* ?do_thousands_sep@?$numpunct@G@std@@MBEGXZ */
4719 /* ?do_thousands_sep@?$numpunct@G@std@@MEBAGXZ */
4720 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_thousands_sep
, 4)
4721 #if _MSVCP_VER <= 100
4722 #define call_numpunct_wchar_do_thousands_sep(this) CALL_VTBL_FUNC(this, 8, \
4723 wchar_t, (const numpunct_wchar *this), (this))
4725 #define call_numpunct_wchar_do_thousands_sep(this) CALL_VTBL_FUNC(this, 16, \
4726 wchar_t, (const numpunct_wchar *this), (this))
4728 wchar_t __thiscall
numpunct_wchar_do_thousands_sep(const numpunct_wchar
*this)
4730 TRACE("(%p)\n", this);
4734 /* ?thousands_sep@?$numpunct@_W@std@@QBE_WXZ */
4735 /* ?thousands_sep@?$numpunct@_W@std@@QEBA_WXZ */
4736 /* ?thousands_sep@?$numpunct@G@std@@QBEGXZ */
4737 /* ?thousands_sep@?$numpunct@G@std@@QEBAGXZ */
4738 DEFINE_THISCALL_WRAPPER(numpunct_wchar_thousands_sep
, 4)
4739 wchar_t __thiscall
numpunct_wchar_thousands_sep(const numpunct_wchar
*this)
4741 TRACE("(%p)\n", this);
4742 return call_numpunct_wchar_do_thousands_sep(this);
4745 /* ?do_grouping@?$numpunct@_W@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4746 /* ?do_grouping@?$numpunct@_W@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4747 /* ?do_grouping@?$numpunct@G@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4748 /* ?do_grouping@?$numpunct@G@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4749 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_grouping
, 8)
4750 #if _MSVCP_VER <= 100
4751 #define call_numpunct_wchar_do_grouping(this, ret) CALL_VTBL_FUNC(this, 12, \
4752 basic_string_char*, (const numpunct_wchar*, basic_string_char*), (this, ret))
4754 #define call_numpunct_wchar_do_grouping(this, ret) CALL_VTBL_FUNC(this, 20, \
4755 basic_string_char*, (const numpunct_wchar*, basic_string_char*), (this, ret))
4757 basic_string_char
* __thiscall
numpunct_wchar_do_grouping(const numpunct_wchar
*this, basic_string_char
*ret
)
4759 TRACE("(%p)\n", this);
4760 return MSVCP_basic_string_char_ctor_cstr(ret
, this->grouping
);
4763 /* ?grouping@?$numpunct@_W@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4764 /* ?grouping@?$numpunct@_W@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4765 /* ?grouping@?$numpunct@G@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4766 /* ?grouping@?$numpunct@G@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4767 DEFINE_THISCALL_WRAPPER(numpunct_wchar_grouping
, 8)
4768 basic_string_char
* __thiscall
numpunct_wchar_grouping(const numpunct_wchar
*this, basic_string_char
*ret
)
4770 TRACE("(%p)\n", this);
4771 return call_numpunct_wchar_do_grouping(this, ret
);
4774 /* ?do_falsename@?$numpunct@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4775 /* ?do_falsename@?$numpunct@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4776 /* ?do_falsename@?$numpunct@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4777 /* ?do_falsename@?$numpunct@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4778 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_falsename
, 8)
4779 #if _MSVCP_VER <= 100
4780 #define call_numpunct_wchar_do_falsename(this, ret) CALL_VTBL_FUNC(this, 16, \
4781 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
4783 #define call_numpunct_wchar_do_falsename(this, ret) CALL_VTBL_FUNC(this, 24, \
4784 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
4786 basic_string_wchar
* __thiscall
numpunct_wchar_do_falsename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4788 TRACE("(%p)\n", this);
4789 return MSVCP_basic_string_wchar_ctor_cstr(ret
, this->false_name
);
4792 /* ?falsename@?$numpunct@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4793 /* ?falsename@?$numpunct@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4794 /* ?falsename@?$numpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4795 /* ?falsename@?$numpunct@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4796 DEFINE_THISCALL_WRAPPER(numpunct_wchar_falsename
, 8)
4797 basic_string_wchar
* __thiscall
numpunct_wchar_falsename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4799 TRACE("(%p)\n", this);
4800 return call_numpunct_wchar_do_falsename(this, ret
);
4803 /* ?do_truename@?$numpunct@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4804 /* ?do_truename@?$numpunct@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4805 /* ?do_truename@?$numpunct@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4806 /* ?do_truename@?$numpunct@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4807 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_truename
, 8)
4808 #if _MSVCP_VER <= 100
4809 #define call_numpunct_wchar_do_truename(this, ret) CALL_VTBL_FUNC(this, 20, \
4810 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
4812 #define call_numpunct_wchar_do_truename(this, ret) CALL_VTBL_FUNC(this, 28, \
4813 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
4815 basic_string_wchar
* __thiscall
numpunct_wchar_do_truename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4817 TRACE("(%p)\n", this);
4818 return MSVCP_basic_string_wchar_ctor_cstr(ret
, this->true_name
);
4821 /* ?truename@?$numpunct@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4822 /* ?truename@?$numpunct@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4823 /* ?truename@?$numpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4824 /* ?truename@?$numpunct@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4825 DEFINE_THISCALL_WRAPPER(numpunct_wchar_truename
, 8)
4826 basic_string_wchar
* __thiscall
numpunct_wchar_truename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4828 TRACE("(%p)\n", this);
4829 return call_numpunct_wchar_do_truename(this, ret
);
4832 double __cdecl
_Stod(const char *buf
, char **buf_end
, LONG exp
)
4834 double ret
= strtod(buf
, buf_end
);
4837 ret
*= pow(10, exp
);
4841 double __cdecl
_Stodx(const char *buf
, char **buf_end
, LONG exp
, int *err
)
4847 ret
= _Stod(buf
, buf_end
, exp
);
4857 float __cdecl
_Stof(const char *buf
, char **buf_end
, LONG exp
)
4859 return _Stod(buf
, buf_end
, exp
);
4862 float __cdecl
_Stofx(const char *buf
, char **buf_end
, LONG exp
, int *err
)
4864 return _Stodx(buf
, buf_end
, exp
, err
);
4867 __int64 __cdecl
_Stoll(const char *buf
, char **buf_end
, int base
)
4869 return _strtoi64(buf
, buf_end
, base
);
4872 __int64 __cdecl
_Stollx(const char *buf
, char **buf_end
, int base
, int *err
)
4878 ret
= _strtoi64(buf
, buf_end
, base
);
4888 LONG __cdecl
_Stolx(const char *buf
, char **buf_end
, int base
, int *err
)
4890 __int64 i
= _Stollx(buf
, buf_end
, base
, err
);
4891 if(!*err
&& i
!=(__int64
)((LONG
)i
))
4896 unsigned __int64 __cdecl
_Stoull(const char *buf
, char **buf_end
, int base
)
4898 return _strtoui64(buf
, buf_end
, base
);
4901 unsigned __int64 __cdecl
_Stoullx(const char *buf
, char **buf_end
, int base
, int *err
)
4903 unsigned __int64 ret
;
4907 ret
= _strtoui64(buf
, buf_end
, base
);
4917 ULONG __cdecl
_Stoul(const char *buf
, char **buf_end
, int base
)
4920 unsigned __int64 i
= _Stoullx(buf
[0]=='-' ? buf
+1 : buf
, buf_end
, base
, &err
);
4921 if(!err
&& i
!=(unsigned __int64
)((ULONG
)i
))
4923 return buf
[0]=='-' ? -i
: i
;
4926 ULONG __cdecl
_Stoulx(const char *buf
, char **buf_end
, int base
, int *err
)
4928 unsigned __int64 i
= _Stoullx(buf
[0]=='-' ? buf
+1 : buf
, buf_end
, base
, err
);
4929 if(!*err
&& i
!=(unsigned __int64
)((ULONG
)i
))
4931 return buf
[0]=='-' ? -i
: i
;
4934 /* ?id@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
4935 locale_id num_get_wchar_id
= {0};
4936 /* ?id@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
4937 locale_id num_get_short_id
= {0};
4939 /* ??_7?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
4940 extern const vtable_ptr num_get_wchar_vtable
;
4941 /* ??_7?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
4942 extern const vtable_ptr num_get_short_vtable
;
4944 /* ?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
4945 /* ?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
4946 /* ?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
4947 /* ?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
4948 DEFINE_THISCALL_WRAPPER(num_get_wchar__Init
, 8)
4949 void __thiscall
num_get_wchar__Init(num_get
*this, const _Locinfo
*locinfo
)
4951 TRACE("(%p %p)\n", this, locinfo
);
4952 #if _MSVCP_VER <= 100
4953 _Locinfo__Getcvt(locinfo
, &this->cvt
);
4957 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
4958 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
4959 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor_locinfo
, 12)
4960 num_get
* __thiscall
num_get_wchar_ctor_locinfo(num_get
*this,
4961 const _Locinfo
*locinfo
, size_t refs
)
4963 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
4965 locale_facet_ctor_refs(&this->facet
, refs
);
4966 this->facet
.vtable
= &num_get_wchar_vtable
;
4968 num_get_wchar__Init(this, locinfo
);
4972 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
4973 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
4974 DEFINE_THISCALL_WRAPPER(num_get_short_ctor_locinfo
, 12)
4975 num_get
* __thiscall
num_get_short_ctor_locinfo(num_get
*this,
4976 const _Locinfo
*locinfo
, size_t refs
)
4978 num_get_wchar_ctor_locinfo(this, locinfo
, refs
);
4979 this->facet
.vtable
= &num_get_short_vtable
;
4983 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
4984 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
4985 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor_refs
, 8)
4986 num_get
* __thiscall
num_get_wchar_ctor_refs(num_get
*this, size_t refs
)
4990 TRACE("(%p %Iu)\n", this, refs
);
4992 _Locinfo_ctor(&locinfo
);
4993 num_get_wchar_ctor_locinfo(this, &locinfo
, refs
);
4994 _Locinfo_dtor(&locinfo
);
4998 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
4999 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
5000 DEFINE_THISCALL_WRAPPER(num_get_short_ctor_refs
, 8)
5001 num_get
* __thiscall
num_get_short_ctor_refs(num_get
*this, size_t refs
)
5003 num_get_wchar_ctor_refs(this, refs
);
5004 this->facet
.vtable
= &num_get_short_vtable
;
5008 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
5009 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
5010 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor
, 4)
5011 num_get
* __thiscall
num_get_wchar_ctor(num_get
*this)
5013 return num_get_wchar_ctor_refs(this, 0);
5016 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
5017 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
5018 DEFINE_THISCALL_WRAPPER(num_get_short_ctor
, 4)
5019 num_get
* __thiscall
num_get_short_ctor(num_get
*this)
5021 return num_get_short_ctor_refs(this, 0);
5024 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@UAE@XZ */
5025 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@UEAA@XZ */
5026 /* ??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
5027 /* ??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
5028 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
5029 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
5030 DEFINE_THISCALL_WRAPPER(num_get_wchar_dtor
, 4)
5031 void __thiscall
num_get_wchar_dtor(num_get
*this)
5033 TRACE("(%p)\n", this);
5034 locale_facet_dtor(&this->facet
);
5037 DEFINE_THISCALL_WRAPPER(num_get_wchar_vector_dtor
, 8)
5038 num_get
* __thiscall
num_get_wchar_vector_dtor(num_get
*this, unsigned int flags
)
5040 TRACE("(%p %x)\n", this, flags
);
5042 /* we have an array, with the number of elements stored before the first object */
5043 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
5045 for(i
=*ptr
-1; i
>=0; i
--)
5046 num_get_wchar_dtor(this+i
);
5047 MSVCRT_operator_delete(ptr
);
5049 num_get_wchar_dtor(this);
5051 MSVCRT_operator_delete(this);
5057 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
5058 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
5059 size_t __cdecl
num_get_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
5061 TRACE("(%p %p)\n", facet
, loc
);
5063 if(facet
&& !*facet
) {
5066 *facet
= MSVCRT_operator_new(sizeof(num_get
));
5068 ERR("Out of memory\n");
5069 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
5073 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
5074 num_get_wchar_ctor_locinfo((num_get
*)*facet
, &locinfo
, 0);
5075 _Locinfo_dtor(&locinfo
);
5081 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
5082 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
5083 size_t __cdecl
num_get_wchar__Getcat_old(const locale_facet
**facet
)
5085 return num_get_wchar__Getcat(facet
, locale_classic());
5088 num_get
* num_get_wchar_use_facet(const locale
*loc
)
5090 static num_get
*obj
= NULL
;
5093 const locale_facet
*fac
;
5095 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
5096 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_wchar_id
));
5098 _Lockit_dtor(&lock
);
5099 return (num_get
*)fac
;
5103 _Lockit_dtor(&lock
);
5107 num_get_wchar__Getcat(&fac
, loc
);
5108 obj
= (num_get
*)fac
;
5109 call_locale_facet__Incref(&obj
->facet
);
5110 locale_facet_register(&obj
->facet
);
5111 _Lockit_dtor(&lock
);
5116 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
5117 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
5118 size_t __cdecl
num_get_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
5120 if(facet
&& !*facet
) {
5121 num_get_wchar__Getcat(facet
, loc
);
5122 (*(locale_facet
**)facet
)->vtable
= &num_get_short_vtable
;
5128 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
5129 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
5130 size_t __cdecl
num_get_short__Getcat_old(const locale_facet
**facet
)
5132 return num_get_short__Getcat(facet
, locale_classic());
5135 num_get
* num_get_short_use_facet(const locale
*loc
)
5137 static num_get
*obj
= NULL
;
5140 const locale_facet
*fac
;
5142 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
5143 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_short_id
));
5145 _Lockit_dtor(&lock
);
5146 return (num_get
*)fac
;
5150 _Lockit_dtor(&lock
);
5154 num_get_short__Getcat(&fac
, loc
);
5155 obj
= (num_get
*)fac
;
5156 call_locale_facet__Incref(&obj
->facet
);
5157 locale_facet_register(&obj
->facet
);
5158 _Lockit_dtor(&lock
);
5163 static int num_get__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5164 istreambuf_iterator_wchar
*last
, const locale
*loc
, numpunct_wchar
*numpunct
)
5166 basic_string_char grouping_bstr
;
5167 basic_string_char groups_found
;
5168 int i
, groups_no
= 0, cur_group
= 0, exp
= 0;
5169 char *dest_beg
= dest
, *num_end
= dest
+25, *exp_end
= dest
+31;
5170 wchar_t sep
= 0, digits
[11], *digits_pos
;
5171 const char *grouping
, *groups
;
5172 BOOL error
= FALSE
, got_digit
= FALSE
, got_nonzero
= FALSE
;
5175 TRACE("(%p %p %p %p)\n", dest
, first
, last
, loc
);
5177 #if _MSVCP_VER <= 100
5180 cvt
= &ctype_wchar_use_facet(loc
)->cvt
;
5184 digits
[i
] = mb_to_wc('0'+i
, cvt
);
5187 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
5188 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
5189 #if _MSVCP_VER >= 70
5190 if (grouping
[0]) sep
= numpunct_wchar_thousands_sep(numpunct
);
5194 MSVCP_basic_string_char_ctor(&groups_found
);
5196 istreambuf_iterator_wchar_val(first
);
5198 if(first
->strbuf
&& first
->val
==mb_to_wc('-', cvt
)) {
5200 istreambuf_iterator_wchar_inc(first
);
5201 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', cvt
)) {
5203 istreambuf_iterator_wchar_inc(first
);
5206 /* read possibly grouped numbers before decimal */
5207 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
5208 if(!(digits_pos
= wcschr(digits
, first
->val
))) {
5209 if(sep
&& first
->val
==sep
) {
5210 if(!groups_no
) break; /* empty group - stop parsing */
5211 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5218 got_digit
= TRUE
; /* found a digit, zero or non-zero */
5219 /* write digit to dest if not a leading zero (to not waste dest buffer) */
5220 if(!got_nonzero
&& first
->val
== digits
[0])
5227 *dest
++ = '0'+digits_pos
-digits
;
5229 exp
++; /* too many digits, just multiply by 10 */
5230 if(sep
&& groups_no
<CHAR_MAX
)
5235 /* if all leading zeroes, we didn't write anything so put a zero we check for a decimal */
5236 if(got_digit
&& !got_nonzero
)
5239 /* get decimal, if any */
5240 if(first
->strbuf
&& first
->val
==numpunct_wchar_decimal_point(numpunct
)) {
5242 *dest
++ = *localeconv()->decimal_point
;
5243 istreambuf_iterator_wchar_inc(first
);
5246 /* read non-grouped after decimal */
5247 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
5248 if(!(digits_pos
= wcschr(digits
, first
->val
)))
5250 else if(dest
<num_end
) {
5252 *dest
++ = '0'+digits_pos
-digits
;
5256 /* read exponent, if any */
5257 if(first
->strbuf
&& (first
->val
==mb_to_wc('e', cvt
) || first
->val
==mb_to_wc('E', cvt
))) {
5259 istreambuf_iterator_wchar_inc(first
);
5261 if(first
->strbuf
&& first
->val
==mb_to_wc('-', cvt
)) {
5263 istreambuf_iterator_wchar_inc(first
);
5264 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', cvt
)) {
5266 istreambuf_iterator_wchar_inc(first
);
5269 got_digit
= got_nonzero
= FALSE
;
5271 /* skip any leading zeroes */
5272 for(; first
->strbuf
&& first
->val
==digits
[0]; istreambuf_iterator_wchar_inc(first
))
5275 for(; first
->strbuf
&& (digits_pos
= wcschr(digits
, first
->val
)); istreambuf_iterator_wchar_inc(first
)) {
5276 got_digit
= got_nonzero
= TRUE
; /* leading zeroes would have been skipped, so first digit is non-zero */
5279 *dest
++ = '0'+digits_pos
-digits
;
5282 /* if just found zeroes for exponent, use that */
5283 if(got_digit
&& !got_nonzero
)
5291 if(sep
&& groups_no
)
5292 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5294 if(!cur_group
) /* no groups, skip loop */
5296 else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
])
5297 error
= TRUE
; /* trailing empty */
5299 for(; cur_group
>=0 && !error
; cur_group
--) {
5300 if(*grouping
== CHAR_MAX
) {
5304 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
5305 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
5308 }else if(grouping
[1]) {
5312 MSVCP_basic_string_char_dtor(&grouping_bstr
);
5314 MSVCP_basic_string_char_dtor(&groups_found
);
5324 /* ?_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 */
5325 /* ?_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 */
5326 int __cdecl
num_get_wchar__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5327 istreambuf_iterator_wchar
*last
, const locale
*loc
)
5329 return num_get__Getffld(this, dest
, first
, last
, loc
, numpunct_wchar_use_facet(loc
));
5332 /* ?_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 */
5333 /* ?_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 */
5334 int __cdecl
num_get_short__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5335 istreambuf_iterator_wchar
*last
, const locale
*loc
)
5337 return num_get__Getffld(this, dest
, first
, last
, loc
, numpunct_short_use_facet(loc
));
5340 /* ?_Getffldx@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1AAVios_base@2@PAH@Z */
5341 /* ?_Getffldx@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@1AEAVios_base@2@PEAH@Z */
5342 /* ?_Getffldx@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1AAVios_base@2@PAH@Z */
5343 /* ?_Getffldx@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@1AEAVios_base@2@PEAH@Z */
5344 int __cdecl
num_get_wchar__Getffldx(num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5345 istreambuf_iterator_wchar
*last
, ios_base
*ios
, int *phexexp
)
5347 FIXME("(%p %p %p %p %p) stub\n", dest
, first
, last
, ios
, phexexp
);
5351 static int num_get__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5352 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
, numpunct_wchar
*numpunct
)
5354 wchar_t digits
[23], *digits_pos
, sep
= 0;
5355 basic_string_char grouping_bstr
;
5356 basic_string_char groups_found
;
5357 int i
, basefield
, base
, groups_no
= 0, cur_group
= 0;
5358 char *dest_beg
= dest
, *dest_end
= dest
+24;
5359 const char *grouping
, *groups
;
5360 BOOL error
= TRUE
, dest_empty
= TRUE
, found_zero
= FALSE
;
5363 TRACE("(%p %p %p %04x %p)\n", dest
, first
, last
, fmtflags
, loc
);
5365 #if _MSVCP_VER <= 100
5368 cvt
= &ctype_wchar_use_facet(loc
)->cvt
;
5372 digits
[i
] = mb_to_wc('0'+i
, cvt
);
5373 for(i
=0; i
<6; i
++) {
5374 digits
[10+i
] = mb_to_wc('a'+i
, cvt
);
5375 digits
[16+i
] = mb_to_wc('A'+i
, cvt
);
5378 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
5379 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
5380 #if _MSVCP_VER >= 70
5381 if (grouping
[0]) sep
= numpunct_wchar_thousands_sep(numpunct
);
5384 basefield
= fmtflags
& FMTFLAG_basefield
;
5385 if(basefield
== FMTFLAG_oct
)
5387 else if(basefield
== FMTFLAG_hex
)
5388 base
= 22; /* equal to the size of digits buffer */
5394 istreambuf_iterator_wchar_val(first
);
5395 if(first
->strbuf
&& first
->val
==mb_to_wc('-', cvt
)) {
5397 istreambuf_iterator_wchar_inc(first
);
5398 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', cvt
)) {
5400 istreambuf_iterator_wchar_inc(first
);
5403 if(first
->strbuf
&& first
->val
==digits
[0]) {
5405 istreambuf_iterator_wchar_inc(first
);
5406 if(first
->strbuf
&& (first
->val
==mb_to_wc('x', cvt
) || first
->val
==mb_to_wc('X', cvt
))) {
5407 if(!base
|| base
== 22) {
5409 istreambuf_iterator_wchar_inc(first
);
5419 if(!base
) base
= 10;
5424 MSVCP_basic_string_char_ctor(&groups_found
);
5425 if(found_zero
) ++groups_no
;
5428 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
5429 if(!(digits_pos
= wcschr(digits
, first
->val
))) {
5430 if(sep
&& first
->val
==sep
) {
5431 if(!groups_no
) break; /* empty group - stop parsing */
5432 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5440 if(dest_empty
&& first
->val
== digits
[0]) {
5446 /* skip digits that can't be copied to dest buffer, other
5447 * functions are responsible for detecting overflows */
5449 *dest
++ = (digits_pos
-digits
<10 ? '0'+digits_pos
-digits
:
5450 (digits_pos
-digits
<16 ? 'a'+digits_pos
-digits
-10 :
5451 'A'+digits_pos
-digits
-16));
5452 if(sep
&& groups_no
<CHAR_MAX
)
5457 if(sep
&& groups_no
)
5458 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5460 if(!cur_group
) { /* no groups, skip loop */
5462 }else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
]) {
5463 error
= TRUE
; /* trailing empty */
5467 for(; cur_group
>=0 && !error
; cur_group
--) {
5468 if(*grouping
== CHAR_MAX
) {
5472 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
5473 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
5476 }else if(grouping
[1]) {
5481 MSVCP_basic_string_char_dtor(&grouping_bstr
);
5483 MSVCP_basic_string_char_dtor(&groups_found
);
5490 }else if(dest_empty
)
5494 return (base
==22 ? 16 : base
);
5497 /* ?_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 */
5498 /* ?_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 */
5499 int __cdecl
num_get_wchar__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5500 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
)
5502 return num_get__Getifld(this, dest
, first
, last
,
5503 fmtflags
, loc
, numpunct_wchar_use_facet(loc
));
5506 /* ?_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 */
5507 /* ?_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 */
5508 int __cdecl
num_get_short__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5509 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
)
5511 return num_get__Getifld(this, dest
, first
, last
,
5512 fmtflags
, loc
, numpunct_short_use_facet(loc
));
5515 /* ?_Hexdig@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABEH_W000@Z */
5516 /* ?_Hexdig@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAH_W000@Z */
5517 /* ?_Hexdig@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABEHGGGG@Z */
5518 /* ?_Hexdig@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHGGGG@Z */
5519 DEFINE_THISCALL_WRAPPER(MSVCP_num_get_wchar__Hexdig
, 20)
5520 int __thiscall
MSVCP_num_get_wchar__Hexdig(num_get
*this, wchar_t dig
, wchar_t e0
, wchar_t al
, wchar_t au
)
5522 FIXME("(%p %c %c %c %c) stub\n", this, dig
, e0
, al
, au
);
5526 static istreambuf_iterator_wchar
* num_get_do_get_void(const num_get
*this,
5527 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5528 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5529 void **pval
, numpunct_wchar
*numpunct
)
5535 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5537 v
= _Stoullx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5538 &last
, FMTFLAG_hex
, IOS_LOCALE(base
), numpunct
), &err
);
5539 if(v
!=(unsigned __int64
)((INT_PTR
)v
))
5540 *state
|= IOSTATE_failbit
;
5541 else if(end
!=tmp
&& !err
)
5542 *pval
= (void*)((INT_PTR
)v
);
5544 *state
|= IOSTATE_failbit
;
5547 *state
|= IOSTATE_eofbit
;
5553 /* ?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 */
5554 /* ?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 */
5555 #if _MSVCP_VER <= 100
5556 #define call_num_get_wchar_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 4, istreambuf_iterator_wchar*, \
5557 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, void**), \
5558 (this, ret, first, last, base, state, pval))
5560 #define call_num_get_wchar_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_wchar*, \
5561 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, void**), \
5562 (this, ret, first, last, base, state, pval))
5564 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_void
,36)
5565 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5566 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
5568 return num_get_do_get_void(this, ret
, first
, last
, base
,
5569 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5572 /* ?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 */
5573 /* ?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 */
5574 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_void
,36)
5575 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5576 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
5578 return num_get_do_get_void(this, ret
, first
, last
, base
,
5579 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5582 /* ?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 */
5583 /* ?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 */
5584 /* ?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 */
5585 /* ?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 */
5586 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_void
,36)
5587 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5588 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
5590 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5591 return call_num_get_wchar_do_get_void(this, ret
, first
, last
, base
, state
, pval
);
5594 static istreambuf_iterator_wchar
* num_get_do_get_double(const num_get
*this,
5595 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5596 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5597 double *pval
, numpunct_wchar
*numpunct
)
5603 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5605 v
= _Stodx(tmp
, &end
, num_get__Getffld(this, tmp
, &first
, &last
, IOS_LOCALE(base
), numpunct
), &err
);
5606 if(end
!=tmp
&& !err
)
5609 *state
|= IOSTATE_failbit
;
5612 *state
|= IOSTATE_eofbit
;
5618 /* ?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 */
5619 /* ?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 */
5620 /* ?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 */
5621 /* ?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 */
5622 #if _MSVCP_VER <= 100
5623 #define call_num_get_wchar_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_wchar*, \
5624 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
5625 (this, ret, first, last, base, state, pval))
5626 #define call_num_get_wchar_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_wchar*, \
5627 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
5628 (this, ret, first, last, base, state, pval))
5630 #define call_num_get_wchar_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_wchar*, \
5631 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
5632 (this, ret, first, last, base, state, pval))
5633 #define call_num_get_wchar_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_wchar*, \
5634 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
5635 (this, ret, first, last, base, state, pval))
5637 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_double
,36)
5638 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5639 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
5641 return num_get_do_get_double(this, ret
, first
, last
, base
,
5642 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5645 /* ?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 */
5646 /* ?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 */
5647 /* ?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 */
5648 /* ?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 */
5649 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_double
,36)
5650 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5651 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
5653 return num_get_do_get_double(this, ret
, first
, last
, base
,
5654 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5657 /* ?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 */
5658 /* ?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 */
5659 /* ?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 */
5660 /* ?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 */
5661 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ldouble
,36)
5662 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ldouble(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5663 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
5665 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5666 return call_num_get_wchar_do_get_ldouble(this, ret
, first
, last
, base
, state
, pval
);
5669 /* ?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 */
5670 /* ?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 */
5671 /* ?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 */
5672 /* ?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 */
5673 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_double
,36)
5674 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5675 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
5677 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5678 return call_num_get_wchar_do_get_double(this, ret
, first
, last
, base
, state
, pval
);
5681 static istreambuf_iterator_wchar
* num_get_do_get_float(const num_get
*this,
5682 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5683 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5684 float *pval
, numpunct_wchar
*numpunct
)
5690 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5692 v
= _Stofx(tmp
, &end
, num_get__Getffld(this, tmp
, &first
,
5693 &last
, IOS_LOCALE(base
), numpunct
), &err
);
5694 if(end
!=tmp
&& !err
)
5697 *state
|= IOSTATE_failbit
;
5700 *state
|= IOSTATE_eofbit
;
5706 /* ?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 */
5707 /* ?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 */
5708 #if _MSVCP_VER <= 100
5709 #define call_num_get_wchar_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_wchar*, \
5710 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, float*), \
5711 (this, ret, first, last, base, state, pval))
5713 #define call_num_get_wchar_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_wchar*, \
5714 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, float*), \
5715 (this, ret, first, last, base, state, pval))
5717 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_float
,36)
5718 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5719 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
5721 return num_get_do_get_float(this, ret
, first
, last
, base
,
5722 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5725 /* ?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 */
5726 /* ?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 */
5727 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_float
,36)
5728 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5729 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
5731 return num_get_do_get_float(this, ret
, first
, last
, base
,
5732 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5735 /* ?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 */
5736 /* ?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 */
5737 /* ?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 */
5738 /* ?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 */
5739 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_float
,36)
5740 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5741 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
5743 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5744 return call_num_get_wchar_do_get_float(this, ret
, first
, last
, base
, state
, pval
);
5747 static istreambuf_iterator_wchar
* num_get_do_get_uint64(const num_get
*this,
5748 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5749 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5750 ULONGLONG
*pval
, numpunct_wchar
*numpunct
)
5756 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5758 v
= _Stoullx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5759 &last
, base
->fmtfl
, IOS_LOCALE(base
), numpunct
), &err
);
5760 if(end
!=tmp
&& !err
)
5763 *state
|= IOSTATE_failbit
;
5766 *state
|= IOSTATE_eofbit
;
5772 /* ?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 */
5773 /* ?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 */
5774 #if _MSVCP_VER <= 100
5775 #define call_num_get_wchar_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_wchar*, \
5776 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONGLONG*), \
5777 (this, ret, first, last, base, state, pval))
5779 #define call_num_get_wchar_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_wchar*, \
5780 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONGLONG*), \
5781 (this, ret, first, last, base, state, pval))
5783 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_uint64
,36)
5784 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5785 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
5787 return num_get_do_get_uint64(this, ret
, first
, last
, base
,
5788 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5791 /* ?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 */
5792 /* ?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 */
5793 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_uint64
,36)
5794 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5795 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
5797 return num_get_do_get_uint64(this, ret
, first
, last
, base
,
5798 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5801 /* ?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 */
5802 /* ?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 */
5803 /* ?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 */
5804 /* ?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 */
5805 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_uint64
,36)
5806 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5807 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
5809 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5810 return call_num_get_wchar_do_get_uint64(this, ret
, first
, last
, base
, state
, pval
);
5813 static istreambuf_iterator_wchar
* num_get_do_get_int64(const num_get
*this,
5814 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5815 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5816 LONGLONG
*pval
, numpunct_wchar
*numpunct
)
5822 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5824 v
= _Stollx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5825 &last
, base
->fmtfl
, IOS_LOCALE(base
), numpunct
), &err
);
5826 if(end
!=tmp
&& !err
)
5829 *state
|= IOSTATE_failbit
;
5832 *state
|= IOSTATE_eofbit
;
5838 /* ?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 */
5839 /* ?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 */
5840 #if _MSVCP_VER <= 100
5841 #define call_num_get_wchar_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_wchar*, \
5842 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONGLONG*), \
5843 (this, ret, first, last, base, state, pval))
5845 #define call_num_get_wchar_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_wchar*, \
5846 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONGLONG*), \
5847 (this, ret, first, last, base, state, pval))
5849 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_int64
,36)
5850 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5851 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
5853 return num_get_do_get_int64(this, ret
, first
, last
, base
,
5854 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5857 /* ?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 */
5858 /* ?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 */
5859 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_int64
,36)
5860 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5861 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
5863 return num_get_do_get_int64(this, ret
, first
, last
, base
,
5864 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5867 /* ?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 */
5868 /* ?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 */
5869 /* ?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 */
5870 /* ?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 */
5871 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_int64
,36)
5872 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5873 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
5875 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5876 return call_num_get_wchar_do_get_int64(this, ret
, first
, last
, base
, state
, pval
);
5879 static istreambuf_iterator_wchar
* num_get_do_get_ulong(const num_get
*this,
5880 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5881 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5882 ULONG
*pval
, numpunct_wchar
*numpunct
)
5888 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5890 v
= _Stoulx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5891 &last
, base
->fmtfl
, IOS_LOCALE(base
), numpunct
), &err
);
5892 if(end
!=tmp
&& !err
)
5895 *state
|= IOSTATE_failbit
;
5898 *state
|= IOSTATE_eofbit
;
5904 /* ?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 */
5905 /* ?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 */
5906 #if _MSVCP_VER <= 100
5907 #define call_num_get_wchar_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_wchar*, \
5908 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONG*), \
5909 (this, ret, first, last, base, state, pval))
5911 #define call_num_get_wchar_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_wchar*, \
5912 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONG*), \
5913 (this, ret, first, last, base, state, pval))
5915 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_ulong
,36)
5916 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5917 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
5919 return num_get_do_get_ulong(this, ret
, first
, last
, base
,
5920 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5923 /* ?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 */
5924 /* ?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 */
5925 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_ulong
,36)
5926 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5927 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
5929 return num_get_do_get_ulong(this, ret
, first
, last
, base
,
5930 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5933 /* ?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 */
5934 /* ?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 */
5935 /* ?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 */
5936 /* ?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 */
5937 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ulong
,36)
5938 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5939 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
5941 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5942 return call_num_get_wchar_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
5945 static istreambuf_iterator_wchar
* num_get_do_get_long(const num_get
*this,
5946 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5947 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5948 LONG
*pval
, numpunct_wchar
*numpunct
)
5954 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5956 v
= _Stolx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5957 &last
, base
->fmtfl
, IOS_LOCALE(base
), numpunct
), &err
);
5958 if(end
!=tmp
&& !err
)
5961 *state
|= IOSTATE_failbit
;
5964 *state
|= IOSTATE_eofbit
;
5970 /* ?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 */
5971 /* ?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 */
5972 #if _MSVCP_VER <= 100
5973 #define call_num_get_wchar_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_wchar*, \
5974 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONG*), \
5975 (this, ret, first, last, base, state, pval))
5977 #define call_num_get_wchar_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_wchar*, \
5978 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONG*), \
5979 (this, ret, first, last, base, state, pval))
5981 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_long
,36)
5982 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5983 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
5985 return num_get_do_get_long(this, ret
, first
, last
, base
,
5986 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5989 /* ?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 */
5990 /* ?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 */
5991 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_long
,36)
5992 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5993 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
5995 return num_get_do_get_long(this, ret
, first
, last
, base
,
5996 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5999 /* ?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 */
6000 /* ?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 */
6001 /* ?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 */
6002 /* ?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 */
6003 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_long
,36)
6004 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6005 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
6007 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6008 return call_num_get_wchar_do_get_long(this, ret
, first
, last
, base
, state
, pval
);
6011 /* ?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 */
6012 /* ?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 */
6013 #if _MSVCP_VER <= 100
6014 #define call_num_get_wchar_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_wchar*, \
6015 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned int*), \
6016 (this, ret, first, last, base, state, pval))
6018 #define call_num_get_wchar_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_wchar*, \
6019 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned int*), \
6020 (this, ret, first, last, base, state, pval))
6022 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_uint
,36)
6023 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6024 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
6026 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6027 return num_get_wchar_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
6030 /* ?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 */
6031 /* ?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 */
6032 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_uint
,36)
6033 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6034 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
6036 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6037 return num_get_short_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
6040 /* ?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 */
6041 /* ?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 */
6042 /* ?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 */
6043 /* ?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 */
6044 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_uint
,36)
6045 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6046 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
6048 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6049 return call_num_get_wchar_do_get_uint(this, ret
, first
, last
, base
, state
, pval
);
6052 /* ?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 */
6053 /* ?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 */
6054 #if _MSVCP_VER <= 100
6055 #define call_num_get_wchar_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_wchar*, \
6056 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned short*), \
6057 (this, ret, first, last, base, state, pval))
6059 #define call_num_get_wchar_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 48, istreambuf_iterator_wchar*, \
6060 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned short*), \
6061 (this, ret, first, last, base, state, pval))
6063 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_ushort
,36)
6064 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6065 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
6068 char tmp
[25], *beg
, *end
;
6071 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6073 b
= num_get_wchar__Getifld(this, tmp
,
6074 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
));
6075 beg
= tmp
+ (tmp
[0]=='-' ? 1 : 0);
6076 v
= _Stoulx(beg
, &end
, b
, &err
);
6078 if(v
!= (ULONG
)((unsigned short)v
))
6079 *state
|= IOSTATE_failbit
;
6080 else if(end
!=beg
&& !err
)
6081 *pval
= (tmp
[0]=='-' ? -((unsigned short)v
) : v
);
6083 *state
|= IOSTATE_failbit
;
6086 *state
|= IOSTATE_eofbit
;
6092 /* ?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 */
6093 /* ?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 */
6094 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_ushort
,36)
6095 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6096 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
6098 FIXME("(%p %p %p %p %p) stub\n", this, ret
, base
, state
, pval
);
6102 /* ?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 */
6103 /* ?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 */
6104 /* ?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@ */
6105 /* ?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 */
6106 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ushort
,36)
6107 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6108 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
6110 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6111 return call_num_get_wchar_do_get_ushort(this, ret
, first
, last
, base
, state
, pval
);
6114 static istreambuf_iterator_wchar
* num_get_do_get_bool(const num_get
*this,
6115 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
6116 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
6117 bool *pval
, numpunct_wchar
*numpunct
)
6119 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6121 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
6122 basic_string_wchar false_bstr
, true_bstr
;
6123 const wchar_t *pfalse
, *ptrue
;
6125 numpunct_wchar_falsename(numpunct
, &false_bstr
);
6126 numpunct_wchar_truename(numpunct
, &true_bstr
);
6127 pfalse
= MSVCP_basic_string_wchar_c_str(&false_bstr
);
6128 ptrue
= MSVCP_basic_string_wchar_c_str(&true_bstr
);
6130 for(istreambuf_iterator_wchar_val(&first
); first
.strbuf
;) {
6131 if(pfalse
&& *pfalse
&& first
.val
!=*pfalse
)
6133 if(ptrue
&& *ptrue
&& first
.val
!=*ptrue
)
6136 if(pfalse
&& *pfalse
&& ptrue
&& !*ptrue
)
6138 if(ptrue
&& *ptrue
&& pfalse
&& !*pfalse
)
6147 istreambuf_iterator_wchar_inc(&first
);
6149 if((!pfalse
|| !*pfalse
) && (!ptrue
|| !*ptrue
))
6158 *state
|= IOSTATE_failbit
;
6160 MSVCP_basic_string_wchar_dtor(&false_bstr
);
6161 MSVCP_basic_string_wchar_dtor(&true_bstr
);
6165 LONG v
= _Stolx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
6166 &last
, base
->fmtfl
, IOS_LOCALE(base
), numpunct
), &err
);
6168 if(end
!=tmp
&& err
==0 && (v
==0 || v
==1))
6171 *state
|= IOSTATE_failbit
;
6175 *state
|= IOSTATE_eofbit
;
6176 memcpy(ret
, &first
, sizeof(first
));
6180 /* ?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 */
6181 /* ?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 */
6182 #if _MSVCP_VER <= 100
6183 #define call_num_get_wchar_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_wchar*, \
6184 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, bool*), \
6185 (this, ret, first, last, base, state, pval))
6187 #define call_num_get_wchar_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 52, istreambuf_iterator_wchar*, \
6188 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, bool*), \
6189 (this, ret, first, last, base, state, pval))
6191 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_bool
,36)
6192 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6193 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, bool *pval
)
6195 return num_get_do_get_bool(this, ret
, first
, last
, base
,
6196 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
6199 /* ?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 */
6200 /* ?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 */
6201 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_bool
,36)
6202 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6203 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, bool *pval
)
6205 return num_get_do_get_bool(this, ret
, first
, last
, base
,
6206 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
6209 /* ?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 */
6210 /* ?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 */
6211 /* ?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 */
6212 /* ?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 */
6213 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_bool
,36)
6214 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6215 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, bool *pval
)
6217 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6218 return call_num_get_wchar_do_get_bool(this, ret
, first
, last
, base
, state
, pval
);
6221 /* ?id@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
6222 locale_id num_get_char_id
= {0};
6224 /* ??_7?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
6225 extern const vtable_ptr num_get_char_vtable
;
6227 /* ?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
6228 /* ?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
6229 DEFINE_THISCALL_WRAPPER(num_get_char__Init
, 8)
6230 void __thiscall
num_get_char__Init(num_get
*this, const _Locinfo
*locinfo
)
6232 TRACE("(%p %p)\n", this, locinfo
);
6233 #if _MSVCP_VER <= 100
6234 _Locinfo__Getcvt(locinfo
, &this->cvt
);
6238 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
6239 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
6240 DEFINE_THISCALL_WRAPPER(num_get_char_ctor_locinfo
, 12)
6241 num_get
* __thiscall
num_get_char_ctor_locinfo(num_get
*this,
6242 const _Locinfo
*locinfo
, size_t refs
)
6244 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
6246 locale_facet_ctor_refs(&this->facet
, refs
);
6247 this->facet
.vtable
= &num_get_char_vtable
;
6249 num_get_char__Init(this, locinfo
);
6253 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
6254 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
6255 DEFINE_THISCALL_WRAPPER(num_get_char_ctor_refs
, 8)
6256 num_get
* __thiscall
num_get_char_ctor_refs(num_get
*this, size_t refs
)
6260 TRACE("(%p %Iu)\n", this, refs
);
6262 _Locinfo_ctor(&locinfo
);
6263 num_get_char_ctor_locinfo(this, &locinfo
, refs
);
6264 _Locinfo_dtor(&locinfo
);
6268 /* ??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
6269 /* ??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
6270 DEFINE_THISCALL_WRAPPER(num_get_char_ctor
, 4)
6271 num_get
* __thiscall
num_get_char_ctor(num_get
*this)
6273 return num_get_char_ctor_refs(this, 0);
6276 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@UAE@XZ */
6277 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@UEAA@XZ */
6278 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
6279 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
6280 DEFINE_THISCALL_WRAPPER(num_get_char_dtor
, 4)
6281 void __thiscall
num_get_char_dtor(num_get
*this)
6283 TRACE("(%p)\n", this);
6284 locale_facet_dtor(&this->facet
);
6287 DEFINE_THISCALL_WRAPPER(num_get_char_vector_dtor
, 8)
6288 num_get
* __thiscall
num_get_char_vector_dtor(num_get
*this, unsigned int flags
)
6290 TRACE("(%p %x)\n", this, flags
);
6292 /* we have an array, with the number of elements stored before the first object */
6293 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
6295 for(i
=*ptr
-1; i
>=0; i
--)
6296 num_get_char_dtor(this+i
);
6297 MSVCRT_operator_delete(ptr
);
6299 num_get_char_dtor(this);
6301 MSVCRT_operator_delete(this);
6307 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
6308 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
6309 size_t __cdecl
num_get_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
6311 TRACE("(%p %p)\n", facet
, loc
);
6313 if(facet
&& !*facet
) {
6316 *facet
= MSVCRT_operator_new(sizeof(num_get
));
6318 ERR("Out of memory\n");
6319 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
6323 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
6324 num_get_char_ctor_locinfo((num_get
*)*facet
, &locinfo
, 0);
6325 _Locinfo_dtor(&locinfo
);
6331 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
6332 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
6333 size_t __cdecl
num_get_char__Getcat_old(const locale_facet
**facet
)
6335 return num_get_char__Getcat(facet
, locale_classic());
6338 num_get
* num_get_char_use_facet(const locale
*loc
)
6340 static num_get
*obj
= NULL
;
6343 const locale_facet
*fac
;
6345 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
6346 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_char_id
));
6348 _Lockit_dtor(&lock
);
6349 return (num_get
*)fac
;
6353 _Lockit_dtor(&lock
);
6357 num_get_char__Getcat(&fac
, loc
);
6358 obj
= (num_get
*)fac
;
6359 call_locale_facet__Incref(&obj
->facet
);
6360 locale_facet_register(&obj
->facet
);
6361 _Lockit_dtor(&lock
);
6366 /* ?_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 */
6367 /* ?_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 */
6368 /* Copies number to dest buffer, validates grouping and skips separators.
6369 * Updates first so it points past the number, all digits are skipped.
6370 * Returns how exponent needs to changed.
6371 * Size of dest buffer is not specified, assuming it's not smaller than 32:
6372 * strlen(+0.e+) + 22(digits) + 4(exponent) + 1(nullbyte)
6374 int __cdecl
num_get_char__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_char
*first
,
6375 istreambuf_iterator_char
*last
, const locale
*loc
)
6377 numpunct_char
*numpunct
= numpunct_char_use_facet(loc
);
6378 basic_string_char grouping_bstr
;
6379 basic_string_char groups_found
;
6380 int groups_no
= 0, cur_group
= 0, exp
= 0;
6381 char *dest_beg
= dest
, *num_end
= dest
+25, *exp_end
= dest
+31, sep
= 0;
6382 const char *grouping
, *groups
;
6383 BOOL error
= FALSE
, got_digit
= FALSE
, got_nonzero
= FALSE
;
6385 TRACE("(%p %p %p %p)\n", dest
, first
, last
, loc
);
6387 numpunct_char_grouping(numpunct
, &grouping_bstr
);
6388 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
6389 #if _MSVCP_VER >= 70
6390 if (grouping
[0]) sep
= numpunct_char_thousands_sep(numpunct
);
6394 MSVCP_basic_string_char_ctor(&groups_found
);
6396 istreambuf_iterator_char_val(first
);
6398 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
6399 *dest
++ = first
->val
;
6400 istreambuf_iterator_char_inc(first
);
6403 /* read possibly grouped numbers before decimal */
6404 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
6405 if(first
->val
<'0' || first
->val
>'9') {
6406 if(sep
&& first
->val
==sep
) {
6407 if(!groups_no
) break; /* empty group - stop parsing */
6408 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
6415 got_digit
= TRUE
; /* found a digit, zero or non-zero */
6416 /* write digit to dest if not a leading zero (to not waste dest buffer) */
6417 if(!got_nonzero
&& first
->val
== '0')
6424 *dest
++ = first
->val
;
6426 exp
++; /* too many digits, just multiply by 10 */
6427 if(sep
&& groups_no
<CHAR_MAX
)
6432 /* if all leading zeroes, we didn't write anything so put a zero we check for a decimal */
6433 if(got_digit
&& !got_nonzero
)
6436 /* get decimal, if any */
6437 if(first
->strbuf
&& first
->val
==numpunct_char_decimal_point(numpunct
)) {
6439 *dest
++ = *localeconv()->decimal_point
;
6440 istreambuf_iterator_char_inc(first
);
6443 /* read non-grouped after decimal */
6444 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
6445 if(first
->val
<'0' || first
->val
>'9')
6447 else if(dest
<num_end
) {
6449 *dest
++ = first
->val
;
6453 /* read exponent, if any */
6454 if(first
->strbuf
&& (first
->val
=='e' || first
->val
=='E')) {
6455 *dest
++ = first
->val
;
6456 istreambuf_iterator_char_inc(first
);
6458 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
6459 *dest
++ = first
->val
;
6460 istreambuf_iterator_char_inc(first
);
6463 got_digit
= got_nonzero
= FALSE
;
6465 /* skip any leading zeroes */
6466 for(; first
->strbuf
&& first
->val
=='0'; istreambuf_iterator_char_inc(first
))
6469 for(; first
->strbuf
&& first
->val
>='0' && first
->val
<='9'; istreambuf_iterator_char_inc(first
)) {
6470 got_digit
= got_nonzero
= TRUE
; /* leading zeroes would have been skipped, so first digit is non-zero */
6473 *dest
++ = first
->val
;
6476 /* if just found zeroes for exponent, use that */
6477 if(got_digit
&& !got_nonzero
)
6485 if(sep
&& groups_no
)
6486 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
6488 if(!cur_group
) /* no groups, skip loop */
6490 else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
])
6491 error
= TRUE
; /* trailing empty */
6493 for(; cur_group
>=0 && !error
; cur_group
--) {
6494 if(*grouping
== CHAR_MAX
) {
6498 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
6499 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
6502 }else if(grouping
[1]) {
6506 MSVCP_basic_string_char_dtor(&grouping_bstr
);
6508 MSVCP_basic_string_char_dtor(&groups_found
);
6518 /* ?_Getffldx@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1AAVios_base@2@PAH@Z */
6519 /* ?_Getffldx@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHPEADAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@1AEAVios_base@2@PEAH@Z */
6520 int __cdecl
num_get_char__Getffldx(const num_get
*this, char *dest
, istreambuf_iterator_char
*first
,
6521 istreambuf_iterator_char
*last
, ios_base
*ios
, int *phexexp
)
6523 FIXME("(%p %p %p %p %p) stub\n", dest
, first
, last
, ios
, phexexp
);
6527 /* ?_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 */
6528 /* ?_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 */
6529 /* Copies number to dest buffer, validates grouping and skips separators.
6530 * Updates first so it points past the number, all digits are skipped.
6531 * Returns number base (8, 10 or 16).
6532 * Size of dest buffer is not specified, assuming it's not smaller than 25:
6533 * 22(8^22>2^64)+1(detect overflows)+1(sign)+1(nullbyte) = 25
6535 int __cdecl
num_get_char__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_char
*first
,
6536 istreambuf_iterator_char
*last
, int fmtflags
, const locale
*loc
)
6538 static const char digits
[] = "0123456789abcdefABCDEF";
6540 numpunct_char
*numpunct
= numpunct_char_use_facet(loc
);
6541 basic_string_char grouping_bstr
;
6542 basic_string_char groups_found
;
6543 int basefield
, base
, groups_no
= 0, cur_group
= 0;
6544 char *dest_beg
= dest
, *dest_end
= dest
+24, sep
= 0;
6545 const char *grouping
, *groups
;
6546 BOOL error
= TRUE
, dest_empty
= TRUE
, found_zero
= FALSE
;
6548 TRACE("(%p %p %p %04x %p)\n", dest
, first
, last
, fmtflags
, loc
);
6550 numpunct_char_grouping(numpunct
, &grouping_bstr
);
6551 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
6552 #if _MSVCP_VER >= 70
6553 if (grouping
[0]) sep
= numpunct_char_thousands_sep(numpunct
);
6556 basefield
= fmtflags
& FMTFLAG_basefield
;
6557 if(basefield
== FMTFLAG_oct
)
6559 else if(basefield
== FMTFLAG_hex
)
6560 base
= 22; /* equal to the size of digits buffer */
6566 istreambuf_iterator_char_val(first
);
6567 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
6568 *dest
++ = first
->val
;
6569 istreambuf_iterator_char_inc(first
);
6572 if(first
->strbuf
&& first
->val
=='0') {
6574 istreambuf_iterator_char_inc(first
);
6575 if(first
->strbuf
&& (first
->val
=='x' || first
->val
=='X')) {
6576 if(!base
|| base
== 22) {
6578 istreambuf_iterator_char_inc(first
);
6588 if (!base
) base
= 10;
6593 MSVCP_basic_string_char_ctor(&groups_found
);
6594 if(found_zero
) ++groups_no
;
6597 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
6598 if(!memchr(digits
, first
->val
, base
)) {
6599 if(sep
&& first
->val
==sep
) {
6600 if(!groups_no
) break; /* empty group - stop parsing */
6601 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
6609 if(dest_empty
&& first
->val
== '0')
6616 /* skip digits that can't be copied to dest buffer, other
6617 * functions are responsible for detecting overflows */
6619 *dest
++ = first
->val
;
6620 if(sep
&& groups_no
<CHAR_MAX
)
6625 if(sep
&& groups_no
)
6626 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
6628 if(!cur_group
) { /* no groups, skip loop */
6630 }else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
]) {
6631 error
= TRUE
; /* trailing empty */
6635 for(; cur_group
>=0 && !error
; cur_group
--) {
6636 if(*grouping
== CHAR_MAX
) {
6640 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
6641 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
6644 }else if(grouping
[1]) {
6649 MSVCP_basic_string_char_dtor(&grouping_bstr
);
6651 MSVCP_basic_string_char_dtor(&groups_found
);
6658 }else if(dest_empty
)
6662 return (base
==22 ? 16 : base
);
6665 /* ?_Hexdig@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABEHD000@Z */
6666 /* ?_Hexdig@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHD000@Z */
6667 DEFINE_THISCALL_WRAPPER(MSVCP_num_get_char__Hexdig
, 20)
6668 int __thiscall
MSVCP_num_get_char__Hexdig(num_get
*this, char dig
, char e0
, char al
, char au
)
6670 FIXME("(%p %c %c %c %c) stub\n", this, dig
, e0
, al
, au
);
6674 /* ?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 */
6675 /* ?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 */
6676 #if _MSVCP_VER <= 100
6677 #define call_num_get_char_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 4, istreambuf_iterator_char*, \
6678 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, void**), \
6679 (this, ret, first, last, base, state, pval))
6681 #define call_num_get_char_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_char*, \
6682 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, void**), \
6683 (this, ret, first, last, base, state, pval))
6685 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_void
,36)
6686 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_void(const num_get
*this, istreambuf_iterator_char
*ret
,
6687 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, void **pval
)
6693 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6695 v
= _Stoullx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6696 &first
, &last
, FMTFLAG_hex
, IOS_LOCALE(base
)), &err
);
6697 if(v
!=(unsigned __int64
)((INT_PTR
)v
))
6698 *state
|= IOSTATE_failbit
;
6699 else if(end
!=tmp
&& !err
)
6700 *pval
= (void*)((INT_PTR
)v
);
6702 *state
|= IOSTATE_failbit
;
6705 *state
|= IOSTATE_eofbit
;
6711 /* ?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 */
6712 /* ?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 */
6713 DEFINE_THISCALL_WRAPPER(num_get_char_get_void
,36)
6714 istreambuf_iterator_char
*__thiscall
num_get_char_get_void(const num_get
*this, istreambuf_iterator_char
*ret
,
6715 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, void **pval
)
6717 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6718 return call_num_get_char_do_get_void(this, ret
, first
, last
, base
, state
, pval
);
6721 /* ?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 */
6722 /* ?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 */
6723 /* ?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 */
6724 /* ?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 */
6725 #if _MSVCP_VER <= 100
6726 #define call_num_get_char_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_char*, \
6727 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
6728 (this, ret, first, last, base, state, pval))
6729 #define call_num_get_char_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_char*, \
6730 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
6731 (this, ret, first, last, base, state, pval))
6733 #define call_num_get_char_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_char*, \
6734 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
6735 (this, ret, first, last, base, state, pval))
6736 #define call_num_get_char_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_char*, \
6737 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
6738 (this, ret, first, last, base, state, pval))
6740 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_double
,36)
6741 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_double(const num_get
*this, istreambuf_iterator_char
*ret
,
6742 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
6748 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6750 v
= _Stodx(tmp
, &end
, num_get_char__Getffld(this, tmp
, &first
, &last
, IOS_LOCALE(base
)), &err
);
6751 if(end
!=tmp
&& !err
)
6754 *state
|= IOSTATE_failbit
;
6757 *state
|= IOSTATE_eofbit
;
6763 /* ?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 */
6764 /* ?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 */
6765 DEFINE_THISCALL_WRAPPER(num_get_char_get_ldouble
,36)
6766 istreambuf_iterator_char
*__thiscall
num_get_char_get_ldouble(const num_get
*this, istreambuf_iterator_char
*ret
,
6767 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
6769 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6770 return call_num_get_char_do_get_ldouble(this, ret
, first
, last
, base
, state
, pval
);
6773 /* ?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 */
6774 /* ?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 */
6775 DEFINE_THISCALL_WRAPPER(num_get_char_get_double
,36)
6776 istreambuf_iterator_char
*__thiscall
num_get_char_get_double(const num_get
*this, istreambuf_iterator_char
*ret
,
6777 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
6779 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6780 return call_num_get_char_do_get_double(this, ret
, first
, last
, base
, state
, pval
);
6783 /* ?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 */
6784 /* ?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 */
6785 #if _MSVCP_VER <= 100
6786 #define call_num_get_char_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_char*, \
6787 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, float*), \
6788 (this, ret, first, last, base, state, pval))
6790 #define call_num_get_char_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_char*, \
6791 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, float*), \
6792 (this, ret, first, last, base, state, pval))
6794 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_float
,36)
6795 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_float(const num_get
*this, istreambuf_iterator_char
*ret
,
6796 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, float *pval
)
6802 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6804 v
= _Stofx(tmp
, &end
, num_get_char__Getffld(this, tmp
, &first
, &last
, IOS_LOCALE(base
)), &err
);
6805 if(end
!=tmp
&& !err
)
6808 *state
|= IOSTATE_failbit
;
6811 *state
|= IOSTATE_eofbit
;
6817 /* ?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 */
6818 /* ?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 */
6819 DEFINE_THISCALL_WRAPPER(num_get_char_get_float
,36)
6820 istreambuf_iterator_char
*__thiscall
num_get_char_get_float(const num_get
*this, istreambuf_iterator_char
*ret
,
6821 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, float *pval
)
6823 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6824 return call_num_get_char_do_get_float(this, ret
, first
, last
, base
, state
, pval
);
6827 /* ?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 */
6828 /* ?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 */
6829 #if _MSVCP_VER <= 100
6830 #define call_num_get_char_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_char*, \
6831 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONGLONG*), \
6832 (this, ret, first, last, base, state, pval))
6834 #define call_num_get_char_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_char*, \
6835 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONGLONG*), \
6836 (this, ret, first, last, base, state, pval))
6838 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_uint64
,36)
6839 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_uint64(const num_get
*this, istreambuf_iterator_char
*ret
,
6840 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
6846 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6848 v
= _Stoullx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6849 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
)), &err
);
6850 if(end
!=tmp
&& !err
)
6853 *state
|= IOSTATE_failbit
;
6856 *state
|= IOSTATE_eofbit
;
6862 /* ?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 */
6863 /* ?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 */
6864 DEFINE_THISCALL_WRAPPER(num_get_char_get_uint64
,36)
6865 istreambuf_iterator_char
*__thiscall
num_get_char_get_uint64(const num_get
*this, istreambuf_iterator_char
*ret
,
6866 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
6868 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6869 return call_num_get_char_do_get_uint64(this, ret
, first
, last
, base
, state
, pval
);
6872 /* ?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 */
6873 /* ?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 */
6874 #if _MSVCP_VER <= 100
6875 #define call_num_get_char_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_char*, \
6876 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONGLONG*), \
6877 (this, ret, first, last, base, state, pval))
6879 #define call_num_get_char_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_char*, \
6880 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONGLONG*), \
6881 (this, ret, first, last, base, state, pval))
6883 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_int64
,36)
6884 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_int64(const num_get
*this, istreambuf_iterator_char
*ret
,
6885 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
6891 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6893 v
= _Stollx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6894 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
)), &err
);
6895 if(end
!=tmp
&& !err
)
6898 *state
|= IOSTATE_failbit
;
6901 *state
|= IOSTATE_eofbit
;
6907 /* ?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 */
6908 /* ?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 */
6909 DEFINE_THISCALL_WRAPPER(num_get_char_get_int64
,36)
6910 istreambuf_iterator_char
*__thiscall
num_get_char_get_int64(const num_get
*this, istreambuf_iterator_char
*ret
,
6911 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
6913 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6914 return call_num_get_char_do_get_int64(this, ret
, first
, last
, base
, state
, pval
);
6917 /* ?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 */
6918 /* ?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 */
6919 #if _MSVCP_VER <= 100
6920 #define call_num_get_char_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_char*, \
6921 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONG*), \
6922 (this, ret, first, last, base, state, pval))
6924 #define call_num_get_char_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_char*, \
6925 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONG*), \
6926 (this, ret, first, last, base, state, pval))
6928 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_ulong
,36)
6929 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_ulong(const num_get
*this, istreambuf_iterator_char
*ret
,
6930 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONG
*pval
)
6936 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6938 v
= _Stoulx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6939 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
)), &err
);
6940 if(end
!=tmp
&& !err
)
6943 *state
|= IOSTATE_failbit
;
6946 *state
|= IOSTATE_eofbit
;
6952 /* ?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 */
6953 /* ?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 */
6954 DEFINE_THISCALL_WRAPPER(num_get_char_get_ulong
,36)
6955 istreambuf_iterator_char
*__thiscall
num_get_char_get_ulong(const num_get
*this, istreambuf_iterator_char
*ret
,
6956 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONG
*pval
)
6958 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6959 return call_num_get_char_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
6962 /* ?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 */
6963 /* ?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 */
6964 #if _MSVCP_VER <= 100
6965 #define call_num_get_char_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_char*, \
6966 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONG*), \
6967 (this, ret, first, last, base, state, pval))
6969 #define call_num_get_char_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_char*, \
6970 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONG*), \
6971 (this, ret, first, last, base, state, pval))
6973 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_long
,36)
6974 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_long(const num_get
*this, istreambuf_iterator_char
*ret
,
6975 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONG
*pval
)
6981 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6983 v
= _Stolx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6984 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
)), &err
);
6985 if(end
!=tmp
&& !err
)
6988 *state
|= IOSTATE_failbit
;
6991 *state
|= IOSTATE_eofbit
;
6997 /* ?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 */
6998 /* ?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 */
6999 DEFINE_THISCALL_WRAPPER(num_get_char_get_long
,36)
7000 istreambuf_iterator_char
*__thiscall
num_get_char_get_long(const num_get
*this, istreambuf_iterator_char
*ret
,
7001 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONG
*pval
)
7003 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
7004 return call_num_get_char_do_get_long(this, ret
, first
, last
, base
, state
, pval
);
7007 /* ?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 */
7008 /* ?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 */
7009 #if _MSVCP_VER <= 100
7010 #define call_num_get_char_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_char*, \
7011 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned int*), \
7012 (this, ret, first, last, base, state, pval))
7014 #define call_num_get_char_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_char*, \
7015 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned int*), \
7016 (this, ret, first, last, base, state, pval))
7018 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_uint
,36)
7019 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_uint(const num_get
*this, istreambuf_iterator_char
*ret
,
7020 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned int *pval
)
7022 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
7023 return num_get_char_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
7026 /* ?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 */
7027 /* ?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 */
7028 DEFINE_THISCALL_WRAPPER(num_get_char_get_uint
,36)
7029 istreambuf_iterator_char
*__thiscall
num_get_char_get_uint(const num_get
*this, istreambuf_iterator_char
*ret
,
7030 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned int *pval
)
7032 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
7033 return call_num_get_char_do_get_uint(this, ret
, first
, last
, base
, state
, pval
);
7036 /* ?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 */
7037 /* ?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 */
7038 #if _MSVCP_VER <= 100
7039 #define call_num_get_char_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_char*, \
7040 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned short*), \
7041 (this, ret, first, last, base, state, pval))
7043 #define call_num_get_char_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 48, istreambuf_iterator_char*, \
7044 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned short*), \
7045 (this, ret, first, last, base, state, pval))
7047 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_ushort
,36)
7048 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_ushort(const num_get
*this, istreambuf_iterator_char
*ret
,
7049 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned short *pval
)
7052 char tmp
[25], *beg
, *end
;
7055 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
7057 b
= num_get_char__Getifld(this, tmp
,
7058 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
));
7059 beg
= tmp
+ (tmp
[0]=='-' ? 1 : 0);
7060 v
= _Stoulx(beg
, &end
, b
, &err
);
7062 if(v
!= (ULONG
)((unsigned short)v
))
7063 *state
|= IOSTATE_failbit
;
7064 else if(end
!=beg
&& !err
)
7065 *pval
= (tmp
[0]=='-' ? -((unsigned short)v
) : v
);
7067 *state
|= IOSTATE_failbit
;
7070 *state
|= IOSTATE_eofbit
;
7076 /* ?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 */
7077 /* ?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 */
7078 DEFINE_THISCALL_WRAPPER(num_get_char_get_ushort
,36)
7079 istreambuf_iterator_char
*__thiscall
num_get_char_get_ushort(const num_get
*this, istreambuf_iterator_char
*ret
,
7080 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned short *pval
)
7082 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
7083 return call_num_get_char_do_get_ushort(this, ret
, first
, last
, base
, state
, pval
);
7086 /* ?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 */
7087 /* ?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 */
7088 #if _MSVCP_VER <= 100
7089 #define call_num_get_char_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_char*, \
7090 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, bool*), \
7091 (this, ret, first, last, base, state, pval))
7093 #define call_num_get_char_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 52, istreambuf_iterator_char*, \
7094 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, bool*), \
7095 (this, ret, first, last, base, state, pval))
7097 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_bool
,36)
7098 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_bool(const num_get
*this, istreambuf_iterator_char
*ret
,
7099 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, bool *pval
)
7101 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
7103 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
7104 numpunct_char
*numpunct
= numpunct_char_use_facet(IOS_LOCALE(base
));
7105 basic_string_char false_bstr
, true_bstr
;
7106 const char *pfalse
, *ptrue
;
7108 numpunct_char_falsename(numpunct
, &false_bstr
);
7109 numpunct_char_truename(numpunct
, &true_bstr
);
7110 pfalse
= MSVCP_basic_string_char_c_str(&false_bstr
);
7111 ptrue
= MSVCP_basic_string_char_c_str(&true_bstr
);
7113 for(istreambuf_iterator_char_val(&first
); first
.strbuf
;) {
7114 if(pfalse
&& *pfalse
&& first
.val
!=*pfalse
)
7116 if(ptrue
&& *ptrue
&& first
.val
!=*ptrue
)
7119 if(pfalse
&& *pfalse
&& ptrue
&& !*ptrue
)
7121 if(ptrue
&& *ptrue
&& pfalse
&& !*pfalse
)
7130 istreambuf_iterator_char_inc(&first
);
7132 if((!pfalse
|| !*pfalse
) && (!ptrue
|| !*ptrue
))
7141 *state
|= IOSTATE_failbit
;
7143 MSVCP_basic_string_char_dtor(&false_bstr
);
7144 MSVCP_basic_string_char_dtor(&true_bstr
);
7148 LONG v
= _Stolx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
7149 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
)), &err
);
7151 if(end
!=tmp
&& err
==0 && (v
==0 || v
==1))
7154 *state
|= IOSTATE_failbit
;
7158 *state
|= IOSTATE_eofbit
;
7159 memcpy(ret
, &first
, sizeof(first
));
7163 /* ?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 */
7164 /* ?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 */
7165 DEFINE_THISCALL_WRAPPER(num_get_char_get_bool
,36)
7166 istreambuf_iterator_char
*__thiscall
num_get_char_get_bool(const num_get
*this, istreambuf_iterator_char
*ret
,
7167 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, bool *pval
)
7169 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
7170 return call_num_get_char_do_get_bool(this, ret
, first
, last
, base
, state
, pval
);
7173 /* ?id@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
7174 locale_id num_put_char_id
= {0};
7176 /* num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
7177 extern const vtable_ptr num_put_char_vtable
;
7179 /* ?_Init@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
7180 /* ?_Init@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
7181 DEFINE_THISCALL_WRAPPER(num_put_char__Init
, 8)
7182 void __thiscall
num_put_char__Init(num_put
*this, const _Locinfo
*locinfo
)
7184 TRACE("(%p %p)\n", this, locinfo
);
7185 #if _MSVCP_VER < 110
7186 _Locinfo__Getcvt(locinfo
, &this->cvt
);
7190 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
7191 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
7192 DEFINE_THISCALL_WRAPPER(num_put_char_ctor_locinfo
, 12)
7193 num_put
* __thiscall
num_put_char_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, size_t refs
)
7195 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
7197 locale_facet_ctor_refs(&this->facet
, refs
);
7198 this->facet
.vtable
= &num_put_char_vtable
;
7200 num_put_char__Init(this, locinfo
);
7204 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
7205 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
7206 DEFINE_THISCALL_WRAPPER(num_put_char_ctor_refs
, 8)
7207 num_put
* __thiscall
num_put_char_ctor_refs(num_put
*this, size_t refs
)
7211 TRACE("(%p %Iu)\n", this, refs
);
7213 _Locinfo_ctor(&locinfo
);
7214 num_put_char_ctor_locinfo(this, &locinfo
, refs
);
7215 _Locinfo_dtor(&locinfo
);
7219 /* ??_F?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
7220 /* ??_F?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
7221 DEFINE_THISCALL_WRAPPER(num_put_char_ctor
, 4)
7222 num_put
* __thiscall
num_put_char_ctor(num_put
*this)
7224 return num_put_char_ctor_refs(this, 0);
7227 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@UAE@XZ */
7228 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@UEAA@XZ */
7229 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
7230 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
7231 DEFINE_THISCALL_WRAPPER(num_put_char_dtor
, 4)
7232 void __thiscall
num_put_char_dtor(num_put
*this)
7234 TRACE("(%p)\n", this);
7235 locale_facet_dtor(&this->facet
);
7238 DEFINE_THISCALL_WRAPPER(num_put_char_vector_dtor
, 8)
7239 num_put
* __thiscall
num_put_char_vector_dtor(num_put
*this, unsigned int flags
)
7241 TRACE("(%p %x)\n", this, flags
);
7243 /* we have an array, with the number of elements stored before the first object */
7244 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
7246 for(i
=*ptr
-1; i
>=0; i
--)
7247 num_put_char_dtor(this+i
);
7248 MSVCRT_operator_delete(ptr
);
7250 num_put_char_dtor(this);
7252 MSVCRT_operator_delete(this);
7258 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
7259 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
7260 size_t __cdecl
num_put_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
7262 TRACE("(%p %p)\n", facet
, loc
);
7264 if(facet
&& !*facet
) {
7267 *facet
= MSVCRT_operator_new(sizeof(num_put
));
7269 ERR("Out of memory\n");
7270 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7274 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
7275 num_put_char_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
7276 _Locinfo_dtor(&locinfo
);
7282 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
7283 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
7284 size_t __cdecl
num_put_char__Getcat_old(const locale_facet
**facet
)
7286 return num_put_char__Getcat(facet
, locale_classic());
7289 num_put
* num_put_char_use_facet(const locale
*loc
)
7291 static num_put
*obj
= NULL
;
7294 const locale_facet
*fac
;
7296 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
7297 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_char_id
));
7299 _Lockit_dtor(&lock
);
7300 return (num_put
*)fac
;
7304 _Lockit_dtor(&lock
);
7308 num_put_char__Getcat(&fac
, loc
);
7309 obj
= (num_put
*)fac
;
7310 call_locale_facet__Incref(&obj
->facet
);
7311 locale_facet_register(&obj
->facet
);
7312 _Lockit_dtor(&lock
);
7317 /* ?_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 */
7318 /* ?_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 */
7319 ostreambuf_iterator_char
* __cdecl
num_put_char__Put(const num_put
*this, ostreambuf_iterator_char
*ret
,
7320 ostreambuf_iterator_char dest
, const char *ptr
, size_t count
)
7322 TRACE("(%p %p %p %Iu)\n", this, ret
, ptr
, count
);
7324 for(; count
>0; count
--)
7325 ostreambuf_iterator_char_put(&dest
, *ptr
++);
7331 /* ?_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 */
7332 /* ?_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 */
7333 ostreambuf_iterator_char
* __cdecl
num_put_char__Putc(const num_put
*this, ostreambuf_iterator_char
*ret
,
7334 ostreambuf_iterator_char dest
, const char *ptr
, size_t count
)
7336 TRACE("(%p %p %p %Iu)\n", this, ret
, ptr
, count
);
7338 for(; count
>0; count
--)
7339 ostreambuf_iterator_char_put(&dest
, *ptr
++);
7345 /* ?_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 */
7346 /* ?_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 */
7347 ostreambuf_iterator_char
* __cdecl
num_put_char__Putgrouped(const num_put
*this, ostreambuf_iterator_char
*ret
,
7348 ostreambuf_iterator_char dest
, const char *ptr
, size_t count
, char delim
)
7350 FIXME("(%p %p %p %Iu %d) stub\n", this, ret
, ptr
, count
, delim
);
7354 /* ?_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 */
7355 /* ?_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 */
7356 ostreambuf_iterator_char
* __cdecl
num_put_char__Rep(const num_put
*this, ostreambuf_iterator_char
*ret
,
7357 ostreambuf_iterator_char dest
, char c
, size_t count
)
7359 TRACE("(%p %p %d %Iu)\n", this, ret
, c
, count
);
7361 for(; count
>0; count
--)
7362 ostreambuf_iterator_char_put(&dest
, c
);
7368 /* ?_Ffmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAPADPADDH@Z */
7369 /* ?_Ffmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAPEADPEADDH@Z */
7370 char* __cdecl
num_put_char__Ffmt(const num_put
*this, char *fmt
, char spec
, int fmtfl
)
7372 int type
= fmtfl
& FMTFLAG_floatfield
;
7375 TRACE("(%p %p %d %d)\n", this, fmt
, spec
, fmtfl
);
7378 if(fmtfl
& FMTFLAG_showpos
)
7380 if(fmtfl
& FMTFLAG_showpoint
)
7387 if(type
== FMTFLAG_fixed
)
7389 else if(type
== FMTFLAG_scientific
)
7390 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'E' : 'e';
7391 else if(type
== (FMTFLAG_fixed
|FMTFLAG_scientific
))
7392 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'A' : 'a';
7394 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'G' : 'g';
7400 /* ?_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 */
7401 /* ?_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 */
7402 ostreambuf_iterator_char
* __cdecl
num_put_char__Fput(const num_put
*this, ostreambuf_iterator_char
*ret
,
7403 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const char *buf
, size_t bef_point
,
7404 size_t aft_point
, size_t trailing
, size_t count
)
7406 FIXME("(%p %p %p %d %p %Iu %Iu %Iu %Iu) stub\n", this, ret
, base
,
7407 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
7411 /* TODO: This function should be removed when num_put_char__Fput is implemented */
7412 static ostreambuf_iterator_char
* num_put_char_fput(const num_put
*this, ostreambuf_iterator_char
*ret
,
7413 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, char *buf
, size_t count
)
7415 numpunct_char
*numpunct
= numpunct_char_use_facet(IOS_LOCALE(base
));
7416 basic_string_char grouping_bstr
;
7417 const char *grouping
;
7418 char *p
, sep
= 0, dec_point
= *localeconv()->decimal_point
;
7419 int cur_group
= 0, group_size
= 0;
7420 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
7423 TRACE("(%p %p %p %d %s %Iu)\n", this, ret
, base
, fill
, buf
, count
);
7425 /* Change decimal point */
7426 for(p
=buf
; p
<buf
+count
; p
++) {
7427 if(*p
== dec_point
) {
7428 *p
= numpunct_char_decimal_point(numpunct
);
7434 /* Add separators to number */
7435 numpunct_char_grouping(numpunct
, &grouping_bstr
);
7436 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
7437 #if _MSVCP_VER >= 70
7438 if (grouping
[0]) sep
= numpunct_char_thousands_sep(numpunct
);
7441 for(; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
7443 if(group_size
== grouping
[cur_group
]) {
7445 if(grouping
[cur_group
+1])
7448 memmove(p
+1, p
, buf
+count
-p
);
7453 MSVCP_basic_string_char_dtor(&grouping_bstr
);
7455 /* Display number with padding */
7456 if(count
>= base
->wide
)
7459 pad
= base
->wide
-count
;
7462 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
7463 num_put_char__Putc(this, &dest
, dest
, buf
, 1);
7466 if(adjustfield
!= FMTFLAG_left
) {
7467 num_put_char__Rep(this, ret
, dest
, fill
, pad
);
7470 num_put_char__Putc(this, &dest
, dest
, buf
, count
);
7471 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
7474 /* ?_Ifmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAPADPADPBDH@Z */
7475 /* ?_Ifmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
7476 char* __cdecl
num_put_char__Ifmt(const num_put
*this, char *fmt
, const char *spec
, int fmtfl
)
7478 int base
= fmtfl
& FMTFLAG_basefield
;
7481 TRACE("(%p %p %p %d)\n", this, fmt
, spec
, fmtfl
);
7484 if(fmtfl
& FMTFLAG_showpos
)
7486 if(fmtfl
& FMTFLAG_showbase
)
7493 if(base
== FMTFLAG_oct
)
7495 else if(base
== FMTFLAG_hex
)
7496 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'X' : 'x';
7504 /* ?_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 */
7505 /* ?_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 */
7506 ostreambuf_iterator_char
* __cdecl
num_put_char__Iput(const num_put
*this, ostreambuf_iterator_char
*ret
,
7507 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, char *buf
, size_t count
)
7509 numpunct_char
*numpunct
= numpunct_char_use_facet(IOS_LOCALE(base
));
7510 basic_string_char grouping_bstr
;
7511 const char *grouping
;
7513 int cur_group
= 0, group_size
= 0;
7514 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
7517 TRACE("(%p %p %p %d %s %Iu)\n", this, ret
, base
, fill
, buf
, count
);
7519 /* Add separators to number */
7520 numpunct_char_grouping(numpunct
, &grouping_bstr
);
7521 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
7522 #if _MSVCP_VER >= 70
7523 if (grouping
[0]) sep
= numpunct_char_thousands_sep(numpunct
);
7526 for(p
=buf
+count
-1; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
7528 if(group_size
== grouping
[cur_group
]) {
7530 if(grouping
[cur_group
+1])
7533 memmove(p
+1, p
, buf
+count
-p
);
7538 MSVCP_basic_string_char_dtor(&grouping_bstr
);
7540 /* Display number with padding */
7541 if(count
>= base
->wide
)
7544 pad
= base
->wide
-count
;
7547 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
7548 num_put_char__Putc(this, &dest
, dest
, buf
, 1);
7550 }else if((adjustfield
& FMTFLAG_internal
) && (buf
[1]=='x' || buf
[1]=='X')) {
7551 num_put_char__Putc(this, &dest
, dest
, buf
, 2);
7554 if(adjustfield
!= FMTFLAG_left
) {
7555 num_put_char__Rep(this, ret
, dest
, fill
, pad
);
7558 num_put_char__Putc(this, &dest
, dest
, buf
, count
);
7559 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
7562 /* ?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 */
7563 /* ?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 */
7564 #if _MSVCP_VER <= 100
7565 #define call_num_put_char_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_char*, \
7566 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, LONG), \
7567 (this, ret, dest, base, fill, v))
7569 #define call_num_put_char_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 36, ostreambuf_iterator_char*, \
7570 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, LONG), \
7571 (this, ret, dest, base, fill, v))
7573 #if _MSVCP_VER != 80
7574 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_long
, 28)
7576 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_long
, 32)
7578 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_long(const num_put
*this, ostreambuf_iterator_char
*ret
,
7579 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, LONG v
)
7581 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
7582 char fmt
[7]; /* strlen("%+#lld")+1 */
7584 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7586 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
7587 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
7590 /* ?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 */
7591 /* ?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 */
7592 #if _MSVCP_VER != 80
7593 DEFINE_THISCALL_WRAPPER(num_put_char_put_long
, 28)
7595 DEFINE_THISCALL_WRAPPER(num_put_char_put_long
, 32)
7597 ostreambuf_iterator_char
* __thiscall
num_put_char_put_long(const num_put
*this, ostreambuf_iterator_char
*ret
,
7598 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, LONG v
)
7600 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7601 return call_num_put_char_do_put_long(this, ret
, dest
, base
, fill
, v
);
7604 /* ?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 */
7605 /* ?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 */
7606 #if _MSVCP_VER <= 100
7607 #define call_num_put_char_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_char*, \
7608 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, ULONG), \
7609 (this, ret, dest, base, fill, v))
7611 #define call_num_put_char_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_char*, \
7612 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, ULONG), \
7613 (this, ret, dest, base, fill, v))
7615 #if _MSVCP_VER != 80
7616 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ulong
, 28)
7618 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ulong
, 32)
7620 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_ulong(const num_put
*this, ostreambuf_iterator_char
*ret
,
7621 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, ULONG v
)
7623 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
7624 char fmt
[7]; /* strlen("%+#lld")+1 */
7626 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7628 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
7629 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
7632 /* ?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 */
7633 /* ?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 */
7634 #if _MSVCP_VER != 80
7635 DEFINE_THISCALL_WRAPPER(num_put_char_put_ulong
, 28)
7637 DEFINE_THISCALL_WRAPPER(num_put_char_put_ulong
, 32)
7639 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ulong(const num_put
*this, ostreambuf_iterator_char
*ret
,
7640 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, ULONG v
)
7642 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7643 return call_num_put_char_do_put_ulong(this, ret
, dest
, base
, fill
, v
);
7646 static inline unsigned get_precision(const ios_base
*base
)
7648 streamsize ret
= base
->prec
<= 0 && !(base
->fmtfl
& FMTFLAG_fixed
) ? 6 : base
->prec
;
7654 /* ?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 */
7655 /* ?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 */
7656 /* ?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 */
7657 /* ?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 */
7658 #if _MSVCP_VER <= 100
7659 #define call_num_put_char_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_char*, \
7660 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
7661 (this, ret, dest, base, fill, v))
7662 #define call_num_put_char_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 8, ostreambuf_iterator_char*, \
7663 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
7664 (this, ret, dest, base, fill, v))
7666 #define call_num_put_char_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_char*, \
7667 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
7668 (this, ret, dest, base, fill, v))
7669 #define call_num_put_char_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_char*, \
7670 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
7671 (this, ret, dest, base, fill, v))
7673 #if _MSVCP_VER != 80
7674 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_double
, 32)
7676 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_double
, 36)
7678 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_double(const num_put
*this, ostreambuf_iterator_char
*ret
,
7679 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
7682 char fmt
[8]; /* strlen("%+#.*lg")+1 */
7686 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7688 num_put_char__Ffmt(this, fmt
, '\0', base
->fmtfl
);
7689 prec
= get_precision(base
);
7690 size
= _scprintf(fmt
, prec
, v
);
7692 /* TODO: don't use dynamic allocation */
7693 tmp
= MSVCRT_operator_new(size
*2);
7695 ERR("Out of memory\n");
7696 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7698 num_put_char_fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, prec
, v
));
7699 MSVCRT_operator_delete(tmp
);
7703 /* ?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 */
7704 /* ?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 */
7705 #if _MSVCP_VER != 80
7706 DEFINE_THISCALL_WRAPPER(num_put_char_put_double
, 32)
7708 DEFINE_THISCALL_WRAPPER(num_put_char_put_double
, 36)
7710 ostreambuf_iterator_char
* __thiscall
num_put_char_put_double(const num_put
*this, ostreambuf_iterator_char
*ret
,
7711 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
7713 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7714 return call_num_put_char_do_put_double(this, ret
, dest
, base
, fill
, v
);
7717 /* ?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 */
7718 /* ?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 */
7719 #if _MSVCP_VER != 80
7720 DEFINE_THISCALL_WRAPPER(num_put_char_put_ldouble
, 32)
7722 DEFINE_THISCALL_WRAPPER(num_put_char_put_ldouble
, 36)
7724 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ldouble(const num_put
*this, ostreambuf_iterator_char
*ret
,
7725 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
7727 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7728 return call_num_put_char_do_put_ldouble(this, ret
, dest
, base
, fill
, v
);
7731 /* ?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 */
7732 /* ?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 */
7733 #if _MSVCP_VER <= 100
7734 #define call_num_put_char_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_char*, \
7735 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const void*), \
7736 (this, ret, dest, base, fill, v))
7738 #define call_num_put_char_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_char*, \
7739 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const void*), \
7740 (this, ret, dest, base, fill, v))
7742 #if _MSVCP_VER != 80
7743 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ptr
, 28)
7745 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ptr
, 32)
7747 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_ptr(const num_put
*this, ostreambuf_iterator_char
*ret
,
7748 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const void *v
)
7750 char tmp
[17]; /* 8(16^8==2^64)*2(separators between every digit) + 1 */
7752 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
7754 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
7757 /* ?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 */
7758 /* ?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 */
7759 #if _MSVCP_VER != 80
7760 DEFINE_THISCALL_WRAPPER(num_put_char_put_ptr
, 28)
7762 DEFINE_THISCALL_WRAPPER(num_put_char_put_ptr
, 32)
7764 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ptr(const num_put
*this, ostreambuf_iterator_char
*ret
,
7765 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const void *v
)
7767 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
7768 return call_num_put_char_do_put_ptr(this, ret
, dest
, base
, fill
, v
);
7771 /* ?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 */
7772 /* ?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 */
7773 #if _MSVCP_VER <= 100
7774 #define call_num_put_char_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_char*, \
7775 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, __int64), \
7776 (this, ret, dest, base, fill, v))
7778 #define call_num_put_char_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_char*, \
7779 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, __int64), \
7780 (this, ret, dest, base, fill, v))
7782 #if _MSVCP_VER != 80
7783 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_int64
, 32)
7785 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_int64
, 36)
7787 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_int64(const num_put
*this, ostreambuf_iterator_char
*ret
,
7788 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, __int64 v
)
7790 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
7791 char fmt
[7]; /* strlen("%+#lld")+1 */
7793 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7795 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
7796 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
7799 /* ?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 */
7800 /* ?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 */
7801 #if _MSVCP_VER != 80
7802 DEFINE_THISCALL_WRAPPER(num_put_char_put_int64
, 32)
7804 DEFINE_THISCALL_WRAPPER(num_put_char_put_int64
, 36)
7806 ostreambuf_iterator_char
* __thiscall
num_put_char_put_int64(const num_put
*this, ostreambuf_iterator_char
*ret
,
7807 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, __int64 v
)
7809 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7810 return call_num_put_char_do_put_int64(this, ret
, dest
, base
, fill
, v
);
7813 /* ?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 */
7814 /* ?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 */
7815 #if _MSVCP_VER <= 100
7816 #define call_num_put_char_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_char*, \
7817 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, unsigned __int64), \
7818 (this, ret, dest, base, fill, v))
7820 #define call_num_put_char_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_char*, \
7821 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, unsigned __int64), \
7822 (this, ret, dest, base, fill, v))
7824 #if _MSVCP_VER != 80
7825 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_uint64
, 32)
7827 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_uint64
, 36)
7829 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_uint64(const num_put
*this, ostreambuf_iterator_char
*ret
,
7830 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, unsigned __int64 v
)
7832 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
7833 char fmt
[7]; /* strlen("%+#lld")+1 */
7835 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7837 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
7838 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
7841 /* ?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 */
7842 /* ?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 */
7843 #if _MSVCP_VER != 80
7844 DEFINE_THISCALL_WRAPPER(num_put_char_put_uint64
, 32)
7846 DEFINE_THISCALL_WRAPPER(num_put_char_put_uint64
, 36)
7848 ostreambuf_iterator_char
* __thiscall
num_put_char_put_uint64(const num_put
*this, ostreambuf_iterator_char
*ret
,
7849 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, unsigned __int64 v
)
7851 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7852 return call_num_put_char_do_put_uint64(this, ret
, dest
, base
, fill
, v
);
7855 /* ?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 */
7856 /* ?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 */
7857 #if _MSVCP_VER <= 100
7858 #define call_num_put_char_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_char*, \
7859 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, bool), \
7860 (this, ret, dest, base, fill, v))
7862 #define call_num_put_char_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 40, ostreambuf_iterator_char*, \
7863 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, bool), \
7864 (this, ret, dest, base, fill, v))
7866 #if _MSVCP_VER != 80
7867 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_bool
, 28)
7869 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_bool
, 32)
7871 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_bool(const num_put
*this, ostreambuf_iterator_char
*ret
,
7872 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, bool v
)
7874 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7876 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
7877 numpunct_char
*numpunct
= numpunct_char_use_facet(IOS_LOCALE(base
));
7878 basic_string_char str
;
7882 numpunct_char_truename(numpunct
, &str
);
7884 numpunct_char_falsename(numpunct
, &str
);
7886 len
= MSVCP_basic_string_char_length(&str
);
7887 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
7890 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
7891 num_put_char__Rep(this, &dest
, dest
, fill
, pad
);
7894 num_put_char__Putc(this, &dest
, dest
, MSVCP_basic_string_char_c_str(&str
), len
);
7895 MSVCP_basic_string_char_dtor(&str
);
7896 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
7899 return num_put_char_put_long(this, ret
, dest
, base
, fill
, v
);
7902 /* ?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 */
7903 /* ?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 */
7904 #if _MSVCP_VER != 80
7905 DEFINE_THISCALL_WRAPPER(num_put_char_put_bool
, 28)
7907 DEFINE_THISCALL_WRAPPER(num_put_char_put_bool
, 32)
7909 ostreambuf_iterator_char
* __thiscall
num_put_char_put_bool(const num_put
*this, ostreambuf_iterator_char
*ret
,
7910 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, bool v
)
7912 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7913 return call_num_put_char_do_put_bool(this, ret
, dest
, base
, fill
, v
);
7916 /* ?id@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
7917 locale_id num_put_wchar_id
= {0};
7918 /* ?id@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
7919 locale_id num_put_short_id
= {0};
7921 /* num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
7922 extern const vtable_ptr num_put_wchar_vtable
;
7923 /* num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
7924 extern const vtable_ptr num_put_short_vtable
;
7926 /* ?_Init@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
7927 /* ?_Init@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
7928 DEFINE_THISCALL_WRAPPER(num_put_wchar__Init
, 8)
7929 void __thiscall
num_put_wchar__Init(num_put
*this, const _Locinfo
*locinfo
)
7931 TRACE("(%p %p)\n", this, locinfo
);
7932 #if _MSVCP_VER < 110
7933 _Locinfo__Getcvt(locinfo
, &this->cvt
);
7937 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
7938 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
7939 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor_locinfo
, 12)
7940 num_put
* __thiscall
num_put_wchar_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, size_t refs
)
7942 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
7944 locale_facet_ctor_refs(&this->facet
, refs
);
7945 this->facet
.vtable
= &num_put_wchar_vtable
;
7947 num_put_wchar__Init(this, locinfo
);
7951 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
7952 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
7953 DEFINE_THISCALL_WRAPPER(num_put_short_ctor_locinfo
, 12)
7954 num_put
* __thiscall
num_put_short_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, size_t refs
)
7956 num_put_wchar_ctor_locinfo(this, locinfo
, refs
);
7957 this->facet
.vtable
= &num_put_short_vtable
;
7961 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
7962 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
7963 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor_refs
, 8)
7964 num_put
* __thiscall
num_put_wchar_ctor_refs(num_put
*this, size_t refs
)
7968 TRACE("(%p %Iu)\n", this, refs
);
7970 _Locinfo_ctor(&locinfo
);
7971 num_put_wchar_ctor_locinfo(this, &locinfo
, refs
);
7972 _Locinfo_dtor(&locinfo
);
7976 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
7977 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
7978 DEFINE_THISCALL_WRAPPER(num_put_short_ctor_refs
, 8)
7979 num_put
* __thiscall
num_put_short_ctor_refs(num_put
*this, size_t refs
)
7981 num_put_wchar_ctor_refs(this, refs
);
7982 this->facet
.vtable
= &num_put_short_vtable
;
7986 /* ??_F?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
7987 /* ??_F?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
7988 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor
, 4)
7989 num_put
* __thiscall
num_put_wchar_ctor(num_put
*this)
7991 return num_put_wchar_ctor_refs(this, 0);
7994 /* ??_F?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ */
7995 /* ??_F?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ */
7996 DEFINE_THISCALL_WRAPPER(num_put_short_ctor
, 4)
7997 num_put
* __thiscall
num_put_short_ctor(num_put
*this)
7999 return num_put_short_ctor_refs(this, 0);
8002 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@UAE@XZ */
8003 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@UEAA@XZ */
8004 /* ??1?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
8005 /* ??1?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
8006 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
8007 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
8008 DEFINE_THISCALL_WRAPPER(num_put_wchar_dtor
, 4)
8009 void __thiscall
num_put_wchar_dtor(num_put
*this)
8011 TRACE("(%p)\n", this);
8012 locale_facet_dtor(&this->facet
);
8015 DEFINE_THISCALL_WRAPPER(num_put_wchar_vector_dtor
, 8)
8016 num_put
* __thiscall
num_put_wchar_vector_dtor(num_put
*this, unsigned int flags
)
8018 TRACE("(%p %x)\n", this, flags
);
8020 /* we have an array, with the number of elements stored before the first object */
8021 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
8023 for(i
=*ptr
-1; i
>=0; i
--)
8024 num_put_wchar_dtor(this+i
);
8025 MSVCRT_operator_delete(ptr
);
8027 num_put_wchar_dtor(this);
8029 MSVCRT_operator_delete(this);
8035 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
8036 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
8037 size_t __cdecl
num_put_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
8039 TRACE("(%p %p)\n", facet
, loc
);
8041 if(facet
&& !*facet
) {
8044 *facet
= MSVCRT_operator_new(sizeof(num_put
));
8046 ERR("Out of memory\n");
8047 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8051 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
8052 num_put_wchar_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
8053 _Locinfo_dtor(&locinfo
);
8059 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
8060 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
8061 size_t __cdecl
num_put_wchar__Getcat_old(const locale_facet
**facet
)
8063 return num_put_wchar__Getcat(facet
, locale_classic());
8066 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
8067 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
8068 size_t __cdecl
num_put_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
8070 TRACE("(%p %p)\n", facet
, loc
);
8072 if(facet
&& !*facet
) {
8075 *facet
= MSVCRT_operator_new(sizeof(num_put
));
8077 ERR("Out of memory\n");
8078 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8082 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
8083 num_put_short_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
8084 _Locinfo_dtor(&locinfo
);
8090 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
8091 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
8092 size_t __cdecl
num_put_short__Getcat_old(const locale_facet
**facet
)
8094 return num_put_short__Getcat(facet
, locale_classic());
8097 num_put
* num_put_wchar_use_facet(const locale
*loc
)
8099 static num_put
*obj
= NULL
;
8102 const locale_facet
*fac
;
8104 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
8105 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_wchar_id
));
8107 _Lockit_dtor(&lock
);
8108 return (num_put
*)fac
;
8112 _Lockit_dtor(&lock
);
8116 num_put_wchar__Getcat(&fac
, loc
);
8117 obj
= (num_put
*)fac
;
8118 call_locale_facet__Incref(&obj
->facet
);
8119 locale_facet_register(&obj
->facet
);
8120 _Lockit_dtor(&lock
);
8125 num_put
* num_put_short_use_facet(const locale
*loc
)
8127 static num_put
*obj
= NULL
;
8130 const locale_facet
*fac
;
8132 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
8133 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_short_id
));
8135 _Lockit_dtor(&lock
);
8136 return (num_put
*)fac
;
8140 _Lockit_dtor(&lock
);
8144 num_put_short__Getcat(&fac
, loc
);
8145 obj
= (num_put
*)fac
;
8146 call_locale_facet__Incref(&obj
->facet
);
8147 locale_facet_register(&obj
->facet
);
8148 _Lockit_dtor(&lock
);
8153 /* ?_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 */
8154 /* ?_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 */
8155 /* ?_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 */
8156 /* ?_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 */
8157 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Put(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8158 ostreambuf_iterator_wchar dest
, const wchar_t *ptr
, size_t count
)
8160 TRACE("(%p %p %s %Iu)\n", this, ret
, debugstr_wn(ptr
, count
), count
);
8162 for(; count
>0; count
--)
8163 ostreambuf_iterator_wchar_put(&dest
, *ptr
++);
8169 #if _MSVCP_VER < 110
8170 /* ?_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 */
8171 /* ?_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 */
8172 /* ?_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 */
8173 /* ?_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 */
8174 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Putc(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8175 ostreambuf_iterator_wchar dest
, const char *ptr
, size_t count
)
8180 TRACE("(%p %p %s %Iu)\n", this, ret
, debugstr_an(ptr
, count
), count
);
8182 memset(&state
, 0, sizeof(state
));
8183 for(; count
>0; count
--) {
8184 if(_Mbrtowc(&ch
, ptr
++, 1, &state
, &this->cvt
) == 1)
8185 ostreambuf_iterator_wchar_put(&dest
, ch
);
8193 /* ?_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 */
8194 /* ?_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 */
8195 /* ?_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 */
8196 /* ?_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 */
8197 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Putgrouped(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8198 ostreambuf_iterator_wchar dest
, const char *ptr
, size_t count
, wchar_t delim
)
8200 FIXME("(%p %p %p %Iu %d) stub\n", this, ret
, ptr
, count
, delim
);
8204 /* ?_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 */
8205 /* ?_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 */
8206 /* ?_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 */
8207 /* ?_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 */
8208 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Rep(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8209 ostreambuf_iterator_wchar dest
, wchar_t c
, size_t count
)
8211 TRACE("(%p %p %d %Iu)\n", this, ret
, c
, count
);
8213 for(; count
>0; count
--)
8214 ostreambuf_iterator_wchar_put(&dest
, c
);
8220 /* ?_Ffmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAPADPADDH@Z */
8221 /* ?_Ffmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAPEADPEADDH@Z */
8222 /* ?_Ffmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAPADPADDH@Z */
8223 /* ?_Ffmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAPEADPEADDH@Z */
8224 char* __cdecl
num_put_wchar__Ffmt(const num_put
*this, char *fmt
, char spec
, int fmtfl
)
8226 int type
= fmtfl
& FMTFLAG_floatfield
;
8229 TRACE("(%p %p %d %d)\n", this, fmt
, spec
, fmtfl
);
8232 if(fmtfl
& FMTFLAG_showpos
)
8234 if(fmtfl
& FMTFLAG_showbase
)
8241 if(type
== FMTFLAG_fixed
)
8243 else if(type
== FMTFLAG_scientific
)
8244 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'E' : 'e';
8245 else if(type
== (FMTFLAG_fixed
|FMTFLAG_scientific
))
8246 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'A' : 'a';
8248 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'G' : 'g';
8254 /* ?_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 */
8255 /* ?_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 */
8256 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8257 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const char *buf
, size_t bef_point
,
8258 size_t aft_point
, size_t trailing
, size_t count
)
8260 FIXME("(%p %p %p %d %p %Iu %Iu %Iu %Iu) stub\n", this, ret
, base
,
8261 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
8265 /* ?_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 */
8266 /* ?_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 */
8267 ostreambuf_iterator_wchar
* __cdecl
num_put_short__Fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8268 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const char *buf
, size_t bef_point
,
8269 size_t aft_point
, size_t trailing
, size_t count
)
8271 FIXME("(%p %p %p %d %p %Iu %Iu %Iu %Iu) stub\n", this, ret
, base
,
8272 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
8276 #if _MSVCP_VER < 110
8277 static void num_put_wchar_wide_put(const num_put
*this,
8278 ostreambuf_iterator_wchar
*dest
, ios_base
*base
,
8279 const char *buf
, size_t count
)
8281 num_put_wchar__Putc(this, dest
, *dest
, buf
, count
);
8284 static void num_put_wchar_wide_put(const num_put
*this,
8285 ostreambuf_iterator_wchar
*dest
, ios_base
*base
,
8286 const char *buf
, size_t count
)
8291 ctype
= ctype_wchar_use_facet(IOS_LOCALE(base
));
8292 for(i
=0; i
<count
; i
++)
8293 ostreambuf_iterator_wchar_put(dest
, ctype_wchar_widen_ch(ctype
, buf
[i
]));
8297 /* TODO: This function should be removed when num_put_wchar__Fput is implemented */
8298 static ostreambuf_iterator_wchar
* num_put__fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8299 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
,
8300 size_t count
, numpunct_wchar
*numpunct
)
8302 basic_string_char grouping_bstr
;
8303 const char *grouping
;
8304 char *p
, dec_point
= *localeconv()->decimal_point
;
8306 int cur_group
= 0, group_size
= 0;
8307 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
8310 TRACE("(%p %p %p %d %s %Iu)\n", this, ret
, base
, fill
, buf
, count
);
8312 for(p
=buf
; p
<buf
+count
; p
++) {
8318 /* Add separators to number */
8319 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
8320 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
8321 #if _MSVCP_VER >= 70
8322 if (grouping
[0]) sep
= numpunct_wchar_thousands_sep(numpunct
);
8325 for(; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
8327 if(group_size
== grouping
[cur_group
]) {
8329 if(grouping
[cur_group
+1])
8332 memmove(p
+1, p
, buf
+count
-p
);
8333 *p
= '\0'; /* mark thousands separator positions */
8337 MSVCP_basic_string_char_dtor(&grouping_bstr
);
8339 /* Display number with padding */
8340 if(count
>= base
->wide
)
8343 pad
= base
->wide
-count
;
8346 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
8347 num_put_wchar_wide_put(this, &dest
, base
, buf
, 1);
8350 if(adjustfield
!= FMTFLAG_left
) {
8351 num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8355 for(i
=0; i
<count
; i
++) {
8356 if(buf
[i
] == dec_point
)
8357 num_put_wchar__Rep(this, &dest
, dest
, numpunct_wchar_decimal_point(numpunct
), 1);
8359 num_put_wchar__Rep(this, &dest
, dest
, sep
, 1);
8361 num_put_wchar_wide_put(this, &dest
, base
, buf
+i
, 1);
8364 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8367 /* ?_Ifmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAPADPADPBDH@Z */
8368 /* ?_Ifmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
8369 /* ?_Ifmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAPADPADPBDH@Z */
8370 /* ?_Ifmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
8371 char* __cdecl
num_put_wchar__Ifmt(const num_put
*this, char *fmt
, const char *spec
, int fmtfl
)
8373 int base
= fmtfl
& FMTFLAG_basefield
;
8376 TRACE("(%p %p %p %d)\n", this, fmt
, spec
, fmtfl
);
8379 if(fmtfl
& FMTFLAG_showpos
)
8381 if(fmtfl
& FMTFLAG_showbase
)
8388 if(base
== FMTFLAG_oct
)
8390 else if(base
== FMTFLAG_hex
)
8391 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'X' : 'x';
8399 static ostreambuf_iterator_wchar
* num_put__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8400 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
,
8401 size_t count
, numpunct_wchar
*numpunct
)
8403 basic_string_char grouping_bstr
;
8404 const char *grouping
;
8407 int cur_group
= 0, group_size
= 0;
8408 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
8411 TRACE("(%p %p %p %d %s %Iu)\n", this, ret
, base
, fill
, buf
, count
);
8413 /* Add separators to number */
8414 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
8415 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
8416 sep
= grouping
[0] ? numpunct_wchar_thousands_sep(numpunct
) : '\0';
8418 for(p
=buf
+count
-1; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
8420 if(group_size
== grouping
[cur_group
]) {
8422 if(grouping
[cur_group
+1])
8425 memmove(p
+1, p
, buf
+count
-p
);
8426 *p
= '\0'; /* mark thousands separator positions */
8430 MSVCP_basic_string_char_dtor(&grouping_bstr
);
8432 /* Display number with padding */
8433 if(count
>= base
->wide
)
8436 pad
= base
->wide
-count
;
8439 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
8440 num_put_wchar_wide_put(this, &dest
, base
, buf
, 1);
8442 }else if((adjustfield
& FMTFLAG_internal
) && (buf
[1]=='x' || buf
[1]=='X')) {
8443 num_put_wchar_wide_put(this, &dest
, base
, buf
, 2);
8446 if(adjustfield
!= FMTFLAG_left
) {
8447 num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8451 for(i
=0; i
<count
; i
++) {
8453 num_put_wchar__Rep(this, &dest
, dest
, sep
, 1);
8455 num_put_wchar_wide_put(this, &dest
, base
, buf
+i
, 1);
8458 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8461 /* ?_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 */
8462 /* ?_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 */
8463 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8464 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
, size_t count
)
8466 return num_put__Iput(this, ret
, dest
, base
, fill
, buf
, count
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
8469 /* ?_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 */
8470 /* ?_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 */
8471 ostreambuf_iterator_wchar
* __cdecl
num_put_short__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8472 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
, size_t count
)
8474 return num_put__Iput(this, ret
, dest
, base
, fill
, buf
, count
, numpunct_short_use_facet(IOS_LOCALE(base
)));
8477 /* ?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 */
8478 /* ?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 */
8479 #if _MSVCP_VER <= 100
8480 #define call_num_put_wchar_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_wchar*, \
8481 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, LONG), \
8482 (this, ret, dest, base, fill, v))
8484 #define call_num_put_wchar_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 36, ostreambuf_iterator_wchar*, \
8485 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, LONG), \
8486 (this, ret, dest, base, fill, v))
8488 #if _MSVCP_VER != 80
8489 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_long
, 28)
8491 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_long
, 32)
8493 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8494 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
8496 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8497 char fmt
[7]; /* strlen("%+#lld")+1 */
8499 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8501 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
8502 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
8505 /* ?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 */
8506 /* ?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 */
8507 #if _MSVCP_VER != 80
8508 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_long
, 28)
8510 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_long
, 32)
8512 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8513 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
8515 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8516 char fmt
[7]; /* strlen("%+#lld")+1 */
8518 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8520 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
8521 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
8524 /* ?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 */
8525 /* ?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 */
8526 /* ?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 */
8527 /* ?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 */
8528 #if _MSVCP_VER != 80
8529 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_long
, 28)
8531 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_long
, 32)
8533 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8534 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
8536 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8537 return call_num_put_wchar_do_put_long(this, ret
, dest
, base
, fill
, v
);
8540 /* ?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 */
8541 /* ?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 */
8542 #if _MSVCP_VER <= 100
8543 #define call_num_put_wchar_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_wchar*, \
8544 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, ULONG), \
8545 (this, ret, dest, base, fill, v))
8547 #define call_num_put_wchar_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_wchar*, \
8548 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, ULONG), \
8549 (this, ret, dest, base, fill, v))
8551 #if _MSVCP_VER != 80
8552 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ulong
, 28)
8554 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ulong
, 32)
8556 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8557 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
8559 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8560 char fmt
[7]; /* strlen("%+#lld")+1 */
8562 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8564 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
8565 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
8568 /* ?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 */
8569 /* ?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 */
8570 #if _MSVCP_VER != 80
8571 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ulong
, 28)
8573 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ulong
, 32)
8575 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8576 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
8578 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8579 char fmt
[7]; /* strlen("%+#lld")+1 */
8581 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8583 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
8584 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
8587 /* ?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 */
8588 /* ?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 */
8589 /* ?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 */
8590 /* ?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 */
8591 #if _MSVCP_VER != 80
8592 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ulong
, 28)
8594 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ulong
, 32)
8596 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8597 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
8599 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8600 return call_num_put_wchar_do_put_ulong(this, ret
, dest
, base
, fill
, v
);
8603 /* ?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 */
8604 /* ?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 */
8605 /* ?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 */
8606 /* ?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 */
8607 #if _MSVCP_VER <= 100
8608 #define call_num_put_wchar_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_wchar*, \
8609 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
8610 (this, ret, dest, base, fill, v))
8611 #define call_num_put_wchar_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 8, ostreambuf_iterator_wchar*, \
8612 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
8613 (this, ret, dest, base, fill, v))
8615 #define call_num_put_wchar_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_wchar*, \
8616 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
8617 (this, ret, dest, base, fill, v))
8618 #define call_num_put_wchar_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_wchar*, \
8619 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
8620 (this, ret, dest, base, fill, v))
8622 #if _MSVCP_VER != 80
8623 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_double
, 32)
8625 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_double
, 36)
8627 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8628 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
8631 char fmt
[8]; /* strlen("%+#.*lg")+1 */
8635 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
8637 num_put_wchar__Ffmt(this, fmt
, '\0', base
->fmtfl
);
8638 prec
= get_precision(base
);
8639 size
= _scprintf(fmt
, prec
, v
);
8641 /* TODO: don't use dynamic allocation */
8642 tmp
= MSVCRT_operator_new(size
*2);
8644 ERR("Out of memory\n");
8645 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8647 num_put__fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, prec
, v
),
8648 numpunct_wchar_use_facet(IOS_LOCALE(base
)));
8649 MSVCRT_operator_delete(tmp
);
8653 /* ?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 */
8654 /* ?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 */
8655 /* ?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 */
8656 /* ?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 */
8657 #if _MSVCP_VER != 80
8658 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_double
, 32)
8660 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_double
, 36)
8662 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8663 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
8666 char fmt
[8]; /* strlen("%+#.*lg")+1 */
8670 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
8672 num_put_wchar__Ffmt(this, fmt
, '\0', base
->fmtfl
);
8673 prec
= get_precision(base
);
8674 size
= _scprintf(fmt
, prec
, v
);
8676 /* TODO: don't use dynamic allocation */
8677 tmp
= MSVCRT_operator_new(size
*2);
8679 ERR("Out of memory\n");
8680 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8682 num_put__fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, prec
, v
),
8683 numpunct_short_use_facet(IOS_LOCALE(base
)));
8684 MSVCRT_operator_delete(tmp
);
8688 /* ?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 */
8689 /* ?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 */
8690 /* ?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 */
8691 /* ?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 */
8692 #if _MSVCP_VER != 80
8693 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_double
, 32)
8695 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_double
, 36)
8697 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8698 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
8700 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
8701 return call_num_put_wchar_do_put_double(this, ret
, dest
, base
, fill
, v
);
8704 /* ?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 */
8705 /* ?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 */
8706 /* ?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 */
8707 /* ?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 */
8708 #if _MSVCP_VER != 80
8709 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ldouble
, 32)
8711 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ldouble
, 36)
8713 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ldouble(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8714 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
8716 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
8717 return call_num_put_wchar_do_put_ldouble(this, ret
, dest
, base
, fill
, v
);
8720 /* ?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 */
8721 /* ?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 */
8722 #if _MSVCP_VER <= 100
8723 #define call_num_put_wchar_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_wchar*, \
8724 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const void*), \
8725 (this, ret, dest, base, fill, v))
8727 #define call_num_put_wchar_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_wchar*, \
8728 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const void*), \
8729 (this, ret, dest, base, fill, v))
8731 #if _MSVCP_VER != 80
8732 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ptr
, 28)
8734 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ptr
, 32)
8736 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8737 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
8739 char tmp
[17]; /* 8(16^8==2^64)*2(separators between every digit) + 1 */
8741 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
8743 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
8746 /* ?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 */
8747 /* ?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 */
8748 #if _MSVCP_VER != 80
8749 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ptr
, 28)
8751 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ptr
, 32)
8753 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8754 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
8756 char tmp
[17]; /* 8(16^8==2^64)*2(separators between every digit) + 1 */
8758 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
8760 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
8763 /* ?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 */
8764 /* ?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 */
8765 /* ?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 */
8766 /* ?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 */
8767 #if _MSVCP_VER != 80
8768 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ptr
, 28)
8770 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ptr
, 32)
8772 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8773 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
8775 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
8776 return call_num_put_wchar_do_put_ptr(this, ret
, dest
, base
, fill
, v
);
8779 /* ?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 */
8780 /* ?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 */
8781 #if _MSVCP_VER <= 100
8782 #define call_num_put_wchar_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_wchar*, \
8783 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, __int64), \
8784 (this, ret, dest, base, fill, v))
8786 #define call_num_put_wchar_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_wchar*, \
8787 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, __int64), \
8788 (this, ret, dest, base, fill, v))
8790 #if _MSVCP_VER != 80
8791 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_int64
, 32)
8793 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_int64
, 36)
8795 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8796 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
8798 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8799 char fmt
[7]; /* strlen("%+#lld")+1 */
8801 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8803 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
8804 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
8807 /* ?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 */
8808 /* ?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 */
8809 #if _MSVCP_VER != 80
8810 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_int64
, 32)
8812 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_int64
, 36)
8814 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8815 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
8817 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8818 char fmt
[7]; /* strlen("%+#lld")+1 */
8820 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8822 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
8823 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
8826 /* ?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 */
8827 /* ?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 */
8828 /* ?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 */
8829 /* ?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 */
8830 #if _MSVCP_VER != 80
8831 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_int64
, 32)
8833 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_int64
, 36)
8835 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8836 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
8838 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8839 return call_num_put_wchar_do_put_int64(this, ret
, dest
, base
, fill
, v
);
8842 /* ?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 */
8843 /* ?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 */
8844 #if _MSVCP_VER <= 100
8845 #define call_num_put_wchar_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_wchar*, \
8846 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, unsigned __int64), \
8847 (this, ret, dest, base, fill, v))
8849 #define call_num_put_wchar_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_wchar*, \
8850 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, unsigned __int64), \
8851 (this, ret, dest, base, fill, v))
8853 #if _MSVCP_VER != 80
8854 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_uint64
, 32)
8856 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_uint64
, 36)
8858 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8859 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
8861 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8862 char fmt
[7]; /* strlen("%+#lld")+1 */
8864 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8866 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
8867 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
8870 /* ?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 */
8871 /* ?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 */
8872 #if _MSVCP_VER != 80
8873 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_uint64
, 32)
8875 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_uint64
, 36)
8877 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8878 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
8880 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8881 char fmt
[7]; /* strlen("%+#lld")+1 */
8883 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8885 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
8886 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
8889 /* ?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 */
8890 /* ?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 */
8891 /* ?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 */
8892 /* ?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 */
8893 #if _MSVCP_VER != 80
8894 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_uint64
, 32)
8896 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_uint64
, 36)
8898 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8899 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
8901 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8902 return call_num_put_wchar_do_put_uint64(this, ret
, dest
, base
, fill
, v
);
8905 /* ?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 */
8906 /* ?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 */
8907 #if _MSVCP_VER <= 100
8908 #define call_num_put_wchar_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_wchar*, \
8909 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, bool), \
8910 (this, ret, dest, base, fill, v))
8912 #define call_num_put_wchar_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 40, ostreambuf_iterator_wchar*, \
8913 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, bool), \
8914 (this, ret, dest, base, fill, v))
8916 #if _MSVCP_VER != 80
8917 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_bool
, 28)
8919 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_bool
, 32)
8921 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8922 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, bool v
)
8924 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8926 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
8927 numpunct_wchar
*numpunct
= numpunct_wchar_use_facet(IOS_LOCALE(base
));
8928 basic_string_wchar str
;
8932 numpunct_wchar_truename(numpunct
, &str
);
8934 numpunct_wchar_falsename(numpunct
, &str
);
8936 len
= MSVCP_basic_string_wchar_length(&str
);
8937 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
8940 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
8941 num_put_wchar__Rep(this, &dest
, dest
, fill
, pad
);
8944 num_put_wchar__Put(this, &dest
, dest
, MSVCP_basic_string_wchar_c_str(&str
), len
);
8945 MSVCP_basic_string_wchar_dtor(&str
);
8946 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8949 return num_put_wchar_put_long(this, ret
, dest
, base
, fill
, v
);
8952 /* ?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 */
8953 /* ?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 */
8954 #if _MSVCP_VER != 80
8955 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_bool
, 28)
8957 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_bool
, 32)
8959 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8960 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, bool v
)
8962 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8964 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
8965 numpunct_wchar
*numpunct
= numpunct_short_use_facet(IOS_LOCALE(base
));
8966 basic_string_wchar str
;
8970 numpunct_wchar_truename(numpunct
, &str
);
8972 numpunct_wchar_falsename(numpunct
, &str
);
8974 len
= MSVCP_basic_string_wchar_length(&str
);
8975 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
8978 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
8979 num_put_wchar__Rep(this, &dest
, dest
, fill
, pad
);
8982 num_put_wchar__Put(this, &dest
, dest
, MSVCP_basic_string_wchar_c_str(&str
), len
);
8983 MSVCP_basic_string_wchar_dtor(&str
);
8984 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8987 return num_put_wchar_put_long(this, ret
, dest
, base
, fill
, v
);
8990 /* ?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 */
8991 /* ?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 */
8992 /* ?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 */
8993 /* ?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 */
8994 #if _MSVCP_VER != 80
8995 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_bool
, 28)
8997 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_bool
, 32)
8999 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
9000 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, bool v
)
9002 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
9003 return call_num_put_wchar_do_put_bool(this, ret
, dest
, base
, fill
, v
);
9006 /* ?id@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
9007 locale_id time_put_char_id
= {0};
9009 /* ??_7?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
9010 extern const vtable_ptr time_put_char_vtable
;
9012 /* ?_Init@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
9013 /* ?_Init@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
9014 DEFINE_THISCALL_WRAPPER(time_put_char__Init
, 8)
9015 void __thiscall
time_put_char__Init(time_put
*this, const _Locinfo
*locinfo
)
9017 TRACE("(%p %p)\n", this, locinfo
);
9018 _Locinfo__Gettnames(locinfo
, &this->time
);
9019 #if _MSVCP_VER <= 100
9020 _Locinfo__Getcvt(locinfo
, &this->cvt
);
9024 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
9025 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
9026 DEFINE_THISCALL_WRAPPER(time_put_char_ctor_locinfo
, 12)
9027 time_put
* __thiscall
time_put_char_ctor_locinfo(time_put
*this, const _Locinfo
*locinfo
, size_t refs
)
9029 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
9030 locale_facet_ctor_refs(&this->facet
, refs
);
9031 this->facet
.vtable
= &time_put_char_vtable
;
9032 time_put_char__Init(this, locinfo
);
9036 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
9037 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
9038 DEFINE_THISCALL_WRAPPER(time_put_char_ctor_refs
, 8)
9039 time_put
* __thiscall
time_put_char_ctor_refs(time_put
*this, size_t refs
)
9043 TRACE("(%p %Iu)\n", this, refs
);
9045 _Locinfo_ctor(&locinfo
);
9046 time_put_char_ctor_locinfo(this, &locinfo
, refs
);
9047 _Locinfo_dtor(&locinfo
);
9051 /* ??_F?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
9052 /* ??_F?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
9053 DEFINE_THISCALL_WRAPPER(time_put_char_ctor
, 4)
9054 time_put
* __thiscall
time_put_char_ctor(time_put
*this)
9056 return time_put_char_ctor_refs(this, 0);
9059 /* ??1?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
9060 /* ??1?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
9061 DEFINE_THISCALL_WRAPPER(time_put_char_dtor
, 4)
9062 void __thiscall
time_put_char_dtor(time_put
*this)
9064 TRACE("(%p)\n", this);
9065 _Timevec_dtor(&this->time
);
9068 DEFINE_THISCALL_WRAPPER(time_put_char_vector_dtor
, 8)
9069 time_put
* __thiscall
time_put_char_vector_dtor(time_put
*this, unsigned int flags
)
9071 TRACE("(%p %x)\n", this, flags
);
9073 /* we have an array, with the number of elements stored before the first object */
9074 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
9076 for(i
=*ptr
-1; i
>=0; i
--)
9077 time_put_char_dtor(this+i
);
9078 MSVCRT_operator_delete(ptr
);
9080 time_put_char_dtor(this);
9082 MSVCRT_operator_delete(this);
9088 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
9089 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
9090 size_t __cdecl
time_put_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
9092 TRACE("(%p %p)\n", facet
, loc
);
9094 if(facet
&& !*facet
) {
9097 *facet
= MSVCRT_operator_new(sizeof(time_put
));
9099 ERR("Out of memory\n");
9100 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
9104 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
9105 time_put_char_ctor_locinfo((time_put
*)*facet
, &locinfo
, 0);
9106 _Locinfo_dtor(&locinfo
);
9112 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
9113 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
9114 size_t __cdecl
time_put_char__Getcat_old(const locale_facet
**facet
)
9116 return time_put_char__Getcat(facet
, locale_classic());
9119 static time_put
* time_put_char_use_facet(const locale
*loc
)
9121 static time_put
*obj
= NULL
;
9124 const locale_facet
*fac
;
9126 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
9127 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_put_char_id
));
9129 _Lockit_dtor(&lock
);
9130 return (time_put
*)fac
;
9134 _Lockit_dtor(&lock
);
9138 time_put_char__Getcat(&fac
, loc
);
9139 obj
= (time_put
*)fac
;
9140 call_locale_facet__Incref(&obj
->facet
);
9141 locale_facet_register(&obj
->facet
);
9142 _Lockit_dtor(&lock
);
9147 #if _MSVCP_VER >= 70
9149 /* ?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 */
9150 /* ?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 */
9151 #if _MSVCP_VER != 80
9152 DEFINE_THISCALL_WRAPPER(time_put_char_do_put
, 36)
9154 DEFINE_THISCALL_WRAPPER(time_put_char_do_put
, 40)
9156 #if _MSVCP_VER <= 100
9157 #define call_time_put_char_do_put(this, ret, dest, base, fill, t, spec, mod) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_char*, \
9158 (const time_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const struct tm*, char, char), \
9159 (this, ret, dest, base, fill, t, spec, mod))
9161 #define call_time_put_char_do_put(this, ret, dest, base, fill, t, spec, mod) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_char*, \
9162 (const time_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const struct tm*, char, char), \
9163 (this, ret, dest, base, fill, t, spec, mod))
9165 ostreambuf_iterator_char
* __thiscall
time_put_char_do_put(const time_put
*this, ostreambuf_iterator_char
*ret
,
9166 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const struct tm
*t
, char spec
, char mod
)
9168 char buf
[64], fmt
[4], *p
= fmt
;
9171 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
9179 len
= _Strftime(buf
, sizeof(buf
), fmt
, t
, this->time
.timeptr
);
9180 for(i
=0; i
<len
; i
++)
9181 ostreambuf_iterator_char_put(&dest
, buf
[i
]);
9187 /* ?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 */
9188 /* ?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 */
9189 #if _MSVCP_VER != 80
9190 DEFINE_THISCALL_WRAPPER(time_put_char_put
, 36)
9192 DEFINE_THISCALL_WRAPPER(time_put_char_put
, 40)
9194 ostreambuf_iterator_char
* __thiscall
time_put_char_put(const time_put
*this, ostreambuf_iterator_char
*ret
,
9195 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const struct tm
*t
, char spec
, char mod
)
9197 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
9198 return call_time_put_char_do_put(this, ret
, dest
, base
, fill
, t
, spec
, mod
);
9201 /* ?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 */
9202 /* ?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 */
9203 #if _MSVCP_VER != 80
9204 DEFINE_THISCALL_WRAPPER(time_put_char_put_format
, 36)
9206 DEFINE_THISCALL_WRAPPER(time_put_char_put_format
, 40)
9208 ostreambuf_iterator_char
* __thiscall
time_put_char_put_format(const time_put
*this, ostreambuf_iterator_char
*ret
,
9209 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const struct tm
*t
, const char *pat
, const char *pat_end
)
9211 TRACE("(%p %p %p %c %p %s)\n", this, ret
, base
, fill
, t
, debugstr_an(pat
, pat_end
-pat
));
9213 while(pat
< pat_end
) {
9215 ostreambuf_iterator_char_put(&dest
, *pat
++);
9216 }else if(++pat
== pat_end
) {
9217 ostreambuf_iterator_char_put(&dest
, '%');
9218 }else if(*pat
=='#' && pat
+1==pat_end
) {
9219 ostreambuf_iterator_char_put(&dest
, '%');
9220 ostreambuf_iterator_char_put(&dest
, *pat
++);
9231 time_put_char_put(this, &dest
, dest
, base
, fill
, t
, *pat
++, mod
);
9239 #else /* _MSVCP_VER < 70 doesn't have the 'fill' parameter */
9241 /* ?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@PBUtm@@DD@Z */
9242 /* ?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@PEBUtm@@DD@Z */
9243 DEFINE_THISCALL_WRAPPER(time_put_char_do_put
, 32)
9244 #define call_time_put_char_do_put(this, ret, dest, base, t, spec, mod) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_char*, \
9245 (const time_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, const struct tm*, char, char), \
9246 (this, ret, dest, base, t, spec, mod))
9247 ostreambuf_iterator_char
* __thiscall
time_put_char_do_put(const time_put
*this, ostreambuf_iterator_char
*ret
,
9248 ostreambuf_iterator_char dest
, ios_base
*base
, const struct tm
*t
, char spec
, char mod
)
9250 char buf
[64], fmt
[4], *p
= fmt
;
9253 TRACE("(%p %p %p %p %c %c)\n", this, ret
, base
, t
, spec
, mod
);
9261 len
= _Strftime(buf
, sizeof(buf
), fmt
, t
, this->time
.timeptr
);
9262 for(i
=0; i
<len
; i
++)
9263 ostreambuf_iterator_char_put(&dest
, buf
[i
]);
9269 /* ?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@PBUtm@@DD@Z */
9270 /* ?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@PEBUtm@@DD@Z */
9271 DEFINE_THISCALL_WRAPPER(time_put_char_put
, 32)
9272 ostreambuf_iterator_char
* __thiscall
time_put_char_put(const time_put
*this, ostreambuf_iterator_char
*ret
,
9273 ostreambuf_iterator_char dest
, ios_base
*base
, const struct tm
*t
, char spec
, char mod
)
9275 TRACE("(%p %p %p %p %c %c)\n", this, ret
, base
, t
, spec
, mod
);
9276 return call_time_put_char_do_put(this, ret
, dest
, base
, t
, spec
, mod
);
9279 /* ?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@PBUtm@@PBD3@Z */
9280 /* ?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@PEBUtm@@PEBD3@Z */
9281 DEFINE_THISCALL_WRAPPER(time_put_char_put_format
, 32)
9282 ostreambuf_iterator_char
* __thiscall
time_put_char_put_format(const time_put
*this, ostreambuf_iterator_char
*ret
,
9283 ostreambuf_iterator_char dest
, ios_base
*base
, const struct tm
*t
, const char *pat
, const char *pat_end
)
9285 TRACE("(%p %p %p %p %s)\n", this, ret
, base
, t
, debugstr_an(pat
, pat_end
-pat
));
9287 while(pat
< pat_end
) {
9289 ostreambuf_iterator_char_put(&dest
, *pat
++);
9290 }else if(++pat
== pat_end
) {
9291 ostreambuf_iterator_char_put(&dest
, '%');
9292 }else if(*pat
=='#' && pat
+1==pat_end
) {
9293 ostreambuf_iterator_char_put(&dest
, '%');
9294 ostreambuf_iterator_char_put(&dest
, *pat
++);
9305 time_put_char_put(this, &dest
, dest
, base
, t
, *pat
++, mod
);
9313 #endif /* MSVCP_VER >= 70 */
9315 /* ?id@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
9316 locale_id time_put_wchar_id
= {0};
9317 /* ?id@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
9318 locale_id time_put_short_id
= {0};
9320 /* ??_7?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
9321 extern const vtable_ptr time_put_wchar_vtable
;
9322 /* ??_7?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
9323 extern const vtable_ptr time_put_short_vtable
;
9325 /* ?_Init@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
9326 /* ?_Init@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
9327 /* ?_Init@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
9328 /* ?_Init@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
9329 DEFINE_THISCALL_WRAPPER(time_put_wchar__Init
, 8)
9330 void __thiscall
time_put_wchar__Init(time_put
*this, const _Locinfo
*locinfo
)
9332 TRACE("(%p %p)\n", this, locinfo
);
9333 _Locinfo__Gettnames(locinfo
, &this->time
);
9334 #if _MSVCP_VER <= 100
9335 _Locinfo__Getcvt(locinfo
, &this->cvt
);
9339 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
9340 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
9341 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor_locinfo
, 12)
9342 time_put
* __thiscall
time_put_wchar_ctor_locinfo(time_put
*this, const _Locinfo
*locinfo
, size_t refs
)
9344 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
9345 locale_facet_ctor_refs(&this->facet
, refs
);
9346 this->facet
.vtable
= &time_put_wchar_vtable
;
9347 time_put_wchar__Init(this, locinfo
);
9351 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
9352 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
9353 DEFINE_THISCALL_WRAPPER(time_put_short_ctor_locinfo
, 12)
9354 time_put
* __thiscall
time_put_short_ctor_locinfo(time_put
*this, const _Locinfo
*locinfo
, size_t refs
)
9356 time_put_wchar_ctor_locinfo(this, locinfo
, refs
);
9357 this->facet
.vtable
= &time_put_short_vtable
;
9361 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAE@PBDI@Z */
9362 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAA@PEBD_K@Z */
9363 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor_name
, 12)
9364 time_put
* __thiscall
time_put_wchar_ctor_name(time_put
*this, const char *name
, size_t refs
)
9368 TRACE("(%p %s %Iu)\n", this, debugstr_a(name
), refs
);
9370 _Locinfo_ctor_cstr(&locinfo
, name
);
9371 time_put_wchar_ctor_locinfo(this, &locinfo
, refs
);
9372 _Locinfo_dtor(&locinfo
);
9376 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAE@PBDI@Z */
9377 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAA@PEBD_K@Z */
9378 DEFINE_THISCALL_WRAPPER(time_put_short_ctor_name
, 12)
9379 time_put
* __thiscall
time_put_short_ctor_name(time_put
*this, const char *name
, size_t refs
)
9381 time_put_wchar_ctor_name(this, name
, refs
);
9382 this->facet
.vtable
= &time_put_short_vtable
;
9386 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
9387 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
9388 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor_refs
, 8)
9389 time_put
* __thiscall
time_put_wchar_ctor_refs(time_put
*this, size_t refs
)
9393 TRACE("(%p %Iu)\n", this, refs
);
9395 _Locinfo_ctor(&locinfo
);
9396 time_put_wchar_ctor_locinfo(this, &locinfo
, refs
);
9397 _Locinfo_dtor(&locinfo
);
9401 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
9402 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
9403 DEFINE_THISCALL_WRAPPER(time_put_short_ctor_refs
, 8)
9404 time_put
* __thiscall
time_put_short_ctor_refs(time_put
*this, size_t refs
)
9406 time_put_wchar_ctor_refs(this, refs
);
9407 this->facet
.vtable
= &time_put_short_vtable
;
9411 /* ??_F?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
9412 /* ??_F?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
9413 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor
, 4)
9414 time_put
* __thiscall
time_put_wchar_ctor(time_put
*this)
9416 return time_put_wchar_ctor_refs(this, 0);
9419 /* ??_F?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ */
9420 /* ??_F?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ */
9421 DEFINE_THISCALL_WRAPPER(time_put_short_ctor
, 4)
9422 time_put
* __thiscall
time_put_short_ctor(time_put
*this)
9424 time_put_wchar_ctor(this);
9425 this->facet
.vtable
= &time_put_short_vtable
;
9429 /* ??1?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
9430 /* ??1?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
9431 /* ??1?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
9432 /* ??1?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
9433 DEFINE_THISCALL_WRAPPER(time_put_wchar_dtor
, 4)
9434 void __thiscall
time_put_wchar_dtor(time_put
*this)
9436 TRACE("(%p)\n", this);
9437 _Timevec_dtor(&this->time
);
9440 DEFINE_THISCALL_WRAPPER(time_put_wchar_vector_dtor
, 8)
9441 time_put
* __thiscall
time_put_wchar_vector_dtor(time_put
*this, unsigned int flags
)
9443 TRACE("(%p %x)\n", this, flags
);
9445 /* we have an array, with the number of elements stored before the first object */
9446 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
9448 for(i
=*ptr
-1; i
>=0; i
--)
9449 time_put_wchar_dtor(this+i
);
9450 MSVCRT_operator_delete(ptr
);
9452 time_put_wchar_dtor(this);
9454 MSVCRT_operator_delete(this);
9460 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
9461 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
9462 size_t __cdecl
time_put_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
9464 TRACE("(%p %p)\n", facet
, loc
);
9466 if(facet
&& !*facet
) {
9467 *facet
= MSVCRT_operator_new(sizeof(time_put
));
9469 ERR("Out of memory\n");
9470 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
9473 time_put_wchar_ctor_name((time_put
*)*facet
,
9474 locale_string_char_c_str(&loc
->ptr
->name
), 0);
9480 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
9481 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
9482 size_t __cdecl
time_put_wchar__Getcat_old(const locale_facet
**facet
)
9484 return time_put_wchar__Getcat(facet
, locale_classic());
9487 static time_put
* time_put_wchar_use_facet(const locale
*loc
)
9489 static time_put
*obj
= NULL
;
9492 const locale_facet
*fac
;
9494 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
9495 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_put_wchar_id
));
9497 _Lockit_dtor(&lock
);
9498 return (time_put
*)fac
;
9502 _Lockit_dtor(&lock
);
9506 time_put_wchar__Getcat(&fac
, loc
);
9507 obj
= (time_put
*)fac
;
9508 call_locale_facet__Incref(&obj
->facet
);
9509 locale_facet_register(&obj
->facet
);
9510 _Lockit_dtor(&lock
);
9515 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
9516 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
9517 size_t __cdecl
time_put_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
9519 TRACE("(%p %p)\n", facet
, loc
);
9521 if(facet
&& !*facet
) {
9522 *facet
= MSVCRT_operator_new(sizeof(time_put
));
9524 ERR("Out of memory\n");
9525 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
9528 time_put_short_ctor_name((time_put
*)*facet
,
9529 locale_string_char_c_str(&loc
->ptr
->name
), 0);
9535 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
9536 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
9537 size_t __cdecl
time_put_short__Getcat_old(const locale_facet
**facet
)
9539 return time_put_short__Getcat(facet
, locale_classic());
9542 static time_put
* time_put_short_use_facet(const locale
*loc
)
9544 static time_put
*obj
= NULL
;
9547 const locale_facet
*fac
;
9549 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
9550 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_put_short_id
));
9552 _Lockit_dtor(&lock
);
9553 return (time_put
*)fac
;
9557 _Lockit_dtor(&lock
);
9561 time_put_short__Getcat(&fac
, loc
);
9562 obj
= (time_put
*)fac
;
9563 call_locale_facet__Incref(&obj
->facet
);
9564 locale_facet_register(&obj
->facet
);
9565 _Lockit_dtor(&lock
);
9570 #if _MSVCP_VER >= 70
9572 /* ?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 */
9573 /* ?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 */
9574 /* ?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 */
9575 /* ?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 */
9576 #if _MSVCP_VER != 80
9577 DEFINE_THISCALL_WRAPPER(time_put_wchar_do_put
, 36)
9579 DEFINE_THISCALL_WRAPPER(time_put_wchar_do_put
, 40)
9581 #if _MSVCP_VER <= 100
9582 #define call_time_put_wchar_do_put(this, ret, dest, base, fill, t, spec, mod) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_wchar*, \
9583 (const time_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const struct tm*, char, char), \
9584 (this, ret, dest, base, fill, t, spec, mod))
9586 #define call_time_put_wchar_do_put(this, ret, dest, base, fill, t, spec, mod) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_wchar*, \
9587 (const time_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const struct tm*, char, char), \
9588 (this, ret, dest, base, fill, t, spec, mod))
9590 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_do_put(const time_put
*this,
9591 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9592 wchar_t fill
, const struct tm
*t
, char spec
, char mod
)
9594 char buf
[64], fmt
[4], *p
= fmt
;
9599 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
9607 #if _MSVCP_VER <= 100
9610 cvt
= &ctype_wchar_use_facet(base
->loc
)->cvt
;
9613 len
= _Strftime(buf
, sizeof(buf
), fmt
, t
, this->time
.timeptr
);
9614 for(i
=0; i
<len
; i
++) {
9615 c
= mb_to_wc(buf
[i
], cvt
);
9616 ostreambuf_iterator_wchar_put(&dest
, c
);
9623 /* ?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 */
9624 /* ?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 */
9625 /* ?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 */
9626 /* ?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 */
9627 #if _MSVCP_VER != 80
9628 DEFINE_THISCALL_WRAPPER(time_put_wchar_put
, 36)
9630 DEFINE_THISCALL_WRAPPER(time_put_wchar_put
, 40)
9632 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_put(const time_put
*this,
9633 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9634 wchar_t fill
, const struct tm
*t
, char spec
, char mod
)
9636 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
9637 return call_time_put_wchar_do_put(this, ret
, dest
, base
, fill
, t
, spec
, mod
);
9640 /* ?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 */
9641 /* ?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 */
9642 /* ?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 */
9643 /* ?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 */
9644 #if _MSVCP_VER != 80
9645 DEFINE_THISCALL_WRAPPER(time_put_wchar_put_format
, 36)
9647 DEFINE_THISCALL_WRAPPER(time_put_wchar_put_format
, 40)
9649 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_put_format(const time_put
*this,
9650 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9651 wchar_t fill
, const struct tm
*t
, const wchar_t *pat
, const wchar_t *pat_end
)
9657 TRACE("(%p %p %p %c %p %s)\n", this, ret
, base
, fill
, t
, debugstr_wn(pat
, pat_end
-pat
));
9659 #if _MSVCP_VER <= 100
9662 cvt
= &ctype_wchar_use_facet(base
->loc
)->cvt
;
9665 percent
= mb_to_wc('%', cvt
);
9666 while(pat
< pat_end
) {
9667 if(*pat
!= percent
) {
9668 ostreambuf_iterator_wchar_put(&dest
, *pat
++);
9669 }else if(++pat
== pat_end
) {
9670 ostreambuf_iterator_wchar_put(&dest
, percent
);
9671 }else if(_Wcrtomb(c
, *pat
, NULL
, cvt
)!=1 || (*c
=='#' && pat
+1==pat_end
)) {
9672 ostreambuf_iterator_wchar_put(&dest
, percent
);
9673 ostreambuf_iterator_wchar_put(&dest
, *pat
++);
9677 if(_Wcrtomb(c
, *pat
++, NULL
, cvt
) != 1) {
9678 ostreambuf_iterator_wchar_put(&dest
, percent
);
9679 ostreambuf_iterator_wchar_put(&dest
, *(pat
-2));
9680 ostreambuf_iterator_wchar_put(&dest
, *(pat
-1));
9682 time_put_wchar_put(this, &dest
, dest
, base
, fill
, t
, *c
, '#');
9685 time_put_wchar_put(this, &dest
, dest
, base
, fill
, t
, *c
, 0);
9694 #else /* _MSVCP_VER < 70 doesn't have the 'fill' parameter */
9696 /* ?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@PBUtm@@DD@Z */
9697 /* ?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@PEBUtm@@DD@Z */
9698 DEFINE_THISCALL_WRAPPER(time_put_wchar_do_put
, 32)
9699 #define call_time_put_wchar_do_put(this, ret, dest, base, t, spec, mod) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_wchar*, \
9700 (const time_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, const struct tm*, char, char), \
9701 (this, ret, dest, base, t, spec, mod))
9702 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_do_put(const time_put
*this,
9703 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9704 const struct tm
*t
, char spec
, char mod
)
9706 char buf
[64], fmt
[4], *p
= fmt
;
9710 TRACE("(%p %p %p %p %c %c)\n", this, ret
, base
, t
, spec
, mod
);
9718 len
= _Strftime(buf
, sizeof(buf
), fmt
, t
, this->time
.timeptr
);
9719 for(i
=0; i
<len
; i
++) {
9720 c
= mb_to_wc(buf
[i
], &this->cvt
);
9721 ostreambuf_iterator_wchar_put(&dest
, c
);
9728 /* ?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@PBUtm@@DD@Z */
9729 /* ?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@PEBUtm@@DD@Z */
9730 DEFINE_THISCALL_WRAPPER(time_put_wchar_put
, 32)
9731 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_put(const time_put
*this,
9732 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9733 const struct tm
*t
, char spec
, char mod
)
9735 TRACE("(%p %p %p %p %c %c)\n", this, ret
, base
, t
, spec
, mod
);
9736 return call_time_put_wchar_do_put(this, ret
, dest
, base
, t
, spec
, mod
);
9739 /* ?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@PBUtm@@PBG3@Z */
9740 /* ?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@PEBUtm@@PEBG3@Z */
9741 DEFINE_THISCALL_WRAPPER(time_put_wchar_put_format
, 32)
9742 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_put_format(const time_put
*this,
9743 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9744 const struct tm
*t
, const wchar_t *pat
, const wchar_t *pat_end
)
9746 wchar_t percent
= mb_to_wc('%', &this->cvt
);
9749 TRACE("(%p %p %p %p %s)\n", this, ret
, base
, t
, debugstr_wn(pat
, pat_end
-pat
));
9751 while(pat
< pat_end
) {
9752 if(*pat
!= percent
) {
9753 ostreambuf_iterator_wchar_put(&dest
, *pat
++);
9754 }else if(++pat
== pat_end
) {
9755 ostreambuf_iterator_wchar_put(&dest
, percent
);
9756 }else if(_Wcrtomb(c
, *pat
, NULL
, &this->cvt
)!=1 || (*c
=='#' && pat
+1==pat_end
)) {
9757 ostreambuf_iterator_wchar_put(&dest
, percent
);
9758 ostreambuf_iterator_wchar_put(&dest
, *pat
++);
9762 if(_Wcrtomb(c
, *pat
++, NULL
, &this->cvt
) != 1) {
9763 ostreambuf_iterator_wchar_put(&dest
, percent
);
9764 ostreambuf_iterator_wchar_put(&dest
, *(pat
-2));
9765 ostreambuf_iterator_wchar_put(&dest
, *(pat
-1));
9767 time_put_wchar_put(this, &dest
, dest
, base
, t
, *c
, '#');
9770 time_put_wchar_put(this, &dest
, dest
, base
, t
, *c
, 0);
9779 #endif /* _MSVCP_VER >= 70 */
9781 /* ?id@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
9782 locale_id time_get_char_id
= {0};
9784 /* ??_7?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
9785 extern const vtable_ptr time_get_char_vtable
;
9787 /* ?_Init@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
9788 /* ?_Init@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
9789 DEFINE_THISCALL_WRAPPER(time_get_char__Init
, 8)
9790 void __thiscall
time_get_char__Init(time_get_char
*this, const _Locinfo
*locinfo
)
9796 TRACE("(%p %p)\n", this, locinfo
);
9798 days
= _Locinfo__Getdays(locinfo
);
9799 len
= strlen(days
)+1;
9800 this->days
= MSVCRT_operator_new(len
);
9803 ERR("Out of memory\n");
9804 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
9806 memcpy((char*)this->days
, days
, len
);
9808 months
= _Locinfo__Getmonths(locinfo
);
9809 len
= strlen(months
)+1;
9810 this->months
= MSVCRT_operator_new(len
);
9813 MSVCRT_operator_delete((char*)this->days
);
9815 ERR("Out of memory\n");
9816 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
9818 memcpy((char*)this->months
, months
, len
);
9820 this->dateorder
= _Locinfo__Getdateorder(locinfo
);
9821 _Locinfo__Getcvt(locinfo
, &this->cvt
);
9824 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
9825 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
9826 DEFINE_THISCALL_WRAPPER(time_get_char_ctor_locinfo
, 12)
9827 time_get_char
* __thiscall
time_get_char_ctor_locinfo(time_get_char
*this,
9828 const _Locinfo
*locinfo
, size_t refs
)
9830 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
9831 locale_facet_ctor_refs(&this->facet
, refs
);
9832 this->facet
.vtable
= &time_get_char_vtable
;
9833 time_get_char__Init(this, locinfo
);
9837 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAE@PBDI@Z */
9838 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAA@PEBD_K@Z */
9839 DEFINE_THISCALL_WRAPPER(time_get_char_ctor_name
, 12)
9840 time_get_char
* __thiscall
time_get_char_ctor_name(time_get_char
*this, const char *name
, size_t refs
)
9844 TRACE("(%p %s %Iu)\n", this, name
, refs
);
9846 _Locinfo_ctor_cstr(&locinfo
, name
);
9847 time_get_char_ctor_locinfo(this, &locinfo
, refs
);
9848 _Locinfo_dtor(&locinfo
);
9852 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
9853 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
9854 DEFINE_THISCALL_WRAPPER(time_get_char_ctor_refs
, 8)
9855 time_get_char
* __thiscall
time_get_char_ctor_refs(time_get_char
*this, size_t refs
)
9859 TRACE("(%p %Iu)\n", this, refs
);
9861 _Locinfo_ctor(&locinfo
);
9862 time_get_char_ctor_locinfo(this, &locinfo
, refs
);
9863 _Locinfo_dtor(&locinfo
);
9867 /* ??_F?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
9868 /* ??_F?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
9869 DEFINE_THISCALL_WRAPPER(time_get_char_ctor
, 4)
9870 time_get_char
* __thiscall
time_get_char_ctor(time_get_char
*this)
9872 return time_get_char_ctor_refs(this, 0);
9875 /* ?_Tidy@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AAEXXZ */
9876 /* ?_Tidy@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEAAXXZ */
9877 DEFINE_THISCALL_WRAPPER(time_get_char__Tidy
, 4)
9878 void __thiscall
time_get_char__Tidy(time_get_char
*this)
9880 TRACE("(%p)\n", this);
9882 MSVCRT_operator_delete((char*)this->days
);
9883 MSVCRT_operator_delete((char*)this->months
);
9886 /* ??1?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
9887 /* ??1?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
9888 DEFINE_THISCALL_WRAPPER(time_get_char_dtor
, 4) /* virtual */
9889 void __thiscall
time_get_char_dtor(time_get_char
*this)
9891 TRACE("(%p)\n", this);
9893 time_get_char__Tidy(this);
9896 DEFINE_THISCALL_WRAPPER(time_get_char_vector_dtor
, 8)
9897 time_get_char
* __thiscall
time_get_char_vector_dtor(time_get_char
*this, unsigned int flags
)
9899 TRACE("(%p %x)\n", this, flags
);
9901 /* we have an array, with the number of elements stored before the first object */
9902 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
9904 for(i
=*ptr
-1; i
>=0; i
--)
9905 time_get_char_dtor(this+i
);
9906 MSVCRT_operator_delete(ptr
);
9908 time_get_char_dtor(this);
9910 MSVCRT_operator_delete(this);
9916 /* ?_Getcat@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
9917 /* ?_Getcat@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
9918 unsigned int __cdecl
time_get_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
9920 TRACE("(%p %p)\n", facet
, loc
);
9922 if(facet
&& !*facet
) {
9925 *facet
= MSVCRT_operator_new(sizeof(time_get_char
));
9927 ERR("Out of memory\n");
9928 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
9932 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
9933 time_get_char_ctor_locinfo((time_get_char
*)*facet
, &locinfo
, 0);
9934 _Locinfo_dtor(&locinfo
);
9940 static time_get_char
* time_get_char_use_facet(const locale
*loc
)
9942 static time_get_char
*obj
= NULL
;
9945 const locale_facet
*fac
;
9947 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
9948 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_get_char_id
));
9950 _Lockit_dtor(&lock
);
9951 return (time_get_char
*)fac
;
9955 _Lockit_dtor(&lock
);
9959 time_get_char__Getcat(&fac
, loc
);
9960 obj
= (time_get_char
*)fac
;
9961 call_locale_facet__Incref(&obj
->facet
);
9962 locale_facet_register(&obj
->facet
);
9963 _Lockit_dtor(&lock
);
9968 /* ?_Getint@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@0HHAAH@Z */
9969 /* ?_Getint@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@0HHAEAH@Z */
9970 int __cdecl
time_get_char__Getint(const time_get_char
*this,
9971 istreambuf_iterator_char
*b
, istreambuf_iterator_char
*e
,
9972 int min_val
, int max_val
, int *val
)
9974 BOOL got_digit
= FALSE
;
9975 int len
= 0, ret
= 0;
9978 TRACE("(%p %p %p %d %d %p)\n", this, b
, e
, min_val
, max_val
, val
);
9980 istreambuf_iterator_char_val(b
);
9981 if(b
->strbuf
&& (b
->val
== '-' || b
->val
== '+'))
9983 buf
[len
++] = b
->val
;
9984 istreambuf_iterator_char_inc(b
);
9987 if (b
->strbuf
&& b
->val
== '0')
9991 istreambuf_iterator_char_inc(b
);
9993 while (b
->strbuf
&& b
->val
== '0')
9994 istreambuf_iterator_char_inc(b
);
9996 for (; b
->strbuf
&& b
->val
>= '0' && b
->val
<= '9';
9997 istreambuf_iterator_char_inc(b
))
9999 if(len
< ARRAY_SIZE(buf
)-1)
10006 ret
|= IOSTATE_eofbit
;
10007 if (got_digit
&& len
< ARRAY_SIZE(buf
)-1)
10012 v
= _Stolx(buf
, NULL
, 10, &err
);
10013 if(err
|| v
< min_val
|| v
> max_val
)
10014 ret
|= IOSTATE_failbit
;
10019 ret
|= IOSTATE_failbit
;
10023 /* ?do_date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AW4dateorder@time_base@2@XZ */
10024 /* ?do_date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AW4dateorder@time_base@2@XZ */
10025 DEFINE_THISCALL_WRAPPER(time_get_char_do_date_order
, 4) /* virtual */
10026 #if _MSVCP_VER <= 100
10027 #define call_time_get_char_do_date_order(this) CALL_VTBL_FUNC(this, 4, dateorder, (const time_get_char*), (this))
10029 #define call_time_get_char_do_date_order(this) CALL_VTBL_FUNC(this, 12, dateorder, (const time_get_char*), (this))
10031 dateorder __thiscall
time_get_char_do_date_order(const time_get_char
*this)
10033 TRACE("(%p)\n", this);
10034 return this->dateorder
;
10037 /* ?date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AW4dateorder@time_base@2@XZ */
10038 /* ?date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AW4dateorder@time_base@2@XZ */
10039 DEFINE_THISCALL_WRAPPER(time_get_char_date_order
, 4)
10040 dateorder __thiscall
time_get_char_date_order(const time_get_char
*this)
10042 return call_time_get_char_do_date_order(this);
10045 static int find_longest_match_char(istreambuf_iterator_char
*iter
, const char *str
)
10047 int i
, len
= 0, last_match
= -1, match
= -1;
10048 const char *p
, *end
;
10051 for(istreambuf_iterator_char_val(iter
); iter
->strbuf
&& len
<ARRAY_SIZE(buf
);
10052 istreambuf_iterator_char_inc(iter
))
10054 BOOL got_prefix
= FALSE
;
10056 buf
[len
++] = iter
->val
;
10057 last_match
= match
;
10059 for(p
=str
+1, i
=0; *p
; p
= (*end
? end
+1 : end
), i
++)
10061 end
= strchr(p
, ':');
10063 end
= p
+ strlen(p
);
10065 if (end
-p
>= len
&& !memcmp(p
, buf
, len
))
10078 istreambuf_iterator_char_inc(iter
);
10084 if (len
== ARRAY_SIZE(buf
))
10085 FIXME("temporary buffer is too small\n");
10091 /* ?do_get_monthname@?$time_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@AAHPAUtm@@@Z */
10092 /* ?do_get_monthname@?$time_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@AEAHPEAUtm@@@Z */
10093 DEFINE_THISCALL_WRAPPER(time_get_char_do_get_monthname
, 36) /* virtual */
10094 #if _MSVCP_VER <= 100
10095 #define call_time_get_char_do_get_monthname(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_char*, \
10096 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10097 (this, ret, s, e, base, err, t))
10099 #define call_time_get_char_do_get_monthname(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_char*, \
10100 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10101 (this, ret, s, e, base, err, t))
10103 istreambuf_iterator_char
* __thiscall
time_get_char_do_get_monthname(const time_get_char
*this,
10104 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10105 ios_base
*base
, int *err
, struct tm
*t
)
10109 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10111 if ((match
= find_longest_match_char(&s
, this->months
)) != -1)
10112 t
->tm_mon
= match
/ 2;
10114 *err
|= IOSTATE_failbit
;
10120 /* ?get_monthname@?$time_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@AAHPAUtm@@@Z */
10121 /* ?get_monthname@?$time_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@AEAHPEAUtm@@@Z */
10122 DEFINE_THISCALL_WRAPPER(time_get_char_get_monthname
, 36)
10123 istreambuf_iterator_char
* __thiscall
time_get_char_get_monthname(const time_get_char
*this,
10124 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10125 ios_base
*base
, int *err
, struct tm
*t
)
10127 return call_time_get_char_do_get_monthname(this, ret
, s
, e
, base
, err
, t
);
10130 /* ?do_get_time@?$time_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@AAHPAUtm@@@Z */
10131 /* ?do_get_time@?$time_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@AEAHPEAUtm@@@Z */
10132 DEFINE_THISCALL_WRAPPER(time_get_char_do_get_time
, 36) /* virtual */
10133 #if _MSVCP_VER <= 100
10134 #define call_time_get_char_do_get_time(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_char*, \
10135 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10136 (this, ret, s, e, base, err, t))
10138 #define call_time_get_char_do_get_time(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_char*, \
10139 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10140 (this, ret, s, e, base, err, t))
10142 istreambuf_iterator_char
* __thiscall
time_get_char_do_get_time(const time_get_char
*this,
10143 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10144 ios_base
*base
, int *err
, struct tm
*t
)
10146 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10148 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 23, &t
->tm_hour
);
10149 if (*err
|| istreambuf_iterator_char_val(&s
)!=':')
10150 *err
|= IOSTATE_failbit
;
10154 istreambuf_iterator_char_inc(&s
);
10155 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 59, &t
->tm_min
);
10157 if (*err
|| istreambuf_iterator_char_val(&s
)!=':')
10158 *err
|= IOSTATE_failbit
;
10162 istreambuf_iterator_char_inc(&s
);
10163 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 59, &t
->tm_sec
);
10170 /* ?get_time@?$time_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@AAHPAUtm@@@Z */
10171 /* ?get_time@?$time_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@AEAHPEAUtm@@@Z */
10172 DEFINE_THISCALL_WRAPPER(time_get_char_get_time
, 36)
10173 istreambuf_iterator_char
* __thiscall
time_get_char_get_time(const time_get_char
*this,
10174 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10175 ios_base
*base
, int *err
, struct tm
*t
)
10177 return call_time_get_char_do_get_time(this, ret
, s
, e
, base
, err
, t
);
10180 /* ?do_get_weekday@?$time_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@AAHPAUtm@@@Z */
10181 /* ?do_get_weekday@?$time_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@AEAHPEAUtm@@@Z */
10182 DEFINE_THISCALL_WRAPPER(time_get_char_do_get_weekday
, 36) /* virtual */
10183 #if _MSVCP_VER <= 100
10184 #define call_time_get_char_do_get_weekday(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_char*, \
10185 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10186 (this, ret, s, e, base, err, t))
10188 #define call_time_get_char_do_get_weekday(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_char*, \
10189 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10190 (this, ret, s, e, base, err, t))
10192 istreambuf_iterator_char
* __thiscall
time_get_char_do_get_weekday(const time_get_char
*this,
10193 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10194 ios_base
*base
, int *err
, struct tm
*t
)
10198 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10200 if ((match
= find_longest_match_char(&s
, this->days
)) != -1)
10201 t
->tm_wday
= match
/ 2;
10203 *err
|= IOSTATE_failbit
;
10209 /* ?get_weekday@?$time_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@AAHPAUtm@@@Z */
10210 /* ?get_weekday@?$time_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@AEAHPEAUtm@@@Z */
10211 DEFINE_THISCALL_WRAPPER(time_get_char_get_weekday
, 36)
10212 istreambuf_iterator_char
* __thiscall
time_get_char_get_weekday(const time_get_char
*this,
10213 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10214 ios_base
*base
, int *err
, struct tm
*t
)
10216 return call_time_get_char_do_get_weekday(this, ret
, s
, e
, base
, err
, t
);
10219 /* ?do_get_year@?$time_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@AAHPAUtm@@@Z */
10220 /* ?do_get_year@?$time_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@AEAHPEAUtm@@@Z */
10221 DEFINE_THISCALL_WRAPPER(time_get_char_do_get_year
, 36) /* virtual */
10222 #if _MSVCP_VER <= 100
10223 #define call_time_get_char_do_get_year(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_char*, \
10224 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10225 (this, ret, s, e, base, err, t))
10227 #define call_time_get_char_do_get_year(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_char*, \
10228 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10229 (this, ret, s, e, base, err, t))
10231 istreambuf_iterator_char
* __thiscall
time_get_char_do_get_year(const time_get_char
*this,
10232 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10233 ios_base
*base
, int *err
, struct tm
*t
)
10237 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10239 /* The function supports only dates from [1900-2035] range */
10240 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 2035, &year
);
10241 if (!(*err
& IOSTATE_failbit
))
10246 *err
|= IOSTATE_failbit
;
10255 /* ?get_year@?$time_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@AAHPAUtm@@@Z */
10256 /* ?get_year@?$time_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@AEAHPEAUtm@@@Z */
10257 DEFINE_THISCALL_WRAPPER(time_get_char_get_year
, 36)
10258 istreambuf_iterator_char
* __thiscall
time_get_char_get_year(const time_get_char
*this,
10259 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10260 ios_base
*base
, int *err
, struct tm
*t
)
10262 return call_time_get_char_do_get_year(this, ret
, s
, e
, base
, err
, t
);
10265 static void skip_ws_char(ctype_char
*ctype
, istreambuf_iterator_char
*iter
)
10267 istreambuf_iterator_char_val(iter
);
10268 while(iter
->strbuf
&& ctype_char_is_ch(ctype
, _SPACE
, iter
->val
))
10269 istreambuf_iterator_char_inc(iter
);
10272 static void skip_date_delim_char(ctype_char
*ctype
, istreambuf_iterator_char
*iter
)
10274 skip_ws_char(ctype
, iter
);
10275 if(iter
->strbuf
&& (iter
->val
== '/' || iter
->val
== ':'))
10276 istreambuf_iterator_char_inc(iter
);
10277 skip_ws_char(ctype
, iter
);
10280 /* ?do_get_date@?$time_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@AAHPAUtm@@@Z */
10281 /* ?do_get_date@?$time_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@AEAHPEAUtm@@@Z */
10282 DEFINE_THISCALL_WRAPPER(time_get_char_do_get_date
, 36) /* virtual */
10283 #if _MSVCP_VER <= 100
10284 #define call_time_get_char_do_get_date(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_char*, \
10285 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10286 (this, ret, s, e, base, err, t))
10288 #define call_time_get_char_do_get_date(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_char*, \
10289 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10290 (this, ret, s, e, base, err, t))
10292 istreambuf_iterator_char
* __thiscall
time_get_char_do_get_date(const time_get_char
*this,
10293 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10294 ios_base
*base
, int *err
, struct tm
*t
)
10299 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10301 ctype
= ctype_char_use_facet(IOS_LOCALE(base
));
10303 order
= time_get_char_date_order(this);
10304 if(order
== DATEORDER_no_order
)
10305 order
= DATEORDER_mdy
;
10308 case DATEORDER_dmy
:
10309 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
10310 skip_date_delim_char(ctype
, &s
);
10312 *err
|= IOSTATE_failbit
;
10315 if(s
.strbuf
&& ctype_char_is_ch(ctype
, _DIGIT
, s
.val
)) {
10316 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
10319 time_get_char_get_monthname(this, &s
, s
, e
, base
, err
, t
);
10321 skip_date_delim_char(ctype
, &s
);
10323 *err
|= IOSTATE_failbit
;
10326 time_get_char_get_year(this, &s
, s
, e
, base
, err
, t
);
10328 case DATEORDER_mdy
:
10329 istreambuf_iterator_char_val(&s
);
10330 if(s
.strbuf
&& ctype_char_is_ch(ctype
, _DIGIT
, s
.val
)) {
10331 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
10334 time_get_char_get_monthname(this, &s
, s
, e
, base
, err
, t
);
10336 skip_date_delim_char(ctype
, &s
);
10338 *err
|= IOSTATE_failbit
;
10341 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
10342 skip_date_delim_char(ctype
, &s
);
10344 *err
|= IOSTATE_failbit
;
10347 time_get_char_get_year(this, &s
, s
, e
, base
, err
, t
);
10349 case DATEORDER_ymd
:
10350 time_get_char_get_year(this, &s
, s
, e
, base
, err
, t
);
10351 skip_date_delim_char(ctype
, &s
);
10353 *err
|= IOSTATE_failbit
;
10356 if(ctype_char_is_ch(ctype
, _DIGIT
, s
.val
)) {
10357 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
10360 time_get_char_get_monthname(this, &s
, s
, e
, base
, err
, t
);
10362 skip_date_delim_char(ctype
, &s
);
10364 *err
|= IOSTATE_failbit
;
10367 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
10369 case DATEORDER_ydm
:
10370 time_get_char_get_year(this, &s
, s
, e
, base
, err
, t
);
10371 skip_date_delim_char(ctype
, &s
);
10373 *err
|= IOSTATE_failbit
;
10376 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
10377 skip_date_delim_char(ctype
, &s
);
10379 *err
|= IOSTATE_failbit
;
10382 if(ctype_char_is_ch(ctype
, _DIGIT
, s
.val
)) {
10383 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
10386 time_get_char_get_monthname(this, &s
, s
, e
, base
, err
, t
);
10390 ERR("incorrect order value: %d\n", order
);
10395 *err
|= IOSTATE_eofbit
;
10400 /* ?get_date@?$time_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@AAHPAUtm@@@Z */
10401 /* ?get_date@?$time_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@AEAHPEAUtm@@@Z */
10402 DEFINE_THISCALL_WRAPPER(time_get_char_get_date
, 36)
10403 istreambuf_iterator_char
* __thiscall
time_get_char_get_date(const time_get_char
*this,
10404 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10405 ios_base
*base
, int *err
, struct tm
*t
)
10407 return call_time_get_char_do_get_date(this, ret
, s
, e
, base
, err
, t
);
10410 istreambuf_iterator_char
* __thiscall
time_get_char_get(const time_get_char
*,
10411 istreambuf_iterator_char
*, istreambuf_iterator_char
, istreambuf_iterator_char
,
10412 ios_base
*, int*, struct tm
*, char, char);
10414 /* ?_Getfmt@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@PBD@Z */
10415 /* ?_Getfmt@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@PEBD@Z */
10416 DEFINE_THISCALL_WRAPPER(time_get_char__Getfmt
, 40)
10417 istreambuf_iterator_char
* __thiscall
time_get_char__Getfmt(const time_get_char
*this,
10418 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10419 ios_base
*base
, int *err
, struct tm
*t
, const char *fmt
)
10423 TRACE("(%p %p %p %p %p %s)\n", this, ret
, base
, err
, t
, fmt
);
10425 ctype
= ctype_char_use_facet(IOS_LOCALE(base
));
10426 istreambuf_iterator_char_val(&s
);
10429 if(ctype_char_is_ch(ctype
, _SPACE
, *fmt
)) {
10430 skip_ws_char(ctype
, &s
);
10436 *err
|= IOSTATE_failbit
;
10442 time_get_char_get(this, &s
, s
, e
, base
, err
, t
, *fmt
, 0);
10445 *err
|= IOSTATE_failbit
;
10447 istreambuf_iterator_char_inc(&s
);
10450 if(*err
& IOSTATE_failbit
)
10456 *err
|= IOSTATE_eofbit
;
10461 /* ?do_get@?$time_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@AAHPAUtm@@DD@Z */
10462 /* ?do_get@?$time_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@AEAHPEAUtm@@DD@Z */
10463 DEFINE_THISCALL_WRAPPER(time_get_char_do_get
, 44) /* virtual */
10464 #if _MSVCP_VER <= 100
10465 #define call_time_get_char_do_get(this, ret, s, e, base, err, t, fmt, mod) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_char*, \
10466 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*, char, char), \
10467 (this, ret, s, e, base, err, t, fmt, mod))
10469 #define call_time_get_char_do_get(this, ret, s, e, base, err, t, fmt, mod) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_char*, \
10470 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*, char, char), \
10471 (this, ret, s, e, base, err, t, fmt, mod))
10473 istreambuf_iterator_char
* __thiscall
time_get_char_do_get(const time_get_char
*this,
10474 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10475 ios_base
*base
, int *err
, struct tm
*t
, char fmt
, char mod
)
10479 TRACE("(%p %p %p %p %p %c %c)\n", this, ret
, base
, err
, t
, fmt
, mod
);
10481 ctype
= ctype_char_use_facet(IOS_LOCALE(base
));
10486 time_get_char_get_weekday(this, &s
, s
, e
, base
, err
, t
);
10491 time_get_char_get_monthname(this, &s
, s
, e
, base
, err
, t
);
10494 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%b %d %H:%M:%S %Y");
10497 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 99, &t
->tm_year
);
10498 if(!(*err
& IOSTATE_failbit
))
10499 t
->tm_year
= t
->tm_year
* 100 - 1900;
10503 if(fmt
== 'e') skip_ws_char(ctype
, &s
);
10504 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
10507 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%m/%d/%y");
10510 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%Y-%m-%d");
10513 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 23, &t
->tm_hour
);
10516 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 11, &t
->tm_hour
);
10519 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 366, &t
->tm_yday
);
10522 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
10523 if(!(*err
& IOSTATE_failbit
))
10527 *err
= time_get_char__Getint(this, &s
, &e
, 0, 59, &t
->tm_min
);
10531 skip_ws_char(ctype
, &s
);
10536 istreambuf_iterator_char_val(&s
);
10537 if(s
.strbuf
&& (s
.val
=='P' || s
.val
=='p'))
10539 else if (!s
.strbuf
|| (s
.val
!='A' && s
.val
!='a')) {
10540 *err
|= IOSTATE_failbit
;
10543 istreambuf_iterator_char_inc(&s
);
10544 if(!s
.strbuf
|| (s
.val
!='M' && s
.val
!='m')) {
10545 *err
|= IOSTATE_failbit
;
10548 istreambuf_iterator_char_inc(&s
);
10555 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%I:%M:%S %p");
10558 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%H:%M");
10561 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 59, &t
->tm_sec
);
10565 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%H:%M:%S");
10568 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 7, &t
->tm_wday
);
10569 if(!(*err
& IOSTATE_failbit
) && t
->tm_wday
==7)
10573 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 6, &t
->tm_wday
);
10576 time_get_char_get_date(this, &s
, s
, e
, base
, err
, t
);
10579 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 99, &t
->tm_year
);
10580 if(!(*err
& IOSTATE_failbit
) && t
->tm_year
<69)
10584 time_get_char_get_year(this, &s
, s
, e
, base
, err
, t
);
10587 FIXME("unrecognized format: %c\n", fmt
);
10588 *err
|= IOSTATE_failbit
;
10592 *err
|= IOSTATE_eofbit
;
10597 /* ?get@?$time_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@AAHPAUtm@@DD@Z */
10598 /* ?get@?$time_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@AEAHPEAUtm@@DD@Z */
10599 DEFINE_THISCALL_WRAPPER(time_get_char_get
, 44)
10600 istreambuf_iterator_char
* __thiscall
time_get_char_get(const time_get_char
*this,
10601 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10602 ios_base
*base
, int *err
, struct tm
*t
, char fmt
, char mod
)
10604 return call_time_get_char_do_get(this, ret
, s
, e
, base
, err
, t
, fmt
, mod
);
10607 /* ?get@?$time_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@AAHPAUtm@@PBD4@Z */
10608 /* ?get@?$time_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@AEAHPEAUtm@@PEBD4@Z */
10609 DEFINE_THISCALL_WRAPPER(time_get_char_get_fmt
, 44)
10610 istreambuf_iterator_char
* __thiscall
time_get_char_get_fmt(const time_get_char
*this,
10611 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10612 ios_base
*base
, int *err
, struct tm
*t
, const char *fmtstart
, const char *fmtend
)
10616 TRACE("(%p %p %p %p %p %s)\n", this, ret
, base
, err
, t
, wine_dbgstr_an(fmtstart
, fmtend
-fmtstart
));
10618 ctype
= ctype_char_use_facet(IOS_LOCALE(base
));
10619 istreambuf_iterator_char_val(&s
);
10621 while(fmtstart
< fmtend
) {
10622 if(ctype_char_is_ch(ctype
, _SPACE
, *fmtstart
)) {
10623 skip_ws_char(ctype
, &s
);
10629 *err
|= IOSTATE_failbit
;
10633 if(*fmtstart
!= '%' || fmtstart
+1 >= fmtend
|| fmtstart
[1] == '%') {
10634 if(s
.val
!= *fmtstart
)
10635 *err
|= IOSTATE_failbit
;
10637 istreambuf_iterator_char_inc(&s
);
10638 if(*fmtstart
== '%')
10642 time_get_char_get(this, &s
, s
, e
, base
, err
, t
, *fmtstart
, 0);
10645 if(*err
& IOSTATE_failbit
)
10651 *err
|= IOSTATE_eofbit
;
10656 /* ?id@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
10657 locale_id time_get_wchar_id
= {0};
10659 /* ??_7?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
10660 extern const vtable_ptr time_get_wchar_vtable
;
10662 #if _MSVCP_VER >=110
10663 static wchar_t* create_time_get_str(const wchar_t *str
)
10668 len
= lstrlenW(str
)+1;
10669 ret
= MSVCRT_operator_new(len
* sizeof(wchar_t));
10671 memcpy(ret
, str
, len
*sizeof(wchar_t));
10675 static wchar_t* create_time_get_str(const char *str
, const _Locinfo
*locinfo
)
10681 _Locinfo__Getcvt(locinfo
, &cvt
);
10682 len
= MultiByteToWideChar(cvt
.page
, 0, str
, -1, NULL
, 0);
10683 ret
= MSVCRT_operator_new(len
*sizeof(WCHAR
));
10685 MultiByteToWideChar(cvt
.page
, 0, str
, -1, ret
, len
);
10690 /* ?_Init@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
10691 /* ?_Init@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
10692 DEFINE_THISCALL_WRAPPER(time_get_wchar__Init
, 8)
10693 void __thiscall
time_get_wchar__Init(time_get_wchar
*this, const _Locinfo
*locinfo
)
10695 TRACE("(%p %p)\n", this, locinfo
);
10697 #if _MSVCP_VER >=110
10698 this->days
= create_time_get_str(_Locinfo__W_Getdays(locinfo
));
10700 this->days
= create_time_get_str(_Locinfo__Getdays(locinfo
), locinfo
);
10704 ERR("Out of memory\n");
10705 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
10708 #if _MSVCP_VER >=110
10709 this->months
= create_time_get_str(_Locinfo__W_Getmonths(locinfo
));
10711 this->months
= create_time_get_str(_Locinfo__Getmonths(locinfo
), locinfo
);
10715 MSVCRT_operator_delete((wchar_t*)this->days
);
10717 ERR("Out of memory\n");
10718 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
10721 this->dateorder
= _Locinfo__Getdateorder(locinfo
);
10722 _Locinfo__Getcvt(locinfo
, &this->cvt
);
10725 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
10726 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
10727 DEFINE_THISCALL_WRAPPER(time_get_wchar_ctor_locinfo
, 12)
10728 time_get_wchar
* __thiscall
time_get_wchar_ctor_locinfo(time_get_wchar
*this,
10729 const _Locinfo
*locinfo
, size_t refs
)
10731 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
10732 locale_facet_ctor_refs(&this->facet
, refs
);
10733 this->facet
.vtable
= &time_get_wchar_vtable
;
10734 time_get_wchar__Init(this, locinfo
);
10738 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAE@PBDI@Z */
10739 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAA@PEBD_K@Z */
10740 DEFINE_THISCALL_WRAPPER(time_get_wchar_ctor_name
, 12)
10741 time_get_wchar
* __thiscall
time_get_wchar_ctor_name(time_get_wchar
*this, const char *name
, size_t refs
)
10745 TRACE("(%p %s %Iu)\n", this, name
, refs
);
10747 _Locinfo_ctor_cstr(&locinfo
, name
);
10748 time_get_wchar_ctor_locinfo(this, &locinfo
, refs
);
10749 _Locinfo_dtor(&locinfo
);
10753 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
10754 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
10755 DEFINE_THISCALL_WRAPPER(time_get_wchar_ctor_refs
, 8)
10756 time_get_wchar
* __thiscall
time_get_wchar_ctor_refs(time_get_wchar
*this, size_t refs
)
10760 TRACE("(%p %Iu)\n", this, refs
);
10762 _Locinfo_ctor(&locinfo
);
10763 time_get_wchar_ctor_locinfo(this, &locinfo
, refs
);
10764 _Locinfo_dtor(&locinfo
);
10768 /* ??_F?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
10769 /* ??_F?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
10770 DEFINE_THISCALL_WRAPPER(time_get_wchar_ctor
, 4)
10771 time_get_wchar
* __thiscall
time_get_wchar_ctor(time_get_wchar
*this)
10773 return time_get_wchar_ctor_refs(this, 0);
10776 /* ?_Tidy@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AAEXXZ */
10777 /* ?_Tidy@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEAAXXZ */
10778 DEFINE_THISCALL_WRAPPER(time_get_wchar__Tidy
, 4)
10779 void __thiscall
time_get_wchar__Tidy(time_get_wchar
*this)
10781 TRACE("(%p)\n", this);
10783 MSVCRT_operator_delete((wchar_t*)this->days
);
10784 MSVCRT_operator_delete((wchar_t*)this->months
);
10787 /* ??1?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
10788 /* ??1?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
10789 DEFINE_THISCALL_WRAPPER(time_get_wchar_dtor
, 4) /* virtual */
10790 void __thiscall
time_get_wchar_dtor(time_get_wchar
*this)
10792 TRACE("(%p)\n", this);
10794 time_get_wchar__Tidy(this);
10797 DEFINE_THISCALL_WRAPPER(time_get_wchar_vector_dtor
, 8)
10798 time_get_wchar
* __thiscall
time_get_wchar_vector_dtor(time_get_wchar
*this, unsigned int flags
)
10800 TRACE("(%p %x)\n", this, flags
);
10802 /* we have an array, with the number of elements stored before the first object */
10803 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
10805 for(i
=*ptr
-1; i
>=0; i
--)
10806 time_get_wchar_dtor(this+i
);
10807 MSVCRT_operator_delete(ptr
);
10809 time_get_wchar_dtor(this);
10811 MSVCRT_operator_delete(this);
10817 /* ?_Getcat@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
10818 /* ?_Getcat@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
10819 unsigned int __cdecl
time_get_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
10821 TRACE("(%p %p)\n", facet
, loc
);
10823 if(facet
&& !*facet
) {
10826 *facet
= MSVCRT_operator_new(sizeof(time_get_wchar
));
10828 ERR("Out of memory\n");
10829 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
10833 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
10834 time_get_wchar_ctor_locinfo((time_get_wchar
*)*facet
, &locinfo
, 0);
10835 _Locinfo_dtor(&locinfo
);
10841 static time_get_wchar
* time_get_wchar_use_facet(const locale
*loc
)
10843 static time_get_wchar
*obj
= NULL
;
10846 const locale_facet
*fac
;
10848 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
10849 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_get_wchar_id
));
10851 _Lockit_dtor(&lock
);
10852 return (time_get_wchar
*)fac
;
10856 _Lockit_dtor(&lock
);
10860 time_get_wchar__Getcat(&fac
, loc
);
10861 obj
= (time_get_wchar
*)fac
;
10862 call_locale_facet__Incref(&obj
->facet
);
10863 locale_facet_register(&obj
->facet
);
10864 _Lockit_dtor(&lock
);
10869 /* ?_Getint@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@0HHAAH@Z */
10870 /* ?_Getint@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@0HHAEAH@Z */
10871 int __cdecl
time_get_wchar__Getint(const time_get_wchar
*this,
10872 istreambuf_iterator_wchar
*b
, istreambuf_iterator_wchar
*e
,
10873 int min_val
, int max_val
, int *val
)
10875 BOOL got_digit
= FALSE
;
10876 int len
= 0, ret
= 0;
10879 TRACE("(%p %p %p %d %d %p)\n", this, b
, e
, min_val
, max_val
, val
);
10881 istreambuf_iterator_wchar_val(b
);
10882 if(b
->strbuf
&& (b
->val
== '-' || b
->val
== '+'))
10884 buf
[len
++] = b
->val
;
10885 istreambuf_iterator_wchar_inc(b
);
10888 if (b
->strbuf
&& b
->val
== '0')
10892 istreambuf_iterator_wchar_inc(b
);
10894 while (b
->strbuf
&& b
->val
== '0')
10895 istreambuf_iterator_wchar_inc(b
);
10897 for (; b
->strbuf
&& b
->val
>= '0' && b
->val
<= '9';
10898 istreambuf_iterator_wchar_inc(b
))
10900 if(len
< ARRAY_SIZE(buf
)-1)
10907 ret
|= IOSTATE_eofbit
;
10908 if (got_digit
&& len
< ARRAY_SIZE(buf
)-1)
10913 v
= _Stolx(buf
, NULL
, 10, &err
);
10914 if(err
|| v
< min_val
|| v
> max_val
)
10915 ret
|= IOSTATE_failbit
;
10920 ret
|= IOSTATE_failbit
;
10924 /* ?do_date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AW4dateorder@time_base@2@XZ */
10925 /* ?do_date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AW4dateorder@time_base@2@XZ */
10926 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_date_order
, 4) /* virtual */
10927 #if _MSVCP_VER <= 100
10928 #define call_time_get_wchar_do_date_order(this) CALL_VTBL_FUNC(this, 4, dateorder, (const time_get_wchar*), (this))
10930 #define call_time_get_wchar_do_date_order(this) CALL_VTBL_FUNC(this, 12, dateorder, (const time_get_wchar*), (this))
10932 dateorder __thiscall
time_get_wchar_do_date_order(const time_get_wchar
*this)
10934 TRACE("(%p)\n", this);
10935 return this->dateorder
;
10938 /* ?date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AW4dateorder@time_base@2@XZ */
10939 /* ?date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AW4dateorder@time_base@2@XZ */
10940 DEFINE_THISCALL_WRAPPER(time_get_wchar_date_order
, 4)
10941 dateorder __thiscall
time_get_wchar_date_order(const time_get_wchar
*this)
10943 return call_time_get_wchar_do_date_order(this);
10946 static int find_longest_match_wchar(istreambuf_iterator_wchar
*iter
, const wchar_t *str
)
10948 int i
, len
= 0, last_match
= -1, match
= -1;
10949 const wchar_t *p
, *end
;
10952 for(istreambuf_iterator_wchar_val(iter
); iter
->strbuf
&& len
<ARRAY_SIZE(buf
);
10953 istreambuf_iterator_wchar_inc(iter
))
10955 BOOL got_prefix
= FALSE
;
10957 buf
[len
++] = iter
->val
;
10958 last_match
= match
;
10960 for(p
=str
+1, i
=0; *p
; p
= (*end
? end
+1 : end
), i
++)
10962 end
= wcschr(p
, ':');
10964 end
= p
+ lstrlenW(p
);
10966 if (end
-p
>= len
&& !memcmp(p
, buf
, len
*sizeof(wchar_t)))
10979 istreambuf_iterator_wchar_inc(iter
);
10985 if (len
== ARRAY_SIZE(buf
))
10986 FIXME("temporary buffer is too small\n");
10992 /* ?do_get_monthname@?$time_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@AAHPAUtm@@@Z */
10993 /* ?do_get_monthname@?$time_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@AEAHPEAUtm@@@Z */
10994 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get_monthname
, 36) /* virtual */
10995 #if _MSVCP_VER <= 100
10996 #define call_time_get_wchar_do_get_monthname(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_wchar*, \
10997 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
10998 (this, ret, s, e, base, err, t))
11000 #define call_time_get_wchar_do_get_monthname(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_wchar*, \
11001 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
11002 (this, ret, s, e, base, err, t))
11004 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get_monthname(const time_get_wchar
*this,
11005 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11006 ios_base
*base
, int *err
, struct tm
*t
)
11010 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
11012 if ((match
= find_longest_match_wchar(&s
, this->months
)) != -1)
11013 t
->tm_mon
= match
/ 2;
11015 *err
|= IOSTATE_failbit
;
11021 /* ?get_monthname@?$time_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@AAHPAUtm@@@Z */
11022 /* ?get_monthname@?$time_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@AEAHPEAUtm@@@Z */
11023 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_monthname
, 36)
11024 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_monthname(const time_get_wchar
*this,
11025 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11026 ios_base
*base
, int *err
, struct tm
*t
)
11028 return call_time_get_wchar_do_get_monthname(this, ret
, s
, e
, base
, err
, t
);
11031 /* ?do_get_time@?$time_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@AAHPAUtm@@@Z */
11032 /* ?do_get_time@?$time_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@AEAHPEAUtm@@@Z */
11033 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get_time
, 36) /* virtual */
11034 #if _MSVCP_VER <= 100
11035 #define call_time_get_wchar_do_get_time(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_wchar*, \
11036 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
11037 (this, ret, s, e, base, err, t))
11039 #define call_time_get_wchar_do_get_time(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_wchar*, \
11040 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
11041 (this, ret, s, e, base, err, t))
11043 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get_time(const time_get_wchar
*this,
11044 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11045 ios_base
*base
, int *err
, struct tm
*t
)
11047 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
11049 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 23, &t
->tm_hour
);
11050 if (*err
|| istreambuf_iterator_wchar_val(&s
)!=':')
11051 *err
|= IOSTATE_failbit
;
11055 istreambuf_iterator_wchar_inc(&s
);
11056 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 59, &t
->tm_min
);
11058 if (*err
|| istreambuf_iterator_wchar_val(&s
)!=':')
11059 *err
|= IOSTATE_failbit
;
11063 istreambuf_iterator_wchar_inc(&s
);
11064 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 59, &t
->tm_sec
);
11071 /* ?get_time@?$time_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@AAHPAUtm@@@Z */
11072 /* ?get_time@?$time_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@AEAHPEAUtm@@@Z */
11073 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_time
, 36)
11074 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_time(const time_get_wchar
*this,
11075 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11076 ios_base
*base
, int *err
, struct tm
*t
)
11078 return call_time_get_wchar_do_get_time(this, ret
, s
, e
, base
, err
, t
);
11081 /* ?do_get_weekday@?$time_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@AAHPAUtm@@@Z */
11082 /* ?do_get_weekday@?$time_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@AEAHPEAUtm@@@Z */
11083 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get_weekday
, 36) /* virtual */
11084 #if _MSVCP_VER <= 100
11085 #define call_time_get_wchar_do_get_weekday(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_wchar*, \
11086 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
11087 (this, ret, s, e, base, err, t))
11089 #define call_time_get_wchar_do_get_weekday(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_wchar*, \
11090 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
11091 (this, ret, s, e, base, err, t))
11093 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get_weekday(const time_get_wchar
*this,
11094 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11095 ios_base
*base
, int *err
, struct tm
*t
)
11099 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
11101 if ((match
= find_longest_match_wchar(&s
, this->days
)) != -1)
11102 t
->tm_wday
= match
/ 2;
11104 *err
|= IOSTATE_failbit
;
11110 /* ?get_weekday@?$time_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@AAHPAUtm@@@Z */
11111 /* ?get_weekday@?$time_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@AEAHPEAUtm@@@Z */
11112 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_weekday
, 36)
11113 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_weekday(const time_get_wchar
*this,
11114 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11115 ios_base
*base
, int *err
, struct tm
*t
)
11117 return call_time_get_wchar_do_get_weekday(this, ret
, s
, e
, base
, err
, t
);
11120 /* ?do_get_year@?$time_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@AAHPAUtm@@@Z */
11121 /* ?do_get_year@?$time_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@AEAHPEAUtm@@@Z */
11122 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get_year
, 36) /* virtual */
11123 #if _MSVCP_VER <= 100
11124 #define call_time_get_wchar_do_get_year(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_wchar*, \
11125 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
11126 (this, ret, s, e, base, err, t))
11128 #define call_time_get_wchar_do_get_year(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_wchar*, \
11129 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
11130 (this, ret, s, e, base, err, t))
11132 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get_year(const time_get_wchar
*this,
11133 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11134 ios_base
*base
, int *err
, struct tm
*t
)
11138 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
11140 /* The function supports only dates from [1900-2035] range */
11141 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 2035, &year
);
11142 if (!(*err
& IOSTATE_failbit
))
11147 *err
|= IOSTATE_failbit
;
11156 /* ?get_year@?$time_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@AAHPAUtm@@@Z */
11157 /* ?get_year@?$time_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@AEAHPEAUtm@@@Z */
11158 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_year
, 36)
11159 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_year(const time_get_wchar
*this,
11160 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11161 ios_base
*base
, int *err
, struct tm
*t
)
11163 return call_time_get_wchar_do_get_year(this, ret
, s
, e
, base
, err
, t
);
11166 static void skip_ws_wchar(ctype_wchar
*ctype
, istreambuf_iterator_wchar
*iter
)
11168 istreambuf_iterator_wchar_val(iter
);
11169 while(iter
->strbuf
&& ctype_wchar_is_ch(ctype
, _SPACE
, iter
->val
))
11170 istreambuf_iterator_wchar_inc(iter
);
11173 static void skip_date_delim_wchar(ctype_wchar
*ctype
, istreambuf_iterator_wchar
*iter
)
11175 skip_ws_wchar(ctype
, iter
);
11176 if(iter
->strbuf
&& (iter
->val
== '/' || iter
->val
== ':'))
11177 istreambuf_iterator_wchar_inc(iter
);
11178 skip_ws_wchar(ctype
, iter
);
11181 /* ?do_get_date@?$time_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@AAHPAUtm@@@Z */
11182 /* ?do_get_date@?$time_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@AEAHPEAUtm@@@Z */
11183 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get_date
, 36) /* virtual */
11184 #if _MSVCP_VER <= 100
11185 #define call_time_get_wchar_do_get_date(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_wchar*, \
11186 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
11187 (this, ret, s, e, base, err, t))
11189 #define call_time_get_wchar_do_get_date(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_wchar*, \
11190 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
11191 (this, ret, s, e, base, err, t))
11193 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get_date(const time_get_wchar
*this,
11194 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11195 ios_base
*base
, int *err
, struct tm
*t
)
11197 ctype_wchar
*ctype
;
11200 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
11202 ctype
= ctype_wchar_use_facet(IOS_LOCALE(base
));
11204 order
= time_get_wchar_date_order(this);
11205 if(order
== DATEORDER_no_order
)
11206 order
= DATEORDER_mdy
;
11209 case DATEORDER_dmy
:
11210 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
11211 skip_date_delim_wchar(ctype
, &s
);
11213 *err
|= IOSTATE_failbit
;
11216 if(s
.strbuf
&& ctype_wchar_is_ch(ctype
, _DIGIT
, s
.val
)) {
11217 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
11220 time_get_wchar_get_monthname(this, &s
, s
, e
, base
, err
, t
);
11222 skip_date_delim_wchar(ctype
, &s
);
11224 *err
|= IOSTATE_failbit
;
11227 time_get_wchar_get_year(this, &s
, s
, e
, base
, err
, t
);
11229 case DATEORDER_mdy
:
11230 istreambuf_iterator_wchar_val(&s
);
11231 if(s
.strbuf
&& ctype_wchar_is_ch(ctype
, _DIGIT
, s
.val
)) {
11232 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
11235 time_get_wchar_get_monthname(this, &s
, s
, e
, base
, err
, t
);
11237 skip_date_delim_wchar(ctype
, &s
);
11239 *err
|= IOSTATE_failbit
;
11242 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
11243 skip_date_delim_wchar(ctype
, &s
);
11245 *err
|= IOSTATE_failbit
;
11248 time_get_wchar_get_year(this, &s
, s
, e
, base
, err
, t
);
11250 case DATEORDER_ymd
:
11251 time_get_wchar_get_year(this, &s
, s
, e
, base
, err
, t
);
11252 skip_date_delim_wchar(ctype
, &s
);
11254 *err
|= IOSTATE_failbit
;
11257 if(ctype_wchar_is_ch(ctype
, _DIGIT
, s
.val
)) {
11258 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
11261 time_get_wchar_get_monthname(this, &s
, s
, e
, base
, err
, t
);
11263 skip_date_delim_wchar(ctype
, &s
);
11265 *err
|= IOSTATE_failbit
;
11268 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
11270 case DATEORDER_ydm
:
11271 time_get_wchar_get_year(this, &s
, s
, e
, base
, err
, t
);
11272 skip_date_delim_wchar(ctype
, &s
);
11274 *err
|= IOSTATE_failbit
;
11277 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
11278 skip_date_delim_wchar(ctype
, &s
);
11280 *err
|= IOSTATE_failbit
;
11283 if(ctype_wchar_is_ch(ctype
, _DIGIT
, s
.val
)) {
11284 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
11287 time_get_wchar_get_monthname(this, &s
, s
, e
, base
, err
, t
);
11291 ERR("incorrect order value: %d\n", order
);
11296 *err
|= IOSTATE_eofbit
;
11301 /* ?get_date@?$time_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@AAHPAUtm@@@Z */
11302 /* ?get_date@?$time_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@AEAHPEAUtm@@@Z */
11303 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_date
, 36)
11304 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_date(const time_get_wchar
*this,
11305 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11306 ios_base
*base
, int *err
, struct tm
*t
)
11308 return call_time_get_wchar_do_get_date(this, ret
, s
, e
, base
, err
, t
);
11311 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get(const time_get_wchar
*,
11312 istreambuf_iterator_wchar
*, istreambuf_iterator_wchar
, istreambuf_iterator_wchar
,
11313 ios_base
*, int*, struct tm
*, char, char);
11315 /* ?_Getfmt@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IBE?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AAVios_base@2@AAHPAUtm@@PBD@Z */
11316 /* ?_Getfmt@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEBA?AV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@V32@0AEAVios_base@2@AEAHPEAUtm@@PEBD@Z */
11317 DEFINE_THISCALL_WRAPPER(time_get_wchar__Getfmt
, 40)
11318 istreambuf_iterator_wchar
* __thiscall
time_get_wchar__Getfmt(const time_get_wchar
*this,
11319 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11320 ios_base
*base
, int *err
, struct tm
*t
, const char *fmt
)
11322 ctype_wchar
*ctype
;
11324 TRACE("(%p %p %p %p %p %s)\n", this, ret
, base
, err
, t
, fmt
);
11326 ctype
= ctype_wchar_use_facet(IOS_LOCALE(base
));
11327 istreambuf_iterator_wchar_val(&s
);
11331 skip_ws_wchar(ctype
, &s
);
11337 *err
|= IOSTATE_failbit
;
11343 time_get_wchar_get(this, &s
, s
, e
, base
, err
, t
, *fmt
, 0);
11346 *err
|= IOSTATE_failbit
;
11348 istreambuf_iterator_wchar_inc(&s
);
11351 if(*err
& IOSTATE_failbit
)
11357 *err
|= IOSTATE_eofbit
;
11362 /* ?do_get@?$time_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@AAHPAUtm@@DD@Z */
11363 /* ?do_get@?$time_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@AEAHPEAUtm@@DD@Z */
11364 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get
, 44) /* virtual */
11365 #if _MSVCP_VER <= 100
11366 #define call_time_get_wchar_do_get(this, ret, s, e, base, err, t, fmt, mod) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_wchar*, \
11367 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*, char, char), \
11368 (this, ret, s, e, base, err, t, fmt, mod))
11370 #define call_time_get_wchar_do_get(this, ret, s, e, base, err, t, fmt, mod) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_wchar*, \
11371 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*, char, char), \
11372 (this, ret, s, e, base, err, t, fmt, mod))
11374 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get(const time_get_wchar
*this,
11375 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11376 ios_base
*base
, int *err
, struct tm
*t
, char fmt
, char mod
)
11378 ctype_wchar
*ctype
;
11380 TRACE("(%p %p %p %p %p %c %c)\n", this, ret
, base
, err
, t
, fmt
, mod
);
11382 ctype
= ctype_wchar_use_facet(IOS_LOCALE(base
));
11387 time_get_wchar_get_weekday(this, &s
, s
, e
, base
, err
, t
);
11392 time_get_wchar_get_monthname(this, &s
, s
, e
, base
, err
, t
);
11395 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%b %d %H:%M:%S %Y");
11398 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 99, &t
->tm_year
);
11399 if(!(*err
& IOSTATE_failbit
))
11400 t
->tm_year
= t
->tm_year
* 100 - 1900;
11404 if(fmt
== 'e') skip_ws_wchar(ctype
, &s
);
11405 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
11408 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%m/%d/%y");
11411 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%Y-%m-%d");
11414 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 23, &t
->tm_hour
);
11417 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 11, &t
->tm_hour
);
11420 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 366, &t
->tm_yday
);
11423 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
11424 if(!(*err
& IOSTATE_failbit
))
11428 *err
= time_get_wchar__Getint(this, &s
, &e
, 0, 59, &t
->tm_min
);
11432 skip_ws_wchar(ctype
, &s
);
11437 istreambuf_iterator_wchar_val(&s
);
11438 if(s
.strbuf
&& (s
.val
=='P' || s
.val
=='p'))
11440 else if (!s
.strbuf
|| (s
.val
!='A' && s
.val
!='a')) {
11441 *err
|= IOSTATE_failbit
;
11444 istreambuf_iterator_wchar_inc(&s
);
11445 if(!s
.strbuf
|| (s
.val
!='M' && s
.val
!='m')) {
11446 *err
|= IOSTATE_failbit
;
11449 istreambuf_iterator_wchar_inc(&s
);
11456 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%I:%M:%S %p");
11459 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%H:%M");
11462 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 59, &t
->tm_sec
);
11466 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%H:%M:%S");
11469 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 7, &t
->tm_wday
);
11470 if(!(*err
& IOSTATE_failbit
) && t
->tm_wday
==7)
11474 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 6, &t
->tm_wday
);
11477 time_get_wchar_get_date(this, &s
, s
, e
, base
, err
, t
);
11480 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 99, &t
->tm_year
);
11481 if(!(*err
& IOSTATE_failbit
) && t
->tm_year
<69)
11485 time_get_wchar_get_year(this, &s
, s
, e
, base
, err
, t
);
11488 FIXME("unrecognized format: %c\n", fmt
);
11489 *err
|= IOSTATE_failbit
;
11493 *err
|= IOSTATE_eofbit
;
11498 /* ?get@?$time_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@AAHPAUtm@@DD@Z */
11499 /* ?get@?$time_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@AEAHPEAUtm@@DD@Z */
11500 DEFINE_THISCALL_WRAPPER(time_get_wchar_get
, 44)
11501 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get(const time_get_wchar
*this,
11502 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11503 ios_base
*base
, int *err
, struct tm
*t
, char fmt
, char mod
)
11505 return call_time_get_wchar_do_get(this, ret
, s
, e
, base
, err
, t
, fmt
, mod
);
11508 /* ?get@?$time_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@AAHPAUtm@@PB_W4@Z */
11509 /* ?get@?$time_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@AEAHPEAUtm@@PEB_W4@Z */
11510 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_fmt
, 44)
11511 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_fmt(const time_get_wchar
*this,
11512 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11513 ios_base
*base
, int *err
, struct tm
*t
, const wchar_t *fmtstart
, const wchar_t *fmtend
)
11515 ctype_wchar
*ctype
;
11517 TRACE("(%p %p %p %p %p %s)\n", this, ret
, base
, err
, t
, wine_dbgstr_wn(fmtstart
, fmtend
-fmtstart
));
11519 ctype
= ctype_wchar_use_facet(IOS_LOCALE(base
));
11520 istreambuf_iterator_wchar_val(&s
);
11522 while(fmtstart
< fmtend
) {
11523 if(ctype_wchar_is_ch(ctype
, _SPACE
, *fmtstart
)) {
11524 skip_ws_wchar(ctype
, &s
);
11530 *err
|= IOSTATE_failbit
;
11534 if(*fmtstart
!= '%' || fmtstart
+1 >= fmtend
|| fmtstart
[1] == '%') {
11535 if(s
.val
!= *fmtstart
)
11536 *err
|= IOSTATE_failbit
;
11538 istreambuf_iterator_wchar_inc(&s
);
11539 if(*fmtstart
== '%')
11543 time_get_wchar_get(this, &s
, s
, e
, base
, err
, t
, *fmtstart
, 0);
11546 if(*err
& IOSTATE_failbit
)
11552 *err
|= IOSTATE_eofbit
;
11557 /* ??_7_Locimp@locale@std@@6B@ */
11558 extern const vtable_ptr locale__Locimp_vtable
;
11560 /* ??0_Locimp@locale@std@@AAE@_N@Z */
11561 /* ??0_Locimp@locale@std@@AEAA@_N@Z */
11562 DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor_transparent
, 8)
11563 locale__Locimp
* __thiscall
locale__Locimp_ctor_transparent(locale__Locimp
*this, bool transparent
)
11565 TRACE("(%p %d)\n", this, transparent
);
11567 memset(this, 0, sizeof(locale__Locimp
));
11568 locale_facet_ctor_refs(&this->facet
, 1);
11569 this->facet
.vtable
= &locale__Locimp_vtable
;
11570 this->transparent
= transparent
;
11571 locale_string_char_ctor_cstr(&this->name
, "*");
11575 /* ??_F_Locimp@locale@std@@QAEXXZ */
11576 /* ??_F_Locimp@locale@std@@QEAAXXZ */
11577 DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor
, 4)
11578 locale__Locimp
* __thiscall
locale__Locimp_ctor(locale__Locimp
*this)
11580 return locale__Locimp_ctor_transparent(this, FALSE
);
11583 /* ??0_Locimp@locale@std@@AAE@ABV012@@Z */
11584 /* ??0_Locimp@locale@std@@AEAA@AEBV012@@Z */
11585 DEFINE_THISCALL_WRAPPER(locale__Locimp_copy_ctor
, 8)
11586 locale__Locimp
* __thiscall
locale__Locimp_copy_ctor(locale__Locimp
*this, const locale__Locimp
*copy
)
11591 TRACE("(%p %p)\n", this, copy
);
11593 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
11594 memcpy(this, copy
, sizeof(locale__Locimp
));
11595 locale_facet_ctor_refs(&this->facet
, 1);
11596 this->facet
.vtable
= &locale__Locimp_vtable
;
11597 if(copy
->facetvec
) {
11598 this->facetvec
= MSVCRT_operator_new(copy
->facet_cnt
*sizeof(locale_facet
*));
11599 if(!this->facetvec
) {
11600 _Lockit_dtor(&lock
);
11601 ERR("Out of memory\n");
11602 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11605 for(i
=0; i
<this->facet_cnt
; i
++)
11607 this->facetvec
[i
] = copy
->facetvec
[i
];
11608 if(this->facetvec
[i
])
11609 call_locale_facet__Incref(this->facetvec
[i
]);
11612 locale_string_char_copy_ctor(&this->name
, ©
->name
);
11613 _Lockit_dtor(&lock
);
11617 /* ?_Locimp_ctor@_Locimp@locale@std@@CAXPAV123@ABV123@@Z */
11618 /* ?_Locimp_ctor@_Locimp@locale@std@@CAXPEAV123@AEBV123@@Z */
11619 locale__Locimp
* __cdecl
locale__Locimp__Locimp_ctor(locale__Locimp
*this, const locale__Locimp
*copy
)
11621 return locale__Locimp_copy_ctor(this, copy
);
11624 /* ??1_Locimp@locale@std@@MAE@XZ */
11625 /* ??1_Locimp@locale@std@@MEAA@XZ */
11626 DEFINE_THISCALL_WRAPPER(locale__Locimp_dtor
, 4)
11627 void __thiscall
locale__Locimp_dtor(locale__Locimp
*this)
11631 TRACE("(%p)\n", this);
11633 locale_facet_dtor(&this->facet
);
11634 for(i
=0; i
<this->facet_cnt
; i
++)
11635 if(this->facetvec
[i
] && call_locale_facet__Decref(this->facetvec
[i
]))
11636 call_locale_facet_vector_dtor(this->facetvec
[i
], 1);
11638 MSVCRT_operator_delete(this->facetvec
);
11639 locale_string_char_dtor(&this->name
);
11642 /* ?_Locimp_dtor@_Locimp@locale@std@@CAXPAV123@@Z */
11643 /* ?_Locimp_dtor@_Locimp@locale@std@@CAXPEAV123@@Z */
11644 void __cdecl
locale__Locimp__Locimp_dtor(locale__Locimp
*this)
11646 locale__Locimp_dtor(this);
11649 DEFINE_THISCALL_WRAPPER(locale__Locimp_vector_dtor
, 8)
11650 locale__Locimp
* __thiscall
locale__Locimp_vector_dtor(locale__Locimp
*this, unsigned int flags
)
11652 TRACE("(%p %x)\n", this, flags
);
11654 /* we have an array, with the number of elements stored before the first object */
11655 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
11657 for(i
=*ptr
-1; i
>=0; i
--)
11658 locale__Locimp_dtor(this+i
);
11659 MSVCRT_operator_delete(ptr
);
11661 locale__Locimp_dtor(this);
11663 MSVCRT_operator_delete(this);
11669 /* ?_New_Locimp@_Locimp@locale@std@@CAPAV123@ABV123@@Z */
11670 /* ?_New_Locimp@_Locimp@locale@std@@CAPEAV123@AEBV123@@Z */
11671 locale__Locimp
* __cdecl
locale__Locimp__New_Locimp(const locale__Locimp
*copy
)
11673 locale__Locimp
*ret
;
11675 TRACE("(%p)\n", copy
);
11677 ret
= MSVCRT_operator_new(sizeof(locale__Locimp
));
11679 ERR("Out of memory\n");
11680 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11683 return locale__Locimp_copy_ctor(ret
, copy
);
11686 /* ?_New_Locimp@_Locimp@locale@std@@CAPAV123@_N@Z */
11687 /* ?_New_Locimp@_Locimp@locale@std@@CAPEAV123@_N@Z */
11688 locale__Locimp
* __cdecl
locale__Locimp__New_Locimp_transparent(bool transparent
)
11690 locale__Locimp
*ret
;
11692 TRACE("(%x)\n", transparent
);
11694 ret
= MSVCRT_operator_new(sizeof(locale__Locimp
));
11696 ERR("Out of memory\n");
11697 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11700 return locale__Locimp_ctor_transparent(ret
, transparent
);
11703 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z */
11704 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPEAV123@PEAVfacet@23@_K@Z */
11705 void __cdecl
locale__Locimp__Locimp_Addfac(locale__Locimp
*locimp
, locale_facet
*facet
, size_t id
)
11709 TRACE("(%p %p %Iu)\n", locimp
, facet
, id
);
11711 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
11712 if(id
>= locimp
->facet_cnt
) {
11713 size_t new_size
= id
+1;
11714 locale_facet
**new_facetvec
;
11719 new_facetvec
= MSVCRT_operator_new(sizeof(locale_facet
*)*new_size
);
11720 if(!new_facetvec
) {
11721 _Lockit_dtor(&lock
);
11722 ERR("Out of memory\n");
11723 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11727 memset(new_facetvec
, 0, sizeof(locale_facet
*)*new_size
);
11728 memcpy(new_facetvec
, locimp
->facetvec
, sizeof(locale_facet
*)*locimp
->facet_cnt
);
11729 MSVCRT_operator_delete(locimp
->facetvec
);
11730 locimp
->facetvec
= new_facetvec
;
11731 locimp
->facet_cnt
= new_size
;
11734 if(locimp
->facetvec
[id
] && call_locale_facet__Decref(locimp
->facetvec
[id
]))
11735 call_locale_facet_vector_dtor(locimp
->facetvec
[id
], 1);
11737 locimp
->facetvec
[id
] = facet
;
11739 call_locale_facet__Incref(facet
);
11740 _Lockit_dtor(&lock
);
11743 /* ?_Addfac@_Locimp@locale@std@@AAEXPAVfacet@23@I@Z */
11744 /* ?_Addfac@_Locimp@locale@std@@AEAAXPEAVfacet@23@_K@Z */
11745 DEFINE_THISCALL_WRAPPER(locale__Locimp__Addfac
, 12)
11746 void __thiscall
locale__Locimp__Addfac(locale__Locimp
*this, locale_facet
*facet
, size_t id
)
11748 locale__Locimp__Locimp_Addfac(this, facet
, id
);
11751 /* ?_Clocptr_func@_Locimp@locale@std@@CAAAPAV123@XZ */
11752 /* ?_Clocptr_func@_Locimp@locale@std@@CAAEAPEAV123@XZ */
11753 locale__Locimp
** __cdecl
locale__Locimp__Clocptr_func(void)
11759 /* ?_Makeushloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
11760 /* ?_Makeushloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
11761 /* List of missing facets:
11762 * messages, money_get, money_put, moneypunct, moneypunct, time_get
11764 void __cdecl
locale__Locimp__Makeushloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
11766 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
11768 if(cat
& (1<<(ctype_short__Getcat(NULL
, NULL
)-1))) {
11769 ctype_wchar
*ctype
;
11772 ctype
= ctype_short_use_facet(loc
);
11774 ctype
= MSVCRT_operator_new(sizeof(ctype_wchar
));
11776 ERR("Out of memory\n");
11777 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11779 ctype_short_ctor_locinfo(ctype
, locinfo
, 0);
11781 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_short_id
));
11784 if(cat
& (1<<(num_get_short__Getcat(NULL
, NULL
)-1))) {
11788 numget
= num_get_short_use_facet(loc
);
11790 numget
= MSVCRT_operator_new(sizeof(num_get
));
11792 ERR("Out of memory\n");
11793 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11795 num_get_short_ctor_locinfo(numget
, locinfo
, 0);
11797 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_short_id
));
11800 if(cat
& (1<<(num_put_short__Getcat(NULL
, NULL
)-1))) {
11804 numput
= num_put_short_use_facet(loc
);
11806 numput
= MSVCRT_operator_new(sizeof(num_put
));
11808 ERR("Out of memory\n");
11809 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11811 num_put_short_ctor_locinfo(numput
, locinfo
, 0);
11813 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_short_id
));
11816 if(cat
& (1<<(numpunct_short__Getcat(NULL
, NULL
)-1))) {
11817 numpunct_wchar
*numpunct
;
11820 numpunct
= numpunct_short_use_facet(loc
);
11822 numpunct
= MSVCRT_operator_new(sizeof(numpunct_wchar
));
11824 ERR("Out of memory\n");
11825 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11827 numpunct_short_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
11829 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_short_id
));
11832 if(cat
& (1<<(collate_short__Getcat(NULL
, NULL
)-1))) {
11836 c
= collate_short_use_facet(loc
);
11838 c
= MSVCRT_operator_new(sizeof(collate
));
11840 ERR("Out of memory\n");
11841 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11843 collate_short_ctor_locinfo(c
, locinfo
, 0);
11845 locale__Locimp__Addfac(locimp
, &c
->facet
, locale_id_operator_size_t(&collate_short_id
));
11848 if(cat
& (1<<(time_put_short__Getcat(NULL
, NULL
)-1))) {
11852 t
= time_put_short_use_facet(loc
);
11854 t
= MSVCRT_operator_new(sizeof(time_put
));
11856 ERR("Out of memory\n");
11857 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11859 time_put_short_ctor_locinfo(t
, locinfo
, 0);
11861 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_put_short_id
));
11864 if(cat
& (1<<(codecvt_short__Getcat(NULL
, NULL
)-1))) {
11865 codecvt_wchar
*codecvt
;
11868 codecvt
= codecvt_short_use_facet(loc
);
11870 codecvt
= MSVCRT_operator_new(sizeof(codecvt_wchar
));
11872 ERR("Out of memory\n");
11873 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11875 codecvt_short_ctor_locinfo(codecvt
, locinfo
, 0);
11877 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_short_id
));
11881 /* ?_Makewloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
11882 /* ?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
11883 /* List of missing facets:
11884 * messages, money_get, money_put, moneypunct, moneypunct
11886 void __cdecl
locale__Locimp__Makewloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
11888 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
11890 if(cat
& (1<<(ctype_wchar__Getcat(NULL
, NULL
)-1))) {
11891 ctype_wchar
*ctype
;
11894 ctype
= ctype_wchar_use_facet(loc
);
11896 ctype
= MSVCRT_operator_new(sizeof(ctype_wchar
));
11898 ERR("Out of memory\n");
11899 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11901 ctype_wchar_ctor_locinfo(ctype
, locinfo
, 0);
11903 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_wchar_id
));
11906 if(cat
& (1<<(num_get_wchar__Getcat(NULL
, NULL
)-1))) {
11910 numget
= num_get_wchar_use_facet(loc
);
11912 numget
= MSVCRT_operator_new(sizeof(num_get
));
11914 ERR("Out of memory\n");
11915 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11917 num_get_wchar_ctor_locinfo(numget
, locinfo
, 0);
11919 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_wchar_id
));
11922 if(cat
& (1<<(num_put_wchar__Getcat(NULL
, NULL
)-1))) {
11926 numput
= num_put_wchar_use_facet(loc
);
11928 numput
= MSVCRT_operator_new(sizeof(num_put
));
11930 ERR("Out of memory\n");
11931 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11933 num_put_wchar_ctor_locinfo(numput
, locinfo
, 0);
11935 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_wchar_id
));
11938 if(cat
& (1<<(numpunct_wchar__Getcat(NULL
, NULL
)-1))) {
11939 numpunct_wchar
*numpunct
;
11942 numpunct
= numpunct_wchar_use_facet(loc
);
11944 numpunct
= MSVCRT_operator_new(sizeof(numpunct_wchar
));
11946 ERR("Out of memory\n");
11947 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11949 numpunct_wchar_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
11951 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_wchar_id
));
11954 if(cat
& (1<<(collate_wchar__Getcat(NULL
, NULL
)-1))) {
11958 c
= collate_wchar_use_facet(loc
);
11960 c
= MSVCRT_operator_new(sizeof(collate
));
11962 ERR("Out of memory\n");
11963 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11965 collate_wchar_ctor_locinfo(c
, locinfo
, 0);
11967 locale__Locimp__Addfac(locimp
, &c
->facet
, locale_id_operator_size_t(&collate_wchar_id
));
11970 if(cat
& (1<<(time_get_wchar__Getcat(NULL
, NULL
)-1))) {
11974 t
= time_get_wchar_use_facet(loc
);
11976 t
= MSVCRT_operator_new(sizeof(time_get_wchar
));
11978 ERR("Out of memory\n");
11979 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11981 time_get_wchar_ctor_locinfo(t
, locinfo
, 0);
11983 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_get_wchar_id
));
11986 if(cat
& (1<<(time_put_wchar__Getcat(NULL
, NULL
)-1))) {
11990 t
= time_put_wchar_use_facet(loc
);
11992 t
= MSVCRT_operator_new(sizeof(time_put
));
11994 ERR("Out of memory\n");
11995 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11997 time_put_wchar_ctor_locinfo(t
, locinfo
, 0);
11999 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_put_wchar_id
));
12002 if(cat
& (1<<(codecvt_wchar__Getcat(NULL
, NULL
)-1))) {
12003 codecvt_wchar
*codecvt
;
12006 codecvt
= codecvt_wchar_use_facet(loc
);
12008 codecvt
= MSVCRT_operator_new(sizeof(codecvt_wchar
));
12010 ERR("Out of memory\n");
12011 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12013 codecvt_wchar_ctor_locinfo(codecvt
, locinfo
, 0);
12015 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_wchar_id
));
12019 /* ?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
12020 /* ?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
12021 /* List of missing facets:
12022 * messages, money_get, money_put, moneypunct, moneypunct
12024 void __cdecl
locale__Locimp__Makexloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
12026 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
12028 if(cat
& (1<<(ctype_char__Getcat(NULL
, NULL
)-1))) {
12032 ctype
= ctype_char_use_facet(loc
);
12034 ctype
= MSVCRT_operator_new(sizeof(ctype_char
));
12036 ERR("Out of memory\n");
12037 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12039 ctype_char_ctor_locinfo(ctype
, locinfo
, 0);
12041 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_char_id
));
12044 if(cat
& (1<<(num_get_char__Getcat(NULL
, NULL
)-1))) {
12048 numget
= num_get_char_use_facet(loc
);
12050 numget
= MSVCRT_operator_new(sizeof(num_get
));
12052 ERR("Out of memory\n");
12053 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12055 num_get_char_ctor_locinfo(numget
, locinfo
, 0);
12057 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_char_id
));
12060 if(cat
& (1<<(num_put_char__Getcat(NULL
, NULL
)-1))) {
12064 numput
= num_put_char_use_facet(loc
);
12066 numput
= MSVCRT_operator_new(sizeof(num_put
));
12068 ERR("Out of memory\n");
12069 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12071 num_put_char_ctor_locinfo(numput
, locinfo
, 0);
12073 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_char_id
));
12076 if(cat
& (1<<(numpunct_char__Getcat(NULL
, NULL
)-1))) {
12077 numpunct_char
*numpunct
;
12080 numpunct
= numpunct_char_use_facet(loc
);
12082 numpunct
= MSVCRT_operator_new(sizeof(numpunct_char
));
12084 ERR("Out of memory\n");
12085 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12087 numpunct_char_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
12089 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_char_id
));
12092 if(cat
& (1<<(collate_char__Getcat(NULL
, NULL
)-1))) {
12096 c
= collate_char_use_facet(loc
);
12098 c
= MSVCRT_operator_new(sizeof(collate
));
12100 ERR("Out of memory\n");
12101 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12103 collate_char_ctor_locinfo(c
, locinfo
, 0);
12105 locale__Locimp__Addfac(locimp
, &c
->facet
, locale_id_operator_size_t(&collate_char_id
));
12108 if(cat
& (1<<(time_get_char__Getcat(NULL
, NULL
)-1))) {
12112 t
= time_get_char_use_facet(loc
);
12114 t
= MSVCRT_operator_new(sizeof(time_get_char
));
12116 ERR("Out of memory\n");
12117 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12119 time_get_char_ctor_locinfo(t
, locinfo
, 0);
12121 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_get_char_id
));
12124 if(cat
& (1<<(time_put_char__Getcat(NULL
, NULL
)-1))) {
12128 t
= time_put_char_use_facet(loc
);
12130 t
= MSVCRT_operator_new(sizeof(time_put
));
12132 ERR("Out of memory\n");
12133 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12135 time_put_char_ctor_locinfo(t
, locinfo
, 0);
12137 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_put_char_id
));
12140 if(cat
& (1<<(codecvt_char__Getcat(NULL
, NULL
)-1))) {
12141 codecvt_char
*codecvt
;
12144 codecvt
= codecvt_char_use_facet(loc
);
12146 codecvt
= MSVCRT_operator_new(sizeof(codecvt_char
));
12148 ERR("Out of memory\n");
12149 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12151 codecvt_char_ctor_locinfo(codecvt
, locinfo
, 0);
12153 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_char_id
));
12157 /* ?_Makeloc@_Locimp@locale@std@@CAPAV123@ABV_Locinfo@3@HPAV123@PBV23@@Z */
12158 /* ?_Makeloc@_Locimp@locale@std@@CAPEAV123@AEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
12159 locale__Locimp
* __cdecl
locale__Locimp__Makeloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
12161 TRACE("(%p %d %p %p)\n", locinfo
, cat
, locimp
, loc
);
12163 locale__Locimp__Makexloc(locinfo
, cat
, locimp
, loc
);
12164 locale__Locimp__Makewloc(locinfo
, cat
, locimp
, loc
);
12165 locale__Locimp__Makeushloc(locinfo
, cat
, locimp
, loc
);
12167 locimp
->catmask
|= cat
;
12168 locale_string_char_assign(&locimp
->name
, &locinfo
->newlocname
);
12172 /* ??0locale@std@@AAE@PAV_Locimp@01@@Z */
12173 /* ??0locale@std@@AEAA@PEAV_Locimp@01@@Z */
12174 DEFINE_THISCALL_WRAPPER(locale_ctor_locimp
, 8)
12175 locale
* __thiscall
locale_ctor_locimp(locale
*this, locale__Locimp
*locimp
)
12177 TRACE("(%p %p)\n", this, locimp
);
12178 /* Don't change locimp reference counter */
12179 this->ptr
= locimp
;
12183 /* ?_Init@locale@std@@CAPAV_Locimp@12@XZ */
12184 /* ?_Init@locale@std@@CAPEAV_Locimp@12@XZ */
12185 locale__Locimp
* __cdecl
locale__Init(void)
12191 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
12192 if(global_locale
) {
12193 _Lockit_dtor(&lock
);
12194 return global_locale
;
12197 global_locale
= MSVCRT_operator_new(sizeof(locale__Locimp
));
12198 if(!global_locale
) {
12199 _Lockit_dtor(&lock
);
12200 ERR("Out of memory\n");
12201 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12205 locale__Locimp_ctor(global_locale
);
12206 global_locale
->catmask
= (1<<(LC_MAX
+1))-1;
12207 locale_string_char_dtor(&global_locale
->name
);
12208 locale_string_char_ctor_cstr(&global_locale
->name
, "C");
12210 locale__Locimp__Clocptr
= global_locale
;
12211 global_locale
->facet
.refs
++;
12212 locale_ctor_locimp(&classic_locale
, locale__Locimp__Clocptr
);
12213 _Lockit_dtor(&lock
);
12215 return global_locale
;
12218 /* ?_Init@locale@std@@CAPAV_Locimp@12@_N@Z */
12219 /* ?_Init@locale@std@@CAPEAV_Locimp@12@_N@Z */
12220 locale__Locimp
* __cdecl
locale__Init_ref(bool inc_ref
)
12222 locale__Locimp
*ret
;
12225 TRACE("(%x)\n", inc_ref
);
12227 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
12228 if(inc_ref
&& global_locale
) {
12229 call_locale_facet__Incref(&global_locale
->facet
);
12230 _Lockit_dtor(&lock
);
12231 return global_locale
;
12234 ret
= locale__Init();
12235 _Lockit_dtor(&lock
);
12239 /* ?_Iscloc@locale@std@@QBE_NXZ */
12240 /* ?_Iscloc@locale@std@@QEBA_NXZ */
12241 DEFINE_THISCALL_WRAPPER(locale__Iscloc
, 4)
12242 bool __thiscall
locale__Iscloc(const locale
*this)
12244 TRACE("(%p)\n", this);
12245 return this->ptr
== locale__Locimp__Clocptr
;
12248 /* ??0locale@std@@QAE@ABV01@0H@Z */
12249 /* ??0locale@std@@QEAA@AEBV01@0H@Z */
12250 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_locale
, 16)
12251 locale
* __thiscall
locale_ctor_locale_locale(locale
*this, const locale
*loc
, const locale
*other
, category cat
)
12255 TRACE("(%p %p %p %d)\n", this, loc
, other
, cat
);
12257 this->ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
12259 ERR("Out of memory\n");
12260 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12262 locale__Locimp_copy_ctor(this->ptr
, loc
->ptr
);
12264 _Locinfo_ctor_cat_cstr(&locinfo
, loc
->ptr
->catmask
, locale_string_char_c_str(&loc
->ptr
->name
));
12265 _Locinfo__Addcats(&locinfo
, cat
& other
->ptr
->catmask
, locale_string_char_c_str(&other
->ptr
->name
));
12266 locale__Locimp__Makeloc(&locinfo
, cat
, this->ptr
, other
);
12267 _Locinfo_dtor(&locinfo
);
12272 /* ??0locale@std@@QAE@ABV01@@Z */
12273 /* ??0locale@std@@QEAA@AEBV01@@Z */
12274 DEFINE_THISCALL_WRAPPER(locale_copy_ctor
, 8)
12275 locale
* __thiscall
locale_copy_ctor(locale
*this, const locale
*copy
)
12277 TRACE("(%p %p)\n", this, copy
);
12278 this->ptr
= copy
->ptr
;
12279 call_locale_facet__Incref(&this->ptr
->facet
);
12283 /* ??0locale@std@@QAE@ABV01@PBDH@Z */
12284 /* ??0locale@std@@QEAA@AEBV01@PEBDH@Z */
12285 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_cstr
, 16)
12286 locale
* __thiscall
locale_ctor_locale_cstr(locale
*this, const locale
*loc
, const char *locname
, category cat
)
12290 TRACE("(%p %p %s %d)\n", this, loc
, locname
, cat
);
12292 _Locinfo_ctor_cat_cstr(&locinfo
, cat
, locname
);
12293 if(!memcmp(locale_string_char_c_str(&locinfo
.newlocname
), "*", 2)) {
12294 _Locinfo_dtor(&locinfo
);
12295 MSVCRT_operator_delete(this->ptr
);
12296 throw_exception(EXCEPTION_RUNTIME_ERROR
, "bad locale name");
12299 this->ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
12301 ERR("Out of memory\n");
12302 _Locinfo_dtor(&locinfo
);
12303 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12305 locale__Locimp_copy_ctor(this->ptr
, loc
->ptr
);
12307 locale__Locimp__Makeloc(&locinfo
, cat
, this->ptr
, NULL
);
12308 _Locinfo_dtor(&locinfo
);
12312 /* ??0locale@std@@QAE@PBDH@Z */
12313 /* ??0locale@std@@QEAA@PEBDH@Z */
12314 DEFINE_THISCALL_WRAPPER(locale_ctor_cstr
, 12)
12315 locale
* __thiscall
locale_ctor_cstr(locale
*this, const char *locname
, category cat
)
12319 TRACE("(%p %s %d)\n", this, locname
, cat
);
12321 this->ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
12323 ERR("Out of memory\n");
12324 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12326 locale__Locimp_ctor(this->ptr
);
12330 _Locinfo_ctor_cat_cstr(&locinfo
, cat
, locname
);
12331 if(!memcmp(locale_string_char_c_str(&locinfo
.newlocname
), "*", 2)) {
12332 _Locinfo_dtor(&locinfo
);
12333 MSVCRT_operator_delete(this->ptr
);
12334 throw_exception(EXCEPTION_RUNTIME_ERROR
, "bad locale name");
12337 locale__Locimp__Makeloc(&locinfo
, cat
, this->ptr
, NULL
);
12338 _Locinfo_dtor(&locinfo
);
12343 /* ??0locale@std@@QAE@W4_Uninitialized@1@@Z */
12344 /* ??0locale@std@@QEAA@W4_Uninitialized@1@@Z */
12345 DEFINE_THISCALL_WRAPPER(locale_ctor_uninitialized
, 8)
12346 locale
* __thiscall
locale_ctor_uninitialized(locale
*this, int uninitialized
)
12348 TRACE("(%p)\n", this);
12353 /* ??0locale@std@@QAE@XZ */
12354 /* ??0locale@std@@QEAA@XZ */
12355 DEFINE_THISCALL_WRAPPER(locale_ctor
, 4)
12356 locale
* __thiscall
locale_ctor(locale
*this)
12358 TRACE("(%p)\n", this);
12359 this->ptr
= locale__Init();
12360 call_locale_facet__Incref(&this->ptr
->facet
);
12364 /* ??1locale@std@@QAE@XZ */
12365 /* ??1locale@std@@QEAA@XZ */
12366 DEFINE_THISCALL_WRAPPER(locale_dtor
, 4)
12367 void __thiscall
locale_dtor(locale
*this)
12369 TRACE("(%p)\n", this);
12370 if(this->ptr
&& call_locale_facet__Decref(&this->ptr
->facet
))
12372 locale__Locimp_dtor(this->ptr
);
12373 MSVCRT_operator_delete(this->ptr
);
12377 /* ??4locale@std@@QAEAAV01@ABV01@@Z */
12378 /* ??4locale@std@@QEAAAEAV01@AEBV01@@Z */
12379 DEFINE_THISCALL_WRAPPER(locale_operator_assign
, 8)
12380 locale
* __thiscall
locale_operator_assign(locale
*this, const locale
*loc
)
12382 FIXME("(%p %p) stub\n", this, loc
);
12386 /* ??8locale@std@@QBE_NABV01@@Z */
12387 /* ??8locale@std@@QEBA_NAEBV01@@Z */
12388 DEFINE_THISCALL_WRAPPER(locale_operator_equal
, 8)
12389 bool __thiscall
locale_operator_equal(const locale
*this, const locale
*loc
)
12391 FIXME("(%p %p) stub\n", this, loc
);
12395 /* ??9locale@std@@QBE_NABV01@@Z */
12396 /* ??9locale@std@@QEBA_NAEBV01@@Z */
12397 DEFINE_THISCALL_WRAPPER(locale_operator_not_equal
, 8)
12398 bool __thiscall
locale_operator_not_equal(const locale
*this, locale
const *loc
)
12400 FIXME("(%p %p) stub\n", this, loc
);
12404 /* ?_Addfac@locale@std@@QAEAAV12@PAVfacet@12@II@Z */
12405 /* ?_Addfac@locale@std@@QEAAAEAV12@PEAVfacet@12@_K1@Z */
12406 DEFINE_THISCALL_WRAPPER(locale__Addfac
, 16)
12407 locale
* __thiscall
locale__Addfac(locale
*this, locale_facet
*facet
, size_t id
, size_t catmask
)
12409 TRACE("(%p %p %Iu %Iu)\n", this, facet
, id
, catmask
);
12411 if(this->ptr
->facet
.refs
> 1) {
12412 locale__Locimp
*new_ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
12414 ERR("Out of memory\n");
12415 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12418 locale__Locimp_copy_ctor(new_ptr
, this->ptr
);
12419 call_locale_facet__Decref(&this->ptr
->facet
);
12420 this->ptr
= new_ptr
;
12423 locale__Locimp__Addfac(this->ptr
, facet
, id
);
12426 locale_string_char_dtor(&this->ptr
->name
);
12427 locale_string_char_ctor_cstr(&this->ptr
->name
, "*");
12432 /* ?_Getfacet@locale@std@@QBEPBVfacet@12@I_N@Z */
12433 /* ?_Getfacet@locale@std@@QEBAPEBVfacet@12@_K_N@Z */
12434 DEFINE_THISCALL_WRAPPER(locale__Getfacet_bool
, 12)
12435 const locale_facet
* __thiscall
locale__Getfacet_bool(const locale
*this,
12436 size_t id
, bool allow_transparent
)
12440 TRACE("(%p %Iu)\n", this, id
);
12442 fac
= id
< this->ptr
->facet_cnt
? this->ptr
->facetvec
[id
] : NULL
;
12443 if(fac
|| !this->ptr
->transparent
|| !allow_transparent
)
12446 return id
< global_locale
->facet_cnt
? global_locale
->facetvec
[id
] : NULL
;
12449 /* ?_Getfacet@locale@std@@QBEPBVfacet@12@I@Z */
12450 /* ?_Getfacet@locale@std@@QEBAPEBVfacet@12@_K@Z */
12451 DEFINE_THISCALL_WRAPPER(locale__Getfacet
, 8)
12452 const locale_facet
* __thiscall
locale__Getfacet(const locale
*this, size_t id
)
12454 return locale__Getfacet_bool( this, id
, TRUE
);
12457 /* ?_Getgloballocale@locale@std@@CAPAV_Locimp@12@XZ */
12458 /* ?_Getgloballocale@locale@std@@CAPEAV_Locimp@12@XZ */
12459 locale__Locimp
* __cdecl
locale__Getgloballocale(void)
12462 return global_locale
;
12465 /* ?_Setgloballocale@locale@std@@CAXPAX@Z */
12466 /* ?_Setgloballocale@locale@std@@CAXPEAX@Z */
12467 void __cdecl
locale__Setgloballocale(void *locimp
)
12469 TRACE("(%p)\n", locimp
);
12470 global_locale
= locimp
;
12473 /* ?classic@locale@std@@SAABV12@XZ */
12474 /* ?classic@locale@std@@SAAEBV12@XZ */
12475 const locale
* __cdecl
locale_classic(void)
12479 return &classic_locale
;
12482 /* ?empty@locale@std@@SA?AV12@XZ */
12483 locale
* __cdecl
locale_empty(locale
*ret
)
12489 ret
->ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
12491 ERR("Out of memory\n");
12492 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12494 locale__Locimp_ctor_transparent(ret
->ptr
, TRUE
);
12498 /* ?global@locale@std@@SA?AV12@ABV12@@Z */
12499 /* ?global@locale@std@@SA?AV12@AEBV12@@Z */
12500 locale
* __cdecl
locale_global(locale
*ret
, const locale
*loc
)
12505 TRACE("(%p %p)\n", loc
, ret
);
12507 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
12510 if(loc
->ptr
!= global_locale
) {
12511 call_locale_facet__Decref(&global_locale
->facet
);
12512 global_locale
= loc
->ptr
;
12513 call_locale_facet__Incref(&global_locale
->facet
);
12515 for(i
=LC_ALL
+1; i
<=LC_MAX
; i
++) {
12516 if((global_locale
->catmask
& (1<<(i
-1))) == 0)
12518 setlocale(i
, locale_string_char_c_str(&global_locale
->name
));
12521 _Lockit_dtor(&lock
);
12525 #if _MSVCP_VER < 100
12527 /* ?_Getname@_Locinfo@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
12528 /* ?_Getname@_Locinfo@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
12529 DEFINE_THISCALL_WRAPPER(_Locinfo__Getname
, 8)
12530 basic_string_char
* __thiscall
_Locinfo__Getname(const _Locinfo
*this, basic_string_char
*ret
)
12532 TRACE("(%p)\n", this);
12534 MSVCP_basic_string_char_copy_ctor(ret
, &this->newlocname
);
12538 /* ?name@locale@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
12539 /* ?name@locale@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
12540 DEFINE_THISCALL_WRAPPER(locale_name
, 8)
12541 basic_string_char
* __thiscall
locale_name(const locale
*this, basic_string_char
*ret
)
12543 TRACE( "(%p)\n", this);
12544 MSVCP_basic_string_char_copy_ctor(ret
, &this->ptr
->name
);
12550 /* ?_Getname@_Locinfo@std@@QBEPBDXZ */
12551 /* ?_Getname@_Locinfo@std@@QEBAPEBDXZ */
12552 DEFINE_THISCALL_WRAPPER(_Locinfo__Getname
, 4)
12553 const char * __thiscall
_Locinfo__Getname( const _Locinfo
*this )
12555 return locale_string_char_c_str( &this->newlocname
);
12558 #endif /* _MSVCP_VER < 100 */
12561 wctrans_t __cdecl
wctrans(const char *property
)
12563 static const char str_tolower
[] = "tolower";
12564 static const char str_toupper
[] = "toupper";
12566 if(!strcmp(property
, str_tolower
))
12568 if(!strcmp(property
, str_toupper
))
12574 wint_t __cdecl
towctrans(wint_t c
, wctrans_t category
)
12577 return towupper(c
);
12578 return towlower(c
);
12581 #if _MSVCP_VER <= 71
12583 wint_t __cdecl
btowc(int c
)
12589 if (c
== EOF
|| _Mbrtowc( &ret
, &ch
, 1, &state
, NULL
) != 1) return WEOF
;
12594 size_t __cdecl
mbrlen(const char *str
, size_t n
, mbstate_t *state
)
12596 static int local_state
;
12598 if (!state
) state
= &local_state
;
12599 return _Mbrtowc( NULL
, str
, n
, state
, NULL
);
12603 size_t __cdecl
mbrtowc(wchar_t *dst
, const char *str
, size_t n
, mbstate_t *state
)
12605 static int local_state
;
12607 if (!state
) state
= &local_state
;
12608 return _Mbrtowc( dst
, str
, n
, state
, NULL
);
12612 size_t __cdecl
mbsrtowcs(wchar_t *dst
, const char **pstr
, size_t n
, mbstate_t *state
)
12614 static int local_state
;
12620 if (!state
) state
= &local_state
;
12622 while (!dst
|| n
> ret
)
12624 int len
= _Mbrtowc( &wc
, src
, 2, state
, NULL
);
12625 if (len
< 0) return -1;
12627 if (dst
) dst
[ret
] = wc
;
12636 int __cdecl
wctob(wint_t wc
)
12638 char ret
[MB_LEN_MAX
];
12640 if (wc
== WEOF
|| _Wcrtomb( ret
, wc
, NULL
, NULL
) != 1) return EOF
;
12645 size_t __cdecl
wcrtomb(char *dst
, wchar_t wc
, mbstate_t *state
)
12647 return _Wcrtomb( dst
, wc
, state
, NULL
);
12651 size_t __cdecl
wcsrtombs(char *dst
, const wchar_t **pstr
, size_t n
, mbstate_t *state
)
12653 const wchar_t *src
;
12654 char buffer
[MB_LEN_MAX
];
12659 while (!dst
|| n
> ret
)
12661 int len
= _Wcrtomb( buffer
, *src
, state
, NULL
);
12662 if (len
<= 0) return -1;
12663 if (n
< ret
+ len
) break;
12664 memcpy( dst
+ ret
, buffer
, len
);
12666 if (!buffer
[0]) break;
12673 int __cdecl
_To_byte(const wchar_t *src
, char *dst
)
12675 TRACE("(%s %p)\n", debugstr_w(src
), dst
);
12676 return WideCharToMultiByte(CP_ACP
, 0, src
, -1, dst
, MAX_PATH
, NULL
, NULL
);
12679 int __cdecl
_To_wide(const char *src
, wchar_t *dst
)
12681 TRACE("(%s %p)\n", debugstr_a(src
), dst
);
12682 return MultiByteToWideChar(CP_ACP
, 0, src
, -1, dst
, MAX_PATH
);
12685 size_t __cdecl
_Strxfrm(char *dest
, char *dest_end
,
12686 const char *src
, const char *src_end
, _Collvec
*coll
)
12688 size_t dest_len
= dest_end
- dest
;
12689 size_t src_len
= src_end
- src
;
12695 TRACE("(%p %p %p %p %p)\n", dest
, dest_end
, src
, src_end
, coll
);
12697 if (coll
) cv
= *coll
;
12700 #if _MSVCP_VER < 110
12703 lcid
= LocaleNameToLCID(cv
.lc_name
, 0);
12706 if (!lcid
&& !cv
.page
)
12708 if (src_len
> dest_len
) return src_len
;
12709 memcpy(dest
, src
, src_len
);
12713 len
= MultiByteToWideChar(cv
.page
, MB_ERR_INVALID_CHARS
, src
, src_len
, NULL
, 0);
12714 if (!len
) return INT_MAX
;
12715 buf
= heap_alloc(len
* sizeof(WCHAR
));
12716 if (!buf
) return INT_MAX
;
12717 MultiByteToWideChar(cv
.page
, MB_ERR_INVALID_CHARS
, src
, src_len
, buf
, len
);
12719 len
= LCMapStringW(lcid
, LCMAP_SORTKEY
, buf
, len
, NULL
, 0);
12720 if (len
<= dest_len
)
12721 LCMapStringW(lcid
, LCMAP_SORTKEY
, buf
, len
, (WCHAR
*)dest
, dest_len
);
12726 size_t __cdecl
_Wcsxfrm(wchar_t *dest
, wchar_t *dest_end
,
12727 const wchar_t *src
, const wchar_t *src_end
, _Collvec
*coll
)
12729 size_t dest_len
= dest_end
- dest
;
12730 size_t src_len
= src_end
- src
;
12735 TRACE("(%p %p %p %p %p)\n", dest
, dest_end
, src
, src_end
, coll
);
12737 if (coll
) cv
= *coll
;
12740 #if _MSVCP_VER < 110
12743 lcid
= LocaleNameToLCID(cv
.lc_name
, 0);
12748 if (src_len
> dest_len
) return src_len
;
12749 memcpy(dest
, src
, src_len
* sizeof(wchar_t));
12753 len
= LCMapStringW(lcid
, LCMAP_SORTKEY
, src
, src_len
, NULL
, 0);
12754 if (!len
) return INT_MAX
;
12755 if (len
> dest_len
) return len
;
12757 LCMapStringW(lcid
, LCMAP_SORTKEY
, src
, src_len
, dest
, dest_len
);
12758 for (i
= len
- 1; i
>= 0; i
--)
12759 dest
[i
] = ((BYTE
*)dest
)[i
];
12763 DEFINE_RTTI_DATA0(_Facet_base
, 0, ".?AV_Facet_base@std@@")
12764 DEFINE_RTTI_DATA0(locale_facet
, 0, ".?AVfacet@locale@std@@")
12765 DEFINE_RTTI_DATA1(locale__Locimp
, 0, &locale_facet_rtti_base_descriptor
, ".?AV_Locimp@locale@std@@")
12766 DEFINE_RTTI_DATA1(collate_char
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@D@std@@")
12767 DEFINE_RTTI_DATA1(collate_wchar
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@_W@std@@")
12768 DEFINE_RTTI_DATA1(collate_short
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@G@std@@")
12769 DEFINE_RTTI_DATA1(ctype_base
, 0, &locale_facet_rtti_base_descriptor
, ".?AUctype_base@std@@")
12770 DEFINE_RTTI_DATA2(ctype_char
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@D@std@@")
12771 DEFINE_RTTI_DATA2(ctype_wchar
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@_W@std@@")
12772 DEFINE_RTTI_DATA2(ctype_short
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@G@std@@")
12773 DEFINE_RTTI_DATA1(codecvt_base
, 0, &locale_facet_rtti_base_descriptor
, ".?AVcodecvt_base@std@@")
12774 #if _MSVCP_VER >= 140
12775 DEFINE_RTTI_DATA2(codecvt_char
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@DDU_Mbstatet@@@std@@")
12776 DEFINE_RTTI_DATA2(codecvt_wchar
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@_WDU_Mbstatet@@@std@@")
12777 DEFINE_RTTI_DATA2(codecvt_short
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@GDU_Mbstatet@@@std@@")
12779 DEFINE_RTTI_DATA2(codecvt_char
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@DDH@std@@")
12780 DEFINE_RTTI_DATA2(codecvt_wchar
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@_WDH@std@@")
12781 DEFINE_RTTI_DATA2(codecvt_short
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@GDH@std@@")
12783 DEFINE_RTTI_DATA1(numpunct_char
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@D@std@@")
12784 DEFINE_RTTI_DATA1(numpunct_wchar
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@_W@std@@")
12785 DEFINE_RTTI_DATA1(numpunct_short
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@G@std@@")
12786 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@@")
12787 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@@")
12788 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@@")
12789 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@@")
12790 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@@")
12791 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@@")
12792 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@@")
12793 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@@")
12794 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@@")
12795 DEFINE_RTTI_DATA1(time_base
, 0, &locale_facet_rtti_base_descriptor
, ".?AUtime_base@std@@")
12796 DEFINE_RTTI_DATA2(time_get_char
, 0, &time_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@")
12797 DEFINE_RTTI_DATA2(time_get_wchar
, 0, &time_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@")
12799 __ASM_BLOCK_BEGIN(locale_vtables
)
12800 __ASM_VTABLE(_Facet_base
,
12801 VTABLE_ADD_FUNC(locale_facet_vector_dtor
)
12802 VTABLE_ADD_FUNC(locale_facet__Incref
)
12803 VTABLE_ADD_FUNC(locale_facet__Incref
)
12805 __ASM_VTABLE(locale_facet
,
12806 VTABLE_ADD_FUNC(locale_facet_vector_dtor
)
12807 #if _MSVCP_VER >= 110
12808 VTABLE_ADD_FUNC(locale_facet__Incref
)
12809 VTABLE_ADD_FUNC(locale_facet__Decref
)
12812 __ASM_VTABLE(locale__Locimp
,
12813 VTABLE_ADD_FUNC(locale__Locimp_vector_dtor
)
12814 #if _MSVCP_VER >= 110
12815 VTABLE_ADD_FUNC(locale_facet__Incref
)
12816 VTABLE_ADD_FUNC(locale_facet__Decref
)
12819 __ASM_VTABLE(collate_char
,
12820 VTABLE_ADD_FUNC(collate_char_vector_dtor
)
12821 #if _MSVCP_VER >= 110
12822 VTABLE_ADD_FUNC(locale_facet__Incref
)
12823 VTABLE_ADD_FUNC(locale_facet__Decref
)
12825 VTABLE_ADD_FUNC(collate_char_do_compare
)
12826 VTABLE_ADD_FUNC(collate_char_do_transform
)
12827 VTABLE_ADD_FUNC(collate_char_do_hash
));
12828 __ASM_VTABLE(collate_wchar
,
12829 VTABLE_ADD_FUNC(collate_wchar_vector_dtor
)
12830 #if _MSVCP_VER >= 110
12831 VTABLE_ADD_FUNC(locale_facet__Incref
)
12832 VTABLE_ADD_FUNC(locale_facet__Decref
)
12834 VTABLE_ADD_FUNC(collate_wchar_do_compare
)
12835 VTABLE_ADD_FUNC(collate_wchar_do_transform
)
12836 VTABLE_ADD_FUNC(collate_wchar_do_hash
));
12837 __ASM_VTABLE(collate_short
,
12838 VTABLE_ADD_FUNC(collate_wchar_vector_dtor
)
12839 #if _MSVCP_VER >= 110
12840 VTABLE_ADD_FUNC(locale_facet__Incref
)
12841 VTABLE_ADD_FUNC(locale_facet__Decref
)
12843 VTABLE_ADD_FUNC(collate_wchar_do_compare
)
12844 VTABLE_ADD_FUNC(collate_wchar_do_transform
)
12845 VTABLE_ADD_FUNC(collate_wchar_do_hash
));
12846 __ASM_VTABLE(ctype_base
,
12847 VTABLE_ADD_FUNC(ctype_base_vector_dtor
)
12848 #if _MSVCP_VER >= 110
12849 VTABLE_ADD_FUNC(locale_facet__Incref
)
12850 VTABLE_ADD_FUNC(locale_facet__Decref
)
12853 __ASM_VTABLE(ctype_char
,
12854 VTABLE_ADD_FUNC(ctype_char_vector_dtor
)
12855 #if _MSVCP_VER >= 110
12856 VTABLE_ADD_FUNC(locale_facet__Incref
)
12857 VTABLE_ADD_FUNC(locale_facet__Decref
)
12859 VTABLE_ADD_FUNC(ctype_char_do_tolower
)
12860 VTABLE_ADD_FUNC(ctype_char_do_tolower_ch
)
12861 VTABLE_ADD_FUNC(ctype_char_do_toupper
)
12862 VTABLE_ADD_FUNC(ctype_char_do_toupper_ch
)
12863 VTABLE_ADD_FUNC(ctype_char_do_widen
)
12864 VTABLE_ADD_FUNC(ctype_char_do_widen_ch
)
12865 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
12866 VTABLE_ADD_FUNC(ctype_char__Do_widen_s
)
12867 VTABLE_ADD_FUNC(ctype_char_do_narrow
)
12868 VTABLE_ADD_FUNC(ctype_char_do_narrow_ch
)
12869 VTABLE_ADD_FUNC(ctype_char__Do_narrow_s
)
12871 VTABLE_ADD_FUNC(ctype_char_do_narrow
)
12872 VTABLE_ADD_FUNC(ctype_char_do_narrow_ch
)
12875 __ASM_VTABLE(ctype_wchar
,
12876 VTABLE_ADD_FUNC(ctype_wchar_vector_dtor
)
12877 #if _MSVCP_VER >= 110
12878 VTABLE_ADD_FUNC(locale_facet__Incref
)
12879 VTABLE_ADD_FUNC(locale_facet__Decref
)
12881 VTABLE_ADD_FUNC(ctype_wchar_do_is
)
12882 VTABLE_ADD_FUNC(ctype_wchar_do_is_ch
)
12883 VTABLE_ADD_FUNC(ctype_wchar_do_scan_is
)
12884 VTABLE_ADD_FUNC(ctype_wchar_do_scan_not
)
12885 VTABLE_ADD_FUNC(ctype_wchar_do_tolower
)
12886 VTABLE_ADD_FUNC(ctype_wchar_do_tolower_ch
)
12887 VTABLE_ADD_FUNC(ctype_wchar_do_toupper
)
12888 VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch
)
12889 VTABLE_ADD_FUNC(ctype_wchar_do_widen
)
12890 VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch
)
12891 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
12892 VTABLE_ADD_FUNC(ctype_wchar__Do_widen_s
)
12893 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
12894 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
)
12895 VTABLE_ADD_FUNC(ctype_wchar__Do_narrow_s
)
12897 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
12898 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
)
12901 __ASM_VTABLE(ctype_short
,
12902 VTABLE_ADD_FUNC(ctype_wchar_vector_dtor
)
12903 #if _MSVCP_VER >= 110
12904 VTABLE_ADD_FUNC(locale_facet__Incref
)
12905 VTABLE_ADD_FUNC(locale_facet__Decref
)
12907 VTABLE_ADD_FUNC(ctype_wchar_do_is
)
12908 VTABLE_ADD_FUNC(ctype_wchar_do_is_ch
)
12909 VTABLE_ADD_FUNC(ctype_wchar_do_scan_is
)
12910 VTABLE_ADD_FUNC(ctype_wchar_do_scan_not
)
12911 VTABLE_ADD_FUNC(ctype_wchar_do_tolower
)
12912 VTABLE_ADD_FUNC(ctype_wchar_do_tolower_ch
)
12913 VTABLE_ADD_FUNC(ctype_wchar_do_toupper
)
12914 VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch
)
12915 VTABLE_ADD_FUNC(ctype_wchar_do_widen
)
12916 VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch
)
12917 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
12918 VTABLE_ADD_FUNC(ctype_wchar__Do_widen_s
)
12919 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
12920 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
)
12921 VTABLE_ADD_FUNC(ctype_wchar__Do_narrow_s
)
12923 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
12924 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
)
12927 __ASM_VTABLE(codecvt_base
,
12928 VTABLE_ADD_FUNC(codecvt_base_vector_dtor
)
12929 #if _MSVCP_VER >= 110
12930 VTABLE_ADD_FUNC(locale_facet__Incref
)
12931 VTABLE_ADD_FUNC(locale_facet__Decref
)
12933 VTABLE_ADD_FUNC(codecvt_base_do_always_noconv
)
12934 VTABLE_ADD_FUNC(codecvt_base_do_max_length
)
12935 VTABLE_ADD_FUNC(codecvt_base_do_encoding
));
12936 __ASM_VTABLE(codecvt_char
,
12937 VTABLE_ADD_FUNC(codecvt_char_vector_dtor
)
12938 #if _MSVCP_VER >= 110
12939 VTABLE_ADD_FUNC(locale_facet__Incref
)
12940 VTABLE_ADD_FUNC(locale_facet__Decref
)
12941 VTABLE_ADD_FUNC(codecvt_char_do_always_noconv
)
12943 VTABLE_ADD_FUNC(codecvt_base_do_always_noconv
)
12945 VTABLE_ADD_FUNC(codecvt_base_do_max_length
)
12946 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
12947 VTABLE_ADD_FUNC(codecvt_char_do_in
)
12948 VTABLE_ADD_FUNC(codecvt_char_do_out
)
12949 VTABLE_ADD_FUNC(codecvt_char_do_unshift
)
12950 VTABLE_ADD_FUNC(codecvt_char_do_length
));
12951 __ASM_VTABLE(codecvt_wchar
,
12952 VTABLE_ADD_FUNC(codecvt_wchar_vector_dtor
)
12953 #if _MSVCP_VER >= 110
12954 VTABLE_ADD_FUNC(locale_facet__Incref
)
12955 VTABLE_ADD_FUNC(locale_facet__Decref
)
12957 VTABLE_ADD_FUNC(codecvt_wchar_do_always_noconv
)
12958 VTABLE_ADD_FUNC(codecvt_wchar_do_max_length
)
12959 #if _MSVCP_VER >= 90 && _MSVCP_VER <= 100
12960 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
12962 VTABLE_ADD_FUNC(codecvt_wchar_do_encoding
)
12964 VTABLE_ADD_FUNC(codecvt_wchar_do_in
)
12965 VTABLE_ADD_FUNC(codecvt_wchar_do_out
)
12966 VTABLE_ADD_FUNC(codecvt_wchar_do_unshift
)
12967 VTABLE_ADD_FUNC(codecvt_wchar_do_length
));
12968 __ASM_VTABLE(codecvt_short
,
12969 VTABLE_ADD_FUNC(codecvt_wchar_vector_dtor
)
12970 #if _MSVCP_VER >= 110
12971 VTABLE_ADD_FUNC(locale_facet__Incref
)
12972 VTABLE_ADD_FUNC(locale_facet__Decref
)
12974 VTABLE_ADD_FUNC(codecvt_wchar_do_always_noconv
)
12975 VTABLE_ADD_FUNC(codecvt_wchar_do_max_length
)
12976 #if _MSVCP_VER >= 90 && _MSVCP_VER <= 100
12977 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
12979 VTABLE_ADD_FUNC(codecvt_wchar_do_encoding
)
12981 VTABLE_ADD_FUNC(codecvt_wchar_do_in
)
12982 VTABLE_ADD_FUNC(codecvt_wchar_do_out
)
12983 VTABLE_ADD_FUNC(codecvt_wchar_do_unshift
)
12984 VTABLE_ADD_FUNC(codecvt_wchar_do_length
));
12985 __ASM_VTABLE(numpunct_char
,
12986 VTABLE_ADD_FUNC(numpunct_char_vector_dtor
)
12987 #if _MSVCP_VER >= 110
12988 VTABLE_ADD_FUNC(locale_facet__Incref
)
12989 VTABLE_ADD_FUNC(locale_facet__Decref
)
12991 VTABLE_ADD_FUNC(numpunct_char_do_decimal_point
)
12992 VTABLE_ADD_FUNC(numpunct_char_do_thousands_sep
)
12993 VTABLE_ADD_FUNC(numpunct_char_do_grouping
)
12994 VTABLE_ADD_FUNC(numpunct_char_do_falsename
)
12995 VTABLE_ADD_FUNC(numpunct_char_do_truename
));
12996 __ASM_VTABLE(numpunct_wchar
,
12997 VTABLE_ADD_FUNC(numpunct_wchar_vector_dtor
)
12998 #if _MSVCP_VER >= 110
12999 VTABLE_ADD_FUNC(locale_facet__Incref
)
13000 VTABLE_ADD_FUNC(locale_facet__Decref
)
13002 VTABLE_ADD_FUNC(numpunct_wchar_do_decimal_point
)
13003 VTABLE_ADD_FUNC(numpunct_wchar_do_thousands_sep
)
13004 VTABLE_ADD_FUNC(numpunct_wchar_do_grouping
)
13005 VTABLE_ADD_FUNC(numpunct_wchar_do_falsename
)
13006 VTABLE_ADD_FUNC(numpunct_wchar_do_truename
));
13007 __ASM_VTABLE(numpunct_short
,
13008 VTABLE_ADD_FUNC(numpunct_wchar_vector_dtor
)
13009 #if _MSVCP_VER >= 110
13010 VTABLE_ADD_FUNC(locale_facet__Incref
)
13011 VTABLE_ADD_FUNC(locale_facet__Decref
)
13013 VTABLE_ADD_FUNC(numpunct_wchar_do_decimal_point
)
13014 VTABLE_ADD_FUNC(numpunct_wchar_do_thousands_sep
)
13015 VTABLE_ADD_FUNC(numpunct_wchar_do_grouping
)
13016 VTABLE_ADD_FUNC(numpunct_wchar_do_falsename
)
13017 VTABLE_ADD_FUNC(numpunct_wchar_do_truename
));
13018 __ASM_VTABLE(num_get_char
,
13019 VTABLE_ADD_FUNC(num_get_char_vector_dtor
)
13020 #if _MSVCP_VER >= 110
13021 VTABLE_ADD_FUNC(locale_facet__Incref
)
13022 VTABLE_ADD_FUNC(locale_facet__Decref
)
13024 VTABLE_ADD_FUNC(num_get_char_do_get_void
)
13025 VTABLE_ADD_FUNC(num_get_char_do_get_double
)
13026 VTABLE_ADD_FUNC(num_get_char_do_get_double
)
13027 VTABLE_ADD_FUNC(num_get_char_do_get_float
)
13028 VTABLE_ADD_FUNC(num_get_char_do_get_uint64
)
13029 VTABLE_ADD_FUNC(num_get_char_do_get_int64
)
13030 VTABLE_ADD_FUNC(num_get_char_do_get_ulong
)
13031 VTABLE_ADD_FUNC(num_get_char_do_get_long
)
13032 VTABLE_ADD_FUNC(num_get_char_do_get_uint
)
13033 VTABLE_ADD_FUNC(num_get_char_do_get_ushort
)
13034 VTABLE_ADD_FUNC(num_get_char_do_get_bool
));
13035 __ASM_VTABLE(num_get_short
,
13036 VTABLE_ADD_FUNC(num_get_wchar_vector_dtor
)
13037 #if _MSVCP_VER >= 110
13038 VTABLE_ADD_FUNC(locale_facet__Incref
)
13039 VTABLE_ADD_FUNC(locale_facet__Decref
)
13041 VTABLE_ADD_FUNC(num_get_short_do_get_void
)
13042 VTABLE_ADD_FUNC(num_get_short_do_get_double
)
13043 VTABLE_ADD_FUNC(num_get_short_do_get_double
)
13044 VTABLE_ADD_FUNC(num_get_short_do_get_float
)
13045 VTABLE_ADD_FUNC(num_get_short_do_get_uint64
)
13046 VTABLE_ADD_FUNC(num_get_short_do_get_int64
)
13047 VTABLE_ADD_FUNC(num_get_short_do_get_ulong
)
13048 VTABLE_ADD_FUNC(num_get_short_do_get_long
)
13049 VTABLE_ADD_FUNC(num_get_short_do_get_uint
)
13050 VTABLE_ADD_FUNC(num_get_short_do_get_ushort
)
13051 VTABLE_ADD_FUNC(num_get_short_do_get_bool
));
13052 __ASM_VTABLE(num_get_wchar
,
13053 VTABLE_ADD_FUNC(num_get_wchar_vector_dtor
)
13054 #if _MSVCP_VER >= 110
13055 VTABLE_ADD_FUNC(locale_facet__Incref
)
13056 VTABLE_ADD_FUNC(locale_facet__Decref
)
13058 VTABLE_ADD_FUNC(num_get_wchar_do_get_void
)
13059 VTABLE_ADD_FUNC(num_get_wchar_do_get_double
)
13060 VTABLE_ADD_FUNC(num_get_wchar_do_get_double
)
13061 VTABLE_ADD_FUNC(num_get_wchar_do_get_float
)
13062 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint64
)
13063 VTABLE_ADD_FUNC(num_get_wchar_do_get_int64
)
13064 VTABLE_ADD_FUNC(num_get_wchar_do_get_ulong
)
13065 VTABLE_ADD_FUNC(num_get_wchar_do_get_long
)
13066 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint
)
13067 VTABLE_ADD_FUNC(num_get_wchar_do_get_ushort
)
13068 VTABLE_ADD_FUNC(num_get_wchar_do_get_bool
));
13069 __ASM_VTABLE(num_put_char
,
13070 VTABLE_ADD_FUNC(num_put_char_vector_dtor
)
13071 #if _MSVCP_VER >= 110
13072 VTABLE_ADD_FUNC(locale_facet__Incref
)
13073 VTABLE_ADD_FUNC(locale_facet__Decref
)
13075 VTABLE_ADD_FUNC(num_put_char_do_put_ptr
)
13076 VTABLE_ADD_FUNC(num_put_char_do_put_double
)
13077 VTABLE_ADD_FUNC(num_put_char_do_put_double
)
13078 VTABLE_ADD_FUNC(num_put_char_do_put_uint64
)
13079 VTABLE_ADD_FUNC(num_put_char_do_put_int64
)
13080 VTABLE_ADD_FUNC(num_put_char_do_put_ulong
)
13081 VTABLE_ADD_FUNC(num_put_char_do_put_long
)
13082 VTABLE_ADD_FUNC(num_put_char_do_put_bool
));
13083 __ASM_VTABLE(num_put_wchar
,
13084 VTABLE_ADD_FUNC(num_put_wchar_vector_dtor
)
13085 #if _MSVCP_VER >= 110
13086 VTABLE_ADD_FUNC(locale_facet__Incref
)
13087 VTABLE_ADD_FUNC(locale_facet__Decref
)
13089 VTABLE_ADD_FUNC(num_put_wchar_do_put_ptr
)
13090 VTABLE_ADD_FUNC(num_put_wchar_do_put_double
)
13091 VTABLE_ADD_FUNC(num_put_wchar_do_put_double
)
13092 VTABLE_ADD_FUNC(num_put_wchar_do_put_uint64
)
13093 VTABLE_ADD_FUNC(num_put_wchar_do_put_int64
)
13094 VTABLE_ADD_FUNC(num_put_wchar_do_put_ulong
)
13095 VTABLE_ADD_FUNC(num_put_wchar_do_put_long
)
13096 VTABLE_ADD_FUNC(num_put_wchar_do_put_bool
));
13097 __ASM_VTABLE(num_put_short
,
13098 VTABLE_ADD_FUNC(num_put_wchar_vector_dtor
)
13099 #if _MSVCP_VER >= 110
13100 VTABLE_ADD_FUNC(locale_facet__Incref
)
13101 VTABLE_ADD_FUNC(locale_facet__Decref
)
13103 VTABLE_ADD_FUNC(num_put_short_do_put_ptr
)
13104 VTABLE_ADD_FUNC(num_put_short_do_put_double
)
13105 VTABLE_ADD_FUNC(num_put_short_do_put_double
)
13106 VTABLE_ADD_FUNC(num_put_short_do_put_uint64
)
13107 VTABLE_ADD_FUNC(num_put_short_do_put_int64
)
13108 VTABLE_ADD_FUNC(num_put_short_do_put_ulong
)
13109 VTABLE_ADD_FUNC(num_put_short_do_put_long
)
13110 VTABLE_ADD_FUNC(num_put_short_do_put_bool
));
13111 __ASM_VTABLE(time_put_char
,
13112 VTABLE_ADD_FUNC(time_put_char_vector_dtor
)
13113 #if _MSVCP_VER >= 110
13114 VTABLE_ADD_FUNC(locale_facet__Incref
)
13115 VTABLE_ADD_FUNC(locale_facet__Decref
)
13117 VTABLE_ADD_FUNC(time_put_char_do_put
));
13118 __ASM_VTABLE(time_put_wchar
,
13119 VTABLE_ADD_FUNC(time_put_wchar_vector_dtor
)
13120 #if _MSVCP_VER >= 110
13121 VTABLE_ADD_FUNC(locale_facet__Incref
)
13122 VTABLE_ADD_FUNC(locale_facet__Decref
)
13124 VTABLE_ADD_FUNC(time_put_wchar_do_put
));
13125 __ASM_VTABLE(time_put_short
,
13126 VTABLE_ADD_FUNC(time_put_wchar_vector_dtor
)
13127 #if _MSVCP_VER >= 110
13128 VTABLE_ADD_FUNC(locale_facet__Incref
)
13129 VTABLE_ADD_FUNC(locale_facet__Decref
)
13131 VTABLE_ADD_FUNC(time_put_wchar_do_put
));
13132 __ASM_VTABLE(time_get_char
,
13133 VTABLE_ADD_FUNC(time_get_char_vector_dtor
)
13134 #if _MSVCP_VER >= 110
13135 VTABLE_ADD_FUNC(locale_facet__Incref
)
13136 VTABLE_ADD_FUNC(locale_facet__Decref
)
13138 VTABLE_ADD_FUNC(time_get_char_do_date_order
)
13139 VTABLE_ADD_FUNC(time_get_char_do_get_time
)
13140 VTABLE_ADD_FUNC(time_get_char_do_get_date
)
13141 VTABLE_ADD_FUNC(time_get_char_do_get_weekday
)
13142 VTABLE_ADD_FUNC(time_get_char_do_get_monthname
)
13143 VTABLE_ADD_FUNC(time_get_char_do_get_year
)
13144 #if _MSVCP_VER >= 100
13145 VTABLE_ADD_FUNC(time_get_char_do_get
)
13148 __ASM_VTABLE(time_get_wchar
,
13149 VTABLE_ADD_FUNC(time_get_wchar_vector_dtor
)
13150 #if _MSVCP_VER >= 110
13151 VTABLE_ADD_FUNC(locale_facet__Incref
)
13152 VTABLE_ADD_FUNC(locale_facet__Decref
)
13154 VTABLE_ADD_FUNC(time_get_wchar_do_date_order
)
13155 VTABLE_ADD_FUNC(time_get_wchar_do_get_time
)
13156 VTABLE_ADD_FUNC(time_get_wchar_do_get_date
)
13157 VTABLE_ADD_FUNC(time_get_wchar_do_get_weekday
)
13158 VTABLE_ADD_FUNC(time_get_wchar_do_get_monthname
)
13159 VTABLE_ADD_FUNC(time_get_wchar_do_get_year
)
13160 #if _MSVCP_VER >= 100
13161 VTABLE_ADD_FUNC(time_get_wchar_do_get
)
13166 void init_locale(void *base
)
13169 init__Facet_base_rtti(base
);
13170 init_locale_facet_rtti(base
);
13171 init_locale__Locimp_rtti(base
);
13172 init_collate_char_rtti(base
);
13173 init_collate_wchar_rtti(base
);
13174 init_collate_short_rtti(base
);
13175 init_ctype_base_rtti(base
);
13176 init_ctype_char_rtti(base
);
13177 init_ctype_wchar_rtti(base
);
13178 init_ctype_short_rtti(base
);
13179 init_codecvt_base_rtti(base
);
13180 init_codecvt_char_rtti(base
);
13181 init_codecvt_wchar_rtti(base
);
13182 init_codecvt_short_rtti(base
);
13183 init_numpunct_char_rtti(base
);
13184 init_numpunct_wchar_rtti(base
);
13185 init_numpunct_short_rtti(base
);
13186 init_num_get_char_rtti(base
);
13187 init_num_get_wchar_rtti(base
);
13188 init_num_get_short_rtti(base
);
13189 init_num_put_char_rtti(base
);
13190 init_num_put_wchar_rtti(base
);
13191 init_num_put_short_rtti(base
);
13192 init_time_put_char_rtti(base
);
13193 init_time_put_wchar_rtti(base
);
13194 init_time_put_short_rtti(base
);
13195 init_time_base_rtti(base
);
13196 init_time_get_char_rtti(base
);
13197 init_time_get_wchar_rtti(base
);
13201 void free_locale(void)
13203 facets_elem
*iter
, *safe
;
13205 if(global_locale
) {
13206 locale_dtor(&classic_locale
);
13207 locale__Locimp_dtor(global_locale
);
13208 MSVCRT_operator_delete(global_locale
);
13211 LIST_FOR_EACH_ENTRY_SAFE(iter
, safe
, &lazy_facets
, facets_elem
, entry
) {
13212 list_remove(&iter
->entry
);
13213 if(call_locale_facet__Decref(iter
->fac
))
13214 call_locale_facet_vector_dtor(iter
->fac
, 1);
13215 MSVCRT_operator_delete(iter
);