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 /* This function is probably modifying more global objects */
520 FIXME("(%p %d %s) semi-stub\n", locinfo
, category
, locstr
);
523 _Xruntime_error("bad locale name");
525 _Lockit_ctor_locktype(&locinfo
->lock
, _LOCK_LOCALE
);
526 locale_string_char_ctor(&locinfo
->days
);
527 locale_string_char_ctor(&locinfo
->months
);
528 #if _MSVCP_VER >= 110
529 locale_string_wchar_ctor(&locinfo
->wdays
);
530 locale_string_wchar_ctor(&locinfo
->wmonths
);
532 locale_string_char_ctor_cstr(&locinfo
->oldlocname
, setlocale(LC_ALL
, NULL
));
535 locale
= setlocale(LC_ALL
, locstr
);
537 locale
= setlocale(LC_ALL
, NULL
);
540 locale_string_char_ctor_cstr(&locinfo
->newlocname
, locale
);
542 locale_string_char_ctor_cstr(&locinfo
->newlocname
, "*");
547 /* ??0_Locinfo@std@@QAE@HPBD@Z */
548 /* ??0_Locinfo@std@@QEAA@HPEBD@Z */
549 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cat_cstr
, 12)
550 _Locinfo
* __thiscall
_Locinfo_ctor_cat_cstr(_Locinfo
*this, int category
, const char *locstr
)
552 return _Locinfo__Locinfo_ctor_cat_cstr(this, category
, locstr
);
555 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
556 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
557 _Locinfo
* __cdecl
_Locinfo__Locinfo_ctor_bstr(_Locinfo
*locinfo
, const basic_string_char
*locstr
)
559 return _Locinfo__Locinfo_ctor_cat_cstr(locinfo
, 1/*FIXME*/, MSVCP_basic_string_char_c_str(locstr
));
562 /* ??0_Locinfo@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z */
563 /* ??0_Locinfo@std@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z */
564 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_bstr
, 8)
565 _Locinfo
* __thiscall
_Locinfo_ctor_bstr(_Locinfo
*this, const basic_string_char
*locstr
)
567 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, MSVCP_basic_string_char_c_str(locstr
));
570 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@PBD@Z */
571 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@PEBD@Z */
572 _Locinfo
* __cdecl
_Locinfo__Locinfo_ctor_cstr(_Locinfo
*locinfo
, const char *locstr
)
574 return _Locinfo__Locinfo_ctor_cat_cstr(locinfo
, 1/*FIXME*/, locstr
);
577 /* ??0_Locinfo@std@@QAE@PBD@Z */
578 /* ??0_Locinfo@std@@QEAA@PEBD@Z */
579 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cstr
, 8)
580 _Locinfo
* __thiscall
_Locinfo_ctor_cstr(_Locinfo
*this, const char *locstr
)
582 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, locstr
);
585 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPAV12@@Z */
586 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPEAV12@@Z */
587 void __cdecl
_Locinfo__Locinfo_dtor(_Locinfo
*locinfo
)
589 TRACE("(%p)\n", locinfo
);
591 setlocale(LC_ALL
, locale_string_char_c_str(&locinfo
->oldlocname
));
592 locale_string_char_dtor(&locinfo
->days
);
593 locale_string_char_dtor(&locinfo
->months
);
594 #if _MSVCP_VER >= 110
595 locale_string_wchar_dtor(&locinfo
->wdays
);
596 locale_string_wchar_dtor(&locinfo
->wmonths
);
598 locale_string_char_dtor(&locinfo
->oldlocname
);
599 locale_string_char_dtor(&locinfo
->newlocname
);
600 _Lockit_dtor(&locinfo
->lock
);
603 /* ??_F_Locinfo@std@@QAEXXZ */
604 /* ??_F_Locinfo@std@@QEAAXXZ */
605 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor
, 4)
606 _Locinfo
* __thiscall
_Locinfo_ctor(_Locinfo
*this)
608 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, "C");
611 /* ??1_Locinfo@std@@QAE@XZ */
612 /* ??1_Locinfo@std@@QEAA@XZ */
613 DEFINE_THISCALL_WRAPPER(_Locinfo_dtor
, 4)
614 void __thiscall
_Locinfo_dtor(_Locinfo
*this)
616 _Locinfo__Locinfo_dtor(this);
619 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAAV12@PAV12@HPBD@Z */
620 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAEAV12@PEAV12@HPEBD@Z */
621 _Locinfo
* __cdecl
_Locinfo__Locinfo_Addcats(_Locinfo
*locinfo
, int category
, const char *locstr
)
623 const char *locale
= NULL
;
625 /* This function is probably modifying more global objects */
626 FIXME("(%p %d %s) semi-stub\n", locinfo
, category
, locstr
);
628 _Xruntime_error("bad locale name");
630 locale_string_char_dtor(&locinfo
->newlocname
);
633 locale
= setlocale(LC_ALL
, locstr
);
635 locale
= setlocale(LC_ALL
, NULL
);
638 locale_string_char_ctor_cstr(&locinfo
->newlocname
, locale
);
640 locale_string_char_ctor_cstr(&locinfo
->newlocname
, "*");
645 /* ?_Addcats@_Locinfo@std@@QAEAAV12@HPBD@Z */
646 /* ?_Addcats@_Locinfo@std@@QEAAAEAV12@HPEBD@Z */
647 DEFINE_THISCALL_WRAPPER(_Locinfo__Addcats
, 12)
648 _Locinfo
* __thiscall
_Locinfo__Addcats(_Locinfo
*this, int category
, const char *locstr
)
650 return _Locinfo__Locinfo_Addcats(this, category
, locstr
);
653 static _Collvec
* getcoll(_Collvec
*ret
)
657 ret
->page
= ___lc_collate_cp_func();
659 ret
->handle
= ___lc_handle_func()[LC_COLLATE
];
661 ret
->lc_name
= ___lc_locale_name_func()[LC_COLLATE
];
667 #if defined(__i386__)
668 /* Work around a gcc bug */
669 ULONGLONG __cdecl
_Getcoll(void)
671 C_ASSERT(sizeof(_Collvec
) == sizeof(ULONGLONG
));
674 getcoll((_Collvec
*)&ret
);
678 _Collvec __cdecl
_Getcoll(void)
687 /* ?_Getcoll@_Locinfo@std@@QBE?AU_Collvec@@XZ */
688 /* ?_Getcoll@_Locinfo@std@@QEBA?AU_Collvec@@XZ */
689 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcoll
, 8)
690 _Collvec
* __thiscall
_Locinfo__Getcoll(const _Locinfo
*this, _Collvec
*ret
)
696 _Ctypevec __cdecl
_Getctype(void)
700 #if _MSVCP_VER >= 110
707 ret
.page
= ___lc_codepage_func();
709 ret
.handle
= ___lc_handle_func()[LC_COLLATE
];
711 if((name
= ___lc_locale_name_func()[LC_COLLATE
])) {
712 size
= wcslen(name
)+1;
713 ret
.name
= operator_new(size
*sizeof(*name
));
714 memcpy(ret
.name
, name
, size
*sizeof(*name
));
720 table
= operator_new(sizeof(short[256]));
721 memcpy(table
, __pctype_func(), sizeof(short[256]));
726 /* ?_Getctype@_Locinfo@std@@QBE?AU_Ctypevec@@XZ */
727 /* ?_Getctype@_Locinfo@std@@QEBA?AU_Ctypevec@@XZ */
728 DEFINE_THISCALL_WRAPPER(_Locinfo__Getctype
, 8)
729 _Ctypevec
* __thiscall
_Locinfo__Getctype(const _Locinfo
*this, _Ctypevec
*ret
)
736 #if _MSVCP_VER < 110 && defined(__i386__)
737 /* Work around a gcc bug */
738 ULONGLONG __cdecl
_Getcvt(void)
740 C_ASSERT(sizeof(_Cvtvec
) == sizeof(ULONGLONG
));
748 ret
.cvtvec
.page
= ___lc_codepage_func();
749 ret
.cvtvec
.handle
= ___lc_handle_func()[LC_CTYPE
];
752 #elif _MSVCP_VER < 110
753 _Cvtvec __cdecl
_Getcvt(void)
759 ret
.page
= ___lc_codepage_func();
760 ret
.handle
= ___lc_handle_func()[LC_CTYPE
];
764 _Cvtvec __cdecl
_Getcvt(void)
771 memset(&ret
, 0, sizeof(ret
));
772 ret
.page
= ___lc_codepage_func();
773 ret
.mb_max
= ___mb_cur_max_func();
777 if(_ismbblead(i
)) ret
.isleadbyte
[i
/8] |= 1 << (i
&7);
783 /* ?_Getcvt@_Locinfo@std@@QBE?AU_Cvtvec@@XZ */
784 /* ?_Getcvt@_Locinfo@std@@QEBA?AU_Cvtvec@@XZ */
785 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcvt
, 8)
786 _Cvtvec
* __thiscall
_Locinfo__Getcvt(const _Locinfo
*this, _Cvtvec
*ret
)
788 #if _MSVCP_VER < 110 && defined(__i386__)
795 memcpy(ret
, &cvtvec
, sizeof(cvtvec
));
799 int __cdecl
_Getdateorder(void)
804 if(!GetLocaleInfoW(___lc_handle_func()[LC_TIME
], LOCALE_ILDATE
,
805 date_fmt
, ARRAY_SIZE(date_fmt
)))
806 return DATEORDER_no_order
;
808 if(!GetLocaleInfoEx(___lc_locale_name_func()[LC_TIME
], LOCALE_ILDATE
,
809 date_fmt
, ARRAY_SIZE(date_fmt
)))
810 return DATEORDER_no_order
;
813 if(*date_fmt
== '0') return DATEORDER_mdy
;
814 if(*date_fmt
== '1') return DATEORDER_dmy
;
815 if(*date_fmt
== '2') return DATEORDER_ymd
;
816 return DATEORDER_no_order
;
819 /* ?_Getdateorder@_Locinfo@std@@QBEHXZ */
820 /* ?_Getdateorder@_Locinfo@std@@QEBAHXZ */
821 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdateorder
, 4)
822 int __thiscall
_Locinfo__Getdateorder(const _Locinfo
*this)
824 TRACE("(%p)\n", this);
825 return _Getdateorder();
828 /* ?_Getdays@_Locinfo@std@@QBEPBDXZ */
829 /* ?_Getdays@_Locinfo@std@@QEBAPEBDXZ */
830 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdays
, 4)
831 const char* __thiscall
_Locinfo__Getdays(const _Locinfo
*this)
833 char *days
= _Getdays();
836 TRACE("(%p)\n", this);
839 locale_string_char_dtor((locale_string
*)&this->days
);
840 locale_string_char_ctor_cstr((locale_string
*)&this->days
, days
);
844 ret
= locale_string_char_c_str(&this->days
);
845 if (!ret
[0]) ret
= ":Sun:Sunday:Mon:Monday:Tue:Tuesday:Wed:Wednesday:Thu:Thursday:Fri:Friday:Sat:Saturday";
849 #if _MSVCP_VER >= 110
850 /* ?_W_Getdays@_Locinfo@std@@QBEPBGXZ */
851 /* ?_W_Getdays@_Locinfo@std@@QEBAPEBGXZ */
852 DEFINE_THISCALL_WRAPPER(_Locinfo__W_Getdays
, 4)
853 const wchar_t* __thiscall
_Locinfo__W_Getdays(const _Locinfo
*this)
855 static const wchar_t defdays
[] =
857 ':','S','u','n',':','S','u','n','d','a','y',
858 ':','M','o','n',':','M','o','n','d','a','y',
859 ':','T','u','e',':','T','u','e','s','d','a','y',
860 ':','W','e','d',':','W','e','d','n','e','s','d','a','y',
861 ':','T','h','u',':','T','h','u','r','s','d','a','y',
862 ':','F','r','i',':','F','r','i','d','a','y',
863 ':','S','a','t',':','S','a','t','u','r','d','a','y'
865 wchar_t *wdays
= _W_Getdays();
868 TRACE("(%p)\n", this);
871 locale_string_wchar_assign((locale_string_wchar
*)&this->wdays
, wdays
);
875 ret
= locale_string_wchar_c_str(&this->wdays
);
876 if (!ret
[0]) ret
= defdays
;
880 /* ?_W_Getmonths@_Locinfo@std@@QBEPBGXZ */
881 /* ?_W_Getmonths@_Locinfo@std@@QEBAPEBGXZ */
882 DEFINE_THISCALL_WRAPPER(_Locinfo__W_Getmonths
, 4)
883 const wchar_t* __thiscall
_Locinfo__W_Getmonths(const _Locinfo
*this)
885 static const wchar_t defmonths
[] =
887 ':','J','a','n',':','J','a','n','u','a','r','y',
888 ':','F','e','b',':','F','e','b','r','u','a','r','y',
889 ':','M','a','r',':','M','a','r','c','h',
890 ':','A','p','r',':','A','p','r','i','l',
891 ':','M','a','y',':','M','a','y',
892 ':','J','u','n',':','J','u','n','e',
893 ':','J','u','l',':','J','u','l','y',
894 ':','A','u','g',':','A','u','g','u','s','t',
895 ':','S','e','p',':','S','e','p','t','e','m','b','e','r',
896 ':','O','c','t',':','O','c','t','o','b','e','r',
897 ':','N','o','v',':','N','o','v','e','m','b','e','r',
898 ':','D','e','c',':','D','e','c','e','m','b','e','r'
900 wchar_t *wmonths
= _W_Getmonths();
903 TRACE("(%p)\n", this);
906 locale_string_wchar_assign((locale_string_wchar
*)&this->wmonths
, wmonths
);
910 ret
= locale_string_wchar_c_str(&this->wmonths
);
911 if (!ret
[0]) ret
= defmonths
;
916 /* ?_Getmonths@_Locinfo@std@@QBEPBDXZ */
917 /* ?_Getmonths@_Locinfo@std@@QEBAPEBDXZ */
918 DEFINE_THISCALL_WRAPPER(_Locinfo__Getmonths
, 4)
919 const char* __thiscall
_Locinfo__Getmonths(const _Locinfo
*this)
921 char *months
= _Getmonths();
924 TRACE("(%p)\n", this);
927 locale_string_char_dtor((locale_string
*)&this->months
);
928 locale_string_char_ctor_cstr((locale_string
*)&this->months
, months
);
932 ret
= locale_string_char_c_str(&this->months
);
933 if (!ret
[0]) ret
= ":Jan:January:Feb:February:Mar:March:Apr:April:May:May:Jun:June:Jul:July"
934 ":Aug:August:Sep:September:Oct:October:Nov:November:Dec:December";
938 /* ?_Getfalse@_Locinfo@std@@QBEPBDXZ */
939 /* ?_Getfalse@_Locinfo@std@@QEBAPEBDXZ */
940 DEFINE_THISCALL_WRAPPER(_Locinfo__Getfalse
, 4)
941 const char* __thiscall
_Locinfo__Getfalse(const _Locinfo
*this)
943 TRACE("(%p)\n", this);
947 /* ?_Gettrue@_Locinfo@std@@QBEPBDXZ */
948 /* ?_Gettrue@_Locinfo@std@@QEBAPEBDXZ */
949 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettrue
, 4)
950 const char* __thiscall
_Locinfo__Gettrue(const _Locinfo
*this)
952 TRACE("(%p)\n", this);
956 /* ?_Getlconv@_Locinfo@std@@QBEPBUlconv@@XZ */
957 /* ?_Getlconv@_Locinfo@std@@QEBAPEBUlconv@@XZ */
958 DEFINE_THISCALL_WRAPPER(_Locinfo__Getlconv
, 4)
959 const struct lconv
* __thiscall
_Locinfo__Getlconv(const _Locinfo
*this)
961 TRACE("(%p)\n", this);
965 /* ?_Gettnames@_Locinfo@std@@QBE?AV_Timevec@2@XZ */
966 /* ?_Gettnames@_Locinfo@std@@QEBA?AV_Timevec@2@XZ */
967 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettnames
, 8)
968 _Timevec
*__thiscall
_Locinfo__Gettnames(const _Locinfo
*this, _Timevec
*ret
)
970 TRACE("(%p)\n", this);
972 _Timevec_ctor_timeptr(ret
, _Gettnames());
976 /* ?id@?$collate@D@std@@2V0locale@2@A */
977 locale_id collate_char_id
= {0};
979 /* ??_7?$collate@D@std@@6B@ */
980 extern const vtable_ptr collate_char_vtable
;
982 /* ?_Init@?$collate@D@std@@IAEXABV_Locinfo@2@@Z */
983 /* ?_Init@?$collate@D@std@@IEAAXAEBV_Locinfo@2@@Z */
984 DEFINE_THISCALL_WRAPPER(collate_char__Init
, 8)
985 void __thiscall
collate_char__Init(collate
*this, const _Locinfo
*locinfo
)
987 TRACE("(%p %p)\n", this, locinfo
);
988 _Locinfo__Getcoll(locinfo
, &this->coll
);
991 /* ??0?$collate@D@std@@IAE@PBDI@Z */
992 /* ??0?$collate@D@std@@IEAA@PEBD_K@Z */
993 DEFINE_THISCALL_WRAPPER(collate_char_ctor_name
, 12)
994 collate
* __thiscall
collate_char_ctor_name(collate
*this, const char *name
, size_t refs
)
998 TRACE("(%p %s %Iu)\n", this, name
, refs
);
1000 locale_facet_ctor_refs(&this->facet
, refs
);
1001 this->facet
.vtable
= &collate_char_vtable
;
1003 _Locinfo_ctor_cstr(&locinfo
, name
);
1004 collate_char__Init(this, &locinfo
);
1005 _Locinfo_dtor(&locinfo
);
1009 /* ??0?$collate@D@std@@QAE@ABV_Locinfo@1@I@Z */
1010 /* ??0?$collate@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1011 DEFINE_THISCALL_WRAPPER(collate_char_ctor_locinfo
, 12)
1012 collate
* __thiscall
collate_char_ctor_locinfo(collate
*this, const _Locinfo
*locinfo
, size_t refs
)
1014 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
1016 locale_facet_ctor_refs(&this->facet
, refs
);
1017 this->facet
.vtable
= &collate_char_vtable
;
1018 collate_char__Init(this, locinfo
);
1022 /* ??0?$collate@D@std@@QAE@I@Z */
1023 /* ??0?$collate@D@std@@QEAA@_K@Z */
1024 DEFINE_THISCALL_WRAPPER(collate_char_ctor_refs
, 8)
1025 collate
* __thiscall
collate_char_ctor_refs(collate
*this, size_t refs
)
1027 return collate_char_ctor_name(this, "C", refs
);
1030 /* ??1?$collate@D@std@@UAE@XZ */
1031 /* ??1?$collate@D@std@@UEAA@XZ */
1032 /* ??1?$collate@D@std@@MAE@XZ */
1033 /* ??1?$collate@D@std@@MEAA@XZ */
1034 DEFINE_THISCALL_WRAPPER(collate_char_dtor
, 4)
1035 void __thiscall
collate_char_dtor(collate
*this)
1037 TRACE("(%p)\n", this);
1040 DEFINE_THISCALL_WRAPPER(collate_char_vector_dtor
, 8)
1041 collate
* __thiscall
collate_char_vector_dtor(collate
*this, unsigned int flags
)
1043 TRACE("(%p %x)\n", this, flags
);
1045 /* we have an array, with the number of elements stored before the first object */
1046 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1048 for(i
=*ptr
-1; i
>=0; i
--)
1049 collate_char_dtor(this+i
);
1050 operator_delete(ptr
);
1052 collate_char_dtor(this);
1054 operator_delete(this);
1060 /* ??_F?$collate@D@std@@QAEXXZ */
1061 /* ??_F?$collate@D@std@@QEAAXXZ */
1062 DEFINE_THISCALL_WRAPPER(collate_char_ctor
, 4)
1063 collate
* __thiscall
collate_char_ctor(collate
*this)
1065 return collate_char_ctor_name(this, "C", 0);
1068 /* ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1069 /* ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1070 size_t __cdecl
collate_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
1072 TRACE("(%p %p)\n", facet
, loc
);
1074 if(facet
&& !*facet
) {
1075 *facet
= operator_new(sizeof(collate
));
1076 collate_char_ctor_name((collate
*)*facet
,
1077 locale_string_char_c_str(&loc
->ptr
->name
), 0);
1083 /* ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@@Z */
1084 /* ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1085 size_t __cdecl
collate_char__Getcat_old(const locale_facet
**facet
)
1087 return collate_char__Getcat(facet
, locale_classic());
1090 static collate
* collate_char_use_facet(const locale
*loc
)
1092 static collate
*obj
= NULL
;
1095 const locale_facet
*fac
;
1097 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1098 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&collate_char_id
));
1100 _Lockit_dtor(&lock
);
1101 return (collate
*)fac
;
1105 _Lockit_dtor(&lock
);
1109 collate_char__Getcat(&fac
, loc
);
1110 obj
= (collate
*)fac
;
1111 call_locale_facet__Incref(&obj
->facet
);
1112 locale_facet_register(&obj
->facet
);
1113 _Lockit_dtor(&lock
);
1119 int __cdecl
_Strcoll(const char *first1
, const char *last1
, const char *first2
,
1120 const char *last2
, const _Collvec
*coll
)
1124 TRACE("(%s %s)\n", debugstr_an(first1
, last1
-first1
), debugstr_an(first2
, last2
-first2
));
1126 #if _MSVCP_VER < 110
1127 lcid
= (coll
? coll
->handle
: ___lc_handle_func()[LC_COLLATE
]);
1129 lcid
= LocaleNameToLCID(coll
? coll
->lc_name
: ___lc_locale_name_func()[LC_COLLATE
], 0);
1131 return CompareStringA(lcid
, 0, first1
, last1
-first1
, first2
, last2
-first2
)-CSTR_EQUAL
;
1134 /* ?do_compare@?$collate@D@std@@MBEHPBD000@Z */
1135 /* ?do_compare@?$collate@D@std@@MEBAHPEBD000@Z */
1136 DEFINE_THISCALL_WRAPPER(collate_char_do_compare
, 20)
1137 #if _MSVCP_VER <= 100
1138 #define call_collate_char_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 4, int, \
1139 (const collate*, const char*, const char*, const char*, const char*), \
1140 (this, first1, last1, first2, last2))
1142 #define call_collate_char_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 12, int, \
1143 (const collate*, const char*, const char*, const char*, const char*), \
1144 (this, first1, last1, first2, last2))
1146 int __thiscall
collate_char_do_compare(const collate
*this, const char *first1
,
1147 const char *last1
, const char *first2
, const char *last2
)
1149 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1150 return _Strcoll(first1
, last1
, first2
, last2
, &this->coll
);
1153 /* ?compare@?$collate@D@std@@QBEHPBD000@Z */
1154 /* ?compare@?$collate@D@std@@QEBAHPEBD000@Z */
1155 DEFINE_THISCALL_WRAPPER(collate_char_compare
, 20)
1156 int __thiscall
collate_char_compare(const collate
*this, const char *first1
,
1157 const char *last1
, const char *first2
, const char *last2
)
1159 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1160 return call_collate_char_do_compare(this, first1
, last1
, first2
, last2
);
1163 /* ?do_hash@?$collate@D@std@@MBEJPBD0@Z */
1164 /* ?do_hash@?$collate@D@std@@MEBAJPEBD0@Z */
1165 DEFINE_THISCALL_WRAPPER(collate_char_do_hash
, 12)
1166 #if _MSVCP_VER <= 100
1167 #define call_collate_char_do_hash(this, first, last) CALL_VTBL_FUNC(this, 12, LONG, \
1168 (const collate*, const char*, const char*), (this, first, last))
1170 #define call_collate_char_do_hash(this, first, last) CALL_VTBL_FUNC(this, 20, LONG, \
1171 (const collate*, const char*, const char*), (this, first, last))
1173 LONG __thiscall
collate_char_do_hash(const collate
*this,
1174 const char *first
, const char *last
)
1178 TRACE("(%p %p %p)\n", this, first
, last
);
1180 for(; first
<last
; first
++)
1181 ret
= (ret
<<8 | ret
>>24) + *first
;
1185 /* ?hash@?$collate@D@std@@QBEJPBD0@Z */
1186 /* ?hash@?$collate@D@std@@QEBAJPEBD0@Z */
1187 DEFINE_THISCALL_WRAPPER(collate_char_hash
, 12)
1188 LONG __thiscall
collate_char_hash(const collate
*this,
1189 const char *first
, const char *last
)
1191 TRACE("(%p %p %p)\n", this, first
, last
);
1192 return call_collate_char_do_hash(this, first
, last
);
1195 /* ?do_transform@?$collate@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
1196 /* ?do_transform@?$collate@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
1197 DEFINE_THISCALL_WRAPPER(collate_char_do_transform
, 16)
1198 basic_string_char
* __thiscall
collate_char_do_transform(const collate
*this,
1199 basic_string_char
*ret
, const char *first
, const char *last
)
1201 FIXME("(%p %p %p) stub\n", this, first
, last
);
1205 /* ?transform@?$collate@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
1206 /* ?transform@?$collate@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
1207 DEFINE_THISCALL_WRAPPER(collate_char_transform
, 16)
1208 basic_string_char
* __thiscall
collate_char_transform(const collate
*this,
1209 basic_string_char
*ret
, const char *first
, const char *last
)
1211 FIXME("(%p %p %p) stub\n", this, first
, last
);
1215 /* ?id@?$collate@_W@std@@2V0locale@2@A */
1216 locale_id collate_wchar_id
= {0};
1217 /* ?id@?$collate@G@std@@2V0locale@2@A */
1218 locale_id collate_short_id
= {0};
1220 /* ??_7?$collate@_W@std@@6B@ */
1221 extern const vtable_ptr collate_wchar_vtable
;
1222 /* ??_7?$collate@G@std@@6B@ */
1223 extern const vtable_ptr collate_short_vtable
;
1225 /* ?_Init@?$collate@_W@std@@IAEXABV_Locinfo@2@@Z */
1226 /* ?_Init@?$collate@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
1227 /* ?_Init@?$collate@G@std@@IAEXABV_Locinfo@2@@Z */
1228 /* ?_Init@?$collate@G@std@@IEAAXAEBV_Locinfo@2@@Z */
1229 DEFINE_THISCALL_WRAPPER(collate_wchar__Init
, 8)
1230 void __thiscall
collate_wchar__Init(collate
*this, const _Locinfo
*locinfo
)
1232 TRACE("(%p %p)\n", this, locinfo
);
1233 _Locinfo__Getcoll(locinfo
, &this->coll
);
1236 /* ??0?$collate@_W@std@@IAE@PBDI@Z */
1237 /* ??0?$collate@_W@std@@IEAA@PEBD_K@Z */
1238 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_name
, 12)
1239 collate
* __thiscall
collate_wchar_ctor_name(collate
*this, const char *name
, size_t refs
)
1243 TRACE("(%p %s %Iu)\n", this, name
, refs
);
1245 locale_facet_ctor_refs(&this->facet
, refs
);
1246 this->facet
.vtable
= &collate_wchar_vtable
;
1248 _Locinfo_ctor_cstr(&locinfo
, name
);
1249 collate_wchar__Init(this, &locinfo
);
1250 _Locinfo_dtor(&locinfo
);
1254 /* ??0?$collate@G@std@@IAE@PBDI@Z */
1255 /* ??0?$collate@G@std@@IEAA@PEBD_K@Z */
1256 DEFINE_THISCALL_WRAPPER(collate_short_ctor_name
, 12)
1257 collate
* __thiscall
collate_short_ctor_name(collate
*this, const char *name
, size_t refs
)
1259 collate
*ret
= collate_wchar_ctor_name(this, name
, refs
);
1260 ret
->facet
.vtable
= &collate_short_vtable
;
1264 /* ??0?$collate@_W@std@@QAE@ABV_Locinfo@1@I@Z */
1265 /* ??0?$collate@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1266 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_locinfo
, 12)
1267 collate
* __thiscall
collate_wchar_ctor_locinfo(collate
*this, const _Locinfo
*locinfo
, size_t refs
)
1269 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
1271 locale_facet_ctor_refs(&this->facet
, refs
);
1272 this->facet
.vtable
= &collate_wchar_vtable
;
1273 collate_wchar__Init(this, locinfo
);
1277 /* ??0?$collate@G@std@@QAE@ABV_Locinfo@1@I@Z */
1278 /* ??0?$collate@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1279 DEFINE_THISCALL_WRAPPER(collate_short_ctor_locinfo
, 12)
1280 collate
* __thiscall
collate_short_ctor_locinfo(collate
*this, const _Locinfo
*locinfo
, size_t refs
)
1282 collate
*ret
= collate_wchar_ctor_locinfo(this, locinfo
, refs
);
1283 ret
->facet
.vtable
= &collate_short_vtable
;
1287 /* ??0?$collate@_W@std@@QAE@I@Z */
1288 /* ??0?$collate@_W@std@@QEAA@_K@Z */
1289 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_refs
, 8)
1290 collate
* __thiscall
collate_wchar_ctor_refs(collate
*this, size_t refs
)
1292 return collate_wchar_ctor_name(this, "C", refs
);
1295 /* ??0?$collate@G@std@@QAE@I@Z */
1296 /* ??0?$collate@G@std@@QEAA@_K@Z */
1297 DEFINE_THISCALL_WRAPPER(collate_short_ctor_refs
, 8)
1298 collate
* __thiscall
collate_short_ctor_refs(collate
*this, size_t refs
)
1300 collate
*ret
= collate_wchar_ctor_refs(this, refs
);
1301 ret
->facet
.vtable
= &collate_short_vtable
;
1305 /* ??1?$collate@G@std@@UAE@XZ */
1306 /* ??1?$collate@G@std@@UEAA@XZ */
1307 /* ??1?$collate@_W@std@@MAE@XZ */
1308 /* ??1?$collate@_W@std@@MEAA@XZ */
1309 /* ??1?$collate@G@std@@MAE@XZ */
1310 /* ??1?$collate@G@std@@MEAA@XZ */
1311 DEFINE_THISCALL_WRAPPER(collate_wchar_dtor
, 4)
1312 void __thiscall
collate_wchar_dtor(collate
*this)
1314 TRACE("(%p)\n", this);
1317 DEFINE_THISCALL_WRAPPER(collate_wchar_vector_dtor
, 8)
1318 collate
* __thiscall
collate_wchar_vector_dtor(collate
*this, unsigned int flags
)
1320 TRACE("(%p %x)\n", this, flags
);
1322 /* we have an array, with the number of elements stored before the first object */
1323 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1325 for(i
=*ptr
-1; i
>=0; i
--)
1326 collate_wchar_dtor(this+i
);
1327 operator_delete(ptr
);
1329 collate_wchar_dtor(this);
1331 operator_delete(this);
1337 /* ??_F?$collate@_W@std@@QAEXXZ */
1338 /* ??_F?$collate@_W@std@@QEAAXXZ */
1339 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor
, 4)
1340 collate
* __thiscall
collate_wchar_ctor(collate
*this)
1342 return collate_wchar_ctor_name(this, "C", 0);
1345 /* ??_F?$collate@G@std@@QAEXXZ */
1346 /* ??_F?$collate@G@std@@QEAAXXZ */
1347 DEFINE_THISCALL_WRAPPER(collate_short_ctor
, 4)
1348 collate
* __thiscall
collate_short_ctor(collate
*this)
1350 collate
*ret
= collate_wchar_ctor(this);
1351 ret
->facet
.vtable
= &collate_short_vtable
;
1355 /* ?_Getcat@?$collate@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1356 /* ?_Getcat@?$collate@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1357 size_t __cdecl
collate_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
1359 TRACE("(%p %p)\n", facet
, loc
);
1361 if(facet
&& !*facet
) {
1362 *facet
= operator_new(sizeof(collate
));
1363 collate_wchar_ctor_name((collate
*)*facet
,
1364 locale_string_char_c_str(&loc
->ptr
->name
), 0);
1370 /* ?_Getcat@?$collate@_W@std@@SAIPAPBVfacet@locale@2@@Z */
1371 /* ?_Getcat@?$collate@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1372 size_t __cdecl
collate_wchar__Getcat_old(const locale_facet
**facet
)
1374 return collate_wchar__Getcat(facet
, locale_classic());
1377 static collate
* collate_wchar_use_facet(const locale
*loc
)
1379 static collate
*obj
= NULL
;
1382 const locale_facet
*fac
;
1384 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1385 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&collate_wchar_id
));
1387 _Lockit_dtor(&lock
);
1388 return (collate
*)fac
;
1392 _Lockit_dtor(&lock
);
1396 collate_wchar__Getcat(&fac
, loc
);
1397 obj
= (collate
*)fac
;
1398 call_locale_facet__Incref(&obj
->facet
);
1399 locale_facet_register(&obj
->facet
);
1400 _Lockit_dtor(&lock
);
1405 /* ?_Getcat@?$collate@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1406 /* ?_Getcat@?$collate@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1407 size_t __cdecl
collate_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
1409 if(facet
&& !*facet
) {
1410 collate_wchar__Getcat(facet
, loc
);
1411 (*(locale_facet
**)facet
)->vtable
= &collate_short_vtable
;
1417 /* ?_Getcat@?$collate@G@std@@SAIPAPBVfacet@locale@2@@Z */
1418 /* ?_Getcat@?$collate@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1419 size_t __cdecl
collate_short__Getcat_old(const locale_facet
**facet
)
1421 return collate_short__Getcat(facet
, locale_classic());
1424 static collate
* collate_short_use_facet(const locale
*loc
)
1426 static collate
*obj
= NULL
;
1429 const locale_facet
*fac
;
1431 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1432 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&collate_short_id
));
1434 _Lockit_dtor(&lock
);
1435 return (collate
*)fac
;
1439 _Lockit_dtor(&lock
);
1443 collate_short__Getcat(&fac
, loc
);
1444 obj
= (collate
*)fac
;
1445 call_locale_facet__Incref(&obj
->facet
);
1446 locale_facet_register(&obj
->facet
);
1447 _Lockit_dtor(&lock
);
1453 int __cdecl
_Wcscoll(const wchar_t *first1
, const wchar_t *last1
, const wchar_t *first2
,
1454 const wchar_t *last2
, const _Collvec
*coll
)
1456 TRACE("(%s %s)\n", debugstr_wn(first1
, last1
-first1
), debugstr_wn(first2
, last2
-first2
));
1458 #if _MSVCP_VER < 110
1459 return CompareStringW(coll
? coll
->handle
: ___lc_handle_func()[LC_COLLATE
],
1460 0, first1
, last1
-first1
, first2
, last2
-first2
)-CSTR_EQUAL
;
1462 return CompareStringEx(coll
? coll
->lc_name
: ___lc_locale_name_func()[LC_COLLATE
],
1463 0, first1
, last1
-first1
, first2
, last2
-first2
, NULL
, NULL
, 0)-CSTR_EQUAL
;
1467 /* ?do_compare@?$collate@_W@std@@MBEHPB_W000@Z */
1468 /* ?do_compare@?$collate@_W@std@@MEBAHPEB_W000@Z */
1469 /* ?do_compare@?$collate@G@std@@MBEHPBG000@Z */
1470 /* ?do_compare@?$collate@G@std@@MEBAHPEBG000@Z */
1471 DEFINE_THISCALL_WRAPPER(collate_wchar_do_compare
, 20)
1472 #if _MSVCP_VER <= 100
1473 #define call_collate_wchar_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 4, int, \
1474 (const collate*, const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*), \
1475 (this, first1, last1, first2, last2))
1477 #define call_collate_wchar_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 12, int, \
1478 (const collate*, const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*), \
1479 (this, first1, last1, first2, last2))
1481 int __thiscall
collate_wchar_do_compare(const collate
*this, const wchar_t *first1
,
1482 const wchar_t *last1
, const wchar_t *first2
, const wchar_t *last2
)
1484 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1485 return _Wcscoll(first1
, last1
, first2
, last2
, &this->coll
);
1488 /* ?compare@?$collate@_W@std@@QBEHPB_W000@Z */
1489 /* ?compare@?$collate@_W@std@@QEBAHPEB_W000@Z */
1490 /* ?compare@?$collate@G@std@@QBEHPBG000@Z */
1491 /* ?compare@?$collate@G@std@@QEBAHPEBG000@Z */
1492 DEFINE_THISCALL_WRAPPER(collate_wchar_compare
, 20)
1493 int __thiscall
collate_wchar_compare(const collate
*this, const wchar_t *first1
,
1494 const wchar_t *last1
, const wchar_t *first2
, const wchar_t *last2
)
1496 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1497 return call_collate_wchar_do_compare(this, first1
, last1
, first2
, last2
);
1500 /* ?do_hash@?$collate@_W@std@@MBEJPB_W0@Z */
1501 /* ?do_hash@?$collate@_W@std@@MEBAJPEB_W0@Z */
1502 /* ?do_hash@?$collate@G@std@@MBEJPBG0@Z */
1503 /* ?do_hash@?$collate@G@std@@MEBAJPEBG0@Z */
1504 DEFINE_THISCALL_WRAPPER(collate_wchar_do_hash
, 12)
1505 #if _MSVCP_VER <= 100
1506 #define call_collate_wchar_do_hash(this, first, last) CALL_VTBL_FUNC(this, 12, LONG, \
1507 (const collate*, const wchar_t*, const wchar_t*), (this, first, last))
1509 #define call_collate_wchar_do_hash(this, first, last) CALL_VTBL_FUNC(this, 20, LONG, \
1510 (const collate*, const wchar_t*, const wchar_t*), (this, first, last))
1512 LONG __thiscall
collate_wchar_do_hash(const collate
*this,
1513 const wchar_t *first
, const wchar_t *last
)
1517 TRACE("(%p %p %p)\n", this, first
, last
);
1519 for(; first
<last
; first
++)
1520 ret
= (ret
<<8 | ret
>>24) + *first
;
1524 /* ?hash@?$collate@_W@std@@QBEJPB_W0@Z */
1525 /* ?hash@?$collate@_W@std@@QEBAJPEB_W0@Z */
1526 /* ?hash@?$collate@G@std@@QBEJPBG0@Z */
1527 /* ?hash@?$collate@G@std@@QEBAJPEBG0@Z */
1528 DEFINE_THISCALL_WRAPPER(collate_wchar_hash
, 12)
1529 LONG __thiscall
collate_wchar_hash(const collate
*this,
1530 const wchar_t *first
, const wchar_t *last
)
1532 TRACE("(%p %p %p)\n", this, first
, last
);
1533 return call_collate_wchar_do_hash(this, first
, last
);
1536 /* ?do_transform@?$collate@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
1537 /* ?do_transform@?$collate@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
1538 /* ?do_transform@?$collate@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
1539 /* ?do_transform@?$collate@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
1540 DEFINE_THISCALL_WRAPPER(collate_wchar_do_transform
, 16)
1541 basic_string_wchar
* __thiscall
collate_wchar_do_transform(const collate
*this,
1542 basic_string_wchar
*ret
, const wchar_t *first
, const wchar_t *last
)
1544 FIXME("(%p %p %p) stub\n", this, first
, last
);
1548 /* ?transform@?$collate@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
1549 /* ?transform@?$collate@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
1550 /* ?transform@?$collate@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
1551 /* ?transform@?$collate@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
1552 DEFINE_THISCALL_WRAPPER(collate_wchar_transform
, 16)
1553 basic_string_wchar
* __thiscall
collate_wchar_transform(const collate
*this,
1554 basic_string_wchar
*ret
, const wchar_t *first
, const wchar_t *last
)
1556 FIXME("(%p %p %p) stub\n", this, first
, last
);
1560 /* ??_7ctype_base@std@@6B@ */
1561 extern const vtable_ptr ctype_base_vtable
;
1563 /* ??0ctype_base@std@@QAE@I@Z */
1564 /* ??0ctype_base@std@@QEAA@_K@Z */
1565 DEFINE_THISCALL_WRAPPER(ctype_base_ctor_refs
, 8)
1566 ctype_base
* __thiscall
ctype_base_ctor_refs(ctype_base
*this, size_t refs
)
1568 TRACE("(%p %Iu)\n", this, refs
);
1569 locale_facet_ctor_refs(&this->facet
, refs
);
1570 this->facet
.vtable
= &ctype_base_vtable
;
1574 /* ??_Fctype_base@std@@QAEXXZ */
1575 /* ??_Fctype_base@std@@QEAAXXZ */
1576 DEFINE_THISCALL_WRAPPER(ctype_base_ctor
, 4)
1577 ctype_base
* __thiscall
ctype_base_ctor(ctype_base
*this)
1579 TRACE("(%p)\n", this);
1580 locale_facet_ctor_refs(&this->facet
, 0);
1581 this->facet
.vtable
= &ctype_base_vtable
;
1585 /* ??1ctype_base@std@@UAE@XZ */
1586 /* ??1ctype_base@std@@UEAA@XZ */
1587 DEFINE_THISCALL_WRAPPER(ctype_base_dtor
, 4)
1588 void __thiscall
ctype_base_dtor(ctype_base
*this)
1590 TRACE("(%p)\n", this);
1593 DEFINE_THISCALL_WRAPPER(ctype_base_vector_dtor
, 8)
1594 ctype_base
* __thiscall
ctype_base_vector_dtor(ctype_base
*this, unsigned int flags
)
1596 TRACE("(%p %x)\n", this, flags
);
1598 /* we have an array, with the number of elements stored before the first object */
1599 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1601 for(i
=*ptr
-1; i
>=0; i
--)
1602 ctype_base_dtor(this+i
);
1603 operator_delete(ptr
);
1605 ctype_base_dtor(this);
1607 operator_delete(this);
1613 /* ?_Xran@ctype_base@std@@KAXXZ */
1614 void __cdecl
ctype_base__Xran(void)
1616 _Xout_of_range("out of range in ctype<T>");
1619 /* ?id@?$ctype@D@std@@2V0locale@2@A */
1620 locale_id ctype_char_id
= {0};
1621 /* ?table_size@?$ctype@D@std@@2IB */
1622 /* ?table_size@?$ctype@D@std@@2_KB */
1623 size_t ctype_char_table_size
= 256;
1625 /* ??_7?$ctype@D@std@@6B@ */
1626 extern const vtable_ptr ctype_char_vtable
;
1628 /* ?_Id_func@?$ctype@D@std@@SAAAVid@locale@2@XZ */
1629 /* ?_Id_func@?$ctype@D@std@@SAAEAVid@locale@2@XZ */
1630 locale_id
* __cdecl
ctype_char__Id_func(void)
1633 return &ctype_char_id
;
1636 /* ?_Init@?$ctype@D@std@@IAEXABV_Locinfo@2@@Z */
1637 /* ?_Init@?$ctype@D@std@@IEAAXAEBV_Locinfo@2@@Z */
1638 DEFINE_THISCALL_WRAPPER(ctype_char__Init
, 8)
1639 void __thiscall
ctype_char__Init(ctype_char
*this, const _Locinfo
*locinfo
)
1641 TRACE("(%p %p)\n", this, locinfo
);
1642 _Locinfo__Getctype(locinfo
, &this->ctype
);
1645 /* ?_Tidy@?$ctype@D@std@@IAEXXZ */
1646 /* ?_Tidy@?$ctype@D@std@@IEAAXXZ */
1647 DEFINE_THISCALL_WRAPPER(ctype_char__Tidy
, 4)
1648 void __thiscall
ctype_char__Tidy(ctype_char
*this)
1650 TRACE("(%p)\n", this);
1652 if(this->ctype
.delfl
)
1653 free((short*)this->ctype
.table
);
1654 #if _MSVCP_VER >= 110
1655 free(this->ctype
.name
);
1659 /* ?classic_table@?$ctype@D@std@@KAPBFXZ */
1660 /* ?classic_table@?$ctype@D@std@@KAPEBFXZ */
1661 const short* __cdecl
ctype_char_classic_table(void)
1666 ctype
= ctype_char_use_facet( locale_classic() );
1667 return ctype
->ctype
.table
;
1670 /* ??0?$ctype@D@std@@QAE@ABV_Locinfo@1@I@Z */
1671 /* ??0?$ctype@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1672 DEFINE_THISCALL_WRAPPER(ctype_char_ctor_locinfo
, 12)
1673 ctype_char
* __thiscall
ctype_char_ctor_locinfo(ctype_char
*this,
1674 const _Locinfo
*locinfo
, size_t refs
)
1676 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
1677 ctype_base_ctor_refs(&this->base
, refs
);
1678 this->base
.facet
.vtable
= &ctype_char_vtable
;
1679 ctype_char__Init(this, locinfo
);
1683 /* ??0?$ctype@D@std@@QAE@PBF_NI@Z */
1684 /* ??0?$ctype@D@std@@QEAA@PEBF_N_K@Z */
1685 DEFINE_THISCALL_WRAPPER(ctype_char_ctor_table
, 16)
1686 ctype_char
* __thiscall
ctype_char_ctor_table(ctype_char
*this,
1687 const short *table
, bool delete, size_t refs
)
1691 TRACE("(%p %p %d %Iu)\n", this, table
, delete, refs
);
1693 ctype_base_ctor_refs(&this->base
, refs
);
1694 this->base
.facet
.vtable
= &ctype_char_vtable
;
1696 _Locinfo_ctor(&locinfo
);
1697 ctype_char__Init(this, &locinfo
);
1698 _Locinfo_dtor(&locinfo
);
1701 ctype_char__Tidy(this);
1702 this->ctype
.table
= table
;
1703 this->ctype
.delfl
= delete;
1708 /* ??_F?$ctype@D@std@@QAEXXZ */
1709 /* ??_F?$ctype@D@std@@QEAAXXZ */
1710 DEFINE_THISCALL_WRAPPER(ctype_char_ctor
, 4)
1711 ctype_char
* __thiscall
ctype_char_ctor(ctype_char
*this)
1713 return ctype_char_ctor_table(this, NULL
, FALSE
, 0);
1716 /* ??1?$ctype@D@std@@UAE@XZ */
1717 /* ??1?$ctype@D@std@@UEAA@XZ */
1718 /* ??1?$ctype@D@std@@MAE@XZ */
1719 /* ??1?$ctype@D@std@@MEAA@XZ */
1720 DEFINE_THISCALL_WRAPPER(ctype_char_dtor
, 4)
1721 void __thiscall
ctype_char_dtor(ctype_char
*this)
1723 TRACE("(%p)\n", this);
1724 ctype_char__Tidy(this);
1727 DEFINE_THISCALL_WRAPPER(ctype_char_vector_dtor
, 8)
1728 ctype_char
* __thiscall
ctype_char_vector_dtor(ctype_char
*this, unsigned int flags
)
1730 TRACE("(%p %x)\n", this, flags
);
1732 /* we have an array, with the number of elements stored before the first object */
1733 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1735 for(i
=*ptr
-1; i
>=0; i
--)
1736 ctype_char_dtor(this+i
);
1737 operator_delete(ptr
);
1739 ctype_char_dtor(this);
1741 operator_delete(this);
1747 /* ?do_narrow@?$ctype@D@std@@MBEDDD@Z */
1748 /* ?do_narrow@?$ctype@D@std@@MEBADDD@Z */
1749 DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow_ch
, 12)
1750 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
1751 #define call_ctype_char_do_narrow_ch(this, ch, unused) CALL_VTBL_FUNC(this, 36, \
1752 char, (const ctype_char*, char, char), (this, ch, unused))
1753 #elif _MSVCP_VER <= 100
1754 #define call_ctype_char_do_narrow_ch(this, ch, unused) CALL_VTBL_FUNC(this, 32, \
1755 char, (const ctype_char*, char, char), (this, ch, unused))
1757 #define call_ctype_char_do_narrow_ch(this, ch, unused) CALL_VTBL_FUNC(this, 40, \
1758 char, (const ctype_char*, char, char), (this, ch, unused))
1760 char __thiscall
ctype_char_do_narrow_ch(const ctype_char
*this, char ch
, char unused
)
1762 TRACE("(%p %c %c)\n", this, ch
, unused
);
1766 /* ?do_narrow@?$ctype@D@std@@MBEPBDPBD0DPAD@Z */
1767 /* ?do_narrow@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD@Z */
1768 DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow
, 20)
1769 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
1770 #define call_ctype_char_do_narrow(this, first, last, unused, dest) CALL_VTBL_FUNC(this, 32, \
1771 const char*, (const ctype_char*, const char*, const char*, char, char*), \
1772 (this, first, last, unused, dest))
1773 #elif _MSVCP_VER <= 100
1774 #define call_ctype_char_do_narrow(this, first, last, unused, dest) CALL_VTBL_FUNC(this, 28, \
1775 const char*, (const ctype_char*, const char*, const char*, char, char*), \
1776 (this, first, last, unused, dest))
1778 #define call_ctype_char_do_narrow(this, first, last, unused, dest) CALL_VTBL_FUNC(this, 36, \
1779 const char*, (const ctype_char*, const char*, const char*, char, char*), \
1780 (this, first, last, unused, dest))
1782 const char* __thiscall
ctype_char_do_narrow(const ctype_char
*this,
1783 const char *first
, const char *last
, char unused
, char *dest
)
1785 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1786 memcpy(dest
, first
, last
-first
);
1790 /* ?_Do_narrow_s@?$ctype@D@std@@MBEPBDPBD0DPADI@Z */
1791 /* ?_Do_narrow_s@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD_K@Z */
1792 DEFINE_THISCALL_WRAPPER(ctype_char__Do_narrow_s
, 24)
1793 #define call_ctype_char__Do_narrow_s(this, first, last, unused, dest, size) CALL_VTBL_FUNC(this, 40, \
1794 const char*, (const ctype_char*, const char*, const char*, char, char*, size_t), \
1795 (this, first, last, unused, dest, size))
1796 const char* __thiscall
ctype_char__Do_narrow_s(const ctype_char
*this, const char *first
,
1797 const char *last
, char unused
, char *dest
, size_t size
)
1799 TRACE("(%p %p %p %p %Iu)\n", this, first
, last
, dest
, size
);
1800 memcpy_s(dest
, size
, first
, last
-first
);
1804 /* ?narrow@?$ctype@D@std@@QBEDDD@Z */
1805 /* ?narrow@?$ctype@D@std@@QEBADDD@Z */
1806 DEFINE_THISCALL_WRAPPER(ctype_char_narrow_ch
, 12)
1807 char __thiscall
ctype_char_narrow_ch(const ctype_char
*this, char ch
, char dflt
)
1809 TRACE("(%p %c %c)\n", this, ch
, dflt
);
1810 return call_ctype_char_do_narrow_ch(this, ch
, dflt
);
1813 /* ?narrow@?$ctype@D@std@@QBEPBDPBD0DPAD@Z */
1814 /* ?narrow@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD@Z */
1815 DEFINE_THISCALL_WRAPPER(ctype_char_narrow
, 20)
1816 const char* __thiscall
ctype_char_narrow(const ctype_char
*this,
1817 const char *first
, const char *last
, char dflt
, char *dest
)
1819 TRACE("(%p %p %p %c %p)\n", this, first
, last
, dflt
, dest
);
1820 return call_ctype_char_do_narrow(this, first
, last
, dflt
, dest
);
1823 /* ?_Narrow_s@?$ctype@D@std@@QBEPBDPBD0DPADI@Z */
1824 /* ?_Narrow_s@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD_K@Z */
1825 DEFINE_THISCALL_WRAPPER(ctype_char__Narrow_s
, 24)
1826 const char* __thiscall
ctype_char__Narrow_s(const ctype_char
*this, const char *first
,
1827 const char *last
, char dflt
, char *dest
, size_t size
)
1829 TRACE("(%p %p %p %p %Iu)\n", this, first
, last
, dest
, size
);
1830 return call_ctype_char__Do_narrow_s(this, first
, last
, dflt
, dest
, size
);
1833 /* ?do_widen@?$ctype@D@std@@MBEDD@Z */
1834 /* ?do_widen@?$ctype@D@std@@MEBADD@Z */
1835 DEFINE_THISCALL_WRAPPER(ctype_char_do_widen_ch
, 8)
1836 #if _MSVCP_VER <= 100
1837 #define call_ctype_char_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
1838 char, (const ctype_char*, char), (this, ch))
1840 #define call_ctype_char_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 32, \
1841 char, (const ctype_char*, char), (this, ch))
1843 char __thiscall
ctype_char_do_widen_ch(const ctype_char
*this, char ch
)
1845 TRACE("(%p %c)\n", this, ch
);
1849 /* ?do_widen@?$ctype@D@std@@MBEPBDPBD0PAD@Z */
1850 /* ?do_widen@?$ctype@D@std@@MEBAPEBDPEBD0PEAD@Z */
1851 DEFINE_THISCALL_WRAPPER(ctype_char_do_widen
, 16)
1852 #if _MSVCP_VER <= 100
1853 #define call_ctype_char_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 20, \
1854 const char*, (const ctype_char*, const char*, const char*, char*), \
1855 (this, first, last, dest))
1857 #define call_ctype_char_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 28, \
1858 const char*, (const ctype_char*, const char*, const char*, char*), \
1859 (this, first, last, dest))
1861 const char* __thiscall
ctype_char_do_widen(const ctype_char
*this,
1862 const char *first
, const char *last
, char *dest
)
1864 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1865 memcpy(dest
, first
, last
-first
);
1869 /* ?_Do_widen_s@?$ctype@D@std@@MBEPBDPBD0PADI@Z */
1870 /* ?_Do_widen_s@?$ctype@D@std@@MEBAPEBDPEBD0PEAD_K@Z */
1871 DEFINE_THISCALL_WRAPPER(ctype_char__Do_widen_s
, 20)
1872 #define call_ctype_char__Do_widen_s(this, first, last, dest, size) CALL_VTBL_FUNC(this, 28, \
1873 const char*, (const ctype_char*, const char*, const char*, char*, size_t), \
1874 (this, first, last, dest, size))
1875 const char* __thiscall
ctype_char__Do_widen_s(const ctype_char
*this,
1876 const char *first
, const char *last
, char *dest
, size_t size
)
1878 TRACE("(%p %p %p %p %Iu)\n", this, first
, last
, dest
, size
);
1879 memcpy_s(dest
, size
, first
, last
-first
);
1883 /* ?widen@?$ctype@D@std@@QBEDD@Z */
1884 /* ?widen@?$ctype@D@std@@QEBADD@Z */
1885 DEFINE_THISCALL_WRAPPER(ctype_char_widen_ch
, 8)
1886 char __thiscall
ctype_char_widen_ch(const ctype_char
*this, char ch
)
1888 TRACE("(%p %c)\n", this, ch
);
1889 return call_ctype_char_do_widen_ch(this, ch
);
1892 /* ?widen@?$ctype@D@std@@QBEPBDPBD0PAD@Z */
1893 /* ?widen@?$ctype@D@std@@QEBAPEBDPEBD0PEAD@Z */
1894 DEFINE_THISCALL_WRAPPER(ctype_char_widen
, 16)
1895 const char* __thiscall
ctype_char_widen(const ctype_char
*this,
1896 const char *first
, const char *last
, char *dest
)
1898 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1899 return call_ctype_char_do_widen(this, first
, last
, dest
);
1902 /* ?_Widen_s@?$ctype@D@std@@QBEPBDPBD0PADI@Z */
1903 /* ?_Widen_s@?$ctype@D@std@@QEBAPEBDPEBD0PEAD_K@Z */
1904 DEFINE_THISCALL_WRAPPER(ctype_char__Widen_s
, 20)
1905 const char* __thiscall
ctype_char__Widen_s(const ctype_char
*this,
1906 const char *first
, const char *last
, char *dest
, size_t size
)
1908 TRACE("(%p %p %p %p %Iu)\n", this, first
, last
, dest
, size
);
1909 return call_ctype_char__Do_widen_s(this, first
, last
, dest
, size
);
1912 /* ?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1913 /* ?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1914 size_t __cdecl
ctype_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
1916 TRACE("(%p %p)\n", facet
, loc
);
1918 if(facet
&& !*facet
) {
1921 *facet
= operator_new(sizeof(ctype_char
));
1922 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
1923 ctype_char_ctor_locinfo((ctype_char
*)*facet
, &locinfo
, 0);
1924 _Locinfo_dtor(&locinfo
);
1930 /* ?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@@Z */
1931 /* ?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1932 size_t __cdecl
ctype_char__Getcat_old(const locale_facet
**facet
)
1934 return ctype_char__Getcat(facet
, locale_classic());
1937 ctype_char
* ctype_char_use_facet(const locale
*loc
)
1939 static ctype_char
*obj
= NULL
;
1942 const locale_facet
*fac
;
1944 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1945 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_char_id
));
1947 _Lockit_dtor(&lock
);
1948 return (ctype_char
*)fac
;
1952 _Lockit_dtor(&lock
);
1956 ctype_char__Getcat(&fac
, loc
);
1957 obj
= (ctype_char
*)fac
;
1958 call_locale_facet__Incref(&obj
->base
.facet
);
1959 locale_facet_register(&obj
->base
.facet
);
1960 _Lockit_dtor(&lock
);
1966 int __cdecl
_Tolower(int ch
, const _Ctypevec
*ctype
)
1970 TRACE("%d %p\n", ch
, ctype
);
1975 cp
= ___lc_codepage_func();
1977 /* Don't convert to unicode in case of C locale */
1979 if(ch
>='A' && ch
<='Z')
1988 str
[0] = (ch
>>8) & 255;
1996 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, str
, size
, &wide
, 1))
1999 lower
= towlower(wide
);
2003 WideCharToMultiByte(cp
, 0, &lower
, 1, str
, 2, NULL
, NULL
);
2005 return str
[0] + (str
[1]<<8);
2009 /* ?do_tolower@?$ctype@D@std@@MBEDD@Z */
2010 /* ?do_tolower@?$ctype@D@std@@MEBADD@Z */
2011 #if _MSVCP_VER <= 100
2012 #define call_ctype_char_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 8, \
2013 char, (const ctype_char*, char), (this, ch))
2015 #define call_ctype_char_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 16, \
2016 char, (const ctype_char*, char), (this, ch))
2018 DEFINE_THISCALL_WRAPPER(ctype_char_do_tolower_ch
, 8)
2019 char __thiscall
ctype_char_do_tolower_ch(const ctype_char
*this, char ch
)
2021 TRACE("(%p %c)\n", this, ch
);
2022 return _Tolower(ch
, &this->ctype
);
2025 /* ?do_tolower@?$ctype@D@std@@MBEPBDPADPBD@Z */
2026 /* ?do_tolower@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z */
2027 #if _MSVCP_VER <= 100
2028 #define call_ctype_char_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 4, \
2029 const char*, (const ctype_char*, char*, const char*), (this, first, last))
2031 #define call_ctype_char_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 12, \
2032 const char*, (const ctype_char*, char*, const char*), (this, first, last))
2034 DEFINE_THISCALL_WRAPPER(ctype_char_do_tolower
, 12)
2035 const char* __thiscall
ctype_char_do_tolower(const ctype_char
*this, char *first
, const char *last
)
2037 TRACE("(%p %p %p)\n", this, first
, last
);
2038 for(; first
<last
; first
++)
2039 *first
= _Tolower(*first
, &this->ctype
);
2043 /* ?tolower@?$ctype@D@std@@QBEDD@Z */
2044 /* ?tolower@?$ctype@D@std@@QEBADD@Z */
2045 DEFINE_THISCALL_WRAPPER(ctype_char_tolower_ch
, 8)
2046 char __thiscall
ctype_char_tolower_ch(const ctype_char
*this, char ch
)
2048 TRACE("(%p %c)\n", this, ch
);
2049 return call_ctype_char_do_tolower_ch(this, ch
);
2052 /* ?tolower@?$ctype@D@std@@QBEPBDPADPBD@Z */
2053 /* ?tolower@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z */
2054 DEFINE_THISCALL_WRAPPER(ctype_char_tolower
, 12)
2055 const char* __thiscall
ctype_char_tolower(const ctype_char
*this, char *first
, const char *last
)
2057 TRACE("(%p %p %p)\n", this, first
, last
);
2058 return call_ctype_char_do_tolower(this, first
, last
);
2062 int __cdecl
_Toupper(int ch
, const _Ctypevec
*ctype
)
2066 TRACE("%d %p\n", ch
, ctype
);
2071 cp
= ___lc_codepage_func();
2073 /* Don't convert to unicode in case of C locale */
2075 if(ch
>='a' && ch
<='z')
2084 str
[0] = (ch
>>8) & 255;
2092 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, str
, size
, &wide
, 1))
2095 upper
= towupper(wide
);
2099 WideCharToMultiByte(cp
, 0, &upper
, 1, str
, 2, NULL
, NULL
);
2101 return str
[0] + (str
[1]<<8);
2105 /* ?do_toupper@?$ctype@D@std@@MBEDD@Z */
2106 /* ?do_toupper@?$ctype@D@std@@MEBADD@Z */
2107 #if _MSVCP_VER <= 100
2108 #define call_ctype_char_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 16, \
2109 char, (const ctype_char*, char), (this, ch))
2111 #define call_ctype_char_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
2112 char, (const ctype_char*, char), (this, ch))
2114 DEFINE_THISCALL_WRAPPER(ctype_char_do_toupper_ch
, 8)
2115 char __thiscall
ctype_char_do_toupper_ch(const ctype_char
*this, char ch
)
2117 TRACE("(%p %c)\n", this, ch
);
2118 return _Toupper(ch
, &this->ctype
);
2121 /* ?do_toupper@?$ctype@D@std@@MBEPBDPADPBD@Z */
2122 /* ?do_toupper@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z */
2123 #if _MSVCP_VER <= 100
2124 #define call_ctype_char_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 12, \
2125 const char*, (const ctype_char*, char*, const char*), (this, first, last))
2127 #define call_ctype_char_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 20, \
2128 const char*, (const ctype_char*, char*, const char*), (this, first, last))
2130 DEFINE_THISCALL_WRAPPER(ctype_char_do_toupper
, 12)
2131 const char* __thiscall
ctype_char_do_toupper(const ctype_char
*this,
2132 char *first
, const char *last
)
2134 TRACE("(%p %p %p)\n", this, first
, last
);
2135 for(; first
<last
; first
++)
2136 *first
= _Toupper(*first
, &this->ctype
);
2140 /* ?toupper@?$ctype@D@std@@QBEDD@Z */
2141 /* ?toupper@?$ctype@D@std@@QEBADD@Z */
2142 DEFINE_THISCALL_WRAPPER(ctype_char_toupper_ch
, 8)
2143 char __thiscall
ctype_char_toupper_ch(const ctype_char
*this, char ch
)
2145 TRACE("(%p %c)\n", this, ch
);
2146 return call_ctype_char_do_toupper_ch(this, ch
);
2149 /* ?toupper@?$ctype@D@std@@QBEPBDPADPBD@Z */
2150 /* ?toupper@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z */
2151 DEFINE_THISCALL_WRAPPER(ctype_char_toupper
, 12)
2152 const char* __thiscall
ctype_char_toupper(const ctype_char
*this, char *first
, const char *last
)
2154 TRACE("(%p %p %p)\n", this, first
, last
);
2155 return call_ctype_char_do_toupper(this, first
, last
);
2158 /* ?is@?$ctype@D@std@@QBE_NFD@Z */
2159 /* ?is@?$ctype@D@std@@QEBA_NFD@Z */
2160 DEFINE_THISCALL_WRAPPER(ctype_char_is_ch
, 12)
2161 bool __thiscall
ctype_char_is_ch(const ctype_char
*this, short mask
, char ch
)
2163 TRACE("(%p %x %c)\n", this, mask
, ch
);
2164 return (this->ctype
.table
[(unsigned char)ch
] & mask
) != 0;
2167 /* ?is@?$ctype@D@std@@QBEPBDPBD0PAF@Z */
2168 /* ?is@?$ctype@D@std@@QEBAPEBDPEBD0PEAF@Z */
2169 DEFINE_THISCALL_WRAPPER(ctype_char_is
, 16)
2170 const char* __thiscall
ctype_char_is(const ctype_char
*this, const char *first
, const char *last
, short *dest
)
2172 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2173 for(; first
<last
; first
++)
2174 *dest
++ = this->ctype
.table
[(unsigned char)*first
];
2178 /* ?scan_is@?$ctype@D@std@@QBEPBDFPBD0@Z */
2179 /* ?scan_is@?$ctype@D@std@@QEBAPEBDFPEBD0@Z */
2180 DEFINE_THISCALL_WRAPPER(ctype_char_scan_is
, 16)
2181 const char* __thiscall
ctype_char_scan_is(const ctype_char
*this, short mask
, const char *first
, const char *last
)
2183 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
2184 for(; first
<last
; first
++)
2185 if(!ctype_char_is_ch(this, mask
, *first
))
2190 /* ?scan_not@?$ctype@D@std@@QBEPBDFPBD0@Z */
2191 /* ?scan_not@?$ctype@D@std@@QEBAPEBDFPEBD0@Z */
2192 DEFINE_THISCALL_WRAPPER(ctype_char_scan_not
, 16)
2193 const char* __thiscall
ctype_char_scan_not(const ctype_char
*this, short mask
, const char *first
, const char *last
)
2195 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
2196 for(; first
<last
; first
++)
2197 if(ctype_char_is_ch(this, mask
, *first
))
2202 /* ?table@?$ctype@D@std@@IBEPBFXZ */
2203 /* ?table@?$ctype@D@std@@IEBAPEBFXZ */
2204 DEFINE_THISCALL_WRAPPER(ctype_char_table
, 4)
2205 const short* __thiscall
ctype_char_table(const ctype_char
*this)
2207 TRACE("(%p)\n", this);
2208 return this->ctype
.table
;
2211 /* ?id@?$ctype@_W@std@@2V0locale@2@A */
2212 locale_id ctype_wchar_id
= {0};
2213 /* ?id@?$ctype@G@std@@2V0locale@2@A */
2214 locale_id ctype_short_id
= {0};
2216 /* ??_7?$ctype@_W@std@@6B@ */
2217 extern const vtable_ptr ctype_wchar_vtable
;
2218 /* ??_7?$ctype@G@std@@6B@ */
2219 extern const vtable_ptr ctype_short_vtable
;
2221 /* ?_Id_func@?$ctype@_W@std@@SAAAVid@locale@2@XZ */
2222 /* ?_Id_func@?$ctype@_W@std@@SAAEAVid@locale@2@XZ */
2223 locale_id
* __cdecl
ctype_wchar__Id_func(void)
2226 return &ctype_wchar_id
;
2229 /* ?_Id_func@?$ctype@G@std@@SAAAVid@locale@2@XZ */
2230 /* ?_Id_func@?$ctype@G@std@@SAAEAVid@locale@2@XZ */
2231 locale_id
* __cdecl
ctype_short__Id_func(void)
2234 return &ctype_short_id
;
2237 /* ?_Init@?$ctype@_W@std@@IAEXABV_Locinfo@2@@Z */
2238 /* ?_Init@?$ctype@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
2239 /* ?_Init@?$ctype@G@std@@IAEXABV_Locinfo@2@@Z */
2240 /* ?_Init@?$ctype@G@std@@IEAAXAEBV_Locinfo@2@@Z */
2241 DEFINE_THISCALL_WRAPPER(ctype_wchar__Init
, 8)
2242 void __thiscall
ctype_wchar__Init(ctype_wchar
*this, const _Locinfo
*locinfo
)
2244 TRACE("(%p %p)\n", this, locinfo
);
2245 _Locinfo__Getctype(locinfo
, &this->ctype
);
2246 _Locinfo__Getcvt(locinfo
, &this->cvt
);
2249 /* ??0?$ctype@_W@std@@QAE@ABV_Locinfo@1@I@Z */
2250 /* ??0?$ctype@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
2251 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor_locinfo
, 12)
2252 ctype_wchar
* __thiscall
ctype_wchar_ctor_locinfo(ctype_wchar
*this,
2253 const _Locinfo
*locinfo
, size_t refs
)
2255 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
2256 ctype_base_ctor_refs(&this->base
, refs
);
2257 this->base
.facet
.vtable
= &ctype_wchar_vtable
;
2258 ctype_wchar__Init(this, locinfo
);
2262 /* ??0?$ctype@G@std@@QAE@ABV_Locinfo@1@I@Z */
2263 /* ??0?$ctype@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
2264 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_locinfo
, 12)
2265 ctype_wchar
* __thiscall
ctype_short_ctor_locinfo(ctype_wchar
*this,
2266 const _Locinfo
*locinfo
, size_t refs
)
2268 ctype_wchar
*ret
= ctype_wchar_ctor_locinfo(this, locinfo
, refs
);
2269 this->base
.facet
.vtable
= &ctype_short_vtable
;
2273 /* ??0?$ctype@_W@std@@QAE@I@Z */
2274 /* ??0?$ctype@_W@std@@QEAA@_K@Z */
2275 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor_refs
, 8)
2276 ctype_wchar
* __thiscall
ctype_wchar_ctor_refs(ctype_wchar
*this, size_t refs
)
2280 TRACE("(%p %Iu)\n", this, refs
);
2282 ctype_base_ctor_refs(&this->base
, refs
);
2283 this->base
.facet
.vtable
= &ctype_wchar_vtable
;
2285 _Locinfo_ctor(&locinfo
);
2286 ctype_wchar__Init(this, &locinfo
);
2287 _Locinfo_dtor(&locinfo
);
2291 /* ??0?$ctype@G@std@@QAE@I@Z */
2292 /* ??0?$ctype@G@std@@QEAA@_K@Z */
2293 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_refs
, 8)
2294 ctype_wchar
* __thiscall
ctype_short_ctor_refs(ctype_wchar
*this, size_t refs
)
2296 ctype_wchar
*ret
= ctype_wchar_ctor_refs(this, refs
);
2297 this->base
.facet
.vtable
= &ctype_short_vtable
;
2301 /* ??0?$ctype@G@std@@IAE@PBDI@Z */
2302 /* ??0?$ctype@G@std@@IEAA@PEBD_K@Z */
2303 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_name
, 12)
2304 ctype_wchar
* __thiscall
ctype_short_ctor_name(ctype_wchar
*this,
2305 const char *name
, size_t refs
)
2309 TRACE("(%p %s %Iu)\n", this, debugstr_a(name
), refs
);
2311 ctype_base_ctor_refs(&this->base
, refs
);
2312 this->base
.facet
.vtable
= &ctype_short_vtable
;
2314 _Locinfo_ctor_cstr(&locinfo
, name
);
2315 ctype_wchar__Init(this, &locinfo
);
2316 _Locinfo_dtor(&locinfo
);
2320 /* ??_F?$ctype@_W@std@@QAEXXZ */
2321 /* ??_F?$ctype@_W@std@@QEAAXXZ */
2322 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor
, 4)
2323 ctype_wchar
* __thiscall
ctype_wchar_ctor(ctype_wchar
*this)
2325 TRACE("(%p)\n", this);
2326 return ctype_short_ctor_refs(this, 0);
2329 /* ??_F?$ctype@G@std@@QAEXXZ */
2330 /* ??_F?$ctype@G@std@@QEAAXXZ */
2331 DEFINE_THISCALL_WRAPPER(ctype_short_ctor
, 4)
2332 ctype_wchar
* __thiscall
ctype_short_ctor(ctype_wchar
*this)
2334 ctype_wchar
*ret
= ctype_wchar_ctor(this);
2335 this->base
.facet
.vtable
= &ctype_short_vtable
;
2339 /* ??1?$ctype@G@std@@UAE@XZ */
2340 /* ??1?$ctype@G@std@@UEAA@XZ */
2341 /* ??1?$ctype@_W@std@@MAE@XZ */
2342 /* ??1?$ctype@_W@std@@MEAA@XZ */
2343 /* ??1?$ctype@G@std@@MAE@XZ */
2344 /* ??1?$ctype@G@std@@MEAA@XZ */
2345 DEFINE_THISCALL_WRAPPER(ctype_wchar_dtor
, 4)
2346 void __thiscall
ctype_wchar_dtor(ctype_wchar
*this)
2348 TRACE("(%p)\n", this);
2349 if(this->ctype
.delfl
)
2350 free((void*)this->ctype
.table
);
2351 #if _MSVCP_VER >= 110
2352 free(this->ctype
.name
);
2356 DEFINE_THISCALL_WRAPPER(ctype_wchar_vector_dtor
, 8)
2357 ctype_wchar
* __thiscall
ctype_wchar_vector_dtor(ctype_wchar
*this, unsigned int flags
)
2359 TRACE("(%p %x)\n", this, flags
);
2361 /* we have an array, with the number of elements stored before the first object */
2362 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
2364 for(i
=*ptr
-1; i
>=0; i
--)
2365 ctype_wchar_dtor(this+i
);
2366 operator_delete(ptr
);
2368 ctype_wchar_dtor(this);
2370 operator_delete(this);
2377 int __cdecl
_Wcrtomb(char *s
, wchar_t wch
, _Mbstatet
*state
, const _Cvtvec
*cvt
)
2382 TRACE("%p %d %p %p\n", s
, wch
, state
, cvt
);
2387 cp
= ___lc_codepage_func();
2399 size
= WideCharToMultiByte(cp
, 0, &wch
, 1, s
, MB_LEN_MAX
, NULL
, &def
);
2408 /* ?_Donarrow@?$ctype@_W@std@@IBED_WD@Z */
2409 /* ?_Donarrow@?$ctype@_W@std@@IEBAD_WD@Z */
2410 /* ?_Donarrow@?$ctype@G@std@@IBEDGD@Z */
2411 /* ?_Donarrow@?$ctype@G@std@@IEBADGD@Z */
2412 DEFINE_THISCALL_WRAPPER(ctype_wchar__Donarrow
, 12)
2413 char __thiscall
ctype_wchar__Donarrow(const ctype_wchar
*this, wchar_t ch
, char dflt
)
2415 char buf
[MB_LEN_MAX
];
2417 TRACE("(%p %d %d)\n", this, ch
, dflt
);
2419 return _Wcrtomb(buf
, ch
, NULL
, &this->cvt
)==1 ? buf
[0] : dflt
;
2422 /* ?do_narrow@?$ctype@_W@std@@MBED_WD@Z */
2423 /* ?do_narrow@?$ctype@_W@std@@MEBAD_WD@Z */
2424 /* ?do_narrow@?$ctype@G@std@@MBEDGD@Z */
2425 /* ?do_narrow@?$ctype@G@std@@MEBADGD@Z */
2426 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow_ch
, 12)
2427 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
2428 #define call_ctype_wchar_do_narrow_ch(this, ch, dflt) CALL_VTBL_FUNC(this, 52, \
2429 char, (const ctype_wchar*, wchar_t, char), (this, ch, dflt))
2430 #elif _MSVCP_VER <= 100
2431 #define call_ctype_wchar_do_narrow_ch(this, ch, dflt) CALL_VTBL_FUNC(this, 48, \
2432 char, (const ctype_wchar*, wchar_t, char), (this, ch, dflt))
2434 #define call_ctype_wchar_do_narrow_ch(this, ch, dflt) CALL_VTBL_FUNC(this, 56, \
2435 char, (const ctype_wchar*, wchar_t, char), (this, ch, dflt))
2437 char __thiscall
ctype_wchar_do_narrow_ch(const ctype_wchar
*this, wchar_t ch
, char dflt
)
2439 return ctype_wchar__Donarrow(this, ch
, dflt
);
2442 /* ?do_narrow@?$ctype@_W@std@@MBEPB_WPB_W0DPAD@Z */
2443 /* ?do_narrow@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD@Z */
2444 /* ?do_narrow@?$ctype@G@std@@MBEPBGPBG0DPAD@Z */
2445 /* ?do_narrow@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD@Z */
2446 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow
, 20)
2447 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
2448 #define call_ctype_wchar_do_narrow(this, first, last, dflt, dest) CALL_VTBL_FUNC(this, 48, \
2449 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*), \
2450 (this, first, last, dflt, dest))
2451 #elif _MSVCP_VER <= 100
2452 #define call_ctype_wchar_do_narrow(this, first, last, dflt, dest) CALL_VTBL_FUNC(this, 44, \
2453 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*), \
2454 (this, first, last, dflt, dest))
2456 #define call_ctype_wchar_do_narrow(this, first, last, dflt, dest) CALL_VTBL_FUNC(this, 52, \
2457 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*), \
2458 (this, first, last, dflt, dest))
2460 const wchar_t* __thiscall
ctype_wchar_do_narrow(const ctype_wchar
*this,
2461 const wchar_t *first
, const wchar_t *last
, char dflt
, char *dest
)
2463 TRACE("(%p %p %p %d %p)\n", this, first
, last
, dflt
, dest
);
2464 for(; first
<last
; first
++)
2465 *dest
++ = ctype_wchar__Donarrow(this, *first
, dflt
);
2469 /* ?_Do_narrow_s@?$ctype@_W@std@@MBEPB_WPB_W0DPADI@Z */
2470 /* ?_Do_narrow_s@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD_K@Z */
2471 /* ?_Do_narrow_s@?$ctype@G@std@@MBEPBGPBG0DPADI@Z */
2472 /* ?_Do_narrow_s@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD_K@Z */
2473 DEFINE_THISCALL_WRAPPER(ctype_wchar__Do_narrow_s
, 24)
2474 #define call_ctype_wchar__Do_narrow_s(this, first, last, dflt, dest, size) CALL_VTBL_FUNC(this, 56, \
2475 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*, size_t), \
2476 (this, first, last, dflt, dest, size))
2477 const wchar_t* __thiscall
ctype_wchar__Do_narrow_s(const ctype_wchar
*this,
2478 const wchar_t *first
, const wchar_t *last
, char dflt
, char *dest
, size_t size
)
2480 TRACE("(%p %p %p %d %p %Iu)\n", this, first
, last
, dflt
, dest
, size
);
2481 /* This function converts all multi-byte characters to dflt,
2482 * thanks to it result size is known before converting */
2483 if(last
-first
> size
)
2485 return ctype_wchar_do_narrow(this, first
, last
, dflt
, dest
);
2488 /* ?narrow@?$ctype@_W@std@@QBED_WD@Z */
2489 /* ?narrow@?$ctype@_W@std@@QEBAD_WD@Z */
2490 /* ?narrow@?$ctype@G@std@@QBEDGD@Z */
2491 /* ?narrow@?$ctype@G@std@@QEBADGD@Z */
2492 DEFINE_THISCALL_WRAPPER(ctype_wchar_narrow_ch
, 12)
2493 char __thiscall
ctype_wchar_narrow_ch(const ctype_wchar
*this, wchar_t ch
, char dflt
)
2495 TRACE("(%p %d %d)\n", this, ch
, dflt
);
2496 return call_ctype_wchar_do_narrow_ch(this, ch
, dflt
);
2499 /* ?narrow@?$ctype@_W@std@@QBEPB_WPB_W0DPAD@Z */
2500 /* ?narrow@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD@Z */
2501 /* ?narrow@?$ctype@G@std@@QBEPBGPBG0DPAD@Z */
2502 /* ?narrow@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD@Z */
2503 DEFINE_THISCALL_WRAPPER(ctype_wchar_narrow
, 20)
2504 const wchar_t* __thiscall
ctype_wchar_narrow(const ctype_wchar
*this,
2505 const wchar_t *first
, const wchar_t *last
, char dflt
, char *dest
)
2507 TRACE("(%p %p %p %d %p)\n", this, first
, last
, dflt
, dest
);
2508 return call_ctype_wchar_do_narrow(this, first
, last
, dflt
, dest
);
2511 /* ?_Narrow_s@?$ctype@_W@std@@QBEPB_WPB_W0DPADI@Z */
2512 /* ?_Narrow_s@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD_K@Z */
2513 /* ?_Narrow_s@?$ctype@G@std@@QBEPBGPBG0DPADI@Z */
2514 /* ?_Narrow_s@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD_K@Z */
2515 DEFINE_THISCALL_WRAPPER(ctype_wchar__Narrow_s
, 24)
2516 const wchar_t* __thiscall
ctype_wchar__Narrow_s(const ctype_wchar
*this, const wchar_t *first
,
2517 const wchar_t *last
, char dflt
, char *dest
, size_t size
)
2519 TRACE("(%p %p %p %d %p %Iu)\n", this, first
, last
, dflt
, dest
, size
);
2520 return call_ctype_wchar__Do_narrow_s(this, first
, last
, dflt
, dest
, size
);
2524 int __cdecl
_Mbrtowc(wchar_t *out
, const char *in
, size_t len
, _Mbstatet
*state
, const _Cvtvec
*cvt
)
2530 TRACE("(%p %p %Iu %p %p)\n", out
, in
, len
, state
, cvt
);
2538 cp
= ___lc_codepage_func();
2542 *out
= (unsigned char)*in
;
2544 memset(state
, 0, sizeof(*state
));
2548 if(MBSTATET_TO_INT(state
)) {
2549 ((char*)&MBSTATET_TO_INT(state
))[1] = *in
;
2551 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, (char*)&MBSTATET_TO_INT(state
), 2, out
, out
? 1 : 0)) {
2552 memset(state
, 0, sizeof(*state
));
2557 memset(state
, 0, sizeof(*state
));
2561 GetCPInfo(cp
, &cp_info
);
2563 for(i
=0; i
<MAX_LEADBYTES
; i
+=2) {
2564 if(!cp_info
.LeadByte
[i
+1])
2566 if((unsigned char)*in
>=cp_info
.LeadByte
[i
] && (unsigned char)*in
<=cp_info
.LeadByte
[i
+1]) {
2574 MBSTATET_TO_INT(state
) = (unsigned char)*in
;
2578 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, in
, 2, out
, out
? 1 : 0)) {
2585 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, in
, 1, out
, out
? 1 : 0)) {
2592 static inline wchar_t mb_to_wc(char ch
, const _Cvtvec
*cvt
)
2597 memset(&state
, 0, sizeof(state
));
2598 return _Mbrtowc(&ret
, &ch
, 1, &state
, cvt
) == 1 ? ret
: 0;
2601 /* ?_Dowiden@?$ctype@_W@std@@IBE_WD@Z */
2602 /* ?_Dowiden@?$ctype@_W@std@@IEBA_WD@Z */
2603 /* ?_Dowiden@?$ctype@G@std@@IBEGD@Z */
2604 /* ?_Dowiden@?$ctype@G@std@@IEBAGD@Z */
2605 DEFINE_THISCALL_WRAPPER(ctype_wchar__Dowiden
, 8)
2606 wchar_t __thiscall
ctype_wchar__Dowiden(const ctype_wchar
*this, char ch
)
2611 TRACE("(%p %d)\n", this, ch
);
2613 memset(&state
, 0, sizeof(state
));
2614 return _Mbrtowc(&ret
, &ch
, 1, &state
, &this->cvt
)<0 ? WEOF
: ret
;
2617 /* ?do_widen@?$ctype@_W@std@@MBE_WD@Z */
2618 /* ?do_widen@?$ctype@_W@std@@MEBA_WD@Z */
2619 /* ?do_widen@?$ctype@G@std@@MBEGD@Z */
2620 /* ?do_widen@?$ctype@G@std@@MEBAGD@Z */
2621 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_widen_ch
, 8)
2622 #if _MSVCP_VER <= 100
2623 #define call_ctype_wchar_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 40, \
2624 wchar_t, (const ctype_wchar*, char), (this, ch))
2626 #define call_ctype_wchar_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 48, \
2627 wchar_t, (const ctype_wchar*, char), (this, ch))
2629 wchar_t __thiscall
ctype_wchar_do_widen_ch(const ctype_wchar
*this, char ch
)
2631 return ctype_wchar__Dowiden(this, ch
);
2634 /* ?do_widen@?$ctype@_W@std@@MBEPBDPBD0PA_W@Z */
2635 /* ?do_widen@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W@Z */
2636 /* ?do_widen@?$ctype@G@std@@MBEPBDPBD0PAG@Z */
2637 /* ?do_widen@?$ctype@G@std@@MEBAPEBDPEBD0PEAG@Z */
2638 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_widen
, 16)
2639 #if _MSVCP_VER <= 100
2640 #define call_ctype_wchar_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 36, \
2641 const char*, (const ctype_wchar*, const char*, const char*, wchar_t*), \
2642 (this, first, last, dest))
2644 #define call_ctype_wchar_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 44, \
2645 const char*, (const ctype_wchar*, const char*, const char*, wchar_t*), \
2646 (this, first, last, dest))
2648 const char* __thiscall
ctype_wchar_do_widen(const ctype_wchar
*this,
2649 const char *first
, const char *last
, wchar_t *dest
)
2651 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2652 for(; first
<last
; first
++)
2653 *dest
++ = ctype_wchar__Dowiden(this, *first
);
2657 /* ?_Do_widen_s@?$ctype@_W@std@@MBEPBDPBD0PA_WI@Z */
2658 /* ?_Do_widen_s@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W_K@Z */
2659 /* ?_Do_widen_s@?$ctype@G@std@@MBEPBDPBD0PAGI@Z */
2660 /* ?_Do_widen_s@?$ctype@G@std@@MEBAPEBDPEBD0PEAG_K@Z */
2661 DEFINE_THISCALL_WRAPPER(ctype_wchar__Do_widen_s
, 20)
2662 #define call_ctype_wchar__Do_widen_s(this, first, last, dest, size) CALL_VTBL_FUNC(this, 44, \
2663 const char*, (const ctype_wchar*, const char*, const char*, wchar_t*, size_t), \
2664 (this, first, last, dest, size))
2665 const char* __thiscall
ctype_wchar__Do_widen_s(const ctype_wchar
*this,
2666 const char *first
, const char *last
, wchar_t *dest
, size_t size
)
2668 TRACE("(%p %p %p %p %Iu)\n", this, first
, last
, dest
, size
);
2669 /* This function converts all multi-byte characters to WEOF,
2670 * thanks to it result size is known before converting */
2671 if(size
< last
-first
)
2673 return ctype_wchar_do_widen(this, first
, last
, dest
);
2676 /* ?widen@?$ctype@_W@std@@QBE_WD@Z */
2677 /* ?widen@?$ctype@_W@std@@QEBA_WD@Z */
2678 /* ?widen@?$ctype@G@std@@QBEGD@Z */
2679 /* ?widen@?$ctype@G@std@@QEBAGD@Z */
2680 DEFINE_THISCALL_WRAPPER(ctype_wchar_widen_ch
, 8)
2681 wchar_t __thiscall
ctype_wchar_widen_ch(const ctype_wchar
*this, char ch
)
2683 TRACE("(%p %d)\n", this, ch
);
2684 return call_ctype_wchar_do_widen_ch(this, ch
);
2687 /* ?widen@?$ctype@_W@std@@QBEPBDPBD0PA_W@Z */
2688 /* ?widen@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W@Z */
2689 /* ?widen@?$ctype@G@std@@QBEPBDPBD0PAG@Z */
2690 /* ?widen@?$ctype@G@std@@QEBAPEBDPEBD0PEAG@Z */
2691 DEFINE_THISCALL_WRAPPER(ctype_wchar_widen
, 16)
2692 const char* __thiscall
ctype_wchar_widen(const ctype_wchar
*this,
2693 const char *first
, const char *last
, wchar_t *dest
)
2695 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2696 return call_ctype_wchar_do_widen(this, first
, last
, dest
);
2699 /* ?_Widen_s@?$ctype@_W@std@@QBEPBDPBD0PA_WI@Z */
2700 /* ?_Widen_s@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W_K@Z */
2701 /* ?_Widen_s@?$ctype@G@std@@QBEPBDPBD0PAGI@Z */
2702 /* ?_Widen_s@?$ctype@G@std@@QEBAPEBDPEBD0PEAG_K@Z */
2703 DEFINE_THISCALL_WRAPPER(ctype_wchar__Widen_s
, 20)
2704 const char* __thiscall
ctype_wchar__Widen_s(const ctype_wchar
*this,
2705 const char *first
, const char *last
, wchar_t *dest
, size_t size
)
2707 TRACE("(%p %p %p %p %Iu)\n", this, first
, last
, dest
, size
);
2708 return call_ctype_wchar__Do_widen_s(this, first
, last
, dest
, size
);
2711 /* ?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2712 /* ?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2713 size_t __cdecl
ctype_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
2715 TRACE("(%p %p)\n", facet
, loc
);
2717 if(facet
&& !*facet
) {
2720 *facet
= operator_new(sizeof(ctype_wchar
));
2721 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
2722 ctype_wchar_ctor_locinfo((ctype_wchar
*)*facet
, &locinfo
, 0);
2723 _Locinfo_dtor(&locinfo
);
2729 /* ?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@@Z */
2730 /* ?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
2731 size_t __cdecl
ctype_wchar__Getcat_old(const locale_facet
**facet
)
2733 return ctype_wchar__Getcat(facet
, locale_classic());
2736 /* ?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2737 /* ?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2738 size_t __cdecl
ctype_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
2740 if(facet
&& !*facet
) {
2741 ctype_wchar__Getcat(facet
, loc
);
2742 (*(locale_facet
**)facet
)->vtable
= &ctype_short_vtable
;
2748 /* ?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@@Z */
2749 /* ?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
2750 size_t __cdecl
ctype_short__Getcat_old(const locale_facet
**facet
)
2752 return ctype_short__Getcat(facet
, locale_classic());
2756 wchar_t __cdecl
_Towlower(wchar_t ch
, const _Ctypevec
*ctype
)
2758 TRACE("(%d %p)\n", ch
, ctype
);
2759 return towlower(ch
);
2762 ctype_wchar
* ctype_wchar_use_facet(const locale
*loc
)
2764 static ctype_wchar
*obj
= NULL
;
2767 const locale_facet
*fac
;
2769 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
2770 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_wchar_id
));
2772 _Lockit_dtor(&lock
);
2773 return (ctype_wchar
*)fac
;
2777 _Lockit_dtor(&lock
);
2781 ctype_wchar__Getcat(&fac
, loc
);
2782 obj
= (ctype_wchar
*)fac
;
2783 call_locale_facet__Incref(&obj
->base
.facet
);
2784 locale_facet_register(&obj
->base
.facet
);
2785 _Lockit_dtor(&lock
);
2790 ctype_wchar
* ctype_short_use_facet(const locale
*loc
)
2792 static ctype_wchar
*obj
= NULL
;
2795 const locale_facet
*fac
;
2797 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
2798 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_short_id
));
2800 _Lockit_dtor(&lock
);
2801 return (ctype_wchar
*)fac
;
2805 _Lockit_dtor(&lock
);
2809 ctype_short__Getcat(&fac
, loc
);
2810 obj
= (ctype_wchar
*)fac
;
2811 call_locale_facet__Incref(&obj
->base
.facet
);
2812 locale_facet_register(&obj
->base
.facet
);
2813 _Lockit_dtor(&lock
);
2818 /* ?do_tolower@?$ctype@_W@std@@MBE_W_W@Z */
2819 /* ?do_tolower@?$ctype@_W@std@@MEBA_W_W@Z */
2820 /* ?do_tolower@?$ctype@G@std@@MBEGG@Z */
2821 /* ?do_tolower@?$ctype@G@std@@MEBAGG@Z */
2822 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_tolower_ch
, 8)
2823 #if _MSVCP_VER <= 100
2824 #define call_ctype_wchar_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
2825 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2827 #define call_ctype_wchar_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 32, \
2828 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2830 wchar_t __thiscall
ctype_wchar_do_tolower_ch(const ctype_wchar
*this, wchar_t ch
)
2832 return _Towlower(ch
, &this->ctype
);
2835 /* ?do_tolower@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */
2836 /* ?do_tolower@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z */
2837 /* ?do_tolower@?$ctype@G@std@@MBEPBGPAGPBG@Z */
2838 /* ?do_tolower@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */
2839 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_tolower
, 12)
2840 #if _MSVCP_VER <= 100
2841 #define call_ctype_wchar_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 20, \
2842 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2843 (this, first, last))
2845 #define call_ctype_wchar_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 28, \
2846 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2847 (this, first, last))
2849 const wchar_t* __thiscall
ctype_wchar_do_tolower(const ctype_wchar
*this,
2850 wchar_t *first
, const wchar_t *last
)
2852 TRACE("(%p %p %p)\n", this, first
, last
);
2853 for(; first
<last
; first
++)
2854 *first
= _Towlower(*first
, &this->ctype
);
2858 /* ?tolower@?$ctype@_W@std@@QBE_W_W@Z */
2859 /* ?tolower@?$ctype@_W@std@@QEBA_W_W@Z */
2860 /* ?tolower@?$ctype@G@std@@QBEGG@Z */
2861 /* ?tolower@?$ctype@G@std@@QEBAGG@Z */
2862 DEFINE_THISCALL_WRAPPER(ctype_wchar_tolower_ch
, 8)
2863 wchar_t __thiscall
ctype_wchar_tolower_ch(const ctype_wchar
*this, wchar_t ch
)
2865 TRACE("(%p %d)\n", this, ch
);
2866 return call_ctype_wchar_do_tolower_ch(this, ch
);
2869 /* ?tolower@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */
2870 /* ?tolower@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z */
2871 /* ?tolower@?$ctype@G@std@@QBEPBGPAGPBG@Z */
2872 /* ?tolower@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z */
2873 DEFINE_THISCALL_WRAPPER(ctype_wchar_tolower
, 12)
2874 const wchar_t* __thiscall
ctype_wchar_tolower(const ctype_wchar
*this,
2875 wchar_t *first
, const wchar_t *last
)
2877 TRACE("(%p %p %p)\n", this, first
, last
);
2878 return call_ctype_wchar_do_tolower(this, first
, last
);
2882 wchar_t __cdecl
_Towupper(wchar_t ch
, const _Ctypevec
*ctype
)
2884 TRACE("(%d %p)\n", ch
, ctype
);
2885 return towupper(ch
);
2888 /* ?do_toupper@?$ctype@_W@std@@MBE_W_W@Z */
2889 /* ?do_toupper@?$ctype@_W@std@@MEBA_W_W@Z */
2890 /* ?do_toupper@?$ctype@G@std@@MBEGG@Z */
2891 /* ?do_toupper@?$ctype@G@std@@MEBAGG@Z */
2892 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper_ch
, 8)
2893 #if _MSVCP_VER <= 100
2894 #define call_ctype_wchar_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 32, \
2895 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2897 #define call_ctype_wchar_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 40, \
2898 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2900 wchar_t __thiscall
ctype_wchar_do_toupper_ch(const ctype_wchar
*this, wchar_t ch
)
2902 return _Towupper(ch
, &this->ctype
);
2905 /* ?do_toupper@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */
2906 /* ?do_toupper@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z */
2907 /* ?do_toupper@?$ctype@G@std@@MBEPBGPAGPBG@Z */
2908 /* ?do_toupper@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */
2909 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper
, 12)
2910 #if _MSVCP_VER <= 100
2911 #define call_ctype_wchar_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 28, \
2912 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2913 (this, first, last))
2915 #define call_ctype_wchar_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 36, \
2916 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2917 (this, first, last))
2919 const wchar_t* __thiscall
ctype_wchar_do_toupper(const ctype_wchar
*this,
2920 wchar_t *first
, const wchar_t *last
)
2922 TRACE("(%p %p %p)\n", this, first
, last
);
2923 for(; first
<last
; first
++)
2924 *first
= _Towupper(*first
, &this->ctype
);
2928 /* ?toupper@?$ctype@_W@std@@QBE_W_W@Z */
2929 /* ?toupper@?$ctype@_W@std@@QEBA_W_W@Z */
2930 /* ?toupper@?$ctype@G@std@@QBEGG@Z */
2931 /* ?toupper@?$ctype@G@std@@QEBAGG@Z */
2932 DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper_ch
, 8)
2933 wchar_t __thiscall
ctype_wchar_toupper_ch(const ctype_wchar
*this, wchar_t ch
)
2935 TRACE("(%p %d)\n", this, ch
);
2936 return call_ctype_wchar_do_toupper_ch(this, ch
);
2939 /* ?toupper@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */
2940 /* ?toupper@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z */
2941 /* ?toupper@?$ctype@G@std@@QBEPBGPAGPBG@Z */
2942 /* ?toupper@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z */
2943 DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper
, 12)
2944 const wchar_t* __thiscall
ctype_wchar_toupper(const ctype_wchar
*this,
2945 wchar_t *first
, const wchar_t *last
)
2947 TRACE("(%p %p %p)\n", this, first
, last
);
2948 return call_ctype_wchar_do_toupper(this, first
, last
);
2952 const wchar_t* __cdecl
_Getwctypes(const wchar_t *first
, const wchar_t *last
,
2953 short *mask
, const _Ctypevec
*ctype
)
2955 TRACE("(%p %p %p %p)\n", first
, last
, mask
, ctype
);
2956 GetStringTypeW(CT_CTYPE1
, first
, last
-first
, (WORD
*)mask
);
2961 short __cdecl
_Getwctype(wchar_t ch
, const _Ctypevec
*ctype
)
2964 _Getwctypes(&ch
, &ch
+1, &mask
, ctype
);
2968 /* ?do_is@?$ctype@_W@std@@MBE_NF_W@Z */
2969 /* ?do_is@?$ctype@_W@std@@MEBA_NF_W@Z */
2970 /* ?do_is@?$ctype@G@std@@MBE_NFG@Z */
2971 /* ?do_is@?$ctype@G@std@@MEBA_NFG@Z */
2972 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is_ch
, 12)
2973 #if _MSVCP_VER <= 100
2974 #define call_ctype_wchar_do_is_ch(this, mask, ch) CALL_VTBL_FUNC(this, 8, \
2975 bool, (const ctype_wchar*, short, wchar_t), (this, mask, ch))
2977 #define call_ctype_wchar_do_is_ch(this, mask, ch) CALL_VTBL_FUNC(this, 16, \
2978 bool, (const ctype_wchar*, short, wchar_t), (this, mask, ch))
2980 bool __thiscall
ctype_wchar_do_is_ch(const ctype_wchar
*this, short mask
, wchar_t ch
)
2982 TRACE("(%p %x %d)\n", this, mask
, ch
);
2983 return (_Getwctype(ch
, &this->ctype
) & mask
) != 0;
2986 /* ?do_is@?$ctype@_W@std@@MBEPB_WPB_W0PAF@Z */
2987 /* ?do_is@?$ctype@_W@std@@MEBAPEB_WPEB_W0PEAF@Z */
2988 /* ?do_is@?$ctype@G@std@@MBEPBGPBG0PAF@Z */
2989 /* ?do_is@?$ctype@G@std@@MEBAPEBGPEBG0PEAF@Z */
2990 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is
, 16)
2991 #if _MSVCP_VER <= 100
2992 #define call_ctype_wchar_do_is(this, first, last, dest) CALL_VTBL_FUNC(this, 4, \
2993 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, short*), \
2994 (this, first, last, dest))
2996 #define call_ctype_wchar_do_is(this, first, last, dest) CALL_VTBL_FUNC(this, 12, \
2997 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, short*), \
2998 (this, first, last, dest))
3000 const wchar_t* __thiscall
ctype_wchar_do_is(const ctype_wchar
*this,
3001 const wchar_t *first
, const wchar_t *last
, short *dest
)
3003 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
3004 return _Getwctypes(first
, last
, dest
, &this->ctype
);
3007 /* ?is@?$ctype@_W@std@@QBE_NF_W@Z */
3008 /* ?is@?$ctype@_W@std@@QEBA_NF_W@Z */
3009 /* ?is@?$ctype@G@std@@QBE_NFG@Z */
3010 /* ?is@?$ctype@G@std@@QEBA_NFG@Z */
3011 DEFINE_THISCALL_WRAPPER(ctype_wchar_is_ch
, 12)
3012 bool __thiscall
ctype_wchar_is_ch(const ctype_wchar
*this, short mask
, wchar_t ch
)
3014 TRACE("(%p %x %d)\n", this, mask
, ch
);
3015 return call_ctype_wchar_do_is_ch(this, mask
, ch
);
3018 /* ?is@?$ctype@_W@std@@QBEPB_WPB_W0PAF@Z */
3019 /* ?is@?$ctype@_W@std@@QEBAPEB_WPEB_W0PEAF@Z */
3020 /* ?is@?$ctype@G@std@@QBEPBGPBG0PAF@Z */
3021 /* ?is@?$ctype@G@std@@QEBAPEBGPEBG0PEAF@Z */
3022 DEFINE_THISCALL_WRAPPER(ctype_wchar_is
, 16)
3023 const wchar_t* __thiscall
ctype_wchar_is(const ctype_wchar
*this,
3024 const wchar_t *first
, const wchar_t *last
, short *dest
)
3026 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
3027 return call_ctype_wchar_do_is(this, first
, last
, dest
);
3030 /* ?do_scan_is@?$ctype@_W@std@@MBEPB_WFPB_W0@Z */
3031 /* ?do_scan_is@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z */
3032 /* ?do_scan_is@?$ctype@G@std@@MBEPBGFPBG0@Z */
3033 /* ?do_scan_is@?$ctype@G@std@@MEBAPEBGFPEBG0@Z */
3034 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_scan_is
, 16)
3035 #if _MSVCP_VER <= 100
3036 #define call_ctype_wchar_do_scan_is(this, mask, first, last) CALL_VTBL_FUNC(this, 12, \
3037 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
3038 (this, mask, first, last))
3040 #define call_ctype_wchar_do_scan_is(this, mask, first, last) CALL_VTBL_FUNC(this, 20, \
3041 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
3042 (this, mask, first, last))
3044 const wchar_t* __thiscall
ctype_wchar_do_scan_is(const ctype_wchar
*this,
3045 short mask
, const wchar_t *first
, const wchar_t *last
)
3047 TRACE("(%p %d %p %p)\n", this, mask
, first
, last
);
3048 for(; first
<last
; first
++)
3049 if(!ctype_wchar_is_ch(this, mask
, *first
))
3054 /* ?scan_is@?$ctype@_W@std@@QBEPB_WFPB_W0@Z */
3055 /* ?scan_is@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z */
3056 /* ?scan_is@?$ctype@G@std@@QBEPBGFPBG0@Z */
3057 /* ?scan_is@?$ctype@G@std@@QEBAPEBGFPEBG0@Z */
3058 DEFINE_THISCALL_WRAPPER(ctype_wchar_scan_is
, 16)
3059 const wchar_t* __thiscall
ctype_wchar_scan_is(const ctype_wchar
*this,
3060 short mask
, const wchar_t *first
, const wchar_t *last
)
3062 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
3063 return call_ctype_wchar_do_scan_is(this, mask
, first
, last
);
3066 /* ?do_scan_not@?$ctype@_W@std@@MBEPB_WFPB_W0@Z */
3067 /* ?do_scan_not@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z */
3068 /* ?do_scan_not@?$ctype@G@std@@MBEPBGFPBG0@Z */
3069 /* ?do_scan_not@?$ctype@G@std@@MEBAPEBGFPEBG0@Z */
3070 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_scan_not
, 16)
3071 #if _MSVCP_VER <= 100
3072 #define call_ctype_wchar_do_scan_not(this, mask, first, last) CALL_VTBL_FUNC(this, 16, \
3073 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
3074 (this, mask, first, last))
3076 #define call_ctype_wchar_do_scan_not(this, mask, first, last) CALL_VTBL_FUNC(this, 24, \
3077 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
3078 (this, mask, first, last))
3080 const wchar_t* __thiscall
ctype_wchar_do_scan_not(const ctype_wchar
*this,
3081 short mask
, const wchar_t *first
, const wchar_t *last
)
3083 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
3084 for(; first
<last
; first
++)
3085 if(ctype_wchar_is_ch(this, mask
, *first
))
3090 /* ?scan_not@?$ctype@_W@std@@QBEPB_WFPB_W0@Z */
3091 /* ?scan_not@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z */
3092 /* ?scan_not@?$ctype@G@std@@QBEPBGFPBG0@Z */
3093 /* ?scan_not@?$ctype@G@std@@QEBAPEBGFPEBG0@Z */
3094 DEFINE_THISCALL_WRAPPER(ctype_wchar_scan_not
, 16)
3095 const wchar_t* __thiscall
ctype_wchar_scan_not(const ctype_wchar
*this,
3096 short mask
, const wchar_t *first
, const wchar_t *last
)
3098 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
3099 return call_ctype_wchar_do_scan_not(this, mask
, first
, last
);
3102 /* ??_7codecvt_base@std@@6B@ */
3103 extern const vtable_ptr codecvt_base_vtable
;
3105 /* ??0codecvt_base@std@@QAE@I@Z */
3106 /* ??0codecvt_base@std@@QEAA@_K@Z */
3107 DEFINE_THISCALL_WRAPPER(codecvt_base_ctor_refs
, 8)
3108 codecvt_base
* __thiscall
codecvt_base_ctor_refs(codecvt_base
*this, size_t refs
)
3110 TRACE("(%p %Iu)\n", this, refs
);
3111 locale_facet_ctor_refs(&this->facet
, refs
);
3112 this->facet
.vtable
= &codecvt_base_vtable
;
3116 /* ??_Fcodecvt_base@std@@QAEXXZ */
3117 /* ??_Fcodecvt_base@std@@QEAAXXZ */
3118 DEFINE_THISCALL_WRAPPER(codecvt_base_ctor
, 4)
3119 codecvt_base
* __thiscall
codecvt_base_ctor(codecvt_base
*this)
3121 return codecvt_base_ctor_refs(this, 0);
3124 /* ??1codecvt_base@std@@UAE@XZ */
3125 /* ??1codecvt_base@std@@UEAA@XZ */
3126 DEFINE_THISCALL_WRAPPER(codecvt_base_dtor
, 4)
3127 void __thiscall
codecvt_base_dtor(codecvt_base
*this)
3129 TRACE("(%p)\n", this);
3130 locale_facet_dtor(&this->facet
);
3133 DEFINE_THISCALL_WRAPPER(codecvt_base_vector_dtor
, 8)
3134 codecvt_base
* __thiscall
codecvt_base_vector_dtor(codecvt_base
*this, unsigned int flags
)
3136 TRACE("(%p %x)\n", this, flags
);
3138 /* we have an array, with the number of elements stored before the first object */
3139 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
3141 for(i
=*ptr
-1; i
>=0; i
--)
3142 codecvt_base_dtor(this+i
);
3143 operator_delete(ptr
);
3145 codecvt_base_dtor(this);
3147 operator_delete(this);
3153 /* ?do_always_noconv@codecvt_base@std@@MBE_NXZ */
3154 /* ?do_always_noconv@codecvt_base@std@@MEBA_NXZ */
3155 #if _MSVCP_VER <= 100
3156 #define call_codecvt_base_do_always_noconv(this) CALL_VTBL_FUNC(this, 4, \
3157 bool, (const codecvt_base*), (this))
3159 #define call_codecvt_base_do_always_noconv(this) CALL_VTBL_FUNC(this, 12, \
3160 bool, (const codecvt_base*), (this))
3162 DEFINE_THISCALL_WRAPPER(codecvt_base_do_always_noconv
, 4)
3163 bool __thiscall
codecvt_base_do_always_noconv(const codecvt_base
*this)
3165 TRACE("(%p)\n", this);
3166 return _MSVCP_VER
<= 100;
3169 /* ?always_noconv@codecvt_base@std@@QBE_NXZ */
3170 /* ?always_noconv@codecvt_base@std@@QEBA_NXZ */
3171 DEFINE_THISCALL_WRAPPER(codecvt_base_always_noconv
, 4)
3172 bool __thiscall
codecvt_base_always_noconv(const codecvt_base
*this)
3174 TRACE("(%p)\n", this);
3175 return call_codecvt_base_do_always_noconv(this);
3178 /* ?do_max_length@codecvt_base@std@@MBEHXZ */
3179 /* ?do_max_length@codecvt_base@std@@MEBAHXZ */
3180 #if _MSVCP_VER <= 100
3181 #define call_codecvt_base_do_max_length(this) CALL_VTBL_FUNC(this, 8, \
3182 int, (const codecvt_base*), (this))
3184 #define call_codecvt_base_do_max_length(this) CALL_VTBL_FUNC(this, 16, \
3185 int, (const codecvt_base*), (this))
3187 DEFINE_THISCALL_WRAPPER(codecvt_base_do_max_length
, 4)
3188 int __thiscall
codecvt_base_do_max_length(const codecvt_base
*this)
3190 TRACE("(%p)\n", this);
3194 /* ?max_length@codecvt_base@std@@QBEHXZ */
3195 /* ?max_length@codecvt_base@std@@QEBAHXZ */
3196 DEFINE_THISCALL_WRAPPER(codecvt_base_max_length
, 4)
3197 int __thiscall
codecvt_base_max_length(const codecvt_base
*this)
3199 TRACE("(%p)\n", this);
3200 return call_codecvt_base_do_max_length(this);
3203 /* ?do_encoding@codecvt_base@std@@MBEHXZ */
3204 /* ?do_encoding@codecvt_base@std@@MEBAHXZ */
3205 #if _MSVCP_VER <= 100
3206 #define call_codecvt_base_do_encoding(this) CALL_VTBL_FUNC(this, 12, \
3207 int, (const codecvt_base*), (this))
3209 #define call_codecvt_base_do_encoding(this) CALL_VTBL_FUNC(this, 20, \
3210 int, (const codecvt_base*), (this))
3212 DEFINE_THISCALL_WRAPPER(codecvt_base_do_encoding
, 4)
3213 int __thiscall
codecvt_base_do_encoding(const codecvt_base
*this)
3215 TRACE("(%p)\n", this);
3219 /* ?encoding@codecvt_base@std@@QBEHXZ */
3220 /* ?encoding@codecvt_base@std@@QEBAHXZ */
3221 DEFINE_THISCALL_WRAPPER(codecvt_base_encoding
, 4)
3222 int __thiscall
codecvt_base_encoding(const codecvt_base
*this)
3224 TRACE("(%p)\n", this);
3225 return call_codecvt_base_do_encoding(this);
3228 /* ?id@?$codecvt@DDH@std@@2V0locale@2@A */
3229 locale_id codecvt_char_id
= {0};
3231 /* ??_7?$codecvt@DDH@std@@6B@ */
3232 extern const vtable_ptr codecvt_char_vtable
;
3234 /* ?_Init@?$codecvt@DDH@std@@IAEXABV_Locinfo@2@@Z */
3235 /* ?_Init@?$codecvt@DDH@std@@IEAAXAEBV_Locinfo@2@@Z */
3236 DEFINE_THISCALL_WRAPPER(codecvt_char__Init
, 8)
3237 void __thiscall
codecvt_char__Init(codecvt_char
*this, const _Locinfo
*locinfo
)
3239 TRACE("(%p %p)\n", this, locinfo
);
3242 /* ??0?$codecvt@DDH@std@@QAE@ABV_Locinfo@1@I@Z */
3243 /* ??0?$codecvt@DDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
3244 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor_locinfo
, 12)
3245 codecvt_char
* __thiscall
codecvt_char_ctor_locinfo(codecvt_char
*this, const _Locinfo
*locinfo
, size_t refs
)
3247 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
3248 codecvt_base_ctor_refs(&this->base
, refs
);
3249 this->base
.facet
.vtable
= &codecvt_char_vtable
;
3253 /* ??0?$codecvt@DDH@std@@QAE@I@Z */
3254 /* ??0?$codecvt@DDH@std@@QEAA@_K@Z */
3255 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor_refs
, 8)
3256 codecvt_char
* __thiscall
codecvt_char_ctor_refs(codecvt_char
*this, size_t refs
)
3258 return codecvt_char_ctor_locinfo(this, NULL
, refs
);
3261 /* ??_F?$codecvt@DDH@std@@QAEXXZ */
3262 /* ??_F?$codecvt@DDH@std@@QEAAXXZ */
3263 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor
, 4)
3264 codecvt_char
* __thiscall
codecvt_char_ctor(codecvt_char
*this)
3266 return codecvt_char_ctor_locinfo(this, NULL
, 0);
3269 /* ??1?$codecvt@DDH@std@@UAE@XZ */
3270 /* ??1?$codecvt@DDH@std@@UEAA@XZ */
3271 /* ??1?$codecvt@DDH@std@@MAE@XZ */
3272 /* ??1?$codecvt@DDH@std@@MEAA@XZ */
3273 DEFINE_THISCALL_WRAPPER(codecvt_char_dtor
, 4)
3274 void __thiscall
codecvt_char_dtor(codecvt_char
*this)
3276 TRACE("(%p)\n", this);
3277 codecvt_base_dtor(&this->base
);
3280 DEFINE_THISCALL_WRAPPER(codecvt_char_vector_dtor
, 8)
3281 codecvt_char
* __thiscall
codecvt_char_vector_dtor(codecvt_char
*this, unsigned int flags
)
3283 TRACE("(%p %x)\n", this, flags
);
3285 /* we have an array, with the number of elements stored before the first object */
3286 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
3288 for(i
=*ptr
-1; i
>=0; i
--)
3289 codecvt_char_dtor(this+i
);
3290 operator_delete(ptr
);
3292 codecvt_char_dtor(this);
3294 operator_delete(this);
3300 /* ?_Getcat@?$codecvt@DDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3301 /* ?_Getcat@?$codecvt@DDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3302 size_t __cdecl
codecvt_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
3304 TRACE("(%p %p)\n", facet
, loc
);
3306 if(facet
&& !*facet
) {
3307 *facet
= operator_new(sizeof(codecvt_char
));
3308 codecvt_char_ctor((codecvt_char
*)*facet
);
3314 /* ?_Getcat@?$codecvt@DDH@std@@SAIPAPBVfacet@locale@2@@Z */
3315 /* ?_Getcat@?$codecvt@DDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3316 size_t __cdecl
codecvt_char__Getcat_old(const locale_facet
**facet
)
3318 return codecvt_char__Getcat(facet
, locale_classic());
3321 codecvt_char
* codecvt_char_use_facet(const locale
*loc
)
3323 static codecvt_char
*obj
= NULL
;
3326 const locale_facet
*fac
;
3328 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3329 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_char_id
));
3331 _Lockit_dtor(&lock
);
3332 return (codecvt_char
*)fac
;
3336 _Lockit_dtor(&lock
);
3340 codecvt_char__Getcat(&fac
, loc
);
3341 obj
= (codecvt_char
*)fac
;
3342 call_locale_facet__Incref(&obj
->base
.facet
);
3343 locale_facet_register(&obj
->base
.facet
);
3344 _Lockit_dtor(&lock
);
3349 /* ?do_always_noconv@?$codecvt@DDH@std@@MBE_NXZ */
3350 /* ?do_always_noconv@?$codecvt@DDH@std@@MEBA_NXZ */
3351 DEFINE_THISCALL_WRAPPER(codecvt_char_do_always_noconv
, 4)
3352 bool __thiscall
codecvt_char_do_always_noconv(const codecvt_char
*this)
3354 TRACE("(%p)\n", this);
3358 /* ?do_in@?$codecvt@DDH@std@@MBEHAAHPBD1AAPBDPAD3AAPAD@Z */
3359 /* ?do_in@?$codecvt@DDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
3360 #if _MSVCP_VER <= 100
3361 #define call_codecvt_char_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
3362 CALL_VTBL_FUNC(this, 16, int, \
3363 (const codecvt_char*, _Mbstatet*, const char*, const char*, const char**, char*, char*, char**), \
3364 (this, state, from, from_end, from_next, to, to_end, to_next))
3366 #define call_codecvt_char_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
3367 CALL_VTBL_FUNC(this, 24, int, \
3368 (const codecvt_char*, _Mbstatet*, const char*, const char*, const char**, char*, char*, char**), \
3369 (this, state, from, from_end, from_next, to, to_end, to_next))
3371 DEFINE_THISCALL_WRAPPER(codecvt_char_do_in
, 32)
3372 int __thiscall
codecvt_char_do_in(const codecvt_char
*this, _Mbstatet
*state
,
3373 const char *from
, const char *from_end
, const char **from_next
,
3374 char *to
, char *to_end
, char **to_next
)
3376 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
3377 from_next
, to
, to_end
, to_next
);
3380 return CODECVT_noconv
;
3383 /* ?in@?$codecvt@DDH@std@@QBEHAAHPBD1AAPBDPAD3AAPAD@Z */
3384 /* ?in@?$codecvt@DDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
3385 DEFINE_THISCALL_WRAPPER(codecvt_char_in
, 32)
3386 int __thiscall
codecvt_char_in(const codecvt_char
*this, _Mbstatet
*state
,
3387 const char *from
, const char *from_end
, const char **from_next
,
3388 char *to
, char *to_end
, char **to_next
)
3390 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
3391 from_next
, to
, to_end
, to_next
);
3392 return call_codecvt_char_do_in(this, state
, from
, from_end
, from_next
,
3393 to
, to_end
, to_next
);
3396 /* ?do_out@?$codecvt@DDH@std@@MBEHAAHPBD1AAPBDPAD3AAPAD@Z */
3397 /* ?do_out@?$codecvt@DDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
3398 #if _MSVCP_VER <= 100
3399 #define call_codecvt_char_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
3400 CALL_VTBL_FUNC(this, 20, int, \
3401 (const codecvt_char*, _Mbstatet*, const char*, const char*, const char**, char*, char*, char**), \
3402 (this, state, from, from_end, from_next, to, to_end, to_next))
3404 #define call_codecvt_char_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
3405 CALL_VTBL_FUNC(this, 28, int, \
3406 (const codecvt_char*, _Mbstatet*, const char*, const char*, const char**, char*, char*, char**), \
3407 (this, state, from, from_end, from_next, to, to_end, to_next))
3409 DEFINE_THISCALL_WRAPPER(codecvt_char_do_out
, 32)
3410 int __thiscall
codecvt_char_do_out(const codecvt_char
*this, _Mbstatet
*state
,
3411 const char *from
, const char *from_end
, const char **from_next
,
3412 char *to
, char *to_end
, char **to_next
)
3414 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3415 from_end
, from_next
, to
, to_end
, to_next
);
3418 return CODECVT_noconv
;
3421 /* ?out@?$codecvt@DDH@std@@QBEHAAHPBD1AAPBDPAD3AAPAD@Z */
3422 /* ?out@?$codecvt@DDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
3423 DEFINE_THISCALL_WRAPPER(codecvt_char_out
, 32)
3424 int __thiscall
codecvt_char_out(const codecvt_char
*this, _Mbstatet
*state
,
3425 const char *from
, const char *from_end
, const char **from_next
,
3426 char *to
, char *to_end
, char **to_next
)
3428 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
3429 from_next
, to
, to_end
, to_next
);
3430 return call_codecvt_char_do_out(this, state
, from
, from_end
, from_next
,
3431 to
, to_end
, to_next
);
3434 /* ?do_unshift@?$codecvt@DDH@std@@MBEHAAHPAD1AAPAD@Z */
3435 /* ?do_unshift@?$codecvt@DDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
3436 #if _MSVCP_VER <= 100
3437 #define call_codecvt_char_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 24, \
3438 int, (const codecvt_char*, _Mbstatet*, char*, char*, char**), (this, state, to, to_end, to_next))
3440 #define call_codecvt_char_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 32, \
3441 int, (const codecvt_char*, _Mbstatet*, char*, char*, char**), (this, state, to, to_end, to_next))
3443 DEFINE_THISCALL_WRAPPER(codecvt_char_do_unshift
, 20)
3444 int __thiscall
codecvt_char_do_unshift(const codecvt_char
*this,
3445 _Mbstatet
*state
, char *to
, char *to_end
, char **to_next
)
3447 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3449 return CODECVT_noconv
;
3452 /* ?unshift@?$codecvt@DDH@std@@QBEHAAHPAD1AAPAD@Z */
3453 /* ?unshift@?$codecvt@DDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
3454 DEFINE_THISCALL_WRAPPER(codecvt_char_unshift
, 20)
3455 int __thiscall
codecvt_char_unshift(const codecvt_char
*this,
3456 _Mbstatet
*state
, char *to
, char *to_end
, char **to_next
)
3458 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3459 return call_codecvt_char_do_unshift(this, state
, to
, to_end
, to_next
);
3462 /* ?do_length@?$codecvt@DDH@std@@MBEHABHPBD1I@Z */
3463 /* ?do_length@?$codecvt@DDH@std@@MEBAHAEBHPEBD1_K@Z */
3464 #if _MSVCP_VER <= 100
3465 #define call_codecvt_char_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 28, \
3466 int, (const codecvt_char*, const _Mbstatet*, const char*, const char*, size_t), \
3467 (this, state, from, from_end, max))
3469 #define call_codecvt_char_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 36, \
3470 int, (const codecvt_char*, const _Mbstatet*, const char*, const char*, size_t), \
3471 (this, state, from, from_end, max))
3473 DEFINE_THISCALL_WRAPPER(codecvt_char_do_length
, 20)
3474 int __thiscall
codecvt_char_do_length(const codecvt_char
*this, const _Mbstatet
*state
,
3475 const char *from
, const char *from_end
, size_t max
)
3477 TRACE("(%p %p %p %p %Iu)\n", this, state
, from
, from_end
, max
);
3478 return (from_end
-from
> max
? max
: from_end
-from
);
3481 /* ?length@?$codecvt@DDH@std@@QBEHABHPBD1I@Z */
3482 /* ?length@?$codecvt@DDH@std@@QEBAHAEBHPEBD1_K@Z */
3483 DEFINE_THISCALL_WRAPPER(codecvt_char_length
, 20)
3484 int __thiscall
codecvt_char_length(const codecvt_char
*this, const _Mbstatet
*state
,
3485 const char *from
, const char *from_end
, size_t max
)
3487 TRACE("(%p %p %p %p %Iu)\n", this, state
, from
, from_end
, max
);
3488 return call_codecvt_char_do_length(this, state
, from
, from_end
, max
);
3491 /* ?id@?$codecvt@_WDH@std@@2V0locale@2@A */
3492 locale_id codecvt_wchar_id
= {0};
3493 /* ?id@?$codecvt@GDH@std@@2V0locale@2@A */
3494 locale_id codecvt_short_id
= {0};
3496 /* ??_7?$codecvt@_WDH@std@@6B@ */
3497 extern const vtable_ptr codecvt_wchar_vtable
;
3498 /* ??_7?$codecvt@GDH@std@@6B@ */
3499 extern const vtable_ptr codecvt_short_vtable
;
3501 /* ?_Init@?$codecvt@GDH@std@@IAEXABV_Locinfo@2@@Z */
3502 /* ?_Init@?$codecvt@GDH@std@@IEAAXAEBV_Locinfo@2@@Z */
3503 /* ?_Init@?$codecvt@_WDH@std@@IAEXABV_Locinfo@2@@Z */
3504 /* ?_Init@?$codecvt@_WDH@std@@IEAAXAEBV_Locinfo@2@@Z */
3505 DEFINE_THISCALL_WRAPPER(codecvt_wchar__Init
, 8)
3506 void __thiscall
codecvt_wchar__Init(codecvt_wchar
*this, const _Locinfo
*locinfo
)
3508 TRACE("(%p %p)\n", this, locinfo
);
3509 _Locinfo__Getcvt(locinfo
, &this->cvt
);
3512 /* ??0?$codecvt@_WDH@std@@QAE@ABV_Locinfo@1@I@Z */
3513 /* ??0?$codecvt@_WDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
3514 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor_locinfo
, 12)
3515 codecvt_wchar
* __thiscall
codecvt_wchar_ctor_locinfo(codecvt_wchar
*this, const _Locinfo
*locinfo
, size_t refs
)
3517 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
3519 codecvt_base_ctor_refs(&this->base
, refs
);
3520 this->base
.facet
.vtable
= &codecvt_wchar_vtable
;
3522 codecvt_wchar__Init(this, locinfo
);
3526 /* ??0?$codecvt@GDH@std@@QAE@ABV_Locinfo@1@I@Z */
3527 /* ??0?$codecvt@GDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
3528 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor_locinfo
, 12)
3529 codecvt_wchar
* __thiscall
codecvt_short_ctor_locinfo(codecvt_wchar
*this, const _Locinfo
*locinfo
, size_t refs
)
3531 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
3533 codecvt_wchar_ctor_locinfo(this, locinfo
, refs
);
3534 this->base
.facet
.vtable
= &codecvt_short_vtable
;
3538 /* ??0?$codecvt@_WDH@std@@QAE@I@Z */
3539 /* ??0?$codecvt@_WDH@std@@QEAA@_K@Z */
3540 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor_refs
, 8)
3541 codecvt_wchar
* __thiscall
codecvt_wchar_ctor_refs(codecvt_wchar
*this, size_t refs
)
3545 TRACE("(%p %Iu)\n", this, refs
);
3547 _Locinfo_ctor(&locinfo
);
3548 codecvt_wchar_ctor_locinfo(this, &locinfo
, refs
);
3549 _Locinfo_dtor(&locinfo
);
3553 /* ??0?$codecvt@GDH@std@@QAE@I@Z */
3554 /* ??0?$codecvt@GDH@std@@QEAA@_K@Z */
3555 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor_refs
, 8)
3556 codecvt_wchar
* __thiscall
codecvt_short_ctor_refs(codecvt_wchar
*this, size_t refs
)
3560 TRACE("(%p %Iu)\n", this, refs
);
3562 _Locinfo_ctor(&locinfo
);
3563 codecvt_short_ctor_locinfo(this, &locinfo
, refs
);
3564 _Locinfo_dtor(&locinfo
);
3568 /* ??0?$codecvt@GDH@std@@IAE@PBDI@Z */
3569 /* ??0?$codecvt@GDH@std@@IEAA@PEBD_K@Z */
3570 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor_name
, 12)
3571 codecvt_wchar
* __thiscall
codecvt_short_ctor_name(codecvt_wchar
*this, const char *name
, size_t refs
)
3575 TRACE("(%p %s %Iu)\n", this, name
, refs
);
3577 _Locinfo_ctor_cstr(&locinfo
, name
);
3578 codecvt_short_ctor_locinfo(this, &locinfo
, refs
);
3579 _Locinfo_dtor(&locinfo
);
3583 /* ??_F?$codecvt@_WDH@std@@QAEXXZ */
3584 /* ??_F?$codecvt@_WDH@std@@QEAAXXZ */
3585 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor
, 4)
3586 codecvt_wchar
* __thiscall
codecvt_wchar_ctor(codecvt_wchar
*this)
3588 return codecvt_wchar_ctor_refs(this, 0);
3591 /* ??_F?$codecvt@GDH@std@@QAEXXZ */
3592 /* ??_F?$codecvt@GDH@std@@QEAAXXZ */
3593 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor
, 4)
3594 codecvt_wchar
* __thiscall
codecvt_short_ctor(codecvt_wchar
*this)
3596 return codecvt_short_ctor_refs(this, 0);
3599 /* ??1?$codecvt@GDH@std@@UAE@XZ */
3600 /* ??1?$codecvt@GDH@std@@UEAA@XZ */
3601 /* ??1?$codecvt@GDH@std@@MAE@XZ */
3602 /* ??1?$codecvt@GDH@std@@MEAA@XZ */
3603 /* ??1?$codecvt@_WDH@std@@MAE@XZ */
3604 /* ??1?$codecvt@_WDH@std@@MEAA@XZ */
3605 DEFINE_THISCALL_WRAPPER(codecvt_wchar_dtor
, 4)
3606 void __thiscall
codecvt_wchar_dtor(codecvt_wchar
*this)
3608 TRACE("(%p)\n", this);
3609 codecvt_base_dtor(&this->base
);
3612 DEFINE_THISCALL_WRAPPER(codecvt_wchar_vector_dtor
, 8)
3613 codecvt_wchar
* __thiscall
codecvt_wchar_vector_dtor(codecvt_wchar
*this, unsigned int flags
)
3615 TRACE("(%p %x)\n", this, flags
);
3617 /* we have an array, with the number of elements stored before the first object */
3618 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
3620 for(i
=*ptr
-1; i
>=0; i
--)
3621 codecvt_wchar_dtor(this+i
);
3622 operator_delete(ptr
);
3624 codecvt_wchar_dtor(this);
3626 operator_delete(this);
3632 /* ?_Getcat@?$codecvt@_WDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3633 /* ?_Getcat@?$codecvt@_WDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3634 size_t __cdecl
codecvt_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
3636 TRACE("(%p %p)\n", facet
, loc
);
3638 if(facet
&& !*facet
) {
3641 *facet
= operator_new(sizeof(codecvt_wchar
));
3642 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
3643 codecvt_wchar_ctor_locinfo((codecvt_wchar
*)*facet
, &locinfo
, 0);
3644 _Locinfo_dtor(&locinfo
);
3650 /* ?_Getcat@?$codecvt@_WDH@std@@SAIPAPBVfacet@locale@2@@Z */
3651 /* ?_Getcat@?$codecvt@_WDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3652 size_t __cdecl
codecvt_wchar__Getcat_old(const locale_facet
**facet
)
3654 return codecvt_wchar__Getcat(facet
, locale_classic());
3657 codecvt_wchar
* codecvt_wchar_use_facet(const locale
*loc
)
3659 static codecvt_wchar
*obj
= NULL
;
3662 const locale_facet
*fac
;
3664 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3665 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_wchar_id
));
3667 _Lockit_dtor(&lock
);
3668 return (codecvt_wchar
*)fac
;
3672 _Lockit_dtor(&lock
);
3676 codecvt_wchar__Getcat(&fac
, loc
);
3677 obj
= (codecvt_wchar
*)fac
;
3678 call_locale_facet__Incref(&obj
->base
.facet
);
3679 locale_facet_register(&obj
->base
.facet
);
3680 _Lockit_dtor(&lock
);
3685 /* ?_Getcat@?$codecvt@GDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3686 /* ?_Getcat@?$codecvt@GDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3687 size_t __cdecl
codecvt_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
3689 TRACE("(%p %p)\n", facet
, loc
);
3691 if(facet
&& !*facet
) {
3694 *facet
= operator_new(sizeof(codecvt_wchar
));
3695 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
3696 codecvt_short_ctor((codecvt_wchar
*)*facet
);
3697 _Locinfo_dtor(&locinfo
);
3703 /* ?_Getcat@?$codecvt@GDH@std@@SAIPAPBVfacet@locale@2@@Z */
3704 /* ?_Getcat@?$codecvt@GDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3705 size_t __cdecl
codecvt_short__Getcat_old(const locale_facet
**facet
)
3707 return codecvt_short__Getcat(facet
, locale_classic());
3710 codecvt_wchar
* codecvt_short_use_facet(const locale
*loc
)
3712 static codecvt_wchar
*obj
= NULL
;
3715 const locale_facet
*fac
;
3717 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3718 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_short_id
));
3720 _Lockit_dtor(&lock
);
3721 return (codecvt_wchar
*)fac
;
3725 _Lockit_dtor(&lock
);
3729 codecvt_short__Getcat(&fac
, loc
);
3730 obj
= (codecvt_wchar
*)fac
;
3731 call_locale_facet__Incref(&obj
->base
.facet
);
3732 locale_facet_register(&obj
->base
.facet
);
3733 _Lockit_dtor(&lock
);
3738 /* ?_Id_func@?$codecvt@_WDH@std@@SAAAVid@locale@2@XZ */
3739 /* ?_Id_func@?$codecvt@_WDH@std@@SAAEAVid@locale@2@XZ */
3740 locale_id
* __cdecl
codecvt_wchar__Id_func(void)
3743 return &codecvt_wchar_id
;
3746 /* ?_Id_func@?$codecvt@GDH@std@@SAAAVid@locale@2@XZ */
3747 /* ?_Id_func@?$codecvt@GDH@std@@SAAEAVid@locale@2@XZ */
3748 locale_id
* __cdecl
codecvt_short__Id_func(void)
3751 return &codecvt_short_id
;
3754 /* ?do_always_noconv@?$codecvt@GDH@std@@MBE_NXZ */
3755 /* ?do_always_noconv@?$codecvt@GDH@std@@MEBA_NXZ */
3756 /* ?do_always_noconv@?$codecvt@_WDH@std@@MBE_NXZ */
3757 /* ?do_always_noconv@?$codecvt@_WDH@std@@MEBA_NXZ */
3758 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_always_noconv
, 4)
3759 bool __thiscall
codecvt_wchar_do_always_noconv(const codecvt_wchar
*this)
3761 TRACE("(%p)\n", this);
3765 /* ?do_max_length@?$codecvt@GDH@std@@MBEHXZ */
3766 /* ?do_max_length@?$codecvt@GDH@std@@MEBAHXZ */
3767 /* ?do_max_length@?$codecvt@_WDH@std@@MBEHXZ */
3768 /* ?do_max_length@?$codecvt@_WDH@std@@MEBAHXZ */
3769 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_max_length
, 4)
3770 int __thiscall
codecvt_wchar_do_max_length(const codecvt_wchar
*this)
3772 TRACE("(%p)\n", this);
3776 /* ?do_encoding@?$codecvt@GDH@std@@MBEHXZ */
3777 /* ?do_encoding@?$codecvt@GDH@std@@MEBAHXZ */
3778 /* ?do_encoding@?$codecvt@_WDH@std@@MBEHXZ */
3779 /* ?do_encoding@?$codecvt@_WDH@std@@MEBAHXZ */
3780 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_encoding
, 4)
3781 int __thiscall
codecvt_wchar_do_encoding(const codecvt_wchar
*this)
3783 TRACE("(%p)\n", this);
3787 /* ?do_in@?$codecvt@GDH@std@@MBEHAAHPBD1AAPBDPAG3AAPAG@Z */
3788 /* ?do_in@?$codecvt@GDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAG3AEAPEAG@Z */
3789 /* ?do_in@?$codecvt@_WDH@std@@MBEHAAHPBD1AAPBDPA_W3AAPA_W@Z */
3790 /* ?do_in@?$codecvt@_WDH@std@@MEBAHAEAHPEBD1AEAPEBDPEA_W3AEAPEA_W@Z */
3791 #if _MSVCP_VER <= 100
3792 #define call_codecvt_wchar_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
3793 CALL_VTBL_FUNC(this, 16, int, \
3794 (const codecvt_wchar*, _Mbstatet*, const char*, const char*, const char**, wchar_t*, wchar_t*, wchar_t**), \
3795 (this, state, from, from_end, from_next, to, to_end, to_next))
3797 #define call_codecvt_wchar_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
3798 CALL_VTBL_FUNC(this, 24, int, \
3799 (const codecvt_wchar*, _Mbstatet*, const char*, const char*, const char**, wchar_t*, wchar_t*, wchar_t**), \
3800 (this, state, from, from_end, from_next, to, to_end, to_next))
3802 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_in
, 32)
3803 int __thiscall
codecvt_wchar_do_in(const codecvt_wchar
*this, _Mbstatet
*state
,
3804 const char *from
, const char *from_end
, const char **from_next
,
3805 wchar_t *to
, wchar_t *to_end
, wchar_t **to_next
)
3807 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3808 from_end
, from_next
, to
, to_end
, to_next
);
3813 while(*from_next
!=from_end
&& *to_next
!=to_end
) {
3814 switch(_Mbrtowc(*to_next
, *from_next
, from_end
-*from_next
, state
, &this->cvt
)) {
3816 *from_next
= from_end
;
3817 return CODECVT_partial
;
3819 return CODECVT_error
;
3833 /* ?in@?$codecvt@GDH@std@@QBEHAAHPBD1AAPBDPAG3AAPAG@Z */
3834 /* ?in@?$codecvt@GDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAG3AEAPEAG@Z */
3835 /* ?in@?$codecvt@_WDH@std@@QBEHAAHPBD1AAPBDPA_W3AAPA_W@Z */
3836 /* ?in@?$codecvt@_WDH@std@@QEBAHAEAHPEBD1AEAPEBDPEA_W3AEAPEA_W@Z */
3837 DEFINE_THISCALL_WRAPPER(codecvt_wchar_in
, 32)
3838 int __thiscall
codecvt_wchar_in(const codecvt_wchar
*this, _Mbstatet
*state
,
3839 const char *from
, const char *from_end
, const char **from_next
,
3840 wchar_t *to
, wchar_t *to_end
, wchar_t **to_next
)
3842 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3843 from_end
, from_next
, to
, to_end
, to_next
);
3844 return call_codecvt_wchar_do_in(this, state
, from
,
3845 from_end
, from_next
, to
, to_end
, to_next
);
3848 /* ?do_out@?$codecvt@GDH@std@@MBEHAAHPBG1AAPBGPAD3AAPAD@Z */
3849 /* ?do_out@?$codecvt@GDH@std@@MEBAHAEAHPEBG1AEAPEBGPEAD3AEAPEAD@Z */
3850 /* ?do_out@?$codecvt@_WDH@std@@MBEHAAHPB_W1AAPB_WPAD3AAPAD@Z */
3851 /* ?do_out@?$codecvt@_WDH@std@@MEBAHAEAHPEB_W1AEAPEB_WPEAD3AEAPEAD@Z */
3852 #if _MSVCP_VER <= 100
3853 #define call_codecvt_wchar_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
3854 CALL_VTBL_FUNC(this, 20, int, \
3855 (const codecvt_wchar*, _Mbstatet*, const wchar_t*, const wchar_t*, const wchar_t**, char*, char*, char**), \
3856 (this, state, from, from_end, from_next, to, to_end, to_next))
3858 #define call_codecvt_wchar_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
3859 CALL_VTBL_FUNC(this, 28, int, \
3860 (const codecvt_wchar*, _Mbstatet*, const wchar_t*, const wchar_t*, const wchar_t**, char*, char*, char**), \
3861 (this, state, from, from_end, from_next, to, to_end, to_next))
3863 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_out
, 32)
3864 int __thiscall
codecvt_wchar_do_out(const codecvt_wchar
*this, _Mbstatet
*state
,
3865 const wchar_t *from
, const wchar_t *from_end
, const wchar_t **from_next
,
3866 char *to
, char *to_end
, char **to_next
)
3868 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3869 from_end
, from_next
, to
, to_end
, to_next
);
3874 while(*from_next
!=from_end
&& *to_next
!=to_end
) {
3875 _Mbstatet old_state
= *state
;
3877 char buf
[MB_LEN_MAX
];
3879 switch((size
= _Wcrtomb(buf
, **from_next
, state
, &this->cvt
))) {
3881 return CODECVT_error
;
3883 if(size
> from_end
-*from_next
) {
3885 return CODECVT_partial
;
3889 memcpy_s(*to_next
, to_end
-*to_next
, buf
, size
);
3897 /* ?out@?$codecvt@GDH@std@@QBEHAAHPBG1AAPBGPAD3AAPAD@Z */
3898 /* ?out@?$codecvt@GDH@std@@QEBAHAEAHPEBG1AEAPEBGPEAD3AEAPEAD@Z */
3899 /* ?out@?$codecvt@_WDH@std@@QBEHAAHPB_W1AAPB_WPAD3AAPAD@Z */
3900 /* ?out@?$codecvt@_WDH@std@@QEBAHAEAHPEB_W1AEAPEB_WPEAD3AEAPEAD@Z */
3901 DEFINE_THISCALL_WRAPPER(codecvt_wchar_out
, 32)
3902 int __thiscall
codecvt_wchar_out(const codecvt_wchar
*this, _Mbstatet
*state
,
3903 const wchar_t *from
, const wchar_t *from_end
, const wchar_t **from_next
,
3904 char *to
, char *to_end
, char **to_next
)
3906 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3907 from_end
, from_next
, to
, to_end
, to_next
);
3908 return call_codecvt_wchar_do_out(this, state
, from
,
3909 from_end
, from_next
, to
, to_end
, to_next
);
3912 /* ?do_unshift@?$codecvt@GDH@std@@MBEHAAHPAD1AAPAD@Z */
3913 /* ?do_unshift@?$codecvt@GDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
3914 /* ?do_unshift@?$codecvt@_WDH@std@@MBEHAAHPAD1AAPAD@Z */
3915 /* ?do_unshift@?$codecvt@_WDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
3916 #if _MSVCP_VER <= 100
3917 #define call_codecvt_wchar_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 24, \
3918 int, (const codecvt_wchar*, _Mbstatet*, char*, char*, char**), (this, state, to, to_end, to_next))
3920 #define call_codecvt_wchar_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 32, \
3921 int, (const codecvt_wchar*, _Mbstatet*, char*, char*, char**), (this, state, to, to_end, to_next))
3923 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_unshift
, 20)
3924 int __thiscall
codecvt_wchar_do_unshift(const codecvt_wchar
*this,
3925 _Mbstatet
*state
, char *to
, char *to_end
, char **to_next
)
3927 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3928 if(MBSTATET_TO_INT(state
))
3929 WARN("unexpected state: %x\n", MBSTATET_TO_INT(state
));
3935 /* ?unshift@?$codecvt@GDH@std@@QBEHAAHPAD1AAPAD@Z */
3936 /* ?unshift@?$codecvt@GDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
3937 /* ?unshift@?$codecvt@_WDH@std@@QBEHAAHPAD1AAPAD@Z */
3938 /* ?unshift@?$codecvt@_WDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
3939 DEFINE_THISCALL_WRAPPER(codecvt_wchar_unshift
, 20)
3940 int __thiscall
codecvt_wchar_unshift(const codecvt_wchar
*this,
3941 _Mbstatet
*state
, char *to
, char *to_end
, char **to_next
)
3943 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3944 return call_codecvt_wchar_do_unshift(this, state
, to
, to_end
, to_next
);
3947 /* ?do_length@?$codecvt@GDH@std@@MBEHABHPBD1I@Z */
3948 /* ?do_length@?$codecvt@GDH@std@@MEBAHAEBHPEBD1_K@Z */
3949 /* ?do_length@?$codecvt@_WDH@std@@MBEHABHPBD1I@Z */
3950 /* ?do_length@?$codecvt@_WDH@std@@MEBAHAEBHPEBD1_K@Z */
3951 #if _MSVCP_VER <= 100
3952 #define call_codecvt_wchar_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 28, \
3953 int, (const codecvt_wchar*, const _Mbstatet*, const char*, const char*, size_t), \
3954 (this, state, from, from_end, max))
3956 #define call_codecvt_wchar_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 36, \
3957 int, (const codecvt_wchar*, const _Mbstatet*, const char*, const char*, size_t), \
3958 (this, state, from, from_end, max))
3960 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_length
, 20)
3961 int __thiscall
codecvt_wchar_do_length(const codecvt_wchar
*this, const _Mbstatet
*state
,
3962 const char *from
, const char *from_end
, size_t max
)
3964 _Mbstatet tmp_state
= *state
;
3967 TRACE("(%p %p %p %p %Iu)\n", this, state
, from
, from_end
, max
);
3969 while(ret
<max
&& from
!=from_end
) {
3970 switch(_Mbrtowc(NULL
, from
, from_end
-from
, &tmp_state
, &this->cvt
)) {
3987 /* ?length@?$codecvt@GDH@std@@QBEHABHPBD1I@Z */
3988 /* ?length@?$codecvt@GDH@std@@QEBAHAEBHPEBD1_K@Z */
3989 /* ?length@?$codecvt@_WDH@std@@QBEHABHPBD1I@Z */
3990 /* ?length@?$codecvt@_WDH@std@@QEBAHAEBHPEBD1_K@Z */
3991 DEFINE_THISCALL_WRAPPER(codecvt_wchar_length
, 20)
3992 int __thiscall
codecvt_wchar_length(const codecvt_wchar
*this, const _Mbstatet
*state
,
3993 const char *from
, const char *from_end
, size_t max
)
3995 TRACE("(%p %p %p %p %Iu)\n", this, state
, from
, from_end
, max
);
3996 return call_codecvt_wchar_do_length(this, state
, from
, from_end
, max
);
3999 /* ?id@?$numpunct@D@std@@2V0locale@2@A */
4000 locale_id numpunct_char_id
= {0};
4002 /* ??_7?$numpunct@D@std@@6B@ */
4003 extern const vtable_ptr numpunct_char_vtable
;
4005 /* ?_Init@?$numpunct@D@std@@IAEXABV_Locinfo@2@_N@Z */
4006 /* ?_Init@?$numpunct@D@std@@IEAAXAEBV_Locinfo@2@_N@Z */
4007 DEFINE_THISCALL_WRAPPER(numpunct_char__Init
, 12)
4008 void __thiscall
numpunct_char__Init(numpunct_char
*this, const _Locinfo
*locinfo
, bool isdef
)
4012 TRACE("(%p %p %d)\n", this, locinfo
, isdef
);
4014 len
= strlen(_Locinfo__Getfalse(locinfo
))+1;
4015 this->false_name
= operator_new(len
);
4016 memcpy((char*)this->false_name
, _Locinfo__Getfalse(locinfo
), len
);
4018 len
= strlen(_Locinfo__Gettrue(locinfo
))+1;
4019 this->true_name
= operator_new(len
);
4020 memcpy((char*)this->true_name
, _Locinfo__Gettrue(locinfo
), len
);
4023 this->grouping
= operator_new(1);
4024 *(char*)this->grouping
= 0;
4029 const struct lconv
*lc
= _Locinfo__Getlconv(locinfo
);
4031 len
= strlen(lc
->grouping
)+1;
4032 this->grouping
= operator_new(len
);
4033 memcpy((char*)this->grouping
, lc
->grouping
, len
);
4035 this->dp
= lc
->decimal_point
[0];
4036 this->sep
= lc
->thousands_sep
[0];
4040 /* ?_Tidy@?$numpunct@D@std@@AAEXXZ */
4041 /* ?_Tidy@?$numpunct@D@std@@AEAAXXZ */
4042 DEFINE_THISCALL_WRAPPER(numpunct_char__Tidy
, 4)
4043 void __thiscall
numpunct_char__Tidy(numpunct_char
*this)
4045 TRACE("(%p)\n", this);
4047 operator_delete((char*)this->grouping
);
4048 operator_delete((char*)this->false_name
);
4049 operator_delete((char*)this->true_name
);
4052 /* ??0?$numpunct@D@std@@QAE@ABV_Locinfo@1@I_N@Z */
4053 /* ??0?$numpunct@D@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
4054 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_locinfo
, 16)
4055 numpunct_char
* __thiscall
numpunct_char_ctor_locinfo(numpunct_char
*this,
4056 const _Locinfo
*locinfo
, size_t refs
, bool usedef
)
4058 TRACE("(%p %p %Iu %d)\n", this, locinfo
, refs
, usedef
);
4059 locale_facet_ctor_refs(&this->facet
, refs
);
4060 this->facet
.vtable
= &numpunct_char_vtable
;
4061 numpunct_char__Init(this, locinfo
, usedef
);
4065 /* ??0?$numpunct@D@std@@IAE@PBDI_N@Z */
4066 /* ??0?$numpunct@D@std@@IEAA@PEBD_K_N@Z */
4067 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_name
, 16)
4068 numpunct_char
* __thiscall
numpunct_char_ctor_name(numpunct_char
*this,
4069 const char *name
, size_t refs
, bool usedef
)
4073 TRACE("(%p %s %Iu %d)\n", this, debugstr_a(name
), refs
, usedef
);
4074 locale_facet_ctor_refs(&this->facet
, refs
);
4075 this->facet
.vtable
= &numpunct_char_vtable
;
4077 _Locinfo_ctor_cstr(&locinfo
, name
);
4078 numpunct_char__Init(this, &locinfo
, usedef
);
4079 _Locinfo_dtor(&locinfo
);
4083 /* ??0?$numpunct@D@std@@QAE@I@Z */
4084 /* ??0?$numpunct@D@std@@QEAA@_K@Z */
4085 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_refs
, 8)
4086 numpunct_char
* __thiscall
numpunct_char_ctor_refs(numpunct_char
*this, size_t refs
)
4088 TRACE("(%p %Iu)\n", this, refs
);
4089 return numpunct_char_ctor_name(this, "C", refs
, FALSE
);
4092 /* ??_F?$numpunct@D@std@@QAEXXZ */
4093 /* ??_F?$numpunct@D@std@@QEAAXXZ */
4094 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor
, 4)
4095 numpunct_char
* __thiscall
numpunct_char_ctor(numpunct_char
*this)
4097 return numpunct_char_ctor_refs(this, 0);
4100 /* ??1?$numpunct@D@std@@UAE@XZ */
4101 /* ??1?$numpunct@D@std@@UEAA@XZ */
4102 /* ??1?$numpunct@D@std@@MAE@XZ */
4103 /* ??1?$numpunct@D@std@@MEAA@XZ */
4104 DEFINE_THISCALL_WRAPPER(numpunct_char_dtor
, 4)
4105 void __thiscall
numpunct_char_dtor(numpunct_char
*this)
4107 TRACE("(%p)\n", this);
4108 numpunct_char__Tidy(this);
4111 DEFINE_THISCALL_WRAPPER(numpunct_char_vector_dtor
, 8)
4112 numpunct_char
* __thiscall
numpunct_char_vector_dtor(numpunct_char
*this, unsigned int flags
)
4114 TRACE("(%p %x)\n", this, flags
);
4116 /* we have an array, with the number of elements stored before the first object */
4117 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
4119 for(i
=*ptr
-1; i
>=0; i
--)
4120 numpunct_char_dtor(this+i
);
4121 operator_delete(ptr
);
4123 numpunct_char_dtor(this);
4125 operator_delete(this);
4131 /* ?_Getcat@?$numpunct@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4132 /* ?_Getcat@?$numpunct@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4133 size_t __cdecl
numpunct_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
4135 TRACE("(%p %p)\n", facet
, loc
);
4137 if(facet
&& !*facet
) {
4138 *facet
= operator_new(sizeof(numpunct_char
));
4139 numpunct_char_ctor_name((numpunct_char
*)*facet
,
4140 locale_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
4146 /* ?_Getcat@?$numpunct@D@std@@SAIPAPBVfacet@locale@2@@Z */
4147 /* ?_Getcat@?$numpunct@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
4148 size_t __cdecl
numpunct_char__Getcat_old(const locale_facet
**facet
)
4150 return numpunct_char__Getcat(facet
, locale_classic());
4153 static numpunct_char
* numpunct_char_use_facet(const locale
*loc
)
4155 static numpunct_char
*obj
= NULL
;
4158 const locale_facet
*fac
;
4160 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
4161 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_char_id
));
4163 _Lockit_dtor(&lock
);
4164 return (numpunct_char
*)fac
;
4168 _Lockit_dtor(&lock
);
4172 numpunct_char__Getcat(&fac
, loc
);
4173 obj
= (numpunct_char
*)fac
;
4174 call_locale_facet__Incref(&obj
->facet
);
4175 locale_facet_register(&obj
->facet
);
4176 _Lockit_dtor(&lock
);
4181 /* ?do_decimal_point@?$numpunct@D@std@@MBEDXZ */
4182 /* ?do_decimal_point@?$numpunct@D@std@@MEBADXZ */
4183 DEFINE_THISCALL_WRAPPER(numpunct_char_do_decimal_point
, 4)
4184 #if _MSVCP_VER <= 100
4185 #define call_numpunct_char_do_decimal_point(this) CALL_VTBL_FUNC(this, 4, \
4186 char, (const numpunct_char *this), (this))
4188 #define call_numpunct_char_do_decimal_point(this) CALL_VTBL_FUNC(this, 12, \
4189 char, (const numpunct_char *this), (this))
4191 char __thiscall
numpunct_char_do_decimal_point(const numpunct_char
*this)
4193 TRACE("(%p)\n", this);
4197 /* ?decimal_point@?$numpunct@D@std@@QBEDXZ */
4198 /* ?decimal_point@?$numpunct@D@std@@QEBADXZ */
4199 DEFINE_THISCALL_WRAPPER(numpunct_char_decimal_point
, 4)
4200 char __thiscall
numpunct_char_decimal_point(const numpunct_char
*this)
4202 TRACE("(%p)\n", this);
4203 return call_numpunct_char_do_decimal_point(this);
4206 /* ?do_thousands_sep@?$numpunct@D@std@@MBEDXZ */
4207 /* ?do_thousands_sep@?$numpunct@D@std@@MEBADXZ */
4208 DEFINE_THISCALL_WRAPPER(numpunct_char_do_thousands_sep
, 4)
4209 #if _MSVCP_VER <= 100
4210 #define call_numpunct_char_do_thousands_sep(this) CALL_VTBL_FUNC(this, 8, \
4211 char, (const numpunct_char*), (this))
4213 #define call_numpunct_char_do_thousands_sep(this) CALL_VTBL_FUNC(this, 16, \
4214 char, (const numpunct_char*), (this))
4216 char __thiscall
numpunct_char_do_thousands_sep(const numpunct_char
*this)
4218 TRACE("(%p)\n", this);
4222 /* ?thousands_sep@?$numpunct@D@std@@QBEDXZ */
4223 /* ?thousands_sep@?$numpunct@D@std@@QEBADXZ */
4224 DEFINE_THISCALL_WRAPPER(numpunct_char_thousands_sep
, 4)
4225 char __thiscall
numpunct_char_thousands_sep(const numpunct_char
*this)
4227 TRACE("(%p)\n", this);
4228 return call_numpunct_char_do_thousands_sep(this);
4231 /* ?do_grouping@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4232 /* ?do_grouping@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4233 DEFINE_THISCALL_WRAPPER(numpunct_char_do_grouping
, 8)
4234 #if _MSVCP_VER <= 100
4235 #define call_numpunct_char_do_grouping(this, ret) CALL_VTBL_FUNC(this, 12, \
4236 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4238 #define call_numpunct_char_do_grouping(this, ret) CALL_VTBL_FUNC(this, 20, \
4239 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4241 basic_string_char
* __thiscall
numpunct_char_do_grouping(
4242 const numpunct_char
*this, basic_string_char
*ret
)
4244 TRACE("(%p)\n", this);
4245 return MSVCP_basic_string_char_ctor_cstr(ret
, this->grouping
);
4248 /* ?grouping@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4249 /* ?grouping@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4250 DEFINE_THISCALL_WRAPPER(numpunct_char_grouping
, 8)
4251 basic_string_char
* __thiscall
numpunct_char_grouping(const numpunct_char
*this, basic_string_char
*ret
)
4253 TRACE("(%p)\n", this);
4254 return call_numpunct_char_do_grouping(this, ret
);
4257 /* ?do_falsename@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4258 /* ?do_falsename@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4259 DEFINE_THISCALL_WRAPPER(numpunct_char_do_falsename
, 8)
4260 #if _MSVCP_VER <= 100
4261 #define call_numpunct_char_do_falsename(this, ret) CALL_VTBL_FUNC(this, 16, \
4262 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4264 #define call_numpunct_char_do_falsename(this, ret) CALL_VTBL_FUNC(this, 24, \
4265 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4267 basic_string_char
* __thiscall
numpunct_char_do_falsename(
4268 const numpunct_char
*this, basic_string_char
*ret
)
4270 TRACE("(%p)\n", this);
4271 return MSVCP_basic_string_char_ctor_cstr(ret
, this->false_name
);
4274 /* ?falsename@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4275 /* ?falsename@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4276 DEFINE_THISCALL_WRAPPER(numpunct_char_falsename
, 8)
4277 basic_string_char
* __thiscall
numpunct_char_falsename(const numpunct_char
*this, basic_string_char
*ret
)
4279 TRACE("(%p)\n", this);
4280 return call_numpunct_char_do_falsename(this, ret
);
4283 /* ?do_truename@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4284 /* ?do_truename@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4285 DEFINE_THISCALL_WRAPPER(numpunct_char_do_truename
, 8)
4286 #if _MSVCP_VER <= 100
4287 #define call_numpunct_char_do_truename(this, ret) CALL_VTBL_FUNC(this, 20, \
4288 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4290 #define call_numpunct_char_do_truename(this, ret) CALL_VTBL_FUNC(this, 28, \
4291 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4293 basic_string_char
* __thiscall
numpunct_char_do_truename(
4294 const numpunct_char
*this, basic_string_char
*ret
)
4296 TRACE("(%p)\n", this);
4297 return MSVCP_basic_string_char_ctor_cstr(ret
, this->true_name
);
4300 /* ?truename@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4301 /* ?truename@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4302 DEFINE_THISCALL_WRAPPER(numpunct_char_truename
, 8)
4303 basic_string_char
* __thiscall
numpunct_char_truename(const numpunct_char
*this, basic_string_char
*ret
)
4305 TRACE("(%p)\n", this);
4306 return call_numpunct_char_do_truename(this, ret
);
4309 /* ?id@?$numpunct@_W@std@@2V0locale@2@A */
4310 locale_id numpunct_wchar_id
= {0};
4311 /* ?id@?$numpunct@G@std@@2V0locale@2@A */
4312 locale_id numpunct_short_id
= {0};
4314 /* ??_7?$numpunct@_W@std@@6B@ */
4315 extern const vtable_ptr numpunct_wchar_vtable
;
4316 /* ??_7?$numpunct@G@std@@6B@ */
4317 extern const vtable_ptr numpunct_short_vtable
;
4319 /* ?_Init@?$numpunct@_W@std@@IAEXABV_Locinfo@2@_N@Z */
4320 /* ?_Init@?$numpunct@_W@std@@IEAAXAEBV_Locinfo@2@_N@Z */
4321 /* ?_Init@?$numpunct@G@std@@IAEXABV_Locinfo@2@_N@Z */
4322 /* ?_Init@?$numpunct@G@std@@IEAAXAEBV_Locinfo@2@_N@Z */
4323 DEFINE_THISCALL_WRAPPER(numpunct_wchar__Init
, 12)
4324 void __thiscall
numpunct_wchar__Init(numpunct_wchar
*this,
4325 const _Locinfo
*locinfo
, bool isdef
)
4327 const char *to_convert
;
4331 TRACE("(%p %p %d)\n", this, locinfo
, isdef
);
4333 _Locinfo__Getcvt(locinfo
, &cvt
);
4335 to_convert
= _Locinfo__Getfalse(locinfo
);
4336 len
= MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1, NULL
, 0);
4337 this->false_name
= operator_new(len
*sizeof(WCHAR
));
4338 MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1,
4339 (wchar_t*)this->false_name
, len
);
4341 to_convert
= _Locinfo__Gettrue(locinfo
);
4342 len
= MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1, NULL
, 0);
4343 this->true_name
= operator_new(len
*sizeof(WCHAR
));
4344 MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1,
4345 (wchar_t*)this->true_name
, len
);
4348 this->grouping
= operator_new(1);
4349 *(char*)this->grouping
= 0;
4354 const struct lconv
*lc
= _Locinfo__Getlconv(locinfo
);
4356 len
= strlen(lc
->grouping
)+1;
4357 this->grouping
= operator_new(len
);
4358 memcpy((char*)this->grouping
, lc
->grouping
, len
);
4360 this->dp
= mb_to_wc(lc
->decimal_point
[0], &cvt
);
4361 this->sep
= mb_to_wc(lc
->thousands_sep
[0], &cvt
);
4365 /* ?_Tidy@?$numpunct@_W@std@@AAEXXZ */
4366 /* ?_Tidy@?$numpunct@_W@std@@AEAAXXZ */
4367 /* ?_Tidy@?$numpunct@G@std@@AAEXXZ */
4368 /* ?_Tidy@?$numpunct@G@std@@AEAAXXZ */
4369 DEFINE_THISCALL_WRAPPER(numpunct_wchar__Tidy
, 4)
4370 void __thiscall
numpunct_wchar__Tidy(numpunct_wchar
*this)
4372 TRACE("(%p)\n", this);
4374 operator_delete((char*)this->grouping
);
4375 operator_delete((wchar_t*)this->false_name
);
4376 operator_delete((wchar_t*)this->true_name
);
4379 /* ??0?$numpunct@_W@std@@QAE@ABV_Locinfo@1@I_N@Z */
4380 /* ??0?$numpunct@_W@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
4381 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_locinfo
, 16)
4382 numpunct_wchar
* __thiscall
numpunct_wchar_ctor_locinfo(numpunct_wchar
*this,
4383 const _Locinfo
*locinfo
, size_t refs
, bool usedef
)
4385 TRACE("(%p %p %Iu %d)\n", this, locinfo
, refs
, usedef
);
4386 locale_facet_ctor_refs(&this->facet
, refs
);
4387 this->facet
.vtable
= &numpunct_wchar_vtable
;
4388 numpunct_wchar__Init(this, locinfo
, usedef
);
4392 /* ??0?$numpunct@G@std@@QAE@ABV_Locinfo@1@I_N@Z */
4393 /* ??0?$numpunct@G@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
4394 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_locinfo
, 16)
4395 numpunct_wchar
* __thiscall
numpunct_short_ctor_locinfo(numpunct_wchar
*this,
4396 const _Locinfo
*locinfo
, size_t refs
, bool usedef
)
4398 numpunct_wchar_ctor_locinfo(this, locinfo
, refs
, usedef
);
4399 this->facet
.vtable
= &numpunct_short_vtable
;
4403 /* ??0?$numpunct@_W@std@@IAE@PBDI_N@Z */
4404 /* ??0?$numpunct@_W@std@@IEAA@PEBD_K_N@Z */
4405 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_name
, 16)
4406 numpunct_wchar
* __thiscall
numpunct_wchar_ctor_name(numpunct_wchar
*this,
4407 const char *name
, size_t refs
, bool usedef
)
4411 TRACE("(%p %s %Iu %d)\n", this, debugstr_a(name
), refs
, usedef
);
4412 locale_facet_ctor_refs(&this->facet
, refs
);
4413 this->facet
.vtable
= &numpunct_wchar_vtable
;
4415 _Locinfo_ctor_cstr(&locinfo
, name
);
4416 numpunct_wchar__Init(this, &locinfo
, usedef
);
4417 _Locinfo_dtor(&locinfo
);
4421 /* ??0?$numpunct@G@std@@IAE@PBDI_N@Z */
4422 /* ??0?$numpunct@G@std@@IEAA@PEBD_K_N@Z */
4423 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_name
, 16)
4424 numpunct_wchar
* __thiscall
numpunct_short_ctor_name(numpunct_wchar
*this,
4425 const char *name
, size_t refs
, bool usedef
)
4427 numpunct_wchar_ctor_name(this, name
, refs
, usedef
);
4428 this->facet
.vtable
= &numpunct_short_vtable
;
4432 /* ??0?$numpunct@_W@std@@QAE@I@Z */
4433 /* ??0?$numpunct@_W@std@@QEAA@_K@Z */
4434 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_refs
, 8)
4435 numpunct_wchar
* __thiscall
numpunct_wchar_ctor_refs(numpunct_wchar
*this, size_t refs
)
4437 TRACE("(%p %Iu)\n", this, refs
);
4438 return numpunct_wchar_ctor_name(this, "C", refs
, FALSE
);
4441 /* ??0?$numpunct@G@std@@QAE@I@Z */
4442 /* ??0?$numpunct@G@std@@QEAA@_K@Z */
4443 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_refs
, 8)
4444 numpunct_wchar
* __thiscall
numpunct_short_ctor_refs(numpunct_wchar
*this, size_t refs
)
4446 numpunct_wchar_ctor_refs(this, refs
);
4447 this->facet
.vtable
= &numpunct_short_vtable
;
4451 /* ??_F?$numpunct@_W@std@@QAEXXZ */
4452 /* ??_F?$numpunct@_W@std@@QEAAXXZ */
4453 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor
, 4)
4454 numpunct_wchar
* __thiscall
numpunct_wchar_ctor(numpunct_wchar
*this)
4456 return numpunct_wchar_ctor_refs(this, 0);
4459 /* ??_F?$numpunct@G@std@@QAEXXZ */
4460 /* ??_F?$numpunct@G@std@@QEAAXXZ */
4461 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor
, 4)
4462 numpunct_wchar
* __thiscall
numpunct_short_ctor(numpunct_wchar
*this)
4464 return numpunct_short_ctor_refs(this, 0);
4467 /* ??1?$numpunct@G@std@@UAE@XZ */
4468 /* ??1?$numpunct@G@std@@UEAA@XZ */
4469 /* ??1?$numpunct@_W@std@@MAE@XZ */
4470 /* ??1?$numpunct@_W@std@@MEAA@XZ */
4471 /* ??1?$numpunct@G@std@@MAE@XZ */
4472 /* ??1?$numpunct@G@std@@MEAA@XZ */
4473 DEFINE_THISCALL_WRAPPER(numpunct_wchar_dtor
, 4)
4474 void __thiscall
numpunct_wchar_dtor(numpunct_wchar
*this)
4476 TRACE("(%p)\n", this);
4477 numpunct_wchar__Tidy(this);
4480 DEFINE_THISCALL_WRAPPER(numpunct_wchar_vector_dtor
, 8)
4481 numpunct_wchar
* __thiscall
numpunct_wchar_vector_dtor(numpunct_wchar
*this, unsigned int flags
)
4483 TRACE("(%p %x)\n", this, flags
);
4485 /* we have an array, with the number of elements stored before the first object */
4486 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
4488 for(i
=*ptr
-1; i
>=0; i
--)
4489 numpunct_wchar_dtor(this+i
);
4490 operator_delete(ptr
);
4492 numpunct_wchar_dtor(this);
4494 operator_delete(this);
4500 /* ?_Getcat@?$numpunct@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4501 /* ?_Getcat@?$numpunct@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4502 size_t __cdecl
numpunct_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
4504 TRACE("(%p %p)\n", facet
, loc
);
4506 if(facet
&& !*facet
) {
4507 *facet
= operator_new(sizeof(numpunct_wchar
));
4508 numpunct_wchar_ctor_name((numpunct_wchar
*)*facet
,
4509 locale_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
4515 /* ?_Getcat@?$numpunct@_W@std@@SAIPAPBVfacet@locale@2@@Z */
4516 /* ?_Getcat@?$numpunct@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
4517 size_t __cdecl
numpunct_wchar__Getcat_old(const locale_facet
**facet
)
4519 return numpunct_wchar__Getcat(facet
, locale_classic());
4522 static numpunct_wchar
* numpunct_wchar_use_facet(const locale
*loc
)
4524 static numpunct_wchar
*obj
= NULL
;
4527 const locale_facet
*fac
;
4529 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
4530 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_wchar_id
));
4532 _Lockit_dtor(&lock
);
4533 return (numpunct_wchar
*)fac
;
4537 _Lockit_dtor(&lock
);
4541 numpunct_wchar__Getcat(&fac
, loc
);
4542 obj
= (numpunct_wchar
*)fac
;
4543 call_locale_facet__Incref(&obj
->facet
);
4544 locale_facet_register(&obj
->facet
);
4545 _Lockit_dtor(&lock
);
4550 /* ?_Getcat@?$numpunct@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4551 /* ?_Getcat@?$numpunct@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4552 size_t __cdecl
numpunct_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
4554 TRACE("(%p %p)\n", facet
, loc
);
4556 if(facet
&& !*facet
) {
4557 *facet
= operator_new(sizeof(numpunct_wchar
));
4558 numpunct_short_ctor_name((numpunct_wchar
*)*facet
,
4559 locale_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
4565 /* ?_Getcat@?$numpunct@G@std@@SAIPAPBVfacet@locale@2@@Z */
4566 /* ?_Getcat@?$numpunct@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
4567 size_t __cdecl
numpunct_short__Getcat_old(const locale_facet
**facet
)
4569 return numpunct_short__Getcat(facet
, locale_classic());
4572 static numpunct_wchar
* numpunct_short_use_facet(const locale
*loc
)
4574 static numpunct_wchar
*obj
= NULL
;
4577 const locale_facet
*fac
;
4579 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
4580 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_short_id
));
4582 _Lockit_dtor(&lock
);
4583 return (numpunct_wchar
*)fac
;
4587 _Lockit_dtor(&lock
);
4591 numpunct_short__Getcat(&fac
, loc
);
4592 obj
= (numpunct_wchar
*)fac
;
4593 call_locale_facet__Incref(&obj
->facet
);
4594 locale_facet_register(&obj
->facet
);
4595 _Lockit_dtor(&lock
);
4600 /* ?do_decimal_point@?$numpunct@_W@std@@MBE_WXZ */
4601 /* ?do_decimal_point@?$numpunct@_W@std@@MEBA_WXZ */
4602 /* ?do_decimal_point@?$numpunct@G@std@@MBEGXZ */
4603 /* ?do_decimal_point@?$numpunct@G@std@@MEBAGXZ */
4604 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_decimal_point
, 4)
4605 #if _MSVCP_VER <= 100
4606 #define call_numpunct_wchar_do_decimal_point(this) CALL_VTBL_FUNC(this, 4, \
4607 wchar_t, (const numpunct_wchar *this), (this))
4609 #define call_numpunct_wchar_do_decimal_point(this) CALL_VTBL_FUNC(this, 12, \
4610 wchar_t, (const numpunct_wchar *this), (this))
4612 wchar_t __thiscall
numpunct_wchar_do_decimal_point(const numpunct_wchar
*this)
4614 TRACE("(%p)\n", this);
4618 /* ?decimal_point@?$numpunct@_W@std@@QBE_WXZ */
4619 /* ?decimal_point@?$numpunct@_W@std@@QEBA_WXZ */
4620 /* ?decimal_point@?$numpunct@G@std@@QBEGXZ */
4621 /* ?decimal_point@?$numpunct@G@std@@QEBAGXZ */
4622 DEFINE_THISCALL_WRAPPER(numpunct_wchar_decimal_point
, 4)
4623 wchar_t __thiscall
numpunct_wchar_decimal_point(const numpunct_wchar
*this)
4625 TRACE("(%p)\n", this);
4626 return call_numpunct_wchar_do_decimal_point(this);
4629 /* ?do_thousands_sep@?$numpunct@_W@std@@MBE_WXZ */
4630 /* ?do_thousands_sep@?$numpunct@_W@std@@MEBA_WXZ */
4631 /* ?do_thousands_sep@?$numpunct@G@std@@MBEGXZ */
4632 /* ?do_thousands_sep@?$numpunct@G@std@@MEBAGXZ */
4633 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_thousands_sep
, 4)
4634 #if _MSVCP_VER <= 100
4635 #define call_numpunct_wchar_do_thousands_sep(this) CALL_VTBL_FUNC(this, 8, \
4636 wchar_t, (const numpunct_wchar *this), (this))
4638 #define call_numpunct_wchar_do_thousands_sep(this) CALL_VTBL_FUNC(this, 16, \
4639 wchar_t, (const numpunct_wchar *this), (this))
4641 wchar_t __thiscall
numpunct_wchar_do_thousands_sep(const numpunct_wchar
*this)
4643 TRACE("(%p)\n", this);
4647 /* ?thousands_sep@?$numpunct@_W@std@@QBE_WXZ */
4648 /* ?thousands_sep@?$numpunct@_W@std@@QEBA_WXZ */
4649 /* ?thousands_sep@?$numpunct@G@std@@QBEGXZ */
4650 /* ?thousands_sep@?$numpunct@G@std@@QEBAGXZ */
4651 DEFINE_THISCALL_WRAPPER(numpunct_wchar_thousands_sep
, 4)
4652 wchar_t __thiscall
numpunct_wchar_thousands_sep(const numpunct_wchar
*this)
4654 TRACE("(%p)\n", this);
4655 return call_numpunct_wchar_do_thousands_sep(this);
4658 /* ?do_grouping@?$numpunct@_W@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4659 /* ?do_grouping@?$numpunct@_W@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4660 /* ?do_grouping@?$numpunct@G@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4661 /* ?do_grouping@?$numpunct@G@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4662 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_grouping
, 8)
4663 #if _MSVCP_VER <= 100
4664 #define call_numpunct_wchar_do_grouping(this, ret) CALL_VTBL_FUNC(this, 12, \
4665 basic_string_char*, (const numpunct_wchar*, basic_string_char*), (this, ret))
4667 #define call_numpunct_wchar_do_grouping(this, ret) CALL_VTBL_FUNC(this, 20, \
4668 basic_string_char*, (const numpunct_wchar*, basic_string_char*), (this, ret))
4670 basic_string_char
* __thiscall
numpunct_wchar_do_grouping(const numpunct_wchar
*this, basic_string_char
*ret
)
4672 TRACE("(%p)\n", this);
4673 return MSVCP_basic_string_char_ctor_cstr(ret
, this->grouping
);
4676 /* ?grouping@?$numpunct@_W@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4677 /* ?grouping@?$numpunct@_W@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4678 /* ?grouping@?$numpunct@G@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4679 /* ?grouping@?$numpunct@G@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4680 DEFINE_THISCALL_WRAPPER(numpunct_wchar_grouping
, 8)
4681 basic_string_char
* __thiscall
numpunct_wchar_grouping(const numpunct_wchar
*this, basic_string_char
*ret
)
4683 TRACE("(%p)\n", this);
4684 return call_numpunct_wchar_do_grouping(this, ret
);
4687 /* ?do_falsename@?$numpunct@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4688 /* ?do_falsename@?$numpunct@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4689 /* ?do_falsename@?$numpunct@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4690 /* ?do_falsename@?$numpunct@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4691 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_falsename
, 8)
4692 #if _MSVCP_VER <= 100
4693 #define call_numpunct_wchar_do_falsename(this, ret) CALL_VTBL_FUNC(this, 16, \
4694 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
4696 #define call_numpunct_wchar_do_falsename(this, ret) CALL_VTBL_FUNC(this, 24, \
4697 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
4699 basic_string_wchar
* __thiscall
numpunct_wchar_do_falsename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4701 TRACE("(%p)\n", this);
4702 return MSVCP_basic_string_wchar_ctor_cstr(ret
, this->false_name
);
4705 /* ?falsename@?$numpunct@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4706 /* ?falsename@?$numpunct@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4707 /* ?falsename@?$numpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4708 /* ?falsename@?$numpunct@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4709 DEFINE_THISCALL_WRAPPER(numpunct_wchar_falsename
, 8)
4710 basic_string_wchar
* __thiscall
numpunct_wchar_falsename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4712 TRACE("(%p)\n", this);
4713 return call_numpunct_wchar_do_falsename(this, ret
);
4716 /* ?do_truename@?$numpunct@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4717 /* ?do_truename@?$numpunct@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4718 /* ?do_truename@?$numpunct@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4719 /* ?do_truename@?$numpunct@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4720 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_truename
, 8)
4721 #if _MSVCP_VER <= 100
4722 #define call_numpunct_wchar_do_truename(this, ret) CALL_VTBL_FUNC(this, 20, \
4723 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
4725 #define call_numpunct_wchar_do_truename(this, ret) CALL_VTBL_FUNC(this, 28, \
4726 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
4728 basic_string_wchar
* __thiscall
numpunct_wchar_do_truename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4730 TRACE("(%p)\n", this);
4731 return MSVCP_basic_string_wchar_ctor_cstr(ret
, this->true_name
);
4734 /* ?truename@?$numpunct@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4735 /* ?truename@?$numpunct@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4736 /* ?truename@?$numpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4737 /* ?truename@?$numpunct@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4738 DEFINE_THISCALL_WRAPPER(numpunct_wchar_truename
, 8)
4739 basic_string_wchar
* __thiscall
numpunct_wchar_truename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4741 TRACE("(%p)\n", this);
4742 return call_numpunct_wchar_do_truename(this, ret
);
4745 double __cdecl
_Stod(const char *buf
, char **buf_end
, LONG exp
)
4747 double ret
= strtod(buf
, buf_end
);
4750 ret
*= pow(10, exp
);
4754 double __cdecl
_Stodx(const char *buf
, char **buf_end
, LONG exp
, int *err
)
4760 ret
= _Stod(buf
, buf_end
, exp
);
4770 float __cdecl
_Stof(const char *buf
, char **buf_end
, LONG exp
)
4772 return _Stod(buf
, buf_end
, exp
);
4775 float __cdecl
_Stofx(const char *buf
, char **buf_end
, LONG exp
, int *err
)
4777 return _Stodx(buf
, buf_end
, exp
, err
);
4780 __int64 __cdecl
_Stoll(const char *buf
, char **buf_end
, int base
)
4782 return _strtoi64(buf
, buf_end
, base
);
4785 __int64 __cdecl
_Stollx(const char *buf
, char **buf_end
, int base
, int *err
)
4791 ret
= _strtoi64(buf
, buf_end
, base
);
4801 LONG __cdecl
_Stolx(const char *buf
, char **buf_end
, int base
, int *err
)
4803 __int64 i
= _Stollx(buf
, buf_end
, base
, err
);
4804 if(!*err
&& i
!=(__int64
)((LONG
)i
))
4809 unsigned __int64 __cdecl
_Stoull(const char *buf
, char **buf_end
, int base
)
4811 return _strtoui64(buf
, buf_end
, base
);
4814 unsigned __int64 __cdecl
_Stoullx(const char *buf
, char **buf_end
, int base
, int *err
)
4816 unsigned __int64 ret
;
4820 ret
= _strtoui64(buf
, buf_end
, base
);
4830 ULONG __cdecl
_Stoul(const char *buf
, char **buf_end
, int base
)
4833 unsigned __int64 i
= _Stoullx(buf
[0]=='-' ? buf
+1 : buf
, buf_end
, base
, &err
);
4834 if(!err
&& i
!=(unsigned __int64
)((ULONG
)i
))
4836 return buf
[0]=='-' ? -i
: i
;
4839 ULONG __cdecl
_Stoulx(const char *buf
, char **buf_end
, int base
, int *err
)
4841 unsigned __int64 i
= _Stoullx(buf
[0]=='-' ? buf
+1 : buf
, buf_end
, base
, err
);
4842 if(!*err
&& i
!=(unsigned __int64
)((ULONG
)i
))
4844 return buf
[0]=='-' ? -i
: i
;
4847 /* ?id@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
4848 locale_id num_get_wchar_id
= {0};
4849 /* ?id@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
4850 locale_id num_get_short_id
= {0};
4852 /* ??_7?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
4853 extern const vtable_ptr num_get_wchar_vtable
;
4854 /* ??_7?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
4855 extern const vtable_ptr num_get_short_vtable
;
4857 /* ?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
4858 /* ?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
4859 /* ?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
4860 /* ?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
4861 DEFINE_THISCALL_WRAPPER(num_get_wchar__Init
, 8)
4862 void __thiscall
num_get_wchar__Init(num_get
*this, const _Locinfo
*locinfo
)
4864 TRACE("(%p %p)\n", this, locinfo
);
4865 #if _MSVCP_VER <= 100
4866 _Locinfo__Getcvt(locinfo
, &this->cvt
);
4870 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
4871 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
4872 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor_locinfo
, 12)
4873 num_get
* __thiscall
num_get_wchar_ctor_locinfo(num_get
*this,
4874 const _Locinfo
*locinfo
, size_t refs
)
4876 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
4878 locale_facet_ctor_refs(&this->facet
, refs
);
4879 this->facet
.vtable
= &num_get_wchar_vtable
;
4881 num_get_wchar__Init(this, locinfo
);
4885 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
4886 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
4887 DEFINE_THISCALL_WRAPPER(num_get_short_ctor_locinfo
, 12)
4888 num_get
* __thiscall
num_get_short_ctor_locinfo(num_get
*this,
4889 const _Locinfo
*locinfo
, size_t refs
)
4891 num_get_wchar_ctor_locinfo(this, locinfo
, refs
);
4892 this->facet
.vtable
= &num_get_short_vtable
;
4896 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
4897 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
4898 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor_refs
, 8)
4899 num_get
* __thiscall
num_get_wchar_ctor_refs(num_get
*this, size_t refs
)
4903 TRACE("(%p %Iu)\n", this, refs
);
4905 _Locinfo_ctor(&locinfo
);
4906 num_get_wchar_ctor_locinfo(this, &locinfo
, refs
);
4907 _Locinfo_dtor(&locinfo
);
4911 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
4912 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
4913 DEFINE_THISCALL_WRAPPER(num_get_short_ctor_refs
, 8)
4914 num_get
* __thiscall
num_get_short_ctor_refs(num_get
*this, size_t refs
)
4916 num_get_wchar_ctor_refs(this, refs
);
4917 this->facet
.vtable
= &num_get_short_vtable
;
4921 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
4922 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
4923 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor
, 4)
4924 num_get
* __thiscall
num_get_wchar_ctor(num_get
*this)
4926 return num_get_wchar_ctor_refs(this, 0);
4929 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
4930 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
4931 DEFINE_THISCALL_WRAPPER(num_get_short_ctor
, 4)
4932 num_get
* __thiscall
num_get_short_ctor(num_get
*this)
4934 return num_get_short_ctor_refs(this, 0);
4937 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@UAE@XZ */
4938 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@UEAA@XZ */
4939 /* ??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
4940 /* ??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
4941 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
4942 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
4943 DEFINE_THISCALL_WRAPPER(num_get_wchar_dtor
, 4)
4944 void __thiscall
num_get_wchar_dtor(num_get
*this)
4946 TRACE("(%p)\n", this);
4947 locale_facet_dtor(&this->facet
);
4950 DEFINE_THISCALL_WRAPPER(num_get_wchar_vector_dtor
, 8)
4951 num_get
* __thiscall
num_get_wchar_vector_dtor(num_get
*this, unsigned int flags
)
4953 TRACE("(%p %x)\n", this, flags
);
4955 /* we have an array, with the number of elements stored before the first object */
4956 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
4958 for(i
=*ptr
-1; i
>=0; i
--)
4959 num_get_wchar_dtor(this+i
);
4960 operator_delete(ptr
);
4962 num_get_wchar_dtor(this);
4964 operator_delete(this);
4970 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4971 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4972 size_t __cdecl
num_get_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
4974 TRACE("(%p %p)\n", facet
, loc
);
4976 if(facet
&& !*facet
) {
4979 *facet
= operator_new(sizeof(num_get
));
4980 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
4981 num_get_wchar_ctor_locinfo((num_get
*)*facet
, &locinfo
, 0);
4982 _Locinfo_dtor(&locinfo
);
4988 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
4989 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
4990 size_t __cdecl
num_get_wchar__Getcat_old(const locale_facet
**facet
)
4992 return num_get_wchar__Getcat(facet
, locale_classic());
4995 num_get
* num_get_wchar_use_facet(const locale
*loc
)
4997 static num_get
*obj
= NULL
;
5000 const locale_facet
*fac
;
5002 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
5003 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_wchar_id
));
5005 _Lockit_dtor(&lock
);
5006 return (num_get
*)fac
;
5010 _Lockit_dtor(&lock
);
5014 num_get_wchar__Getcat(&fac
, loc
);
5015 obj
= (num_get
*)fac
;
5016 call_locale_facet__Incref(&obj
->facet
);
5017 locale_facet_register(&obj
->facet
);
5018 _Lockit_dtor(&lock
);
5023 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
5024 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
5025 size_t __cdecl
num_get_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
5027 if(facet
&& !*facet
) {
5028 num_get_wchar__Getcat(facet
, loc
);
5029 (*(locale_facet
**)facet
)->vtable
= &num_get_short_vtable
;
5035 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
5036 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
5037 size_t __cdecl
num_get_short__Getcat_old(const locale_facet
**facet
)
5039 return num_get_short__Getcat(facet
, locale_classic());
5042 num_get
* num_get_short_use_facet(const locale
*loc
)
5044 static num_get
*obj
= NULL
;
5047 const locale_facet
*fac
;
5049 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
5050 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_short_id
));
5052 _Lockit_dtor(&lock
);
5053 return (num_get
*)fac
;
5057 _Lockit_dtor(&lock
);
5061 num_get_short__Getcat(&fac
, loc
);
5062 obj
= (num_get
*)fac
;
5063 call_locale_facet__Incref(&obj
->facet
);
5064 locale_facet_register(&obj
->facet
);
5065 _Lockit_dtor(&lock
);
5070 static int num_get__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5071 istreambuf_iterator_wchar
*last
, const locale
*loc
, numpunct_wchar
*numpunct
)
5073 basic_string_char grouping_bstr
;
5074 basic_string_char groups_found
;
5075 int i
, groups_no
= 0, cur_group
= 0, exp
= 0;
5076 char *dest_beg
= dest
, *num_end
= dest
+25, *exp_end
= dest
+31;
5077 wchar_t sep
= 0, digits
[11], *digits_pos
;
5078 const char *grouping
, *groups
;
5079 BOOL error
= FALSE
, got_digit
= FALSE
, got_nonzero
= FALSE
;
5082 TRACE("(%p %p %p %p)\n", dest
, first
, last
, loc
);
5084 #if _MSVCP_VER <= 100
5087 cvt
= &ctype_wchar_use_facet(loc
)->cvt
;
5091 digits
[i
] = mb_to_wc('0'+i
, cvt
);
5094 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
5095 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
5096 #if _MSVCP_VER >= 70
5097 if (grouping
[0]) sep
= numpunct_wchar_thousands_sep(numpunct
);
5101 MSVCP_basic_string_char_ctor(&groups_found
);
5103 istreambuf_iterator_wchar_val(first
);
5105 if(first
->strbuf
&& first
->val
==mb_to_wc('-', cvt
)) {
5107 istreambuf_iterator_wchar_inc(first
);
5108 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', cvt
)) {
5110 istreambuf_iterator_wchar_inc(first
);
5113 /* read possibly grouped numbers before decimal */
5114 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
5115 if(!(digits_pos
= wcschr(digits
, first
->val
))) {
5116 if(sep
&& first
->val
==sep
) {
5117 if(!groups_no
) break; /* empty group - stop parsing */
5118 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5125 got_digit
= TRUE
; /* found a digit, zero or non-zero */
5126 /* write digit to dest if not a leading zero (to not waste dest buffer) */
5127 if(!got_nonzero
&& first
->val
== digits
[0])
5134 *dest
++ = '0'+digits_pos
-digits
;
5136 exp
++; /* too many digits, just multiply by 10 */
5137 if(sep
&& groups_no
<CHAR_MAX
)
5142 /* if all leading zeroes, we didn't write anything so put a zero we check for a decimal */
5143 if(got_digit
&& !got_nonzero
)
5146 /* get decimal, if any */
5147 if(first
->strbuf
&& first
->val
==numpunct_wchar_decimal_point(numpunct
)) {
5149 *dest
++ = *localeconv()->decimal_point
;
5150 istreambuf_iterator_wchar_inc(first
);
5153 /* read non-grouped after decimal */
5154 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
5155 if(!(digits_pos
= wcschr(digits
, first
->val
)))
5157 else if(dest
<num_end
) {
5159 *dest
++ = '0'+digits_pos
-digits
;
5163 /* read exponent, if any */
5164 if(first
->strbuf
&& (first
->val
==mb_to_wc('e', cvt
) || first
->val
==mb_to_wc('E', cvt
))) {
5166 istreambuf_iterator_wchar_inc(first
);
5168 if(first
->strbuf
&& first
->val
==mb_to_wc('-', cvt
)) {
5170 istreambuf_iterator_wchar_inc(first
);
5171 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', cvt
)) {
5173 istreambuf_iterator_wchar_inc(first
);
5176 got_digit
= got_nonzero
= FALSE
;
5178 /* skip any leading zeroes */
5179 for(; first
->strbuf
&& first
->val
==digits
[0]; istreambuf_iterator_wchar_inc(first
))
5182 for(; first
->strbuf
&& (digits_pos
= wcschr(digits
, first
->val
)); istreambuf_iterator_wchar_inc(first
)) {
5183 got_digit
= got_nonzero
= TRUE
; /* leading zeroes would have been skipped, so first digit is non-zero */
5186 *dest
++ = '0'+digits_pos
-digits
;
5189 /* if just found zeroes for exponent, use that */
5190 if(got_digit
&& !got_nonzero
)
5198 if(sep
&& groups_no
)
5199 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5201 if(!cur_group
) /* no groups, skip loop */
5203 else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
])
5204 error
= TRUE
; /* trailing empty */
5206 for(; cur_group
>=0 && !error
; cur_group
--) {
5207 if(*grouping
== CHAR_MAX
) {
5211 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
5212 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
5215 }else if(grouping
[1]) {
5219 MSVCP_basic_string_char_dtor(&grouping_bstr
);
5221 MSVCP_basic_string_char_dtor(&groups_found
);
5231 /* ?_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 */
5232 /* ?_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 */
5233 int __cdecl
num_get_wchar__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5234 istreambuf_iterator_wchar
*last
, const locale
*loc
)
5236 return num_get__Getffld(this, dest
, first
, last
, loc
, numpunct_wchar_use_facet(loc
));
5239 /* ?_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 */
5240 /* ?_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 */
5241 int __cdecl
num_get_short__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5242 istreambuf_iterator_wchar
*last
, const locale
*loc
)
5244 return num_get__Getffld(this, dest
, first
, last
, loc
, numpunct_short_use_facet(loc
));
5247 /* ?_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 */
5248 /* ?_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 */
5249 /* ?_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 */
5250 /* ?_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 */
5251 int __cdecl
num_get_wchar__Getffldx(num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5252 istreambuf_iterator_wchar
*last
, ios_base
*ios
, int *phexexp
)
5254 FIXME("(%p %p %p %p %p) stub\n", dest
, first
, last
, ios
, phexexp
);
5258 static int num_get__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5259 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
, numpunct_wchar
*numpunct
)
5261 wchar_t digits
[23], *digits_pos
, sep
= 0;
5262 basic_string_char grouping_bstr
;
5263 basic_string_char groups_found
;
5264 int i
, basefield
, base
, groups_no
= 0, cur_group
= 0;
5265 char *dest_beg
= dest
, *dest_end
= dest
+24;
5266 const char *grouping
, *groups
;
5267 BOOL error
= TRUE
, dest_empty
= TRUE
, found_zero
= FALSE
;
5270 TRACE("(%p %p %p %04x %p)\n", dest
, first
, last
, fmtflags
, loc
);
5272 #if _MSVCP_VER <= 100
5275 cvt
= &ctype_wchar_use_facet(loc
)->cvt
;
5279 digits
[i
] = mb_to_wc('0'+i
, cvt
);
5280 for(i
=0; i
<6; i
++) {
5281 digits
[10+i
] = mb_to_wc('a'+i
, cvt
);
5282 digits
[16+i
] = mb_to_wc('A'+i
, cvt
);
5285 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
5286 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
5287 #if _MSVCP_VER >= 70
5288 if (grouping
[0]) sep
= numpunct_wchar_thousands_sep(numpunct
);
5291 basefield
= fmtflags
& FMTFLAG_basefield
;
5292 if(basefield
== FMTFLAG_oct
)
5294 else if(basefield
== FMTFLAG_hex
)
5295 base
= 22; /* equal to the size of digits buffer */
5301 istreambuf_iterator_wchar_val(first
);
5302 if(first
->strbuf
&& first
->val
==mb_to_wc('-', cvt
)) {
5304 istreambuf_iterator_wchar_inc(first
);
5305 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', cvt
)) {
5307 istreambuf_iterator_wchar_inc(first
);
5310 if(first
->strbuf
&& first
->val
==digits
[0]) {
5312 istreambuf_iterator_wchar_inc(first
);
5313 if(first
->strbuf
&& (first
->val
==mb_to_wc('x', cvt
) || first
->val
==mb_to_wc('X', cvt
))) {
5314 if(!base
|| base
== 22) {
5316 istreambuf_iterator_wchar_inc(first
);
5326 if(!base
) base
= 10;
5331 MSVCP_basic_string_char_ctor(&groups_found
);
5332 if(found_zero
) ++groups_no
;
5335 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
5336 if(!(digits_pos
= wcschr(digits
, first
->val
))) {
5337 if(sep
&& first
->val
==sep
) {
5338 if(!groups_no
) break; /* empty group - stop parsing */
5339 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5347 if(dest_empty
&& first
->val
== digits
[0]) {
5353 /* skip digits that can't be copied to dest buffer, other
5354 * functions are responsible for detecting overflows */
5356 *dest
++ = (digits_pos
-digits
<10 ? '0'+digits_pos
-digits
:
5357 (digits_pos
-digits
<16 ? 'a'+digits_pos
-digits
-10 :
5358 'A'+digits_pos
-digits
-16));
5359 if(sep
&& groups_no
<CHAR_MAX
)
5364 if(sep
&& groups_no
)
5365 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5367 if(!cur_group
) { /* no groups, skip loop */
5369 }else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
]) {
5370 error
= TRUE
; /* trailing empty */
5374 for(; cur_group
>=0 && !error
; cur_group
--) {
5375 if(*grouping
== CHAR_MAX
) {
5379 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
5380 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
5383 }else if(grouping
[1]) {
5388 MSVCP_basic_string_char_dtor(&grouping_bstr
);
5390 MSVCP_basic_string_char_dtor(&groups_found
);
5397 }else if(dest_empty
)
5401 return (base
==22 ? 16 : base
);
5404 /* ?_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 */
5405 /* ?_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 */
5406 int __cdecl
num_get_wchar__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5407 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
)
5409 return num_get__Getifld(this, dest
, first
, last
,
5410 fmtflags
, loc
, numpunct_wchar_use_facet(loc
));
5413 /* ?_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 */
5414 /* ?_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 */
5415 int __cdecl
num_get_short__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5416 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
)
5418 return num_get__Getifld(this, dest
, first
, last
,
5419 fmtflags
, loc
, numpunct_short_use_facet(loc
));
5422 /* ?_Hexdig@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABEH_W000@Z */
5423 /* ?_Hexdig@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAH_W000@Z */
5424 /* ?_Hexdig@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABEHGGGG@Z */
5425 /* ?_Hexdig@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHGGGG@Z */
5426 DEFINE_THISCALL_WRAPPER(MSVCP_num_get_wchar__Hexdig
, 20)
5427 int __thiscall
MSVCP_num_get_wchar__Hexdig(num_get
*this, wchar_t dig
, wchar_t e0
, wchar_t al
, wchar_t au
)
5429 FIXME("(%p %c %c %c %c) stub\n", this, dig
, e0
, al
, au
);
5433 static istreambuf_iterator_wchar
* num_get_do_get_void(const num_get
*this,
5434 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5435 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5436 void **pval
, numpunct_wchar
*numpunct
)
5442 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5444 v
= _Stoullx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5445 &last
, FMTFLAG_hex
, IOS_LOCALE(base
), numpunct
), &err
);
5446 if(v
!=(unsigned __int64
)((INT_PTR
)v
))
5447 *state
|= IOSTATE_failbit
;
5448 else if(end
!=tmp
&& !err
)
5449 *pval
= (void*)((INT_PTR
)v
);
5451 *state
|= IOSTATE_failbit
;
5454 *state
|= IOSTATE_eofbit
;
5460 /* ?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 */
5461 /* ?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 */
5462 #if _MSVCP_VER <= 100
5463 #define call_num_get_wchar_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 4, istreambuf_iterator_wchar*, \
5464 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, void**), \
5465 (this, ret, first, last, base, state, pval))
5467 #define call_num_get_wchar_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_wchar*, \
5468 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, void**), \
5469 (this, ret, first, last, base, state, pval))
5471 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_void
,36)
5472 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5473 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
5475 return num_get_do_get_void(this, ret
, first
, last
, base
,
5476 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5479 /* ?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 */
5480 /* ?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 */
5481 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_void
,36)
5482 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5483 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
5485 return num_get_do_get_void(this, ret
, first
, last
, base
,
5486 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5489 /* ?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 */
5490 /* ?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 */
5491 /* ?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 */
5492 /* ?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 */
5493 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_void
,36)
5494 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5495 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
5497 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5498 return call_num_get_wchar_do_get_void(this, ret
, first
, last
, base
, state
, pval
);
5501 static istreambuf_iterator_wchar
* num_get_do_get_double(const num_get
*this,
5502 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5503 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5504 double *pval
, numpunct_wchar
*numpunct
)
5510 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5512 v
= _Stodx(tmp
, &end
, num_get__Getffld(this, tmp
, &first
, &last
, IOS_LOCALE(base
), numpunct
), &err
);
5513 if(end
!=tmp
&& !err
)
5516 *state
|= IOSTATE_failbit
;
5519 *state
|= IOSTATE_eofbit
;
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@AAHAAO@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@AEAHAEAO@Z */
5527 /* ?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 */
5528 /* ?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 */
5529 #if _MSVCP_VER <= 100
5530 #define call_num_get_wchar_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_wchar*, \
5531 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
5532 (this, ret, first, last, base, state, pval))
5533 #define call_num_get_wchar_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_wchar*, \
5534 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
5535 (this, ret, first, last, base, state, pval))
5537 #define call_num_get_wchar_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_wchar*, \
5538 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
5539 (this, ret, first, last, base, state, pval))
5540 #define call_num_get_wchar_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_wchar*, \
5541 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
5542 (this, ret, first, last, base, state, pval))
5544 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_double
,36)
5545 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5546 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
5548 return num_get_do_get_double(this, ret
, first
, last
, base
,
5549 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
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@AAHAAO@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@AEAHAEAO@Z */
5554 /* ?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 */
5555 /* ?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 */
5556 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_double
,36)
5557 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5558 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
5560 return num_get_do_get_double(this, ret
, first
, last
, base
,
5561 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5564 /* ?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 */
5565 /* ?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 */
5566 /* ?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 */
5567 /* ?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 */
5568 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ldouble
,36)
5569 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ldouble(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5570 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
5572 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5573 return call_num_get_wchar_do_get_ldouble(this, ret
, first
, last
, base
, state
, pval
);
5576 /* ?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 */
5577 /* ?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 */
5578 /* ?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 */
5579 /* ?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 */
5580 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_double
,36)
5581 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5582 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
5584 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5585 return call_num_get_wchar_do_get_double(this, ret
, first
, last
, base
, state
, pval
);
5588 static istreambuf_iterator_wchar
* num_get_do_get_float(const num_get
*this,
5589 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5590 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5591 float *pval
, numpunct_wchar
*numpunct
)
5597 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5599 v
= _Stofx(tmp
, &end
, num_get__Getffld(this, tmp
, &first
,
5600 &last
, IOS_LOCALE(base
), numpunct
), &err
);
5601 if(end
!=tmp
&& !err
)
5604 *state
|= IOSTATE_failbit
;
5607 *state
|= IOSTATE_eofbit
;
5613 /* ?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 */
5614 /* ?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 */
5615 #if _MSVCP_VER <= 100
5616 #define call_num_get_wchar_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_wchar*, \
5617 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, float*), \
5618 (this, ret, first, last, base, state, pval))
5620 #define call_num_get_wchar_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_wchar*, \
5621 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, float*), \
5622 (this, ret, first, last, base, state, pval))
5624 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_float
,36)
5625 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5626 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
5628 return num_get_do_get_float(this, ret
, first
, last
, base
,
5629 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5632 /* ?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 */
5633 /* ?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 */
5634 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_float
,36)
5635 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5636 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
5638 return num_get_do_get_float(this, ret
, first
, last
, base
,
5639 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5642 /* ?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 */
5643 /* ?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 */
5644 /* ?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 */
5645 /* ?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 */
5646 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_float
,36)
5647 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5648 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
5650 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5651 return call_num_get_wchar_do_get_float(this, ret
, first
, last
, base
, state
, pval
);
5654 static istreambuf_iterator_wchar
* num_get_do_get_uint64(const num_get
*this,
5655 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5656 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5657 ULONGLONG
*pval
, numpunct_wchar
*numpunct
)
5663 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5665 v
= _Stoullx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5666 &last
, base
->fmtfl
, IOS_LOCALE(base
), numpunct
), &err
);
5667 if(end
!=tmp
&& !err
)
5670 *state
|= IOSTATE_failbit
;
5673 *state
|= IOSTATE_eofbit
;
5679 /* ?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 */
5680 /* ?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 */
5681 #if _MSVCP_VER <= 100
5682 #define call_num_get_wchar_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_wchar*, \
5683 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONGLONG*), \
5684 (this, ret, first, last, base, state, pval))
5686 #define call_num_get_wchar_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_wchar*, \
5687 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONGLONG*), \
5688 (this, ret, first, last, base, state, pval))
5690 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_uint64
,36)
5691 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5692 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
5694 return num_get_do_get_uint64(this, ret
, first
, last
, base
,
5695 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5698 /* ?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 */
5699 /* ?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 */
5700 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_uint64
,36)
5701 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5702 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
5704 return num_get_do_get_uint64(this, ret
, first
, last
, base
,
5705 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5708 /* ?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 */
5709 /* ?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 */
5710 /* ?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 */
5711 /* ?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 */
5712 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_uint64
,36)
5713 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5714 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
5716 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5717 return call_num_get_wchar_do_get_uint64(this, ret
, first
, last
, base
, state
, pval
);
5720 static istreambuf_iterator_wchar
* num_get_do_get_int64(const num_get
*this,
5721 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5722 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5723 LONGLONG
*pval
, numpunct_wchar
*numpunct
)
5729 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5731 v
= _Stollx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5732 &last
, base
->fmtfl
, IOS_LOCALE(base
), numpunct
), &err
);
5733 if(end
!=tmp
&& !err
)
5736 *state
|= IOSTATE_failbit
;
5739 *state
|= IOSTATE_eofbit
;
5745 /* ?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 */
5746 /* ?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 */
5747 #if _MSVCP_VER <= 100
5748 #define call_num_get_wchar_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_wchar*, \
5749 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONGLONG*), \
5750 (this, ret, first, last, base, state, pval))
5752 #define call_num_get_wchar_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_wchar*, \
5753 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONGLONG*), \
5754 (this, ret, first, last, base, state, pval))
5756 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_int64
,36)
5757 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5758 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
5760 return num_get_do_get_int64(this, ret
, first
, last
, base
,
5761 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5764 /* ?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 */
5765 /* ?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 */
5766 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_int64
,36)
5767 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5768 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
5770 return num_get_do_get_int64(this, ret
, first
, last
, base
,
5771 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5774 /* ?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 */
5775 /* ?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 */
5776 /* ?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 */
5777 /* ?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 */
5778 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_int64
,36)
5779 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5780 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
5782 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5783 return call_num_get_wchar_do_get_int64(this, ret
, first
, last
, base
, state
, pval
);
5786 static istreambuf_iterator_wchar
* num_get_do_get_ulong(const num_get
*this,
5787 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5788 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5789 ULONG
*pval
, numpunct_wchar
*numpunct
)
5795 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5797 v
= _Stoulx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5798 &last
, base
->fmtfl
, IOS_LOCALE(base
), numpunct
), &err
);
5799 if(end
!=tmp
&& !err
)
5802 *state
|= IOSTATE_failbit
;
5805 *state
|= IOSTATE_eofbit
;
5811 /* ?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 */
5812 /* ?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 */
5813 #if _MSVCP_VER <= 100
5814 #define call_num_get_wchar_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_wchar*, \
5815 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONG*), \
5816 (this, ret, first, last, base, state, pval))
5818 #define call_num_get_wchar_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_wchar*, \
5819 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONG*), \
5820 (this, ret, first, last, base, state, pval))
5822 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_ulong
,36)
5823 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5824 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
5826 return num_get_do_get_ulong(this, ret
, first
, last
, base
,
5827 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5830 /* ?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 */
5831 /* ?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 */
5832 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_ulong
,36)
5833 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5834 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
5836 return num_get_do_get_ulong(this, ret
, first
, last
, base
,
5837 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5840 /* ?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 */
5841 /* ?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 */
5842 /* ?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 */
5843 /* ?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 */
5844 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ulong
,36)
5845 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5846 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
5848 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5849 return call_num_get_wchar_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
5852 static istreambuf_iterator_wchar
* num_get_do_get_long(const num_get
*this,
5853 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5854 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5855 LONG
*pval
, numpunct_wchar
*numpunct
)
5861 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5863 v
= _Stolx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5864 &last
, base
->fmtfl
, IOS_LOCALE(base
), numpunct
), &err
);
5865 if(end
!=tmp
&& !err
)
5868 *state
|= IOSTATE_failbit
;
5871 *state
|= IOSTATE_eofbit
;
5877 /* ?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 */
5878 /* ?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 */
5879 #if _MSVCP_VER <= 100
5880 #define call_num_get_wchar_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_wchar*, \
5881 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONG*), \
5882 (this, ret, first, last, base, state, pval))
5884 #define call_num_get_wchar_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_wchar*, \
5885 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONG*), \
5886 (this, ret, first, last, base, state, pval))
5888 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_long
,36)
5889 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5890 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
5892 return num_get_do_get_long(this, ret
, first
, last
, base
,
5893 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5896 /* ?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 */
5897 /* ?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 */
5898 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_long
,36)
5899 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5900 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
5902 return num_get_do_get_long(this, ret
, first
, last
, base
,
5903 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5906 /* ?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 */
5907 /* ?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 */
5908 /* ?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 */
5909 /* ?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 */
5910 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_long
,36)
5911 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5912 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
5914 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5915 return call_num_get_wchar_do_get_long(this, ret
, first
, last
, base
, state
, pval
);
5918 /* ?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 */
5919 /* ?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 */
5920 #if _MSVCP_VER <= 100
5921 #define call_num_get_wchar_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_wchar*, \
5922 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned int*), \
5923 (this, ret, first, last, base, state, pval))
5925 #define call_num_get_wchar_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_wchar*, \
5926 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned int*), \
5927 (this, ret, first, last, base, state, pval))
5929 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_uint
,36)
5930 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5931 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
5933 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5934 return num_get_wchar_do_get_ulong(this, ret
, first
, last
, base
, state
, (ULONG
*)pval
);
5937 /* ?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 */
5938 /* ?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 */
5939 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_uint
,36)
5940 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5941 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
5943 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5944 return num_get_short_do_get_ulong(this, ret
, first
, last
, base
, state
, (ULONG
*)pval
);
5947 /* ?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 */
5948 /* ?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 */
5949 /* ?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 */
5950 /* ?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 */
5951 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_uint
,36)
5952 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5953 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
5955 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5956 return call_num_get_wchar_do_get_uint(this, ret
, first
, last
, base
, state
, pval
);
5959 /* ?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 */
5960 /* ?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 */
5961 #if _MSVCP_VER <= 100
5962 #define call_num_get_wchar_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_wchar*, \
5963 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned short*), \
5964 (this, ret, first, last, base, state, pval))
5966 #define call_num_get_wchar_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 48, istreambuf_iterator_wchar*, \
5967 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned short*), \
5968 (this, ret, first, last, base, state, pval))
5970 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_ushort
,36)
5971 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5972 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
5975 char tmp
[25], *beg
, *end
;
5978 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5980 b
= num_get_wchar__Getifld(this, tmp
,
5981 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
));
5982 beg
= tmp
+ (tmp
[0]=='-' ? 1 : 0);
5983 v
= _Stoulx(beg
, &end
, b
, &err
);
5985 if(v
!= (ULONG
)((unsigned short)v
))
5986 *state
|= IOSTATE_failbit
;
5987 else if(end
!=beg
&& !err
)
5988 *pval
= (tmp
[0]=='-' ? -((unsigned short)v
) : v
);
5990 *state
|= IOSTATE_failbit
;
5993 *state
|= IOSTATE_eofbit
;
5999 /* ?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 */
6000 /* ?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 */
6001 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_ushort
,36)
6002 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6003 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
6005 FIXME("(%p %p %p %p %p) stub\n", this, ret
, base
, state
, pval
);
6009 /* ?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 */
6010 /* ?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 */
6011 /* ?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@ */
6012 /* ?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 */
6013 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ushort
,36)
6014 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6015 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
6017 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6018 return call_num_get_wchar_do_get_ushort(this, ret
, first
, last
, base
, state
, pval
);
6021 static istreambuf_iterator_wchar
* num_get_do_get_bool(const num_get
*this,
6022 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
6023 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
6024 bool *pval
, numpunct_wchar
*numpunct
)
6026 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6028 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
6029 basic_string_wchar false_bstr
, true_bstr
;
6030 const wchar_t *pfalse
, *ptrue
;
6032 numpunct_wchar_falsename(numpunct
, &false_bstr
);
6033 numpunct_wchar_truename(numpunct
, &true_bstr
);
6034 pfalse
= MSVCP_basic_string_wchar_c_str(&false_bstr
);
6035 ptrue
= MSVCP_basic_string_wchar_c_str(&true_bstr
);
6037 for(istreambuf_iterator_wchar_val(&first
); first
.strbuf
;) {
6038 if(pfalse
&& *pfalse
&& first
.val
!=*pfalse
)
6040 if(ptrue
&& *ptrue
&& first
.val
!=*ptrue
)
6043 if(pfalse
&& *pfalse
&& ptrue
&& !*ptrue
)
6045 if(ptrue
&& *ptrue
&& pfalse
&& !*pfalse
)
6054 istreambuf_iterator_wchar_inc(&first
);
6056 if((!pfalse
|| !*pfalse
) && (!ptrue
|| !*ptrue
))
6065 *state
|= IOSTATE_failbit
;
6067 MSVCP_basic_string_wchar_dtor(&false_bstr
);
6068 MSVCP_basic_string_wchar_dtor(&true_bstr
);
6072 LONG v
= _Stolx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
6073 &last
, base
->fmtfl
, IOS_LOCALE(base
), numpunct
), &err
);
6075 if(end
!=tmp
&& err
==0 && (v
==0 || v
==1))
6078 *state
|= IOSTATE_failbit
;
6082 *state
|= IOSTATE_eofbit
;
6083 memcpy(ret
, &first
, sizeof(first
));
6087 /* ?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 */
6088 /* ?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 */
6089 #if _MSVCP_VER <= 100
6090 #define call_num_get_wchar_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_wchar*, \
6091 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, bool*), \
6092 (this, ret, first, last, base, state, pval))
6094 #define call_num_get_wchar_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 52, istreambuf_iterator_wchar*, \
6095 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, bool*), \
6096 (this, ret, first, last, base, state, pval))
6098 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_bool
,36)
6099 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6100 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, bool *pval
)
6102 return num_get_do_get_bool(this, ret
, first
, last
, base
,
6103 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
6106 /* ?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 */
6107 /* ?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 */
6108 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_bool
,36)
6109 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6110 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, bool *pval
)
6112 return num_get_do_get_bool(this, ret
, first
, last
, base
,
6113 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
6116 /* ?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 */
6117 /* ?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 */
6118 /* ?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 */
6119 /* ?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 */
6120 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_bool
,36)
6121 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6122 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, bool *pval
)
6124 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6125 return call_num_get_wchar_do_get_bool(this, ret
, first
, last
, base
, state
, pval
);
6128 /* ?id@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
6129 locale_id num_get_char_id
= {0};
6131 /* ??_7?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
6132 extern const vtable_ptr num_get_char_vtable
;
6134 /* ?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
6135 /* ?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
6136 DEFINE_THISCALL_WRAPPER(num_get_char__Init
, 8)
6137 void __thiscall
num_get_char__Init(num_get
*this, const _Locinfo
*locinfo
)
6139 TRACE("(%p %p)\n", this, locinfo
);
6140 #if _MSVCP_VER <= 100
6141 _Locinfo__Getcvt(locinfo
, &this->cvt
);
6145 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
6146 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
6147 DEFINE_THISCALL_WRAPPER(num_get_char_ctor_locinfo
, 12)
6148 num_get
* __thiscall
num_get_char_ctor_locinfo(num_get
*this,
6149 const _Locinfo
*locinfo
, size_t refs
)
6151 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
6153 locale_facet_ctor_refs(&this->facet
, refs
);
6154 this->facet
.vtable
= &num_get_char_vtable
;
6156 num_get_char__Init(this, locinfo
);
6160 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
6161 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
6162 DEFINE_THISCALL_WRAPPER(num_get_char_ctor_refs
, 8)
6163 num_get
* __thiscall
num_get_char_ctor_refs(num_get
*this, size_t refs
)
6167 TRACE("(%p %Iu)\n", this, refs
);
6169 _Locinfo_ctor(&locinfo
);
6170 num_get_char_ctor_locinfo(this, &locinfo
, refs
);
6171 _Locinfo_dtor(&locinfo
);
6175 /* ??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
6176 /* ??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
6177 DEFINE_THISCALL_WRAPPER(num_get_char_ctor
, 4)
6178 num_get
* __thiscall
num_get_char_ctor(num_get
*this)
6180 return num_get_char_ctor_refs(this, 0);
6183 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@UAE@XZ */
6184 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@UEAA@XZ */
6185 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
6186 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
6187 DEFINE_THISCALL_WRAPPER(num_get_char_dtor
, 4)
6188 void __thiscall
num_get_char_dtor(num_get
*this)
6190 TRACE("(%p)\n", this);
6191 locale_facet_dtor(&this->facet
);
6194 DEFINE_THISCALL_WRAPPER(num_get_char_vector_dtor
, 8)
6195 num_get
* __thiscall
num_get_char_vector_dtor(num_get
*this, unsigned int flags
)
6197 TRACE("(%p %x)\n", this, flags
);
6199 /* we have an array, with the number of elements stored before the first object */
6200 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
6202 for(i
=*ptr
-1; i
>=0; i
--)
6203 num_get_char_dtor(this+i
);
6204 operator_delete(ptr
);
6206 num_get_char_dtor(this);
6208 operator_delete(this);
6214 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
6215 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
6216 size_t __cdecl
num_get_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
6218 TRACE("(%p %p)\n", facet
, loc
);
6220 if(facet
&& !*facet
) {
6223 *facet
= operator_new(sizeof(num_get
));
6224 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
6225 num_get_char_ctor_locinfo((num_get
*)*facet
, &locinfo
, 0);
6226 _Locinfo_dtor(&locinfo
);
6232 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
6233 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
6234 size_t __cdecl
num_get_char__Getcat_old(const locale_facet
**facet
)
6236 return num_get_char__Getcat(facet
, locale_classic());
6239 num_get
* num_get_char_use_facet(const locale
*loc
)
6241 static num_get
*obj
= NULL
;
6244 const locale_facet
*fac
;
6246 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
6247 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_char_id
));
6249 _Lockit_dtor(&lock
);
6250 return (num_get
*)fac
;
6254 _Lockit_dtor(&lock
);
6258 num_get_char__Getcat(&fac
, loc
);
6259 obj
= (num_get
*)fac
;
6260 call_locale_facet__Incref(&obj
->facet
);
6261 locale_facet_register(&obj
->facet
);
6262 _Lockit_dtor(&lock
);
6267 /* ?_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 */
6268 /* ?_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 */
6269 /* Copies number to dest buffer, validates grouping and skips separators.
6270 * Updates first so it points past the number, all digits are skipped.
6271 * Returns how exponent needs to changed.
6272 * Size of dest buffer is not specified, assuming it's not smaller than 32:
6273 * strlen(+0.e+) + 22(digits) + 4(exponent) + 1(nullbyte)
6275 int __cdecl
num_get_char__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_char
*first
,
6276 istreambuf_iterator_char
*last
, const locale
*loc
)
6278 numpunct_char
*numpunct
= numpunct_char_use_facet(loc
);
6279 basic_string_char grouping_bstr
;
6280 basic_string_char groups_found
;
6281 int groups_no
= 0, cur_group
= 0, exp
= 0;
6282 char *dest_beg
= dest
, *num_end
= dest
+25, *exp_end
= dest
+31, sep
= 0;
6283 const char *grouping
, *groups
;
6284 BOOL error
= FALSE
, got_digit
= FALSE
, got_nonzero
= FALSE
;
6286 TRACE("(%p %p %p %p)\n", dest
, first
, last
, loc
);
6288 numpunct_char_grouping(numpunct
, &grouping_bstr
);
6289 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
6290 #if _MSVCP_VER >= 70
6291 if (grouping
[0]) sep
= numpunct_char_thousands_sep(numpunct
);
6295 MSVCP_basic_string_char_ctor(&groups_found
);
6297 istreambuf_iterator_char_val(first
);
6299 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
6300 *dest
++ = first
->val
;
6301 istreambuf_iterator_char_inc(first
);
6304 /* read possibly grouped numbers before decimal */
6305 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
6306 if(first
->val
<'0' || first
->val
>'9') {
6307 if(sep
&& first
->val
==sep
) {
6308 if(!groups_no
) break; /* empty group - stop parsing */
6309 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
6316 got_digit
= TRUE
; /* found a digit, zero or non-zero */
6317 /* write digit to dest if not a leading zero (to not waste dest buffer) */
6318 if(!got_nonzero
&& first
->val
== '0')
6325 *dest
++ = first
->val
;
6327 exp
++; /* too many digits, just multiply by 10 */
6328 if(sep
&& groups_no
<CHAR_MAX
)
6333 /* if all leading zeroes, we didn't write anything so put a zero we check for a decimal */
6334 if(got_digit
&& !got_nonzero
)
6337 /* get decimal, if any */
6338 if(first
->strbuf
&& first
->val
==numpunct_char_decimal_point(numpunct
)) {
6340 *dest
++ = *localeconv()->decimal_point
;
6341 istreambuf_iterator_char_inc(first
);
6344 /* read non-grouped after decimal */
6345 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
6346 if(first
->val
<'0' || first
->val
>'9')
6348 else if(dest
<num_end
) {
6350 *dest
++ = first
->val
;
6354 /* read exponent, if any */
6355 if(first
->strbuf
&& (first
->val
=='e' || first
->val
=='E')) {
6356 *dest
++ = first
->val
;
6357 istreambuf_iterator_char_inc(first
);
6359 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
6360 *dest
++ = first
->val
;
6361 istreambuf_iterator_char_inc(first
);
6364 got_digit
= got_nonzero
= FALSE
;
6366 /* skip any leading zeroes */
6367 for(; first
->strbuf
&& first
->val
=='0'; istreambuf_iterator_char_inc(first
))
6370 for(; first
->strbuf
&& first
->val
>='0' && first
->val
<='9'; istreambuf_iterator_char_inc(first
)) {
6371 got_digit
= got_nonzero
= TRUE
; /* leading zeroes would have been skipped, so first digit is non-zero */
6374 *dest
++ = first
->val
;
6377 /* if just found zeroes for exponent, use that */
6378 if(got_digit
&& !got_nonzero
)
6386 if(sep
&& groups_no
)
6387 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
6389 if(!cur_group
) /* no groups, skip loop */
6391 else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
])
6392 error
= TRUE
; /* trailing empty */
6394 for(; cur_group
>=0 && !error
; cur_group
--) {
6395 if(*grouping
== CHAR_MAX
) {
6399 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
6400 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
6403 }else if(grouping
[1]) {
6407 MSVCP_basic_string_char_dtor(&grouping_bstr
);
6409 MSVCP_basic_string_char_dtor(&groups_found
);
6419 /* ?_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 */
6420 /* ?_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 */
6421 int __cdecl
num_get_char__Getffldx(const num_get
*this, char *dest
, istreambuf_iterator_char
*first
,
6422 istreambuf_iterator_char
*last
, ios_base
*ios
, int *phexexp
)
6424 FIXME("(%p %p %p %p %p) stub\n", dest
, first
, last
, ios
, phexexp
);
6428 /* ?_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 */
6429 /* ?_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 */
6430 /* Copies number to dest buffer, validates grouping and skips separators.
6431 * Updates first so it points past the number, all digits are skipped.
6432 * Returns number base (8, 10 or 16).
6433 * Size of dest buffer is not specified, assuming it's not smaller than 25:
6434 * 22(8^22>2^64)+1(detect overflows)+1(sign)+1(nullbyte) = 25
6436 int __cdecl
num_get_char__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_char
*first
,
6437 istreambuf_iterator_char
*last
, int fmtflags
, const locale
*loc
)
6439 static const char digits
[] = "0123456789abcdefABCDEF";
6441 numpunct_char
*numpunct
= numpunct_char_use_facet(loc
);
6442 basic_string_char grouping_bstr
;
6443 basic_string_char groups_found
;
6444 int basefield
, base
, groups_no
= 0, cur_group
= 0;
6445 char *dest_beg
= dest
, *dest_end
= dest
+24, sep
= 0;
6446 const char *grouping
, *groups
;
6447 BOOL error
= TRUE
, dest_empty
= TRUE
, found_zero
= FALSE
;
6449 TRACE("(%p %p %p %04x %p)\n", dest
, first
, last
, fmtflags
, loc
);
6451 numpunct_char_grouping(numpunct
, &grouping_bstr
);
6452 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
6453 #if _MSVCP_VER >= 70
6454 if (grouping
[0]) sep
= numpunct_char_thousands_sep(numpunct
);
6457 basefield
= fmtflags
& FMTFLAG_basefield
;
6458 if(basefield
== FMTFLAG_oct
)
6460 else if(basefield
== FMTFLAG_hex
)
6461 base
= 22; /* equal to the size of digits buffer */
6467 istreambuf_iterator_char_val(first
);
6468 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
6469 *dest
++ = first
->val
;
6470 istreambuf_iterator_char_inc(first
);
6473 if(first
->strbuf
&& first
->val
=='0') {
6475 istreambuf_iterator_char_inc(first
);
6476 if(first
->strbuf
&& (first
->val
=='x' || first
->val
=='X')) {
6477 if(!base
|| base
== 22) {
6479 istreambuf_iterator_char_inc(first
);
6489 if (!base
) base
= 10;
6494 MSVCP_basic_string_char_ctor(&groups_found
);
6495 if(found_zero
) ++groups_no
;
6498 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
6499 if(!memchr(digits
, first
->val
, base
)) {
6500 if(sep
&& first
->val
==sep
) {
6501 if(!groups_no
) break; /* empty group - stop parsing */
6502 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
6510 if(dest_empty
&& first
->val
== '0')
6517 /* skip digits that can't be copied to dest buffer, other
6518 * functions are responsible for detecting overflows */
6520 *dest
++ = first
->val
;
6521 if(sep
&& groups_no
<CHAR_MAX
)
6526 if(sep
&& groups_no
)
6527 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
6529 if(!cur_group
) { /* no groups, skip loop */
6531 }else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
]) {
6532 error
= TRUE
; /* trailing empty */
6536 for(; cur_group
>=0 && !error
; cur_group
--) {
6537 if(*grouping
== CHAR_MAX
) {
6541 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
6542 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
6545 }else if(grouping
[1]) {
6550 MSVCP_basic_string_char_dtor(&grouping_bstr
);
6552 MSVCP_basic_string_char_dtor(&groups_found
);
6559 }else if(dest_empty
)
6563 return (base
==22 ? 16 : base
);
6566 /* ?_Hexdig@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABEHD000@Z */
6567 /* ?_Hexdig@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHD000@Z */
6568 DEFINE_THISCALL_WRAPPER(MSVCP_num_get_char__Hexdig
, 20)
6569 int __thiscall
MSVCP_num_get_char__Hexdig(num_get
*this, char dig
, char e0
, char al
, char au
)
6571 FIXME("(%p %c %c %c %c) stub\n", this, dig
, e0
, al
, au
);
6575 /* ?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 */
6576 /* ?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 */
6577 #if _MSVCP_VER <= 100
6578 #define call_num_get_char_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 4, istreambuf_iterator_char*, \
6579 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, void**), \
6580 (this, ret, first, last, base, state, pval))
6582 #define call_num_get_char_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_char*, \
6583 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, void**), \
6584 (this, ret, first, last, base, state, pval))
6586 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_void
,36)
6587 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_void(const num_get
*this, istreambuf_iterator_char
*ret
,
6588 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, void **pval
)
6594 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6596 v
= _Stoullx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6597 &first
, &last
, FMTFLAG_hex
, IOS_LOCALE(base
)), &err
);
6598 if(v
!=(unsigned __int64
)((INT_PTR
)v
))
6599 *state
|= IOSTATE_failbit
;
6600 else if(end
!=tmp
&& !err
)
6601 *pval
= (void*)((INT_PTR
)v
);
6603 *state
|= IOSTATE_failbit
;
6606 *state
|= IOSTATE_eofbit
;
6612 /* ?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 */
6613 /* ?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 */
6614 DEFINE_THISCALL_WRAPPER(num_get_char_get_void
,36)
6615 istreambuf_iterator_char
*__thiscall
num_get_char_get_void(const num_get
*this, istreambuf_iterator_char
*ret
,
6616 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, void **pval
)
6618 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6619 return call_num_get_char_do_get_void(this, ret
, first
, last
, base
, state
, pval
);
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@AAHAAO@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@AEAHAEAO@Z */
6624 /* ?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 */
6625 /* ?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 */
6626 #if _MSVCP_VER <= 100
6627 #define call_num_get_char_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_char*, \
6628 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
6629 (this, ret, first, last, base, state, pval))
6630 #define call_num_get_char_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_char*, \
6631 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
6632 (this, ret, first, last, base, state, pval))
6634 #define call_num_get_char_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_char*, \
6635 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
6636 (this, ret, first, last, base, state, pval))
6637 #define call_num_get_char_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_char*, \
6638 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
6639 (this, ret, first, last, base, state, pval))
6641 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_double
,36)
6642 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_double(const num_get
*this, istreambuf_iterator_char
*ret
,
6643 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
6649 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6651 v
= _Stodx(tmp
, &end
, num_get_char__Getffld(this, tmp
, &first
, &last
, IOS_LOCALE(base
)), &err
);
6652 if(end
!=tmp
&& !err
)
6655 *state
|= IOSTATE_failbit
;
6658 *state
|= IOSTATE_eofbit
;
6664 /* ?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 */
6665 /* ?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 */
6666 DEFINE_THISCALL_WRAPPER(num_get_char_get_ldouble
,36)
6667 istreambuf_iterator_char
*__thiscall
num_get_char_get_ldouble(const num_get
*this, istreambuf_iterator_char
*ret
,
6668 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
6670 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6671 return call_num_get_char_do_get_ldouble(this, ret
, first
, last
, base
, state
, pval
);
6674 /* ?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 */
6675 /* ?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 */
6676 DEFINE_THISCALL_WRAPPER(num_get_char_get_double
,36)
6677 istreambuf_iterator_char
*__thiscall
num_get_char_get_double(const num_get
*this, istreambuf_iterator_char
*ret
,
6678 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
6680 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6681 return call_num_get_char_do_get_double(this, ret
, first
, last
, base
, state
, pval
);
6684 /* ?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 */
6685 /* ?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 */
6686 #if _MSVCP_VER <= 100
6687 #define call_num_get_char_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_char*, \
6688 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, float*), \
6689 (this, ret, first, last, base, state, pval))
6691 #define call_num_get_char_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_char*, \
6692 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, float*), \
6693 (this, ret, first, last, base, state, pval))
6695 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_float
,36)
6696 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_float(const num_get
*this, istreambuf_iterator_char
*ret
,
6697 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, float *pval
)
6703 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6705 v
= _Stofx(tmp
, &end
, num_get_char__Getffld(this, tmp
, &first
, &last
, IOS_LOCALE(base
)), &err
);
6706 if(end
!=tmp
&& !err
)
6709 *state
|= IOSTATE_failbit
;
6712 *state
|= IOSTATE_eofbit
;
6718 /* ?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 */
6719 /* ?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 */
6720 DEFINE_THISCALL_WRAPPER(num_get_char_get_float
,36)
6721 istreambuf_iterator_char
*__thiscall
num_get_char_get_float(const num_get
*this, istreambuf_iterator_char
*ret
,
6722 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, float *pval
)
6724 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6725 return call_num_get_char_do_get_float(this, ret
, first
, last
, base
, state
, pval
);
6728 /* ?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 */
6729 /* ?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 */
6730 #if _MSVCP_VER <= 100
6731 #define call_num_get_char_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_char*, \
6732 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONGLONG*), \
6733 (this, ret, first, last, base, state, pval))
6735 #define call_num_get_char_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_char*, \
6736 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONGLONG*), \
6737 (this, ret, first, last, base, state, pval))
6739 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_uint64
,36)
6740 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_uint64(const num_get
*this, istreambuf_iterator_char
*ret
,
6741 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
6747 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6749 v
= _Stoullx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6750 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
)), &err
);
6751 if(end
!=tmp
&& !err
)
6754 *state
|= IOSTATE_failbit
;
6757 *state
|= IOSTATE_eofbit
;
6763 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAA_K@Z */
6764 /* ?get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AEAVios_base@2@AEAHAEA_K@Z */
6765 DEFINE_THISCALL_WRAPPER(num_get_char_get_uint64
,36)
6766 istreambuf_iterator_char
*__thiscall
num_get_char_get_uint64(const num_get
*this, istreambuf_iterator_char
*ret
,
6767 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
6769 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6770 return call_num_get_char_do_get_uint64(this, ret
, first
, last
, base
, state
, pval
);
6773 /* ?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 */
6774 /* ?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 */
6775 #if _MSVCP_VER <= 100
6776 #define call_num_get_char_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_char*, \
6777 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONGLONG*), \
6778 (this, ret, first, last, base, state, pval))
6780 #define call_num_get_char_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_char*, \
6781 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONGLONG*), \
6782 (this, ret, first, last, base, state, pval))
6784 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_int64
,36)
6785 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_int64(const num_get
*this, istreambuf_iterator_char
*ret
,
6786 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
6792 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6794 v
= _Stollx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6795 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
)), &err
);
6796 if(end
!=tmp
&& !err
)
6799 *state
|= IOSTATE_failbit
;
6802 *state
|= IOSTATE_eofbit
;
6808 /* ?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 */
6809 /* ?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 */
6810 DEFINE_THISCALL_WRAPPER(num_get_char_get_int64
,36)
6811 istreambuf_iterator_char
*__thiscall
num_get_char_get_int64(const num_get
*this, istreambuf_iterator_char
*ret
,
6812 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
6814 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6815 return call_num_get_char_do_get_int64(this, ret
, first
, last
, base
, state
, pval
);
6818 /* ?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 */
6819 /* ?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 */
6820 #if _MSVCP_VER <= 100
6821 #define call_num_get_char_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_char*, \
6822 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONG*), \
6823 (this, ret, first, last, base, state, pval))
6825 #define call_num_get_char_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_char*, \
6826 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONG*), \
6827 (this, ret, first, last, base, state, pval))
6829 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_ulong
,36)
6830 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_ulong(const num_get
*this, istreambuf_iterator_char
*ret
,
6831 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONG
*pval
)
6837 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6839 v
= _Stoulx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6840 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
)), &err
);
6841 if(end
!=tmp
&& !err
)
6844 *state
|= IOSTATE_failbit
;
6847 *state
|= IOSTATE_eofbit
;
6853 /* ?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 */
6854 /* ?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 */
6855 DEFINE_THISCALL_WRAPPER(num_get_char_get_ulong
,36)
6856 istreambuf_iterator_char
*__thiscall
num_get_char_get_ulong(const num_get
*this, istreambuf_iterator_char
*ret
,
6857 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONG
*pval
)
6859 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6860 return call_num_get_char_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
6863 /* ?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 */
6864 /* ?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 */
6865 #if _MSVCP_VER <= 100
6866 #define call_num_get_char_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_char*, \
6867 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONG*), \
6868 (this, ret, first, last, base, state, pval))
6870 #define call_num_get_char_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_char*, \
6871 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONG*), \
6872 (this, ret, first, last, base, state, pval))
6874 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_long
,36)
6875 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_long(const num_get
*this, istreambuf_iterator_char
*ret
,
6876 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONG
*pval
)
6882 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6884 v
= _Stolx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6885 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
)), &err
);
6886 if(end
!=tmp
&& !err
)
6889 *state
|= IOSTATE_failbit
;
6892 *state
|= IOSTATE_eofbit
;
6898 /* ?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 */
6899 /* ?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 */
6900 DEFINE_THISCALL_WRAPPER(num_get_char_get_long
,36)
6901 istreambuf_iterator_char
*__thiscall
num_get_char_get_long(const num_get
*this, istreambuf_iterator_char
*ret
,
6902 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONG
*pval
)
6904 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6905 return call_num_get_char_do_get_long(this, ret
, first
, last
, base
, state
, pval
);
6908 /* ?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 */
6909 /* ?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 */
6910 #if _MSVCP_VER <= 100
6911 #define call_num_get_char_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_char*, \
6912 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned int*), \
6913 (this, ret, first, last, base, state, pval))
6915 #define call_num_get_char_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_char*, \
6916 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned int*), \
6917 (this, ret, first, last, base, state, pval))
6919 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_uint
,36)
6920 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_uint(const num_get
*this, istreambuf_iterator_char
*ret
,
6921 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned int *pval
)
6923 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6924 return num_get_char_do_get_ulong(this, ret
, first
, last
, base
, state
, (ULONG
*)pval
);
6927 /* ?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 */
6928 /* ?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 */
6929 DEFINE_THISCALL_WRAPPER(num_get_char_get_uint
,36)
6930 istreambuf_iterator_char
*__thiscall
num_get_char_get_uint(const num_get
*this, istreambuf_iterator_char
*ret
,
6931 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned int *pval
)
6933 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6934 return call_num_get_char_do_get_uint(this, ret
, first
, last
, base
, state
, pval
);
6937 /* ?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 */
6938 /* ?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 */
6939 #if _MSVCP_VER <= 100
6940 #define call_num_get_char_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_char*, \
6941 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned short*), \
6942 (this, ret, first, last, base, state, pval))
6944 #define call_num_get_char_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 48, istreambuf_iterator_char*, \
6945 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned short*), \
6946 (this, ret, first, last, base, state, pval))
6948 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_ushort
,36)
6949 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_ushort(const num_get
*this, istreambuf_iterator_char
*ret
,
6950 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned short *pval
)
6953 char tmp
[25], *beg
, *end
;
6956 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6958 b
= num_get_char__Getifld(this, tmp
,
6959 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
));
6960 beg
= tmp
+ (tmp
[0]=='-' ? 1 : 0);
6961 v
= _Stoulx(beg
, &end
, b
, &err
);
6963 if(v
!= (ULONG
)((unsigned short)v
))
6964 *state
|= IOSTATE_failbit
;
6965 else if(end
!=beg
&& !err
)
6966 *pval
= (tmp
[0]=='-' ? -((unsigned short)v
) : v
);
6968 *state
|= IOSTATE_failbit
;
6971 *state
|= IOSTATE_eofbit
;
6977 /* ?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 */
6978 /* ?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 */
6979 DEFINE_THISCALL_WRAPPER(num_get_char_get_ushort
,36)
6980 istreambuf_iterator_char
*__thiscall
num_get_char_get_ushort(const num_get
*this, istreambuf_iterator_char
*ret
,
6981 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned short *pval
)
6983 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6984 return call_num_get_char_do_get_ushort(this, ret
, first
, last
, base
, state
, pval
);
6987 /* ?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 */
6988 /* ?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 */
6989 #if _MSVCP_VER <= 100
6990 #define call_num_get_char_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_char*, \
6991 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, bool*), \
6992 (this, ret, first, last, base, state, pval))
6994 #define call_num_get_char_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 52, istreambuf_iterator_char*, \
6995 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, bool*), \
6996 (this, ret, first, last, base, state, pval))
6998 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_bool
,36)
6999 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_bool(const num_get
*this, istreambuf_iterator_char
*ret
,
7000 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, bool *pval
)
7002 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
7004 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
7005 numpunct_char
*numpunct
= numpunct_char_use_facet(IOS_LOCALE(base
));
7006 basic_string_char false_bstr
, true_bstr
;
7007 const char *pfalse
, *ptrue
;
7009 numpunct_char_falsename(numpunct
, &false_bstr
);
7010 numpunct_char_truename(numpunct
, &true_bstr
);
7011 pfalse
= MSVCP_basic_string_char_c_str(&false_bstr
);
7012 ptrue
= MSVCP_basic_string_char_c_str(&true_bstr
);
7014 for(istreambuf_iterator_char_val(&first
); first
.strbuf
;) {
7015 if(pfalse
&& *pfalse
&& first
.val
!=*pfalse
)
7017 if(ptrue
&& *ptrue
&& first
.val
!=*ptrue
)
7020 if(pfalse
&& *pfalse
&& ptrue
&& !*ptrue
)
7022 if(ptrue
&& *ptrue
&& pfalse
&& !*pfalse
)
7031 istreambuf_iterator_char_inc(&first
);
7033 if((!pfalse
|| !*pfalse
) && (!ptrue
|| !*ptrue
))
7042 *state
|= IOSTATE_failbit
;
7044 MSVCP_basic_string_char_dtor(&false_bstr
);
7045 MSVCP_basic_string_char_dtor(&true_bstr
);
7049 LONG v
= _Stolx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
7050 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
)), &err
);
7052 if(end
!=tmp
&& err
==0 && (v
==0 || v
==1))
7055 *state
|= IOSTATE_failbit
;
7059 *state
|= IOSTATE_eofbit
;
7060 memcpy(ret
, &first
, sizeof(first
));
7064 /* ?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 */
7065 /* ?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 */
7066 DEFINE_THISCALL_WRAPPER(num_get_char_get_bool
,36)
7067 istreambuf_iterator_char
*__thiscall
num_get_char_get_bool(const num_get
*this, istreambuf_iterator_char
*ret
,
7068 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, bool *pval
)
7070 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
7071 return call_num_get_char_do_get_bool(this, ret
, first
, last
, base
, state
, pval
);
7074 /* ?id@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
7075 locale_id num_put_char_id
= {0};
7077 /* num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
7078 extern const vtable_ptr num_put_char_vtable
;
7080 /* ?_Init@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
7081 /* ?_Init@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
7082 DEFINE_THISCALL_WRAPPER(num_put_char__Init
, 8)
7083 void __thiscall
num_put_char__Init(num_put
*this, const _Locinfo
*locinfo
)
7085 TRACE("(%p %p)\n", this, locinfo
);
7086 #if _MSVCP_VER < 110
7087 _Locinfo__Getcvt(locinfo
, &this->cvt
);
7091 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
7092 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
7093 DEFINE_THISCALL_WRAPPER(num_put_char_ctor_locinfo
, 12)
7094 num_put
* __thiscall
num_put_char_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, size_t refs
)
7096 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
7098 locale_facet_ctor_refs(&this->facet
, refs
);
7099 this->facet
.vtable
= &num_put_char_vtable
;
7101 num_put_char__Init(this, locinfo
);
7105 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
7106 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
7107 DEFINE_THISCALL_WRAPPER(num_put_char_ctor_refs
, 8)
7108 num_put
* __thiscall
num_put_char_ctor_refs(num_put
*this, size_t refs
)
7112 TRACE("(%p %Iu)\n", this, refs
);
7114 _Locinfo_ctor(&locinfo
);
7115 num_put_char_ctor_locinfo(this, &locinfo
, refs
);
7116 _Locinfo_dtor(&locinfo
);
7120 /* ??_F?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
7121 /* ??_F?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
7122 DEFINE_THISCALL_WRAPPER(num_put_char_ctor
, 4)
7123 num_put
* __thiscall
num_put_char_ctor(num_put
*this)
7125 return num_put_char_ctor_refs(this, 0);
7128 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@UAE@XZ */
7129 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@UEAA@XZ */
7130 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
7131 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
7132 DEFINE_THISCALL_WRAPPER(num_put_char_dtor
, 4)
7133 void __thiscall
num_put_char_dtor(num_put
*this)
7135 TRACE("(%p)\n", this);
7136 locale_facet_dtor(&this->facet
);
7139 DEFINE_THISCALL_WRAPPER(num_put_char_vector_dtor
, 8)
7140 num_put
* __thiscall
num_put_char_vector_dtor(num_put
*this, unsigned int flags
)
7142 TRACE("(%p %x)\n", this, flags
);
7144 /* we have an array, with the number of elements stored before the first object */
7145 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
7147 for(i
=*ptr
-1; i
>=0; i
--)
7148 num_put_char_dtor(this+i
);
7149 operator_delete(ptr
);
7151 num_put_char_dtor(this);
7153 operator_delete(this);
7159 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
7160 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
7161 size_t __cdecl
num_put_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
7163 TRACE("(%p %p)\n", facet
, loc
);
7165 if(facet
&& !*facet
) {
7168 *facet
= operator_new(sizeof(num_put
));
7169 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
7170 num_put_char_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
7171 _Locinfo_dtor(&locinfo
);
7177 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
7178 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
7179 size_t __cdecl
num_put_char__Getcat_old(const locale_facet
**facet
)
7181 return num_put_char__Getcat(facet
, locale_classic());
7184 num_put
* num_put_char_use_facet(const locale
*loc
)
7186 static num_put
*obj
= NULL
;
7189 const locale_facet
*fac
;
7191 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
7192 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_char_id
));
7194 _Lockit_dtor(&lock
);
7195 return (num_put
*)fac
;
7199 _Lockit_dtor(&lock
);
7203 num_put_char__Getcat(&fac
, loc
);
7204 obj
= (num_put
*)fac
;
7205 call_locale_facet__Incref(&obj
->facet
);
7206 locale_facet_register(&obj
->facet
);
7207 _Lockit_dtor(&lock
);
7212 /* ?_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 */
7213 /* ?_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 */
7214 ostreambuf_iterator_char
* __cdecl
num_put_char__Put(const num_put
*this, ostreambuf_iterator_char
*ret
,
7215 ostreambuf_iterator_char dest
, const char *ptr
, size_t count
)
7217 TRACE("(%p %p %p %Iu)\n", this, ret
, ptr
, count
);
7219 for(; count
>0; count
--)
7220 ostreambuf_iterator_char_put(&dest
, *ptr
++);
7226 /* ?_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 */
7227 /* ?_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 */
7228 ostreambuf_iterator_char
* __cdecl
num_put_char__Putc(const num_put
*this, ostreambuf_iterator_char
*ret
,
7229 ostreambuf_iterator_char dest
, const char *ptr
, size_t count
)
7231 TRACE("(%p %p %p %Iu)\n", this, ret
, ptr
, count
);
7233 for(; count
>0; count
--)
7234 ostreambuf_iterator_char_put(&dest
, *ptr
++);
7240 /* ?_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 */
7241 /* ?_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 */
7242 ostreambuf_iterator_char
* __cdecl
num_put_char__Putgrouped(const num_put
*this, ostreambuf_iterator_char
*ret
,
7243 ostreambuf_iterator_char dest
, const char *ptr
, size_t count
, char delim
)
7245 FIXME("(%p %p %p %Iu %d) stub\n", this, ret
, ptr
, count
, delim
);
7249 /* ?_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 */
7250 /* ?_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 */
7251 ostreambuf_iterator_char
* __cdecl
num_put_char__Rep(const num_put
*this, ostreambuf_iterator_char
*ret
,
7252 ostreambuf_iterator_char dest
, char c
, size_t count
)
7254 TRACE("(%p %p %d %Iu)\n", this, ret
, c
, count
);
7256 for(; count
>0; count
--)
7257 ostreambuf_iterator_char_put(&dest
, c
);
7263 /* ?_Ffmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAPADPADDH@Z */
7264 /* ?_Ffmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAPEADPEADDH@Z */
7265 char* __cdecl
num_put_char__Ffmt(const num_put
*this, char *fmt
, char spec
, int fmtfl
)
7267 int type
= fmtfl
& FMTFLAG_floatfield
;
7270 TRACE("(%p %p %d %d)\n", this, fmt
, spec
, fmtfl
);
7273 if(fmtfl
& FMTFLAG_showpos
)
7275 if(fmtfl
& FMTFLAG_showpoint
)
7282 if(type
== FMTFLAG_fixed
)
7284 else if(type
== FMTFLAG_scientific
)
7285 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'E' : 'e';
7286 else if(type
== (FMTFLAG_fixed
|FMTFLAG_scientific
))
7287 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'A' : 'a';
7289 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'G' : 'g';
7295 /* ?_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 */
7296 /* ?_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 */
7297 ostreambuf_iterator_char
* __cdecl
num_put_char__Fput(const num_put
*this, ostreambuf_iterator_char
*ret
,
7298 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const char *buf
, size_t bef_point
,
7299 size_t aft_point
, size_t trailing
, size_t count
)
7301 FIXME("(%p %p %p %d %p %Iu %Iu %Iu %Iu) stub\n", this, ret
, base
,
7302 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
7306 /* TODO: This function should be removed when num_put_char__Fput is implemented */
7307 static ostreambuf_iterator_char
* num_put_char_fput(const num_put
*this, ostreambuf_iterator_char
*ret
,
7308 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, char *buf
, size_t count
)
7310 numpunct_char
*numpunct
= numpunct_char_use_facet(IOS_LOCALE(base
));
7311 basic_string_char grouping_bstr
;
7312 const char *grouping
;
7313 char *p
, sep
= 0, dec_point
= *localeconv()->decimal_point
;
7314 int cur_group
= 0, group_size
= 0;
7315 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
7318 TRACE("(%p %p %p %d %s %Iu)\n", this, ret
, base
, fill
, buf
, count
);
7320 /* Change decimal point */
7321 for(p
=buf
; p
<buf
+count
; p
++) {
7322 if(*p
== dec_point
) {
7323 *p
= numpunct_char_decimal_point(numpunct
);
7329 /* Add separators to number */
7330 numpunct_char_grouping(numpunct
, &grouping_bstr
);
7331 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
7332 #if _MSVCP_VER >= 70
7333 if (grouping
[0]) sep
= numpunct_char_thousands_sep(numpunct
);
7336 for(; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
7338 if(group_size
== grouping
[cur_group
]) {
7340 if(grouping
[cur_group
+1])
7343 memmove(p
+1, p
, buf
+count
-p
);
7348 MSVCP_basic_string_char_dtor(&grouping_bstr
);
7350 /* Display number with padding */
7351 if(count
>= base
->wide
)
7354 pad
= base
->wide
-count
;
7357 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
7358 num_put_char__Putc(this, &dest
, dest
, buf
, 1);
7361 if(adjustfield
!= FMTFLAG_left
) {
7362 num_put_char__Rep(this, ret
, dest
, fill
, pad
);
7365 num_put_char__Putc(this, &dest
, dest
, buf
, count
);
7366 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
7369 /* ?_Ifmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAPADPADPBDH@Z */
7370 /* ?_Ifmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
7371 char* __cdecl
num_put_char__Ifmt(const num_put
*this, char *fmt
, const char *spec
, int fmtfl
)
7373 int base
= fmtfl
& FMTFLAG_basefield
;
7376 TRACE("(%p %p %p %d)\n", this, fmt
, spec
, fmtfl
);
7379 if(fmtfl
& FMTFLAG_showpos
)
7381 if(fmtfl
& FMTFLAG_showbase
)
7388 if(base
== FMTFLAG_oct
)
7390 else if(base
== FMTFLAG_hex
)
7391 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'X' : 'x';
7399 /* ?_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 */
7400 /* ?_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 */
7401 ostreambuf_iterator_char
* __cdecl
num_put_char__Iput(const num_put
*this, ostreambuf_iterator_char
*ret
,
7402 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, char *buf
, size_t count
)
7404 numpunct_char
*numpunct
= numpunct_char_use_facet(IOS_LOCALE(base
));
7405 basic_string_char grouping_bstr
;
7406 const char *grouping
;
7408 int cur_group
= 0, group_size
= 0;
7409 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
7412 TRACE("(%p %p %p %d %s %Iu)\n", this, ret
, base
, fill
, buf
, count
);
7414 /* Add separators to number */
7415 numpunct_char_grouping(numpunct
, &grouping_bstr
);
7416 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
7417 #if _MSVCP_VER >= 70
7418 if (grouping
[0]) sep
= numpunct_char_thousands_sep(numpunct
);
7421 for(p
=buf
+count
-1; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
7423 if(group_size
== grouping
[cur_group
]) {
7425 if(grouping
[cur_group
+1])
7428 memmove(p
+1, p
, buf
+count
-p
);
7433 MSVCP_basic_string_char_dtor(&grouping_bstr
);
7435 /* Display number with padding */
7436 if(count
>= base
->wide
)
7439 pad
= base
->wide
-count
;
7442 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
7443 num_put_char__Putc(this, &dest
, dest
, buf
, 1);
7445 }else if((adjustfield
& FMTFLAG_internal
) && (buf
[1]=='x' || buf
[1]=='X')) {
7446 num_put_char__Putc(this, &dest
, dest
, buf
, 2);
7449 if(adjustfield
!= FMTFLAG_left
) {
7450 num_put_char__Rep(this, ret
, dest
, fill
, pad
);
7453 num_put_char__Putc(this, &dest
, dest
, buf
, count
);
7454 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
7457 /* ?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 */
7458 /* ?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 */
7459 #if _MSVCP_VER <= 100
7460 #define call_num_put_char_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_char*, \
7461 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, LONG), \
7462 (this, ret, dest, base, fill, v))
7464 #define call_num_put_char_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 36, ostreambuf_iterator_char*, \
7465 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, LONG), \
7466 (this, ret, dest, base, fill, v))
7468 #if _MSVCP_VER != 80
7469 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_long
, 28)
7471 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_long
, 32)
7473 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_long(const num_put
*this, ostreambuf_iterator_char
*ret
,
7474 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, LONG v
)
7476 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
7477 char fmt
[7]; /* strlen("%+#lld")+1 */
7479 TRACE("(%p %p %p %d %ld)\n", this, ret
, base
, fill
, v
);
7481 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
7482 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
7485 /* ?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 */
7486 /* ?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 */
7487 #if _MSVCP_VER != 80
7488 DEFINE_THISCALL_WRAPPER(num_put_char_put_long
, 28)
7490 DEFINE_THISCALL_WRAPPER(num_put_char_put_long
, 32)
7492 ostreambuf_iterator_char
* __thiscall
num_put_char_put_long(const num_put
*this, ostreambuf_iterator_char
*ret
,
7493 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, LONG v
)
7495 TRACE("(%p %p %p %d %ld)\n", this, ret
, base
, fill
, v
);
7496 return call_num_put_char_do_put_long(this, ret
, dest
, base
, fill
, v
);
7499 /* ?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 */
7500 /* ?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 */
7501 #if _MSVCP_VER <= 100
7502 #define call_num_put_char_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_char*, \
7503 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, ULONG), \
7504 (this, ret, dest, base, fill, v))
7506 #define call_num_put_char_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_char*, \
7507 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, ULONG), \
7508 (this, ret, dest, base, fill, v))
7510 #if _MSVCP_VER != 80
7511 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ulong
, 28)
7513 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ulong
, 32)
7515 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_ulong(const num_put
*this, ostreambuf_iterator_char
*ret
,
7516 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, ULONG v
)
7518 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
7519 char fmt
[7]; /* strlen("%+#lld")+1 */
7521 TRACE("(%p %p %p %d %ld)\n", this, ret
, base
, fill
, v
);
7523 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
7524 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
7527 /* ?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 */
7528 /* ?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 */
7529 #if _MSVCP_VER != 80
7530 DEFINE_THISCALL_WRAPPER(num_put_char_put_ulong
, 28)
7532 DEFINE_THISCALL_WRAPPER(num_put_char_put_ulong
, 32)
7534 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ulong(const num_put
*this, ostreambuf_iterator_char
*ret
,
7535 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, ULONG v
)
7537 TRACE("(%p %p %p %d %ld)\n", this, ret
, base
, fill
, v
);
7538 return call_num_put_char_do_put_ulong(this, ret
, dest
, base
, fill
, v
);
7541 static inline unsigned get_precision(const ios_base
*base
)
7543 streamsize ret
= base
->prec
<= 0 && !(base
->fmtfl
& FMTFLAG_fixed
) ? 6 : base
->prec
;
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@DN@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@DN@Z */
7551 /* ?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 */
7552 /* ?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 */
7553 #if _MSVCP_VER <= 100
7554 #define call_num_put_char_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_char*, \
7555 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
7556 (this, ret, dest, base, fill, v))
7557 #define call_num_put_char_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 8, ostreambuf_iterator_char*, \
7558 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
7559 (this, ret, dest, base, fill, v))
7561 #define call_num_put_char_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_char*, \
7562 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
7563 (this, ret, dest, base, fill, v))
7564 #define call_num_put_char_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_char*, \
7565 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
7566 (this, ret, dest, base, fill, v))
7568 #if _MSVCP_VER != 80
7569 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_double
, 32)
7571 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_double
, 36)
7573 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_double(const num_put
*this, ostreambuf_iterator_char
*ret
,
7574 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
7577 char fmt
[8]; /* strlen("%+#.*lg")+1 */
7581 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7583 num_put_char__Ffmt(this, fmt
, '\0', base
->fmtfl
);
7584 prec
= get_precision(base
);
7585 size
= _scprintf(fmt
, prec
, v
);
7587 /* TODO: don't use dynamic allocation */
7588 tmp
= operator_new(size
*2);
7589 num_put_char_fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, prec
, v
));
7590 operator_delete(tmp
);
7594 /* ?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 */
7595 /* ?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 */
7596 #if _MSVCP_VER != 80
7597 DEFINE_THISCALL_WRAPPER(num_put_char_put_double
, 32)
7599 DEFINE_THISCALL_WRAPPER(num_put_char_put_double
, 36)
7601 ostreambuf_iterator_char
* __thiscall
num_put_char_put_double(const num_put
*this, ostreambuf_iterator_char
*ret
,
7602 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
7604 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7605 return call_num_put_char_do_put_double(this, ret
, dest
, base
, fill
, v
);
7608 /* ?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 */
7609 /* ?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 */
7610 #if _MSVCP_VER != 80
7611 DEFINE_THISCALL_WRAPPER(num_put_char_put_ldouble
, 32)
7613 DEFINE_THISCALL_WRAPPER(num_put_char_put_ldouble
, 36)
7615 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ldouble(const num_put
*this, ostreambuf_iterator_char
*ret
,
7616 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
7618 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7619 return call_num_put_char_do_put_ldouble(this, ret
, dest
, base
, fill
, v
);
7622 /* ?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 */
7623 /* ?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 */
7624 #if _MSVCP_VER <= 100
7625 #define call_num_put_char_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_char*, \
7626 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const void*), \
7627 (this, ret, dest, base, fill, v))
7629 #define call_num_put_char_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_char*, \
7630 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const void*), \
7631 (this, ret, dest, base, fill, v))
7633 #if _MSVCP_VER != 80
7634 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ptr
, 28)
7636 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ptr
, 32)
7638 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_ptr(const num_put
*this, ostreambuf_iterator_char
*ret
,
7639 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const void *v
)
7641 char tmp
[17]; /* 8(16^8==2^64)*2(separators between every digit) + 1 */
7643 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
7645 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
7648 /* ?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 */
7649 /* ?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 */
7650 #if _MSVCP_VER != 80
7651 DEFINE_THISCALL_WRAPPER(num_put_char_put_ptr
, 28)
7653 DEFINE_THISCALL_WRAPPER(num_put_char_put_ptr
, 32)
7655 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ptr(const num_put
*this, ostreambuf_iterator_char
*ret
,
7656 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const void *v
)
7658 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
7659 return call_num_put_char_do_put_ptr(this, ret
, dest
, base
, fill
, v
);
7662 /* ?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 */
7663 /* ?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 */
7664 #if _MSVCP_VER <= 100
7665 #define call_num_put_char_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_char*, \
7666 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, __int64), \
7667 (this, ret, dest, base, fill, v))
7669 #define call_num_put_char_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_char*, \
7670 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, __int64), \
7671 (this, ret, dest, base, fill, v))
7673 #if _MSVCP_VER != 80
7674 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_int64
, 32)
7676 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_int64
, 36)
7678 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_int64(const num_put
*this, ostreambuf_iterator_char
*ret
,
7679 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, __int64 v
)
7681 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
7682 char fmt
[7]; /* strlen("%+#lld")+1 */
7684 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7686 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
7687 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
7690 /* ?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 */
7691 /* ?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 */
7692 #if _MSVCP_VER != 80
7693 DEFINE_THISCALL_WRAPPER(num_put_char_put_int64
, 32)
7695 DEFINE_THISCALL_WRAPPER(num_put_char_put_int64
, 36)
7697 ostreambuf_iterator_char
* __thiscall
num_put_char_put_int64(const num_put
*this, ostreambuf_iterator_char
*ret
,
7698 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, __int64 v
)
7700 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7701 return call_num_put_char_do_put_int64(this, ret
, dest
, base
, fill
, v
);
7704 /* ?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 */
7705 /* ?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 */
7706 #if _MSVCP_VER <= 100
7707 #define call_num_put_char_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_char*, \
7708 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, unsigned __int64), \
7709 (this, ret, dest, base, fill, v))
7711 #define call_num_put_char_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_char*, \
7712 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, unsigned __int64), \
7713 (this, ret, dest, base, fill, v))
7715 #if _MSVCP_VER != 80
7716 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_uint64
, 32)
7718 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_uint64
, 36)
7720 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_uint64(const num_put
*this, ostreambuf_iterator_char
*ret
,
7721 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, unsigned __int64 v
)
7723 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
7724 char fmt
[7]; /* strlen("%+#lld")+1 */
7726 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7728 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
7729 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
7732 /* ?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 */
7733 /* ?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 */
7734 #if _MSVCP_VER != 80
7735 DEFINE_THISCALL_WRAPPER(num_put_char_put_uint64
, 32)
7737 DEFINE_THISCALL_WRAPPER(num_put_char_put_uint64
, 36)
7739 ostreambuf_iterator_char
* __thiscall
num_put_char_put_uint64(const num_put
*this, ostreambuf_iterator_char
*ret
,
7740 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, unsigned __int64 v
)
7742 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7743 return call_num_put_char_do_put_uint64(this, ret
, dest
, base
, fill
, v
);
7746 /* ?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 */
7747 /* ?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 */
7748 #if _MSVCP_VER <= 100
7749 #define call_num_put_char_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_char*, \
7750 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, bool), \
7751 (this, ret, dest, base, fill, v))
7753 #define call_num_put_char_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 40, ostreambuf_iterator_char*, \
7754 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, bool), \
7755 (this, ret, dest, base, fill, v))
7757 #if _MSVCP_VER != 80
7758 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_bool
, 28)
7760 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_bool
, 32)
7762 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_bool(const num_put
*this, ostreambuf_iterator_char
*ret
,
7763 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, bool v
)
7765 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7767 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
7768 numpunct_char
*numpunct
= numpunct_char_use_facet(IOS_LOCALE(base
));
7769 basic_string_char str
;
7773 numpunct_char_truename(numpunct
, &str
);
7775 numpunct_char_falsename(numpunct
, &str
);
7777 len
= MSVCP_basic_string_char_length(&str
);
7778 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
7781 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
7782 num_put_char__Rep(this, &dest
, dest
, fill
, pad
);
7785 num_put_char__Putc(this, &dest
, dest
, MSVCP_basic_string_char_c_str(&str
), len
);
7786 MSVCP_basic_string_char_dtor(&str
);
7787 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
7790 return num_put_char_put_long(this, ret
, dest
, base
, fill
, v
);
7793 /* ?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 */
7794 /* ?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 */
7795 #if _MSVCP_VER != 80
7796 DEFINE_THISCALL_WRAPPER(num_put_char_put_bool
, 28)
7798 DEFINE_THISCALL_WRAPPER(num_put_char_put_bool
, 32)
7800 ostreambuf_iterator_char
* __thiscall
num_put_char_put_bool(const num_put
*this, ostreambuf_iterator_char
*ret
,
7801 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, bool v
)
7803 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7804 return call_num_put_char_do_put_bool(this, ret
, dest
, base
, fill
, v
);
7807 /* ?id@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
7808 locale_id num_put_wchar_id
= {0};
7809 /* ?id@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
7810 locale_id num_put_short_id
= {0};
7812 /* num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
7813 extern const vtable_ptr num_put_wchar_vtable
;
7814 /* num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
7815 extern const vtable_ptr num_put_short_vtable
;
7817 /* ?_Init@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
7818 /* ?_Init@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
7819 DEFINE_THISCALL_WRAPPER(num_put_wchar__Init
, 8)
7820 void __thiscall
num_put_wchar__Init(num_put
*this, const _Locinfo
*locinfo
)
7822 TRACE("(%p %p)\n", this, locinfo
);
7823 #if _MSVCP_VER < 110
7824 _Locinfo__Getcvt(locinfo
, &this->cvt
);
7828 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
7829 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
7830 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor_locinfo
, 12)
7831 num_put
* __thiscall
num_put_wchar_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, size_t refs
)
7833 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
7835 locale_facet_ctor_refs(&this->facet
, refs
);
7836 this->facet
.vtable
= &num_put_wchar_vtable
;
7838 num_put_wchar__Init(this, locinfo
);
7842 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
7843 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
7844 DEFINE_THISCALL_WRAPPER(num_put_short_ctor_locinfo
, 12)
7845 num_put
* __thiscall
num_put_short_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, size_t refs
)
7847 num_put_wchar_ctor_locinfo(this, locinfo
, refs
);
7848 this->facet
.vtable
= &num_put_short_vtable
;
7852 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
7853 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
7854 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor_refs
, 8)
7855 num_put
* __thiscall
num_put_wchar_ctor_refs(num_put
*this, size_t refs
)
7859 TRACE("(%p %Iu)\n", this, refs
);
7861 _Locinfo_ctor(&locinfo
);
7862 num_put_wchar_ctor_locinfo(this, &locinfo
, refs
);
7863 _Locinfo_dtor(&locinfo
);
7867 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
7868 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
7869 DEFINE_THISCALL_WRAPPER(num_put_short_ctor_refs
, 8)
7870 num_put
* __thiscall
num_put_short_ctor_refs(num_put
*this, size_t refs
)
7872 num_put_wchar_ctor_refs(this, refs
);
7873 this->facet
.vtable
= &num_put_short_vtable
;
7877 /* ??_F?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
7878 /* ??_F?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
7879 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor
, 4)
7880 num_put
* __thiscall
num_put_wchar_ctor(num_put
*this)
7882 return num_put_wchar_ctor_refs(this, 0);
7885 /* ??_F?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ */
7886 /* ??_F?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ */
7887 DEFINE_THISCALL_WRAPPER(num_put_short_ctor
, 4)
7888 num_put
* __thiscall
num_put_short_ctor(num_put
*this)
7890 return num_put_short_ctor_refs(this, 0);
7893 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@UAE@XZ */
7894 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@UEAA@XZ */
7895 /* ??1?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
7896 /* ??1?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
7897 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
7898 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
7899 DEFINE_THISCALL_WRAPPER(num_put_wchar_dtor
, 4)
7900 void __thiscall
num_put_wchar_dtor(num_put
*this)
7902 TRACE("(%p)\n", this);
7903 locale_facet_dtor(&this->facet
);
7906 DEFINE_THISCALL_WRAPPER(num_put_wchar_vector_dtor
, 8)
7907 num_put
* __thiscall
num_put_wchar_vector_dtor(num_put
*this, unsigned int flags
)
7909 TRACE("(%p %x)\n", this, flags
);
7911 /* we have an array, with the number of elements stored before the first object */
7912 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
7914 for(i
=*ptr
-1; i
>=0; i
--)
7915 num_put_wchar_dtor(this+i
);
7916 operator_delete(ptr
);
7918 num_put_wchar_dtor(this);
7920 operator_delete(this);
7926 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
7927 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
7928 size_t __cdecl
num_put_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
7930 TRACE("(%p %p)\n", facet
, loc
);
7932 if(facet
&& !*facet
) {
7935 *facet
= operator_new(sizeof(num_put
));
7936 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
7937 num_put_wchar_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
7938 _Locinfo_dtor(&locinfo
);
7944 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
7945 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
7946 size_t __cdecl
num_put_wchar__Getcat_old(const locale_facet
**facet
)
7948 return num_put_wchar__Getcat(facet
, locale_classic());
7951 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
7952 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
7953 size_t __cdecl
num_put_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
7955 TRACE("(%p %p)\n", facet
, loc
);
7957 if(facet
&& !*facet
) {
7960 *facet
= operator_new(sizeof(num_put
));
7961 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
7962 num_put_short_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
7963 _Locinfo_dtor(&locinfo
);
7969 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
7970 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
7971 size_t __cdecl
num_put_short__Getcat_old(const locale_facet
**facet
)
7973 return num_put_short__Getcat(facet
, locale_classic());
7976 num_put
* num_put_wchar_use_facet(const locale
*loc
)
7978 static num_put
*obj
= NULL
;
7981 const locale_facet
*fac
;
7983 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
7984 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_wchar_id
));
7986 _Lockit_dtor(&lock
);
7987 return (num_put
*)fac
;
7991 _Lockit_dtor(&lock
);
7995 num_put_wchar__Getcat(&fac
, loc
);
7996 obj
= (num_put
*)fac
;
7997 call_locale_facet__Incref(&obj
->facet
);
7998 locale_facet_register(&obj
->facet
);
7999 _Lockit_dtor(&lock
);
8004 num_put
* num_put_short_use_facet(const locale
*loc
)
8006 static num_put
*obj
= NULL
;
8009 const locale_facet
*fac
;
8011 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
8012 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_short_id
));
8014 _Lockit_dtor(&lock
);
8015 return (num_put
*)fac
;
8019 _Lockit_dtor(&lock
);
8023 num_put_short__Getcat(&fac
, loc
);
8024 obj
= (num_put
*)fac
;
8025 call_locale_facet__Incref(&obj
->facet
);
8026 locale_facet_register(&obj
->facet
);
8027 _Lockit_dtor(&lock
);
8032 /* ?_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 */
8033 /* ?_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 */
8034 /* ?_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 */
8035 /* ?_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 */
8036 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Put(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8037 ostreambuf_iterator_wchar dest
, const wchar_t *ptr
, size_t count
)
8039 TRACE("(%p %p %s %Iu)\n", this, ret
, debugstr_wn(ptr
, count
), count
);
8041 for(; count
>0; count
--)
8042 ostreambuf_iterator_wchar_put(&dest
, *ptr
++);
8048 #if _MSVCP_VER < 110
8049 /* ?_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 */
8050 /* ?_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 */
8051 /* ?_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 */
8052 /* ?_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 */
8053 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Putc(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8054 ostreambuf_iterator_wchar dest
, const char *ptr
, size_t count
)
8059 TRACE("(%p %p %s %Iu)\n", this, ret
, debugstr_an(ptr
, count
), count
);
8061 memset(&state
, 0, sizeof(state
));
8062 for(; count
>0; count
--) {
8063 if(_Mbrtowc(&ch
, ptr
++, 1, &state
, &this->cvt
) == 1)
8064 ostreambuf_iterator_wchar_put(&dest
, ch
);
8072 /* ?_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 */
8073 /* ?_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 */
8074 /* ?_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 */
8075 /* ?_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 */
8076 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Putgrouped(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8077 ostreambuf_iterator_wchar dest
, const char *ptr
, size_t count
, wchar_t delim
)
8079 FIXME("(%p %p %p %Iu %d) stub\n", this, ret
, ptr
, count
, delim
);
8083 /* ?_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 */
8084 /* ?_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 */
8085 /* ?_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 */
8086 /* ?_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 */
8087 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Rep(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8088 ostreambuf_iterator_wchar dest
, wchar_t c
, size_t count
)
8090 TRACE("(%p %p %d %Iu)\n", this, ret
, c
, count
);
8092 for(; count
>0; count
--)
8093 ostreambuf_iterator_wchar_put(&dest
, c
);
8099 /* ?_Ffmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAPADPADDH@Z */
8100 /* ?_Ffmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAPEADPEADDH@Z */
8101 /* ?_Ffmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAPADPADDH@Z */
8102 /* ?_Ffmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAPEADPEADDH@Z */
8103 char* __cdecl
num_put_wchar__Ffmt(const num_put
*this, char *fmt
, char spec
, int fmtfl
)
8105 int type
= fmtfl
& FMTFLAG_floatfield
;
8108 TRACE("(%p %p %d %d)\n", this, fmt
, spec
, fmtfl
);
8111 if(fmtfl
& FMTFLAG_showpos
)
8113 if(fmtfl
& FMTFLAG_showbase
)
8120 if(type
== FMTFLAG_fixed
)
8122 else if(type
== FMTFLAG_scientific
)
8123 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'E' : 'e';
8124 else if(type
== (FMTFLAG_fixed
|FMTFLAG_scientific
))
8125 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'A' : 'a';
8127 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'G' : 'g';
8133 /* ?_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 */
8134 /* ?_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 */
8135 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8136 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const char *buf
, size_t bef_point
,
8137 size_t aft_point
, size_t trailing
, size_t count
)
8139 FIXME("(%p %p %p %d %p %Iu %Iu %Iu %Iu) stub\n", this, ret
, base
,
8140 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
8144 /* ?_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 */
8145 /* ?_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 */
8146 ostreambuf_iterator_wchar
* __cdecl
num_put_short__Fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8147 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const char *buf
, size_t bef_point
,
8148 size_t aft_point
, size_t trailing
, size_t count
)
8150 FIXME("(%p %p %p %d %p %Iu %Iu %Iu %Iu) stub\n", this, ret
, base
,
8151 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
8155 #if _MSVCP_VER < 110
8156 static void num_put_wchar_wide_put(const num_put
*this,
8157 ostreambuf_iterator_wchar
*dest
, ios_base
*base
,
8158 const char *buf
, size_t count
)
8160 num_put_wchar__Putc(this, dest
, *dest
, buf
, count
);
8163 static void num_put_wchar_wide_put(const num_put
*this,
8164 ostreambuf_iterator_wchar
*dest
, ios_base
*base
,
8165 const char *buf
, size_t count
)
8170 ctype
= ctype_wchar_use_facet(IOS_LOCALE(base
));
8171 for(i
=0; i
<count
; i
++)
8172 ostreambuf_iterator_wchar_put(dest
, ctype_wchar_widen_ch(ctype
, buf
[i
]));
8176 /* TODO: This function should be removed when num_put_wchar__Fput is implemented */
8177 static ostreambuf_iterator_wchar
* num_put__fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8178 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
,
8179 size_t count
, numpunct_wchar
*numpunct
)
8181 basic_string_char grouping_bstr
;
8182 const char *grouping
;
8183 char *p
, dec_point
= *localeconv()->decimal_point
;
8185 int cur_group
= 0, group_size
= 0;
8186 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
8189 TRACE("(%p %p %p %d %s %Iu)\n", this, ret
, base
, fill
, buf
, count
);
8191 for(p
=buf
; p
<buf
+count
; p
++) {
8197 /* Add separators to number */
8198 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
8199 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
8200 #if _MSVCP_VER >= 70
8201 if (grouping
[0]) sep
= numpunct_wchar_thousands_sep(numpunct
);
8204 for(; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
8206 if(group_size
== grouping
[cur_group
]) {
8208 if(grouping
[cur_group
+1])
8211 memmove(p
+1, p
, buf
+count
-p
);
8212 *p
= '\0'; /* mark thousands separator positions */
8216 MSVCP_basic_string_char_dtor(&grouping_bstr
);
8218 /* Display number with padding */
8219 if(count
>= base
->wide
)
8222 pad
= base
->wide
-count
;
8225 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
8226 num_put_wchar_wide_put(this, &dest
, base
, buf
, 1);
8229 if(adjustfield
!= FMTFLAG_left
) {
8230 num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8234 for(i
=0; i
<count
; i
++) {
8235 if(buf
[i
] == dec_point
)
8236 num_put_wchar__Rep(this, &dest
, dest
, numpunct_wchar_decimal_point(numpunct
), 1);
8238 num_put_wchar__Rep(this, &dest
, dest
, sep
, 1);
8240 num_put_wchar_wide_put(this, &dest
, base
, buf
+i
, 1);
8243 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8246 /* ?_Ifmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAPADPADPBDH@Z */
8247 /* ?_Ifmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
8248 /* ?_Ifmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAPADPADPBDH@Z */
8249 /* ?_Ifmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
8250 char* __cdecl
num_put_wchar__Ifmt(const num_put
*this, char *fmt
, const char *spec
, int fmtfl
)
8252 int base
= fmtfl
& FMTFLAG_basefield
;
8255 TRACE("(%p %p %p %d)\n", this, fmt
, spec
, fmtfl
);
8258 if(fmtfl
& FMTFLAG_showpos
)
8260 if(fmtfl
& FMTFLAG_showbase
)
8267 if(base
== FMTFLAG_oct
)
8269 else if(base
== FMTFLAG_hex
)
8270 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'X' : 'x';
8278 static ostreambuf_iterator_wchar
* num_put__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8279 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
,
8280 size_t count
, numpunct_wchar
*numpunct
)
8282 basic_string_char grouping_bstr
;
8283 const char *grouping
;
8286 int cur_group
= 0, group_size
= 0;
8287 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
8290 TRACE("(%p %p %p %d %s %Iu)\n", this, ret
, base
, fill
, buf
, count
);
8292 /* Add separators to number */
8293 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
8294 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
8295 sep
= grouping
[0] ? numpunct_wchar_thousands_sep(numpunct
) : '\0';
8297 for(p
=buf
+count
-1; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
8299 if(group_size
== grouping
[cur_group
]) {
8301 if(grouping
[cur_group
+1])
8304 memmove(p
+1, p
, buf
+count
-p
);
8305 *p
= '\0'; /* mark thousands separator positions */
8309 MSVCP_basic_string_char_dtor(&grouping_bstr
);
8311 /* Display number with padding */
8312 if(count
>= base
->wide
)
8315 pad
= base
->wide
-count
;
8318 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
8319 num_put_wchar_wide_put(this, &dest
, base
, buf
, 1);
8321 }else if((adjustfield
& FMTFLAG_internal
) && (buf
[1]=='x' || buf
[1]=='X')) {
8322 num_put_wchar_wide_put(this, &dest
, base
, buf
, 2);
8325 if(adjustfield
!= FMTFLAG_left
) {
8326 num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8330 for(i
=0; i
<count
; i
++) {
8332 num_put_wchar__Rep(this, &dest
, dest
, sep
, 1);
8334 num_put_wchar_wide_put(this, &dest
, base
, buf
+i
, 1);
8337 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8340 /* ?_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 */
8341 /* ?_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 */
8342 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8343 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
, size_t count
)
8345 return num_put__Iput(this, ret
, dest
, base
, fill
, buf
, count
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
8348 /* ?_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 */
8349 /* ?_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 */
8350 ostreambuf_iterator_wchar
* __cdecl
num_put_short__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8351 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
, size_t count
)
8353 return num_put__Iput(this, ret
, dest
, base
, fill
, buf
, count
, numpunct_short_use_facet(IOS_LOCALE(base
)));
8356 /* ?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 */
8357 /* ?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 */
8358 #if _MSVCP_VER <= 100
8359 #define call_num_put_wchar_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_wchar*, \
8360 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, LONG), \
8361 (this, ret, dest, base, fill, v))
8363 #define call_num_put_wchar_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 36, ostreambuf_iterator_wchar*, \
8364 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, LONG), \
8365 (this, ret, dest, base, fill, v))
8367 #if _MSVCP_VER != 80
8368 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_long
, 28)
8370 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_long
, 32)
8372 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8373 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
8375 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8376 char fmt
[7]; /* strlen("%+#lld")+1 */
8378 TRACE("(%p %p %p %d %ld)\n", this, ret
, base
, fill
, v
);
8380 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
8381 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
8384 /* ?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 */
8385 /* ?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 */
8386 #if _MSVCP_VER != 80
8387 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_long
, 28)
8389 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_long
, 32)
8391 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8392 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
8394 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8395 char fmt
[7]; /* strlen("%+#lld")+1 */
8397 TRACE("(%p %p %p %d %ld)\n", this, ret
, base
, fill
, v
);
8399 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
8400 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
8403 /* ?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 */
8404 /* ?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 */
8405 /* ?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 */
8406 /* ?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 */
8407 #if _MSVCP_VER != 80
8408 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_long
, 28)
8410 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_long
, 32)
8412 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8413 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
8415 TRACE("(%p %p %p %d %ld)\n", this, ret
, base
, fill
, v
);
8416 return call_num_put_wchar_do_put_long(this, ret
, dest
, base
, fill
, v
);
8419 /* ?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 */
8420 /* ?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 */
8421 #if _MSVCP_VER <= 100
8422 #define call_num_put_wchar_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_wchar*, \
8423 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, ULONG), \
8424 (this, ret, dest, base, fill, v))
8426 #define call_num_put_wchar_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_wchar*, \
8427 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, ULONG), \
8428 (this, ret, dest, base, fill, v))
8430 #if _MSVCP_VER != 80
8431 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ulong
, 28)
8433 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ulong
, 32)
8435 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8436 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
8438 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8439 char fmt
[7]; /* strlen("%+#lld")+1 */
8441 TRACE("(%p %p %p %d %ld)\n", this, ret
, base
, fill
, v
);
8443 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
8444 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
8447 /* ?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 */
8448 /* ?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 */
8449 #if _MSVCP_VER != 80
8450 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ulong
, 28)
8452 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ulong
, 32)
8454 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8455 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
8457 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8458 char fmt
[7]; /* strlen("%+#lld")+1 */
8460 TRACE("(%p %p %p %d %ld)\n", this, ret
, base
, fill
, v
);
8462 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
8463 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
8466 /* ?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 */
8467 /* ?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 */
8468 /* ?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 */
8469 /* ?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 */
8470 #if _MSVCP_VER != 80
8471 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ulong
, 28)
8473 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ulong
, 32)
8475 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8476 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
8478 TRACE("(%p %p %p %d %ld)\n", this, ret
, base
, fill
, v
);
8479 return call_num_put_wchar_do_put_ulong(this, ret
, dest
, base
, fill
, v
);
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@_WN@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@_WN@Z */
8484 /* ?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 */
8485 /* ?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 */
8486 #if _MSVCP_VER <= 100
8487 #define call_num_put_wchar_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_wchar*, \
8488 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
8489 (this, ret, dest, base, fill, v))
8490 #define call_num_put_wchar_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 8, ostreambuf_iterator_wchar*, \
8491 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
8492 (this, ret, dest, base, fill, v))
8494 #define call_num_put_wchar_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_wchar*, \
8495 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
8496 (this, ret, dest, base, fill, v))
8497 #define call_num_put_wchar_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_wchar*, \
8498 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
8499 (this, ret, dest, base, fill, v))
8501 #if _MSVCP_VER != 80
8502 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_double
, 32)
8504 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_double
, 36)
8506 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8507 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
8510 char fmt
[8]; /* strlen("%+#.*lg")+1 */
8514 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
8516 num_put_wchar__Ffmt(this, fmt
, '\0', base
->fmtfl
);
8517 prec
= get_precision(base
);
8518 size
= _scprintf(fmt
, prec
, v
);
8520 /* TODO: don't use dynamic allocation */
8521 tmp
= operator_new(size
*2);
8522 num_put__fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, prec
, v
),
8523 numpunct_wchar_use_facet(IOS_LOCALE(base
)));
8524 operator_delete(tmp
);
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@GN@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@GN@Z */
8530 /* ?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 */
8531 /* ?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 */
8532 #if _MSVCP_VER != 80
8533 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_double
, 32)
8535 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_double
, 36)
8537 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8538 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
8541 char fmt
[8]; /* strlen("%+#.*lg")+1 */
8545 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
8547 num_put_wchar__Ffmt(this, fmt
, '\0', base
->fmtfl
);
8548 prec
= get_precision(base
);
8549 size
= _scprintf(fmt
, prec
, v
);
8551 /* TODO: don't use dynamic allocation */
8552 tmp
= operator_new(size
*2);
8553 num_put__fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, prec
, v
),
8554 numpunct_short_use_facet(IOS_LOCALE(base
)));
8555 operator_delete(tmp
);
8559 /* ?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 */
8560 /* ?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 */
8561 /* ?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 */
8562 /* ?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 */
8563 #if _MSVCP_VER != 80
8564 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_double
, 32)
8566 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_double
, 36)
8568 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8569 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
8571 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
8572 return call_num_put_wchar_do_put_double(this, ret
, dest
, base
, fill
, v
);
8575 /* ?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 */
8576 /* ?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 */
8577 /* ?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 */
8578 /* ?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 */
8579 #if _MSVCP_VER != 80
8580 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ldouble
, 32)
8582 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ldouble
, 36)
8584 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ldouble(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8585 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
8587 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
8588 return call_num_put_wchar_do_put_ldouble(this, ret
, dest
, base
, fill
, v
);
8591 /* ?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 */
8592 /* ?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 */
8593 #if _MSVCP_VER <= 100
8594 #define call_num_put_wchar_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_wchar*, \
8595 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const void*), \
8596 (this, ret, dest, base, fill, v))
8598 #define call_num_put_wchar_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_wchar*, \
8599 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const void*), \
8600 (this, ret, dest, base, fill, v))
8602 #if _MSVCP_VER != 80
8603 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ptr
, 28)
8605 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ptr
, 32)
8607 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8608 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
8610 char tmp
[17]; /* 8(16^8==2^64)*2(separators between every digit) + 1 */
8612 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
8614 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
8617 /* ?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 */
8618 /* ?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 */
8619 #if _MSVCP_VER != 80
8620 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ptr
, 28)
8622 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ptr
, 32)
8624 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8625 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
8627 char tmp
[17]; /* 8(16^8==2^64)*2(separators between every digit) + 1 */
8629 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
8631 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
8634 /* ?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 */
8635 /* ?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 */
8636 /* ?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 */
8637 /* ?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 */
8638 #if _MSVCP_VER != 80
8639 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ptr
, 28)
8641 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ptr
, 32)
8643 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8644 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
8646 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
8647 return call_num_put_wchar_do_put_ptr(this, ret
, dest
, base
, fill
, v
);
8650 /* ?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 */
8651 /* ?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 */
8652 #if _MSVCP_VER <= 100
8653 #define call_num_put_wchar_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_wchar*, \
8654 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, __int64), \
8655 (this, ret, dest, base, fill, v))
8657 #define call_num_put_wchar_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_wchar*, \
8658 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, __int64), \
8659 (this, ret, dest, base, fill, v))
8661 #if _MSVCP_VER != 80
8662 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_int64
, 32)
8664 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_int64
, 36)
8666 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8667 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
8669 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8670 char fmt
[7]; /* strlen("%+#lld")+1 */
8672 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8674 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
8675 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
8678 /* ?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 */
8679 /* ?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 */
8680 #if _MSVCP_VER != 80
8681 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_int64
, 32)
8683 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_int64
, 36)
8685 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8686 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
8688 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8689 char fmt
[7]; /* strlen("%+#lld")+1 */
8691 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8693 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
8694 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
8697 /* ?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 */
8698 /* ?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 */
8699 /* ?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 */
8700 /* ?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 */
8701 #if _MSVCP_VER != 80
8702 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_int64
, 32)
8704 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_int64
, 36)
8706 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8707 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
8709 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8710 return call_num_put_wchar_do_put_int64(this, ret
, dest
, base
, fill
, v
);
8713 /* ?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 */
8714 /* ?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 */
8715 #if _MSVCP_VER <= 100
8716 #define call_num_put_wchar_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_wchar*, \
8717 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, unsigned __int64), \
8718 (this, ret, dest, base, fill, v))
8720 #define call_num_put_wchar_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_wchar*, \
8721 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, unsigned __int64), \
8722 (this, ret, dest, base, fill, v))
8724 #if _MSVCP_VER != 80
8725 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_uint64
, 32)
8727 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_uint64
, 36)
8729 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8730 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
8732 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8733 char fmt
[7]; /* strlen("%+#lld")+1 */
8735 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8737 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
8738 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
8741 /* ?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 */
8742 /* ?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 */
8743 #if _MSVCP_VER != 80
8744 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_uint64
, 32)
8746 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_uint64
, 36)
8748 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8749 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
8751 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8752 char fmt
[7]; /* strlen("%+#lld")+1 */
8754 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8756 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
8757 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
8760 /* ?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 */
8761 /* ?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 */
8762 /* ?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 */
8763 /* ?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 */
8764 #if _MSVCP_VER != 80
8765 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_uint64
, 32)
8767 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_uint64
, 36)
8769 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8770 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
8772 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8773 return call_num_put_wchar_do_put_uint64(this, ret
, dest
, base
, fill
, v
);
8776 /* ?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 */
8777 /* ?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 */
8778 #if _MSVCP_VER <= 100
8779 #define call_num_put_wchar_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_wchar*, \
8780 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, bool), \
8781 (this, ret, dest, base, fill, v))
8783 #define call_num_put_wchar_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 40, ostreambuf_iterator_wchar*, \
8784 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, bool), \
8785 (this, ret, dest, base, fill, v))
8787 #if _MSVCP_VER != 80
8788 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_bool
, 28)
8790 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_bool
, 32)
8792 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8793 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, bool v
)
8795 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8797 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
8798 numpunct_wchar
*numpunct
= numpunct_wchar_use_facet(IOS_LOCALE(base
));
8799 basic_string_wchar str
;
8803 numpunct_wchar_truename(numpunct
, &str
);
8805 numpunct_wchar_falsename(numpunct
, &str
);
8807 len
= MSVCP_basic_string_wchar_length(&str
);
8808 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
8811 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
8812 num_put_wchar__Rep(this, &dest
, dest
, fill
, pad
);
8815 num_put_wchar__Put(this, &dest
, dest
, MSVCP_basic_string_wchar_c_str(&str
), len
);
8816 MSVCP_basic_string_wchar_dtor(&str
);
8817 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8820 return num_put_wchar_put_long(this, ret
, dest
, base
, fill
, v
);
8823 /* ?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 */
8824 /* ?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 */
8825 #if _MSVCP_VER != 80
8826 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_bool
, 28)
8828 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_bool
, 32)
8830 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8831 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, bool v
)
8833 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8835 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
8836 numpunct_wchar
*numpunct
= numpunct_short_use_facet(IOS_LOCALE(base
));
8837 basic_string_wchar str
;
8841 numpunct_wchar_truename(numpunct
, &str
);
8843 numpunct_wchar_falsename(numpunct
, &str
);
8845 len
= MSVCP_basic_string_wchar_length(&str
);
8846 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
8849 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
8850 num_put_wchar__Rep(this, &dest
, dest
, fill
, pad
);
8853 num_put_wchar__Put(this, &dest
, dest
, MSVCP_basic_string_wchar_c_str(&str
), len
);
8854 MSVCP_basic_string_wchar_dtor(&str
);
8855 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8858 return num_put_wchar_put_long(this, ret
, dest
, base
, fill
, v
);
8861 /* ?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 */
8862 /* ?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 */
8863 /* ?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 */
8864 /* ?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 */
8865 #if _MSVCP_VER != 80
8866 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_bool
, 28)
8868 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_bool
, 32)
8870 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8871 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, bool v
)
8873 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8874 return call_num_put_wchar_do_put_bool(this, ret
, dest
, base
, fill
, v
);
8877 /* ?id@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
8878 locale_id time_put_char_id
= {0};
8880 /* ??_7?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
8881 extern const vtable_ptr time_put_char_vtable
;
8883 /* ?_Init@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
8884 /* ?_Init@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
8885 DEFINE_THISCALL_WRAPPER(time_put_char__Init
, 8)
8886 void __thiscall
time_put_char__Init(time_put
*this, const _Locinfo
*locinfo
)
8888 TRACE("(%p %p)\n", this, locinfo
);
8889 _Locinfo__Gettnames(locinfo
, &this->time
);
8890 #if _MSVCP_VER <= 100
8891 _Locinfo__Getcvt(locinfo
, &this->cvt
);
8895 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
8896 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
8897 DEFINE_THISCALL_WRAPPER(time_put_char_ctor_locinfo
, 12)
8898 time_put
* __thiscall
time_put_char_ctor_locinfo(time_put
*this, const _Locinfo
*locinfo
, size_t refs
)
8900 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
8901 locale_facet_ctor_refs(&this->facet
, refs
);
8902 this->facet
.vtable
= &time_put_char_vtable
;
8903 time_put_char__Init(this, locinfo
);
8907 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
8908 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
8909 DEFINE_THISCALL_WRAPPER(time_put_char_ctor_refs
, 8)
8910 time_put
* __thiscall
time_put_char_ctor_refs(time_put
*this, size_t refs
)
8914 TRACE("(%p %Iu)\n", this, refs
);
8916 _Locinfo_ctor(&locinfo
);
8917 time_put_char_ctor_locinfo(this, &locinfo
, refs
);
8918 _Locinfo_dtor(&locinfo
);
8922 /* ??_F?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
8923 /* ??_F?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
8924 DEFINE_THISCALL_WRAPPER(time_put_char_ctor
, 4)
8925 time_put
* __thiscall
time_put_char_ctor(time_put
*this)
8927 return time_put_char_ctor_refs(this, 0);
8930 /* ??1?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
8931 /* ??1?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
8932 DEFINE_THISCALL_WRAPPER(time_put_char_dtor
, 4)
8933 void __thiscall
time_put_char_dtor(time_put
*this)
8935 TRACE("(%p)\n", this);
8936 _Timevec_dtor(&this->time
);
8939 DEFINE_THISCALL_WRAPPER(time_put_char_vector_dtor
, 8)
8940 time_put
* __thiscall
time_put_char_vector_dtor(time_put
*this, unsigned int flags
)
8942 TRACE("(%p %x)\n", this, flags
);
8944 /* we have an array, with the number of elements stored before the first object */
8945 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
8947 for(i
=*ptr
-1; i
>=0; i
--)
8948 time_put_char_dtor(this+i
);
8949 operator_delete(ptr
);
8951 time_put_char_dtor(this);
8953 operator_delete(this);
8959 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
8960 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
8961 size_t __cdecl
time_put_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
8963 TRACE("(%p %p)\n", facet
, loc
);
8965 if(facet
&& !*facet
) {
8968 *facet
= operator_new(sizeof(time_put
));
8969 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
8970 time_put_char_ctor_locinfo((time_put
*)*facet
, &locinfo
, 0);
8971 _Locinfo_dtor(&locinfo
);
8977 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
8978 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
8979 size_t __cdecl
time_put_char__Getcat_old(const locale_facet
**facet
)
8981 return time_put_char__Getcat(facet
, locale_classic());
8984 static time_put
* time_put_char_use_facet(const locale
*loc
)
8986 static time_put
*obj
= NULL
;
8989 const locale_facet
*fac
;
8991 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
8992 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_put_char_id
));
8994 _Lockit_dtor(&lock
);
8995 return (time_put
*)fac
;
8999 _Lockit_dtor(&lock
);
9003 time_put_char__Getcat(&fac
, loc
);
9004 obj
= (time_put
*)fac
;
9005 call_locale_facet__Incref(&obj
->facet
);
9006 locale_facet_register(&obj
->facet
);
9007 _Lockit_dtor(&lock
);
9012 #if _MSVCP_VER >= 70
9014 /* ?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 */
9015 /* ?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 */
9016 #if _MSVCP_VER != 80
9017 DEFINE_THISCALL_WRAPPER(time_put_char_do_put
, 36)
9019 DEFINE_THISCALL_WRAPPER(time_put_char_do_put
, 40)
9021 #if _MSVCP_VER <= 100
9022 #define call_time_put_char_do_put(this, ret, dest, base, fill, t, spec, mod) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_char*, \
9023 (const time_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const struct tm*, char, char), \
9024 (this, ret, dest, base, fill, t, spec, mod))
9026 #define call_time_put_char_do_put(this, ret, dest, base, fill, t, spec, mod) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_char*, \
9027 (const time_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const struct tm*, char, char), \
9028 (this, ret, dest, base, fill, t, spec, mod))
9030 ostreambuf_iterator_char
* __thiscall
time_put_char_do_put(const time_put
*this, ostreambuf_iterator_char
*ret
,
9031 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const struct tm
*t
, char spec
, char mod
)
9033 char buf
[64], fmt
[4], *p
= fmt
;
9036 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
9044 len
= _Strftime(buf
, sizeof(buf
), fmt
, t
, this->time
.timeptr
);
9045 for(i
=0; i
<len
; i
++)
9046 ostreambuf_iterator_char_put(&dest
, buf
[i
]);
9052 /* ?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 */
9053 /* ?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 */
9054 #if _MSVCP_VER != 80
9055 DEFINE_THISCALL_WRAPPER(time_put_char_put
, 36)
9057 DEFINE_THISCALL_WRAPPER(time_put_char_put
, 40)
9059 ostreambuf_iterator_char
* __thiscall
time_put_char_put(const time_put
*this, ostreambuf_iterator_char
*ret
,
9060 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const struct tm
*t
, char spec
, char mod
)
9062 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
9063 return call_time_put_char_do_put(this, ret
, dest
, base
, fill
, t
, spec
, mod
);
9066 /* ?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 */
9067 /* ?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 */
9068 #if _MSVCP_VER != 80
9069 DEFINE_THISCALL_WRAPPER(time_put_char_put_format
, 36)
9071 DEFINE_THISCALL_WRAPPER(time_put_char_put_format
, 40)
9073 ostreambuf_iterator_char
* __thiscall
time_put_char_put_format(const time_put
*this, ostreambuf_iterator_char
*ret
,
9074 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const struct tm
*t
, const char *pat
, const char *pat_end
)
9076 TRACE("(%p %p %p %c %p %s)\n", this, ret
, base
, fill
, t
, debugstr_an(pat
, pat_end
-pat
));
9078 while(pat
< pat_end
) {
9080 ostreambuf_iterator_char_put(&dest
, *pat
++);
9081 }else if(++pat
== pat_end
) {
9082 ostreambuf_iterator_char_put(&dest
, '%');
9083 }else if(*pat
=='#' && pat
+1==pat_end
) {
9084 ostreambuf_iterator_char_put(&dest
, '%');
9085 ostreambuf_iterator_char_put(&dest
, *pat
++);
9096 time_put_char_put(this, &dest
, dest
, base
, fill
, t
, *pat
++, mod
);
9104 #else /* _MSVCP_VER < 70 doesn't have the 'fill' parameter */
9106 /* ?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 */
9107 /* ?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 */
9108 DEFINE_THISCALL_WRAPPER(time_put_char_do_put
, 32)
9109 #define call_time_put_char_do_put(this, ret, dest, base, t, spec, mod) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_char*, \
9110 (const time_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, const struct tm*, char, char), \
9111 (this, ret, dest, base, t, spec, mod))
9112 ostreambuf_iterator_char
* __thiscall
time_put_char_do_put(const time_put
*this, ostreambuf_iterator_char
*ret
,
9113 ostreambuf_iterator_char dest
, ios_base
*base
, const struct tm
*t
, char spec
, char mod
)
9115 char buf
[64], fmt
[4], *p
= fmt
;
9118 TRACE("(%p %p %p %p %c %c)\n", this, ret
, base
, t
, spec
, mod
);
9126 len
= _Strftime(buf
, sizeof(buf
), fmt
, t
, this->time
.timeptr
);
9127 for(i
=0; i
<len
; i
++)
9128 ostreambuf_iterator_char_put(&dest
, buf
[i
]);
9134 /* ?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 */
9135 /* ?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 */
9136 DEFINE_THISCALL_WRAPPER(time_put_char_put
, 32)
9137 ostreambuf_iterator_char
* __thiscall
time_put_char_put(const time_put
*this, ostreambuf_iterator_char
*ret
,
9138 ostreambuf_iterator_char dest
, ios_base
*base
, const struct tm
*t
, char spec
, char mod
)
9140 TRACE("(%p %p %p %p %c %c)\n", this, ret
, base
, t
, spec
, mod
);
9141 return call_time_put_char_do_put(this, ret
, dest
, base
, t
, spec
, mod
);
9144 /* ?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 */
9145 /* ?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 */
9146 DEFINE_THISCALL_WRAPPER(time_put_char_put_format
, 32)
9147 ostreambuf_iterator_char
* __thiscall
time_put_char_put_format(const time_put
*this, ostreambuf_iterator_char
*ret
,
9148 ostreambuf_iterator_char dest
, ios_base
*base
, const struct tm
*t
, const char *pat
, const char *pat_end
)
9150 TRACE("(%p %p %p %p %s)\n", this, ret
, base
, t
, debugstr_an(pat
, pat_end
-pat
));
9152 while(pat
< pat_end
) {
9154 ostreambuf_iterator_char_put(&dest
, *pat
++);
9155 }else if(++pat
== pat_end
) {
9156 ostreambuf_iterator_char_put(&dest
, '%');
9157 }else if(*pat
=='#' && pat
+1==pat_end
) {
9158 ostreambuf_iterator_char_put(&dest
, '%');
9159 ostreambuf_iterator_char_put(&dest
, *pat
++);
9170 time_put_char_put(this, &dest
, dest
, base
, t
, *pat
++, mod
);
9178 #endif /* MSVCP_VER >= 70 */
9180 /* ?id@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
9181 locale_id time_put_wchar_id
= {0};
9182 /* ?id@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
9183 locale_id time_put_short_id
= {0};
9185 /* ??_7?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
9186 extern const vtable_ptr time_put_wchar_vtable
;
9187 /* ??_7?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
9188 extern const vtable_ptr time_put_short_vtable
;
9190 /* ?_Init@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
9191 /* ?_Init@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
9192 /* ?_Init@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
9193 /* ?_Init@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
9194 DEFINE_THISCALL_WRAPPER(time_put_wchar__Init
, 8)
9195 void __thiscall
time_put_wchar__Init(time_put
*this, const _Locinfo
*locinfo
)
9197 TRACE("(%p %p)\n", this, locinfo
);
9198 _Locinfo__Gettnames(locinfo
, &this->time
);
9199 #if _MSVCP_VER <= 100
9200 _Locinfo__Getcvt(locinfo
, &this->cvt
);
9204 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
9205 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
9206 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor_locinfo
, 12)
9207 time_put
* __thiscall
time_put_wchar_ctor_locinfo(time_put
*this, const _Locinfo
*locinfo
, size_t refs
)
9209 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
9210 locale_facet_ctor_refs(&this->facet
, refs
);
9211 this->facet
.vtable
= &time_put_wchar_vtable
;
9212 time_put_wchar__Init(this, locinfo
);
9216 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
9217 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
9218 DEFINE_THISCALL_WRAPPER(time_put_short_ctor_locinfo
, 12)
9219 time_put
* __thiscall
time_put_short_ctor_locinfo(time_put
*this, const _Locinfo
*locinfo
, size_t refs
)
9221 time_put_wchar_ctor_locinfo(this, locinfo
, refs
);
9222 this->facet
.vtable
= &time_put_short_vtable
;
9226 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAE@PBDI@Z */
9227 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAA@PEBD_K@Z */
9228 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor_name
, 12)
9229 time_put
* __thiscall
time_put_wchar_ctor_name(time_put
*this, const char *name
, size_t refs
)
9233 TRACE("(%p %s %Iu)\n", this, debugstr_a(name
), refs
);
9235 _Locinfo_ctor_cstr(&locinfo
, name
);
9236 time_put_wchar_ctor_locinfo(this, &locinfo
, refs
);
9237 _Locinfo_dtor(&locinfo
);
9241 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAE@PBDI@Z */
9242 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAA@PEBD_K@Z */
9243 DEFINE_THISCALL_WRAPPER(time_put_short_ctor_name
, 12)
9244 time_put
* __thiscall
time_put_short_ctor_name(time_put
*this, const char *name
, size_t refs
)
9246 time_put_wchar_ctor_name(this, name
, refs
);
9247 this->facet
.vtable
= &time_put_short_vtable
;
9251 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
9252 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
9253 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor_refs
, 8)
9254 time_put
* __thiscall
time_put_wchar_ctor_refs(time_put
*this, size_t refs
)
9258 TRACE("(%p %Iu)\n", this, refs
);
9260 _Locinfo_ctor(&locinfo
);
9261 time_put_wchar_ctor_locinfo(this, &locinfo
, refs
);
9262 _Locinfo_dtor(&locinfo
);
9266 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
9267 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
9268 DEFINE_THISCALL_WRAPPER(time_put_short_ctor_refs
, 8)
9269 time_put
* __thiscall
time_put_short_ctor_refs(time_put
*this, size_t refs
)
9271 time_put_wchar_ctor_refs(this, refs
);
9272 this->facet
.vtable
= &time_put_short_vtable
;
9276 /* ??_F?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
9277 /* ??_F?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
9278 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor
, 4)
9279 time_put
* __thiscall
time_put_wchar_ctor(time_put
*this)
9281 return time_put_wchar_ctor_refs(this, 0);
9284 /* ??_F?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ */
9285 /* ??_F?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ */
9286 DEFINE_THISCALL_WRAPPER(time_put_short_ctor
, 4)
9287 time_put
* __thiscall
time_put_short_ctor(time_put
*this)
9289 time_put_wchar_ctor(this);
9290 this->facet
.vtable
= &time_put_short_vtable
;
9294 /* ??1?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
9295 /* ??1?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
9296 /* ??1?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
9297 /* ??1?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
9298 DEFINE_THISCALL_WRAPPER(time_put_wchar_dtor
, 4)
9299 void __thiscall
time_put_wchar_dtor(time_put
*this)
9301 TRACE("(%p)\n", this);
9302 _Timevec_dtor(&this->time
);
9305 DEFINE_THISCALL_WRAPPER(time_put_wchar_vector_dtor
, 8)
9306 time_put
* __thiscall
time_put_wchar_vector_dtor(time_put
*this, unsigned int flags
)
9308 TRACE("(%p %x)\n", this, flags
);
9310 /* we have an array, with the number of elements stored before the first object */
9311 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
9313 for(i
=*ptr
-1; i
>=0; i
--)
9314 time_put_wchar_dtor(this+i
);
9315 operator_delete(ptr
);
9317 time_put_wchar_dtor(this);
9319 operator_delete(this);
9325 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
9326 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
9327 size_t __cdecl
time_put_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
9329 TRACE("(%p %p)\n", facet
, loc
);
9331 if(facet
&& !*facet
) {
9332 *facet
= operator_new(sizeof(time_put
));
9333 time_put_wchar_ctor_name((time_put
*)*facet
,
9334 locale_string_char_c_str(&loc
->ptr
->name
), 0);
9340 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
9341 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
9342 size_t __cdecl
time_put_wchar__Getcat_old(const locale_facet
**facet
)
9344 return time_put_wchar__Getcat(facet
, locale_classic());
9347 static time_put
* time_put_wchar_use_facet(const locale
*loc
)
9349 static time_put
*obj
= NULL
;
9352 const locale_facet
*fac
;
9354 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
9355 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_put_wchar_id
));
9357 _Lockit_dtor(&lock
);
9358 return (time_put
*)fac
;
9362 _Lockit_dtor(&lock
);
9366 time_put_wchar__Getcat(&fac
, loc
);
9367 obj
= (time_put
*)fac
;
9368 call_locale_facet__Incref(&obj
->facet
);
9369 locale_facet_register(&obj
->facet
);
9370 _Lockit_dtor(&lock
);
9375 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
9376 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
9377 size_t __cdecl
time_put_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
9379 TRACE("(%p %p)\n", facet
, loc
);
9381 if(facet
&& !*facet
) {
9382 *facet
= operator_new(sizeof(time_put
));
9383 time_put_short_ctor_name((time_put
*)*facet
,
9384 locale_string_char_c_str(&loc
->ptr
->name
), 0);
9390 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
9391 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
9392 size_t __cdecl
time_put_short__Getcat_old(const locale_facet
**facet
)
9394 return time_put_short__Getcat(facet
, locale_classic());
9397 static time_put
* time_put_short_use_facet(const locale
*loc
)
9399 static time_put
*obj
= NULL
;
9402 const locale_facet
*fac
;
9404 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
9405 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_put_short_id
));
9407 _Lockit_dtor(&lock
);
9408 return (time_put
*)fac
;
9412 _Lockit_dtor(&lock
);
9416 time_put_short__Getcat(&fac
, loc
);
9417 obj
= (time_put
*)fac
;
9418 call_locale_facet__Incref(&obj
->facet
);
9419 locale_facet_register(&obj
->facet
);
9420 _Lockit_dtor(&lock
);
9425 #if _MSVCP_VER >= 70
9427 /* ?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 */
9428 /* ?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 */
9429 /* ?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 */
9430 /* ?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 */
9431 #if _MSVCP_VER != 80
9432 DEFINE_THISCALL_WRAPPER(time_put_wchar_do_put
, 36)
9434 DEFINE_THISCALL_WRAPPER(time_put_wchar_do_put
, 40)
9436 #if _MSVCP_VER <= 100
9437 #define call_time_put_wchar_do_put(this, ret, dest, base, fill, t, spec, mod) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_wchar*, \
9438 (const time_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const struct tm*, char, char), \
9439 (this, ret, dest, base, fill, t, spec, mod))
9441 #define call_time_put_wchar_do_put(this, ret, dest, base, fill, t, spec, mod) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_wchar*, \
9442 (const time_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const struct tm*, char, char), \
9443 (this, ret, dest, base, fill, t, spec, mod))
9445 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_do_put(const time_put
*this,
9446 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9447 wchar_t fill
, const struct tm
*t
, char spec
, char mod
)
9449 char buf
[64], fmt
[4], *p
= fmt
;
9454 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
9462 #if _MSVCP_VER <= 100
9465 cvt
= &ctype_wchar_use_facet(base
->loc
)->cvt
;
9468 len
= _Strftime(buf
, sizeof(buf
), fmt
, t
, this->time
.timeptr
);
9469 for(i
=0; i
<len
; i
++) {
9470 c
= mb_to_wc(buf
[i
], cvt
);
9471 ostreambuf_iterator_wchar_put(&dest
, c
);
9478 /* ?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 */
9479 /* ?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 */
9480 /* ?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 */
9481 /* ?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 */
9482 #if _MSVCP_VER != 80
9483 DEFINE_THISCALL_WRAPPER(time_put_wchar_put
, 36)
9485 DEFINE_THISCALL_WRAPPER(time_put_wchar_put
, 40)
9487 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_put(const time_put
*this,
9488 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9489 wchar_t fill
, const struct tm
*t
, char spec
, char mod
)
9491 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
9492 return call_time_put_wchar_do_put(this, ret
, dest
, base
, fill
, t
, spec
, mod
);
9495 /* ?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 */
9496 /* ?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 */
9497 /* ?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 */
9498 /* ?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 */
9499 #if _MSVCP_VER != 80
9500 DEFINE_THISCALL_WRAPPER(time_put_wchar_put_format
, 36)
9502 DEFINE_THISCALL_WRAPPER(time_put_wchar_put_format
, 40)
9504 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_put_format(const time_put
*this,
9505 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9506 wchar_t fill
, const struct tm
*t
, const wchar_t *pat
, const wchar_t *pat_end
)
9512 TRACE("(%p %p %p %c %p %s)\n", this, ret
, base
, fill
, t
, debugstr_wn(pat
, pat_end
-pat
));
9514 #if _MSVCP_VER <= 100
9517 cvt
= &ctype_wchar_use_facet(base
->loc
)->cvt
;
9520 percent
= mb_to_wc('%', cvt
);
9521 while(pat
< pat_end
) {
9522 if(*pat
!= percent
) {
9523 ostreambuf_iterator_wchar_put(&dest
, *pat
++);
9524 }else if(++pat
== pat_end
) {
9525 ostreambuf_iterator_wchar_put(&dest
, percent
);
9526 }else if(_Wcrtomb(c
, *pat
, NULL
, cvt
)!=1 || (*c
=='#' && pat
+1==pat_end
)) {
9527 ostreambuf_iterator_wchar_put(&dest
, percent
);
9528 ostreambuf_iterator_wchar_put(&dest
, *pat
++);
9532 if(_Wcrtomb(c
, *pat
++, NULL
, cvt
) != 1) {
9533 ostreambuf_iterator_wchar_put(&dest
, percent
);
9534 ostreambuf_iterator_wchar_put(&dest
, *(pat
-2));
9535 ostreambuf_iterator_wchar_put(&dest
, *(pat
-1));
9537 time_put_wchar_put(this, &dest
, dest
, base
, fill
, t
, *c
, '#');
9540 time_put_wchar_put(this, &dest
, dest
, base
, fill
, t
, *c
, 0);
9549 #else /* _MSVCP_VER < 70 doesn't have the 'fill' parameter */
9551 /* ?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 */
9552 /* ?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 */
9553 DEFINE_THISCALL_WRAPPER(time_put_wchar_do_put
, 32)
9554 #define call_time_put_wchar_do_put(this, ret, dest, base, t, spec, mod) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_wchar*, \
9555 (const time_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, const struct tm*, char, char), \
9556 (this, ret, dest, base, t, spec, mod))
9557 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_do_put(const time_put
*this,
9558 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9559 const struct tm
*t
, char spec
, char mod
)
9561 char buf
[64], fmt
[4], *p
= fmt
;
9565 TRACE("(%p %p %p %p %c %c)\n", this, ret
, base
, t
, spec
, mod
);
9573 len
= _Strftime(buf
, sizeof(buf
), fmt
, t
, this->time
.timeptr
);
9574 for(i
=0; i
<len
; i
++) {
9575 c
= mb_to_wc(buf
[i
], &this->cvt
);
9576 ostreambuf_iterator_wchar_put(&dest
, c
);
9583 /* ?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 */
9584 /* ?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 */
9585 DEFINE_THISCALL_WRAPPER(time_put_wchar_put
, 32)
9586 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_put(const time_put
*this,
9587 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9588 const struct tm
*t
, char spec
, char mod
)
9590 TRACE("(%p %p %p %p %c %c)\n", this, ret
, base
, t
, spec
, mod
);
9591 return call_time_put_wchar_do_put(this, ret
, dest
, base
, t
, spec
, mod
);
9594 /* ?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 */
9595 /* ?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 */
9596 DEFINE_THISCALL_WRAPPER(time_put_wchar_put_format
, 32)
9597 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_put_format(const time_put
*this,
9598 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9599 const struct tm
*t
, const wchar_t *pat
, const wchar_t *pat_end
)
9601 wchar_t percent
= mb_to_wc('%', &this->cvt
);
9604 TRACE("(%p %p %p %p %s)\n", this, ret
, base
, t
, debugstr_wn(pat
, pat_end
-pat
));
9606 while(pat
< pat_end
) {
9607 if(*pat
!= percent
) {
9608 ostreambuf_iterator_wchar_put(&dest
, *pat
++);
9609 }else if(++pat
== pat_end
) {
9610 ostreambuf_iterator_wchar_put(&dest
, percent
);
9611 }else if(_Wcrtomb(c
, *pat
, NULL
, &this->cvt
)!=1 || (*c
=='#' && pat
+1==pat_end
)) {
9612 ostreambuf_iterator_wchar_put(&dest
, percent
);
9613 ostreambuf_iterator_wchar_put(&dest
, *pat
++);
9617 if(_Wcrtomb(c
, *pat
++, NULL
, &this->cvt
) != 1) {
9618 ostreambuf_iterator_wchar_put(&dest
, percent
);
9619 ostreambuf_iterator_wchar_put(&dest
, *(pat
-2));
9620 ostreambuf_iterator_wchar_put(&dest
, *(pat
-1));
9622 time_put_wchar_put(this, &dest
, dest
, base
, t
, *c
, '#');
9625 time_put_wchar_put(this, &dest
, dest
, base
, t
, *c
, 0);
9634 #endif /* _MSVCP_VER >= 70 */
9636 /* ?id@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
9637 locale_id time_get_char_id
= {0};
9639 /* ??_7?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
9640 extern const vtable_ptr time_get_char_vtable
;
9642 /* ?_Init@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
9643 /* ?_Init@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
9644 DEFINE_THISCALL_WRAPPER(time_get_char__Init
, 8)
9645 void __thiscall
time_get_char__Init(time_get_char
*this, const _Locinfo
*locinfo
)
9651 TRACE("(%p %p)\n", this, locinfo
);
9653 days
= _Locinfo__Getdays(locinfo
);
9654 len
= strlen(days
)+1;
9655 this->days
= operator_new(len
);
9656 memcpy((char*)this->days
, days
, len
);
9658 months
= _Locinfo__Getmonths(locinfo
);
9659 len
= strlen(months
)+1;
9660 this->months
= operator_new(len
);
9661 memcpy((char*)this->months
, months
, len
);
9663 this->dateorder
= _Locinfo__Getdateorder(locinfo
);
9664 _Locinfo__Getcvt(locinfo
, &this->cvt
);
9667 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
9668 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
9669 DEFINE_THISCALL_WRAPPER(time_get_char_ctor_locinfo
, 12)
9670 time_get_char
* __thiscall
time_get_char_ctor_locinfo(time_get_char
*this,
9671 const _Locinfo
*locinfo
, size_t refs
)
9673 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
9674 locale_facet_ctor_refs(&this->facet
, refs
);
9675 this->facet
.vtable
= &time_get_char_vtable
;
9676 time_get_char__Init(this, locinfo
);
9680 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAE@PBDI@Z */
9681 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAA@PEBD_K@Z */
9682 DEFINE_THISCALL_WRAPPER(time_get_char_ctor_name
, 12)
9683 time_get_char
* __thiscall
time_get_char_ctor_name(time_get_char
*this, const char *name
, size_t refs
)
9687 TRACE("(%p %s %Iu)\n", this, name
, refs
);
9689 _Locinfo_ctor_cstr(&locinfo
, name
);
9690 time_get_char_ctor_locinfo(this, &locinfo
, refs
);
9691 _Locinfo_dtor(&locinfo
);
9695 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
9696 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
9697 DEFINE_THISCALL_WRAPPER(time_get_char_ctor_refs
, 8)
9698 time_get_char
* __thiscall
time_get_char_ctor_refs(time_get_char
*this, size_t refs
)
9702 TRACE("(%p %Iu)\n", this, refs
);
9704 _Locinfo_ctor(&locinfo
);
9705 time_get_char_ctor_locinfo(this, &locinfo
, refs
);
9706 _Locinfo_dtor(&locinfo
);
9710 /* ??_F?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
9711 /* ??_F?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
9712 DEFINE_THISCALL_WRAPPER(time_get_char_ctor
, 4)
9713 time_get_char
* __thiscall
time_get_char_ctor(time_get_char
*this)
9715 return time_get_char_ctor_refs(this, 0);
9718 /* ?_Tidy@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AAEXXZ */
9719 /* ?_Tidy@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEAAXXZ */
9720 DEFINE_THISCALL_WRAPPER(time_get_char__Tidy
, 4)
9721 void __thiscall
time_get_char__Tidy(time_get_char
*this)
9723 TRACE("(%p)\n", this);
9725 operator_delete((char*)this->days
);
9726 operator_delete((char*)this->months
);
9729 /* ??1?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
9730 /* ??1?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
9731 DEFINE_THISCALL_WRAPPER(time_get_char_dtor
, 4) /* virtual */
9732 void __thiscall
time_get_char_dtor(time_get_char
*this)
9734 TRACE("(%p)\n", this);
9736 time_get_char__Tidy(this);
9739 DEFINE_THISCALL_WRAPPER(time_get_char_vector_dtor
, 8)
9740 time_get_char
* __thiscall
time_get_char_vector_dtor(time_get_char
*this, unsigned int flags
)
9742 TRACE("(%p %x)\n", this, flags
);
9744 /* we have an array, with the number of elements stored before the first object */
9745 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
9747 for(i
=*ptr
-1; i
>=0; i
--)
9748 time_get_char_dtor(this+i
);
9749 operator_delete(ptr
);
9751 time_get_char_dtor(this);
9753 operator_delete(this);
9759 /* ?_Getcat@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
9760 /* ?_Getcat@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
9761 unsigned int __cdecl
time_get_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
9763 TRACE("(%p %p)\n", facet
, loc
);
9765 if(facet
&& !*facet
) {
9768 *facet
= operator_new(sizeof(time_get_char
));
9769 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
9770 time_get_char_ctor_locinfo((time_get_char
*)*facet
, &locinfo
, 0);
9771 _Locinfo_dtor(&locinfo
);
9777 static time_get_char
* time_get_char_use_facet(const locale
*loc
)
9779 static time_get_char
*obj
= NULL
;
9782 const locale_facet
*fac
;
9784 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
9785 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_get_char_id
));
9787 _Lockit_dtor(&lock
);
9788 return (time_get_char
*)fac
;
9792 _Lockit_dtor(&lock
);
9796 time_get_char__Getcat(&fac
, loc
);
9797 obj
= (time_get_char
*)fac
;
9798 call_locale_facet__Incref(&obj
->facet
);
9799 locale_facet_register(&obj
->facet
);
9800 _Lockit_dtor(&lock
);
9805 /* ?_Getint@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@0HHAAH@Z */
9806 /* ?_Getint@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@0HHAEAH@Z */
9807 int __cdecl
time_get_char__Getint(const time_get_char
*this,
9808 istreambuf_iterator_char
*b
, istreambuf_iterator_char
*e
,
9809 int min_val
, int max_val
, int *val
)
9811 BOOL got_digit
= FALSE
;
9812 int len
= 0, ret
= 0;
9815 TRACE("(%p %p %p %d %d %p)\n", this, b
, e
, min_val
, max_val
, val
);
9817 istreambuf_iterator_char_val(b
);
9818 if(b
->strbuf
&& (b
->val
== '-' || b
->val
== '+'))
9820 buf
[len
++] = b
->val
;
9821 istreambuf_iterator_char_inc(b
);
9824 if (b
->strbuf
&& b
->val
== '0')
9828 istreambuf_iterator_char_inc(b
);
9830 while (b
->strbuf
&& b
->val
== '0')
9831 istreambuf_iterator_char_inc(b
);
9833 for (; b
->strbuf
&& b
->val
>= '0' && b
->val
<= '9';
9834 istreambuf_iterator_char_inc(b
))
9836 if(len
< ARRAY_SIZE(buf
)-1)
9843 ret
|= IOSTATE_eofbit
;
9844 if (got_digit
&& len
< ARRAY_SIZE(buf
)-1)
9849 v
= _Stolx(buf
, NULL
, 10, &err
);
9850 if(err
|| v
< min_val
|| v
> max_val
)
9851 ret
|= IOSTATE_failbit
;
9856 ret
|= IOSTATE_failbit
;
9860 /* ?do_date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AW4dateorder@time_base@2@XZ */
9861 /* ?do_date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AW4dateorder@time_base@2@XZ */
9862 DEFINE_THISCALL_WRAPPER(time_get_char_do_date_order
, 4) /* virtual */
9863 #if _MSVCP_VER <= 100
9864 #define call_time_get_char_do_date_order(this) CALL_VTBL_FUNC(this, 4, dateorder, (const time_get_char*), (this))
9866 #define call_time_get_char_do_date_order(this) CALL_VTBL_FUNC(this, 12, dateorder, (const time_get_char*), (this))
9868 dateorder __thiscall
time_get_char_do_date_order(const time_get_char
*this)
9870 TRACE("(%p)\n", this);
9871 return this->dateorder
;
9874 /* ?date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AW4dateorder@time_base@2@XZ */
9875 /* ?date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AW4dateorder@time_base@2@XZ */
9876 DEFINE_THISCALL_WRAPPER(time_get_char_date_order
, 4)
9877 dateorder __thiscall
time_get_char_date_order(const time_get_char
*this)
9879 return call_time_get_char_do_date_order(this);
9882 static int find_longest_match_char(istreambuf_iterator_char
*iter
, const char *str
)
9884 int i
, len
= 0, last_match
= -1, match
= -1;
9885 const char *p
, *end
;
9888 for(istreambuf_iterator_char_val(iter
); iter
->strbuf
&& len
<ARRAY_SIZE(buf
);
9889 istreambuf_iterator_char_inc(iter
))
9891 BOOL got_prefix
= FALSE
;
9893 buf
[len
++] = iter
->val
;
9896 for(p
=str
+1, i
=0; *p
; p
= (*end
? end
+1 : end
), i
++)
9898 end
= strchr(p
, ':');
9900 end
= p
+ strlen(p
);
9902 if (end
-p
>= len
&& !memcmp(p
, buf
, len
))
9915 istreambuf_iterator_char_inc(iter
);
9921 if (len
== ARRAY_SIZE(buf
))
9922 FIXME("temporary buffer is too small\n");
9928 /* ?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 */
9929 /* ?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 */
9930 DEFINE_THISCALL_WRAPPER(time_get_char_do_get_monthname
, 36) /* virtual */
9931 #if _MSVCP_VER <= 100
9932 #define call_time_get_char_do_get_monthname(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_char*, \
9933 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
9934 (this, ret, s, e, base, err, t))
9936 #define call_time_get_char_do_get_monthname(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_char*, \
9937 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
9938 (this, ret, s, e, base, err, t))
9940 istreambuf_iterator_char
* __thiscall
time_get_char_do_get_monthname(const time_get_char
*this,
9941 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
9942 ios_base
*base
, int *err
, struct tm
*t
)
9946 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
9948 if ((match
= find_longest_match_char(&s
, this->months
)) != -1)
9949 t
->tm_mon
= match
/ 2;
9951 *err
|= IOSTATE_failbit
;
9957 /* ?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 */
9958 /* ?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 */
9959 DEFINE_THISCALL_WRAPPER(time_get_char_get_monthname
, 36)
9960 istreambuf_iterator_char
* __thiscall
time_get_char_get_monthname(const time_get_char
*this,
9961 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
9962 ios_base
*base
, int *err
, struct tm
*t
)
9964 return call_time_get_char_do_get_monthname(this, ret
, s
, e
, base
, err
, t
);
9967 /* ?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 */
9968 /* ?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 */
9969 DEFINE_THISCALL_WRAPPER(time_get_char_do_get_time
, 36) /* virtual */
9970 #if _MSVCP_VER <= 100
9971 #define call_time_get_char_do_get_time(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_char*, \
9972 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
9973 (this, ret, s, e, base, err, t))
9975 #define call_time_get_char_do_get_time(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_char*, \
9976 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
9977 (this, ret, s, e, base, err, t))
9979 istreambuf_iterator_char
* __thiscall
time_get_char_do_get_time(const time_get_char
*this,
9980 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
9981 ios_base
*base
, int *err
, struct tm
*t
)
9983 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
9985 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 23, &t
->tm_hour
);
9986 if (*err
|| istreambuf_iterator_char_val(&s
)!=':')
9987 *err
|= IOSTATE_failbit
;
9991 istreambuf_iterator_char_inc(&s
);
9992 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 59, &t
->tm_min
);
9994 if (*err
|| istreambuf_iterator_char_val(&s
)!=':')
9995 *err
|= IOSTATE_failbit
;
9999 istreambuf_iterator_char_inc(&s
);
10000 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 59, &t
->tm_sec
);
10007 /* ?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 */
10008 /* ?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 */
10009 DEFINE_THISCALL_WRAPPER(time_get_char_get_time
, 36)
10010 istreambuf_iterator_char
* __thiscall
time_get_char_get_time(const time_get_char
*this,
10011 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10012 ios_base
*base
, int *err
, struct tm
*t
)
10014 return call_time_get_char_do_get_time(this, ret
, s
, e
, base
, err
, t
);
10017 /* ?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 */
10018 /* ?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 */
10019 DEFINE_THISCALL_WRAPPER(time_get_char_do_get_weekday
, 36) /* virtual */
10020 #if _MSVCP_VER <= 100
10021 #define call_time_get_char_do_get_weekday(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_char*, \
10022 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10023 (this, ret, s, e, base, err, t))
10025 #define call_time_get_char_do_get_weekday(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_char*, \
10026 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10027 (this, ret, s, e, base, err, t))
10029 istreambuf_iterator_char
* __thiscall
time_get_char_do_get_weekday(const time_get_char
*this,
10030 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10031 ios_base
*base
, int *err
, struct tm
*t
)
10035 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10037 if ((match
= find_longest_match_char(&s
, this->days
)) != -1)
10038 t
->tm_wday
= match
/ 2;
10040 *err
|= IOSTATE_failbit
;
10046 /* ?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 */
10047 /* ?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 */
10048 DEFINE_THISCALL_WRAPPER(time_get_char_get_weekday
, 36)
10049 istreambuf_iterator_char
* __thiscall
time_get_char_get_weekday(const time_get_char
*this,
10050 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10051 ios_base
*base
, int *err
, struct tm
*t
)
10053 return call_time_get_char_do_get_weekday(this, ret
, s
, e
, base
, err
, t
);
10056 /* ?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 */
10057 /* ?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 */
10058 DEFINE_THISCALL_WRAPPER(time_get_char_do_get_year
, 36) /* virtual */
10059 #if _MSVCP_VER <= 100
10060 #define call_time_get_char_do_get_year(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_char*, \
10061 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10062 (this, ret, s, e, base, err, t))
10064 #define call_time_get_char_do_get_year(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_char*, \
10065 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10066 (this, ret, s, e, base, err, t))
10068 istreambuf_iterator_char
* __thiscall
time_get_char_do_get_year(const time_get_char
*this,
10069 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10070 ios_base
*base
, int *err
, struct tm
*t
)
10074 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10076 /* The function supports only dates from [1900-2035] range */
10077 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 2035, &year
);
10078 if (!(*err
& IOSTATE_failbit
))
10083 *err
|= IOSTATE_failbit
;
10092 /* ?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 */
10093 /* ?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 */
10094 DEFINE_THISCALL_WRAPPER(time_get_char_get_year
, 36)
10095 istreambuf_iterator_char
* __thiscall
time_get_char_get_year(const time_get_char
*this,
10096 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10097 ios_base
*base
, int *err
, struct tm
*t
)
10099 return call_time_get_char_do_get_year(this, ret
, s
, e
, base
, err
, t
);
10102 static void skip_ws_char(ctype_char
*ctype
, istreambuf_iterator_char
*iter
)
10104 istreambuf_iterator_char_val(iter
);
10105 while(iter
->strbuf
&& ctype_char_is_ch(ctype
, _SPACE
, iter
->val
))
10106 istreambuf_iterator_char_inc(iter
);
10109 static void skip_date_delim_char(ctype_char
*ctype
, istreambuf_iterator_char
*iter
)
10111 skip_ws_char(ctype
, iter
);
10112 if(iter
->strbuf
&& (iter
->val
== '/' || iter
->val
== ':'))
10113 istreambuf_iterator_char_inc(iter
);
10114 skip_ws_char(ctype
, iter
);
10117 /* ?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 */
10118 /* ?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 */
10119 DEFINE_THISCALL_WRAPPER(time_get_char_do_get_date
, 36) /* virtual */
10120 #if _MSVCP_VER <= 100
10121 #define call_time_get_char_do_get_date(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_char*, \
10122 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10123 (this, ret, s, e, base, err, t))
10125 #define call_time_get_char_do_get_date(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_char*, \
10126 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10127 (this, ret, s, e, base, err, t))
10129 istreambuf_iterator_char
* __thiscall
time_get_char_do_get_date(const time_get_char
*this,
10130 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10131 ios_base
*base
, int *err
, struct tm
*t
)
10136 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10138 ctype
= ctype_char_use_facet(IOS_LOCALE(base
));
10140 order
= time_get_char_date_order(this);
10141 if(order
== DATEORDER_no_order
)
10142 order
= DATEORDER_mdy
;
10145 case DATEORDER_dmy
:
10146 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
10147 skip_date_delim_char(ctype
, &s
);
10149 *err
|= IOSTATE_failbit
;
10152 if(s
.strbuf
&& ctype_char_is_ch(ctype
, _DIGIT
, s
.val
)) {
10153 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
10156 time_get_char_get_monthname(this, &s
, s
, e
, base
, err
, t
);
10158 skip_date_delim_char(ctype
, &s
);
10160 *err
|= IOSTATE_failbit
;
10163 time_get_char_get_year(this, &s
, s
, e
, base
, err
, t
);
10165 case DATEORDER_mdy
:
10166 istreambuf_iterator_char_val(&s
);
10167 if(s
.strbuf
&& ctype_char_is_ch(ctype
, _DIGIT
, s
.val
)) {
10168 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
10171 time_get_char_get_monthname(this, &s
, s
, e
, base
, err
, t
);
10173 skip_date_delim_char(ctype
, &s
);
10175 *err
|= IOSTATE_failbit
;
10178 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
10179 skip_date_delim_char(ctype
, &s
);
10181 *err
|= IOSTATE_failbit
;
10184 time_get_char_get_year(this, &s
, s
, e
, base
, err
, t
);
10186 case DATEORDER_ymd
:
10187 time_get_char_get_year(this, &s
, s
, e
, base
, err
, t
);
10188 skip_date_delim_char(ctype
, &s
);
10190 *err
|= IOSTATE_failbit
;
10193 if(ctype_char_is_ch(ctype
, _DIGIT
, s
.val
)) {
10194 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
10197 time_get_char_get_monthname(this, &s
, s
, e
, base
, err
, t
);
10199 skip_date_delim_char(ctype
, &s
);
10201 *err
|= IOSTATE_failbit
;
10204 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
10206 case DATEORDER_ydm
:
10207 time_get_char_get_year(this, &s
, s
, e
, base
, err
, t
);
10208 skip_date_delim_char(ctype
, &s
);
10210 *err
|= IOSTATE_failbit
;
10213 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
10214 skip_date_delim_char(ctype
, &s
);
10216 *err
|= IOSTATE_failbit
;
10219 if(ctype_char_is_ch(ctype
, _DIGIT
, s
.val
)) {
10220 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
10223 time_get_char_get_monthname(this, &s
, s
, e
, base
, err
, t
);
10227 ERR("incorrect order value: %d\n", order
);
10232 *err
|= IOSTATE_eofbit
;
10237 /* ?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 */
10238 /* ?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 */
10239 DEFINE_THISCALL_WRAPPER(time_get_char_get_date
, 36)
10240 istreambuf_iterator_char
* __thiscall
time_get_char_get_date(const time_get_char
*this,
10241 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10242 ios_base
*base
, int *err
, struct tm
*t
)
10244 return call_time_get_char_do_get_date(this, ret
, s
, e
, base
, err
, t
);
10247 istreambuf_iterator_char
* __thiscall
time_get_char_get(const time_get_char
*,
10248 istreambuf_iterator_char
*, istreambuf_iterator_char
, istreambuf_iterator_char
,
10249 ios_base
*, int*, struct tm
*, char, char);
10251 /* ?_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 */
10252 /* ?_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 */
10253 DEFINE_THISCALL_WRAPPER(time_get_char__Getfmt
, 40)
10254 istreambuf_iterator_char
* __thiscall
time_get_char__Getfmt(const time_get_char
*this,
10255 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10256 ios_base
*base
, int *err
, struct tm
*t
, const char *fmt
)
10260 TRACE("(%p %p %p %p %p %s)\n", this, ret
, base
, err
, t
, fmt
);
10262 ctype
= ctype_char_use_facet(IOS_LOCALE(base
));
10263 istreambuf_iterator_char_val(&s
);
10266 if(ctype_char_is_ch(ctype
, _SPACE
, *fmt
)) {
10267 skip_ws_char(ctype
, &s
);
10273 *err
|= IOSTATE_failbit
;
10279 time_get_char_get(this, &s
, s
, e
, base
, err
, t
, *fmt
, 0);
10282 *err
|= IOSTATE_failbit
;
10284 istreambuf_iterator_char_inc(&s
);
10287 if(*err
& IOSTATE_failbit
)
10293 *err
|= IOSTATE_eofbit
;
10298 /* ?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 */
10299 /* ?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 */
10300 DEFINE_THISCALL_WRAPPER(time_get_char_do_get
, 44) /* virtual */
10301 #if _MSVCP_VER <= 100
10302 #define call_time_get_char_do_get(this, ret, s, e, base, err, t, fmt, mod) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_char*, \
10303 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*, char, char), \
10304 (this, ret, s, e, base, err, t, fmt, mod))
10306 #define call_time_get_char_do_get(this, ret, s, e, base, err, t, fmt, mod) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_char*, \
10307 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*, char, char), \
10308 (this, ret, s, e, base, err, t, fmt, mod))
10310 istreambuf_iterator_char
* __thiscall
time_get_char_do_get(const time_get_char
*this,
10311 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10312 ios_base
*base
, int *err
, struct tm
*t
, char fmt
, char mod
)
10316 TRACE("(%p %p %p %p %p %c %c)\n", this, ret
, base
, err
, t
, fmt
, mod
);
10318 ctype
= ctype_char_use_facet(IOS_LOCALE(base
));
10323 time_get_char_get_weekday(this, &s
, s
, e
, base
, err
, t
);
10328 time_get_char_get_monthname(this, &s
, s
, e
, base
, err
, t
);
10331 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%b %d %H:%M:%S %Y");
10334 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 99, &t
->tm_year
);
10335 if(!(*err
& IOSTATE_failbit
))
10336 t
->tm_year
= t
->tm_year
* 100 - 1900;
10340 if(fmt
== 'e') skip_ws_char(ctype
, &s
);
10341 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
10344 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%m/%d/%y");
10347 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%Y-%m-%d");
10350 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 23, &t
->tm_hour
);
10353 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 11, &t
->tm_hour
);
10356 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 366, &t
->tm_yday
);
10359 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
10360 if(!(*err
& IOSTATE_failbit
))
10364 *err
= time_get_char__Getint(this, &s
, &e
, 0, 59, &t
->tm_min
);
10368 skip_ws_char(ctype
, &s
);
10373 istreambuf_iterator_char_val(&s
);
10374 if(s
.strbuf
&& (s
.val
=='P' || s
.val
=='p'))
10376 else if (!s
.strbuf
|| (s
.val
!='A' && s
.val
!='a')) {
10377 *err
|= IOSTATE_failbit
;
10380 istreambuf_iterator_char_inc(&s
);
10381 if(!s
.strbuf
|| (s
.val
!='M' && s
.val
!='m')) {
10382 *err
|= IOSTATE_failbit
;
10385 istreambuf_iterator_char_inc(&s
);
10392 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%I:%M:%S %p");
10395 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%H:%M");
10398 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 59, &t
->tm_sec
);
10402 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%H:%M:%S");
10405 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 7, &t
->tm_wday
);
10406 if(!(*err
& IOSTATE_failbit
) && t
->tm_wday
==7)
10410 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 6, &t
->tm_wday
);
10413 time_get_char_get_date(this, &s
, s
, e
, base
, err
, t
);
10416 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 99, &t
->tm_year
);
10417 if(!(*err
& IOSTATE_failbit
) && t
->tm_year
<69)
10421 time_get_char_get_year(this, &s
, s
, e
, base
, err
, t
);
10424 FIXME("unrecognized format: %c\n", fmt
);
10425 *err
|= IOSTATE_failbit
;
10429 *err
|= IOSTATE_eofbit
;
10434 /* ?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 */
10435 /* ?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 */
10436 DEFINE_THISCALL_WRAPPER(time_get_char_get
, 44)
10437 istreambuf_iterator_char
* __thiscall
time_get_char_get(const time_get_char
*this,
10438 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10439 ios_base
*base
, int *err
, struct tm
*t
, char fmt
, char mod
)
10441 return call_time_get_char_do_get(this, ret
, s
, e
, base
, err
, t
, fmt
, mod
);
10444 /* ?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 */
10445 /* ?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 */
10446 DEFINE_THISCALL_WRAPPER(time_get_char_get_fmt
, 44)
10447 istreambuf_iterator_char
* __thiscall
time_get_char_get_fmt(const time_get_char
*this,
10448 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10449 ios_base
*base
, int *err
, struct tm
*t
, const char *fmtstart
, const char *fmtend
)
10453 TRACE("(%p %p %p %p %p %s)\n", this, ret
, base
, err
, t
, wine_dbgstr_an(fmtstart
, fmtend
-fmtstart
));
10455 ctype
= ctype_char_use_facet(IOS_LOCALE(base
));
10456 istreambuf_iterator_char_val(&s
);
10458 while(fmtstart
< fmtend
) {
10459 if(ctype_char_is_ch(ctype
, _SPACE
, *fmtstart
)) {
10460 skip_ws_char(ctype
, &s
);
10466 *err
|= IOSTATE_failbit
;
10470 if(*fmtstart
!= '%' || fmtstart
+1 >= fmtend
|| fmtstart
[1] == '%') {
10471 if(s
.val
!= *fmtstart
)
10472 *err
|= IOSTATE_failbit
;
10474 istreambuf_iterator_char_inc(&s
);
10475 if(*fmtstart
== '%')
10479 time_get_char_get(this, &s
, s
, e
, base
, err
, t
, *fmtstart
, 0);
10482 if(*err
& IOSTATE_failbit
)
10488 *err
|= IOSTATE_eofbit
;
10493 /* ?id@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
10494 locale_id time_get_wchar_id
= {0};
10496 /* ??_7?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
10497 extern const vtable_ptr time_get_wchar_vtable
;
10499 #if _MSVCP_VER >=110
10500 static wchar_t* create_time_get_str(const wchar_t *str
)
10505 len
= lstrlenW(str
)+1;
10506 ret
= operator_new(len
* sizeof(wchar_t));
10507 memcpy(ret
, str
, len
*sizeof(wchar_t));
10511 static wchar_t* create_time_get_str(const char *str
, const _Locinfo
*locinfo
)
10517 _Locinfo__Getcvt(locinfo
, &cvt
);
10518 len
= MultiByteToWideChar(cvt
.page
, 0, str
, -1, NULL
, 0);
10519 ret
= operator_new(len
*sizeof(WCHAR
));
10520 MultiByteToWideChar(cvt
.page
, 0, str
, -1, ret
, len
);
10525 /* ?_Init@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
10526 /* ?_Init@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
10527 DEFINE_THISCALL_WRAPPER(time_get_wchar__Init
, 8)
10528 void __thiscall
time_get_wchar__Init(time_get_wchar
*this, const _Locinfo
*locinfo
)
10530 TRACE("(%p %p)\n", this, locinfo
);
10532 #if _MSVCP_VER >=110
10533 this->days
= create_time_get_str(_Locinfo__W_Getdays(locinfo
));
10535 this->days
= create_time_get_str(_Locinfo__Getdays(locinfo
), locinfo
);
10538 #if _MSVCP_VER >=110
10539 this->months
= create_time_get_str(_Locinfo__W_Getmonths(locinfo
));
10541 this->months
= create_time_get_str(_Locinfo__Getmonths(locinfo
), locinfo
);
10544 this->dateorder
= _Locinfo__Getdateorder(locinfo
);
10545 _Locinfo__Getcvt(locinfo
, &this->cvt
);
10548 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
10549 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
10550 DEFINE_THISCALL_WRAPPER(time_get_wchar_ctor_locinfo
, 12)
10551 time_get_wchar
* __thiscall
time_get_wchar_ctor_locinfo(time_get_wchar
*this,
10552 const _Locinfo
*locinfo
, size_t refs
)
10554 TRACE("(%p %p %Iu)\n", this, locinfo
, refs
);
10555 locale_facet_ctor_refs(&this->facet
, refs
);
10556 this->facet
.vtable
= &time_get_wchar_vtable
;
10557 time_get_wchar__Init(this, locinfo
);
10561 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAE@PBDI@Z */
10562 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAA@PEBD_K@Z */
10563 DEFINE_THISCALL_WRAPPER(time_get_wchar_ctor_name
, 12)
10564 time_get_wchar
* __thiscall
time_get_wchar_ctor_name(time_get_wchar
*this, const char *name
, size_t refs
)
10568 TRACE("(%p %s %Iu)\n", this, name
, refs
);
10570 _Locinfo_ctor_cstr(&locinfo
, name
);
10571 time_get_wchar_ctor_locinfo(this, &locinfo
, refs
);
10572 _Locinfo_dtor(&locinfo
);
10576 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
10577 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
10578 DEFINE_THISCALL_WRAPPER(time_get_wchar_ctor_refs
, 8)
10579 time_get_wchar
* __thiscall
time_get_wchar_ctor_refs(time_get_wchar
*this, size_t refs
)
10583 TRACE("(%p %Iu)\n", this, refs
);
10585 _Locinfo_ctor(&locinfo
);
10586 time_get_wchar_ctor_locinfo(this, &locinfo
, refs
);
10587 _Locinfo_dtor(&locinfo
);
10591 /* ??_F?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
10592 /* ??_F?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
10593 DEFINE_THISCALL_WRAPPER(time_get_wchar_ctor
, 4)
10594 time_get_wchar
* __thiscall
time_get_wchar_ctor(time_get_wchar
*this)
10596 return time_get_wchar_ctor_refs(this, 0);
10599 /* ?_Tidy@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AAEXXZ */
10600 /* ?_Tidy@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEAAXXZ */
10601 DEFINE_THISCALL_WRAPPER(time_get_wchar__Tidy
, 4)
10602 void __thiscall
time_get_wchar__Tidy(time_get_wchar
*this)
10604 TRACE("(%p)\n", this);
10606 operator_delete((wchar_t*)this->days
);
10607 operator_delete((wchar_t*)this->months
);
10610 /* ??1?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
10611 /* ??1?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
10612 DEFINE_THISCALL_WRAPPER(time_get_wchar_dtor
, 4) /* virtual */
10613 void __thiscall
time_get_wchar_dtor(time_get_wchar
*this)
10615 TRACE("(%p)\n", this);
10617 time_get_wchar__Tidy(this);
10620 DEFINE_THISCALL_WRAPPER(time_get_wchar_vector_dtor
, 8)
10621 time_get_wchar
* __thiscall
time_get_wchar_vector_dtor(time_get_wchar
*this, unsigned int flags
)
10623 TRACE("(%p %x)\n", this, flags
);
10625 /* we have an array, with the number of elements stored before the first object */
10626 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
10628 for(i
=*ptr
-1; i
>=0; i
--)
10629 time_get_wchar_dtor(this+i
);
10630 operator_delete(ptr
);
10632 time_get_wchar_dtor(this);
10634 operator_delete(this);
10640 /* ?_Getcat@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
10641 /* ?_Getcat@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
10642 unsigned int __cdecl
time_get_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
10644 TRACE("(%p %p)\n", facet
, loc
);
10646 if(facet
&& !*facet
) {
10649 *facet
= operator_new(sizeof(time_get_wchar
));
10650 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
10651 time_get_wchar_ctor_locinfo((time_get_wchar
*)*facet
, &locinfo
, 0);
10652 _Locinfo_dtor(&locinfo
);
10658 static time_get_wchar
* time_get_wchar_use_facet(const locale
*loc
)
10660 static time_get_wchar
*obj
= NULL
;
10663 const locale_facet
*fac
;
10665 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
10666 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_get_wchar_id
));
10668 _Lockit_dtor(&lock
);
10669 return (time_get_wchar
*)fac
;
10673 _Lockit_dtor(&lock
);
10677 time_get_wchar__Getcat(&fac
, loc
);
10678 obj
= (time_get_wchar
*)fac
;
10679 call_locale_facet__Incref(&obj
->facet
);
10680 locale_facet_register(&obj
->facet
);
10681 _Lockit_dtor(&lock
);
10686 /* ?_Getint@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@0HHAAH@Z */
10687 /* ?_Getint@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@0HHAEAH@Z */
10688 int __cdecl
time_get_wchar__Getint(const time_get_wchar
*this,
10689 istreambuf_iterator_wchar
*b
, istreambuf_iterator_wchar
*e
,
10690 int min_val
, int max_val
, int *val
)
10692 BOOL got_digit
= FALSE
;
10693 int len
= 0, ret
= 0;
10696 TRACE("(%p %p %p %d %d %p)\n", this, b
, e
, min_val
, max_val
, val
);
10698 istreambuf_iterator_wchar_val(b
);
10699 if(b
->strbuf
&& (b
->val
== '-' || b
->val
== '+'))
10701 buf
[len
++] = b
->val
;
10702 istreambuf_iterator_wchar_inc(b
);
10705 if (b
->strbuf
&& b
->val
== '0')
10709 istreambuf_iterator_wchar_inc(b
);
10711 while (b
->strbuf
&& b
->val
== '0')
10712 istreambuf_iterator_wchar_inc(b
);
10714 for (; b
->strbuf
&& b
->val
>= '0' && b
->val
<= '9';
10715 istreambuf_iterator_wchar_inc(b
))
10717 if(len
< ARRAY_SIZE(buf
)-1)
10724 ret
|= IOSTATE_eofbit
;
10725 if (got_digit
&& len
< ARRAY_SIZE(buf
)-1)
10730 v
= _Stolx(buf
, NULL
, 10, &err
);
10731 if(err
|| v
< min_val
|| v
> max_val
)
10732 ret
|= IOSTATE_failbit
;
10737 ret
|= IOSTATE_failbit
;
10741 /* ?do_date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AW4dateorder@time_base@2@XZ */
10742 /* ?do_date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AW4dateorder@time_base@2@XZ */
10743 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_date_order
, 4) /* virtual */
10744 #if _MSVCP_VER <= 100
10745 #define call_time_get_wchar_do_date_order(this) CALL_VTBL_FUNC(this, 4, dateorder, (const time_get_wchar*), (this))
10747 #define call_time_get_wchar_do_date_order(this) CALL_VTBL_FUNC(this, 12, dateorder, (const time_get_wchar*), (this))
10749 dateorder __thiscall
time_get_wchar_do_date_order(const time_get_wchar
*this)
10751 TRACE("(%p)\n", this);
10752 return this->dateorder
;
10755 /* ?date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AW4dateorder@time_base@2@XZ */
10756 /* ?date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AW4dateorder@time_base@2@XZ */
10757 DEFINE_THISCALL_WRAPPER(time_get_wchar_date_order
, 4)
10758 dateorder __thiscall
time_get_wchar_date_order(const time_get_wchar
*this)
10760 return call_time_get_wchar_do_date_order(this);
10763 static int find_longest_match_wchar(istreambuf_iterator_wchar
*iter
, const wchar_t *str
)
10765 int i
, len
= 0, last_match
= -1, match
= -1;
10766 const wchar_t *p
, *end
;
10769 for(istreambuf_iterator_wchar_val(iter
); iter
->strbuf
&& len
<ARRAY_SIZE(buf
);
10770 istreambuf_iterator_wchar_inc(iter
))
10772 BOOL got_prefix
= FALSE
;
10774 buf
[len
++] = iter
->val
;
10775 last_match
= match
;
10777 for(p
=str
+1, i
=0; *p
; p
= (*end
? end
+1 : end
), i
++)
10779 end
= wcschr(p
, ':');
10781 end
= p
+ lstrlenW(p
);
10783 if (end
-p
>= len
&& !memcmp(p
, buf
, len
*sizeof(wchar_t)))
10796 istreambuf_iterator_wchar_inc(iter
);
10802 if (len
== ARRAY_SIZE(buf
))
10803 FIXME("temporary buffer is too small\n");
10809 /* ?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 */
10810 /* ?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 */
10811 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get_monthname
, 36) /* virtual */
10812 #if _MSVCP_VER <= 100
10813 #define call_time_get_wchar_do_get_monthname(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_wchar*, \
10814 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
10815 (this, ret, s, e, base, err, t))
10817 #define call_time_get_wchar_do_get_monthname(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_wchar*, \
10818 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
10819 (this, ret, s, e, base, err, t))
10821 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get_monthname(const time_get_wchar
*this,
10822 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
10823 ios_base
*base
, int *err
, struct tm
*t
)
10827 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10829 if ((match
= find_longest_match_wchar(&s
, this->months
)) != -1)
10830 t
->tm_mon
= match
/ 2;
10832 *err
|= IOSTATE_failbit
;
10838 /* ?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 */
10839 /* ?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 */
10840 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_monthname
, 36)
10841 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_monthname(const time_get_wchar
*this,
10842 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
10843 ios_base
*base
, int *err
, struct tm
*t
)
10845 return call_time_get_wchar_do_get_monthname(this, ret
, s
, e
, base
, err
, t
);
10848 /* ?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 */
10849 /* ?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 */
10850 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get_time
, 36) /* virtual */
10851 #if _MSVCP_VER <= 100
10852 #define call_time_get_wchar_do_get_time(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_wchar*, \
10853 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
10854 (this, ret, s, e, base, err, t))
10856 #define call_time_get_wchar_do_get_time(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_wchar*, \
10857 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
10858 (this, ret, s, e, base, err, t))
10860 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get_time(const time_get_wchar
*this,
10861 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
10862 ios_base
*base
, int *err
, struct tm
*t
)
10864 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10866 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 23, &t
->tm_hour
);
10867 if (*err
|| istreambuf_iterator_wchar_val(&s
)!=':')
10868 *err
|= IOSTATE_failbit
;
10872 istreambuf_iterator_wchar_inc(&s
);
10873 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 59, &t
->tm_min
);
10875 if (*err
|| istreambuf_iterator_wchar_val(&s
)!=':')
10876 *err
|= IOSTATE_failbit
;
10880 istreambuf_iterator_wchar_inc(&s
);
10881 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 59, &t
->tm_sec
);
10888 /* ?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 */
10889 /* ?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 */
10890 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_time
, 36)
10891 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_time(const time_get_wchar
*this,
10892 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
10893 ios_base
*base
, int *err
, struct tm
*t
)
10895 return call_time_get_wchar_do_get_time(this, ret
, s
, e
, base
, err
, t
);
10898 /* ?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 */
10899 /* ?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 */
10900 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get_weekday
, 36) /* virtual */
10901 #if _MSVCP_VER <= 100
10902 #define call_time_get_wchar_do_get_weekday(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_wchar*, \
10903 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
10904 (this, ret, s, e, base, err, t))
10906 #define call_time_get_wchar_do_get_weekday(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_wchar*, \
10907 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
10908 (this, ret, s, e, base, err, t))
10910 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get_weekday(const time_get_wchar
*this,
10911 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
10912 ios_base
*base
, int *err
, struct tm
*t
)
10916 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10918 if ((match
= find_longest_match_wchar(&s
, this->days
)) != -1)
10919 t
->tm_wday
= match
/ 2;
10921 *err
|= IOSTATE_failbit
;
10927 /* ?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 */
10928 /* ?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 */
10929 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_weekday
, 36)
10930 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_weekday(const time_get_wchar
*this,
10931 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
10932 ios_base
*base
, int *err
, struct tm
*t
)
10934 return call_time_get_wchar_do_get_weekday(this, ret
, s
, e
, base
, err
, t
);
10937 /* ?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 */
10938 /* ?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 */
10939 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get_year
, 36) /* virtual */
10940 #if _MSVCP_VER <= 100
10941 #define call_time_get_wchar_do_get_year(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_wchar*, \
10942 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
10943 (this, ret, s, e, base, err, t))
10945 #define call_time_get_wchar_do_get_year(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_wchar*, \
10946 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
10947 (this, ret, s, e, base, err, t))
10949 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get_year(const time_get_wchar
*this,
10950 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
10951 ios_base
*base
, int *err
, struct tm
*t
)
10955 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10957 /* The function supports only dates from [1900-2035] range */
10958 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 2035, &year
);
10959 if (!(*err
& IOSTATE_failbit
))
10964 *err
|= IOSTATE_failbit
;
10973 /* ?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 */
10974 /* ?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 */
10975 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_year
, 36)
10976 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_year(const time_get_wchar
*this,
10977 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
10978 ios_base
*base
, int *err
, struct tm
*t
)
10980 return call_time_get_wchar_do_get_year(this, ret
, s
, e
, base
, err
, t
);
10983 static void skip_ws_wchar(ctype_wchar
*ctype
, istreambuf_iterator_wchar
*iter
)
10985 istreambuf_iterator_wchar_val(iter
);
10986 while(iter
->strbuf
&& ctype_wchar_is_ch(ctype
, _SPACE
, iter
->val
))
10987 istreambuf_iterator_wchar_inc(iter
);
10990 static void skip_date_delim_wchar(ctype_wchar
*ctype
, istreambuf_iterator_wchar
*iter
)
10992 skip_ws_wchar(ctype
, iter
);
10993 if(iter
->strbuf
&& (iter
->val
== '/' || iter
->val
== ':'))
10994 istreambuf_iterator_wchar_inc(iter
);
10995 skip_ws_wchar(ctype
, iter
);
10998 /* ?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 */
10999 /* ?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 */
11000 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get_date
, 36) /* virtual */
11001 #if _MSVCP_VER <= 100
11002 #define call_time_get_wchar_do_get_date(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_wchar*, \
11003 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
11004 (this, ret, s, e, base, err, t))
11006 #define call_time_get_wchar_do_get_date(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_wchar*, \
11007 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
11008 (this, ret, s, e, base, err, t))
11010 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get_date(const time_get_wchar
*this,
11011 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11012 ios_base
*base
, int *err
, struct tm
*t
)
11014 ctype_wchar
*ctype
;
11017 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
11019 ctype
= ctype_wchar_use_facet(IOS_LOCALE(base
));
11021 order
= time_get_wchar_date_order(this);
11022 if(order
== DATEORDER_no_order
)
11023 order
= DATEORDER_mdy
;
11026 case DATEORDER_dmy
:
11027 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
11028 skip_date_delim_wchar(ctype
, &s
);
11030 *err
|= IOSTATE_failbit
;
11033 if(s
.strbuf
&& ctype_wchar_is_ch(ctype
, _DIGIT
, s
.val
)) {
11034 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
11037 time_get_wchar_get_monthname(this, &s
, s
, e
, base
, err
, t
);
11039 skip_date_delim_wchar(ctype
, &s
);
11041 *err
|= IOSTATE_failbit
;
11044 time_get_wchar_get_year(this, &s
, s
, e
, base
, err
, t
);
11046 case DATEORDER_mdy
:
11047 istreambuf_iterator_wchar_val(&s
);
11048 if(s
.strbuf
&& ctype_wchar_is_ch(ctype
, _DIGIT
, s
.val
)) {
11049 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
11052 time_get_wchar_get_monthname(this, &s
, s
, e
, base
, err
, t
);
11054 skip_date_delim_wchar(ctype
, &s
);
11056 *err
|= IOSTATE_failbit
;
11059 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
11060 skip_date_delim_wchar(ctype
, &s
);
11062 *err
|= IOSTATE_failbit
;
11065 time_get_wchar_get_year(this, &s
, s
, e
, base
, err
, t
);
11067 case DATEORDER_ymd
:
11068 time_get_wchar_get_year(this, &s
, s
, e
, base
, err
, t
);
11069 skip_date_delim_wchar(ctype
, &s
);
11071 *err
|= IOSTATE_failbit
;
11074 if(ctype_wchar_is_ch(ctype
, _DIGIT
, s
.val
)) {
11075 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
11078 time_get_wchar_get_monthname(this, &s
, s
, e
, base
, err
, t
);
11080 skip_date_delim_wchar(ctype
, &s
);
11082 *err
|= IOSTATE_failbit
;
11085 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
11087 case DATEORDER_ydm
:
11088 time_get_wchar_get_year(this, &s
, s
, e
, base
, err
, t
);
11089 skip_date_delim_wchar(ctype
, &s
);
11091 *err
|= IOSTATE_failbit
;
11094 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
11095 skip_date_delim_wchar(ctype
, &s
);
11097 *err
|= IOSTATE_failbit
;
11100 if(ctype_wchar_is_ch(ctype
, _DIGIT
, s
.val
)) {
11101 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
11104 time_get_wchar_get_monthname(this, &s
, s
, e
, base
, err
, t
);
11108 ERR("incorrect order value: %d\n", order
);
11113 *err
|= IOSTATE_eofbit
;
11118 /* ?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 */
11119 /* ?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 */
11120 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_date
, 36)
11121 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_date(const time_get_wchar
*this,
11122 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11123 ios_base
*base
, int *err
, struct tm
*t
)
11125 return call_time_get_wchar_do_get_date(this, ret
, s
, e
, base
, err
, t
);
11128 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get(const time_get_wchar
*,
11129 istreambuf_iterator_wchar
*, istreambuf_iterator_wchar
, istreambuf_iterator_wchar
,
11130 ios_base
*, int*, struct tm
*, char, char);
11132 /* ?_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 */
11133 /* ?_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 */
11134 DEFINE_THISCALL_WRAPPER(time_get_wchar__Getfmt
, 40)
11135 istreambuf_iterator_wchar
* __thiscall
time_get_wchar__Getfmt(const time_get_wchar
*this,
11136 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11137 ios_base
*base
, int *err
, struct tm
*t
, const char *fmt
)
11139 ctype_wchar
*ctype
;
11141 TRACE("(%p %p %p %p %p %s)\n", this, ret
, base
, err
, t
, fmt
);
11143 ctype
= ctype_wchar_use_facet(IOS_LOCALE(base
));
11144 istreambuf_iterator_wchar_val(&s
);
11148 skip_ws_wchar(ctype
, &s
);
11154 *err
|= IOSTATE_failbit
;
11160 time_get_wchar_get(this, &s
, s
, e
, base
, err
, t
, *fmt
, 0);
11163 *err
|= IOSTATE_failbit
;
11165 istreambuf_iterator_wchar_inc(&s
);
11168 if(*err
& IOSTATE_failbit
)
11174 *err
|= IOSTATE_eofbit
;
11179 /* ?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 */
11180 /* ?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 */
11181 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get
, 44) /* virtual */
11182 #if _MSVCP_VER <= 100
11183 #define call_time_get_wchar_do_get(this, ret, s, e, base, err, t, fmt, mod) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_wchar*, \
11184 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*, char, char), \
11185 (this, ret, s, e, base, err, t, fmt, mod))
11187 #define call_time_get_wchar_do_get(this, ret, s, e, base, err, t, fmt, mod) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_wchar*, \
11188 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*, char, char), \
11189 (this, ret, s, e, base, err, t, fmt, mod))
11191 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get(const time_get_wchar
*this,
11192 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11193 ios_base
*base
, int *err
, struct tm
*t
, char fmt
, char mod
)
11195 ctype_wchar
*ctype
;
11197 TRACE("(%p %p %p %p %p %c %c)\n", this, ret
, base
, err
, t
, fmt
, mod
);
11199 ctype
= ctype_wchar_use_facet(IOS_LOCALE(base
));
11204 time_get_wchar_get_weekday(this, &s
, s
, e
, base
, err
, t
);
11209 time_get_wchar_get_monthname(this, &s
, s
, e
, base
, err
, t
);
11212 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%b %d %H:%M:%S %Y");
11215 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 99, &t
->tm_year
);
11216 if(!(*err
& IOSTATE_failbit
))
11217 t
->tm_year
= t
->tm_year
* 100 - 1900;
11221 if(fmt
== 'e') skip_ws_wchar(ctype
, &s
);
11222 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
11225 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%m/%d/%y");
11228 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%Y-%m-%d");
11231 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 23, &t
->tm_hour
);
11234 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 11, &t
->tm_hour
);
11237 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 366, &t
->tm_yday
);
11240 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
11241 if(!(*err
& IOSTATE_failbit
))
11245 *err
= time_get_wchar__Getint(this, &s
, &e
, 0, 59, &t
->tm_min
);
11249 skip_ws_wchar(ctype
, &s
);
11254 istreambuf_iterator_wchar_val(&s
);
11255 if(s
.strbuf
&& (s
.val
=='P' || s
.val
=='p'))
11257 else if (!s
.strbuf
|| (s
.val
!='A' && s
.val
!='a')) {
11258 *err
|= IOSTATE_failbit
;
11261 istreambuf_iterator_wchar_inc(&s
);
11262 if(!s
.strbuf
|| (s
.val
!='M' && s
.val
!='m')) {
11263 *err
|= IOSTATE_failbit
;
11266 istreambuf_iterator_wchar_inc(&s
);
11273 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%I:%M:%S %p");
11276 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%H:%M");
11279 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 59, &t
->tm_sec
);
11283 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%H:%M:%S");
11286 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 7, &t
->tm_wday
);
11287 if(!(*err
& IOSTATE_failbit
) && t
->tm_wday
==7)
11291 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 6, &t
->tm_wday
);
11294 time_get_wchar_get_date(this, &s
, s
, e
, base
, err
, t
);
11297 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 99, &t
->tm_year
);
11298 if(!(*err
& IOSTATE_failbit
) && t
->tm_year
<69)
11302 time_get_wchar_get_year(this, &s
, s
, e
, base
, err
, t
);
11305 FIXME("unrecognized format: %c\n", fmt
);
11306 *err
|= IOSTATE_failbit
;
11310 *err
|= IOSTATE_eofbit
;
11315 /* ?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 */
11316 /* ?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 */
11317 DEFINE_THISCALL_WRAPPER(time_get_wchar_get
, 44)
11318 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get(const time_get_wchar
*this,
11319 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11320 ios_base
*base
, int *err
, struct tm
*t
, char fmt
, char mod
)
11322 return call_time_get_wchar_do_get(this, ret
, s
, e
, base
, err
, t
, fmt
, mod
);
11325 /* ?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 */
11326 /* ?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 */
11327 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_fmt
, 44)
11328 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_fmt(const time_get_wchar
*this,
11329 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11330 ios_base
*base
, int *err
, struct tm
*t
, const wchar_t *fmtstart
, const wchar_t *fmtend
)
11332 ctype_wchar
*ctype
;
11334 TRACE("(%p %p %p %p %p %s)\n", this, ret
, base
, err
, t
, wine_dbgstr_wn(fmtstart
, fmtend
-fmtstart
));
11336 ctype
= ctype_wchar_use_facet(IOS_LOCALE(base
));
11337 istreambuf_iterator_wchar_val(&s
);
11339 while(fmtstart
< fmtend
) {
11340 if(ctype_wchar_is_ch(ctype
, _SPACE
, *fmtstart
)) {
11341 skip_ws_wchar(ctype
, &s
);
11347 *err
|= IOSTATE_failbit
;
11351 if(*fmtstart
!= '%' || fmtstart
+1 >= fmtend
|| fmtstart
[1] == '%') {
11352 if(s
.val
!= *fmtstart
)
11353 *err
|= IOSTATE_failbit
;
11355 istreambuf_iterator_wchar_inc(&s
);
11356 if(*fmtstart
== '%')
11360 time_get_wchar_get(this, &s
, s
, e
, base
, err
, t
, *fmtstart
, 0);
11363 if(*err
& IOSTATE_failbit
)
11369 *err
|= IOSTATE_eofbit
;
11374 /* ??_7_Locimp@locale@std@@6B@ */
11375 extern const vtable_ptr locale__Locimp_vtable
;
11377 /* ??0_Locimp@locale@std@@AAE@_N@Z */
11378 /* ??0_Locimp@locale@std@@AEAA@_N@Z */
11379 DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor_transparent
, 8)
11380 locale__Locimp
* __thiscall
locale__Locimp_ctor_transparent(locale__Locimp
*this, bool transparent
)
11382 TRACE("(%p %d)\n", this, transparent
);
11384 memset(this, 0, sizeof(locale__Locimp
));
11385 locale_facet_ctor_refs(&this->facet
, 1);
11386 this->facet
.vtable
= &locale__Locimp_vtable
;
11387 this->transparent
= transparent
;
11388 locale_string_char_ctor_cstr(&this->name
, "*");
11392 /* ??_F_Locimp@locale@std@@QAEXXZ */
11393 /* ??_F_Locimp@locale@std@@QEAAXXZ */
11394 DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor
, 4)
11395 locale__Locimp
* __thiscall
locale__Locimp_ctor(locale__Locimp
*this)
11397 return locale__Locimp_ctor_transparent(this, FALSE
);
11400 /* ??0_Locimp@locale@std@@AAE@ABV012@@Z */
11401 /* ??0_Locimp@locale@std@@AEAA@AEBV012@@Z */
11402 DEFINE_THISCALL_WRAPPER(locale__Locimp_copy_ctor
, 8)
11403 locale__Locimp
* __thiscall
locale__Locimp_copy_ctor(locale__Locimp
*this, const locale__Locimp
*copy
)
11408 TRACE("(%p %p)\n", this, copy
);
11410 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
11411 memcpy(this, copy
, sizeof(locale__Locimp
));
11412 locale_facet_ctor_refs(&this->facet
, 1);
11413 this->facet
.vtable
= &locale__Locimp_vtable
;
11414 if(copy
->facetvec
) {
11415 this->facetvec
= operator_new(copy
->facet_cnt
*sizeof(locale_facet
*));
11416 for(i
=0; i
<this->facet_cnt
; i
++)
11418 this->facetvec
[i
] = copy
->facetvec
[i
];
11419 if(this->facetvec
[i
])
11420 call_locale_facet__Incref(this->facetvec
[i
]);
11423 locale_string_char_copy_ctor(&this->name
, ©
->name
);
11424 _Lockit_dtor(&lock
);
11428 /* ?_Locimp_ctor@_Locimp@locale@std@@CAXPAV123@ABV123@@Z */
11429 /* ?_Locimp_ctor@_Locimp@locale@std@@CAXPEAV123@AEBV123@@Z */
11430 locale__Locimp
* __cdecl
locale__Locimp__Locimp_ctor(locale__Locimp
*this, const locale__Locimp
*copy
)
11432 return locale__Locimp_copy_ctor(this, copy
);
11435 /* ??1_Locimp@locale@std@@MAE@XZ */
11436 /* ??1_Locimp@locale@std@@MEAA@XZ */
11437 DEFINE_THISCALL_WRAPPER(locale__Locimp_dtor
, 4)
11438 void __thiscall
locale__Locimp_dtor(locale__Locimp
*this)
11442 TRACE("(%p)\n", this);
11444 locale_facet_dtor(&this->facet
);
11445 for(i
=0; i
<this->facet_cnt
; i
++)
11446 if(this->facetvec
[i
] && call_locale_facet__Decref(this->facetvec
[i
]))
11447 call_locale_facet_vector_dtor(this->facetvec
[i
], 1);
11449 operator_delete(this->facetvec
);
11450 locale_string_char_dtor(&this->name
);
11453 /* ?_Locimp_dtor@_Locimp@locale@std@@CAXPAV123@@Z */
11454 /* ?_Locimp_dtor@_Locimp@locale@std@@CAXPEAV123@@Z */
11455 void __cdecl
locale__Locimp__Locimp_dtor(locale__Locimp
*this)
11457 locale__Locimp_dtor(this);
11460 DEFINE_THISCALL_WRAPPER(locale__Locimp_vector_dtor
, 8)
11461 locale__Locimp
* __thiscall
locale__Locimp_vector_dtor(locale__Locimp
*this, unsigned int flags
)
11463 TRACE("(%p %x)\n", this, flags
);
11465 /* we have an array, with the number of elements stored before the first object */
11466 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
11468 for(i
=*ptr
-1; i
>=0; i
--)
11469 locale__Locimp_dtor(this+i
);
11470 operator_delete(ptr
);
11472 locale__Locimp_dtor(this);
11474 operator_delete(this);
11480 /* ?_New_Locimp@_Locimp@locale@std@@CAPAV123@ABV123@@Z */
11481 /* ?_New_Locimp@_Locimp@locale@std@@CAPEAV123@AEBV123@@Z */
11482 locale__Locimp
* __cdecl
locale__Locimp__New_Locimp(const locale__Locimp
*copy
)
11484 locale__Locimp
*ret
;
11486 TRACE("(%p)\n", copy
);
11488 ret
= operator_new(sizeof(locale__Locimp
));
11489 return locale__Locimp_copy_ctor(ret
, copy
);
11492 /* ?_New_Locimp@_Locimp@locale@std@@CAPAV123@_N@Z */
11493 /* ?_New_Locimp@_Locimp@locale@std@@CAPEAV123@_N@Z */
11494 locale__Locimp
* __cdecl
locale__Locimp__New_Locimp_transparent(bool transparent
)
11496 locale__Locimp
*ret
;
11498 TRACE("(%x)\n", transparent
);
11500 ret
= operator_new(sizeof(locale__Locimp
));
11501 return locale__Locimp_ctor_transparent(ret
, transparent
);
11504 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z */
11505 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPEAV123@PEAVfacet@23@_K@Z */
11506 void __cdecl
locale__Locimp__Locimp_Addfac(locale__Locimp
*locimp
, locale_facet
*facet
, size_t id
)
11510 TRACE("(%p %p %Iu)\n", locimp
, facet
, id
);
11512 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
11513 if(id
>= locimp
->facet_cnt
) {
11514 size_t new_size
= id
+1;
11515 locale_facet
**new_facetvec
;
11520 new_facetvec
= operator_new(sizeof(locale_facet
*)*new_size
);
11521 memset(new_facetvec
, 0, sizeof(locale_facet
*)*new_size
);
11522 memcpy(new_facetvec
, locimp
->facetvec
, sizeof(locale_facet
*)*locimp
->facet_cnt
);
11523 operator_delete(locimp
->facetvec
);
11524 locimp
->facetvec
= new_facetvec
;
11525 locimp
->facet_cnt
= new_size
;
11528 if(locimp
->facetvec
[id
] && call_locale_facet__Decref(locimp
->facetvec
[id
]))
11529 call_locale_facet_vector_dtor(locimp
->facetvec
[id
], 1);
11531 locimp
->facetvec
[id
] = facet
;
11533 call_locale_facet__Incref(facet
);
11534 _Lockit_dtor(&lock
);
11537 /* ?_Addfac@_Locimp@locale@std@@AAEXPAVfacet@23@I@Z */
11538 /* ?_Addfac@_Locimp@locale@std@@AEAAXPEAVfacet@23@_K@Z */
11539 DEFINE_THISCALL_WRAPPER(locale__Locimp__Addfac
, 12)
11540 void __thiscall
locale__Locimp__Addfac(locale__Locimp
*this, locale_facet
*facet
, size_t id
)
11542 locale__Locimp__Locimp_Addfac(this, facet
, id
);
11545 /* ?_Clocptr_func@_Locimp@locale@std@@CAAAPAV123@XZ */
11546 /* ?_Clocptr_func@_Locimp@locale@std@@CAAEAPEAV123@XZ */
11547 locale__Locimp
** __cdecl
locale__Locimp__Clocptr_func(void)
11553 /* ?_Makeushloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
11554 /* ?_Makeushloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
11555 /* List of missing facets:
11556 * messages, money_get, money_put, moneypunct, moneypunct, time_get
11558 void __cdecl
locale__Locimp__Makeushloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
11560 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
11562 if(cat
& (1<<(ctype_short__Getcat(NULL
, NULL
)-1))) {
11563 ctype_wchar
*ctype
;
11566 ctype
= ctype_short_use_facet(loc
);
11568 ctype
= operator_new(sizeof(ctype_wchar
));
11569 ctype_short_ctor_locinfo(ctype
, locinfo
, 0);
11571 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_short_id
));
11574 if(cat
& (1<<(num_get_short__Getcat(NULL
, NULL
)-1))) {
11578 numget
= num_get_short_use_facet(loc
);
11580 numget
= operator_new(sizeof(num_get
));
11581 num_get_short_ctor_locinfo(numget
, locinfo
, 0);
11583 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_short_id
));
11586 if(cat
& (1<<(num_put_short__Getcat(NULL
, NULL
)-1))) {
11590 numput
= num_put_short_use_facet(loc
);
11592 numput
= operator_new(sizeof(num_put
));
11593 num_put_short_ctor_locinfo(numput
, locinfo
, 0);
11595 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_short_id
));
11598 if(cat
& (1<<(numpunct_short__Getcat(NULL
, NULL
)-1))) {
11599 numpunct_wchar
*numpunct
;
11602 numpunct
= numpunct_short_use_facet(loc
);
11604 numpunct
= operator_new(sizeof(numpunct_wchar
));
11605 numpunct_short_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
11607 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_short_id
));
11610 if(cat
& (1<<(collate_short__Getcat(NULL
, NULL
)-1))) {
11614 c
= collate_short_use_facet(loc
);
11616 c
= operator_new(sizeof(collate
));
11617 collate_short_ctor_locinfo(c
, locinfo
, 0);
11619 locale__Locimp__Addfac(locimp
, &c
->facet
, locale_id_operator_size_t(&collate_short_id
));
11622 if(cat
& (1<<(time_put_short__Getcat(NULL
, NULL
)-1))) {
11626 t
= time_put_short_use_facet(loc
);
11628 t
= operator_new(sizeof(time_put
));
11629 time_put_short_ctor_locinfo(t
, locinfo
, 0);
11631 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_put_short_id
));
11634 if(cat
& (1<<(codecvt_short__Getcat(NULL
, NULL
)-1))) {
11635 codecvt_wchar
*codecvt
;
11638 codecvt
= codecvt_short_use_facet(loc
);
11640 codecvt
= operator_new(sizeof(codecvt_wchar
));
11641 codecvt_short_ctor_locinfo(codecvt
, locinfo
, 0);
11643 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_short_id
));
11647 /* ?_Makewloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
11648 /* ?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
11649 /* List of missing facets:
11650 * messages, money_get, money_put, moneypunct, moneypunct
11652 void __cdecl
locale__Locimp__Makewloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
11654 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
11656 if(cat
& (1<<(ctype_wchar__Getcat(NULL
, NULL
)-1))) {
11657 ctype_wchar
*ctype
;
11660 ctype
= ctype_wchar_use_facet(loc
);
11662 ctype
= operator_new(sizeof(ctype_wchar
));
11663 ctype_wchar_ctor_locinfo(ctype
, locinfo
, 0);
11665 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_wchar_id
));
11668 if(cat
& (1<<(num_get_wchar__Getcat(NULL
, NULL
)-1))) {
11672 numget
= num_get_wchar_use_facet(loc
);
11674 numget
= operator_new(sizeof(num_get
));
11675 num_get_wchar_ctor_locinfo(numget
, locinfo
, 0);
11677 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_wchar_id
));
11680 if(cat
& (1<<(num_put_wchar__Getcat(NULL
, NULL
)-1))) {
11684 numput
= num_put_wchar_use_facet(loc
);
11686 numput
= operator_new(sizeof(num_put
));
11687 num_put_wchar_ctor_locinfo(numput
, locinfo
, 0);
11689 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_wchar_id
));
11692 if(cat
& (1<<(numpunct_wchar__Getcat(NULL
, NULL
)-1))) {
11693 numpunct_wchar
*numpunct
;
11696 numpunct
= numpunct_wchar_use_facet(loc
);
11698 numpunct
= operator_new(sizeof(numpunct_wchar
));
11699 numpunct_wchar_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
11701 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_wchar_id
));
11704 if(cat
& (1<<(collate_wchar__Getcat(NULL
, NULL
)-1))) {
11708 c
= collate_wchar_use_facet(loc
);
11710 c
= operator_new(sizeof(collate
));
11711 collate_wchar_ctor_locinfo(c
, locinfo
, 0);
11713 locale__Locimp__Addfac(locimp
, &c
->facet
, locale_id_operator_size_t(&collate_wchar_id
));
11716 if(cat
& (1<<(time_get_wchar__Getcat(NULL
, NULL
)-1))) {
11720 t
= time_get_wchar_use_facet(loc
);
11722 t
= operator_new(sizeof(time_get_wchar
));
11723 time_get_wchar_ctor_locinfo(t
, locinfo
, 0);
11725 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_get_wchar_id
));
11728 if(cat
& (1<<(time_put_wchar__Getcat(NULL
, NULL
)-1))) {
11732 t
= time_put_wchar_use_facet(loc
);
11734 t
= operator_new(sizeof(time_put
));
11735 time_put_wchar_ctor_locinfo(t
, locinfo
, 0);
11737 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_put_wchar_id
));
11740 if(cat
& (1<<(codecvt_wchar__Getcat(NULL
, NULL
)-1))) {
11741 codecvt_wchar
*codecvt
;
11744 codecvt
= codecvt_wchar_use_facet(loc
);
11746 codecvt
= operator_new(sizeof(codecvt_wchar
));
11747 codecvt_wchar_ctor_locinfo(codecvt
, locinfo
, 0);
11749 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_wchar_id
));
11753 /* ?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
11754 /* ?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
11755 /* List of missing facets:
11756 * messages, money_get, money_put, moneypunct, moneypunct
11758 void __cdecl
locale__Locimp__Makexloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
11760 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
11762 if(cat
& (1<<(ctype_char__Getcat(NULL
, NULL
)-1))) {
11766 ctype
= ctype_char_use_facet(loc
);
11768 ctype
= operator_new(sizeof(ctype_char
));
11769 ctype_char_ctor_locinfo(ctype
, locinfo
, 0);
11771 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_char_id
));
11774 if(cat
& (1<<(num_get_char__Getcat(NULL
, NULL
)-1))) {
11778 numget
= num_get_char_use_facet(loc
);
11780 numget
= operator_new(sizeof(num_get
));
11781 num_get_char_ctor_locinfo(numget
, locinfo
, 0);
11783 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_char_id
));
11786 if(cat
& (1<<(num_put_char__Getcat(NULL
, NULL
)-1))) {
11790 numput
= num_put_char_use_facet(loc
);
11792 numput
= operator_new(sizeof(num_put
));
11793 num_put_char_ctor_locinfo(numput
, locinfo
, 0);
11795 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_char_id
));
11798 if(cat
& (1<<(numpunct_char__Getcat(NULL
, NULL
)-1))) {
11799 numpunct_char
*numpunct
;
11802 numpunct
= numpunct_char_use_facet(loc
);
11804 numpunct
= operator_new(sizeof(numpunct_char
));
11805 numpunct_char_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
11807 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_char_id
));
11810 if(cat
& (1<<(collate_char__Getcat(NULL
, NULL
)-1))) {
11814 c
= collate_char_use_facet(loc
);
11816 c
= operator_new(sizeof(collate
));
11817 collate_char_ctor_locinfo(c
, locinfo
, 0);
11819 locale__Locimp__Addfac(locimp
, &c
->facet
, locale_id_operator_size_t(&collate_char_id
));
11822 if(cat
& (1<<(time_get_char__Getcat(NULL
, NULL
)-1))) {
11826 t
= time_get_char_use_facet(loc
);
11828 t
= operator_new(sizeof(time_get_char
));
11829 time_get_char_ctor_locinfo(t
, locinfo
, 0);
11831 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_get_char_id
));
11834 if(cat
& (1<<(time_put_char__Getcat(NULL
, NULL
)-1))) {
11838 t
= time_put_char_use_facet(loc
);
11840 t
= operator_new(sizeof(time_put
));
11841 time_put_char_ctor_locinfo(t
, locinfo
, 0);
11843 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_put_char_id
));
11846 if(cat
& (1<<(codecvt_char__Getcat(NULL
, NULL
)-1))) {
11847 codecvt_char
*codecvt
;
11850 codecvt
= codecvt_char_use_facet(loc
);
11852 codecvt
= operator_new(sizeof(codecvt_char
));
11853 codecvt_char_ctor_locinfo(codecvt
, locinfo
, 0);
11855 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_char_id
));
11859 /* ?_Makeloc@_Locimp@locale@std@@CAPAV123@ABV_Locinfo@3@HPAV123@PBV23@@Z */
11860 /* ?_Makeloc@_Locimp@locale@std@@CAPEAV123@AEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
11861 locale__Locimp
* __cdecl
locale__Locimp__Makeloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
11863 TRACE("(%p %d %p %p)\n", locinfo
, cat
, locimp
, loc
);
11865 locale__Locimp__Makexloc(locinfo
, cat
, locimp
, loc
);
11866 locale__Locimp__Makewloc(locinfo
, cat
, locimp
, loc
);
11867 locale__Locimp__Makeushloc(locinfo
, cat
, locimp
, loc
);
11869 locimp
->catmask
|= cat
;
11870 locale_string_char_assign(&locimp
->name
, &locinfo
->newlocname
);
11874 /* ??0locale@std@@AAE@PAV_Locimp@01@@Z */
11875 /* ??0locale@std@@AEAA@PEAV_Locimp@01@@Z */
11876 DEFINE_THISCALL_WRAPPER(locale_ctor_locimp
, 8)
11877 locale
* __thiscall
locale_ctor_locimp(locale
*this, locale__Locimp
*locimp
)
11879 TRACE("(%p %p)\n", this, locimp
);
11880 /* Don't change locimp reference counter */
11881 this->ptr
= locimp
;
11885 /* ?_Init@locale@std@@CAPAV_Locimp@12@XZ */
11886 /* ?_Init@locale@std@@CAPEAV_Locimp@12@XZ */
11887 locale__Locimp
* __cdecl
locale__Init(void)
11893 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
11894 if(global_locale
) {
11895 _Lockit_dtor(&lock
);
11896 return global_locale
;
11899 global_locale
= operator_new(sizeof(locale__Locimp
));
11900 locale__Locimp_ctor(global_locale
);
11901 global_locale
->catmask
= (1<<(LC_MAX
+1))-1;
11902 locale_string_char_dtor(&global_locale
->name
);
11903 locale_string_char_ctor_cstr(&global_locale
->name
, "C");
11905 locale__Locimp__Clocptr
= global_locale
;
11906 global_locale
->facet
.refs
++;
11907 locale_ctor_locimp(&classic_locale
, locale__Locimp__Clocptr
);
11908 _Lockit_dtor(&lock
);
11910 return global_locale
;
11913 /* ?_Init@locale@std@@CAPAV_Locimp@12@_N@Z */
11914 /* ?_Init@locale@std@@CAPEAV_Locimp@12@_N@Z */
11915 locale__Locimp
* __cdecl
locale__Init_ref(bool inc_ref
)
11917 locale__Locimp
*ret
;
11920 TRACE("(%x)\n", inc_ref
);
11922 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
11923 if(inc_ref
&& global_locale
) {
11924 call_locale_facet__Incref(&global_locale
->facet
);
11925 _Lockit_dtor(&lock
);
11926 return global_locale
;
11929 ret
= locale__Init();
11930 _Lockit_dtor(&lock
);
11934 /* ?_Iscloc@locale@std@@QBE_NXZ */
11935 /* ?_Iscloc@locale@std@@QEBA_NXZ */
11936 DEFINE_THISCALL_WRAPPER(locale__Iscloc
, 4)
11937 bool __thiscall
locale__Iscloc(const locale
*this)
11939 TRACE("(%p)\n", this);
11940 return this->ptr
== locale__Locimp__Clocptr
;
11943 /* ??0locale@std@@QAE@ABV01@0H@Z */
11944 /* ??0locale@std@@QEAA@AEBV01@0H@Z */
11945 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_locale
, 16)
11946 locale
* __thiscall
locale_ctor_locale_locale(locale
*this, const locale
*loc
, const locale
*other
, category cat
)
11950 TRACE("(%p %p %p %d)\n", this, loc
, other
, cat
);
11952 this->ptr
= operator_new(sizeof(locale__Locimp
));
11953 locale__Locimp_copy_ctor(this->ptr
, loc
->ptr
);
11955 _Locinfo_ctor_cat_cstr(&locinfo
, loc
->ptr
->catmask
, locale_string_char_c_str(&loc
->ptr
->name
));
11956 _Locinfo__Addcats(&locinfo
, cat
& other
->ptr
->catmask
, locale_string_char_c_str(&other
->ptr
->name
));
11957 locale__Locimp__Makeloc(&locinfo
, cat
, this->ptr
, other
);
11958 _Locinfo_dtor(&locinfo
);
11963 /* ??0locale@std@@QAE@ABV01@@Z */
11964 /* ??0locale@std@@QEAA@AEBV01@@Z */
11965 DEFINE_THISCALL_WRAPPER(locale_copy_ctor
, 8)
11966 locale
* __thiscall
locale_copy_ctor(locale
*this, const locale
*copy
)
11968 TRACE("(%p %p)\n", this, copy
);
11969 this->ptr
= copy
->ptr
;
11970 call_locale_facet__Incref(&this->ptr
->facet
);
11974 /* ??0locale@std@@QAE@ABV01@PBDH@Z */
11975 /* ??0locale@std@@QEAA@AEBV01@PEBDH@Z */
11976 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_cstr
, 16)
11977 locale
* __thiscall
locale_ctor_locale_cstr(locale
*this, const locale
*loc
, const char *locname
, category cat
)
11981 TRACE("(%p %p %s %d)\n", this, loc
, locname
, cat
);
11983 _Locinfo_ctor_cat_cstr(&locinfo
, cat
, locname
);
11984 if(!memcmp(locale_string_char_c_str(&locinfo
.newlocname
), "*", 2)) {
11985 _Locinfo_dtor(&locinfo
);
11986 operator_delete(this->ptr
);
11987 _Xruntime_error("bad locale name");
11990 this->ptr
= operator_new(sizeof(locale__Locimp
));
11991 locale__Locimp_copy_ctor(this->ptr
, loc
->ptr
);
11993 locale__Locimp__Makeloc(&locinfo
, cat
, this->ptr
, NULL
);
11994 _Locinfo_dtor(&locinfo
);
11998 /* ??0locale@std@@QAE@PBDH@Z */
11999 /* ??0locale@std@@QEAA@PEBDH@Z */
12000 DEFINE_THISCALL_WRAPPER(locale_ctor_cstr
, 12)
12001 locale
* __thiscall
locale_ctor_cstr(locale
*this, const char *locname
, category cat
)
12005 TRACE("(%p %s %d)\n", this, locname
, cat
);
12007 this->ptr
= operator_new(sizeof(locale__Locimp
));
12008 locale__Locimp_ctor(this->ptr
);
12012 _Locinfo_ctor_cat_cstr(&locinfo
, cat
, locname
);
12013 if(!memcmp(locale_string_char_c_str(&locinfo
.newlocname
), "*", 2)) {
12014 _Locinfo_dtor(&locinfo
);
12015 operator_delete(this->ptr
);
12016 _Xruntime_error("bad locale name");
12019 locale__Locimp__Makeloc(&locinfo
, cat
, this->ptr
, NULL
);
12020 _Locinfo_dtor(&locinfo
);
12025 /* ??0locale@std@@QAE@W4_Uninitialized@1@@Z */
12026 /* ??0locale@std@@QEAA@W4_Uninitialized@1@@Z */
12027 DEFINE_THISCALL_WRAPPER(locale_ctor_uninitialized
, 8)
12028 locale
* __thiscall
locale_ctor_uninitialized(locale
*this, int uninitialized
)
12030 TRACE("(%p)\n", this);
12035 /* ??0locale@std@@QAE@XZ */
12036 /* ??0locale@std@@QEAA@XZ */
12037 DEFINE_THISCALL_WRAPPER(locale_ctor
, 4)
12038 locale
* __thiscall
locale_ctor(locale
*this)
12040 TRACE("(%p)\n", this);
12041 this->ptr
= locale__Init();
12042 call_locale_facet__Incref(&this->ptr
->facet
);
12046 /* ??1locale@std@@QAE@XZ */
12047 /* ??1locale@std@@QEAA@XZ */
12048 DEFINE_THISCALL_WRAPPER(locale_dtor
, 4)
12049 void __thiscall
locale_dtor(locale
*this)
12051 TRACE("(%p)\n", this);
12052 if(this->ptr
&& call_locale_facet__Decref(&this->ptr
->facet
))
12054 locale__Locimp_dtor(this->ptr
);
12055 operator_delete(this->ptr
);
12059 /* ??4locale@std@@QAEAAV01@ABV01@@Z */
12060 /* ??4locale@std@@QEAAAEAV01@AEBV01@@Z */
12061 DEFINE_THISCALL_WRAPPER(locale_operator_assign
, 8)
12062 locale
* __thiscall
locale_operator_assign(locale
*this, const locale
*loc
)
12064 FIXME("(%p %p) stub\n", this, loc
);
12068 /* ??8locale@std@@QBE_NABV01@@Z */
12069 /* ??8locale@std@@QEBA_NAEBV01@@Z */
12070 DEFINE_THISCALL_WRAPPER(locale_operator_equal
, 8)
12071 bool __thiscall
locale_operator_equal(const locale
*this, const locale
*loc
)
12073 FIXME("(%p %p) stub\n", this, loc
);
12077 /* ??9locale@std@@QBE_NABV01@@Z */
12078 /* ??9locale@std@@QEBA_NAEBV01@@Z */
12079 DEFINE_THISCALL_WRAPPER(locale_operator_not_equal
, 8)
12080 bool __thiscall
locale_operator_not_equal(const locale
*this, locale
const *loc
)
12082 FIXME("(%p %p) stub\n", this, loc
);
12086 /* ?_Addfac@locale@std@@QAEAAV12@PAVfacet@12@II@Z */
12087 /* ?_Addfac@locale@std@@QEAAAEAV12@PEAVfacet@12@_K1@Z */
12088 DEFINE_THISCALL_WRAPPER(locale__Addfac
, 16)
12089 locale
* __thiscall
locale__Addfac(locale
*this, locale_facet
*facet
, size_t id
, size_t catmask
)
12091 TRACE("(%p %p %Iu %Iu)\n", this, facet
, id
, catmask
);
12093 if(this->ptr
->facet
.refs
> 1) {
12094 locale__Locimp
*new_ptr
= operator_new(sizeof(locale__Locimp
));
12095 locale__Locimp_copy_ctor(new_ptr
, this->ptr
);
12096 call_locale_facet__Decref(&this->ptr
->facet
);
12097 this->ptr
= new_ptr
;
12100 locale__Locimp__Addfac(this->ptr
, facet
, id
);
12103 locale_string_char_dtor(&this->ptr
->name
);
12104 locale_string_char_ctor_cstr(&this->ptr
->name
, "*");
12109 /* ?_Getfacet@locale@std@@QBEPBVfacet@12@I_N@Z */
12110 /* ?_Getfacet@locale@std@@QEBAPEBVfacet@12@_K_N@Z */
12111 DEFINE_THISCALL_WRAPPER(locale__Getfacet_bool
, 12)
12112 const locale_facet
* __thiscall
locale__Getfacet_bool(const locale
*this,
12113 size_t id
, bool allow_transparent
)
12117 TRACE("(%p %Iu)\n", this, id
);
12119 fac
= id
< this->ptr
->facet_cnt
? this->ptr
->facetvec
[id
] : NULL
;
12120 if(fac
|| !this->ptr
->transparent
|| !allow_transparent
)
12123 return id
< global_locale
->facet_cnt
? global_locale
->facetvec
[id
] : NULL
;
12126 /* ?_Getfacet@locale@std@@QBEPBVfacet@12@I@Z */
12127 /* ?_Getfacet@locale@std@@QEBAPEBVfacet@12@_K@Z */
12128 DEFINE_THISCALL_WRAPPER(locale__Getfacet
, 8)
12129 const locale_facet
* __thiscall
locale__Getfacet(const locale
*this, size_t id
)
12131 return locale__Getfacet_bool( this, id
, TRUE
);
12134 /* ?_Getgloballocale@locale@std@@CAPAV_Locimp@12@XZ */
12135 /* ?_Getgloballocale@locale@std@@CAPEAV_Locimp@12@XZ */
12136 locale__Locimp
* __cdecl
locale__Getgloballocale(void)
12139 return global_locale
;
12142 /* ?_Setgloballocale@locale@std@@CAXPAX@Z */
12143 /* ?_Setgloballocale@locale@std@@CAXPEAX@Z */
12144 void __cdecl
locale__Setgloballocale(void *locimp
)
12146 TRACE("(%p)\n", locimp
);
12147 global_locale
= locimp
;
12150 /* ?classic@locale@std@@SAABV12@XZ */
12151 /* ?classic@locale@std@@SAAEBV12@XZ */
12152 const locale
* __cdecl
locale_classic(void)
12156 return &classic_locale
;
12159 /* ?empty@locale@std@@SA?AV12@XZ */
12160 locale
* __cdecl
locale_empty(locale
*ret
)
12166 ret
->ptr
= operator_new(sizeof(locale__Locimp
));
12167 locale__Locimp_ctor_transparent(ret
->ptr
, TRUE
);
12171 /* ?global@locale@std@@SA?AV12@ABV12@@Z */
12172 /* ?global@locale@std@@SA?AV12@AEBV12@@Z */
12173 locale
* __cdecl
locale_global(locale
*ret
, const locale
*loc
)
12178 TRACE("(%p %p)\n", loc
, ret
);
12180 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
12183 if(loc
->ptr
!= global_locale
) {
12184 call_locale_facet__Decref(&global_locale
->facet
);
12185 global_locale
= loc
->ptr
;
12186 call_locale_facet__Incref(&global_locale
->facet
);
12188 for(i
=LC_ALL
+1; i
<=LC_MAX
; i
++) {
12189 if((global_locale
->catmask
& (1<<(i
-1))) == 0)
12191 setlocale(i
, locale_string_char_c_str(&global_locale
->name
));
12194 _Lockit_dtor(&lock
);
12198 #if _MSVCP_VER < 100
12200 /* ?_Getname@_Locinfo@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
12201 /* ?_Getname@_Locinfo@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
12202 DEFINE_THISCALL_WRAPPER(_Locinfo__Getname
, 8)
12203 basic_string_char
* __thiscall
_Locinfo__Getname(const _Locinfo
*this, basic_string_char
*ret
)
12205 TRACE("(%p)\n", this);
12207 MSVCP_basic_string_char_copy_ctor(ret
, &this->newlocname
);
12211 /* ?name@locale@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
12212 /* ?name@locale@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
12213 DEFINE_THISCALL_WRAPPER(locale_name
, 8)
12214 basic_string_char
* __thiscall
locale_name(const locale
*this, basic_string_char
*ret
)
12216 TRACE( "(%p)\n", this);
12217 MSVCP_basic_string_char_copy_ctor(ret
, &this->ptr
->name
);
12223 /* ?_Getname@_Locinfo@std@@QBEPBDXZ */
12224 /* ?_Getname@_Locinfo@std@@QEBAPEBDXZ */
12225 DEFINE_THISCALL_WRAPPER(_Locinfo__Getname
, 4)
12226 const char * __thiscall
_Locinfo__Getname( const _Locinfo
*this )
12228 return locale_string_char_c_str( &this->newlocname
);
12231 #endif /* _MSVCP_VER < 100 */
12234 wctrans_t __cdecl
wctrans(const char *property
)
12236 static const char str_tolower
[] = "tolower";
12237 static const char str_toupper
[] = "toupper";
12239 if(!strcmp(property
, str_tolower
))
12241 if(!strcmp(property
, str_toupper
))
12247 wint_t __cdecl
towctrans(wint_t c
, wctrans_t category
)
12250 return towupper(c
);
12251 return towlower(c
);
12254 #if _MSVCP_VER <= 71
12256 wint_t __cdecl
btowc(int c
)
12262 if (c
== EOF
|| _Mbrtowc( &ret
, &ch
, 1, &state
, NULL
) != 1) return WEOF
;
12267 size_t __cdecl
mbrlen(const char *str
, size_t n
, mbstate_t *state
)
12269 static int local_state
;
12271 if (!state
) state
= &local_state
;
12272 return _Mbrtowc( NULL
, str
, n
, state
, NULL
);
12276 size_t __cdecl
mbrtowc(wchar_t *dst
, const char *str
, size_t n
, mbstate_t *state
)
12278 static int local_state
;
12280 if (!state
) state
= &local_state
;
12281 return _Mbrtowc( dst
, str
, n
, state
, NULL
);
12285 size_t __cdecl
mbsrtowcs(wchar_t *dst
, const char **pstr
, size_t n
, mbstate_t *state
)
12287 static int local_state
;
12293 if (!state
) state
= &local_state
;
12295 while (!dst
|| n
> ret
)
12297 int len
= _Mbrtowc( &wc
, src
, 2, state
, NULL
);
12298 if (len
< 0) return -1;
12300 if (dst
) dst
[ret
] = wc
;
12309 int __cdecl
wctob(wint_t wc
)
12311 char ret
[MB_LEN_MAX
];
12313 if (wc
== WEOF
|| _Wcrtomb( ret
, wc
, NULL
, NULL
) != 1) return EOF
;
12318 size_t __cdecl
wcrtomb(char *dst
, wchar_t wc
, mbstate_t *state
)
12320 return _Wcrtomb( dst
, wc
, state
, NULL
);
12324 size_t __cdecl
wcsrtombs(char *dst
, const wchar_t **pstr
, size_t n
, mbstate_t *state
)
12326 const wchar_t *src
;
12327 char buffer
[MB_LEN_MAX
];
12332 while (!dst
|| n
> ret
)
12334 int len
= _Wcrtomb( buffer
, *src
, state
, NULL
);
12335 if (len
<= 0) return -1;
12336 if (n
< ret
+ len
) break;
12337 memcpy( dst
+ ret
, buffer
, len
);
12339 if (!buffer
[0]) break;
12346 int __cdecl
_To_byte(const wchar_t *src
, char *dst
)
12348 TRACE("(%s %p)\n", debugstr_w(src
), dst
);
12349 return WideCharToMultiByte(CP_ACP
, 0, src
, -1, dst
, MAX_PATH
, NULL
, NULL
);
12352 int __cdecl
_To_wide(const char *src
, wchar_t *dst
)
12354 TRACE("(%s %p)\n", debugstr_a(src
), dst
);
12355 return MultiByteToWideChar(CP_ACP
, 0, src
, -1, dst
, MAX_PATH
);
12358 size_t __cdecl
_Strxfrm(char *dest
, char *dest_end
,
12359 const char *src
, const char *src_end
, _Collvec
*coll
)
12361 size_t dest_len
= dest_end
- dest
;
12362 size_t src_len
= src_end
- src
;
12368 TRACE("(%p %p %p %p %p)\n", dest
, dest_end
, src
, src_end
, coll
);
12370 if (coll
) cv
= *coll
;
12373 #if _MSVCP_VER < 110
12376 lcid
= LocaleNameToLCID(cv
.lc_name
, 0);
12379 if (!lcid
&& !cv
.page
)
12381 if (src_len
> dest_len
) return src_len
;
12382 memcpy(dest
, src
, src_len
);
12386 len
= MultiByteToWideChar(cv
.page
, MB_ERR_INVALID_CHARS
, src
, src_len
, NULL
, 0);
12387 if (!len
) return INT_MAX
;
12388 buf
= heap_alloc(len
* sizeof(WCHAR
));
12389 if (!buf
) return INT_MAX
;
12390 MultiByteToWideChar(cv
.page
, MB_ERR_INVALID_CHARS
, src
, src_len
, buf
, len
);
12392 len
= LCMapStringW(lcid
, LCMAP_SORTKEY
, buf
, len
, NULL
, 0);
12393 if (len
<= dest_len
)
12394 LCMapStringW(lcid
, LCMAP_SORTKEY
, buf
, len
, (WCHAR
*)dest
, dest_len
);
12399 size_t __cdecl
_Wcsxfrm(wchar_t *dest
, wchar_t *dest_end
,
12400 const wchar_t *src
, const wchar_t *src_end
, _Collvec
*coll
)
12402 size_t dest_len
= dest_end
- dest
;
12403 size_t src_len
= src_end
- src
;
12408 TRACE("(%p %p %p %p %p)\n", dest
, dest_end
, src
, src_end
, coll
);
12410 if (coll
) cv
= *coll
;
12413 #if _MSVCP_VER < 110
12416 lcid
= LocaleNameToLCID(cv
.lc_name
, 0);
12421 if (src_len
> dest_len
) return src_len
;
12422 memcpy(dest
, src
, src_len
* sizeof(wchar_t));
12426 len
= LCMapStringW(lcid
, LCMAP_SORTKEY
, src
, src_len
, NULL
, 0);
12427 if (!len
) return INT_MAX
;
12428 if (len
> dest_len
) return len
;
12430 LCMapStringW(lcid
, LCMAP_SORTKEY
, src
, src_len
, dest
, dest_len
);
12431 for (i
= len
- 1; i
>= 0; i
--)
12432 dest
[i
] = ((BYTE
*)dest
)[i
];
12436 DEFINE_RTTI_DATA0(_Facet_base
, 0, ".?AV_Facet_base@std@@")
12437 DEFINE_RTTI_DATA0(locale_facet
, 0, ".?AVfacet@locale@std@@")
12438 DEFINE_RTTI_DATA1(locale__Locimp
, 0, &locale_facet_rtti_base_descriptor
, ".?AV_Locimp@locale@std@@")
12439 DEFINE_RTTI_DATA1(collate_char
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@D@std@@")
12440 DEFINE_RTTI_DATA1(collate_wchar
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@_W@std@@")
12441 DEFINE_RTTI_DATA1(collate_short
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@G@std@@")
12442 DEFINE_RTTI_DATA1(ctype_base
, 0, &locale_facet_rtti_base_descriptor
, ".?AUctype_base@std@@")
12443 DEFINE_RTTI_DATA2(ctype_char
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@D@std@@")
12444 DEFINE_RTTI_DATA2(ctype_wchar
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@_W@std@@")
12445 DEFINE_RTTI_DATA2(ctype_short
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@G@std@@")
12446 DEFINE_RTTI_DATA1(codecvt_base
, 0, &locale_facet_rtti_base_descriptor
, ".?AVcodecvt_base@std@@")
12447 #if _MSVCP_VER >= 140
12448 DEFINE_RTTI_DATA2(codecvt_char
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@DDU_Mbstatet@@@std@@")
12449 DEFINE_RTTI_DATA2(codecvt_wchar
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@_WDU_Mbstatet@@@std@@")
12450 DEFINE_RTTI_DATA2(codecvt_short
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@GDU_Mbstatet@@@std@@")
12452 DEFINE_RTTI_DATA2(codecvt_char
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@DDH@std@@")
12453 DEFINE_RTTI_DATA2(codecvt_wchar
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@_WDH@std@@")
12454 DEFINE_RTTI_DATA2(codecvt_short
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@GDH@std@@")
12456 DEFINE_RTTI_DATA1(numpunct_char
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@D@std@@")
12457 DEFINE_RTTI_DATA1(numpunct_wchar
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@_W@std@@")
12458 DEFINE_RTTI_DATA1(numpunct_short
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@G@std@@")
12459 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@@")
12460 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@@")
12461 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@@")
12462 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@@")
12463 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@@")
12464 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@@")
12465 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@@")
12466 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@@")
12467 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@@")
12468 DEFINE_RTTI_DATA1(time_base
, 0, &locale_facet_rtti_base_descriptor
, ".?AUtime_base@std@@")
12469 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@@")
12470 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@@")
12472 __ASM_BLOCK_BEGIN(locale_vtables
)
12473 __ASM_VTABLE(_Facet_base
,
12474 VTABLE_ADD_FUNC(locale_facet_vector_dtor
)
12475 VTABLE_ADD_FUNC(locale_facet__Incref
)
12476 VTABLE_ADD_FUNC(locale_facet__Incref
)
12478 __ASM_VTABLE(locale_facet
,
12479 VTABLE_ADD_FUNC(locale_facet_vector_dtor
)
12480 #if _MSVCP_VER >= 110
12481 VTABLE_ADD_FUNC(locale_facet__Incref
)
12482 VTABLE_ADD_FUNC(locale_facet__Decref
)
12485 __ASM_VTABLE(locale__Locimp
,
12486 VTABLE_ADD_FUNC(locale__Locimp_vector_dtor
)
12487 #if _MSVCP_VER >= 110
12488 VTABLE_ADD_FUNC(locale_facet__Incref
)
12489 VTABLE_ADD_FUNC(locale_facet__Decref
)
12492 __ASM_VTABLE(collate_char
,
12493 VTABLE_ADD_FUNC(collate_char_vector_dtor
)
12494 #if _MSVCP_VER >= 110
12495 VTABLE_ADD_FUNC(locale_facet__Incref
)
12496 VTABLE_ADD_FUNC(locale_facet__Decref
)
12498 VTABLE_ADD_FUNC(collate_char_do_compare
)
12499 VTABLE_ADD_FUNC(collate_char_do_transform
)
12500 VTABLE_ADD_FUNC(collate_char_do_hash
));
12501 __ASM_VTABLE(collate_wchar
,
12502 VTABLE_ADD_FUNC(collate_wchar_vector_dtor
)
12503 #if _MSVCP_VER >= 110
12504 VTABLE_ADD_FUNC(locale_facet__Incref
)
12505 VTABLE_ADD_FUNC(locale_facet__Decref
)
12507 VTABLE_ADD_FUNC(collate_wchar_do_compare
)
12508 VTABLE_ADD_FUNC(collate_wchar_do_transform
)
12509 VTABLE_ADD_FUNC(collate_wchar_do_hash
));
12510 __ASM_VTABLE(collate_short
,
12511 VTABLE_ADD_FUNC(collate_wchar_vector_dtor
)
12512 #if _MSVCP_VER >= 110
12513 VTABLE_ADD_FUNC(locale_facet__Incref
)
12514 VTABLE_ADD_FUNC(locale_facet__Decref
)
12516 VTABLE_ADD_FUNC(collate_wchar_do_compare
)
12517 VTABLE_ADD_FUNC(collate_wchar_do_transform
)
12518 VTABLE_ADD_FUNC(collate_wchar_do_hash
));
12519 __ASM_VTABLE(ctype_base
,
12520 VTABLE_ADD_FUNC(ctype_base_vector_dtor
)
12521 #if _MSVCP_VER >= 110
12522 VTABLE_ADD_FUNC(locale_facet__Incref
)
12523 VTABLE_ADD_FUNC(locale_facet__Decref
)
12526 __ASM_VTABLE(ctype_char
,
12527 VTABLE_ADD_FUNC(ctype_char_vector_dtor
)
12528 #if _MSVCP_VER >= 110
12529 VTABLE_ADD_FUNC(locale_facet__Incref
)
12530 VTABLE_ADD_FUNC(locale_facet__Decref
)
12532 VTABLE_ADD_FUNC(ctype_char_do_tolower
)
12533 VTABLE_ADD_FUNC(ctype_char_do_tolower_ch
)
12534 VTABLE_ADD_FUNC(ctype_char_do_toupper
)
12535 VTABLE_ADD_FUNC(ctype_char_do_toupper_ch
)
12536 VTABLE_ADD_FUNC(ctype_char_do_widen
)
12537 VTABLE_ADD_FUNC(ctype_char_do_widen_ch
)
12538 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
12539 VTABLE_ADD_FUNC(ctype_char__Do_widen_s
)
12540 VTABLE_ADD_FUNC(ctype_char_do_narrow
)
12541 VTABLE_ADD_FUNC(ctype_char_do_narrow_ch
)
12542 VTABLE_ADD_FUNC(ctype_char__Do_narrow_s
)
12544 VTABLE_ADD_FUNC(ctype_char_do_narrow
)
12545 VTABLE_ADD_FUNC(ctype_char_do_narrow_ch
)
12548 __ASM_VTABLE(ctype_wchar
,
12549 VTABLE_ADD_FUNC(ctype_wchar_vector_dtor
)
12550 #if _MSVCP_VER >= 110
12551 VTABLE_ADD_FUNC(locale_facet__Incref
)
12552 VTABLE_ADD_FUNC(locale_facet__Decref
)
12554 VTABLE_ADD_FUNC(ctype_wchar_do_is
)
12555 VTABLE_ADD_FUNC(ctype_wchar_do_is_ch
)
12556 VTABLE_ADD_FUNC(ctype_wchar_do_scan_is
)
12557 VTABLE_ADD_FUNC(ctype_wchar_do_scan_not
)
12558 VTABLE_ADD_FUNC(ctype_wchar_do_tolower
)
12559 VTABLE_ADD_FUNC(ctype_wchar_do_tolower_ch
)
12560 VTABLE_ADD_FUNC(ctype_wchar_do_toupper
)
12561 VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch
)
12562 VTABLE_ADD_FUNC(ctype_wchar_do_widen
)
12563 VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch
)
12564 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
12565 VTABLE_ADD_FUNC(ctype_wchar__Do_widen_s
)
12566 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
12567 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
)
12568 VTABLE_ADD_FUNC(ctype_wchar__Do_narrow_s
)
12570 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
12571 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
)
12574 __ASM_VTABLE(ctype_short
,
12575 VTABLE_ADD_FUNC(ctype_wchar_vector_dtor
)
12576 #if _MSVCP_VER >= 110
12577 VTABLE_ADD_FUNC(locale_facet__Incref
)
12578 VTABLE_ADD_FUNC(locale_facet__Decref
)
12580 VTABLE_ADD_FUNC(ctype_wchar_do_is
)
12581 VTABLE_ADD_FUNC(ctype_wchar_do_is_ch
)
12582 VTABLE_ADD_FUNC(ctype_wchar_do_scan_is
)
12583 VTABLE_ADD_FUNC(ctype_wchar_do_scan_not
)
12584 VTABLE_ADD_FUNC(ctype_wchar_do_tolower
)
12585 VTABLE_ADD_FUNC(ctype_wchar_do_tolower_ch
)
12586 VTABLE_ADD_FUNC(ctype_wchar_do_toupper
)
12587 VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch
)
12588 VTABLE_ADD_FUNC(ctype_wchar_do_widen
)
12589 VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch
)
12590 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
12591 VTABLE_ADD_FUNC(ctype_wchar__Do_widen_s
)
12592 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
12593 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
)
12594 VTABLE_ADD_FUNC(ctype_wchar__Do_narrow_s
)
12596 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
12597 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
)
12600 __ASM_VTABLE(codecvt_base
,
12601 VTABLE_ADD_FUNC(codecvt_base_vector_dtor
)
12602 #if _MSVCP_VER >= 110
12603 VTABLE_ADD_FUNC(locale_facet__Incref
)
12604 VTABLE_ADD_FUNC(locale_facet__Decref
)
12606 VTABLE_ADD_FUNC(codecvt_base_do_always_noconv
)
12607 VTABLE_ADD_FUNC(codecvt_base_do_max_length
)
12608 VTABLE_ADD_FUNC(codecvt_base_do_encoding
));
12609 __ASM_VTABLE(codecvt_char
,
12610 VTABLE_ADD_FUNC(codecvt_char_vector_dtor
)
12611 #if _MSVCP_VER >= 110
12612 VTABLE_ADD_FUNC(locale_facet__Incref
)
12613 VTABLE_ADD_FUNC(locale_facet__Decref
)
12614 VTABLE_ADD_FUNC(codecvt_char_do_always_noconv
)
12616 VTABLE_ADD_FUNC(codecvt_base_do_always_noconv
)
12618 VTABLE_ADD_FUNC(codecvt_base_do_max_length
)
12619 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
12620 VTABLE_ADD_FUNC(codecvt_char_do_in
)
12621 VTABLE_ADD_FUNC(codecvt_char_do_out
)
12622 VTABLE_ADD_FUNC(codecvt_char_do_unshift
)
12623 VTABLE_ADD_FUNC(codecvt_char_do_length
));
12624 __ASM_VTABLE(codecvt_wchar
,
12625 VTABLE_ADD_FUNC(codecvt_wchar_vector_dtor
)
12626 #if _MSVCP_VER >= 110
12627 VTABLE_ADD_FUNC(locale_facet__Incref
)
12628 VTABLE_ADD_FUNC(locale_facet__Decref
)
12630 VTABLE_ADD_FUNC(codecvt_wchar_do_always_noconv
)
12631 VTABLE_ADD_FUNC(codecvt_wchar_do_max_length
)
12632 #if _MSVCP_VER >= 90 && _MSVCP_VER <= 100
12633 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
12635 VTABLE_ADD_FUNC(codecvt_wchar_do_encoding
)
12637 VTABLE_ADD_FUNC(codecvt_wchar_do_in
)
12638 VTABLE_ADD_FUNC(codecvt_wchar_do_out
)
12639 VTABLE_ADD_FUNC(codecvt_wchar_do_unshift
)
12640 VTABLE_ADD_FUNC(codecvt_wchar_do_length
));
12641 __ASM_VTABLE(codecvt_short
,
12642 VTABLE_ADD_FUNC(codecvt_wchar_vector_dtor
)
12643 #if _MSVCP_VER >= 110
12644 VTABLE_ADD_FUNC(locale_facet__Incref
)
12645 VTABLE_ADD_FUNC(locale_facet__Decref
)
12647 VTABLE_ADD_FUNC(codecvt_wchar_do_always_noconv
)
12648 VTABLE_ADD_FUNC(codecvt_wchar_do_max_length
)
12649 #if _MSVCP_VER >= 90 && _MSVCP_VER <= 100
12650 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
12652 VTABLE_ADD_FUNC(codecvt_wchar_do_encoding
)
12654 VTABLE_ADD_FUNC(codecvt_wchar_do_in
)
12655 VTABLE_ADD_FUNC(codecvt_wchar_do_out
)
12656 VTABLE_ADD_FUNC(codecvt_wchar_do_unshift
)
12657 VTABLE_ADD_FUNC(codecvt_wchar_do_length
));
12658 __ASM_VTABLE(numpunct_char
,
12659 VTABLE_ADD_FUNC(numpunct_char_vector_dtor
)
12660 #if _MSVCP_VER >= 110
12661 VTABLE_ADD_FUNC(locale_facet__Incref
)
12662 VTABLE_ADD_FUNC(locale_facet__Decref
)
12664 VTABLE_ADD_FUNC(numpunct_char_do_decimal_point
)
12665 VTABLE_ADD_FUNC(numpunct_char_do_thousands_sep
)
12666 VTABLE_ADD_FUNC(numpunct_char_do_grouping
)
12667 VTABLE_ADD_FUNC(numpunct_char_do_falsename
)
12668 VTABLE_ADD_FUNC(numpunct_char_do_truename
));
12669 __ASM_VTABLE(numpunct_wchar
,
12670 VTABLE_ADD_FUNC(numpunct_wchar_vector_dtor
)
12671 #if _MSVCP_VER >= 110
12672 VTABLE_ADD_FUNC(locale_facet__Incref
)
12673 VTABLE_ADD_FUNC(locale_facet__Decref
)
12675 VTABLE_ADD_FUNC(numpunct_wchar_do_decimal_point
)
12676 VTABLE_ADD_FUNC(numpunct_wchar_do_thousands_sep
)
12677 VTABLE_ADD_FUNC(numpunct_wchar_do_grouping
)
12678 VTABLE_ADD_FUNC(numpunct_wchar_do_falsename
)
12679 VTABLE_ADD_FUNC(numpunct_wchar_do_truename
));
12680 __ASM_VTABLE(numpunct_short
,
12681 VTABLE_ADD_FUNC(numpunct_wchar_vector_dtor
)
12682 #if _MSVCP_VER >= 110
12683 VTABLE_ADD_FUNC(locale_facet__Incref
)
12684 VTABLE_ADD_FUNC(locale_facet__Decref
)
12686 VTABLE_ADD_FUNC(numpunct_wchar_do_decimal_point
)
12687 VTABLE_ADD_FUNC(numpunct_wchar_do_thousands_sep
)
12688 VTABLE_ADD_FUNC(numpunct_wchar_do_grouping
)
12689 VTABLE_ADD_FUNC(numpunct_wchar_do_falsename
)
12690 VTABLE_ADD_FUNC(numpunct_wchar_do_truename
));
12691 __ASM_VTABLE(num_get_char
,
12692 VTABLE_ADD_FUNC(num_get_char_vector_dtor
)
12693 #if _MSVCP_VER >= 110
12694 VTABLE_ADD_FUNC(locale_facet__Incref
)
12695 VTABLE_ADD_FUNC(locale_facet__Decref
)
12697 VTABLE_ADD_FUNC(num_get_char_do_get_void
)
12698 VTABLE_ADD_FUNC(num_get_char_do_get_double
)
12699 VTABLE_ADD_FUNC(num_get_char_do_get_double
)
12700 VTABLE_ADD_FUNC(num_get_char_do_get_float
)
12701 VTABLE_ADD_FUNC(num_get_char_do_get_uint64
)
12702 VTABLE_ADD_FUNC(num_get_char_do_get_int64
)
12703 VTABLE_ADD_FUNC(num_get_char_do_get_ulong
)
12704 VTABLE_ADD_FUNC(num_get_char_do_get_long
)
12705 VTABLE_ADD_FUNC(num_get_char_do_get_uint
)
12706 VTABLE_ADD_FUNC(num_get_char_do_get_ushort
)
12707 VTABLE_ADD_FUNC(num_get_char_do_get_bool
));
12708 __ASM_VTABLE(num_get_short
,
12709 VTABLE_ADD_FUNC(num_get_wchar_vector_dtor
)
12710 #if _MSVCP_VER >= 110
12711 VTABLE_ADD_FUNC(locale_facet__Incref
)
12712 VTABLE_ADD_FUNC(locale_facet__Decref
)
12714 VTABLE_ADD_FUNC(num_get_short_do_get_void
)
12715 VTABLE_ADD_FUNC(num_get_short_do_get_double
)
12716 VTABLE_ADD_FUNC(num_get_short_do_get_double
)
12717 VTABLE_ADD_FUNC(num_get_short_do_get_float
)
12718 VTABLE_ADD_FUNC(num_get_short_do_get_uint64
)
12719 VTABLE_ADD_FUNC(num_get_short_do_get_int64
)
12720 VTABLE_ADD_FUNC(num_get_short_do_get_ulong
)
12721 VTABLE_ADD_FUNC(num_get_short_do_get_long
)
12722 VTABLE_ADD_FUNC(num_get_short_do_get_uint
)
12723 VTABLE_ADD_FUNC(num_get_short_do_get_ushort
)
12724 VTABLE_ADD_FUNC(num_get_short_do_get_bool
));
12725 __ASM_VTABLE(num_get_wchar
,
12726 VTABLE_ADD_FUNC(num_get_wchar_vector_dtor
)
12727 #if _MSVCP_VER >= 110
12728 VTABLE_ADD_FUNC(locale_facet__Incref
)
12729 VTABLE_ADD_FUNC(locale_facet__Decref
)
12731 VTABLE_ADD_FUNC(num_get_wchar_do_get_void
)
12732 VTABLE_ADD_FUNC(num_get_wchar_do_get_double
)
12733 VTABLE_ADD_FUNC(num_get_wchar_do_get_double
)
12734 VTABLE_ADD_FUNC(num_get_wchar_do_get_float
)
12735 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint64
)
12736 VTABLE_ADD_FUNC(num_get_wchar_do_get_int64
)
12737 VTABLE_ADD_FUNC(num_get_wchar_do_get_ulong
)
12738 VTABLE_ADD_FUNC(num_get_wchar_do_get_long
)
12739 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint
)
12740 VTABLE_ADD_FUNC(num_get_wchar_do_get_ushort
)
12741 VTABLE_ADD_FUNC(num_get_wchar_do_get_bool
));
12742 __ASM_VTABLE(num_put_char
,
12743 VTABLE_ADD_FUNC(num_put_char_vector_dtor
)
12744 #if _MSVCP_VER >= 110
12745 VTABLE_ADD_FUNC(locale_facet__Incref
)
12746 VTABLE_ADD_FUNC(locale_facet__Decref
)
12748 VTABLE_ADD_FUNC(num_put_char_do_put_ptr
)
12749 VTABLE_ADD_FUNC(num_put_char_do_put_double
)
12750 VTABLE_ADD_FUNC(num_put_char_do_put_double
)
12751 VTABLE_ADD_FUNC(num_put_char_do_put_uint64
)
12752 VTABLE_ADD_FUNC(num_put_char_do_put_int64
)
12753 VTABLE_ADD_FUNC(num_put_char_do_put_ulong
)
12754 VTABLE_ADD_FUNC(num_put_char_do_put_long
)
12755 VTABLE_ADD_FUNC(num_put_char_do_put_bool
));
12756 __ASM_VTABLE(num_put_wchar
,
12757 VTABLE_ADD_FUNC(num_put_wchar_vector_dtor
)
12758 #if _MSVCP_VER >= 110
12759 VTABLE_ADD_FUNC(locale_facet__Incref
)
12760 VTABLE_ADD_FUNC(locale_facet__Decref
)
12762 VTABLE_ADD_FUNC(num_put_wchar_do_put_ptr
)
12763 VTABLE_ADD_FUNC(num_put_wchar_do_put_double
)
12764 VTABLE_ADD_FUNC(num_put_wchar_do_put_double
)
12765 VTABLE_ADD_FUNC(num_put_wchar_do_put_uint64
)
12766 VTABLE_ADD_FUNC(num_put_wchar_do_put_int64
)
12767 VTABLE_ADD_FUNC(num_put_wchar_do_put_ulong
)
12768 VTABLE_ADD_FUNC(num_put_wchar_do_put_long
)
12769 VTABLE_ADD_FUNC(num_put_wchar_do_put_bool
));
12770 __ASM_VTABLE(num_put_short
,
12771 VTABLE_ADD_FUNC(num_put_wchar_vector_dtor
)
12772 #if _MSVCP_VER >= 110
12773 VTABLE_ADD_FUNC(locale_facet__Incref
)
12774 VTABLE_ADD_FUNC(locale_facet__Decref
)
12776 VTABLE_ADD_FUNC(num_put_short_do_put_ptr
)
12777 VTABLE_ADD_FUNC(num_put_short_do_put_double
)
12778 VTABLE_ADD_FUNC(num_put_short_do_put_double
)
12779 VTABLE_ADD_FUNC(num_put_short_do_put_uint64
)
12780 VTABLE_ADD_FUNC(num_put_short_do_put_int64
)
12781 VTABLE_ADD_FUNC(num_put_short_do_put_ulong
)
12782 VTABLE_ADD_FUNC(num_put_short_do_put_long
)
12783 VTABLE_ADD_FUNC(num_put_short_do_put_bool
));
12784 __ASM_VTABLE(time_put_char
,
12785 VTABLE_ADD_FUNC(time_put_char_vector_dtor
)
12786 #if _MSVCP_VER >= 110
12787 VTABLE_ADD_FUNC(locale_facet__Incref
)
12788 VTABLE_ADD_FUNC(locale_facet__Decref
)
12790 VTABLE_ADD_FUNC(time_put_char_do_put
));
12791 __ASM_VTABLE(time_put_wchar
,
12792 VTABLE_ADD_FUNC(time_put_wchar_vector_dtor
)
12793 #if _MSVCP_VER >= 110
12794 VTABLE_ADD_FUNC(locale_facet__Incref
)
12795 VTABLE_ADD_FUNC(locale_facet__Decref
)
12797 VTABLE_ADD_FUNC(time_put_wchar_do_put
));
12798 __ASM_VTABLE(time_put_short
,
12799 VTABLE_ADD_FUNC(time_put_wchar_vector_dtor
)
12800 #if _MSVCP_VER >= 110
12801 VTABLE_ADD_FUNC(locale_facet__Incref
)
12802 VTABLE_ADD_FUNC(locale_facet__Decref
)
12804 VTABLE_ADD_FUNC(time_put_wchar_do_put
));
12805 __ASM_VTABLE(time_get_char
,
12806 VTABLE_ADD_FUNC(time_get_char_vector_dtor
)
12807 #if _MSVCP_VER >= 110
12808 VTABLE_ADD_FUNC(locale_facet__Incref
)
12809 VTABLE_ADD_FUNC(locale_facet__Decref
)
12811 VTABLE_ADD_FUNC(time_get_char_do_date_order
)
12812 VTABLE_ADD_FUNC(time_get_char_do_get_time
)
12813 VTABLE_ADD_FUNC(time_get_char_do_get_date
)
12814 VTABLE_ADD_FUNC(time_get_char_do_get_weekday
)
12815 VTABLE_ADD_FUNC(time_get_char_do_get_monthname
)
12816 VTABLE_ADD_FUNC(time_get_char_do_get_year
)
12817 #if _MSVCP_VER >= 100
12818 VTABLE_ADD_FUNC(time_get_char_do_get
)
12821 __ASM_VTABLE(time_get_wchar
,
12822 VTABLE_ADD_FUNC(time_get_wchar_vector_dtor
)
12823 #if _MSVCP_VER >= 110
12824 VTABLE_ADD_FUNC(locale_facet__Incref
)
12825 VTABLE_ADD_FUNC(locale_facet__Decref
)
12827 VTABLE_ADD_FUNC(time_get_wchar_do_date_order
)
12828 VTABLE_ADD_FUNC(time_get_wchar_do_get_time
)
12829 VTABLE_ADD_FUNC(time_get_wchar_do_get_date
)
12830 VTABLE_ADD_FUNC(time_get_wchar_do_get_weekday
)
12831 VTABLE_ADD_FUNC(time_get_wchar_do_get_monthname
)
12832 VTABLE_ADD_FUNC(time_get_wchar_do_get_year
)
12833 #if _MSVCP_VER >= 100
12834 VTABLE_ADD_FUNC(time_get_wchar_do_get
)
12839 void init_locale(void *base
)
12842 init__Facet_base_rtti(base
);
12843 init_locale_facet_rtti(base
);
12844 init_locale__Locimp_rtti(base
);
12845 init_collate_char_rtti(base
);
12846 init_collate_wchar_rtti(base
);
12847 init_collate_short_rtti(base
);
12848 init_ctype_base_rtti(base
);
12849 init_ctype_char_rtti(base
);
12850 init_ctype_wchar_rtti(base
);
12851 init_ctype_short_rtti(base
);
12852 init_codecvt_base_rtti(base
);
12853 init_codecvt_char_rtti(base
);
12854 init_codecvt_wchar_rtti(base
);
12855 init_codecvt_short_rtti(base
);
12856 init_numpunct_char_rtti(base
);
12857 init_numpunct_wchar_rtti(base
);
12858 init_numpunct_short_rtti(base
);
12859 init_num_get_char_rtti(base
);
12860 init_num_get_wchar_rtti(base
);
12861 init_num_get_short_rtti(base
);
12862 init_num_put_char_rtti(base
);
12863 init_num_put_wchar_rtti(base
);
12864 init_num_put_short_rtti(base
);
12865 init_time_put_char_rtti(base
);
12866 init_time_put_wchar_rtti(base
);
12867 init_time_put_short_rtti(base
);
12868 init_time_base_rtti(base
);
12869 init_time_get_char_rtti(base
);
12870 init_time_get_wchar_rtti(base
);
12874 void free_locale(void)
12876 facets_elem
*iter
, *safe
;
12878 if(global_locale
) {
12879 locale_dtor(&classic_locale
);
12880 locale__Locimp_dtor(global_locale
);
12881 operator_delete(global_locale
);
12884 LIST_FOR_EACH_ENTRY_SAFE(iter
, safe
, &lazy_facets
, facets_elem
, entry
) {
12885 list_remove(&iter
->entry
);
12886 if(call_locale_facet__Decref(iter
->fac
))
12887 call_locale_facet_vector_dtor(iter
->fac
, 1);
12888 operator_delete(iter
);