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 operator_delete(ptr
);
278 locale_facet_dtor(this);
280 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
= operator_new(sizeof(*head
));
300 list_add_head(&lazy_facets
, &head
->entry
);
303 /* Not exported from msvcp90 */
304 /* ?_Register@facet@locale@std@@QAEXXZ */
305 /* ?_Register@facet@locale@std@@QEAAXXZ */
306 DEFINE_THISCALL_WRAPPER(locale_facet__Register
, 4)
307 void __thiscall
locale_facet__Register(locale_facet
*this)
309 TRACE("(%p)\n", this);
310 locale_facet_register(this);
313 /* Not exported from msvcp90 */
314 /* ??_7facet@locale@std@@6B@ */
315 extern const vtable_ptr locale_facet_vtable
;
317 /* ??0id@locale@std@@QAE@I@Z */
318 /* ??0id@locale@std@@QEAA@_K@Z */
319 DEFINE_THISCALL_WRAPPER(locale_id_ctor_id
, 8)
320 locale_id
* __thiscall
locale_id_ctor_id(locale_id
*this, size_t id
)
322 TRACE("(%p %Iu)\n", this, id
);
328 /* ??_Fid@locale@std@@QAEXXZ */
329 /* ??_Fid@locale@std@@QEAAXXZ */
330 DEFINE_THISCALL_WRAPPER(locale_id_ctor
, 4)
331 locale_id
* __thiscall
locale_id_ctor(locale_id
*this)
333 TRACE("(%p)\n", this);
339 /* ??Bid@locale@std@@QAEIXZ */
340 /* ??Bid@locale@std@@QEAA_KXZ */
341 DEFINE_THISCALL_WRAPPER(locale_id_operator_size_t
, 4)
342 size_t __thiscall
locale_id_operator_size_t(locale_id
*this)
346 TRACE("(%p)\n", this);
349 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
350 this->id
= ++locale_id__Id_cnt
;
357 /* ?_Id_cnt_func@id@locale@std@@CAAAHXZ */
358 /* ?_Id_cnt_func@id@locale@std@@CAAEAHXZ */
359 int* __cdecl
locale_id__Id_cnt_func(void)
362 return &locale_id__Id_cnt
;
365 /* ??_Ffacet@locale@std@@QAEXXZ */
366 /* ??_Ffacet@locale@std@@QEAAXXZ */
367 DEFINE_THISCALL_WRAPPER(locale_facet_ctor
, 4)
368 locale_facet
* __thiscall
locale_facet_ctor(locale_facet
*this)
370 TRACE("(%p)\n", this);
371 this->vtable
= &locale_facet_vtable
;
376 /* ??0facet@locale@std@@IAE@I@Z */
377 /* ??0facet@locale@std@@IEAA@_K@Z */
378 DEFINE_THISCALL_WRAPPER(locale_facet_ctor_refs
, 8)
379 locale_facet
* __thiscall
locale_facet_ctor_refs(locale_facet
*this, size_t refs
)
381 TRACE("(%p %Iu)\n", this, refs
);
382 this->vtable
= &locale_facet_vtable
;
387 /* ?_Incref@facet@locale@std@@QAEXXZ */
388 /* ?_Incref@facet@locale@std@@QEAAXXZ */
389 /* ?_Incref@facet@locale@std@@UAEXXZ */
390 /* ?_Incref@facet@locale@std@@UEAAXXZ */
391 #if _MSVCP_VER >= 110
392 #define call_locale_facet__Incref(this) CALL_VTBL_FUNC(this, 4, void, (locale_facet*), (this))
394 #define call_locale_facet__Incref locale_facet__Incref
396 DEFINE_THISCALL_WRAPPER(locale_facet__Incref
, 4)
397 void __thiscall
locale_facet__Incref(locale_facet
*this)
401 TRACE("(%p)\n", this);
403 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
408 /* ?_Decref@facet@locale@std@@QAEPAV123@XZ */
409 /* ?_Decref@facet@locale@std@@QEAAPEAV123@XZ */
410 /* ?_Decref@facet@locale@std@@UAEPAV_Facet_base@3@XZ */
411 /* ?_Decref@facet@locale@std@@UEAAPEAV_Facet_base@3@XZ */
412 #if _MSVCP_VER >= 110
413 #define call_locale_facet__Decref(this) CALL_VTBL_FUNC(this, 8, \
414 locale_facet*, (locale_facet*), (this))
416 #define call_locale_facet__Decref locale_facet__Decref
418 DEFINE_THISCALL_WRAPPER(locale_facet__Decref
, 4)
419 locale_facet
* __thiscall
locale_facet__Decref(locale_facet
*this)
424 TRACE("(%p)\n", this);
426 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
430 ret
= this->refs
? NULL
: this;
436 /* ?_Getcat@facet@locale@std@@SAIPAPBV123@PBV23@@Z */
437 /* ?_Getcat@facet@locale@std@@SA_KPEAPEBV123@PEBV23@@Z */
438 size_t __cdecl
locale_facet__Getcat(const locale_facet
**facet
, const locale
*loc
)
440 TRACE("(%p %p)\n", facet
, loc
);
444 /* ?_Getcat@facet@locale@std@@SAIPAPBV123@@Z */
445 /* ?_Getcat@facet@locale@std@@SA_KPEAPEBV123@@Z */
446 size_t __cdecl
locale_facet__Getcat_old(const locale_facet
**facet
)
448 TRACE("(%p)\n", facet
);
452 /* ??0_Timevec@std@@QAE@ABV01@@Z */
453 /* ??0_Timevec@std@@QEAA@AEBV01@@Z */
454 /* This copy constructor modifies copied object */
455 DEFINE_THISCALL_WRAPPER(_Timevec_copy_ctor
, 8)
456 _Timevec
* __thiscall
_Timevec_copy_ctor(_Timevec
*this, _Timevec
*copy
)
458 TRACE("(%p %p)\n", this, copy
);
459 this->timeptr
= copy
->timeptr
;
460 copy
->timeptr
= NULL
;
464 /* ??0_Timevec@std@@QAE@PAX@Z */
465 /* ??0_Timevec@std@@QEAA@PEAX@Z */
466 DEFINE_THISCALL_WRAPPER(_Timevec_ctor_timeptr
, 8)
467 _Timevec
* __thiscall
_Timevec_ctor_timeptr(_Timevec
*this, void *timeptr
)
469 TRACE("(%p %p)\n", this, timeptr
);
470 this->timeptr
= timeptr
;
474 /* ??_F_Timevec@std@@QAEXXZ */
475 /* ??_F_Timevec@std@@QEAAXXZ */
476 DEFINE_THISCALL_WRAPPER(_Timevec_ctor
, 4)
477 _Timevec
* __thiscall
_Timevec_ctor(_Timevec
*this)
479 TRACE("(%p)\n", this);
480 this->timeptr
= NULL
;
484 /* ??1_Timevec@std@@QAE@XZ */
485 /* ??1_Timevec@std@@QEAA@XZ */
486 DEFINE_THISCALL_WRAPPER(_Timevec_dtor
, 4)
487 void __thiscall
_Timevec_dtor(_Timevec
*this)
489 TRACE("(%p)\n", this);
493 /* ??4_Timevec@std@@QAEAAV01@ABV01@@Z */
494 /* ??4_Timevec@std@@QEAAAEAV01@AEBV01@@Z */
495 DEFINE_THISCALL_WRAPPER(_Timevec_op_assign
, 8)
496 _Timevec
* __thiscall
_Timevec_op_assign(_Timevec
*this, _Timevec
*right
)
498 TRACE("(%p %p)\n", this, right
);
499 this->timeptr
= right
->timeptr
;
500 right
->timeptr
= NULL
;
504 /* ?_Getptr@_Timevec@std@@QBEPAXXZ */
505 /* ?_Getptr@_Timevec@std@@QEBAPEAXXZ */
506 DEFINE_THISCALL_WRAPPER(_Timevec__Getptr
, 4)
507 void* __thiscall
_Timevec__Getptr(_Timevec
*this)
509 TRACE("(%p)\n", this);
510 return this->timeptr
;
513 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@HPBD@Z */
514 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@HPEBD@Z */
515 _Locinfo
* __cdecl
_Locinfo__Locinfo_ctor_cat_cstr(_Locinfo
*locinfo
, int category
, const char *locstr
)
517 const char *locale
= NULL
;
519 TRACE("(%p %d %s)\n", locinfo
, category
, locstr
);
522 _Xruntime_error("bad locale name");
524 _Lockit_ctor_locktype(&locinfo
->lock
, _LOCK_LOCALE
);
525 locale_string_char_ctor(&locinfo
->days
);
526 locale_string_char_ctor(&locinfo
->months
);
527 #if _MSVCP_VER >= 110
528 locale_string_wchar_ctor(&locinfo
->wdays
);
529 locale_string_wchar_ctor(&locinfo
->wmonths
);
531 locale_string_char_ctor_cstr(&locinfo
->oldlocname
, setlocale(LC_ALL
, NULL
));
534 locale
= setlocale(LC_ALL
, locstr
);
536 locale
= setlocale(LC_ALL
, NULL
);
539 locale_string_char_ctor_cstr(&locinfo
->newlocname
, locale
);
541 locale_string_char_ctor_cstr(&locinfo
->newlocname
, "*");
546 /* ??0_Locinfo@std@@QAE@HPBD@Z */
547 /* ??0_Locinfo@std@@QEAA@HPEBD@Z */
548 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cat_cstr
, 12)
549 _Locinfo
* __thiscall
_Locinfo_ctor_cat_cstr(_Locinfo
*this, int category
, const char *locstr
)
551 return _Locinfo__Locinfo_ctor_cat_cstr(this, category
, locstr
);
554 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
555 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
556 _Locinfo
* __cdecl
_Locinfo__Locinfo_ctor_bstr(_Locinfo
*locinfo
, const basic_string_char
*locstr
)
558 return _Locinfo__Locinfo_ctor_cat_cstr(locinfo
, 1/*FIXME*/, MSVCP_basic_string_char_c_str(locstr
));
561 /* ??0_Locinfo@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z */
562 /* ??0_Locinfo@std@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z */
563 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_bstr
, 8)
564 _Locinfo
* __thiscall
_Locinfo_ctor_bstr(_Locinfo
*this, const basic_string_char
*locstr
)
566 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, MSVCP_basic_string_char_c_str(locstr
));
569 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@PBD@Z */
570 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@PEBD@Z */
571 _Locinfo
* __cdecl
_Locinfo__Locinfo_ctor_cstr(_Locinfo
*locinfo
, const char *locstr
)
573 return _Locinfo__Locinfo_ctor_cat_cstr(locinfo
, 1/*FIXME*/, locstr
);
576 /* ??0_Locinfo@std@@QAE@PBD@Z */
577 /* ??0_Locinfo@std@@QEAA@PEBD@Z */
578 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cstr
, 8)
579 _Locinfo
* __thiscall
_Locinfo_ctor_cstr(_Locinfo
*this, const char *locstr
)
581 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, locstr
);
584 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPAV12@@Z */
585 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPEAV12@@Z */
586 void __cdecl
_Locinfo__Locinfo_dtor(_Locinfo
*locinfo
)
588 TRACE("(%p)\n", locinfo
);
590 setlocale(LC_ALL
, locale_string_char_c_str(&locinfo
->oldlocname
));
591 locale_string_char_dtor(&locinfo
->days
);
592 locale_string_char_dtor(&locinfo
->months
);
593 #if _MSVCP_VER >= 110
594 locale_string_wchar_dtor(&locinfo
->wdays
);
595 locale_string_wchar_dtor(&locinfo
->wmonths
);
597 locale_string_char_dtor(&locinfo
->oldlocname
);
598 locale_string_char_dtor(&locinfo
->newlocname
);
599 _Lockit_dtor(&locinfo
->lock
);
602 /* ??_F_Locinfo@std@@QAEXXZ */
603 /* ??_F_Locinfo@std@@QEAAXXZ */
604 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor
, 4)
605 _Locinfo
* __thiscall
_Locinfo_ctor(_Locinfo
*this)
607 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, "C");
610 /* ??1_Locinfo@std@@QAE@XZ */
611 /* ??1_Locinfo@std@@QEAA@XZ */
612 DEFINE_THISCALL_WRAPPER(_Locinfo_dtor
, 4)
613 void __thiscall
_Locinfo_dtor(_Locinfo
*this)
615 _Locinfo__Locinfo_dtor(this);
618 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAAV12@PAV12@HPBD@Z */
619 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAEAV12@PEAV12@HPEBD@Z */
620 _Locinfo
* __cdecl
_Locinfo__Locinfo_Addcats(_Locinfo
*locinfo
, int category
, const char *locstr
)
622 const char *locale
= NULL
;
624 TRACE("(%p %d %s)\n", locinfo
, category
, locstr
);
626 _Xruntime_error("bad locale name");
628 locale_string_char_dtor(&locinfo
->newlocname
);
631 locale
= setlocale(LC_ALL
, locstr
);
633 locale
= setlocale(LC_ALL
, NULL
);
636 locale_string_char_ctor_cstr(&locinfo
->newlocname
, locale
);
638 locale_string_char_ctor_cstr(&locinfo
->newlocname
, "*");
643 /* ?_Addcats@_Locinfo@std@@QAEAAV12@HPBD@Z */
644 /* ?_Addcats@_Locinfo@std@@QEAAAEAV12@HPEBD@Z */
645 DEFINE_THISCALL_WRAPPER(_Locinfo__Addcats
, 12)
646 _Locinfo
* __thiscall
_Locinfo__Addcats(_Locinfo
*this, int category
, const char *locstr
)
648 return _Locinfo__Locinfo_Addcats(this, category
, locstr
);
651 static _Collvec
* getcoll(_Collvec
*ret
)
655 ret
->page
= ___lc_collate_cp_func();
657 ret
->handle
= ___lc_handle_func()[LC_COLLATE
];
659 ret
->lc_name
= ___lc_locale_name_func()[LC_COLLATE
];
665 #if defined(__i386__)
666 /* Work around a gcc bug */
667 ULONGLONG __cdecl
_Getcoll(void)
669 C_ASSERT(sizeof(_Collvec
) == sizeof(ULONGLONG
));
672 getcoll((_Collvec
*)&ret
);
676 _Collvec __cdecl
_Getcoll(void)
685 /* ?_Getcoll@_Locinfo@std@@QBE?AU_Collvec@@XZ */
686 /* ?_Getcoll@_Locinfo@std@@QEBA?AU_Collvec@@XZ */
687 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcoll
, 8)
688 _Collvec
* __thiscall
_Locinfo__Getcoll(const _Locinfo
*this, _Collvec
*ret
)
694 _Ctypevec __cdecl
_Getctype(void)
698 #if _MSVCP_VER >= 110
705 ret
.page
= ___lc_codepage_func();
707 ret
.handle
= ___lc_handle_func()[LC_COLLATE
];
709 if((name
= ___lc_locale_name_func()[LC_COLLATE
])) {
710 size
= wcslen(name
)+1;
711 ret
.name
= operator_new(size
*sizeof(*name
));
712 memcpy(ret
.name
, name
, size
*sizeof(*name
));
718 table
= operator_new(sizeof(short[256]));
719 memcpy(table
, __pctype_func(), sizeof(short[256]));
724 /* ?_Getctype@_Locinfo@std@@QBE?AU_Ctypevec@@XZ */
725 /* ?_Getctype@_Locinfo@std@@QEBA?AU_Ctypevec@@XZ */
726 DEFINE_THISCALL_WRAPPER(_Locinfo__Getctype
, 8)
727 _Ctypevec
* __thiscall
_Locinfo__Getctype(const _Locinfo
*this, _Ctypevec
*ret
)
734 #if _MSVCP_VER < 110 && defined(__i386__)
735 /* Work around a gcc bug */
736 ULONGLONG __cdecl
_Getcvt(void)
738 C_ASSERT(sizeof(_Cvtvec
) == sizeof(ULONGLONG
));
746 ret
.cvtvec
.page
= ___lc_codepage_func();
747 ret
.cvtvec
.handle
= ___lc_handle_func()[LC_CTYPE
];
750 #elif _MSVCP_VER < 110
751 _Cvtvec __cdecl
_Getcvt(void)
757 ret
.page
= ___lc_codepage_func();
758 ret
.handle
= ___lc_handle_func()[LC_CTYPE
];
762 _Cvtvec __cdecl
_Getcvt(void)
769 memset(&ret
, 0, sizeof(ret
));
770 ret
.page
= ___lc_codepage_func();
771 ret
.mb_max
= ___mb_cur_max_func();
775 if(_ismbblead(i
)) ret
.isleadbyte
[i
/8] |= 1 << (i
&7);
781 /* ?_Getcvt@_Locinfo@std@@QBE?AU_Cvtvec@@XZ */
782 /* ?_Getcvt@_Locinfo@std@@QEBA?AU_Cvtvec@@XZ */
783 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcvt
, 8)
784 _Cvtvec
* __thiscall
_Locinfo__Getcvt(const _Locinfo
*this, _Cvtvec
*ret
)
786 #if _MSVCP_VER < 110 && defined(__i386__)
793 memcpy(ret
, &cvtvec
, sizeof(cvtvec
));
797 int __cdecl
_Getdateorder(void)
802 if(!GetLocaleInfoW(___lc_handle_func()[LC_TIME
], LOCALE_ILDATE
,
803 date_fmt
, ARRAY_SIZE(date_fmt
)))
804 return DATEORDER_no_order
;
806 if(!GetLocaleInfoEx(___lc_locale_name_func()[LC_TIME
], LOCALE_ILDATE
,
807 date_fmt
, ARRAY_SIZE(date_fmt
)))
808 return DATEORDER_no_order
;
811 if(*date_fmt
== '0') return DATEORDER_mdy
;
812 if(*date_fmt
== '1') return DATEORDER_dmy
;
813 if(*date_fmt
== '2') return DATEORDER_ymd
;
814 return DATEORDER_no_order
;
817 /* ?_Getdateorder@_Locinfo@std@@QBEHXZ */
818 /* ?_Getdateorder@_Locinfo@std@@QEBAHXZ */
819 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdateorder
, 4)
820 int __thiscall
_Locinfo__Getdateorder(const _Locinfo
*this)
822 TRACE("(%p)\n", this);
823 return _Getdateorder();
826 /* ?_Getdays@_Locinfo@std@@QBEPBDXZ */
827 /* ?_Getdays@_Locinfo@std@@QEBAPEBDXZ */
828 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdays
, 4)
829 const char* __thiscall
_Locinfo__Getdays(const _Locinfo
*this)
831 char *days
= _Getdays();
834 TRACE("(%p)\n", this);
837 locale_string_char_dtor((locale_string
*)&this->days
);
838 locale_string_char_ctor_cstr((locale_string
*)&this->days
, days
);
842 ret
= locale_string_char_c_str(&this->days
);
843 if (!ret
[0]) ret
= ":Sun:Sunday:Mon:Monday:Tue:Tuesday:Wed:Wednesday:Thu:Thursday:Fri:Friday:Sat:Saturday";
847 #if _MSVCP_VER >= 110
848 /* ?_W_Getdays@_Locinfo@std@@QBEPBGXZ */
849 /* ?_W_Getdays@_Locinfo@std@@QEBAPEBGXZ */
850 DEFINE_THISCALL_WRAPPER(_Locinfo__W_Getdays
, 4)
851 const wchar_t* __thiscall
_Locinfo__W_Getdays(const _Locinfo
*this)
853 static const wchar_t defdays
[] =
855 ':','S','u','n',':','S','u','n','d','a','y',
856 ':','M','o','n',':','M','o','n','d','a','y',
857 ':','T','u','e',':','T','u','e','s','d','a','y',
858 ':','W','e','d',':','W','e','d','n','e','s','d','a','y',
859 ':','T','h','u',':','T','h','u','r','s','d','a','y',
860 ':','F','r','i',':','F','r','i','d','a','y',
861 ':','S','a','t',':','S','a','t','u','r','d','a','y'
863 wchar_t *wdays
= _W_Getdays();
866 TRACE("(%p)\n", this);
869 locale_string_wchar_assign((locale_string_wchar
*)&this->wdays
, wdays
);
873 ret
= locale_string_wchar_c_str(&this->wdays
);
874 if (!ret
[0]) ret
= defdays
;
878 /* ?_W_Getmonths@_Locinfo@std@@QBEPBGXZ */
879 /* ?_W_Getmonths@_Locinfo@std@@QEBAPEBGXZ */
880 DEFINE_THISCALL_WRAPPER(_Locinfo__W_Getmonths
, 4)
881 const wchar_t* __thiscall
_Locinfo__W_Getmonths(const _Locinfo
*this)
883 static const wchar_t defmonths
[] =
885 ':','J','a','n',':','J','a','n','u','a','r','y',
886 ':','F','e','b',':','F','e','b','r','u','a','r','y',
887 ':','M','a','r',':','M','a','r','c','h',
888 ':','A','p','r',':','A','p','r','i','l',
889 ':','M','a','y',':','M','a','y',
890 ':','J','u','n',':','J','u','n','e',
891 ':','J','u','l',':','J','u','l','y',
892 ':','A','u','g',':','A','u','g','u','s','t',
893 ':','S','e','p',':','S','e','p','t','e','m','b','e','r',
894 ':','O','c','t',':','O','c','t','o','b','e','r',
895 ':','N','o','v',':','N','o','v','e','m','b','e','r',
896 ':','D','e','c',':','D','e','c','e','m','b','e','r'
898 wchar_t *wmonths
= _W_Getmonths();
901 TRACE("(%p)\n", this);
904 locale_string_wchar_assign((locale_string_wchar
*)&this->wmonths
, wmonths
);
908 ret
= locale_string_wchar_c_str(&this->wmonths
);
909 if (!ret
[0]) ret
= defmonths
;
914 /* ?_Getmonths@_Locinfo@std@@QBEPBDXZ */
915 /* ?_Getmonths@_Locinfo@std@@QEBAPEBDXZ */
916 DEFINE_THISCALL_WRAPPER(_Locinfo__Getmonths
, 4)
917 const char* __thiscall
_Locinfo__Getmonths(const _Locinfo
*this)
919 char *months
= _Getmonths();
922 TRACE("(%p)\n", this);
925 locale_string_char_dtor((locale_string
*)&this->months
);
926 locale_string_char_ctor_cstr((locale_string
*)&this->months
, months
);
930 ret
= locale_string_char_c_str(&this->months
);
931 if (!ret
[0]) ret
= ":Jan:January:Feb:February:Mar:March:Apr:April:May:May:Jun:June:Jul:July"
932 ":Aug:August:Sep:September:Oct:October:Nov:November:Dec:December";
936 /* ?_Getfalse@_Locinfo@std@@QBEPBDXZ */
937 /* ?_Getfalse@_Locinfo@std@@QEBAPEBDXZ */
938 DEFINE_THISCALL_WRAPPER(_Locinfo__Getfalse
, 4)
939 const char* __thiscall
_Locinfo__Getfalse(const _Locinfo
*this)
941 TRACE("(%p)\n", this);
945 /* ?_Gettrue@_Locinfo@std@@QBEPBDXZ */
946 /* ?_Gettrue@_Locinfo@std@@QEBAPEBDXZ */
947 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettrue
, 4)
948 const char* __thiscall
_Locinfo__Gettrue(const _Locinfo
*this)
950 TRACE("(%p)\n", this);
954 /* ?_Getlconv@_Locinfo@std@@QBEPBUlconv@@XZ */
955 /* ?_Getlconv@_Locinfo@std@@QEBAPEBUlconv@@XZ */
956 DEFINE_THISCALL_WRAPPER(_Locinfo__Getlconv
, 4)
957 const struct lconv
* __thiscall
_Locinfo__Getlconv(const _Locinfo
*this)
959 TRACE("(%p)\n", this);
963 /* ?_Gettnames@_Locinfo@std@@QBE?AV_Timevec@2@XZ */
964 /* ?_Gettnames@_Locinfo@std@@QEBA?AV_Timevec@2@XZ */
965 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettnames
, 8)
966 _Timevec
*__thiscall
_Locinfo__Gettnames(const _Locinfo
*this, _Timevec
*ret
)
968 TRACE("(%p)\n", this);
970 _Timevec_ctor_timeptr(ret
, _Gettnames());
974 /* ?id@?$collate@D@std@@2V0locale@2@A */
975 locale_id collate_char_id
= {0};
977 /* ??_7?$collate@D@std@@6B@ */
978 extern const vtable_ptr collate_char_vtable
;
980 /* ?_Init@?$collate@D@std@@IAEXABV_Locinfo@2@@Z */
981 /* ?_Init@?$collate@D@std@@IEAAXAEBV_Locinfo@2@@Z */
982 DEFINE_THISCALL_WRAPPER(collate_char__Init
, 8)
983 void __thiscall
collate_char__Init(collate
*this, const _Locinfo
*locinfo
)
985 TRACE("(%p %p)\n", this, locinfo
);
986 _Locinfo__Getcoll(locinfo
, &this->coll
);
989 /* ??0?$collate@D@std@@IAE@PBDI@Z */
990 /* ??0?$collate@D@std@@IEAA@PEBD_K@Z */
991 DEFINE_THISCALL_WRAPPER(collate_char_ctor_name
, 12)
992 collate
* __thiscall
collate_char_ctor_name(collate
*this, const char *name
, size_t refs
)
996 TRACE("(%p %s %Iu)\n", this, name
, refs
);
998 locale_facet_ctor_refs(&this->facet
, refs
);
999 this->facet
.vtable
= &collate_char_vtable
;
1001 _Locinfo_ctor_cstr(&locinfo
, name
);
1002 collate_char__Init(this, &locinfo
);
1003 _Locinfo_dtor(&locinfo
);
1007 /* ??0?$collate@D@std@@QAE@ABV_Locinfo@1@I@Z */
1008 /* ??0?$collate@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1009 DEFINE_THISCALL_WRAPPER(collate_char_ctor_locinfo
, 12)
1010 collate
* __thiscall
collate_char_ctor_locinfo(collate
*this, const _Locinfo
*locinfo
, size_t refs
)
1012 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
1014 locale_facet_ctor_refs(&this->facet
, refs
);
1015 this->facet
.vtable
= &collate_char_vtable
;
1016 collate_char__Init(this, locinfo
);
1020 /* ??0?$collate@D@std@@QAE@I@Z */
1021 /* ??0?$collate@D@std@@QEAA@_K@Z */
1022 DEFINE_THISCALL_WRAPPER(collate_char_ctor_refs
, 8)
1023 collate
* __thiscall
collate_char_ctor_refs(collate
*this, size_t refs
)
1025 return collate_char_ctor_name(this, "C", refs
);
1028 /* ??1?$collate@D@std@@UAE@XZ */
1029 /* ??1?$collate@D@std@@UEAA@XZ */
1030 /* ??1?$collate@D@std@@MAE@XZ */
1031 /* ??1?$collate@D@std@@MEAA@XZ */
1032 DEFINE_THISCALL_WRAPPER(collate_char_dtor
, 4)
1033 void __thiscall
collate_char_dtor(collate
*this)
1035 TRACE("(%p)\n", this);
1038 DEFINE_THISCALL_WRAPPER(collate_char_vector_dtor
, 8)
1039 collate
* __thiscall
collate_char_vector_dtor(collate
*this, unsigned int flags
)
1041 TRACE("(%p %x)\n", this, flags
);
1043 /* we have an array, with the number of elements stored before the first object */
1044 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1046 for(i
=*ptr
-1; i
>=0; i
--)
1047 collate_char_dtor(this+i
);
1048 operator_delete(ptr
);
1050 collate_char_dtor(this);
1052 operator_delete(this);
1058 /* ??_F?$collate@D@std@@QAEXXZ */
1059 /* ??_F?$collate@D@std@@QEAAXXZ */
1060 DEFINE_THISCALL_WRAPPER(collate_char_ctor
, 4)
1061 collate
* __thiscall
collate_char_ctor(collate
*this)
1063 return collate_char_ctor_name(this, "C", 0);
1066 /* ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1067 /* ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1068 size_t __cdecl
collate_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
1070 TRACE("(%p %p)\n", facet
, loc
);
1072 if(facet
&& !*facet
) {
1073 *facet
= operator_new(sizeof(collate
));
1074 collate_char_ctor_name((collate
*)*facet
,
1075 locale_string_char_c_str(&loc
->ptr
->name
), 0);
1081 /* ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@@Z */
1082 /* ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1083 size_t __cdecl
collate_char__Getcat_old(const locale_facet
**facet
)
1085 return collate_char__Getcat(facet
, locale_classic());
1088 static collate
* collate_char_use_facet(const locale
*loc
)
1090 static collate
*obj
= NULL
;
1093 const locale_facet
*fac
;
1095 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1096 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&collate_char_id
));
1098 _Lockit_dtor(&lock
);
1099 return (collate
*)fac
;
1103 _Lockit_dtor(&lock
);
1107 collate_char__Getcat(&fac
, loc
);
1108 obj
= (collate
*)fac
;
1109 call_locale_facet__Incref(&obj
->facet
);
1110 locale_facet_register(&obj
->facet
);
1111 _Lockit_dtor(&lock
);
1117 int __cdecl
_Strcoll(const char *first1
, const char *last1
, const char *first2
,
1118 const char *last2
, const _Collvec
*coll
)
1122 TRACE("(%s %s)\n", debugstr_an(first1
, last1
-first1
), debugstr_an(first2
, last2
-first2
));
1124 #if _MSVCP_VER < 110
1125 lcid
= (coll
? coll
->handle
: ___lc_handle_func()[LC_COLLATE
]);
1127 lcid
= LocaleNameToLCID(coll
? coll
->lc_name
: ___lc_locale_name_func()[LC_COLLATE
], 0);
1129 return CompareStringA(lcid
, 0, first1
, last1
-first1
, first2
, last2
-first2
)-CSTR_EQUAL
;
1132 /* ?do_compare@?$collate@D@std@@MBEHPBD000@Z */
1133 /* ?do_compare@?$collate@D@std@@MEBAHPEBD000@Z */
1134 DEFINE_THISCALL_WRAPPER(collate_char_do_compare
, 20)
1135 #if _MSVCP_VER <= 100
1136 #define call_collate_char_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 4, int, \
1137 (const collate*, const char*, const char*, const char*, const char*), \
1138 (this, first1, last1, first2, last2))
1140 #define call_collate_char_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 12, int, \
1141 (const collate*, const char*, const char*, const char*, const char*), \
1142 (this, first1, last1, first2, last2))
1144 int __thiscall
collate_char_do_compare(const collate
*this, const char *first1
,
1145 const char *last1
, const char *first2
, const char *last2
)
1147 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1148 return _Strcoll(first1
, last1
, first2
, last2
, &this->coll
);
1151 /* ?compare@?$collate@D@std@@QBEHPBD000@Z */
1152 /* ?compare@?$collate@D@std@@QEBAHPEBD000@Z */
1153 DEFINE_THISCALL_WRAPPER(collate_char_compare
, 20)
1154 int __thiscall
collate_char_compare(const collate
*this, const char *first1
,
1155 const char *last1
, const char *first2
, const char *last2
)
1157 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1158 return call_collate_char_do_compare(this, first1
, last1
, first2
, last2
);
1161 /* ?do_hash@?$collate@D@std@@MBEJPBD0@Z */
1162 /* ?do_hash@?$collate@D@std@@MEBAJPEBD0@Z */
1163 DEFINE_THISCALL_WRAPPER(collate_char_do_hash
, 12)
1164 #if _MSVCP_VER <= 100
1165 #define call_collate_char_do_hash(this, first, last) CALL_VTBL_FUNC(this, 12, LONG, \
1166 (const collate*, const char*, const char*), (this, first, last))
1168 #define call_collate_char_do_hash(this, first, last) CALL_VTBL_FUNC(this, 20, LONG, \
1169 (const collate*, const char*, const char*), (this, first, last))
1171 LONG __thiscall
collate_char_do_hash(const collate
*this,
1172 const char *first
, const char *last
)
1176 TRACE("(%p %p %p)\n", this, first
, last
);
1178 for(; first
<last
; first
++)
1179 ret
= (ret
<<8 | ret
>>24) + *first
;
1183 /* ?hash@?$collate@D@std@@QBEJPBD0@Z */
1184 /* ?hash@?$collate@D@std@@QEBAJPEBD0@Z */
1185 DEFINE_THISCALL_WRAPPER(collate_char_hash
, 12)
1186 LONG __thiscall
collate_char_hash(const collate
*this,
1187 const char *first
, const char *last
)
1189 TRACE("(%p %p %p)\n", this, first
, last
);
1190 return call_collate_char_do_hash(this, first
, last
);
1193 /* ?do_transform@?$collate@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
1194 /* ?do_transform@?$collate@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
1195 DEFINE_THISCALL_WRAPPER(collate_char_do_transform
, 16)
1196 basic_string_char
* __thiscall
collate_char_do_transform(const collate
*this,
1197 basic_string_char
*ret
, const char *first
, const char *last
)
1199 FIXME("(%p %p %p) stub\n", this, first
, last
);
1203 /* ?transform@?$collate@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
1204 /* ?transform@?$collate@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
1205 DEFINE_THISCALL_WRAPPER(collate_char_transform
, 16)
1206 basic_string_char
* __thiscall
collate_char_transform(const collate
*this,
1207 basic_string_char
*ret
, const char *first
, const char *last
)
1209 FIXME("(%p %p %p) stub\n", this, first
, last
);
1213 /* ?id@?$collate@_W@std@@2V0locale@2@A */
1214 locale_id collate_wchar_id
= {0};
1215 /* ?id@?$collate@G@std@@2V0locale@2@A */
1216 locale_id collate_short_id
= {0};
1218 /* ??_7?$collate@_W@std@@6B@ */
1219 extern const vtable_ptr collate_wchar_vtable
;
1220 /* ??_7?$collate@G@std@@6B@ */
1221 extern const vtable_ptr collate_short_vtable
;
1223 /* ?_Init@?$collate@_W@std@@IAEXABV_Locinfo@2@@Z */
1224 /* ?_Init@?$collate@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
1225 /* ?_Init@?$collate@G@std@@IAEXABV_Locinfo@2@@Z */
1226 /* ?_Init@?$collate@G@std@@IEAAXAEBV_Locinfo@2@@Z */
1227 DEFINE_THISCALL_WRAPPER(collate_wchar__Init
, 8)
1228 void __thiscall
collate_wchar__Init(collate
*this, const _Locinfo
*locinfo
)
1230 TRACE("(%p %p)\n", this, locinfo
);
1231 _Locinfo__Getcoll(locinfo
, &this->coll
);
1234 /* ??0?$collate@_W@std@@IAE@PBDI@Z */
1235 /* ??0?$collate@_W@std@@IEAA@PEBD_K@Z */
1236 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_name
, 12)
1237 collate
* __thiscall
collate_wchar_ctor_name(collate
*this, const char *name
, size_t refs
)
1241 TRACE("(%p %s %Iu)\n", this, name
, refs
);
1243 locale_facet_ctor_refs(&this->facet
, refs
);
1244 this->facet
.vtable
= &collate_wchar_vtable
;
1246 _Locinfo_ctor_cstr(&locinfo
, name
);
1247 collate_wchar__Init(this, &locinfo
);
1248 _Locinfo_dtor(&locinfo
);
1252 /* ??0?$collate@G@std@@IAE@PBDI@Z */
1253 /* ??0?$collate@G@std@@IEAA@PEBD_K@Z */
1254 DEFINE_THISCALL_WRAPPER(collate_short_ctor_name
, 12)
1255 collate
* __thiscall
collate_short_ctor_name(collate
*this, const char *name
, size_t refs
)
1257 collate
*ret
= collate_wchar_ctor_name(this, name
, refs
);
1258 ret
->facet
.vtable
= &collate_short_vtable
;
1262 /* ??0?$collate@_W@std@@QAE@ABV_Locinfo@1@I@Z */
1263 /* ??0?$collate@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1264 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_locinfo
, 12)
1265 collate
* __thiscall
collate_wchar_ctor_locinfo(collate
*this, const _Locinfo
*locinfo
, size_t refs
)
1267 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
1269 locale_facet_ctor_refs(&this->facet
, refs
);
1270 this->facet
.vtable
= &collate_wchar_vtable
;
1271 collate_wchar__Init(this, locinfo
);
1275 /* ??0?$collate@G@std@@QAE@ABV_Locinfo@1@I@Z */
1276 /* ??0?$collate@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1277 DEFINE_THISCALL_WRAPPER(collate_short_ctor_locinfo
, 12)
1278 collate
* __thiscall
collate_short_ctor_locinfo(collate
*this, const _Locinfo
*locinfo
, size_t refs
)
1280 collate
*ret
= collate_wchar_ctor_locinfo(this, locinfo
, refs
);
1281 ret
->facet
.vtable
= &collate_short_vtable
;
1285 /* ??0?$collate@_W@std@@QAE@I@Z */
1286 /* ??0?$collate@_W@std@@QEAA@_K@Z */
1287 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_refs
, 8)
1288 collate
* __thiscall
collate_wchar_ctor_refs(collate
*this, size_t refs
)
1290 return collate_wchar_ctor_name(this, "C", refs
);
1293 /* ??0?$collate@G@std@@QAE@I@Z */
1294 /* ??0?$collate@G@std@@QEAA@_K@Z */
1295 DEFINE_THISCALL_WRAPPER(collate_short_ctor_refs
, 8)
1296 collate
* __thiscall
collate_short_ctor_refs(collate
*this, size_t refs
)
1298 collate
*ret
= collate_wchar_ctor_refs(this, refs
);
1299 ret
->facet
.vtable
= &collate_short_vtable
;
1303 /* ??1?$collate@G@std@@UAE@XZ */
1304 /* ??1?$collate@G@std@@UEAA@XZ */
1305 /* ??1?$collate@_W@std@@MAE@XZ */
1306 /* ??1?$collate@_W@std@@MEAA@XZ */
1307 /* ??1?$collate@G@std@@MAE@XZ */
1308 /* ??1?$collate@G@std@@MEAA@XZ */
1309 DEFINE_THISCALL_WRAPPER(collate_wchar_dtor
, 4)
1310 void __thiscall
collate_wchar_dtor(collate
*this)
1312 TRACE("(%p)\n", this);
1315 DEFINE_THISCALL_WRAPPER(collate_wchar_vector_dtor
, 8)
1316 collate
* __thiscall
collate_wchar_vector_dtor(collate
*this, unsigned int flags
)
1318 TRACE("(%p %x)\n", this, flags
);
1320 /* we have an array, with the number of elements stored before the first object */
1321 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1323 for(i
=*ptr
-1; i
>=0; i
--)
1324 collate_wchar_dtor(this+i
);
1325 operator_delete(ptr
);
1327 collate_wchar_dtor(this);
1329 operator_delete(this);
1335 /* ??_F?$collate@_W@std@@QAEXXZ */
1336 /* ??_F?$collate@_W@std@@QEAAXXZ */
1337 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor
, 4)
1338 collate
* __thiscall
collate_wchar_ctor(collate
*this)
1340 return collate_wchar_ctor_name(this, "C", 0);
1343 /* ??_F?$collate@G@std@@QAEXXZ */
1344 /* ??_F?$collate@G@std@@QEAAXXZ */
1345 DEFINE_THISCALL_WRAPPER(collate_short_ctor
, 4)
1346 collate
* __thiscall
collate_short_ctor(collate
*this)
1348 collate
*ret
= collate_wchar_ctor(this);
1349 ret
->facet
.vtable
= &collate_short_vtable
;
1353 /* ?_Getcat@?$collate@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1354 /* ?_Getcat@?$collate@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1355 size_t __cdecl
collate_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
1357 TRACE("(%p %p)\n", facet
, loc
);
1359 if(facet
&& !*facet
) {
1360 *facet
= operator_new(sizeof(collate
));
1361 collate_wchar_ctor_name((collate
*)*facet
,
1362 locale_string_char_c_str(&loc
->ptr
->name
), 0);
1368 /* ?_Getcat@?$collate@_W@std@@SAIPAPBVfacet@locale@2@@Z */
1369 /* ?_Getcat@?$collate@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1370 size_t __cdecl
collate_wchar__Getcat_old(const locale_facet
**facet
)
1372 return collate_wchar__Getcat(facet
, locale_classic());
1375 static collate
* collate_wchar_use_facet(const locale
*loc
)
1377 static collate
*obj
= NULL
;
1380 const locale_facet
*fac
;
1382 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1383 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&collate_wchar_id
));
1385 _Lockit_dtor(&lock
);
1386 return (collate
*)fac
;
1390 _Lockit_dtor(&lock
);
1394 collate_wchar__Getcat(&fac
, loc
);
1395 obj
= (collate
*)fac
;
1396 call_locale_facet__Incref(&obj
->facet
);
1397 locale_facet_register(&obj
->facet
);
1398 _Lockit_dtor(&lock
);
1403 /* ?_Getcat@?$collate@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1404 /* ?_Getcat@?$collate@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1405 size_t __cdecl
collate_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
1407 if(facet
&& !*facet
) {
1408 collate_wchar__Getcat(facet
, loc
);
1409 (*(locale_facet
**)facet
)->vtable
= &collate_short_vtable
;
1415 /* ?_Getcat@?$collate@G@std@@SAIPAPBVfacet@locale@2@@Z */
1416 /* ?_Getcat@?$collate@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1417 size_t __cdecl
collate_short__Getcat_old(const locale_facet
**facet
)
1419 return collate_short__Getcat(facet
, locale_classic());
1422 static collate
* collate_short_use_facet(const locale
*loc
)
1424 static collate
*obj
= NULL
;
1427 const locale_facet
*fac
;
1429 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1430 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&collate_short_id
));
1432 _Lockit_dtor(&lock
);
1433 return (collate
*)fac
;
1437 _Lockit_dtor(&lock
);
1441 collate_short__Getcat(&fac
, loc
);
1442 obj
= (collate
*)fac
;
1443 call_locale_facet__Incref(&obj
->facet
);
1444 locale_facet_register(&obj
->facet
);
1445 _Lockit_dtor(&lock
);
1451 int __cdecl
_Wcscoll(const wchar_t *first1
, const wchar_t *last1
, const wchar_t *first2
,
1452 const wchar_t *last2
, const _Collvec
*coll
)
1454 TRACE("(%s %s)\n", debugstr_wn(first1
, last1
-first1
), debugstr_wn(first2
, last2
-first2
));
1456 #if _MSVCP_VER < 110
1457 return CompareStringW(coll
? coll
->handle
: ___lc_handle_func()[LC_COLLATE
],
1458 0, first1
, last1
-first1
, first2
, last2
-first2
)-CSTR_EQUAL
;
1460 return CompareStringEx(coll
? coll
->lc_name
: ___lc_locale_name_func()[LC_COLLATE
],
1461 0, first1
, last1
-first1
, first2
, last2
-first2
, NULL
, NULL
, 0)-CSTR_EQUAL
;
1465 /* ?do_compare@?$collate@_W@std@@MBEHPB_W000@Z */
1466 /* ?do_compare@?$collate@_W@std@@MEBAHPEB_W000@Z */
1467 /* ?do_compare@?$collate@G@std@@MBEHPBG000@Z */
1468 /* ?do_compare@?$collate@G@std@@MEBAHPEBG000@Z */
1469 DEFINE_THISCALL_WRAPPER(collate_wchar_do_compare
, 20)
1470 #if _MSVCP_VER <= 100
1471 #define call_collate_wchar_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 4, int, \
1472 (const collate*, const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*), \
1473 (this, first1, last1, first2, last2))
1475 #define call_collate_wchar_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 12, int, \
1476 (const collate*, const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*), \
1477 (this, first1, last1, first2, last2))
1479 int __thiscall
collate_wchar_do_compare(const collate
*this, const wchar_t *first1
,
1480 const wchar_t *last1
, const wchar_t *first2
, const wchar_t *last2
)
1482 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1483 return _Wcscoll(first1
, last1
, first2
, last2
, &this->coll
);
1486 /* ?compare@?$collate@_W@std@@QBEHPB_W000@Z */
1487 /* ?compare@?$collate@_W@std@@QEBAHPEB_W000@Z */
1488 /* ?compare@?$collate@G@std@@QBEHPBG000@Z */
1489 /* ?compare@?$collate@G@std@@QEBAHPEBG000@Z */
1490 DEFINE_THISCALL_WRAPPER(collate_wchar_compare
, 20)
1491 int __thiscall
collate_wchar_compare(const collate
*this, const wchar_t *first1
,
1492 const wchar_t *last1
, const wchar_t *first2
, const wchar_t *last2
)
1494 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1495 return call_collate_wchar_do_compare(this, first1
, last1
, first2
, last2
);
1498 /* ?do_hash@?$collate@_W@std@@MBEJPB_W0@Z */
1499 /* ?do_hash@?$collate@_W@std@@MEBAJPEB_W0@Z */
1500 /* ?do_hash@?$collate@G@std@@MBEJPBG0@Z */
1501 /* ?do_hash@?$collate@G@std@@MEBAJPEBG0@Z */
1502 DEFINE_THISCALL_WRAPPER(collate_wchar_do_hash
, 12)
1503 #if _MSVCP_VER <= 100
1504 #define call_collate_wchar_do_hash(this, first, last) CALL_VTBL_FUNC(this, 12, LONG, \
1505 (const collate*, const wchar_t*, const wchar_t*), (this, first, last))
1507 #define call_collate_wchar_do_hash(this, first, last) CALL_VTBL_FUNC(this, 20, LONG, \
1508 (const collate*, const wchar_t*, const wchar_t*), (this, first, last))
1510 LONG __thiscall
collate_wchar_do_hash(const collate
*this,
1511 const wchar_t *first
, const wchar_t *last
)
1515 TRACE("(%p %p %p)\n", this, first
, last
);
1517 for(; first
<last
; first
++)
1518 ret
= (ret
<<8 | ret
>>24) + *first
;
1522 /* ?hash@?$collate@_W@std@@QBEJPB_W0@Z */
1523 /* ?hash@?$collate@_W@std@@QEBAJPEB_W0@Z */
1524 /* ?hash@?$collate@G@std@@QBEJPBG0@Z */
1525 /* ?hash@?$collate@G@std@@QEBAJPEBG0@Z */
1526 DEFINE_THISCALL_WRAPPER(collate_wchar_hash
, 12)
1527 LONG __thiscall
collate_wchar_hash(const collate
*this,
1528 const wchar_t *first
, const wchar_t *last
)
1530 TRACE("(%p %p %p)\n", this, first
, last
);
1531 return call_collate_wchar_do_hash(this, first
, last
);
1534 /* ?do_transform@?$collate@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
1535 /* ?do_transform@?$collate@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
1536 /* ?do_transform@?$collate@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
1537 /* ?do_transform@?$collate@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
1538 DEFINE_THISCALL_WRAPPER(collate_wchar_do_transform
, 16)
1539 basic_string_wchar
* __thiscall
collate_wchar_do_transform(const collate
*this,
1540 basic_string_wchar
*ret
, const wchar_t *first
, const wchar_t *last
)
1542 FIXME("(%p %p %p) stub\n", this, first
, last
);
1546 /* ?transform@?$collate@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
1547 /* ?transform@?$collate@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
1548 /* ?transform@?$collate@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
1549 /* ?transform@?$collate@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
1550 DEFINE_THISCALL_WRAPPER(collate_wchar_transform
, 16)
1551 basic_string_wchar
* __thiscall
collate_wchar_transform(const collate
*this,
1552 basic_string_wchar
*ret
, const wchar_t *first
, const wchar_t *last
)
1554 FIXME("(%p %p %p) stub\n", this, first
, last
);
1558 /* ??_7ctype_base@std@@6B@ */
1559 extern const vtable_ptr ctype_base_vtable
;
1561 /* ??0ctype_base@std@@QAE@I@Z */
1562 /* ??0ctype_base@std@@QEAA@_K@Z */
1563 DEFINE_THISCALL_WRAPPER(ctype_base_ctor_refs
, 8)
1564 ctype_base
* __thiscall
ctype_base_ctor_refs(ctype_base
*this, size_t refs
)
1566 TRACE("(%p %Iu)\n", this, refs
);
1567 locale_facet_ctor_refs(&this->facet
, refs
);
1568 this->facet
.vtable
= &ctype_base_vtable
;
1572 /* ??_Fctype_base@std@@QAEXXZ */
1573 /* ??_Fctype_base@std@@QEAAXXZ */
1574 DEFINE_THISCALL_WRAPPER(ctype_base_ctor
, 4)
1575 ctype_base
* __thiscall
ctype_base_ctor(ctype_base
*this)
1577 TRACE("(%p)\n", this);
1578 locale_facet_ctor_refs(&this->facet
, 0);
1579 this->facet
.vtable
= &ctype_base_vtable
;
1583 /* ??1ctype_base@std@@UAE@XZ */
1584 /* ??1ctype_base@std@@UEAA@XZ */
1585 DEFINE_THISCALL_WRAPPER(ctype_base_dtor
, 4)
1586 void __thiscall
ctype_base_dtor(ctype_base
*this)
1588 TRACE("(%p)\n", this);
1591 DEFINE_THISCALL_WRAPPER(ctype_base_vector_dtor
, 8)
1592 ctype_base
* __thiscall
ctype_base_vector_dtor(ctype_base
*this, unsigned int flags
)
1594 TRACE("(%p %x)\n", this, flags
);
1596 /* we have an array, with the number of elements stored before the first object */
1597 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1599 for(i
=*ptr
-1; i
>=0; i
--)
1600 ctype_base_dtor(this+i
);
1601 operator_delete(ptr
);
1603 ctype_base_dtor(this);
1605 operator_delete(this);
1611 /* ?_Xran@ctype_base@std@@KAXXZ */
1612 void __cdecl
ctype_base__Xran(void)
1614 _Xout_of_range("out of range in ctype<T>");
1617 /* ?id@?$ctype@D@std@@2V0locale@2@A */
1618 locale_id ctype_char_id
= {0};
1619 /* ?table_size@?$ctype@D@std@@2IB */
1620 /* ?table_size@?$ctype@D@std@@2_KB */
1621 size_t ctype_char_table_size
= 256;
1623 /* ??_7?$ctype@D@std@@6B@ */
1624 extern const vtable_ptr ctype_char_vtable
;
1626 /* ?_Id_func@?$ctype@D@std@@SAAAVid@locale@2@XZ */
1627 /* ?_Id_func@?$ctype@D@std@@SAAEAVid@locale@2@XZ */
1628 locale_id
* __cdecl
ctype_char__Id_func(void)
1631 return &ctype_char_id
;
1634 /* ?_Init@?$ctype@D@std@@IAEXABV_Locinfo@2@@Z */
1635 /* ?_Init@?$ctype@D@std@@IEAAXAEBV_Locinfo@2@@Z */
1636 DEFINE_THISCALL_WRAPPER(ctype_char__Init
, 8)
1637 void __thiscall
ctype_char__Init(ctype_char
*this, const _Locinfo
*locinfo
)
1639 TRACE("(%p %p)\n", this, locinfo
);
1640 _Locinfo__Getctype(locinfo
, &this->ctype
);
1643 /* ?_Tidy@?$ctype@D@std@@IAEXXZ */
1644 /* ?_Tidy@?$ctype@D@std@@IEAAXXZ */
1645 DEFINE_THISCALL_WRAPPER(ctype_char__Tidy
, 4)
1646 void __thiscall
ctype_char__Tidy(ctype_char
*this)
1648 TRACE("(%p)\n", this);
1650 if(this->ctype
.delfl
)
1651 free((short*)this->ctype
.table
);
1652 #if _MSVCP_VER >= 110
1653 free(this->ctype
.name
);
1657 /* ?classic_table@?$ctype@D@std@@KAPBFXZ */
1658 /* ?classic_table@?$ctype@D@std@@KAPEBFXZ */
1659 const short* __cdecl
ctype_char_classic_table(void)
1664 ctype
= ctype_char_use_facet( locale_classic() );
1665 return ctype
->ctype
.table
;
1668 /* ??0?$ctype@D@std@@QAE@ABV_Locinfo@1@I@Z */
1669 /* ??0?$ctype@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1670 DEFINE_THISCALL_WRAPPER(ctype_char_ctor_locinfo
, 12)
1671 ctype_char
* __thiscall
ctype_char_ctor_locinfo(ctype_char
*this,
1672 const _Locinfo
*locinfo
, size_t refs
)
1674 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
1675 ctype_base_ctor_refs(&this->base
, refs
);
1676 this->base
.facet
.vtable
= &ctype_char_vtable
;
1677 ctype_char__Init(this, locinfo
);
1681 /* ??0?$ctype@D@std@@QAE@PBF_NI@Z */
1682 /* ??0?$ctype@D@std@@QEAA@PEBF_N_K@Z */
1683 DEFINE_THISCALL_WRAPPER(ctype_char_ctor_table
, 16)
1684 ctype_char
* __thiscall
ctype_char_ctor_table(ctype_char
*this,
1685 const short *table
, bool delete, size_t refs
)
1689 TRACE("(%p %p %d %Iu)\n", this, table
, delete, refs
);
1691 ctype_base_ctor_refs(&this->base
, refs
);
1692 this->base
.facet
.vtable
= &ctype_char_vtable
;
1694 _Locinfo_ctor(&locinfo
);
1695 ctype_char__Init(this, &locinfo
);
1696 _Locinfo_dtor(&locinfo
);
1699 ctype_char__Tidy(this);
1700 this->ctype
.table
= table
;
1701 this->ctype
.delfl
= delete;
1706 /* ??_F?$ctype@D@std@@QAEXXZ */
1707 /* ??_F?$ctype@D@std@@QEAAXXZ */
1708 DEFINE_THISCALL_WRAPPER(ctype_char_ctor
, 4)
1709 ctype_char
* __thiscall
ctype_char_ctor(ctype_char
*this)
1711 return ctype_char_ctor_table(this, NULL
, FALSE
, 0);
1714 /* ??1?$ctype@D@std@@UAE@XZ */
1715 /* ??1?$ctype@D@std@@UEAA@XZ */
1716 /* ??1?$ctype@D@std@@MAE@XZ */
1717 /* ??1?$ctype@D@std@@MEAA@XZ */
1718 DEFINE_THISCALL_WRAPPER(ctype_char_dtor
, 4)
1719 void __thiscall
ctype_char_dtor(ctype_char
*this)
1721 TRACE("(%p)\n", this);
1722 ctype_char__Tidy(this);
1725 DEFINE_THISCALL_WRAPPER(ctype_char_vector_dtor
, 8)
1726 ctype_char
* __thiscall
ctype_char_vector_dtor(ctype_char
*this, unsigned int flags
)
1728 TRACE("(%p %x)\n", this, flags
);
1730 /* we have an array, with the number of elements stored before the first object */
1731 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1733 for(i
=*ptr
-1; i
>=0; i
--)
1734 ctype_char_dtor(this+i
);
1735 operator_delete(ptr
);
1737 ctype_char_dtor(this);
1739 operator_delete(this);
1745 /* ?do_narrow@?$ctype@D@std@@MBEDDD@Z */
1746 /* ?do_narrow@?$ctype@D@std@@MEBADDD@Z */
1747 DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow_ch
, 12)
1748 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
1749 #define call_ctype_char_do_narrow_ch(this, ch, unused) CALL_VTBL_FUNC(this, 36, \
1750 char, (const ctype_char*, char, char), (this, ch, unused))
1751 #elif _MSVCP_VER <= 100
1752 #define call_ctype_char_do_narrow_ch(this, ch, unused) CALL_VTBL_FUNC(this, 32, \
1753 char, (const ctype_char*, char, char), (this, ch, unused))
1755 #define call_ctype_char_do_narrow_ch(this, ch, unused) CALL_VTBL_FUNC(this, 40, \
1756 char, (const ctype_char*, char, char), (this, ch, unused))
1758 char __thiscall
ctype_char_do_narrow_ch(const ctype_char
*this, char ch
, char unused
)
1760 TRACE("(%p %c %c)\n", this, ch
, unused
);
1764 /* ?do_narrow@?$ctype@D@std@@MBEPBDPBD0DPAD@Z */
1765 /* ?do_narrow@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD@Z */
1766 DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow
, 20)
1767 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
1768 #define call_ctype_char_do_narrow(this, first, last, unused, dest) CALL_VTBL_FUNC(this, 32, \
1769 const char*, (const ctype_char*, const char*, const char*, char, char*), \
1770 (this, first, last, unused, dest))
1771 #elif _MSVCP_VER <= 100
1772 #define call_ctype_char_do_narrow(this, first, last, unused, dest) CALL_VTBL_FUNC(this, 28, \
1773 const char*, (const ctype_char*, const char*, const char*, char, char*), \
1774 (this, first, last, unused, dest))
1776 #define call_ctype_char_do_narrow(this, first, last, unused, dest) CALL_VTBL_FUNC(this, 36, \
1777 const char*, (const ctype_char*, const char*, const char*, char, char*), \
1778 (this, first, last, unused, dest))
1780 const char* __thiscall
ctype_char_do_narrow(const ctype_char
*this,
1781 const char *first
, const char *last
, char unused
, char *dest
)
1783 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1784 memcpy(dest
, first
, last
-first
);
1788 /* ?_Do_narrow_s@?$ctype@D@std@@MBEPBDPBD0DPADI@Z */
1789 /* ?_Do_narrow_s@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD_K@Z */
1790 DEFINE_THISCALL_WRAPPER(ctype_char__Do_narrow_s
, 24)
1791 #define call_ctype_char__Do_narrow_s(this, first, last, unused, dest, size) CALL_VTBL_FUNC(this, 40, \
1792 const char*, (const ctype_char*, const char*, const char*, char, char*, size_t), \
1793 (this, first, last, unused, dest, size))
1794 const char* __thiscall
ctype_char__Do_narrow_s(const ctype_char
*this, const char *first
,
1795 const char *last
, char unused
, char *dest
, size_t size
)
1797 TRACE("(%p %p %p %p %Iu)\n", this, first
, last
, dest
, size
);
1798 memcpy_s(dest
, size
, first
, last
-first
);
1802 /* ?narrow@?$ctype@D@std@@QBEDDD@Z */
1803 /* ?narrow@?$ctype@D@std@@QEBADDD@Z */
1804 DEFINE_THISCALL_WRAPPER(ctype_char_narrow_ch
, 12)
1805 char __thiscall
ctype_char_narrow_ch(const ctype_char
*this, char ch
, char dflt
)
1807 TRACE("(%p %c %c)\n", this, ch
, dflt
);
1808 return call_ctype_char_do_narrow_ch(this, ch
, dflt
);
1811 /* ?narrow@?$ctype@D@std@@QBEPBDPBD0DPAD@Z */
1812 /* ?narrow@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD@Z */
1813 DEFINE_THISCALL_WRAPPER(ctype_char_narrow
, 20)
1814 const char* __thiscall
ctype_char_narrow(const ctype_char
*this,
1815 const char *first
, const char *last
, char dflt
, char *dest
)
1817 TRACE("(%p %p %p %c %p)\n", this, first
, last
, dflt
, dest
);
1818 return call_ctype_char_do_narrow(this, first
, last
, dflt
, dest
);
1821 /* ?_Narrow_s@?$ctype@D@std@@QBEPBDPBD0DPADI@Z */
1822 /* ?_Narrow_s@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD_K@Z */
1823 DEFINE_THISCALL_WRAPPER(ctype_char__Narrow_s
, 24)
1824 const char* __thiscall
ctype_char__Narrow_s(const ctype_char
*this, const char *first
,
1825 const char *last
, char dflt
, char *dest
, size_t size
)
1827 TRACE("(%p %p %p %p %Iu)\n", this, first
, last
, dest
, size
);
1828 return call_ctype_char__Do_narrow_s(this, first
, last
, dflt
, dest
, size
);
1831 /* ?do_widen@?$ctype@D@std@@MBEDD@Z */
1832 /* ?do_widen@?$ctype@D@std@@MEBADD@Z */
1833 DEFINE_THISCALL_WRAPPER(ctype_char_do_widen_ch
, 8)
1834 #if _MSVCP_VER <= 100
1835 #define call_ctype_char_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
1836 char, (const ctype_char*, char), (this, ch))
1838 #define call_ctype_char_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 32, \
1839 char, (const ctype_char*, char), (this, ch))
1841 char __thiscall
ctype_char_do_widen_ch(const ctype_char
*this, char ch
)
1843 TRACE("(%p %c)\n", this, ch
);
1847 /* ?do_widen@?$ctype@D@std@@MBEPBDPBD0PAD@Z */
1848 /* ?do_widen@?$ctype@D@std@@MEBAPEBDPEBD0PEAD@Z */
1849 DEFINE_THISCALL_WRAPPER(ctype_char_do_widen
, 16)
1850 #if _MSVCP_VER <= 100
1851 #define call_ctype_char_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 20, \
1852 const char*, (const ctype_char*, const char*, const char*, char*), \
1853 (this, first, last, dest))
1855 #define call_ctype_char_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 28, \
1856 const char*, (const ctype_char*, const char*, const char*, char*), \
1857 (this, first, last, dest))
1859 const char* __thiscall
ctype_char_do_widen(const ctype_char
*this,
1860 const char *first
, const char *last
, char *dest
)
1862 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1863 memcpy(dest
, first
, last
-first
);
1867 /* ?_Do_widen_s@?$ctype@D@std@@MBEPBDPBD0PADI@Z */
1868 /* ?_Do_widen_s@?$ctype@D@std@@MEBAPEBDPEBD0PEAD_K@Z */
1869 DEFINE_THISCALL_WRAPPER(ctype_char__Do_widen_s
, 20)
1870 #define call_ctype_char__Do_widen_s(this, first, last, dest, size) CALL_VTBL_FUNC(this, 28, \
1871 const char*, (const ctype_char*, const char*, const char*, char*, size_t), \
1872 (this, first, last, dest, size))
1873 const char* __thiscall
ctype_char__Do_widen_s(const ctype_char
*this,
1874 const char *first
, const char *last
, char *dest
, size_t size
)
1876 TRACE("(%p %p %p %p %Iu)\n", this, first
, last
, dest
, size
);
1877 memcpy_s(dest
, size
, first
, last
-first
);
1881 /* ?widen@?$ctype@D@std@@QBEDD@Z */
1882 /* ?widen@?$ctype@D@std@@QEBADD@Z */
1883 DEFINE_THISCALL_WRAPPER(ctype_char_widen_ch
, 8)
1884 char __thiscall
ctype_char_widen_ch(const ctype_char
*this, char ch
)
1886 TRACE("(%p %c)\n", this, ch
);
1887 return call_ctype_char_do_widen_ch(this, ch
);
1890 /* ?widen@?$ctype@D@std@@QBEPBDPBD0PAD@Z */
1891 /* ?widen@?$ctype@D@std@@QEBAPEBDPEBD0PEAD@Z */
1892 DEFINE_THISCALL_WRAPPER(ctype_char_widen
, 16)
1893 const char* __thiscall
ctype_char_widen(const ctype_char
*this,
1894 const char *first
, const char *last
, char *dest
)
1896 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1897 return call_ctype_char_do_widen(this, first
, last
, dest
);
1900 /* ?_Widen_s@?$ctype@D@std@@QBEPBDPBD0PADI@Z */
1901 /* ?_Widen_s@?$ctype@D@std@@QEBAPEBDPEBD0PEAD_K@Z */
1902 DEFINE_THISCALL_WRAPPER(ctype_char__Widen_s
, 20)
1903 const char* __thiscall
ctype_char__Widen_s(const ctype_char
*this,
1904 const char *first
, const char *last
, char *dest
, size_t size
)
1906 TRACE("(%p %p %p %p %Iu)\n", this, first
, last
, dest
, size
);
1907 return call_ctype_char__Do_widen_s(this, first
, last
, dest
, size
);
1910 /* ?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1911 /* ?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1912 size_t __cdecl
ctype_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
1914 TRACE("(%p %p)\n", facet
, loc
);
1916 if(facet
&& !*facet
) {
1919 *facet
= operator_new(sizeof(ctype_char
));
1920 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
1921 ctype_char_ctor_locinfo((ctype_char
*)*facet
, &locinfo
, 0);
1922 _Locinfo_dtor(&locinfo
);
1928 /* ?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@@Z */
1929 /* ?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1930 size_t __cdecl
ctype_char__Getcat_old(const locale_facet
**facet
)
1932 return ctype_char__Getcat(facet
, locale_classic());
1935 ctype_char
* ctype_char_use_facet(const locale
*loc
)
1937 static ctype_char
*obj
= NULL
;
1940 const locale_facet
*fac
;
1942 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1943 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_char_id
));
1945 _Lockit_dtor(&lock
);
1946 return (ctype_char
*)fac
;
1950 _Lockit_dtor(&lock
);
1954 ctype_char__Getcat(&fac
, loc
);
1955 obj
= (ctype_char
*)fac
;
1956 call_locale_facet__Incref(&obj
->base
.facet
);
1957 locale_facet_register(&obj
->base
.facet
);
1958 _Lockit_dtor(&lock
);
1964 int __cdecl
_Tolower(int ch
, const _Ctypevec
*ctype
)
1968 TRACE("%d %p\n", ch
, ctype
);
1973 cp
= ___lc_codepage_func();
1975 /* Don't convert to unicode in case of C locale */
1977 if(ch
>='A' && ch
<='Z')
1986 str
[0] = (ch
>>8) & 255;
1994 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, str
, size
, &wide
, 1))
1997 lower
= towlower(wide
);
2001 WideCharToMultiByte(cp
, 0, &lower
, 1, str
, 2, NULL
, NULL
);
2003 return str
[0] + (str
[1]<<8);
2007 /* ?do_tolower@?$ctype@D@std@@MBEDD@Z */
2008 /* ?do_tolower@?$ctype@D@std@@MEBADD@Z */
2009 #if _MSVCP_VER <= 100
2010 #define call_ctype_char_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 8, \
2011 char, (const ctype_char*, char), (this, ch))
2013 #define call_ctype_char_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 16, \
2014 char, (const ctype_char*, char), (this, ch))
2016 DEFINE_THISCALL_WRAPPER(ctype_char_do_tolower_ch
, 8)
2017 char __thiscall
ctype_char_do_tolower_ch(const ctype_char
*this, char ch
)
2019 TRACE("(%p %c)\n", this, ch
);
2020 return _Tolower(ch
, &this->ctype
);
2023 /* ?do_tolower@?$ctype@D@std@@MBEPBDPADPBD@Z */
2024 /* ?do_tolower@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z */
2025 #if _MSVCP_VER <= 100
2026 #define call_ctype_char_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 4, \
2027 const char*, (const ctype_char*, char*, const char*), (this, first, last))
2029 #define call_ctype_char_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 12, \
2030 const char*, (const ctype_char*, char*, const char*), (this, first, last))
2032 DEFINE_THISCALL_WRAPPER(ctype_char_do_tolower
, 12)
2033 const char* __thiscall
ctype_char_do_tolower(const ctype_char
*this, char *first
, const char *last
)
2035 TRACE("(%p %p %p)\n", this, first
, last
);
2036 for(; first
<last
; first
++)
2037 *first
= _Tolower(*first
, &this->ctype
);
2041 /* ?tolower@?$ctype@D@std@@QBEDD@Z */
2042 /* ?tolower@?$ctype@D@std@@QEBADD@Z */
2043 DEFINE_THISCALL_WRAPPER(ctype_char_tolower_ch
, 8)
2044 char __thiscall
ctype_char_tolower_ch(const ctype_char
*this, char ch
)
2046 TRACE("(%p %c)\n", this, ch
);
2047 return call_ctype_char_do_tolower_ch(this, ch
);
2050 /* ?tolower@?$ctype@D@std@@QBEPBDPADPBD@Z */
2051 /* ?tolower@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z */
2052 DEFINE_THISCALL_WRAPPER(ctype_char_tolower
, 12)
2053 const char* __thiscall
ctype_char_tolower(const ctype_char
*this, char *first
, const char *last
)
2055 TRACE("(%p %p %p)\n", this, first
, last
);
2056 return call_ctype_char_do_tolower(this, first
, last
);
2060 int __cdecl
_Toupper(int ch
, const _Ctypevec
*ctype
)
2064 TRACE("%d %p\n", ch
, ctype
);
2069 cp
= ___lc_codepage_func();
2071 /* Don't convert to unicode in case of C locale */
2073 if(ch
>='a' && ch
<='z')
2082 str
[0] = (ch
>>8) & 255;
2090 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, str
, size
, &wide
, 1))
2093 upper
= towupper(wide
);
2097 WideCharToMultiByte(cp
, 0, &upper
, 1, str
, 2, NULL
, NULL
);
2099 return str
[0] + (str
[1]<<8);
2103 /* ?do_toupper@?$ctype@D@std@@MBEDD@Z */
2104 /* ?do_toupper@?$ctype@D@std@@MEBADD@Z */
2105 #if _MSVCP_VER <= 100
2106 #define call_ctype_char_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 16, \
2107 char, (const ctype_char*, char), (this, ch))
2109 #define call_ctype_char_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
2110 char, (const ctype_char*, char), (this, ch))
2112 DEFINE_THISCALL_WRAPPER(ctype_char_do_toupper_ch
, 8)
2113 char __thiscall
ctype_char_do_toupper_ch(const ctype_char
*this, char ch
)
2115 TRACE("(%p %c)\n", this, ch
);
2116 return _Toupper(ch
, &this->ctype
);
2119 /* ?do_toupper@?$ctype@D@std@@MBEPBDPADPBD@Z */
2120 /* ?do_toupper@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z */
2121 #if _MSVCP_VER <= 100
2122 #define call_ctype_char_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 12, \
2123 const char*, (const ctype_char*, char*, const char*), (this, first, last))
2125 #define call_ctype_char_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 20, \
2126 const char*, (const ctype_char*, char*, const char*), (this, first, last))
2128 DEFINE_THISCALL_WRAPPER(ctype_char_do_toupper
, 12)
2129 const char* __thiscall
ctype_char_do_toupper(const ctype_char
*this,
2130 char *first
, const char *last
)
2132 TRACE("(%p %p %p)\n", this, first
, last
);
2133 for(; first
<last
; first
++)
2134 *first
= _Toupper(*first
, &this->ctype
);
2138 /* ?toupper@?$ctype@D@std@@QBEDD@Z */
2139 /* ?toupper@?$ctype@D@std@@QEBADD@Z */
2140 DEFINE_THISCALL_WRAPPER(ctype_char_toupper_ch
, 8)
2141 char __thiscall
ctype_char_toupper_ch(const ctype_char
*this, char ch
)
2143 TRACE("(%p %c)\n", this, ch
);
2144 return call_ctype_char_do_toupper_ch(this, ch
);
2147 /* ?toupper@?$ctype@D@std@@QBEPBDPADPBD@Z */
2148 /* ?toupper@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z */
2149 DEFINE_THISCALL_WRAPPER(ctype_char_toupper
, 12)
2150 const char* __thiscall
ctype_char_toupper(const ctype_char
*this, char *first
, const char *last
)
2152 TRACE("(%p %p %p)\n", this, first
, last
);
2153 return call_ctype_char_do_toupper(this, first
, last
);
2156 /* ?is@?$ctype@D@std@@QBE_NFD@Z */
2157 /* ?is@?$ctype@D@std@@QEBA_NFD@Z */
2158 DEFINE_THISCALL_WRAPPER(ctype_char_is_ch
, 12)
2159 bool __thiscall
ctype_char_is_ch(const ctype_char
*this, short mask
, char ch
)
2161 TRACE("(%p %x %c)\n", this, mask
, ch
);
2162 return (this->ctype
.table
[(unsigned char)ch
] & mask
) != 0;
2165 /* ?is@?$ctype@D@std@@QBEPBDPBD0PAF@Z */
2166 /* ?is@?$ctype@D@std@@QEBAPEBDPEBD0PEAF@Z */
2167 DEFINE_THISCALL_WRAPPER(ctype_char_is
, 16)
2168 const char* __thiscall
ctype_char_is(const ctype_char
*this, const char *first
, const char *last
, short *dest
)
2170 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2171 for(; first
<last
; first
++)
2172 *dest
++ = this->ctype
.table
[(unsigned char)*first
];
2176 /* ?scan_is@?$ctype@D@std@@QBEPBDFPBD0@Z */
2177 /* ?scan_is@?$ctype@D@std@@QEBAPEBDFPEBD0@Z */
2178 DEFINE_THISCALL_WRAPPER(ctype_char_scan_is
, 16)
2179 const char* __thiscall
ctype_char_scan_is(const ctype_char
*this, short mask
, const char *first
, const char *last
)
2181 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
2182 for(; first
<last
; first
++)
2183 if(!ctype_char_is_ch(this, mask
, *first
))
2188 /* ?scan_not@?$ctype@D@std@@QBEPBDFPBD0@Z */
2189 /* ?scan_not@?$ctype@D@std@@QEBAPEBDFPEBD0@Z */
2190 DEFINE_THISCALL_WRAPPER(ctype_char_scan_not
, 16)
2191 const char* __thiscall
ctype_char_scan_not(const ctype_char
*this, short mask
, const char *first
, const char *last
)
2193 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
2194 for(; first
<last
; first
++)
2195 if(ctype_char_is_ch(this, mask
, *first
))
2200 /* ?table@?$ctype@D@std@@IBEPBFXZ */
2201 /* ?table@?$ctype@D@std@@IEBAPEBFXZ */
2202 DEFINE_THISCALL_WRAPPER(ctype_char_table
, 4)
2203 const short* __thiscall
ctype_char_table(const ctype_char
*this)
2205 TRACE("(%p)\n", this);
2206 return this->ctype
.table
;
2209 /* ?id@?$ctype@_W@std@@2V0locale@2@A */
2210 locale_id ctype_wchar_id
= {0};
2211 /* ?id@?$ctype@G@std@@2V0locale@2@A */
2212 locale_id ctype_short_id
= {0};
2214 /* ??_7?$ctype@_W@std@@6B@ */
2215 extern const vtable_ptr ctype_wchar_vtable
;
2216 /* ??_7?$ctype@G@std@@6B@ */
2217 extern const vtable_ptr ctype_short_vtable
;
2219 /* ?_Id_func@?$ctype@_W@std@@SAAAVid@locale@2@XZ */
2220 /* ?_Id_func@?$ctype@_W@std@@SAAEAVid@locale@2@XZ */
2221 locale_id
* __cdecl
ctype_wchar__Id_func(void)
2224 return &ctype_wchar_id
;
2227 /* ?_Id_func@?$ctype@G@std@@SAAAVid@locale@2@XZ */
2228 /* ?_Id_func@?$ctype@G@std@@SAAEAVid@locale@2@XZ */
2229 locale_id
* __cdecl
ctype_short__Id_func(void)
2232 return &ctype_short_id
;
2235 /* ?_Init@?$ctype@_W@std@@IAEXABV_Locinfo@2@@Z */
2236 /* ?_Init@?$ctype@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
2237 /* ?_Init@?$ctype@G@std@@IAEXABV_Locinfo@2@@Z */
2238 /* ?_Init@?$ctype@G@std@@IEAAXAEBV_Locinfo@2@@Z */
2239 DEFINE_THISCALL_WRAPPER(ctype_wchar__Init
, 8)
2240 void __thiscall
ctype_wchar__Init(ctype_wchar
*this, const _Locinfo
*locinfo
)
2242 TRACE("(%p %p)\n", this, locinfo
);
2243 _Locinfo__Getctype(locinfo
, &this->ctype
);
2244 _Locinfo__Getcvt(locinfo
, &this->cvt
);
2247 /* ??0?$ctype@_W@std@@QAE@ABV_Locinfo@1@I@Z */
2248 /* ??0?$ctype@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
2249 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor_locinfo
, 12)
2250 ctype_wchar
* __thiscall
ctype_wchar_ctor_locinfo(ctype_wchar
*this,
2251 const _Locinfo
*locinfo
, size_t refs
)
2253 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
2254 ctype_base_ctor_refs(&this->base
, refs
);
2255 this->base
.facet
.vtable
= &ctype_wchar_vtable
;
2256 ctype_wchar__Init(this, locinfo
);
2260 /* ??0?$ctype@G@std@@QAE@ABV_Locinfo@1@I@Z */
2261 /* ??0?$ctype@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
2262 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_locinfo
, 12)
2263 ctype_wchar
* __thiscall
ctype_short_ctor_locinfo(ctype_wchar
*this,
2264 const _Locinfo
*locinfo
, size_t refs
)
2266 ctype_wchar
*ret
= ctype_wchar_ctor_locinfo(this, locinfo
, refs
);
2267 this->base
.facet
.vtable
= &ctype_short_vtable
;
2271 /* ??0?$ctype@_W@std@@QAE@I@Z */
2272 /* ??0?$ctype@_W@std@@QEAA@_K@Z */
2273 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor_refs
, 8)
2274 ctype_wchar
* __thiscall
ctype_wchar_ctor_refs(ctype_wchar
*this, size_t refs
)
2278 TRACE("(%p %Iu)\n", this, refs
);
2280 ctype_base_ctor_refs(&this->base
, refs
);
2281 this->base
.facet
.vtable
= &ctype_wchar_vtable
;
2283 _Locinfo_ctor(&locinfo
);
2284 ctype_wchar__Init(this, &locinfo
);
2285 _Locinfo_dtor(&locinfo
);
2289 /* ??0?$ctype@G@std@@QAE@I@Z */
2290 /* ??0?$ctype@G@std@@QEAA@_K@Z */
2291 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_refs
, 8)
2292 ctype_wchar
* __thiscall
ctype_short_ctor_refs(ctype_wchar
*this, size_t refs
)
2294 ctype_wchar
*ret
= ctype_wchar_ctor_refs(this, refs
);
2295 this->base
.facet
.vtable
= &ctype_short_vtable
;
2299 /* ??0?$ctype@G@std@@IAE@PBDI@Z */
2300 /* ??0?$ctype@G@std@@IEAA@PEBD_K@Z */
2301 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_name
, 12)
2302 ctype_wchar
* __thiscall
ctype_short_ctor_name(ctype_wchar
*this,
2303 const char *name
, size_t refs
)
2307 TRACE("(%p %s %Iu)\n", this, debugstr_a(name
), refs
);
2309 ctype_base_ctor_refs(&this->base
, refs
);
2310 this->base
.facet
.vtable
= &ctype_short_vtable
;
2312 _Locinfo_ctor_cstr(&locinfo
, name
);
2313 ctype_wchar__Init(this, &locinfo
);
2314 _Locinfo_dtor(&locinfo
);
2318 /* ??_F?$ctype@_W@std@@QAEXXZ */
2319 /* ??_F?$ctype@_W@std@@QEAAXXZ */
2320 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor
, 4)
2321 ctype_wchar
* __thiscall
ctype_wchar_ctor(ctype_wchar
*this)
2323 TRACE("(%p)\n", this);
2324 return ctype_short_ctor_refs(this, 0);
2327 /* ??_F?$ctype@G@std@@QAEXXZ */
2328 /* ??_F?$ctype@G@std@@QEAAXXZ */
2329 DEFINE_THISCALL_WRAPPER(ctype_short_ctor
, 4)
2330 ctype_wchar
* __thiscall
ctype_short_ctor(ctype_wchar
*this)
2332 ctype_wchar
*ret
= ctype_wchar_ctor(this);
2333 this->base
.facet
.vtable
= &ctype_short_vtable
;
2337 /* ??1?$ctype@G@std@@UAE@XZ */
2338 /* ??1?$ctype@G@std@@UEAA@XZ */
2339 /* ??1?$ctype@_W@std@@MAE@XZ */
2340 /* ??1?$ctype@_W@std@@MEAA@XZ */
2341 /* ??1?$ctype@G@std@@MAE@XZ */
2342 /* ??1?$ctype@G@std@@MEAA@XZ */
2343 DEFINE_THISCALL_WRAPPER(ctype_wchar_dtor
, 4)
2344 void __thiscall
ctype_wchar_dtor(ctype_wchar
*this)
2346 TRACE("(%p)\n", this);
2347 if(this->ctype
.delfl
)
2348 free((void*)this->ctype
.table
);
2349 #if _MSVCP_VER >= 110
2350 free(this->ctype
.name
);
2354 DEFINE_THISCALL_WRAPPER(ctype_wchar_vector_dtor
, 8)
2355 ctype_wchar
* __thiscall
ctype_wchar_vector_dtor(ctype_wchar
*this, unsigned int flags
)
2357 TRACE("(%p %x)\n", this, flags
);
2359 /* we have an array, with the number of elements stored before the first object */
2360 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
2362 for(i
=*ptr
-1; i
>=0; i
--)
2363 ctype_wchar_dtor(this+i
);
2364 operator_delete(ptr
);
2366 ctype_wchar_dtor(this);
2368 operator_delete(this);
2375 int __cdecl
_Wcrtomb(char *s
, wchar_t wch
, _Mbstatet
*state
, const _Cvtvec
*cvt
)
2380 TRACE("%p %d %p %p\n", s
, wch
, state
, cvt
);
2385 cp
= ___lc_codepage_func();
2397 size
= WideCharToMultiByte(cp
, 0, &wch
, 1, s
, MB_LEN_MAX
, NULL
, &def
);
2406 /* ?_Donarrow@?$ctype@_W@std@@IBED_WD@Z */
2407 /* ?_Donarrow@?$ctype@_W@std@@IEBAD_WD@Z */
2408 /* ?_Donarrow@?$ctype@G@std@@IBEDGD@Z */
2409 /* ?_Donarrow@?$ctype@G@std@@IEBADGD@Z */
2410 DEFINE_THISCALL_WRAPPER(ctype_wchar__Donarrow
, 12)
2411 char __thiscall
ctype_wchar__Donarrow(const ctype_wchar
*this, wchar_t ch
, char dflt
)
2413 char buf
[MB_LEN_MAX
];
2415 TRACE("(%p %d %d)\n", this, ch
, dflt
);
2417 return _Wcrtomb(buf
, ch
, NULL
, &this->cvt
)==1 ? buf
[0] : dflt
;
2420 /* ?do_narrow@?$ctype@_W@std@@MBED_WD@Z */
2421 /* ?do_narrow@?$ctype@_W@std@@MEBAD_WD@Z */
2422 /* ?do_narrow@?$ctype@G@std@@MBEDGD@Z */
2423 /* ?do_narrow@?$ctype@G@std@@MEBADGD@Z */
2424 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow_ch
, 12)
2425 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
2426 #define call_ctype_wchar_do_narrow_ch(this, ch, dflt) CALL_VTBL_FUNC(this, 52, \
2427 char, (const ctype_wchar*, wchar_t, char), (this, ch, dflt))
2428 #elif _MSVCP_VER <= 100
2429 #define call_ctype_wchar_do_narrow_ch(this, ch, dflt) CALL_VTBL_FUNC(this, 48, \
2430 char, (const ctype_wchar*, wchar_t, char), (this, ch, dflt))
2432 #define call_ctype_wchar_do_narrow_ch(this, ch, dflt) CALL_VTBL_FUNC(this, 56, \
2433 char, (const ctype_wchar*, wchar_t, char), (this, ch, dflt))
2435 char __thiscall
ctype_wchar_do_narrow_ch(const ctype_wchar
*this, wchar_t ch
, char dflt
)
2437 return ctype_wchar__Donarrow(this, ch
, dflt
);
2440 /* ?do_narrow@?$ctype@_W@std@@MBEPB_WPB_W0DPAD@Z */
2441 /* ?do_narrow@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD@Z */
2442 /* ?do_narrow@?$ctype@G@std@@MBEPBGPBG0DPAD@Z */
2443 /* ?do_narrow@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD@Z */
2444 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow
, 20)
2445 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
2446 #define call_ctype_wchar_do_narrow(this, first, last, dflt, dest) CALL_VTBL_FUNC(this, 48, \
2447 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*), \
2448 (this, first, last, dflt, dest))
2449 #elif _MSVCP_VER <= 100
2450 #define call_ctype_wchar_do_narrow(this, first, last, dflt, dest) CALL_VTBL_FUNC(this, 44, \
2451 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*), \
2452 (this, first, last, dflt, dest))
2454 #define call_ctype_wchar_do_narrow(this, first, last, dflt, dest) CALL_VTBL_FUNC(this, 52, \
2455 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*), \
2456 (this, first, last, dflt, dest))
2458 const wchar_t* __thiscall
ctype_wchar_do_narrow(const ctype_wchar
*this,
2459 const wchar_t *first
, const wchar_t *last
, char dflt
, char *dest
)
2461 TRACE("(%p %p %p %d %p)\n", this, first
, last
, dflt
, dest
);
2462 for(; first
<last
; first
++)
2463 *dest
++ = ctype_wchar__Donarrow(this, *first
, dflt
);
2467 /* ?_Do_narrow_s@?$ctype@_W@std@@MBEPB_WPB_W0DPADI@Z */
2468 /* ?_Do_narrow_s@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD_K@Z */
2469 /* ?_Do_narrow_s@?$ctype@G@std@@MBEPBGPBG0DPADI@Z */
2470 /* ?_Do_narrow_s@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD_K@Z */
2471 DEFINE_THISCALL_WRAPPER(ctype_wchar__Do_narrow_s
, 24)
2472 #define call_ctype_wchar__Do_narrow_s(this, first, last, dflt, dest, size) CALL_VTBL_FUNC(this, 56, \
2473 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*, size_t), \
2474 (this, first, last, dflt, dest, size))
2475 const wchar_t* __thiscall
ctype_wchar__Do_narrow_s(const ctype_wchar
*this,
2476 const wchar_t *first
, const wchar_t *last
, char dflt
, char *dest
, size_t size
)
2478 TRACE("(%p %p %p %d %p %Iu)\n", this, first
, last
, dflt
, dest
, size
);
2479 /* This function converts all multi-byte characters to dflt,
2480 * thanks to it result size is known before converting */
2481 if(last
-first
> size
)
2483 return ctype_wchar_do_narrow(this, first
, last
, dflt
, dest
);
2486 /* ?narrow@?$ctype@_W@std@@QBED_WD@Z */
2487 /* ?narrow@?$ctype@_W@std@@QEBAD_WD@Z */
2488 /* ?narrow@?$ctype@G@std@@QBEDGD@Z */
2489 /* ?narrow@?$ctype@G@std@@QEBADGD@Z */
2490 DEFINE_THISCALL_WRAPPER(ctype_wchar_narrow_ch
, 12)
2491 char __thiscall
ctype_wchar_narrow_ch(const ctype_wchar
*this, wchar_t ch
, char dflt
)
2493 TRACE("(%p %d %d)\n", this, ch
, dflt
);
2494 return call_ctype_wchar_do_narrow_ch(this, ch
, dflt
);
2497 /* ?narrow@?$ctype@_W@std@@QBEPB_WPB_W0DPAD@Z */
2498 /* ?narrow@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD@Z */
2499 /* ?narrow@?$ctype@G@std@@QBEPBGPBG0DPAD@Z */
2500 /* ?narrow@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD@Z */
2501 DEFINE_THISCALL_WRAPPER(ctype_wchar_narrow
, 20)
2502 const wchar_t* __thiscall
ctype_wchar_narrow(const ctype_wchar
*this,
2503 const wchar_t *first
, const wchar_t *last
, char dflt
, char *dest
)
2505 TRACE("(%p %p %p %d %p)\n", this, first
, last
, dflt
, dest
);
2506 return call_ctype_wchar_do_narrow(this, first
, last
, dflt
, dest
);
2509 /* ?_Narrow_s@?$ctype@_W@std@@QBEPB_WPB_W0DPADI@Z */
2510 /* ?_Narrow_s@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD_K@Z */
2511 /* ?_Narrow_s@?$ctype@G@std@@QBEPBGPBG0DPADI@Z */
2512 /* ?_Narrow_s@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD_K@Z */
2513 DEFINE_THISCALL_WRAPPER(ctype_wchar__Narrow_s
, 24)
2514 const wchar_t* __thiscall
ctype_wchar__Narrow_s(const ctype_wchar
*this, const wchar_t *first
,
2515 const wchar_t *last
, char dflt
, char *dest
, size_t size
)
2517 TRACE("(%p %p %p %d %p %Iu)\n", this, first
, last
, dflt
, dest
, size
);
2518 return call_ctype_wchar__Do_narrow_s(this, first
, last
, dflt
, dest
, size
);
2522 int __cdecl
_Mbrtowc(wchar_t *out
, const char *in
, size_t len
, _Mbstatet
*state
, const _Cvtvec
*cvt
)
2528 TRACE("(%p %p %Iu %p %p)\n", out
, in
, len
, state
, cvt
);
2536 cp
= ___lc_codepage_func();
2540 *out
= (unsigned char)*in
;
2542 memset(state
, 0, sizeof(*state
));
2546 if(MBSTATET_TO_INT(state
)) {
2547 ((char*)&MBSTATET_TO_INT(state
))[1] = *in
;
2549 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, (char*)&MBSTATET_TO_INT(state
), 2, out
, out
? 1 : 0)) {
2550 memset(state
, 0, sizeof(*state
));
2555 memset(state
, 0, sizeof(*state
));
2559 GetCPInfo(cp
, &cp_info
);
2561 for(i
=0; i
<MAX_LEADBYTES
; i
+=2) {
2562 if(!cp_info
.LeadByte
[i
+1])
2564 if((unsigned char)*in
>=cp_info
.LeadByte
[i
] && (unsigned char)*in
<=cp_info
.LeadByte
[i
+1]) {
2572 MBSTATET_TO_INT(state
) = (unsigned char)*in
;
2576 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, in
, 2, out
, out
? 1 : 0)) {
2583 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, in
, 1, out
, out
? 1 : 0)) {
2590 static inline wchar_t mb_to_wc(char ch
, const _Cvtvec
*cvt
)
2595 memset(&state
, 0, sizeof(state
));
2596 return _Mbrtowc(&ret
, &ch
, 1, &state
, cvt
) == 1 ? ret
: 0;
2599 /* ?_Dowiden@?$ctype@_W@std@@IBE_WD@Z */
2600 /* ?_Dowiden@?$ctype@_W@std@@IEBA_WD@Z */
2601 /* ?_Dowiden@?$ctype@G@std@@IBEGD@Z */
2602 /* ?_Dowiden@?$ctype@G@std@@IEBAGD@Z */
2603 DEFINE_THISCALL_WRAPPER(ctype_wchar__Dowiden
, 8)
2604 wchar_t __thiscall
ctype_wchar__Dowiden(const ctype_wchar
*this, char ch
)
2609 TRACE("(%p %d)\n", this, ch
);
2611 memset(&state
, 0, sizeof(state
));
2612 return _Mbrtowc(&ret
, &ch
, 1, &state
, &this->cvt
)<0 ? WEOF
: ret
;
2615 /* ?do_widen@?$ctype@_W@std@@MBE_WD@Z */
2616 /* ?do_widen@?$ctype@_W@std@@MEBA_WD@Z */
2617 /* ?do_widen@?$ctype@G@std@@MBEGD@Z */
2618 /* ?do_widen@?$ctype@G@std@@MEBAGD@Z */
2619 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_widen_ch
, 8)
2620 #if _MSVCP_VER <= 100
2621 #define call_ctype_wchar_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 40, \
2622 wchar_t, (const ctype_wchar*, char), (this, ch))
2624 #define call_ctype_wchar_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 48, \
2625 wchar_t, (const ctype_wchar*, char), (this, ch))
2627 wchar_t __thiscall
ctype_wchar_do_widen_ch(const ctype_wchar
*this, char ch
)
2629 return ctype_wchar__Dowiden(this, ch
);
2632 /* ?do_widen@?$ctype@_W@std@@MBEPBDPBD0PA_W@Z */
2633 /* ?do_widen@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W@Z */
2634 /* ?do_widen@?$ctype@G@std@@MBEPBDPBD0PAG@Z */
2635 /* ?do_widen@?$ctype@G@std@@MEBAPEBDPEBD0PEAG@Z */
2636 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_widen
, 16)
2637 #if _MSVCP_VER <= 100
2638 #define call_ctype_wchar_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 36, \
2639 const char*, (const ctype_wchar*, const char*, const char*, wchar_t*), \
2640 (this, first, last, dest))
2642 #define call_ctype_wchar_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 44, \
2643 const char*, (const ctype_wchar*, const char*, const char*, wchar_t*), \
2644 (this, first, last, dest))
2646 const char* __thiscall
ctype_wchar_do_widen(const ctype_wchar
*this,
2647 const char *first
, const char *last
, wchar_t *dest
)
2649 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2650 for(; first
<last
; first
++)
2651 *dest
++ = ctype_wchar__Dowiden(this, *first
);
2655 /* ?_Do_widen_s@?$ctype@_W@std@@MBEPBDPBD0PA_WI@Z */
2656 /* ?_Do_widen_s@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W_K@Z */
2657 /* ?_Do_widen_s@?$ctype@G@std@@MBEPBDPBD0PAGI@Z */
2658 /* ?_Do_widen_s@?$ctype@G@std@@MEBAPEBDPEBD0PEAG_K@Z */
2659 DEFINE_THISCALL_WRAPPER(ctype_wchar__Do_widen_s
, 20)
2660 #define call_ctype_wchar__Do_widen_s(this, first, last, dest, size) CALL_VTBL_FUNC(this, 44, \
2661 const char*, (const ctype_wchar*, const char*, const char*, wchar_t*, size_t), \
2662 (this, first, last, dest, size))
2663 const char* __thiscall
ctype_wchar__Do_widen_s(const ctype_wchar
*this,
2664 const char *first
, const char *last
, wchar_t *dest
, size_t size
)
2666 TRACE("(%p %p %p %p %Iu)\n", this, first
, last
, dest
, size
);
2667 /* This function converts all multi-byte characters to WEOF,
2668 * thanks to it result size is known before converting */
2669 if(size
< last
-first
)
2671 return ctype_wchar_do_widen(this, first
, last
, dest
);
2674 /* ?widen@?$ctype@_W@std@@QBE_WD@Z */
2675 /* ?widen@?$ctype@_W@std@@QEBA_WD@Z */
2676 /* ?widen@?$ctype@G@std@@QBEGD@Z */
2677 /* ?widen@?$ctype@G@std@@QEBAGD@Z */
2678 DEFINE_THISCALL_WRAPPER(ctype_wchar_widen_ch
, 8)
2679 wchar_t __thiscall
ctype_wchar_widen_ch(const ctype_wchar
*this, char ch
)
2681 TRACE("(%p %d)\n", this, ch
);
2682 return call_ctype_wchar_do_widen_ch(this, ch
);
2685 /* ?widen@?$ctype@_W@std@@QBEPBDPBD0PA_W@Z */
2686 /* ?widen@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W@Z */
2687 /* ?widen@?$ctype@G@std@@QBEPBDPBD0PAG@Z */
2688 /* ?widen@?$ctype@G@std@@QEBAPEBDPEBD0PEAG@Z */
2689 DEFINE_THISCALL_WRAPPER(ctype_wchar_widen
, 16)
2690 const char* __thiscall
ctype_wchar_widen(const ctype_wchar
*this,
2691 const char *first
, const char *last
, wchar_t *dest
)
2693 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2694 return call_ctype_wchar_do_widen(this, first
, last
, dest
);
2697 /* ?_Widen_s@?$ctype@_W@std@@QBEPBDPBD0PA_WI@Z */
2698 /* ?_Widen_s@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W_K@Z */
2699 /* ?_Widen_s@?$ctype@G@std@@QBEPBDPBD0PAGI@Z */
2700 /* ?_Widen_s@?$ctype@G@std@@QEBAPEBDPEBD0PEAG_K@Z */
2701 DEFINE_THISCALL_WRAPPER(ctype_wchar__Widen_s
, 20)
2702 const char* __thiscall
ctype_wchar__Widen_s(const ctype_wchar
*this,
2703 const char *first
, const char *last
, wchar_t *dest
, size_t size
)
2705 TRACE("(%p %p %p %p %Iu)\n", this, first
, last
, dest
, size
);
2706 return call_ctype_wchar__Do_widen_s(this, first
, last
, dest
, size
);
2709 /* ?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2710 /* ?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2711 size_t __cdecl
ctype_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
2713 TRACE("(%p %p)\n", facet
, loc
);
2715 if(facet
&& !*facet
) {
2718 *facet
= operator_new(sizeof(ctype_wchar
));
2719 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
2720 ctype_wchar_ctor_locinfo((ctype_wchar
*)*facet
, &locinfo
, 0);
2721 _Locinfo_dtor(&locinfo
);
2727 /* ?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@@Z */
2728 /* ?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
2729 size_t __cdecl
ctype_wchar__Getcat_old(const locale_facet
**facet
)
2731 return ctype_wchar__Getcat(facet
, locale_classic());
2734 /* ?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2735 /* ?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2736 size_t __cdecl
ctype_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
2738 if(facet
&& !*facet
) {
2739 ctype_wchar__Getcat(facet
, loc
);
2740 (*(locale_facet
**)facet
)->vtable
= &ctype_short_vtable
;
2746 /* ?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@@Z */
2747 /* ?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
2748 size_t __cdecl
ctype_short__Getcat_old(const locale_facet
**facet
)
2750 return ctype_short__Getcat(facet
, locale_classic());
2754 wchar_t __cdecl
_Towlower(wchar_t ch
, const _Ctypevec
*ctype
)
2756 TRACE("(%d %p)\n", ch
, ctype
);
2757 return towlower(ch
);
2760 ctype_wchar
* ctype_wchar_use_facet(const locale
*loc
)
2762 static ctype_wchar
*obj
= NULL
;
2765 const locale_facet
*fac
;
2767 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
2768 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_wchar_id
));
2770 _Lockit_dtor(&lock
);
2771 return (ctype_wchar
*)fac
;
2775 _Lockit_dtor(&lock
);
2779 ctype_wchar__Getcat(&fac
, loc
);
2780 obj
= (ctype_wchar
*)fac
;
2781 call_locale_facet__Incref(&obj
->base
.facet
);
2782 locale_facet_register(&obj
->base
.facet
);
2783 _Lockit_dtor(&lock
);
2788 ctype_wchar
* ctype_short_use_facet(const locale
*loc
)
2790 static ctype_wchar
*obj
= NULL
;
2793 const locale_facet
*fac
;
2795 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
2796 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_short_id
));
2798 _Lockit_dtor(&lock
);
2799 return (ctype_wchar
*)fac
;
2803 _Lockit_dtor(&lock
);
2807 ctype_short__Getcat(&fac
, loc
);
2808 obj
= (ctype_wchar
*)fac
;
2809 call_locale_facet__Incref(&obj
->base
.facet
);
2810 locale_facet_register(&obj
->base
.facet
);
2811 _Lockit_dtor(&lock
);
2816 /* ?do_tolower@?$ctype@_W@std@@MBE_W_W@Z */
2817 /* ?do_tolower@?$ctype@_W@std@@MEBA_W_W@Z */
2818 /* ?do_tolower@?$ctype@G@std@@MBEGG@Z */
2819 /* ?do_tolower@?$ctype@G@std@@MEBAGG@Z */
2820 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_tolower_ch
, 8)
2821 #if _MSVCP_VER <= 100
2822 #define call_ctype_wchar_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
2823 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2825 #define call_ctype_wchar_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 32, \
2826 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2828 wchar_t __thiscall
ctype_wchar_do_tolower_ch(const ctype_wchar
*this, wchar_t ch
)
2830 return _Towlower(ch
, &this->ctype
);
2833 /* ?do_tolower@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */
2834 /* ?do_tolower@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z */
2835 /* ?do_tolower@?$ctype@G@std@@MBEPBGPAGPBG@Z */
2836 /* ?do_tolower@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */
2837 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_tolower
, 12)
2838 #if _MSVCP_VER <= 100
2839 #define call_ctype_wchar_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 20, \
2840 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2841 (this, first, last))
2843 #define call_ctype_wchar_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 28, \
2844 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2845 (this, first, last))
2847 const wchar_t* __thiscall
ctype_wchar_do_tolower(const ctype_wchar
*this,
2848 wchar_t *first
, const wchar_t *last
)
2850 TRACE("(%p %p %p)\n", this, first
, last
);
2851 for(; first
<last
; first
++)
2852 *first
= _Towlower(*first
, &this->ctype
);
2856 /* ?tolower@?$ctype@_W@std@@QBE_W_W@Z */
2857 /* ?tolower@?$ctype@_W@std@@QEBA_W_W@Z */
2858 /* ?tolower@?$ctype@G@std@@QBEGG@Z */
2859 /* ?tolower@?$ctype@G@std@@QEBAGG@Z */
2860 DEFINE_THISCALL_WRAPPER(ctype_wchar_tolower_ch
, 8)
2861 wchar_t __thiscall
ctype_wchar_tolower_ch(const ctype_wchar
*this, wchar_t ch
)
2863 TRACE("(%p %d)\n", this, ch
);
2864 return call_ctype_wchar_do_tolower_ch(this, ch
);
2867 /* ?tolower@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */
2868 /* ?tolower@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z */
2869 /* ?tolower@?$ctype@G@std@@QBEPBGPAGPBG@Z */
2870 /* ?tolower@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z */
2871 DEFINE_THISCALL_WRAPPER(ctype_wchar_tolower
, 12)
2872 const wchar_t* __thiscall
ctype_wchar_tolower(const ctype_wchar
*this,
2873 wchar_t *first
, const wchar_t *last
)
2875 TRACE("(%p %p %p)\n", this, first
, last
);
2876 return call_ctype_wchar_do_tolower(this, first
, last
);
2880 wchar_t __cdecl
_Towupper(wchar_t ch
, const _Ctypevec
*ctype
)
2882 TRACE("(%d %p)\n", ch
, ctype
);
2883 return towupper(ch
);
2886 /* ?do_toupper@?$ctype@_W@std@@MBE_W_W@Z */
2887 /* ?do_toupper@?$ctype@_W@std@@MEBA_W_W@Z */
2888 /* ?do_toupper@?$ctype@G@std@@MBEGG@Z */
2889 /* ?do_toupper@?$ctype@G@std@@MEBAGG@Z */
2890 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper_ch
, 8)
2891 #if _MSVCP_VER <= 100
2892 #define call_ctype_wchar_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 32, \
2893 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2895 #define call_ctype_wchar_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 40, \
2896 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2898 wchar_t __thiscall
ctype_wchar_do_toupper_ch(const ctype_wchar
*this, wchar_t ch
)
2900 return _Towupper(ch
, &this->ctype
);
2903 /* ?do_toupper@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */
2904 /* ?do_toupper@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z */
2905 /* ?do_toupper@?$ctype@G@std@@MBEPBGPAGPBG@Z */
2906 /* ?do_toupper@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */
2907 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper
, 12)
2908 #if _MSVCP_VER <= 100
2909 #define call_ctype_wchar_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 28, \
2910 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2911 (this, first, last))
2913 #define call_ctype_wchar_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 36, \
2914 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2915 (this, first, last))
2917 const wchar_t* __thiscall
ctype_wchar_do_toupper(const ctype_wchar
*this,
2918 wchar_t *first
, const wchar_t *last
)
2920 TRACE("(%p %p %p)\n", this, first
, last
);
2921 for(; first
<last
; first
++)
2922 *first
= _Towupper(*first
, &this->ctype
);
2926 /* ?toupper@?$ctype@_W@std@@QBE_W_W@Z */
2927 /* ?toupper@?$ctype@_W@std@@QEBA_W_W@Z */
2928 /* ?toupper@?$ctype@G@std@@QBEGG@Z */
2929 /* ?toupper@?$ctype@G@std@@QEBAGG@Z */
2930 DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper_ch
, 8)
2931 wchar_t __thiscall
ctype_wchar_toupper_ch(const ctype_wchar
*this, wchar_t ch
)
2933 TRACE("(%p %d)\n", this, ch
);
2934 return call_ctype_wchar_do_toupper_ch(this, ch
);
2937 /* ?toupper@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */
2938 /* ?toupper@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z */
2939 /* ?toupper@?$ctype@G@std@@QBEPBGPAGPBG@Z */
2940 /* ?toupper@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z */
2941 DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper
, 12)
2942 const wchar_t* __thiscall
ctype_wchar_toupper(const ctype_wchar
*this,
2943 wchar_t *first
, const wchar_t *last
)
2945 TRACE("(%p %p %p)\n", this, first
, last
);
2946 return call_ctype_wchar_do_toupper(this, first
, last
);
2950 const wchar_t* __cdecl
_Getwctypes(const wchar_t *first
, const wchar_t *last
,
2951 short *mask
, const _Ctypevec
*ctype
)
2953 TRACE("(%p %p %p %p)\n", first
, last
, mask
, ctype
);
2954 GetStringTypeW(CT_CTYPE1
, first
, last
-first
, (WORD
*)mask
);
2959 short __cdecl
_Getwctype(wchar_t ch
, const _Ctypevec
*ctype
)
2962 _Getwctypes(&ch
, &ch
+1, &mask
, ctype
);
2966 /* ?do_is@?$ctype@_W@std@@MBE_NF_W@Z */
2967 /* ?do_is@?$ctype@_W@std@@MEBA_NF_W@Z */
2968 /* ?do_is@?$ctype@G@std@@MBE_NFG@Z */
2969 /* ?do_is@?$ctype@G@std@@MEBA_NFG@Z */
2970 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is_ch
, 12)
2971 #if _MSVCP_VER <= 100
2972 #define call_ctype_wchar_do_is_ch(this, mask, ch) CALL_VTBL_FUNC(this, 8, \
2973 bool, (const ctype_wchar*, short, wchar_t), (this, mask, ch))
2975 #define call_ctype_wchar_do_is_ch(this, mask, ch) CALL_VTBL_FUNC(this, 16, \
2976 bool, (const ctype_wchar*, short, wchar_t), (this, mask, ch))
2978 bool __thiscall
ctype_wchar_do_is_ch(const ctype_wchar
*this, short mask
, wchar_t ch
)
2980 TRACE("(%p %x %d)\n", this, mask
, ch
);
2981 return (_Getwctype(ch
, &this->ctype
) & mask
) != 0;
2984 /* ?do_is@?$ctype@_W@std@@MBEPB_WPB_W0PAF@Z */
2985 /* ?do_is@?$ctype@_W@std@@MEBAPEB_WPEB_W0PEAF@Z */
2986 /* ?do_is@?$ctype@G@std@@MBEPBGPBG0PAF@Z */
2987 /* ?do_is@?$ctype@G@std@@MEBAPEBGPEBG0PEAF@Z */
2988 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is
, 16)
2989 #if _MSVCP_VER <= 100
2990 #define call_ctype_wchar_do_is(this, first, last, dest) CALL_VTBL_FUNC(this, 4, \
2991 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, short*), \
2992 (this, first, last, dest))
2994 #define call_ctype_wchar_do_is(this, first, last, dest) CALL_VTBL_FUNC(this, 12, \
2995 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, short*), \
2996 (this, first, last, dest))
2998 const wchar_t* __thiscall
ctype_wchar_do_is(const ctype_wchar
*this,
2999 const wchar_t *first
, const wchar_t *last
, short *dest
)
3001 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
3002 return _Getwctypes(first
, last
, dest
, &this->ctype
);
3005 /* ?is@?$ctype@_W@std@@QBE_NF_W@Z */
3006 /* ?is@?$ctype@_W@std@@QEBA_NF_W@Z */
3007 /* ?is@?$ctype@G@std@@QBE_NFG@Z */
3008 /* ?is@?$ctype@G@std@@QEBA_NFG@Z */
3009 DEFINE_THISCALL_WRAPPER(ctype_wchar_is_ch
, 12)
3010 bool __thiscall
ctype_wchar_is_ch(const ctype_wchar
*this, short mask
, wchar_t ch
)
3012 TRACE("(%p %x %d)\n", this, mask
, ch
);
3013 return call_ctype_wchar_do_is_ch(this, mask
, ch
);
3016 /* ?is@?$ctype@_W@std@@QBEPB_WPB_W0PAF@Z */
3017 /* ?is@?$ctype@_W@std@@QEBAPEB_WPEB_W0PEAF@Z */
3018 /* ?is@?$ctype@G@std@@QBEPBGPBG0PAF@Z */
3019 /* ?is@?$ctype@G@std@@QEBAPEBGPEBG0PEAF@Z */
3020 DEFINE_THISCALL_WRAPPER(ctype_wchar_is
, 16)
3021 const wchar_t* __thiscall
ctype_wchar_is(const ctype_wchar
*this,
3022 const wchar_t *first
, const wchar_t *last
, short *dest
)
3024 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
3025 return call_ctype_wchar_do_is(this, first
, last
, dest
);
3028 /* ?do_scan_is@?$ctype@_W@std@@MBEPB_WFPB_W0@Z */
3029 /* ?do_scan_is@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z */
3030 /* ?do_scan_is@?$ctype@G@std@@MBEPBGFPBG0@Z */
3031 /* ?do_scan_is@?$ctype@G@std@@MEBAPEBGFPEBG0@Z */
3032 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_scan_is
, 16)
3033 #if _MSVCP_VER <= 100
3034 #define call_ctype_wchar_do_scan_is(this, mask, first, last) CALL_VTBL_FUNC(this, 12, \
3035 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
3036 (this, mask, first, last))
3038 #define call_ctype_wchar_do_scan_is(this, mask, first, last) CALL_VTBL_FUNC(this, 20, \
3039 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
3040 (this, mask, first, last))
3042 const wchar_t* __thiscall
ctype_wchar_do_scan_is(const ctype_wchar
*this,
3043 short mask
, const wchar_t *first
, const wchar_t *last
)
3045 TRACE("(%p %d %p %p)\n", this, mask
, first
, last
);
3046 for(; first
<last
; first
++)
3047 if(!ctype_wchar_is_ch(this, mask
, *first
))
3052 /* ?scan_is@?$ctype@_W@std@@QBEPB_WFPB_W0@Z */
3053 /* ?scan_is@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z */
3054 /* ?scan_is@?$ctype@G@std@@QBEPBGFPBG0@Z */
3055 /* ?scan_is@?$ctype@G@std@@QEBAPEBGFPEBG0@Z */
3056 DEFINE_THISCALL_WRAPPER(ctype_wchar_scan_is
, 16)
3057 const wchar_t* __thiscall
ctype_wchar_scan_is(const ctype_wchar
*this,
3058 short mask
, const wchar_t *first
, const wchar_t *last
)
3060 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
3061 return call_ctype_wchar_do_scan_is(this, mask
, first
, last
);
3064 /* ?do_scan_not@?$ctype@_W@std@@MBEPB_WFPB_W0@Z */
3065 /* ?do_scan_not@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z */
3066 /* ?do_scan_not@?$ctype@G@std@@MBEPBGFPBG0@Z */
3067 /* ?do_scan_not@?$ctype@G@std@@MEBAPEBGFPEBG0@Z */
3068 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_scan_not
, 16)
3069 #if _MSVCP_VER <= 100
3070 #define call_ctype_wchar_do_scan_not(this, mask, first, last) CALL_VTBL_FUNC(this, 16, \
3071 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
3072 (this, mask, first, last))
3074 #define call_ctype_wchar_do_scan_not(this, mask, first, last) CALL_VTBL_FUNC(this, 24, \
3075 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
3076 (this, mask, first, last))
3078 const wchar_t* __thiscall
ctype_wchar_do_scan_not(const ctype_wchar
*this,
3079 short mask
, const wchar_t *first
, const wchar_t *last
)
3081 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
3082 for(; first
<last
; first
++)
3083 if(ctype_wchar_is_ch(this, mask
, *first
))
3088 /* ?scan_not@?$ctype@_W@std@@QBEPB_WFPB_W0@Z */
3089 /* ?scan_not@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z */
3090 /* ?scan_not@?$ctype@G@std@@QBEPBGFPBG0@Z */
3091 /* ?scan_not@?$ctype@G@std@@QEBAPEBGFPEBG0@Z */
3092 DEFINE_THISCALL_WRAPPER(ctype_wchar_scan_not
, 16)
3093 const wchar_t* __thiscall
ctype_wchar_scan_not(const ctype_wchar
*this,
3094 short mask
, const wchar_t *first
, const wchar_t *last
)
3096 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
3097 return call_ctype_wchar_do_scan_not(this, mask
, first
, last
);
3100 /* ??_7codecvt_base@std@@6B@ */
3101 extern const vtable_ptr codecvt_base_vtable
;
3103 /* ??0codecvt_base@std@@QAE@I@Z */
3104 /* ??0codecvt_base@std@@QEAA@_K@Z */
3105 DEFINE_THISCALL_WRAPPER(codecvt_base_ctor_refs
, 8)
3106 codecvt_base
* __thiscall
codecvt_base_ctor_refs(codecvt_base
*this, size_t refs
)
3108 TRACE("(%p %Iu)\n", this, refs
);
3109 locale_facet_ctor_refs(&this->facet
, refs
);
3110 this->facet
.vtable
= &codecvt_base_vtable
;
3114 /* ??_Fcodecvt_base@std@@QAEXXZ */
3115 /* ??_Fcodecvt_base@std@@QEAAXXZ */
3116 DEFINE_THISCALL_WRAPPER(codecvt_base_ctor
, 4)
3117 codecvt_base
* __thiscall
codecvt_base_ctor(codecvt_base
*this)
3119 return codecvt_base_ctor_refs(this, 0);
3122 /* ??1codecvt_base@std@@UAE@XZ */
3123 /* ??1codecvt_base@std@@UEAA@XZ */
3124 DEFINE_THISCALL_WRAPPER(codecvt_base_dtor
, 4)
3125 void __thiscall
codecvt_base_dtor(codecvt_base
*this)
3127 TRACE("(%p)\n", this);
3128 locale_facet_dtor(&this->facet
);
3131 DEFINE_THISCALL_WRAPPER(codecvt_base_vector_dtor
, 8)
3132 codecvt_base
* __thiscall
codecvt_base_vector_dtor(codecvt_base
*this, unsigned int flags
)
3134 TRACE("(%p %x)\n", this, flags
);
3136 /* we have an array, with the number of elements stored before the first object */
3137 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
3139 for(i
=*ptr
-1; i
>=0; i
--)
3140 codecvt_base_dtor(this+i
);
3141 operator_delete(ptr
);
3143 codecvt_base_dtor(this);
3145 operator_delete(this);
3151 /* ?do_always_noconv@codecvt_base@std@@MBE_NXZ */
3152 /* ?do_always_noconv@codecvt_base@std@@MEBA_NXZ */
3153 #if _MSVCP_VER <= 100
3154 #define call_codecvt_base_do_always_noconv(this) CALL_VTBL_FUNC(this, 4, \
3155 bool, (const codecvt_base*), (this))
3157 #define call_codecvt_base_do_always_noconv(this) CALL_VTBL_FUNC(this, 12, \
3158 bool, (const codecvt_base*), (this))
3160 DEFINE_THISCALL_WRAPPER(codecvt_base_do_always_noconv
, 4)
3161 bool __thiscall
codecvt_base_do_always_noconv(const codecvt_base
*this)
3163 TRACE("(%p)\n", this);
3164 return _MSVCP_VER
<= 100;
3167 /* ?always_noconv@codecvt_base@std@@QBE_NXZ */
3168 /* ?always_noconv@codecvt_base@std@@QEBA_NXZ */
3169 DEFINE_THISCALL_WRAPPER(codecvt_base_always_noconv
, 4)
3170 bool __thiscall
codecvt_base_always_noconv(const codecvt_base
*this)
3172 TRACE("(%p)\n", this);
3173 return call_codecvt_base_do_always_noconv(this);
3176 /* ?do_max_length@codecvt_base@std@@MBEHXZ */
3177 /* ?do_max_length@codecvt_base@std@@MEBAHXZ */
3178 #if _MSVCP_VER <= 100
3179 #define call_codecvt_base_do_max_length(this) CALL_VTBL_FUNC(this, 8, \
3180 int, (const codecvt_base*), (this))
3182 #define call_codecvt_base_do_max_length(this) CALL_VTBL_FUNC(this, 16, \
3183 int, (const codecvt_base*), (this))
3185 DEFINE_THISCALL_WRAPPER(codecvt_base_do_max_length
, 4)
3186 int __thiscall
codecvt_base_do_max_length(const codecvt_base
*this)
3188 TRACE("(%p)\n", this);
3192 /* ?max_length@codecvt_base@std@@QBEHXZ */
3193 /* ?max_length@codecvt_base@std@@QEBAHXZ */
3194 DEFINE_THISCALL_WRAPPER(codecvt_base_max_length
, 4)
3195 int __thiscall
codecvt_base_max_length(const codecvt_base
*this)
3197 TRACE("(%p)\n", this);
3198 return call_codecvt_base_do_max_length(this);
3201 /* ?do_encoding@codecvt_base@std@@MBEHXZ */
3202 /* ?do_encoding@codecvt_base@std@@MEBAHXZ */
3203 #if _MSVCP_VER <= 100
3204 #define call_codecvt_base_do_encoding(this) CALL_VTBL_FUNC(this, 12, \
3205 int, (const codecvt_base*), (this))
3207 #define call_codecvt_base_do_encoding(this) CALL_VTBL_FUNC(this, 20, \
3208 int, (const codecvt_base*), (this))
3210 DEFINE_THISCALL_WRAPPER(codecvt_base_do_encoding
, 4)
3211 int __thiscall
codecvt_base_do_encoding(const codecvt_base
*this)
3213 TRACE("(%p)\n", this);
3217 /* ?encoding@codecvt_base@std@@QBEHXZ */
3218 /* ?encoding@codecvt_base@std@@QEBAHXZ */
3219 DEFINE_THISCALL_WRAPPER(codecvt_base_encoding
, 4)
3220 int __thiscall
codecvt_base_encoding(const codecvt_base
*this)
3222 TRACE("(%p)\n", this);
3223 return call_codecvt_base_do_encoding(this);
3226 /* ?id@?$codecvt@DDH@std@@2V0locale@2@A */
3227 locale_id codecvt_char_id
= {0};
3229 /* ??_7?$codecvt@DDH@std@@6B@ */
3230 extern const vtable_ptr codecvt_char_vtable
;
3232 /* ?_Init@?$codecvt@DDH@std@@IAEXABV_Locinfo@2@@Z */
3233 /* ?_Init@?$codecvt@DDH@std@@IEAAXAEBV_Locinfo@2@@Z */
3234 DEFINE_THISCALL_WRAPPER(codecvt_char__Init
, 8)
3235 void __thiscall
codecvt_char__Init(codecvt_char
*this, const _Locinfo
*locinfo
)
3237 TRACE("(%p %p)\n", this, locinfo
);
3240 /* ??0?$codecvt@DDH@std@@QAE@ABV_Locinfo@1@I@Z */
3241 /* ??0?$codecvt@DDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
3242 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor_locinfo
, 12)
3243 codecvt_char
* __thiscall
codecvt_char_ctor_locinfo(codecvt_char
*this, const _Locinfo
*locinfo
, size_t refs
)
3245 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
3246 codecvt_base_ctor_refs(&this->base
, refs
);
3247 this->base
.facet
.vtable
= &codecvt_char_vtable
;
3251 /* ??0?$codecvt@DDH@std@@QAE@I@Z */
3252 /* ??0?$codecvt@DDH@std@@QEAA@_K@Z */
3253 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor_refs
, 8)
3254 codecvt_char
* __thiscall
codecvt_char_ctor_refs(codecvt_char
*this, size_t refs
)
3256 return codecvt_char_ctor_locinfo(this, NULL
, refs
);
3259 /* ??_F?$codecvt@DDH@std@@QAEXXZ */
3260 /* ??_F?$codecvt@DDH@std@@QEAAXXZ */
3261 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor
, 4)
3262 codecvt_char
* __thiscall
codecvt_char_ctor(codecvt_char
*this)
3264 return codecvt_char_ctor_locinfo(this, NULL
, 0);
3267 /* ??1?$codecvt@DDH@std@@UAE@XZ */
3268 /* ??1?$codecvt@DDH@std@@UEAA@XZ */
3269 /* ??1?$codecvt@DDH@std@@MAE@XZ */
3270 /* ??1?$codecvt@DDH@std@@MEAA@XZ */
3271 DEFINE_THISCALL_WRAPPER(codecvt_char_dtor
, 4)
3272 void __thiscall
codecvt_char_dtor(codecvt_char
*this)
3274 TRACE("(%p)\n", this);
3275 codecvt_base_dtor(&this->base
);
3278 DEFINE_THISCALL_WRAPPER(codecvt_char_vector_dtor
, 8)
3279 codecvt_char
* __thiscall
codecvt_char_vector_dtor(codecvt_char
*this, unsigned int flags
)
3281 TRACE("(%p %x)\n", this, flags
);
3283 /* we have an array, with the number of elements stored before the first object */
3284 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
3286 for(i
=*ptr
-1; i
>=0; i
--)
3287 codecvt_char_dtor(this+i
);
3288 operator_delete(ptr
);
3290 codecvt_char_dtor(this);
3292 operator_delete(this);
3298 /* ?_Getcat@?$codecvt@DDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3299 /* ?_Getcat@?$codecvt@DDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3300 size_t __cdecl
codecvt_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
3302 TRACE("(%p %p)\n", facet
, loc
);
3304 if(facet
&& !*facet
) {
3305 *facet
= operator_new(sizeof(codecvt_char
));
3306 codecvt_char_ctor((codecvt_char
*)*facet
);
3312 /* ?_Getcat@?$codecvt@DDH@std@@SAIPAPBVfacet@locale@2@@Z */
3313 /* ?_Getcat@?$codecvt@DDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3314 size_t __cdecl
codecvt_char__Getcat_old(const locale_facet
**facet
)
3316 return codecvt_char__Getcat(facet
, locale_classic());
3319 codecvt_char
* codecvt_char_use_facet(const locale
*loc
)
3321 static codecvt_char
*obj
= NULL
;
3324 const locale_facet
*fac
;
3326 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3327 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_char_id
));
3329 _Lockit_dtor(&lock
);
3330 return (codecvt_char
*)fac
;
3334 _Lockit_dtor(&lock
);
3338 codecvt_char__Getcat(&fac
, loc
);
3339 obj
= (codecvt_char
*)fac
;
3340 call_locale_facet__Incref(&obj
->base
.facet
);
3341 locale_facet_register(&obj
->base
.facet
);
3342 _Lockit_dtor(&lock
);
3347 /* ?do_always_noconv@?$codecvt@DDH@std@@MBE_NXZ */
3348 /* ?do_always_noconv@?$codecvt@DDH@std@@MEBA_NXZ */
3349 DEFINE_THISCALL_WRAPPER(codecvt_char_do_always_noconv
, 4)
3350 bool __thiscall
codecvt_char_do_always_noconv(const codecvt_char
*this)
3352 TRACE("(%p)\n", this);
3356 /* ?do_in@?$codecvt@DDH@std@@MBEHAAHPBD1AAPBDPAD3AAPAD@Z */
3357 /* ?do_in@?$codecvt@DDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
3358 #if _MSVCP_VER <= 100
3359 #define call_codecvt_char_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
3360 CALL_VTBL_FUNC(this, 16, int, \
3361 (const codecvt_char*, _Mbstatet*, const char*, const char*, const char**, char*, char*, char**), \
3362 (this, state, from, from_end, from_next, to, to_end, to_next))
3364 #define call_codecvt_char_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
3365 CALL_VTBL_FUNC(this, 24, int, \
3366 (const codecvt_char*, _Mbstatet*, const char*, const char*, const char**, char*, char*, char**), \
3367 (this, state, from, from_end, from_next, to, to_end, to_next))
3369 DEFINE_THISCALL_WRAPPER(codecvt_char_do_in
, 32)
3370 int __thiscall
codecvt_char_do_in(const codecvt_char
*this, _Mbstatet
*state
,
3371 const char *from
, const char *from_end
, const char **from_next
,
3372 char *to
, char *to_end
, char **to_next
)
3374 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
3375 from_next
, to
, to_end
, to_next
);
3378 return CODECVT_noconv
;
3381 /* ?in@?$codecvt@DDH@std@@QBEHAAHPBD1AAPBDPAD3AAPAD@Z */
3382 /* ?in@?$codecvt@DDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
3383 DEFINE_THISCALL_WRAPPER(codecvt_char_in
, 32)
3384 int __thiscall
codecvt_char_in(const codecvt_char
*this, _Mbstatet
*state
,
3385 const char *from
, const char *from_end
, const char **from_next
,
3386 char *to
, char *to_end
, char **to_next
)
3388 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
3389 from_next
, to
, to_end
, to_next
);
3390 return call_codecvt_char_do_in(this, state
, from
, from_end
, from_next
,
3391 to
, to_end
, to_next
);
3394 /* ?do_out@?$codecvt@DDH@std@@MBEHAAHPBD1AAPBDPAD3AAPAD@Z */
3395 /* ?do_out@?$codecvt@DDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
3396 #if _MSVCP_VER <= 100
3397 #define call_codecvt_char_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
3398 CALL_VTBL_FUNC(this, 20, int, \
3399 (const codecvt_char*, _Mbstatet*, const char*, const char*, const char**, char*, char*, char**), \
3400 (this, state, from, from_end, from_next, to, to_end, to_next))
3402 #define call_codecvt_char_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
3403 CALL_VTBL_FUNC(this, 28, int, \
3404 (const codecvt_char*, _Mbstatet*, const char*, const char*, const char**, char*, char*, char**), \
3405 (this, state, from, from_end, from_next, to, to_end, to_next))
3407 DEFINE_THISCALL_WRAPPER(codecvt_char_do_out
, 32)
3408 int __thiscall
codecvt_char_do_out(const codecvt_char
*this, _Mbstatet
*state
,
3409 const char *from
, const char *from_end
, const char **from_next
,
3410 char *to
, char *to_end
, char **to_next
)
3412 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3413 from_end
, from_next
, to
, to_end
, to_next
);
3416 return CODECVT_noconv
;
3419 /* ?out@?$codecvt@DDH@std@@QBEHAAHPBD1AAPBDPAD3AAPAD@Z */
3420 /* ?out@?$codecvt@DDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
3421 DEFINE_THISCALL_WRAPPER(codecvt_char_out
, 32)
3422 int __thiscall
codecvt_char_out(const codecvt_char
*this, _Mbstatet
*state
,
3423 const char *from
, const char *from_end
, const char **from_next
,
3424 char *to
, char *to_end
, char **to_next
)
3426 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
3427 from_next
, to
, to_end
, to_next
);
3428 return call_codecvt_char_do_out(this, state
, from
, from_end
, from_next
,
3429 to
, to_end
, to_next
);
3432 /* ?do_unshift@?$codecvt@DDH@std@@MBEHAAHPAD1AAPAD@Z */
3433 /* ?do_unshift@?$codecvt@DDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
3434 #if _MSVCP_VER <= 100
3435 #define call_codecvt_char_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 24, \
3436 int, (const codecvt_char*, _Mbstatet*, char*, char*, char**), (this, state, to, to_end, to_next))
3438 #define call_codecvt_char_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 32, \
3439 int, (const codecvt_char*, _Mbstatet*, char*, char*, char**), (this, state, to, to_end, to_next))
3441 DEFINE_THISCALL_WRAPPER(codecvt_char_do_unshift
, 20)
3442 int __thiscall
codecvt_char_do_unshift(const codecvt_char
*this,
3443 _Mbstatet
*state
, char *to
, char *to_end
, char **to_next
)
3445 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3447 return CODECVT_noconv
;
3450 /* ?unshift@?$codecvt@DDH@std@@QBEHAAHPAD1AAPAD@Z */
3451 /* ?unshift@?$codecvt@DDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
3452 DEFINE_THISCALL_WRAPPER(codecvt_char_unshift
, 20)
3453 int __thiscall
codecvt_char_unshift(const codecvt_char
*this,
3454 _Mbstatet
*state
, char *to
, char *to_end
, char **to_next
)
3456 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3457 return call_codecvt_char_do_unshift(this, state
, to
, to_end
, to_next
);
3460 /* ?do_length@?$codecvt@DDH@std@@MBEHABHPBD1I@Z */
3461 /* ?do_length@?$codecvt@DDH@std@@MEBAHAEBHPEBD1_K@Z */
3462 #if _MSVCP_VER <= 100
3463 #define call_codecvt_char_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 28, \
3464 int, (const codecvt_char*, const _Mbstatet*, const char*, const char*, size_t), \
3465 (this, state, from, from_end, max))
3467 #define call_codecvt_char_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 36, \
3468 int, (const codecvt_char*, const _Mbstatet*, const char*, const char*, size_t), \
3469 (this, state, from, from_end, max))
3471 DEFINE_THISCALL_WRAPPER(codecvt_char_do_length
, 20)
3472 int __thiscall
codecvt_char_do_length(const codecvt_char
*this, const _Mbstatet
*state
,
3473 const char *from
, const char *from_end
, size_t max
)
3475 TRACE("(%p %p %p %p %Iu)\n", this, state
, from
, from_end
, max
);
3476 return (from_end
-from
> max
? max
: from_end
-from
);
3479 /* ?length@?$codecvt@DDH@std@@QBEHABHPBD1I@Z */
3480 /* ?length@?$codecvt@DDH@std@@QEBAHAEBHPEBD1_K@Z */
3481 DEFINE_THISCALL_WRAPPER(codecvt_char_length
, 20)
3482 int __thiscall
codecvt_char_length(const codecvt_char
*this, const _Mbstatet
*state
,
3483 const char *from
, const char *from_end
, size_t max
)
3485 TRACE("(%p %p %p %p %Iu)\n", this, state
, from
, from_end
, max
);
3486 return call_codecvt_char_do_length(this, state
, from
, from_end
, max
);
3489 /* ?id@?$codecvt@_WDH@std@@2V0locale@2@A */
3490 locale_id codecvt_wchar_id
= {0};
3491 /* ?id@?$codecvt@GDH@std@@2V0locale@2@A */
3492 locale_id codecvt_short_id
= {0};
3494 /* ??_7?$codecvt@_WDH@std@@6B@ */
3495 extern const vtable_ptr codecvt_wchar_vtable
;
3496 /* ??_7?$codecvt@GDH@std@@6B@ */
3497 extern const vtable_ptr codecvt_short_vtable
;
3499 /* ?_Init@?$codecvt@GDH@std@@IAEXABV_Locinfo@2@@Z */
3500 /* ?_Init@?$codecvt@GDH@std@@IEAAXAEBV_Locinfo@2@@Z */
3501 /* ?_Init@?$codecvt@_WDH@std@@IAEXABV_Locinfo@2@@Z */
3502 /* ?_Init@?$codecvt@_WDH@std@@IEAAXAEBV_Locinfo@2@@Z */
3503 DEFINE_THISCALL_WRAPPER(codecvt_wchar__Init
, 8)
3504 void __thiscall
codecvt_wchar__Init(codecvt_wchar
*this, const _Locinfo
*locinfo
)
3506 TRACE("(%p %p)\n", this, locinfo
);
3507 _Locinfo__Getcvt(locinfo
, &this->cvt
);
3510 /* ??0?$codecvt@_WDH@std@@QAE@ABV_Locinfo@1@I@Z */
3511 /* ??0?$codecvt@_WDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
3512 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor_locinfo
, 12)
3513 codecvt_wchar
* __thiscall
codecvt_wchar_ctor_locinfo(codecvt_wchar
*this, const _Locinfo
*locinfo
, size_t refs
)
3515 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
3517 codecvt_base_ctor_refs(&this->base
, refs
);
3518 this->base
.facet
.vtable
= &codecvt_wchar_vtable
;
3520 codecvt_wchar__Init(this, locinfo
);
3524 /* ??0?$codecvt@GDH@std@@QAE@ABV_Locinfo@1@I@Z */
3525 /* ??0?$codecvt@GDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
3526 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor_locinfo
, 12)
3527 codecvt_wchar
* __thiscall
codecvt_short_ctor_locinfo(codecvt_wchar
*this, const _Locinfo
*locinfo
, size_t refs
)
3529 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
3531 codecvt_wchar_ctor_locinfo(this, locinfo
, refs
);
3532 this->base
.facet
.vtable
= &codecvt_short_vtable
;
3536 /* ??0?$codecvt@_WDH@std@@QAE@I@Z */
3537 /* ??0?$codecvt@_WDH@std@@QEAA@_K@Z */
3538 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor_refs
, 8)
3539 codecvt_wchar
* __thiscall
codecvt_wchar_ctor_refs(codecvt_wchar
*this, size_t refs
)
3543 TRACE("(%p %Iu)\n", this, refs
);
3545 _Locinfo_ctor(&locinfo
);
3546 codecvt_wchar_ctor_locinfo(this, &locinfo
, refs
);
3547 _Locinfo_dtor(&locinfo
);
3551 /* ??0?$codecvt@GDH@std@@QAE@I@Z */
3552 /* ??0?$codecvt@GDH@std@@QEAA@_K@Z */
3553 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor_refs
, 8)
3554 codecvt_wchar
* __thiscall
codecvt_short_ctor_refs(codecvt_wchar
*this, size_t refs
)
3558 TRACE("(%p %Iu)\n", this, refs
);
3560 _Locinfo_ctor(&locinfo
);
3561 codecvt_short_ctor_locinfo(this, &locinfo
, refs
);
3562 _Locinfo_dtor(&locinfo
);
3566 /* ??0?$codecvt@GDH@std@@IAE@PBDI@Z */
3567 /* ??0?$codecvt@GDH@std@@IEAA@PEBD_K@Z */
3568 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor_name
, 12)
3569 codecvt_wchar
* __thiscall
codecvt_short_ctor_name(codecvt_wchar
*this, const char *name
, size_t refs
)
3573 TRACE("(%p %s %Iu)\n", this, name
, refs
);
3575 _Locinfo_ctor_cstr(&locinfo
, name
);
3576 codecvt_short_ctor_locinfo(this, &locinfo
, refs
);
3577 _Locinfo_dtor(&locinfo
);
3581 /* ??_F?$codecvt@_WDH@std@@QAEXXZ */
3582 /* ??_F?$codecvt@_WDH@std@@QEAAXXZ */
3583 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor
, 4)
3584 codecvt_wchar
* __thiscall
codecvt_wchar_ctor(codecvt_wchar
*this)
3586 return codecvt_wchar_ctor_refs(this, 0);
3589 /* ??_F?$codecvt@GDH@std@@QAEXXZ */
3590 /* ??_F?$codecvt@GDH@std@@QEAAXXZ */
3591 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor
, 4)
3592 codecvt_wchar
* __thiscall
codecvt_short_ctor(codecvt_wchar
*this)
3594 return codecvt_short_ctor_refs(this, 0);
3597 /* ??1?$codecvt@GDH@std@@UAE@XZ */
3598 /* ??1?$codecvt@GDH@std@@UEAA@XZ */
3599 /* ??1?$codecvt@GDH@std@@MAE@XZ */
3600 /* ??1?$codecvt@GDH@std@@MEAA@XZ */
3601 /* ??1?$codecvt@_WDH@std@@MAE@XZ */
3602 /* ??1?$codecvt@_WDH@std@@MEAA@XZ */
3603 DEFINE_THISCALL_WRAPPER(codecvt_wchar_dtor
, 4)
3604 void __thiscall
codecvt_wchar_dtor(codecvt_wchar
*this)
3606 TRACE("(%p)\n", this);
3607 codecvt_base_dtor(&this->base
);
3610 DEFINE_THISCALL_WRAPPER(codecvt_wchar_vector_dtor
, 8)
3611 codecvt_wchar
* __thiscall
codecvt_wchar_vector_dtor(codecvt_wchar
*this, unsigned int flags
)
3613 TRACE("(%p %x)\n", this, flags
);
3615 /* we have an array, with the number of elements stored before the first object */
3616 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
3618 for(i
=*ptr
-1; i
>=0; i
--)
3619 codecvt_wchar_dtor(this+i
);
3620 operator_delete(ptr
);
3622 codecvt_wchar_dtor(this);
3624 operator_delete(this);
3630 /* ?_Getcat@?$codecvt@_WDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3631 /* ?_Getcat@?$codecvt@_WDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3632 size_t __cdecl
codecvt_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
3634 TRACE("(%p %p)\n", facet
, loc
);
3636 if(facet
&& !*facet
) {
3639 *facet
= operator_new(sizeof(codecvt_wchar
));
3640 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
3641 codecvt_wchar_ctor_locinfo((codecvt_wchar
*)*facet
, &locinfo
, 0);
3642 _Locinfo_dtor(&locinfo
);
3648 /* ?_Getcat@?$codecvt@_WDH@std@@SAIPAPBVfacet@locale@2@@Z */
3649 /* ?_Getcat@?$codecvt@_WDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3650 size_t __cdecl
codecvt_wchar__Getcat_old(const locale_facet
**facet
)
3652 return codecvt_wchar__Getcat(facet
, locale_classic());
3655 codecvt_wchar
* codecvt_wchar_use_facet(const locale
*loc
)
3657 static codecvt_wchar
*obj
= NULL
;
3660 const locale_facet
*fac
;
3662 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3663 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_wchar_id
));
3665 _Lockit_dtor(&lock
);
3666 return (codecvt_wchar
*)fac
;
3670 _Lockit_dtor(&lock
);
3674 codecvt_wchar__Getcat(&fac
, loc
);
3675 obj
= (codecvt_wchar
*)fac
;
3676 call_locale_facet__Incref(&obj
->base
.facet
);
3677 locale_facet_register(&obj
->base
.facet
);
3678 _Lockit_dtor(&lock
);
3683 /* ?_Getcat@?$codecvt@GDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3684 /* ?_Getcat@?$codecvt@GDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3685 size_t __cdecl
codecvt_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
3687 TRACE("(%p %p)\n", facet
, loc
);
3689 if(facet
&& !*facet
) {
3692 *facet
= operator_new(sizeof(codecvt_wchar
));
3693 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
3694 codecvt_short_ctor((codecvt_wchar
*)*facet
);
3695 _Locinfo_dtor(&locinfo
);
3701 /* ?_Getcat@?$codecvt@GDH@std@@SAIPAPBVfacet@locale@2@@Z */
3702 /* ?_Getcat@?$codecvt@GDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3703 size_t __cdecl
codecvt_short__Getcat_old(const locale_facet
**facet
)
3705 return codecvt_short__Getcat(facet
, locale_classic());
3708 codecvt_wchar
* codecvt_short_use_facet(const locale
*loc
)
3710 static codecvt_wchar
*obj
= NULL
;
3713 const locale_facet
*fac
;
3715 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3716 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_short_id
));
3718 _Lockit_dtor(&lock
);
3719 return (codecvt_wchar
*)fac
;
3723 _Lockit_dtor(&lock
);
3727 codecvt_short__Getcat(&fac
, loc
);
3728 obj
= (codecvt_wchar
*)fac
;
3729 call_locale_facet__Incref(&obj
->base
.facet
);
3730 locale_facet_register(&obj
->base
.facet
);
3731 _Lockit_dtor(&lock
);
3736 /* ?_Id_func@?$codecvt@_WDH@std@@SAAAVid@locale@2@XZ */
3737 /* ?_Id_func@?$codecvt@_WDH@std@@SAAEAVid@locale@2@XZ */
3738 locale_id
* __cdecl
codecvt_wchar__Id_func(void)
3741 return &codecvt_wchar_id
;
3744 /* ?_Id_func@?$codecvt@GDH@std@@SAAAVid@locale@2@XZ */
3745 /* ?_Id_func@?$codecvt@GDH@std@@SAAEAVid@locale@2@XZ */
3746 locale_id
* __cdecl
codecvt_short__Id_func(void)
3749 return &codecvt_short_id
;
3752 /* ?do_always_noconv@?$codecvt@GDH@std@@MBE_NXZ */
3753 /* ?do_always_noconv@?$codecvt@GDH@std@@MEBA_NXZ */
3754 /* ?do_always_noconv@?$codecvt@_WDH@std@@MBE_NXZ */
3755 /* ?do_always_noconv@?$codecvt@_WDH@std@@MEBA_NXZ */
3756 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_always_noconv
, 4)
3757 bool __thiscall
codecvt_wchar_do_always_noconv(const codecvt_wchar
*this)
3759 TRACE("(%p)\n", this);
3763 /* ?do_max_length@?$codecvt@GDH@std@@MBEHXZ */
3764 /* ?do_max_length@?$codecvt@GDH@std@@MEBAHXZ */
3765 /* ?do_max_length@?$codecvt@_WDH@std@@MBEHXZ */
3766 /* ?do_max_length@?$codecvt@_WDH@std@@MEBAHXZ */
3767 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_max_length
, 4)
3768 int __thiscall
codecvt_wchar_do_max_length(const codecvt_wchar
*this)
3770 TRACE("(%p)\n", this);
3774 /* ?do_encoding@?$codecvt@GDH@std@@MBEHXZ */
3775 /* ?do_encoding@?$codecvt@GDH@std@@MEBAHXZ */
3776 /* ?do_encoding@?$codecvt@_WDH@std@@MBEHXZ */
3777 /* ?do_encoding@?$codecvt@_WDH@std@@MEBAHXZ */
3778 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_encoding
, 4)
3779 int __thiscall
codecvt_wchar_do_encoding(const codecvt_wchar
*this)
3781 TRACE("(%p)\n", this);
3785 /* ?do_in@?$codecvt@GDH@std@@MBEHAAHPBD1AAPBDPAG3AAPAG@Z */
3786 /* ?do_in@?$codecvt@GDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAG3AEAPEAG@Z */
3787 /* ?do_in@?$codecvt@_WDH@std@@MBEHAAHPBD1AAPBDPA_W3AAPA_W@Z */
3788 /* ?do_in@?$codecvt@_WDH@std@@MEBAHAEAHPEBD1AEAPEBDPEA_W3AEAPEA_W@Z */
3789 #if _MSVCP_VER <= 100
3790 #define call_codecvt_wchar_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
3791 CALL_VTBL_FUNC(this, 16, int, \
3792 (const codecvt_wchar*, _Mbstatet*, const char*, const char*, const char**, wchar_t*, wchar_t*, wchar_t**), \
3793 (this, state, from, from_end, from_next, to, to_end, to_next))
3795 #define call_codecvt_wchar_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
3796 CALL_VTBL_FUNC(this, 24, int, \
3797 (const codecvt_wchar*, _Mbstatet*, const char*, const char*, const char**, wchar_t*, wchar_t*, wchar_t**), \
3798 (this, state, from, from_end, from_next, to, to_end, to_next))
3800 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_in
, 32)
3801 int __thiscall
codecvt_wchar_do_in(const codecvt_wchar
*this, _Mbstatet
*state
,
3802 const char *from
, const char *from_end
, const char **from_next
,
3803 wchar_t *to
, wchar_t *to_end
, wchar_t **to_next
)
3805 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3806 from_end
, from_next
, to
, to_end
, to_next
);
3811 while(*from_next
!=from_end
&& *to_next
!=to_end
) {
3812 switch(_Mbrtowc(*to_next
, *from_next
, from_end
-*from_next
, state
, &this->cvt
)) {
3814 *from_next
= from_end
;
3815 return CODECVT_partial
;
3817 return CODECVT_error
;
3831 /* ?in@?$codecvt@GDH@std@@QBEHAAHPBD1AAPBDPAG3AAPAG@Z */
3832 /* ?in@?$codecvt@GDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAG3AEAPEAG@Z */
3833 /* ?in@?$codecvt@_WDH@std@@QBEHAAHPBD1AAPBDPA_W3AAPA_W@Z */
3834 /* ?in@?$codecvt@_WDH@std@@QEBAHAEAHPEBD1AEAPEBDPEA_W3AEAPEA_W@Z */
3835 DEFINE_THISCALL_WRAPPER(codecvt_wchar_in
, 32)
3836 int __thiscall
codecvt_wchar_in(const codecvt_wchar
*this, _Mbstatet
*state
,
3837 const char *from
, const char *from_end
, const char **from_next
,
3838 wchar_t *to
, wchar_t *to_end
, wchar_t **to_next
)
3840 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3841 from_end
, from_next
, to
, to_end
, to_next
);
3842 return call_codecvt_wchar_do_in(this, state
, from
,
3843 from_end
, from_next
, to
, to_end
, to_next
);
3846 /* ?do_out@?$codecvt@GDH@std@@MBEHAAHPBG1AAPBGPAD3AAPAD@Z */
3847 /* ?do_out@?$codecvt@GDH@std@@MEBAHAEAHPEBG1AEAPEBGPEAD3AEAPEAD@Z */
3848 /* ?do_out@?$codecvt@_WDH@std@@MBEHAAHPB_W1AAPB_WPAD3AAPAD@Z */
3849 /* ?do_out@?$codecvt@_WDH@std@@MEBAHAEAHPEB_W1AEAPEB_WPEAD3AEAPEAD@Z */
3850 #if _MSVCP_VER <= 100
3851 #define call_codecvt_wchar_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
3852 CALL_VTBL_FUNC(this, 20, int, \
3853 (const codecvt_wchar*, _Mbstatet*, const wchar_t*, const wchar_t*, const wchar_t**, char*, char*, char**), \
3854 (this, state, from, from_end, from_next, to, to_end, to_next))
3856 #define call_codecvt_wchar_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
3857 CALL_VTBL_FUNC(this, 28, int, \
3858 (const codecvt_wchar*, _Mbstatet*, const wchar_t*, const wchar_t*, const wchar_t**, char*, char*, char**), \
3859 (this, state, from, from_end, from_next, to, to_end, to_next))
3861 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_out
, 32)
3862 int __thiscall
codecvt_wchar_do_out(const codecvt_wchar
*this, _Mbstatet
*state
,
3863 const wchar_t *from
, const wchar_t *from_end
, const wchar_t **from_next
,
3864 char *to
, char *to_end
, char **to_next
)
3866 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3867 from_end
, from_next
, to
, to_end
, to_next
);
3872 while(*from_next
!=from_end
&& *to_next
!=to_end
) {
3873 _Mbstatet old_state
= *state
;
3875 char buf
[MB_LEN_MAX
];
3877 switch((size
= _Wcrtomb(buf
, **from_next
, state
, &this->cvt
))) {
3879 return CODECVT_error
;
3881 if(size
> from_end
-*from_next
) {
3883 return CODECVT_partial
;
3887 memcpy_s(*to_next
, to_end
-*to_next
, buf
, size
);
3895 /* ?out@?$codecvt@GDH@std@@QBEHAAHPBG1AAPBGPAD3AAPAD@Z */
3896 /* ?out@?$codecvt@GDH@std@@QEBAHAEAHPEBG1AEAPEBGPEAD3AEAPEAD@Z */
3897 /* ?out@?$codecvt@_WDH@std@@QBEHAAHPB_W1AAPB_WPAD3AAPAD@Z */
3898 /* ?out@?$codecvt@_WDH@std@@QEBAHAEAHPEB_W1AEAPEB_WPEAD3AEAPEAD@Z */
3899 DEFINE_THISCALL_WRAPPER(codecvt_wchar_out
, 32)
3900 int __thiscall
codecvt_wchar_out(const codecvt_wchar
*this, _Mbstatet
*state
,
3901 const wchar_t *from
, const wchar_t *from_end
, const wchar_t **from_next
,
3902 char *to
, char *to_end
, char **to_next
)
3904 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3905 from_end
, from_next
, to
, to_end
, to_next
);
3906 return call_codecvt_wchar_do_out(this, state
, from
,
3907 from_end
, from_next
, to
, to_end
, to_next
);
3910 /* ?do_unshift@?$codecvt@GDH@std@@MBEHAAHPAD1AAPAD@Z */
3911 /* ?do_unshift@?$codecvt@GDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
3912 /* ?do_unshift@?$codecvt@_WDH@std@@MBEHAAHPAD1AAPAD@Z */
3913 /* ?do_unshift@?$codecvt@_WDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
3914 #if _MSVCP_VER <= 100
3915 #define call_codecvt_wchar_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 24, \
3916 int, (const codecvt_wchar*, _Mbstatet*, char*, char*, char**), (this, state, to, to_end, to_next))
3918 #define call_codecvt_wchar_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 32, \
3919 int, (const codecvt_wchar*, _Mbstatet*, char*, char*, char**), (this, state, to, to_end, to_next))
3921 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_unshift
, 20)
3922 int __thiscall
codecvt_wchar_do_unshift(const codecvt_wchar
*this,
3923 _Mbstatet
*state
, char *to
, char *to_end
, char **to_next
)
3925 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3926 if(MBSTATET_TO_INT(state
))
3927 WARN("unexpected state: %x\n", MBSTATET_TO_INT(state
));
3933 /* ?unshift@?$codecvt@GDH@std@@QBEHAAHPAD1AAPAD@Z */
3934 /* ?unshift@?$codecvt@GDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
3935 /* ?unshift@?$codecvt@_WDH@std@@QBEHAAHPAD1AAPAD@Z */
3936 /* ?unshift@?$codecvt@_WDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
3937 DEFINE_THISCALL_WRAPPER(codecvt_wchar_unshift
, 20)
3938 int __thiscall
codecvt_wchar_unshift(const codecvt_wchar
*this,
3939 _Mbstatet
*state
, char *to
, char *to_end
, char **to_next
)
3941 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3942 return call_codecvt_wchar_do_unshift(this, state
, to
, to_end
, to_next
);
3945 /* ?do_length@?$codecvt@GDH@std@@MBEHABHPBD1I@Z */
3946 /* ?do_length@?$codecvt@GDH@std@@MEBAHAEBHPEBD1_K@Z */
3947 /* ?do_length@?$codecvt@_WDH@std@@MBEHABHPBD1I@Z */
3948 /* ?do_length@?$codecvt@_WDH@std@@MEBAHAEBHPEBD1_K@Z */
3949 #if _MSVCP_VER <= 100
3950 #define call_codecvt_wchar_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 28, \
3951 int, (const codecvt_wchar*, const _Mbstatet*, const char*, const char*, size_t), \
3952 (this, state, from, from_end, max))
3954 #define call_codecvt_wchar_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 36, \
3955 int, (const codecvt_wchar*, const _Mbstatet*, const char*, const char*, size_t), \
3956 (this, state, from, from_end, max))
3958 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_length
, 20)
3959 int __thiscall
codecvt_wchar_do_length(const codecvt_wchar
*this, const _Mbstatet
*state
,
3960 const char *from
, const char *from_end
, size_t max
)
3962 _Mbstatet tmp_state
= *state
;
3965 TRACE("(%p %p %p %p %Iu)\n", this, state
, from
, from_end
, max
);
3967 while(ret
<max
&& from
!=from_end
) {
3968 switch(_Mbrtowc(NULL
, from
, from_end
-from
, &tmp_state
, &this->cvt
)) {
3985 /* ?length@?$codecvt@GDH@std@@QBEHABHPBD1I@Z */
3986 /* ?length@?$codecvt@GDH@std@@QEBAHAEBHPEBD1_K@Z */
3987 /* ?length@?$codecvt@_WDH@std@@QBEHABHPBD1I@Z */
3988 /* ?length@?$codecvt@_WDH@std@@QEBAHAEBHPEBD1_K@Z */
3989 DEFINE_THISCALL_WRAPPER(codecvt_wchar_length
, 20)
3990 int __thiscall
codecvt_wchar_length(const codecvt_wchar
*this, const _Mbstatet
*state
,
3991 const char *from
, const char *from_end
, size_t max
)
3993 TRACE("(%p %p %p %p %Iu)\n", this, state
, from
, from_end
, max
);
3994 return call_codecvt_wchar_do_length(this, state
, from
, from_end
, max
);
3997 /* ?id@?$numpunct@D@std@@2V0locale@2@A */
3998 locale_id numpunct_char_id
= {0};
4000 /* ??_7?$numpunct@D@std@@6B@ */
4001 extern const vtable_ptr numpunct_char_vtable
;
4003 /* ?_Init@?$numpunct@D@std@@IAEXABV_Locinfo@2@_N@Z */
4004 /* ?_Init@?$numpunct@D@std@@IEAAXAEBV_Locinfo@2@_N@Z */
4005 DEFINE_THISCALL_WRAPPER(numpunct_char__Init
, 12)
4006 void __thiscall
numpunct_char__Init(numpunct_char
*this, const _Locinfo
*locinfo
, bool isdef
)
4010 TRACE("(%p %p %d)\n", this, locinfo
, isdef
);
4012 len
= strlen(_Locinfo__Getfalse(locinfo
))+1;
4013 this->false_name
= operator_new(len
);
4014 memcpy((char*)this->false_name
, _Locinfo__Getfalse(locinfo
), len
);
4016 len
= strlen(_Locinfo__Gettrue(locinfo
))+1;
4017 this->true_name
= operator_new(len
);
4018 memcpy((char*)this->true_name
, _Locinfo__Gettrue(locinfo
), len
);
4021 this->grouping
= operator_new(1);
4022 *(char*)this->grouping
= 0;
4027 const struct lconv
*lc
= _Locinfo__Getlconv(locinfo
);
4029 len
= strlen(lc
->grouping
)+1;
4030 this->grouping
= operator_new(len
);
4031 memcpy((char*)this->grouping
, lc
->grouping
, len
);
4033 this->dp
= lc
->decimal_point
[0];
4034 this->sep
= lc
->thousands_sep
[0];
4038 /* ?_Tidy@?$numpunct@D@std@@AAEXXZ */
4039 /* ?_Tidy@?$numpunct@D@std@@AEAAXXZ */
4040 DEFINE_THISCALL_WRAPPER(numpunct_char__Tidy
, 4)
4041 void __thiscall
numpunct_char__Tidy(numpunct_char
*this)
4043 TRACE("(%p)\n", this);
4045 operator_delete((char*)this->grouping
);
4046 operator_delete((char*)this->false_name
);
4047 operator_delete((char*)this->true_name
);
4050 /* ??0?$numpunct@D@std@@QAE@ABV_Locinfo@1@I_N@Z */
4051 /* ??0?$numpunct@D@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
4052 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_locinfo
, 16)
4053 numpunct_char
* __thiscall
numpunct_char_ctor_locinfo(numpunct_char
*this,
4054 const _Locinfo
*locinfo
, size_t refs
, bool usedef
)
4056 TRACE("(%p %p %Iu %d)\n", this, locinfo
, refs
, usedef
);
4057 locale_facet_ctor_refs(&this->facet
, refs
);
4058 this->facet
.vtable
= &numpunct_char_vtable
;
4059 numpunct_char__Init(this, locinfo
, usedef
);
4063 /* ??0?$numpunct@D@std@@IAE@PBDI_N@Z */
4064 /* ??0?$numpunct@D@std@@IEAA@PEBD_K_N@Z */
4065 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_name
, 16)
4066 numpunct_char
* __thiscall
numpunct_char_ctor_name(numpunct_char
*this,
4067 const char *name
, size_t refs
, bool usedef
)
4071 TRACE("(%p %s %Iu %d)\n", this, debugstr_a(name
), refs
, usedef
);
4072 locale_facet_ctor_refs(&this->facet
, refs
);
4073 this->facet
.vtable
= &numpunct_char_vtable
;
4075 _Locinfo_ctor_cstr(&locinfo
, name
);
4076 numpunct_char__Init(this, &locinfo
, usedef
);
4077 _Locinfo_dtor(&locinfo
);
4081 /* ??0?$numpunct@D@std@@QAE@I@Z */
4082 /* ??0?$numpunct@D@std@@QEAA@_K@Z */
4083 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_refs
, 8)
4084 numpunct_char
* __thiscall
numpunct_char_ctor_refs(numpunct_char
*this, size_t refs
)
4086 TRACE("(%p %Iu)\n", this, refs
);
4087 return numpunct_char_ctor_name(this, "C", refs
, FALSE
);
4090 /* ??_F?$numpunct@D@std@@QAEXXZ */
4091 /* ??_F?$numpunct@D@std@@QEAAXXZ */
4092 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor
, 4)
4093 numpunct_char
* __thiscall
numpunct_char_ctor(numpunct_char
*this)
4095 return numpunct_char_ctor_refs(this, 0);
4098 /* ??1?$numpunct@D@std@@UAE@XZ */
4099 /* ??1?$numpunct@D@std@@UEAA@XZ */
4100 /* ??1?$numpunct@D@std@@MAE@XZ */
4101 /* ??1?$numpunct@D@std@@MEAA@XZ */
4102 DEFINE_THISCALL_WRAPPER(numpunct_char_dtor
, 4)
4103 void __thiscall
numpunct_char_dtor(numpunct_char
*this)
4105 TRACE("(%p)\n", this);
4106 numpunct_char__Tidy(this);
4109 DEFINE_THISCALL_WRAPPER(numpunct_char_vector_dtor
, 8)
4110 numpunct_char
* __thiscall
numpunct_char_vector_dtor(numpunct_char
*this, unsigned int flags
)
4112 TRACE("(%p %x)\n", this, flags
);
4114 /* we have an array, with the number of elements stored before the first object */
4115 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
4117 for(i
=*ptr
-1; i
>=0; i
--)
4118 numpunct_char_dtor(this+i
);
4119 operator_delete(ptr
);
4121 numpunct_char_dtor(this);
4123 operator_delete(this);
4129 /* ?_Getcat@?$numpunct@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4130 /* ?_Getcat@?$numpunct@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4131 size_t __cdecl
numpunct_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
4133 TRACE("(%p %p)\n", facet
, loc
);
4135 if(facet
&& !*facet
) {
4136 *facet
= operator_new(sizeof(numpunct_char
));
4137 numpunct_char_ctor_name((numpunct_char
*)*facet
,
4138 locale_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
4144 /* ?_Getcat@?$numpunct@D@std@@SAIPAPBVfacet@locale@2@@Z */
4145 /* ?_Getcat@?$numpunct@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
4146 size_t __cdecl
numpunct_char__Getcat_old(const locale_facet
**facet
)
4148 return numpunct_char__Getcat(facet
, locale_classic());
4151 static numpunct_char
* numpunct_char_use_facet(const locale
*loc
)
4153 static numpunct_char
*obj
= NULL
;
4156 const locale_facet
*fac
;
4158 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
4159 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_char_id
));
4161 _Lockit_dtor(&lock
);
4162 return (numpunct_char
*)fac
;
4166 _Lockit_dtor(&lock
);
4170 numpunct_char__Getcat(&fac
, loc
);
4171 obj
= (numpunct_char
*)fac
;
4172 call_locale_facet__Incref(&obj
->facet
);
4173 locale_facet_register(&obj
->facet
);
4174 _Lockit_dtor(&lock
);
4179 /* ?do_decimal_point@?$numpunct@D@std@@MBEDXZ */
4180 /* ?do_decimal_point@?$numpunct@D@std@@MEBADXZ */
4181 DEFINE_THISCALL_WRAPPER(numpunct_char_do_decimal_point
, 4)
4182 #if _MSVCP_VER <= 100
4183 #define call_numpunct_char_do_decimal_point(this) CALL_VTBL_FUNC(this, 4, \
4184 char, (const numpunct_char *this), (this))
4186 #define call_numpunct_char_do_decimal_point(this) CALL_VTBL_FUNC(this, 12, \
4187 char, (const numpunct_char *this), (this))
4189 char __thiscall
numpunct_char_do_decimal_point(const numpunct_char
*this)
4191 TRACE("(%p)\n", this);
4195 /* ?decimal_point@?$numpunct@D@std@@QBEDXZ */
4196 /* ?decimal_point@?$numpunct@D@std@@QEBADXZ */
4197 DEFINE_THISCALL_WRAPPER(numpunct_char_decimal_point
, 4)
4198 char __thiscall
numpunct_char_decimal_point(const numpunct_char
*this)
4200 TRACE("(%p)\n", this);
4201 return call_numpunct_char_do_decimal_point(this);
4204 /* ?do_thousands_sep@?$numpunct@D@std@@MBEDXZ */
4205 /* ?do_thousands_sep@?$numpunct@D@std@@MEBADXZ */
4206 DEFINE_THISCALL_WRAPPER(numpunct_char_do_thousands_sep
, 4)
4207 #if _MSVCP_VER <= 100
4208 #define call_numpunct_char_do_thousands_sep(this) CALL_VTBL_FUNC(this, 8, \
4209 char, (const numpunct_char*), (this))
4211 #define call_numpunct_char_do_thousands_sep(this) CALL_VTBL_FUNC(this, 16, \
4212 char, (const numpunct_char*), (this))
4214 char __thiscall
numpunct_char_do_thousands_sep(const numpunct_char
*this)
4216 TRACE("(%p)\n", this);
4220 /* ?thousands_sep@?$numpunct@D@std@@QBEDXZ */
4221 /* ?thousands_sep@?$numpunct@D@std@@QEBADXZ */
4222 DEFINE_THISCALL_WRAPPER(numpunct_char_thousands_sep
, 4)
4223 char __thiscall
numpunct_char_thousands_sep(const numpunct_char
*this)
4225 TRACE("(%p)\n", this);
4226 return call_numpunct_char_do_thousands_sep(this);
4229 /* ?do_grouping@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4230 /* ?do_grouping@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4231 DEFINE_THISCALL_WRAPPER(numpunct_char_do_grouping
, 8)
4232 #if _MSVCP_VER <= 100
4233 #define call_numpunct_char_do_grouping(this, ret) CALL_VTBL_FUNC(this, 12, \
4234 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4236 #define call_numpunct_char_do_grouping(this, ret) CALL_VTBL_FUNC(this, 20, \
4237 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4239 basic_string_char
* __thiscall
numpunct_char_do_grouping(
4240 const numpunct_char
*this, basic_string_char
*ret
)
4242 TRACE("(%p)\n", this);
4243 return MSVCP_basic_string_char_ctor_cstr(ret
, this->grouping
);
4246 /* ?grouping@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4247 /* ?grouping@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4248 DEFINE_THISCALL_WRAPPER(numpunct_char_grouping
, 8)
4249 basic_string_char
* __thiscall
numpunct_char_grouping(const numpunct_char
*this, basic_string_char
*ret
)
4251 TRACE("(%p)\n", this);
4252 return call_numpunct_char_do_grouping(this, ret
);
4255 /* ?do_falsename@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4256 /* ?do_falsename@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4257 DEFINE_THISCALL_WRAPPER(numpunct_char_do_falsename
, 8)
4258 #if _MSVCP_VER <= 100
4259 #define call_numpunct_char_do_falsename(this, ret) CALL_VTBL_FUNC(this, 16, \
4260 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4262 #define call_numpunct_char_do_falsename(this, ret) CALL_VTBL_FUNC(this, 24, \
4263 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4265 basic_string_char
* __thiscall
numpunct_char_do_falsename(
4266 const numpunct_char
*this, basic_string_char
*ret
)
4268 TRACE("(%p)\n", this);
4269 return MSVCP_basic_string_char_ctor_cstr(ret
, this->false_name
);
4272 /* ?falsename@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4273 /* ?falsename@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4274 DEFINE_THISCALL_WRAPPER(numpunct_char_falsename
, 8)
4275 basic_string_char
* __thiscall
numpunct_char_falsename(const numpunct_char
*this, basic_string_char
*ret
)
4277 TRACE("(%p)\n", this);
4278 return call_numpunct_char_do_falsename(this, ret
);
4281 /* ?do_truename@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4282 /* ?do_truename@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4283 DEFINE_THISCALL_WRAPPER(numpunct_char_do_truename
, 8)
4284 #if _MSVCP_VER <= 100
4285 #define call_numpunct_char_do_truename(this, ret) CALL_VTBL_FUNC(this, 20, \
4286 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4288 #define call_numpunct_char_do_truename(this, ret) CALL_VTBL_FUNC(this, 28, \
4289 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4291 basic_string_char
* __thiscall
numpunct_char_do_truename(
4292 const numpunct_char
*this, basic_string_char
*ret
)
4294 TRACE("(%p)\n", this);
4295 return MSVCP_basic_string_char_ctor_cstr(ret
, this->true_name
);
4298 /* ?truename@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4299 /* ?truename@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4300 DEFINE_THISCALL_WRAPPER(numpunct_char_truename
, 8)
4301 basic_string_char
* __thiscall
numpunct_char_truename(const numpunct_char
*this, basic_string_char
*ret
)
4303 TRACE("(%p)\n", this);
4304 return call_numpunct_char_do_truename(this, ret
);
4307 /* ?id@?$numpunct@_W@std@@2V0locale@2@A */
4308 locale_id numpunct_wchar_id
= {0};
4309 /* ?id@?$numpunct@G@std@@2V0locale@2@A */
4310 locale_id numpunct_short_id
= {0};
4312 /* ??_7?$numpunct@_W@std@@6B@ */
4313 extern const vtable_ptr numpunct_wchar_vtable
;
4314 /* ??_7?$numpunct@G@std@@6B@ */
4315 extern const vtable_ptr numpunct_short_vtable
;
4317 /* ?_Init@?$numpunct@_W@std@@IAEXABV_Locinfo@2@_N@Z */
4318 /* ?_Init@?$numpunct@_W@std@@IEAAXAEBV_Locinfo@2@_N@Z */
4319 /* ?_Init@?$numpunct@G@std@@IAEXABV_Locinfo@2@_N@Z */
4320 /* ?_Init@?$numpunct@G@std@@IEAAXAEBV_Locinfo@2@_N@Z */
4321 DEFINE_THISCALL_WRAPPER(numpunct_wchar__Init
, 12)
4322 void __thiscall
numpunct_wchar__Init(numpunct_wchar
*this,
4323 const _Locinfo
*locinfo
, bool isdef
)
4325 const char *to_convert
;
4329 TRACE("(%p %p %d)\n", this, locinfo
, isdef
);
4331 _Locinfo__Getcvt(locinfo
, &cvt
);
4333 to_convert
= _Locinfo__Getfalse(locinfo
);
4334 len
= MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1, NULL
, 0);
4335 this->false_name
= operator_new(len
*sizeof(WCHAR
));
4336 MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1,
4337 (wchar_t*)this->false_name
, len
);
4339 to_convert
= _Locinfo__Gettrue(locinfo
);
4340 len
= MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1, NULL
, 0);
4341 this->true_name
= operator_new(len
*sizeof(WCHAR
));
4342 MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1,
4343 (wchar_t*)this->true_name
, len
);
4346 this->grouping
= operator_new(1);
4347 *(char*)this->grouping
= 0;
4352 const struct lconv
*lc
= _Locinfo__Getlconv(locinfo
);
4354 len
= strlen(lc
->grouping
)+1;
4355 this->grouping
= operator_new(len
);
4356 memcpy((char*)this->grouping
, lc
->grouping
, len
);
4358 this->dp
= mb_to_wc(lc
->decimal_point
[0], &cvt
);
4359 this->sep
= mb_to_wc(lc
->thousands_sep
[0], &cvt
);
4363 /* ?_Tidy@?$numpunct@_W@std@@AAEXXZ */
4364 /* ?_Tidy@?$numpunct@_W@std@@AEAAXXZ */
4365 /* ?_Tidy@?$numpunct@G@std@@AAEXXZ */
4366 /* ?_Tidy@?$numpunct@G@std@@AEAAXXZ */
4367 DEFINE_THISCALL_WRAPPER(numpunct_wchar__Tidy
, 4)
4368 void __thiscall
numpunct_wchar__Tidy(numpunct_wchar
*this)
4370 TRACE("(%p)\n", this);
4372 operator_delete((char*)this->grouping
);
4373 operator_delete((wchar_t*)this->false_name
);
4374 operator_delete((wchar_t*)this->true_name
);
4377 /* ??0?$numpunct@_W@std@@QAE@ABV_Locinfo@1@I_N@Z */
4378 /* ??0?$numpunct@_W@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
4379 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_locinfo
, 16)
4380 numpunct_wchar
* __thiscall
numpunct_wchar_ctor_locinfo(numpunct_wchar
*this,
4381 const _Locinfo
*locinfo
, size_t refs
, bool usedef
)
4383 TRACE("(%p %p %Iu %d)\n", this, locinfo
, refs
, usedef
);
4384 locale_facet_ctor_refs(&this->facet
, refs
);
4385 this->facet
.vtable
= &numpunct_wchar_vtable
;
4386 numpunct_wchar__Init(this, locinfo
, usedef
);
4390 /* ??0?$numpunct@G@std@@QAE@ABV_Locinfo@1@I_N@Z */
4391 /* ??0?$numpunct@G@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
4392 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_locinfo
, 16)
4393 numpunct_wchar
* __thiscall
numpunct_short_ctor_locinfo(numpunct_wchar
*this,
4394 const _Locinfo
*locinfo
, size_t refs
, bool usedef
)
4396 numpunct_wchar_ctor_locinfo(this, locinfo
, refs
, usedef
);
4397 this->facet
.vtable
= &numpunct_short_vtable
;
4401 /* ??0?$numpunct@_W@std@@IAE@PBDI_N@Z */
4402 /* ??0?$numpunct@_W@std@@IEAA@PEBD_K_N@Z */
4403 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_name
, 16)
4404 numpunct_wchar
* __thiscall
numpunct_wchar_ctor_name(numpunct_wchar
*this,
4405 const char *name
, size_t refs
, bool usedef
)
4409 TRACE("(%p %s %Iu %d)\n", this, debugstr_a(name
), refs
, usedef
);
4410 locale_facet_ctor_refs(&this->facet
, refs
);
4411 this->facet
.vtable
= &numpunct_wchar_vtable
;
4413 _Locinfo_ctor_cstr(&locinfo
, name
);
4414 numpunct_wchar__Init(this, &locinfo
, usedef
);
4415 _Locinfo_dtor(&locinfo
);
4419 /* ??0?$numpunct@G@std@@IAE@PBDI_N@Z */
4420 /* ??0?$numpunct@G@std@@IEAA@PEBD_K_N@Z */
4421 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_name
, 16)
4422 numpunct_wchar
* __thiscall
numpunct_short_ctor_name(numpunct_wchar
*this,
4423 const char *name
, size_t refs
, bool usedef
)
4425 numpunct_wchar_ctor_name(this, name
, refs
, usedef
);
4426 this->facet
.vtable
= &numpunct_short_vtable
;
4430 /* ??0?$numpunct@_W@std@@QAE@I@Z */
4431 /* ??0?$numpunct@_W@std@@QEAA@_K@Z */
4432 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_refs
, 8)
4433 numpunct_wchar
* __thiscall
numpunct_wchar_ctor_refs(numpunct_wchar
*this, size_t refs
)
4435 TRACE("(%p %Iu)\n", this, refs
);
4436 return numpunct_wchar_ctor_name(this, "C", refs
, FALSE
);
4439 /* ??0?$numpunct@G@std@@QAE@I@Z */
4440 /* ??0?$numpunct@G@std@@QEAA@_K@Z */
4441 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_refs
, 8)
4442 numpunct_wchar
* __thiscall
numpunct_short_ctor_refs(numpunct_wchar
*this, size_t refs
)
4444 numpunct_wchar_ctor_refs(this, refs
);
4445 this->facet
.vtable
= &numpunct_short_vtable
;
4449 /* ??_F?$numpunct@_W@std@@QAEXXZ */
4450 /* ??_F?$numpunct@_W@std@@QEAAXXZ */
4451 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor
, 4)
4452 numpunct_wchar
* __thiscall
numpunct_wchar_ctor(numpunct_wchar
*this)
4454 return numpunct_wchar_ctor_refs(this, 0);
4457 /* ??_F?$numpunct@G@std@@QAEXXZ */
4458 /* ??_F?$numpunct@G@std@@QEAAXXZ */
4459 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor
, 4)
4460 numpunct_wchar
* __thiscall
numpunct_short_ctor(numpunct_wchar
*this)
4462 return numpunct_short_ctor_refs(this, 0);
4465 /* ??1?$numpunct@G@std@@UAE@XZ */
4466 /* ??1?$numpunct@G@std@@UEAA@XZ */
4467 /* ??1?$numpunct@_W@std@@MAE@XZ */
4468 /* ??1?$numpunct@_W@std@@MEAA@XZ */
4469 /* ??1?$numpunct@G@std@@MAE@XZ */
4470 /* ??1?$numpunct@G@std@@MEAA@XZ */
4471 DEFINE_THISCALL_WRAPPER(numpunct_wchar_dtor
, 4)
4472 void __thiscall
numpunct_wchar_dtor(numpunct_wchar
*this)
4474 TRACE("(%p)\n", this);
4475 numpunct_wchar__Tidy(this);
4478 DEFINE_THISCALL_WRAPPER(numpunct_wchar_vector_dtor
, 8)
4479 numpunct_wchar
* __thiscall
numpunct_wchar_vector_dtor(numpunct_wchar
*this, unsigned int flags
)
4481 TRACE("(%p %x)\n", this, flags
);
4483 /* we have an array, with the number of elements stored before the first object */
4484 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
4486 for(i
=*ptr
-1; i
>=0; i
--)
4487 numpunct_wchar_dtor(this+i
);
4488 operator_delete(ptr
);
4490 numpunct_wchar_dtor(this);
4492 operator_delete(this);
4498 /* ?_Getcat@?$numpunct@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4499 /* ?_Getcat@?$numpunct@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4500 size_t __cdecl
numpunct_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
4502 TRACE("(%p %p)\n", facet
, loc
);
4504 if(facet
&& !*facet
) {
4505 *facet
= operator_new(sizeof(numpunct_wchar
));
4506 numpunct_wchar_ctor_name((numpunct_wchar
*)*facet
,
4507 locale_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
4513 /* ?_Getcat@?$numpunct@_W@std@@SAIPAPBVfacet@locale@2@@Z */
4514 /* ?_Getcat@?$numpunct@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
4515 size_t __cdecl
numpunct_wchar__Getcat_old(const locale_facet
**facet
)
4517 return numpunct_wchar__Getcat(facet
, locale_classic());
4520 static numpunct_wchar
* numpunct_wchar_use_facet(const locale
*loc
)
4522 static numpunct_wchar
*obj
= NULL
;
4525 const locale_facet
*fac
;
4527 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
4528 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_wchar_id
));
4530 _Lockit_dtor(&lock
);
4531 return (numpunct_wchar
*)fac
;
4535 _Lockit_dtor(&lock
);
4539 numpunct_wchar__Getcat(&fac
, loc
);
4540 obj
= (numpunct_wchar
*)fac
;
4541 call_locale_facet__Incref(&obj
->facet
);
4542 locale_facet_register(&obj
->facet
);
4543 _Lockit_dtor(&lock
);
4548 /* ?_Getcat@?$numpunct@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4549 /* ?_Getcat@?$numpunct@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4550 size_t __cdecl
numpunct_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
4552 TRACE("(%p %p)\n", facet
, loc
);
4554 if(facet
&& !*facet
) {
4555 *facet
= operator_new(sizeof(numpunct_wchar
));
4556 numpunct_short_ctor_name((numpunct_wchar
*)*facet
,
4557 locale_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
4563 /* ?_Getcat@?$numpunct@G@std@@SAIPAPBVfacet@locale@2@@Z */
4564 /* ?_Getcat@?$numpunct@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
4565 size_t __cdecl
numpunct_short__Getcat_old(const locale_facet
**facet
)
4567 return numpunct_short__Getcat(facet
, locale_classic());
4570 static numpunct_wchar
* numpunct_short_use_facet(const locale
*loc
)
4572 static numpunct_wchar
*obj
= NULL
;
4575 const locale_facet
*fac
;
4577 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
4578 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_short_id
));
4580 _Lockit_dtor(&lock
);
4581 return (numpunct_wchar
*)fac
;
4585 _Lockit_dtor(&lock
);
4589 numpunct_short__Getcat(&fac
, loc
);
4590 obj
= (numpunct_wchar
*)fac
;
4591 call_locale_facet__Incref(&obj
->facet
);
4592 locale_facet_register(&obj
->facet
);
4593 _Lockit_dtor(&lock
);
4598 /* ?do_decimal_point@?$numpunct@_W@std@@MBE_WXZ */
4599 /* ?do_decimal_point@?$numpunct@_W@std@@MEBA_WXZ */
4600 /* ?do_decimal_point@?$numpunct@G@std@@MBEGXZ */
4601 /* ?do_decimal_point@?$numpunct@G@std@@MEBAGXZ */
4602 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_decimal_point
, 4)
4603 #if _MSVCP_VER <= 100
4604 #define call_numpunct_wchar_do_decimal_point(this) CALL_VTBL_FUNC(this, 4, \
4605 wchar_t, (const numpunct_wchar *this), (this))
4607 #define call_numpunct_wchar_do_decimal_point(this) CALL_VTBL_FUNC(this, 12, \
4608 wchar_t, (const numpunct_wchar *this), (this))
4610 wchar_t __thiscall
numpunct_wchar_do_decimal_point(const numpunct_wchar
*this)
4612 TRACE("(%p)\n", this);
4616 /* ?decimal_point@?$numpunct@_W@std@@QBE_WXZ */
4617 /* ?decimal_point@?$numpunct@_W@std@@QEBA_WXZ */
4618 /* ?decimal_point@?$numpunct@G@std@@QBEGXZ */
4619 /* ?decimal_point@?$numpunct@G@std@@QEBAGXZ */
4620 DEFINE_THISCALL_WRAPPER(numpunct_wchar_decimal_point
, 4)
4621 wchar_t __thiscall
numpunct_wchar_decimal_point(const numpunct_wchar
*this)
4623 TRACE("(%p)\n", this);
4624 return call_numpunct_wchar_do_decimal_point(this);
4627 /* ?do_thousands_sep@?$numpunct@_W@std@@MBE_WXZ */
4628 /* ?do_thousands_sep@?$numpunct@_W@std@@MEBA_WXZ */
4629 /* ?do_thousands_sep@?$numpunct@G@std@@MBEGXZ */
4630 /* ?do_thousands_sep@?$numpunct@G@std@@MEBAGXZ */
4631 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_thousands_sep
, 4)
4632 #if _MSVCP_VER <= 100
4633 #define call_numpunct_wchar_do_thousands_sep(this) CALL_VTBL_FUNC(this, 8, \
4634 wchar_t, (const numpunct_wchar *this), (this))
4636 #define call_numpunct_wchar_do_thousands_sep(this) CALL_VTBL_FUNC(this, 16, \
4637 wchar_t, (const numpunct_wchar *this), (this))
4639 wchar_t __thiscall
numpunct_wchar_do_thousands_sep(const numpunct_wchar
*this)
4641 TRACE("(%p)\n", this);
4645 /* ?thousands_sep@?$numpunct@_W@std@@QBE_WXZ */
4646 /* ?thousands_sep@?$numpunct@_W@std@@QEBA_WXZ */
4647 /* ?thousands_sep@?$numpunct@G@std@@QBEGXZ */
4648 /* ?thousands_sep@?$numpunct@G@std@@QEBAGXZ */
4649 DEFINE_THISCALL_WRAPPER(numpunct_wchar_thousands_sep
, 4)
4650 wchar_t __thiscall
numpunct_wchar_thousands_sep(const numpunct_wchar
*this)
4652 TRACE("(%p)\n", this);
4653 return call_numpunct_wchar_do_thousands_sep(this);
4656 /* ?do_grouping@?$numpunct@_W@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4657 /* ?do_grouping@?$numpunct@_W@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4658 /* ?do_grouping@?$numpunct@G@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4659 /* ?do_grouping@?$numpunct@G@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4660 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_grouping
, 8)
4661 #if _MSVCP_VER <= 100
4662 #define call_numpunct_wchar_do_grouping(this, ret) CALL_VTBL_FUNC(this, 12, \
4663 basic_string_char*, (const numpunct_wchar*, basic_string_char*), (this, ret))
4665 #define call_numpunct_wchar_do_grouping(this, ret) CALL_VTBL_FUNC(this, 20, \
4666 basic_string_char*, (const numpunct_wchar*, basic_string_char*), (this, ret))
4668 basic_string_char
* __thiscall
numpunct_wchar_do_grouping(const numpunct_wchar
*this, basic_string_char
*ret
)
4670 TRACE("(%p)\n", this);
4671 return MSVCP_basic_string_char_ctor_cstr(ret
, this->grouping
);
4674 /* ?grouping@?$numpunct@_W@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4675 /* ?grouping@?$numpunct@_W@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4676 /* ?grouping@?$numpunct@G@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4677 /* ?grouping@?$numpunct@G@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4678 DEFINE_THISCALL_WRAPPER(numpunct_wchar_grouping
, 8)
4679 basic_string_char
* __thiscall
numpunct_wchar_grouping(const numpunct_wchar
*this, basic_string_char
*ret
)
4681 TRACE("(%p)\n", this);
4682 return call_numpunct_wchar_do_grouping(this, ret
);
4685 /* ?do_falsename@?$numpunct@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4686 /* ?do_falsename@?$numpunct@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4687 /* ?do_falsename@?$numpunct@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4688 /* ?do_falsename@?$numpunct@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4689 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_falsename
, 8)
4690 #if _MSVCP_VER <= 100
4691 #define call_numpunct_wchar_do_falsename(this, ret) CALL_VTBL_FUNC(this, 16, \
4692 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
4694 #define call_numpunct_wchar_do_falsename(this, ret) CALL_VTBL_FUNC(this, 24, \
4695 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
4697 basic_string_wchar
* __thiscall
numpunct_wchar_do_falsename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4699 TRACE("(%p)\n", this);
4700 return MSVCP_basic_string_wchar_ctor_cstr(ret
, this->false_name
);
4703 /* ?falsename@?$numpunct@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4704 /* ?falsename@?$numpunct@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4705 /* ?falsename@?$numpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4706 /* ?falsename@?$numpunct@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4707 DEFINE_THISCALL_WRAPPER(numpunct_wchar_falsename
, 8)
4708 basic_string_wchar
* __thiscall
numpunct_wchar_falsename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4710 TRACE("(%p)\n", this);
4711 return call_numpunct_wchar_do_falsename(this, ret
);
4714 /* ?do_truename@?$numpunct@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4715 /* ?do_truename@?$numpunct@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4716 /* ?do_truename@?$numpunct@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4717 /* ?do_truename@?$numpunct@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4718 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_truename
, 8)
4719 #if _MSVCP_VER <= 100
4720 #define call_numpunct_wchar_do_truename(this, ret) CALL_VTBL_FUNC(this, 20, \
4721 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
4723 #define call_numpunct_wchar_do_truename(this, ret) CALL_VTBL_FUNC(this, 28, \
4724 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
4726 basic_string_wchar
* __thiscall
numpunct_wchar_do_truename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4728 TRACE("(%p)\n", this);
4729 return MSVCP_basic_string_wchar_ctor_cstr(ret
, this->true_name
);
4732 /* ?truename@?$numpunct@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4733 /* ?truename@?$numpunct@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4734 /* ?truename@?$numpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4735 /* ?truename@?$numpunct@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4736 DEFINE_THISCALL_WRAPPER(numpunct_wchar_truename
, 8)
4737 basic_string_wchar
* __thiscall
numpunct_wchar_truename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4739 TRACE("(%p)\n", this);
4740 return call_numpunct_wchar_do_truename(this, ret
);
4743 double __cdecl
_Stod(const char *buf
, char **buf_end
, LONG exp
)
4745 double ret
= strtod(buf
, buf_end
);
4748 ret
*= pow(10, exp
);
4752 double __cdecl
_Stodx(const char *buf
, char **buf_end
, LONG exp
, int *err
)
4758 ret
= _Stod(buf
, buf_end
, exp
);
4768 float __cdecl
_Stof(const char *buf
, char **buf_end
, LONG exp
)
4770 return _Stod(buf
, buf_end
, exp
);
4773 float __cdecl
_Stofx(const char *buf
, char **buf_end
, LONG exp
, int *err
)
4775 return _Stodx(buf
, buf_end
, exp
, err
);
4778 __int64 __cdecl
_Stoll(const char *buf
, char **buf_end
, int base
)
4780 return _strtoi64(buf
, buf_end
, base
);
4783 __int64 __cdecl
_Stollx(const char *buf
, char **buf_end
, int base
, int *err
)
4789 ret
= _strtoi64(buf
, buf_end
, base
);
4799 LONG __cdecl
_Stolx(const char *buf
, char **buf_end
, int base
, int *err
)
4801 __int64 i
= _Stollx(buf
, buf_end
, base
, err
);
4802 if(!*err
&& i
!=(__int64
)((LONG
)i
))
4807 unsigned __int64 __cdecl
_Stoull(const char *buf
, char **buf_end
, int base
)
4809 return _strtoui64(buf
, buf_end
, base
);
4812 unsigned __int64 __cdecl
_Stoullx(const char *buf
, char **buf_end
, int base
, int *err
)
4814 unsigned __int64 ret
;
4818 ret
= _strtoui64(buf
, buf_end
, base
);
4828 ULONG __cdecl
_Stoul(const char *buf
, char **buf_end
, int base
)
4831 unsigned __int64 i
= _Stoullx(buf
[0]=='-' ? buf
+1 : buf
, buf_end
, base
, &err
);
4832 if(!err
&& i
!=(unsigned __int64
)((ULONG
)i
))
4834 return buf
[0]=='-' ? -i
: i
;
4837 ULONG __cdecl
_Stoulx(const char *buf
, char **buf_end
, int base
, int *err
)
4839 unsigned __int64 i
= _Stoullx(buf
[0]=='-' ? buf
+1 : buf
, buf_end
, base
, err
);
4840 if(!*err
&& i
!=(unsigned __int64
)((ULONG
)i
))
4842 return buf
[0]=='-' ? -i
: i
;
4845 /* ?id@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
4846 locale_id num_get_wchar_id
= {0};
4847 /* ?id@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
4848 locale_id num_get_short_id
= {0};
4850 /* ??_7?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
4851 extern const vtable_ptr num_get_wchar_vtable
;
4852 /* ??_7?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
4853 extern const vtable_ptr num_get_short_vtable
;
4855 /* ?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
4856 /* ?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
4857 /* ?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
4858 /* ?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
4859 DEFINE_THISCALL_WRAPPER(num_get_wchar__Init
, 8)
4860 void __thiscall
num_get_wchar__Init(num_get
*this, const _Locinfo
*locinfo
)
4862 TRACE("(%p %p)\n", this, locinfo
);
4863 #if _MSVCP_VER <= 100
4864 _Locinfo__Getcvt(locinfo
, &this->cvt
);
4868 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
4869 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
4870 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor_locinfo
, 12)
4871 num_get
* __thiscall
num_get_wchar_ctor_locinfo(num_get
*this,
4872 const _Locinfo
*locinfo
, size_t refs
)
4874 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
4876 locale_facet_ctor_refs(&this->facet
, refs
);
4877 this->facet
.vtable
= &num_get_wchar_vtable
;
4879 num_get_wchar__Init(this, locinfo
);
4883 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
4884 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
4885 DEFINE_THISCALL_WRAPPER(num_get_short_ctor_locinfo
, 12)
4886 num_get
* __thiscall
num_get_short_ctor_locinfo(num_get
*this,
4887 const _Locinfo
*locinfo
, size_t refs
)
4889 num_get_wchar_ctor_locinfo(this, locinfo
, refs
);
4890 this->facet
.vtable
= &num_get_short_vtable
;
4894 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
4895 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
4896 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor_refs
, 8)
4897 num_get
* __thiscall
num_get_wchar_ctor_refs(num_get
*this, size_t refs
)
4901 TRACE("(%p %Iu)\n", this, refs
);
4903 _Locinfo_ctor(&locinfo
);
4904 num_get_wchar_ctor_locinfo(this, &locinfo
, refs
);
4905 _Locinfo_dtor(&locinfo
);
4909 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
4910 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
4911 DEFINE_THISCALL_WRAPPER(num_get_short_ctor_refs
, 8)
4912 num_get
* __thiscall
num_get_short_ctor_refs(num_get
*this, size_t refs
)
4914 num_get_wchar_ctor_refs(this, refs
);
4915 this->facet
.vtable
= &num_get_short_vtable
;
4919 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
4920 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
4921 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor
, 4)
4922 num_get
* __thiscall
num_get_wchar_ctor(num_get
*this)
4924 return num_get_wchar_ctor_refs(this, 0);
4927 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
4928 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
4929 DEFINE_THISCALL_WRAPPER(num_get_short_ctor
, 4)
4930 num_get
* __thiscall
num_get_short_ctor(num_get
*this)
4932 return num_get_short_ctor_refs(this, 0);
4935 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@UAE@XZ */
4936 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@UEAA@XZ */
4937 /* ??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
4938 /* ??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
4939 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
4940 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
4941 DEFINE_THISCALL_WRAPPER(num_get_wchar_dtor
, 4)
4942 void __thiscall
num_get_wchar_dtor(num_get
*this)
4944 TRACE("(%p)\n", this);
4945 locale_facet_dtor(&this->facet
);
4948 DEFINE_THISCALL_WRAPPER(num_get_wchar_vector_dtor
, 8)
4949 num_get
* __thiscall
num_get_wchar_vector_dtor(num_get
*this, unsigned int flags
)
4951 TRACE("(%p %x)\n", this, flags
);
4953 /* we have an array, with the number of elements stored before the first object */
4954 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
4956 for(i
=*ptr
-1; i
>=0; i
--)
4957 num_get_wchar_dtor(this+i
);
4958 operator_delete(ptr
);
4960 num_get_wchar_dtor(this);
4962 operator_delete(this);
4968 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4969 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4970 size_t __cdecl
num_get_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
4972 TRACE("(%p %p)\n", facet
, loc
);
4974 if(facet
&& !*facet
) {
4977 *facet
= operator_new(sizeof(num_get
));
4978 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
4979 num_get_wchar_ctor_locinfo((num_get
*)*facet
, &locinfo
, 0);
4980 _Locinfo_dtor(&locinfo
);
4986 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
4987 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
4988 size_t __cdecl
num_get_wchar__Getcat_old(const locale_facet
**facet
)
4990 return num_get_wchar__Getcat(facet
, locale_classic());
4993 num_get
* num_get_wchar_use_facet(const locale
*loc
)
4995 static num_get
*obj
= NULL
;
4998 const locale_facet
*fac
;
5000 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
5001 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_wchar_id
));
5003 _Lockit_dtor(&lock
);
5004 return (num_get
*)fac
;
5008 _Lockit_dtor(&lock
);
5012 num_get_wchar__Getcat(&fac
, loc
);
5013 obj
= (num_get
*)fac
;
5014 call_locale_facet__Incref(&obj
->facet
);
5015 locale_facet_register(&obj
->facet
);
5016 _Lockit_dtor(&lock
);
5021 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
5022 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
5023 size_t __cdecl
num_get_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
5025 if(facet
&& !*facet
) {
5026 num_get_wchar__Getcat(facet
, loc
);
5027 (*(locale_facet
**)facet
)->vtable
= &num_get_short_vtable
;
5033 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
5034 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
5035 size_t __cdecl
num_get_short__Getcat_old(const locale_facet
**facet
)
5037 return num_get_short__Getcat(facet
, locale_classic());
5040 num_get
* num_get_short_use_facet(const locale
*loc
)
5042 static num_get
*obj
= NULL
;
5045 const locale_facet
*fac
;
5047 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
5048 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_short_id
));
5050 _Lockit_dtor(&lock
);
5051 return (num_get
*)fac
;
5055 _Lockit_dtor(&lock
);
5059 num_get_short__Getcat(&fac
, loc
);
5060 obj
= (num_get
*)fac
;
5061 call_locale_facet__Incref(&obj
->facet
);
5062 locale_facet_register(&obj
->facet
);
5063 _Lockit_dtor(&lock
);
5068 static int num_get__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5069 istreambuf_iterator_wchar
*last
, const locale
*loc
, numpunct_wchar
*numpunct
)
5071 basic_string_char grouping_bstr
;
5072 basic_string_char groups_found
;
5073 int i
, groups_no
= 0, cur_group
= 0, exp
= 0;
5074 char *dest_beg
= dest
, *num_end
= dest
+25, *exp_end
= dest
+31;
5075 wchar_t sep
= 0, digits
[11], *digits_pos
;
5076 const char *grouping
, *groups
;
5077 BOOL error
= FALSE
, got_digit
= FALSE
, got_nonzero
= FALSE
;
5080 TRACE("(%p %p %p %p)\n", dest
, first
, last
, loc
);
5082 #if _MSVCP_VER <= 100
5085 cvt
= &ctype_wchar_use_facet(loc
)->cvt
;
5089 digits
[i
] = mb_to_wc('0'+i
, cvt
);
5092 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
5093 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
5094 #if _MSVCP_VER >= 70
5095 if (grouping
[0]) sep
= numpunct_wchar_thousands_sep(numpunct
);
5099 MSVCP_basic_string_char_ctor(&groups_found
);
5101 istreambuf_iterator_wchar_val(first
);
5103 if(first
->strbuf
&& first
->val
==mb_to_wc('-', cvt
)) {
5105 istreambuf_iterator_wchar_inc(first
);
5106 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', cvt
)) {
5108 istreambuf_iterator_wchar_inc(first
);
5111 /* read possibly grouped numbers before decimal */
5112 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
5113 if(!(digits_pos
= wcschr(digits
, first
->val
))) {
5114 if(sep
&& first
->val
==sep
) {
5115 if(!groups_no
) break; /* empty group - stop parsing */
5116 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5123 got_digit
= TRUE
; /* found a digit, zero or non-zero */
5124 /* write digit to dest if not a leading zero (to not waste dest buffer) */
5125 if(!got_nonzero
&& first
->val
== digits
[0])
5132 *dest
++ = '0'+digits_pos
-digits
;
5134 exp
++; /* too many digits, just multiply by 10 */
5135 if(sep
&& groups_no
<CHAR_MAX
)
5140 /* if all leading zeroes, we didn't write anything so put a zero we check for a decimal */
5141 if(got_digit
&& !got_nonzero
)
5144 /* get decimal, if any */
5145 if(first
->strbuf
&& first
->val
==numpunct_wchar_decimal_point(numpunct
)) {
5147 *dest
++ = *localeconv()->decimal_point
;
5148 istreambuf_iterator_wchar_inc(first
);
5151 /* read non-grouped after decimal */
5152 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
5153 if(!(digits_pos
= wcschr(digits
, first
->val
)))
5155 else if(dest
<num_end
) {
5157 *dest
++ = '0'+digits_pos
-digits
;
5161 /* read exponent, if any */
5162 if(first
->strbuf
&& (first
->val
==mb_to_wc('e', cvt
) || first
->val
==mb_to_wc('E', cvt
))) {
5164 istreambuf_iterator_wchar_inc(first
);
5166 if(first
->strbuf
&& first
->val
==mb_to_wc('-', cvt
)) {
5168 istreambuf_iterator_wchar_inc(first
);
5169 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', cvt
)) {
5171 istreambuf_iterator_wchar_inc(first
);
5174 got_digit
= got_nonzero
= FALSE
;
5176 /* skip any leading zeroes */
5177 for(; first
->strbuf
&& first
->val
==digits
[0]; istreambuf_iterator_wchar_inc(first
))
5180 for(; first
->strbuf
&& (digits_pos
= wcschr(digits
, first
->val
)); istreambuf_iterator_wchar_inc(first
)) {
5181 got_digit
= got_nonzero
= TRUE
; /* leading zeroes would have been skipped, so first digit is non-zero */
5184 *dest
++ = '0'+digits_pos
-digits
;
5187 /* if just found zeroes for exponent, use that */
5188 if(got_digit
&& !got_nonzero
)
5196 if(sep
&& groups_no
)
5197 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5199 if(!cur_group
) /* no groups, skip loop */
5201 else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
])
5202 error
= TRUE
; /* trailing empty */
5204 for(; cur_group
>=0 && !error
; cur_group
--) {
5205 if(*grouping
== CHAR_MAX
) {
5209 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
5210 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
5213 }else if(grouping
[1]) {
5217 MSVCP_basic_string_char_dtor(&grouping_bstr
);
5219 MSVCP_basic_string_char_dtor(&groups_found
);
5229 /* ?_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 */
5230 /* ?_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 */
5231 int __cdecl
num_get_wchar__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5232 istreambuf_iterator_wchar
*last
, const locale
*loc
)
5234 return num_get__Getffld(this, dest
, first
, last
, loc
, numpunct_wchar_use_facet(loc
));
5237 /* ?_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 */
5238 /* ?_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 */
5239 int __cdecl
num_get_short__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5240 istreambuf_iterator_wchar
*last
, const locale
*loc
)
5242 return num_get__Getffld(this, dest
, first
, last
, loc
, numpunct_short_use_facet(loc
));
5245 /* ?_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 */
5246 /* ?_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 */
5247 /* ?_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 */
5248 /* ?_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 */
5249 int __cdecl
num_get_wchar__Getffldx(num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5250 istreambuf_iterator_wchar
*last
, ios_base
*ios
, int *phexexp
)
5252 FIXME("(%p %p %p %p %p) stub\n", dest
, first
, last
, ios
, phexexp
);
5256 static int num_get__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5257 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
, numpunct_wchar
*numpunct
)
5259 wchar_t digits
[23], *digits_pos
, sep
= 0;
5260 basic_string_char grouping_bstr
;
5261 basic_string_char groups_found
;
5262 int i
, basefield
, base
, groups_no
= 0, cur_group
= 0;
5263 char *dest_beg
= dest
, *dest_end
= dest
+24;
5264 const char *grouping
, *groups
;
5265 BOOL error
= TRUE
, dest_empty
= TRUE
, found_zero
= FALSE
;
5268 TRACE("(%p %p %p %04x %p)\n", dest
, first
, last
, fmtflags
, loc
);
5270 #if _MSVCP_VER <= 100
5273 cvt
= &ctype_wchar_use_facet(loc
)->cvt
;
5277 digits
[i
] = mb_to_wc('0'+i
, cvt
);
5278 for(i
=0; i
<6; i
++) {
5279 digits
[10+i
] = mb_to_wc('a'+i
, cvt
);
5280 digits
[16+i
] = mb_to_wc('A'+i
, cvt
);
5283 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
5284 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
5285 #if _MSVCP_VER >= 70
5286 if (grouping
[0]) sep
= numpunct_wchar_thousands_sep(numpunct
);
5289 basefield
= fmtflags
& FMTFLAG_basefield
;
5290 if(basefield
== FMTFLAG_oct
)
5292 else if(basefield
== FMTFLAG_hex
)
5293 base
= 22; /* equal to the size of digits buffer */
5299 istreambuf_iterator_wchar_val(first
);
5300 if(first
->strbuf
&& first
->val
==mb_to_wc('-', cvt
)) {
5302 istreambuf_iterator_wchar_inc(first
);
5303 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', cvt
)) {
5305 istreambuf_iterator_wchar_inc(first
);
5308 if(first
->strbuf
&& first
->val
==digits
[0]) {
5310 istreambuf_iterator_wchar_inc(first
);
5311 if(first
->strbuf
&& (first
->val
==mb_to_wc('x', cvt
) || first
->val
==mb_to_wc('X', cvt
))) {
5312 if(!base
|| base
== 22) {
5314 istreambuf_iterator_wchar_inc(first
);
5324 if(!base
) base
= 10;
5329 MSVCP_basic_string_char_ctor(&groups_found
);
5330 if(found_zero
) ++groups_no
;
5333 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
5334 if(!(digits_pos
= wcschr(digits
, first
->val
))) {
5335 if(sep
&& first
->val
==sep
) {
5336 if(!groups_no
) break; /* empty group - stop parsing */
5337 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5345 if(dest_empty
&& first
->val
== digits
[0]) {
5351 /* skip digits that can't be copied to dest buffer, other
5352 * functions are responsible for detecting overflows */
5354 *dest
++ = (digits_pos
-digits
<10 ? '0'+digits_pos
-digits
:
5355 (digits_pos
-digits
<16 ? 'a'+digits_pos
-digits
-10 :
5356 'A'+digits_pos
-digits
-16));
5357 if(sep
&& groups_no
<CHAR_MAX
)
5362 if(sep
&& groups_no
)
5363 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5365 if(!cur_group
) { /* no groups, skip loop */
5367 }else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
]) {
5368 error
= TRUE
; /* trailing empty */
5372 for(; cur_group
>=0 && !error
; cur_group
--) {
5373 if(*grouping
== CHAR_MAX
) {
5377 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
5378 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
5381 }else if(grouping
[1]) {
5386 MSVCP_basic_string_char_dtor(&grouping_bstr
);
5388 MSVCP_basic_string_char_dtor(&groups_found
);
5395 }else if(dest_empty
)
5399 return (base
==22 ? 16 : base
);
5402 /* ?_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 */
5403 /* ?_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 */
5404 int __cdecl
num_get_wchar__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5405 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
)
5407 return num_get__Getifld(this, dest
, first
, last
,
5408 fmtflags
, loc
, numpunct_wchar_use_facet(loc
));
5411 /* ?_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 */
5412 /* ?_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 */
5413 int __cdecl
num_get_short__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5414 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
)
5416 return num_get__Getifld(this, dest
, first
, last
,
5417 fmtflags
, loc
, numpunct_short_use_facet(loc
));
5420 /* ?_Hexdig@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABEH_W000@Z */
5421 /* ?_Hexdig@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAH_W000@Z */
5422 /* ?_Hexdig@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABEHGGGG@Z */
5423 /* ?_Hexdig@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHGGGG@Z */
5424 DEFINE_THISCALL_WRAPPER(MSVCP_num_get_wchar__Hexdig
, 20)
5425 int __thiscall
MSVCP_num_get_wchar__Hexdig(num_get
*this, wchar_t dig
, wchar_t e0
, wchar_t al
, wchar_t au
)
5427 FIXME("(%p %c %c %c %c) stub\n", this, dig
, e0
, al
, au
);
5431 static istreambuf_iterator_wchar
* num_get_do_get_void(const num_get
*this,
5432 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5433 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5434 void **pval
, numpunct_wchar
*numpunct
)
5440 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5442 v
= _Stoullx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5443 &last
, FMTFLAG_hex
, IOS_LOCALE(base
), numpunct
), &err
);
5444 if(v
!=(unsigned __int64
)((INT_PTR
)v
))
5445 *state
|= IOSTATE_failbit
;
5446 else if(end
!=tmp
&& !err
)
5447 *pval
= (void*)((INT_PTR
)v
);
5449 *state
|= IOSTATE_failbit
;
5452 *state
|= IOSTATE_eofbit
;
5458 /* ?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 */
5459 /* ?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 */
5460 #if _MSVCP_VER <= 100
5461 #define call_num_get_wchar_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 4, istreambuf_iterator_wchar*, \
5462 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, void**), \
5463 (this, ret, first, last, base, state, pval))
5465 #define call_num_get_wchar_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_wchar*, \
5466 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, void**), \
5467 (this, ret, first, last, base, state, pval))
5469 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_void
,36)
5470 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5471 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
5473 return num_get_do_get_void(this, ret
, first
, last
, base
,
5474 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5477 /* ?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 */
5478 /* ?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 */
5479 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_void
,36)
5480 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5481 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
5483 return num_get_do_get_void(this, ret
, first
, last
, base
,
5484 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5487 /* ?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 */
5488 /* ?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 */
5489 /* ?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 */
5490 /* ?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 */
5491 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_void
,36)
5492 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5493 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
5495 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5496 return call_num_get_wchar_do_get_void(this, ret
, first
, last
, base
, state
, pval
);
5499 static istreambuf_iterator_wchar
* num_get_do_get_double(const num_get
*this,
5500 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5501 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5502 double *pval
, numpunct_wchar
*numpunct
)
5508 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5510 v
= _Stodx(tmp
, &end
, num_get__Getffld(this, tmp
, &first
, &last
, IOS_LOCALE(base
), numpunct
), &err
);
5511 if(end
!=tmp
&& !err
)
5514 *state
|= IOSTATE_failbit
;
5517 *state
|= IOSTATE_eofbit
;
5523 /* ?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 */
5524 /* ?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 */
5525 /* ?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 */
5526 /* ?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 */
5527 #if _MSVCP_VER <= 100
5528 #define call_num_get_wchar_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_wchar*, \
5529 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
5530 (this, ret, first, last, base, state, pval))
5531 #define call_num_get_wchar_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_wchar*, \
5532 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
5533 (this, ret, first, last, base, state, pval))
5535 #define call_num_get_wchar_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_wchar*, \
5536 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
5537 (this, ret, first, last, base, state, pval))
5538 #define call_num_get_wchar_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_wchar*, \
5539 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
5540 (this, ret, first, last, base, state, pval))
5542 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_double
,36)
5543 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5544 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
5546 return num_get_do_get_double(this, ret
, first
, last
, base
,
5547 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5550 /* ?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 */
5551 /* ?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 */
5552 /* ?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 */
5553 /* ?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 */
5554 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_double
,36)
5555 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5556 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
5558 return num_get_do_get_double(this, ret
, first
, last
, base
,
5559 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5562 /* ?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 */
5563 /* ?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 */
5564 /* ?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 */
5565 /* ?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 */
5566 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ldouble
,36)
5567 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ldouble(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5568 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
5570 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5571 return call_num_get_wchar_do_get_ldouble(this, ret
, first
, last
, base
, state
, pval
);
5574 /* ?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 */
5575 /* ?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 */
5576 /* ?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 */
5577 /* ?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 */
5578 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_double
,36)
5579 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5580 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
5582 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5583 return call_num_get_wchar_do_get_double(this, ret
, first
, last
, base
, state
, pval
);
5586 static istreambuf_iterator_wchar
* num_get_do_get_float(const num_get
*this,
5587 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5588 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5589 float *pval
, numpunct_wchar
*numpunct
)
5595 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5597 v
= _Stofx(tmp
, &end
, num_get__Getffld(this, tmp
, &first
,
5598 &last
, IOS_LOCALE(base
), numpunct
), &err
);
5599 if(end
!=tmp
&& !err
)
5602 *state
|= IOSTATE_failbit
;
5605 *state
|= IOSTATE_eofbit
;
5611 /* ?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 */
5612 /* ?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 */
5613 #if _MSVCP_VER <= 100
5614 #define call_num_get_wchar_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_wchar*, \
5615 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, float*), \
5616 (this, ret, first, last, base, state, pval))
5618 #define call_num_get_wchar_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_wchar*, \
5619 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, float*), \
5620 (this, ret, first, last, base, state, pval))
5622 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_float
,36)
5623 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5624 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
5626 return num_get_do_get_float(this, ret
, first
, last
, base
,
5627 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5630 /* ?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 */
5631 /* ?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 */
5632 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_float
,36)
5633 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5634 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
5636 return num_get_do_get_float(this, ret
, first
, last
, base
,
5637 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5640 /* ?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 */
5641 /* ?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 */
5642 /* ?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 */
5643 /* ?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 */
5644 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_float
,36)
5645 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5646 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
5648 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5649 return call_num_get_wchar_do_get_float(this, ret
, first
, last
, base
, state
, pval
);
5652 static istreambuf_iterator_wchar
* num_get_do_get_uint64(const num_get
*this,
5653 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5654 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5655 ULONGLONG
*pval
, numpunct_wchar
*numpunct
)
5661 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5663 v
= _Stoullx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5664 &last
, base
->fmtfl
, IOS_LOCALE(base
), numpunct
), &err
);
5665 if(end
!=tmp
&& !err
)
5668 *state
|= IOSTATE_failbit
;
5671 *state
|= IOSTATE_eofbit
;
5677 /* ?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 */
5678 /* ?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 */
5679 #if _MSVCP_VER <= 100
5680 #define call_num_get_wchar_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_wchar*, \
5681 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONGLONG*), \
5682 (this, ret, first, last, base, state, pval))
5684 #define call_num_get_wchar_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_wchar*, \
5685 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONGLONG*), \
5686 (this, ret, first, last, base, state, pval))
5688 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_uint64
,36)
5689 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5690 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
5692 return num_get_do_get_uint64(this, ret
, first
, last
, base
,
5693 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5696 /* ?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 */
5697 /* ?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 */
5698 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_uint64
,36)
5699 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5700 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
5702 return num_get_do_get_uint64(this, ret
, first
, last
, base
,
5703 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5706 /* ?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 */
5707 /* ?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 */
5708 /* ?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 */
5709 /* ?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 */
5710 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_uint64
,36)
5711 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5712 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
5714 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5715 return call_num_get_wchar_do_get_uint64(this, ret
, first
, last
, base
, state
, pval
);
5718 static istreambuf_iterator_wchar
* num_get_do_get_int64(const num_get
*this,
5719 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5720 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5721 LONGLONG
*pval
, numpunct_wchar
*numpunct
)
5727 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5729 v
= _Stollx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5730 &last
, base
->fmtfl
, IOS_LOCALE(base
), numpunct
), &err
);
5731 if(end
!=tmp
&& !err
)
5734 *state
|= IOSTATE_failbit
;
5737 *state
|= IOSTATE_eofbit
;
5743 /* ?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 */
5744 /* ?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 */
5745 #if _MSVCP_VER <= 100
5746 #define call_num_get_wchar_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_wchar*, \
5747 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONGLONG*), \
5748 (this, ret, first, last, base, state, pval))
5750 #define call_num_get_wchar_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_wchar*, \
5751 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONGLONG*), \
5752 (this, ret, first, last, base, state, pval))
5754 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_int64
,36)
5755 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5756 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
5758 return num_get_do_get_int64(this, ret
, first
, last
, base
,
5759 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5762 /* ?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 */
5763 /* ?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 */
5764 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_int64
,36)
5765 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5766 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
5768 return num_get_do_get_int64(this, ret
, first
, last
, base
,
5769 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5772 /* ?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 */
5773 /* ?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 */
5774 /* ?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 */
5775 /* ?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 */
5776 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_int64
,36)
5777 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5778 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
5780 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5781 return call_num_get_wchar_do_get_int64(this, ret
, first
, last
, base
, state
, pval
);
5784 static istreambuf_iterator_wchar
* num_get_do_get_ulong(const num_get
*this,
5785 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5786 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5787 ULONG
*pval
, numpunct_wchar
*numpunct
)
5793 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5795 v
= _Stoulx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5796 &last
, base
->fmtfl
, IOS_LOCALE(base
), numpunct
), &err
);
5797 if(end
!=tmp
&& !err
)
5800 *state
|= IOSTATE_failbit
;
5803 *state
|= IOSTATE_eofbit
;
5809 /* ?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 */
5810 /* ?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 */
5811 #if _MSVCP_VER <= 100
5812 #define call_num_get_wchar_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_wchar*, \
5813 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONG*), \
5814 (this, ret, first, last, base, state, pval))
5816 #define call_num_get_wchar_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_wchar*, \
5817 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONG*), \
5818 (this, ret, first, last, base, state, pval))
5820 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_ulong
,36)
5821 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5822 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
5824 return num_get_do_get_ulong(this, ret
, first
, last
, base
,
5825 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5828 /* ?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 */
5829 /* ?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 */
5830 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_ulong
,36)
5831 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5832 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
5834 return num_get_do_get_ulong(this, ret
, first
, last
, base
,
5835 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5838 /* ?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 */
5839 /* ?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 */
5840 /* ?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 */
5841 /* ?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 */
5842 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ulong
,36)
5843 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5844 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
5846 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5847 return call_num_get_wchar_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
5850 static istreambuf_iterator_wchar
* num_get_do_get_long(const num_get
*this,
5851 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5852 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5853 LONG
*pval
, numpunct_wchar
*numpunct
)
5859 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5861 v
= _Stolx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5862 &last
, base
->fmtfl
, IOS_LOCALE(base
), numpunct
), &err
);
5863 if(end
!=tmp
&& !err
)
5866 *state
|= IOSTATE_failbit
;
5869 *state
|= IOSTATE_eofbit
;
5875 /* ?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 */
5876 /* ?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 */
5877 #if _MSVCP_VER <= 100
5878 #define call_num_get_wchar_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_wchar*, \
5879 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONG*), \
5880 (this, ret, first, last, base, state, pval))
5882 #define call_num_get_wchar_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_wchar*, \
5883 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONG*), \
5884 (this, ret, first, last, base, state, pval))
5886 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_long
,36)
5887 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5888 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
5890 return num_get_do_get_long(this, ret
, first
, last
, base
,
5891 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5894 /* ?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 */
5895 /* ?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 */
5896 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_long
,36)
5897 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5898 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
5900 return num_get_do_get_long(this, ret
, first
, last
, base
,
5901 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5904 /* ?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 */
5905 /* ?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 */
5906 /* ?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 */
5907 /* ?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 */
5908 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_long
,36)
5909 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5910 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
5912 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5913 return call_num_get_wchar_do_get_long(this, ret
, first
, last
, base
, state
, pval
);
5916 /* ?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 */
5917 /* ?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 */
5918 #if _MSVCP_VER <= 100
5919 #define call_num_get_wchar_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_wchar*, \
5920 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned int*), \
5921 (this, ret, first, last, base, state, pval))
5923 #define call_num_get_wchar_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_wchar*, \
5924 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned int*), \
5925 (this, ret, first, last, base, state, pval))
5927 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_uint
,36)
5928 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5929 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
5931 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5932 return num_get_wchar_do_get_ulong(this, ret
, first
, last
, base
, state
, (ULONG
*)pval
);
5935 /* ?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 */
5936 /* ?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 */
5937 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_uint
,36)
5938 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5939 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
5941 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5942 return num_get_short_do_get_ulong(this, ret
, first
, last
, base
, state
, (ULONG
*)pval
);
5945 /* ?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 */
5946 /* ?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 */
5947 /* ?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 */
5948 /* ?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 */
5949 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_uint
,36)
5950 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5951 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
5953 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5954 return call_num_get_wchar_do_get_uint(this, ret
, first
, last
, base
, state
, pval
);
5957 /* ?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 */
5958 /* ?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 */
5959 #if _MSVCP_VER <= 100
5960 #define call_num_get_wchar_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_wchar*, \
5961 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned short*), \
5962 (this, ret, first, last, base, state, pval))
5964 #define call_num_get_wchar_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 48, istreambuf_iterator_wchar*, \
5965 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned short*), \
5966 (this, ret, first, last, base, state, pval))
5968 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_ushort
,36)
5969 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5970 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
5973 char tmp
[25], *beg
, *end
;
5976 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5978 b
= num_get_wchar__Getifld(this, tmp
,
5979 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
));
5980 beg
= tmp
+ (tmp
[0]=='-' ? 1 : 0);
5981 v
= _Stoulx(beg
, &end
, b
, &err
);
5983 if(v
!= (ULONG
)((unsigned short)v
))
5984 *state
|= IOSTATE_failbit
;
5985 else if(end
!=beg
&& !err
)
5986 *pval
= (tmp
[0]=='-' ? -((unsigned short)v
) : v
);
5988 *state
|= IOSTATE_failbit
;
5991 *state
|= IOSTATE_eofbit
;
5997 /* ?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 */
5998 /* ?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 */
5999 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_ushort
,36)
6000 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6001 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
6003 FIXME("(%p %p %p %p %p) stub\n", this, ret
, base
, state
, pval
);
6007 /* ?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 */
6008 /* ?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 */
6009 /* ?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@ */
6010 /* ?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 */
6011 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ushort
,36)
6012 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6013 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
6015 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6016 return call_num_get_wchar_do_get_ushort(this, ret
, first
, last
, base
, state
, pval
);
6019 static istreambuf_iterator_wchar
* num_get_do_get_bool(const num_get
*this,
6020 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
6021 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
6022 bool *pval
, numpunct_wchar
*numpunct
)
6024 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6026 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
6027 basic_string_wchar false_bstr
, true_bstr
;
6028 const wchar_t *pfalse
, *ptrue
;
6030 numpunct_wchar_falsename(numpunct
, &false_bstr
);
6031 numpunct_wchar_truename(numpunct
, &true_bstr
);
6032 pfalse
= MSVCP_basic_string_wchar_c_str(&false_bstr
);
6033 ptrue
= MSVCP_basic_string_wchar_c_str(&true_bstr
);
6035 for(istreambuf_iterator_wchar_val(&first
); first
.strbuf
;) {
6036 if(pfalse
&& *pfalse
&& first
.val
!=*pfalse
)
6038 if(ptrue
&& *ptrue
&& first
.val
!=*ptrue
)
6041 if(pfalse
&& *pfalse
&& ptrue
&& !*ptrue
)
6043 if(ptrue
&& *ptrue
&& pfalse
&& !*pfalse
)
6052 istreambuf_iterator_wchar_inc(&first
);
6054 if((!pfalse
|| !*pfalse
) && (!ptrue
|| !*ptrue
))
6063 *state
|= IOSTATE_failbit
;
6065 MSVCP_basic_string_wchar_dtor(&false_bstr
);
6066 MSVCP_basic_string_wchar_dtor(&true_bstr
);
6070 LONG v
= _Stolx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
6071 &last
, base
->fmtfl
, IOS_LOCALE(base
), numpunct
), &err
);
6073 if(end
!=tmp
&& err
==0 && (v
==0 || v
==1))
6076 *state
|= IOSTATE_failbit
;
6080 *state
|= IOSTATE_eofbit
;
6081 memcpy(ret
, &first
, sizeof(first
));
6085 /* ?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 */
6086 /* ?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 */
6087 #if _MSVCP_VER <= 100
6088 #define call_num_get_wchar_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_wchar*, \
6089 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, bool*), \
6090 (this, ret, first, last, base, state, pval))
6092 #define call_num_get_wchar_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 52, istreambuf_iterator_wchar*, \
6093 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, bool*), \
6094 (this, ret, first, last, base, state, pval))
6096 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_bool
,36)
6097 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6098 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, bool *pval
)
6100 return num_get_do_get_bool(this, ret
, first
, last
, base
,
6101 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
6104 /* ?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 */
6105 /* ?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 */
6106 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_bool
,36)
6107 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6108 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, bool *pval
)
6110 return num_get_do_get_bool(this, ret
, first
, last
, base
,
6111 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
6114 /* ?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 */
6115 /* ?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 */
6116 /* ?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 */
6117 /* ?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 */
6118 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_bool
,36)
6119 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6120 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, bool *pval
)
6122 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6123 return call_num_get_wchar_do_get_bool(this, ret
, first
, last
, base
, state
, pval
);
6126 /* ?id@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
6127 locale_id num_get_char_id
= {0};
6129 /* ??_7?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
6130 extern const vtable_ptr num_get_char_vtable
;
6132 /* ?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
6133 /* ?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
6134 DEFINE_THISCALL_WRAPPER(num_get_char__Init
, 8)
6135 void __thiscall
num_get_char__Init(num_get
*this, const _Locinfo
*locinfo
)
6137 TRACE("(%p %p)\n", this, locinfo
);
6138 #if _MSVCP_VER <= 100
6139 _Locinfo__Getcvt(locinfo
, &this->cvt
);
6143 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
6144 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
6145 DEFINE_THISCALL_WRAPPER(num_get_char_ctor_locinfo
, 12)
6146 num_get
* __thiscall
num_get_char_ctor_locinfo(num_get
*this,
6147 const _Locinfo
*locinfo
, size_t refs
)
6149 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
6151 locale_facet_ctor_refs(&this->facet
, refs
);
6152 this->facet
.vtable
= &num_get_char_vtable
;
6154 num_get_char__Init(this, locinfo
);
6158 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
6159 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
6160 DEFINE_THISCALL_WRAPPER(num_get_char_ctor_refs
, 8)
6161 num_get
* __thiscall
num_get_char_ctor_refs(num_get
*this, size_t refs
)
6165 TRACE("(%p %Iu)\n", this, refs
);
6167 _Locinfo_ctor(&locinfo
);
6168 num_get_char_ctor_locinfo(this, &locinfo
, refs
);
6169 _Locinfo_dtor(&locinfo
);
6173 /* ??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
6174 /* ??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
6175 DEFINE_THISCALL_WRAPPER(num_get_char_ctor
, 4)
6176 num_get
* __thiscall
num_get_char_ctor(num_get
*this)
6178 return num_get_char_ctor_refs(this, 0);
6181 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@UAE@XZ */
6182 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@UEAA@XZ */
6183 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
6184 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
6185 DEFINE_THISCALL_WRAPPER(num_get_char_dtor
, 4)
6186 void __thiscall
num_get_char_dtor(num_get
*this)
6188 TRACE("(%p)\n", this);
6189 locale_facet_dtor(&this->facet
);
6192 DEFINE_THISCALL_WRAPPER(num_get_char_vector_dtor
, 8)
6193 num_get
* __thiscall
num_get_char_vector_dtor(num_get
*this, unsigned int flags
)
6195 TRACE("(%p %x)\n", this, flags
);
6197 /* we have an array, with the number of elements stored before the first object */
6198 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
6200 for(i
=*ptr
-1; i
>=0; i
--)
6201 num_get_char_dtor(this+i
);
6202 operator_delete(ptr
);
6204 num_get_char_dtor(this);
6206 operator_delete(this);
6212 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
6213 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
6214 size_t __cdecl
num_get_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
6216 TRACE("(%p %p)\n", facet
, loc
);
6218 if(facet
&& !*facet
) {
6221 *facet
= operator_new(sizeof(num_get
));
6222 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
6223 num_get_char_ctor_locinfo((num_get
*)*facet
, &locinfo
, 0);
6224 _Locinfo_dtor(&locinfo
);
6230 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
6231 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
6232 size_t __cdecl
num_get_char__Getcat_old(const locale_facet
**facet
)
6234 return num_get_char__Getcat(facet
, locale_classic());
6237 num_get
* num_get_char_use_facet(const locale
*loc
)
6239 static num_get
*obj
= NULL
;
6242 const locale_facet
*fac
;
6244 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
6245 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_char_id
));
6247 _Lockit_dtor(&lock
);
6248 return (num_get
*)fac
;
6252 _Lockit_dtor(&lock
);
6256 num_get_char__Getcat(&fac
, loc
);
6257 obj
= (num_get
*)fac
;
6258 call_locale_facet__Incref(&obj
->facet
);
6259 locale_facet_register(&obj
->facet
);
6260 _Lockit_dtor(&lock
);
6265 /* ?_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 */
6266 /* ?_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 */
6267 /* Copies number to dest buffer, validates grouping and skips separators.
6268 * Updates first so it points past the number, all digits are skipped.
6269 * Returns how exponent needs to changed.
6270 * Size of dest buffer is not specified, assuming it's not smaller than 32:
6271 * strlen(+0.e+) + 22(digits) + 4(exponent) + 1(nullbyte)
6273 int __cdecl
num_get_char__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_char
*first
,
6274 istreambuf_iterator_char
*last
, const locale
*loc
)
6276 numpunct_char
*numpunct
= numpunct_char_use_facet(loc
);
6277 basic_string_char grouping_bstr
;
6278 basic_string_char groups_found
;
6279 int groups_no
= 0, cur_group
= 0, exp
= 0;
6280 char *dest_beg
= dest
, *num_end
= dest
+25, *exp_end
= dest
+31, sep
= 0;
6281 const char *grouping
, *groups
;
6282 BOOL error
= FALSE
, got_digit
= FALSE
, got_nonzero
= FALSE
;
6284 TRACE("(%p %p %p %p)\n", dest
, first
, last
, loc
);
6286 numpunct_char_grouping(numpunct
, &grouping_bstr
);
6287 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
6288 #if _MSVCP_VER >= 70
6289 if (grouping
[0]) sep
= numpunct_char_thousands_sep(numpunct
);
6293 MSVCP_basic_string_char_ctor(&groups_found
);
6295 istreambuf_iterator_char_val(first
);
6297 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
6298 *dest
++ = first
->val
;
6299 istreambuf_iterator_char_inc(first
);
6302 /* read possibly grouped numbers before decimal */
6303 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
6304 if(first
->val
<'0' || first
->val
>'9') {
6305 if(sep
&& first
->val
==sep
) {
6306 if(!groups_no
) break; /* empty group - stop parsing */
6307 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
6314 got_digit
= TRUE
; /* found a digit, zero or non-zero */
6315 /* write digit to dest if not a leading zero (to not waste dest buffer) */
6316 if(!got_nonzero
&& first
->val
== '0')
6323 *dest
++ = first
->val
;
6325 exp
++; /* too many digits, just multiply by 10 */
6326 if(sep
&& groups_no
<CHAR_MAX
)
6331 /* if all leading zeroes, we didn't write anything so put a zero we check for a decimal */
6332 if(got_digit
&& !got_nonzero
)
6335 /* get decimal, if any */
6336 if(first
->strbuf
&& first
->val
==numpunct_char_decimal_point(numpunct
)) {
6338 *dest
++ = *localeconv()->decimal_point
;
6339 istreambuf_iterator_char_inc(first
);
6342 /* read non-grouped after decimal */
6343 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
6344 if(first
->val
<'0' || first
->val
>'9')
6346 else if(dest
<num_end
) {
6348 *dest
++ = first
->val
;
6352 /* read exponent, if any */
6353 if(first
->strbuf
&& (first
->val
=='e' || first
->val
=='E')) {
6354 *dest
++ = first
->val
;
6355 istreambuf_iterator_char_inc(first
);
6357 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
6358 *dest
++ = first
->val
;
6359 istreambuf_iterator_char_inc(first
);
6362 got_digit
= got_nonzero
= FALSE
;
6364 /* skip any leading zeroes */
6365 for(; first
->strbuf
&& first
->val
=='0'; istreambuf_iterator_char_inc(first
))
6368 for(; first
->strbuf
&& first
->val
>='0' && first
->val
<='9'; istreambuf_iterator_char_inc(first
)) {
6369 got_digit
= got_nonzero
= TRUE
; /* leading zeroes would have been skipped, so first digit is non-zero */
6372 *dest
++ = first
->val
;
6375 /* if just found zeroes for exponent, use that */
6376 if(got_digit
&& !got_nonzero
)
6384 if(sep
&& groups_no
)
6385 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
6387 if(!cur_group
) /* no groups, skip loop */
6389 else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
])
6390 error
= TRUE
; /* trailing empty */
6392 for(; cur_group
>=0 && !error
; cur_group
--) {
6393 if(*grouping
== CHAR_MAX
) {
6397 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
6398 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
6401 }else if(grouping
[1]) {
6405 MSVCP_basic_string_char_dtor(&grouping_bstr
);
6407 MSVCP_basic_string_char_dtor(&groups_found
);
6417 /* ?_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 */
6418 /* ?_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 */
6419 int __cdecl
num_get_char__Getffldx(const num_get
*this, char *dest
, istreambuf_iterator_char
*first
,
6420 istreambuf_iterator_char
*last
, ios_base
*ios
, int *phexexp
)
6422 FIXME("(%p %p %p %p %p) stub\n", dest
, first
, last
, ios
, phexexp
);
6426 /* ?_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 */
6427 /* ?_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 */
6428 /* Copies number to dest buffer, validates grouping and skips separators.
6429 * Updates first so it points past the number, all digits are skipped.
6430 * Returns number base (8, 10 or 16).
6431 * Size of dest buffer is not specified, assuming it's not smaller than 25:
6432 * 22(8^22>2^64)+1(detect overflows)+1(sign)+1(nullbyte) = 25
6434 int __cdecl
num_get_char__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_char
*first
,
6435 istreambuf_iterator_char
*last
, int fmtflags
, const locale
*loc
)
6437 static const char digits
[] = "0123456789abcdefABCDEF";
6439 numpunct_char
*numpunct
= numpunct_char_use_facet(loc
);
6440 basic_string_char grouping_bstr
;
6441 basic_string_char groups_found
;
6442 int basefield
, base
, groups_no
= 0, cur_group
= 0;
6443 char *dest_beg
= dest
, *dest_end
= dest
+24, sep
= 0;
6444 const char *grouping
, *groups
;
6445 BOOL error
= TRUE
, dest_empty
= TRUE
, found_zero
= FALSE
;
6447 TRACE("(%p %p %p %04x %p)\n", dest
, first
, last
, fmtflags
, loc
);
6449 numpunct_char_grouping(numpunct
, &grouping_bstr
);
6450 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
6451 #if _MSVCP_VER >= 70
6452 if (grouping
[0]) sep
= numpunct_char_thousands_sep(numpunct
);
6455 basefield
= fmtflags
& FMTFLAG_basefield
;
6456 if(basefield
== FMTFLAG_oct
)
6458 else if(basefield
== FMTFLAG_hex
)
6459 base
= 22; /* equal to the size of digits buffer */
6465 istreambuf_iterator_char_val(first
);
6466 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
6467 *dest
++ = first
->val
;
6468 istreambuf_iterator_char_inc(first
);
6471 if(first
->strbuf
&& first
->val
=='0') {
6473 istreambuf_iterator_char_inc(first
);
6474 if(first
->strbuf
&& (first
->val
=='x' || first
->val
=='X')) {
6475 if(!base
|| base
== 22) {
6477 istreambuf_iterator_char_inc(first
);
6487 if (!base
) base
= 10;
6492 MSVCP_basic_string_char_ctor(&groups_found
);
6493 if(found_zero
) ++groups_no
;
6496 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
6497 if(!memchr(digits
, first
->val
, base
)) {
6498 if(sep
&& first
->val
==sep
) {
6499 if(!groups_no
) break; /* empty group - stop parsing */
6500 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
6508 if(dest_empty
&& first
->val
== '0')
6515 /* skip digits that can't be copied to dest buffer, other
6516 * functions are responsible for detecting overflows */
6518 *dest
++ = first
->val
;
6519 if(sep
&& groups_no
<CHAR_MAX
)
6524 if(sep
&& groups_no
)
6525 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
6527 if(!cur_group
) { /* no groups, skip loop */
6529 }else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
]) {
6530 error
= TRUE
; /* trailing empty */
6534 for(; cur_group
>=0 && !error
; cur_group
--) {
6535 if(*grouping
== CHAR_MAX
) {
6539 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
6540 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
6543 }else if(grouping
[1]) {
6548 MSVCP_basic_string_char_dtor(&grouping_bstr
);
6550 MSVCP_basic_string_char_dtor(&groups_found
);
6557 }else if(dest_empty
)
6561 return (base
==22 ? 16 : base
);
6564 /* ?_Hexdig@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABEHD000@Z */
6565 /* ?_Hexdig@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHD000@Z */
6566 DEFINE_THISCALL_WRAPPER(MSVCP_num_get_char__Hexdig
, 20)
6567 int __thiscall
MSVCP_num_get_char__Hexdig(num_get
*this, char dig
, char e0
, char al
, char au
)
6569 FIXME("(%p %c %c %c %c) stub\n", this, dig
, e0
, al
, au
);
6573 /* ?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 */
6574 /* ?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 */
6575 #if _MSVCP_VER <= 100
6576 #define call_num_get_char_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 4, istreambuf_iterator_char*, \
6577 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, void**), \
6578 (this, ret, first, last, base, state, pval))
6580 #define call_num_get_char_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_char*, \
6581 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, void**), \
6582 (this, ret, first, last, base, state, pval))
6584 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_void
,36)
6585 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_void(const num_get
*this, istreambuf_iterator_char
*ret
,
6586 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, void **pval
)
6592 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6594 v
= _Stoullx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6595 &first
, &last
, FMTFLAG_hex
, IOS_LOCALE(base
)), &err
);
6596 if(v
!=(unsigned __int64
)((INT_PTR
)v
))
6597 *state
|= IOSTATE_failbit
;
6598 else if(end
!=tmp
&& !err
)
6599 *pval
= (void*)((INT_PTR
)v
);
6601 *state
|= IOSTATE_failbit
;
6604 *state
|= IOSTATE_eofbit
;
6610 /* ?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 */
6611 /* ?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 */
6612 DEFINE_THISCALL_WRAPPER(num_get_char_get_void
,36)
6613 istreambuf_iterator_char
*__thiscall
num_get_char_get_void(const num_get
*this, istreambuf_iterator_char
*ret
,
6614 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, void **pval
)
6616 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6617 return call_num_get_char_do_get_void(this, ret
, first
, last
, base
, state
, pval
);
6620 /* ?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 */
6621 /* ?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 */
6622 /* ?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 */
6623 /* ?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 */
6624 #if _MSVCP_VER <= 100
6625 #define call_num_get_char_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_char*, \
6626 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
6627 (this, ret, first, last, base, state, pval))
6628 #define call_num_get_char_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_char*, \
6629 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
6630 (this, ret, first, last, base, state, pval))
6632 #define call_num_get_char_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_char*, \
6633 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
6634 (this, ret, first, last, base, state, pval))
6635 #define call_num_get_char_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_char*, \
6636 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
6637 (this, ret, first, last, base, state, pval))
6639 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_double
,36)
6640 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_double(const num_get
*this, istreambuf_iterator_char
*ret
,
6641 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
6647 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6649 v
= _Stodx(tmp
, &end
, num_get_char__Getffld(this, tmp
, &first
, &last
, IOS_LOCALE(base
)), &err
);
6650 if(end
!=tmp
&& !err
)
6653 *state
|= IOSTATE_failbit
;
6656 *state
|= IOSTATE_eofbit
;
6662 /* ?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 */
6663 /* ?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 */
6664 DEFINE_THISCALL_WRAPPER(num_get_char_get_ldouble
,36)
6665 istreambuf_iterator_char
*__thiscall
num_get_char_get_ldouble(const num_get
*this, istreambuf_iterator_char
*ret
,
6666 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
6668 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6669 return call_num_get_char_do_get_ldouble(this, ret
, first
, last
, base
, state
, pval
);
6672 /* ?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 */
6673 /* ?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 */
6674 DEFINE_THISCALL_WRAPPER(num_get_char_get_double
,36)
6675 istreambuf_iterator_char
*__thiscall
num_get_char_get_double(const num_get
*this, istreambuf_iterator_char
*ret
,
6676 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
6678 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6679 return call_num_get_char_do_get_double(this, ret
, first
, last
, base
, state
, pval
);
6682 /* ?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 */
6683 /* ?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 */
6684 #if _MSVCP_VER <= 100
6685 #define call_num_get_char_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_char*, \
6686 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, float*), \
6687 (this, ret, first, last, base, state, pval))
6689 #define call_num_get_char_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_char*, \
6690 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, float*), \
6691 (this, ret, first, last, base, state, pval))
6693 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_float
,36)
6694 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_float(const num_get
*this, istreambuf_iterator_char
*ret
,
6695 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, float *pval
)
6701 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6703 v
= _Stofx(tmp
, &end
, num_get_char__Getffld(this, tmp
, &first
, &last
, IOS_LOCALE(base
)), &err
);
6704 if(end
!=tmp
&& !err
)
6707 *state
|= IOSTATE_failbit
;
6710 *state
|= IOSTATE_eofbit
;
6716 /* ?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 */
6717 /* ?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 */
6718 DEFINE_THISCALL_WRAPPER(num_get_char_get_float
,36)
6719 istreambuf_iterator_char
*__thiscall
num_get_char_get_float(const num_get
*this, istreambuf_iterator_char
*ret
,
6720 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, float *pval
)
6722 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6723 return call_num_get_char_do_get_float(this, ret
, first
, last
, base
, state
, pval
);
6726 /* ?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 */
6727 /* ?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 */
6728 #if _MSVCP_VER <= 100
6729 #define call_num_get_char_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_char*, \
6730 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONGLONG*), \
6731 (this, ret, first, last, base, state, pval))
6733 #define call_num_get_char_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_char*, \
6734 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONGLONG*), \
6735 (this, ret, first, last, base, state, pval))
6737 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_uint64
,36)
6738 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_uint64(const num_get
*this, istreambuf_iterator_char
*ret
,
6739 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
6745 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6747 v
= _Stoullx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6748 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
)), &err
);
6749 if(end
!=tmp
&& !err
)
6752 *state
|= IOSTATE_failbit
;
6755 *state
|= IOSTATE_eofbit
;
6761 /* ?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 */
6762 /* ?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 */
6763 DEFINE_THISCALL_WRAPPER(num_get_char_get_uint64
,36)
6764 istreambuf_iterator_char
*__thiscall
num_get_char_get_uint64(const num_get
*this, istreambuf_iterator_char
*ret
,
6765 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
6767 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6768 return call_num_get_char_do_get_uint64(this, ret
, first
, last
, base
, state
, pval
);
6771 /* ?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 */
6772 /* ?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 */
6773 #if _MSVCP_VER <= 100
6774 #define call_num_get_char_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_char*, \
6775 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONGLONG*), \
6776 (this, ret, first, last, base, state, pval))
6778 #define call_num_get_char_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_char*, \
6779 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONGLONG*), \
6780 (this, ret, first, last, base, state, pval))
6782 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_int64
,36)
6783 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_int64(const num_get
*this, istreambuf_iterator_char
*ret
,
6784 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
6790 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6792 v
= _Stollx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6793 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
)), &err
);
6794 if(end
!=tmp
&& !err
)
6797 *state
|= IOSTATE_failbit
;
6800 *state
|= IOSTATE_eofbit
;
6806 /* ?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 */
6807 /* ?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 */
6808 DEFINE_THISCALL_WRAPPER(num_get_char_get_int64
,36)
6809 istreambuf_iterator_char
*__thiscall
num_get_char_get_int64(const num_get
*this, istreambuf_iterator_char
*ret
,
6810 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
6812 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6813 return call_num_get_char_do_get_int64(this, ret
, first
, last
, base
, state
, pval
);
6816 /* ?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 */
6817 /* ?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 */
6818 #if _MSVCP_VER <= 100
6819 #define call_num_get_char_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_char*, \
6820 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONG*), \
6821 (this, ret, first, last, base, state, pval))
6823 #define call_num_get_char_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_char*, \
6824 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONG*), \
6825 (this, ret, first, last, base, state, pval))
6827 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_ulong
,36)
6828 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_ulong(const num_get
*this, istreambuf_iterator_char
*ret
,
6829 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONG
*pval
)
6835 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6837 v
= _Stoulx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6838 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
)), &err
);
6839 if(end
!=tmp
&& !err
)
6842 *state
|= IOSTATE_failbit
;
6845 *state
|= IOSTATE_eofbit
;
6851 /* ?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 */
6852 /* ?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 */
6853 DEFINE_THISCALL_WRAPPER(num_get_char_get_ulong
,36)
6854 istreambuf_iterator_char
*__thiscall
num_get_char_get_ulong(const num_get
*this, istreambuf_iterator_char
*ret
,
6855 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONG
*pval
)
6857 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6858 return call_num_get_char_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
6861 /* ?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 */
6862 /* ?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 */
6863 #if _MSVCP_VER <= 100
6864 #define call_num_get_char_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_char*, \
6865 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONG*), \
6866 (this, ret, first, last, base, state, pval))
6868 #define call_num_get_char_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_char*, \
6869 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONG*), \
6870 (this, ret, first, last, base, state, pval))
6872 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_long
,36)
6873 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_long(const num_get
*this, istreambuf_iterator_char
*ret
,
6874 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONG
*pval
)
6880 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6882 v
= _Stolx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6883 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
)), &err
);
6884 if(end
!=tmp
&& !err
)
6887 *state
|= IOSTATE_failbit
;
6890 *state
|= IOSTATE_eofbit
;
6896 /* ?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 */
6897 /* ?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 */
6898 DEFINE_THISCALL_WRAPPER(num_get_char_get_long
,36)
6899 istreambuf_iterator_char
*__thiscall
num_get_char_get_long(const num_get
*this, istreambuf_iterator_char
*ret
,
6900 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONG
*pval
)
6902 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6903 return call_num_get_char_do_get_long(this, ret
, first
, last
, base
, state
, pval
);
6906 /* ?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 */
6907 /* ?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 */
6908 #if _MSVCP_VER <= 100
6909 #define call_num_get_char_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_char*, \
6910 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned int*), \
6911 (this, ret, first, last, base, state, pval))
6913 #define call_num_get_char_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_char*, \
6914 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned int*), \
6915 (this, ret, first, last, base, state, pval))
6917 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_uint
,36)
6918 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_uint(const num_get
*this, istreambuf_iterator_char
*ret
,
6919 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned int *pval
)
6921 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6922 return num_get_char_do_get_ulong(this, ret
, first
, last
, base
, state
, (ULONG
*)pval
);
6925 /* ?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 */
6926 /* ?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 */
6927 DEFINE_THISCALL_WRAPPER(num_get_char_get_uint
,36)
6928 istreambuf_iterator_char
*__thiscall
num_get_char_get_uint(const num_get
*this, istreambuf_iterator_char
*ret
,
6929 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned int *pval
)
6931 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6932 return call_num_get_char_do_get_uint(this, ret
, first
, last
, base
, state
, pval
);
6935 /* ?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 */
6936 /* ?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 */
6937 #if _MSVCP_VER <= 100
6938 #define call_num_get_char_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_char*, \
6939 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned short*), \
6940 (this, ret, first, last, base, state, pval))
6942 #define call_num_get_char_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 48, istreambuf_iterator_char*, \
6943 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned short*), \
6944 (this, ret, first, last, base, state, pval))
6946 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_ushort
,36)
6947 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_ushort(const num_get
*this, istreambuf_iterator_char
*ret
,
6948 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned short *pval
)
6951 char tmp
[25], *beg
, *end
;
6954 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6956 b
= num_get_char__Getifld(this, tmp
,
6957 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
));
6958 beg
= tmp
+ (tmp
[0]=='-' ? 1 : 0);
6959 v
= _Stoulx(beg
, &end
, b
, &err
);
6961 if(v
!= (ULONG
)((unsigned short)v
))
6962 *state
|= IOSTATE_failbit
;
6963 else if(end
!=beg
&& !err
)
6964 *pval
= (tmp
[0]=='-' ? -((unsigned short)v
) : v
);
6966 *state
|= IOSTATE_failbit
;
6969 *state
|= IOSTATE_eofbit
;
6975 /* ?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 */
6976 /* ?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 */
6977 DEFINE_THISCALL_WRAPPER(num_get_char_get_ushort
,36)
6978 istreambuf_iterator_char
*__thiscall
num_get_char_get_ushort(const num_get
*this, istreambuf_iterator_char
*ret
,
6979 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned short *pval
)
6981 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6982 return call_num_get_char_do_get_ushort(this, ret
, first
, last
, base
, state
, pval
);
6985 /* ?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 */
6986 /* ?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 */
6987 #if _MSVCP_VER <= 100
6988 #define call_num_get_char_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_char*, \
6989 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, bool*), \
6990 (this, ret, first, last, base, state, pval))
6992 #define call_num_get_char_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 52, istreambuf_iterator_char*, \
6993 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, bool*), \
6994 (this, ret, first, last, base, state, pval))
6996 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_bool
,36)
6997 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_bool(const num_get
*this, istreambuf_iterator_char
*ret
,
6998 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, bool *pval
)
7000 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
7002 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
7003 numpunct_char
*numpunct
= numpunct_char_use_facet(IOS_LOCALE(base
));
7004 basic_string_char false_bstr
, true_bstr
;
7005 const char *pfalse
, *ptrue
;
7007 numpunct_char_falsename(numpunct
, &false_bstr
);
7008 numpunct_char_truename(numpunct
, &true_bstr
);
7009 pfalse
= MSVCP_basic_string_char_c_str(&false_bstr
);
7010 ptrue
= MSVCP_basic_string_char_c_str(&true_bstr
);
7012 for(istreambuf_iterator_char_val(&first
); first
.strbuf
;) {
7013 if(pfalse
&& *pfalse
&& first
.val
!=*pfalse
)
7015 if(ptrue
&& *ptrue
&& first
.val
!=*ptrue
)
7018 if(pfalse
&& *pfalse
&& ptrue
&& !*ptrue
)
7020 if(ptrue
&& *ptrue
&& pfalse
&& !*pfalse
)
7029 istreambuf_iterator_char_inc(&first
);
7031 if((!pfalse
|| !*pfalse
) && (!ptrue
|| !*ptrue
))
7040 *state
|= IOSTATE_failbit
;
7042 MSVCP_basic_string_char_dtor(&false_bstr
);
7043 MSVCP_basic_string_char_dtor(&true_bstr
);
7047 LONG v
= _Stolx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
7048 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
)), &err
);
7050 if(end
!=tmp
&& err
==0 && (v
==0 || v
==1))
7053 *state
|= IOSTATE_failbit
;
7057 *state
|= IOSTATE_eofbit
;
7058 memcpy(ret
, &first
, sizeof(first
));
7062 /* ?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 */
7063 /* ?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 */
7064 DEFINE_THISCALL_WRAPPER(num_get_char_get_bool
,36)
7065 istreambuf_iterator_char
*__thiscall
num_get_char_get_bool(const num_get
*this, istreambuf_iterator_char
*ret
,
7066 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, bool *pval
)
7068 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
7069 return call_num_get_char_do_get_bool(this, ret
, first
, last
, base
, state
, pval
);
7072 /* ?id@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
7073 locale_id num_put_char_id
= {0};
7075 /* num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
7076 extern const vtable_ptr num_put_char_vtable
;
7078 /* ?_Init@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
7079 /* ?_Init@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
7080 DEFINE_THISCALL_WRAPPER(num_put_char__Init
, 8)
7081 void __thiscall
num_put_char__Init(num_put
*this, const _Locinfo
*locinfo
)
7083 TRACE("(%p %p)\n", this, locinfo
);
7084 #if _MSVCP_VER < 110
7085 _Locinfo__Getcvt(locinfo
, &this->cvt
);
7089 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
7090 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
7091 DEFINE_THISCALL_WRAPPER(num_put_char_ctor_locinfo
, 12)
7092 num_put
* __thiscall
num_put_char_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, size_t refs
)
7094 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
7096 locale_facet_ctor_refs(&this->facet
, refs
);
7097 this->facet
.vtable
= &num_put_char_vtable
;
7099 num_put_char__Init(this, locinfo
);
7103 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
7104 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
7105 DEFINE_THISCALL_WRAPPER(num_put_char_ctor_refs
, 8)
7106 num_put
* __thiscall
num_put_char_ctor_refs(num_put
*this, size_t refs
)
7110 TRACE("(%p %Iu)\n", this, refs
);
7112 _Locinfo_ctor(&locinfo
);
7113 num_put_char_ctor_locinfo(this, &locinfo
, refs
);
7114 _Locinfo_dtor(&locinfo
);
7118 /* ??_F?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
7119 /* ??_F?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
7120 DEFINE_THISCALL_WRAPPER(num_put_char_ctor
, 4)
7121 num_put
* __thiscall
num_put_char_ctor(num_put
*this)
7123 return num_put_char_ctor_refs(this, 0);
7126 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@UAE@XZ */
7127 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@UEAA@XZ */
7128 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
7129 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
7130 DEFINE_THISCALL_WRAPPER(num_put_char_dtor
, 4)
7131 void __thiscall
num_put_char_dtor(num_put
*this)
7133 TRACE("(%p)\n", this);
7134 locale_facet_dtor(&this->facet
);
7137 DEFINE_THISCALL_WRAPPER(num_put_char_vector_dtor
, 8)
7138 num_put
* __thiscall
num_put_char_vector_dtor(num_put
*this, unsigned int flags
)
7140 TRACE("(%p %x)\n", this, flags
);
7142 /* we have an array, with the number of elements stored before the first object */
7143 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
7145 for(i
=*ptr
-1; i
>=0; i
--)
7146 num_put_char_dtor(this+i
);
7147 operator_delete(ptr
);
7149 num_put_char_dtor(this);
7151 operator_delete(this);
7157 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
7158 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
7159 size_t __cdecl
num_put_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
7161 TRACE("(%p %p)\n", facet
, loc
);
7163 if(facet
&& !*facet
) {
7166 *facet
= operator_new(sizeof(num_put
));
7167 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
7168 num_put_char_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
7169 _Locinfo_dtor(&locinfo
);
7175 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
7176 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
7177 size_t __cdecl
num_put_char__Getcat_old(const locale_facet
**facet
)
7179 return num_put_char__Getcat(facet
, locale_classic());
7182 num_put
* num_put_char_use_facet(const locale
*loc
)
7184 static num_put
*obj
= NULL
;
7187 const locale_facet
*fac
;
7189 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
7190 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_char_id
));
7192 _Lockit_dtor(&lock
);
7193 return (num_put
*)fac
;
7197 _Lockit_dtor(&lock
);
7201 num_put_char__Getcat(&fac
, loc
);
7202 obj
= (num_put
*)fac
;
7203 call_locale_facet__Incref(&obj
->facet
);
7204 locale_facet_register(&obj
->facet
);
7205 _Lockit_dtor(&lock
);
7210 /* ?_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 */
7211 /* ?_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 */
7212 ostreambuf_iterator_char
* __cdecl
num_put_char__Put(const num_put
*this, ostreambuf_iterator_char
*ret
,
7213 ostreambuf_iterator_char dest
, const char *ptr
, size_t count
)
7215 TRACE("(%p %p %p %Iu)\n", this, ret
, ptr
, count
);
7217 for(; count
>0; count
--)
7218 ostreambuf_iterator_char_put(&dest
, *ptr
++);
7224 /* ?_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 */
7225 /* ?_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 */
7226 ostreambuf_iterator_char
* __cdecl
num_put_char__Putc(const num_put
*this, ostreambuf_iterator_char
*ret
,
7227 ostreambuf_iterator_char dest
, const char *ptr
, size_t count
)
7229 TRACE("(%p %p %p %Iu)\n", this, ret
, ptr
, count
);
7231 for(; count
>0; count
--)
7232 ostreambuf_iterator_char_put(&dest
, *ptr
++);
7238 /* ?_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 */
7239 /* ?_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 */
7240 ostreambuf_iterator_char
* __cdecl
num_put_char__Putgrouped(const num_put
*this, ostreambuf_iterator_char
*ret
,
7241 ostreambuf_iterator_char dest
, const char *ptr
, size_t count
, char delim
)
7243 FIXME("(%p %p %p %Iu %d) stub\n", this, ret
, ptr
, count
, delim
);
7247 /* ?_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 */
7248 /* ?_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 */
7249 ostreambuf_iterator_char
* __cdecl
num_put_char__Rep(const num_put
*this, ostreambuf_iterator_char
*ret
,
7250 ostreambuf_iterator_char dest
, char c
, size_t count
)
7252 TRACE("(%p %p %d %Iu)\n", this, ret
, c
, count
);
7254 for(; count
>0; count
--)
7255 ostreambuf_iterator_char_put(&dest
, c
);
7261 /* ?_Ffmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAPADPADDH@Z */
7262 /* ?_Ffmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAPEADPEADDH@Z */
7263 char* __cdecl
num_put_char__Ffmt(const num_put
*this, char *fmt
, char spec
, int fmtfl
)
7265 int type
= fmtfl
& FMTFLAG_floatfield
;
7268 TRACE("(%p %p %d %d)\n", this, fmt
, spec
, fmtfl
);
7271 if(fmtfl
& FMTFLAG_showpos
)
7273 if(fmtfl
& FMTFLAG_showpoint
)
7280 if(type
== FMTFLAG_fixed
)
7282 else if(type
== FMTFLAG_scientific
)
7283 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'E' : 'e';
7284 else if(type
== (FMTFLAG_fixed
|FMTFLAG_scientific
))
7285 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'A' : 'a';
7287 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'G' : 'g';
7293 /* ?_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 */
7294 /* ?_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 */
7295 ostreambuf_iterator_char
* __cdecl
num_put_char__Fput(const num_put
*this, ostreambuf_iterator_char
*ret
,
7296 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const char *buf
, size_t bef_point
,
7297 size_t aft_point
, size_t trailing
, size_t count
)
7299 FIXME("(%p %p %p %d %p %Iu %Iu %Iu %Iu) stub\n", this, ret
, base
,
7300 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
7304 /* TODO: This function should be removed when num_put_char__Fput is implemented */
7305 static ostreambuf_iterator_char
* num_put_char_fput(const num_put
*this, ostreambuf_iterator_char
*ret
,
7306 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, char *buf
, size_t count
)
7308 numpunct_char
*numpunct
= numpunct_char_use_facet(IOS_LOCALE(base
));
7309 basic_string_char grouping_bstr
;
7310 const char *grouping
;
7311 char *p
, sep
= 0, dec_point
= *localeconv()->decimal_point
;
7312 int cur_group
= 0, group_size
= 0;
7313 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
7316 TRACE("(%p %p %p %d %s %Iu)\n", this, ret
, base
, fill
, buf
, count
);
7318 /* Change decimal point */
7319 for(p
=buf
; p
<buf
+count
; p
++) {
7320 if(*p
== dec_point
) {
7321 *p
= numpunct_char_decimal_point(numpunct
);
7327 /* Add separators to number */
7328 numpunct_char_grouping(numpunct
, &grouping_bstr
);
7329 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
7330 #if _MSVCP_VER >= 70
7331 if (grouping
[0]) sep
= numpunct_char_thousands_sep(numpunct
);
7334 for(; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
7336 if(group_size
== grouping
[cur_group
]) {
7338 if(grouping
[cur_group
+1])
7341 memmove(p
+1, p
, buf
+count
-p
);
7346 MSVCP_basic_string_char_dtor(&grouping_bstr
);
7348 /* Display number with padding */
7349 if(count
>= base
->wide
)
7352 pad
= base
->wide
-count
;
7355 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
7356 num_put_char__Putc(this, &dest
, dest
, buf
, 1);
7359 if(adjustfield
!= FMTFLAG_left
) {
7360 num_put_char__Rep(this, ret
, dest
, fill
, pad
);
7363 num_put_char__Putc(this, &dest
, dest
, buf
, count
);
7364 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
7367 /* ?_Ifmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAPADPADPBDH@Z */
7368 /* ?_Ifmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
7369 char* __cdecl
num_put_char__Ifmt(const num_put
*this, char *fmt
, const char *spec
, int fmtfl
)
7371 int base
= fmtfl
& FMTFLAG_basefield
;
7374 TRACE("(%p %p %p %d)\n", this, fmt
, spec
, fmtfl
);
7377 if(fmtfl
& FMTFLAG_showpos
)
7379 if(fmtfl
& FMTFLAG_showbase
)
7386 if(base
== FMTFLAG_oct
)
7388 else if(base
== FMTFLAG_hex
)
7389 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'X' : 'x';
7397 /* ?_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 */
7398 /* ?_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 */
7399 ostreambuf_iterator_char
* __cdecl
num_put_char__Iput(const num_put
*this, ostreambuf_iterator_char
*ret
,
7400 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, char *buf
, size_t count
)
7402 numpunct_char
*numpunct
= numpunct_char_use_facet(IOS_LOCALE(base
));
7403 basic_string_char grouping_bstr
;
7404 const char *grouping
;
7406 int cur_group
= 0, group_size
= 0;
7407 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
7410 TRACE("(%p %p %p %d %s %Iu)\n", this, ret
, base
, fill
, buf
, count
);
7412 /* Add separators to number */
7413 numpunct_char_grouping(numpunct
, &grouping_bstr
);
7414 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
7415 #if _MSVCP_VER >= 70
7416 if (grouping
[0]) sep
= numpunct_char_thousands_sep(numpunct
);
7419 for(p
=buf
+count
-1; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
7421 if(group_size
== grouping
[cur_group
]) {
7423 if(grouping
[cur_group
+1])
7426 memmove(p
+1, p
, buf
+count
-p
);
7431 MSVCP_basic_string_char_dtor(&grouping_bstr
);
7433 /* Display number with padding */
7434 if(count
>= base
->wide
)
7437 pad
= base
->wide
-count
;
7440 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
7441 num_put_char__Putc(this, &dest
, dest
, buf
, 1);
7443 }else if((adjustfield
& FMTFLAG_internal
) && (buf
[1]=='x' || buf
[1]=='X')) {
7444 num_put_char__Putc(this, &dest
, dest
, buf
, 2);
7447 if(adjustfield
!= FMTFLAG_left
) {
7448 num_put_char__Rep(this, ret
, dest
, fill
, pad
);
7451 num_put_char__Putc(this, &dest
, dest
, buf
, count
);
7452 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
7455 /* ?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 */
7456 /* ?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 */
7457 #if _MSVCP_VER <= 100
7458 #define call_num_put_char_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_char*, \
7459 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, LONG), \
7460 (this, ret, dest, base, fill, v))
7462 #define call_num_put_char_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 36, ostreambuf_iterator_char*, \
7463 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, LONG), \
7464 (this, ret, dest, base, fill, v))
7466 #if _MSVCP_VER != 80
7467 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_long
, 28)
7469 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_long
, 32)
7471 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_long(const num_put
*this, ostreambuf_iterator_char
*ret
,
7472 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, LONG v
)
7474 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
7475 char fmt
[7]; /* strlen("%+#lld")+1 */
7477 TRACE("(%p %p %p %d %ld)\n", this, ret
, base
, fill
, v
);
7479 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
7480 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
7483 /* ?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 */
7484 /* ?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 */
7485 #if _MSVCP_VER != 80
7486 DEFINE_THISCALL_WRAPPER(num_put_char_put_long
, 28)
7488 DEFINE_THISCALL_WRAPPER(num_put_char_put_long
, 32)
7490 ostreambuf_iterator_char
* __thiscall
num_put_char_put_long(const num_put
*this, ostreambuf_iterator_char
*ret
,
7491 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, LONG v
)
7493 TRACE("(%p %p %p %d %ld)\n", this, ret
, base
, fill
, v
);
7494 return call_num_put_char_do_put_long(this, ret
, dest
, base
, fill
, v
);
7497 /* ?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 */
7498 /* ?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 */
7499 #if _MSVCP_VER <= 100
7500 #define call_num_put_char_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_char*, \
7501 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, ULONG), \
7502 (this, ret, dest, base, fill, v))
7504 #define call_num_put_char_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_char*, \
7505 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, ULONG), \
7506 (this, ret, dest, base, fill, v))
7508 #if _MSVCP_VER != 80
7509 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ulong
, 28)
7511 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ulong
, 32)
7513 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_ulong(const num_put
*this, ostreambuf_iterator_char
*ret
,
7514 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, ULONG v
)
7516 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
7517 char fmt
[7]; /* strlen("%+#lld")+1 */
7519 TRACE("(%p %p %p %d %ld)\n", this, ret
, base
, fill
, v
);
7521 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
7522 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
7525 /* ?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 */
7526 /* ?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 */
7527 #if _MSVCP_VER != 80
7528 DEFINE_THISCALL_WRAPPER(num_put_char_put_ulong
, 28)
7530 DEFINE_THISCALL_WRAPPER(num_put_char_put_ulong
, 32)
7532 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ulong(const num_put
*this, ostreambuf_iterator_char
*ret
,
7533 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, ULONG v
)
7535 TRACE("(%p %p %p %d %ld)\n", this, ret
, base
, fill
, v
);
7536 return call_num_put_char_do_put_ulong(this, ret
, dest
, base
, fill
, v
);
7539 static inline unsigned get_precision(const ios_base
*base
)
7541 streamsize ret
= base
->prec
<= 0 && !(base
->fmtfl
& FMTFLAG_fixed
) ? 6 : base
->prec
;
7547 /* ?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 */
7548 /* ?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 */
7549 /* ?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 */
7550 /* ?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 */
7551 #if _MSVCP_VER <= 100
7552 #define call_num_put_char_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_char*, \
7553 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
7554 (this, ret, dest, base, fill, v))
7555 #define call_num_put_char_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 8, ostreambuf_iterator_char*, \
7556 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
7557 (this, ret, dest, base, fill, v))
7559 #define call_num_put_char_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_char*, \
7560 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
7561 (this, ret, dest, base, fill, v))
7562 #define call_num_put_char_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_char*, \
7563 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
7564 (this, ret, dest, base, fill, v))
7566 #if _MSVCP_VER != 80
7567 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_double
, 32)
7569 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_double
, 36)
7571 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_double(const num_put
*this, ostreambuf_iterator_char
*ret
,
7572 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
7575 char fmt
[8]; /* strlen("%+#.*lg")+1 */
7579 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7581 num_put_char__Ffmt(this, fmt
, '\0', base
->fmtfl
);
7582 prec
= get_precision(base
);
7583 size
= _scprintf(fmt
, prec
, v
);
7585 /* TODO: don't use dynamic allocation */
7586 tmp
= operator_new(size
*2);
7587 num_put_char_fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, prec
, v
));
7588 operator_delete(tmp
);
7592 /* ?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 */
7593 /* ?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 */
7594 #if _MSVCP_VER != 80
7595 DEFINE_THISCALL_WRAPPER(num_put_char_put_double
, 32)
7597 DEFINE_THISCALL_WRAPPER(num_put_char_put_double
, 36)
7599 ostreambuf_iterator_char
* __thiscall
num_put_char_put_double(const num_put
*this, ostreambuf_iterator_char
*ret
,
7600 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
7602 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7603 return call_num_put_char_do_put_double(this, ret
, dest
, base
, fill
, v
);
7606 /* ?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 */
7607 /* ?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 */
7608 #if _MSVCP_VER != 80
7609 DEFINE_THISCALL_WRAPPER(num_put_char_put_ldouble
, 32)
7611 DEFINE_THISCALL_WRAPPER(num_put_char_put_ldouble
, 36)
7613 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ldouble(const num_put
*this, ostreambuf_iterator_char
*ret
,
7614 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
7616 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7617 return call_num_put_char_do_put_ldouble(this, ret
, dest
, base
, fill
, v
);
7620 /* ?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 */
7621 /* ?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 */
7622 #if _MSVCP_VER <= 100
7623 #define call_num_put_char_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_char*, \
7624 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const void*), \
7625 (this, ret, dest, base, fill, v))
7627 #define call_num_put_char_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_char*, \
7628 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const void*), \
7629 (this, ret, dest, base, fill, v))
7631 #if _MSVCP_VER != 80
7632 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ptr
, 28)
7634 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ptr
, 32)
7636 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_ptr(const num_put
*this, ostreambuf_iterator_char
*ret
,
7637 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const void *v
)
7639 char tmp
[17]; /* 8(16^8==2^64)*2(separators between every digit) + 1 */
7641 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
7643 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
7646 /* ?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 */
7647 /* ?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 */
7648 #if _MSVCP_VER != 80
7649 DEFINE_THISCALL_WRAPPER(num_put_char_put_ptr
, 28)
7651 DEFINE_THISCALL_WRAPPER(num_put_char_put_ptr
, 32)
7653 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ptr(const num_put
*this, ostreambuf_iterator_char
*ret
,
7654 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const void *v
)
7656 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
7657 return call_num_put_char_do_put_ptr(this, ret
, dest
, base
, fill
, v
);
7660 /* ?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 */
7661 /* ?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 */
7662 #if _MSVCP_VER <= 100
7663 #define call_num_put_char_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_char*, \
7664 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, __int64), \
7665 (this, ret, dest, base, fill, v))
7667 #define call_num_put_char_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_char*, \
7668 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, __int64), \
7669 (this, ret, dest, base, fill, v))
7671 #if _MSVCP_VER != 80
7672 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_int64
, 32)
7674 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_int64
, 36)
7676 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_int64(const num_put
*this, ostreambuf_iterator_char
*ret
,
7677 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, __int64 v
)
7679 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
7680 char fmt
[7]; /* strlen("%+#lld")+1 */
7682 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7684 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
7685 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
7688 /* ?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 */
7689 /* ?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 */
7690 #if _MSVCP_VER != 80
7691 DEFINE_THISCALL_WRAPPER(num_put_char_put_int64
, 32)
7693 DEFINE_THISCALL_WRAPPER(num_put_char_put_int64
, 36)
7695 ostreambuf_iterator_char
* __thiscall
num_put_char_put_int64(const num_put
*this, ostreambuf_iterator_char
*ret
,
7696 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, __int64 v
)
7698 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7699 return call_num_put_char_do_put_int64(this, ret
, dest
, base
, fill
, v
);
7702 /* ?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 */
7703 /* ?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 */
7704 #if _MSVCP_VER <= 100
7705 #define call_num_put_char_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_char*, \
7706 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, unsigned __int64), \
7707 (this, ret, dest, base, fill, v))
7709 #define call_num_put_char_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_char*, \
7710 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, unsigned __int64), \
7711 (this, ret, dest, base, fill, v))
7713 #if _MSVCP_VER != 80
7714 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_uint64
, 32)
7716 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_uint64
, 36)
7718 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_uint64(const num_put
*this, ostreambuf_iterator_char
*ret
,
7719 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, unsigned __int64 v
)
7721 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
7722 char fmt
[7]; /* strlen("%+#lld")+1 */
7724 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7726 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
7727 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
7730 /* ?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 */
7731 /* ?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 */
7732 #if _MSVCP_VER != 80
7733 DEFINE_THISCALL_WRAPPER(num_put_char_put_uint64
, 32)
7735 DEFINE_THISCALL_WRAPPER(num_put_char_put_uint64
, 36)
7737 ostreambuf_iterator_char
* __thiscall
num_put_char_put_uint64(const num_put
*this, ostreambuf_iterator_char
*ret
,
7738 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, unsigned __int64 v
)
7740 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7741 return call_num_put_char_do_put_uint64(this, ret
, dest
, base
, fill
, v
);
7744 /* ?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 */
7745 /* ?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 */
7746 #if _MSVCP_VER <= 100
7747 #define call_num_put_char_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_char*, \
7748 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, bool), \
7749 (this, ret, dest, base, fill, v))
7751 #define call_num_put_char_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 40, ostreambuf_iterator_char*, \
7752 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, bool), \
7753 (this, ret, dest, base, fill, v))
7755 #if _MSVCP_VER != 80
7756 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_bool
, 28)
7758 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_bool
, 32)
7760 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_bool(const num_put
*this, ostreambuf_iterator_char
*ret
,
7761 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, bool v
)
7763 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7765 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
7766 numpunct_char
*numpunct
= numpunct_char_use_facet(IOS_LOCALE(base
));
7767 basic_string_char str
;
7771 numpunct_char_truename(numpunct
, &str
);
7773 numpunct_char_falsename(numpunct
, &str
);
7775 len
= MSVCP_basic_string_char_length(&str
);
7776 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
7779 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
7780 num_put_char__Rep(this, &dest
, dest
, fill
, pad
);
7783 num_put_char__Putc(this, &dest
, dest
, MSVCP_basic_string_char_c_str(&str
), len
);
7784 MSVCP_basic_string_char_dtor(&str
);
7785 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
7788 return num_put_char_put_long(this, ret
, dest
, base
, fill
, v
);
7791 /* ?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 */
7792 /* ?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 */
7793 #if _MSVCP_VER != 80
7794 DEFINE_THISCALL_WRAPPER(num_put_char_put_bool
, 28)
7796 DEFINE_THISCALL_WRAPPER(num_put_char_put_bool
, 32)
7798 ostreambuf_iterator_char
* __thiscall
num_put_char_put_bool(const num_put
*this, ostreambuf_iterator_char
*ret
,
7799 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, bool v
)
7801 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7802 return call_num_put_char_do_put_bool(this, ret
, dest
, base
, fill
, v
);
7805 /* ?id@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
7806 locale_id num_put_wchar_id
= {0};
7807 /* ?id@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
7808 locale_id num_put_short_id
= {0};
7810 /* num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
7811 extern const vtable_ptr num_put_wchar_vtable
;
7812 /* num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
7813 extern const vtable_ptr num_put_short_vtable
;
7815 /* ?_Init@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
7816 /* ?_Init@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
7817 DEFINE_THISCALL_WRAPPER(num_put_wchar__Init
, 8)
7818 void __thiscall
num_put_wchar__Init(num_put
*this, const _Locinfo
*locinfo
)
7820 TRACE("(%p %p)\n", this, locinfo
);
7821 #if _MSVCP_VER < 110
7822 _Locinfo__Getcvt(locinfo
, &this->cvt
);
7826 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
7827 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
7828 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor_locinfo
, 12)
7829 num_put
* __thiscall
num_put_wchar_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, size_t refs
)
7831 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
7833 locale_facet_ctor_refs(&this->facet
, refs
);
7834 this->facet
.vtable
= &num_put_wchar_vtable
;
7836 num_put_wchar__Init(this, locinfo
);
7840 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
7841 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
7842 DEFINE_THISCALL_WRAPPER(num_put_short_ctor_locinfo
, 12)
7843 num_put
* __thiscall
num_put_short_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, size_t refs
)
7845 num_put_wchar_ctor_locinfo(this, locinfo
, refs
);
7846 this->facet
.vtable
= &num_put_short_vtable
;
7850 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
7851 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
7852 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor_refs
, 8)
7853 num_put
* __thiscall
num_put_wchar_ctor_refs(num_put
*this, size_t refs
)
7857 TRACE("(%p %Iu)\n", this, refs
);
7859 _Locinfo_ctor(&locinfo
);
7860 num_put_wchar_ctor_locinfo(this, &locinfo
, refs
);
7861 _Locinfo_dtor(&locinfo
);
7865 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
7866 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
7867 DEFINE_THISCALL_WRAPPER(num_put_short_ctor_refs
, 8)
7868 num_put
* __thiscall
num_put_short_ctor_refs(num_put
*this, size_t refs
)
7870 num_put_wchar_ctor_refs(this, refs
);
7871 this->facet
.vtable
= &num_put_short_vtable
;
7875 /* ??_F?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
7876 /* ??_F?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
7877 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor
, 4)
7878 num_put
* __thiscall
num_put_wchar_ctor(num_put
*this)
7880 return num_put_wchar_ctor_refs(this, 0);
7883 /* ??_F?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ */
7884 /* ??_F?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ */
7885 DEFINE_THISCALL_WRAPPER(num_put_short_ctor
, 4)
7886 num_put
* __thiscall
num_put_short_ctor(num_put
*this)
7888 return num_put_short_ctor_refs(this, 0);
7891 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@UAE@XZ */
7892 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@UEAA@XZ */
7893 /* ??1?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
7894 /* ??1?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
7895 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
7896 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
7897 DEFINE_THISCALL_WRAPPER(num_put_wchar_dtor
, 4)
7898 void __thiscall
num_put_wchar_dtor(num_put
*this)
7900 TRACE("(%p)\n", this);
7901 locale_facet_dtor(&this->facet
);
7904 DEFINE_THISCALL_WRAPPER(num_put_wchar_vector_dtor
, 8)
7905 num_put
* __thiscall
num_put_wchar_vector_dtor(num_put
*this, unsigned int flags
)
7907 TRACE("(%p %x)\n", this, flags
);
7909 /* we have an array, with the number of elements stored before the first object */
7910 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
7912 for(i
=*ptr
-1; i
>=0; i
--)
7913 num_put_wchar_dtor(this+i
);
7914 operator_delete(ptr
);
7916 num_put_wchar_dtor(this);
7918 operator_delete(this);
7924 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
7925 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
7926 size_t __cdecl
num_put_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
7928 TRACE("(%p %p)\n", facet
, loc
);
7930 if(facet
&& !*facet
) {
7933 *facet
= operator_new(sizeof(num_put
));
7934 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
7935 num_put_wchar_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
7936 _Locinfo_dtor(&locinfo
);
7942 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
7943 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
7944 size_t __cdecl
num_put_wchar__Getcat_old(const locale_facet
**facet
)
7946 return num_put_wchar__Getcat(facet
, locale_classic());
7949 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
7950 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
7951 size_t __cdecl
num_put_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
7953 TRACE("(%p %p)\n", facet
, loc
);
7955 if(facet
&& !*facet
) {
7958 *facet
= operator_new(sizeof(num_put
));
7959 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
7960 num_put_short_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
7961 _Locinfo_dtor(&locinfo
);
7967 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
7968 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
7969 size_t __cdecl
num_put_short__Getcat_old(const locale_facet
**facet
)
7971 return num_put_short__Getcat(facet
, locale_classic());
7974 num_put
* num_put_wchar_use_facet(const locale
*loc
)
7976 static num_put
*obj
= NULL
;
7979 const locale_facet
*fac
;
7981 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
7982 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_wchar_id
));
7984 _Lockit_dtor(&lock
);
7985 return (num_put
*)fac
;
7989 _Lockit_dtor(&lock
);
7993 num_put_wchar__Getcat(&fac
, loc
);
7994 obj
= (num_put
*)fac
;
7995 call_locale_facet__Incref(&obj
->facet
);
7996 locale_facet_register(&obj
->facet
);
7997 _Lockit_dtor(&lock
);
8002 num_put
* num_put_short_use_facet(const locale
*loc
)
8004 static num_put
*obj
= NULL
;
8007 const locale_facet
*fac
;
8009 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
8010 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_short_id
));
8012 _Lockit_dtor(&lock
);
8013 return (num_put
*)fac
;
8017 _Lockit_dtor(&lock
);
8021 num_put_short__Getcat(&fac
, loc
);
8022 obj
= (num_put
*)fac
;
8023 call_locale_facet__Incref(&obj
->facet
);
8024 locale_facet_register(&obj
->facet
);
8025 _Lockit_dtor(&lock
);
8030 /* ?_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 */
8031 /* ?_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 */
8032 /* ?_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 */
8033 /* ?_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 */
8034 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Put(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8035 ostreambuf_iterator_wchar dest
, const wchar_t *ptr
, size_t count
)
8037 TRACE("(%p %p %s %Iu)\n", this, ret
, debugstr_wn(ptr
, count
), count
);
8039 for(; count
>0; count
--)
8040 ostreambuf_iterator_wchar_put(&dest
, *ptr
++);
8046 #if _MSVCP_VER < 110
8047 /* ?_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 */
8048 /* ?_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 */
8049 /* ?_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 */
8050 /* ?_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 */
8051 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Putc(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8052 ostreambuf_iterator_wchar dest
, const char *ptr
, size_t count
)
8057 TRACE("(%p %p %s %Iu)\n", this, ret
, debugstr_an(ptr
, count
), count
);
8059 memset(&state
, 0, sizeof(state
));
8060 for(; count
>0; count
--) {
8061 if(_Mbrtowc(&ch
, ptr
++, 1, &state
, &this->cvt
) == 1)
8062 ostreambuf_iterator_wchar_put(&dest
, ch
);
8070 /* ?_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 */
8071 /* ?_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 */
8072 /* ?_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 */
8073 /* ?_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 */
8074 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Putgrouped(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8075 ostreambuf_iterator_wchar dest
, const char *ptr
, size_t count
, wchar_t delim
)
8077 FIXME("(%p %p %p %Iu %d) stub\n", this, ret
, ptr
, count
, delim
);
8081 /* ?_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 */
8082 /* ?_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 */
8083 /* ?_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 */
8084 /* ?_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 */
8085 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Rep(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8086 ostreambuf_iterator_wchar dest
, wchar_t c
, size_t count
)
8088 TRACE("(%p %p %d %Iu)\n", this, ret
, c
, count
);
8090 for(; count
>0; count
--)
8091 ostreambuf_iterator_wchar_put(&dest
, c
);
8097 /* ?_Ffmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAPADPADDH@Z */
8098 /* ?_Ffmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAPEADPEADDH@Z */
8099 /* ?_Ffmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAPADPADDH@Z */
8100 /* ?_Ffmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAPEADPEADDH@Z */
8101 char* __cdecl
num_put_wchar__Ffmt(const num_put
*this, char *fmt
, char spec
, int fmtfl
)
8103 int type
= fmtfl
& FMTFLAG_floatfield
;
8106 TRACE("(%p %p %d %d)\n", this, fmt
, spec
, fmtfl
);
8109 if(fmtfl
& FMTFLAG_showpos
)
8111 if(fmtfl
& FMTFLAG_showbase
)
8118 if(type
== FMTFLAG_fixed
)
8120 else if(type
== FMTFLAG_scientific
)
8121 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'E' : 'e';
8122 else if(type
== (FMTFLAG_fixed
|FMTFLAG_scientific
))
8123 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'A' : 'a';
8125 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'G' : 'g';
8131 /* ?_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 */
8132 /* ?_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 */
8133 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8134 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const char *buf
, size_t bef_point
,
8135 size_t aft_point
, size_t trailing
, size_t count
)
8137 FIXME("(%p %p %p %d %p %Iu %Iu %Iu %Iu) stub\n", this, ret
, base
,
8138 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
8142 /* ?_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 */
8143 /* ?_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 */
8144 ostreambuf_iterator_wchar
* __cdecl
num_put_short__Fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8145 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const char *buf
, size_t bef_point
,
8146 size_t aft_point
, size_t trailing
, size_t count
)
8148 FIXME("(%p %p %p %d %p %Iu %Iu %Iu %Iu) stub\n", this, ret
, base
,
8149 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
8153 #if _MSVCP_VER < 110
8154 static void num_put_wchar_wide_put(const num_put
*this,
8155 ostreambuf_iterator_wchar
*dest
, ios_base
*base
,
8156 const char *buf
, size_t count
)
8158 num_put_wchar__Putc(this, dest
, *dest
, buf
, count
);
8161 static void num_put_wchar_wide_put(const num_put
*this,
8162 ostreambuf_iterator_wchar
*dest
, ios_base
*base
,
8163 const char *buf
, size_t count
)
8168 ctype
= ctype_wchar_use_facet(IOS_LOCALE(base
));
8169 for(i
=0; i
<count
; i
++)
8170 ostreambuf_iterator_wchar_put(dest
, ctype_wchar_widen_ch(ctype
, buf
[i
]));
8174 /* TODO: This function should be removed when num_put_wchar__Fput is implemented */
8175 static ostreambuf_iterator_wchar
* num_put__fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8176 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
,
8177 size_t count
, numpunct_wchar
*numpunct
)
8179 basic_string_char grouping_bstr
;
8180 const char *grouping
;
8181 char *p
, dec_point
= *localeconv()->decimal_point
;
8183 int cur_group
= 0, group_size
= 0;
8184 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
8187 TRACE("(%p %p %p %d %s %Iu)\n", this, ret
, base
, fill
, buf
, count
);
8189 for(p
=buf
; p
<buf
+count
; p
++) {
8195 /* Add separators to number */
8196 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
8197 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
8198 #if _MSVCP_VER >= 70
8199 if (grouping
[0]) sep
= numpunct_wchar_thousands_sep(numpunct
);
8202 for(; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
8204 if(group_size
== grouping
[cur_group
]) {
8206 if(grouping
[cur_group
+1])
8209 memmove(p
+1, p
, buf
+count
-p
);
8210 *p
= '\0'; /* mark thousands separator positions */
8214 MSVCP_basic_string_char_dtor(&grouping_bstr
);
8216 /* Display number with padding */
8217 if(count
>= base
->wide
)
8220 pad
= base
->wide
-count
;
8223 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
8224 num_put_wchar_wide_put(this, &dest
, base
, buf
, 1);
8227 if(adjustfield
!= FMTFLAG_left
) {
8228 num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8232 for(i
=0; i
<count
; i
++) {
8233 if(buf
[i
] == dec_point
)
8234 num_put_wchar__Rep(this, &dest
, dest
, numpunct_wchar_decimal_point(numpunct
), 1);
8236 num_put_wchar__Rep(this, &dest
, dest
, sep
, 1);
8238 num_put_wchar_wide_put(this, &dest
, base
, buf
+i
, 1);
8241 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8244 /* ?_Ifmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAPADPADPBDH@Z */
8245 /* ?_Ifmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
8246 /* ?_Ifmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAPADPADPBDH@Z */
8247 /* ?_Ifmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
8248 char* __cdecl
num_put_wchar__Ifmt(const num_put
*this, char *fmt
, const char *spec
, int fmtfl
)
8250 int base
= fmtfl
& FMTFLAG_basefield
;
8253 TRACE("(%p %p %p %d)\n", this, fmt
, spec
, fmtfl
);
8256 if(fmtfl
& FMTFLAG_showpos
)
8258 if(fmtfl
& FMTFLAG_showbase
)
8265 if(base
== FMTFLAG_oct
)
8267 else if(base
== FMTFLAG_hex
)
8268 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'X' : 'x';
8276 static ostreambuf_iterator_wchar
* num_put__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8277 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
,
8278 size_t count
, numpunct_wchar
*numpunct
)
8280 basic_string_char grouping_bstr
;
8281 const char *grouping
;
8284 int cur_group
= 0, group_size
= 0;
8285 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
8288 TRACE("(%p %p %p %d %s %Iu)\n", this, ret
, base
, fill
, buf
, count
);
8290 /* Add separators to number */
8291 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
8292 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
8293 sep
= grouping
[0] ? numpunct_wchar_thousands_sep(numpunct
) : '\0';
8295 for(p
=buf
+count
-1; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
8297 if(group_size
== grouping
[cur_group
]) {
8299 if(grouping
[cur_group
+1])
8302 memmove(p
+1, p
, buf
+count
-p
);
8303 *p
= '\0'; /* mark thousands separator positions */
8307 MSVCP_basic_string_char_dtor(&grouping_bstr
);
8309 /* Display number with padding */
8310 if(count
>= base
->wide
)
8313 pad
= base
->wide
-count
;
8316 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
8317 num_put_wchar_wide_put(this, &dest
, base
, buf
, 1);
8319 }else if((adjustfield
& FMTFLAG_internal
) && (buf
[1]=='x' || buf
[1]=='X')) {
8320 num_put_wchar_wide_put(this, &dest
, base
, buf
, 2);
8323 if(adjustfield
!= FMTFLAG_left
) {
8324 num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8328 for(i
=0; i
<count
; i
++) {
8330 num_put_wchar__Rep(this, &dest
, dest
, sep
, 1);
8332 num_put_wchar_wide_put(this, &dest
, base
, buf
+i
, 1);
8335 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8338 /* ?_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 */
8339 /* ?_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 */
8340 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8341 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
, size_t count
)
8343 return num_put__Iput(this, ret
, dest
, base
, fill
, buf
, count
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
8346 /* ?_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 */
8347 /* ?_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 */
8348 ostreambuf_iterator_wchar
* __cdecl
num_put_short__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8349 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
, size_t count
)
8351 return num_put__Iput(this, ret
, dest
, base
, fill
, buf
, count
, numpunct_short_use_facet(IOS_LOCALE(base
)));
8354 /* ?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 */
8355 /* ?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 */
8356 #if _MSVCP_VER <= 100
8357 #define call_num_put_wchar_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_wchar*, \
8358 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, LONG), \
8359 (this, ret, dest, base, fill, v))
8361 #define call_num_put_wchar_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 36, ostreambuf_iterator_wchar*, \
8362 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, LONG), \
8363 (this, ret, dest, base, fill, v))
8365 #if _MSVCP_VER != 80
8366 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_long
, 28)
8368 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_long
, 32)
8370 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8371 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
8373 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8374 char fmt
[7]; /* strlen("%+#lld")+1 */
8376 TRACE("(%p %p %p %d %ld)\n", this, ret
, base
, fill
, v
);
8378 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
8379 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
8382 /* ?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 */
8383 /* ?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 */
8384 #if _MSVCP_VER != 80
8385 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_long
, 28)
8387 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_long
, 32)
8389 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8390 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
8392 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8393 char fmt
[7]; /* strlen("%+#lld")+1 */
8395 TRACE("(%p %p %p %d %ld)\n", this, ret
, base
, fill
, v
);
8397 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
8398 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
8401 /* ?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 */
8402 /* ?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 */
8403 /* ?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 */
8404 /* ?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 */
8405 #if _MSVCP_VER != 80
8406 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_long
, 28)
8408 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_long
, 32)
8410 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8411 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
8413 TRACE("(%p %p %p %d %ld)\n", this, ret
, base
, fill
, v
);
8414 return call_num_put_wchar_do_put_long(this, ret
, dest
, base
, fill
, v
);
8417 /* ?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 */
8418 /* ?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 */
8419 #if _MSVCP_VER <= 100
8420 #define call_num_put_wchar_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_wchar*, \
8421 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, ULONG), \
8422 (this, ret, dest, base, fill, v))
8424 #define call_num_put_wchar_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_wchar*, \
8425 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, ULONG), \
8426 (this, ret, dest, base, fill, v))
8428 #if _MSVCP_VER != 80
8429 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ulong
, 28)
8431 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ulong
, 32)
8433 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8434 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
8436 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8437 char fmt
[7]; /* strlen("%+#lld")+1 */
8439 TRACE("(%p %p %p %d %ld)\n", this, ret
, base
, fill
, v
);
8441 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
8442 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
8445 /* ?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 */
8446 /* ?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 */
8447 #if _MSVCP_VER != 80
8448 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ulong
, 28)
8450 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ulong
, 32)
8452 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8453 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
8455 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8456 char fmt
[7]; /* strlen("%+#lld")+1 */
8458 TRACE("(%p %p %p %d %ld)\n", this, ret
, base
, fill
, v
);
8460 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
8461 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
8464 /* ?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 */
8465 /* ?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 */
8466 /* ?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 */
8467 /* ?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 */
8468 #if _MSVCP_VER != 80
8469 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ulong
, 28)
8471 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ulong
, 32)
8473 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8474 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
8476 TRACE("(%p %p %p %d %ld)\n", this, ret
, base
, fill
, v
);
8477 return call_num_put_wchar_do_put_ulong(this, ret
, dest
, base
, fill
, v
);
8480 /* ?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 */
8481 /* ?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 */
8482 /* ?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 */
8483 /* ?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 */
8484 #if _MSVCP_VER <= 100
8485 #define call_num_put_wchar_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_wchar*, \
8486 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
8487 (this, ret, dest, base, fill, v))
8488 #define call_num_put_wchar_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 8, ostreambuf_iterator_wchar*, \
8489 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
8490 (this, ret, dest, base, fill, v))
8492 #define call_num_put_wchar_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_wchar*, \
8493 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
8494 (this, ret, dest, base, fill, v))
8495 #define call_num_put_wchar_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_wchar*, \
8496 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
8497 (this, ret, dest, base, fill, v))
8499 #if _MSVCP_VER != 80
8500 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_double
, 32)
8502 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_double
, 36)
8504 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8505 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
8508 char fmt
[8]; /* strlen("%+#.*lg")+1 */
8512 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
8514 num_put_wchar__Ffmt(this, fmt
, '\0', base
->fmtfl
);
8515 prec
= get_precision(base
);
8516 size
= _scprintf(fmt
, prec
, v
);
8518 /* TODO: don't use dynamic allocation */
8519 tmp
= operator_new(size
*2);
8520 num_put__fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, prec
, v
),
8521 numpunct_wchar_use_facet(IOS_LOCALE(base
)));
8522 operator_delete(tmp
);
8526 /* ?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 */
8527 /* ?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 */
8528 /* ?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 */
8529 /* ?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 */
8530 #if _MSVCP_VER != 80
8531 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_double
, 32)
8533 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_double
, 36)
8535 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8536 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
8539 char fmt
[8]; /* strlen("%+#.*lg")+1 */
8543 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
8545 num_put_wchar__Ffmt(this, fmt
, '\0', base
->fmtfl
);
8546 prec
= get_precision(base
);
8547 size
= _scprintf(fmt
, prec
, v
);
8549 /* TODO: don't use dynamic allocation */
8550 tmp
= operator_new(size
*2);
8551 num_put__fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, prec
, v
),
8552 numpunct_short_use_facet(IOS_LOCALE(base
)));
8553 operator_delete(tmp
);
8557 /* ?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 */
8558 /* ?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 */
8559 /* ?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 */
8560 /* ?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 */
8561 #if _MSVCP_VER != 80
8562 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_double
, 32)
8564 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_double
, 36)
8566 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8567 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
8569 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
8570 return call_num_put_wchar_do_put_double(this, ret
, dest
, base
, fill
, v
);
8573 /* ?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 */
8574 /* ?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 */
8575 /* ?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 */
8576 /* ?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 */
8577 #if _MSVCP_VER != 80
8578 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ldouble
, 32)
8580 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ldouble
, 36)
8582 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ldouble(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8583 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
8585 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
8586 return call_num_put_wchar_do_put_ldouble(this, ret
, dest
, base
, fill
, v
);
8589 /* ?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 */
8590 /* ?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 */
8591 #if _MSVCP_VER <= 100
8592 #define call_num_put_wchar_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_wchar*, \
8593 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const void*), \
8594 (this, ret, dest, base, fill, v))
8596 #define call_num_put_wchar_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_wchar*, \
8597 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const void*), \
8598 (this, ret, dest, base, fill, v))
8600 #if _MSVCP_VER != 80
8601 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ptr
, 28)
8603 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ptr
, 32)
8605 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8606 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
8608 char tmp
[17]; /* 8(16^8==2^64)*2(separators between every digit) + 1 */
8610 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
8612 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
8615 /* ?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 */
8616 /* ?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 */
8617 #if _MSVCP_VER != 80
8618 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ptr
, 28)
8620 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ptr
, 32)
8622 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8623 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
8625 char tmp
[17]; /* 8(16^8==2^64)*2(separators between every digit) + 1 */
8627 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
8629 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
8632 /* ?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 */
8633 /* ?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 */
8634 /* ?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 */
8635 /* ?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 */
8636 #if _MSVCP_VER != 80
8637 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ptr
, 28)
8639 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ptr
, 32)
8641 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8642 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
8644 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
8645 return call_num_put_wchar_do_put_ptr(this, ret
, dest
, base
, fill
, v
);
8648 /* ?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 */
8649 /* ?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 */
8650 #if _MSVCP_VER <= 100
8651 #define call_num_put_wchar_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_wchar*, \
8652 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, __int64), \
8653 (this, ret, dest, base, fill, v))
8655 #define call_num_put_wchar_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_wchar*, \
8656 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, __int64), \
8657 (this, ret, dest, base, fill, v))
8659 #if _MSVCP_VER != 80
8660 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_int64
, 32)
8662 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_int64
, 36)
8664 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8665 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
8667 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8668 char fmt
[7]; /* strlen("%+#lld")+1 */
8670 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8672 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
8673 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
8676 /* ?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 */
8677 /* ?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 */
8678 #if _MSVCP_VER != 80
8679 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_int64
, 32)
8681 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_int64
, 36)
8683 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8684 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
8686 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8687 char fmt
[7]; /* strlen("%+#lld")+1 */
8689 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8691 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
8692 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
8695 /* ?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 */
8696 /* ?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 */
8697 /* ?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 */
8698 /* ?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 */
8699 #if _MSVCP_VER != 80
8700 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_int64
, 32)
8702 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_int64
, 36)
8704 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8705 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
8707 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8708 return call_num_put_wchar_do_put_int64(this, ret
, dest
, base
, fill
, v
);
8711 /* ?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 */
8712 /* ?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 */
8713 #if _MSVCP_VER <= 100
8714 #define call_num_put_wchar_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_wchar*, \
8715 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, unsigned __int64), \
8716 (this, ret, dest, base, fill, v))
8718 #define call_num_put_wchar_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_wchar*, \
8719 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, unsigned __int64), \
8720 (this, ret, dest, base, fill, v))
8722 #if _MSVCP_VER != 80
8723 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_uint64
, 32)
8725 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_uint64
, 36)
8727 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8728 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
8730 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8731 char fmt
[7]; /* strlen("%+#lld")+1 */
8733 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8735 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
8736 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
8739 /* ?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 */
8740 /* ?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 */
8741 #if _MSVCP_VER != 80
8742 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_uint64
, 32)
8744 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_uint64
, 36)
8746 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8747 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
8749 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8750 char fmt
[7]; /* strlen("%+#lld")+1 */
8752 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8754 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
8755 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
8758 /* ?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 */
8759 /* ?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 */
8760 /* ?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 */
8761 /* ?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 */
8762 #if _MSVCP_VER != 80
8763 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_uint64
, 32)
8765 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_uint64
, 36)
8767 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8768 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
8770 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8771 return call_num_put_wchar_do_put_uint64(this, ret
, dest
, base
, fill
, v
);
8774 /* ?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 */
8775 /* ?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 */
8776 #if _MSVCP_VER <= 100
8777 #define call_num_put_wchar_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_wchar*, \
8778 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, bool), \
8779 (this, ret, dest, base, fill, v))
8781 #define call_num_put_wchar_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 40, ostreambuf_iterator_wchar*, \
8782 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, bool), \
8783 (this, ret, dest, base, fill, v))
8785 #if _MSVCP_VER != 80
8786 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_bool
, 28)
8788 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_bool
, 32)
8790 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8791 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, bool v
)
8793 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8795 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
8796 numpunct_wchar
*numpunct
= numpunct_wchar_use_facet(IOS_LOCALE(base
));
8797 basic_string_wchar str
;
8801 numpunct_wchar_truename(numpunct
, &str
);
8803 numpunct_wchar_falsename(numpunct
, &str
);
8805 len
= MSVCP_basic_string_wchar_length(&str
);
8806 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
8809 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
8810 num_put_wchar__Rep(this, &dest
, dest
, fill
, pad
);
8813 num_put_wchar__Put(this, &dest
, dest
, MSVCP_basic_string_wchar_c_str(&str
), len
);
8814 MSVCP_basic_string_wchar_dtor(&str
);
8815 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8818 return num_put_wchar_put_long(this, ret
, dest
, base
, fill
, v
);
8821 /* ?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 */
8822 /* ?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 */
8823 #if _MSVCP_VER != 80
8824 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_bool
, 28)
8826 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_bool
, 32)
8828 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8829 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, bool v
)
8831 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8833 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
8834 numpunct_wchar
*numpunct
= numpunct_short_use_facet(IOS_LOCALE(base
));
8835 basic_string_wchar str
;
8839 numpunct_wchar_truename(numpunct
, &str
);
8841 numpunct_wchar_falsename(numpunct
, &str
);
8843 len
= MSVCP_basic_string_wchar_length(&str
);
8844 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
8847 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
8848 num_put_wchar__Rep(this, &dest
, dest
, fill
, pad
);
8851 num_put_wchar__Put(this, &dest
, dest
, MSVCP_basic_string_wchar_c_str(&str
), len
);
8852 MSVCP_basic_string_wchar_dtor(&str
);
8853 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8856 return num_put_wchar_put_long(this, ret
, dest
, base
, fill
, v
);
8859 /* ?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 */
8860 /* ?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 */
8861 /* ?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 */
8862 /* ?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 */
8863 #if _MSVCP_VER != 80
8864 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_bool
, 28)
8866 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_bool
, 32)
8868 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8869 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, bool v
)
8871 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8872 return call_num_put_wchar_do_put_bool(this, ret
, dest
, base
, fill
, v
);
8875 /* ?id@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
8876 locale_id time_put_char_id
= {0};
8878 /* ??_7?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
8879 extern const vtable_ptr time_put_char_vtable
;
8881 /* ?_Init@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
8882 /* ?_Init@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
8883 DEFINE_THISCALL_WRAPPER(time_put_char__Init
, 8)
8884 void __thiscall
time_put_char__Init(time_put
*this, const _Locinfo
*locinfo
)
8886 TRACE("(%p %p)\n", this, locinfo
);
8887 _Locinfo__Gettnames(locinfo
, &this->time
);
8888 #if _MSVCP_VER <= 100
8889 _Locinfo__Getcvt(locinfo
, &this->cvt
);
8893 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
8894 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
8895 DEFINE_THISCALL_WRAPPER(time_put_char_ctor_locinfo
, 12)
8896 time_put
* __thiscall
time_put_char_ctor_locinfo(time_put
*this, const _Locinfo
*locinfo
, size_t refs
)
8898 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
8899 locale_facet_ctor_refs(&this->facet
, refs
);
8900 this->facet
.vtable
= &time_put_char_vtable
;
8901 time_put_char__Init(this, locinfo
);
8905 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
8906 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
8907 DEFINE_THISCALL_WRAPPER(time_put_char_ctor_refs
, 8)
8908 time_put
* __thiscall
time_put_char_ctor_refs(time_put
*this, size_t refs
)
8912 TRACE("(%p %Iu)\n", this, refs
);
8914 _Locinfo_ctor(&locinfo
);
8915 time_put_char_ctor_locinfo(this, &locinfo
, refs
);
8916 _Locinfo_dtor(&locinfo
);
8920 /* ??_F?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
8921 /* ??_F?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
8922 DEFINE_THISCALL_WRAPPER(time_put_char_ctor
, 4)
8923 time_put
* __thiscall
time_put_char_ctor(time_put
*this)
8925 return time_put_char_ctor_refs(this, 0);
8928 /* ??1?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
8929 /* ??1?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
8930 DEFINE_THISCALL_WRAPPER(time_put_char_dtor
, 4)
8931 void __thiscall
time_put_char_dtor(time_put
*this)
8933 TRACE("(%p)\n", this);
8934 _Timevec_dtor(&this->time
);
8937 DEFINE_THISCALL_WRAPPER(time_put_char_vector_dtor
, 8)
8938 time_put
* __thiscall
time_put_char_vector_dtor(time_put
*this, unsigned int flags
)
8940 TRACE("(%p %x)\n", this, flags
);
8942 /* we have an array, with the number of elements stored before the first object */
8943 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
8945 for(i
=*ptr
-1; i
>=0; i
--)
8946 time_put_char_dtor(this+i
);
8947 operator_delete(ptr
);
8949 time_put_char_dtor(this);
8951 operator_delete(this);
8957 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
8958 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
8959 size_t __cdecl
time_put_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
8961 TRACE("(%p %p)\n", facet
, loc
);
8963 if(facet
&& !*facet
) {
8966 *facet
= operator_new(sizeof(time_put
));
8967 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
8968 time_put_char_ctor_locinfo((time_put
*)*facet
, &locinfo
, 0);
8969 _Locinfo_dtor(&locinfo
);
8975 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
8976 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
8977 size_t __cdecl
time_put_char__Getcat_old(const locale_facet
**facet
)
8979 return time_put_char__Getcat(facet
, locale_classic());
8982 static time_put
* time_put_char_use_facet(const locale
*loc
)
8984 static time_put
*obj
= NULL
;
8987 const locale_facet
*fac
;
8989 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
8990 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_put_char_id
));
8992 _Lockit_dtor(&lock
);
8993 return (time_put
*)fac
;
8997 _Lockit_dtor(&lock
);
9001 time_put_char__Getcat(&fac
, loc
);
9002 obj
= (time_put
*)fac
;
9003 call_locale_facet__Incref(&obj
->facet
);
9004 locale_facet_register(&obj
->facet
);
9005 _Lockit_dtor(&lock
);
9010 #if _MSVCP_VER >= 70
9012 /* ?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 */
9013 /* ?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 */
9014 #if _MSVCP_VER != 80
9015 DEFINE_THISCALL_WRAPPER(time_put_char_do_put
, 36)
9017 DEFINE_THISCALL_WRAPPER(time_put_char_do_put
, 40)
9019 #if _MSVCP_VER <= 100
9020 #define call_time_put_char_do_put(this, ret, dest, base, fill, t, spec, mod) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_char*, \
9021 (const time_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const struct tm*, char, char), \
9022 (this, ret, dest, base, fill, t, spec, mod))
9024 #define call_time_put_char_do_put(this, ret, dest, base, fill, t, spec, mod) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_char*, \
9025 (const time_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const struct tm*, char, char), \
9026 (this, ret, dest, base, fill, t, spec, mod))
9028 ostreambuf_iterator_char
* __thiscall
time_put_char_do_put(const time_put
*this, ostreambuf_iterator_char
*ret
,
9029 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const struct tm
*t
, char spec
, char mod
)
9031 char buf
[64], fmt
[4], *p
= fmt
;
9034 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
9042 len
= _Strftime(buf
, sizeof(buf
), fmt
, t
, this->time
.timeptr
);
9043 for(i
=0; i
<len
; i
++)
9044 ostreambuf_iterator_char_put(&dest
, buf
[i
]);
9050 /* ?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 */
9051 /* ?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 */
9052 #if _MSVCP_VER != 80
9053 DEFINE_THISCALL_WRAPPER(time_put_char_put
, 36)
9055 DEFINE_THISCALL_WRAPPER(time_put_char_put
, 40)
9057 ostreambuf_iterator_char
* __thiscall
time_put_char_put(const time_put
*this, ostreambuf_iterator_char
*ret
,
9058 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const struct tm
*t
, char spec
, char mod
)
9060 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
9061 return call_time_put_char_do_put(this, ret
, dest
, base
, fill
, t
, spec
, mod
);
9064 /* ?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 */
9065 /* ?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 */
9066 #if _MSVCP_VER != 80
9067 DEFINE_THISCALL_WRAPPER(time_put_char_put_format
, 36)
9069 DEFINE_THISCALL_WRAPPER(time_put_char_put_format
, 40)
9071 ostreambuf_iterator_char
* __thiscall
time_put_char_put_format(const time_put
*this, ostreambuf_iterator_char
*ret
,
9072 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const struct tm
*t
, const char *pat
, const char *pat_end
)
9074 TRACE("(%p %p %p %c %p %s)\n", this, ret
, base
, fill
, t
, debugstr_an(pat
, pat_end
-pat
));
9076 while(pat
< pat_end
) {
9078 ostreambuf_iterator_char_put(&dest
, *pat
++);
9079 }else if(++pat
== pat_end
) {
9080 ostreambuf_iterator_char_put(&dest
, '%');
9081 }else if(*pat
=='#' && pat
+1==pat_end
) {
9082 ostreambuf_iterator_char_put(&dest
, '%');
9083 ostreambuf_iterator_char_put(&dest
, *pat
++);
9094 time_put_char_put(this, &dest
, dest
, base
, fill
, t
, *pat
++, mod
);
9102 #else /* _MSVCP_VER < 70 doesn't have the 'fill' parameter */
9104 /* ?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 */
9105 /* ?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 */
9106 DEFINE_THISCALL_WRAPPER(time_put_char_do_put
, 32)
9107 #define call_time_put_char_do_put(this, ret, dest, base, t, spec, mod) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_char*, \
9108 (const time_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, const struct tm*, char, char), \
9109 (this, ret, dest, base, t, spec, mod))
9110 ostreambuf_iterator_char
* __thiscall
time_put_char_do_put(const time_put
*this, ostreambuf_iterator_char
*ret
,
9111 ostreambuf_iterator_char dest
, ios_base
*base
, const struct tm
*t
, char spec
, char mod
)
9113 char buf
[64], fmt
[4], *p
= fmt
;
9116 TRACE("(%p %p %p %p %c %c)\n", this, ret
, base
, t
, spec
, mod
);
9124 len
= _Strftime(buf
, sizeof(buf
), fmt
, t
, this->time
.timeptr
);
9125 for(i
=0; i
<len
; i
++)
9126 ostreambuf_iterator_char_put(&dest
, buf
[i
]);
9132 /* ?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 */
9133 /* ?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 */
9134 DEFINE_THISCALL_WRAPPER(time_put_char_put
, 32)
9135 ostreambuf_iterator_char
* __thiscall
time_put_char_put(const time_put
*this, ostreambuf_iterator_char
*ret
,
9136 ostreambuf_iterator_char dest
, ios_base
*base
, const struct tm
*t
, char spec
, char mod
)
9138 TRACE("(%p %p %p %p %c %c)\n", this, ret
, base
, t
, spec
, mod
);
9139 return call_time_put_char_do_put(this, ret
, dest
, base
, t
, spec
, mod
);
9142 /* ?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 */
9143 /* ?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 */
9144 DEFINE_THISCALL_WRAPPER(time_put_char_put_format
, 32)
9145 ostreambuf_iterator_char
* __thiscall
time_put_char_put_format(const time_put
*this, ostreambuf_iterator_char
*ret
,
9146 ostreambuf_iterator_char dest
, ios_base
*base
, const struct tm
*t
, const char *pat
, const char *pat_end
)
9148 TRACE("(%p %p %p %p %s)\n", this, ret
, base
, t
, debugstr_an(pat
, pat_end
-pat
));
9150 while(pat
< pat_end
) {
9152 ostreambuf_iterator_char_put(&dest
, *pat
++);
9153 }else if(++pat
== pat_end
) {
9154 ostreambuf_iterator_char_put(&dest
, '%');
9155 }else if(*pat
=='#' && pat
+1==pat_end
) {
9156 ostreambuf_iterator_char_put(&dest
, '%');
9157 ostreambuf_iterator_char_put(&dest
, *pat
++);
9168 time_put_char_put(this, &dest
, dest
, base
, t
, *pat
++, mod
);
9176 #endif /* MSVCP_VER >= 70 */
9178 /* ?id@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
9179 locale_id time_put_wchar_id
= {0};
9180 /* ?id@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
9181 locale_id time_put_short_id
= {0};
9183 /* ??_7?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
9184 extern const vtable_ptr time_put_wchar_vtable
;
9185 /* ??_7?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
9186 extern const vtable_ptr time_put_short_vtable
;
9188 /* ?_Init@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
9189 /* ?_Init@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
9190 /* ?_Init@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
9191 /* ?_Init@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
9192 DEFINE_THISCALL_WRAPPER(time_put_wchar__Init
, 8)
9193 void __thiscall
time_put_wchar__Init(time_put
*this, const _Locinfo
*locinfo
)
9195 TRACE("(%p %p)\n", this, locinfo
);
9196 _Locinfo__Gettnames(locinfo
, &this->time
);
9197 #if _MSVCP_VER <= 100
9198 _Locinfo__Getcvt(locinfo
, &this->cvt
);
9202 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
9203 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
9204 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor_locinfo
, 12)
9205 time_put
* __thiscall
time_put_wchar_ctor_locinfo(time_put
*this, const _Locinfo
*locinfo
, size_t refs
)
9207 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
9208 locale_facet_ctor_refs(&this->facet
, refs
);
9209 this->facet
.vtable
= &time_put_wchar_vtable
;
9210 time_put_wchar__Init(this, locinfo
);
9214 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
9215 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
9216 DEFINE_THISCALL_WRAPPER(time_put_short_ctor_locinfo
, 12)
9217 time_put
* __thiscall
time_put_short_ctor_locinfo(time_put
*this, const _Locinfo
*locinfo
, size_t refs
)
9219 time_put_wchar_ctor_locinfo(this, locinfo
, refs
);
9220 this->facet
.vtable
= &time_put_short_vtable
;
9224 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAE@PBDI@Z */
9225 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAA@PEBD_K@Z */
9226 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor_name
, 12)
9227 time_put
* __thiscall
time_put_wchar_ctor_name(time_put
*this, const char *name
, size_t refs
)
9231 TRACE("(%p %s %Iu)\n", this, debugstr_a(name
), refs
);
9233 _Locinfo_ctor_cstr(&locinfo
, name
);
9234 time_put_wchar_ctor_locinfo(this, &locinfo
, refs
);
9235 _Locinfo_dtor(&locinfo
);
9239 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAE@PBDI@Z */
9240 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAA@PEBD_K@Z */
9241 DEFINE_THISCALL_WRAPPER(time_put_short_ctor_name
, 12)
9242 time_put
* __thiscall
time_put_short_ctor_name(time_put
*this, const char *name
, size_t refs
)
9244 time_put_wchar_ctor_name(this, name
, refs
);
9245 this->facet
.vtable
= &time_put_short_vtable
;
9249 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
9250 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
9251 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor_refs
, 8)
9252 time_put
* __thiscall
time_put_wchar_ctor_refs(time_put
*this, size_t refs
)
9256 TRACE("(%p %Iu)\n", this, refs
);
9258 _Locinfo_ctor(&locinfo
);
9259 time_put_wchar_ctor_locinfo(this, &locinfo
, refs
);
9260 _Locinfo_dtor(&locinfo
);
9264 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
9265 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
9266 DEFINE_THISCALL_WRAPPER(time_put_short_ctor_refs
, 8)
9267 time_put
* __thiscall
time_put_short_ctor_refs(time_put
*this, size_t refs
)
9269 time_put_wchar_ctor_refs(this, refs
);
9270 this->facet
.vtable
= &time_put_short_vtable
;
9274 /* ??_F?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
9275 /* ??_F?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
9276 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor
, 4)
9277 time_put
* __thiscall
time_put_wchar_ctor(time_put
*this)
9279 return time_put_wchar_ctor_refs(this, 0);
9282 /* ??_F?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ */
9283 /* ??_F?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ */
9284 DEFINE_THISCALL_WRAPPER(time_put_short_ctor
, 4)
9285 time_put
* __thiscall
time_put_short_ctor(time_put
*this)
9287 time_put_wchar_ctor(this);
9288 this->facet
.vtable
= &time_put_short_vtable
;
9292 /* ??1?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
9293 /* ??1?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
9294 /* ??1?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
9295 /* ??1?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
9296 DEFINE_THISCALL_WRAPPER(time_put_wchar_dtor
, 4)
9297 void __thiscall
time_put_wchar_dtor(time_put
*this)
9299 TRACE("(%p)\n", this);
9300 _Timevec_dtor(&this->time
);
9303 DEFINE_THISCALL_WRAPPER(time_put_wchar_vector_dtor
, 8)
9304 time_put
* __thiscall
time_put_wchar_vector_dtor(time_put
*this, unsigned int flags
)
9306 TRACE("(%p %x)\n", this, flags
);
9308 /* we have an array, with the number of elements stored before the first object */
9309 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
9311 for(i
=*ptr
-1; i
>=0; i
--)
9312 time_put_wchar_dtor(this+i
);
9313 operator_delete(ptr
);
9315 time_put_wchar_dtor(this);
9317 operator_delete(this);
9323 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
9324 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
9325 size_t __cdecl
time_put_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
9327 TRACE("(%p %p)\n", facet
, loc
);
9329 if(facet
&& !*facet
) {
9330 *facet
= operator_new(sizeof(time_put
));
9331 time_put_wchar_ctor_name((time_put
*)*facet
,
9332 locale_string_char_c_str(&loc
->ptr
->name
), 0);
9338 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
9339 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
9340 size_t __cdecl
time_put_wchar__Getcat_old(const locale_facet
**facet
)
9342 return time_put_wchar__Getcat(facet
, locale_classic());
9345 static time_put
* time_put_wchar_use_facet(const locale
*loc
)
9347 static time_put
*obj
= NULL
;
9350 const locale_facet
*fac
;
9352 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
9353 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_put_wchar_id
));
9355 _Lockit_dtor(&lock
);
9356 return (time_put
*)fac
;
9360 _Lockit_dtor(&lock
);
9364 time_put_wchar__Getcat(&fac
, loc
);
9365 obj
= (time_put
*)fac
;
9366 call_locale_facet__Incref(&obj
->facet
);
9367 locale_facet_register(&obj
->facet
);
9368 _Lockit_dtor(&lock
);
9373 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
9374 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
9375 size_t __cdecl
time_put_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
9377 TRACE("(%p %p)\n", facet
, loc
);
9379 if(facet
&& !*facet
) {
9380 *facet
= operator_new(sizeof(time_put
));
9381 time_put_short_ctor_name((time_put
*)*facet
,
9382 locale_string_char_c_str(&loc
->ptr
->name
), 0);
9388 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
9389 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
9390 size_t __cdecl
time_put_short__Getcat_old(const locale_facet
**facet
)
9392 return time_put_short__Getcat(facet
, locale_classic());
9395 static time_put
* time_put_short_use_facet(const locale
*loc
)
9397 static time_put
*obj
= NULL
;
9400 const locale_facet
*fac
;
9402 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
9403 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_put_short_id
));
9405 _Lockit_dtor(&lock
);
9406 return (time_put
*)fac
;
9410 _Lockit_dtor(&lock
);
9414 time_put_short__Getcat(&fac
, loc
);
9415 obj
= (time_put
*)fac
;
9416 call_locale_facet__Incref(&obj
->facet
);
9417 locale_facet_register(&obj
->facet
);
9418 _Lockit_dtor(&lock
);
9423 #if _MSVCP_VER >= 70
9425 /* ?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 */
9426 /* ?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 */
9427 /* ?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 */
9428 /* ?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 */
9429 #if _MSVCP_VER != 80
9430 DEFINE_THISCALL_WRAPPER(time_put_wchar_do_put
, 36)
9432 DEFINE_THISCALL_WRAPPER(time_put_wchar_do_put
, 40)
9434 #if _MSVCP_VER <= 100
9435 #define call_time_put_wchar_do_put(this, ret, dest, base, fill, t, spec, mod) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_wchar*, \
9436 (const time_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const struct tm*, char, char), \
9437 (this, ret, dest, base, fill, t, spec, mod))
9439 #define call_time_put_wchar_do_put(this, ret, dest, base, fill, t, spec, mod) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_wchar*, \
9440 (const time_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const struct tm*, char, char), \
9441 (this, ret, dest, base, fill, t, spec, mod))
9443 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_do_put(const time_put
*this,
9444 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9445 wchar_t fill
, const struct tm
*t
, char spec
, char mod
)
9447 char buf
[64], fmt
[4], *p
= fmt
;
9452 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
9460 #if _MSVCP_VER <= 100
9463 cvt
= &ctype_wchar_use_facet(base
->loc
)->cvt
;
9466 len
= _Strftime(buf
, sizeof(buf
), fmt
, t
, this->time
.timeptr
);
9467 for(i
=0; i
<len
; i
++) {
9468 c
= mb_to_wc(buf
[i
], cvt
);
9469 ostreambuf_iterator_wchar_put(&dest
, c
);
9476 /* ?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 */
9477 /* ?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 */
9478 /* ?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 */
9479 /* ?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 */
9480 #if _MSVCP_VER != 80
9481 DEFINE_THISCALL_WRAPPER(time_put_wchar_put
, 36)
9483 DEFINE_THISCALL_WRAPPER(time_put_wchar_put
, 40)
9485 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_put(const time_put
*this,
9486 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9487 wchar_t fill
, const struct tm
*t
, char spec
, char mod
)
9489 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
9490 return call_time_put_wchar_do_put(this, ret
, dest
, base
, fill
, t
, spec
, mod
);
9493 /* ?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 */
9494 /* ?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 */
9495 /* ?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 */
9496 /* ?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 */
9497 #if _MSVCP_VER != 80
9498 DEFINE_THISCALL_WRAPPER(time_put_wchar_put_format
, 36)
9500 DEFINE_THISCALL_WRAPPER(time_put_wchar_put_format
, 40)
9502 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_put_format(const time_put
*this,
9503 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9504 wchar_t fill
, const struct tm
*t
, const wchar_t *pat
, const wchar_t *pat_end
)
9510 TRACE("(%p %p %p %c %p %s)\n", this, ret
, base
, fill
, t
, debugstr_wn(pat
, pat_end
-pat
));
9512 #if _MSVCP_VER <= 100
9515 cvt
= &ctype_wchar_use_facet(base
->loc
)->cvt
;
9518 percent
= mb_to_wc('%', cvt
);
9519 while(pat
< pat_end
) {
9520 if(*pat
!= percent
) {
9521 ostreambuf_iterator_wchar_put(&dest
, *pat
++);
9522 }else if(++pat
== pat_end
) {
9523 ostreambuf_iterator_wchar_put(&dest
, percent
);
9524 }else if(_Wcrtomb(c
, *pat
, NULL
, cvt
)!=1 || (*c
=='#' && pat
+1==pat_end
)) {
9525 ostreambuf_iterator_wchar_put(&dest
, percent
);
9526 ostreambuf_iterator_wchar_put(&dest
, *pat
++);
9530 if(_Wcrtomb(c
, *pat
++, NULL
, cvt
) != 1) {
9531 ostreambuf_iterator_wchar_put(&dest
, percent
);
9532 ostreambuf_iterator_wchar_put(&dest
, *(pat
-2));
9533 ostreambuf_iterator_wchar_put(&dest
, *(pat
-1));
9535 time_put_wchar_put(this, &dest
, dest
, base
, fill
, t
, *c
, '#');
9538 time_put_wchar_put(this, &dest
, dest
, base
, fill
, t
, *c
, 0);
9547 #else /* _MSVCP_VER < 70 doesn't have the 'fill' parameter */
9549 /* ?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 */
9550 /* ?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 */
9551 DEFINE_THISCALL_WRAPPER(time_put_wchar_do_put
, 32)
9552 #define call_time_put_wchar_do_put(this, ret, dest, base, t, spec, mod) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_wchar*, \
9553 (const time_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, const struct tm*, char, char), \
9554 (this, ret, dest, base, t, spec, mod))
9555 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_do_put(const time_put
*this,
9556 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9557 const struct tm
*t
, char spec
, char mod
)
9559 char buf
[64], fmt
[4], *p
= fmt
;
9563 TRACE("(%p %p %p %p %c %c)\n", this, ret
, base
, t
, spec
, mod
);
9571 len
= _Strftime(buf
, sizeof(buf
), fmt
, t
, this->time
.timeptr
);
9572 for(i
=0; i
<len
; i
++) {
9573 c
= mb_to_wc(buf
[i
], &this->cvt
);
9574 ostreambuf_iterator_wchar_put(&dest
, c
);
9581 /* ?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 */
9582 /* ?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 */
9583 DEFINE_THISCALL_WRAPPER(time_put_wchar_put
, 32)
9584 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_put(const time_put
*this,
9585 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9586 const struct tm
*t
, char spec
, char mod
)
9588 TRACE("(%p %p %p %p %c %c)\n", this, ret
, base
, t
, spec
, mod
);
9589 return call_time_put_wchar_do_put(this, ret
, dest
, base
, t
, spec
, mod
);
9592 /* ?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 */
9593 /* ?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 */
9594 DEFINE_THISCALL_WRAPPER(time_put_wchar_put_format
, 32)
9595 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_put_format(const time_put
*this,
9596 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9597 const struct tm
*t
, const wchar_t *pat
, const wchar_t *pat_end
)
9599 wchar_t percent
= mb_to_wc('%', &this->cvt
);
9602 TRACE("(%p %p %p %p %s)\n", this, ret
, base
, t
, debugstr_wn(pat
, pat_end
-pat
));
9604 while(pat
< pat_end
) {
9605 if(*pat
!= percent
) {
9606 ostreambuf_iterator_wchar_put(&dest
, *pat
++);
9607 }else if(++pat
== pat_end
) {
9608 ostreambuf_iterator_wchar_put(&dest
, percent
);
9609 }else if(_Wcrtomb(c
, *pat
, NULL
, &this->cvt
)!=1 || (*c
=='#' && pat
+1==pat_end
)) {
9610 ostreambuf_iterator_wchar_put(&dest
, percent
);
9611 ostreambuf_iterator_wchar_put(&dest
, *pat
++);
9615 if(_Wcrtomb(c
, *pat
++, NULL
, &this->cvt
) != 1) {
9616 ostreambuf_iterator_wchar_put(&dest
, percent
);
9617 ostreambuf_iterator_wchar_put(&dest
, *(pat
-2));
9618 ostreambuf_iterator_wchar_put(&dest
, *(pat
-1));
9620 time_put_wchar_put(this, &dest
, dest
, base
, t
, *c
, '#');
9623 time_put_wchar_put(this, &dest
, dest
, base
, t
, *c
, 0);
9632 #endif /* _MSVCP_VER >= 70 */
9634 /* ?id@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
9635 locale_id time_get_char_id
= {0};
9637 /* ??_7?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
9638 extern const vtable_ptr time_get_char_vtable
;
9640 /* ?_Init@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
9641 /* ?_Init@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
9642 DEFINE_THISCALL_WRAPPER(time_get_char__Init
, 8)
9643 void __thiscall
time_get_char__Init(time_get_char
*this, const _Locinfo
*locinfo
)
9649 TRACE("(%p %p)\n", this, locinfo
);
9651 days
= _Locinfo__Getdays(locinfo
);
9652 len
= strlen(days
)+1;
9653 this->days
= operator_new(len
);
9654 memcpy((char*)this->days
, days
, len
);
9656 months
= _Locinfo__Getmonths(locinfo
);
9657 len
= strlen(months
)+1;
9658 this->months
= operator_new(len
);
9659 memcpy((char*)this->months
, months
, len
);
9661 this->dateorder
= _Locinfo__Getdateorder(locinfo
);
9662 _Locinfo__Getcvt(locinfo
, &this->cvt
);
9665 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
9666 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
9667 DEFINE_THISCALL_WRAPPER(time_get_char_ctor_locinfo
, 12)
9668 time_get_char
* __thiscall
time_get_char_ctor_locinfo(time_get_char
*this,
9669 const _Locinfo
*locinfo
, size_t refs
)
9671 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
9672 locale_facet_ctor_refs(&this->facet
, refs
);
9673 this->facet
.vtable
= &time_get_char_vtable
;
9674 time_get_char__Init(this, locinfo
);
9678 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAE@PBDI@Z */
9679 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAA@PEBD_K@Z */
9680 DEFINE_THISCALL_WRAPPER(time_get_char_ctor_name
, 12)
9681 time_get_char
* __thiscall
time_get_char_ctor_name(time_get_char
*this, const char *name
, size_t refs
)
9685 TRACE("(%p %s %Iu)\n", this, name
, refs
);
9687 _Locinfo_ctor_cstr(&locinfo
, name
);
9688 time_get_char_ctor_locinfo(this, &locinfo
, refs
);
9689 _Locinfo_dtor(&locinfo
);
9693 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
9694 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
9695 DEFINE_THISCALL_WRAPPER(time_get_char_ctor_refs
, 8)
9696 time_get_char
* __thiscall
time_get_char_ctor_refs(time_get_char
*this, size_t refs
)
9700 TRACE("(%p %Iu)\n", this, refs
);
9702 _Locinfo_ctor(&locinfo
);
9703 time_get_char_ctor_locinfo(this, &locinfo
, refs
);
9704 _Locinfo_dtor(&locinfo
);
9708 /* ??_F?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
9709 /* ??_F?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
9710 DEFINE_THISCALL_WRAPPER(time_get_char_ctor
, 4)
9711 time_get_char
* __thiscall
time_get_char_ctor(time_get_char
*this)
9713 return time_get_char_ctor_refs(this, 0);
9716 /* ?_Tidy@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AAEXXZ */
9717 /* ?_Tidy@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEAAXXZ */
9718 DEFINE_THISCALL_WRAPPER(time_get_char__Tidy
, 4)
9719 void __thiscall
time_get_char__Tidy(time_get_char
*this)
9721 TRACE("(%p)\n", this);
9723 operator_delete((char*)this->days
);
9724 operator_delete((char*)this->months
);
9727 /* ??1?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
9728 /* ??1?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
9729 DEFINE_THISCALL_WRAPPER(time_get_char_dtor
, 4) /* virtual */
9730 void __thiscall
time_get_char_dtor(time_get_char
*this)
9732 TRACE("(%p)\n", this);
9734 time_get_char__Tidy(this);
9737 DEFINE_THISCALL_WRAPPER(time_get_char_vector_dtor
, 8)
9738 time_get_char
* __thiscall
time_get_char_vector_dtor(time_get_char
*this, unsigned int flags
)
9740 TRACE("(%p %x)\n", this, flags
);
9742 /* we have an array, with the number of elements stored before the first object */
9743 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
9745 for(i
=*ptr
-1; i
>=0; i
--)
9746 time_get_char_dtor(this+i
);
9747 operator_delete(ptr
);
9749 time_get_char_dtor(this);
9751 operator_delete(this);
9757 /* ?_Getcat@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
9758 /* ?_Getcat@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
9759 unsigned int __cdecl
time_get_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
9761 TRACE("(%p %p)\n", facet
, loc
);
9763 if(facet
&& !*facet
) {
9766 *facet
= operator_new(sizeof(time_get_char
));
9767 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
9768 time_get_char_ctor_locinfo((time_get_char
*)*facet
, &locinfo
, 0);
9769 _Locinfo_dtor(&locinfo
);
9775 static time_get_char
* time_get_char_use_facet(const locale
*loc
)
9777 static time_get_char
*obj
= NULL
;
9780 const locale_facet
*fac
;
9782 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
9783 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_get_char_id
));
9785 _Lockit_dtor(&lock
);
9786 return (time_get_char
*)fac
;
9790 _Lockit_dtor(&lock
);
9794 time_get_char__Getcat(&fac
, loc
);
9795 obj
= (time_get_char
*)fac
;
9796 call_locale_facet__Incref(&obj
->facet
);
9797 locale_facet_register(&obj
->facet
);
9798 _Lockit_dtor(&lock
);
9803 /* ?_Getint@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@0HHAAH@Z */
9804 /* ?_Getint@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@0HHAEAH@Z */
9805 int __cdecl
time_get_char__Getint(const time_get_char
*this,
9806 istreambuf_iterator_char
*b
, istreambuf_iterator_char
*e
,
9807 int min_val
, int max_val
, int *val
)
9809 BOOL got_digit
= FALSE
;
9810 int len
= 0, ret
= 0;
9813 TRACE("(%p %p %p %d %d %p)\n", this, b
, e
, min_val
, max_val
, val
);
9815 istreambuf_iterator_char_val(b
);
9816 if(b
->strbuf
&& (b
->val
== '-' || b
->val
== '+'))
9818 buf
[len
++] = b
->val
;
9819 istreambuf_iterator_char_inc(b
);
9822 if (b
->strbuf
&& b
->val
== '0')
9826 istreambuf_iterator_char_inc(b
);
9828 while (b
->strbuf
&& b
->val
== '0')
9829 istreambuf_iterator_char_inc(b
);
9831 for (; b
->strbuf
&& b
->val
>= '0' && b
->val
<= '9';
9832 istreambuf_iterator_char_inc(b
))
9834 if(len
< ARRAY_SIZE(buf
)-1)
9841 ret
|= IOSTATE_eofbit
;
9842 if (got_digit
&& len
< ARRAY_SIZE(buf
)-1)
9847 v
= _Stolx(buf
, NULL
, 10, &err
);
9848 if(err
|| v
< min_val
|| v
> max_val
)
9849 ret
|= IOSTATE_failbit
;
9854 ret
|= IOSTATE_failbit
;
9858 /* ?do_date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AW4dateorder@time_base@2@XZ */
9859 /* ?do_date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AW4dateorder@time_base@2@XZ */
9860 DEFINE_THISCALL_WRAPPER(time_get_char_do_date_order
, 4) /* virtual */
9861 #if _MSVCP_VER <= 100
9862 #define call_time_get_char_do_date_order(this) CALL_VTBL_FUNC(this, 4, dateorder, (const time_get_char*), (this))
9864 #define call_time_get_char_do_date_order(this) CALL_VTBL_FUNC(this, 12, dateorder, (const time_get_char*), (this))
9866 dateorder __thiscall
time_get_char_do_date_order(const time_get_char
*this)
9868 TRACE("(%p)\n", this);
9869 return this->dateorder
;
9872 /* ?date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AW4dateorder@time_base@2@XZ */
9873 /* ?date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AW4dateorder@time_base@2@XZ */
9874 DEFINE_THISCALL_WRAPPER(time_get_char_date_order
, 4)
9875 dateorder __thiscall
time_get_char_date_order(const time_get_char
*this)
9877 return call_time_get_char_do_date_order(this);
9880 static int find_longest_match_char(istreambuf_iterator_char
*iter
, const char *str
)
9882 int i
, len
= 0, last_match
= -1, match
= -1;
9883 const char *p
, *end
;
9886 for(istreambuf_iterator_char_val(iter
); iter
->strbuf
&& len
<ARRAY_SIZE(buf
);
9887 istreambuf_iterator_char_inc(iter
))
9889 BOOL got_prefix
= FALSE
;
9891 buf
[len
++] = iter
->val
;
9894 for(p
=str
+1, i
=0; *p
; p
= (*end
? end
+1 : end
), i
++)
9896 end
= strchr(p
, ':');
9898 end
= p
+ strlen(p
);
9900 if (end
-p
>= len
&& !memcmp(p
, buf
, len
))
9913 istreambuf_iterator_char_inc(iter
);
9919 if (len
== ARRAY_SIZE(buf
))
9920 FIXME("temporary buffer is too small\n");
9926 /* ?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 */
9927 /* ?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 */
9928 DEFINE_THISCALL_WRAPPER(time_get_char_do_get_monthname
, 36) /* virtual */
9929 #if _MSVCP_VER <= 100
9930 #define call_time_get_char_do_get_monthname(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_char*, \
9931 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
9932 (this, ret, s, e, base, err, t))
9934 #define call_time_get_char_do_get_monthname(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_char*, \
9935 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
9936 (this, ret, s, e, base, err, t))
9938 istreambuf_iterator_char
* __thiscall
time_get_char_do_get_monthname(const time_get_char
*this,
9939 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
9940 ios_base
*base
, int *err
, struct tm
*t
)
9944 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
9946 if ((match
= find_longest_match_char(&s
, this->months
)) != -1)
9947 t
->tm_mon
= match
/ 2;
9949 *err
|= IOSTATE_failbit
;
9955 /* ?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 */
9956 /* ?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 */
9957 DEFINE_THISCALL_WRAPPER(time_get_char_get_monthname
, 36)
9958 istreambuf_iterator_char
* __thiscall
time_get_char_get_monthname(const time_get_char
*this,
9959 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
9960 ios_base
*base
, int *err
, struct tm
*t
)
9962 return call_time_get_char_do_get_monthname(this, ret
, s
, e
, base
, err
, t
);
9965 /* ?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 */
9966 /* ?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 */
9967 DEFINE_THISCALL_WRAPPER(time_get_char_do_get_time
, 36) /* virtual */
9968 #if _MSVCP_VER <= 100
9969 #define call_time_get_char_do_get_time(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_char*, \
9970 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
9971 (this, ret, s, e, base, err, t))
9973 #define call_time_get_char_do_get_time(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_char*, \
9974 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
9975 (this, ret, s, e, base, err, t))
9977 istreambuf_iterator_char
* __thiscall
time_get_char_do_get_time(const time_get_char
*this,
9978 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
9979 ios_base
*base
, int *err
, struct tm
*t
)
9981 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
9983 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 23, &t
->tm_hour
);
9984 if (*err
|| istreambuf_iterator_char_val(&s
)!=':')
9985 *err
|= IOSTATE_failbit
;
9989 istreambuf_iterator_char_inc(&s
);
9990 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 59, &t
->tm_min
);
9992 if (*err
|| istreambuf_iterator_char_val(&s
)!=':')
9993 *err
|= IOSTATE_failbit
;
9997 istreambuf_iterator_char_inc(&s
);
9998 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 59, &t
->tm_sec
);
10005 /* ?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 */
10006 /* ?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 */
10007 DEFINE_THISCALL_WRAPPER(time_get_char_get_time
, 36)
10008 istreambuf_iterator_char
* __thiscall
time_get_char_get_time(const time_get_char
*this,
10009 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10010 ios_base
*base
, int *err
, struct tm
*t
)
10012 return call_time_get_char_do_get_time(this, ret
, s
, e
, base
, err
, t
);
10015 /* ?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 */
10016 /* ?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 */
10017 DEFINE_THISCALL_WRAPPER(time_get_char_do_get_weekday
, 36) /* virtual */
10018 #if _MSVCP_VER <= 100
10019 #define call_time_get_char_do_get_weekday(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_char*, \
10020 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10021 (this, ret, s, e, base, err, t))
10023 #define call_time_get_char_do_get_weekday(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_char*, \
10024 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10025 (this, ret, s, e, base, err, t))
10027 istreambuf_iterator_char
* __thiscall
time_get_char_do_get_weekday(const time_get_char
*this,
10028 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10029 ios_base
*base
, int *err
, struct tm
*t
)
10033 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10035 if ((match
= find_longest_match_char(&s
, this->days
)) != -1)
10036 t
->tm_wday
= match
/ 2;
10038 *err
|= IOSTATE_failbit
;
10044 /* ?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 */
10045 /* ?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 */
10046 DEFINE_THISCALL_WRAPPER(time_get_char_get_weekday
, 36)
10047 istreambuf_iterator_char
* __thiscall
time_get_char_get_weekday(const time_get_char
*this,
10048 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10049 ios_base
*base
, int *err
, struct tm
*t
)
10051 return call_time_get_char_do_get_weekday(this, ret
, s
, e
, base
, err
, t
);
10054 /* ?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 */
10055 /* ?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 */
10056 DEFINE_THISCALL_WRAPPER(time_get_char_do_get_year
, 36) /* virtual */
10057 #if _MSVCP_VER <= 100
10058 #define call_time_get_char_do_get_year(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_char*, \
10059 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10060 (this, ret, s, e, base, err, t))
10062 #define call_time_get_char_do_get_year(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_char*, \
10063 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10064 (this, ret, s, e, base, err, t))
10066 istreambuf_iterator_char
* __thiscall
time_get_char_do_get_year(const time_get_char
*this,
10067 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10068 ios_base
*base
, int *err
, struct tm
*t
)
10072 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10074 /* The function supports only dates from [1900-2035] range */
10075 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 2035, &year
);
10076 if (!(*err
& IOSTATE_failbit
))
10081 *err
|= IOSTATE_failbit
;
10090 /* ?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 */
10091 /* ?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 */
10092 DEFINE_THISCALL_WRAPPER(time_get_char_get_year
, 36)
10093 istreambuf_iterator_char
* __thiscall
time_get_char_get_year(const time_get_char
*this,
10094 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10095 ios_base
*base
, int *err
, struct tm
*t
)
10097 return call_time_get_char_do_get_year(this, ret
, s
, e
, base
, err
, t
);
10100 static void skip_ws_char(ctype_char
*ctype
, istreambuf_iterator_char
*iter
)
10102 istreambuf_iterator_char_val(iter
);
10103 while(iter
->strbuf
&& ctype_char_is_ch(ctype
, _SPACE
, iter
->val
))
10104 istreambuf_iterator_char_inc(iter
);
10107 static void skip_date_delim_char(ctype_char
*ctype
, istreambuf_iterator_char
*iter
)
10109 skip_ws_char(ctype
, iter
);
10110 if(iter
->strbuf
&& (iter
->val
== '/' || iter
->val
== ':'))
10111 istreambuf_iterator_char_inc(iter
);
10112 skip_ws_char(ctype
, iter
);
10115 /* ?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 */
10116 /* ?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 */
10117 DEFINE_THISCALL_WRAPPER(time_get_char_do_get_date
, 36) /* virtual */
10118 #if _MSVCP_VER <= 100
10119 #define call_time_get_char_do_get_date(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_char*, \
10120 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10121 (this, ret, s, e, base, err, t))
10123 #define call_time_get_char_do_get_date(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_char*, \
10124 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10125 (this, ret, s, e, base, err, t))
10127 istreambuf_iterator_char
* __thiscall
time_get_char_do_get_date(const time_get_char
*this,
10128 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10129 ios_base
*base
, int *err
, struct tm
*t
)
10134 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10136 ctype
= ctype_char_use_facet(IOS_LOCALE(base
));
10138 order
= time_get_char_date_order(this);
10139 if(order
== DATEORDER_no_order
)
10140 order
= DATEORDER_mdy
;
10143 case DATEORDER_dmy
:
10144 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
10145 skip_date_delim_char(ctype
, &s
);
10147 *err
|= IOSTATE_failbit
;
10150 if(s
.strbuf
&& ctype_char_is_ch(ctype
, _DIGIT
, s
.val
)) {
10151 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
10154 time_get_char_get_monthname(this, &s
, s
, e
, base
, err
, t
);
10156 skip_date_delim_char(ctype
, &s
);
10158 *err
|= IOSTATE_failbit
;
10161 time_get_char_get_year(this, &s
, s
, e
, base
, err
, t
);
10163 case DATEORDER_mdy
:
10164 istreambuf_iterator_char_val(&s
);
10165 if(s
.strbuf
&& ctype_char_is_ch(ctype
, _DIGIT
, s
.val
)) {
10166 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
10169 time_get_char_get_monthname(this, &s
, s
, e
, base
, err
, t
);
10171 skip_date_delim_char(ctype
, &s
);
10173 *err
|= IOSTATE_failbit
;
10176 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
10177 skip_date_delim_char(ctype
, &s
);
10179 *err
|= IOSTATE_failbit
;
10182 time_get_char_get_year(this, &s
, s
, e
, base
, err
, t
);
10184 case DATEORDER_ymd
:
10185 time_get_char_get_year(this, &s
, s
, e
, base
, err
, t
);
10186 skip_date_delim_char(ctype
, &s
);
10188 *err
|= IOSTATE_failbit
;
10191 if(ctype_char_is_ch(ctype
, _DIGIT
, s
.val
)) {
10192 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
10195 time_get_char_get_monthname(this, &s
, s
, e
, base
, err
, t
);
10197 skip_date_delim_char(ctype
, &s
);
10199 *err
|= IOSTATE_failbit
;
10202 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
10204 case DATEORDER_ydm
:
10205 time_get_char_get_year(this, &s
, s
, e
, base
, err
, t
);
10206 skip_date_delim_char(ctype
, &s
);
10208 *err
|= IOSTATE_failbit
;
10211 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
10212 skip_date_delim_char(ctype
, &s
);
10214 *err
|= IOSTATE_failbit
;
10217 if(ctype_char_is_ch(ctype
, _DIGIT
, s
.val
)) {
10218 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
10221 time_get_char_get_monthname(this, &s
, s
, e
, base
, err
, t
);
10225 ERR("incorrect order value: %d\n", order
);
10230 *err
|= IOSTATE_eofbit
;
10235 /* ?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 */
10236 /* ?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 */
10237 DEFINE_THISCALL_WRAPPER(time_get_char_get_date
, 36)
10238 istreambuf_iterator_char
* __thiscall
time_get_char_get_date(const time_get_char
*this,
10239 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10240 ios_base
*base
, int *err
, struct tm
*t
)
10242 return call_time_get_char_do_get_date(this, ret
, s
, e
, base
, err
, t
);
10245 istreambuf_iterator_char
* __thiscall
time_get_char_get(const time_get_char
*,
10246 istreambuf_iterator_char
*, istreambuf_iterator_char
, istreambuf_iterator_char
,
10247 ios_base
*, int*, struct tm
*, char, char);
10249 /* ?_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 */
10250 /* ?_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 */
10251 DEFINE_THISCALL_WRAPPER(time_get_char__Getfmt
, 40)
10252 istreambuf_iterator_char
* __thiscall
time_get_char__Getfmt(const time_get_char
*this,
10253 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10254 ios_base
*base
, int *err
, struct tm
*t
, const char *fmt
)
10258 TRACE("(%p %p %p %p %p %s)\n", this, ret
, base
, err
, t
, fmt
);
10260 ctype
= ctype_char_use_facet(IOS_LOCALE(base
));
10261 istreambuf_iterator_char_val(&s
);
10264 if(ctype_char_is_ch(ctype
, _SPACE
, *fmt
)) {
10265 skip_ws_char(ctype
, &s
);
10271 *err
|= IOSTATE_failbit
;
10277 time_get_char_get(this, &s
, s
, e
, base
, err
, t
, *fmt
, 0);
10280 *err
|= IOSTATE_failbit
;
10282 istreambuf_iterator_char_inc(&s
);
10285 if(*err
& IOSTATE_failbit
)
10291 *err
|= IOSTATE_eofbit
;
10296 /* ?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 */
10297 /* ?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 */
10298 DEFINE_THISCALL_WRAPPER(time_get_char_do_get
, 44) /* virtual */
10299 #if _MSVCP_VER <= 100
10300 #define call_time_get_char_do_get(this, ret, s, e, base, err, t, fmt, mod) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_char*, \
10301 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*, char, char), \
10302 (this, ret, s, e, base, err, t, fmt, mod))
10304 #define call_time_get_char_do_get(this, ret, s, e, base, err, t, fmt, mod) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_char*, \
10305 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*, char, char), \
10306 (this, ret, s, e, base, err, t, fmt, mod))
10308 istreambuf_iterator_char
* __thiscall
time_get_char_do_get(const time_get_char
*this,
10309 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10310 ios_base
*base
, int *err
, struct tm
*t
, char fmt
, char mod
)
10314 TRACE("(%p %p %p %p %p %c %c)\n", this, ret
, base
, err
, t
, fmt
, mod
);
10316 ctype
= ctype_char_use_facet(IOS_LOCALE(base
));
10321 time_get_char_get_weekday(this, &s
, s
, e
, base
, err
, t
);
10326 time_get_char_get_monthname(this, &s
, s
, e
, base
, err
, t
);
10329 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%b %d %H:%M:%S %Y");
10332 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 99, &t
->tm_year
);
10333 if(!(*err
& IOSTATE_failbit
))
10334 t
->tm_year
= t
->tm_year
* 100 - 1900;
10338 if(fmt
== 'e') skip_ws_char(ctype
, &s
);
10339 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
10342 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%m/%d/%y");
10345 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%Y-%m-%d");
10348 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 23, &t
->tm_hour
);
10351 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 11, &t
->tm_hour
);
10354 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 366, &t
->tm_yday
);
10357 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
10358 if(!(*err
& IOSTATE_failbit
))
10362 *err
= time_get_char__Getint(this, &s
, &e
, 0, 59, &t
->tm_min
);
10366 skip_ws_char(ctype
, &s
);
10371 istreambuf_iterator_char_val(&s
);
10372 if(s
.strbuf
&& (s
.val
=='P' || s
.val
=='p'))
10374 else if (!s
.strbuf
|| (s
.val
!='A' && s
.val
!='a')) {
10375 *err
|= IOSTATE_failbit
;
10378 istreambuf_iterator_char_inc(&s
);
10379 if(!s
.strbuf
|| (s
.val
!='M' && s
.val
!='m')) {
10380 *err
|= IOSTATE_failbit
;
10383 istreambuf_iterator_char_inc(&s
);
10390 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%I:%M:%S %p");
10393 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%H:%M");
10396 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 59, &t
->tm_sec
);
10400 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%H:%M:%S");
10403 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 7, &t
->tm_wday
);
10404 if(!(*err
& IOSTATE_failbit
) && t
->tm_wday
==7)
10408 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 6, &t
->tm_wday
);
10411 time_get_char_get_date(this, &s
, s
, e
, base
, err
, t
);
10414 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 99, &t
->tm_year
);
10415 if(!(*err
& IOSTATE_failbit
) && t
->tm_year
<69)
10419 time_get_char_get_year(this, &s
, s
, e
, base
, err
, t
);
10422 FIXME("unrecognized format: %c\n", fmt
);
10423 *err
|= IOSTATE_failbit
;
10427 *err
|= IOSTATE_eofbit
;
10432 /* ?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 */
10433 /* ?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 */
10434 DEFINE_THISCALL_WRAPPER(time_get_char_get
, 44)
10435 istreambuf_iterator_char
* __thiscall
time_get_char_get(const time_get_char
*this,
10436 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10437 ios_base
*base
, int *err
, struct tm
*t
, char fmt
, char mod
)
10439 return call_time_get_char_do_get(this, ret
, s
, e
, base
, err
, t
, fmt
, mod
);
10442 /* ?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 */
10443 /* ?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 */
10444 DEFINE_THISCALL_WRAPPER(time_get_char_get_fmt
, 44)
10445 istreambuf_iterator_char
* __thiscall
time_get_char_get_fmt(const time_get_char
*this,
10446 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10447 ios_base
*base
, int *err
, struct tm
*t
, const char *fmtstart
, const char *fmtend
)
10451 TRACE("(%p %p %p %p %p %s)\n", this, ret
, base
, err
, t
, wine_dbgstr_an(fmtstart
, fmtend
-fmtstart
));
10453 ctype
= ctype_char_use_facet(IOS_LOCALE(base
));
10454 istreambuf_iterator_char_val(&s
);
10456 while(fmtstart
< fmtend
) {
10457 if(ctype_char_is_ch(ctype
, _SPACE
, *fmtstart
)) {
10458 skip_ws_char(ctype
, &s
);
10464 *err
|= IOSTATE_failbit
;
10468 if(*fmtstart
!= '%' || fmtstart
+1 >= fmtend
|| fmtstart
[1] == '%') {
10469 if(s
.val
!= *fmtstart
)
10470 *err
|= IOSTATE_failbit
;
10472 istreambuf_iterator_char_inc(&s
);
10473 if(*fmtstart
== '%')
10477 time_get_char_get(this, &s
, s
, e
, base
, err
, t
, *fmtstart
, 0);
10480 if(*err
& IOSTATE_failbit
)
10486 *err
|= IOSTATE_eofbit
;
10491 /* ?id@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
10492 locale_id time_get_wchar_id
= {0};
10494 /* ??_7?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
10495 extern const vtable_ptr time_get_wchar_vtable
;
10497 #if _MSVCP_VER >=110
10498 static wchar_t* create_time_get_str(const wchar_t *str
)
10503 len
= lstrlenW(str
)+1;
10504 ret
= operator_new(len
* sizeof(wchar_t));
10505 memcpy(ret
, str
, len
*sizeof(wchar_t));
10509 static wchar_t* create_time_get_str(const char *str
, const _Locinfo
*locinfo
)
10515 _Locinfo__Getcvt(locinfo
, &cvt
);
10516 len
= MultiByteToWideChar(cvt
.page
, 0, str
, -1, NULL
, 0);
10517 ret
= operator_new(len
*sizeof(WCHAR
));
10518 MultiByteToWideChar(cvt
.page
, 0, str
, -1, ret
, len
);
10523 /* ?_Init@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
10524 /* ?_Init@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
10525 DEFINE_THISCALL_WRAPPER(time_get_wchar__Init
, 8)
10526 void __thiscall
time_get_wchar__Init(time_get_wchar
*this, const _Locinfo
*locinfo
)
10528 TRACE("(%p %p)\n", this, locinfo
);
10530 #if _MSVCP_VER >=110
10531 this->days
= create_time_get_str(_Locinfo__W_Getdays(locinfo
));
10533 this->days
= create_time_get_str(_Locinfo__Getdays(locinfo
), locinfo
);
10536 #if _MSVCP_VER >=110
10537 this->months
= create_time_get_str(_Locinfo__W_Getmonths(locinfo
));
10539 this->months
= create_time_get_str(_Locinfo__Getmonths(locinfo
), locinfo
);
10542 this->dateorder
= _Locinfo__Getdateorder(locinfo
);
10543 _Locinfo__Getcvt(locinfo
, &this->cvt
);
10546 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
10547 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
10548 DEFINE_THISCALL_WRAPPER(time_get_wchar_ctor_locinfo
, 12)
10549 time_get_wchar
* __thiscall
time_get_wchar_ctor_locinfo(time_get_wchar
*this,
10550 const _Locinfo
*locinfo
, size_t refs
)
10552 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
10553 locale_facet_ctor_refs(&this->facet
, refs
);
10554 this->facet
.vtable
= &time_get_wchar_vtable
;
10555 time_get_wchar__Init(this, locinfo
);
10559 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAE@PBDI@Z */
10560 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAA@PEBD_K@Z */
10561 DEFINE_THISCALL_WRAPPER(time_get_wchar_ctor_name
, 12)
10562 time_get_wchar
* __thiscall
time_get_wchar_ctor_name(time_get_wchar
*this, const char *name
, size_t refs
)
10566 TRACE("(%p %s %Iu)\n", this, name
, refs
);
10568 _Locinfo_ctor_cstr(&locinfo
, name
);
10569 time_get_wchar_ctor_locinfo(this, &locinfo
, refs
);
10570 _Locinfo_dtor(&locinfo
);
10574 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
10575 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
10576 DEFINE_THISCALL_WRAPPER(time_get_wchar_ctor_refs
, 8)
10577 time_get_wchar
* __thiscall
time_get_wchar_ctor_refs(time_get_wchar
*this, size_t refs
)
10581 TRACE("(%p %Iu)\n", this, refs
);
10583 _Locinfo_ctor(&locinfo
);
10584 time_get_wchar_ctor_locinfo(this, &locinfo
, refs
);
10585 _Locinfo_dtor(&locinfo
);
10589 /* ??_F?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
10590 /* ??_F?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
10591 DEFINE_THISCALL_WRAPPER(time_get_wchar_ctor
, 4)
10592 time_get_wchar
* __thiscall
time_get_wchar_ctor(time_get_wchar
*this)
10594 return time_get_wchar_ctor_refs(this, 0);
10597 /* ?_Tidy@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AAEXXZ */
10598 /* ?_Tidy@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEAAXXZ */
10599 DEFINE_THISCALL_WRAPPER(time_get_wchar__Tidy
, 4)
10600 void __thiscall
time_get_wchar__Tidy(time_get_wchar
*this)
10602 TRACE("(%p)\n", this);
10604 operator_delete((wchar_t*)this->days
);
10605 operator_delete((wchar_t*)this->months
);
10608 /* ??1?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
10609 /* ??1?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
10610 DEFINE_THISCALL_WRAPPER(time_get_wchar_dtor
, 4) /* virtual */
10611 void __thiscall
time_get_wchar_dtor(time_get_wchar
*this)
10613 TRACE("(%p)\n", this);
10615 time_get_wchar__Tidy(this);
10618 DEFINE_THISCALL_WRAPPER(time_get_wchar_vector_dtor
, 8)
10619 time_get_wchar
* __thiscall
time_get_wchar_vector_dtor(time_get_wchar
*this, unsigned int flags
)
10621 TRACE("(%p %x)\n", this, flags
);
10623 /* we have an array, with the number of elements stored before the first object */
10624 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
10626 for(i
=*ptr
-1; i
>=0; i
--)
10627 time_get_wchar_dtor(this+i
);
10628 operator_delete(ptr
);
10630 time_get_wchar_dtor(this);
10632 operator_delete(this);
10638 /* ?_Getcat@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
10639 /* ?_Getcat@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
10640 unsigned int __cdecl
time_get_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
10642 TRACE("(%p %p)\n", facet
, loc
);
10644 if(facet
&& !*facet
) {
10647 *facet
= operator_new(sizeof(time_get_wchar
));
10648 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
10649 time_get_wchar_ctor_locinfo((time_get_wchar
*)*facet
, &locinfo
, 0);
10650 _Locinfo_dtor(&locinfo
);
10656 static time_get_wchar
* time_get_wchar_use_facet(const locale
*loc
)
10658 static time_get_wchar
*obj
= NULL
;
10661 const locale_facet
*fac
;
10663 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
10664 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_get_wchar_id
));
10666 _Lockit_dtor(&lock
);
10667 return (time_get_wchar
*)fac
;
10671 _Lockit_dtor(&lock
);
10675 time_get_wchar__Getcat(&fac
, loc
);
10676 obj
= (time_get_wchar
*)fac
;
10677 call_locale_facet__Incref(&obj
->facet
);
10678 locale_facet_register(&obj
->facet
);
10679 _Lockit_dtor(&lock
);
10684 /* ?_Getint@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@0HHAAH@Z */
10685 /* ?_Getint@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@0HHAEAH@Z */
10686 int __cdecl
time_get_wchar__Getint(const time_get_wchar
*this,
10687 istreambuf_iterator_wchar
*b
, istreambuf_iterator_wchar
*e
,
10688 int min_val
, int max_val
, int *val
)
10690 BOOL got_digit
= FALSE
;
10691 int len
= 0, ret
= 0;
10694 TRACE("(%p %p %p %d %d %p)\n", this, b
, e
, min_val
, max_val
, val
);
10696 istreambuf_iterator_wchar_val(b
);
10697 if(b
->strbuf
&& (b
->val
== '-' || b
->val
== '+'))
10699 buf
[len
++] = b
->val
;
10700 istreambuf_iterator_wchar_inc(b
);
10703 if (b
->strbuf
&& b
->val
== '0')
10707 istreambuf_iterator_wchar_inc(b
);
10709 while (b
->strbuf
&& b
->val
== '0')
10710 istreambuf_iterator_wchar_inc(b
);
10712 for (; b
->strbuf
&& b
->val
>= '0' && b
->val
<= '9';
10713 istreambuf_iterator_wchar_inc(b
))
10715 if(len
< ARRAY_SIZE(buf
)-1)
10722 ret
|= IOSTATE_eofbit
;
10723 if (got_digit
&& len
< ARRAY_SIZE(buf
)-1)
10728 v
= _Stolx(buf
, NULL
, 10, &err
);
10729 if(err
|| v
< min_val
|| v
> max_val
)
10730 ret
|= IOSTATE_failbit
;
10735 ret
|= IOSTATE_failbit
;
10739 /* ?do_date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AW4dateorder@time_base@2@XZ */
10740 /* ?do_date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AW4dateorder@time_base@2@XZ */
10741 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_date_order
, 4) /* virtual */
10742 #if _MSVCP_VER <= 100
10743 #define call_time_get_wchar_do_date_order(this) CALL_VTBL_FUNC(this, 4, dateorder, (const time_get_wchar*), (this))
10745 #define call_time_get_wchar_do_date_order(this) CALL_VTBL_FUNC(this, 12, dateorder, (const time_get_wchar*), (this))
10747 dateorder __thiscall
time_get_wchar_do_date_order(const time_get_wchar
*this)
10749 TRACE("(%p)\n", this);
10750 return this->dateorder
;
10753 /* ?date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AW4dateorder@time_base@2@XZ */
10754 /* ?date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AW4dateorder@time_base@2@XZ */
10755 DEFINE_THISCALL_WRAPPER(time_get_wchar_date_order
, 4)
10756 dateorder __thiscall
time_get_wchar_date_order(const time_get_wchar
*this)
10758 return call_time_get_wchar_do_date_order(this);
10761 static int find_longest_match_wchar(istreambuf_iterator_wchar
*iter
, const wchar_t *str
)
10763 int i
, len
= 0, last_match
= -1, match
= -1;
10764 const wchar_t *p
, *end
;
10767 for(istreambuf_iterator_wchar_val(iter
); iter
->strbuf
&& len
<ARRAY_SIZE(buf
);
10768 istreambuf_iterator_wchar_inc(iter
))
10770 BOOL got_prefix
= FALSE
;
10772 buf
[len
++] = iter
->val
;
10773 last_match
= match
;
10775 for(p
=str
+1, i
=0; *p
; p
= (*end
? end
+1 : end
), i
++)
10777 end
= wcschr(p
, ':');
10779 end
= p
+ lstrlenW(p
);
10781 if (end
-p
>= len
&& !memcmp(p
, buf
, len
*sizeof(wchar_t)))
10794 istreambuf_iterator_wchar_inc(iter
);
10800 if (len
== ARRAY_SIZE(buf
))
10801 FIXME("temporary buffer is too small\n");
10807 /* ?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 */
10808 /* ?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 */
10809 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get_monthname
, 36) /* virtual */
10810 #if _MSVCP_VER <= 100
10811 #define call_time_get_wchar_do_get_monthname(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_wchar*, \
10812 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
10813 (this, ret, s, e, base, err, t))
10815 #define call_time_get_wchar_do_get_monthname(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_wchar*, \
10816 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
10817 (this, ret, s, e, base, err, t))
10819 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get_monthname(const time_get_wchar
*this,
10820 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
10821 ios_base
*base
, int *err
, struct tm
*t
)
10825 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10827 if ((match
= find_longest_match_wchar(&s
, this->months
)) != -1)
10828 t
->tm_mon
= match
/ 2;
10830 *err
|= IOSTATE_failbit
;
10836 /* ?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 */
10837 /* ?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 */
10838 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_monthname
, 36)
10839 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_monthname(const time_get_wchar
*this,
10840 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
10841 ios_base
*base
, int *err
, struct tm
*t
)
10843 return call_time_get_wchar_do_get_monthname(this, ret
, s
, e
, base
, err
, t
);
10846 /* ?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 */
10847 /* ?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 */
10848 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get_time
, 36) /* virtual */
10849 #if _MSVCP_VER <= 100
10850 #define call_time_get_wchar_do_get_time(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_wchar*, \
10851 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
10852 (this, ret, s, e, base, err, t))
10854 #define call_time_get_wchar_do_get_time(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_wchar*, \
10855 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
10856 (this, ret, s, e, base, err, t))
10858 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get_time(const time_get_wchar
*this,
10859 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
10860 ios_base
*base
, int *err
, struct tm
*t
)
10862 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10864 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 23, &t
->tm_hour
);
10865 if (*err
|| istreambuf_iterator_wchar_val(&s
)!=':')
10866 *err
|= IOSTATE_failbit
;
10870 istreambuf_iterator_wchar_inc(&s
);
10871 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 59, &t
->tm_min
);
10873 if (*err
|| istreambuf_iterator_wchar_val(&s
)!=':')
10874 *err
|= IOSTATE_failbit
;
10878 istreambuf_iterator_wchar_inc(&s
);
10879 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 59, &t
->tm_sec
);
10886 /* ?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 */
10887 /* ?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 */
10888 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_time
, 36)
10889 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_time(const time_get_wchar
*this,
10890 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
10891 ios_base
*base
, int *err
, struct tm
*t
)
10893 return call_time_get_wchar_do_get_time(this, ret
, s
, e
, base
, err
, t
);
10896 /* ?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 */
10897 /* ?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 */
10898 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get_weekday
, 36) /* virtual */
10899 #if _MSVCP_VER <= 100
10900 #define call_time_get_wchar_do_get_weekday(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_wchar*, \
10901 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
10902 (this, ret, s, e, base, err, t))
10904 #define call_time_get_wchar_do_get_weekday(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_wchar*, \
10905 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
10906 (this, ret, s, e, base, err, t))
10908 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get_weekday(const time_get_wchar
*this,
10909 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
10910 ios_base
*base
, int *err
, struct tm
*t
)
10914 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10916 if ((match
= find_longest_match_wchar(&s
, this->days
)) != -1)
10917 t
->tm_wday
= match
/ 2;
10919 *err
|= IOSTATE_failbit
;
10925 /* ?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 */
10926 /* ?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 */
10927 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_weekday
, 36)
10928 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_weekday(const time_get_wchar
*this,
10929 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
10930 ios_base
*base
, int *err
, struct tm
*t
)
10932 return call_time_get_wchar_do_get_weekday(this, ret
, s
, e
, base
, err
, t
);
10935 /* ?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 */
10936 /* ?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 */
10937 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get_year
, 36) /* virtual */
10938 #if _MSVCP_VER <= 100
10939 #define call_time_get_wchar_do_get_year(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_wchar*, \
10940 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
10941 (this, ret, s, e, base, err, t))
10943 #define call_time_get_wchar_do_get_year(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_wchar*, \
10944 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
10945 (this, ret, s, e, base, err, t))
10947 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get_year(const time_get_wchar
*this,
10948 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
10949 ios_base
*base
, int *err
, struct tm
*t
)
10953 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10955 /* The function supports only dates from [1900-2035] range */
10956 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 2035, &year
);
10957 if (!(*err
& IOSTATE_failbit
))
10962 *err
|= IOSTATE_failbit
;
10971 /* ?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 */
10972 /* ?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 */
10973 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_year
, 36)
10974 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_year(const time_get_wchar
*this,
10975 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
10976 ios_base
*base
, int *err
, struct tm
*t
)
10978 return call_time_get_wchar_do_get_year(this, ret
, s
, e
, base
, err
, t
);
10981 static void skip_ws_wchar(ctype_wchar
*ctype
, istreambuf_iterator_wchar
*iter
)
10983 istreambuf_iterator_wchar_val(iter
);
10984 while(iter
->strbuf
&& ctype_wchar_is_ch(ctype
, _SPACE
, iter
->val
))
10985 istreambuf_iterator_wchar_inc(iter
);
10988 static void skip_date_delim_wchar(ctype_wchar
*ctype
, istreambuf_iterator_wchar
*iter
)
10990 skip_ws_wchar(ctype
, iter
);
10991 if(iter
->strbuf
&& (iter
->val
== '/' || iter
->val
== ':'))
10992 istreambuf_iterator_wchar_inc(iter
);
10993 skip_ws_wchar(ctype
, iter
);
10996 /* ?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 */
10997 /* ?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 */
10998 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get_date
, 36) /* virtual */
10999 #if _MSVCP_VER <= 100
11000 #define call_time_get_wchar_do_get_date(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 12, 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 #define call_time_get_wchar_do_get_date(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_wchar*, \
11005 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
11006 (this, ret, s, e, base, err, t))
11008 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get_date(const time_get_wchar
*this,
11009 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11010 ios_base
*base
, int *err
, struct tm
*t
)
11012 ctype_wchar
*ctype
;
11015 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
11017 ctype
= ctype_wchar_use_facet(IOS_LOCALE(base
));
11019 order
= time_get_wchar_date_order(this);
11020 if(order
== DATEORDER_no_order
)
11021 order
= DATEORDER_mdy
;
11024 case DATEORDER_dmy
:
11025 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
11026 skip_date_delim_wchar(ctype
, &s
);
11028 *err
|= IOSTATE_failbit
;
11031 if(s
.strbuf
&& ctype_wchar_is_ch(ctype
, _DIGIT
, s
.val
)) {
11032 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
11035 time_get_wchar_get_monthname(this, &s
, s
, e
, base
, err
, t
);
11037 skip_date_delim_wchar(ctype
, &s
);
11039 *err
|= IOSTATE_failbit
;
11042 time_get_wchar_get_year(this, &s
, s
, e
, base
, err
, t
);
11044 case DATEORDER_mdy
:
11045 istreambuf_iterator_wchar_val(&s
);
11046 if(s
.strbuf
&& ctype_wchar_is_ch(ctype
, _DIGIT
, s
.val
)) {
11047 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
11050 time_get_wchar_get_monthname(this, &s
, s
, e
, base
, err
, t
);
11052 skip_date_delim_wchar(ctype
, &s
);
11054 *err
|= IOSTATE_failbit
;
11057 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
11058 skip_date_delim_wchar(ctype
, &s
);
11060 *err
|= IOSTATE_failbit
;
11063 time_get_wchar_get_year(this, &s
, s
, e
, base
, err
, t
);
11065 case DATEORDER_ymd
:
11066 time_get_wchar_get_year(this, &s
, s
, e
, base
, err
, t
);
11067 skip_date_delim_wchar(ctype
, &s
);
11069 *err
|= IOSTATE_failbit
;
11072 if(ctype_wchar_is_ch(ctype
, _DIGIT
, s
.val
)) {
11073 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
11076 time_get_wchar_get_monthname(this, &s
, s
, e
, base
, err
, t
);
11078 skip_date_delim_wchar(ctype
, &s
);
11080 *err
|= IOSTATE_failbit
;
11083 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
11085 case DATEORDER_ydm
:
11086 time_get_wchar_get_year(this, &s
, s
, e
, base
, err
, t
);
11087 skip_date_delim_wchar(ctype
, &s
);
11089 *err
|= IOSTATE_failbit
;
11092 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
11093 skip_date_delim_wchar(ctype
, &s
);
11095 *err
|= IOSTATE_failbit
;
11098 if(ctype_wchar_is_ch(ctype
, _DIGIT
, s
.val
)) {
11099 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
11102 time_get_wchar_get_monthname(this, &s
, s
, e
, base
, err
, t
);
11106 ERR("incorrect order value: %d\n", order
);
11111 *err
|= IOSTATE_eofbit
;
11116 /* ?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 */
11117 /* ?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 */
11118 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_date
, 36)
11119 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_date(const time_get_wchar
*this,
11120 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11121 ios_base
*base
, int *err
, struct tm
*t
)
11123 return call_time_get_wchar_do_get_date(this, ret
, s
, e
, base
, err
, t
);
11126 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get(const time_get_wchar
*,
11127 istreambuf_iterator_wchar
*, istreambuf_iterator_wchar
, istreambuf_iterator_wchar
,
11128 ios_base
*, int*, struct tm
*, char, char);
11130 /* ?_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 */
11131 /* ?_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 */
11132 DEFINE_THISCALL_WRAPPER(time_get_wchar__Getfmt
, 40)
11133 istreambuf_iterator_wchar
* __thiscall
time_get_wchar__Getfmt(const time_get_wchar
*this,
11134 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11135 ios_base
*base
, int *err
, struct tm
*t
, const char *fmt
)
11137 ctype_wchar
*ctype
;
11139 TRACE("(%p %p %p %p %p %s)\n", this, ret
, base
, err
, t
, fmt
);
11141 ctype
= ctype_wchar_use_facet(IOS_LOCALE(base
));
11142 istreambuf_iterator_wchar_val(&s
);
11146 skip_ws_wchar(ctype
, &s
);
11152 *err
|= IOSTATE_failbit
;
11158 time_get_wchar_get(this, &s
, s
, e
, base
, err
, t
, *fmt
, 0);
11161 *err
|= IOSTATE_failbit
;
11163 istreambuf_iterator_wchar_inc(&s
);
11166 if(*err
& IOSTATE_failbit
)
11172 *err
|= IOSTATE_eofbit
;
11177 /* ?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 */
11178 /* ?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 */
11179 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get
, 44) /* virtual */
11180 #if _MSVCP_VER <= 100
11181 #define call_time_get_wchar_do_get(this, ret, s, e, base, err, t, fmt, mod) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_wchar*, \
11182 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*, char, char), \
11183 (this, ret, s, e, base, err, t, fmt, mod))
11185 #define call_time_get_wchar_do_get(this, ret, s, e, base, err, t, fmt, mod) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_wchar*, \
11186 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*, char, char), \
11187 (this, ret, s, e, base, err, t, fmt, mod))
11189 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get(const time_get_wchar
*this,
11190 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11191 ios_base
*base
, int *err
, struct tm
*t
, char fmt
, char mod
)
11193 ctype_wchar
*ctype
;
11195 TRACE("(%p %p %p %p %p %c %c)\n", this, ret
, base
, err
, t
, fmt
, mod
);
11197 ctype
= ctype_wchar_use_facet(IOS_LOCALE(base
));
11202 time_get_wchar_get_weekday(this, &s
, s
, e
, base
, err
, t
);
11207 time_get_wchar_get_monthname(this, &s
, s
, e
, base
, err
, t
);
11210 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%b %d %H:%M:%S %Y");
11213 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 99, &t
->tm_year
);
11214 if(!(*err
& IOSTATE_failbit
))
11215 t
->tm_year
= t
->tm_year
* 100 - 1900;
11219 if(fmt
== 'e') skip_ws_wchar(ctype
, &s
);
11220 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
11223 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%m/%d/%y");
11226 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%Y-%m-%d");
11229 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 23, &t
->tm_hour
);
11232 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 11, &t
->tm_hour
);
11235 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 366, &t
->tm_yday
);
11238 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
11239 if(!(*err
& IOSTATE_failbit
))
11243 *err
= time_get_wchar__Getint(this, &s
, &e
, 0, 59, &t
->tm_min
);
11247 skip_ws_wchar(ctype
, &s
);
11252 istreambuf_iterator_wchar_val(&s
);
11253 if(s
.strbuf
&& (s
.val
=='P' || s
.val
=='p'))
11255 else if (!s
.strbuf
|| (s
.val
!='A' && s
.val
!='a')) {
11256 *err
|= IOSTATE_failbit
;
11259 istreambuf_iterator_wchar_inc(&s
);
11260 if(!s
.strbuf
|| (s
.val
!='M' && s
.val
!='m')) {
11261 *err
|= IOSTATE_failbit
;
11264 istreambuf_iterator_wchar_inc(&s
);
11271 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%I:%M:%S %p");
11274 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%H:%M");
11277 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 59, &t
->tm_sec
);
11281 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%H:%M:%S");
11284 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 7, &t
->tm_wday
);
11285 if(!(*err
& IOSTATE_failbit
) && t
->tm_wday
==7)
11289 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 6, &t
->tm_wday
);
11292 time_get_wchar_get_date(this, &s
, s
, e
, base
, err
, t
);
11295 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 99, &t
->tm_year
);
11296 if(!(*err
& IOSTATE_failbit
) && t
->tm_year
<69)
11300 time_get_wchar_get_year(this, &s
, s
, e
, base
, err
, t
);
11303 FIXME("unrecognized format: %c\n", fmt
);
11304 *err
|= IOSTATE_failbit
;
11308 *err
|= IOSTATE_eofbit
;
11313 /* ?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 */
11314 /* ?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 */
11315 DEFINE_THISCALL_WRAPPER(time_get_wchar_get
, 44)
11316 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get(const time_get_wchar
*this,
11317 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11318 ios_base
*base
, int *err
, struct tm
*t
, char fmt
, char mod
)
11320 return call_time_get_wchar_do_get(this, ret
, s
, e
, base
, err
, t
, fmt
, mod
);
11323 /* ?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 */
11324 /* ?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 */
11325 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_fmt
, 44)
11326 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_fmt(const time_get_wchar
*this,
11327 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11328 ios_base
*base
, int *err
, struct tm
*t
, const wchar_t *fmtstart
, const wchar_t *fmtend
)
11330 ctype_wchar
*ctype
;
11332 TRACE("(%p %p %p %p %p %s)\n", this, ret
, base
, err
, t
, wine_dbgstr_wn(fmtstart
, fmtend
-fmtstart
));
11334 ctype
= ctype_wchar_use_facet(IOS_LOCALE(base
));
11335 istreambuf_iterator_wchar_val(&s
);
11337 while(fmtstart
< fmtend
) {
11338 if(ctype_wchar_is_ch(ctype
, _SPACE
, *fmtstart
)) {
11339 skip_ws_wchar(ctype
, &s
);
11345 *err
|= IOSTATE_failbit
;
11349 if(*fmtstart
!= '%' || fmtstart
+1 >= fmtend
|| fmtstart
[1] == '%') {
11350 if(s
.val
!= *fmtstart
)
11351 *err
|= IOSTATE_failbit
;
11353 istreambuf_iterator_wchar_inc(&s
);
11354 if(*fmtstart
== '%')
11358 time_get_wchar_get(this, &s
, s
, e
, base
, err
, t
, *fmtstart
, 0);
11361 if(*err
& IOSTATE_failbit
)
11367 *err
|= IOSTATE_eofbit
;
11372 /* ??_7_Locimp@locale@std@@6B@ */
11373 extern const vtable_ptr locale__Locimp_vtable
;
11375 /* ??0_Locimp@locale@std@@AAE@_N@Z */
11376 /* ??0_Locimp@locale@std@@AEAA@_N@Z */
11377 DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor_transparent
, 8)
11378 locale__Locimp
* __thiscall
locale__Locimp_ctor_transparent(locale__Locimp
*this, bool transparent
)
11380 TRACE("(%p %d)\n", this, transparent
);
11382 memset(this, 0, sizeof(locale__Locimp
));
11383 locale_facet_ctor_refs(&this->facet
, 1);
11384 this->facet
.vtable
= &locale__Locimp_vtable
;
11385 this->transparent
= transparent
;
11386 locale_string_char_ctor_cstr(&this->name
, "*");
11390 /* ??_F_Locimp@locale@std@@QAEXXZ */
11391 /* ??_F_Locimp@locale@std@@QEAAXXZ */
11392 DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor
, 4)
11393 locale__Locimp
* __thiscall
locale__Locimp_ctor(locale__Locimp
*this)
11395 return locale__Locimp_ctor_transparent(this, FALSE
);
11398 /* ??0_Locimp@locale@std@@AAE@ABV012@@Z */
11399 /* ??0_Locimp@locale@std@@AEAA@AEBV012@@Z */
11400 DEFINE_THISCALL_WRAPPER(locale__Locimp_copy_ctor
, 8)
11401 locale__Locimp
* __thiscall
locale__Locimp_copy_ctor(locale__Locimp
*this, const locale__Locimp
*copy
)
11406 TRACE("(%p %p)\n", this, copy
);
11408 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
11409 memcpy(this, copy
, sizeof(locale__Locimp
));
11410 locale_facet_ctor_refs(&this->facet
, 1);
11411 this->facet
.vtable
= &locale__Locimp_vtable
;
11412 if(copy
->facetvec
) {
11413 this->facetvec
= operator_new(copy
->facet_cnt
*sizeof(locale_facet
*));
11414 for(i
=0; i
<this->facet_cnt
; i
++)
11416 this->facetvec
[i
] = copy
->facetvec
[i
];
11417 if(this->facetvec
[i
])
11418 call_locale_facet__Incref(this->facetvec
[i
]);
11421 locale_string_char_copy_ctor(&this->name
, ©
->name
);
11422 _Lockit_dtor(&lock
);
11426 /* ?_Locimp_ctor@_Locimp@locale@std@@CAXPAV123@ABV123@@Z */
11427 /* ?_Locimp_ctor@_Locimp@locale@std@@CAXPEAV123@AEBV123@@Z */
11428 locale__Locimp
* __cdecl
locale__Locimp__Locimp_ctor(locale__Locimp
*this, const locale__Locimp
*copy
)
11430 return locale__Locimp_copy_ctor(this, copy
);
11433 /* ??1_Locimp@locale@std@@MAE@XZ */
11434 /* ??1_Locimp@locale@std@@MEAA@XZ */
11435 DEFINE_THISCALL_WRAPPER(locale__Locimp_dtor
, 4)
11436 void __thiscall
locale__Locimp_dtor(locale__Locimp
*this)
11440 TRACE("(%p)\n", this);
11442 locale_facet_dtor(&this->facet
);
11443 for(i
=0; i
<this->facet_cnt
; i
++)
11444 if(this->facetvec
[i
] && call_locale_facet__Decref(this->facetvec
[i
]))
11445 call_locale_facet_vector_dtor(this->facetvec
[i
], 1);
11447 operator_delete(this->facetvec
);
11448 locale_string_char_dtor(&this->name
);
11451 /* ?_Locimp_dtor@_Locimp@locale@std@@CAXPAV123@@Z */
11452 /* ?_Locimp_dtor@_Locimp@locale@std@@CAXPEAV123@@Z */
11453 void __cdecl
locale__Locimp__Locimp_dtor(locale__Locimp
*this)
11455 locale__Locimp_dtor(this);
11458 DEFINE_THISCALL_WRAPPER(locale__Locimp_vector_dtor
, 8)
11459 locale__Locimp
* __thiscall
locale__Locimp_vector_dtor(locale__Locimp
*this, unsigned int flags
)
11461 TRACE("(%p %x)\n", this, flags
);
11463 /* we have an array, with the number of elements stored before the first object */
11464 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
11466 for(i
=*ptr
-1; i
>=0; i
--)
11467 locale__Locimp_dtor(this+i
);
11468 operator_delete(ptr
);
11470 locale__Locimp_dtor(this);
11472 operator_delete(this);
11478 /* ?_New_Locimp@_Locimp@locale@std@@CAPAV123@ABV123@@Z */
11479 /* ?_New_Locimp@_Locimp@locale@std@@CAPEAV123@AEBV123@@Z */
11480 locale__Locimp
* __cdecl
locale__Locimp__New_Locimp(const locale__Locimp
*copy
)
11482 locale__Locimp
*ret
;
11484 TRACE("(%p)\n", copy
);
11486 ret
= operator_new(sizeof(locale__Locimp
));
11487 return locale__Locimp_copy_ctor(ret
, copy
);
11490 /* ?_New_Locimp@_Locimp@locale@std@@CAPAV123@_N@Z */
11491 /* ?_New_Locimp@_Locimp@locale@std@@CAPEAV123@_N@Z */
11492 locale__Locimp
* __cdecl
locale__Locimp__New_Locimp_transparent(bool transparent
)
11494 locale__Locimp
*ret
;
11496 TRACE("(%x)\n", transparent
);
11498 ret
= operator_new(sizeof(locale__Locimp
));
11499 return locale__Locimp_ctor_transparent(ret
, transparent
);
11502 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z */
11503 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPEAV123@PEAVfacet@23@_K@Z */
11504 void __cdecl
locale__Locimp__Locimp_Addfac(locale__Locimp
*locimp
, locale_facet
*facet
, size_t id
)
11508 TRACE("(%p %p %Iu)\n", locimp
, facet
, id
);
11510 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
11511 if(id
>= locimp
->facet_cnt
) {
11512 size_t new_size
= id
+1;
11513 locale_facet
**new_facetvec
;
11518 new_facetvec
= operator_new(sizeof(locale_facet
*)*new_size
);
11519 memset(new_facetvec
, 0, sizeof(locale_facet
*)*new_size
);
11520 memcpy(new_facetvec
, locimp
->facetvec
, sizeof(locale_facet
*)*locimp
->facet_cnt
);
11521 operator_delete(locimp
->facetvec
);
11522 locimp
->facetvec
= new_facetvec
;
11523 locimp
->facet_cnt
= new_size
;
11526 if(locimp
->facetvec
[id
] && call_locale_facet__Decref(locimp
->facetvec
[id
]))
11527 call_locale_facet_vector_dtor(locimp
->facetvec
[id
], 1);
11529 locimp
->facetvec
[id
] = facet
;
11531 call_locale_facet__Incref(facet
);
11532 _Lockit_dtor(&lock
);
11535 /* ?_Addfac@_Locimp@locale@std@@AAEXPAVfacet@23@I@Z */
11536 /* ?_Addfac@_Locimp@locale@std@@AEAAXPEAVfacet@23@_K@Z */
11537 DEFINE_THISCALL_WRAPPER(locale__Locimp__Addfac
, 12)
11538 void __thiscall
locale__Locimp__Addfac(locale__Locimp
*this, locale_facet
*facet
, size_t id
)
11540 locale__Locimp__Locimp_Addfac(this, facet
, id
);
11543 /* ?_Clocptr_func@_Locimp@locale@std@@CAAAPAV123@XZ */
11544 /* ?_Clocptr_func@_Locimp@locale@std@@CAAEAPEAV123@XZ */
11545 locale__Locimp
** __cdecl
locale__Locimp__Clocptr_func(void)
11551 /* ?_Makeushloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
11552 /* ?_Makeushloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
11553 /* List of missing facets:
11554 * messages, money_get, money_put, moneypunct, moneypunct, time_get
11556 void __cdecl
locale__Locimp__Makeushloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
11558 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
11560 if(cat
& (1<<(ctype_short__Getcat(NULL
, NULL
)-1))) {
11561 ctype_wchar
*ctype
;
11564 ctype
= ctype_short_use_facet(loc
);
11566 ctype
= operator_new(sizeof(ctype_wchar
));
11567 ctype_short_ctor_locinfo(ctype
, locinfo
, 0);
11569 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_short_id
));
11572 if(cat
& (1<<(num_get_short__Getcat(NULL
, NULL
)-1))) {
11576 numget
= num_get_short_use_facet(loc
);
11578 numget
= operator_new(sizeof(num_get
));
11579 num_get_short_ctor_locinfo(numget
, locinfo
, 0);
11581 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_short_id
));
11584 if(cat
& (1<<(num_put_short__Getcat(NULL
, NULL
)-1))) {
11588 numput
= num_put_short_use_facet(loc
);
11590 numput
= operator_new(sizeof(num_put
));
11591 num_put_short_ctor_locinfo(numput
, locinfo
, 0);
11593 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_short_id
));
11596 if(cat
& (1<<(numpunct_short__Getcat(NULL
, NULL
)-1))) {
11597 numpunct_wchar
*numpunct
;
11600 numpunct
= numpunct_short_use_facet(loc
);
11602 numpunct
= operator_new(sizeof(numpunct_wchar
));
11603 numpunct_short_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
11605 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_short_id
));
11608 if(cat
& (1<<(collate_short__Getcat(NULL
, NULL
)-1))) {
11612 c
= collate_short_use_facet(loc
);
11614 c
= operator_new(sizeof(collate
));
11615 collate_short_ctor_locinfo(c
, locinfo
, 0);
11617 locale__Locimp__Addfac(locimp
, &c
->facet
, locale_id_operator_size_t(&collate_short_id
));
11620 if(cat
& (1<<(time_put_short__Getcat(NULL
, NULL
)-1))) {
11624 t
= time_put_short_use_facet(loc
);
11626 t
= operator_new(sizeof(time_put
));
11627 time_put_short_ctor_locinfo(t
, locinfo
, 0);
11629 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_put_short_id
));
11632 if(cat
& (1<<(codecvt_short__Getcat(NULL
, NULL
)-1))) {
11633 codecvt_wchar
*codecvt
;
11636 codecvt
= codecvt_short_use_facet(loc
);
11638 codecvt
= operator_new(sizeof(codecvt_wchar
));
11639 codecvt_short_ctor_locinfo(codecvt
, locinfo
, 0);
11641 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_short_id
));
11645 /* ?_Makewloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
11646 /* ?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
11647 /* List of missing facets:
11648 * messages, money_get, money_put, moneypunct, moneypunct
11650 void __cdecl
locale__Locimp__Makewloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
11652 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
11654 if(cat
& (1<<(ctype_wchar__Getcat(NULL
, NULL
)-1))) {
11655 ctype_wchar
*ctype
;
11658 ctype
= ctype_wchar_use_facet(loc
);
11660 ctype
= operator_new(sizeof(ctype_wchar
));
11661 ctype_wchar_ctor_locinfo(ctype
, locinfo
, 0);
11663 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_wchar_id
));
11666 if(cat
& (1<<(num_get_wchar__Getcat(NULL
, NULL
)-1))) {
11670 numget
= num_get_wchar_use_facet(loc
);
11672 numget
= operator_new(sizeof(num_get
));
11673 num_get_wchar_ctor_locinfo(numget
, locinfo
, 0);
11675 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_wchar_id
));
11678 if(cat
& (1<<(num_put_wchar__Getcat(NULL
, NULL
)-1))) {
11682 numput
= num_put_wchar_use_facet(loc
);
11684 numput
= operator_new(sizeof(num_put
));
11685 num_put_wchar_ctor_locinfo(numput
, locinfo
, 0);
11687 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_wchar_id
));
11690 if(cat
& (1<<(numpunct_wchar__Getcat(NULL
, NULL
)-1))) {
11691 numpunct_wchar
*numpunct
;
11694 numpunct
= numpunct_wchar_use_facet(loc
);
11696 numpunct
= operator_new(sizeof(numpunct_wchar
));
11697 numpunct_wchar_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
11699 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_wchar_id
));
11702 if(cat
& (1<<(collate_wchar__Getcat(NULL
, NULL
)-1))) {
11706 c
= collate_wchar_use_facet(loc
);
11708 c
= operator_new(sizeof(collate
));
11709 collate_wchar_ctor_locinfo(c
, locinfo
, 0);
11711 locale__Locimp__Addfac(locimp
, &c
->facet
, locale_id_operator_size_t(&collate_wchar_id
));
11714 if(cat
& (1<<(time_get_wchar__Getcat(NULL
, NULL
)-1))) {
11718 t
= time_get_wchar_use_facet(loc
);
11720 t
= operator_new(sizeof(time_get_wchar
));
11721 time_get_wchar_ctor_locinfo(t
, locinfo
, 0);
11723 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_get_wchar_id
));
11726 if(cat
& (1<<(time_put_wchar__Getcat(NULL
, NULL
)-1))) {
11730 t
= time_put_wchar_use_facet(loc
);
11732 t
= operator_new(sizeof(time_put
));
11733 time_put_wchar_ctor_locinfo(t
, locinfo
, 0);
11735 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_put_wchar_id
));
11738 if(cat
& (1<<(codecvt_wchar__Getcat(NULL
, NULL
)-1))) {
11739 codecvt_wchar
*codecvt
;
11742 codecvt
= codecvt_wchar_use_facet(loc
);
11744 codecvt
= operator_new(sizeof(codecvt_wchar
));
11745 codecvt_wchar_ctor_locinfo(codecvt
, locinfo
, 0);
11747 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_wchar_id
));
11751 /* ?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
11752 /* ?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
11753 /* List of missing facets:
11754 * messages, money_get, money_put, moneypunct, moneypunct
11756 void __cdecl
locale__Locimp__Makexloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
11758 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
11760 if(cat
& (1<<(ctype_char__Getcat(NULL
, NULL
)-1))) {
11764 ctype
= ctype_char_use_facet(loc
);
11766 ctype
= operator_new(sizeof(ctype_char
));
11767 ctype_char_ctor_locinfo(ctype
, locinfo
, 0);
11769 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_char_id
));
11772 if(cat
& (1<<(num_get_char__Getcat(NULL
, NULL
)-1))) {
11776 numget
= num_get_char_use_facet(loc
);
11778 numget
= operator_new(sizeof(num_get
));
11779 num_get_char_ctor_locinfo(numget
, locinfo
, 0);
11781 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_char_id
));
11784 if(cat
& (1<<(num_put_char__Getcat(NULL
, NULL
)-1))) {
11788 numput
= num_put_char_use_facet(loc
);
11790 numput
= operator_new(sizeof(num_put
));
11791 num_put_char_ctor_locinfo(numput
, locinfo
, 0);
11793 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_char_id
));
11796 if(cat
& (1<<(numpunct_char__Getcat(NULL
, NULL
)-1))) {
11797 numpunct_char
*numpunct
;
11800 numpunct
= numpunct_char_use_facet(loc
);
11802 numpunct
= operator_new(sizeof(numpunct_char
));
11803 numpunct_char_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
11805 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_char_id
));
11808 if(cat
& (1<<(collate_char__Getcat(NULL
, NULL
)-1))) {
11812 c
= collate_char_use_facet(loc
);
11814 c
= operator_new(sizeof(collate
));
11815 collate_char_ctor_locinfo(c
, locinfo
, 0);
11817 locale__Locimp__Addfac(locimp
, &c
->facet
, locale_id_operator_size_t(&collate_char_id
));
11820 if(cat
& (1<<(time_get_char__Getcat(NULL
, NULL
)-1))) {
11824 t
= time_get_char_use_facet(loc
);
11826 t
= operator_new(sizeof(time_get_char
));
11827 time_get_char_ctor_locinfo(t
, locinfo
, 0);
11829 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_get_char_id
));
11832 if(cat
& (1<<(time_put_char__Getcat(NULL
, NULL
)-1))) {
11836 t
= time_put_char_use_facet(loc
);
11838 t
= operator_new(sizeof(time_put
));
11839 time_put_char_ctor_locinfo(t
, locinfo
, 0);
11841 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_put_char_id
));
11844 if(cat
& (1<<(codecvt_char__Getcat(NULL
, NULL
)-1))) {
11845 codecvt_char
*codecvt
;
11848 codecvt
= codecvt_char_use_facet(loc
);
11850 codecvt
= operator_new(sizeof(codecvt_char
));
11851 codecvt_char_ctor_locinfo(codecvt
, locinfo
, 0);
11853 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_char_id
));
11857 /* ?_Makeloc@_Locimp@locale@std@@CAPAV123@ABV_Locinfo@3@HPAV123@PBV23@@Z */
11858 /* ?_Makeloc@_Locimp@locale@std@@CAPEAV123@AEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
11859 locale__Locimp
* __cdecl
locale__Locimp__Makeloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
11861 TRACE("(%p %d %p %p)\n", locinfo
, cat
, locimp
, loc
);
11863 locale__Locimp__Makexloc(locinfo
, cat
, locimp
, loc
);
11864 locale__Locimp__Makewloc(locinfo
, cat
, locimp
, loc
);
11865 locale__Locimp__Makeushloc(locinfo
, cat
, locimp
, loc
);
11867 locimp
->catmask
|= cat
;
11868 locale_string_char_assign(&locimp
->name
, &locinfo
->newlocname
);
11872 /* ??0locale@std@@AAE@PAV_Locimp@01@@Z */
11873 /* ??0locale@std@@AEAA@PEAV_Locimp@01@@Z */
11874 DEFINE_THISCALL_WRAPPER(locale_ctor_locimp
, 8)
11875 locale
* __thiscall
locale_ctor_locimp(locale
*this, locale__Locimp
*locimp
)
11877 TRACE("(%p %p)\n", this, locimp
);
11878 /* Don't change locimp reference counter */
11879 this->ptr
= locimp
;
11883 /* ?_Init@locale@std@@CAPAV_Locimp@12@XZ */
11884 /* ?_Init@locale@std@@CAPEAV_Locimp@12@XZ */
11885 locale__Locimp
* __cdecl
locale__Init(void)
11891 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
11892 if(global_locale
) {
11893 _Lockit_dtor(&lock
);
11894 return global_locale
;
11897 global_locale
= operator_new(sizeof(locale__Locimp
));
11898 locale__Locimp_ctor(global_locale
);
11899 global_locale
->catmask
= (1<<(LC_MAX
+1))-1;
11900 locale_string_char_dtor(&global_locale
->name
);
11901 locale_string_char_ctor_cstr(&global_locale
->name
, "C");
11903 locale__Locimp__Clocptr
= global_locale
;
11904 global_locale
->facet
.refs
++;
11905 locale_ctor_locimp(&classic_locale
, locale__Locimp__Clocptr
);
11906 _Lockit_dtor(&lock
);
11908 return global_locale
;
11911 /* ?_Init@locale@std@@CAPAV_Locimp@12@_N@Z */
11912 /* ?_Init@locale@std@@CAPEAV_Locimp@12@_N@Z */
11913 locale__Locimp
* __cdecl
locale__Init_ref(bool inc_ref
)
11915 locale__Locimp
*ret
;
11918 TRACE("(%x)\n", inc_ref
);
11920 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
11921 if(inc_ref
&& global_locale
) {
11922 call_locale_facet__Incref(&global_locale
->facet
);
11923 _Lockit_dtor(&lock
);
11924 return global_locale
;
11927 ret
= locale__Init();
11928 _Lockit_dtor(&lock
);
11932 /* ?_Iscloc@locale@std@@QBE_NXZ */
11933 /* ?_Iscloc@locale@std@@QEBA_NXZ */
11934 DEFINE_THISCALL_WRAPPER(locale__Iscloc
, 4)
11935 bool __thiscall
locale__Iscloc(const locale
*this)
11937 TRACE("(%p)\n", this);
11938 return this->ptr
== locale__Locimp__Clocptr
;
11941 /* ??0locale@std@@QAE@ABV01@0H@Z */
11942 /* ??0locale@std@@QEAA@AEBV01@0H@Z */
11943 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_locale
, 16)
11944 locale
* __thiscall
locale_ctor_locale_locale(locale
*this, const locale
*loc
, const locale
*other
, category cat
)
11948 TRACE("(%p %p %p %d)\n", this, loc
, other
, cat
);
11950 this->ptr
= operator_new(sizeof(locale__Locimp
));
11951 locale__Locimp_copy_ctor(this->ptr
, loc
->ptr
);
11953 _Locinfo_ctor_cat_cstr(&locinfo
, loc
->ptr
->catmask
, locale_string_char_c_str(&loc
->ptr
->name
));
11954 _Locinfo__Addcats(&locinfo
, cat
& other
->ptr
->catmask
, locale_string_char_c_str(&other
->ptr
->name
));
11955 locale__Locimp__Makeloc(&locinfo
, cat
, this->ptr
, other
);
11956 _Locinfo_dtor(&locinfo
);
11961 /* ??0locale@std@@QAE@ABV01@@Z */
11962 /* ??0locale@std@@QEAA@AEBV01@@Z */
11963 DEFINE_THISCALL_WRAPPER(locale_copy_ctor
, 8)
11964 locale
* __thiscall
locale_copy_ctor(locale
*this, const locale
*copy
)
11966 TRACE("(%p %p)\n", this, copy
);
11967 this->ptr
= copy
->ptr
;
11968 call_locale_facet__Incref(&this->ptr
->facet
);
11972 /* ??0locale@std@@QAE@ABV01@PBDH@Z */
11973 /* ??0locale@std@@QEAA@AEBV01@PEBDH@Z */
11974 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_cstr
, 16)
11975 locale
* __thiscall
locale_ctor_locale_cstr(locale
*this, const locale
*loc
, const char *locname
, category cat
)
11979 TRACE("(%p %p %s %d)\n", this, loc
, locname
, cat
);
11981 _Locinfo_ctor_cat_cstr(&locinfo
, cat
, locname
);
11982 if(!memcmp(locale_string_char_c_str(&locinfo
.newlocname
), "*", 2)) {
11983 _Locinfo_dtor(&locinfo
);
11984 operator_delete(this->ptr
);
11985 _Xruntime_error("bad locale name");
11988 this->ptr
= operator_new(sizeof(locale__Locimp
));
11989 locale__Locimp_copy_ctor(this->ptr
, loc
->ptr
);
11991 locale__Locimp__Makeloc(&locinfo
, cat
, this->ptr
, NULL
);
11992 _Locinfo_dtor(&locinfo
);
11996 /* ??0locale@std@@QAE@PBDH@Z */
11997 /* ??0locale@std@@QEAA@PEBDH@Z */
11998 DEFINE_THISCALL_WRAPPER(locale_ctor_cstr
, 12)
11999 locale
* __thiscall
locale_ctor_cstr(locale
*this, const char *locname
, category cat
)
12003 TRACE("(%p %s %d)\n", this, locname
, cat
);
12005 this->ptr
= operator_new(sizeof(locale__Locimp
));
12006 locale__Locimp_ctor(this->ptr
);
12010 _Locinfo_ctor_cat_cstr(&locinfo
, cat
, locname
);
12011 if(!memcmp(locale_string_char_c_str(&locinfo
.newlocname
), "*", 2)) {
12012 _Locinfo_dtor(&locinfo
);
12013 operator_delete(this->ptr
);
12014 _Xruntime_error("bad locale name");
12017 locale__Locimp__Makeloc(&locinfo
, cat
, this->ptr
, NULL
);
12018 _Locinfo_dtor(&locinfo
);
12023 /* ??0locale@std@@QAE@W4_Uninitialized@1@@Z */
12024 /* ??0locale@std@@QEAA@W4_Uninitialized@1@@Z */
12025 DEFINE_THISCALL_WRAPPER(locale_ctor_uninitialized
, 8)
12026 locale
* __thiscall
locale_ctor_uninitialized(locale
*this, int uninitialized
)
12028 TRACE("(%p)\n", this);
12033 /* ??0locale@std@@QAE@XZ */
12034 /* ??0locale@std@@QEAA@XZ */
12035 DEFINE_THISCALL_WRAPPER(locale_ctor
, 4)
12036 locale
* __thiscall
locale_ctor(locale
*this)
12038 TRACE("(%p)\n", this);
12039 this->ptr
= locale__Init();
12040 call_locale_facet__Incref(&this->ptr
->facet
);
12044 /* ??1locale@std@@QAE@XZ */
12045 /* ??1locale@std@@QEAA@XZ */
12046 DEFINE_THISCALL_WRAPPER(locale_dtor
, 4)
12047 void __thiscall
locale_dtor(locale
*this)
12049 TRACE("(%p)\n", this);
12050 if(this->ptr
&& call_locale_facet__Decref(&this->ptr
->facet
))
12052 locale__Locimp_dtor(this->ptr
);
12053 operator_delete(this->ptr
);
12057 /* ??4locale@std@@QAEAAV01@ABV01@@Z */
12058 /* ??4locale@std@@QEAAAEAV01@AEBV01@@Z */
12059 DEFINE_THISCALL_WRAPPER(locale_operator_assign
, 8)
12060 locale
* __thiscall
locale_operator_assign(locale
*this, const locale
*loc
)
12062 FIXME("(%p %p) stub\n", this, loc
);
12066 /* ??8locale@std@@QBE_NABV01@@Z */
12067 /* ??8locale@std@@QEBA_NAEBV01@@Z */
12068 DEFINE_THISCALL_WRAPPER(locale_operator_equal
, 8)
12069 bool __thiscall
locale_operator_equal(const locale
*this, const locale
*loc
)
12071 FIXME("(%p %p) stub\n", this, loc
);
12075 /* ??9locale@std@@QBE_NABV01@@Z */
12076 /* ??9locale@std@@QEBA_NAEBV01@@Z */
12077 DEFINE_THISCALL_WRAPPER(locale_operator_not_equal
, 8)
12078 bool __thiscall
locale_operator_not_equal(const locale
*this, locale
const *loc
)
12080 FIXME("(%p %p) stub\n", this, loc
);
12084 /* ?_Addfac@locale@std@@QAEAAV12@PAVfacet@12@II@Z */
12085 /* ?_Addfac@locale@std@@QEAAAEAV12@PEAVfacet@12@_K1@Z */
12086 DEFINE_THISCALL_WRAPPER(locale__Addfac
, 16)
12087 locale
* __thiscall
locale__Addfac(locale
*this, locale_facet
*facet
, size_t id
, size_t catmask
)
12089 TRACE("(%p %p %Iu %Iu)\n", this, facet
, id
, catmask
);
12091 if(this->ptr
->facet
.refs
> 1) {
12092 locale__Locimp
*new_ptr
= operator_new(sizeof(locale__Locimp
));
12093 locale__Locimp_copy_ctor(new_ptr
, this->ptr
);
12094 call_locale_facet__Decref(&this->ptr
->facet
);
12095 this->ptr
= new_ptr
;
12098 locale__Locimp__Addfac(this->ptr
, facet
, id
);
12101 locale_string_char_dtor(&this->ptr
->name
);
12102 locale_string_char_ctor_cstr(&this->ptr
->name
, "*");
12107 /* ?_Getfacet@locale@std@@QBEPBVfacet@12@I_N@Z */
12108 /* ?_Getfacet@locale@std@@QEBAPEBVfacet@12@_K_N@Z */
12109 DEFINE_THISCALL_WRAPPER(locale__Getfacet_bool
, 12)
12110 const locale_facet
* __thiscall
locale__Getfacet_bool(const locale
*this,
12111 size_t id
, bool allow_transparent
)
12115 TRACE("(%p %Iu)\n", this, id
);
12117 fac
= id
< this->ptr
->facet_cnt
? this->ptr
->facetvec
[id
] : NULL
;
12118 if(fac
|| !this->ptr
->transparent
|| !allow_transparent
)
12121 return id
< global_locale
->facet_cnt
? global_locale
->facetvec
[id
] : NULL
;
12124 /* ?_Getfacet@locale@std@@QBEPBVfacet@12@I@Z */
12125 /* ?_Getfacet@locale@std@@QEBAPEBVfacet@12@_K@Z */
12126 DEFINE_THISCALL_WRAPPER(locale__Getfacet
, 8)
12127 const locale_facet
* __thiscall
locale__Getfacet(const locale
*this, size_t id
)
12129 return locale__Getfacet_bool( this, id
, TRUE
);
12132 /* ?_Getgloballocale@locale@std@@CAPAV_Locimp@12@XZ */
12133 /* ?_Getgloballocale@locale@std@@CAPEAV_Locimp@12@XZ */
12134 locale__Locimp
* __cdecl
locale__Getgloballocale(void)
12137 return global_locale
;
12140 /* ?_Setgloballocale@locale@std@@CAXPAX@Z */
12141 /* ?_Setgloballocale@locale@std@@CAXPEAX@Z */
12142 void __cdecl
locale__Setgloballocale(void *locimp
)
12144 TRACE("(%p)\n", locimp
);
12145 global_locale
= locimp
;
12148 /* ?classic@locale@std@@SAABV12@XZ */
12149 /* ?classic@locale@std@@SAAEBV12@XZ */
12150 const locale
* __cdecl
locale_classic(void)
12154 return &classic_locale
;
12157 /* ?empty@locale@std@@SA?AV12@XZ */
12158 locale
* __cdecl
locale_empty(locale
*ret
)
12164 ret
->ptr
= operator_new(sizeof(locale__Locimp
));
12165 locale__Locimp_ctor_transparent(ret
->ptr
, TRUE
);
12169 /* ?global@locale@std@@SA?AV12@ABV12@@Z */
12170 /* ?global@locale@std@@SA?AV12@AEBV12@@Z */
12171 locale
* __cdecl
locale_global(locale
*ret
, const locale
*loc
)
12176 TRACE("(%p %p)\n", loc
, ret
);
12178 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
12181 if(loc
->ptr
!= global_locale
) {
12182 call_locale_facet__Decref(&global_locale
->facet
);
12183 global_locale
= loc
->ptr
;
12184 call_locale_facet__Incref(&global_locale
->facet
);
12186 for(i
=LC_ALL
+1; i
<=LC_MAX
; i
++) {
12187 if((global_locale
->catmask
& (1<<(i
-1))) == 0)
12189 setlocale(i
, locale_string_char_c_str(&global_locale
->name
));
12192 _Lockit_dtor(&lock
);
12196 #if _MSVCP_VER < 100
12198 /* ?_Getname@_Locinfo@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
12199 /* ?_Getname@_Locinfo@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
12200 DEFINE_THISCALL_WRAPPER(_Locinfo__Getname
, 8)
12201 basic_string_char
* __thiscall
_Locinfo__Getname(const _Locinfo
*this, basic_string_char
*ret
)
12203 TRACE("(%p)\n", this);
12205 MSVCP_basic_string_char_copy_ctor(ret
, &this->newlocname
);
12209 /* ?name@locale@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
12210 /* ?name@locale@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
12211 DEFINE_THISCALL_WRAPPER(locale_name
, 8)
12212 basic_string_char
* __thiscall
locale_name(const locale
*this, basic_string_char
*ret
)
12214 TRACE( "(%p)\n", this);
12215 MSVCP_basic_string_char_copy_ctor(ret
, &this->ptr
->name
);
12221 /* ?_Getname@_Locinfo@std@@QBEPBDXZ */
12222 /* ?_Getname@_Locinfo@std@@QEBAPEBDXZ */
12223 DEFINE_THISCALL_WRAPPER(_Locinfo__Getname
, 4)
12224 const char * __thiscall
_Locinfo__Getname( const _Locinfo
*this )
12226 return locale_string_char_c_str( &this->newlocname
);
12229 #endif /* _MSVCP_VER < 100 */
12232 wctrans_t __cdecl
wctrans(const char *property
)
12234 static const char str_tolower
[] = "tolower";
12235 static const char str_toupper
[] = "toupper";
12237 if(!strcmp(property
, str_tolower
))
12239 if(!strcmp(property
, str_toupper
))
12245 wint_t __cdecl
towctrans(wint_t c
, wctrans_t category
)
12248 return towupper(c
);
12249 return towlower(c
);
12252 #if _MSVCP_VER <= 71
12254 wint_t __cdecl
btowc(int c
)
12260 if (c
== EOF
|| _Mbrtowc( &ret
, &ch
, 1, &state
, NULL
) != 1) return WEOF
;
12265 size_t __cdecl
mbrlen(const char *str
, size_t n
, mbstate_t *state
)
12267 static int local_state
;
12269 if (!state
) state
= &local_state
;
12270 return _Mbrtowc( NULL
, str
, n
, state
, NULL
);
12274 size_t __cdecl
mbrtowc(wchar_t *dst
, const char *str
, size_t n
, mbstate_t *state
)
12276 static int local_state
;
12278 if (!state
) state
= &local_state
;
12279 return _Mbrtowc( dst
, str
, n
, state
, NULL
);
12283 size_t __cdecl
mbsrtowcs(wchar_t *dst
, const char **pstr
, size_t n
, mbstate_t *state
)
12285 static int local_state
;
12291 if (!state
) state
= &local_state
;
12293 while (!dst
|| n
> ret
)
12295 int len
= _Mbrtowc( &wc
, src
, 2, state
, NULL
);
12296 if (len
< 0) return -1;
12298 if (dst
) dst
[ret
] = wc
;
12307 int __cdecl
wctob(wint_t wc
)
12309 char ret
[MB_LEN_MAX
];
12311 if (wc
== WEOF
|| _Wcrtomb( ret
, wc
, NULL
, NULL
) != 1) return EOF
;
12316 size_t __cdecl
wcrtomb(char *dst
, wchar_t wc
, mbstate_t *state
)
12318 return _Wcrtomb( dst
, wc
, state
, NULL
);
12322 size_t __cdecl
wcsrtombs(char *dst
, const wchar_t **pstr
, size_t n
, mbstate_t *state
)
12324 const wchar_t *src
;
12325 char buffer
[MB_LEN_MAX
];
12330 while (!dst
|| n
> ret
)
12332 int len
= _Wcrtomb( buffer
, *src
, state
, NULL
);
12333 if (len
<= 0) return -1;
12334 if (n
< ret
+ len
) break;
12335 memcpy( dst
+ ret
, buffer
, len
);
12337 if (!buffer
[0]) break;
12344 int __cdecl
_To_byte(const wchar_t *src
, char *dst
)
12346 TRACE("(%s %p)\n", debugstr_w(src
), dst
);
12347 return WideCharToMultiByte(CP_ACP
, 0, src
, -1, dst
, MAX_PATH
, NULL
, NULL
);
12350 int __cdecl
_To_wide(const char *src
, wchar_t *dst
)
12352 TRACE("(%s %p)\n", debugstr_a(src
), dst
);
12353 return MultiByteToWideChar(CP_ACP
, 0, src
, -1, dst
, MAX_PATH
);
12356 size_t __cdecl
_Strxfrm(char *dest
, char *dest_end
,
12357 const char *src
, const char *src_end
, _Collvec
*coll
)
12359 size_t dest_len
= dest_end
- dest
;
12360 size_t src_len
= src_end
- src
;
12366 TRACE("(%p %p %p %p %p)\n", dest
, dest_end
, src
, src_end
, coll
);
12368 if (coll
) cv
= *coll
;
12371 #if _MSVCP_VER < 110
12374 lcid
= LocaleNameToLCID(cv
.lc_name
, 0);
12377 if (!lcid
&& !cv
.page
)
12379 if (src_len
> dest_len
) return src_len
;
12380 memcpy(dest
, src
, src_len
);
12384 len
= MultiByteToWideChar(cv
.page
, MB_ERR_INVALID_CHARS
, src
, src_len
, NULL
, 0);
12385 if (!len
) return INT_MAX
;
12386 buf
= heap_alloc(len
* sizeof(WCHAR
));
12387 if (!buf
) return INT_MAX
;
12388 MultiByteToWideChar(cv
.page
, MB_ERR_INVALID_CHARS
, src
, src_len
, buf
, len
);
12390 len
= LCMapStringW(lcid
, LCMAP_SORTKEY
, buf
, len
, NULL
, 0);
12391 if (len
<= dest_len
)
12392 LCMapStringW(lcid
, LCMAP_SORTKEY
, buf
, len
, (WCHAR
*)dest
, dest_len
);
12397 size_t __cdecl
_Wcsxfrm(wchar_t *dest
, wchar_t *dest_end
,
12398 const wchar_t *src
, const wchar_t *src_end
, _Collvec
*coll
)
12400 size_t dest_len
= dest_end
- dest
;
12401 size_t src_len
= src_end
- src
;
12406 TRACE("(%p %p %p %p %p)\n", dest
, dest_end
, src
, src_end
, coll
);
12408 if (coll
) cv
= *coll
;
12411 #if _MSVCP_VER < 110
12414 lcid
= LocaleNameToLCID(cv
.lc_name
, 0);
12419 if (src_len
> dest_len
) return src_len
;
12420 memcpy(dest
, src
, src_len
* sizeof(wchar_t));
12424 len
= LCMapStringW(lcid
, LCMAP_SORTKEY
, src
, src_len
, NULL
, 0);
12425 if (!len
) return INT_MAX
;
12426 if (len
> dest_len
) return len
;
12428 LCMapStringW(lcid
, LCMAP_SORTKEY
, src
, src_len
, dest
, dest_len
);
12429 for (i
= len
- 1; i
>= 0; i
--)
12430 dest
[i
] = ((BYTE
*)dest
)[i
];
12434 DEFINE_RTTI_DATA0(_Facet_base
, 0, ".?AV_Facet_base@std@@")
12435 DEFINE_RTTI_DATA0(locale_facet
, 0, ".?AVfacet@locale@std@@")
12436 DEFINE_RTTI_DATA1(locale__Locimp
, 0, &locale_facet_rtti_base_descriptor
, ".?AV_Locimp@locale@std@@")
12437 DEFINE_RTTI_DATA1(collate_char
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@D@std@@")
12438 DEFINE_RTTI_DATA1(collate_wchar
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@_W@std@@")
12439 DEFINE_RTTI_DATA1(collate_short
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@G@std@@")
12440 DEFINE_RTTI_DATA1(ctype_base
, 0, &locale_facet_rtti_base_descriptor
, ".?AUctype_base@std@@")
12441 DEFINE_RTTI_DATA2(ctype_char
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@D@std@@")
12442 DEFINE_RTTI_DATA2(ctype_wchar
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@_W@std@@")
12443 DEFINE_RTTI_DATA2(ctype_short
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@G@std@@")
12444 DEFINE_RTTI_DATA1(codecvt_base
, 0, &locale_facet_rtti_base_descriptor
, ".?AVcodecvt_base@std@@")
12445 #if _MSVCP_VER >= 140
12446 DEFINE_RTTI_DATA2(codecvt_char
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@DDU_Mbstatet@@@std@@")
12447 DEFINE_RTTI_DATA2(codecvt_wchar
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@_WDU_Mbstatet@@@std@@")
12448 DEFINE_RTTI_DATA2(codecvt_short
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@GDU_Mbstatet@@@std@@")
12450 DEFINE_RTTI_DATA2(codecvt_char
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@DDH@std@@")
12451 DEFINE_RTTI_DATA2(codecvt_wchar
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@_WDH@std@@")
12452 DEFINE_RTTI_DATA2(codecvt_short
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@GDH@std@@")
12454 DEFINE_RTTI_DATA1(numpunct_char
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@D@std@@")
12455 DEFINE_RTTI_DATA1(numpunct_wchar
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@_W@std@@")
12456 DEFINE_RTTI_DATA1(numpunct_short
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@G@std@@")
12457 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@@")
12458 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@@")
12459 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@@")
12460 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@@")
12461 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@@")
12462 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@@")
12463 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@@")
12464 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@@")
12465 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@@")
12466 DEFINE_RTTI_DATA1(time_base
, 0, &locale_facet_rtti_base_descriptor
, ".?AUtime_base@std@@")
12467 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@@")
12468 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@@")
12470 __ASM_BLOCK_BEGIN(locale_vtables
)
12471 __ASM_VTABLE(_Facet_base
,
12472 VTABLE_ADD_FUNC(locale_facet_vector_dtor
)
12473 VTABLE_ADD_FUNC(locale_facet__Incref
)
12474 VTABLE_ADD_FUNC(locale_facet__Incref
)
12476 __ASM_VTABLE(locale_facet
,
12477 VTABLE_ADD_FUNC(locale_facet_vector_dtor
)
12478 #if _MSVCP_VER >= 110
12479 VTABLE_ADD_FUNC(locale_facet__Incref
)
12480 VTABLE_ADD_FUNC(locale_facet__Decref
)
12483 __ASM_VTABLE(locale__Locimp
,
12484 VTABLE_ADD_FUNC(locale__Locimp_vector_dtor
)
12485 #if _MSVCP_VER >= 110
12486 VTABLE_ADD_FUNC(locale_facet__Incref
)
12487 VTABLE_ADD_FUNC(locale_facet__Decref
)
12490 __ASM_VTABLE(collate_char
,
12491 VTABLE_ADD_FUNC(collate_char_vector_dtor
)
12492 #if _MSVCP_VER >= 110
12493 VTABLE_ADD_FUNC(locale_facet__Incref
)
12494 VTABLE_ADD_FUNC(locale_facet__Decref
)
12496 VTABLE_ADD_FUNC(collate_char_do_compare
)
12497 VTABLE_ADD_FUNC(collate_char_do_transform
)
12498 VTABLE_ADD_FUNC(collate_char_do_hash
));
12499 __ASM_VTABLE(collate_wchar
,
12500 VTABLE_ADD_FUNC(collate_wchar_vector_dtor
)
12501 #if _MSVCP_VER >= 110
12502 VTABLE_ADD_FUNC(locale_facet__Incref
)
12503 VTABLE_ADD_FUNC(locale_facet__Decref
)
12505 VTABLE_ADD_FUNC(collate_wchar_do_compare
)
12506 VTABLE_ADD_FUNC(collate_wchar_do_transform
)
12507 VTABLE_ADD_FUNC(collate_wchar_do_hash
));
12508 __ASM_VTABLE(collate_short
,
12509 VTABLE_ADD_FUNC(collate_wchar_vector_dtor
)
12510 #if _MSVCP_VER >= 110
12511 VTABLE_ADD_FUNC(locale_facet__Incref
)
12512 VTABLE_ADD_FUNC(locale_facet__Decref
)
12514 VTABLE_ADD_FUNC(collate_wchar_do_compare
)
12515 VTABLE_ADD_FUNC(collate_wchar_do_transform
)
12516 VTABLE_ADD_FUNC(collate_wchar_do_hash
));
12517 __ASM_VTABLE(ctype_base
,
12518 VTABLE_ADD_FUNC(ctype_base_vector_dtor
)
12519 #if _MSVCP_VER >= 110
12520 VTABLE_ADD_FUNC(locale_facet__Incref
)
12521 VTABLE_ADD_FUNC(locale_facet__Decref
)
12524 __ASM_VTABLE(ctype_char
,
12525 VTABLE_ADD_FUNC(ctype_char_vector_dtor
)
12526 #if _MSVCP_VER >= 110
12527 VTABLE_ADD_FUNC(locale_facet__Incref
)
12528 VTABLE_ADD_FUNC(locale_facet__Decref
)
12530 VTABLE_ADD_FUNC(ctype_char_do_tolower
)
12531 VTABLE_ADD_FUNC(ctype_char_do_tolower_ch
)
12532 VTABLE_ADD_FUNC(ctype_char_do_toupper
)
12533 VTABLE_ADD_FUNC(ctype_char_do_toupper_ch
)
12534 VTABLE_ADD_FUNC(ctype_char_do_widen
)
12535 VTABLE_ADD_FUNC(ctype_char_do_widen_ch
)
12536 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
12537 VTABLE_ADD_FUNC(ctype_char__Do_widen_s
)
12538 VTABLE_ADD_FUNC(ctype_char_do_narrow
)
12539 VTABLE_ADD_FUNC(ctype_char_do_narrow_ch
)
12540 VTABLE_ADD_FUNC(ctype_char__Do_narrow_s
)
12542 VTABLE_ADD_FUNC(ctype_char_do_narrow
)
12543 VTABLE_ADD_FUNC(ctype_char_do_narrow_ch
)
12546 __ASM_VTABLE(ctype_wchar
,
12547 VTABLE_ADD_FUNC(ctype_wchar_vector_dtor
)
12548 #if _MSVCP_VER >= 110
12549 VTABLE_ADD_FUNC(locale_facet__Incref
)
12550 VTABLE_ADD_FUNC(locale_facet__Decref
)
12552 VTABLE_ADD_FUNC(ctype_wchar_do_is
)
12553 VTABLE_ADD_FUNC(ctype_wchar_do_is_ch
)
12554 VTABLE_ADD_FUNC(ctype_wchar_do_scan_is
)
12555 VTABLE_ADD_FUNC(ctype_wchar_do_scan_not
)
12556 VTABLE_ADD_FUNC(ctype_wchar_do_tolower
)
12557 VTABLE_ADD_FUNC(ctype_wchar_do_tolower_ch
)
12558 VTABLE_ADD_FUNC(ctype_wchar_do_toupper
)
12559 VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch
)
12560 VTABLE_ADD_FUNC(ctype_wchar_do_widen
)
12561 VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch
)
12562 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
12563 VTABLE_ADD_FUNC(ctype_wchar__Do_widen_s
)
12564 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
12565 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
)
12566 VTABLE_ADD_FUNC(ctype_wchar__Do_narrow_s
)
12568 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
12569 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
)
12572 __ASM_VTABLE(ctype_short
,
12573 VTABLE_ADD_FUNC(ctype_wchar_vector_dtor
)
12574 #if _MSVCP_VER >= 110
12575 VTABLE_ADD_FUNC(locale_facet__Incref
)
12576 VTABLE_ADD_FUNC(locale_facet__Decref
)
12578 VTABLE_ADD_FUNC(ctype_wchar_do_is
)
12579 VTABLE_ADD_FUNC(ctype_wchar_do_is_ch
)
12580 VTABLE_ADD_FUNC(ctype_wchar_do_scan_is
)
12581 VTABLE_ADD_FUNC(ctype_wchar_do_scan_not
)
12582 VTABLE_ADD_FUNC(ctype_wchar_do_tolower
)
12583 VTABLE_ADD_FUNC(ctype_wchar_do_tolower_ch
)
12584 VTABLE_ADD_FUNC(ctype_wchar_do_toupper
)
12585 VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch
)
12586 VTABLE_ADD_FUNC(ctype_wchar_do_widen
)
12587 VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch
)
12588 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
12589 VTABLE_ADD_FUNC(ctype_wchar__Do_widen_s
)
12590 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
12591 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
)
12592 VTABLE_ADD_FUNC(ctype_wchar__Do_narrow_s
)
12594 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
12595 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
)
12598 __ASM_VTABLE(codecvt_base
,
12599 VTABLE_ADD_FUNC(codecvt_base_vector_dtor
)
12600 #if _MSVCP_VER >= 110
12601 VTABLE_ADD_FUNC(locale_facet__Incref
)
12602 VTABLE_ADD_FUNC(locale_facet__Decref
)
12604 VTABLE_ADD_FUNC(codecvt_base_do_always_noconv
)
12605 VTABLE_ADD_FUNC(codecvt_base_do_max_length
)
12606 VTABLE_ADD_FUNC(codecvt_base_do_encoding
));
12607 __ASM_VTABLE(codecvt_char
,
12608 VTABLE_ADD_FUNC(codecvt_char_vector_dtor
)
12609 #if _MSVCP_VER >= 110
12610 VTABLE_ADD_FUNC(locale_facet__Incref
)
12611 VTABLE_ADD_FUNC(locale_facet__Decref
)
12612 VTABLE_ADD_FUNC(codecvt_char_do_always_noconv
)
12614 VTABLE_ADD_FUNC(codecvt_base_do_always_noconv
)
12616 VTABLE_ADD_FUNC(codecvt_base_do_max_length
)
12617 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
12618 VTABLE_ADD_FUNC(codecvt_char_do_in
)
12619 VTABLE_ADD_FUNC(codecvt_char_do_out
)
12620 VTABLE_ADD_FUNC(codecvt_char_do_unshift
)
12621 VTABLE_ADD_FUNC(codecvt_char_do_length
));
12622 __ASM_VTABLE(codecvt_wchar
,
12623 VTABLE_ADD_FUNC(codecvt_wchar_vector_dtor
)
12624 #if _MSVCP_VER >= 110
12625 VTABLE_ADD_FUNC(locale_facet__Incref
)
12626 VTABLE_ADD_FUNC(locale_facet__Decref
)
12628 VTABLE_ADD_FUNC(codecvt_wchar_do_always_noconv
)
12629 VTABLE_ADD_FUNC(codecvt_wchar_do_max_length
)
12630 #if _MSVCP_VER >= 90 && _MSVCP_VER <= 100
12631 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
12633 VTABLE_ADD_FUNC(codecvt_wchar_do_encoding
)
12635 VTABLE_ADD_FUNC(codecvt_wchar_do_in
)
12636 VTABLE_ADD_FUNC(codecvt_wchar_do_out
)
12637 VTABLE_ADD_FUNC(codecvt_wchar_do_unshift
)
12638 VTABLE_ADD_FUNC(codecvt_wchar_do_length
));
12639 __ASM_VTABLE(codecvt_short
,
12640 VTABLE_ADD_FUNC(codecvt_wchar_vector_dtor
)
12641 #if _MSVCP_VER >= 110
12642 VTABLE_ADD_FUNC(locale_facet__Incref
)
12643 VTABLE_ADD_FUNC(locale_facet__Decref
)
12645 VTABLE_ADD_FUNC(codecvt_wchar_do_always_noconv
)
12646 VTABLE_ADD_FUNC(codecvt_wchar_do_max_length
)
12647 #if _MSVCP_VER >= 90 && _MSVCP_VER <= 100
12648 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
12650 VTABLE_ADD_FUNC(codecvt_wchar_do_encoding
)
12652 VTABLE_ADD_FUNC(codecvt_wchar_do_in
)
12653 VTABLE_ADD_FUNC(codecvt_wchar_do_out
)
12654 VTABLE_ADD_FUNC(codecvt_wchar_do_unshift
)
12655 VTABLE_ADD_FUNC(codecvt_wchar_do_length
));
12656 __ASM_VTABLE(numpunct_char
,
12657 VTABLE_ADD_FUNC(numpunct_char_vector_dtor
)
12658 #if _MSVCP_VER >= 110
12659 VTABLE_ADD_FUNC(locale_facet__Incref
)
12660 VTABLE_ADD_FUNC(locale_facet__Decref
)
12662 VTABLE_ADD_FUNC(numpunct_char_do_decimal_point
)
12663 VTABLE_ADD_FUNC(numpunct_char_do_thousands_sep
)
12664 VTABLE_ADD_FUNC(numpunct_char_do_grouping
)
12665 VTABLE_ADD_FUNC(numpunct_char_do_falsename
)
12666 VTABLE_ADD_FUNC(numpunct_char_do_truename
));
12667 __ASM_VTABLE(numpunct_wchar
,
12668 VTABLE_ADD_FUNC(numpunct_wchar_vector_dtor
)
12669 #if _MSVCP_VER >= 110
12670 VTABLE_ADD_FUNC(locale_facet__Incref
)
12671 VTABLE_ADD_FUNC(locale_facet__Decref
)
12673 VTABLE_ADD_FUNC(numpunct_wchar_do_decimal_point
)
12674 VTABLE_ADD_FUNC(numpunct_wchar_do_thousands_sep
)
12675 VTABLE_ADD_FUNC(numpunct_wchar_do_grouping
)
12676 VTABLE_ADD_FUNC(numpunct_wchar_do_falsename
)
12677 VTABLE_ADD_FUNC(numpunct_wchar_do_truename
));
12678 __ASM_VTABLE(numpunct_short
,
12679 VTABLE_ADD_FUNC(numpunct_wchar_vector_dtor
)
12680 #if _MSVCP_VER >= 110
12681 VTABLE_ADD_FUNC(locale_facet__Incref
)
12682 VTABLE_ADD_FUNC(locale_facet__Decref
)
12684 VTABLE_ADD_FUNC(numpunct_wchar_do_decimal_point
)
12685 VTABLE_ADD_FUNC(numpunct_wchar_do_thousands_sep
)
12686 VTABLE_ADD_FUNC(numpunct_wchar_do_grouping
)
12687 VTABLE_ADD_FUNC(numpunct_wchar_do_falsename
)
12688 VTABLE_ADD_FUNC(numpunct_wchar_do_truename
));
12689 __ASM_VTABLE(num_get_char
,
12690 VTABLE_ADD_FUNC(num_get_char_vector_dtor
)
12691 #if _MSVCP_VER >= 110
12692 VTABLE_ADD_FUNC(locale_facet__Incref
)
12693 VTABLE_ADD_FUNC(locale_facet__Decref
)
12695 VTABLE_ADD_FUNC(num_get_char_do_get_void
)
12696 VTABLE_ADD_FUNC(num_get_char_do_get_double
)
12697 VTABLE_ADD_FUNC(num_get_char_do_get_double
)
12698 VTABLE_ADD_FUNC(num_get_char_do_get_float
)
12699 VTABLE_ADD_FUNC(num_get_char_do_get_uint64
)
12700 VTABLE_ADD_FUNC(num_get_char_do_get_int64
)
12701 VTABLE_ADD_FUNC(num_get_char_do_get_ulong
)
12702 VTABLE_ADD_FUNC(num_get_char_do_get_long
)
12703 VTABLE_ADD_FUNC(num_get_char_do_get_uint
)
12704 VTABLE_ADD_FUNC(num_get_char_do_get_ushort
)
12705 VTABLE_ADD_FUNC(num_get_char_do_get_bool
));
12706 __ASM_VTABLE(num_get_short
,
12707 VTABLE_ADD_FUNC(num_get_wchar_vector_dtor
)
12708 #if _MSVCP_VER >= 110
12709 VTABLE_ADD_FUNC(locale_facet__Incref
)
12710 VTABLE_ADD_FUNC(locale_facet__Decref
)
12712 VTABLE_ADD_FUNC(num_get_short_do_get_void
)
12713 VTABLE_ADD_FUNC(num_get_short_do_get_double
)
12714 VTABLE_ADD_FUNC(num_get_short_do_get_double
)
12715 VTABLE_ADD_FUNC(num_get_short_do_get_float
)
12716 VTABLE_ADD_FUNC(num_get_short_do_get_uint64
)
12717 VTABLE_ADD_FUNC(num_get_short_do_get_int64
)
12718 VTABLE_ADD_FUNC(num_get_short_do_get_ulong
)
12719 VTABLE_ADD_FUNC(num_get_short_do_get_long
)
12720 VTABLE_ADD_FUNC(num_get_short_do_get_uint
)
12721 VTABLE_ADD_FUNC(num_get_short_do_get_ushort
)
12722 VTABLE_ADD_FUNC(num_get_short_do_get_bool
));
12723 __ASM_VTABLE(num_get_wchar
,
12724 VTABLE_ADD_FUNC(num_get_wchar_vector_dtor
)
12725 #if _MSVCP_VER >= 110
12726 VTABLE_ADD_FUNC(locale_facet__Incref
)
12727 VTABLE_ADD_FUNC(locale_facet__Decref
)
12729 VTABLE_ADD_FUNC(num_get_wchar_do_get_void
)
12730 VTABLE_ADD_FUNC(num_get_wchar_do_get_double
)
12731 VTABLE_ADD_FUNC(num_get_wchar_do_get_double
)
12732 VTABLE_ADD_FUNC(num_get_wchar_do_get_float
)
12733 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint64
)
12734 VTABLE_ADD_FUNC(num_get_wchar_do_get_int64
)
12735 VTABLE_ADD_FUNC(num_get_wchar_do_get_ulong
)
12736 VTABLE_ADD_FUNC(num_get_wchar_do_get_long
)
12737 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint
)
12738 VTABLE_ADD_FUNC(num_get_wchar_do_get_ushort
)
12739 VTABLE_ADD_FUNC(num_get_wchar_do_get_bool
));
12740 __ASM_VTABLE(num_put_char
,
12741 VTABLE_ADD_FUNC(num_put_char_vector_dtor
)
12742 #if _MSVCP_VER >= 110
12743 VTABLE_ADD_FUNC(locale_facet__Incref
)
12744 VTABLE_ADD_FUNC(locale_facet__Decref
)
12746 VTABLE_ADD_FUNC(num_put_char_do_put_ptr
)
12747 VTABLE_ADD_FUNC(num_put_char_do_put_double
)
12748 VTABLE_ADD_FUNC(num_put_char_do_put_double
)
12749 VTABLE_ADD_FUNC(num_put_char_do_put_uint64
)
12750 VTABLE_ADD_FUNC(num_put_char_do_put_int64
)
12751 VTABLE_ADD_FUNC(num_put_char_do_put_ulong
)
12752 VTABLE_ADD_FUNC(num_put_char_do_put_long
)
12753 VTABLE_ADD_FUNC(num_put_char_do_put_bool
));
12754 __ASM_VTABLE(num_put_wchar
,
12755 VTABLE_ADD_FUNC(num_put_wchar_vector_dtor
)
12756 #if _MSVCP_VER >= 110
12757 VTABLE_ADD_FUNC(locale_facet__Incref
)
12758 VTABLE_ADD_FUNC(locale_facet__Decref
)
12760 VTABLE_ADD_FUNC(num_put_wchar_do_put_ptr
)
12761 VTABLE_ADD_FUNC(num_put_wchar_do_put_double
)
12762 VTABLE_ADD_FUNC(num_put_wchar_do_put_double
)
12763 VTABLE_ADD_FUNC(num_put_wchar_do_put_uint64
)
12764 VTABLE_ADD_FUNC(num_put_wchar_do_put_int64
)
12765 VTABLE_ADD_FUNC(num_put_wchar_do_put_ulong
)
12766 VTABLE_ADD_FUNC(num_put_wchar_do_put_long
)
12767 VTABLE_ADD_FUNC(num_put_wchar_do_put_bool
));
12768 __ASM_VTABLE(num_put_short
,
12769 VTABLE_ADD_FUNC(num_put_wchar_vector_dtor
)
12770 #if _MSVCP_VER >= 110
12771 VTABLE_ADD_FUNC(locale_facet__Incref
)
12772 VTABLE_ADD_FUNC(locale_facet__Decref
)
12774 VTABLE_ADD_FUNC(num_put_short_do_put_ptr
)
12775 VTABLE_ADD_FUNC(num_put_short_do_put_double
)
12776 VTABLE_ADD_FUNC(num_put_short_do_put_double
)
12777 VTABLE_ADD_FUNC(num_put_short_do_put_uint64
)
12778 VTABLE_ADD_FUNC(num_put_short_do_put_int64
)
12779 VTABLE_ADD_FUNC(num_put_short_do_put_ulong
)
12780 VTABLE_ADD_FUNC(num_put_short_do_put_long
)
12781 VTABLE_ADD_FUNC(num_put_short_do_put_bool
));
12782 __ASM_VTABLE(time_put_char
,
12783 VTABLE_ADD_FUNC(time_put_char_vector_dtor
)
12784 #if _MSVCP_VER >= 110
12785 VTABLE_ADD_FUNC(locale_facet__Incref
)
12786 VTABLE_ADD_FUNC(locale_facet__Decref
)
12788 VTABLE_ADD_FUNC(time_put_char_do_put
));
12789 __ASM_VTABLE(time_put_wchar
,
12790 VTABLE_ADD_FUNC(time_put_wchar_vector_dtor
)
12791 #if _MSVCP_VER >= 110
12792 VTABLE_ADD_FUNC(locale_facet__Incref
)
12793 VTABLE_ADD_FUNC(locale_facet__Decref
)
12795 VTABLE_ADD_FUNC(time_put_wchar_do_put
));
12796 __ASM_VTABLE(time_put_short
,
12797 VTABLE_ADD_FUNC(time_put_wchar_vector_dtor
)
12798 #if _MSVCP_VER >= 110
12799 VTABLE_ADD_FUNC(locale_facet__Incref
)
12800 VTABLE_ADD_FUNC(locale_facet__Decref
)
12802 VTABLE_ADD_FUNC(time_put_wchar_do_put
));
12803 __ASM_VTABLE(time_get_char
,
12804 VTABLE_ADD_FUNC(time_get_char_vector_dtor
)
12805 #if _MSVCP_VER >= 110
12806 VTABLE_ADD_FUNC(locale_facet__Incref
)
12807 VTABLE_ADD_FUNC(locale_facet__Decref
)
12809 VTABLE_ADD_FUNC(time_get_char_do_date_order
)
12810 VTABLE_ADD_FUNC(time_get_char_do_get_time
)
12811 VTABLE_ADD_FUNC(time_get_char_do_get_date
)
12812 VTABLE_ADD_FUNC(time_get_char_do_get_weekday
)
12813 VTABLE_ADD_FUNC(time_get_char_do_get_monthname
)
12814 VTABLE_ADD_FUNC(time_get_char_do_get_year
)
12815 #if _MSVCP_VER >= 100
12816 VTABLE_ADD_FUNC(time_get_char_do_get
)
12819 __ASM_VTABLE(time_get_wchar
,
12820 VTABLE_ADD_FUNC(time_get_wchar_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(time_get_wchar_do_date_order
)
12826 VTABLE_ADD_FUNC(time_get_wchar_do_get_time
)
12827 VTABLE_ADD_FUNC(time_get_wchar_do_get_date
)
12828 VTABLE_ADD_FUNC(time_get_wchar_do_get_weekday
)
12829 VTABLE_ADD_FUNC(time_get_wchar_do_get_monthname
)
12830 VTABLE_ADD_FUNC(time_get_wchar_do_get_year
)
12831 #if _MSVCP_VER >= 100
12832 VTABLE_ADD_FUNC(time_get_wchar_do_get
)
12837 void init_locale(void *base
)
12840 init__Facet_base_rtti(base
);
12841 init_locale_facet_rtti(base
);
12842 init_locale__Locimp_rtti(base
);
12843 init_collate_char_rtti(base
);
12844 init_collate_wchar_rtti(base
);
12845 init_collate_short_rtti(base
);
12846 init_ctype_base_rtti(base
);
12847 init_ctype_char_rtti(base
);
12848 init_ctype_wchar_rtti(base
);
12849 init_ctype_short_rtti(base
);
12850 init_codecvt_base_rtti(base
);
12851 init_codecvt_char_rtti(base
);
12852 init_codecvt_wchar_rtti(base
);
12853 init_codecvt_short_rtti(base
);
12854 init_numpunct_char_rtti(base
);
12855 init_numpunct_wchar_rtti(base
);
12856 init_numpunct_short_rtti(base
);
12857 init_num_get_char_rtti(base
);
12858 init_num_get_wchar_rtti(base
);
12859 init_num_get_short_rtti(base
);
12860 init_num_put_char_rtti(base
);
12861 init_num_put_wchar_rtti(base
);
12862 init_num_put_short_rtti(base
);
12863 init_time_put_char_rtti(base
);
12864 init_time_put_wchar_rtti(base
);
12865 init_time_put_short_rtti(base
);
12866 init_time_base_rtti(base
);
12867 init_time_get_char_rtti(base
);
12868 init_time_get_wchar_rtti(base
);
12872 void free_locale(void)
12874 facets_elem
*iter
, *safe
;
12876 if(global_locale
) {
12877 locale_dtor(&classic_locale
);
12878 locale__Locimp_dtor(global_locale
);
12879 operator_delete(global_locale
);
12882 LIST_FOR_EACH_ENTRY_SAFE(iter
, safe
, &lazy_facets
, facets_elem
, entry
) {
12883 list_remove(&iter
->entry
);
12884 if(call_locale_facet__Decref(iter
->fac
))
12885 call_locale_facet_vector_dtor(iter
->fac
, 1);
12886 operator_delete(iter
);