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
37 #include "wine/unicode.h"
38 #include "wine/list.h"
39 #include "wine/debug.h"
41 WINE_DEFAULT_DEBUG_CHANNEL(msvcp
);
51 char* __cdecl
_Getdays(void);
52 wchar_t* __cdecl
_W_Getdays(void);
53 char* __cdecl
_Getmonths(void);
54 wchar_t* __cdecl
_W_Getmonths(void);
55 void* __cdecl
_Gettnames(void);
56 unsigned int __cdecl
___lc_codepage_func(void);
57 int __cdecl
___lc_collate_cp_func(void);
58 const unsigned short* __cdecl
__pctype_func(void);
59 const locale_facet
* __thiscall
locale__Getfacet(const locale
*, MSVCP_size_t
);
60 MSVCP_size_t __cdecl
_Strftime(char*, MSVCP_size_t
, const char*,
61 const struct tm
*, struct __lc_time_data
*);
62 const locale
* __cdecl
locale_classic(void);
65 wchar_t ** __cdecl
___lc_locale_name_func(void);
67 LCID
* __cdecl
___lc_handle_func(void);
71 #define locale_string basic_string_char
72 #define locale_string_char_ctor(this) MSVCP_basic_string_char_ctor(this)
73 #define locale_string_char_ctor_cstr(this,str) MSVCP_basic_string_char_ctor_cstr(this,str)
74 #define locale_string_char_copy_ctor(this,copy) MSVCP_basic_string_char_copy_ctor(this,copy)
75 #define locale_string_char_dtor(this) MSVCP_basic_string_char_dtor(this)
76 #define locale_string_char_c_str(this) MSVCP_basic_string_char_c_str(this)
77 #define locale_string_char_assign(this,assign) MSVCP_basic_string_char_assign(this,assign)
79 #define locale_string _Yarn_char
80 #define locale_string_char_ctor(this) _Yarn_char_ctor(this)
81 #define locale_string_char_ctor_cstr(this,str) _Yarn_char_ctor_cstr(this,str)
82 #define locale_string_char_copy_ctor(this,copy) _Yarn_char_copy_ctor(this,copy)
83 #define locale_string_char_dtor(this) _Yarn_char_dtor(this)
84 #define locale_string_char_c_str(this) _Yarn_char_c_str(this)
85 #define locale_string_char_assign(this,assign) _Yarn_char_op_assign(this,assign)
87 #define locale_string_wchar _Yarn_wchar
88 #define locale_string_wchar_ctor(this) _Yarn_wchar_ctor(this)
89 #define locale_string_wchar_dtor(this) _Yarn_wchar_dtor(this)
90 #define locale_string_wchar_c_str(this) _Yarn_wchar__C_str(this)
91 #define locale_string_wchar_assign(this,str) _Yarn_wchar_op_assign_cstr(this,str)
100 typedef struct _locale__Locimp
{
102 locale_facet
**facetvec
;
103 MSVCP_size_t facet_cnt
;
105 MSVCP_bool transparent
;
116 locale_string months
;
117 #if _MSVCP_VER >= 110
118 locale_string_wchar wdays
;
119 locale_string_wchar wmonths
;
121 locale_string oldlocname
;
122 locale_string newlocname
;
130 #if _MSVCP_VER >= 110
142 const char *grouping
;
145 const char *false_name
;
146 const char *true_name
;
151 const char *grouping
;
154 const wchar_t *false_name
;
155 const wchar_t *true_name
;
161 #if _MSVCP_VER <= 100
177 const wchar_t *months
;
182 /* ?_Id_cnt@id@locale@std@@0HA */
183 int locale_id__Id_cnt
= 0;
185 static locale classic_locale
;
187 /* ?_Global@_Locimp@locale@std@@0PAV123@A */
188 /* ?_Global@_Locimp@locale@std@@0PEAV123@EA */
189 locale__Locimp
*global_locale
= NULL
;
191 /* ?_Clocptr@_Locimp@locale@std@@0PAV123@A */
192 /* ?_Clocptr@_Locimp@locale@std@@0PEAV123@EA */
193 locale__Locimp
*locale__Locimp__Clocptr
= NULL
;
195 static char istreambuf_iterator_char_val(istreambuf_iterator_char
*this)
197 if(this->strbuf
&& !this->got
) {
198 int c
= basic_streambuf_char_sgetc(this->strbuf
);
209 static wchar_t istreambuf_iterator_wchar_val(istreambuf_iterator_wchar
*this)
211 if(this->strbuf
&& !this->got
) {
212 unsigned short c
= basic_streambuf_wchar_sgetc(this->strbuf
);
223 static void istreambuf_iterator_char_inc(istreambuf_iterator_char
*this)
225 if(!this->strbuf
|| basic_streambuf_char_sbumpc(this->strbuf
)==EOF
) {
230 istreambuf_iterator_char_val(this);
234 static void istreambuf_iterator_wchar_inc(istreambuf_iterator_wchar
*this)
236 if(!this->strbuf
|| basic_streambuf_wchar_sbumpc(this->strbuf
)==WEOF
) {
241 istreambuf_iterator_wchar_val(this);
245 static void ostreambuf_iterator_char_put(ostreambuf_iterator_char
*this, char ch
)
247 if(this->failed
|| basic_streambuf_char_sputc(this->strbuf
, ch
)==EOF
)
251 static void ostreambuf_iterator_wchar_put(ostreambuf_iterator_wchar
*this, wchar_t ch
)
253 if(this->failed
|| basic_streambuf_wchar_sputc(this->strbuf
, ch
)==WEOF
)
257 /* ??1facet@locale@std@@UAE@XZ */
258 /* ??1facet@locale@std@@UEAA@XZ */
259 /* ??1facet@locale@std@@MAA@XZ */
260 /* ??1facet@locale@std@@MAE@XZ */
261 /* ??1facet@locale@std@@MEAA@XZ */
262 DEFINE_THISCALL_WRAPPER(locale_facet_dtor
, 4)
263 void __thiscall
locale_facet_dtor(locale_facet
*this)
265 TRACE("(%p)\n", this);
268 DEFINE_THISCALL_WRAPPER(locale_facet_vector_dtor
, 8)
269 #define call_locale_facet_vector_dtor(this, flags) CALL_VTBL_FUNC(this, 0, \
270 locale_facet*, (locale_facet*, unsigned int), (this, flags))
271 locale_facet
* __thiscall
locale_facet_vector_dtor(locale_facet
*this, unsigned int flags
)
273 TRACE("(%p %x)\n", this, flags
);
275 /* we have an array, with the number of elements stored before the first object */
276 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
278 for(i
=*ptr
-1; i
>=0; i
--)
279 locale_facet_dtor(this+i
);
280 MSVCRT_operator_delete(ptr
);
282 locale_facet_dtor(this);
284 MSVCRT_operator_delete(this);
295 static struct list lazy_facets
= LIST_INIT(lazy_facets
);
297 /* Not exported from msvcp90 */
298 /* ?facet_Register@facet@locale@std@@CAXPAV123@@Z */
299 /* ?facet_Register@facet@locale@std@@CAXPEAV123@@Z */
300 void __cdecl
locale_facet_register(locale_facet
*add
)
302 facets_elem
*head
= MSVCRT_operator_new(sizeof(*head
));
304 ERR("Out of memory\n");
305 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
309 list_add_head(&lazy_facets
, &head
->entry
);
312 /* Not exported from msvcp90 */
313 /* ?_Register@facet@locale@std@@QAEXXZ */
314 /* ?_Register@facet@locale@std@@QEAAXXZ */
315 DEFINE_THISCALL_WRAPPER(locale_facet__Register
, 4)
316 void __thiscall
locale_facet__Register(locale_facet
*this)
318 TRACE("(%p)\n", this);
319 locale_facet_register(this);
322 /* Not exported from msvcp90 */
323 /* ??_7facet@locale@std@@6B@ */
324 extern const vtable_ptr MSVCP_locale_facet_vtable
;
326 /* ??0id@locale@std@@QAE@I@Z */
327 /* ??0id@locale@std@@QEAA@_K@Z */
328 DEFINE_THISCALL_WRAPPER(locale_id_ctor_id
, 8)
329 locale_id
* __thiscall
locale_id_ctor_id(locale_id
*this, MSVCP_size_t id
)
331 TRACE("(%p %lu)\n", this, id
);
337 /* ??_Fid@locale@std@@QAEXXZ */
338 /* ??_Fid@locale@std@@QEAAXXZ */
339 DEFINE_THISCALL_WRAPPER(locale_id_ctor
, 4)
340 locale_id
* __thiscall
locale_id_ctor(locale_id
*this)
342 TRACE("(%p)\n", this);
348 /* ??Bid@locale@std@@QAEIXZ */
349 /* ??Bid@locale@std@@QEAA_KXZ */
350 DEFINE_THISCALL_WRAPPER(locale_id_operator_size_t
, 4)
351 MSVCP_size_t __thiscall
locale_id_operator_size_t(locale_id
*this)
355 TRACE("(%p)\n", this);
358 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
359 this->id
= ++locale_id__Id_cnt
;
366 /* ?_Id_cnt_func@id@locale@std@@CAAAHXZ */
367 /* ?_Id_cnt_func@id@locale@std@@CAAEAHXZ */
368 int* __cdecl
locale_id__Id_cnt_func(void)
371 return &locale_id__Id_cnt
;
374 /* ??_Ffacet@locale@std@@QAEXXZ */
375 /* ??_Ffacet@locale@std@@QEAAXXZ */
376 DEFINE_THISCALL_WRAPPER(locale_facet_ctor
, 4)
377 locale_facet
* __thiscall
locale_facet_ctor(locale_facet
*this)
379 TRACE("(%p)\n", this);
380 this->vtable
= &MSVCP_locale_facet_vtable
;
385 /* ??0facet@locale@std@@IAE@I@Z */
386 /* ??0facet@locale@std@@IEAA@_K@Z */
387 DEFINE_THISCALL_WRAPPER(locale_facet_ctor_refs
, 8)
388 locale_facet
* __thiscall
locale_facet_ctor_refs(locale_facet
*this, MSVCP_size_t refs
)
390 TRACE("(%p %lu)\n", this, refs
);
391 this->vtable
= &MSVCP_locale_facet_vtable
;
396 /* ?_Incref@facet@locale@std@@QAEXXZ */
397 /* ?_Incref@facet@locale@std@@QEAAXXZ */
398 /* ?_Incref@facet@locale@std@@UAEXXZ */
399 /* ?_Incref@facet@locale@std@@UEAAXXZ */
400 #if _MSVCP_VER >= 110
401 #define call_locale_facet__Incref(this) CALL_VTBL_FUNC(this, 4, void, (locale_facet*), (this))
403 #define call_locale_facet__Incref locale_facet__Incref
405 DEFINE_THISCALL_WRAPPER(locale_facet__Incref
, 4)
406 void __thiscall
locale_facet__Incref(locale_facet
*this)
410 TRACE("(%p)\n", this);
412 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
417 /* ?_Decref@facet@locale@std@@QAEPAV123@XZ */
418 /* ?_Decref@facet@locale@std@@QEAAPEAV123@XZ */
419 /* ?_Decref@facet@locale@std@@UAEPAV_Facet_base@3@XZ */
420 /* ?_Decref@facet@locale@std@@UEAAPEAV_Facet_base@3@XZ */
421 #if _MSVCP_VER >= 110
422 #define call_locale_facet__Decref(this) CALL_VTBL_FUNC(this, 8, \
423 locale_facet*, (locale_facet*), (this))
425 #define call_locale_facet__Decref locale_facet__Decref
427 DEFINE_THISCALL_WRAPPER(locale_facet__Decref
, 4)
428 locale_facet
* __thiscall
locale_facet__Decref(locale_facet
*this)
433 TRACE("(%p)\n", this);
435 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
439 ret
= this->refs
? NULL
: this;
445 /* ?_Getcat@facet@locale@std@@SAIPAPBV123@PBV23@@Z */
446 /* ?_Getcat@facet@locale@std@@SA_KPEAPEBV123@PEBV23@@Z */
447 MSVCP_size_t __cdecl
locale_facet__Getcat(const locale_facet
**facet
, const locale
*loc
)
449 TRACE("(%p %p)\n", facet
, loc
);
453 /* ?_Getcat@facet@locale@std@@SAIPAPBV123@@Z */
454 /* ?_Getcat@facet@locale@std@@SA_KPEAPEBV123@@Z */
455 MSVCP_size_t __cdecl
locale_facet__Getcat_old(const locale_facet
**facet
)
457 TRACE("(%p)\n", facet
);
461 /* ??0_Timevec@std@@QAE@ABV01@@Z */
462 /* ??0_Timevec@std@@QEAA@AEBV01@@Z */
463 /* This copy constructor modifies copied object */
464 DEFINE_THISCALL_WRAPPER(_Timevec_copy_ctor
, 8)
465 _Timevec
* __thiscall
_Timevec_copy_ctor(_Timevec
*this, _Timevec
*copy
)
467 TRACE("(%p %p)\n", this, copy
);
468 this->timeptr
= copy
->timeptr
;
469 copy
->timeptr
= NULL
;
473 /* ??0_Timevec@std@@QAE@PAX@Z */
474 /* ??0_Timevec@std@@QEAA@PEAX@Z */
475 DEFINE_THISCALL_WRAPPER(_Timevec_ctor_timeptr
, 8)
476 _Timevec
* __thiscall
_Timevec_ctor_timeptr(_Timevec
*this, void *timeptr
)
478 TRACE("(%p %p)\n", this, timeptr
);
479 this->timeptr
= timeptr
;
483 /* ??_F_Timevec@std@@QAEXXZ */
484 /* ??_F_Timevec@std@@QEAAXXZ */
485 DEFINE_THISCALL_WRAPPER(_Timevec_ctor
, 4)
486 _Timevec
* __thiscall
_Timevec_ctor(_Timevec
*this)
488 TRACE("(%p)\n", this);
489 this->timeptr
= NULL
;
493 /* ??1_Timevec@std@@QAE@XZ */
494 /* ??1_Timevec@std@@QEAA@XZ */
495 DEFINE_THISCALL_WRAPPER(_Timevec_dtor
, 4)
496 void __thiscall
_Timevec_dtor(_Timevec
*this)
498 TRACE("(%p)\n", this);
502 /* ??4_Timevec@std@@QAEAAV01@ABV01@@Z */
503 /* ??4_Timevec@std@@QEAAAEAV01@AEBV01@@Z */
504 DEFINE_THISCALL_WRAPPER(_Timevec_op_assign
, 8)
505 _Timevec
* __thiscall
_Timevec_op_assign(_Timevec
*this, _Timevec
*right
)
507 TRACE("(%p %p)\n", this, right
);
508 this->timeptr
= right
->timeptr
;
509 right
->timeptr
= NULL
;
513 /* ?_Getptr@_Timevec@std@@QBEPAXXZ */
514 /* ?_Getptr@_Timevec@std@@QEBAPEAXXZ */
515 DEFINE_THISCALL_WRAPPER(_Timevec__Getptr
, 4)
516 void* __thiscall
_Timevec__Getptr(_Timevec
*this)
518 TRACE("(%p)\n", this);
519 return this->timeptr
;
522 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@HPBD@Z */
523 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@HPEBD@Z */
524 _Locinfo
* __cdecl
_Locinfo__Locinfo_ctor_cat_cstr(_Locinfo
*locinfo
, int category
, const char *locstr
)
526 const char *locale
= NULL
;
528 /* This function is probably modifying more global objects */
529 FIXME("(%p %d %s) semi-stub\n", locinfo
, category
, locstr
);
532 throw_exception(EXCEPTION_RUNTIME_ERROR
, "bad locale name");
534 _Lockit_ctor_locktype(&locinfo
->lock
, _LOCK_LOCALE
);
535 locale_string_char_ctor(&locinfo
->days
);
536 locale_string_char_ctor(&locinfo
->months
);
537 #if _MSVCP_VER >= 110
538 locale_string_wchar_ctor(&locinfo
->wdays
);
539 locale_string_wchar_ctor(&locinfo
->wmonths
);
541 locale_string_char_ctor_cstr(&locinfo
->oldlocname
, setlocale(LC_ALL
, NULL
));
544 locale
= setlocale(LC_ALL
, locstr
);
546 locale
= setlocale(LC_ALL
, NULL
);
549 locale_string_char_ctor_cstr(&locinfo
->newlocname
, locale
);
551 locale_string_char_ctor_cstr(&locinfo
->newlocname
, "*");
556 /* ??0_Locinfo@std@@QAE@HPBD@Z */
557 /* ??0_Locinfo@std@@QEAA@HPEBD@Z */
558 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cat_cstr
, 12)
559 _Locinfo
* __thiscall
_Locinfo_ctor_cat_cstr(_Locinfo
*this, int category
, const char *locstr
)
561 return _Locinfo__Locinfo_ctor_cat_cstr(this, category
, locstr
);
564 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
565 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
566 _Locinfo
* __cdecl
_Locinfo__Locinfo_ctor_bstr(_Locinfo
*locinfo
, const basic_string_char
*locstr
)
568 return _Locinfo__Locinfo_ctor_cat_cstr(locinfo
, 1/*FIXME*/, MSVCP_basic_string_char_c_str(locstr
));
571 /* ??0_Locinfo@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z */
572 /* ??0_Locinfo@std@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z */
573 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_bstr
, 8)
574 _Locinfo
* __thiscall
_Locinfo_ctor_bstr(_Locinfo
*this, const basic_string_char
*locstr
)
576 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, MSVCP_basic_string_char_c_str(locstr
));
579 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@PBD@Z */
580 /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@PEBD@Z */
581 _Locinfo
* __cdecl
_Locinfo__Locinfo_ctor_cstr(_Locinfo
*locinfo
, const char *locstr
)
583 return _Locinfo__Locinfo_ctor_cat_cstr(locinfo
, 1/*FIXME*/, locstr
);
586 /* ??0_Locinfo@std@@QAE@PBD@Z */
587 /* ??0_Locinfo@std@@QEAA@PEBD@Z */
588 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_cstr
, 8)
589 _Locinfo
* __thiscall
_Locinfo_ctor_cstr(_Locinfo
*this, const char *locstr
)
591 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, locstr
);
594 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPAV12@@Z */
595 /* ?_Locinfo_dtor@_Locinfo@std@@SAXPEAV12@@Z */
596 void __cdecl
_Locinfo__Locinfo_dtor(_Locinfo
*locinfo
)
598 TRACE("(%p)\n", locinfo
);
600 setlocale(LC_ALL
, locale_string_char_c_str(&locinfo
->oldlocname
));
601 locale_string_char_dtor(&locinfo
->days
);
602 locale_string_char_dtor(&locinfo
->months
);
603 #if _MSVCP_VER >= 110
604 locale_string_wchar_dtor(&locinfo
->wdays
);
605 locale_string_wchar_dtor(&locinfo
->wmonths
);
607 locale_string_char_dtor(&locinfo
->oldlocname
);
608 locale_string_char_dtor(&locinfo
->newlocname
);
609 _Lockit_dtor(&locinfo
->lock
);
612 /* ??_F_Locinfo@std@@QAEXXZ */
613 /* ??_F_Locinfo@std@@QEAAXXZ */
614 DEFINE_THISCALL_WRAPPER(_Locinfo_ctor
, 4)
615 _Locinfo
* __thiscall
_Locinfo_ctor(_Locinfo
*this)
617 return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, "C");
620 /* ??1_Locinfo@std@@QAE@XZ */
621 /* ??1_Locinfo@std@@QEAA@XZ */
622 DEFINE_THISCALL_WRAPPER(_Locinfo_dtor
, 4)
623 void __thiscall
_Locinfo_dtor(_Locinfo
*this)
625 _Locinfo__Locinfo_dtor(this);
628 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAAV12@PAV12@HPBD@Z */
629 /* ?_Locinfo_Addcats@_Locinfo@std@@SAAEAV12@PEAV12@HPEBD@Z */
630 _Locinfo
* __cdecl
_Locinfo__Locinfo_Addcats(_Locinfo
*locinfo
, int category
, const char *locstr
)
632 const char *locale
= NULL
;
634 /* This function is probably modifying more global objects */
635 FIXME("(%p %d %s) semi-stub\n", locinfo
, category
, locstr
);
637 throw_exception(EXCEPTION_RUNTIME_ERROR
, "bad locale name");
639 locale_string_char_dtor(&locinfo
->newlocname
);
642 locale
= setlocale(LC_ALL
, locstr
);
644 locale
= setlocale(LC_ALL
, NULL
);
647 locale_string_char_ctor_cstr(&locinfo
->newlocname
, locale
);
649 locale_string_char_ctor_cstr(&locinfo
->newlocname
, "*");
654 /* ?_Addcats@_Locinfo@std@@QAEAAV12@HPBD@Z */
655 /* ?_Addcats@_Locinfo@std@@QEAAAEAV12@HPEBD@Z */
656 DEFINE_THISCALL_WRAPPER(_Locinfo__Addcats
, 12)
657 _Locinfo
* __thiscall
_Locinfo__Addcats(_Locinfo
*this, int category
, const char *locstr
)
659 return _Locinfo__Locinfo_Addcats(this, category
, locstr
);
662 static _Collvec
* getcoll(_Collvec
*ret
)
666 ret
->page
= ___lc_collate_cp_func();
668 ret
->handle
= ___lc_handle_func()[LC_COLLATE
];
670 ret
->lc_name
= ___lc_locale_name_func()[LC_COLLATE
];
676 #if defined(__i386__) || _MSVCP_VER<110
677 ULONGLONG __cdecl
_Getcoll(void)
681 C_ASSERT(sizeof(_Collvec
) <= sizeof(ULONGLONG
));
683 getcoll((_Collvec
*)&ret
);
687 _Collvec
* __cdecl
_Getcoll(_Collvec
*ret
)
693 /* ?_Getcoll@_Locinfo@std@@QBE?AU_Collvec@@XZ */
694 /* ?_Getcoll@_Locinfo@std@@QEBA?AU_Collvec@@XZ */
695 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcoll
, 8)
696 _Collvec
* __thiscall
_Locinfo__Getcoll(const _Locinfo
*this, _Collvec
*ret
)
702 _Ctypevec
* __cdecl
_Getctype(_Ctypevec
*ret
)
705 #if _MSVCP_VER >= 110
712 ret
->page
= ___lc_codepage_func();
714 ret
->handle
= ___lc_handle_func()[LC_COLLATE
];
716 if((name
= ___lc_locale_name_func()[LC_COLLATE
])) {
717 size
= wcslen(name
)+1;
718 ret
->name
= malloc(size
*sizeof(*name
));
719 if(!ret
->name
) throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
720 memcpy(ret
->name
, name
, size
*sizeof(*name
));
726 table
= malloc(sizeof(short[256]));
727 if(!table
) throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
728 memcpy(table
, __pctype_func(), sizeof(short[256]));
733 /* ?_Getctype@_Locinfo@std@@QBE?AU_Ctypevec@@XZ */
734 /* ?_Getctype@_Locinfo@std@@QEBA?AU_Ctypevec@@XZ */
735 DEFINE_THISCALL_WRAPPER(_Locinfo__Getctype
, 8)
736 _Ctypevec
* __thiscall
_Locinfo__Getctype(const _Locinfo
*this, _Ctypevec
*ret
)
738 return _Getctype(ret
);
743 ULONGLONG __cdecl
_Getcvt(void)
752 ret
.cvtvec
.page
= ___lc_codepage_func();
753 ret
.cvtvec
.handle
= ___lc_handle_func()[LC_CTYPE
];
757 _Cvtvec
* __cdecl
_Getcvt(_Cvtvec
*ret
)
763 memset(ret
, 0, sizeof(*ret
));
764 ret
->page
= ___lc_codepage_func();
765 ret
->mb_max
= ___mb_cur_max_func();
767 if(ret
->mb_max
> 1) {
769 if(_ismbblead(i
)) ret
->isleadbyte
[i
/8] |= 1 << (i
&7);
775 /* ?_Getcvt@_Locinfo@std@@QBE?AU_Cvtvec@@XZ */
776 /* ?_Getcvt@_Locinfo@std@@QEBA?AU_Cvtvec@@XZ */
777 DEFINE_THISCALL_WRAPPER(_Locinfo__Getcvt
, 8)
778 _Cvtvec
* __thiscall
_Locinfo__Getcvt(const _Locinfo
*this, _Cvtvec
*ret
)
781 ULONGLONG ull
= _Getcvt();
782 memcpy(ret
, &ull
, sizeof(ull
));
786 memcpy(ret
, &cvtvec
, sizeof(cvtvec
));
791 int __cdecl
_Getdateorder(void)
796 if(!GetLocaleInfoW(___lc_handle_func()[LC_TIME
], LOCALE_ILDATE
,
797 date_fmt
, ARRAY_SIZE(date_fmt
)))
798 return DATEORDER_no_order
;
800 if(!GetLocaleInfoEx(___lc_locale_name_func()[LC_TIME
], LOCALE_ILDATE
,
801 date_fmt
, ARRAY_SIZE(date_fmt
)))
802 return DATEORDER_no_order
;
805 if(*date_fmt
== '0') return DATEORDER_mdy
;
806 if(*date_fmt
== '1') return DATEORDER_dmy
;
807 if(*date_fmt
== '2') return DATEORDER_ymd
;
808 return DATEORDER_no_order
;
811 /* ?_Getdateorder@_Locinfo@std@@QBEHXZ */
812 /* ?_Getdateorder@_Locinfo@std@@QEBAHXZ */
813 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdateorder
, 4)
814 int __thiscall
_Locinfo__Getdateorder(const _Locinfo
*this)
816 TRACE("(%p)\n", this);
817 return _Getdateorder();
820 /* ?_Getdays@_Locinfo@std@@QBEPBDXZ */
821 /* ?_Getdays@_Locinfo@std@@QEBAPEBDXZ */
822 DEFINE_THISCALL_WRAPPER(_Locinfo__Getdays
, 4)
823 const char* __thiscall
_Locinfo__Getdays(const _Locinfo
*this)
825 char *days
= _Getdays();
828 TRACE("(%p)\n", this);
831 locale_string_char_dtor((locale_string
*)&this->days
);
832 locale_string_char_ctor_cstr((locale_string
*)&this->days
, days
);
836 ret
= locale_string_char_c_str(&this->days
);
837 if (!ret
[0]) ret
= ":Sun:Sunday:Mon:Monday:Tue:Tuesday:Wed:Wednesday:Thu:Thursday:Fri:Friday:Sat:Saturday";
841 #if _MSVCP_VER >= 110
842 /* ?_W_Getdays@_Locinfo@std@@QBEPBGXZ */
843 /* ?_W_Getdays@_Locinfo@std@@QEBAPEBGXZ */
844 DEFINE_THISCALL_WRAPPER(_Locinfo__W_Getdays
, 4)
845 const wchar_t* __thiscall
_Locinfo__W_Getdays(const _Locinfo
*this)
847 static const wchar_t defdays
[] =
849 ':','S','u','n',':','S','u','n','d','a','y',
850 ':','M','o','n',':','M','o','n','d','a','y',
851 ':','T','u','e',':','T','u','e','s','d','a','y',
852 ':','W','e','d',':','W','e','d','n','e','s','d','a','y',
853 ':','T','h','u',':','T','h','u','r','s','d','a','y',
854 ':','F','r','i',':','F','r','i','d','a','y',
855 ':','S','a','t',':','S','a','t','u','r','d','a','y'
857 wchar_t *wdays
= _W_Getdays();
860 TRACE("(%p)\n", this);
863 locale_string_wchar_assign((locale_string_wchar
*)&this->wdays
, wdays
);
867 ret
= locale_string_wchar_c_str(&this->wdays
);
868 if (!ret
[0]) ret
= defdays
;
872 /* ?_W_Getmonths@_Locinfo@std@@QBEPBGXZ */
873 /* ?_W_Getmonths@_Locinfo@std@@QEBAPEBGXZ */
874 DEFINE_THISCALL_WRAPPER(_Locinfo__W_Getmonths
, 4)
875 const wchar_t* __thiscall
_Locinfo__W_Getmonths(const _Locinfo
*this)
877 static const wchar_t defmonths
[] =
879 ':','J','a','n',':','J','a','n','u','a','r','y',
880 ':','F','e','b',':','F','e','b','r','u','a','r','y',
881 ':','M','a','r',':','M','a','r','c','h',
882 ':','A','p','r',':','A','p','r','i','l',
883 ':','M','a','y',':','M','a','y',
884 ':','J','u','n',':','J','u','n','e',
885 ':','J','u','l',':','J','u','l','y',
886 ':','A','u','g',':','A','u','g','u','s','t',
887 ':','S','e','p',':','S','e','p','t','e','m','b','e','r',
888 ':','O','c','t',':','O','c','t','o','b','e','r',
889 ':','N','o','v',':','N','o','v','e','m','b','e','r',
890 ':','D','e','c',':','D','e','c','e','m','b','e','r'
892 wchar_t *wmonths
= _W_Getmonths();
895 TRACE("(%p)\n", this);
898 locale_string_wchar_assign((locale_string_wchar
*)&this->wmonths
, wmonths
);
902 ret
= locale_string_wchar_c_str(&this->wmonths
);
903 if (!ret
[0]) ret
= defmonths
;
908 /* ?_Getmonths@_Locinfo@std@@QBEPBDXZ */
909 /* ?_Getmonths@_Locinfo@std@@QEBAPEBDXZ */
910 DEFINE_THISCALL_WRAPPER(_Locinfo__Getmonths
, 4)
911 const char* __thiscall
_Locinfo__Getmonths(const _Locinfo
*this)
913 char *months
= _Getmonths();
916 TRACE("(%p)\n", this);
919 locale_string_char_dtor((locale_string
*)&this->months
);
920 locale_string_char_ctor_cstr((locale_string
*)&this->months
, months
);
924 ret
= locale_string_char_c_str(&this->months
);
925 if (!ret
[0]) ret
= ":Jan:January:Feb:February:Mar:March:Apr:April:May:May:Jun:June:Jul:July"
926 ":Aug:August:Sep:September:Oct:October:Nov:November:Dec:December";
930 /* ?_Getfalse@_Locinfo@std@@QBEPBDXZ */
931 /* ?_Getfalse@_Locinfo@std@@QEBAPEBDXZ */
932 DEFINE_THISCALL_WRAPPER(_Locinfo__Getfalse
, 4)
933 const char* __thiscall
_Locinfo__Getfalse(const _Locinfo
*this)
935 TRACE("(%p)\n", this);
939 /* ?_Gettrue@_Locinfo@std@@QBEPBDXZ */
940 /* ?_Gettrue@_Locinfo@std@@QEBAPEBDXZ */
941 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettrue
, 4)
942 const char* __thiscall
_Locinfo__Gettrue(const _Locinfo
*this)
944 TRACE("(%p)\n", this);
948 /* ?_Getlconv@_Locinfo@std@@QBEPBUlconv@@XZ */
949 /* ?_Getlconv@_Locinfo@std@@QEBAPEBUlconv@@XZ */
950 DEFINE_THISCALL_WRAPPER(_Locinfo__Getlconv
, 4)
951 const struct lconv
* __thiscall
_Locinfo__Getlconv(const _Locinfo
*this)
953 TRACE("(%p)\n", this);
957 /* ?_Gettnames@_Locinfo@std@@QBE?AV_Timevec@2@XZ */
958 /* ?_Gettnames@_Locinfo@std@@QEBA?AV_Timevec@2@XZ */
959 DEFINE_THISCALL_WRAPPER(_Locinfo__Gettnames
, 8)
960 _Timevec
*__thiscall
_Locinfo__Gettnames(const _Locinfo
*this, _Timevec
*ret
)
962 TRACE("(%p)\n", this);
964 _Timevec_ctor_timeptr(ret
, _Gettnames());
968 /* ?id@?$collate@D@std@@2V0locale@2@A */
969 locale_id collate_char_id
= {0};
971 /* ??_7?$collate@D@std@@6B@ */
972 extern const vtable_ptr MSVCP_collate_char_vtable
;
974 /* ?_Init@?$collate@D@std@@IAEXABV_Locinfo@2@@Z */
975 /* ?_Init@?$collate@D@std@@IEAAXAEBV_Locinfo@2@@Z */
976 DEFINE_THISCALL_WRAPPER(collate_char__Init
, 8)
977 void __thiscall
collate_char__Init(collate
*this, const _Locinfo
*locinfo
)
979 TRACE("(%p %p)\n", this, locinfo
);
980 _Locinfo__Getcoll(locinfo
, &this->coll
);
983 /* ??0?$collate@D@std@@IAE@PBDI@Z */
984 /* ??0?$collate@D@std@@IEAA@PEBD_K@Z */
985 DEFINE_THISCALL_WRAPPER(collate_char_ctor_name
, 12)
986 collate
* __thiscall
collate_char_ctor_name(collate
*this, const char *name
, MSVCP_size_t refs
)
990 TRACE("(%p %s %lu)\n", this, name
, refs
);
992 locale_facet_ctor_refs(&this->facet
, refs
);
993 this->facet
.vtable
= &MSVCP_collate_char_vtable
;
995 _Locinfo_ctor_cstr(&locinfo
, name
);
996 collate_char__Init(this, &locinfo
);
997 _Locinfo_dtor(&locinfo
);
1001 /* ??0?$collate@D@std@@QAE@ABV_Locinfo@1@I@Z */
1002 /* ??0?$collate@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1003 DEFINE_THISCALL_WRAPPER(collate_char_ctor_locinfo
, 12)
1004 collate
* __thiscall
collate_char_ctor_locinfo(collate
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
1006 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
1008 locale_facet_ctor_refs(&this->facet
, refs
);
1009 this->facet
.vtable
= &MSVCP_collate_char_vtable
;
1010 collate_char__Init(this, locinfo
);
1014 /* ??0?$collate@D@std@@QAE@I@Z */
1015 /* ??0?$collate@D@std@@QEAA@_K@Z */
1016 DEFINE_THISCALL_WRAPPER(collate_char_ctor_refs
, 8)
1017 collate
* __thiscall
collate_char_ctor_refs(collate
*this, MSVCP_size_t refs
)
1019 return collate_char_ctor_name(this, "C", refs
);
1022 /* ??1?$collate@D@std@@UAE@XZ */
1023 /* ??1?$collate@D@std@@UEAA@XZ */
1024 /* ??1?$collate@D@std@@MAE@XZ */
1025 /* ??1?$collate@D@std@@MEAA@XZ */
1026 DEFINE_THISCALL_WRAPPER(collate_char_dtor
, 4)
1027 void __thiscall
collate_char_dtor(collate
*this)
1029 TRACE("(%p)\n", this);
1032 DEFINE_THISCALL_WRAPPER(collate_char_vector_dtor
, 8)
1033 collate
* __thiscall
collate_char_vector_dtor(collate
*this, unsigned int flags
)
1035 TRACE("(%p %x)\n", this, flags
);
1037 /* we have an array, with the number of elements stored before the first object */
1038 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1040 for(i
=*ptr
-1; i
>=0; i
--)
1041 collate_char_dtor(this+i
);
1042 MSVCRT_operator_delete(ptr
);
1044 collate_char_dtor(this);
1046 MSVCRT_operator_delete(this);
1052 /* ??_F?$collate@D@std@@QAEXXZ */
1053 /* ??_F?$collate@D@std@@QEAAXXZ */
1054 DEFINE_THISCALL_WRAPPER(collate_char_ctor
, 4)
1055 collate
* __thiscall
collate_char_ctor(collate
*this)
1057 return collate_char_ctor_name(this, "C", 0);
1060 /* ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1061 /* ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1062 MSVCP_size_t __cdecl
collate_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
1064 TRACE("(%p %p)\n", facet
, loc
);
1066 if(facet
&& !*facet
) {
1067 *facet
= MSVCRT_operator_new(sizeof(collate
));
1069 ERR("Out of memory\n");
1070 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
1073 collate_char_ctor_name((collate
*)*facet
,
1074 locale_string_char_c_str(&loc
->ptr
->name
), 0);
1080 /* ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@@Z */
1081 /* ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1082 MSVCP_size_t __cdecl
collate_char__Getcat_old(const locale_facet
**facet
)
1084 return collate_char__Getcat(facet
, locale_classic());
1087 static collate
* collate_char_use_facet(const locale
*loc
)
1089 static collate
*obj
= NULL
;
1092 const locale_facet
*fac
;
1094 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1095 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&collate_char_id
));
1097 _Lockit_dtor(&lock
);
1098 return (collate
*)fac
;
1102 _Lockit_dtor(&lock
);
1106 collate_char__Getcat(&fac
, loc
);
1107 obj
= (collate
*)fac
;
1108 call_locale_facet__Incref(&obj
->facet
);
1109 locale_facet_register(&obj
->facet
);
1110 _Lockit_dtor(&lock
);
1116 int __cdecl
_Strcoll(const char *first1
, const char *last1
, const char *first2
,
1117 const char *last2
, const _Collvec
*coll
)
1121 TRACE("(%s %s)\n", debugstr_an(first1
, last1
-first1
), debugstr_an(first2
, last2
-first2
));
1123 #if _MSVCP_VER < 110
1124 lcid
= (coll
? coll
->handle
: ___lc_handle_func()[LC_COLLATE
]);
1126 lcid
= LocaleNameToLCID(coll
? coll
->lc_name
: ___lc_locale_name_func()[LC_COLLATE
], 0);
1128 return CompareStringA(lcid
, 0, first1
, last1
-first1
, first2
, last2
-first2
)-CSTR_EQUAL
;
1131 /* ?do_compare@?$collate@D@std@@MBEHPBD000@Z */
1132 /* ?do_compare@?$collate@D@std@@MEBAHPEBD000@Z */
1133 DEFINE_THISCALL_WRAPPER(collate_char_do_compare
, 20)
1134 #if _MSVCP_VER <= 100
1135 #define call_collate_char_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 4, int, \
1136 (const collate*, const char*, const char*, const char*, const char*), \
1137 (this, first1, last1, first2, last2))
1139 #define call_collate_char_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 12, int, \
1140 (const collate*, const char*, const char*, const char*, const char*), \
1141 (this, first1, last1, first2, last2))
1143 int __thiscall
collate_char_do_compare(const collate
*this, const char *first1
,
1144 const char *last1
, const char *first2
, const char *last2
)
1146 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1147 return _Strcoll(first1
, last1
, first2
, last2
, &this->coll
);
1150 /* ?compare@?$collate@D@std@@QBEHPBD000@Z */
1151 /* ?compare@?$collate@D@std@@QEBAHPEBD000@Z */
1152 DEFINE_THISCALL_WRAPPER(collate_char_compare
, 20)
1153 int __thiscall
collate_char_compare(const collate
*this, const char *first1
,
1154 const char *last1
, const char *first2
, const char *last2
)
1156 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1157 return call_collate_char_do_compare(this, first1
, last1
, first2
, last2
);
1160 /* ?do_hash@?$collate@D@std@@MBEJPBD0@Z */
1161 /* ?do_hash@?$collate@D@std@@MEBAJPEBD0@Z */
1162 DEFINE_THISCALL_WRAPPER(collate_char_do_hash
, 12)
1163 #if _MSVCP_VER <= 100
1164 #define call_collate_char_do_hash(this, first, last) CALL_VTBL_FUNC(this, 12, LONG, \
1165 (const collate*, const char*, const char*), (this, first, last))
1167 #define call_collate_char_do_hash(this, first, last) CALL_VTBL_FUNC(this, 20, LONG, \
1168 (const collate*, const char*, const char*), (this, first, last))
1170 LONG __thiscall
collate_char_do_hash(const collate
*this,
1171 const char *first
, const char *last
)
1175 TRACE("(%p %p %p)\n", this, first
, last
);
1177 for(; first
<last
; first
++)
1178 ret
= (ret
<<8 | ret
>>24) + *first
;
1182 /* ?hash@?$collate@D@std@@QBEJPBD0@Z */
1183 /* ?hash@?$collate@D@std@@QEBAJPEBD0@Z */
1184 DEFINE_THISCALL_WRAPPER(collate_char_hash
, 12)
1185 LONG __thiscall
collate_char_hash(const collate
*this,
1186 const char *first
, const char *last
)
1188 TRACE("(%p %p %p)\n", this, first
, last
);
1189 return call_collate_char_do_hash(this, first
, last
);
1192 /* ?do_transform@?$collate@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
1193 /* ?do_transform@?$collate@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
1194 DEFINE_THISCALL_WRAPPER(collate_char_do_transform
, 16)
1195 basic_string_char
* __thiscall
collate_char_do_transform(const collate
*this,
1196 basic_string_char
*ret
, const char *first
, const char *last
)
1198 FIXME("(%p %p %p) stub\n", this, first
, last
);
1202 /* ?transform@?$collate@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */
1203 /* ?transform@?$collate@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */
1204 DEFINE_THISCALL_WRAPPER(collate_char_transform
, 16)
1205 basic_string_char
* __thiscall
collate_char_transform(const collate
*this,
1206 basic_string_char
*ret
, const char *first
, const char *last
)
1208 FIXME("(%p %p %p) stub\n", this, first
, last
);
1212 /* ?id@?$collate@_W@std@@2V0locale@2@A */
1213 locale_id collate_wchar_id
= {0};
1214 /* ?id@?$collate@G@std@@2V0locale@2@A */
1215 locale_id collate_short_id
= {0};
1217 /* ??_7?$collate@_W@std@@6B@ */
1218 extern const vtable_ptr MSVCP_collate_wchar_vtable
;
1219 /* ??_7?$collate@G@std@@6B@ */
1220 extern const vtable_ptr MSVCP_collate_short_vtable
;
1222 /* ?_Init@?$collate@_W@std@@IAEXABV_Locinfo@2@@Z */
1223 /* ?_Init@?$collate@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
1224 /* ?_Init@?$collate@G@std@@IAEXABV_Locinfo@2@@Z */
1225 /* ?_Init@?$collate@G@std@@IEAAXAEBV_Locinfo@2@@Z */
1226 DEFINE_THISCALL_WRAPPER(collate_wchar__Init
, 8)
1227 void __thiscall
collate_wchar__Init(collate
*this, const _Locinfo
*locinfo
)
1229 TRACE("(%p %p)\n", this, locinfo
);
1230 _Locinfo__Getcoll(locinfo
, &this->coll
);
1233 /* ??0?$collate@_W@std@@IAE@PBDI@Z */
1234 /* ??0?$collate@_W@std@@IEAA@PEBD_K@Z */
1235 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_name
, 12)
1236 collate
* __thiscall
collate_wchar_ctor_name(collate
*this, const char *name
, MSVCP_size_t refs
)
1240 TRACE("(%p %s %lu)\n", this, name
, refs
);
1242 locale_facet_ctor_refs(&this->facet
, refs
);
1243 this->facet
.vtable
= &MSVCP_collate_wchar_vtable
;
1245 _Locinfo_ctor_cstr(&locinfo
, name
);
1246 collate_wchar__Init(this, &locinfo
);
1247 _Locinfo_dtor(&locinfo
);
1251 /* ??0?$collate@G@std@@IAE@PBDI@Z */
1252 /* ??0?$collate@G@std@@IEAA@PEBD_K@Z */
1253 DEFINE_THISCALL_WRAPPER(collate_short_ctor_name
, 12)
1254 collate
* __thiscall
collate_short_ctor_name(collate
*this, const char *name
, MSVCP_size_t refs
)
1256 collate
*ret
= collate_wchar_ctor_name(this, name
, refs
);
1257 ret
->facet
.vtable
= &MSVCP_collate_short_vtable
;
1261 /* ??0?$collate@_W@std@@QAE@ABV_Locinfo@1@I@Z */
1262 /* ??0?$collate@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1263 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_locinfo
, 12)
1264 collate
* __thiscall
collate_wchar_ctor_locinfo(collate
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
1266 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
1268 locale_facet_ctor_refs(&this->facet
, refs
);
1269 this->facet
.vtable
= &MSVCP_collate_wchar_vtable
;
1270 collate_wchar__Init(this, locinfo
);
1274 /* ??0?$collate@G@std@@QAE@ABV_Locinfo@1@I@Z */
1275 /* ??0?$collate@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1276 DEFINE_THISCALL_WRAPPER(collate_short_ctor_locinfo
, 12)
1277 collate
* __thiscall
collate_short_ctor_locinfo(collate
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
1279 collate
*ret
= collate_wchar_ctor_locinfo(this, locinfo
, refs
);
1280 ret
->facet
.vtable
= &MSVCP_collate_short_vtable
;
1284 /* ??0?$collate@_W@std@@QAE@I@Z */
1285 /* ??0?$collate@_W@std@@QEAA@_K@Z */
1286 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_refs
, 8)
1287 collate
* __thiscall
collate_wchar_ctor_refs(collate
*this, MSVCP_size_t refs
)
1289 return collate_wchar_ctor_name(this, "C", refs
);
1292 /* ??0?$collate@G@std@@QAE@I@Z */
1293 /* ??0?$collate@G@std@@QEAA@_K@Z */
1294 DEFINE_THISCALL_WRAPPER(collate_short_ctor_refs
, 8)
1295 collate
* __thiscall
collate_short_ctor_refs(collate
*this, MSVCP_size_t refs
)
1297 collate
*ret
= collate_wchar_ctor_refs(this, refs
);
1298 ret
->facet
.vtable
= &MSVCP_collate_short_vtable
;
1302 /* ??1?$collate@G@std@@UAE@XZ */
1303 /* ??1?$collate@G@std@@UEAA@XZ */
1304 /* ??1?$collate@_W@std@@MAE@XZ */
1305 /* ??1?$collate@_W@std@@MEAA@XZ */
1306 /* ??1?$collate@G@std@@MAE@XZ */
1307 /* ??1?$collate@G@std@@MEAA@XZ */
1308 DEFINE_THISCALL_WRAPPER(collate_wchar_dtor
, 4)
1309 void __thiscall
collate_wchar_dtor(collate
*this)
1311 TRACE("(%p)\n", this);
1314 DEFINE_THISCALL_WRAPPER(collate_wchar_vector_dtor
, 8)
1315 collate
* __thiscall
collate_wchar_vector_dtor(collate
*this, unsigned int flags
)
1317 TRACE("(%p %x)\n", this, flags
);
1319 /* we have an array, with the number of elements stored before the first object */
1320 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1322 for(i
=*ptr
-1; i
>=0; i
--)
1323 collate_wchar_dtor(this+i
);
1324 MSVCRT_operator_delete(ptr
);
1326 collate_wchar_dtor(this);
1328 MSVCRT_operator_delete(this);
1334 /* ??_F?$collate@_W@std@@QAEXXZ */
1335 /* ??_F?$collate@_W@std@@QEAAXXZ */
1336 DEFINE_THISCALL_WRAPPER(collate_wchar_ctor
, 4)
1337 collate
* __thiscall
collate_wchar_ctor(collate
*this)
1339 return collate_wchar_ctor_name(this, "C", 0);
1342 /* ??_F?$collate@G@std@@QAEXXZ */
1343 /* ??_F?$collate@G@std@@QEAAXXZ */
1344 DEFINE_THISCALL_WRAPPER(collate_short_ctor
, 4)
1345 collate
* __thiscall
collate_short_ctor(collate
*this)
1347 collate
*ret
= collate_wchar_ctor(this);
1348 ret
->facet
.vtable
= &MSVCP_collate_short_vtable
;
1352 /* ?_Getcat@?$collate@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1353 /* ?_Getcat@?$collate@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1354 MSVCP_size_t __cdecl
collate_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
1356 TRACE("(%p %p)\n", facet
, loc
);
1358 if(facet
&& !*facet
) {
1359 *facet
= MSVCRT_operator_new(sizeof(collate
));
1361 ERR("Out of memory\n");
1362 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
1365 collate_wchar_ctor_name((collate
*)*facet
,
1366 locale_string_char_c_str(&loc
->ptr
->name
), 0);
1372 /* ?_Getcat@?$collate@_W@std@@SAIPAPBVfacet@locale@2@@Z */
1373 /* ?_Getcat@?$collate@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1374 MSVCP_size_t __cdecl
collate_wchar__Getcat_old(const locale_facet
**facet
)
1376 return collate_wchar__Getcat(facet
, locale_classic());
1379 static collate
* collate_wchar_use_facet(const locale
*loc
)
1381 static collate
*obj
= NULL
;
1384 const locale_facet
*fac
;
1386 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1387 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&collate_wchar_id
));
1389 _Lockit_dtor(&lock
);
1390 return (collate
*)fac
;
1394 _Lockit_dtor(&lock
);
1398 collate_wchar__Getcat(&fac
, loc
);
1399 obj
= (collate
*)fac
;
1400 call_locale_facet__Incref(&obj
->facet
);
1401 locale_facet_register(&obj
->facet
);
1402 _Lockit_dtor(&lock
);
1407 /* ?_Getcat@?$collate@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1408 /* ?_Getcat@?$collate@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1409 MSVCP_size_t __cdecl
collate_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
1411 if(facet
&& !*facet
) {
1412 collate_wchar__Getcat(facet
, loc
);
1413 (*(locale_facet
**)facet
)->vtable
= &MSVCP_collate_short_vtable
;
1419 /* ?_Getcat@?$collate@G@std@@SAIPAPBVfacet@locale@2@@Z */
1420 /* ?_Getcat@?$collate@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1421 MSVCP_size_t __cdecl
collate_short__Getcat_old(const locale_facet
**facet
)
1423 return collate_short__Getcat(facet
, locale_classic());
1426 static collate
* collate_short_use_facet(const locale
*loc
)
1428 static collate
*obj
= NULL
;
1431 const locale_facet
*fac
;
1433 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1434 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&collate_short_id
));
1436 _Lockit_dtor(&lock
);
1437 return (collate
*)fac
;
1441 _Lockit_dtor(&lock
);
1445 collate_short__Getcat(&fac
, loc
);
1446 obj
= (collate
*)fac
;
1447 call_locale_facet__Incref(&obj
->facet
);
1448 locale_facet_register(&obj
->facet
);
1449 _Lockit_dtor(&lock
);
1455 int __cdecl
_Wcscoll(const wchar_t *first1
, const wchar_t *last1
, const wchar_t *first2
,
1456 const wchar_t *last2
, const _Collvec
*coll
)
1458 TRACE("(%s %s)\n", debugstr_wn(first1
, last1
-first1
), debugstr_wn(first2
, last2
-first2
));
1460 #if _MSVCP_VER < 110
1461 return CompareStringW(coll
? coll
->handle
: ___lc_handle_func()[LC_COLLATE
],
1462 0, first1
, last1
-first1
, first2
, last2
-first2
)-CSTR_EQUAL
;
1464 return CompareStringEx(coll
? coll
->lc_name
: ___lc_locale_name_func()[LC_COLLATE
],
1465 0, first1
, last1
-first1
, first2
, last2
-first2
, NULL
, NULL
, 0)-CSTR_EQUAL
;
1469 /* ?do_compare@?$collate@_W@std@@MBEHPB_W000@Z */
1470 /* ?do_compare@?$collate@_W@std@@MEBAHPEB_W000@Z */
1471 /* ?do_compare@?$collate@G@std@@MBEHPBG000@Z */
1472 /* ?do_compare@?$collate@G@std@@MEBAHPEBG000@Z */
1473 DEFINE_THISCALL_WRAPPER(collate_wchar_do_compare
, 20)
1474 #if _MSVCP_VER <= 100
1475 #define call_collate_wchar_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 4, int, \
1476 (const collate*, const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*), \
1477 (this, first1, last1, first2, last2))
1479 #define call_collate_wchar_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 12, int, \
1480 (const collate*, const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*), \
1481 (this, first1, last1, first2, last2))
1483 int __thiscall
collate_wchar_do_compare(const collate
*this, const wchar_t *first1
,
1484 const wchar_t *last1
, const wchar_t *first2
, const wchar_t *last2
)
1486 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1487 return _Wcscoll(first1
, last1
, first2
, last2
, &this->coll
);
1490 /* ?compare@?$collate@_W@std@@QBEHPB_W000@Z */
1491 /* ?compare@?$collate@_W@std@@QEBAHPEB_W000@Z */
1492 /* ?compare@?$collate@G@std@@QBEHPBG000@Z */
1493 /* ?compare@?$collate@G@std@@QEBAHPEBG000@Z */
1494 DEFINE_THISCALL_WRAPPER(collate_wchar_compare
, 20)
1495 int __thiscall
collate_wchar_compare(const collate
*this, const wchar_t *first1
,
1496 const wchar_t *last1
, const wchar_t *first2
, const wchar_t *last2
)
1498 TRACE("(%p %p %p %p %p)\n", this, first1
, last1
, first2
, last2
);
1499 return call_collate_wchar_do_compare(this, first1
, last1
, first2
, last2
);
1502 /* ?do_hash@?$collate@_W@std@@MBEJPB_W0@Z */
1503 /* ?do_hash@?$collate@_W@std@@MEBAJPEB_W0@Z */
1504 /* ?do_hash@?$collate@G@std@@MBEJPBG0@Z */
1505 /* ?do_hash@?$collate@G@std@@MEBAJPEBG0@Z */
1506 DEFINE_THISCALL_WRAPPER(collate_wchar_do_hash
, 12)
1507 #if _MSVCP_VER <= 100
1508 #define call_collate_wchar_do_hash(this, first, last) CALL_VTBL_FUNC(this, 12, LONG, \
1509 (const collate*, const wchar_t*, const wchar_t*), (this, first, last))
1511 #define call_collate_wchar_do_hash(this, first, last) CALL_VTBL_FUNC(this, 20, LONG, \
1512 (const collate*, const wchar_t*, const wchar_t*), (this, first, last))
1514 LONG __thiscall
collate_wchar_do_hash(const collate
*this,
1515 const wchar_t *first
, const wchar_t *last
)
1519 TRACE("(%p %p %p)\n", this, first
, last
);
1521 for(; first
<last
; first
++)
1522 ret
= (ret
<<8 | ret
>>24) + *first
;
1526 /* ?hash@?$collate@_W@std@@QBEJPB_W0@Z */
1527 /* ?hash@?$collate@_W@std@@QEBAJPEB_W0@Z */
1528 /* ?hash@?$collate@G@std@@QBEJPBG0@Z */
1529 /* ?hash@?$collate@G@std@@QEBAJPEBG0@Z */
1530 DEFINE_THISCALL_WRAPPER(collate_wchar_hash
, 12)
1531 LONG __thiscall
collate_wchar_hash(const collate
*this,
1532 const wchar_t *first
, const wchar_t *last
)
1534 TRACE("(%p %p %p)\n", this, first
, last
);
1535 return call_collate_wchar_do_hash(this, first
, last
);
1538 /* ?do_transform@?$collate@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
1539 /* ?do_transform@?$collate@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
1540 /* ?do_transform@?$collate@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
1541 /* ?do_transform@?$collate@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
1542 DEFINE_THISCALL_WRAPPER(collate_wchar_do_transform
, 16)
1543 basic_string_wchar
* __thiscall
collate_wchar_do_transform(const collate
*this,
1544 basic_string_wchar
*ret
, const wchar_t *first
, const wchar_t *last
)
1546 FIXME("(%p %p %p) stub\n", this, first
, last
);
1550 /* ?transform@?$collate@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */
1551 /* ?transform@?$collate@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */
1552 /* ?transform@?$collate@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */
1553 /* ?transform@?$collate@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */
1554 DEFINE_THISCALL_WRAPPER(collate_wchar_transform
, 16)
1555 basic_string_wchar
* __thiscall
collate_wchar_transform(const collate
*this,
1556 basic_string_wchar
*ret
, const wchar_t *first
, const wchar_t *last
)
1558 FIXME("(%p %p %p) stub\n", this, first
, last
);
1562 /* ??_7ctype_base@std@@6B@ */
1563 extern const vtable_ptr MSVCP_ctype_base_vtable
;
1565 /* ??0ctype_base@std@@QAE@I@Z */
1566 /* ??0ctype_base@std@@QEAA@_K@Z */
1567 DEFINE_THISCALL_WRAPPER(ctype_base_ctor_refs
, 8)
1568 ctype_base
* __thiscall
ctype_base_ctor_refs(ctype_base
*this, MSVCP_size_t refs
)
1570 TRACE("(%p %lu)\n", this, refs
);
1571 locale_facet_ctor_refs(&this->facet
, refs
);
1572 this->facet
.vtable
= &MSVCP_ctype_base_vtable
;
1576 /* ??_Fctype_base@std@@QAEXXZ */
1577 /* ??_Fctype_base@std@@QEAAXXZ */
1578 DEFINE_THISCALL_WRAPPER(ctype_base_ctor
, 4)
1579 ctype_base
* __thiscall
ctype_base_ctor(ctype_base
*this)
1581 TRACE("(%p)\n", this);
1582 locale_facet_ctor_refs(&this->facet
, 0);
1583 this->facet
.vtable
= &MSVCP_ctype_base_vtable
;
1587 /* ??1ctype_base@std@@UAE@XZ */
1588 /* ??1ctype_base@std@@UEAA@XZ */
1589 DEFINE_THISCALL_WRAPPER(ctype_base_dtor
, 4)
1590 void __thiscall
ctype_base_dtor(ctype_base
*this)
1592 TRACE("(%p)\n", this);
1595 DEFINE_THISCALL_WRAPPER(ctype_base_vector_dtor
, 8)
1596 ctype_base
* __thiscall
ctype_base_vector_dtor(ctype_base
*this, unsigned int flags
)
1598 TRACE("(%p %x)\n", this, flags
);
1600 /* we have an array, with the number of elements stored before the first object */
1601 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1603 for(i
=*ptr
-1; i
>=0; i
--)
1604 ctype_base_dtor(this+i
);
1605 MSVCRT_operator_delete(ptr
);
1607 ctype_base_dtor(this);
1609 MSVCRT_operator_delete(this);
1615 /* ?_Xran@ctype_base@std@@KAXXZ */
1616 void __cdecl
ctype_base__Xran(void)
1618 throw_exception(EXCEPTION_OUT_OF_RANGE
, "out of range in ctype<T>");
1621 /* ?id@?$ctype@D@std@@2V0locale@2@A */
1622 locale_id ctype_char_id
= {0};
1623 /* ?table_size@?$ctype@D@std@@2IB */
1624 /* ?table_size@?$ctype@D@std@@2_KB */
1625 MSVCP_size_t ctype_char_table_size
= 256;
1627 /* ??_7?$ctype@D@std@@6B@ */
1628 extern const vtable_ptr MSVCP_ctype_char_vtable
;
1630 /* ?_Id_func@?$ctype@D@std@@SAAAVid@locale@2@XZ */
1631 /* ?_Id_func@?$ctype@D@std@@SAAEAVid@locale@2@XZ */
1632 locale_id
* __cdecl
ctype_char__Id_func(void)
1635 return &ctype_char_id
;
1638 /* ?_Init@?$ctype@D@std@@IAEXABV_Locinfo@2@@Z */
1639 /* ?_Init@?$ctype@D@std@@IEAAXAEBV_Locinfo@2@@Z */
1640 DEFINE_THISCALL_WRAPPER(ctype_char__Init
, 8)
1641 void __thiscall
ctype_char__Init(ctype_char
*this, const _Locinfo
*locinfo
)
1643 TRACE("(%p %p)\n", this, locinfo
);
1644 _Locinfo__Getctype(locinfo
, &this->ctype
);
1647 /* ?_Tidy@?$ctype@D@std@@IAEXXZ */
1648 /* ?_Tidy@?$ctype@D@std@@IEAAXXZ */
1649 DEFINE_THISCALL_WRAPPER(ctype_char__Tidy
, 4)
1650 void __thiscall
ctype_char__Tidy(ctype_char
*this)
1652 TRACE("(%p)\n", this);
1654 if(this->ctype
.delfl
)
1655 free((short*)this->ctype
.table
);
1656 #if _MSVCP_VER >= 110
1657 free(this->ctype
.name
);
1661 /* ?classic_table@?$ctype@D@std@@KAPBFXZ */
1662 /* ?classic_table@?$ctype@D@std@@KAPEBFXZ */
1663 const short* __cdecl
ctype_char_classic_table(void)
1668 ctype
= ctype_char_use_facet( locale_classic() );
1669 return ctype
->ctype
.table
;
1672 /* ??0?$ctype@D@std@@QAE@ABV_Locinfo@1@I@Z */
1673 /* ??0?$ctype@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */
1674 DEFINE_THISCALL_WRAPPER(ctype_char_ctor_locinfo
, 12)
1675 ctype_char
* __thiscall
ctype_char_ctor_locinfo(ctype_char
*this,
1676 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
1678 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
1679 ctype_base_ctor_refs(&this->base
, refs
);
1680 this->base
.facet
.vtable
= &MSVCP_ctype_char_vtable
;
1681 ctype_char__Init(this, locinfo
);
1685 /* ??0?$ctype@D@std@@QAE@PBF_NI@Z */
1686 /* ??0?$ctype@D@std@@QEAA@PEBF_N_K@Z */
1687 DEFINE_THISCALL_WRAPPER(ctype_char_ctor_table
, 16)
1688 ctype_char
* __thiscall
ctype_char_ctor_table(ctype_char
*this,
1689 const short *table
, MSVCP_bool
delete, MSVCP_size_t refs
)
1693 TRACE("(%p %p %d %lu)\n", this, table
, delete, refs
);
1695 ctype_base_ctor_refs(&this->base
, refs
);
1696 this->base
.facet
.vtable
= &MSVCP_ctype_char_vtable
;
1698 _Locinfo_ctor(&locinfo
);
1699 ctype_char__Init(this, &locinfo
);
1700 _Locinfo_dtor(&locinfo
);
1703 ctype_char__Tidy(this);
1704 this->ctype
.table
= table
;
1705 this->ctype
.delfl
= delete;
1710 /* ??_F?$ctype@D@std@@QAEXXZ */
1711 /* ??_F?$ctype@D@std@@QEAAXXZ */
1712 DEFINE_THISCALL_WRAPPER(ctype_char_ctor
, 4)
1713 ctype_char
* __thiscall
ctype_char_ctor(ctype_char
*this)
1715 return ctype_char_ctor_table(this, NULL
, FALSE
, 0);
1718 /* ??1?$ctype@D@std@@UAE@XZ */
1719 /* ??1?$ctype@D@std@@UEAA@XZ */
1720 /* ??1?$ctype@D@std@@MAE@XZ */
1721 /* ??1?$ctype@D@std@@MEAA@XZ */
1722 DEFINE_THISCALL_WRAPPER(ctype_char_dtor
, 4)
1723 void __thiscall
ctype_char_dtor(ctype_char
*this)
1725 TRACE("(%p)\n", this);
1726 ctype_char__Tidy(this);
1729 DEFINE_THISCALL_WRAPPER(ctype_char_vector_dtor
, 8)
1730 ctype_char
* __thiscall
ctype_char_vector_dtor(ctype_char
*this, unsigned int flags
)
1732 TRACE("(%p %x)\n", this, flags
);
1734 /* we have an array, with the number of elements stored before the first object */
1735 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
1737 for(i
=*ptr
-1; i
>=0; i
--)
1738 ctype_char_dtor(this+i
);
1739 MSVCRT_operator_delete(ptr
);
1741 ctype_char_dtor(this);
1743 MSVCRT_operator_delete(this);
1749 /* ?do_narrow@?$ctype@D@std@@MBEDDD@Z */
1750 /* ?do_narrow@?$ctype@D@std@@MEBADDD@Z */
1751 DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow_ch
, 12)
1752 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
1753 #define call_ctype_char_do_narrow_ch(this, ch, unused) CALL_VTBL_FUNC(this, 36, \
1754 char, (const ctype_char*, char, char), (this, ch, unused))
1755 #elif _MSVCP_VER <= 100
1756 #define call_ctype_char_do_narrow_ch(this, ch, unused) CALL_VTBL_FUNC(this, 32, \
1757 char, (const ctype_char*, char, char), (this, ch, unused))
1759 #define call_ctype_char_do_narrow_ch(this, ch, unused) CALL_VTBL_FUNC(this, 40, \
1760 char, (const ctype_char*, char, char), (this, ch, unused))
1762 char __thiscall
ctype_char_do_narrow_ch(const ctype_char
*this, char ch
, char unused
)
1764 TRACE("(%p %c %c)\n", this, ch
, unused
);
1768 /* ?do_narrow@?$ctype@D@std@@MBEPBDPBD0DPAD@Z */
1769 /* ?do_narrow@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD@Z */
1770 DEFINE_THISCALL_WRAPPER(ctype_char_do_narrow
, 20)
1771 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
1772 #define call_ctype_char_do_narrow(this, first, last, unused, dest) CALL_VTBL_FUNC(this, 32, \
1773 const char*, (const ctype_char*, const char*, const char*, char, char*), \
1774 (this, first, last, unused, dest))
1775 #elif _MSVCP_VER <= 100
1776 #define call_ctype_char_do_narrow(this, first, last, unused, dest) CALL_VTBL_FUNC(this, 28, \
1777 const char*, (const ctype_char*, const char*, const char*, char, char*), \
1778 (this, first, last, unused, dest))
1780 #define call_ctype_char_do_narrow(this, first, last, unused, dest) CALL_VTBL_FUNC(this, 36, \
1781 const char*, (const ctype_char*, const char*, const char*, char, char*), \
1782 (this, first, last, unused, dest))
1784 const char* __thiscall
ctype_char_do_narrow(const ctype_char
*this,
1785 const char *first
, const char *last
, char unused
, char *dest
)
1787 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1788 memcpy(dest
, first
, last
-first
);
1792 /* ?_Do_narrow_s@?$ctype@D@std@@MBEPBDPBD0DPADI@Z */
1793 /* ?_Do_narrow_s@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD_K@Z */
1794 DEFINE_THISCALL_WRAPPER(ctype_char__Do_narrow_s
, 24)
1795 #define call_ctype_char__Do_narrow_s(this, first, last, unused, dest, size) CALL_VTBL_FUNC(this, 40, \
1796 const char*, (const ctype_char*, const char*, const char*, char, char*, MSVCP_size_t), \
1797 (this, first, last, unused, dest, size))
1798 const char* __thiscall
ctype_char__Do_narrow_s(const ctype_char
*this, const char *first
,
1799 const char *last
, char unused
, char *dest
, MSVCP_size_t size
)
1801 TRACE("(%p %p %p %p %lu)\n", this, first
, last
, dest
, size
);
1802 memcpy_s(dest
, size
, first
, last
-first
);
1806 /* ?narrow@?$ctype@D@std@@QBEDDD@Z */
1807 /* ?narrow@?$ctype@D@std@@QEBADDD@Z */
1808 DEFINE_THISCALL_WRAPPER(ctype_char_narrow_ch
, 12)
1809 char __thiscall
ctype_char_narrow_ch(const ctype_char
*this, char ch
, char dflt
)
1811 TRACE("(%p %c %c)\n", this, ch
, dflt
);
1812 return call_ctype_char_do_narrow_ch(this, ch
, dflt
);
1815 /* ?narrow@?$ctype@D@std@@QBEPBDPBD0DPAD@Z */
1816 /* ?narrow@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD@Z */
1817 DEFINE_THISCALL_WRAPPER(ctype_char_narrow
, 20)
1818 const char* __thiscall
ctype_char_narrow(const ctype_char
*this,
1819 const char *first
, const char *last
, char dflt
, char *dest
)
1821 TRACE("(%p %p %p %c %p)\n", this, first
, last
, dflt
, dest
);
1822 return call_ctype_char_do_narrow(this, first
, last
, dflt
, dest
);
1825 /* ?_Narrow_s@?$ctype@D@std@@QBEPBDPBD0DPADI@Z */
1826 /* ?_Narrow_s@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD_K@Z */
1827 DEFINE_THISCALL_WRAPPER(ctype_char__Narrow_s
, 24)
1828 const char* __thiscall
ctype_char__Narrow_s(const ctype_char
*this, const char *first
,
1829 const char *last
, char dflt
, char *dest
, MSVCP_size_t size
)
1831 TRACE("(%p %p %p %p %lu)\n", this, first
, last
, dest
, size
);
1832 return call_ctype_char__Do_narrow_s(this, first
, last
, dflt
, dest
, size
);
1835 /* ?do_widen@?$ctype@D@std@@MBEDD@Z */
1836 /* ?do_widen@?$ctype@D@std@@MEBADD@Z */
1837 DEFINE_THISCALL_WRAPPER(ctype_char_do_widen_ch
, 8)
1838 #if _MSVCP_VER <= 100
1839 #define call_ctype_char_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
1840 char, (const ctype_char*, char), (this, ch))
1842 #define call_ctype_char_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 32, \
1843 char, (const ctype_char*, char), (this, ch))
1845 char __thiscall
ctype_char_do_widen_ch(const ctype_char
*this, char ch
)
1847 TRACE("(%p %c)\n", this, ch
);
1851 /* ?do_widen@?$ctype@D@std@@MBEPBDPBD0PAD@Z */
1852 /* ?do_widen@?$ctype@D@std@@MEBAPEBDPEBD0PEAD@Z */
1853 DEFINE_THISCALL_WRAPPER(ctype_char_do_widen
, 16)
1854 #if _MSVCP_VER <= 100
1855 #define call_ctype_char_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 20, \
1856 const char*, (const ctype_char*, const char*, const char*, char*), \
1857 (this, first, last, dest))
1859 #define call_ctype_char_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 28, \
1860 const char*, (const ctype_char*, const char*, const char*, char*), \
1861 (this, first, last, dest))
1863 const char* __thiscall
ctype_char_do_widen(const ctype_char
*this,
1864 const char *first
, const char *last
, char *dest
)
1866 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1867 memcpy(dest
, first
, last
-first
);
1871 /* ?_Do_widen_s@?$ctype@D@std@@MBEPBDPBD0PADI@Z */
1872 /* ?_Do_widen_s@?$ctype@D@std@@MEBAPEBDPEBD0PEAD_K@Z */
1873 DEFINE_THISCALL_WRAPPER(ctype_char__Do_widen_s
, 20)
1874 #define call_ctype_char__Do_widen_s(this, first, last, dest, size) CALL_VTBL_FUNC(this, 28, \
1875 const char*, (const ctype_char*, const char*, const char*, char*, MSVCP_size_t), \
1876 (this, first, last, dest, size))
1877 const char* __thiscall
ctype_char__Do_widen_s(const ctype_char
*this,
1878 const char *first
, const char *last
, char *dest
, MSVCP_size_t size
)
1880 TRACE("(%p %p %p %p %lu)\n", this, first
, last
, dest
, size
);
1881 memcpy_s(dest
, size
, first
, last
-first
);
1885 /* ?widen@?$ctype@D@std@@QBEDD@Z */
1886 /* ?widen@?$ctype@D@std@@QEBADD@Z */
1887 DEFINE_THISCALL_WRAPPER(ctype_char_widen_ch
, 8)
1888 char __thiscall
ctype_char_widen_ch(const ctype_char
*this, char ch
)
1890 TRACE("(%p %c)\n", this, ch
);
1891 return call_ctype_char_do_widen_ch(this, ch
);
1894 /* ?widen@?$ctype@D@std@@QBEPBDPBD0PAD@Z */
1895 /* ?widen@?$ctype@D@std@@QEBAPEBDPEBD0PEAD@Z */
1896 DEFINE_THISCALL_WRAPPER(ctype_char_widen
, 16)
1897 const char* __thiscall
ctype_char_widen(const ctype_char
*this,
1898 const char *first
, const char *last
, char *dest
)
1900 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
1901 return call_ctype_char_do_widen(this, first
, last
, dest
);
1904 /* ?_Widen_s@?$ctype@D@std@@QBEPBDPBD0PADI@Z */
1905 /* ?_Widen_s@?$ctype@D@std@@QEBAPEBDPEBD0PEAD_K@Z */
1906 DEFINE_THISCALL_WRAPPER(ctype_char__Widen_s
, 20)
1907 const char* __thiscall
ctype_char__Widen_s(const ctype_char
*this,
1908 const char *first
, const char *last
, char *dest
, MSVCP_size_t size
)
1910 TRACE("(%p %p %p %p %lu)\n", this, first
, last
, dest
, size
);
1911 return call_ctype_char__Do_widen_s(this, first
, last
, dest
, size
);
1914 /* ?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
1915 /* ?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
1916 MSVCP_size_t __cdecl
ctype_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
1918 TRACE("(%p %p)\n", facet
, loc
);
1920 if(facet
&& !*facet
) {
1923 *facet
= MSVCRT_operator_new(sizeof(ctype_char
));
1925 ERR("Out of memory\n");
1926 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
1930 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
1931 ctype_char_ctor_locinfo((ctype_char
*)*facet
, &locinfo
, 0);
1932 _Locinfo_dtor(&locinfo
);
1938 /* ?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@@Z */
1939 /* ?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
1940 MSVCP_size_t __cdecl
ctype_char__Getcat_old(const locale_facet
**facet
)
1942 return ctype_char__Getcat(facet
, locale_classic());
1945 ctype_char
* ctype_char_use_facet(const locale
*loc
)
1947 static ctype_char
*obj
= NULL
;
1950 const locale_facet
*fac
;
1952 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
1953 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_char_id
));
1955 _Lockit_dtor(&lock
);
1956 return (ctype_char
*)fac
;
1960 _Lockit_dtor(&lock
);
1964 ctype_char__Getcat(&fac
, loc
);
1965 obj
= (ctype_char
*)fac
;
1966 call_locale_facet__Incref(&obj
->base
.facet
);
1967 locale_facet_register(&obj
->base
.facet
);
1968 _Lockit_dtor(&lock
);
1974 int __cdecl
_Tolower(int ch
, const _Ctypevec
*ctype
)
1978 TRACE("%d %p\n", ch
, ctype
);
1983 cp
= ___lc_codepage_func();
1985 /* Don't convert to unicode in case of C locale */
1987 if(ch
>='A' && ch
<='Z')
1996 str
[0] = (ch
>>8) & 255;
2004 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, str
, size
, &wide
, 1))
2007 lower
= tolowerW(wide
);
2011 WideCharToMultiByte(cp
, 0, &lower
, 1, str
, 2, NULL
, NULL
);
2013 return str
[0] + (str
[1]<<8);
2017 /* ?do_tolower@?$ctype@D@std@@MBEDD@Z */
2018 /* ?do_tolower@?$ctype@D@std@@MEBADD@Z */
2019 #if _MSVCP_VER <= 100
2020 #define call_ctype_char_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 8, \
2021 char, (const ctype_char*, char), (this, ch))
2023 #define call_ctype_char_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 16, \
2024 char, (const ctype_char*, char), (this, ch))
2026 DEFINE_THISCALL_WRAPPER(ctype_char_do_tolower_ch
, 8)
2027 char __thiscall
ctype_char_do_tolower_ch(const ctype_char
*this, char ch
)
2029 TRACE("(%p %c)\n", this, ch
);
2030 return _Tolower(ch
, &this->ctype
);
2033 /* ?do_tolower@?$ctype@D@std@@MBEPBDPADPBD@Z */
2034 /* ?do_tolower@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z */
2035 #if _MSVCP_VER <= 100
2036 #define call_ctype_char_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 4, \
2037 const char*, (const ctype_char*, char*, const char*), (this, first, last))
2039 #define call_ctype_char_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 12, \
2040 const char*, (const ctype_char*, char*, const char*), (this, first, last))
2042 DEFINE_THISCALL_WRAPPER(ctype_char_do_tolower
, 12)
2043 const char* __thiscall
ctype_char_do_tolower(const ctype_char
*this, char *first
, const char *last
)
2045 TRACE("(%p %p %p)\n", this, first
, last
);
2046 for(; first
<last
; first
++)
2047 *first
= _Tolower(*first
, &this->ctype
);
2051 /* ?tolower@?$ctype@D@std@@QBEDD@Z */
2052 /* ?tolower@?$ctype@D@std@@QEBADD@Z */
2053 DEFINE_THISCALL_WRAPPER(ctype_char_tolower_ch
, 8)
2054 char __thiscall
ctype_char_tolower_ch(const ctype_char
*this, char ch
)
2056 TRACE("(%p %c)\n", this, ch
);
2057 return call_ctype_char_do_tolower_ch(this, ch
);
2060 /* ?tolower@?$ctype@D@std@@QBEPBDPADPBD@Z */
2061 /* ?tolower@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z */
2062 DEFINE_THISCALL_WRAPPER(ctype_char_tolower
, 12)
2063 const char* __thiscall
ctype_char_tolower(const ctype_char
*this, char *first
, const char *last
)
2065 TRACE("(%p %p %p)\n", this, first
, last
);
2066 return call_ctype_char_do_tolower(this, first
, last
);
2070 int __cdecl
_Toupper(int ch
, const _Ctypevec
*ctype
)
2074 TRACE("%d %p\n", ch
, ctype
);
2079 cp
= ___lc_codepage_func();
2081 /* Don't convert to unicode in case of C locale */
2083 if(ch
>='a' && ch
<='z')
2092 str
[0] = (ch
>>8) & 255;
2100 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, str
, size
, &wide
, 1))
2103 upper
= toupperW(wide
);
2107 WideCharToMultiByte(cp
, 0, &upper
, 1, str
, 2, NULL
, NULL
);
2109 return str
[0] + (str
[1]<<8);
2113 /* ?do_toupper@?$ctype@D@std@@MBEDD@Z */
2114 /* ?do_toupper@?$ctype@D@std@@MEBADD@Z */
2115 #if _MSVCP_VER <= 100
2116 #define call_ctype_char_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 16, \
2117 char, (const ctype_char*, char), (this, ch))
2119 #define call_ctype_char_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
2120 char, (const ctype_char*, char), (this, ch))
2122 DEFINE_THISCALL_WRAPPER(ctype_char_do_toupper_ch
, 8)
2123 char __thiscall
ctype_char_do_toupper_ch(const ctype_char
*this, char ch
)
2125 TRACE("(%p %c)\n", this, ch
);
2126 return _Toupper(ch
, &this->ctype
);
2129 /* ?do_toupper@?$ctype@D@std@@MBEPBDPADPBD@Z */
2130 /* ?do_toupper@?$ctype@D@std@@MEBAPEBDPEADPEBD@Z */
2131 #if _MSVCP_VER <= 100
2132 #define call_ctype_char_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 12, \
2133 const char*, (const ctype_char*, char*, const char*), (this, first, last))
2135 #define call_ctype_char_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 20, \
2136 const char*, (const ctype_char*, char*, const char*), (this, first, last))
2138 DEFINE_THISCALL_WRAPPER(ctype_char_do_toupper
, 12)
2139 const char* __thiscall
ctype_char_do_toupper(const ctype_char
*this,
2140 char *first
, const char *last
)
2142 TRACE("(%p %p %p)\n", this, first
, last
);
2143 for(; first
<last
; first
++)
2144 *first
= _Toupper(*first
, &this->ctype
);
2148 /* ?toupper@?$ctype@D@std@@QBEDD@Z */
2149 /* ?toupper@?$ctype@D@std@@QEBADD@Z */
2150 DEFINE_THISCALL_WRAPPER(ctype_char_toupper_ch
, 8)
2151 char __thiscall
ctype_char_toupper_ch(const ctype_char
*this, char ch
)
2153 TRACE("(%p %c)\n", this, ch
);
2154 return call_ctype_char_do_toupper_ch(this, ch
);
2157 /* ?toupper@?$ctype@D@std@@QBEPBDPADPBD@Z */
2158 /* ?toupper@?$ctype@D@std@@QEBAPEBDPEADPEBD@Z */
2159 DEFINE_THISCALL_WRAPPER(ctype_char_toupper
, 12)
2160 const char* __thiscall
ctype_char_toupper(const ctype_char
*this, char *first
, const char *last
)
2162 TRACE("(%p %p %p)\n", this, first
, last
);
2163 return call_ctype_char_do_toupper(this, first
, last
);
2166 /* ?is@?$ctype@D@std@@QBE_NFD@Z */
2167 /* ?is@?$ctype@D@std@@QEBA_NFD@Z */
2168 DEFINE_THISCALL_WRAPPER(ctype_char_is_ch
, 12)
2169 MSVCP_bool __thiscall
ctype_char_is_ch(const ctype_char
*this, short mask
, char ch
)
2171 TRACE("(%p %x %c)\n", this, mask
, ch
);
2172 return (this->ctype
.table
[(unsigned char)ch
] & mask
) != 0;
2175 /* ?is@?$ctype@D@std@@QBEPBDPBD0PAF@Z */
2176 /* ?is@?$ctype@D@std@@QEBAPEBDPEBD0PEAF@Z */
2177 DEFINE_THISCALL_WRAPPER(ctype_char_is
, 16)
2178 const char* __thiscall
ctype_char_is(const ctype_char
*this, const char *first
, const char *last
, short *dest
)
2180 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2181 for(; first
<last
; first
++)
2182 *dest
++ = this->ctype
.table
[(unsigned char)*first
];
2186 /* ?scan_is@?$ctype@D@std@@QBEPBDFPBD0@Z */
2187 /* ?scan_is@?$ctype@D@std@@QEBAPEBDFPEBD0@Z */
2188 DEFINE_THISCALL_WRAPPER(ctype_char_scan_is
, 16)
2189 const char* __thiscall
ctype_char_scan_is(const ctype_char
*this, short mask
, const char *first
, const char *last
)
2191 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
2192 for(; first
<last
; first
++)
2193 if(!ctype_char_is_ch(this, mask
, *first
))
2198 /* ?scan_not@?$ctype@D@std@@QBEPBDFPBD0@Z */
2199 /* ?scan_not@?$ctype@D@std@@QEBAPEBDFPEBD0@Z */
2200 DEFINE_THISCALL_WRAPPER(ctype_char_scan_not
, 16)
2201 const char* __thiscall
ctype_char_scan_not(const ctype_char
*this, short mask
, const char *first
, const char *last
)
2203 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
2204 for(; first
<last
; first
++)
2205 if(ctype_char_is_ch(this, mask
, *first
))
2210 /* ?table@?$ctype@D@std@@IBEPBFXZ */
2211 /* ?table@?$ctype@D@std@@IEBAPEBFXZ */
2212 DEFINE_THISCALL_WRAPPER(ctype_char_table
, 4)
2213 const short* __thiscall
ctype_char_table(const ctype_char
*this)
2215 TRACE("(%p)\n", this);
2216 return this->ctype
.table
;
2219 /* ?id@?$ctype@_W@std@@2V0locale@2@A */
2220 locale_id ctype_wchar_id
= {0};
2221 /* ?id@?$ctype@G@std@@2V0locale@2@A */
2222 locale_id ctype_short_id
= {0};
2224 /* ??_7?$ctype@_W@std@@6B@ */
2225 extern const vtable_ptr MSVCP_ctype_wchar_vtable
;
2226 /* ??_7?$ctype@G@std@@6B@ */
2227 extern const vtable_ptr MSVCP_ctype_short_vtable
;
2229 /* ?_Id_func@?$ctype@_W@std@@SAAAVid@locale@2@XZ */
2230 /* ?_Id_func@?$ctype@_W@std@@SAAEAVid@locale@2@XZ */
2231 locale_id
* __cdecl
ctype_wchar__Id_func(void)
2234 return &ctype_wchar_id
;
2237 /* ?_Id_func@?$ctype@G@std@@SAAAVid@locale@2@XZ */
2238 /* ?_Id_func@?$ctype@G@std@@SAAEAVid@locale@2@XZ */
2239 locale_id
* __cdecl
ctype_short__Id_func(void)
2242 return &ctype_short_id
;
2245 /* ?_Init@?$ctype@_W@std@@IAEXABV_Locinfo@2@@Z */
2246 /* ?_Init@?$ctype@_W@std@@IEAAXAEBV_Locinfo@2@@Z */
2247 /* ?_Init@?$ctype@G@std@@IAEXABV_Locinfo@2@@Z */
2248 /* ?_Init@?$ctype@G@std@@IEAAXAEBV_Locinfo@2@@Z */
2249 DEFINE_THISCALL_WRAPPER(ctype_wchar__Init
, 8)
2250 void __thiscall
ctype_wchar__Init(ctype_wchar
*this, const _Locinfo
*locinfo
)
2252 TRACE("(%p %p)\n", this, locinfo
);
2253 _Locinfo__Getctype(locinfo
, &this->ctype
);
2254 _Locinfo__Getcvt(locinfo
, &this->cvt
);
2257 /* ??0?$ctype@_W@std@@QAE@ABV_Locinfo@1@I@Z */
2258 /* ??0?$ctype@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */
2259 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor_locinfo
, 12)
2260 ctype_wchar
* __thiscall
ctype_wchar_ctor_locinfo(ctype_wchar
*this,
2261 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
2263 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
2264 ctype_base_ctor_refs(&this->base
, refs
);
2265 this->base
.facet
.vtable
= &MSVCP_ctype_wchar_vtable
;
2266 ctype_wchar__Init(this, locinfo
);
2270 /* ??0?$ctype@G@std@@QAE@ABV_Locinfo@1@I@Z */
2271 /* ??0?$ctype@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */
2272 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_locinfo
, 12)
2273 ctype_wchar
* __thiscall
ctype_short_ctor_locinfo(ctype_wchar
*this,
2274 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
2276 ctype_wchar
*ret
= ctype_wchar_ctor_locinfo(this, locinfo
, refs
);
2277 this->base
.facet
.vtable
= &MSVCP_ctype_short_vtable
;
2281 /* ??0?$ctype@_W@std@@QAE@I@Z */
2282 /* ??0?$ctype@_W@std@@QEAA@_K@Z */
2283 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor_refs
, 8)
2284 ctype_wchar
* __thiscall
ctype_wchar_ctor_refs(ctype_wchar
*this, MSVCP_size_t refs
)
2288 TRACE("(%p %lu)\n", this, refs
);
2290 ctype_base_ctor_refs(&this->base
, refs
);
2291 this->base
.facet
.vtable
= &MSVCP_ctype_wchar_vtable
;
2293 _Locinfo_ctor(&locinfo
);
2294 ctype_wchar__Init(this, &locinfo
);
2295 _Locinfo_dtor(&locinfo
);
2299 /* ??0?$ctype@G@std@@QAE@I@Z */
2300 /* ??0?$ctype@G@std@@QEAA@_K@Z */
2301 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_refs
, 8)
2302 ctype_wchar
* __thiscall
ctype_short_ctor_refs(ctype_wchar
*this, MSVCP_size_t refs
)
2304 ctype_wchar
*ret
= ctype_wchar_ctor_refs(this, refs
);
2305 this->base
.facet
.vtable
= &MSVCP_ctype_short_vtable
;
2309 /* ??0?$ctype@G@std@@IAE@PBDI@Z */
2310 /* ??0?$ctype@G@std@@IEAA@PEBD_K@Z */
2311 DEFINE_THISCALL_WRAPPER(ctype_short_ctor_name
, 12)
2312 ctype_wchar
* __thiscall
ctype_short_ctor_name(ctype_wchar
*this,
2313 const char *name
, MSVCP_size_t refs
)
2317 TRACE("(%p %s %lu)\n", this, debugstr_a(name
), refs
);
2319 ctype_base_ctor_refs(&this->base
, refs
);
2320 this->base
.facet
.vtable
= &MSVCP_ctype_short_vtable
;
2322 _Locinfo_ctor_cstr(&locinfo
, name
);
2323 ctype_wchar__Init(this, &locinfo
);
2324 _Locinfo_dtor(&locinfo
);
2328 /* ??_F?$ctype@_W@std@@QAEXXZ */
2329 /* ??_F?$ctype@_W@std@@QEAAXXZ */
2330 DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor
, 4)
2331 ctype_wchar
* __thiscall
ctype_wchar_ctor(ctype_wchar
*this)
2333 TRACE("(%p)\n", this);
2334 return ctype_short_ctor_refs(this, 0);
2337 /* ??_F?$ctype@G@std@@QAEXXZ */
2338 /* ??_F?$ctype@G@std@@QEAAXXZ */
2339 DEFINE_THISCALL_WRAPPER(ctype_short_ctor
, 4)
2340 ctype_wchar
* __thiscall
ctype_short_ctor(ctype_wchar
*this)
2342 ctype_wchar
*ret
= ctype_wchar_ctor(this);
2343 this->base
.facet
.vtable
= &MSVCP_ctype_short_vtable
;
2347 /* ??1?$ctype@G@std@@UAE@XZ */
2348 /* ??1?$ctype@G@std@@UEAA@XZ */
2349 /* ??1?$ctype@_W@std@@MAE@XZ */
2350 /* ??1?$ctype@_W@std@@MEAA@XZ */
2351 /* ??1?$ctype@G@std@@MAE@XZ */
2352 /* ??1?$ctype@G@std@@MEAA@XZ */
2353 DEFINE_THISCALL_WRAPPER(ctype_wchar_dtor
, 4)
2354 void __thiscall
ctype_wchar_dtor(ctype_wchar
*this)
2356 TRACE("(%p)\n", this);
2357 if(this->ctype
.delfl
)
2358 free((void*)this->ctype
.table
);
2359 #if _MSVCP_VER >= 110
2360 free(this->ctype
.name
);
2364 DEFINE_THISCALL_WRAPPER(ctype_wchar_vector_dtor
, 8)
2365 ctype_wchar
* __thiscall
ctype_wchar_vector_dtor(ctype_wchar
*this, unsigned int flags
)
2367 TRACE("(%p %x)\n", this, flags
);
2369 /* we have an array, with the number of elements stored before the first object */
2370 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
2372 for(i
=*ptr
-1; i
>=0; i
--)
2373 ctype_wchar_dtor(this+i
);
2374 MSVCRT_operator_delete(ptr
);
2376 ctype_wchar_dtor(this);
2378 MSVCRT_operator_delete(this);
2385 int __cdecl
_Wcrtomb(char *s
, wchar_t wch
, _Mbstatet
*state
, const _Cvtvec
*cvt
)
2390 TRACE("%p %d %p %p\n", s
, wch
, state
, cvt
);
2395 cp
= ___lc_codepage_func();
2407 size
= WideCharToMultiByte(cp
, 0, &wch
, 1, s
, MB_LEN_MAX
, NULL
, &def
);
2416 /* ?_Donarrow@?$ctype@_W@std@@IBED_WD@Z */
2417 /* ?_Donarrow@?$ctype@_W@std@@IEBAD_WD@Z */
2418 /* ?_Donarrow@?$ctype@G@std@@IBEDGD@Z */
2419 /* ?_Donarrow@?$ctype@G@std@@IEBADGD@Z */
2420 DEFINE_THISCALL_WRAPPER(ctype_wchar__Donarrow
, 12)
2421 char __thiscall
ctype_wchar__Donarrow(const ctype_wchar
*this, wchar_t ch
, char dflt
)
2423 char buf
[MB_LEN_MAX
];
2425 TRACE("(%p %d %d)\n", this, ch
, dflt
);
2427 return _Wcrtomb(buf
, ch
, NULL
, &this->cvt
)==1 ? buf
[0] : dflt
;
2430 /* ?do_narrow@?$ctype@_W@std@@MBED_WD@Z */
2431 /* ?do_narrow@?$ctype@_W@std@@MEBAD_WD@Z */
2432 /* ?do_narrow@?$ctype@G@std@@MBEDGD@Z */
2433 /* ?do_narrow@?$ctype@G@std@@MEBADGD@Z */
2434 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow_ch
, 12)
2435 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
2436 #define call_ctype_wchar_do_narrow_ch(this, ch, dflt) CALL_VTBL_FUNC(this, 52, \
2437 char, (const ctype_wchar*, wchar_t, char), (this, ch, dflt))
2438 #elif _MSVCP_VER <= 100
2439 #define call_ctype_wchar_do_narrow_ch(this, ch, dflt) CALL_VTBL_FUNC(this, 48, \
2440 char, (const ctype_wchar*, wchar_t, char), (this, ch, dflt))
2442 #define call_ctype_wchar_do_narrow_ch(this, ch, dflt) CALL_VTBL_FUNC(this, 56, \
2443 char, (const ctype_wchar*, wchar_t, char), (this, ch, dflt))
2445 char __thiscall
ctype_wchar_do_narrow_ch(const ctype_wchar
*this, wchar_t ch
, char dflt
)
2447 return ctype_wchar__Donarrow(this, ch
, dflt
);
2450 /* ?do_narrow@?$ctype@_W@std@@MBEPB_WPB_W0DPAD@Z */
2451 /* ?do_narrow@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD@Z */
2452 /* ?do_narrow@?$ctype@G@std@@MBEPBGPBG0DPAD@Z */
2453 /* ?do_narrow@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD@Z */
2454 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_narrow
, 20)
2455 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
2456 #define call_ctype_wchar_do_narrow(this, first, last, dflt, dest) CALL_VTBL_FUNC(this, 48, \
2457 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*), \
2458 (this, first, last, dflt, dest))
2459 #elif _MSVCP_VER <= 100
2460 #define call_ctype_wchar_do_narrow(this, first, last, dflt, dest) CALL_VTBL_FUNC(this, 44, \
2461 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*), \
2462 (this, first, last, dflt, dest))
2464 #define call_ctype_wchar_do_narrow(this, first, last, dflt, dest) CALL_VTBL_FUNC(this, 52, \
2465 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*), \
2466 (this, first, last, dflt, dest))
2468 const wchar_t* __thiscall
ctype_wchar_do_narrow(const ctype_wchar
*this,
2469 const wchar_t *first
, const wchar_t *last
, char dflt
, char *dest
)
2471 TRACE("(%p %p %p %d %p)\n", this, first
, last
, dflt
, dest
);
2472 for(; first
<last
; first
++)
2473 *dest
++ = ctype_wchar__Donarrow(this, *first
, dflt
);
2477 /* ?_Do_narrow_s@?$ctype@_W@std@@MBEPB_WPB_W0DPADI@Z */
2478 /* ?_Do_narrow_s@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD_K@Z */
2479 /* ?_Do_narrow_s@?$ctype@G@std@@MBEPBGPBG0DPADI@Z */
2480 /* ?_Do_narrow_s@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD_K@Z */
2481 DEFINE_THISCALL_WRAPPER(ctype_wchar__Do_narrow_s
, 24)
2482 #define call_ctype_wchar__Do_narrow_s(this, first, last, dflt, dest, size) CALL_VTBL_FUNC(this, 56, \
2483 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, char, char*, MSVCP_size_t), \
2484 (this, first, last, dflt, dest, size))
2485 const wchar_t* __thiscall
ctype_wchar__Do_narrow_s(const ctype_wchar
*this,
2486 const wchar_t *first
, const wchar_t *last
, char dflt
, char *dest
, MSVCP_size_t size
)
2488 TRACE("(%p %p %p %d %p %lu)\n", this, first
, last
, dflt
, dest
, size
);
2489 /* This function converts all multi-byte characters to dflt,
2490 * thanks to it result size is known before converting */
2491 if(last
-first
> size
)
2493 return ctype_wchar_do_narrow(this, first
, last
, dflt
, dest
);
2496 /* ?narrow@?$ctype@_W@std@@QBED_WD@Z */
2497 /* ?narrow@?$ctype@_W@std@@QEBAD_WD@Z */
2498 /* ?narrow@?$ctype@G@std@@QBEDGD@Z */
2499 /* ?narrow@?$ctype@G@std@@QEBADGD@Z */
2500 DEFINE_THISCALL_WRAPPER(ctype_wchar_narrow_ch
, 12)
2501 char __thiscall
ctype_wchar_narrow_ch(const ctype_wchar
*this, wchar_t ch
, char dflt
)
2503 TRACE("(%p %d %d)\n", this, ch
, dflt
);
2504 return call_ctype_wchar_do_narrow_ch(this, ch
, dflt
);
2507 /* ?narrow@?$ctype@_W@std@@QBEPB_WPB_W0DPAD@Z */
2508 /* ?narrow@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD@Z */
2509 /* ?narrow@?$ctype@G@std@@QBEPBGPBG0DPAD@Z */
2510 /* ?narrow@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD@Z */
2511 DEFINE_THISCALL_WRAPPER(ctype_wchar_narrow
, 20)
2512 const wchar_t* __thiscall
ctype_wchar_narrow(const ctype_wchar
*this,
2513 const wchar_t *first
, const wchar_t *last
, char dflt
, char *dest
)
2515 TRACE("(%p %p %p %d %p)\n", this, first
, last
, dflt
, dest
);
2516 return call_ctype_wchar_do_narrow(this, first
, last
, dflt
, dest
);
2519 /* ?_Narrow_s@?$ctype@_W@std@@QBEPB_WPB_W0DPADI@Z */
2520 /* ?_Narrow_s@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD_K@Z */
2521 /* ?_Narrow_s@?$ctype@G@std@@QBEPBGPBG0DPADI@Z */
2522 /* ?_Narrow_s@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD_K@Z */
2523 DEFINE_THISCALL_WRAPPER(ctype_wchar__Narrow_s
, 24)
2524 const wchar_t* __thiscall
ctype_wchar__Narrow_s(const ctype_wchar
*this, const wchar_t *first
,
2525 const wchar_t *last
, char dflt
, char *dest
, MSVCP_size_t size
)
2527 TRACE("(%p %p %p %d %p %lu)\n", this, first
, last
, dflt
, dest
, size
);
2528 return call_ctype_wchar__Do_narrow_s(this, first
, last
, dflt
, dest
, size
);
2532 int __cdecl
_Mbrtowc(wchar_t *out
, const char *in
, MSVCP_size_t len
, _Mbstatet
*state
, const _Cvtvec
*cvt
)
2538 TRACE("(%p %p %lu %p %p)\n", out
, in
, len
, state
, cvt
);
2546 cp
= ___lc_codepage_func();
2550 *out
= (unsigned char)*in
;
2552 memset(state
, 0, sizeof(*state
));
2556 if(MBSTATET_TO_INT(state
)) {
2557 ((char*)&MBSTATET_TO_INT(state
))[1] = *in
;
2559 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, (char*)&MBSTATET_TO_INT(state
), 2, out
, out
? 1 : 0)) {
2560 memset(state
, 0, sizeof(*state
));
2565 memset(state
, 0, sizeof(*state
));
2569 GetCPInfo(cp
, &cp_info
);
2571 for(i
=0; i
<MAX_LEADBYTES
; i
+=2) {
2572 if(!cp_info
.LeadByte
[i
+1])
2574 if((unsigned char)*in
>=cp_info
.LeadByte
[i
] && (unsigned char)*in
<=cp_info
.LeadByte
[i
+1]) {
2582 MBSTATET_TO_INT(state
) = (unsigned char)*in
;
2586 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, in
, 2, out
, out
? 1 : 0)) {
2593 if(!MultiByteToWideChar(cp
, MB_ERR_INVALID_CHARS
, in
, 1, out
, out
? 1 : 0)) {
2600 static inline wchar_t mb_to_wc(char ch
, const _Cvtvec
*cvt
)
2605 memset(&state
, 0, sizeof(state
));
2606 return _Mbrtowc(&ret
, &ch
, 1, &state
, cvt
) == 1 ? ret
: 0;
2609 /* ?_Dowiden@?$ctype@_W@std@@IBE_WD@Z */
2610 /* ?_Dowiden@?$ctype@_W@std@@IEBA_WD@Z */
2611 /* ?_Dowiden@?$ctype@G@std@@IBEGD@Z */
2612 /* ?_Dowiden@?$ctype@G@std@@IEBAGD@Z */
2613 DEFINE_THISCALL_WRAPPER(ctype_wchar__Dowiden
, 8)
2614 wchar_t __thiscall
ctype_wchar__Dowiden(const ctype_wchar
*this, char ch
)
2619 TRACE("(%p %d)\n", this, ch
);
2621 memset(&state
, 0, sizeof(state
));
2622 return _Mbrtowc(&ret
, &ch
, 1, &state
, &this->cvt
)<0 ? WEOF
: ret
;
2625 /* ?do_widen@?$ctype@_W@std@@MBE_WD@Z */
2626 /* ?do_widen@?$ctype@_W@std@@MEBA_WD@Z */
2627 /* ?do_widen@?$ctype@G@std@@MBEGD@Z */
2628 /* ?do_widen@?$ctype@G@std@@MEBAGD@Z */
2629 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_widen_ch
, 8)
2630 #if _MSVCP_VER <= 100
2631 #define call_ctype_wchar_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 40, \
2632 wchar_t, (const ctype_wchar*, char), (this, ch))
2634 #define call_ctype_wchar_do_widen_ch(this, ch) CALL_VTBL_FUNC(this, 48, \
2635 wchar_t, (const ctype_wchar*, char), (this, ch))
2637 wchar_t __thiscall
ctype_wchar_do_widen_ch(const ctype_wchar
*this, char ch
)
2639 return ctype_wchar__Dowiden(this, ch
);
2642 /* ?do_widen@?$ctype@_W@std@@MBEPBDPBD0PA_W@Z */
2643 /* ?do_widen@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W@Z */
2644 /* ?do_widen@?$ctype@G@std@@MBEPBDPBD0PAG@Z */
2645 /* ?do_widen@?$ctype@G@std@@MEBAPEBDPEBD0PEAG@Z */
2646 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_widen
, 16)
2647 #if _MSVCP_VER <= 100
2648 #define call_ctype_wchar_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 36, \
2649 const char*, (const ctype_wchar*, const char*, const char*, wchar_t*), \
2650 (this, first, last, dest))
2652 #define call_ctype_wchar_do_widen(this, first, last, dest) CALL_VTBL_FUNC(this, 44, \
2653 const char*, (const ctype_wchar*, const char*, const char*, wchar_t*), \
2654 (this, first, last, dest))
2656 const char* __thiscall
ctype_wchar_do_widen(const ctype_wchar
*this,
2657 const char *first
, const char *last
, wchar_t *dest
)
2659 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2660 for(; first
<last
; first
++)
2661 *dest
++ = ctype_wchar__Dowiden(this, *first
);
2665 /* ?_Do_widen_s@?$ctype@_W@std@@MBEPBDPBD0PA_WI@Z */
2666 /* ?_Do_widen_s@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W_K@Z */
2667 /* ?_Do_widen_s@?$ctype@G@std@@MBEPBDPBD0PAGI@Z */
2668 /* ?_Do_widen_s@?$ctype@G@std@@MEBAPEBDPEBD0PEAG_K@Z */
2669 DEFINE_THISCALL_WRAPPER(ctype_wchar__Do_widen_s
, 20)
2670 #define call_ctype_wchar__Do_widen_s(this, first, last, dest, size) CALL_VTBL_FUNC(this, 44, \
2671 const char*, (const ctype_wchar*, const char*, const char*, wchar_t*, MSVCP_size_t), \
2672 (this, first, last, dest, size))
2673 const char* __thiscall
ctype_wchar__Do_widen_s(const ctype_wchar
*this,
2674 const char *first
, const char *last
, wchar_t *dest
, MSVCP_size_t size
)
2676 TRACE("(%p %p %p %p %lu)\n", this, first
, last
, dest
, size
);
2677 /* This function converts all multi-byte characters to WEOF,
2678 * thanks to it result size is known before converting */
2679 if(size
< last
-first
)
2681 return ctype_wchar_do_widen(this, first
, last
, dest
);
2684 /* ?widen@?$ctype@_W@std@@QBE_WD@Z */
2685 /* ?widen@?$ctype@_W@std@@QEBA_WD@Z */
2686 /* ?widen@?$ctype@G@std@@QBEGD@Z */
2687 /* ?widen@?$ctype@G@std@@QEBAGD@Z */
2688 DEFINE_THISCALL_WRAPPER(ctype_wchar_widen_ch
, 8)
2689 wchar_t __thiscall
ctype_wchar_widen_ch(const ctype_wchar
*this, char ch
)
2691 TRACE("(%p %d)\n", this, ch
);
2692 return call_ctype_wchar_do_widen_ch(this, ch
);
2695 /* ?widen@?$ctype@_W@std@@QBEPBDPBD0PA_W@Z */
2696 /* ?widen@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W@Z */
2697 /* ?widen@?$ctype@G@std@@QBEPBDPBD0PAG@Z */
2698 /* ?widen@?$ctype@G@std@@QEBAPEBDPEBD0PEAG@Z */
2699 DEFINE_THISCALL_WRAPPER(ctype_wchar_widen
, 16)
2700 const char* __thiscall
ctype_wchar_widen(const ctype_wchar
*this,
2701 const char *first
, const char *last
, wchar_t *dest
)
2703 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
2704 return call_ctype_wchar_do_widen(this, first
, last
, dest
);
2707 /* ?_Widen_s@?$ctype@_W@std@@QBEPBDPBD0PA_WI@Z */
2708 /* ?_Widen_s@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W_K@Z */
2709 /* ?_Widen_s@?$ctype@G@std@@QBEPBDPBD0PAGI@Z */
2710 /* ?_Widen_s@?$ctype@G@std@@QEBAPEBDPEBD0PEAG_K@Z */
2711 DEFINE_THISCALL_WRAPPER(ctype_wchar__Widen_s
, 20)
2712 const char* __thiscall
ctype_wchar__Widen_s(const ctype_wchar
*this,
2713 const char *first
, const char *last
, wchar_t *dest
, MSVCP_size_t size
)
2715 TRACE("(%p %p %p %p %lu)\n", this, first
, last
, dest
, size
);
2716 return call_ctype_wchar__Do_widen_s(this, first
, last
, dest
, size
);
2719 /* ?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2720 /* ?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2721 MSVCP_size_t __cdecl
ctype_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
2723 TRACE("(%p %p)\n", facet
, loc
);
2725 if(facet
&& !*facet
) {
2728 *facet
= MSVCRT_operator_new(sizeof(ctype_wchar
));
2730 ERR("Out of memory\n");
2731 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
2735 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
2736 ctype_wchar_ctor_locinfo((ctype_wchar
*)*facet
, &locinfo
, 0);
2737 _Locinfo_dtor(&locinfo
);
2743 /* ?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@@Z */
2744 /* ?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
2745 MSVCP_size_t __cdecl
ctype_wchar__Getcat_old(const locale_facet
**facet
)
2747 return ctype_wchar__Getcat(facet
, locale_classic());
2750 /* ?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
2751 /* ?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
2752 MSVCP_size_t __cdecl
ctype_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
2754 if(facet
&& !*facet
) {
2755 ctype_wchar__Getcat(facet
, loc
);
2756 (*(locale_facet
**)facet
)->vtable
= &MSVCP_ctype_short_vtable
;
2762 /* ?_Getcat@?$ctype@G@std@@SAIPAPBVfacet@locale@2@@Z */
2763 /* ?_Getcat@?$ctype@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
2764 MSVCP_size_t __cdecl
ctype_short__Getcat_old(const locale_facet
**facet
)
2766 return ctype_short__Getcat(facet
, locale_classic());
2770 wchar_t __cdecl
_Towlower(wchar_t ch
, const _Ctypevec
*ctype
)
2772 TRACE("(%d %p)\n", ch
, ctype
);
2773 return tolowerW(ch
);
2776 ctype_wchar
* ctype_wchar_use_facet(const locale
*loc
)
2778 static ctype_wchar
*obj
= NULL
;
2781 const locale_facet
*fac
;
2783 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
2784 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_wchar_id
));
2786 _Lockit_dtor(&lock
);
2787 return (ctype_wchar
*)fac
;
2791 _Lockit_dtor(&lock
);
2795 ctype_wchar__Getcat(&fac
, loc
);
2796 obj
= (ctype_wchar
*)fac
;
2797 call_locale_facet__Incref(&obj
->base
.facet
);
2798 locale_facet_register(&obj
->base
.facet
);
2799 _Lockit_dtor(&lock
);
2804 ctype_wchar
* ctype_short_use_facet(const locale
*loc
)
2806 static ctype_wchar
*obj
= NULL
;
2809 const locale_facet
*fac
;
2811 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
2812 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&ctype_short_id
));
2814 _Lockit_dtor(&lock
);
2815 return (ctype_wchar
*)fac
;
2819 _Lockit_dtor(&lock
);
2823 ctype_short__Getcat(&fac
, loc
);
2824 obj
= (ctype_wchar
*)fac
;
2825 call_locale_facet__Incref(&obj
->base
.facet
);
2826 locale_facet_register(&obj
->base
.facet
);
2827 _Lockit_dtor(&lock
);
2832 /* ?do_tolower@?$ctype@_W@std@@MBE_W_W@Z */
2833 /* ?do_tolower@?$ctype@_W@std@@MEBA_W_W@Z */
2834 /* ?do_tolower@?$ctype@G@std@@MBEGG@Z */
2835 /* ?do_tolower@?$ctype@G@std@@MEBAGG@Z */
2836 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_tolower_ch
, 8)
2837 #if _MSVCP_VER <= 100
2838 #define call_ctype_wchar_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 24, \
2839 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2841 #define call_ctype_wchar_do_tolower_ch(this, ch) CALL_VTBL_FUNC(this, 32, \
2842 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2844 wchar_t __thiscall
ctype_wchar_do_tolower_ch(const ctype_wchar
*this, wchar_t ch
)
2846 return _Towlower(ch
, &this->ctype
);
2849 /* ?do_tolower@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */
2850 /* ?do_tolower@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z */
2851 /* ?do_tolower@?$ctype@G@std@@MBEPBGPAGPBG@Z */
2852 /* ?do_tolower@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */
2853 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_tolower
, 12)
2854 #if _MSVCP_VER <= 100
2855 #define call_ctype_wchar_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 20, \
2856 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2857 (this, first, last))
2859 #define call_ctype_wchar_do_tolower(this, first, last) CALL_VTBL_FUNC(this, 28, \
2860 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2861 (this, first, last))
2863 const wchar_t* __thiscall
ctype_wchar_do_tolower(const ctype_wchar
*this,
2864 wchar_t *first
, const wchar_t *last
)
2866 TRACE("(%p %p %p)\n", this, first
, last
);
2867 for(; first
<last
; first
++)
2868 *first
= _Towlower(*first
, &this->ctype
);
2872 /* ?tolower@?$ctype@_W@std@@QBE_W_W@Z */
2873 /* ?tolower@?$ctype@_W@std@@QEBA_W_W@Z */
2874 /* ?tolower@?$ctype@G@std@@QBEGG@Z */
2875 /* ?tolower@?$ctype@G@std@@QEBAGG@Z */
2876 DEFINE_THISCALL_WRAPPER(ctype_wchar_tolower_ch
, 8)
2877 wchar_t __thiscall
ctype_wchar_tolower_ch(const ctype_wchar
*this, wchar_t ch
)
2879 TRACE("(%p %d)\n", this, ch
);
2880 return call_ctype_wchar_do_tolower_ch(this, ch
);
2883 /* ?tolower@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */
2884 /* ?tolower@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z */
2885 /* ?tolower@?$ctype@G@std@@QBEPBGPAGPBG@Z */
2886 /* ?tolower@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z */
2887 DEFINE_THISCALL_WRAPPER(ctype_wchar_tolower
, 12)
2888 const wchar_t* __thiscall
ctype_wchar_tolower(const ctype_wchar
*this,
2889 wchar_t *first
, const wchar_t *last
)
2891 TRACE("(%p %p %p)\n", this, first
, last
);
2892 return call_ctype_wchar_do_tolower(this, first
, last
);
2896 wchar_t __cdecl
_Towupper(wchar_t ch
, const _Ctypevec
*ctype
)
2898 TRACE("(%d %p)\n", ch
, ctype
);
2899 return toupperW(ch
);
2902 /* ?do_toupper@?$ctype@_W@std@@MBE_W_W@Z */
2903 /* ?do_toupper@?$ctype@_W@std@@MEBA_W_W@Z */
2904 /* ?do_toupper@?$ctype@G@std@@MBEGG@Z */
2905 /* ?do_toupper@?$ctype@G@std@@MEBAGG@Z */
2906 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper_ch
, 8)
2907 #if _MSVCP_VER <= 100
2908 #define call_ctype_wchar_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 32, \
2909 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2911 #define call_ctype_wchar_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 40, \
2912 wchar_t, (const ctype_wchar*, wchar_t), (this, ch))
2914 wchar_t __thiscall
ctype_wchar_do_toupper_ch(const ctype_wchar
*this, wchar_t ch
)
2916 return _Towupper(ch
, &this->ctype
);
2919 /* ?do_toupper@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */
2920 /* ?do_toupper@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z */
2921 /* ?do_toupper@?$ctype@G@std@@MBEPBGPAGPBG@Z */
2922 /* ?do_toupper@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */
2923 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper
, 12)
2924 #if _MSVCP_VER <= 100
2925 #define call_ctype_wchar_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 28, \
2926 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2927 (this, first, last))
2929 #define call_ctype_wchar_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 36, \
2930 const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \
2931 (this, first, last))
2933 const wchar_t* __thiscall
ctype_wchar_do_toupper(const ctype_wchar
*this,
2934 wchar_t *first
, const wchar_t *last
)
2936 TRACE("(%p %p %p)\n", this, first
, last
);
2937 for(; first
<last
; first
++)
2938 *first
= _Towupper(*first
, &this->ctype
);
2942 /* ?toupper@?$ctype@_W@std@@QBE_W_W@Z */
2943 /* ?toupper@?$ctype@_W@std@@QEBA_W_W@Z */
2944 /* ?toupper@?$ctype@G@std@@QBEGG@Z */
2945 /* ?toupper@?$ctype@G@std@@QEBAGG@Z */
2946 DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper_ch
, 8)
2947 wchar_t __thiscall
ctype_wchar_toupper_ch(const ctype_wchar
*this, wchar_t ch
)
2949 TRACE("(%p %d)\n", this, ch
);
2950 return call_ctype_wchar_do_toupper_ch(this, ch
);
2953 /* ?toupper@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */
2954 /* ?toupper@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z */
2955 /* ?toupper@?$ctype@G@std@@QBEPBGPAGPBG@Z */
2956 /* ?toupper@?$ctype@G@std@@QEBAPEBGPEAGPEBG@Z */
2957 DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper
, 12)
2958 const wchar_t* __thiscall
ctype_wchar_toupper(const ctype_wchar
*this,
2959 wchar_t *first
, const wchar_t *last
)
2961 TRACE("(%p %p %p)\n", this, first
, last
);
2962 return call_ctype_wchar_do_toupper(this, first
, last
);
2966 const wchar_t* __cdecl
_Getwctypes(const wchar_t *first
, const wchar_t *last
,
2967 short *mask
, const _Ctypevec
*ctype
)
2969 TRACE("(%p %p %p %p)\n", first
, last
, mask
, ctype
);
2970 GetStringTypeW(CT_CTYPE1
, first
, last
-first
, (WORD
*)mask
);
2975 short __cdecl
_Getwctype(wchar_t ch
, const _Ctypevec
*ctype
)
2978 _Getwctypes(&ch
, &ch
+1, &mask
, ctype
);
2982 /* ?do_is@?$ctype@_W@std@@MBE_NF_W@Z */
2983 /* ?do_is@?$ctype@_W@std@@MEBA_NF_W@Z */
2984 /* ?do_is@?$ctype@G@std@@MBE_NFG@Z */
2985 /* ?do_is@?$ctype@G@std@@MEBA_NFG@Z */
2986 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is_ch
, 12)
2987 #if _MSVCP_VER <= 100
2988 #define call_ctype_wchar_do_is_ch(this, mask, ch) CALL_VTBL_FUNC(this, 8, \
2989 MSVCP_bool, (const ctype_wchar*, short, wchar_t), (this, mask, ch))
2991 #define call_ctype_wchar_do_is_ch(this, mask, ch) CALL_VTBL_FUNC(this, 16, \
2992 MSVCP_bool, (const ctype_wchar*, short, wchar_t), (this, mask, ch))
2994 MSVCP_bool __thiscall
ctype_wchar_do_is_ch(const ctype_wchar
*this, short mask
, wchar_t ch
)
2996 TRACE("(%p %x %d)\n", this, mask
, ch
);
2997 return (_Getwctype(ch
, &this->ctype
) & mask
) != 0;
3000 /* ?do_is@?$ctype@_W@std@@MBEPB_WPB_W0PAF@Z */
3001 /* ?do_is@?$ctype@_W@std@@MEBAPEB_WPEB_W0PEAF@Z */
3002 /* ?do_is@?$ctype@G@std@@MBEPBGPBG0PAF@Z */
3003 /* ?do_is@?$ctype@G@std@@MEBAPEBGPEBG0PEAF@Z */
3004 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_is
, 16)
3005 #if _MSVCP_VER <= 100
3006 #define call_ctype_wchar_do_is(this, first, last, dest) CALL_VTBL_FUNC(this, 4, \
3007 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, short*), \
3008 (this, first, last, dest))
3010 #define call_ctype_wchar_do_is(this, first, last, dest) CALL_VTBL_FUNC(this, 12, \
3011 const wchar_t*, (const ctype_wchar*, const wchar_t*, const wchar_t*, short*), \
3012 (this, first, last, dest))
3014 const wchar_t* __thiscall
ctype_wchar_do_is(const ctype_wchar
*this,
3015 const wchar_t *first
, const wchar_t *last
, short *dest
)
3017 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
3018 return _Getwctypes(first
, last
, dest
, &this->ctype
);
3021 /* ?is@?$ctype@_W@std@@QBE_NF_W@Z */
3022 /* ?is@?$ctype@_W@std@@QEBA_NF_W@Z */
3023 /* ?is@?$ctype@G@std@@QBE_NFG@Z */
3024 /* ?is@?$ctype@G@std@@QEBA_NFG@Z */
3025 DEFINE_THISCALL_WRAPPER(ctype_wchar_is_ch
, 12)
3026 MSVCP_bool __thiscall
ctype_wchar_is_ch(const ctype_wchar
*this, short mask
, wchar_t ch
)
3028 TRACE("(%p %x %d)\n", this, mask
, ch
);
3029 return call_ctype_wchar_do_is_ch(this, mask
, ch
);
3032 /* ?is@?$ctype@_W@std@@QBEPB_WPB_W0PAF@Z */
3033 /* ?is@?$ctype@_W@std@@QEBAPEB_WPEB_W0PEAF@Z */
3034 /* ?is@?$ctype@G@std@@QBEPBGPBG0PAF@Z */
3035 /* ?is@?$ctype@G@std@@QEBAPEBGPEBG0PEAF@Z */
3036 DEFINE_THISCALL_WRAPPER(ctype_wchar_is
, 16)
3037 const wchar_t* __thiscall
ctype_wchar_is(const ctype_wchar
*this,
3038 const wchar_t *first
, const wchar_t *last
, short *dest
)
3040 TRACE("(%p %p %p %p)\n", this, first
, last
, dest
);
3041 return call_ctype_wchar_do_is(this, first
, last
, dest
);
3044 /* ?do_scan_is@?$ctype@_W@std@@MBEPB_WFPB_W0@Z */
3045 /* ?do_scan_is@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z */
3046 /* ?do_scan_is@?$ctype@G@std@@MBEPBGFPBG0@Z */
3047 /* ?do_scan_is@?$ctype@G@std@@MEBAPEBGFPEBG0@Z */
3048 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_scan_is
, 16)
3049 #if _MSVCP_VER <= 100
3050 #define call_ctype_wchar_do_scan_is(this, mask, first, last) CALL_VTBL_FUNC(this, 12, \
3051 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
3052 (this, mask, first, last))
3054 #define call_ctype_wchar_do_scan_is(this, mask, first, last) CALL_VTBL_FUNC(this, 20, \
3055 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
3056 (this, mask, first, last))
3058 const wchar_t* __thiscall
ctype_wchar_do_scan_is(const ctype_wchar
*this,
3059 short mask
, const wchar_t *first
, const wchar_t *last
)
3061 TRACE("(%p %d %p %p)\n", this, mask
, first
, last
);
3062 for(; first
<last
; first
++)
3063 if(!ctype_wchar_is_ch(this, mask
, *first
))
3068 /* ?scan_is@?$ctype@_W@std@@QBEPB_WFPB_W0@Z */
3069 /* ?scan_is@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z */
3070 /* ?scan_is@?$ctype@G@std@@QBEPBGFPBG0@Z */
3071 /* ?scan_is@?$ctype@G@std@@QEBAPEBGFPEBG0@Z */
3072 DEFINE_THISCALL_WRAPPER(ctype_wchar_scan_is
, 16)
3073 const wchar_t* __thiscall
ctype_wchar_scan_is(const ctype_wchar
*this,
3074 short mask
, const wchar_t *first
, const wchar_t *last
)
3076 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
3077 return call_ctype_wchar_do_scan_is(this, mask
, first
, last
);
3080 /* ?do_scan_not@?$ctype@_W@std@@MBEPB_WFPB_W0@Z */
3081 /* ?do_scan_not@?$ctype@_W@std@@MEBAPEB_WFPEB_W0@Z */
3082 /* ?do_scan_not@?$ctype@G@std@@MBEPBGFPBG0@Z */
3083 /* ?do_scan_not@?$ctype@G@std@@MEBAPEBGFPEBG0@Z */
3084 DEFINE_THISCALL_WRAPPER(ctype_wchar_do_scan_not
, 16)
3085 #if _MSVCP_VER <= 100
3086 #define call_ctype_wchar_do_scan_not(this, mask, first, last) CALL_VTBL_FUNC(this, 16, \
3087 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
3088 (this, mask, first, last))
3090 #define call_ctype_wchar_do_scan_not(this, mask, first, last) CALL_VTBL_FUNC(this, 24, \
3091 const wchar_t*, (const ctype_wchar*, short, const wchar_t*, const wchar_t*), \
3092 (this, mask, first, last))
3094 const wchar_t* __thiscall
ctype_wchar_do_scan_not(const ctype_wchar
*this,
3095 short mask
, const wchar_t *first
, const wchar_t *last
)
3097 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
3098 for(; first
<last
; first
++)
3099 if(ctype_wchar_is_ch(this, mask
, *first
))
3104 /* ?scan_not@?$ctype@_W@std@@QBEPB_WFPB_W0@Z */
3105 /* ?scan_not@?$ctype@_W@std@@QEBAPEB_WFPEB_W0@Z */
3106 /* ?scan_not@?$ctype@G@std@@QBEPBGFPBG0@Z */
3107 /* ?scan_not@?$ctype@G@std@@QEBAPEBGFPEBG0@Z */
3108 DEFINE_THISCALL_WRAPPER(ctype_wchar_scan_not
, 16)
3109 const wchar_t* __thiscall
ctype_wchar_scan_not(const ctype_wchar
*this,
3110 short mask
, const wchar_t *first
, const wchar_t *last
)
3112 TRACE("(%p %x %p %p)\n", this, mask
, first
, last
);
3113 return call_ctype_wchar_do_scan_not(this, mask
, first
, last
);
3116 /* ??_7codecvt_base@std@@6B@ */
3117 extern const vtable_ptr MSVCP_codecvt_base_vtable
;
3119 /* ??0codecvt_base@std@@QAE@I@Z */
3120 /* ??0codecvt_base@std@@QEAA@_K@Z */
3121 DEFINE_THISCALL_WRAPPER(codecvt_base_ctor_refs
, 8)
3122 codecvt_base
* __thiscall
codecvt_base_ctor_refs(codecvt_base
*this, MSVCP_size_t refs
)
3124 TRACE("(%p %lu)\n", this, refs
);
3125 locale_facet_ctor_refs(&this->facet
, refs
);
3126 this->facet
.vtable
= &MSVCP_codecvt_base_vtable
;
3130 /* ??_Fcodecvt_base@std@@QAEXXZ */
3131 /* ??_Fcodecvt_base@std@@QEAAXXZ */
3132 DEFINE_THISCALL_WRAPPER(codecvt_base_ctor
, 4)
3133 codecvt_base
* __thiscall
codecvt_base_ctor(codecvt_base
*this)
3135 return codecvt_base_ctor_refs(this, 0);
3138 /* ??1codecvt_base@std@@UAE@XZ */
3139 /* ??1codecvt_base@std@@UEAA@XZ */
3140 DEFINE_THISCALL_WRAPPER(codecvt_base_dtor
, 4)
3141 void __thiscall
codecvt_base_dtor(codecvt_base
*this)
3143 TRACE("(%p)\n", this);
3144 locale_facet_dtor(&this->facet
);
3147 DEFINE_THISCALL_WRAPPER(codecvt_base_vector_dtor
, 8)
3148 codecvt_base
* __thiscall
codecvt_base_vector_dtor(codecvt_base
*this, unsigned int flags
)
3150 TRACE("(%p %x)\n", this, flags
);
3152 /* we have an array, with the number of elements stored before the first object */
3153 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
3155 for(i
=*ptr
-1; i
>=0; i
--)
3156 codecvt_base_dtor(this+i
);
3157 MSVCRT_operator_delete(ptr
);
3159 codecvt_base_dtor(this);
3161 MSVCRT_operator_delete(this);
3167 /* ?do_always_noconv@codecvt_base@std@@MBE_NXZ */
3168 /* ?do_always_noconv@codecvt_base@std@@MEBA_NXZ */
3169 #if _MSVCP_VER <= 100
3170 #define call_codecvt_base_do_always_noconv(this) CALL_VTBL_FUNC(this, 4, \
3171 MSVCP_bool, (const codecvt_base*), (this))
3173 #define call_codecvt_base_do_always_noconv(this) CALL_VTBL_FUNC(this, 12, \
3174 MSVCP_bool, (const codecvt_base*), (this))
3176 DEFINE_THISCALL_WRAPPER(codecvt_base_do_always_noconv
, 4)
3177 MSVCP_bool __thiscall
codecvt_base_do_always_noconv(const codecvt_base
*this)
3179 TRACE("(%p)\n", this);
3180 return _MSVCP_VER
<= 100;
3183 /* ?always_noconv@codecvt_base@std@@QBE_NXZ */
3184 /* ?always_noconv@codecvt_base@std@@QEBA_NXZ */
3185 DEFINE_THISCALL_WRAPPER(codecvt_base_always_noconv
, 4)
3186 MSVCP_bool __thiscall
codecvt_base_always_noconv(const codecvt_base
*this)
3188 TRACE("(%p)\n", this);
3189 return call_codecvt_base_do_always_noconv(this);
3192 /* ?do_max_length@codecvt_base@std@@MBEHXZ */
3193 /* ?do_max_length@codecvt_base@std@@MEBAHXZ */
3194 #if _MSVCP_VER <= 100
3195 #define call_codecvt_base_do_max_length(this) CALL_VTBL_FUNC(this, 8, \
3196 int, (const codecvt_base*), (this))
3198 #define call_codecvt_base_do_max_length(this) CALL_VTBL_FUNC(this, 16, \
3199 int, (const codecvt_base*), (this))
3201 DEFINE_THISCALL_WRAPPER(codecvt_base_do_max_length
, 4)
3202 int __thiscall
codecvt_base_do_max_length(const codecvt_base
*this)
3204 TRACE("(%p)\n", this);
3208 /* ?max_length@codecvt_base@std@@QBEHXZ */
3209 /* ?max_length@codecvt_base@std@@QEBAHXZ */
3210 DEFINE_THISCALL_WRAPPER(codecvt_base_max_length
, 4)
3211 int __thiscall
codecvt_base_max_length(const codecvt_base
*this)
3213 TRACE("(%p)\n", this);
3214 return call_codecvt_base_do_max_length(this);
3217 /* ?do_encoding@codecvt_base@std@@MBEHXZ */
3218 /* ?do_encoding@codecvt_base@std@@MEBAHXZ */
3219 #if _MSVCP_VER <= 100
3220 #define call_codecvt_base_do_encoding(this) CALL_VTBL_FUNC(this, 12, \
3221 int, (const codecvt_base*), (this))
3223 #define call_codecvt_base_do_encoding(this) CALL_VTBL_FUNC(this, 20, \
3224 int, (const codecvt_base*), (this))
3226 DEFINE_THISCALL_WRAPPER(codecvt_base_do_encoding
, 4)
3227 int __thiscall
codecvt_base_do_encoding(const codecvt_base
*this)
3229 TRACE("(%p)\n", this);
3233 /* ?encoding@codecvt_base@std@@QBEHXZ */
3234 /* ?encoding@codecvt_base@std@@QEBAHXZ */
3235 DEFINE_THISCALL_WRAPPER(codecvt_base_encoding
, 4)
3236 int __thiscall
codecvt_base_encoding(const codecvt_base
*this)
3238 TRACE("(%p)\n", this);
3239 return call_codecvt_base_do_encoding(this);
3242 /* ?id@?$codecvt@DDH@std@@2V0locale@2@A */
3243 locale_id codecvt_char_id
= {0};
3245 /* ??_7?$codecvt@DDH@std@@6B@ */
3246 extern const vtable_ptr MSVCP_codecvt_char_vtable
;
3248 /* ?_Init@?$codecvt@DDH@std@@IAEXABV_Locinfo@2@@Z */
3249 /* ?_Init@?$codecvt@DDH@std@@IEAAXAEBV_Locinfo@2@@Z */
3250 DEFINE_THISCALL_WRAPPER(codecvt_char__Init
, 8)
3251 void __thiscall
codecvt_char__Init(codecvt_char
*this, const _Locinfo
*locinfo
)
3253 TRACE("(%p %p)\n", this, locinfo
);
3256 /* ??0?$codecvt@DDH@std@@QAE@ABV_Locinfo@1@I@Z */
3257 /* ??0?$codecvt@DDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
3258 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor_locinfo
, 12)
3259 codecvt_char
* __thiscall
codecvt_char_ctor_locinfo(codecvt_char
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
3261 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
3262 codecvt_base_ctor_refs(&this->base
, refs
);
3263 this->base
.facet
.vtable
= &MSVCP_codecvt_char_vtable
;
3267 /* ??0?$codecvt@DDH@std@@QAE@I@Z */
3268 /* ??0?$codecvt@DDH@std@@QEAA@_K@Z */
3269 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor_refs
, 8)
3270 codecvt_char
* __thiscall
codecvt_char_ctor_refs(codecvt_char
*this, MSVCP_size_t refs
)
3272 return codecvt_char_ctor_locinfo(this, NULL
, refs
);
3275 /* ??_F?$codecvt@DDH@std@@QAEXXZ */
3276 /* ??_F?$codecvt@DDH@std@@QEAAXXZ */
3277 DEFINE_THISCALL_WRAPPER(codecvt_char_ctor
, 4)
3278 codecvt_char
* __thiscall
codecvt_char_ctor(codecvt_char
*this)
3280 return codecvt_char_ctor_locinfo(this, NULL
, 0);
3283 /* ??1?$codecvt@DDH@std@@UAE@XZ */
3284 /* ??1?$codecvt@DDH@std@@UEAA@XZ */
3285 /* ??1?$codecvt@DDH@std@@MAE@XZ */
3286 /* ??1?$codecvt@DDH@std@@MEAA@XZ */
3287 DEFINE_THISCALL_WRAPPER(codecvt_char_dtor
, 4)
3288 void __thiscall
codecvt_char_dtor(codecvt_char
*this)
3290 TRACE("(%p)\n", this);
3291 codecvt_base_dtor(&this->base
);
3294 DEFINE_THISCALL_WRAPPER(codecvt_char_vector_dtor
, 8)
3295 codecvt_char
* __thiscall
codecvt_char_vector_dtor(codecvt_char
*this, unsigned int flags
)
3297 TRACE("(%p %x)\n", this, flags
);
3299 /* we have an array, with the number of elements stored before the first object */
3300 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
3302 for(i
=*ptr
-1; i
>=0; i
--)
3303 codecvt_char_dtor(this+i
);
3304 MSVCRT_operator_delete(ptr
);
3306 codecvt_char_dtor(this);
3308 MSVCRT_operator_delete(this);
3314 /* ?_Getcat@?$codecvt@DDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3315 /* ?_Getcat@?$codecvt@DDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3316 MSVCP_size_t __cdecl
codecvt_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
3318 TRACE("(%p %p)\n", facet
, loc
);
3320 if(facet
&& !*facet
) {
3321 *facet
= MSVCRT_operator_new(sizeof(codecvt_char
));
3323 ERR("Out of memory\n");
3324 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3327 codecvt_char_ctor((codecvt_char
*)*facet
);
3333 /* ?_Getcat@?$codecvt@DDH@std@@SAIPAPBVfacet@locale@2@@Z */
3334 /* ?_Getcat@?$codecvt@DDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3335 MSVCP_size_t __cdecl
codecvt_char__Getcat_old(const locale_facet
**facet
)
3337 return codecvt_char__Getcat(facet
, locale_classic());
3340 codecvt_char
* codecvt_char_use_facet(const locale
*loc
)
3342 static codecvt_char
*obj
= NULL
;
3345 const locale_facet
*fac
;
3347 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3348 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_char_id
));
3350 _Lockit_dtor(&lock
);
3351 return (codecvt_char
*)fac
;
3355 _Lockit_dtor(&lock
);
3359 codecvt_char__Getcat(&fac
, loc
);
3360 obj
= (codecvt_char
*)fac
;
3361 call_locale_facet__Incref(&obj
->base
.facet
);
3362 locale_facet_register(&obj
->base
.facet
);
3363 _Lockit_dtor(&lock
);
3368 /* ?do_always_noconv@?$codecvt@DDH@std@@MBE_NXZ */
3369 /* ?do_always_noconv@?$codecvt@DDH@std@@MEBA_NXZ */
3370 DEFINE_THISCALL_WRAPPER(codecvt_char_do_always_noconv
, 4)
3371 MSVCP_bool __thiscall
codecvt_char_do_always_noconv(const codecvt_char
*this)
3373 TRACE("(%p)\n", this);
3377 /* ?do_in@?$codecvt@DDH@std@@MBEHAAHPBD1AAPBDPAD3AAPAD@Z */
3378 /* ?do_in@?$codecvt@DDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
3379 #if _MSVCP_VER <= 100
3380 #define call_codecvt_char_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
3381 CALL_VTBL_FUNC(this, 16, int, \
3382 (const codecvt_char*, _Mbstatet*, const char*, const char*, const char**, char*, char*, char**), \
3383 (this, state, from, from_end, from_next, to, to_end, to_next))
3385 #define call_codecvt_char_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
3386 CALL_VTBL_FUNC(this, 24, int, \
3387 (const codecvt_char*, _Mbstatet*, const char*, const char*, const char**, char*, char*, char**), \
3388 (this, state, from, from_end, from_next, to, to_end, to_next))
3390 DEFINE_THISCALL_WRAPPER(codecvt_char_do_in
, 32)
3391 int __thiscall
codecvt_char_do_in(const codecvt_char
*this, _Mbstatet
*state
,
3392 const char *from
, const char *from_end
, const char **from_next
,
3393 char *to
, char *to_end
, char **to_next
)
3395 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
3396 from_next
, to
, to_end
, to_next
);
3399 return CODECVT_noconv
;
3402 /* ?in@?$codecvt@DDH@std@@QBEHAAHPBD1AAPBDPAD3AAPAD@Z */
3403 /* ?in@?$codecvt@DDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
3404 DEFINE_THISCALL_WRAPPER(codecvt_char_in
, 32)
3405 int __thiscall
codecvt_char_in(const codecvt_char
*this, _Mbstatet
*state
,
3406 const char *from
, const char *from_end
, const char **from_next
,
3407 char *to
, char *to_end
, char **to_next
)
3409 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
3410 from_next
, to
, to_end
, to_next
);
3411 return call_codecvt_char_do_in(this, state
, from
, from_end
, from_next
,
3412 to
, to_end
, to_next
);
3415 /* ?do_out@?$codecvt@DDH@std@@MBEHAAHPBD1AAPBDPAD3AAPAD@Z */
3416 /* ?do_out@?$codecvt@DDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
3417 #if _MSVCP_VER <= 100
3418 #define call_codecvt_char_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
3419 CALL_VTBL_FUNC(this, 20, int, \
3420 (const codecvt_char*, _Mbstatet*, const char*, const char*, const char**, char*, char*, char**), \
3421 (this, state, from, from_end, from_next, to, to_end, to_next))
3423 #define call_codecvt_char_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
3424 CALL_VTBL_FUNC(this, 28, int, \
3425 (const codecvt_char*, _Mbstatet*, const char*, const char*, const char**, char*, char*, char**), \
3426 (this, state, from, from_end, from_next, to, to_end, to_next))
3428 DEFINE_THISCALL_WRAPPER(codecvt_char_do_out
, 32)
3429 int __thiscall
codecvt_char_do_out(const codecvt_char
*this, _Mbstatet
*state
,
3430 const char *from
, const char *from_end
, const char **from_next
,
3431 char *to
, char *to_end
, char **to_next
)
3433 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3434 from_end
, from_next
, to
, to_end
, to_next
);
3437 return CODECVT_noconv
;
3440 /* ?out@?$codecvt@DDH@std@@QBEHAAHPBD1AAPBDPAD3AAPAD@Z */
3441 /* ?out@?$codecvt@DDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAD3AEAPEAD@Z */
3442 DEFINE_THISCALL_WRAPPER(codecvt_char_out
, 32)
3443 int __thiscall
codecvt_char_out(const codecvt_char
*this, _Mbstatet
*state
,
3444 const char *from
, const char *from_end
, const char **from_next
,
3445 char *to
, char *to_end
, char **to_next
)
3447 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
, from_end
,
3448 from_next
, to
, to_end
, to_next
);
3449 return call_codecvt_char_do_out(this, state
, from
, from_end
, from_next
,
3450 to
, to_end
, to_next
);
3453 /* ?do_unshift@?$codecvt@DDH@std@@MBEHAAHPAD1AAPAD@Z */
3454 /* ?do_unshift@?$codecvt@DDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
3455 #if _MSVCP_VER <= 100
3456 #define call_codecvt_char_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 24, \
3457 int, (const codecvt_char*, _Mbstatet*, char*, char*, char**), (this, state, to, to_end, to_next))
3459 #define call_codecvt_char_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 32, \
3460 int, (const codecvt_char*, _Mbstatet*, char*, char*, char**), (this, state, to, to_end, to_next))
3462 DEFINE_THISCALL_WRAPPER(codecvt_char_do_unshift
, 20)
3463 int __thiscall
codecvt_char_do_unshift(const codecvt_char
*this,
3464 _Mbstatet
*state
, char *to
, char *to_end
, char **to_next
)
3466 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3468 return CODECVT_noconv
;
3471 /* ?unshift@?$codecvt@DDH@std@@QBEHAAHPAD1AAPAD@Z */
3472 /* ?unshift@?$codecvt@DDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
3473 DEFINE_THISCALL_WRAPPER(codecvt_char_unshift
, 20)
3474 int __thiscall
codecvt_char_unshift(const codecvt_char
*this,
3475 _Mbstatet
*state
, char *to
, char *to_end
, char **to_next
)
3477 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3478 return call_codecvt_char_do_unshift(this, state
, to
, to_end
, to_next
);
3481 /* ?do_length@?$codecvt@DDH@std@@MBEHABHPBD1I@Z */
3482 /* ?do_length@?$codecvt@DDH@std@@MEBAHAEBHPEBD1_K@Z */
3483 #if _MSVCP_VER <= 100
3484 #define call_codecvt_char_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 28, \
3485 int, (const codecvt_char*, const _Mbstatet*, const char*, const char*, MSVCP_size_t), \
3486 (this, state, from, from_end, max))
3488 #define call_codecvt_char_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 36, \
3489 int, (const codecvt_char*, const _Mbstatet*, const char*, const char*, MSVCP_size_t), \
3490 (this, state, from, from_end, max))
3492 DEFINE_THISCALL_WRAPPER(codecvt_char_do_length
, 20)
3493 int __thiscall
codecvt_char_do_length(const codecvt_char
*this, const _Mbstatet
*state
,
3494 const char *from
, const char *from_end
, MSVCP_size_t max
)
3496 TRACE("(%p %p %p %p %lu)\n", this, state
, from
, from_end
, max
);
3497 return (from_end
-from
> max
? max
: from_end
-from
);
3500 /* ?length@?$codecvt@DDH@std@@QBEHABHPBD1I@Z */
3501 /* ?length@?$codecvt@DDH@std@@QEBAHAEBHPEBD1_K@Z */
3502 DEFINE_THISCALL_WRAPPER(codecvt_char_length
, 20)
3503 int __thiscall
codecvt_char_length(const codecvt_char
*this, const _Mbstatet
*state
,
3504 const char *from
, const char *from_end
, MSVCP_size_t max
)
3506 TRACE("(%p %p %p %p %lu)\n", this, state
, from
, from_end
, max
);
3507 return call_codecvt_char_do_length(this, state
, from
, from_end
, max
);
3510 /* ?id@?$codecvt@_WDH@std@@2V0locale@2@A */
3511 locale_id codecvt_wchar_id
= {0};
3512 /* ?id@?$codecvt@GDH@std@@2V0locale@2@A */
3513 locale_id codecvt_short_id
= {0};
3515 /* ??_7?$codecvt@_WDH@std@@6B@ */
3516 extern const vtable_ptr MSVCP_codecvt_wchar_vtable
;
3517 /* ??_7?$codecvt@GDH@std@@6B@ */
3518 extern const vtable_ptr MSVCP_codecvt_short_vtable
;
3520 /* ?_Init@?$codecvt@GDH@std@@IAEXABV_Locinfo@2@@Z */
3521 /* ?_Init@?$codecvt@GDH@std@@IEAAXAEBV_Locinfo@2@@Z */
3522 /* ?_Init@?$codecvt@_WDH@std@@IAEXABV_Locinfo@2@@Z */
3523 /* ?_Init@?$codecvt@_WDH@std@@IEAAXAEBV_Locinfo@2@@Z */
3524 DEFINE_THISCALL_WRAPPER(codecvt_wchar__Init
, 8)
3525 void __thiscall
codecvt_wchar__Init(codecvt_wchar
*this, const _Locinfo
*locinfo
)
3527 TRACE("(%p %p)\n", this, locinfo
);
3528 _Locinfo__Getcvt(locinfo
, &this->cvt
);
3531 /* ??0?$codecvt@_WDH@std@@QAE@ABV_Locinfo@1@I@Z */
3532 /* ??0?$codecvt@_WDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
3533 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor_locinfo
, 12)
3534 codecvt_wchar
* __thiscall
codecvt_wchar_ctor_locinfo(codecvt_wchar
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
3536 TRACE("(%p %p %ld)\n", this, locinfo
, refs
);
3538 codecvt_base_ctor_refs(&this->base
, refs
);
3539 this->base
.facet
.vtable
= &MSVCP_codecvt_wchar_vtable
;
3541 codecvt_wchar__Init(this, locinfo
);
3545 /* ??0?$codecvt@GDH@std@@QAE@ABV_Locinfo@1@I@Z */
3546 /* ??0?$codecvt@GDH@std@@QEAA@AEBV_Locinfo@1@_K@Z */
3547 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor_locinfo
, 12)
3548 codecvt_wchar
* __thiscall
codecvt_short_ctor_locinfo(codecvt_wchar
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
3550 TRACE("(%p %p %ld)\n", this, locinfo
, refs
);
3552 codecvt_wchar_ctor_locinfo(this, locinfo
, refs
);
3553 this->base
.facet
.vtable
= &MSVCP_codecvt_short_vtable
;
3557 /* ??0?$codecvt@_WDH@std@@QAE@I@Z */
3558 /* ??0?$codecvt@_WDH@std@@QEAA@_K@Z */
3559 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor_refs
, 8)
3560 codecvt_wchar
* __thiscall
codecvt_wchar_ctor_refs(codecvt_wchar
*this, MSVCP_size_t refs
)
3564 TRACE("(%p %ld)\n", this, refs
);
3566 _Locinfo_ctor(&locinfo
);
3567 codecvt_wchar_ctor_locinfo(this, &locinfo
, refs
);
3568 _Locinfo_dtor(&locinfo
);
3572 /* ??0?$codecvt@GDH@std@@QAE@I@Z */
3573 /* ??0?$codecvt@GDH@std@@QEAA@_K@Z */
3574 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor_refs
, 8)
3575 codecvt_wchar
* __thiscall
codecvt_short_ctor_refs(codecvt_wchar
*this, MSVCP_size_t refs
)
3579 TRACE("(%p %ld)\n", this, refs
);
3581 _Locinfo_ctor(&locinfo
);
3582 codecvt_short_ctor_locinfo(this, &locinfo
, refs
);
3583 _Locinfo_dtor(&locinfo
);
3587 /* ??0?$codecvt@GDH@std@@IAE@PBDI@Z */
3588 /* ??0?$codecvt@GDH@std@@IEAA@PEBD_K@Z */
3589 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor_name
, 12)
3590 codecvt_wchar
* __thiscall
codecvt_short_ctor_name(codecvt_wchar
*this, const char *name
, MSVCP_size_t refs
)
3594 TRACE("(%p %s %ld)\n", this, name
, refs
);
3596 _Locinfo_ctor_cstr(&locinfo
, name
);
3597 codecvt_short_ctor_locinfo(this, &locinfo
, refs
);
3598 _Locinfo_dtor(&locinfo
);
3602 /* ??_F?$codecvt@_WDH@std@@QAEXXZ */
3603 /* ??_F?$codecvt@_WDH@std@@QEAAXXZ */
3604 DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor
, 4)
3605 codecvt_wchar
* __thiscall
codecvt_wchar_ctor(codecvt_wchar
*this)
3607 return codecvt_wchar_ctor_refs(this, 0);
3610 /* ??_F?$codecvt@GDH@std@@QAEXXZ */
3611 /* ??_F?$codecvt@GDH@std@@QEAAXXZ */
3612 DEFINE_THISCALL_WRAPPER(codecvt_short_ctor
, 4)
3613 codecvt_wchar
* __thiscall
codecvt_short_ctor(codecvt_wchar
*this)
3615 return codecvt_short_ctor_refs(this, 0);
3618 /* ??1?$codecvt@GDH@std@@UAE@XZ */
3619 /* ??1?$codecvt@GDH@std@@UEAA@XZ */
3620 /* ??1?$codecvt@GDH@std@@MAE@XZ */
3621 /* ??1?$codecvt@GDH@std@@MEAA@XZ */
3622 /* ??1?$codecvt@_WDH@std@@MAE@XZ */
3623 /* ??1?$codecvt@_WDH@std@@MEAA@XZ */
3624 DEFINE_THISCALL_WRAPPER(codecvt_wchar_dtor
, 4)
3625 void __thiscall
codecvt_wchar_dtor(codecvt_wchar
*this)
3627 TRACE("(%p)\n", this);
3628 codecvt_base_dtor(&this->base
);
3631 DEFINE_THISCALL_WRAPPER(codecvt_wchar_vector_dtor
, 8)
3632 codecvt_wchar
* __thiscall
codecvt_wchar_vector_dtor(codecvt_wchar
*this, unsigned int flags
)
3634 TRACE("(%p %x)\n", this, flags
);
3636 /* we have an array, with the number of elements stored before the first object */
3637 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
3639 for(i
=*ptr
-1; i
>=0; i
--)
3640 codecvt_wchar_dtor(this+i
);
3641 MSVCRT_operator_delete(ptr
);
3643 codecvt_wchar_dtor(this);
3645 MSVCRT_operator_delete(this);
3651 /* ?_Getcat@?$codecvt@_WDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3652 /* ?_Getcat@?$codecvt@_WDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3653 MSVCP_size_t __cdecl
codecvt_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
3655 TRACE("(%p %p)\n", facet
, loc
);
3657 if(facet
&& !*facet
) {
3660 *facet
= MSVCRT_operator_new(sizeof(codecvt_wchar
));
3662 ERR("Out of memory\n");
3663 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3667 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
3668 codecvt_wchar_ctor_locinfo((codecvt_wchar
*)*facet
, &locinfo
, 0);
3669 _Locinfo_dtor(&locinfo
);
3675 /* ?_Getcat@?$codecvt@_WDH@std@@SAIPAPBVfacet@locale@2@@Z */
3676 /* ?_Getcat@?$codecvt@_WDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3677 MSVCP_size_t __cdecl
codecvt_wchar__Getcat_old(const locale_facet
**facet
)
3679 return codecvt_wchar__Getcat(facet
, locale_classic());
3682 codecvt_wchar
* codecvt_wchar_use_facet(const locale
*loc
)
3684 static codecvt_wchar
*obj
= NULL
;
3687 const locale_facet
*fac
;
3689 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3690 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_wchar_id
));
3692 _Lockit_dtor(&lock
);
3693 return (codecvt_wchar
*)fac
;
3697 _Lockit_dtor(&lock
);
3701 codecvt_wchar__Getcat(&fac
, loc
);
3702 obj
= (codecvt_wchar
*)fac
;
3703 call_locale_facet__Incref(&obj
->base
.facet
);
3704 locale_facet_register(&obj
->base
.facet
);
3705 _Lockit_dtor(&lock
);
3710 /* ?_Getcat@?$codecvt@GDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
3711 /* ?_Getcat@?$codecvt@GDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
3712 MSVCP_size_t __cdecl
codecvt_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
3714 TRACE("(%p %p)\n", facet
, loc
);
3716 if(facet
&& !*facet
) {
3719 *facet
= MSVCRT_operator_new(sizeof(codecvt_wchar
));
3721 ERR("Out of memory\n");
3722 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
3726 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
3727 codecvt_short_ctor((codecvt_wchar
*)*facet
);
3728 _Locinfo_dtor(&locinfo
);
3734 /* ?_Getcat@?$codecvt@GDH@std@@SAIPAPBVfacet@locale@2@@Z */
3735 /* ?_Getcat@?$codecvt@GDH@std@@SA_KPEAPEBVfacet@locale@2@@Z */
3736 MSVCP_size_t __cdecl
codecvt_short__Getcat_old(const locale_facet
**facet
)
3738 return codecvt_short__Getcat(facet
, locale_classic());
3741 codecvt_wchar
* codecvt_short_use_facet(const locale
*loc
)
3743 static codecvt_wchar
*obj
= NULL
;
3746 const locale_facet
*fac
;
3748 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
3749 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&codecvt_short_id
));
3751 _Lockit_dtor(&lock
);
3752 return (codecvt_wchar
*)fac
;
3756 _Lockit_dtor(&lock
);
3760 codecvt_short__Getcat(&fac
, loc
);
3761 obj
= (codecvt_wchar
*)fac
;
3762 call_locale_facet__Incref(&obj
->base
.facet
);
3763 locale_facet_register(&obj
->base
.facet
);
3764 _Lockit_dtor(&lock
);
3769 /* ?_Id_func@?$codecvt@_WDH@std@@SAAAVid@locale@2@XZ */
3770 /* ?_Id_func@?$codecvt@_WDH@std@@SAAEAVid@locale@2@XZ */
3771 locale_id
* __cdecl
codecvt_wchar__Id_func(void)
3774 return &codecvt_wchar_id
;
3777 /* ?_Id_func@?$codecvt@GDH@std@@SAAAVid@locale@2@XZ */
3778 /* ?_Id_func@?$codecvt@GDH@std@@SAAEAVid@locale@2@XZ */
3779 locale_id
* __cdecl
codecvt_short__Id_func(void)
3782 return &codecvt_short_id
;
3785 /* ?do_always_noconv@?$codecvt@GDH@std@@MBE_NXZ */
3786 /* ?do_always_noconv@?$codecvt@GDH@std@@MEBA_NXZ */
3787 /* ?do_always_noconv@?$codecvt@_WDH@std@@MBE_NXZ */
3788 /* ?do_always_noconv@?$codecvt@_WDH@std@@MEBA_NXZ */
3789 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_always_noconv
, 4)
3790 MSVCP_bool __thiscall
codecvt_wchar_do_always_noconv(const codecvt_wchar
*this)
3792 TRACE("(%p)\n", this);
3796 /* ?do_max_length@?$codecvt@GDH@std@@MBEHXZ */
3797 /* ?do_max_length@?$codecvt@GDH@std@@MEBAHXZ */
3798 /* ?do_max_length@?$codecvt@_WDH@std@@MBEHXZ */
3799 /* ?do_max_length@?$codecvt@_WDH@std@@MEBAHXZ */
3800 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_max_length
, 4)
3801 int __thiscall
codecvt_wchar_do_max_length(const codecvt_wchar
*this)
3803 TRACE("(%p)\n", this);
3807 /* ?do_encoding@?$codecvt@GDH@std@@MBEHXZ */
3808 /* ?do_encoding@?$codecvt@GDH@std@@MEBAHXZ */
3809 /* ?do_encoding@?$codecvt@_WDH@std@@MBEHXZ */
3810 /* ?do_encoding@?$codecvt@_WDH@std@@MEBAHXZ */
3811 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_encoding
, 4)
3812 int __thiscall
codecvt_wchar_do_encoding(const codecvt_wchar
*this)
3814 TRACE("(%p)\n", this);
3818 /* ?do_in@?$codecvt@GDH@std@@MBEHAAHPBD1AAPBDPAG3AAPAG@Z */
3819 /* ?do_in@?$codecvt@GDH@std@@MEBAHAEAHPEBD1AEAPEBDPEAG3AEAPEAG@Z */
3820 /* ?do_in@?$codecvt@_WDH@std@@MBEHAAHPBD1AAPBDPA_W3AAPA_W@Z */
3821 /* ?do_in@?$codecvt@_WDH@std@@MEBAHAEAHPEBD1AEAPEBDPEA_W3AEAPEA_W@Z */
3822 #if _MSVCP_VER <= 100
3823 #define call_codecvt_wchar_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
3824 CALL_VTBL_FUNC(this, 16, int, \
3825 (const codecvt_wchar*, _Mbstatet*, const char*, const char*, const char**, wchar_t*, wchar_t*, wchar_t**), \
3826 (this, state, from, from_end, from_next, to, to_end, to_next))
3828 #define call_codecvt_wchar_do_in(this, state, from, from_end, from_next, to, to_end, to_next) \
3829 CALL_VTBL_FUNC(this, 24, int, \
3830 (const codecvt_wchar*, _Mbstatet*, const char*, const char*, const char**, wchar_t*, wchar_t*, wchar_t**), \
3831 (this, state, from, from_end, from_next, to, to_end, to_next))
3833 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_in
, 32)
3834 int __thiscall
codecvt_wchar_do_in(const codecvt_wchar
*this, _Mbstatet
*state
,
3835 const char *from
, const char *from_end
, const char **from_next
,
3836 wchar_t *to
, wchar_t *to_end
, wchar_t **to_next
)
3838 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3839 from_end
, from_next
, to
, to_end
, to_next
);
3844 while(*from_next
!=from_end
&& *to_next
!=to_end
) {
3845 switch(_Mbrtowc(*to_next
, *from_next
, from_end
-*from_next
, state
, &this->cvt
)) {
3847 *from_next
= from_end
;
3848 return CODECVT_partial
;
3850 return CODECVT_error
;
3864 /* ?in@?$codecvt@GDH@std@@QBEHAAHPBD1AAPBDPAG3AAPAG@Z */
3865 /* ?in@?$codecvt@GDH@std@@QEBAHAEAHPEBD1AEAPEBDPEAG3AEAPEAG@Z */
3866 /* ?in@?$codecvt@_WDH@std@@QBEHAAHPBD1AAPBDPA_W3AAPA_W@Z */
3867 /* ?in@?$codecvt@_WDH@std@@QEBAHAEAHPEBD1AEAPEBDPEA_W3AEAPEA_W@Z */
3868 DEFINE_THISCALL_WRAPPER(codecvt_wchar_in
, 32)
3869 int __thiscall
codecvt_wchar_in(const codecvt_wchar
*this, _Mbstatet
*state
,
3870 const char *from
, const char *from_end
, const char **from_next
,
3871 wchar_t *to
, wchar_t *to_end
, wchar_t **to_next
)
3873 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3874 from_end
, from_next
, to
, to_end
, to_next
);
3875 return call_codecvt_wchar_do_in(this, state
, from
,
3876 from_end
, from_next
, to
, to_end
, to_next
);
3879 /* ?do_out@?$codecvt@GDH@std@@MBEHAAHPBG1AAPBGPAD3AAPAD@Z */
3880 /* ?do_out@?$codecvt@GDH@std@@MEBAHAEAHPEBG1AEAPEBGPEAD3AEAPEAD@Z */
3881 /* ?do_out@?$codecvt@_WDH@std@@MBEHAAHPB_W1AAPB_WPAD3AAPAD@Z */
3882 /* ?do_out@?$codecvt@_WDH@std@@MEBAHAEAHPEB_W1AEAPEB_WPEAD3AEAPEAD@Z */
3883 #if _MSVCP_VER <= 100
3884 #define call_codecvt_wchar_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
3885 CALL_VTBL_FUNC(this, 20, int, \
3886 (const codecvt_wchar*, _Mbstatet*, const wchar_t*, const wchar_t*, const wchar_t**, char*, char*, char**), \
3887 (this, state, from, from_end, from_next, to, to_end, to_next))
3889 #define call_codecvt_wchar_do_out(this, state, from, from_end, from_next, to, to_end, to_next) \
3890 CALL_VTBL_FUNC(this, 28, int, \
3891 (const codecvt_wchar*, _Mbstatet*, const wchar_t*, const wchar_t*, const wchar_t**, char*, char*, char**), \
3892 (this, state, from, from_end, from_next, to, to_end, to_next))
3894 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_out
, 32)
3895 int __thiscall
codecvt_wchar_do_out(const codecvt_wchar
*this, _Mbstatet
*state
,
3896 const wchar_t *from
, const wchar_t *from_end
, const wchar_t **from_next
,
3897 char *to
, char *to_end
, char **to_next
)
3899 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3900 from_end
, from_next
, to
, to_end
, to_next
);
3905 while(*from_next
!=from_end
&& *to_next
!=to_end
) {
3906 _Mbstatet old_state
= *state
;
3908 char buf
[MB_LEN_MAX
];
3910 switch((size
= _Wcrtomb(buf
, **from_next
, state
, &this->cvt
))) {
3912 return CODECVT_error
;
3914 if(size
> from_end
-*from_next
) {
3916 return CODECVT_partial
;
3920 memcpy_s(*to_next
, to_end
-*to_next
, buf
, size
);
3928 /* ?out@?$codecvt@GDH@std@@QBEHAAHPBG1AAPBGPAD3AAPAD@Z */
3929 /* ?out@?$codecvt@GDH@std@@QEBAHAEAHPEBG1AEAPEBGPEAD3AEAPEAD@Z */
3930 /* ?out@?$codecvt@_WDH@std@@QBEHAAHPB_W1AAPB_WPAD3AAPAD@Z */
3931 /* ?out@?$codecvt@_WDH@std@@QEBAHAEAHPEB_W1AEAPEB_WPEAD3AEAPEAD@Z */
3932 DEFINE_THISCALL_WRAPPER(codecvt_wchar_out
, 32)
3933 int __thiscall
codecvt_wchar_out(const codecvt_wchar
*this, _Mbstatet
*state
,
3934 const wchar_t *from
, const wchar_t *from_end
, const wchar_t **from_next
,
3935 char *to
, char *to_end
, char **to_next
)
3937 TRACE("(%p %p %p %p %p %p %p %p)\n", this, state
, from
,
3938 from_end
, from_next
, to
, to_end
, to_next
);
3939 return call_codecvt_wchar_do_out(this, state
, from
,
3940 from_end
, from_next
, to
, to_end
, to_next
);
3943 /* ?do_unshift@?$codecvt@GDH@std@@MBEHAAHPAD1AAPAD@Z */
3944 /* ?do_unshift@?$codecvt@GDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
3945 /* ?do_unshift@?$codecvt@_WDH@std@@MBEHAAHPAD1AAPAD@Z */
3946 /* ?do_unshift@?$codecvt@_WDH@std@@MEBAHAEAHPEAD1AEAPEAD@Z */
3947 #if _MSVCP_VER <= 100
3948 #define call_codecvt_wchar_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 24, \
3949 int, (const codecvt_wchar*, _Mbstatet*, char*, char*, char**), (this, state, to, to_end, to_next))
3951 #define call_codecvt_wchar_do_unshift(this, state, to, to_end, to_next) CALL_VTBL_FUNC(this, 32, \
3952 int, (const codecvt_wchar*, _Mbstatet*, char*, char*, char**), (this, state, to, to_end, to_next))
3954 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_unshift
, 20)
3955 int __thiscall
codecvt_wchar_do_unshift(const codecvt_wchar
*this,
3956 _Mbstatet
*state
, char *to
, char *to_end
, char **to_next
)
3958 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3959 if(MBSTATET_TO_INT(state
))
3960 WARN("unexpected state: %x\n", MBSTATET_TO_INT(state
));
3966 /* ?unshift@?$codecvt@GDH@std@@QBEHAAHPAD1AAPAD@Z */
3967 /* ?unshift@?$codecvt@GDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
3968 /* ?unshift@?$codecvt@_WDH@std@@QBEHAAHPAD1AAPAD@Z */
3969 /* ?unshift@?$codecvt@_WDH@std@@QEBAHAEAHPEAD1AEAPEAD@Z */
3970 DEFINE_THISCALL_WRAPPER(codecvt_wchar_unshift
, 20)
3971 int __thiscall
codecvt_wchar_unshift(const codecvt_wchar
*this,
3972 _Mbstatet
*state
, char *to
, char *to_end
, char **to_next
)
3974 TRACE("(%p %p %p %p %p)\n", this, state
, to
, to_end
, to_next
);
3975 return call_codecvt_wchar_do_unshift(this, state
, to
, to_end
, to_next
);
3978 /* ?do_length@?$codecvt@GDH@std@@MBEHABHPBD1I@Z */
3979 /* ?do_length@?$codecvt@GDH@std@@MEBAHAEBHPEBD1_K@Z */
3980 /* ?do_length@?$codecvt@_WDH@std@@MBEHABHPBD1I@Z */
3981 /* ?do_length@?$codecvt@_WDH@std@@MEBAHAEBHPEBD1_K@Z */
3982 #if _MSVCP_VER <= 100
3983 #define call_codecvt_wchar_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 28, \
3984 int, (const codecvt_wchar*, const _Mbstatet*, const char*, const char*, MSVCP_size_t), \
3985 (this, state, from, from_end, max))
3987 #define call_codecvt_wchar_do_length(this, state, from, from_end, max) CALL_VTBL_FUNC(this, 36, \
3988 int, (const codecvt_wchar*, const _Mbstatet*, const char*, const char*, MSVCP_size_t), \
3989 (this, state, from, from_end, max))
3991 DEFINE_THISCALL_WRAPPER(codecvt_wchar_do_length
, 20)
3992 int __thiscall
codecvt_wchar_do_length(const codecvt_wchar
*this, const _Mbstatet
*state
,
3993 const char *from
, const char *from_end
, MSVCP_size_t max
)
3995 _Mbstatet tmp_state
= *state
;
3998 TRACE("(%p %p %p %p %ld)\n", this, state
, from
, from_end
, max
);
4000 while(ret
<max
&& from
!=from_end
) {
4001 switch(_Mbrtowc(NULL
, from
, from_end
-from
, &tmp_state
, &this->cvt
)) {
4018 /* ?length@?$codecvt@GDH@std@@QBEHABHPBD1I@Z */
4019 /* ?length@?$codecvt@GDH@std@@QEBAHAEBHPEBD1_K@Z */
4020 /* ?length@?$codecvt@_WDH@std@@QBEHABHPBD1I@Z */
4021 /* ?length@?$codecvt@_WDH@std@@QEBAHAEBHPEBD1_K@Z */
4022 DEFINE_THISCALL_WRAPPER(codecvt_wchar_length
, 20)
4023 int __thiscall
codecvt_wchar_length(const codecvt_wchar
*this, const _Mbstatet
*state
,
4024 const char *from
, const char *from_end
, MSVCP_size_t max
)
4026 TRACE("(%p %p %p %p %ld)\n", this, state
, from
, from_end
, max
);
4027 return call_codecvt_wchar_do_length(this, state
, from
, from_end
, max
);
4030 /* ?id@?$numpunct@D@std@@2V0locale@2@A */
4031 locale_id numpunct_char_id
= {0};
4033 /* ??_7?$numpunct@D@std@@6B@ */
4034 extern const vtable_ptr MSVCP_numpunct_char_vtable
;
4036 /* ?_Init@?$numpunct@D@std@@IAEXABV_Locinfo@2@_N@Z */
4037 /* ?_Init@?$numpunct@D@std@@IEAAXAEBV_Locinfo@2@_N@Z */
4038 DEFINE_THISCALL_WRAPPER(numpunct_char__Init
, 12)
4039 void __thiscall
numpunct_char__Init(numpunct_char
*this, const _Locinfo
*locinfo
, MSVCP_bool isdef
)
4043 TRACE("(%p %p %d)\n", this, locinfo
, isdef
);
4045 len
= strlen(_Locinfo__Getfalse(locinfo
))+1;
4046 this->false_name
= MSVCRT_operator_new(len
);
4047 if(this->false_name
)
4048 memcpy((char*)this->false_name
, _Locinfo__Getfalse(locinfo
), len
);
4050 len
= strlen(_Locinfo__Gettrue(locinfo
))+1;
4051 this->true_name
= MSVCRT_operator_new(len
);
4053 memcpy((char*)this->true_name
, _Locinfo__Gettrue(locinfo
), len
);
4056 this->grouping
= MSVCRT_operator_new(1);
4058 *(char*)this->grouping
= 0;
4063 const struct lconv
*lc
= _Locinfo__Getlconv(locinfo
);
4065 len
= strlen(lc
->grouping
)+1;
4066 this->grouping
= MSVCRT_operator_new(len
);
4068 memcpy((char*)this->grouping
, lc
->grouping
, len
);
4070 this->dp
= lc
->decimal_point
[0];
4071 this->sep
= lc
->thousands_sep
[0];
4074 if(!this->false_name
|| !this->true_name
|| !this->grouping
) {
4075 MSVCRT_operator_delete((char*)this->grouping
);
4076 MSVCRT_operator_delete((char*)this->false_name
);
4077 MSVCRT_operator_delete((char*)this->true_name
);
4079 ERR("Out of memory\n");
4080 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
4084 /* ?_Tidy@?$numpunct@D@std@@AAEXXZ */
4085 /* ?_Tidy@?$numpunct@D@std@@AEAAXXZ */
4086 DEFINE_THISCALL_WRAPPER(numpunct_char__Tidy
, 4)
4087 void __thiscall
numpunct_char__Tidy(numpunct_char
*this)
4089 TRACE("(%p)\n", this);
4091 MSVCRT_operator_delete((char*)this->grouping
);
4092 MSVCRT_operator_delete((char*)this->false_name
);
4093 MSVCRT_operator_delete((char*)this->true_name
);
4096 /* ??0?$numpunct@D@std@@QAE@ABV_Locinfo@1@I_N@Z */
4097 /* ??0?$numpunct@D@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
4098 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_locinfo
, 16)
4099 numpunct_char
* __thiscall
numpunct_char_ctor_locinfo(numpunct_char
*this,
4100 const _Locinfo
*locinfo
, MSVCP_size_t refs
, MSVCP_bool usedef
)
4102 TRACE("(%p %p %lu %d)\n", this, locinfo
, refs
, usedef
);
4103 locale_facet_ctor_refs(&this->facet
, refs
);
4104 this->facet
.vtable
= &MSVCP_numpunct_char_vtable
;
4105 numpunct_char__Init(this, locinfo
, usedef
);
4109 /* ??0?$numpunct@D@std@@IAE@PBDI_N@Z */
4110 /* ??0?$numpunct@D@std@@IEAA@PEBD_K_N@Z */
4111 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_name
, 16)
4112 numpunct_char
* __thiscall
numpunct_char_ctor_name(numpunct_char
*this,
4113 const char *name
, MSVCP_size_t refs
, MSVCP_bool usedef
)
4117 TRACE("(%p %s %lu %d)\n", this, debugstr_a(name
), refs
, usedef
);
4118 locale_facet_ctor_refs(&this->facet
, refs
);
4119 this->facet
.vtable
= &MSVCP_numpunct_char_vtable
;
4121 _Locinfo_ctor_cstr(&locinfo
, name
);
4122 numpunct_char__Init(this, &locinfo
, usedef
);
4123 _Locinfo_dtor(&locinfo
);
4127 /* ??0?$numpunct@D@std@@QAE@I@Z */
4128 /* ??0?$numpunct@D@std@@QEAA@_K@Z */
4129 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_refs
, 8)
4130 numpunct_char
* __thiscall
numpunct_char_ctor_refs(numpunct_char
*this, MSVCP_size_t refs
)
4132 TRACE("(%p %lu)\n", this, refs
);
4133 return numpunct_char_ctor_name(this, "C", refs
, FALSE
);
4136 /* ??_F?$numpunct@D@std@@QAEXXZ */
4137 /* ??_F?$numpunct@D@std@@QEAAXXZ */
4138 DEFINE_THISCALL_WRAPPER(numpunct_char_ctor
, 4)
4139 numpunct_char
* __thiscall
numpunct_char_ctor(numpunct_char
*this)
4141 return numpunct_char_ctor_refs(this, 0);
4144 /* ??1?$numpunct@D@std@@UAE@XZ */
4145 /* ??1?$numpunct@D@std@@UEAA@XZ */
4146 /* ??1?$numpunct@D@std@@MAE@XZ */
4147 /* ??1?$numpunct@D@std@@MEAA@XZ */
4148 DEFINE_THISCALL_WRAPPER(numpunct_char_dtor
, 4)
4149 void __thiscall
numpunct_char_dtor(numpunct_char
*this)
4151 TRACE("(%p)\n", this);
4152 numpunct_char__Tidy(this);
4155 DEFINE_THISCALL_WRAPPER(numpunct_char_vector_dtor
, 8)
4156 numpunct_char
* __thiscall
numpunct_char_vector_dtor(numpunct_char
*this, unsigned int flags
)
4158 TRACE("(%p %x)\n", this, flags
);
4160 /* we have an array, with the number of elements stored before the first object */
4161 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
4163 for(i
=*ptr
-1; i
>=0; i
--)
4164 numpunct_char_dtor(this+i
);
4165 MSVCRT_operator_delete(ptr
);
4167 numpunct_char_dtor(this);
4169 MSVCRT_operator_delete(this);
4175 /* ?_Getcat@?$numpunct@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4176 /* ?_Getcat@?$numpunct@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4177 MSVCP_size_t __cdecl
numpunct_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
4179 TRACE("(%p %p)\n", facet
, loc
);
4181 if(facet
&& !*facet
) {
4182 *facet
= MSVCRT_operator_new(sizeof(numpunct_char
));
4184 ERR("Out of memory\n");
4185 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
4188 numpunct_char_ctor_name((numpunct_char
*)*facet
,
4189 locale_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
4195 /* ?_Getcat@?$numpunct@D@std@@SAIPAPBVfacet@locale@2@@Z */
4196 /* ?_Getcat@?$numpunct@D@std@@SA_KPEAPEBVfacet@locale@2@@Z */
4197 MSVCP_size_t __cdecl
numpunct_char__Getcat_old(const locale_facet
**facet
)
4199 return numpunct_char__Getcat(facet
, locale_classic());
4202 static numpunct_char
* numpunct_char_use_facet(const locale
*loc
)
4204 static numpunct_char
*obj
= NULL
;
4207 const locale_facet
*fac
;
4209 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
4210 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_char_id
));
4212 _Lockit_dtor(&lock
);
4213 return (numpunct_char
*)fac
;
4217 _Lockit_dtor(&lock
);
4221 numpunct_char__Getcat(&fac
, loc
);
4222 obj
= (numpunct_char
*)fac
;
4223 call_locale_facet__Incref(&obj
->facet
);
4224 locale_facet_register(&obj
->facet
);
4225 _Lockit_dtor(&lock
);
4230 /* ?do_decimal_point@?$numpunct@D@std@@MBEDXZ */
4231 /* ?do_decimal_point@?$numpunct@D@std@@MEBADXZ */
4232 DEFINE_THISCALL_WRAPPER(numpunct_char_do_decimal_point
, 4)
4233 #if _MSVCP_VER <= 100
4234 #define call_numpunct_char_do_decimal_point(this) CALL_VTBL_FUNC(this, 4, \
4235 char, (const numpunct_char *this), (this))
4237 #define call_numpunct_char_do_decimal_point(this) CALL_VTBL_FUNC(this, 12, \
4238 char, (const numpunct_char *this), (this))
4240 char __thiscall
numpunct_char_do_decimal_point(const numpunct_char
*this)
4242 TRACE("(%p)\n", this);
4246 /* ?decimal_point@?$numpunct@D@std@@QBEDXZ */
4247 /* ?decimal_point@?$numpunct@D@std@@QEBADXZ */
4248 DEFINE_THISCALL_WRAPPER(numpunct_char_decimal_point
, 4)
4249 char __thiscall
numpunct_char_decimal_point(const numpunct_char
*this)
4251 TRACE("(%p)\n", this);
4252 return call_numpunct_char_do_decimal_point(this);
4255 /* ?do_thousands_sep@?$numpunct@D@std@@MBEDXZ */
4256 /* ?do_thousands_sep@?$numpunct@D@std@@MEBADXZ */
4257 DEFINE_THISCALL_WRAPPER(numpunct_char_do_thousands_sep
, 4)
4258 #if _MSVCP_VER <= 100
4259 #define call_numpunct_char_do_thousands_sep(this) CALL_VTBL_FUNC(this, 8, \
4260 char, (const numpunct_char*), (this))
4262 #define call_numpunct_char_do_thousands_sep(this) CALL_VTBL_FUNC(this, 16, \
4263 char, (const numpunct_char*), (this))
4265 char __thiscall
numpunct_char_do_thousands_sep(const numpunct_char
*this)
4267 TRACE("(%p)\n", this);
4271 /* ?thousands_sep@?$numpunct@D@std@@QBEDXZ */
4272 /* ?thousands_sep@?$numpunct@D@std@@QEBADXZ */
4273 DEFINE_THISCALL_WRAPPER(numpunct_char_thousands_sep
, 4)
4274 char __thiscall
numpunct_char_thousands_sep(const numpunct_char
*this)
4276 TRACE("(%p)\n", this);
4277 return call_numpunct_char_do_thousands_sep(this);
4280 /* ?do_grouping@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4281 /* ?do_grouping@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4282 DEFINE_THISCALL_WRAPPER(numpunct_char_do_grouping
, 8)
4283 #if _MSVCP_VER <= 100
4284 #define call_numpunct_char_do_grouping(this, ret) CALL_VTBL_FUNC(this, 12, \
4285 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4287 #define call_numpunct_char_do_grouping(this, ret) CALL_VTBL_FUNC(this, 20, \
4288 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4290 basic_string_char
* __thiscall
numpunct_char_do_grouping(
4291 const numpunct_char
*this, basic_string_char
*ret
)
4293 TRACE("(%p)\n", this);
4294 return MSVCP_basic_string_char_ctor_cstr(ret
, this->grouping
);
4297 /* ?grouping@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4298 /* ?grouping@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4299 DEFINE_THISCALL_WRAPPER(numpunct_char_grouping
, 8)
4300 basic_string_char
* __thiscall
numpunct_char_grouping(const numpunct_char
*this, basic_string_char
*ret
)
4302 TRACE("(%p)\n", this);
4303 return call_numpunct_char_do_grouping(this, ret
);
4306 /* ?do_falsename@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4307 /* ?do_falsename@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4308 DEFINE_THISCALL_WRAPPER(numpunct_char_do_falsename
, 8)
4309 #if _MSVCP_VER <= 100
4310 #define call_numpunct_char_do_falsename(this, ret) CALL_VTBL_FUNC(this, 16, \
4311 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4313 #define call_numpunct_char_do_falsename(this, ret) CALL_VTBL_FUNC(this, 24, \
4314 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4316 basic_string_char
* __thiscall
numpunct_char_do_falsename(
4317 const numpunct_char
*this, basic_string_char
*ret
)
4319 TRACE("(%p)\n", this);
4320 return MSVCP_basic_string_char_ctor_cstr(ret
, this->false_name
);
4323 /* ?falsename@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4324 /* ?falsename@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4325 DEFINE_THISCALL_WRAPPER(numpunct_char_falsename
, 8)
4326 basic_string_char
* __thiscall
numpunct_char_falsename(const numpunct_char
*this, basic_string_char
*ret
)
4328 TRACE("(%p)\n", this);
4329 return call_numpunct_char_do_falsename(this, ret
);
4332 /* ?do_truename@?$numpunct@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4333 /* ?do_truename@?$numpunct@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4334 DEFINE_THISCALL_WRAPPER(numpunct_char_do_truename
, 8)
4335 #if _MSVCP_VER <= 100
4336 #define call_numpunct_char_do_truename(this, ret) CALL_VTBL_FUNC(this, 20, \
4337 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4339 #define call_numpunct_char_do_truename(this, ret) CALL_VTBL_FUNC(this, 28, \
4340 basic_string_char*, (const numpunct_char*, basic_string_char*), (this, ret))
4342 basic_string_char
* __thiscall
numpunct_char_do_truename(
4343 const numpunct_char
*this, basic_string_char
*ret
)
4345 TRACE("(%p)\n", this);
4346 return MSVCP_basic_string_char_ctor_cstr(ret
, this->true_name
);
4349 /* ?truename@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4350 /* ?truename@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4351 DEFINE_THISCALL_WRAPPER(numpunct_char_truename
, 8)
4352 basic_string_char
* __thiscall
numpunct_char_truename(const numpunct_char
*this, basic_string_char
*ret
)
4354 TRACE("(%p)\n", this);
4355 return call_numpunct_char_do_truename(this, ret
);
4358 /* ?id@?$numpunct@_W@std@@2V0locale@2@A */
4359 locale_id numpunct_wchar_id
= {0};
4360 /* ?id@?$numpunct@G@std@@2V0locale@2@A */
4361 locale_id numpunct_short_id
= {0};
4363 /* ??_7?$numpunct@_W@std@@6B@ */
4364 extern const vtable_ptr MSVCP_numpunct_wchar_vtable
;
4365 /* ??_7?$numpunct@G@std@@6B@ */
4366 extern const vtable_ptr MSVCP_numpunct_short_vtable
;
4368 /* ?_Init@?$numpunct@_W@std@@IAEXABV_Locinfo@2@_N@Z */
4369 /* ?_Init@?$numpunct@_W@std@@IEAAXAEBV_Locinfo@2@_N@Z */
4370 /* ?_Init@?$numpunct@G@std@@IAEXABV_Locinfo@2@_N@Z */
4371 /* ?_Init@?$numpunct@G@std@@IEAAXAEBV_Locinfo@2@_N@Z */
4372 DEFINE_THISCALL_WRAPPER(numpunct_wchar__Init
, 12)
4373 void __thiscall
numpunct_wchar__Init(numpunct_wchar
*this,
4374 const _Locinfo
*locinfo
, MSVCP_bool isdef
)
4376 const char *to_convert
;
4380 TRACE("(%p %p %d)\n", this, locinfo
, isdef
);
4382 _Locinfo__Getcvt(locinfo
, &cvt
);
4384 to_convert
= _Locinfo__Getfalse(locinfo
);
4385 len
= MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1, NULL
, 0);
4386 this->false_name
= MSVCRT_operator_new(len
*sizeof(WCHAR
));
4387 if(this->false_name
)
4388 MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1,
4389 (wchar_t*)this->false_name
, len
);
4391 to_convert
= _Locinfo__Gettrue(locinfo
);
4392 len
= MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1, NULL
, 0);
4393 this->true_name
= MSVCRT_operator_new(len
*sizeof(WCHAR
));
4395 MultiByteToWideChar(cvt
.page
, 0, to_convert
, -1,
4396 (wchar_t*)this->true_name
, len
);
4399 this->grouping
= MSVCRT_operator_new(1);
4401 *(char*)this->grouping
= 0;
4406 const struct lconv
*lc
= _Locinfo__Getlconv(locinfo
);
4408 len
= strlen(lc
->grouping
)+1;
4409 this->grouping
= MSVCRT_operator_new(len
);
4411 memcpy((char*)this->grouping
, lc
->grouping
, len
);
4413 this->dp
= mb_to_wc(lc
->decimal_point
[0], &cvt
);
4414 this->sep
= mb_to_wc(lc
->thousands_sep
[0], &cvt
);
4417 if(!this->false_name
|| !this->true_name
|| !this->grouping
) {
4418 MSVCRT_operator_delete((char*)this->grouping
);
4419 MSVCRT_operator_delete((wchar_t*)this->false_name
);
4420 MSVCRT_operator_delete((wchar_t*)this->true_name
);
4422 ERR("Out of memory\n");
4423 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
4427 /* ?_Tidy@?$numpunct@_W@std@@AAEXXZ */
4428 /* ?_Tidy@?$numpunct@_W@std@@AEAAXXZ */
4429 /* ?_Tidy@?$numpunct@G@std@@AAEXXZ */
4430 /* ?_Tidy@?$numpunct@G@std@@AEAAXXZ */
4431 DEFINE_THISCALL_WRAPPER(numpunct_wchar__Tidy
, 4)
4432 void __thiscall
numpunct_wchar__Tidy(numpunct_wchar
*this)
4434 TRACE("(%p)\n", this);
4436 MSVCRT_operator_delete((char*)this->grouping
);
4437 MSVCRT_operator_delete((wchar_t*)this->false_name
);
4438 MSVCRT_operator_delete((wchar_t*)this->true_name
);
4441 /* ??0?$numpunct@_W@std@@QAE@ABV_Locinfo@1@I_N@Z */
4442 /* ??0?$numpunct@_W@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
4443 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_locinfo
, 16)
4444 numpunct_wchar
* __thiscall
numpunct_wchar_ctor_locinfo(numpunct_wchar
*this,
4445 const _Locinfo
*locinfo
, MSVCP_size_t refs
, MSVCP_bool usedef
)
4447 TRACE("(%p %p %lu %d)\n", this, locinfo
, refs
, usedef
);
4448 locale_facet_ctor_refs(&this->facet
, refs
);
4449 this->facet
.vtable
= &MSVCP_numpunct_wchar_vtable
;
4450 numpunct_wchar__Init(this, locinfo
, usedef
);
4454 /* ??0?$numpunct@G@std@@QAE@ABV_Locinfo@1@I_N@Z */
4455 /* ??0?$numpunct@G@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */
4456 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_locinfo
, 16)
4457 numpunct_wchar
* __thiscall
numpunct_short_ctor_locinfo(numpunct_wchar
*this,
4458 const _Locinfo
*locinfo
, MSVCP_size_t refs
, MSVCP_bool usedef
)
4460 numpunct_wchar_ctor_locinfo(this, locinfo
, refs
, usedef
);
4461 this->facet
.vtable
= &MSVCP_numpunct_short_vtable
;
4465 /* ??0?$numpunct@_W@std@@IAE@PBDI_N@Z */
4466 /* ??0?$numpunct@_W@std@@IEAA@PEBD_K_N@Z */
4467 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_name
, 16)
4468 numpunct_wchar
* __thiscall
numpunct_wchar_ctor_name(numpunct_wchar
*this,
4469 const char *name
, MSVCP_size_t refs
, MSVCP_bool usedef
)
4473 TRACE("(%p %s %lu %d)\n", this, debugstr_a(name
), refs
, usedef
);
4474 locale_facet_ctor_refs(&this->facet
, refs
);
4475 this->facet
.vtable
= &MSVCP_numpunct_wchar_vtable
;
4477 _Locinfo_ctor_cstr(&locinfo
, name
);
4478 numpunct_wchar__Init(this, &locinfo
, usedef
);
4479 _Locinfo_dtor(&locinfo
);
4483 /* ??0?$numpunct@G@std@@IAE@PBDI_N@Z */
4484 /* ??0?$numpunct@G@std@@IEAA@PEBD_K_N@Z */
4485 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_name
, 16)
4486 numpunct_wchar
* __thiscall
numpunct_short_ctor_name(numpunct_wchar
*this,
4487 const char *name
, MSVCP_size_t refs
, MSVCP_bool usedef
)
4489 numpunct_wchar_ctor_name(this, name
, refs
, usedef
);
4490 this->facet
.vtable
= &MSVCP_numpunct_short_vtable
;
4494 /* ??0?$numpunct@_W@std@@QAE@I@Z */
4495 /* ??0?$numpunct@_W@std@@QEAA@_K@Z */
4496 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_refs
, 8)
4497 numpunct_wchar
* __thiscall
numpunct_wchar_ctor_refs(numpunct_wchar
*this, MSVCP_size_t refs
)
4499 TRACE("(%p %lu)\n", this, refs
);
4500 return numpunct_wchar_ctor_name(this, "C", refs
, FALSE
);
4503 /* ??0?$numpunct@G@std@@QAE@I@Z */
4504 /* ??0?$numpunct@G@std@@QEAA@_K@Z */
4505 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_refs
, 8)
4506 numpunct_wchar
* __thiscall
numpunct_short_ctor_refs(numpunct_wchar
*this, MSVCP_size_t refs
)
4508 numpunct_wchar_ctor_refs(this, refs
);
4509 this->facet
.vtable
= &MSVCP_numpunct_short_vtable
;
4513 /* ??_F?$numpunct@_W@std@@QAEXXZ */
4514 /* ??_F?$numpunct@_W@std@@QEAAXXZ */
4515 DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor
, 4)
4516 numpunct_wchar
* __thiscall
numpunct_wchar_ctor(numpunct_wchar
*this)
4518 return numpunct_wchar_ctor_refs(this, 0);
4521 /* ??_F?$numpunct@G@std@@QAEXXZ */
4522 /* ??_F?$numpunct@G@std@@QEAAXXZ */
4523 DEFINE_THISCALL_WRAPPER(numpunct_short_ctor
, 4)
4524 numpunct_wchar
* __thiscall
numpunct_short_ctor(numpunct_wchar
*this)
4526 return numpunct_short_ctor_refs(this, 0);
4529 /* ??1?$numpunct@G@std@@UAE@XZ */
4530 /* ??1?$numpunct@G@std@@UEAA@XZ */
4531 /* ??1?$numpunct@_W@std@@MAE@XZ */
4532 /* ??1?$numpunct@_W@std@@MEAA@XZ */
4533 /* ??1?$numpunct@G@std@@MAE@XZ */
4534 /* ??1?$numpunct@G@std@@MEAA@XZ */
4535 DEFINE_THISCALL_WRAPPER(numpunct_wchar_dtor
, 4)
4536 void __thiscall
numpunct_wchar_dtor(numpunct_wchar
*this)
4538 TRACE("(%p)\n", this);
4539 numpunct_wchar__Tidy(this);
4542 DEFINE_THISCALL_WRAPPER(numpunct_wchar_vector_dtor
, 8)
4543 numpunct_wchar
* __thiscall
numpunct_wchar_vector_dtor(numpunct_wchar
*this, unsigned int flags
)
4545 TRACE("(%p %x)\n", this, flags
);
4547 /* we have an array, with the number of elements stored before the first object */
4548 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
4550 for(i
=*ptr
-1; i
>=0; i
--)
4551 numpunct_wchar_dtor(this+i
);
4552 MSVCRT_operator_delete(ptr
);
4554 numpunct_wchar_dtor(this);
4556 MSVCRT_operator_delete(this);
4562 /* ?_Getcat@?$numpunct@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4563 /* ?_Getcat@?$numpunct@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4564 MSVCP_size_t __cdecl
numpunct_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
4566 TRACE("(%p %p)\n", facet
, loc
);
4568 if(facet
&& !*facet
) {
4569 *facet
= MSVCRT_operator_new(sizeof(numpunct_wchar
));
4571 ERR("Out of memory\n");
4572 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
4575 numpunct_wchar_ctor_name((numpunct_wchar
*)*facet
,
4576 locale_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
4582 /* ?_Getcat@?$numpunct@_W@std@@SAIPAPBVfacet@locale@2@@Z */
4583 /* ?_Getcat@?$numpunct@_W@std@@SA_KPEAPEBVfacet@locale@2@@Z */
4584 MSVCP_size_t __cdecl
numpunct_wchar__Getcat_old(const locale_facet
**facet
)
4586 return numpunct_wchar__Getcat(facet
, locale_classic());
4589 static numpunct_wchar
* numpunct_wchar_use_facet(const locale
*loc
)
4591 static numpunct_wchar
*obj
= NULL
;
4594 const locale_facet
*fac
;
4596 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
4597 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_wchar_id
));
4599 _Lockit_dtor(&lock
);
4600 return (numpunct_wchar
*)fac
;
4604 _Lockit_dtor(&lock
);
4608 numpunct_wchar__Getcat(&fac
, loc
);
4609 obj
= (numpunct_wchar
*)fac
;
4610 call_locale_facet__Incref(&obj
->facet
);
4611 locale_facet_register(&obj
->facet
);
4612 _Lockit_dtor(&lock
);
4617 /* ?_Getcat@?$numpunct@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
4618 /* ?_Getcat@?$numpunct@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
4619 MSVCP_size_t __cdecl
numpunct_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
4621 TRACE("(%p %p)\n", facet
, loc
);
4623 if(facet
&& !*facet
) {
4624 *facet
= MSVCRT_operator_new(sizeof(numpunct_wchar
));
4626 ERR("Out of memory\n");
4627 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
4630 numpunct_short_ctor_name((numpunct_wchar
*)*facet
,
4631 locale_string_char_c_str(&loc
->ptr
->name
), 0, TRUE
);
4637 /* ?_Getcat@?$numpunct@G@std@@SAIPAPBVfacet@locale@2@@Z */
4638 /* ?_Getcat@?$numpunct@G@std@@SA_KPEAPEBVfacet@locale@2@@Z */
4639 MSVCP_size_t __cdecl
numpunct_short__Getcat_old(const locale_facet
**facet
)
4641 return numpunct_short__Getcat(facet
, locale_classic());
4644 static numpunct_wchar
* numpunct_short_use_facet(const locale
*loc
)
4646 static numpunct_wchar
*obj
= NULL
;
4649 const locale_facet
*fac
;
4651 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
4652 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&numpunct_short_id
));
4654 _Lockit_dtor(&lock
);
4655 return (numpunct_wchar
*)fac
;
4659 _Lockit_dtor(&lock
);
4663 numpunct_short__Getcat(&fac
, loc
);
4664 obj
= (numpunct_wchar
*)fac
;
4665 call_locale_facet__Incref(&obj
->facet
);
4666 locale_facet_register(&obj
->facet
);
4667 _Lockit_dtor(&lock
);
4672 /* ?do_decimal_point@?$numpunct@_W@std@@MBE_WXZ */
4673 /* ?do_decimal_point@?$numpunct@_W@std@@MEBA_WXZ */
4674 /* ?do_decimal_point@?$numpunct@G@std@@MBEGXZ */
4675 /* ?do_decimal_point@?$numpunct@G@std@@MEBAGXZ */
4676 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_decimal_point
, 4)
4677 #if _MSVCP_VER <= 100
4678 #define call_numpunct_wchar_do_decimal_point(this) CALL_VTBL_FUNC(this, 4, \
4679 wchar_t, (const numpunct_wchar *this), (this))
4681 #define call_numpunct_wchar_do_decimal_point(this) CALL_VTBL_FUNC(this, 12, \
4682 wchar_t, (const numpunct_wchar *this), (this))
4684 wchar_t __thiscall
numpunct_wchar_do_decimal_point(const numpunct_wchar
*this)
4686 TRACE("(%p)\n", this);
4690 /* ?decimal_point@?$numpunct@_W@std@@QBE_WXZ */
4691 /* ?decimal_point@?$numpunct@_W@std@@QEBA_WXZ */
4692 /* ?decimal_point@?$numpunct@G@std@@QBEGXZ */
4693 /* ?decimal_point@?$numpunct@G@std@@QEBAGXZ */
4694 DEFINE_THISCALL_WRAPPER(numpunct_wchar_decimal_point
, 4)
4695 wchar_t __thiscall
numpunct_wchar_decimal_point(const numpunct_wchar
*this)
4697 TRACE("(%p)\n", this);
4698 return call_numpunct_wchar_do_decimal_point(this);
4701 /* ?do_thousands_sep@?$numpunct@_W@std@@MBE_WXZ */
4702 /* ?do_thousands_sep@?$numpunct@_W@std@@MEBA_WXZ */
4703 /* ?do_thousands_sep@?$numpunct@G@std@@MBEGXZ */
4704 /* ?do_thousands_sep@?$numpunct@G@std@@MEBAGXZ */
4705 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_thousands_sep
, 4)
4706 #if _MSVCP_VER <= 100
4707 #define call_numpunct_wchar_do_thousands_sep(this) CALL_VTBL_FUNC(this, 8, \
4708 wchar_t, (const numpunct_wchar *this), (this))
4710 #define call_numpunct_wchar_do_thousands_sep(this) CALL_VTBL_FUNC(this, 16, \
4711 wchar_t, (const numpunct_wchar *this), (this))
4713 wchar_t __thiscall
numpunct_wchar_do_thousands_sep(const numpunct_wchar
*this)
4715 TRACE("(%p)\n", this);
4719 /* ?thousands_sep@?$numpunct@_W@std@@QBE_WXZ */
4720 /* ?thousands_sep@?$numpunct@_W@std@@QEBA_WXZ */
4721 /* ?thousands_sep@?$numpunct@G@std@@QBEGXZ */
4722 /* ?thousands_sep@?$numpunct@G@std@@QEBAGXZ */
4723 DEFINE_THISCALL_WRAPPER(numpunct_wchar_thousands_sep
, 4)
4724 wchar_t __thiscall
numpunct_wchar_thousands_sep(const numpunct_wchar
*this)
4726 TRACE("(%p)\n", this);
4727 return call_numpunct_wchar_do_thousands_sep(this);
4730 /* ?do_grouping@?$numpunct@_W@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4731 /* ?do_grouping@?$numpunct@_W@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4732 /* ?do_grouping@?$numpunct@G@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4733 /* ?do_grouping@?$numpunct@G@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4734 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_grouping
, 8)
4735 #if _MSVCP_VER <= 100
4736 #define call_numpunct_wchar_do_grouping(this, ret) CALL_VTBL_FUNC(this, 12, \
4737 basic_string_char*, (const numpunct_wchar*, basic_string_char*), (this, ret))
4739 #define call_numpunct_wchar_do_grouping(this, ret) CALL_VTBL_FUNC(this, 20, \
4740 basic_string_char*, (const numpunct_wchar*, basic_string_char*), (this, ret))
4742 basic_string_char
* __thiscall
numpunct_wchar_do_grouping(const numpunct_wchar
*this, basic_string_char
*ret
)
4744 TRACE("(%p)\n", this);
4745 return MSVCP_basic_string_char_ctor_cstr(ret
, this->grouping
);
4748 /* ?grouping@?$numpunct@_W@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4749 /* ?grouping@?$numpunct@_W@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4750 /* ?grouping@?$numpunct@G@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4751 /* ?grouping@?$numpunct@G@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
4752 DEFINE_THISCALL_WRAPPER(numpunct_wchar_grouping
, 8)
4753 basic_string_char
* __thiscall
numpunct_wchar_grouping(const numpunct_wchar
*this, basic_string_char
*ret
)
4755 TRACE("(%p)\n", this);
4756 return call_numpunct_wchar_do_grouping(this, ret
);
4759 /* ?do_falsename@?$numpunct@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4760 /* ?do_falsename@?$numpunct@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4761 /* ?do_falsename@?$numpunct@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4762 /* ?do_falsename@?$numpunct@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4763 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_falsename
, 8)
4764 #if _MSVCP_VER <= 100
4765 #define call_numpunct_wchar_do_falsename(this, ret) CALL_VTBL_FUNC(this, 16, \
4766 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
4768 #define call_numpunct_wchar_do_falsename(this, ret) CALL_VTBL_FUNC(this, 24, \
4769 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
4771 basic_string_wchar
* __thiscall
numpunct_wchar_do_falsename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4773 TRACE("(%p)\n", this);
4774 return MSVCP_basic_string_wchar_ctor_cstr(ret
, this->false_name
);
4777 /* ?falsename@?$numpunct@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4778 /* ?falsename@?$numpunct@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4779 /* ?falsename@?$numpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4780 /* ?falsename@?$numpunct@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4781 DEFINE_THISCALL_WRAPPER(numpunct_wchar_falsename
, 8)
4782 basic_string_wchar
* __thiscall
numpunct_wchar_falsename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4784 TRACE("(%p)\n", this);
4785 return call_numpunct_wchar_do_falsename(this, ret
);
4788 /* ?do_truename@?$numpunct@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4789 /* ?do_truename@?$numpunct@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4790 /* ?do_truename@?$numpunct@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4791 /* ?do_truename@?$numpunct@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4792 DEFINE_THISCALL_WRAPPER(numpunct_wchar_do_truename
, 8)
4793 #if _MSVCP_VER <= 100
4794 #define call_numpunct_wchar_do_truename(this, ret) CALL_VTBL_FUNC(this, 20, \
4795 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
4797 #define call_numpunct_wchar_do_truename(this, ret) CALL_VTBL_FUNC(this, 28, \
4798 basic_string_wchar*, (const numpunct_wchar*, basic_string_wchar*), (this, ret))
4800 basic_string_wchar
* __thiscall
numpunct_wchar_do_truename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4802 TRACE("(%p)\n", this);
4803 return MSVCP_basic_string_wchar_ctor_cstr(ret
, this->true_name
);
4806 /* ?truename@?$numpunct@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4807 /* ?truename@?$numpunct@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4808 /* ?truename@?$numpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4809 /* ?truename@?$numpunct@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4810 DEFINE_THISCALL_WRAPPER(numpunct_wchar_truename
, 8)
4811 basic_string_wchar
* __thiscall
numpunct_wchar_truename(const numpunct_wchar
*this, basic_string_wchar
*ret
)
4813 TRACE("(%p)\n", this);
4814 return call_numpunct_wchar_do_truename(this, ret
);
4817 double __cdecl
_Stod(const char *buf
, char **buf_end
, LONG exp
)
4819 double ret
= strtod(buf
, buf_end
);
4822 ret
*= pow(10, exp
);
4826 double __cdecl
_Stodx(const char *buf
, char **buf_end
, LONG exp
, int *err
)
4832 ret
= _Stod(buf
, buf_end
, exp
);
4842 float __cdecl
_Stof(const char *buf
, char **buf_end
, LONG exp
)
4844 return _Stod(buf
, buf_end
, exp
);
4847 float __cdecl
_Stofx(const char *buf
, char **buf_end
, LONG exp
, int *err
)
4849 return _Stodx(buf
, buf_end
, exp
, err
);
4852 __int64 __cdecl
_Stoll(const char *buf
, char **buf_end
, int base
)
4854 return _strtoi64(buf
, buf_end
, base
);
4857 __int64 __cdecl
_Stollx(const char *buf
, char **buf_end
, int base
, int *err
)
4863 ret
= _strtoi64(buf
, buf_end
, base
);
4873 LONG __cdecl
_Stolx(const char *buf
, char **buf_end
, int base
, int *err
)
4875 __int64 i
= _Stollx(buf
, buf_end
, base
, err
);
4876 if(!*err
&& i
!=(__int64
)((LONG
)i
))
4881 unsigned __int64 __cdecl
_Stoull(const char *buf
, char **buf_end
, int base
)
4883 return _strtoui64(buf
, buf_end
, base
);
4886 unsigned __int64 __cdecl
_Stoullx(const char *buf
, char **buf_end
, int base
, int *err
)
4888 unsigned __int64 ret
;
4892 ret
= _strtoui64(buf
, buf_end
, base
);
4902 ULONG __cdecl
_Stoul(const char *buf
, char **buf_end
, int base
)
4905 unsigned __int64 i
= _Stoullx(buf
[0]=='-' ? buf
+1 : buf
, buf_end
, base
, &err
);
4906 if(!err
&& i
!=(unsigned __int64
)((ULONG
)i
))
4908 return buf
[0]=='-' ? -i
: i
;
4911 ULONG __cdecl
_Stoulx(const char *buf
, char **buf_end
, int base
, int *err
)
4913 unsigned __int64 i
= _Stoullx(buf
[0]=='-' ? buf
+1 : buf
, buf_end
, base
, err
);
4914 if(!*err
&& i
!=(unsigned __int64
)((ULONG
)i
))
4916 return buf
[0]=='-' ? -i
: i
;
4919 /* ?id@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
4920 locale_id num_get_wchar_id
= {0};
4921 /* ?id@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
4922 locale_id num_get_short_id
= {0};
4924 /* ??_7?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
4925 extern const vtable_ptr MSVCP_num_get_wchar_vtable
;
4926 /* ??_7?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
4927 extern const vtable_ptr MSVCP_num_get_short_vtable
;
4929 /* ?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
4930 /* ?_Init@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
4931 /* ?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
4932 /* ?_Init@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
4933 DEFINE_THISCALL_WRAPPER(num_get_wchar__Init
, 8)
4934 void __thiscall
num_get_wchar__Init(num_get
*this, const _Locinfo
*locinfo
)
4936 TRACE("(%p %p)\n", this, locinfo
);
4937 #if _MSVCP_VER <= 100
4938 _Locinfo__Getcvt(locinfo
, &this->cvt
);
4942 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
4943 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
4944 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor_locinfo
, 12)
4945 num_get
* __thiscall
num_get_wchar_ctor_locinfo(num_get
*this,
4946 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
4948 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
4950 locale_facet_ctor_refs(&this->facet
, refs
);
4951 this->facet
.vtable
= &MSVCP_num_get_wchar_vtable
;
4953 num_get_wchar__Init(this, locinfo
);
4957 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
4958 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
4959 DEFINE_THISCALL_WRAPPER(num_get_short_ctor_locinfo
, 12)
4960 num_get
* __thiscall
num_get_short_ctor_locinfo(num_get
*this,
4961 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
4963 num_get_wchar_ctor_locinfo(this, locinfo
, refs
);
4964 this->facet
.vtable
= &MSVCP_num_get_short_vtable
;
4968 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
4969 /* ??0?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
4970 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor_refs
, 8)
4971 num_get
* __thiscall
num_get_wchar_ctor_refs(num_get
*this, MSVCP_size_t refs
)
4975 TRACE("(%p %lu)\n", this, refs
);
4977 _Locinfo_ctor(&locinfo
);
4978 num_get_wchar_ctor_locinfo(this, &locinfo
, refs
);
4979 _Locinfo_dtor(&locinfo
);
4983 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
4984 /* ??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
4985 DEFINE_THISCALL_WRAPPER(num_get_short_ctor_refs
, 8)
4986 num_get
* __thiscall
num_get_short_ctor_refs(num_get
*this, MSVCP_size_t refs
)
4988 num_get_wchar_ctor_refs(this, refs
);
4989 this->facet
.vtable
= &MSVCP_num_get_short_vtable
;
4993 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
4994 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
4995 DEFINE_THISCALL_WRAPPER(num_get_wchar_ctor
, 4)
4996 num_get
* __thiscall
num_get_wchar_ctor(num_get
*this)
4998 return num_get_wchar_ctor_refs(this, 0);
5001 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
5002 /* ??_F?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
5003 DEFINE_THISCALL_WRAPPER(num_get_short_ctor
, 4)
5004 num_get
* __thiscall
num_get_short_ctor(num_get
*this)
5006 return num_get_short_ctor_refs(this, 0);
5009 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@UAE@XZ */
5010 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@UEAA@XZ */
5011 /* ??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
5012 /* ??1?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
5013 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
5014 /* ??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
5015 DEFINE_THISCALL_WRAPPER(num_get_wchar_dtor
, 4)
5016 void __thiscall
num_get_wchar_dtor(num_get
*this)
5018 TRACE("(%p)\n", this);
5019 locale_facet_dtor(&this->facet
);
5022 DEFINE_THISCALL_WRAPPER(num_get_wchar_vector_dtor
, 8)
5023 num_get
* __thiscall
num_get_wchar_vector_dtor(num_get
*this, unsigned int flags
)
5025 TRACE("(%p %x)\n", this, flags
);
5027 /* we have an array, with the number of elements stored before the first object */
5028 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
5030 for(i
=*ptr
-1; i
>=0; i
--)
5031 num_get_wchar_dtor(this+i
);
5032 MSVCRT_operator_delete(ptr
);
5034 num_get_wchar_dtor(this);
5036 MSVCRT_operator_delete(this);
5042 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
5043 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
5044 MSVCP_size_t __cdecl
num_get_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
5046 TRACE("(%p %p)\n", facet
, loc
);
5048 if(facet
&& !*facet
) {
5051 *facet
= MSVCRT_operator_new(sizeof(num_get
));
5053 ERR("Out of memory\n");
5054 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
5058 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
5059 num_get_wchar_ctor_locinfo((num_get
*)*facet
, &locinfo
, 0);
5060 _Locinfo_dtor(&locinfo
);
5066 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
5067 /* ?_Getcat@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
5068 MSVCP_size_t __cdecl
num_get_wchar__Getcat_old(const locale_facet
**facet
)
5070 return num_get_wchar__Getcat(facet
, locale_classic());
5073 num_get
* num_get_wchar_use_facet(const locale
*loc
)
5075 static num_get
*obj
= NULL
;
5078 const locale_facet
*fac
;
5080 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
5081 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_wchar_id
));
5083 _Lockit_dtor(&lock
);
5084 return (num_get
*)fac
;
5088 _Lockit_dtor(&lock
);
5092 num_get_wchar__Getcat(&fac
, loc
);
5093 obj
= (num_get
*)fac
;
5094 call_locale_facet__Incref(&obj
->facet
);
5095 locale_facet_register(&obj
->facet
);
5096 _Lockit_dtor(&lock
);
5101 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
5102 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
5103 MSVCP_size_t __cdecl
num_get_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
5105 if(facet
&& !*facet
) {
5106 num_get_wchar__Getcat(facet
, loc
);
5107 (*(locale_facet
**)facet
)->vtable
= &MSVCP_num_get_short_vtable
;
5113 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
5114 /* ?_Getcat@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
5115 MSVCP_size_t __cdecl
num_get_short__Getcat_old(const locale_facet
**facet
)
5117 return num_get_short__Getcat(facet
, locale_classic());
5120 num_get
* num_get_short_use_facet(const locale
*loc
)
5122 static num_get
*obj
= NULL
;
5125 const locale_facet
*fac
;
5127 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
5128 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_short_id
));
5130 _Lockit_dtor(&lock
);
5131 return (num_get
*)fac
;
5135 _Lockit_dtor(&lock
);
5139 num_get_short__Getcat(&fac
, loc
);
5140 obj
= (num_get
*)fac
;
5141 call_locale_facet__Incref(&obj
->facet
);
5142 locale_facet_register(&obj
->facet
);
5143 _Lockit_dtor(&lock
);
5148 static int num_get__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5149 istreambuf_iterator_wchar
*last
, const locale
*loc
, numpunct_wchar
*numpunct
)
5151 basic_string_char grouping_bstr
;
5152 basic_string_char groups_found
;
5153 int i
, groups_no
= 0, cur_group
= 0, exp
= 0;
5154 char *dest_beg
= dest
, *num_end
= dest
+25, *exp_end
= dest
+31;
5155 wchar_t sep
= 0, digits
[11], *digits_pos
;
5156 const char *grouping
, *groups
;
5157 BOOL error
= FALSE
, got_digit
= FALSE
, got_nonzero
= FALSE
;
5160 TRACE("(%p %p %p %p)\n", dest
, first
, last
, loc
);
5162 #if _MSVCP_VER <= 100
5165 cvt
= &ctype_wchar_use_facet(loc
)->cvt
;
5169 digits
[i
] = mb_to_wc('0'+i
, cvt
);
5172 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
5173 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
5174 #if _MSVCP_VER >= 70
5175 if (grouping
[0]) sep
= numpunct_wchar_thousands_sep(numpunct
);
5179 MSVCP_basic_string_char_ctor(&groups_found
);
5181 istreambuf_iterator_wchar_val(first
);
5183 if(first
->strbuf
&& first
->val
==mb_to_wc('-', cvt
)) {
5185 istreambuf_iterator_wchar_inc(first
);
5186 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', cvt
)) {
5188 istreambuf_iterator_wchar_inc(first
);
5191 /* read possibly grouped numbers before decimal */
5192 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
5193 if(!(digits_pos
= wcschr(digits
, first
->val
))) {
5194 if(sep
&& first
->val
==sep
) {
5195 if(!groups_no
) break; /* empty group - stop parsing */
5196 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5203 got_digit
= TRUE
; /* found a digit, zero or non-zero */
5204 /* write digit to dest if not a leading zero (to not waste dest buffer) */
5205 if(!got_nonzero
&& first
->val
== digits
[0])
5212 *dest
++ = '0'+digits_pos
-digits
;
5214 exp
++; /* too many digits, just multiply by 10 */
5215 if(sep
&& groups_no
<CHAR_MAX
)
5220 /* if all leading zeroes, we didn't write anything so put a zero we check for a decimal */
5221 if(got_digit
&& !got_nonzero
)
5224 /* get decimal, if any */
5225 if(first
->strbuf
&& first
->val
==numpunct_wchar_decimal_point(numpunct
)) {
5227 *dest
++ = *localeconv()->decimal_point
;
5228 istreambuf_iterator_wchar_inc(first
);
5231 /* read non-grouped after decimal */
5232 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
5233 if(!(digits_pos
= wcschr(digits
, first
->val
)))
5235 else if(dest
<num_end
) {
5237 *dest
++ = '0'+digits_pos
-digits
;
5241 /* read exponent, if any */
5242 if(first
->strbuf
&& (first
->val
==mb_to_wc('e', cvt
) || first
->val
==mb_to_wc('E', cvt
))) {
5244 istreambuf_iterator_wchar_inc(first
);
5246 if(first
->strbuf
&& first
->val
==mb_to_wc('-', cvt
)) {
5248 istreambuf_iterator_wchar_inc(first
);
5249 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', cvt
)) {
5251 istreambuf_iterator_wchar_inc(first
);
5254 got_digit
= got_nonzero
= FALSE
;
5256 /* skip any leading zeroes */
5257 for(; first
->strbuf
&& first
->val
==digits
[0]; istreambuf_iterator_wchar_inc(first
))
5260 for(; first
->strbuf
&& (digits_pos
= wcschr(digits
, first
->val
)); istreambuf_iterator_wchar_inc(first
)) {
5261 got_digit
= got_nonzero
= TRUE
; /* leading zeroes would have been skipped, so first digit is non-zero */
5264 *dest
++ = '0'+digits_pos
-digits
;
5267 /* if just found zeroes for exponent, use that */
5268 if(got_digit
&& !got_nonzero
)
5276 if(sep
&& groups_no
)
5277 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5279 if(!cur_group
) /* no groups, skip loop */
5281 else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
])
5282 error
= TRUE
; /* trailing empty */
5284 for(; cur_group
>=0 && !error
; cur_group
--) {
5285 if(*grouping
== CHAR_MAX
) {
5289 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
5290 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
5293 }else if(grouping
[1]) {
5297 MSVCP_basic_string_char_dtor(&grouping_bstr
);
5299 MSVCP_basic_string_char_dtor(&groups_found
);
5309 /* ?_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 */
5310 /* ?_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 */
5311 int __cdecl
num_get_wchar__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5312 istreambuf_iterator_wchar
*last
, const locale
*loc
)
5314 return num_get__Getffld(this, dest
, first
, last
, loc
, numpunct_wchar_use_facet(loc
));
5317 /* ?_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 */
5318 /* ?_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 */
5319 int __cdecl
num_get_short__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5320 istreambuf_iterator_wchar
*last
, const locale
*loc
)
5322 return num_get__Getffld(this, dest
, first
, last
, loc
, numpunct_short_use_facet(loc
));
5325 /* ?_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 */
5326 /* ?_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 */
5327 /* ?_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 */
5328 /* ?_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 */
5329 int __cdecl
num_get_wchar__Getffldx(num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5330 istreambuf_iterator_wchar
*last
, ios_base
*ios
, int *phexexp
)
5332 FIXME("(%p %p %p %p %p) stub\n", dest
, first
, last
, ios
, phexexp
);
5336 static int num_get__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5337 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
, numpunct_wchar
*numpunct
)
5339 wchar_t digits
[23], *digits_pos
, sep
= 0;
5340 basic_string_char grouping_bstr
;
5341 basic_string_char groups_found
;
5342 int i
, basefield
, base
, groups_no
= 0, cur_group
= 0;
5343 char *dest_beg
= dest
, *dest_end
= dest
+24;
5344 const char *grouping
, *groups
;
5345 BOOL error
= TRUE
, dest_empty
= TRUE
, found_zero
= FALSE
;
5348 TRACE("(%p %p %p %04x %p)\n", dest
, first
, last
, fmtflags
, loc
);
5350 #if _MSVCP_VER <= 100
5353 cvt
= &ctype_wchar_use_facet(loc
)->cvt
;
5357 digits
[i
] = mb_to_wc('0'+i
, cvt
);
5358 for(i
=0; i
<6; i
++) {
5359 digits
[10+i
] = mb_to_wc('a'+i
, cvt
);
5360 digits
[16+i
] = mb_to_wc('A'+i
, cvt
);
5363 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
5364 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
5365 #if _MSVCP_VER >= 70
5366 if (grouping
[0]) sep
= numpunct_wchar_thousands_sep(numpunct
);
5369 basefield
= fmtflags
& FMTFLAG_basefield
;
5370 if(basefield
== FMTFLAG_oct
)
5372 else if(basefield
== FMTFLAG_hex
)
5373 base
= 22; /* equal to the size of digits buffer */
5379 istreambuf_iterator_wchar_val(first
);
5380 if(first
->strbuf
&& first
->val
==mb_to_wc('-', cvt
)) {
5382 istreambuf_iterator_wchar_inc(first
);
5383 }else if(first
->strbuf
&& first
->val
==mb_to_wc('+', cvt
)) {
5385 istreambuf_iterator_wchar_inc(first
);
5388 if(first
->strbuf
&& first
->val
==digits
[0]) {
5390 istreambuf_iterator_wchar_inc(first
);
5391 if(first
->strbuf
&& (first
->val
==mb_to_wc('x', cvt
) || first
->val
==mb_to_wc('X', cvt
))) {
5392 if(!base
|| base
== 22) {
5394 istreambuf_iterator_wchar_inc(first
);
5404 if(!base
) base
= 10;
5409 MSVCP_basic_string_char_ctor(&groups_found
);
5410 if(found_zero
) ++groups_no
;
5413 for(; first
->strbuf
; istreambuf_iterator_wchar_inc(first
)) {
5414 if(!(digits_pos
= wcschr(digits
, first
->val
))) {
5415 if(sep
&& first
->val
==sep
) {
5416 if(!groups_no
) break; /* empty group - stop parsing */
5417 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5425 if(dest_empty
&& first
->val
== digits
[0]) {
5431 /* skip digits that can't be copied to dest buffer, other
5432 * functions are responsible for detecting overflows */
5434 *dest
++ = (digits_pos
-digits
<10 ? '0'+digits_pos
-digits
:
5435 (digits_pos
-digits
<16 ? 'a'+digits_pos
-digits
-10 :
5436 'A'+digits_pos
-digits
-16));
5437 if(sep
&& groups_no
<CHAR_MAX
)
5442 if(sep
&& groups_no
)
5443 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
5445 if(!cur_group
) { /* no groups, skip loop */
5447 }else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
]) {
5448 error
= TRUE
; /* trailing empty */
5452 for(; cur_group
>=0 && !error
; cur_group
--) {
5453 if(*grouping
== CHAR_MAX
) {
5457 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
5458 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
5461 }else if(grouping
[1]) {
5466 MSVCP_basic_string_char_dtor(&grouping_bstr
);
5468 MSVCP_basic_string_char_dtor(&groups_found
);
5475 }else if(dest_empty
)
5479 return (base
==22 ? 16 : base
);
5482 /* ?_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 */
5483 /* ?_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 */
5484 int __cdecl
num_get_wchar__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5485 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
)
5487 return num_get__Getifld(this, dest
, first
, last
,
5488 fmtflags
, loc
, numpunct_wchar_use_facet(loc
));
5491 /* ?_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 */
5492 /* ?_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 */
5493 int __cdecl
num_get_short__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_wchar
*first
,
5494 istreambuf_iterator_wchar
*last
, int fmtflags
, const locale
*loc
)
5496 return num_get__Getifld(this, dest
, first
, last
,
5497 fmtflags
, loc
, numpunct_short_use_facet(loc
));
5500 /* ?_Hexdig@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABEH_W000@Z */
5501 /* ?_Hexdig@?$num_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAH_W000@Z */
5502 /* ?_Hexdig@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABEHGGGG@Z */
5503 /* ?_Hexdig@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAHGGGG@Z */
5504 DEFINE_THISCALL_WRAPPER(MSVCP_num_get_wchar__Hexdig
, 20)
5505 int __thiscall
MSVCP_num_get_wchar__Hexdig(num_get
*this, wchar_t dig
, wchar_t e0
, wchar_t al
, wchar_t au
)
5507 FIXME("(%p %c %c %c %c) stub\n", this, dig
, e0
, al
, au
);
5511 static istreambuf_iterator_wchar
* num_get_do_get_void(const num_get
*this,
5512 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5513 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5514 void **pval
, numpunct_wchar
*numpunct
)
5520 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5522 v
= _Stoullx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5523 &last
, FMTFLAG_hex
, IOS_LOCALE(base
), numpunct
), &err
);
5524 if(v
!=(unsigned __int64
)((INT_PTR
)v
))
5525 *state
|= IOSTATE_failbit
;
5526 else if(end
!=tmp
&& !err
)
5527 *pval
= (void*)((INT_PTR
)v
);
5529 *state
|= IOSTATE_failbit
;
5532 *state
|= IOSTATE_eofbit
;
5538 /* ?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 */
5539 /* ?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 */
5540 #if _MSVCP_VER <= 100
5541 #define call_num_get_wchar_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 4, istreambuf_iterator_wchar*, \
5542 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, void**), \
5543 (this, ret, first, last, base, state, pval))
5545 #define call_num_get_wchar_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_wchar*, \
5546 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, void**), \
5547 (this, ret, first, last, base, state, pval))
5549 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_void
,36)
5550 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5551 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
5553 return num_get_do_get_void(this, ret
, first
, last
, base
,
5554 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5557 /* ?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 */
5558 /* ?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 */
5559 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_void
,36)
5560 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5561 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
5563 return num_get_do_get_void(this, ret
, first
, last
, base
,
5564 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5567 /* ?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 */
5568 /* ?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 */
5569 /* ?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 */
5570 /* ?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 */
5571 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_void
,36)
5572 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_void(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5573 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, void **pval
)
5575 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5576 return call_num_get_wchar_do_get_void(this, ret
, first
, last
, base
, state
, pval
);
5579 static istreambuf_iterator_wchar
* num_get_do_get_double(const num_get
*this,
5580 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5581 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5582 double *pval
, numpunct_wchar
*numpunct
)
5588 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5590 v
= _Stodx(tmp
, &end
, num_get__Getffld(this, tmp
, &first
, &last
, IOS_LOCALE(base
), numpunct
), &err
);
5591 if(end
!=tmp
&& !err
)
5594 *state
|= IOSTATE_failbit
;
5597 *state
|= IOSTATE_eofbit
;
5603 /* ?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 */
5604 /* ?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 */
5605 /* ?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 */
5606 /* ?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 */
5607 #if _MSVCP_VER <= 100
5608 #define call_num_get_wchar_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_wchar*, \
5609 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
5610 (this, ret, first, last, base, state, pval))
5611 #define call_num_get_wchar_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_wchar*, \
5612 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
5613 (this, ret, first, last, base, state, pval))
5615 #define call_num_get_wchar_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_wchar*, \
5616 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
5617 (this, ret, first, last, base, state, pval))
5618 #define call_num_get_wchar_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_wchar*, \
5619 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, double*), \
5620 (this, ret, first, last, base, state, pval))
5622 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_double
,36)
5623 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5624 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
5626 return num_get_do_get_double(this, ret
, first
, last
, base
,
5627 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5630 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AAVios_base@2@AAHAAO@Z */
5631 /* ?do_get@?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEBA?AV?$istreambuf_iterator@GU?$char_traits@G@std@@@2@V32@0AEAVios_base@2@AEAHAEAO@Z */
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@AAHAAN@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@AEAHAEAN@Z */
5634 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_double
,36)
5635 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5636 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
5638 return num_get_do_get_double(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@AAHAAO@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@AEAHAEAO@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@AAHAAO@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@AEAHAEAO@Z */
5646 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ldouble
,36)
5647 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ldouble(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5648 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
5650 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5651 return call_num_get_wchar_do_get_ldouble(this, ret
, first
, last
, base
, state
, pval
);
5654 /* ?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 */
5655 /* ?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 */
5656 /* ?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 */
5657 /* ?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 */
5658 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_double
,36)
5659 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_double(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5660 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, double *pval
)
5662 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5663 return call_num_get_wchar_do_get_double(this, ret
, first
, last
, base
, state
, pval
);
5666 static istreambuf_iterator_wchar
* num_get_do_get_float(const num_get
*this,
5667 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5668 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5669 float *pval
, numpunct_wchar
*numpunct
)
5675 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5677 v
= _Stofx(tmp
, &end
, num_get__Getffld(this, tmp
, &first
,
5678 &last
, IOS_LOCALE(base
), numpunct
), &err
);
5679 if(end
!=tmp
&& !err
)
5682 *state
|= IOSTATE_failbit
;
5685 *state
|= IOSTATE_eofbit
;
5691 /* ?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 */
5692 /* ?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 */
5693 #if _MSVCP_VER <= 100
5694 #define call_num_get_wchar_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_wchar*, \
5695 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, float*), \
5696 (this, ret, first, last, base, state, pval))
5698 #define call_num_get_wchar_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_wchar*, \
5699 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, float*), \
5700 (this, ret, first, last, base, state, pval))
5702 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_float
,36)
5703 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5704 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
5706 return num_get_do_get_float(this, ret
, first
, last
, base
,
5707 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5710 /* ?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 */
5711 /* ?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 */
5712 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_float
,36)
5713 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5714 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
5716 return num_get_do_get_float(this, ret
, first
, last
, base
,
5717 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5720 /* ?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 */
5721 /* ?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 */
5722 /* ?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 */
5723 /* ?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 */
5724 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_float
,36)
5725 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_float(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5726 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, float *pval
)
5728 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5729 return call_num_get_wchar_do_get_float(this, ret
, first
, last
, base
, state
, pval
);
5732 static istreambuf_iterator_wchar
* num_get_do_get_uint64(const num_get
*this,
5733 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5734 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5735 ULONGLONG
*pval
, numpunct_wchar
*numpunct
)
5741 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5743 v
= _Stoullx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5744 &last
, base
->fmtfl
, IOS_LOCALE(base
), numpunct
), &err
);
5745 if(end
!=tmp
&& !err
)
5748 *state
|= IOSTATE_failbit
;
5751 *state
|= IOSTATE_eofbit
;
5757 /* ?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 */
5758 /* ?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 */
5759 #if _MSVCP_VER <= 100
5760 #define call_num_get_wchar_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_wchar*, \
5761 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONGLONG*), \
5762 (this, ret, first, last, base, state, pval))
5764 #define call_num_get_wchar_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_wchar*, \
5765 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONGLONG*), \
5766 (this, ret, first, last, base, state, pval))
5768 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_uint64
,36)
5769 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5770 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
5772 return num_get_do_get_uint64(this, ret
, first
, last
, base
,
5773 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5776 /* ?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 */
5777 /* ?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 */
5778 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_uint64
,36)
5779 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5780 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
5782 return num_get_do_get_uint64(this, ret
, first
, last
, base
,
5783 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5786 /* ?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 */
5787 /* ?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 */
5788 /* ?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 */
5789 /* ?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 */
5790 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_uint64
,36)
5791 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_uint64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5792 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
5794 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5795 return call_num_get_wchar_do_get_uint64(this, ret
, first
, last
, base
, state
, pval
);
5798 static istreambuf_iterator_wchar
* num_get_do_get_int64(const num_get
*this,
5799 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5800 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5801 LONGLONG
*pval
, numpunct_wchar
*numpunct
)
5807 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5809 v
= _Stollx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5810 &last
, base
->fmtfl
, IOS_LOCALE(base
), numpunct
), &err
);
5811 if(end
!=tmp
&& !err
)
5814 *state
|= IOSTATE_failbit
;
5817 *state
|= IOSTATE_eofbit
;
5823 /* ?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 */
5824 /* ?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 */
5825 #if _MSVCP_VER <= 100
5826 #define call_num_get_wchar_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_wchar*, \
5827 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONGLONG*), \
5828 (this, ret, first, last, base, state, pval))
5830 #define call_num_get_wchar_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_wchar*, \
5831 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONGLONG*), \
5832 (this, ret, first, last, base, state, pval))
5834 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_int64
,36)
5835 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5836 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
5838 return num_get_do_get_int64(this, ret
, first
, last
, base
,
5839 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5842 /* ?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 */
5843 /* ?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 */
5844 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_int64
,36)
5845 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5846 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
5848 return num_get_do_get_int64(this, ret
, first
, last
, base
,
5849 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5852 /* ?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 */
5853 /* ?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 */
5854 /* ?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 */
5855 /* ?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 */
5856 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_int64
,36)
5857 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_int64(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5858 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
5860 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5861 return call_num_get_wchar_do_get_int64(this, ret
, first
, last
, base
, state
, pval
);
5864 static istreambuf_iterator_wchar
* num_get_do_get_ulong(const num_get
*this,
5865 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5866 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5867 ULONG
*pval
, numpunct_wchar
*numpunct
)
5873 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5875 v
= _Stoulx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5876 &last
, base
->fmtfl
, IOS_LOCALE(base
), numpunct
), &err
);
5877 if(end
!=tmp
&& !err
)
5880 *state
|= IOSTATE_failbit
;
5883 *state
|= IOSTATE_eofbit
;
5889 /* ?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 */
5890 /* ?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 */
5891 #if _MSVCP_VER <= 100
5892 #define call_num_get_wchar_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_wchar*, \
5893 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONG*), \
5894 (this, ret, first, last, base, state, pval))
5896 #define call_num_get_wchar_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_wchar*, \
5897 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, ULONG*), \
5898 (this, ret, first, last, base, state, pval))
5900 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_ulong
,36)
5901 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5902 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
5904 return num_get_do_get_ulong(this, ret
, first
, last
, base
,
5905 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5908 /* ?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 */
5909 /* ?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 */
5910 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_ulong
,36)
5911 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5912 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
5914 return num_get_do_get_ulong(this, ret
, first
, last
, base
,
5915 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5918 /* ?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 */
5919 /* ?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 */
5920 /* ?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 */
5921 /* ?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 */
5922 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ulong
,36)
5923 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ulong(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5924 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, ULONG
*pval
)
5926 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5927 return call_num_get_wchar_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
5930 static istreambuf_iterator_wchar
* num_get_do_get_long(const num_get
*this,
5931 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
5932 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
5933 LONG
*pval
, numpunct_wchar
*numpunct
)
5939 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5941 v
= _Stolx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
5942 &last
, base
->fmtfl
, IOS_LOCALE(base
), numpunct
), &err
);
5943 if(end
!=tmp
&& !err
)
5946 *state
|= IOSTATE_failbit
;
5949 *state
|= IOSTATE_eofbit
;
5955 /* ?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 */
5956 /* ?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 */
5957 #if _MSVCP_VER <= 100
5958 #define call_num_get_wchar_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_wchar*, \
5959 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, LONG*), \
5960 (this, ret, first, last, base, state, pval))
5962 #define call_num_get_wchar_do_get_long(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*, LONG*), \
5964 (this, ret, first, last, base, state, pval))
5966 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_long
,36)
5967 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5968 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
5970 return num_get_do_get_long(this, ret
, first
, last
, base
,
5971 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
5974 /* ?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 */
5975 /* ?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 */
5976 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_long
,36)
5977 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5978 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
5980 return num_get_do_get_long(this, ret
, first
, last
, base
,
5981 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
5984 /* ?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 */
5985 /* ?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 */
5986 /* ?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 */
5987 /* ?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 */
5988 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_long
,36)
5989 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_long(const num_get
*this, istreambuf_iterator_wchar
*ret
,
5990 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, LONG
*pval
)
5992 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
5993 return call_num_get_wchar_do_get_long(this, ret
, first
, last
, base
, state
, pval
);
5996 /* ?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 */
5997 /* ?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 */
5998 #if _MSVCP_VER <= 100
5999 #define call_num_get_wchar_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_wchar*, \
6000 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned int*), \
6001 (this, ret, first, last, base, state, pval))
6003 #define call_num_get_wchar_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_wchar*, \
6004 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned int*), \
6005 (this, ret, first, last, base, state, pval))
6007 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_uint
,36)
6008 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6009 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
6011 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6012 return num_get_wchar_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
6015 /* ?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 */
6016 /* ?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 */
6017 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_uint
,36)
6018 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6019 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
6021 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6022 return num_get_short_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
6025 /* ?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 */
6026 /* ?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 */
6027 /* ?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 */
6028 /* ?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 */
6029 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_uint
,36)
6030 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_uint(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6031 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned int *pval
)
6033 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6034 return call_num_get_wchar_do_get_uint(this, ret
, first
, last
, base
, state
, pval
);
6037 /* ?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 */
6038 /* ?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 */
6039 #if _MSVCP_VER <= 100
6040 #define call_num_get_wchar_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_wchar*, \
6041 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned short*), \
6042 (this, ret, first, last, base, state, pval))
6044 #define call_num_get_wchar_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 48, istreambuf_iterator_wchar*, \
6045 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, unsigned short*), \
6046 (this, ret, first, last, base, state, pval))
6048 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_ushort
,36)
6049 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6050 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
6053 char tmp
[25], *beg
, *end
;
6056 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6058 b
= num_get_wchar__Getifld(this, tmp
,
6059 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
));
6060 beg
= tmp
+ (tmp
[0]=='-' ? 1 : 0);
6061 v
= _Stoulx(beg
, &end
, b
, &err
);
6063 if(v
!= (ULONG
)((unsigned short)v
))
6064 *state
|= IOSTATE_failbit
;
6065 else if(end
!=beg
&& !err
)
6066 *pval
= (tmp
[0]=='-' ? -((unsigned short)v
) : v
);
6068 *state
|= IOSTATE_failbit
;
6071 *state
|= IOSTATE_eofbit
;
6077 /* ?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 */
6078 /* ?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 */
6079 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_ushort
,36)
6080 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6081 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
6083 FIXME("(%p %p %p %p %p) stub\n", this, ret
, base
, state
, pval
);
6087 /* ?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 */
6088 /* ?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 */
6089 /* ?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@ */
6090 /* ?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 */
6091 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_ushort
,36)
6092 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_ushort(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6093 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, unsigned short *pval
)
6095 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6096 return call_num_get_wchar_do_get_ushort(this, ret
, first
, last
, base
, state
, pval
);
6099 static istreambuf_iterator_wchar
* num_get_do_get_bool(const num_get
*this,
6100 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar first
,
6101 istreambuf_iterator_wchar last
, ios_base
*base
, int *state
,
6102 MSVCP_bool
*pval
, numpunct_wchar
*numpunct
)
6104 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6106 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
6107 basic_string_wchar false_bstr
, true_bstr
;
6108 const wchar_t *pfalse
, *ptrue
;
6110 numpunct_wchar_falsename(numpunct
, &false_bstr
);
6111 numpunct_wchar_truename(numpunct
, &true_bstr
);
6112 pfalse
= MSVCP_basic_string_wchar_c_str(&false_bstr
);
6113 ptrue
= MSVCP_basic_string_wchar_c_str(&true_bstr
);
6115 for(istreambuf_iterator_wchar_val(&first
); first
.strbuf
;) {
6116 if(pfalse
&& *pfalse
&& first
.val
!=*pfalse
)
6118 if(ptrue
&& *ptrue
&& first
.val
!=*ptrue
)
6121 if(pfalse
&& *pfalse
&& ptrue
&& !*ptrue
)
6123 if(ptrue
&& *ptrue
&& pfalse
&& !*pfalse
)
6132 istreambuf_iterator_wchar_inc(&first
);
6134 if((!pfalse
|| !*pfalse
) && (!ptrue
|| !*ptrue
))
6143 *state
|= IOSTATE_failbit
;
6145 MSVCP_basic_string_wchar_dtor(&false_bstr
);
6146 MSVCP_basic_string_wchar_dtor(&true_bstr
);
6150 LONG v
= _Stolx(tmp
, &end
, num_get__Getifld(this, tmp
, &first
,
6151 &last
, base
->fmtfl
, IOS_LOCALE(base
), numpunct
), &err
);
6153 if(end
!=tmp
&& err
==0 && (v
==0 || v
==1))
6156 *state
|= IOSTATE_failbit
;
6160 *state
|= IOSTATE_eofbit
;
6161 memcpy(ret
, &first
, sizeof(first
));
6165 /* ?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 */
6166 /* ?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 */
6167 #if _MSVCP_VER <= 100
6168 #define call_num_get_wchar_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_wchar*, \
6169 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, MSVCP_bool*), \
6170 (this, ret, first, last, base, state, pval))
6172 #define call_num_get_wchar_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 52, istreambuf_iterator_wchar*, \
6173 (const num_get*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, MSVCP_bool*), \
6174 (this, ret, first, last, base, state, pval))
6176 DEFINE_THISCALL_WRAPPER(num_get_wchar_do_get_bool
,36)
6177 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_do_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6178 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, MSVCP_bool
*pval
)
6180 return num_get_do_get_bool(this, ret
, first
, last
, base
,
6181 state
, pval
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
6184 /* ?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 */
6185 /* ?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 */
6186 DEFINE_THISCALL_WRAPPER(num_get_short_do_get_bool
,36)
6187 istreambuf_iterator_wchar
*__thiscall
num_get_short_do_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6188 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, MSVCP_bool
*pval
)
6190 return num_get_do_get_bool(this, ret
, first
, last
, base
,
6191 state
, pval
, numpunct_short_use_facet(IOS_LOCALE(base
)));
6194 /* ?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 */
6195 /* ?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 */
6196 /* ?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 */
6197 /* ?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 */
6198 DEFINE_THISCALL_WRAPPER(num_get_wchar_get_bool
,36)
6199 istreambuf_iterator_wchar
*__thiscall
num_get_wchar_get_bool(const num_get
*this, istreambuf_iterator_wchar
*ret
,
6200 istreambuf_iterator_wchar first
, istreambuf_iterator_wchar last
, ios_base
*base
, int *state
, MSVCP_bool
*pval
)
6202 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6203 return call_num_get_wchar_do_get_bool(this, ret
, first
, last
, base
, state
, pval
);
6206 /* ?id@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
6207 locale_id num_get_char_id
= {0};
6209 /* ??_7?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
6210 extern const vtable_ptr MSVCP_num_get_char_vtable
;
6212 /* ?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
6213 /* ?_Init@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
6214 DEFINE_THISCALL_WRAPPER(num_get_char__Init
, 8)
6215 void __thiscall
num_get_char__Init(num_get
*this, const _Locinfo
*locinfo
)
6217 TRACE("(%p %p)\n", this, locinfo
);
6218 #if _MSVCP_VER <= 100
6219 _Locinfo__Getcvt(locinfo
, &this->cvt
);
6223 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
6224 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
6225 DEFINE_THISCALL_WRAPPER(num_get_char_ctor_locinfo
, 12)
6226 num_get
* __thiscall
num_get_char_ctor_locinfo(num_get
*this,
6227 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
6229 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
6231 locale_facet_ctor_refs(&this->facet
, refs
);
6232 this->facet
.vtable
= &MSVCP_num_get_char_vtable
;
6234 num_get_char__Init(this, locinfo
);
6238 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
6239 /* ??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
6240 DEFINE_THISCALL_WRAPPER(num_get_char_ctor_refs
, 8)
6241 num_get
* __thiscall
num_get_char_ctor_refs(num_get
*this, MSVCP_size_t refs
)
6245 TRACE("(%p %lu)\n", this, refs
);
6247 _Locinfo_ctor(&locinfo
);
6248 num_get_char_ctor_locinfo(this, &locinfo
, refs
);
6249 _Locinfo_dtor(&locinfo
);
6253 /* ??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
6254 /* ??_F?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
6255 DEFINE_THISCALL_WRAPPER(num_get_char_ctor
, 4)
6256 num_get
* __thiscall
num_get_char_ctor(num_get
*this)
6258 return num_get_char_ctor_refs(this, 0);
6261 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@UAE@XZ */
6262 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@UEAA@XZ */
6263 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
6264 /* ??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
6265 DEFINE_THISCALL_WRAPPER(num_get_char_dtor
, 4)
6266 void __thiscall
num_get_char_dtor(num_get
*this)
6268 TRACE("(%p)\n", this);
6269 locale_facet_dtor(&this->facet
);
6272 DEFINE_THISCALL_WRAPPER(num_get_char_vector_dtor
, 8)
6273 num_get
* __thiscall
num_get_char_vector_dtor(num_get
*this, unsigned int flags
)
6275 TRACE("(%p %x)\n", this, flags
);
6277 /* we have an array, with the number of elements stored before the first object */
6278 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
6280 for(i
=*ptr
-1; i
>=0; i
--)
6281 num_get_char_dtor(this+i
);
6282 MSVCRT_operator_delete(ptr
);
6284 num_get_char_dtor(this);
6286 MSVCRT_operator_delete(this);
6292 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
6293 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
6294 MSVCP_size_t __cdecl
num_get_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
6296 TRACE("(%p %p)\n", facet
, loc
);
6298 if(facet
&& !*facet
) {
6301 *facet
= MSVCRT_operator_new(sizeof(num_get
));
6303 ERR("Out of memory\n");
6304 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
6308 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
6309 num_get_char_ctor_locinfo((num_get
*)*facet
, &locinfo
, 0);
6310 _Locinfo_dtor(&locinfo
);
6316 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
6317 /* ?_Getcat@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
6318 MSVCP_size_t __cdecl
num_get_char__Getcat_old(const locale_facet
**facet
)
6320 return num_get_char__Getcat(facet
, locale_classic());
6323 num_get
* num_get_char_use_facet(const locale
*loc
)
6325 static num_get
*obj
= NULL
;
6328 const locale_facet
*fac
;
6330 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
6331 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_get_char_id
));
6333 _Lockit_dtor(&lock
);
6334 return (num_get
*)fac
;
6338 _Lockit_dtor(&lock
);
6342 num_get_char__Getcat(&fac
, loc
);
6343 obj
= (num_get
*)fac
;
6344 call_locale_facet__Incref(&obj
->facet
);
6345 locale_facet_register(&obj
->facet
);
6346 _Lockit_dtor(&lock
);
6351 /* ?_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 */
6352 /* ?_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 */
6353 /* Copies number to dest buffer, validates grouping and skips separators.
6354 * Updates first so it points past the number, all digits are skipped.
6355 * Returns how exponent needs to changed.
6356 * Size of dest buffer is not specified, assuming it's not smaller than 32:
6357 * strlen(+0.e+) + 22(digits) + 4(exponent) + 1(nullbyte)
6359 int __cdecl
num_get_char__Getffld(const num_get
*this, char *dest
, istreambuf_iterator_char
*first
,
6360 istreambuf_iterator_char
*last
, const locale
*loc
)
6362 numpunct_char
*numpunct
= numpunct_char_use_facet(loc
);
6363 basic_string_char grouping_bstr
;
6364 basic_string_char groups_found
;
6365 int groups_no
= 0, cur_group
= 0, exp
= 0;
6366 char *dest_beg
= dest
, *num_end
= dest
+25, *exp_end
= dest
+31, sep
= 0;
6367 const char *grouping
, *groups
;
6368 BOOL error
= FALSE
, got_digit
= FALSE
, got_nonzero
= FALSE
;
6370 TRACE("(%p %p %p %p)\n", dest
, first
, last
, loc
);
6372 numpunct_char_grouping(numpunct
, &grouping_bstr
);
6373 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
6374 #if _MSVCP_VER >= 70
6375 if (grouping
[0]) sep
= numpunct_char_thousands_sep(numpunct
);
6379 MSVCP_basic_string_char_ctor(&groups_found
);
6381 istreambuf_iterator_char_val(first
);
6383 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
6384 *dest
++ = first
->val
;
6385 istreambuf_iterator_char_inc(first
);
6388 /* read possibly grouped numbers before decimal */
6389 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
6390 if(first
->val
<'0' || first
->val
>'9') {
6391 if(sep
&& first
->val
==sep
) {
6392 if(!groups_no
) break; /* empty group - stop parsing */
6393 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
6400 got_digit
= TRUE
; /* found a digit, zero or non-zero */
6401 /* write digit to dest if not a leading zero (to not waste dest buffer) */
6402 if(!got_nonzero
&& first
->val
== '0')
6409 *dest
++ = first
->val
;
6411 exp
++; /* too many digits, just multiply by 10 */
6412 if(sep
&& groups_no
<CHAR_MAX
)
6417 /* if all leading zeroes, we didn't write anything so put a zero we check for a decimal */
6418 if(got_digit
&& !got_nonzero
)
6421 /* get decimal, if any */
6422 if(first
->strbuf
&& first
->val
==numpunct_char_decimal_point(numpunct
)) {
6424 *dest
++ = *localeconv()->decimal_point
;
6425 istreambuf_iterator_char_inc(first
);
6428 /* read non-grouped after decimal */
6429 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
6430 if(first
->val
<'0' || first
->val
>'9')
6432 else if(dest
<num_end
) {
6434 *dest
++ = first
->val
;
6438 /* read exponent, if any */
6439 if(first
->strbuf
&& (first
->val
=='e' || first
->val
=='E')) {
6440 *dest
++ = first
->val
;
6441 istreambuf_iterator_char_inc(first
);
6443 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
6444 *dest
++ = first
->val
;
6445 istreambuf_iterator_char_inc(first
);
6448 got_digit
= got_nonzero
= FALSE
;
6450 /* skip any leading zeroes */
6451 for(; first
->strbuf
&& first
->val
=='0'; istreambuf_iterator_char_inc(first
))
6454 for(; first
->strbuf
&& first
->val
>='0' && first
->val
<='9'; istreambuf_iterator_char_inc(first
)) {
6455 got_digit
= got_nonzero
= TRUE
; /* leading zeroes would have been skipped, so first digit is non-zero */
6458 *dest
++ = first
->val
;
6461 /* if just found zeroes for exponent, use that */
6462 if(got_digit
&& !got_nonzero
)
6470 if(sep
&& groups_no
)
6471 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
6473 if(!cur_group
) /* no groups, skip loop */
6475 else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
])
6476 error
= TRUE
; /* trailing empty */
6478 for(; cur_group
>=0 && !error
; cur_group
--) {
6479 if(*grouping
== CHAR_MAX
) {
6483 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
6484 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
6487 }else if(grouping
[1]) {
6491 MSVCP_basic_string_char_dtor(&grouping_bstr
);
6493 MSVCP_basic_string_char_dtor(&groups_found
);
6503 /* ?_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 */
6504 /* ?_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 */
6505 int __cdecl
num_get_char__Getffldx(const num_get
*this, char *dest
, istreambuf_iterator_char
*first
,
6506 istreambuf_iterator_char
*last
, ios_base
*ios
, int *phexexp
)
6508 FIXME("(%p %p %p %p %p) stub\n", dest
, first
, last
, ios
, phexexp
);
6512 /* ?_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 */
6513 /* ?_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 */
6514 /* Copies number to dest buffer, validates grouping and skips separators.
6515 * Updates first so it points past the number, all digits are skipped.
6516 * Returns number base (8, 10 or 16).
6517 * Size of dest buffer is not specified, assuming it's not smaller than 25:
6518 * 22(8^22>2^64)+1(detect overflows)+1(sign)+1(nullbyte) = 25
6520 int __cdecl
num_get_char__Getifld(const num_get
*this, char *dest
, istreambuf_iterator_char
*first
,
6521 istreambuf_iterator_char
*last
, int fmtflags
, const locale
*loc
)
6523 static const char digits
[] = "0123456789abcdefABCDEF";
6525 numpunct_char
*numpunct
= numpunct_char_use_facet(loc
);
6526 basic_string_char grouping_bstr
;
6527 basic_string_char groups_found
;
6528 int basefield
, base
, groups_no
= 0, cur_group
= 0;
6529 char *dest_beg
= dest
, *dest_end
= dest
+24, sep
= 0;
6530 const char *grouping
, *groups
;
6531 BOOL error
= TRUE
, dest_empty
= TRUE
, found_zero
= FALSE
;
6533 TRACE("(%p %p %p %04x %p)\n", dest
, first
, last
, fmtflags
, loc
);
6535 numpunct_char_grouping(numpunct
, &grouping_bstr
);
6536 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
6537 #if _MSVCP_VER >= 70
6538 if (grouping
[0]) sep
= numpunct_char_thousands_sep(numpunct
);
6541 basefield
= fmtflags
& FMTFLAG_basefield
;
6542 if(basefield
== FMTFLAG_oct
)
6544 else if(basefield
== FMTFLAG_hex
)
6545 base
= 22; /* equal to the size of digits buffer */
6551 istreambuf_iterator_char_val(first
);
6552 if(first
->strbuf
&& (first
->val
=='-' || first
->val
=='+')) {
6553 *dest
++ = first
->val
;
6554 istreambuf_iterator_char_inc(first
);
6557 if(first
->strbuf
&& first
->val
=='0') {
6559 istreambuf_iterator_char_inc(first
);
6560 if(first
->strbuf
&& (first
->val
=='x' || first
->val
=='X')) {
6561 if(!base
|| base
== 22) {
6563 istreambuf_iterator_char_inc(first
);
6573 if (!base
) base
= 10;
6578 MSVCP_basic_string_char_ctor(&groups_found
);
6579 if(found_zero
) ++groups_no
;
6582 for(; first
->strbuf
; istreambuf_iterator_char_inc(first
)) {
6583 if(!memchr(digits
, first
->val
, base
)) {
6584 if(sep
&& first
->val
==sep
) {
6585 if(!groups_no
) break; /* empty group - stop parsing */
6586 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
6594 if(dest_empty
&& first
->val
== '0')
6601 /* skip digits that can't be copied to dest buffer, other
6602 * functions are responsible for detecting overflows */
6604 *dest
++ = first
->val
;
6605 if(sep
&& groups_no
<CHAR_MAX
)
6610 if(sep
&& groups_no
)
6611 MSVCP_basic_string_char_append_ch(&groups_found
, groups_no
);
6613 if(!cur_group
) { /* no groups, skip loop */
6615 }else if(!(groups
= MSVCP_basic_string_char_c_str(&groups_found
))[cur_group
]) {
6616 error
= TRUE
; /* trailing empty */
6620 for(; cur_group
>=0 && !error
; cur_group
--) {
6621 if(*grouping
== CHAR_MAX
) {
6625 }else if((cur_group
&& *grouping
!=groups
[cur_group
])
6626 || (!cur_group
&& *grouping
<groups
[cur_group
])) {
6629 }else if(grouping
[1]) {
6634 MSVCP_basic_string_char_dtor(&grouping_bstr
);
6636 MSVCP_basic_string_char_dtor(&groups_found
);
6643 }else if(dest_empty
)
6647 return (base
==22 ? 16 : base
);
6650 /* ?_Hexdig@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABEHD000@Z */
6651 /* ?_Hexdig@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHD000@Z */
6652 DEFINE_THISCALL_WRAPPER(MSVCP_num_get_char__Hexdig
, 20)
6653 int __thiscall
MSVCP_num_get_char__Hexdig(num_get
*this, char dig
, char e0
, char al
, char au
)
6655 FIXME("(%p %c %c %c %c) stub\n", this, dig
, e0
, al
, au
);
6659 /* ?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 */
6660 /* ?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 */
6661 #if _MSVCP_VER <= 100
6662 #define call_num_get_char_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 4, istreambuf_iterator_char*, \
6663 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, void**), \
6664 (this, ret, first, last, base, state, pval))
6666 #define call_num_get_char_do_get_void(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_char*, \
6667 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, void**), \
6668 (this, ret, first, last, base, state, pval))
6670 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_void
,36)
6671 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_void(const num_get
*this, istreambuf_iterator_char
*ret
,
6672 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, void **pval
)
6678 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6680 v
= _Stoullx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6681 &first
, &last
, FMTFLAG_hex
, IOS_LOCALE(base
)), &err
);
6682 if(v
!=(unsigned __int64
)((INT_PTR
)v
))
6683 *state
|= IOSTATE_failbit
;
6684 else if(end
!=tmp
&& !err
)
6685 *pval
= (void*)((INT_PTR
)v
);
6687 *state
|= IOSTATE_failbit
;
6690 *state
|= IOSTATE_eofbit
;
6696 /* ?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 */
6697 /* ?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 */
6698 DEFINE_THISCALL_WRAPPER(num_get_char_get_void
,36)
6699 istreambuf_iterator_char
*__thiscall
num_get_char_get_void(const num_get
*this, istreambuf_iterator_char
*ret
,
6700 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, void **pval
)
6702 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6703 return call_num_get_char_do_get_void(this, ret
, first
, last
, base
, state
, pval
);
6706 /* ?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 */
6707 /* ?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 */
6708 /* ?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 */
6709 /* ?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 */
6710 #if _MSVCP_VER <= 100
6711 #define call_num_get_char_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_char*, \
6712 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
6713 (this, ret, first, last, base, state, pval))
6714 #define call_num_get_char_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_char*, \
6715 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
6716 (this, ret, first, last, base, state, pval))
6718 #define call_num_get_char_do_get_ldouble(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_char*, \
6719 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
6720 (this, ret, first, last, base, state, pval))
6721 #define call_num_get_char_do_get_double(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_char*, \
6722 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, double*), \
6723 (this, ret, first, last, base, state, pval))
6725 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_double
,36)
6726 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_double(const num_get
*this, istreambuf_iterator_char
*ret
,
6727 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
6733 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6735 v
= _Stodx(tmp
, &end
, num_get_char__Getffld(this, tmp
, &first
, &last
, IOS_LOCALE(base
)), &err
);
6736 if(end
!=tmp
&& !err
)
6739 *state
|= IOSTATE_failbit
;
6742 *state
|= IOSTATE_eofbit
;
6748 /* ?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 */
6749 /* ?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 */
6750 DEFINE_THISCALL_WRAPPER(num_get_char_get_ldouble
,36)
6751 istreambuf_iterator_char
*__thiscall
num_get_char_get_ldouble(const num_get
*this, istreambuf_iterator_char
*ret
,
6752 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
6754 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6755 return call_num_get_char_do_get_ldouble(this, ret
, first
, last
, base
, state
, pval
);
6758 /* ?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 */
6759 /* ?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 */
6760 DEFINE_THISCALL_WRAPPER(num_get_char_get_double
,36)
6761 istreambuf_iterator_char
*__thiscall
num_get_char_get_double(const num_get
*this, istreambuf_iterator_char
*ret
,
6762 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, double *pval
)
6764 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6765 return call_num_get_char_do_get_double(this, ret
, first
, last
, base
, state
, pval
);
6768 /* ?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 */
6769 /* ?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 */
6770 #if _MSVCP_VER <= 100
6771 #define call_num_get_char_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_char*, \
6772 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, float*), \
6773 (this, ret, first, last, base, state, pval))
6775 #define call_num_get_char_do_get_float(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_char*, \
6776 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, float*), \
6777 (this, ret, first, last, base, state, pval))
6779 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_float
,36)
6780 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_float(const num_get
*this, istreambuf_iterator_char
*ret
,
6781 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, float *pval
)
6787 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6789 v
= _Stofx(tmp
, &end
, num_get_char__Getffld(this, tmp
, &first
, &last
, IOS_LOCALE(base
)), &err
);
6790 if(end
!=tmp
&& !err
)
6793 *state
|= IOSTATE_failbit
;
6796 *state
|= IOSTATE_eofbit
;
6802 /* ?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 */
6803 /* ?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 */
6804 DEFINE_THISCALL_WRAPPER(num_get_char_get_float
,36)
6805 istreambuf_iterator_char
*__thiscall
num_get_char_get_float(const num_get
*this, istreambuf_iterator_char
*ret
,
6806 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, float *pval
)
6808 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6809 return call_num_get_char_do_get_float(this, ret
, first
, last
, base
, state
, pval
);
6812 /* ?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 */
6813 /* ?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 */
6814 #if _MSVCP_VER <= 100
6815 #define call_num_get_char_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_char*, \
6816 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONGLONG*), \
6817 (this, ret, first, last, base, state, pval))
6819 #define call_num_get_char_do_get_uint64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_char*, \
6820 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONGLONG*), \
6821 (this, ret, first, last, base, state, pval))
6823 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_uint64
,36)
6824 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_uint64(const num_get
*this, istreambuf_iterator_char
*ret
,
6825 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
6831 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6833 v
= _Stoullx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6834 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
)), &err
);
6835 if(end
!=tmp
&& !err
)
6838 *state
|= IOSTATE_failbit
;
6841 *state
|= IOSTATE_eofbit
;
6847 /* ?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 */
6848 /* ?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 */
6849 DEFINE_THISCALL_WRAPPER(num_get_char_get_uint64
,36)
6850 istreambuf_iterator_char
*__thiscall
num_get_char_get_uint64(const num_get
*this, istreambuf_iterator_char
*ret
,
6851 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONGLONG
*pval
)
6853 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6854 return call_num_get_char_do_get_uint64(this, ret
, first
, last
, base
, state
, pval
);
6857 /* ?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 */
6858 /* ?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 */
6859 #if _MSVCP_VER <= 100
6860 #define call_num_get_char_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_char*, \
6861 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONGLONG*), \
6862 (this, ret, first, last, base, state, pval))
6864 #define call_num_get_char_do_get_int64(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_char*, \
6865 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONGLONG*), \
6866 (this, ret, first, last, base, state, pval))
6868 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_int64
,36)
6869 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_int64(const num_get
*this, istreambuf_iterator_char
*ret
,
6870 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
6876 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6878 v
= _Stollx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6879 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
)), &err
);
6880 if(end
!=tmp
&& !err
)
6883 *state
|= IOSTATE_failbit
;
6886 *state
|= IOSTATE_eofbit
;
6892 /* ?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 */
6893 /* ?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 */
6894 DEFINE_THISCALL_WRAPPER(num_get_char_get_int64
,36)
6895 istreambuf_iterator_char
*__thiscall
num_get_char_get_int64(const num_get
*this, istreambuf_iterator_char
*ret
,
6896 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONGLONG
*pval
)
6898 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6899 return call_num_get_char_do_get_int64(this, ret
, first
, last
, base
, state
, pval
);
6902 /* ?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 */
6903 /* ?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 */
6904 #if _MSVCP_VER <= 100
6905 #define call_num_get_char_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_char*, \
6906 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONG*), \
6907 (this, ret, first, last, base, state, pval))
6909 #define call_num_get_char_do_get_ulong(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_char*, \
6910 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, ULONG*), \
6911 (this, ret, first, last, base, state, pval))
6913 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_ulong
,36)
6914 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_ulong(const num_get
*this, istreambuf_iterator_char
*ret
,
6915 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONG
*pval
)
6921 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6923 v
= _Stoulx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6924 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
)), &err
);
6925 if(end
!=tmp
&& !err
)
6928 *state
|= IOSTATE_failbit
;
6931 *state
|= IOSTATE_eofbit
;
6937 /* ?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 */
6938 /* ?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 */
6939 DEFINE_THISCALL_WRAPPER(num_get_char_get_ulong
,36)
6940 istreambuf_iterator_char
*__thiscall
num_get_char_get_ulong(const num_get
*this, istreambuf_iterator_char
*ret
,
6941 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, ULONG
*pval
)
6943 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6944 return call_num_get_char_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
6947 /* ?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 */
6948 /* ?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 */
6949 #if _MSVCP_VER <= 100
6950 #define call_num_get_char_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_char*, \
6951 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONG*), \
6952 (this, ret, first, last, base, state, pval))
6954 #define call_num_get_char_do_get_long(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_char*, \
6955 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, LONG*), \
6956 (this, ret, first, last, base, state, pval))
6958 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_long
,36)
6959 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_long(const num_get
*this, istreambuf_iterator_char
*ret
,
6960 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONG
*pval
)
6966 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6968 v
= _Stolx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
6969 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
)), &err
);
6970 if(end
!=tmp
&& !err
)
6973 *state
|= IOSTATE_failbit
;
6976 *state
|= IOSTATE_eofbit
;
6982 /* ?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 */
6983 /* ?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 */
6984 DEFINE_THISCALL_WRAPPER(num_get_char_get_long
,36)
6985 istreambuf_iterator_char
*__thiscall
num_get_char_get_long(const num_get
*this, istreambuf_iterator_char
*ret
,
6986 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, LONG
*pval
)
6988 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
6989 return call_num_get_char_do_get_long(this, ret
, first
, last
, base
, state
, pval
);
6992 /* ?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 */
6993 /* ?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 */
6994 #if _MSVCP_VER <= 100
6995 #define call_num_get_char_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_char*, \
6996 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned int*), \
6997 (this, ret, first, last, base, state, pval))
6999 #define call_num_get_char_do_get_uint(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_char*, \
7000 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned int*), \
7001 (this, ret, first, last, base, state, pval))
7003 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_uint
,36)
7004 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_uint(const num_get
*this, istreambuf_iterator_char
*ret
,
7005 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned int *pval
)
7007 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
7008 return num_get_char_do_get_ulong(this, ret
, first
, last
, base
, state
, pval
);
7011 /* ?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 */
7012 /* ?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 */
7013 DEFINE_THISCALL_WRAPPER(num_get_char_get_uint
,36)
7014 istreambuf_iterator_char
*__thiscall
num_get_char_get_uint(const num_get
*this, istreambuf_iterator_char
*ret
,
7015 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned int *pval
)
7017 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
7018 return call_num_get_char_do_get_uint(this, ret
, first
, last
, base
, state
, pval
);
7021 /* ?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 */
7022 /* ?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 */
7023 #if _MSVCP_VER <= 100
7024 #define call_num_get_char_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 40, istreambuf_iterator_char*, \
7025 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned short*), \
7026 (this, ret, first, last, base, state, pval))
7028 #define call_num_get_char_do_get_ushort(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 48, istreambuf_iterator_char*, \
7029 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, unsigned short*), \
7030 (this, ret, first, last, base, state, pval))
7032 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_ushort
,36)
7033 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_ushort(const num_get
*this, istreambuf_iterator_char
*ret
,
7034 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned short *pval
)
7037 char tmp
[25], *beg
, *end
;
7040 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
7042 b
= num_get_char__Getifld(this, tmp
,
7043 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
));
7044 beg
= tmp
+ (tmp
[0]=='-' ? 1 : 0);
7045 v
= _Stoulx(beg
, &end
, b
, &err
);
7047 if(v
!= (ULONG
)((unsigned short)v
))
7048 *state
|= IOSTATE_failbit
;
7049 else if(end
!=beg
&& !err
)
7050 *pval
= (tmp
[0]=='-' ? -((unsigned short)v
) : v
);
7052 *state
|= IOSTATE_failbit
;
7055 *state
|= IOSTATE_eofbit
;
7061 /* ?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 */
7062 /* ?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 */
7063 DEFINE_THISCALL_WRAPPER(num_get_char_get_ushort
,36)
7064 istreambuf_iterator_char
*__thiscall
num_get_char_get_ushort(const num_get
*this, istreambuf_iterator_char
*ret
,
7065 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, unsigned short *pval
)
7067 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
7068 return call_num_get_char_do_get_ushort(this, ret
, first
, last
, base
, state
, pval
);
7071 /* ?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 */
7072 /* ?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 */
7073 #if _MSVCP_VER <= 100
7074 #define call_num_get_char_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 44, istreambuf_iterator_char*, \
7075 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, MSVCP_bool*), \
7076 (this, ret, first, last, base, state, pval))
7078 #define call_num_get_char_do_get_bool(this, ret, first, last, base, state, pval) CALL_VTBL_FUNC(this, 52, istreambuf_iterator_char*, \
7079 (const num_get*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, MSVCP_bool*), \
7080 (this, ret, first, last, base, state, pval))
7082 DEFINE_THISCALL_WRAPPER(num_get_char_do_get_bool
,36)
7083 istreambuf_iterator_char
*__thiscall
num_get_char_do_get_bool(const num_get
*this, istreambuf_iterator_char
*ret
,
7084 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, MSVCP_bool
*pval
)
7086 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
7088 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
7089 numpunct_char
*numpunct
= numpunct_char_use_facet(IOS_LOCALE(base
));
7090 basic_string_char false_bstr
, true_bstr
;
7091 const char *pfalse
, *ptrue
;
7093 numpunct_char_falsename(numpunct
, &false_bstr
);
7094 numpunct_char_truename(numpunct
, &true_bstr
);
7095 pfalse
= MSVCP_basic_string_char_c_str(&false_bstr
);
7096 ptrue
= MSVCP_basic_string_char_c_str(&true_bstr
);
7098 for(istreambuf_iterator_char_val(&first
); first
.strbuf
;) {
7099 if(pfalse
&& *pfalse
&& first
.val
!=*pfalse
)
7101 if(ptrue
&& *ptrue
&& first
.val
!=*ptrue
)
7104 if(pfalse
&& *pfalse
&& ptrue
&& !*ptrue
)
7106 if(ptrue
&& *ptrue
&& pfalse
&& !*pfalse
)
7115 istreambuf_iterator_char_inc(&first
);
7117 if((!pfalse
|| !*pfalse
) && (!ptrue
|| !*ptrue
))
7126 *state
|= IOSTATE_failbit
;
7128 MSVCP_basic_string_char_dtor(&false_bstr
);
7129 MSVCP_basic_string_char_dtor(&true_bstr
);
7133 LONG v
= _Stolx(tmp
, &end
, num_get_char__Getifld(this, tmp
,
7134 &first
, &last
, base
->fmtfl
, IOS_LOCALE(base
)), &err
);
7136 if(end
!=tmp
&& err
==0 && (v
==0 || v
==1))
7139 *state
|= IOSTATE_failbit
;
7143 *state
|= IOSTATE_eofbit
;
7144 memcpy(ret
, &first
, sizeof(first
));
7148 /* ?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 */
7149 /* ?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 */
7150 DEFINE_THISCALL_WRAPPER(num_get_char_get_bool
,36)
7151 istreambuf_iterator_char
*__thiscall
num_get_char_get_bool(const num_get
*this, istreambuf_iterator_char
*ret
,
7152 istreambuf_iterator_char first
, istreambuf_iterator_char last
, ios_base
*base
, int *state
, MSVCP_bool
*pval
)
7154 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, state
, pval
);
7155 return call_num_get_char_do_get_bool(this, ret
, first
, last
, base
, state
, pval
);
7158 /* ?id@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
7159 locale_id num_put_char_id
= {0};
7161 /* num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
7162 extern const vtable_ptr MSVCP_num_put_char_vtable
;
7164 /* ?_Init@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
7165 /* ?_Init@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
7166 DEFINE_THISCALL_WRAPPER(num_put_char__Init
, 8)
7167 void __thiscall
num_put_char__Init(num_put
*this, const _Locinfo
*locinfo
)
7169 TRACE("(%p %p)\n", this, locinfo
);
7170 #if _MSVCP_VER < 110
7171 _Locinfo__Getcvt(locinfo
, &this->cvt
);
7175 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
7176 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
7177 DEFINE_THISCALL_WRAPPER(num_put_char_ctor_locinfo
, 12)
7178 num_put
* __thiscall
num_put_char_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
7180 TRACE("(%p %p %ld)\n", this, locinfo
, refs
);
7182 locale_facet_ctor_refs(&this->facet
, refs
);
7183 this->facet
.vtable
= &MSVCP_num_put_char_vtable
;
7185 num_put_char__Init(this, locinfo
);
7189 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
7190 /* ??0?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
7191 DEFINE_THISCALL_WRAPPER(num_put_char_ctor_refs
, 8)
7192 num_put
* __thiscall
num_put_char_ctor_refs(num_put
*this, MSVCP_size_t refs
)
7196 TRACE("(%p %lu)\n", this, refs
);
7198 _Locinfo_ctor(&locinfo
);
7199 num_put_char_ctor_locinfo(this, &locinfo
, refs
);
7200 _Locinfo_dtor(&locinfo
);
7204 /* ??_F?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
7205 /* ??_F?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
7206 DEFINE_THISCALL_WRAPPER(num_put_char_ctor
, 4)
7207 num_put
* __thiscall
num_put_char_ctor(num_put
*this)
7209 return num_put_char_ctor_refs(this, 0);
7212 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@UAE@XZ */
7213 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@UEAA@XZ */
7214 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
7215 /* ??1?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
7216 DEFINE_THISCALL_WRAPPER(num_put_char_dtor
, 4)
7217 void __thiscall
num_put_char_dtor(num_put
*this)
7219 TRACE("(%p)\n", this);
7220 locale_facet_dtor(&this->facet
);
7223 DEFINE_THISCALL_WRAPPER(num_put_char_vector_dtor
, 8)
7224 num_put
* __thiscall
num_put_char_vector_dtor(num_put
*this, unsigned int flags
)
7226 TRACE("(%p %x)\n", this, flags
);
7228 /* we have an array, with the number of elements stored before the first object */
7229 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
7231 for(i
=*ptr
-1; i
>=0; i
--)
7232 num_put_char_dtor(this+i
);
7233 MSVCRT_operator_delete(ptr
);
7235 num_put_char_dtor(this);
7237 MSVCRT_operator_delete(this);
7243 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
7244 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
7245 MSVCP_size_t __cdecl
num_put_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
7247 TRACE("(%p %p)\n", facet
, loc
);
7249 if(facet
&& !*facet
) {
7252 *facet
= MSVCRT_operator_new(sizeof(num_put
));
7254 ERR("Out of memory\n");
7255 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7259 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
7260 num_put_char_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
7261 _Locinfo_dtor(&locinfo
);
7267 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
7268 /* ?_Getcat@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
7269 MSVCP_size_t __cdecl
num_put_char__Getcat_old(const locale_facet
**facet
)
7271 return num_put_char__Getcat(facet
, locale_classic());
7274 num_put
* num_put_char_use_facet(const locale
*loc
)
7276 static num_put
*obj
= NULL
;
7279 const locale_facet
*fac
;
7281 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
7282 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_char_id
));
7284 _Lockit_dtor(&lock
);
7285 return (num_put
*)fac
;
7289 _Lockit_dtor(&lock
);
7293 num_put_char__Getcat(&fac
, loc
);
7294 obj
= (num_put
*)fac
;
7295 call_locale_facet__Incref(&obj
->facet
);
7296 locale_facet_register(&obj
->facet
);
7297 _Lockit_dtor(&lock
);
7302 /* ?_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 */
7303 /* ?_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 */
7304 ostreambuf_iterator_char
* __cdecl
num_put_char__Put(const num_put
*this, ostreambuf_iterator_char
*ret
,
7305 ostreambuf_iterator_char dest
, const char *ptr
, MSVCP_size_t count
)
7307 TRACE("(%p %p %p %ld)\n", this, ret
, ptr
, count
);
7309 for(; count
>0; count
--)
7310 ostreambuf_iterator_char_put(&dest
, *ptr
++);
7316 /* ?_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 */
7317 /* ?_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 */
7318 ostreambuf_iterator_char
* __cdecl
num_put_char__Putc(const num_put
*this, ostreambuf_iterator_char
*ret
,
7319 ostreambuf_iterator_char dest
, const char *ptr
, MSVCP_size_t count
)
7321 TRACE("(%p %p %p %ld)\n", this, ret
, ptr
, count
);
7323 for(; count
>0; count
--)
7324 ostreambuf_iterator_char_put(&dest
, *ptr
++);
7330 /* ?_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 */
7331 /* ?_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 */
7332 ostreambuf_iterator_char
* __cdecl
num_put_char__Putgrouped(const num_put
*this, ostreambuf_iterator_char
*ret
,
7333 ostreambuf_iterator_char dest
, const char *ptr
, MSVCP_size_t count
, char delim
)
7335 FIXME("(%p %p %p %ld %d) stub\n", this, ret
, ptr
, count
, delim
);
7339 /* ?_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 */
7340 /* ?_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 */
7341 ostreambuf_iterator_char
* __cdecl
num_put_char__Rep(const num_put
*this, ostreambuf_iterator_char
*ret
,
7342 ostreambuf_iterator_char dest
, char c
, MSVCP_size_t count
)
7344 TRACE("(%p %p %d %ld)\n", this, ret
, c
, count
);
7346 for(; count
>0; count
--)
7347 ostreambuf_iterator_char_put(&dest
, c
);
7353 /* ?_Ffmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAPADPADDH@Z */
7354 /* ?_Ffmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAPEADPEADDH@Z */
7355 char* __cdecl
num_put_char__Ffmt(const num_put
*this, char *fmt
, char spec
, int fmtfl
)
7357 int type
= fmtfl
& FMTFLAG_floatfield
;
7360 TRACE("(%p %p %d %d)\n", this, fmt
, spec
, fmtfl
);
7363 if(fmtfl
& FMTFLAG_showpos
)
7365 if(fmtfl
& FMTFLAG_showpoint
)
7372 if(type
== FMTFLAG_fixed
)
7374 else if(type
== FMTFLAG_scientific
)
7375 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'E' : 'e';
7376 else if(type
== (FMTFLAG_fixed
|FMTFLAG_scientific
))
7377 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'A' : 'a';
7379 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'G' : 'g';
7385 /* ?_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 */
7386 /* ?_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 */
7387 ostreambuf_iterator_char
* __cdecl
num_put_char__Fput(const num_put
*this, ostreambuf_iterator_char
*ret
,
7388 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const char *buf
, MSVCP_size_t bef_point
,
7389 MSVCP_size_t aft_point
, MSVCP_size_t trailing
, MSVCP_size_t count
)
7391 FIXME("(%p %p %p %d %p %ld %ld %ld %ld) stub\n", this, ret
, base
,
7392 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
7396 /* TODO: This function should be removed when num_put_char__Fput is implemented */
7397 static ostreambuf_iterator_char
* num_put_char_fput(const num_put
*this, ostreambuf_iterator_char
*ret
,
7398 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, char *buf
, MSVCP_size_t count
)
7400 numpunct_char
*numpunct
= numpunct_char_use_facet(IOS_LOCALE(base
));
7401 basic_string_char grouping_bstr
;
7402 const char *grouping
;
7403 char *p
, sep
= 0, dec_point
= *localeconv()->decimal_point
;
7404 int cur_group
= 0, group_size
= 0;
7405 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
7408 TRACE("(%p %p %p %d %s %ld)\n", this, ret
, base
, fill
, buf
, count
);
7410 /* Change decimal point */
7411 for(p
=buf
; p
<buf
+count
; p
++) {
7412 if(*p
== dec_point
) {
7413 *p
= numpunct_char_decimal_point(numpunct
);
7419 /* Add separators to number */
7420 numpunct_char_grouping(numpunct
, &grouping_bstr
);
7421 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
7422 #if _MSVCP_VER >= 70
7423 if (grouping
[0]) sep
= numpunct_char_thousands_sep(numpunct
);
7426 for(; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
7428 if(group_size
== grouping
[cur_group
]) {
7430 if(grouping
[cur_group
+1])
7433 memmove(p
+1, p
, buf
+count
-p
);
7438 MSVCP_basic_string_char_dtor(&grouping_bstr
);
7440 /* Display number with padding */
7441 if(count
>= base
->wide
)
7444 pad
= base
->wide
-count
;
7447 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
7448 num_put_char__Putc(this, &dest
, dest
, buf
, 1);
7451 if(adjustfield
!= FMTFLAG_left
) {
7452 num_put_char__Rep(this, ret
, dest
, fill
, pad
);
7455 num_put_char__Putc(this, &dest
, dest
, buf
, count
);
7456 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
7459 /* ?_Ifmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAPADPADPBDH@Z */
7460 /* ?_Ifmt@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
7461 char* __cdecl
num_put_char__Ifmt(const num_put
*this, char *fmt
, const char *spec
, int fmtfl
)
7463 int base
= fmtfl
& FMTFLAG_basefield
;
7466 TRACE("(%p %p %p %d)\n", this, fmt
, spec
, fmtfl
);
7469 if(fmtfl
& FMTFLAG_showpos
)
7471 if(fmtfl
& FMTFLAG_showbase
)
7478 if(base
== FMTFLAG_oct
)
7480 else if(base
== FMTFLAG_hex
)
7481 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'X' : 'x';
7489 /* ?_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 */
7490 /* ?_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 */
7491 ostreambuf_iterator_char
* __cdecl
num_put_char__Iput(const num_put
*this, ostreambuf_iterator_char
*ret
,
7492 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, char *buf
, MSVCP_size_t count
)
7494 numpunct_char
*numpunct
= numpunct_char_use_facet(IOS_LOCALE(base
));
7495 basic_string_char grouping_bstr
;
7496 const char *grouping
;
7498 int cur_group
= 0, group_size
= 0;
7499 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
7502 TRACE("(%p %p %p %d %s %ld)\n", this, ret
, base
, fill
, buf
, count
);
7504 /* Add separators to number */
7505 numpunct_char_grouping(numpunct
, &grouping_bstr
);
7506 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
7507 #if _MSVCP_VER >= 70
7508 if (grouping
[0]) sep
= numpunct_char_thousands_sep(numpunct
);
7511 for(p
=buf
+count
-1; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
7513 if(group_size
== grouping
[cur_group
]) {
7515 if(grouping
[cur_group
+1])
7518 memmove(p
+1, p
, buf
+count
-p
);
7523 MSVCP_basic_string_char_dtor(&grouping_bstr
);
7525 /* Display number with padding */
7526 if(count
>= base
->wide
)
7529 pad
= base
->wide
-count
;
7532 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
7533 num_put_char__Putc(this, &dest
, dest
, buf
, 1);
7535 }else if((adjustfield
& FMTFLAG_internal
) && (buf
[1]=='x' || buf
[1]=='X')) {
7536 num_put_char__Putc(this, &dest
, dest
, buf
, 2);
7539 if(adjustfield
!= FMTFLAG_left
) {
7540 num_put_char__Rep(this, ret
, dest
, fill
, pad
);
7543 num_put_char__Putc(this, &dest
, dest
, buf
, count
);
7544 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
7547 /* ?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DJ@Z */
7548 /* ?do_put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DJ@Z */
7549 #if _MSVCP_VER <= 100
7550 #define call_num_put_char_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_char*, \
7551 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, LONG), \
7552 (this, ret, dest, base, fill, v))
7554 #define call_num_put_char_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 36, ostreambuf_iterator_char*, \
7555 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, LONG), \
7556 (this, ret, dest, base, fill, v))
7558 #if _MSVCP_VER != 80
7559 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_long
, 28)
7561 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_long
, 32)
7563 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_long(const num_put
*this, ostreambuf_iterator_char
*ret
,
7564 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, LONG v
)
7566 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
7567 char fmt
[7]; /* strlen("%+#lld")+1 */
7569 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7571 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
7572 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
7575 /* ?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 */
7576 /* ?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 */
7577 #if _MSVCP_VER != 80
7578 DEFINE_THISCALL_WRAPPER(num_put_char_put_long
, 28)
7580 DEFINE_THISCALL_WRAPPER(num_put_char_put_long
, 32)
7582 ostreambuf_iterator_char
* __thiscall
num_put_char_put_long(const num_put
*this, ostreambuf_iterator_char
*ret
,
7583 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, LONG v
)
7585 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7586 return call_num_put_char_do_put_long(this, ret
, dest
, base
, fill
, v
);
7589 /* ?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 */
7590 /* ?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 */
7591 #if _MSVCP_VER <= 100
7592 #define call_num_put_char_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_char*, \
7593 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, ULONG), \
7594 (this, ret, dest, base, fill, v))
7596 #define call_num_put_char_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_char*, \
7597 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, ULONG), \
7598 (this, ret, dest, base, fill, v))
7600 #if _MSVCP_VER != 80
7601 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ulong
, 28)
7603 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ulong
, 32)
7605 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_ulong(const num_put
*this, ostreambuf_iterator_char
*ret
,
7606 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, ULONG v
)
7608 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
7609 char fmt
[7]; /* strlen("%+#lld")+1 */
7611 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7613 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
7614 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
7617 /* ?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 */
7618 /* ?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 */
7619 #if _MSVCP_VER != 80
7620 DEFINE_THISCALL_WRAPPER(num_put_char_put_ulong
, 28)
7622 DEFINE_THISCALL_WRAPPER(num_put_char_put_ulong
, 32)
7624 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ulong(const num_put
*this, ostreambuf_iterator_char
*ret
,
7625 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, ULONG v
)
7627 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7628 return call_num_put_char_do_put_ulong(this, ret
, dest
, base
, fill
, v
);
7631 static inline unsigned get_precision(const ios_base
*base
)
7633 streamsize ret
= base
->prec
<= 0 && !(base
->fmtfl
& FMTFLAG_fixed
) ? 6 : base
->prec
;
7639 /* ?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 */
7640 /* ?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 */
7641 /* ?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 */
7642 /* ?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 */
7643 #if _MSVCP_VER <= 100
7644 #define call_num_put_char_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_char*, \
7645 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
7646 (this, ret, dest, base, fill, v))
7647 #define call_num_put_char_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 8, ostreambuf_iterator_char*, \
7648 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
7649 (this, ret, dest, base, fill, v))
7651 #define call_num_put_char_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_char*, \
7652 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
7653 (this, ret, dest, base, fill, v))
7654 #define call_num_put_char_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_char*, \
7655 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, double), \
7656 (this, ret, dest, base, fill, v))
7658 #if _MSVCP_VER != 80
7659 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_double
, 32)
7661 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_double
, 36)
7663 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_double(const num_put
*this, ostreambuf_iterator_char
*ret
,
7664 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
7667 char fmt
[8]; /* strlen("%+#.*lg")+1 */
7671 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7673 num_put_char__Ffmt(this, fmt
, '\0', base
->fmtfl
);
7674 prec
= get_precision(base
);
7675 size
= _scprintf(fmt
, prec
, v
);
7677 /* TODO: don't use dynamic allocation */
7678 tmp
= MSVCRT_operator_new(size
*2);
7680 ERR("Out of memory\n");
7681 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
7683 num_put_char_fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, prec
, v
));
7684 MSVCRT_operator_delete(tmp
);
7688 /* ?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AAVios_base@2@DN@Z */
7689 /* ?put@?$num_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AV?$ostreambuf_iterator@DU?$char_traits@D@std@@@2@V32@AEAVios_base@2@DN@Z */
7690 #if _MSVCP_VER != 80
7691 DEFINE_THISCALL_WRAPPER(num_put_char_put_double
, 32)
7693 DEFINE_THISCALL_WRAPPER(num_put_char_put_double
, 36)
7695 ostreambuf_iterator_char
* __thiscall
num_put_char_put_double(const num_put
*this, ostreambuf_iterator_char
*ret
,
7696 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
7698 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7699 return call_num_put_char_do_put_double(this, ret
, dest
, base
, fill
, v
);
7702 /* ?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 */
7703 /* ?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 */
7704 #if _MSVCP_VER != 80
7705 DEFINE_THISCALL_WRAPPER(num_put_char_put_ldouble
, 32)
7707 DEFINE_THISCALL_WRAPPER(num_put_char_put_ldouble
, 36)
7709 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ldouble(const num_put
*this, ostreambuf_iterator_char
*ret
,
7710 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, double v
)
7712 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
7713 return call_num_put_char_do_put_ldouble(this, ret
, dest
, base
, fill
, v
);
7716 /* ?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 */
7717 /* ?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 */
7718 #if _MSVCP_VER <= 100
7719 #define call_num_put_char_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_char*, \
7720 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const void*), \
7721 (this, ret, dest, base, fill, v))
7723 #define call_num_put_char_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_char*, \
7724 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const void*), \
7725 (this, ret, dest, base, fill, v))
7727 #if _MSVCP_VER != 80
7728 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ptr
, 28)
7730 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_ptr
, 32)
7732 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_ptr(const num_put
*this, ostreambuf_iterator_char
*ret
,
7733 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const void *v
)
7735 char tmp
[17]; /* 8(16^8==2^64)*2(separators between every digit) + 1 */
7737 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
7739 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
7742 /* ?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 */
7743 /* ?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 */
7744 #if _MSVCP_VER != 80
7745 DEFINE_THISCALL_WRAPPER(num_put_char_put_ptr
, 28)
7747 DEFINE_THISCALL_WRAPPER(num_put_char_put_ptr
, 32)
7749 ostreambuf_iterator_char
* __thiscall
num_put_char_put_ptr(const num_put
*this, ostreambuf_iterator_char
*ret
,
7750 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const void *v
)
7752 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
7753 return call_num_put_char_do_put_ptr(this, ret
, dest
, base
, fill
, v
);
7756 /* ?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 */
7757 /* ?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 */
7758 #if _MSVCP_VER <= 100
7759 #define call_num_put_char_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_char*, \
7760 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, __int64), \
7761 (this, ret, dest, base, fill, v))
7763 #define call_num_put_char_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_char*, \
7764 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, __int64), \
7765 (this, ret, dest, base, fill, v))
7767 #if _MSVCP_VER != 80
7768 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_int64
, 32)
7770 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_int64
, 36)
7772 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_int64(const num_put
*this, ostreambuf_iterator_char
*ret
,
7773 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, __int64 v
)
7775 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
7776 char fmt
[7]; /* strlen("%+#lld")+1 */
7778 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7780 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
7781 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
7784 /* ?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 */
7785 /* ?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 */
7786 #if _MSVCP_VER != 80
7787 DEFINE_THISCALL_WRAPPER(num_put_char_put_int64
, 32)
7789 DEFINE_THISCALL_WRAPPER(num_put_char_put_int64
, 36)
7791 ostreambuf_iterator_char
* __thiscall
num_put_char_put_int64(const num_put
*this, ostreambuf_iterator_char
*ret
,
7792 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, __int64 v
)
7794 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7795 return call_num_put_char_do_put_int64(this, ret
, dest
, base
, fill
, v
);
7798 /* ?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 */
7799 /* ?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 */
7800 #if _MSVCP_VER <= 100
7801 #define call_num_put_char_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_char*, \
7802 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, unsigned __int64), \
7803 (this, ret, dest, base, fill, v))
7805 #define call_num_put_char_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_char*, \
7806 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, unsigned __int64), \
7807 (this, ret, dest, base, fill, v))
7809 #if _MSVCP_VER != 80
7810 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_uint64
, 32)
7812 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_uint64
, 36)
7814 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_uint64(const num_put
*this, ostreambuf_iterator_char
*ret
,
7815 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, unsigned __int64 v
)
7817 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
7818 char fmt
[7]; /* strlen("%+#lld")+1 */
7820 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7822 return num_put_char__Iput(this, ret
, dest
, base
, fill
, tmp
,
7823 sprintf(tmp
, num_put_char__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
7826 /* ?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 */
7827 /* ?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 */
7828 #if _MSVCP_VER != 80
7829 DEFINE_THISCALL_WRAPPER(num_put_char_put_uint64
, 32)
7831 DEFINE_THISCALL_WRAPPER(num_put_char_put_uint64
, 36)
7833 ostreambuf_iterator_char
* __thiscall
num_put_char_put_uint64(const num_put
*this, ostreambuf_iterator_char
*ret
,
7834 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, unsigned __int64 v
)
7836 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
7837 return call_num_put_char_do_put_uint64(this, ret
, dest
, base
, fill
, v
);
7840 /* ?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 */
7841 /* ?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 */
7842 #if _MSVCP_VER <= 100
7843 #define call_num_put_char_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_char*, \
7844 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, MSVCP_bool), \
7845 (this, ret, dest, base, fill, v))
7847 #define call_num_put_char_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 40, ostreambuf_iterator_char*, \
7848 (const num_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, MSVCP_bool), \
7849 (this, ret, dest, base, fill, v))
7851 #if _MSVCP_VER != 80
7852 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_bool
, 28)
7854 DEFINE_THISCALL_WRAPPER(num_put_char_do_put_bool
, 32)
7856 ostreambuf_iterator_char
* __thiscall
num_put_char_do_put_bool(const num_put
*this, ostreambuf_iterator_char
*ret
,
7857 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, MSVCP_bool v
)
7859 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7861 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
7862 numpunct_char
*numpunct
= numpunct_char_use_facet(IOS_LOCALE(base
));
7863 basic_string_char str
;
7864 MSVCP_size_t pad
, len
;
7867 numpunct_char_truename(numpunct
, &str
);
7869 numpunct_char_falsename(numpunct
, &str
);
7871 len
= MSVCP_basic_string_char_length(&str
);
7872 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
7875 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
7876 num_put_char__Rep(this, &dest
, dest
, fill
, pad
);
7879 num_put_char__Putc(this, &dest
, dest
, MSVCP_basic_string_char_c_str(&str
), len
);
7880 MSVCP_basic_string_char_dtor(&str
);
7881 return num_put_char__Rep(this, ret
, dest
, fill
, pad
);
7884 return num_put_char_put_long(this, ret
, dest
, base
, fill
, v
);
7887 /* ?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 */
7888 /* ?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 */
7889 #if _MSVCP_VER != 80
7890 DEFINE_THISCALL_WRAPPER(num_put_char_put_bool
, 28)
7892 DEFINE_THISCALL_WRAPPER(num_put_char_put_bool
, 32)
7894 ostreambuf_iterator_char
* __thiscall
num_put_char_put_bool(const num_put
*this, ostreambuf_iterator_char
*ret
,
7895 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, MSVCP_bool v
)
7897 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
7898 return call_num_put_char_do_put_bool(this, ret
, dest
, base
, fill
, v
);
7901 /* ?id@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
7902 locale_id num_put_wchar_id
= {0};
7903 /* ?id@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
7904 locale_id num_put_short_id
= {0};
7906 /* num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
7907 extern const vtable_ptr MSVCP_num_put_wchar_vtable
;
7908 /* num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
7909 extern const vtable_ptr MSVCP_num_put_short_vtable
;
7911 /* ?_Init@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
7912 /* ?_Init@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
7913 DEFINE_THISCALL_WRAPPER(num_put_wchar__Init
, 8)
7914 void __thiscall
num_put_wchar__Init(num_put
*this, const _Locinfo
*locinfo
)
7916 TRACE("(%p %p)\n", this, locinfo
);
7917 #if _MSVCP_VER < 110
7918 _Locinfo__Getcvt(locinfo
, &this->cvt
);
7922 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
7923 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
7924 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor_locinfo
, 12)
7925 num_put
* __thiscall
num_put_wchar_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
7927 TRACE("(%p %p %ld)\n", this, locinfo
, refs
);
7929 locale_facet_ctor_refs(&this->facet
, refs
);
7930 this->facet
.vtable
= &MSVCP_num_put_wchar_vtable
;
7932 num_put_wchar__Init(this, locinfo
);
7936 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
7937 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
7938 DEFINE_THISCALL_WRAPPER(num_put_short_ctor_locinfo
, 12)
7939 num_put
* __thiscall
num_put_short_ctor_locinfo(num_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
7941 num_put_wchar_ctor_locinfo(this, locinfo
, refs
);
7942 this->facet
.vtable
= &MSVCP_num_put_short_vtable
;
7946 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
7947 /* ??0?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
7948 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor_refs
, 8)
7949 num_put
* __thiscall
num_put_wchar_ctor_refs(num_put
*this, MSVCP_size_t refs
)
7953 TRACE("(%p %lu)\n", this, refs
);
7955 _Locinfo_ctor(&locinfo
);
7956 num_put_wchar_ctor_locinfo(this, &locinfo
, refs
);
7957 _Locinfo_dtor(&locinfo
);
7961 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
7962 /* ??0?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
7963 DEFINE_THISCALL_WRAPPER(num_put_short_ctor_refs
, 8)
7964 num_put
* __thiscall
num_put_short_ctor_refs(num_put
*this, MSVCP_size_t refs
)
7966 num_put_wchar_ctor_refs(this, refs
);
7967 this->facet
.vtable
= &MSVCP_num_put_short_vtable
;
7971 /* ??_F?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
7972 /* ??_F?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
7973 DEFINE_THISCALL_WRAPPER(num_put_wchar_ctor
, 4)
7974 num_put
* __thiscall
num_put_wchar_ctor(num_put
*this)
7976 return num_put_wchar_ctor_refs(this, 0);
7979 /* ??_F?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ */
7980 /* ??_F?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ */
7981 DEFINE_THISCALL_WRAPPER(num_put_short_ctor
, 4)
7982 num_put
* __thiscall
num_put_short_ctor(num_put
*this)
7984 return num_put_short_ctor_refs(this, 0);
7987 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@UAE@XZ */
7988 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@UEAA@XZ */
7989 /* ??1?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
7990 /* ??1?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
7991 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
7992 /* ??1?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
7993 DEFINE_THISCALL_WRAPPER(num_put_wchar_dtor
, 4)
7994 void __thiscall
num_put_wchar_dtor(num_put
*this)
7996 TRACE("(%p)\n", this);
7997 locale_facet_dtor(&this->facet
);
8000 DEFINE_THISCALL_WRAPPER(num_put_wchar_vector_dtor
, 8)
8001 num_put
* __thiscall
num_put_wchar_vector_dtor(num_put
*this, unsigned int flags
)
8003 TRACE("(%p %x)\n", this, flags
);
8005 /* we have an array, with the number of elements stored before the first object */
8006 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
8008 for(i
=*ptr
-1; i
>=0; i
--)
8009 num_put_wchar_dtor(this+i
);
8010 MSVCRT_operator_delete(ptr
);
8012 num_put_wchar_dtor(this);
8014 MSVCRT_operator_delete(this);
8020 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
8021 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
8022 MSVCP_size_t __cdecl
num_put_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
8024 TRACE("(%p %p)\n", facet
, loc
);
8026 if(facet
&& !*facet
) {
8029 *facet
= MSVCRT_operator_new(sizeof(num_put
));
8031 ERR("Out of memory\n");
8032 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8036 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
8037 num_put_wchar_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
8038 _Locinfo_dtor(&locinfo
);
8044 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
8045 /* ?_Getcat@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
8046 MSVCP_size_t __cdecl
num_put_wchar__Getcat_old(const locale_facet
**facet
)
8048 return num_put_wchar__Getcat(facet
, locale_classic());
8051 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
8052 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
8053 MSVCP_size_t __cdecl
num_put_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
8055 TRACE("(%p %p)\n", facet
, loc
);
8057 if(facet
&& !*facet
) {
8060 *facet
= MSVCRT_operator_new(sizeof(num_put
));
8062 ERR("Out of memory\n");
8063 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8067 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
8068 num_put_short_ctor_locinfo((num_put
*)*facet
, &locinfo
, 0);
8069 _Locinfo_dtor(&locinfo
);
8075 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
8076 /* ?_Getcat@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
8077 MSVCP_size_t __cdecl
num_put_short__Getcat_old(const locale_facet
**facet
)
8079 return num_put_short__Getcat(facet
, locale_classic());
8082 num_put
* num_put_wchar_use_facet(const locale
*loc
)
8084 static num_put
*obj
= NULL
;
8087 const locale_facet
*fac
;
8089 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
8090 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_wchar_id
));
8092 _Lockit_dtor(&lock
);
8093 return (num_put
*)fac
;
8097 _Lockit_dtor(&lock
);
8101 num_put_wchar__Getcat(&fac
, loc
);
8102 obj
= (num_put
*)fac
;
8103 call_locale_facet__Incref(&obj
->facet
);
8104 locale_facet_register(&obj
->facet
);
8105 _Lockit_dtor(&lock
);
8110 num_put
* num_put_short_use_facet(const locale
*loc
)
8112 static num_put
*obj
= NULL
;
8115 const locale_facet
*fac
;
8117 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
8118 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&num_put_short_id
));
8120 _Lockit_dtor(&lock
);
8121 return (num_put
*)fac
;
8125 _Lockit_dtor(&lock
);
8129 num_put_short__Getcat(&fac
, loc
);
8130 obj
= (num_put
*)fac
;
8131 call_locale_facet__Incref(&obj
->facet
);
8132 locale_facet_register(&obj
->facet
);
8133 _Lockit_dtor(&lock
);
8138 /* ?_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 */
8139 /* ?_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 */
8140 /* ?_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 */
8141 /* ?_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 */
8142 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Put(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8143 ostreambuf_iterator_wchar dest
, const wchar_t *ptr
, MSVCP_size_t count
)
8145 TRACE("(%p %p %s %ld)\n", this, ret
, debugstr_wn(ptr
, count
), count
);
8147 for(; count
>0; count
--)
8148 ostreambuf_iterator_wchar_put(&dest
, *ptr
++);
8154 #if _MSVCP_VER < 110
8155 /* ?_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 */
8156 /* ?_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 */
8157 /* ?_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 */
8158 /* ?_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 */
8159 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Putc(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8160 ostreambuf_iterator_wchar dest
, const char *ptr
, MSVCP_size_t count
)
8165 TRACE("(%p %p %s %ld)\n", this, ret
, debugstr_an(ptr
, count
), count
);
8167 memset(&state
, 0, sizeof(state
));
8168 for(; count
>0; count
--) {
8169 if(_Mbrtowc(&ch
, ptr
++, 1, &state
, &this->cvt
) == 1)
8170 ostreambuf_iterator_wchar_put(&dest
, ch
);
8178 /* ?_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 */
8179 /* ?_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 */
8180 /* ?_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 */
8181 /* ?_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 */
8182 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Putgrouped(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8183 ostreambuf_iterator_wchar dest
, const char *ptr
, MSVCP_size_t count
, wchar_t delim
)
8185 FIXME("(%p %p %p %ld %d) stub\n", this, ret
, ptr
, count
, delim
);
8189 /* ?_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 */
8190 /* ?_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 */
8191 /* ?_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 */
8192 /* ?_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 */
8193 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Rep(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8194 ostreambuf_iterator_wchar dest
, wchar_t c
, MSVCP_size_t count
)
8196 TRACE("(%p %p %d %ld)\n", this, ret
, c
, count
);
8198 for(; count
>0; count
--)
8199 ostreambuf_iterator_wchar_put(&dest
, c
);
8205 /* ?_Ffmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAPADPADDH@Z */
8206 /* ?_Ffmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAPEADPEADDH@Z */
8207 /* ?_Ffmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAPADPADDH@Z */
8208 /* ?_Ffmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAPEADPEADDH@Z */
8209 char* __cdecl
num_put_wchar__Ffmt(const num_put
*this, char *fmt
, char spec
, int fmtfl
)
8211 int type
= fmtfl
& FMTFLAG_floatfield
;
8214 TRACE("(%p %p %d %d)\n", this, fmt
, spec
, fmtfl
);
8217 if(fmtfl
& FMTFLAG_showpos
)
8219 if(fmtfl
& FMTFLAG_showbase
)
8226 if(type
== FMTFLAG_fixed
)
8228 else if(type
== FMTFLAG_scientific
)
8229 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'E' : 'e';
8230 else if(type
== (FMTFLAG_fixed
|FMTFLAG_scientific
))
8231 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'A' : 'a';
8233 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'G' : 'g';
8239 /* ?_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 */
8240 /* ?_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 */
8241 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8242 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const char *buf
, MSVCP_size_t bef_point
,
8243 MSVCP_size_t aft_point
, MSVCP_size_t trailing
, MSVCP_size_t count
)
8245 FIXME("(%p %p %p %d %p %ld %ld %ld %ld) stub\n", this, ret
, base
,
8246 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
8250 /* ?_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 */
8251 /* ?_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 */
8252 ostreambuf_iterator_wchar
* __cdecl
num_put_short__Fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8253 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const char *buf
, MSVCP_size_t bef_point
,
8254 MSVCP_size_t aft_point
, MSVCP_size_t trailing
, MSVCP_size_t count
)
8256 FIXME("(%p %p %p %d %p %ld %ld %ld %ld) stub\n", this, ret
, base
,
8257 fill
, buf
, bef_point
, aft_point
, trailing
, count
);
8261 #if _MSVCP_VER < 110
8262 static void num_put_wchar_wide_put(const num_put
*this,
8263 ostreambuf_iterator_wchar
*dest
, ios_base
*base
,
8264 const char *buf
, MSVCP_size_t count
)
8266 num_put_wchar__Putc(this, dest
, *dest
, buf
, count
);
8269 static void num_put_wchar_wide_put(const num_put
*this,
8270 ostreambuf_iterator_wchar
*dest
, ios_base
*base
,
8271 const char *buf
, MSVCP_size_t count
)
8276 ctype
= ctype_wchar_use_facet(IOS_LOCALE(base
));
8277 for(i
=0; i
<count
; i
++)
8278 ostreambuf_iterator_wchar_put(dest
, ctype_wchar_widen_ch(ctype
, buf
[i
]));
8282 /* TODO: This function should be removed when num_put_wchar__Fput is implemented */
8283 static ostreambuf_iterator_wchar
* num_put__fput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8284 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
,
8285 MSVCP_size_t count
, numpunct_wchar
*numpunct
)
8287 basic_string_char grouping_bstr
;
8288 const char *grouping
;
8289 char *p
, dec_point
= *localeconv()->decimal_point
;
8291 int cur_group
= 0, group_size
= 0;
8292 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
8293 MSVCP_size_t i
, pad
;
8295 TRACE("(%p %p %p %d %s %ld)\n", this, ret
, base
, fill
, buf
, count
);
8297 for(p
=buf
; p
<buf
+count
; p
++) {
8303 /* Add separators to number */
8304 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
8305 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
8306 #if _MSVCP_VER >= 70
8307 if (grouping
[0]) sep
= numpunct_wchar_thousands_sep(numpunct
);
8310 for(; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
8312 if(group_size
== grouping
[cur_group
]) {
8314 if(grouping
[cur_group
+1])
8317 memmove(p
+1, p
, buf
+count
-p
);
8318 *p
= '\0'; /* mark thousands separator positions */
8322 MSVCP_basic_string_char_dtor(&grouping_bstr
);
8324 /* Display number with padding */
8325 if(count
>= base
->wide
)
8328 pad
= base
->wide
-count
;
8331 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
8332 num_put_wchar_wide_put(this, &dest
, base
, buf
, 1);
8335 if(adjustfield
!= FMTFLAG_left
) {
8336 num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8340 for(i
=0; i
<count
; i
++) {
8341 if(buf
[i
] == dec_point
)
8342 num_put_wchar__Rep(this, &dest
, dest
, numpunct_wchar_decimal_point(numpunct
), 1);
8344 num_put_wchar__Rep(this, &dest
, dest
, sep
, 1);
8346 num_put_wchar_wide_put(this, &dest
, base
, buf
+i
, 1);
8349 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8352 /* ?_Ifmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAPADPADPBDH@Z */
8353 /* ?_Ifmt@?$num_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
8354 /* ?_Ifmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@ABAPADPADPBDH@Z */
8355 /* ?_Ifmt@?$num_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@AEBAPEADPEADPEBDH@Z */
8356 char* __cdecl
num_put_wchar__Ifmt(const num_put
*this, char *fmt
, const char *spec
, int fmtfl
)
8358 int base
= fmtfl
& FMTFLAG_basefield
;
8361 TRACE("(%p %p %p %d)\n", this, fmt
, spec
, fmtfl
);
8364 if(fmtfl
& FMTFLAG_showpos
)
8366 if(fmtfl
& FMTFLAG_showbase
)
8373 if(base
== FMTFLAG_oct
)
8375 else if(base
== FMTFLAG_hex
)
8376 *p
++ = (fmtfl
& FMTFLAG_uppercase
) ? 'X' : 'x';
8384 static ostreambuf_iterator_wchar
* num_put__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8385 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
,
8386 MSVCP_size_t count
, numpunct_wchar
*numpunct
)
8388 basic_string_char grouping_bstr
;
8389 const char *grouping
;
8392 int cur_group
= 0, group_size
= 0;
8393 int adjustfield
= base
->fmtfl
& FMTFLAG_adjustfield
;
8394 MSVCP_size_t i
, pad
;
8396 TRACE("(%p %p %p %d %s %ld)\n", this, ret
, base
, fill
, buf
, count
);
8398 /* Add separators to number */
8399 numpunct_wchar_grouping(numpunct
, &grouping_bstr
);
8400 grouping
= MSVCP_basic_string_char_c_str(&grouping_bstr
);
8401 sep
= grouping
[0] ? numpunct_wchar_thousands_sep(numpunct
) : '\0';
8403 for(p
=buf
+count
-1; p
>buf
&& sep
&& grouping
[cur_group
]!=CHAR_MAX
; p
--) {
8405 if(group_size
== grouping
[cur_group
]) {
8407 if(grouping
[cur_group
+1])
8410 memmove(p
+1, p
, buf
+count
-p
);
8411 *p
= '\0'; /* mark thousands separator positions */
8415 MSVCP_basic_string_char_dtor(&grouping_bstr
);
8417 /* Display number with padding */
8418 if(count
>= base
->wide
)
8421 pad
= base
->wide
-count
;
8424 if((adjustfield
& FMTFLAG_internal
) && (buf
[0]=='-' || buf
[0]=='+')) {
8425 num_put_wchar_wide_put(this, &dest
, base
, buf
, 1);
8427 }else if((adjustfield
& FMTFLAG_internal
) && (buf
[1]=='x' || buf
[1]=='X')) {
8428 num_put_wchar_wide_put(this, &dest
, base
, buf
, 2);
8431 if(adjustfield
!= FMTFLAG_left
) {
8432 num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8436 for(i
=0; i
<count
; i
++) {
8438 num_put_wchar__Rep(this, &dest
, dest
, sep
, 1);
8440 num_put_wchar_wide_put(this, &dest
, base
, buf
+i
, 1);
8443 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8446 /* ?_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 */
8447 /* ?_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 */
8448 ostreambuf_iterator_wchar
* __cdecl
num_put_wchar__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8449 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
, MSVCP_size_t count
)
8451 return num_put__Iput(this, ret
, dest
, base
, fill
, buf
, count
, numpunct_wchar_use_facet(IOS_LOCALE(base
)));
8454 /* ?_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 */
8455 /* ?_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 */
8456 ostreambuf_iterator_wchar
* __cdecl
num_put_short__Iput(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8457 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, char *buf
, MSVCP_size_t count
)
8459 return num_put__Iput(this, ret
, dest
, base
, fill
, buf
, count
, numpunct_short_use_facet(IOS_LOCALE(base
)));
8462 /* ?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 */
8463 /* ?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 */
8464 #if _MSVCP_VER <= 100
8465 #define call_num_put_wchar_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_wchar*, \
8466 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, LONG), \
8467 (this, ret, dest, base, fill, v))
8469 #define call_num_put_wchar_do_put_long(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 36, ostreambuf_iterator_wchar*, \
8470 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, LONG), \
8471 (this, ret, dest, base, fill, v))
8473 #if _MSVCP_VER != 80
8474 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_long
, 28)
8476 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_long
, 32)
8478 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8479 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
8481 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8482 char fmt
[7]; /* strlen("%+#lld")+1 */
8484 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8486 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
8487 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
8490 /* ?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 */
8491 /* ?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 */
8492 #if _MSVCP_VER != 80
8493 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_long
, 28)
8495 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_long
, 32)
8497 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8498 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
8500 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8501 char fmt
[7]; /* strlen("%+#lld")+1 */
8503 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8505 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
8506 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "ld", base
->fmtfl
), v
));
8509 /* ?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 */
8510 /* ?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 */
8511 /* ?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 */
8512 /* ?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 */
8513 #if _MSVCP_VER != 80
8514 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_long
, 28)
8516 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_long
, 32)
8518 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_long(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8519 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, LONG v
)
8521 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8522 return call_num_put_wchar_do_put_long(this, ret
, dest
, base
, fill
, v
);
8525 /* ?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 */
8526 /* ?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 */
8527 #if _MSVCP_VER <= 100
8528 #define call_num_put_wchar_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_wchar*, \
8529 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, ULONG), \
8530 (this, ret, dest, base, fill, v))
8532 #define call_num_put_wchar_do_put_ulong(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_wchar*, \
8533 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, ULONG), \
8534 (this, ret, dest, base, fill, v))
8536 #if _MSVCP_VER != 80
8537 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ulong
, 28)
8539 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ulong
, 32)
8541 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8542 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
8544 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8545 char fmt
[7]; /* strlen("%+#lld")+1 */
8547 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8549 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
8550 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
8553 /* ?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 */
8554 /* ?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 */
8555 #if _MSVCP_VER != 80
8556 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ulong
, 28)
8558 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ulong
, 32)
8560 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8561 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
8563 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8564 char fmt
[7]; /* strlen("%+#lld")+1 */
8566 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8568 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
8569 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lu", base
->fmtfl
), v
));
8572 /* ?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 */
8573 /* ?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 */
8574 /* ?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 */
8575 /* ?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 */
8576 #if _MSVCP_VER != 80
8577 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ulong
, 28)
8579 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ulong
, 32)
8581 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ulong(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8582 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, ULONG v
)
8584 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8585 return call_num_put_wchar_do_put_ulong(this, ret
, dest
, base
, fill
, v
);
8588 /* ?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 */
8589 /* ?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 */
8590 /* ?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 */
8591 /* ?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 */
8592 #if _MSVCP_VER <= 100
8593 #define call_num_put_wchar_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_wchar*, \
8594 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
8595 (this, ret, dest, base, fill, v))
8596 #define call_num_put_wchar_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 8, ostreambuf_iterator_wchar*, \
8597 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
8598 (this, ret, dest, base, fill, v))
8600 #define call_num_put_wchar_do_put_double(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_wchar*, \
8601 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
8602 (this, ret, dest, base, fill, v))
8603 #define call_num_put_wchar_do_put_ldouble(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_wchar*, \
8604 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, double), \
8605 (this, ret, dest, base, fill, v))
8607 #if _MSVCP_VER != 80
8608 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_double
, 32)
8610 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_double
, 36)
8612 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8613 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
8616 char fmt
[8]; /* strlen("%+#.*lg")+1 */
8620 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
8622 num_put_wchar__Ffmt(this, fmt
, '\0', base
->fmtfl
);
8623 prec
= get_precision(base
);
8624 size
= _scprintf(fmt
, prec
, v
);
8626 /* TODO: don't use dynamic allocation */
8627 tmp
= MSVCRT_operator_new(size
*2);
8629 ERR("Out of memory\n");
8630 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8632 num_put__fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, prec
, v
),
8633 numpunct_wchar_use_facet(IOS_LOCALE(base
)));
8634 MSVCRT_operator_delete(tmp
);
8638 /* ?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 */
8639 /* ?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 */
8640 /* ?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 */
8641 /* ?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 */
8642 #if _MSVCP_VER != 80
8643 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_double
, 32)
8645 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_double
, 36)
8647 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8648 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
8651 char fmt
[8]; /* strlen("%+#.*lg")+1 */
8655 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
8657 num_put_wchar__Ffmt(this, fmt
, '\0', base
->fmtfl
);
8658 prec
= get_precision(base
);
8659 size
= _scprintf(fmt
, prec
, v
);
8661 /* TODO: don't use dynamic allocation */
8662 tmp
= MSVCRT_operator_new(size
*2);
8664 ERR("Out of memory\n");
8665 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
8667 num_put__fput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, fmt
, prec
, v
),
8668 numpunct_short_use_facet(IOS_LOCALE(base
)));
8669 MSVCRT_operator_delete(tmp
);
8673 /* ?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 */
8674 /* ?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 */
8675 /* ?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 */
8676 /* ?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 */
8677 #if _MSVCP_VER != 80
8678 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_double
, 32)
8680 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_double
, 36)
8682 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_double(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8683 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
8685 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
8686 return call_num_put_wchar_do_put_double(this, ret
, dest
, base
, fill
, v
);
8689 /* ?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 */
8690 /* ?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 */
8691 /* ?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 */
8692 /* ?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 */
8693 #if _MSVCP_VER != 80
8694 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ldouble
, 32)
8696 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ldouble
, 36)
8698 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ldouble(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8699 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, double v
)
8701 TRACE("(%p %p %p %d %lf)\n", this, ret
, base
, fill
, v
);
8702 return call_num_put_wchar_do_put_ldouble(this, ret
, dest
, base
, fill
, v
);
8705 /* ?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 */
8706 /* ?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 */
8707 #if _MSVCP_VER <= 100
8708 #define call_num_put_wchar_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_wchar*, \
8709 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const void*), \
8710 (this, ret, dest, base, fill, v))
8712 #define call_num_put_wchar_do_put_ptr(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_wchar*, \
8713 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const void*), \
8714 (this, ret, dest, base, fill, v))
8716 #if _MSVCP_VER != 80
8717 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ptr
, 28)
8719 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_ptr
, 32)
8721 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8722 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
8724 char tmp
[17]; /* 8(16^8==2^64)*2(separators between every digit) + 1 */
8726 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
8728 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
8731 /* ?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 */
8732 /* ?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 */
8733 #if _MSVCP_VER != 80
8734 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ptr
, 28)
8736 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_ptr
, 32)
8738 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8739 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
8741 char tmp
[17]; /* 8(16^8==2^64)*2(separators between every digit) + 1 */
8743 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
8745 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
, sprintf(tmp
, "%p", v
));
8748 /* ?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 */
8749 /* ?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 */
8750 /* ?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 */
8751 /* ?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 */
8752 #if _MSVCP_VER != 80
8753 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ptr
, 28)
8755 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_ptr
, 32)
8757 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_ptr(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8758 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, const void *v
)
8760 TRACE("(%p %p %p %d %p)\n", this, ret
, base
, fill
, v
);
8761 return call_num_put_wchar_do_put_ptr(this, ret
, dest
, base
, fill
, v
);
8764 /* ?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 */
8765 /* ?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 */
8766 #if _MSVCP_VER <= 100
8767 #define call_num_put_wchar_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 20, ostreambuf_iterator_wchar*, \
8768 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, __int64), \
8769 (this, ret, dest, base, fill, v))
8771 #define call_num_put_wchar_do_put_int64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 28, ostreambuf_iterator_wchar*, \
8772 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, __int64), \
8773 (this, ret, dest, base, fill, v))
8775 #if _MSVCP_VER != 80
8776 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_int64
, 32)
8778 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_int64
, 36)
8780 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8781 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
8783 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8784 char fmt
[7]; /* strlen("%+#lld")+1 */
8786 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8788 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
8789 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
8792 /* ?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 */
8793 /* ?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 */
8794 #if _MSVCP_VER != 80
8795 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_int64
, 32)
8797 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_int64
, 36)
8799 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8800 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
8802 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8803 char fmt
[7]; /* strlen("%+#lld")+1 */
8805 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8807 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
8808 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "lld", base
->fmtfl
), v
));
8811 /* ?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 */
8812 /* ?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 */
8813 /* ?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 */
8814 /* ?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 */
8815 #if _MSVCP_VER != 80
8816 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_int64
, 32)
8818 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_int64
, 36)
8820 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_int64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8821 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, __int64 v
)
8823 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8824 return call_num_put_wchar_do_put_int64(this, ret
, dest
, base
, fill
, v
);
8827 /* ?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 */
8828 /* ?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 */
8829 #if _MSVCP_VER <= 100
8830 #define call_num_put_wchar_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 16, ostreambuf_iterator_wchar*, \
8831 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, unsigned __int64), \
8832 (this, ret, dest, base, fill, v))
8834 #define call_num_put_wchar_do_put_uint64(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 24, ostreambuf_iterator_wchar*, \
8835 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, unsigned __int64), \
8836 (this, ret, dest, base, fill, v))
8838 #if _MSVCP_VER != 80
8839 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_uint64
, 32)
8841 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_uint64
, 36)
8843 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8844 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
8846 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8847 char fmt
[7]; /* strlen("%+#lld")+1 */
8849 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8851 return num_put_wchar__Iput(this, ret
, dest
, base
, fill
, tmp
,
8852 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
8855 /* ?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 */
8856 /* ?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 */
8857 #if _MSVCP_VER != 80
8858 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_uint64
, 32)
8860 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_uint64
, 36)
8862 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8863 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
8865 char tmp
[48]; /* 22(8^22>2^64)*2(separators between every digit) + 3(strlen("+0x"))+1 */
8866 char fmt
[7]; /* strlen("%+#lld")+1 */
8868 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8870 return num_put_short__Iput(this, ret
, dest
, base
, fill
, tmp
,
8871 sprintf(tmp
, num_put_wchar__Ifmt(this, fmt
, "llu", base
->fmtfl
), v
));
8874 /* ?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 */
8875 /* ?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 */
8876 /* ?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 */
8877 /* ?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 */
8878 #if _MSVCP_VER != 80
8879 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_uint64
, 32)
8881 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_uint64
, 36)
8883 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_uint64(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8884 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, unsigned __int64 v
)
8886 TRACE("(%p %p %p %d)\n", this, ret
, base
, fill
);
8887 return call_num_put_wchar_do_put_uint64(this, ret
, dest
, base
, fill
, v
);
8890 /* ?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 */
8891 /* ?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 */
8892 #if _MSVCP_VER <= 100
8893 #define call_num_put_wchar_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 32, ostreambuf_iterator_wchar*, \
8894 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, MSVCP_bool), \
8895 (this, ret, dest, base, fill, v))
8897 #define call_num_put_wchar_do_put_bool(this, ret, dest, base, fill, v) CALL_VTBL_FUNC(this, 40, ostreambuf_iterator_wchar*, \
8898 (const num_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, MSVCP_bool), \
8899 (this, ret, dest, base, fill, v))
8901 #if _MSVCP_VER != 80
8902 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_bool
, 28)
8904 DEFINE_THISCALL_WRAPPER(num_put_wchar_do_put_bool
, 32)
8906 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_do_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8907 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, MSVCP_bool v
)
8909 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8911 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
8912 numpunct_wchar
*numpunct
= numpunct_wchar_use_facet(IOS_LOCALE(base
));
8913 basic_string_wchar str
;
8914 MSVCP_size_t pad
, len
;
8917 numpunct_wchar_truename(numpunct
, &str
);
8919 numpunct_wchar_falsename(numpunct
, &str
);
8921 len
= MSVCP_basic_string_wchar_length(&str
);
8922 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
8925 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
8926 num_put_wchar__Rep(this, &dest
, dest
, fill
, pad
);
8929 num_put_wchar__Put(this, &dest
, dest
, MSVCP_basic_string_wchar_c_str(&str
), len
);
8930 MSVCP_basic_string_wchar_dtor(&str
);
8931 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8934 return num_put_wchar_put_long(this, ret
, dest
, base
, fill
, v
);
8937 /* ?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 */
8938 /* ?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 */
8939 #if _MSVCP_VER != 80
8940 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_bool
, 28)
8942 DEFINE_THISCALL_WRAPPER(num_put_short_do_put_bool
, 32)
8944 ostreambuf_iterator_wchar
* __thiscall
num_put_short_do_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8945 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, MSVCP_bool v
)
8947 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8949 if(base
->fmtfl
& FMTFLAG_boolalpha
) {
8950 numpunct_wchar
*numpunct
= numpunct_short_use_facet(IOS_LOCALE(base
));
8951 basic_string_wchar str
;
8952 MSVCP_size_t pad
, len
;
8955 numpunct_wchar_truename(numpunct
, &str
);
8957 numpunct_wchar_falsename(numpunct
, &str
);
8959 len
= MSVCP_basic_string_wchar_length(&str
);
8960 pad
= (len
>base
->wide
? 0 : base
->wide
-len
);
8963 if((base
->fmtfl
& FMTFLAG_adjustfield
) != FMTFLAG_left
) {
8964 num_put_wchar__Rep(this, &dest
, dest
, fill
, pad
);
8967 num_put_wchar__Put(this, &dest
, dest
, MSVCP_basic_string_wchar_c_str(&str
), len
);
8968 MSVCP_basic_string_wchar_dtor(&str
);
8969 return num_put_wchar__Rep(this, ret
, dest
, fill
, pad
);
8972 return num_put_wchar_put_long(this, ret
, dest
, base
, fill
, v
);
8975 /* ?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 */
8976 /* ?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 */
8977 /* ?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 */
8978 /* ?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 */
8979 #if _MSVCP_VER != 80
8980 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_bool
, 28)
8982 DEFINE_THISCALL_WRAPPER(num_put_wchar_put_bool
, 32)
8984 ostreambuf_iterator_wchar
* __thiscall
num_put_wchar_put_bool(const num_put
*this, ostreambuf_iterator_wchar
*ret
,
8985 ostreambuf_iterator_wchar dest
, ios_base
*base
, wchar_t fill
, MSVCP_bool v
)
8987 TRACE("(%p %p %p %d %d)\n", this, ret
, base
, fill
, v
);
8988 return call_num_put_wchar_do_put_bool(this, ret
, dest
, base
, fill
, v
);
8991 /* ?id@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
8992 locale_id time_put_char_id
= {0};
8994 /* ??_7?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
8995 extern const vtable_ptr MSVCP_time_put_char_vtable
;
8997 /* ?_Init@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
8998 /* ?_Init@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
8999 DEFINE_THISCALL_WRAPPER(time_put_char__Init
, 8)
9000 void __thiscall
time_put_char__Init(time_put
*this, const _Locinfo
*locinfo
)
9002 TRACE("(%p %p)\n", this, locinfo
);
9003 _Locinfo__Gettnames(locinfo
, &this->time
);
9004 #if _MSVCP_VER <= 100
9005 _Locinfo__Getcvt(locinfo
, &this->cvt
);
9009 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
9010 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
9011 DEFINE_THISCALL_WRAPPER(time_put_char_ctor_locinfo
, 12)
9012 time_put
* __thiscall
time_put_char_ctor_locinfo(time_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
9014 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
9015 locale_facet_ctor_refs(&this->facet
, refs
);
9016 this->facet
.vtable
= &MSVCP_time_put_char_vtable
;
9017 time_put_char__Init(this, locinfo
);
9021 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
9022 /* ??0?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
9023 DEFINE_THISCALL_WRAPPER(time_put_char_ctor_refs
, 8)
9024 time_put
* __thiscall
time_put_char_ctor_refs(time_put
*this, MSVCP_size_t refs
)
9028 TRACE("(%p %lu)\n", this, refs
);
9030 _Locinfo_ctor(&locinfo
);
9031 time_put_char_ctor_locinfo(this, &locinfo
, refs
);
9032 _Locinfo_dtor(&locinfo
);
9036 /* ??_F?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
9037 /* ??_F?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
9038 DEFINE_THISCALL_WRAPPER(time_put_char_ctor
, 4)
9039 time_put
* __thiscall
time_put_char_ctor(time_put
*this)
9041 return time_put_char_ctor_refs(this, 0);
9044 /* ??1?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
9045 /* ??1?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
9046 DEFINE_THISCALL_WRAPPER(time_put_char_dtor
, 4)
9047 void __thiscall
time_put_char_dtor(time_put
*this)
9049 TRACE("(%p)\n", this);
9050 _Timevec_dtor(&this->time
);
9053 DEFINE_THISCALL_WRAPPER(time_put_char_vector_dtor
, 8)
9054 time_put
* __thiscall
time_put_char_vector_dtor(time_put
*this, unsigned int flags
)
9056 TRACE("(%p %x)\n", this, flags
);
9058 /* we have an array, with the number of elements stored before the first object */
9059 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
9061 for(i
=*ptr
-1; i
>=0; i
--)
9062 time_put_char_dtor(this+i
);
9063 MSVCRT_operator_delete(ptr
);
9065 time_put_char_dtor(this);
9067 MSVCRT_operator_delete(this);
9073 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
9074 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
9075 MSVCP_size_t __cdecl
time_put_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
9077 TRACE("(%p %p)\n", facet
, loc
);
9079 if(facet
&& !*facet
) {
9082 *facet
= MSVCRT_operator_new(sizeof(time_put
));
9084 ERR("Out of memory\n");
9085 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
9089 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
9090 time_put_char_ctor_locinfo((time_put
*)*facet
, &locinfo
, 0);
9091 _Locinfo_dtor(&locinfo
);
9097 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
9098 /* ?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
9099 MSVCP_size_t __cdecl
time_put_char__Getcat_old(const locale_facet
**facet
)
9101 return time_put_char__Getcat(facet
, locale_classic());
9104 static time_put
* time_put_char_use_facet(const locale
*loc
)
9106 static time_put
*obj
= NULL
;
9109 const locale_facet
*fac
;
9111 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
9112 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_put_char_id
));
9114 _Lockit_dtor(&lock
);
9115 return (time_put
*)fac
;
9119 _Lockit_dtor(&lock
);
9123 time_put_char__Getcat(&fac
, loc
);
9124 obj
= (time_put
*)fac
;
9125 call_locale_facet__Incref(&obj
->facet
);
9126 locale_facet_register(&obj
->facet
);
9127 _Lockit_dtor(&lock
);
9132 #if _MSVCP_VER >= 70
9134 /* ?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 */
9135 /* ?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 */
9136 #if _MSVCP_VER != 80
9137 DEFINE_THISCALL_WRAPPER(time_put_char_do_put
, 36)
9139 DEFINE_THISCALL_WRAPPER(time_put_char_do_put
, 40)
9141 #if _MSVCP_VER <= 100
9142 #define call_time_put_char_do_put(this, ret, dest, base, fill, t, spec, mod) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_char*, \
9143 (const time_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const struct tm*, char, char), \
9144 (this, ret, dest, base, fill, t, spec, mod))
9146 #define call_time_put_char_do_put(this, ret, dest, base, fill, t, spec, mod) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_char*, \
9147 (const time_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, char, const struct tm*, char, char), \
9148 (this, ret, dest, base, fill, t, spec, mod))
9150 ostreambuf_iterator_char
* __thiscall
time_put_char_do_put(const time_put
*this, ostreambuf_iterator_char
*ret
,
9151 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const struct tm
*t
, char spec
, char mod
)
9153 char buf
[64], fmt
[4], *p
= fmt
;
9154 MSVCP_size_t i
, len
;
9156 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
9164 len
= _Strftime(buf
, sizeof(buf
), fmt
, t
, this->time
.timeptr
);
9165 for(i
=0; i
<len
; i
++)
9166 ostreambuf_iterator_char_put(&dest
, buf
[i
]);
9172 /* ?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 */
9173 /* ?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 */
9174 #if _MSVCP_VER != 80
9175 DEFINE_THISCALL_WRAPPER(time_put_char_put
, 36)
9177 DEFINE_THISCALL_WRAPPER(time_put_char_put
, 40)
9179 ostreambuf_iterator_char
* __thiscall
time_put_char_put(const time_put
*this, ostreambuf_iterator_char
*ret
,
9180 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const struct tm
*t
, char spec
, char mod
)
9182 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
9183 return call_time_put_char_do_put(this, ret
, dest
, base
, fill
, t
, spec
, mod
);
9186 /* ?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 */
9187 /* ?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 */
9188 #if _MSVCP_VER != 80
9189 DEFINE_THISCALL_WRAPPER(time_put_char_put_format
, 36)
9191 DEFINE_THISCALL_WRAPPER(time_put_char_put_format
, 40)
9193 ostreambuf_iterator_char
* __thiscall
time_put_char_put_format(const time_put
*this, ostreambuf_iterator_char
*ret
,
9194 ostreambuf_iterator_char dest
, ios_base
*base
, char fill
, const struct tm
*t
, const char *pat
, const char *pat_end
)
9196 TRACE("(%p %p %p %c %p %s)\n", this, ret
, base
, fill
, t
, debugstr_an(pat
, pat_end
-pat
));
9198 while(pat
< pat_end
) {
9200 ostreambuf_iterator_char_put(&dest
, *pat
++);
9201 }else if(++pat
== pat_end
) {
9202 ostreambuf_iterator_char_put(&dest
, '%');
9203 }else if(*pat
=='#' && pat
+1==pat_end
) {
9204 ostreambuf_iterator_char_put(&dest
, '%');
9205 ostreambuf_iterator_char_put(&dest
, *pat
++);
9216 time_put_char_put(this, &dest
, dest
, base
, fill
, t
, *pat
++, mod
);
9224 #else /* _MSVCP_VER < 70 doesn't have the 'fill' parameter */
9226 /* ?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 */
9227 /* ?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 */
9228 DEFINE_THISCALL_WRAPPER(time_put_char_do_put
, 32)
9229 #define call_time_put_char_do_put(this, ret, dest, base, t, spec, mod) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_char*, \
9230 (const time_put*, ostreambuf_iterator_char*, ostreambuf_iterator_char, ios_base*, const struct tm*, char, char), \
9231 (this, ret, dest, base, t, spec, mod))
9232 ostreambuf_iterator_char
* __thiscall
time_put_char_do_put(const time_put
*this, ostreambuf_iterator_char
*ret
,
9233 ostreambuf_iterator_char dest
, ios_base
*base
, const struct tm
*t
, char spec
, char mod
)
9235 char buf
[64], fmt
[4], *p
= fmt
;
9236 MSVCP_size_t i
, len
;
9238 TRACE("(%p %p %p %p %c %c)\n", this, ret
, base
, t
, spec
, mod
);
9246 len
= _Strftime(buf
, sizeof(buf
), fmt
, t
, this->time
.timeptr
);
9247 for(i
=0; i
<len
; i
++)
9248 ostreambuf_iterator_char_put(&dest
, buf
[i
]);
9254 /* ?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 */
9255 /* ?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 */
9256 DEFINE_THISCALL_WRAPPER(time_put_char_put
, 32)
9257 ostreambuf_iterator_char
* __thiscall
time_put_char_put(const time_put
*this, ostreambuf_iterator_char
*ret
,
9258 ostreambuf_iterator_char dest
, ios_base
*base
, const struct tm
*t
, char spec
, char mod
)
9260 TRACE("(%p %p %p %p %c %c)\n", this, ret
, base
, t
, spec
, mod
);
9261 return call_time_put_char_do_put(this, ret
, dest
, base
, t
, spec
, mod
);
9264 /* ?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 */
9265 /* ?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 */
9266 DEFINE_THISCALL_WRAPPER(time_put_char_put_format
, 32)
9267 ostreambuf_iterator_char
* __thiscall
time_put_char_put_format(const time_put
*this, ostreambuf_iterator_char
*ret
,
9268 ostreambuf_iterator_char dest
, ios_base
*base
, const struct tm
*t
, const char *pat
, const char *pat_end
)
9270 TRACE("(%p %p %p %p %s)\n", this, ret
, base
, t
, debugstr_an(pat
, pat_end
-pat
));
9272 while(pat
< pat_end
) {
9274 ostreambuf_iterator_char_put(&dest
, *pat
++);
9275 }else if(++pat
== pat_end
) {
9276 ostreambuf_iterator_char_put(&dest
, '%');
9277 }else if(*pat
=='#' && pat
+1==pat_end
) {
9278 ostreambuf_iterator_char_put(&dest
, '%');
9279 ostreambuf_iterator_char_put(&dest
, *pat
++);
9290 time_put_char_put(this, &dest
, dest
, base
, t
, *pat
++, mod
);
9298 #endif /* MSVCP_VER >= 70 */
9300 /* ?id@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
9301 locale_id time_put_wchar_id
= {0};
9302 /* ?id@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@2V0locale@2@A */
9303 locale_id time_put_short_id
= {0};
9305 /* ??_7?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
9306 extern const vtable_ptr MSVCP_time_put_wchar_vtable
;
9307 /* ??_7?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@6B@ */
9308 extern const vtable_ptr MSVCP_time_put_short_vtable
;
9310 /* ?_Init@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
9311 /* ?_Init@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
9312 /* ?_Init@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
9313 /* ?_Init@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
9314 DEFINE_THISCALL_WRAPPER(time_put_wchar__Init
, 8)
9315 void __thiscall
time_put_wchar__Init(time_put
*this, const _Locinfo
*locinfo
)
9317 TRACE("(%p %p)\n", this, locinfo
);
9318 _Locinfo__Gettnames(locinfo
, &this->time
);
9319 #if _MSVCP_VER <= 100
9320 _Locinfo__Getcvt(locinfo
, &this->cvt
);
9324 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
9325 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
9326 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor_locinfo
, 12)
9327 time_put
* __thiscall
time_put_wchar_ctor_locinfo(time_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
9329 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
9330 locale_facet_ctor_refs(&this->facet
, refs
);
9331 this->facet
.vtable
= &MSVCP_time_put_wchar_vtable
;
9332 time_put_wchar__Init(this, locinfo
);
9336 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
9337 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
9338 DEFINE_THISCALL_WRAPPER(time_put_short_ctor_locinfo
, 12)
9339 time_put
* __thiscall
time_put_short_ctor_locinfo(time_put
*this, const _Locinfo
*locinfo
, MSVCP_size_t refs
)
9341 time_put_wchar_ctor_locinfo(this, locinfo
, refs
);
9342 this->facet
.vtable
= &MSVCP_time_put_short_vtable
;
9346 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAE@PBDI@Z */
9347 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAA@PEBD_K@Z */
9348 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor_name
, 12)
9349 time_put
* __thiscall
time_put_wchar_ctor_name(time_put
*this, const char *name
, MSVCP_size_t refs
)
9353 TRACE("(%p %s %lu)\n", this, debugstr_a(name
), refs
);
9355 _Locinfo_ctor_cstr(&locinfo
, name
);
9356 time_put_wchar_ctor_locinfo(this, &locinfo
, refs
);
9357 _Locinfo_dtor(&locinfo
);
9361 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IAE@PBDI@Z */
9362 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@IEAA@PEBD_K@Z */
9363 DEFINE_THISCALL_WRAPPER(time_put_short_ctor_name
, 12)
9364 time_put
* __thiscall
time_put_short_ctor_name(time_put
*this, const char *name
, MSVCP_size_t refs
)
9366 time_put_wchar_ctor_name(this, name
, refs
);
9367 this->facet
.vtable
= &MSVCP_time_put_short_vtable
;
9371 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
9372 /* ??0?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
9373 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor_refs
, 8)
9374 time_put
* __thiscall
time_put_wchar_ctor_refs(time_put
*this, MSVCP_size_t refs
)
9378 TRACE("(%p %lu)\n", this, refs
);
9380 _Locinfo_ctor(&locinfo
);
9381 time_put_wchar_ctor_locinfo(this, &locinfo
, refs
);
9382 _Locinfo_dtor(&locinfo
);
9386 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z */
9387 /* ??0?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAA@_K@Z */
9388 DEFINE_THISCALL_WRAPPER(time_put_short_ctor_refs
, 8)
9389 time_put
* __thiscall
time_put_short_ctor_refs(time_put
*this, MSVCP_size_t refs
)
9391 time_put_wchar_ctor_refs(this, refs
);
9392 this->facet
.vtable
= &MSVCP_time_put_short_vtable
;
9396 /* ??_F?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
9397 /* ??_F?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
9398 DEFINE_THISCALL_WRAPPER(time_put_wchar_ctor
, 4)
9399 time_put
* __thiscall
time_put_wchar_ctor(time_put
*this)
9401 return time_put_wchar_ctor_refs(this, 0);
9404 /* ??_F?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAEXXZ */
9405 /* ??_F?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QEAAXXZ */
9406 DEFINE_THISCALL_WRAPPER(time_put_short_ctor
, 4)
9407 time_put
* __thiscall
time_put_short_ctor(time_put
*this)
9409 time_put_wchar_ctor(this);
9410 this->facet
.vtable
= &MSVCP_time_put_short_vtable
;
9414 /* ??1?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MAE@XZ */
9415 /* ??1?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@MEAA@XZ */
9416 /* ??1?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
9417 /* ??1?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
9418 DEFINE_THISCALL_WRAPPER(time_put_wchar_dtor
, 4)
9419 void __thiscall
time_put_wchar_dtor(time_put
*this)
9421 TRACE("(%p)\n", this);
9422 _Timevec_dtor(&this->time
);
9425 DEFINE_THISCALL_WRAPPER(time_put_wchar_vector_dtor
, 8)
9426 time_put
* __thiscall
time_put_wchar_vector_dtor(time_put
*this, unsigned int flags
)
9428 TRACE("(%p %x)\n", this, flags
);
9430 /* we have an array, with the number of elements stored before the first object */
9431 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
9433 for(i
=*ptr
-1; i
>=0; i
--)
9434 time_put_wchar_dtor(this+i
);
9435 MSVCRT_operator_delete(ptr
);
9437 time_put_wchar_dtor(this);
9439 MSVCRT_operator_delete(this);
9445 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
9446 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
9447 MSVCP_size_t __cdecl
time_put_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
9449 TRACE("(%p %p)\n", facet
, loc
);
9451 if(facet
&& !*facet
) {
9452 *facet
= MSVCRT_operator_new(sizeof(time_put
));
9454 ERR("Out of memory\n");
9455 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
9458 time_put_wchar_ctor_name((time_put
*)*facet
,
9459 locale_string_char_c_str(&loc
->ptr
->name
), 0);
9465 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
9466 /* ?_Getcat@?$time_put@_WV?$ostreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
9467 MSVCP_size_t __cdecl
time_put_wchar__Getcat_old(const locale_facet
**facet
)
9469 return time_put_wchar__Getcat(facet
, locale_classic());
9472 static time_put
* time_put_wchar_use_facet(const locale
*loc
)
9474 static time_put
*obj
= NULL
;
9477 const locale_facet
*fac
;
9479 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
9480 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_put_wchar_id
));
9482 _Lockit_dtor(&lock
);
9483 return (time_put
*)fac
;
9487 _Lockit_dtor(&lock
);
9491 time_put_wchar__Getcat(&fac
, loc
);
9492 obj
= (time_put
*)fac
;
9493 call_locale_facet__Incref(&obj
->facet
);
9494 locale_facet_register(&obj
->facet
);
9495 _Lockit_dtor(&lock
);
9500 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
9501 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
9502 MSVCP_size_t __cdecl
time_put_short__Getcat(const locale_facet
**facet
, const locale
*loc
)
9504 TRACE("(%p %p)\n", facet
, loc
);
9506 if(facet
&& !*facet
) {
9507 *facet
= MSVCRT_operator_new(sizeof(time_put
));
9509 ERR("Out of memory\n");
9510 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
9513 time_put_short_ctor_name((time_put
*)*facet
,
9514 locale_string_char_c_str(&loc
->ptr
->name
), 0);
9520 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SAIPAPBVfacet@locale@2@@Z */
9521 /* ?_Getcat@?$time_put@GV?$ostreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@@Z */
9522 MSVCP_size_t __cdecl
time_put_short__Getcat_old(const locale_facet
**facet
)
9524 return time_put_short__Getcat(facet
, locale_classic());
9527 static time_put
* time_put_short_use_facet(const locale
*loc
)
9529 static time_put
*obj
= NULL
;
9532 const locale_facet
*fac
;
9534 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
9535 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_put_short_id
));
9537 _Lockit_dtor(&lock
);
9538 return (time_put
*)fac
;
9542 _Lockit_dtor(&lock
);
9546 time_put_short__Getcat(&fac
, loc
);
9547 obj
= (time_put
*)fac
;
9548 call_locale_facet__Incref(&obj
->facet
);
9549 locale_facet_register(&obj
->facet
);
9550 _Lockit_dtor(&lock
);
9555 #if _MSVCP_VER >= 70
9557 /* ?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 */
9558 /* ?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 */
9559 /* ?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 */
9560 /* ?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 */
9561 #if _MSVCP_VER != 80
9562 DEFINE_THISCALL_WRAPPER(time_put_wchar_do_put
, 36)
9564 DEFINE_THISCALL_WRAPPER(time_put_wchar_do_put
, 40)
9566 #if _MSVCP_VER <= 100
9567 #define call_time_put_wchar_do_put(this, ret, dest, base, fill, t, spec, mod) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_wchar*, \
9568 (const time_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const struct tm*, char, char), \
9569 (this, ret, dest, base, fill, t, spec, mod))
9571 #define call_time_put_wchar_do_put(this, ret, dest, base, fill, t, spec, mod) CALL_VTBL_FUNC(this, 12, ostreambuf_iterator_wchar*, \
9572 (const time_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, wchar_t, const struct tm*, char, char), \
9573 (this, ret, dest, base, fill, t, spec, mod))
9575 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_do_put(const time_put
*this,
9576 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9577 wchar_t fill
, const struct tm
*t
, char spec
, char mod
)
9579 char buf
[64], fmt
[4], *p
= fmt
;
9580 MSVCP_size_t i
, len
;
9584 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
9592 #if _MSVCP_VER <= 100
9595 cvt
= &ctype_wchar_use_facet(base
->loc
)->cvt
;
9598 len
= _Strftime(buf
, sizeof(buf
), fmt
, t
, this->time
.timeptr
);
9599 for(i
=0; i
<len
; i
++) {
9600 c
= mb_to_wc(buf
[i
], cvt
);
9601 ostreambuf_iterator_wchar_put(&dest
, c
);
9608 /* ?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 */
9609 /* ?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 */
9610 /* ?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 */
9611 /* ?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 */
9612 #if _MSVCP_VER != 80
9613 DEFINE_THISCALL_WRAPPER(time_put_wchar_put
, 36)
9615 DEFINE_THISCALL_WRAPPER(time_put_wchar_put
, 40)
9617 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_put(const time_put
*this,
9618 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9619 wchar_t fill
, const struct tm
*t
, char spec
, char mod
)
9621 TRACE("(%p %p %p %c %p %c %c)\n", this, ret
, base
, fill
, t
, spec
, mod
);
9622 return call_time_put_wchar_do_put(this, ret
, dest
, base
, fill
, t
, spec
, mod
);
9625 /* ?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 */
9626 /* ?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 */
9627 /* ?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 */
9628 /* ?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 */
9629 #if _MSVCP_VER != 80
9630 DEFINE_THISCALL_WRAPPER(time_put_wchar_put_format
, 36)
9632 DEFINE_THISCALL_WRAPPER(time_put_wchar_put_format
, 40)
9634 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_put_format(const time_put
*this,
9635 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9636 wchar_t fill
, const struct tm
*t
, const wchar_t *pat
, const wchar_t *pat_end
)
9642 TRACE("(%p %p %p %c %p %s)\n", this, ret
, base
, fill
, t
, debugstr_wn(pat
, pat_end
-pat
));
9644 #if _MSVCP_VER <= 100
9647 cvt
= &ctype_wchar_use_facet(base
->loc
)->cvt
;
9650 percent
= mb_to_wc('%', cvt
);
9651 while(pat
< pat_end
) {
9652 if(*pat
!= percent
) {
9653 ostreambuf_iterator_wchar_put(&dest
, *pat
++);
9654 }else if(++pat
== pat_end
) {
9655 ostreambuf_iterator_wchar_put(&dest
, percent
);
9656 }else if(_Wcrtomb(c
, *pat
, NULL
, cvt
)!=1 || (*c
=='#' && pat
+1==pat_end
)) {
9657 ostreambuf_iterator_wchar_put(&dest
, percent
);
9658 ostreambuf_iterator_wchar_put(&dest
, *pat
++);
9662 if(_Wcrtomb(c
, *pat
++, NULL
, cvt
) != 1) {
9663 ostreambuf_iterator_wchar_put(&dest
, percent
);
9664 ostreambuf_iterator_wchar_put(&dest
, *(pat
-2));
9665 ostreambuf_iterator_wchar_put(&dest
, *(pat
-1));
9667 time_put_wchar_put(this, &dest
, dest
, base
, fill
, t
, *c
, '#');
9670 time_put_wchar_put(this, &dest
, dest
, base
, fill
, t
, *c
, 0);
9679 #else /* _MSVCP_VER < 70 doesn't have the 'fill' parameter */
9681 /* ?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 */
9682 /* ?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 */
9683 DEFINE_THISCALL_WRAPPER(time_put_wchar_do_put
, 32)
9684 #define call_time_put_wchar_do_put(this, ret, dest, base, t, spec, mod) CALL_VTBL_FUNC(this, 4, ostreambuf_iterator_wchar*, \
9685 (const time_put*, ostreambuf_iterator_wchar*, ostreambuf_iterator_wchar, ios_base*, const struct tm*, char, char), \
9686 (this, ret, dest, base, t, spec, mod))
9687 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_do_put(const time_put
*this,
9688 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9689 const struct tm
*t
, char spec
, char mod
)
9691 char buf
[64], fmt
[4], *p
= fmt
;
9692 MSVCP_size_t i
, len
;
9695 TRACE("(%p %p %p %p %c %c)\n", this, ret
, base
, t
, spec
, mod
);
9703 len
= _Strftime(buf
, sizeof(buf
), fmt
, t
, this->time
.timeptr
);
9704 for(i
=0; i
<len
; i
++) {
9705 c
= mb_to_wc(buf
[i
], &this->cvt
);
9706 ostreambuf_iterator_wchar_put(&dest
, c
);
9713 /* ?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 */
9714 /* ?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 */
9715 DEFINE_THISCALL_WRAPPER(time_put_wchar_put
, 32)
9716 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_put(const time_put
*this,
9717 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9718 const struct tm
*t
, char spec
, char mod
)
9720 TRACE("(%p %p %p %p %c %c)\n", this, ret
, base
, t
, spec
, mod
);
9721 return call_time_put_wchar_do_put(this, ret
, dest
, base
, t
, spec
, mod
);
9724 /* ?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 */
9725 /* ?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 */
9726 DEFINE_THISCALL_WRAPPER(time_put_wchar_put_format
, 32)
9727 ostreambuf_iterator_wchar
* __thiscall
time_put_wchar_put_format(const time_put
*this,
9728 ostreambuf_iterator_wchar
*ret
, ostreambuf_iterator_wchar dest
, ios_base
*base
,
9729 const struct tm
*t
, const wchar_t *pat
, const wchar_t *pat_end
)
9731 wchar_t percent
= mb_to_wc('%', &this->cvt
);
9734 TRACE("(%p %p %p %p %s)\n", this, ret
, base
, t
, debugstr_wn(pat
, pat_end
-pat
));
9736 while(pat
< pat_end
) {
9737 if(*pat
!= percent
) {
9738 ostreambuf_iterator_wchar_put(&dest
, *pat
++);
9739 }else if(++pat
== pat_end
) {
9740 ostreambuf_iterator_wchar_put(&dest
, percent
);
9741 }else if(_Wcrtomb(c
, *pat
, NULL
, &this->cvt
)!=1 || (*c
=='#' && pat
+1==pat_end
)) {
9742 ostreambuf_iterator_wchar_put(&dest
, percent
);
9743 ostreambuf_iterator_wchar_put(&dest
, *pat
++);
9747 if(_Wcrtomb(c
, *pat
++, NULL
, &this->cvt
) != 1) {
9748 ostreambuf_iterator_wchar_put(&dest
, percent
);
9749 ostreambuf_iterator_wchar_put(&dest
, *(pat
-2));
9750 ostreambuf_iterator_wchar_put(&dest
, *(pat
-1));
9752 time_put_wchar_put(this, &dest
, dest
, base
, t
, *c
, '#');
9755 time_put_wchar_put(this, &dest
, dest
, base
, t
, *c
, 0);
9764 #endif /* _MSVCP_VER >= 70 */
9766 /* ?id@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@2V0locale@2@A */
9767 locale_id time_get_char_id
= {0};
9769 /* ??_7?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@6B@ */
9770 extern const vtable_ptr MSVCP_time_get_char_vtable
;
9772 /* ?_Init@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
9773 /* ?_Init@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
9774 DEFINE_THISCALL_WRAPPER(time_get_char__Init
, 8)
9775 void __thiscall
time_get_char__Init(time_get_char
*this, const _Locinfo
*locinfo
)
9781 TRACE("(%p %p)\n", this, locinfo
);
9783 days
= _Locinfo__Getdays(locinfo
);
9784 len
= strlen(days
)+1;
9785 this->days
= MSVCRT_operator_new(len
);
9788 ERR("Out of memory\n");
9789 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
9791 memcpy((char*)this->days
, days
, len
);
9793 months
= _Locinfo__Getmonths(locinfo
);
9794 len
= strlen(months
)+1;
9795 this->months
= MSVCRT_operator_new(len
);
9798 MSVCRT_operator_delete((char*)this->days
);
9800 ERR("Out of memory\n");
9801 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
9803 memcpy((char*)this->months
, months
, len
);
9805 this->dateorder
= _Locinfo__Getdateorder(locinfo
);
9806 _Locinfo__Getcvt(locinfo
, &this->cvt
);
9809 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
9810 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
9811 DEFINE_THISCALL_WRAPPER(time_get_char_ctor_locinfo
, 12)
9812 time_get_char
* __thiscall
time_get_char_ctor_locinfo(time_get_char
*this,
9813 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
9815 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
9816 locale_facet_ctor_refs(&this->facet
, refs
);
9817 this->facet
.vtable
= &MSVCP_time_get_char_vtable
;
9818 time_get_char__Init(this, locinfo
);
9822 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IAE@PBDI@Z */
9823 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@IEAA@PEBD_K@Z */
9824 DEFINE_THISCALL_WRAPPER(time_get_char_ctor_name
, 12)
9825 time_get_char
* __thiscall
time_get_char_ctor_name(time_get_char
*this, const char *name
, MSVCP_size_t refs
)
9829 TRACE("(%p %s %lu)\n", this, name
, refs
);
9831 _Locinfo_ctor_cstr(&locinfo
, name
);
9832 time_get_char_ctor_locinfo(this, &locinfo
, refs
);
9833 _Locinfo_dtor(&locinfo
);
9837 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z */
9838 /* ??0?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAA@_K@Z */
9839 DEFINE_THISCALL_WRAPPER(time_get_char_ctor_refs
, 8)
9840 time_get_char
* __thiscall
time_get_char_ctor_refs(time_get_char
*this, MSVCP_size_t refs
)
9844 TRACE("(%p %lu)\n", this, refs
);
9846 _Locinfo_ctor(&locinfo
);
9847 time_get_char_ctor_locinfo(this, &locinfo
, refs
);
9848 _Locinfo_dtor(&locinfo
);
9852 /* ??_F?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAEXXZ */
9853 /* ??_F?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEAAXXZ */
9854 DEFINE_THISCALL_WRAPPER(time_get_char_ctor
, 4)
9855 time_get_char
* __thiscall
time_get_char_ctor(time_get_char
*this)
9857 return time_get_char_ctor_refs(this, 0);
9860 /* ?_Tidy@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AAEXXZ */
9861 /* ?_Tidy@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEAAXXZ */
9862 DEFINE_THISCALL_WRAPPER(time_get_char__Tidy
, 4)
9863 void __thiscall
time_get_char__Tidy(time_get_char
*this)
9865 TRACE("(%p)\n", this);
9867 MSVCRT_operator_delete((char*)this->days
);
9868 MSVCRT_operator_delete((char*)this->months
);
9871 /* ??1?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MAE@XZ */
9872 /* ??1?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEAA@XZ */
9873 DEFINE_THISCALL_WRAPPER(time_get_char_dtor
, 4) /* virtual */
9874 void __thiscall
time_get_char_dtor(time_get_char
*this)
9876 TRACE("(%p)\n", this);
9878 time_get_char__Tidy(this);
9881 DEFINE_THISCALL_WRAPPER(time_get_char_vector_dtor
, 8)
9882 time_get_char
* __thiscall
time_get_char_vector_dtor(time_get_char
*this, unsigned int flags
)
9884 TRACE("(%p %x)\n", this, flags
);
9886 /* we have an array, with the number of elements stored before the first object */
9887 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
9889 for(i
=*ptr
-1; i
>=0; i
--)
9890 time_get_char_dtor(this+i
);
9891 MSVCRT_operator_delete(ptr
);
9893 time_get_char_dtor(this);
9895 MSVCRT_operator_delete(this);
9901 /* ?_Getcat@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
9902 /* ?_Getcat@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
9903 unsigned int __cdecl
time_get_char__Getcat(const locale_facet
**facet
, const locale
*loc
)
9905 TRACE("(%p %p)\n", facet
, loc
);
9907 if(facet
&& !*facet
) {
9910 *facet
= MSVCRT_operator_new(sizeof(time_get_char
));
9912 ERR("Out of memory\n");
9913 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
9917 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
9918 time_get_char_ctor_locinfo((time_get_char
*)*facet
, &locinfo
, 0);
9919 _Locinfo_dtor(&locinfo
);
9925 static time_get_char
* time_get_char_use_facet(const locale
*loc
)
9927 static time_get_char
*obj
= NULL
;
9930 const locale_facet
*fac
;
9932 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
9933 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_get_char_id
));
9935 _Lockit_dtor(&lock
);
9936 return (time_get_char
*)fac
;
9940 _Lockit_dtor(&lock
);
9944 time_get_char__Getcat(&fac
, loc
);
9945 obj
= (time_get_char
*)fac
;
9946 call_locale_facet__Incref(&obj
->facet
);
9947 locale_facet_register(&obj
->facet
);
9948 _Lockit_dtor(&lock
);
9953 /* ?_Getint@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@ABAHAAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@0HHAAH@Z */
9954 /* ?_Getint@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@AEBAHAEAV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@0HHAEAH@Z */
9955 int __cdecl
time_get_char__Getint(const time_get_char
*this,
9956 istreambuf_iterator_char
*b
, istreambuf_iterator_char
*e
,
9957 int min_val
, int max_val
, int *val
)
9959 BOOL got_digit
= FALSE
;
9960 int len
= 0, ret
= 0;
9963 TRACE("(%p %p %p %d %d %p)\n", this, b
, e
, min_val
, max_val
, val
);
9965 istreambuf_iterator_char_val(b
);
9966 if(b
->strbuf
&& (b
->val
== '-' || b
->val
== '+'))
9968 buf
[len
++] = b
->val
;
9969 istreambuf_iterator_char_inc(b
);
9972 if (b
->strbuf
&& b
->val
== '0')
9976 istreambuf_iterator_char_inc(b
);
9978 while (b
->strbuf
&& b
->val
== '0')
9979 istreambuf_iterator_char_inc(b
);
9981 for (; b
->strbuf
&& b
->val
>= '0' && b
->val
<= '9';
9982 istreambuf_iterator_char_inc(b
))
9984 if(len
< ARRAY_SIZE(buf
)-1)
9991 ret
|= IOSTATE_eofbit
;
9992 if (got_digit
&& len
< ARRAY_SIZE(buf
)-1)
9997 v
= _Stolx(buf
, NULL
, 10, &err
);
9998 if(err
|| v
< min_val
|| v
> max_val
)
9999 ret
|= IOSTATE_failbit
;
10004 ret
|= IOSTATE_failbit
;
10008 /* ?do_date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AW4dateorder@time_base@2@XZ */
10009 /* ?do_date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MEBA?AW4dateorder@time_base@2@XZ */
10010 DEFINE_THISCALL_WRAPPER(time_get_char_do_date_order
, 4) /* virtual */
10011 #if _MSVCP_VER <= 100
10012 #define call_time_get_char_do_date_order(this) CALL_VTBL_FUNC(this, 4, dateorder, (const time_get_char*), (this))
10014 #define call_time_get_char_do_date_order(this) CALL_VTBL_FUNC(this, 12, dateorder, (const time_get_char*), (this))
10016 dateorder __thiscall
time_get_char_do_date_order(const time_get_char
*this)
10018 TRACE("(%p)\n", this);
10019 return this->dateorder
;
10022 /* ?date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QBE?AW4dateorder@time_base@2@XZ */
10023 /* ?date_order@?$time_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QEBA?AW4dateorder@time_base@2@XZ */
10024 DEFINE_THISCALL_WRAPPER(time_get_char_date_order
, 4)
10025 dateorder __thiscall
time_get_char_date_order(const time_get_char
*this)
10027 return call_time_get_char_do_date_order(this);
10030 static int find_longest_match_char(istreambuf_iterator_char
*iter
, const char *str
)
10032 int i
, len
= 0, last_match
= -1, match
= -1;
10033 const char *p
, *end
;
10036 for(istreambuf_iterator_char_val(iter
); iter
->strbuf
&& len
<ARRAY_SIZE(buf
);
10037 istreambuf_iterator_char_inc(iter
))
10039 BOOL got_prefix
= FALSE
;
10041 buf
[len
++] = iter
->val
;
10042 last_match
= match
;
10044 for(p
=str
+1, i
=0; *p
; p
= (*end
? end
+1 : end
), i
++)
10046 end
= strchr(p
, ':');
10048 end
= p
+ strlen(p
);
10050 if (end
-p
>= len
&& !memcmp(p
, buf
, len
))
10063 istreambuf_iterator_char_inc(iter
);
10069 if (len
== ARRAY_SIZE(buf
))
10070 FIXME("temporary buffer is too small\n");
10076 /* ?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 */
10077 /* ?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 */
10078 DEFINE_THISCALL_WRAPPER(time_get_char_do_get_monthname
, 36) /* virtual */
10079 #if _MSVCP_VER <= 100
10080 #define call_time_get_char_do_get_monthname(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_char*, \
10081 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10082 (this, ret, s, e, base, err, t))
10084 #define call_time_get_char_do_get_monthname(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_char*, \
10085 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10086 (this, ret, s, e, base, err, t))
10088 istreambuf_iterator_char
* __thiscall
time_get_char_do_get_monthname(const time_get_char
*this,
10089 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10090 ios_base
*base
, int *err
, struct tm
*t
)
10094 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10096 if ((match
= find_longest_match_char(&s
, this->months
)) != -1)
10097 t
->tm_mon
= match
/ 2;
10099 *err
|= IOSTATE_failbit
;
10105 /* ?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 */
10106 /* ?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 */
10107 DEFINE_THISCALL_WRAPPER(time_get_char_get_monthname
, 36)
10108 istreambuf_iterator_char
* __thiscall
time_get_char_get_monthname(const time_get_char
*this,
10109 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10110 ios_base
*base
, int *err
, struct tm
*t
)
10112 return call_time_get_char_do_get_monthname(this, ret
, s
, e
, base
, err
, t
);
10115 /* ?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 */
10116 /* ?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 */
10117 DEFINE_THISCALL_WRAPPER(time_get_char_do_get_time
, 36) /* virtual */
10118 #if _MSVCP_VER <= 100
10119 #define call_time_get_char_do_get_time(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_char*, \
10120 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10121 (this, ret, s, e, base, err, t))
10123 #define call_time_get_char_do_get_time(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_char*, \
10124 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10125 (this, ret, s, e, base, err, t))
10127 istreambuf_iterator_char
* __thiscall
time_get_char_do_get_time(const time_get_char
*this,
10128 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10129 ios_base
*base
, int *err
, struct tm
*t
)
10131 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10133 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 23, &t
->tm_hour
);
10134 if (*err
|| istreambuf_iterator_char_val(&s
)!=':')
10135 *err
|= IOSTATE_failbit
;
10139 istreambuf_iterator_char_inc(&s
);
10140 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 59, &t
->tm_min
);
10142 if (*err
|| istreambuf_iterator_char_val(&s
)!=':')
10143 *err
|= IOSTATE_failbit
;
10147 istreambuf_iterator_char_inc(&s
);
10148 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 59, &t
->tm_sec
);
10155 /* ?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 */
10156 /* ?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 */
10157 DEFINE_THISCALL_WRAPPER(time_get_char_get_time
, 36)
10158 istreambuf_iterator_char
* __thiscall
time_get_char_get_time(const time_get_char
*this,
10159 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10160 ios_base
*base
, int *err
, struct tm
*t
)
10162 return call_time_get_char_do_get_time(this, ret
, s
, e
, base
, err
, t
);
10165 /* ?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 */
10166 /* ?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 */
10167 DEFINE_THISCALL_WRAPPER(time_get_char_do_get_weekday
, 36) /* virtual */
10168 #if _MSVCP_VER <= 100
10169 #define call_time_get_char_do_get_weekday(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_char*, \
10170 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10171 (this, ret, s, e, base, err, t))
10173 #define call_time_get_char_do_get_weekday(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_char*, \
10174 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10175 (this, ret, s, e, base, err, t))
10177 istreambuf_iterator_char
* __thiscall
time_get_char_do_get_weekday(const time_get_char
*this,
10178 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10179 ios_base
*base
, int *err
, struct tm
*t
)
10183 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10185 if ((match
= find_longest_match_char(&s
, this->days
)) != -1)
10186 t
->tm_wday
= match
/ 2;
10188 *err
|= IOSTATE_failbit
;
10194 /* ?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 */
10195 /* ?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 */
10196 DEFINE_THISCALL_WRAPPER(time_get_char_get_weekday
, 36)
10197 istreambuf_iterator_char
* __thiscall
time_get_char_get_weekday(const time_get_char
*this,
10198 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10199 ios_base
*base
, int *err
, struct tm
*t
)
10201 return call_time_get_char_do_get_weekday(this, ret
, s
, e
, base
, err
, t
);
10204 /* ?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 */
10205 /* ?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 */
10206 DEFINE_THISCALL_WRAPPER(time_get_char_do_get_year
, 36) /* virtual */
10207 #if _MSVCP_VER <= 100
10208 #define call_time_get_char_do_get_year(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_char*, \
10209 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10210 (this, ret, s, e, base, err, t))
10212 #define call_time_get_char_do_get_year(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_char*, \
10213 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10214 (this, ret, s, e, base, err, t))
10216 istreambuf_iterator_char
* __thiscall
time_get_char_do_get_year(const time_get_char
*this,
10217 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10218 ios_base
*base
, int *err
, struct tm
*t
)
10222 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10224 /* The function supports only dates from [1900-2035] range */
10225 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 2035, &year
);
10226 if (!(*err
& IOSTATE_failbit
))
10231 *err
|= IOSTATE_failbit
;
10240 /* ?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 */
10241 /* ?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 */
10242 DEFINE_THISCALL_WRAPPER(time_get_char_get_year
, 36)
10243 istreambuf_iterator_char
* __thiscall
time_get_char_get_year(const time_get_char
*this,
10244 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10245 ios_base
*base
, int *err
, struct tm
*t
)
10247 return call_time_get_char_do_get_year(this, ret
, s
, e
, base
, err
, t
);
10250 static void skip_ws_char(ctype_char
*ctype
, istreambuf_iterator_char
*iter
)
10252 istreambuf_iterator_char_val(iter
);
10253 while(iter
->strbuf
&& ctype_char_is_ch(ctype
, _SPACE
, iter
->val
))
10254 istreambuf_iterator_char_inc(iter
);
10257 static void skip_date_delim_char(ctype_char
*ctype
, istreambuf_iterator_char
*iter
)
10259 skip_ws_char(ctype
, iter
);
10260 if(iter
->strbuf
&& (iter
->val
== '/' || iter
->val
== ':'))
10261 istreambuf_iterator_char_inc(iter
);
10262 skip_ws_char(ctype
, iter
);
10265 /* ?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 */
10266 /* ?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 */
10267 DEFINE_THISCALL_WRAPPER(time_get_char_do_get_date
, 36) /* virtual */
10268 #if _MSVCP_VER <= 100
10269 #define call_time_get_char_do_get_date(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_char*, \
10270 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10271 (this, ret, s, e, base, err, t))
10273 #define call_time_get_char_do_get_date(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_char*, \
10274 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*), \
10275 (this, ret, s, e, base, err, t))
10277 istreambuf_iterator_char
* __thiscall
time_get_char_do_get_date(const time_get_char
*this,
10278 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10279 ios_base
*base
, int *err
, struct tm
*t
)
10284 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10286 ctype
= ctype_char_use_facet(IOS_LOCALE(base
));
10288 order
= time_get_char_date_order(this);
10289 if(order
== DATEORDER_no_order
)
10290 order
= DATEORDER_mdy
;
10293 case DATEORDER_dmy
:
10294 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
10295 skip_date_delim_char(ctype
, &s
);
10297 *err
|= IOSTATE_failbit
;
10300 if(s
.strbuf
&& ctype_char_is_ch(ctype
, _DIGIT
, s
.val
)) {
10301 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
10304 time_get_char_get_monthname(this, &s
, s
, e
, base
, err
, t
);
10306 skip_date_delim_char(ctype
, &s
);
10308 *err
|= IOSTATE_failbit
;
10311 time_get_char_get_year(this, &s
, s
, e
, base
, err
, t
);
10313 case DATEORDER_mdy
:
10314 istreambuf_iterator_char_val(&s
);
10315 if(s
.strbuf
&& ctype_char_is_ch(ctype
, _DIGIT
, s
.val
)) {
10316 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
10319 time_get_char_get_monthname(this, &s
, s
, e
, base
, err
, t
);
10321 skip_date_delim_char(ctype
, &s
);
10323 *err
|= IOSTATE_failbit
;
10326 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
10327 skip_date_delim_char(ctype
, &s
);
10329 *err
|= IOSTATE_failbit
;
10332 time_get_char_get_year(this, &s
, s
, e
, base
, err
, t
);
10334 case DATEORDER_ymd
:
10335 time_get_char_get_year(this, &s
, s
, e
, base
, err
, t
);
10336 skip_date_delim_char(ctype
, &s
);
10338 *err
|= IOSTATE_failbit
;
10341 if(ctype_char_is_ch(ctype
, _DIGIT
, s
.val
)) {
10342 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
10345 time_get_char_get_monthname(this, &s
, s
, e
, base
, err
, t
);
10347 skip_date_delim_char(ctype
, &s
);
10349 *err
|= IOSTATE_failbit
;
10352 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
10354 case DATEORDER_ydm
:
10355 time_get_char_get_year(this, &s
, s
, e
, base
, err
, t
);
10356 skip_date_delim_char(ctype
, &s
);
10358 *err
|= IOSTATE_failbit
;
10361 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
10362 skip_date_delim_char(ctype
, &s
);
10364 *err
|= IOSTATE_failbit
;
10367 if(ctype_char_is_ch(ctype
, _DIGIT
, s
.val
)) {
10368 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
10371 time_get_char_get_monthname(this, &s
, s
, e
, base
, err
, t
);
10375 ERR("incorrect order value: %d\n", order
);
10380 *err
|= IOSTATE_eofbit
;
10385 /* ?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 */
10386 /* ?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 */
10387 DEFINE_THISCALL_WRAPPER(time_get_char_get_date
, 36)
10388 istreambuf_iterator_char
* __thiscall
time_get_char_get_date(const time_get_char
*this,
10389 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10390 ios_base
*base
, int *err
, struct tm
*t
)
10392 return call_time_get_char_do_get_date(this, ret
, s
, e
, base
, err
, t
);
10395 istreambuf_iterator_char
* __thiscall
time_get_char_get(const time_get_char
*,
10396 istreambuf_iterator_char
*, istreambuf_iterator_char
, istreambuf_iterator_char
,
10397 ios_base
*, int*, struct tm
*, char, char);
10399 /* ?_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 */
10400 /* ?_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 */
10401 DEFINE_THISCALL_WRAPPER(time_get_char__Getfmt
, 40)
10402 istreambuf_iterator_char
* __thiscall
time_get_char__Getfmt(const time_get_char
*this,
10403 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10404 ios_base
*base
, int *err
, struct tm
*t
, const char *fmt
)
10408 TRACE("(%p %p %p %p %p %s)\n", this, ret
, base
, err
, t
, fmt
);
10410 ctype
= ctype_char_use_facet(IOS_LOCALE(base
));
10411 istreambuf_iterator_char_val(&s
);
10414 if(ctype_char_is_ch(ctype
, _SPACE
, *fmt
)) {
10415 skip_ws_char(ctype
, &s
);
10421 *err
|= IOSTATE_failbit
;
10427 time_get_char_get(this, &s
, s
, e
, base
, err
, t
, *fmt
, 0);
10430 *err
|= IOSTATE_failbit
;
10432 istreambuf_iterator_char_inc(&s
);
10435 if(*err
& IOSTATE_failbit
)
10441 *err
|= IOSTATE_eofbit
;
10446 /* ?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 */
10447 /* ?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 */
10448 DEFINE_THISCALL_WRAPPER(time_get_char_do_get
, 44) /* virtual */
10449 #if _MSVCP_VER <= 100
10450 #define call_time_get_char_do_get(this, ret, s, e, base, err, t, fmt, mod) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_char*, \
10451 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*, char, char), \
10452 (this, ret, s, e, base, err, t, fmt, mod))
10454 #define call_time_get_char_do_get(this, ret, s, e, base, err, t, fmt, mod) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_char*, \
10455 (const time_get_char*, istreambuf_iterator_char*, istreambuf_iterator_char, istreambuf_iterator_char, ios_base*, int*, struct tm*, char, char), \
10456 (this, ret, s, e, base, err, t, fmt, mod))
10458 istreambuf_iterator_char
* __thiscall
time_get_char_do_get(const time_get_char
*this,
10459 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10460 ios_base
*base
, int *err
, struct tm
*t
, char fmt
, char mod
)
10464 TRACE("(%p %p %p %p %p %c %c)\n", this, ret
, base
, err
, t
, fmt
, mod
);
10466 ctype
= ctype_char_use_facet(IOS_LOCALE(base
));
10471 time_get_char_get_weekday(this, &s
, s
, e
, base
, err
, t
);
10476 time_get_char_get_monthname(this, &s
, s
, e
, base
, err
, t
);
10479 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%b %d %H:%M:%S %Y");
10482 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 99, &t
->tm_year
);
10483 if(!(*err
& IOSTATE_failbit
))
10484 t
->tm_year
= t
->tm_year
* 100 - 1900;
10488 if(fmt
== 'e') skip_ws_char(ctype
, &s
);
10489 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
10492 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%m/%d/%y");
10495 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%Y-%m-%d");
10498 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 23, &t
->tm_hour
);
10501 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 11, &t
->tm_hour
);
10504 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 366, &t
->tm_yday
);
10507 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
10508 if(!(*err
& IOSTATE_failbit
))
10512 *err
= time_get_char__Getint(this, &s
, &e
, 0, 59, &t
->tm_min
);
10516 skip_ws_char(ctype
, &s
);
10521 istreambuf_iterator_char_val(&s
);
10522 if(s
.strbuf
&& (s
.val
=='P' || s
.val
=='p'))
10524 else if (!s
.strbuf
|| (s
.val
!='A' && s
.val
!='a')) {
10525 *err
|= IOSTATE_failbit
;
10528 istreambuf_iterator_char_inc(&s
);
10529 if(!s
.strbuf
|| (s
.val
!='M' && s
.val
!='m')) {
10530 *err
|= IOSTATE_failbit
;
10533 istreambuf_iterator_char_inc(&s
);
10540 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%I:%M:%S %p");
10543 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%H:%M");
10546 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 59, &t
->tm_sec
);
10550 time_get_char__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%H:%M:%S");
10553 *err
|= time_get_char__Getint(this, &s
, &e
, 1, 7, &t
->tm_wday
);
10554 if(!(*err
& IOSTATE_failbit
) && t
->tm_wday
==7)
10558 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 6, &t
->tm_wday
);
10561 time_get_char_get_date(this, &s
, s
, e
, base
, err
, t
);
10564 *err
|= time_get_char__Getint(this, &s
, &e
, 0, 99, &t
->tm_year
);
10565 if(!(*err
& IOSTATE_failbit
) && t
->tm_year
<69)
10569 time_get_char_get_year(this, &s
, s
, e
, base
, err
, t
);
10572 FIXME("unrecognized format: %c\n", fmt
);
10573 *err
|= IOSTATE_failbit
;
10577 *err
|= IOSTATE_eofbit
;
10582 /* ?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 */
10583 /* ?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 */
10584 DEFINE_THISCALL_WRAPPER(time_get_char_get
, 44)
10585 istreambuf_iterator_char
* __thiscall
time_get_char_get(const time_get_char
*this,
10586 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10587 ios_base
*base
, int *err
, struct tm
*t
, char fmt
, char mod
)
10589 return call_time_get_char_do_get(this, ret
, s
, e
, base
, err
, t
, fmt
, mod
);
10592 /* ?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 */
10593 /* ?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 */
10594 DEFINE_THISCALL_WRAPPER(time_get_char_get_fmt
, 44)
10595 istreambuf_iterator_char
* __thiscall
time_get_char_get_fmt(const time_get_char
*this,
10596 istreambuf_iterator_char
*ret
, istreambuf_iterator_char s
, istreambuf_iterator_char e
,
10597 ios_base
*base
, int *err
, struct tm
*t
, const char *fmtstart
, const char *fmtend
)
10601 TRACE("(%p %p %p %p %p %s)\n", this, ret
, base
, err
, t
, wine_dbgstr_an(fmtstart
, fmtend
-fmtstart
));
10603 ctype
= ctype_char_use_facet(IOS_LOCALE(base
));
10604 istreambuf_iterator_char_val(&s
);
10606 while(fmtstart
< fmtend
) {
10607 if(ctype_char_is_ch(ctype
, _SPACE
, *fmtstart
)) {
10608 skip_ws_char(ctype
, &s
);
10614 *err
|= IOSTATE_failbit
;
10618 if(*fmtstart
!= '%' || fmtstart
+1 >= fmtend
|| fmtstart
[1] == '%') {
10619 if(s
.val
!= *fmtstart
)
10620 *err
|= IOSTATE_failbit
;
10622 istreambuf_iterator_char_inc(&s
);
10623 if(*fmtstart
== '%')
10627 time_get_char_get(this, &s
, s
, e
, base
, err
, t
, *fmtstart
, 0);
10630 if(*err
& IOSTATE_failbit
)
10636 *err
|= IOSTATE_eofbit
;
10641 /* ?id@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@2V0locale@2@A */
10642 locale_id time_get_wchar_id
= {0};
10644 /* ??_7?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@6B@ */
10645 extern const vtable_ptr MSVCP_time_get_wchar_vtable
;
10647 #if _MSVCP_VER >=110
10648 static wchar_t* create_time_get_str(const wchar_t *str
)
10653 len
= strlenW(str
)+1;
10654 ret
= MSVCRT_operator_new(len
* sizeof(wchar_t));
10656 memcpy(ret
, str
, len
*sizeof(wchar_t));
10660 static wchar_t* create_time_get_str(const char *str
, const _Locinfo
*locinfo
)
10666 _Locinfo__Getcvt(locinfo
, &cvt
);
10667 len
= MultiByteToWideChar(cvt
.page
, 0, str
, -1, NULL
, 0);
10668 ret
= MSVCRT_operator_new(len
*sizeof(WCHAR
));
10670 MultiByteToWideChar(cvt
.page
, 0, str
, -1, ret
, len
);
10675 /* ?_Init@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAEXABV_Locinfo@2@@Z */
10676 /* ?_Init@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAAXAEBV_Locinfo@2@@Z */
10677 DEFINE_THISCALL_WRAPPER(time_get_wchar__Init
, 8)
10678 void __thiscall
time_get_wchar__Init(time_get_wchar
*this, const _Locinfo
*locinfo
)
10680 TRACE("(%p %p)\n", this, locinfo
);
10682 #if _MSVCP_VER >=110
10683 this->days
= create_time_get_str(_Locinfo__W_Getdays(locinfo
));
10685 this->days
= create_time_get_str(_Locinfo__Getdays(locinfo
), locinfo
);
10689 ERR("Out of memory\n");
10690 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
10693 #if _MSVCP_VER >=110
10694 this->months
= create_time_get_str(_Locinfo__W_Getmonths(locinfo
));
10696 this->months
= create_time_get_str(_Locinfo__Getmonths(locinfo
), locinfo
);
10700 MSVCRT_operator_delete((wchar_t*)this->days
);
10702 ERR("Out of memory\n");
10703 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
10706 this->dateorder
= _Locinfo__Getdateorder(locinfo
);
10707 _Locinfo__Getcvt(locinfo
, &this->cvt
);
10710 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z */
10711 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@AEBV_Locinfo@1@_K@Z */
10712 DEFINE_THISCALL_WRAPPER(time_get_wchar_ctor_locinfo
, 12)
10713 time_get_wchar
* __thiscall
time_get_wchar_ctor_locinfo(time_get_wchar
*this,
10714 const _Locinfo
*locinfo
, MSVCP_size_t refs
)
10716 TRACE("(%p %p %lu)\n", this, locinfo
, refs
);
10717 locale_facet_ctor_refs(&this->facet
, refs
);
10718 this->facet
.vtable
= &MSVCP_time_get_wchar_vtable
;
10719 time_get_wchar__Init(this, locinfo
);
10723 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IAE@PBDI@Z */
10724 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@IEAA@PEBD_K@Z */
10725 DEFINE_THISCALL_WRAPPER(time_get_wchar_ctor_name
, 12)
10726 time_get_wchar
* __thiscall
time_get_wchar_ctor_name(time_get_wchar
*this, const char *name
, MSVCP_size_t refs
)
10730 TRACE("(%p %s %lu)\n", this, name
, refs
);
10732 _Locinfo_ctor_cstr(&locinfo
, name
);
10733 time_get_wchar_ctor_locinfo(this, &locinfo
, refs
);
10734 _Locinfo_dtor(&locinfo
);
10738 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAE@I@Z */
10739 /* ??0?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAA@_K@Z */
10740 DEFINE_THISCALL_WRAPPER(time_get_wchar_ctor_refs
, 8)
10741 time_get_wchar
* __thiscall
time_get_wchar_ctor_refs(time_get_wchar
*this, MSVCP_size_t refs
)
10745 TRACE("(%p %lu)\n", this, refs
);
10747 _Locinfo_ctor(&locinfo
);
10748 time_get_wchar_ctor_locinfo(this, &locinfo
, refs
);
10749 _Locinfo_dtor(&locinfo
);
10753 /* ??_F?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QAEXXZ */
10754 /* ??_F?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEAAXXZ */
10755 DEFINE_THISCALL_WRAPPER(time_get_wchar_ctor
, 4)
10756 time_get_wchar
* __thiscall
time_get_wchar_ctor(time_get_wchar
*this)
10758 return time_get_wchar_ctor_refs(this, 0);
10761 /* ?_Tidy@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AAEXXZ */
10762 /* ?_Tidy@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEAAXXZ */
10763 DEFINE_THISCALL_WRAPPER(time_get_wchar__Tidy
, 4)
10764 void __thiscall
time_get_wchar__Tidy(time_get_wchar
*this)
10766 TRACE("(%p)\n", this);
10768 MSVCRT_operator_delete((wchar_t*)this->days
);
10769 MSVCRT_operator_delete((wchar_t*)this->months
);
10772 /* ??1?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MAE@XZ */
10773 /* ??1?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEAA@XZ */
10774 DEFINE_THISCALL_WRAPPER(time_get_wchar_dtor
, 4) /* virtual */
10775 void __thiscall
time_get_wchar_dtor(time_get_wchar
*this)
10777 TRACE("(%p)\n", this);
10779 time_get_wchar__Tidy(this);
10782 DEFINE_THISCALL_WRAPPER(time_get_wchar_vector_dtor
, 8)
10783 time_get_wchar
* __thiscall
time_get_wchar_vector_dtor(time_get_wchar
*this, unsigned int flags
)
10785 TRACE("(%p %x)\n", this, flags
);
10787 /* we have an array, with the number of elements stored before the first object */
10788 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
10790 for(i
=*ptr
-1; i
>=0; i
--)
10791 time_get_wchar_dtor(this+i
);
10792 MSVCRT_operator_delete(ptr
);
10794 time_get_wchar_dtor(this);
10796 MSVCRT_operator_delete(this);
10802 /* ?_Getcat@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */
10803 /* ?_Getcat@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */
10804 unsigned int __cdecl
time_get_wchar__Getcat(const locale_facet
**facet
, const locale
*loc
)
10806 TRACE("(%p %p)\n", facet
, loc
);
10808 if(facet
&& !*facet
) {
10811 *facet
= MSVCRT_operator_new(sizeof(time_get_wchar
));
10813 ERR("Out of memory\n");
10814 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
10818 _Locinfo_ctor_cstr(&locinfo
, locale_string_char_c_str(&loc
->ptr
->name
));
10819 time_get_wchar_ctor_locinfo((time_get_wchar
*)*facet
, &locinfo
, 0);
10820 _Locinfo_dtor(&locinfo
);
10826 static time_get_wchar
* time_get_wchar_use_facet(const locale
*loc
)
10828 static time_get_wchar
*obj
= NULL
;
10831 const locale_facet
*fac
;
10833 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
10834 fac
= locale__Getfacet(loc
, locale_id_operator_size_t(&time_get_wchar_id
));
10836 _Lockit_dtor(&lock
);
10837 return (time_get_wchar
*)fac
;
10841 _Lockit_dtor(&lock
);
10845 time_get_wchar__Getcat(&fac
, loc
);
10846 obj
= (time_get_wchar
*)fac
;
10847 call_locale_facet__Incref(&obj
->facet
);
10848 locale_facet_register(&obj
->facet
);
10849 _Lockit_dtor(&lock
);
10854 /* ?_Getint@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@ABAHAAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@0HHAAH@Z */
10855 /* ?_Getint@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEBAHAEAV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@2@0HHAEAH@Z */
10856 int __cdecl
time_get_wchar__Getint(const time_get_wchar
*this,
10857 istreambuf_iterator_wchar
*b
, istreambuf_iterator_wchar
*e
,
10858 int min_val
, int max_val
, int *val
)
10860 BOOL got_digit
= FALSE
;
10861 int len
= 0, ret
= 0;
10864 TRACE("(%p %p %p %d %d %p)\n", this, b
, e
, min_val
, max_val
, val
);
10866 istreambuf_iterator_wchar_val(b
);
10867 if(b
->strbuf
&& (b
->val
== '-' || b
->val
== '+'))
10869 buf
[len
++] = b
->val
;
10870 istreambuf_iterator_wchar_inc(b
);
10873 if (b
->strbuf
&& b
->val
== '0')
10877 istreambuf_iterator_wchar_inc(b
);
10879 while (b
->strbuf
&& b
->val
== '0')
10880 istreambuf_iterator_wchar_inc(b
);
10882 for (; b
->strbuf
&& b
->val
>= '0' && b
->val
<= '9';
10883 istreambuf_iterator_wchar_inc(b
))
10885 if(len
< ARRAY_SIZE(buf
)-1)
10892 ret
|= IOSTATE_eofbit
;
10893 if (got_digit
&& len
< ARRAY_SIZE(buf
)-1)
10898 v
= _Stolx(buf
, NULL
, 10, &err
);
10899 if(err
|| v
< min_val
|| v
> max_val
)
10900 ret
|= IOSTATE_failbit
;
10905 ret
|= IOSTATE_failbit
;
10909 /* ?do_date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MBE?AW4dateorder@time_base@2@XZ */
10910 /* ?do_date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@MEBA?AW4dateorder@time_base@2@XZ */
10911 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_date_order
, 4) /* virtual */
10912 #if _MSVCP_VER <= 100
10913 #define call_time_get_wchar_do_date_order(this) CALL_VTBL_FUNC(this, 4, dateorder, (const time_get_wchar*), (this))
10915 #define call_time_get_wchar_do_date_order(this) CALL_VTBL_FUNC(this, 12, dateorder, (const time_get_wchar*), (this))
10917 dateorder __thiscall
time_get_wchar_do_date_order(const time_get_wchar
*this)
10919 TRACE("(%p)\n", this);
10920 return this->dateorder
;
10923 /* ?date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QBE?AW4dateorder@time_base@2@XZ */
10924 /* ?date_order@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@QEBA?AW4dateorder@time_base@2@XZ */
10925 DEFINE_THISCALL_WRAPPER(time_get_wchar_date_order
, 4)
10926 dateorder __thiscall
time_get_wchar_date_order(const time_get_wchar
*this)
10928 return call_time_get_wchar_do_date_order(this);
10931 static int find_longest_match_wchar(istreambuf_iterator_wchar
*iter
, const wchar_t *str
)
10933 int i
, len
= 0, last_match
= -1, match
= -1;
10934 const wchar_t *p
, *end
;
10937 for(istreambuf_iterator_wchar_val(iter
); iter
->strbuf
&& len
<ARRAY_SIZE(buf
);
10938 istreambuf_iterator_wchar_inc(iter
))
10940 BOOL got_prefix
= FALSE
;
10942 buf
[len
++] = iter
->val
;
10943 last_match
= match
;
10945 for(p
=str
+1, i
=0; *p
; p
= (*end
? end
+1 : end
), i
++)
10947 end
= strchrW(p
, ':');
10949 end
= p
+ strlenW(p
);
10951 if (end
-p
>= len
&& !memcmp(p
, buf
, len
*sizeof(wchar_t)))
10964 istreambuf_iterator_wchar_inc(iter
);
10970 if (len
== ARRAY_SIZE(buf
))
10971 FIXME("temporary buffer is too small\n");
10977 /* ?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 */
10978 /* ?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 */
10979 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get_monthname
, 36) /* virtual */
10980 #if _MSVCP_VER <= 100
10981 #define call_time_get_wchar_do_get_monthname(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_wchar*, \
10982 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
10983 (this, ret, s, e, base, err, t))
10985 #define call_time_get_wchar_do_get_monthname(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_wchar*, \
10986 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
10987 (this, ret, s, e, base, err, t))
10989 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get_monthname(const time_get_wchar
*this,
10990 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
10991 ios_base
*base
, int *err
, struct tm
*t
)
10995 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
10997 if ((match
= find_longest_match_wchar(&s
, this->months
)) != -1)
10998 t
->tm_mon
= match
/ 2;
11000 *err
|= IOSTATE_failbit
;
11006 /* ?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 */
11007 /* ?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 */
11008 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_monthname
, 36)
11009 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_monthname(const time_get_wchar
*this,
11010 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11011 ios_base
*base
, int *err
, struct tm
*t
)
11013 return call_time_get_wchar_do_get_monthname(this, ret
, s
, e
, base
, err
, t
);
11016 /* ?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 */
11017 /* ?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 */
11018 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get_time
, 36) /* virtual */
11019 #if _MSVCP_VER <= 100
11020 #define call_time_get_wchar_do_get_time(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 8, istreambuf_iterator_wchar*, \
11021 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
11022 (this, ret, s, e, base, err, t))
11024 #define call_time_get_wchar_do_get_time(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_wchar*, \
11025 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
11026 (this, ret, s, e, base, err, t))
11028 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get_time(const time_get_wchar
*this,
11029 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11030 ios_base
*base
, int *err
, struct tm
*t
)
11032 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
11034 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 23, &t
->tm_hour
);
11035 if (*err
|| istreambuf_iterator_wchar_val(&s
)!=':')
11036 *err
|= IOSTATE_failbit
;
11040 istreambuf_iterator_wchar_inc(&s
);
11041 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 59, &t
->tm_min
);
11043 if (*err
|| istreambuf_iterator_wchar_val(&s
)!=':')
11044 *err
|= IOSTATE_failbit
;
11048 istreambuf_iterator_wchar_inc(&s
);
11049 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 59, &t
->tm_sec
);
11056 /* ?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 */
11057 /* ?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 */
11058 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_time
, 36)
11059 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_time(const time_get_wchar
*this,
11060 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11061 ios_base
*base
, int *err
, struct tm
*t
)
11063 return call_time_get_wchar_do_get_time(this, ret
, s
, e
, base
, err
, t
);
11066 /* ?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 */
11067 /* ?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 */
11068 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get_weekday
, 36) /* virtual */
11069 #if _MSVCP_VER <= 100
11070 #define call_time_get_wchar_do_get_weekday(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 16, istreambuf_iterator_wchar*, \
11071 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
11072 (this, ret, s, e, base, err, t))
11074 #define call_time_get_wchar_do_get_weekday(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_wchar*, \
11075 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
11076 (this, ret, s, e, base, err, t))
11078 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get_weekday(const time_get_wchar
*this,
11079 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11080 ios_base
*base
, int *err
, struct tm
*t
)
11084 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
11086 if ((match
= find_longest_match_wchar(&s
, this->days
)) != -1)
11087 t
->tm_wday
= match
/ 2;
11089 *err
|= IOSTATE_failbit
;
11095 /* ?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 */
11096 /* ?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 */
11097 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_weekday
, 36)
11098 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_weekday(const time_get_wchar
*this,
11099 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11100 ios_base
*base
, int *err
, struct tm
*t
)
11102 return call_time_get_wchar_do_get_weekday(this, ret
, s
, e
, base
, err
, t
);
11105 /* ?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 */
11106 /* ?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 */
11107 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get_year
, 36) /* virtual */
11108 #if _MSVCP_VER <= 100
11109 #define call_time_get_wchar_do_get_year(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 24, istreambuf_iterator_wchar*, \
11110 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
11111 (this, ret, s, e, base, err, t))
11113 #define call_time_get_wchar_do_get_year(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 32, istreambuf_iterator_wchar*, \
11114 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
11115 (this, ret, s, e, base, err, t))
11117 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get_year(const time_get_wchar
*this,
11118 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11119 ios_base
*base
, int *err
, struct tm
*t
)
11123 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
11125 /* The function supports only dates from [1900-2035] range */
11126 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 2035, &year
);
11127 if (!(*err
& IOSTATE_failbit
))
11132 *err
|= IOSTATE_failbit
;
11141 /* ?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 */
11142 /* ?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 */
11143 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_year
, 36)
11144 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_year(const time_get_wchar
*this,
11145 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11146 ios_base
*base
, int *err
, struct tm
*t
)
11148 return call_time_get_wchar_do_get_year(this, ret
, s
, e
, base
, err
, t
);
11151 static void skip_ws_wchar(ctype_wchar
*ctype
, istreambuf_iterator_wchar
*iter
)
11153 istreambuf_iterator_wchar_val(iter
);
11154 while(iter
->strbuf
&& ctype_wchar_is_ch(ctype
, _SPACE
, iter
->val
))
11155 istreambuf_iterator_wchar_inc(iter
);
11158 static void skip_date_delim_wchar(ctype_wchar
*ctype
, istreambuf_iterator_wchar
*iter
)
11160 skip_ws_wchar(ctype
, iter
);
11161 if(iter
->strbuf
&& (iter
->val
== '/' || iter
->val
== ':'))
11162 istreambuf_iterator_wchar_inc(iter
);
11163 skip_ws_wchar(ctype
, iter
);
11166 /* ?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 */
11167 /* ?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 */
11168 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get_date
, 36) /* virtual */
11169 #if _MSVCP_VER <= 100
11170 #define call_time_get_wchar_do_get_date(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 12, istreambuf_iterator_wchar*, \
11171 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
11172 (this, ret, s, e, base, err, t))
11174 #define call_time_get_wchar_do_get_date(this, ret, s, e, base, err, t) CALL_VTBL_FUNC(this, 20, istreambuf_iterator_wchar*, \
11175 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*), \
11176 (this, ret, s, e, base, err, t))
11178 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get_date(const time_get_wchar
*this,
11179 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11180 ios_base
*base
, int *err
, struct tm
*t
)
11182 ctype_wchar
*ctype
;
11185 TRACE("(%p %p %p %p %p)\n", this, ret
, base
, err
, t
);
11187 ctype
= ctype_wchar_use_facet(IOS_LOCALE(base
));
11189 order
= time_get_wchar_date_order(this);
11190 if(order
== DATEORDER_no_order
)
11191 order
= DATEORDER_mdy
;
11194 case DATEORDER_dmy
:
11195 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
11196 skip_date_delim_wchar(ctype
, &s
);
11198 *err
|= IOSTATE_failbit
;
11201 if(s
.strbuf
&& ctype_wchar_is_ch(ctype
, _DIGIT
, s
.val
)) {
11202 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
11205 time_get_wchar_get_monthname(this, &s
, s
, e
, base
, err
, t
);
11207 skip_date_delim_wchar(ctype
, &s
);
11209 *err
|= IOSTATE_failbit
;
11212 time_get_wchar_get_year(this, &s
, s
, e
, base
, err
, t
);
11214 case DATEORDER_mdy
:
11215 istreambuf_iterator_wchar_val(&s
);
11216 if(s
.strbuf
&& ctype_wchar_is_ch(ctype
, _DIGIT
, s
.val
)) {
11217 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
11220 time_get_wchar_get_monthname(this, &s
, s
, e
, base
, err
, t
);
11222 skip_date_delim_wchar(ctype
, &s
);
11224 *err
|= IOSTATE_failbit
;
11227 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
11228 skip_date_delim_wchar(ctype
, &s
);
11230 *err
|= IOSTATE_failbit
;
11233 time_get_wchar_get_year(this, &s
, s
, e
, base
, err
, t
);
11235 case DATEORDER_ymd
:
11236 time_get_wchar_get_year(this, &s
, s
, e
, base
, err
, t
);
11237 skip_date_delim_wchar(ctype
, &s
);
11239 *err
|= IOSTATE_failbit
;
11242 if(ctype_wchar_is_ch(ctype
, _DIGIT
, s
.val
)) {
11243 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
11246 time_get_wchar_get_monthname(this, &s
, s
, e
, base
, err
, t
);
11248 skip_date_delim_wchar(ctype
, &s
);
11250 *err
|= IOSTATE_failbit
;
11253 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
11255 case DATEORDER_ydm
:
11256 time_get_wchar_get_year(this, &s
, s
, e
, base
, err
, t
);
11257 skip_date_delim_wchar(ctype
, &s
);
11259 *err
|= IOSTATE_failbit
;
11262 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
11263 skip_date_delim_wchar(ctype
, &s
);
11265 *err
|= IOSTATE_failbit
;
11268 if(ctype_wchar_is_ch(ctype
, _DIGIT
, s
.val
)) {
11269 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
11272 time_get_wchar_get_monthname(this, &s
, s
, e
, base
, err
, t
);
11276 ERR("incorrect order value: %d\n", order
);
11281 *err
|= IOSTATE_eofbit
;
11286 /* ?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 */
11287 /* ?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 */
11288 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_date
, 36)
11289 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_date(const time_get_wchar
*this,
11290 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11291 ios_base
*base
, int *err
, struct tm
*t
)
11293 return call_time_get_wchar_do_get_date(this, ret
, s
, e
, base
, err
, t
);
11296 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get(const time_get_wchar
*,
11297 istreambuf_iterator_wchar
*, istreambuf_iterator_wchar
, istreambuf_iterator_wchar
,
11298 ios_base
*, int*, struct tm
*, char, char);
11300 /* ?_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 */
11301 /* ?_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 */
11302 DEFINE_THISCALL_WRAPPER(time_get_wchar__Getfmt
, 40)
11303 istreambuf_iterator_wchar
* __thiscall
time_get_wchar__Getfmt(const time_get_wchar
*this,
11304 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11305 ios_base
*base
, int *err
, struct tm
*t
, const char *fmt
)
11307 ctype_wchar
*ctype
;
11309 TRACE("(%p %p %p %p %p %s)\n", this, ret
, base
, err
, t
, fmt
);
11311 ctype
= ctype_wchar_use_facet(IOS_LOCALE(base
));
11312 istreambuf_iterator_wchar_val(&s
);
11316 skip_ws_wchar(ctype
, &s
);
11322 *err
|= IOSTATE_failbit
;
11328 time_get_wchar_get(this, &s
, s
, e
, base
, err
, t
, *fmt
, 0);
11331 *err
|= IOSTATE_failbit
;
11333 istreambuf_iterator_wchar_inc(&s
);
11336 if(*err
& IOSTATE_failbit
)
11342 *err
|= IOSTATE_eofbit
;
11347 /* ?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 */
11348 /* ?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 */
11349 DEFINE_THISCALL_WRAPPER(time_get_wchar_do_get
, 44) /* virtual */
11350 #if _MSVCP_VER <= 100
11351 #define call_time_get_wchar_do_get(this, ret, s, e, base, err, t, fmt, mod) CALL_VTBL_FUNC(this, 28, istreambuf_iterator_wchar*, \
11352 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*, char, char), \
11353 (this, ret, s, e, base, err, t, fmt, mod))
11355 #define call_time_get_wchar_do_get(this, ret, s, e, base, err, t, fmt, mod) CALL_VTBL_FUNC(this, 36, istreambuf_iterator_wchar*, \
11356 (const time_get_wchar*, istreambuf_iterator_wchar*, istreambuf_iterator_wchar, istreambuf_iterator_wchar, ios_base*, int*, struct tm*, char, char), \
11357 (this, ret, s, e, base, err, t, fmt, mod))
11359 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_do_get(const time_get_wchar
*this,
11360 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11361 ios_base
*base
, int *err
, struct tm
*t
, char fmt
, char mod
)
11363 ctype_wchar
*ctype
;
11365 TRACE("(%p %p %p %p %p %c %c)\n", this, ret
, base
, err
, t
, fmt
, mod
);
11367 ctype
= ctype_wchar_use_facet(IOS_LOCALE(base
));
11372 time_get_wchar_get_weekday(this, &s
, s
, e
, base
, err
, t
);
11377 time_get_wchar_get_monthname(this, &s
, s
, e
, base
, err
, t
);
11380 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%b %d %H:%M:%S %Y");
11383 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 99, &t
->tm_year
);
11384 if(!(*err
& IOSTATE_failbit
))
11385 t
->tm_year
= t
->tm_year
* 100 - 1900;
11389 if(fmt
== 'e') skip_ws_wchar(ctype
, &s
);
11390 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 31, &t
->tm_mday
);
11393 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%m/%d/%y");
11396 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%Y-%m-%d");
11399 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 23, &t
->tm_hour
);
11402 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 11, &t
->tm_hour
);
11405 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 366, &t
->tm_yday
);
11408 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 12, &t
->tm_mon
);
11409 if(!(*err
& IOSTATE_failbit
))
11413 *err
= time_get_wchar__Getint(this, &s
, &e
, 0, 59, &t
->tm_min
);
11417 skip_ws_wchar(ctype
, &s
);
11422 istreambuf_iterator_wchar_val(&s
);
11423 if(s
.strbuf
&& (s
.val
=='P' || s
.val
=='p'))
11425 else if (!s
.strbuf
|| (s
.val
!='A' && s
.val
!='a')) {
11426 *err
|= IOSTATE_failbit
;
11429 istreambuf_iterator_wchar_inc(&s
);
11430 if(!s
.strbuf
|| (s
.val
!='M' && s
.val
!='m')) {
11431 *err
|= IOSTATE_failbit
;
11434 istreambuf_iterator_wchar_inc(&s
);
11441 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%I:%M:%S %p");
11444 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%H:%M");
11447 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 59, &t
->tm_sec
);
11451 time_get_wchar__Getfmt(this, &s
, s
, e
, base
, err
, t
, "%H:%M:%S");
11454 *err
|= time_get_wchar__Getint(this, &s
, &e
, 1, 7, &t
->tm_wday
);
11455 if(!(*err
& IOSTATE_failbit
) && t
->tm_wday
==7)
11459 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 6, &t
->tm_wday
);
11462 time_get_wchar_get_date(this, &s
, s
, e
, base
, err
, t
);
11465 *err
|= time_get_wchar__Getint(this, &s
, &e
, 0, 99, &t
->tm_year
);
11466 if(!(*err
& IOSTATE_failbit
) && t
->tm_year
<69)
11470 time_get_wchar_get_year(this, &s
, s
, e
, base
, err
, t
);
11473 FIXME("unrecognized format: %c\n", fmt
);
11474 *err
|= IOSTATE_failbit
;
11478 *err
|= IOSTATE_eofbit
;
11483 /* ?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 */
11484 /* ?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 */
11485 DEFINE_THISCALL_WRAPPER(time_get_wchar_get
, 44)
11486 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get(const time_get_wchar
*this,
11487 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11488 ios_base
*base
, int *err
, struct tm
*t
, char fmt
, char mod
)
11490 return call_time_get_wchar_do_get(this, ret
, s
, e
, base
, err
, t
, fmt
, mod
);
11493 /* ?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 */
11494 /* ?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 */
11495 DEFINE_THISCALL_WRAPPER(time_get_wchar_get_fmt
, 44)
11496 istreambuf_iterator_wchar
* __thiscall
time_get_wchar_get_fmt(const time_get_wchar
*this,
11497 istreambuf_iterator_wchar
*ret
, istreambuf_iterator_wchar s
, istreambuf_iterator_wchar e
,
11498 ios_base
*base
, int *err
, struct tm
*t
, const wchar_t *fmtstart
, const wchar_t *fmtend
)
11500 ctype_wchar
*ctype
;
11502 TRACE("(%p %p %p %p %p %s)\n", this, ret
, base
, err
, t
, wine_dbgstr_wn(fmtstart
, fmtend
-fmtstart
));
11504 ctype
= ctype_wchar_use_facet(IOS_LOCALE(base
));
11505 istreambuf_iterator_wchar_val(&s
);
11507 while(fmtstart
< fmtend
) {
11508 if(ctype_wchar_is_ch(ctype
, _SPACE
, *fmtstart
)) {
11509 skip_ws_wchar(ctype
, &s
);
11515 *err
|= IOSTATE_failbit
;
11519 if(*fmtstart
!= '%' || fmtstart
+1 >= fmtend
|| fmtstart
[1] == '%') {
11520 if(s
.val
!= *fmtstart
)
11521 *err
|= IOSTATE_failbit
;
11523 istreambuf_iterator_wchar_inc(&s
);
11524 if(*fmtstart
== '%')
11528 time_get_wchar_get(this, &s
, s
, e
, base
, err
, t
, *fmtstart
, 0);
11531 if(*err
& IOSTATE_failbit
)
11537 *err
|= IOSTATE_eofbit
;
11542 /* ??_7_Locimp@locale@std@@6B@ */
11543 extern const vtable_ptr MSVCP_locale__Locimp_vtable
;
11545 /* ??0_Locimp@locale@std@@AAE@_N@Z */
11546 /* ??0_Locimp@locale@std@@AEAA@_N@Z */
11547 DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor_transparent
, 8)
11548 locale__Locimp
* __thiscall
locale__Locimp_ctor_transparent(locale__Locimp
*this, MSVCP_bool transparent
)
11550 TRACE("(%p %d)\n", this, transparent
);
11552 memset(this, 0, sizeof(locale__Locimp
));
11553 locale_facet_ctor_refs(&this->facet
, 1);
11554 this->facet
.vtable
= &MSVCP_locale__Locimp_vtable
;
11555 this->transparent
= transparent
;
11556 locale_string_char_ctor_cstr(&this->name
, "*");
11560 /* ??_F_Locimp@locale@std@@QAEXXZ */
11561 /* ??_F_Locimp@locale@std@@QEAAXXZ */
11562 DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor
, 4)
11563 locale__Locimp
* __thiscall
locale__Locimp_ctor(locale__Locimp
*this)
11565 return locale__Locimp_ctor_transparent(this, FALSE
);
11568 /* ??0_Locimp@locale@std@@AAE@ABV012@@Z */
11569 /* ??0_Locimp@locale@std@@AEAA@AEBV012@@Z */
11570 DEFINE_THISCALL_WRAPPER(locale__Locimp_copy_ctor
, 8)
11571 locale__Locimp
* __thiscall
locale__Locimp_copy_ctor(locale__Locimp
*this, const locale__Locimp
*copy
)
11576 TRACE("(%p %p)\n", this, copy
);
11578 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
11579 memcpy(this, copy
, sizeof(locale__Locimp
));
11580 locale_facet_ctor_refs(&this->facet
, 1);
11581 this->facet
.vtable
= &MSVCP_locale__Locimp_vtable
;
11582 if(copy
->facetvec
) {
11583 this->facetvec
= MSVCRT_operator_new(copy
->facet_cnt
*sizeof(locale_facet
*));
11584 if(!this->facetvec
) {
11585 _Lockit_dtor(&lock
);
11586 ERR("Out of memory\n");
11587 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11590 for(i
=0; i
<this->facet_cnt
; i
++)
11592 this->facetvec
[i
] = copy
->facetvec
[i
];
11593 if(this->facetvec
[i
])
11594 call_locale_facet__Incref(this->facetvec
[i
]);
11597 locale_string_char_copy_ctor(&this->name
, ©
->name
);
11598 _Lockit_dtor(&lock
);
11602 /* ?_Locimp_ctor@_Locimp@locale@std@@CAXPAV123@ABV123@@Z */
11603 /* ?_Locimp_ctor@_Locimp@locale@std@@CAXPEAV123@AEBV123@@Z */
11604 locale__Locimp
* __cdecl
locale__Locimp__Locimp_ctor(locale__Locimp
*this, const locale__Locimp
*copy
)
11606 return locale__Locimp_copy_ctor(this, copy
);
11609 /* ??1_Locimp@locale@std@@MAE@XZ */
11610 /* ??1_Locimp@locale@std@@MEAA@XZ */
11611 DEFINE_THISCALL_WRAPPER(locale__Locimp_dtor
, 4)
11612 void __thiscall
locale__Locimp_dtor(locale__Locimp
*this)
11616 TRACE("(%p)\n", this);
11618 locale_facet_dtor(&this->facet
);
11619 for(i
=0; i
<this->facet_cnt
; i
++)
11620 if(this->facetvec
[i
] && call_locale_facet__Decref(this->facetvec
[i
]))
11621 call_locale_facet_vector_dtor(this->facetvec
[i
], 1);
11623 MSVCRT_operator_delete(this->facetvec
);
11624 locale_string_char_dtor(&this->name
);
11627 /* ?_Locimp_dtor@_Locimp@locale@std@@CAXPAV123@@Z */
11628 /* ?_Locimp_dtor@_Locimp@locale@std@@CAXPEAV123@@Z */
11629 void __cdecl
locale__Locimp__Locimp_dtor(locale__Locimp
*this)
11631 locale__Locimp_dtor(this);
11634 DEFINE_THISCALL_WRAPPER(locale__Locimp_vector_dtor
, 8)
11635 locale__Locimp
* __thiscall
locale__Locimp_vector_dtor(locale__Locimp
*this, unsigned int flags
)
11637 TRACE("(%p %x)\n", this, flags
);
11639 /* we have an array, with the number of elements stored before the first object */
11640 INT_PTR i
, *ptr
= (INT_PTR
*)this-1;
11642 for(i
=*ptr
-1; i
>=0; i
--)
11643 locale__Locimp_dtor(this+i
);
11644 MSVCRT_operator_delete(ptr
);
11646 locale__Locimp_dtor(this);
11648 MSVCRT_operator_delete(this);
11654 /* ?_New_Locimp@_Locimp@locale@std@@CAPAV123@ABV123@@Z */
11655 /* ?_New_Locimp@_Locimp@locale@std@@CAPEAV123@AEBV123@@Z */
11656 locale__Locimp
* __cdecl
locale__Locimp__New_Locimp(const locale__Locimp
*copy
)
11658 locale__Locimp
*ret
;
11660 TRACE("(%p)\n", copy
);
11662 ret
= MSVCRT_operator_new(sizeof(locale__Locimp
));
11664 ERR("Out of memory\n");
11665 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11668 return locale__Locimp_copy_ctor(ret
, copy
);
11671 /* ?_New_Locimp@_Locimp@locale@std@@CAPAV123@_N@Z */
11672 /* ?_New_Locimp@_Locimp@locale@std@@CAPEAV123@_N@Z */
11673 locale__Locimp
* __cdecl
locale__Locimp__New_Locimp_transparent(MSVCP_bool transparent
)
11675 locale__Locimp
*ret
;
11677 TRACE("(%x)\n", transparent
);
11679 ret
= MSVCRT_operator_new(sizeof(locale__Locimp
));
11681 ERR("Out of memory\n");
11682 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11685 return locale__Locimp_ctor_transparent(ret
, transparent
);
11688 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPAV123@PAVfacet@23@I@Z */
11689 /* ?_Locimp_Addfac@_Locimp@locale@std@@CAXPEAV123@PEAVfacet@23@_K@Z */
11690 void __cdecl
locale__Locimp__Locimp_Addfac(locale__Locimp
*locimp
, locale_facet
*facet
, MSVCP_size_t id
)
11694 TRACE("(%p %p %lu)\n", locimp
, facet
, id
);
11696 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
11697 if(id
>= locimp
->facet_cnt
) {
11698 MSVCP_size_t new_size
= id
+1;
11699 locale_facet
**new_facetvec
;
11704 new_facetvec
= MSVCRT_operator_new(sizeof(locale_facet
*)*new_size
);
11705 if(!new_facetvec
) {
11706 _Lockit_dtor(&lock
);
11707 ERR("Out of memory\n");
11708 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11712 memset(new_facetvec
, 0, sizeof(locale_facet
*)*new_size
);
11713 memcpy(new_facetvec
, locimp
->facetvec
, sizeof(locale_facet
*)*locimp
->facet_cnt
);
11714 MSVCRT_operator_delete(locimp
->facetvec
);
11715 locimp
->facetvec
= new_facetvec
;
11716 locimp
->facet_cnt
= new_size
;
11719 if(locimp
->facetvec
[id
] && call_locale_facet__Decref(locimp
->facetvec
[id
]))
11720 call_locale_facet_vector_dtor(locimp
->facetvec
[id
], 1);
11722 locimp
->facetvec
[id
] = facet
;
11724 call_locale_facet__Incref(facet
);
11725 _Lockit_dtor(&lock
);
11728 /* ?_Addfac@_Locimp@locale@std@@AAEXPAVfacet@23@I@Z */
11729 /* ?_Addfac@_Locimp@locale@std@@AEAAXPEAVfacet@23@_K@Z */
11730 DEFINE_THISCALL_WRAPPER(locale__Locimp__Addfac
, 12)
11731 void __thiscall
locale__Locimp__Addfac(locale__Locimp
*this, locale_facet
*facet
, MSVCP_size_t id
)
11733 locale__Locimp__Locimp_Addfac(this, facet
, id
);
11736 /* ?_Clocptr_func@_Locimp@locale@std@@CAAAPAV123@XZ */
11737 /* ?_Clocptr_func@_Locimp@locale@std@@CAAEAPEAV123@XZ */
11738 locale__Locimp
** __cdecl
locale__Locimp__Clocptr_func(void)
11744 /* ?_Makeushloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
11745 /* ?_Makeushloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
11746 /* List of missing facets:
11747 * messages, money_get, money_put, moneypunct, moneypunct, time_get
11749 void __cdecl
locale__Locimp__Makeushloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
11751 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
11753 if(cat
& (1<<(ctype_short__Getcat(NULL
, NULL
)-1))) {
11754 ctype_wchar
*ctype
;
11757 ctype
= ctype_short_use_facet(loc
);
11759 ctype
= MSVCRT_operator_new(sizeof(ctype_wchar
));
11761 ERR("Out of memory\n");
11762 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11764 ctype_short_ctor_locinfo(ctype
, locinfo
, 0);
11766 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_short_id
));
11769 if(cat
& (1<<(num_get_short__Getcat(NULL
, NULL
)-1))) {
11773 numget
= num_get_short_use_facet(loc
);
11775 numget
= MSVCRT_operator_new(sizeof(num_get
));
11777 ERR("Out of memory\n");
11778 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11780 num_get_short_ctor_locinfo(numget
, locinfo
, 0);
11782 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_short_id
));
11785 if(cat
& (1<<(num_put_short__Getcat(NULL
, NULL
)-1))) {
11789 numput
= num_put_short_use_facet(loc
);
11791 numput
= MSVCRT_operator_new(sizeof(num_put
));
11793 ERR("Out of memory\n");
11794 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11796 num_put_short_ctor_locinfo(numput
, locinfo
, 0);
11798 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_short_id
));
11801 if(cat
& (1<<(numpunct_short__Getcat(NULL
, NULL
)-1))) {
11802 numpunct_wchar
*numpunct
;
11805 numpunct
= numpunct_short_use_facet(loc
);
11807 numpunct
= MSVCRT_operator_new(sizeof(numpunct_wchar
));
11809 ERR("Out of memory\n");
11810 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11812 numpunct_short_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
11814 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_short_id
));
11817 if(cat
& (1<<(collate_short__Getcat(NULL
, NULL
)-1))) {
11821 c
= collate_short_use_facet(loc
);
11823 c
= MSVCRT_operator_new(sizeof(collate
));
11825 ERR("Out of memory\n");
11826 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11828 collate_short_ctor_locinfo(c
, locinfo
, 0);
11830 locale__Locimp__Addfac(locimp
, &c
->facet
, locale_id_operator_size_t(&collate_short_id
));
11833 if(cat
& (1<<(time_put_short__Getcat(NULL
, NULL
)-1))) {
11837 t
= time_put_short_use_facet(loc
);
11839 t
= MSVCRT_operator_new(sizeof(time_put
));
11841 ERR("Out of memory\n");
11842 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11844 time_put_short_ctor_locinfo(t
, locinfo
, 0);
11846 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_put_short_id
));
11849 if(cat
& (1<<(codecvt_short__Getcat(NULL
, NULL
)-1))) {
11850 codecvt_wchar
*codecvt
;
11853 codecvt
= codecvt_short_use_facet(loc
);
11855 codecvt
= MSVCRT_operator_new(sizeof(codecvt_wchar
));
11857 ERR("Out of memory\n");
11858 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11860 codecvt_short_ctor_locinfo(codecvt
, locinfo
, 0);
11862 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_short_id
));
11866 /* ?_Makewloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
11867 /* ?_Makewloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
11868 /* List of missing facets:
11869 * messages, money_get, money_put, moneypunct, moneypunct
11871 void __cdecl
locale__Locimp__Makewloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
11873 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
11875 if(cat
& (1<<(ctype_wchar__Getcat(NULL
, NULL
)-1))) {
11876 ctype_wchar
*ctype
;
11879 ctype
= ctype_wchar_use_facet(loc
);
11881 ctype
= MSVCRT_operator_new(sizeof(ctype_wchar
));
11883 ERR("Out of memory\n");
11884 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11886 ctype_wchar_ctor_locinfo(ctype
, locinfo
, 0);
11888 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_wchar_id
));
11891 if(cat
& (1<<(num_get_wchar__Getcat(NULL
, NULL
)-1))) {
11895 numget
= num_get_wchar_use_facet(loc
);
11897 numget
= MSVCRT_operator_new(sizeof(num_get
));
11899 ERR("Out of memory\n");
11900 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11902 num_get_wchar_ctor_locinfo(numget
, locinfo
, 0);
11904 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_wchar_id
));
11907 if(cat
& (1<<(num_put_wchar__Getcat(NULL
, NULL
)-1))) {
11911 numput
= num_put_wchar_use_facet(loc
);
11913 numput
= MSVCRT_operator_new(sizeof(num_put
));
11915 ERR("Out of memory\n");
11916 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11918 num_put_wchar_ctor_locinfo(numput
, locinfo
, 0);
11920 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_wchar_id
));
11923 if(cat
& (1<<(numpunct_wchar__Getcat(NULL
, NULL
)-1))) {
11924 numpunct_wchar
*numpunct
;
11927 numpunct
= numpunct_wchar_use_facet(loc
);
11929 numpunct
= MSVCRT_operator_new(sizeof(numpunct_wchar
));
11931 ERR("Out of memory\n");
11932 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11934 numpunct_wchar_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
11936 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_wchar_id
));
11939 if(cat
& (1<<(collate_wchar__Getcat(NULL
, NULL
)-1))) {
11943 c
= collate_wchar_use_facet(loc
);
11945 c
= MSVCRT_operator_new(sizeof(collate
));
11947 ERR("Out of memory\n");
11948 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11950 collate_wchar_ctor_locinfo(c
, locinfo
, 0);
11952 locale__Locimp__Addfac(locimp
, &c
->facet
, locale_id_operator_size_t(&collate_wchar_id
));
11955 if(cat
& (1<<(time_get_wchar__Getcat(NULL
, NULL
)-1))) {
11959 t
= time_get_wchar_use_facet(loc
);
11961 t
= MSVCRT_operator_new(sizeof(time_get_wchar
));
11963 ERR("Out of memory\n");
11964 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11966 time_get_wchar_ctor_locinfo(t
, locinfo
, 0);
11968 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_get_wchar_id
));
11971 if(cat
& (1<<(time_put_wchar__Getcat(NULL
, NULL
)-1))) {
11975 t
= time_put_wchar_use_facet(loc
);
11977 t
= MSVCRT_operator_new(sizeof(time_put
));
11979 ERR("Out of memory\n");
11980 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11982 time_put_wchar_ctor_locinfo(t
, locinfo
, 0);
11984 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_put_wchar_id
));
11987 if(cat
& (1<<(codecvt_wchar__Getcat(NULL
, NULL
)-1))) {
11988 codecvt_wchar
*codecvt
;
11991 codecvt
= codecvt_wchar_use_facet(loc
);
11993 codecvt
= MSVCRT_operator_new(sizeof(codecvt_wchar
));
11995 ERR("Out of memory\n");
11996 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
11998 codecvt_wchar_ctor_locinfo(codecvt
, locinfo
, 0);
12000 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_wchar_id
));
12004 /* ?_Makexloc@_Locimp@locale@std@@CAXABV_Locinfo@3@HPAV123@PBV23@@Z */
12005 /* ?_Makexloc@_Locimp@locale@std@@CAXAEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
12006 /* List of missing facets:
12007 * messages, money_get, money_put, moneypunct, moneypunct
12009 void __cdecl
locale__Locimp__Makexloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
12011 FIXME("(%p %d %p %p) semi-stub\n", locinfo
, cat
, locimp
, loc
);
12013 if(cat
& (1<<(ctype_char__Getcat(NULL
, NULL
)-1))) {
12017 ctype
= ctype_char_use_facet(loc
);
12019 ctype
= MSVCRT_operator_new(sizeof(ctype_char
));
12021 ERR("Out of memory\n");
12022 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12024 ctype_char_ctor_locinfo(ctype
, locinfo
, 0);
12026 locale__Locimp__Addfac(locimp
, &ctype
->base
.facet
, locale_id_operator_size_t(&ctype_char_id
));
12029 if(cat
& (1<<(num_get_char__Getcat(NULL
, NULL
)-1))) {
12033 numget
= num_get_char_use_facet(loc
);
12035 numget
= MSVCRT_operator_new(sizeof(num_get
));
12037 ERR("Out of memory\n");
12038 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12040 num_get_char_ctor_locinfo(numget
, locinfo
, 0);
12042 locale__Locimp__Addfac(locimp
, &numget
->facet
, locale_id_operator_size_t(&num_get_char_id
));
12045 if(cat
& (1<<(num_put_char__Getcat(NULL
, NULL
)-1))) {
12049 numput
= num_put_char_use_facet(loc
);
12051 numput
= MSVCRT_operator_new(sizeof(num_put
));
12053 ERR("Out of memory\n");
12054 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12056 num_put_char_ctor_locinfo(numput
, locinfo
, 0);
12058 locale__Locimp__Addfac(locimp
, &numput
->facet
, locale_id_operator_size_t(&num_put_char_id
));
12061 if(cat
& (1<<(numpunct_char__Getcat(NULL
, NULL
)-1))) {
12062 numpunct_char
*numpunct
;
12065 numpunct
= numpunct_char_use_facet(loc
);
12067 numpunct
= MSVCRT_operator_new(sizeof(numpunct_char
));
12069 ERR("Out of memory\n");
12070 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12072 numpunct_char_ctor_locinfo(numpunct
, locinfo
, 0, FALSE
);
12074 locale__Locimp__Addfac(locimp
, &numpunct
->facet
, locale_id_operator_size_t(&numpunct_char_id
));
12077 if(cat
& (1<<(collate_char__Getcat(NULL
, NULL
)-1))) {
12081 c
= collate_char_use_facet(loc
);
12083 c
= MSVCRT_operator_new(sizeof(collate
));
12085 ERR("Out of memory\n");
12086 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12088 collate_char_ctor_locinfo(c
, locinfo
, 0);
12090 locale__Locimp__Addfac(locimp
, &c
->facet
, locale_id_operator_size_t(&collate_char_id
));
12093 if(cat
& (1<<(time_get_char__Getcat(NULL
, NULL
)-1))) {
12097 t
= time_get_char_use_facet(loc
);
12099 t
= MSVCRT_operator_new(sizeof(time_get_char
));
12101 ERR("Out of memory\n");
12102 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12104 time_get_char_ctor_locinfo(t
, locinfo
, 0);
12106 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_get_char_id
));
12109 if(cat
& (1<<(time_put_char__Getcat(NULL
, NULL
)-1))) {
12113 t
= time_put_char_use_facet(loc
);
12115 t
= MSVCRT_operator_new(sizeof(time_put
));
12117 ERR("Out of memory\n");
12118 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12120 time_put_char_ctor_locinfo(t
, locinfo
, 0);
12122 locale__Locimp__Addfac(locimp
, &t
->facet
, locale_id_operator_size_t(&time_put_char_id
));
12125 if(cat
& (1<<(codecvt_char__Getcat(NULL
, NULL
)-1))) {
12126 codecvt_char
*codecvt
;
12129 codecvt
= codecvt_char_use_facet(loc
);
12131 codecvt
= MSVCRT_operator_new(sizeof(codecvt_char
));
12133 ERR("Out of memory\n");
12134 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12136 codecvt_char_ctor_locinfo(codecvt
, locinfo
, 0);
12138 locale__Locimp__Addfac(locimp
, &codecvt
->base
.facet
, locale_id_operator_size_t(&codecvt_char_id
));
12142 /* ?_Makeloc@_Locimp@locale@std@@CAPAV123@ABV_Locinfo@3@HPAV123@PBV23@@Z */
12143 /* ?_Makeloc@_Locimp@locale@std@@CAPEAV123@AEBV_Locinfo@3@HPEAV123@PEBV23@@Z */
12144 locale__Locimp
* __cdecl
locale__Locimp__Makeloc(const _Locinfo
*locinfo
, category cat
, locale__Locimp
*locimp
, const locale
*loc
)
12146 TRACE("(%p %d %p %p)\n", locinfo
, cat
, locimp
, loc
);
12148 locale__Locimp__Makexloc(locinfo
, cat
, locimp
, loc
);
12149 locale__Locimp__Makewloc(locinfo
, cat
, locimp
, loc
);
12150 locale__Locimp__Makeushloc(locinfo
, cat
, locimp
, loc
);
12152 locimp
->catmask
|= cat
;
12153 locale_string_char_assign(&locimp
->name
, &locinfo
->newlocname
);
12157 /* ??0locale@std@@AAE@PAV_Locimp@01@@Z */
12158 /* ??0locale@std@@AEAA@PEAV_Locimp@01@@Z */
12159 DEFINE_THISCALL_WRAPPER(locale_ctor_locimp
, 8)
12160 locale
* __thiscall
locale_ctor_locimp(locale
*this, locale__Locimp
*locimp
)
12162 TRACE("(%p %p)\n", this, locimp
);
12163 /* Don't change locimp reference counter */
12164 this->ptr
= locimp
;
12168 /* ?_Init@locale@std@@CAPAV_Locimp@12@XZ */
12169 /* ?_Init@locale@std@@CAPEAV_Locimp@12@XZ */
12170 locale__Locimp
* __cdecl
locale__Init(void)
12176 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
12177 if(global_locale
) {
12178 _Lockit_dtor(&lock
);
12179 return global_locale
;
12182 global_locale
= MSVCRT_operator_new(sizeof(locale__Locimp
));
12183 if(!global_locale
) {
12184 _Lockit_dtor(&lock
);
12185 ERR("Out of memory\n");
12186 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12190 locale__Locimp_ctor(global_locale
);
12191 global_locale
->catmask
= (1<<(LC_MAX
+1))-1;
12192 locale_string_char_dtor(&global_locale
->name
);
12193 locale_string_char_ctor_cstr(&global_locale
->name
, "C");
12195 locale__Locimp__Clocptr
= global_locale
;
12196 global_locale
->facet
.refs
++;
12197 locale_ctor_locimp(&classic_locale
, locale__Locimp__Clocptr
);
12198 _Lockit_dtor(&lock
);
12200 return global_locale
;
12203 /* ?_Init@locale@std@@CAPAV_Locimp@12@_N@Z */
12204 /* ?_Init@locale@std@@CAPEAV_Locimp@12@_N@Z */
12205 locale__Locimp
* __cdecl
locale__Init_ref(MSVCP_bool inc_ref
)
12207 locale__Locimp
*ret
;
12210 TRACE("(%x)\n", inc_ref
);
12212 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
12213 if(inc_ref
&& global_locale
) {
12214 call_locale_facet__Incref(&global_locale
->facet
);
12215 _Lockit_dtor(&lock
);
12216 return global_locale
;
12219 ret
= locale__Init();
12220 _Lockit_dtor(&lock
);
12224 /* ?_Iscloc@locale@std@@QBE_NXZ */
12225 /* ?_Iscloc@locale@std@@QEBA_NXZ */
12226 DEFINE_THISCALL_WRAPPER(locale__Iscloc
, 4)
12227 MSVCP_bool __thiscall
locale__Iscloc(const locale
*this)
12229 TRACE("(%p)\n", this);
12230 return this->ptr
== locale__Locimp__Clocptr
;
12233 /* ??0locale@std@@QAE@ABV01@0H@Z */
12234 /* ??0locale@std@@QEAA@AEBV01@0H@Z */
12235 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_locale
, 16)
12236 locale
* __thiscall
locale_ctor_locale_locale(locale
*this, const locale
*loc
, const locale
*other
, category cat
)
12240 TRACE("(%p %p %p %d)\n", this, loc
, other
, cat
);
12242 this->ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
12244 ERR("Out of memory\n");
12245 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12247 locale__Locimp_copy_ctor(this->ptr
, loc
->ptr
);
12249 _Locinfo_ctor_cat_cstr(&locinfo
, loc
->ptr
->catmask
, locale_string_char_c_str(&loc
->ptr
->name
));
12250 _Locinfo__Addcats(&locinfo
, cat
& other
->ptr
->catmask
, locale_string_char_c_str(&other
->ptr
->name
));
12251 locale__Locimp__Makeloc(&locinfo
, cat
, this->ptr
, other
);
12252 _Locinfo_dtor(&locinfo
);
12257 /* ??0locale@std@@QAE@ABV01@@Z */
12258 /* ??0locale@std@@QEAA@AEBV01@@Z */
12259 DEFINE_THISCALL_WRAPPER(locale_copy_ctor
, 8)
12260 locale
* __thiscall
locale_copy_ctor(locale
*this, const locale
*copy
)
12262 TRACE("(%p %p)\n", this, copy
);
12263 this->ptr
= copy
->ptr
;
12264 call_locale_facet__Incref(&this->ptr
->facet
);
12268 /* ??0locale@std@@QAE@ABV01@PBDH@Z */
12269 /* ??0locale@std@@QEAA@AEBV01@PEBDH@Z */
12270 DEFINE_THISCALL_WRAPPER(locale_ctor_locale_cstr
, 16)
12271 locale
* __thiscall
locale_ctor_locale_cstr(locale
*this, const locale
*loc
, const char *locname
, category cat
)
12275 TRACE("(%p %p %s %d)\n", this, loc
, locname
, cat
);
12277 _Locinfo_ctor_cat_cstr(&locinfo
, cat
, locname
);
12278 if(!memcmp(locale_string_char_c_str(&locinfo
.newlocname
), "*", 2)) {
12279 _Locinfo_dtor(&locinfo
);
12280 MSVCRT_operator_delete(this->ptr
);
12281 throw_exception(EXCEPTION_RUNTIME_ERROR
, "bad locale name");
12284 this->ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
12286 ERR("Out of memory\n");
12287 _Locinfo_dtor(&locinfo
);
12288 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12290 locale__Locimp_copy_ctor(this->ptr
, loc
->ptr
);
12292 locale__Locimp__Makeloc(&locinfo
, cat
, this->ptr
, NULL
);
12293 _Locinfo_dtor(&locinfo
);
12297 /* ??0locale@std@@QAE@PBDH@Z */
12298 /* ??0locale@std@@QEAA@PEBDH@Z */
12299 DEFINE_THISCALL_WRAPPER(locale_ctor_cstr
, 12)
12300 locale
* __thiscall
locale_ctor_cstr(locale
*this, const char *locname
, category cat
)
12304 TRACE("(%p %s %d)\n", this, locname
, cat
);
12306 this->ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
12308 ERR("Out of memory\n");
12309 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12311 locale__Locimp_ctor(this->ptr
);
12315 _Locinfo_ctor_cat_cstr(&locinfo
, cat
, locname
);
12316 if(!memcmp(locale_string_char_c_str(&locinfo
.newlocname
), "*", 2)) {
12317 _Locinfo_dtor(&locinfo
);
12318 MSVCRT_operator_delete(this->ptr
);
12319 throw_exception(EXCEPTION_RUNTIME_ERROR
, "bad locale name");
12322 locale__Locimp__Makeloc(&locinfo
, cat
, this->ptr
, NULL
);
12323 _Locinfo_dtor(&locinfo
);
12328 /* ??0locale@std@@QAE@W4_Uninitialized@1@@Z */
12329 /* ??0locale@std@@QEAA@W4_Uninitialized@1@@Z */
12330 DEFINE_THISCALL_WRAPPER(locale_ctor_uninitialized
, 8)
12331 locale
* __thiscall
locale_ctor_uninitialized(locale
*this, int uninitialized
)
12333 TRACE("(%p)\n", this);
12338 /* ??0locale@std@@QAE@XZ */
12339 /* ??0locale@std@@QEAA@XZ */
12340 DEFINE_THISCALL_WRAPPER(locale_ctor
, 4)
12341 locale
* __thiscall
locale_ctor(locale
*this)
12343 TRACE("(%p)\n", this);
12344 this->ptr
= locale__Init();
12345 call_locale_facet__Incref(&this->ptr
->facet
);
12349 /* ??1locale@std@@QAE@XZ */
12350 /* ??1locale@std@@QEAA@XZ */
12351 DEFINE_THISCALL_WRAPPER(locale_dtor
, 4)
12352 void __thiscall
locale_dtor(locale
*this)
12354 TRACE("(%p)\n", this);
12355 if(this->ptr
&& call_locale_facet__Decref(&this->ptr
->facet
))
12357 locale__Locimp_dtor(this->ptr
);
12358 MSVCRT_operator_delete(this->ptr
);
12362 /* ??4locale@std@@QAEAAV01@ABV01@@Z */
12363 /* ??4locale@std@@QEAAAEAV01@AEBV01@@Z */
12364 DEFINE_THISCALL_WRAPPER(locale_operator_assign
, 8)
12365 locale
* __thiscall
locale_operator_assign(locale
*this, const locale
*loc
)
12367 FIXME("(%p %p) stub\n", this, loc
);
12371 /* ??8locale@std@@QBE_NABV01@@Z */
12372 /* ??8locale@std@@QEBA_NAEBV01@@Z */
12373 DEFINE_THISCALL_WRAPPER(locale_operator_equal
, 8)
12374 MSVCP_bool __thiscall
locale_operator_equal(const locale
*this, const locale
*loc
)
12376 FIXME("(%p %p) stub\n", this, loc
);
12380 /* ??9locale@std@@QBE_NABV01@@Z */
12381 /* ??9locale@std@@QEBA_NAEBV01@@Z */
12382 DEFINE_THISCALL_WRAPPER(locale_operator_not_equal
, 8)
12383 MSVCP_bool __thiscall
locale_operator_not_equal(const locale
*this, locale
const *loc
)
12385 FIXME("(%p %p) stub\n", this, loc
);
12389 /* ?_Addfac@locale@std@@QAEAAV12@PAVfacet@12@II@Z */
12390 /* ?_Addfac@locale@std@@QEAAAEAV12@PEAVfacet@12@_K1@Z */
12391 DEFINE_THISCALL_WRAPPER(locale__Addfac
, 16)
12392 locale
* __thiscall
locale__Addfac(locale
*this, locale_facet
*facet
, MSVCP_size_t id
, MSVCP_size_t catmask
)
12394 TRACE("(%p %p %lu %lu)\n", this, facet
, id
, catmask
);
12396 if(this->ptr
->facet
.refs
> 1) {
12397 locale__Locimp
*new_ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
12399 ERR("Out of memory\n");
12400 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12403 locale__Locimp_copy_ctor(new_ptr
, this->ptr
);
12404 call_locale_facet__Decref(&this->ptr
->facet
);
12405 this->ptr
= new_ptr
;
12408 locale__Locimp__Addfac(this->ptr
, facet
, id
);
12411 locale_string_char_dtor(&this->ptr
->name
);
12412 locale_string_char_ctor_cstr(&this->ptr
->name
, "*");
12417 /* ?_Getfacet@locale@std@@QBEPBVfacet@12@I_N@Z */
12418 /* ?_Getfacet@locale@std@@QEBAPEBVfacet@12@_K_N@Z */
12419 DEFINE_THISCALL_WRAPPER(locale__Getfacet_bool
, 12)
12420 const locale_facet
* __thiscall
locale__Getfacet_bool(const locale
*this,
12421 MSVCP_size_t id
, MSVCP_bool allow_transparent
)
12425 TRACE("(%p %lu)\n", this, id
);
12427 fac
= id
< this->ptr
->facet_cnt
? this->ptr
->facetvec
[id
] : NULL
;
12428 if(fac
|| !this->ptr
->transparent
|| !allow_transparent
)
12431 return id
< global_locale
->facet_cnt
? global_locale
->facetvec
[id
] : NULL
;
12434 /* ?_Getfacet@locale@std@@QBEPBVfacet@12@I@Z */
12435 /* ?_Getfacet@locale@std@@QEBAPEBVfacet@12@_K@Z */
12436 DEFINE_THISCALL_WRAPPER(locale__Getfacet
, 8)
12437 const locale_facet
* __thiscall
locale__Getfacet(const locale
*this, MSVCP_size_t id
)
12439 return locale__Getfacet_bool( this, id
, TRUE
);
12442 /* ?_Getgloballocale@locale@std@@CAPAV_Locimp@12@XZ */
12443 /* ?_Getgloballocale@locale@std@@CAPEAV_Locimp@12@XZ */
12444 locale__Locimp
* __cdecl
locale__Getgloballocale(void)
12447 return global_locale
;
12450 /* ?_Setgloballocale@locale@std@@CAXPAX@Z */
12451 /* ?_Setgloballocale@locale@std@@CAXPEAX@Z */
12452 void __cdecl
locale__Setgloballocale(void *locimp
)
12454 TRACE("(%p)\n", locimp
);
12455 global_locale
= locimp
;
12458 /* ?classic@locale@std@@SAABV12@XZ */
12459 /* ?classic@locale@std@@SAAEBV12@XZ */
12460 const locale
* __cdecl
locale_classic(void)
12464 return &classic_locale
;
12467 /* ?empty@locale@std@@SA?AV12@XZ */
12468 locale
* __cdecl
locale_empty(locale
*ret
)
12474 ret
->ptr
= MSVCRT_operator_new(sizeof(locale__Locimp
));
12476 ERR("Out of memory\n");
12477 throw_exception(EXCEPTION_BAD_ALLOC
, NULL
);
12479 locale__Locimp_ctor_transparent(ret
->ptr
, TRUE
);
12483 /* ?global@locale@std@@SA?AV12@ABV12@@Z */
12484 /* ?global@locale@std@@SA?AV12@AEBV12@@Z */
12485 locale
* __cdecl
locale_global(locale
*ret
, const locale
*loc
)
12490 TRACE("(%p %p)\n", loc
, ret
);
12492 _Lockit_ctor_locktype(&lock
, _LOCK_LOCALE
);
12495 if(loc
->ptr
!= global_locale
) {
12496 call_locale_facet__Decref(&global_locale
->facet
);
12497 global_locale
= loc
->ptr
;
12498 call_locale_facet__Incref(&global_locale
->facet
);
12500 for(i
=LC_ALL
+1; i
<=LC_MAX
; i
++) {
12501 if((global_locale
->catmask
& (1<<(i
-1))) == 0)
12503 setlocale(i
, locale_string_char_c_str(&global_locale
->name
));
12506 _Lockit_dtor(&lock
);
12510 #if _MSVCP_VER < 100
12512 /* ?_Getname@_Locinfo@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
12513 /* ?_Getname@_Locinfo@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
12514 DEFINE_THISCALL_WRAPPER(_Locinfo__Getname
, 8)
12515 basic_string_char
* __thiscall
_Locinfo__Getname(const _Locinfo
*this, basic_string_char
*ret
)
12517 TRACE("(%p)\n", this);
12519 MSVCP_basic_string_char_copy_ctor(ret
, &this->newlocname
);
12523 /* ?name@locale@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
12524 /* ?name@locale@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
12525 DEFINE_THISCALL_WRAPPER(locale_name
, 8)
12526 basic_string_char
* __thiscall
locale_name(const locale
*this, basic_string_char
*ret
)
12528 TRACE( "(%p)\n", this);
12529 MSVCP_basic_string_char_copy_ctor(ret
, &this->ptr
->name
);
12535 /* ?_Getname@_Locinfo@std@@QBEPBDXZ */
12536 /* ?_Getname@_Locinfo@std@@QEBAPEBDXZ */
12537 DEFINE_THISCALL_WRAPPER(_Locinfo__Getname
, 4)
12538 const char * __thiscall
_Locinfo__Getname( const _Locinfo
*this )
12540 return locale_string_char_c_str( &this->newlocname
);
12543 #endif /* _MSVCP_VER < 100 */
12546 wctrans_t __cdecl
wctrans(const char *property
)
12548 static const char str_tolower
[] = "tolower";
12549 static const char str_toupper
[] = "toupper";
12551 if(!strcmp(property
, str_tolower
))
12553 if(!strcmp(property
, str_toupper
))
12559 wint_t __cdecl
towctrans(wint_t c
, wctrans_t category
)
12562 return towupper(c
);
12563 return towlower(c
);
12566 #if _MSVCP_VER <= 71
12568 wint_t __cdecl
btowc(int c
)
12574 if (c
== EOF
|| _Mbrtowc( &ret
, &ch
, 1, &state
, NULL
) != 1) return WEOF
;
12579 size_t __cdecl
mbrlen(const char *str
, size_t n
, mbstate_t *state
)
12581 static int local_state
;
12583 if (!state
) state
= &local_state
;
12584 return _Mbrtowc( NULL
, str
, n
, state
, NULL
);
12588 size_t __cdecl
mbrtowc(wchar_t *dst
, const char *str
, size_t n
, mbstate_t *state
)
12590 static int local_state
;
12592 if (!state
) state
= &local_state
;
12593 return _Mbrtowc( dst
, str
, n
, state
, NULL
);
12597 size_t __cdecl
mbsrtowcs(wchar_t *dst
, const char **pstr
, size_t n
, mbstate_t *state
)
12599 static int local_state
;
12605 if (!state
) state
= &local_state
;
12607 while (!dst
|| n
> ret
)
12609 int len
= _Mbrtowc( &wc
, src
, 2, state
, NULL
);
12610 if (len
< 0) return -1;
12612 if (dst
) dst
[ret
] = wc
;
12621 int __cdecl
wctob(wint_t wc
)
12623 char ret
[MB_LEN_MAX
];
12625 if (wc
== WEOF
|| _Wcrtomb( ret
, wc
, NULL
, NULL
) != 1) return EOF
;
12630 size_t __cdecl
wcrtomb(char *dst
, wchar_t wc
, mbstate_t *state
)
12632 return _Wcrtomb( dst
, wc
, state
, NULL
);
12636 size_t __cdecl
wcsrtombs(char *dst
, const wchar_t **pstr
, size_t n
, mbstate_t *state
)
12638 const wchar_t *src
;
12639 char buffer
[MB_LEN_MAX
];
12644 while (!dst
|| n
> ret
)
12646 int len
= _Wcrtomb( buffer
, *src
, state
, NULL
);
12647 if (len
<= 0) return -1;
12648 if (n
< ret
+ len
) break;
12649 memcpy( dst
+ ret
, buffer
, len
);
12651 if (!buffer
[0]) break;
12658 int __cdecl
_To_byte(const wchar_t *src
, char *dst
)
12660 TRACE("(%s %p)\n", debugstr_w(src
), dst
);
12661 return WideCharToMultiByte(CP_ACP
, 0, src
, -1, dst
, MAX_PATH
, NULL
, NULL
);
12664 int __cdecl
_To_wide(const char *src
, wchar_t *dst
)
12666 TRACE("(%s %p)\n", debugstr_a(src
), dst
);
12667 return MultiByteToWideChar(CP_ACP
, 0, src
, -1, dst
, MAX_PATH
);
12670 DEFINE_RTTI_DATA0(_Facet_base
, 0, ".?AV_Facet_base@std@@")
12671 DEFINE_RTTI_DATA0(locale_facet
, 0, ".?AVfacet@locale@std@@")
12672 DEFINE_RTTI_DATA1(locale__Locimp
, 0, &locale_facet_rtti_base_descriptor
, ".?AV_Locimp@locale@std@@")
12673 DEFINE_RTTI_DATA1(collate_char
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@D@std@@")
12674 DEFINE_RTTI_DATA1(collate_wchar
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@_W@std@@")
12675 DEFINE_RTTI_DATA1(collate_short
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$collate@G@std@@")
12676 DEFINE_RTTI_DATA1(ctype_base
, 0, &locale_facet_rtti_base_descriptor
, ".?AUctype_base@std@@")
12677 DEFINE_RTTI_DATA2(ctype_char
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@D@std@@")
12678 DEFINE_RTTI_DATA2(ctype_wchar
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@_W@std@@")
12679 DEFINE_RTTI_DATA2(ctype_short
, 0, &ctype_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$ctype@G@std@@")
12680 DEFINE_RTTI_DATA1(codecvt_base
, 0, &locale_facet_rtti_base_descriptor
, ".?AVcodecvt_base@std@@")
12681 #if _MSVCP_VER >= 140
12682 DEFINE_RTTI_DATA2(codecvt_char
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@DDU_Mbstatet@@@std@@")
12683 DEFINE_RTTI_DATA2(codecvt_wchar
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@_WDU_Mbstatet@@@std@@")
12684 DEFINE_RTTI_DATA2(codecvt_short
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@GDU_Mbstatet@@@std@@")
12686 DEFINE_RTTI_DATA2(codecvt_char
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@DDH@std@@")
12687 DEFINE_RTTI_DATA2(codecvt_wchar
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@_WDH@std@@")
12688 DEFINE_RTTI_DATA2(codecvt_short
, 0, &codecvt_base_rtti_base_descriptor
, &locale_facet_rtti_base_descriptor
, ".?AV?$codecvt@GDH@std@@")
12690 DEFINE_RTTI_DATA1(numpunct_char
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@D@std@@")
12691 DEFINE_RTTI_DATA1(numpunct_wchar
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@_W@std@@")
12692 DEFINE_RTTI_DATA1(numpunct_short
, 0, &locale_facet_rtti_base_descriptor
, ".?AV?$numpunct@G@std@@")
12693 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@@")
12694 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@@")
12695 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@@")
12696 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@@")
12697 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@@")
12698 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@@")
12699 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@@")
12700 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@@")
12701 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@@")
12702 DEFINE_RTTI_DATA1(time_base
, 0, &locale_facet_rtti_base_descriptor
, ".?AUtime_base@std@@")
12703 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@@")
12704 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@@")
12707 void __asm_dummy_vtables(void) {
12709 __ASM_VTABLE(_Facet_base
,
12710 VTABLE_ADD_FUNC(locale_facet_vector_dtor
)
12711 VTABLE_ADD_FUNC(locale_facet__Incref
)
12712 VTABLE_ADD_FUNC(locale_facet__Incref
)
12714 __ASM_VTABLE(locale_facet
,
12715 VTABLE_ADD_FUNC(locale_facet_vector_dtor
)
12716 #if _MSVCP_VER >= 110
12717 VTABLE_ADD_FUNC(locale_facet__Incref
)
12718 VTABLE_ADD_FUNC(locale_facet__Decref
)
12721 __ASM_VTABLE(locale__Locimp
,
12722 VTABLE_ADD_FUNC(locale__Locimp_vector_dtor
)
12723 #if _MSVCP_VER >= 110
12724 VTABLE_ADD_FUNC(locale_facet__Incref
)
12725 VTABLE_ADD_FUNC(locale_facet__Decref
)
12728 __ASM_VTABLE(collate_char
,
12729 VTABLE_ADD_FUNC(collate_char_vector_dtor
)
12730 #if _MSVCP_VER >= 110
12731 VTABLE_ADD_FUNC(locale_facet__Incref
)
12732 VTABLE_ADD_FUNC(locale_facet__Decref
)
12734 VTABLE_ADD_FUNC(collate_char_do_compare
)
12735 VTABLE_ADD_FUNC(collate_char_do_transform
)
12736 VTABLE_ADD_FUNC(collate_char_do_hash
));
12737 __ASM_VTABLE(collate_wchar
,
12738 VTABLE_ADD_FUNC(collate_wchar_vector_dtor
)
12739 #if _MSVCP_VER >= 110
12740 VTABLE_ADD_FUNC(locale_facet__Incref
)
12741 VTABLE_ADD_FUNC(locale_facet__Decref
)
12743 VTABLE_ADD_FUNC(collate_wchar_do_compare
)
12744 VTABLE_ADD_FUNC(collate_wchar_do_transform
)
12745 VTABLE_ADD_FUNC(collate_wchar_do_hash
));
12746 __ASM_VTABLE(collate_short
,
12747 VTABLE_ADD_FUNC(collate_wchar_vector_dtor
)
12748 #if _MSVCP_VER >= 110
12749 VTABLE_ADD_FUNC(locale_facet__Incref
)
12750 VTABLE_ADD_FUNC(locale_facet__Decref
)
12752 VTABLE_ADD_FUNC(collate_wchar_do_compare
)
12753 VTABLE_ADD_FUNC(collate_wchar_do_transform
)
12754 VTABLE_ADD_FUNC(collate_wchar_do_hash
));
12755 __ASM_VTABLE(ctype_base
,
12756 VTABLE_ADD_FUNC(ctype_base_vector_dtor
)
12757 #if _MSVCP_VER >= 110
12758 VTABLE_ADD_FUNC(locale_facet__Incref
)
12759 VTABLE_ADD_FUNC(locale_facet__Decref
)
12762 __ASM_VTABLE(ctype_char
,
12763 VTABLE_ADD_FUNC(ctype_char_vector_dtor
)
12764 #if _MSVCP_VER >= 110
12765 VTABLE_ADD_FUNC(locale_facet__Incref
)
12766 VTABLE_ADD_FUNC(locale_facet__Decref
)
12768 VTABLE_ADD_FUNC(ctype_char_do_tolower
)
12769 VTABLE_ADD_FUNC(ctype_char_do_tolower_ch
)
12770 VTABLE_ADD_FUNC(ctype_char_do_toupper
)
12771 VTABLE_ADD_FUNC(ctype_char_do_toupper_ch
)
12772 VTABLE_ADD_FUNC(ctype_char_do_widen
)
12773 VTABLE_ADD_FUNC(ctype_char_do_widen_ch
)
12774 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
12775 VTABLE_ADD_FUNC(ctype_char__Do_widen_s
)
12776 VTABLE_ADD_FUNC(ctype_char_do_narrow
)
12777 VTABLE_ADD_FUNC(ctype_char_do_narrow_ch
)
12778 VTABLE_ADD_FUNC(ctype_char__Do_narrow_s
)
12780 VTABLE_ADD_FUNC(ctype_char_do_narrow
)
12781 VTABLE_ADD_FUNC(ctype_char_do_narrow_ch
)
12784 __ASM_VTABLE(ctype_wchar
,
12785 VTABLE_ADD_FUNC(ctype_wchar_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(ctype_wchar_do_is
)
12791 VTABLE_ADD_FUNC(ctype_wchar_do_is_ch
)
12792 VTABLE_ADD_FUNC(ctype_wchar_do_scan_is
)
12793 VTABLE_ADD_FUNC(ctype_wchar_do_scan_not
)
12794 VTABLE_ADD_FUNC(ctype_wchar_do_tolower
)
12795 VTABLE_ADD_FUNC(ctype_wchar_do_tolower_ch
)
12796 VTABLE_ADD_FUNC(ctype_wchar_do_toupper
)
12797 VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch
)
12798 VTABLE_ADD_FUNC(ctype_wchar_do_widen
)
12799 VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch
)
12800 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
12801 VTABLE_ADD_FUNC(ctype_wchar__Do_widen_s
)
12802 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
12803 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
)
12804 VTABLE_ADD_FUNC(ctype_wchar__Do_narrow_s
)
12806 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
12807 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
)
12810 __ASM_VTABLE(ctype_short
,
12811 VTABLE_ADD_FUNC(ctype_wchar_vector_dtor
)
12812 #if _MSVCP_VER >= 110
12813 VTABLE_ADD_FUNC(locale_facet__Incref
)
12814 VTABLE_ADD_FUNC(locale_facet__Decref
)
12816 VTABLE_ADD_FUNC(ctype_wchar_do_is
)
12817 VTABLE_ADD_FUNC(ctype_wchar_do_is_ch
)
12818 VTABLE_ADD_FUNC(ctype_wchar_do_scan_is
)
12819 VTABLE_ADD_FUNC(ctype_wchar_do_scan_not
)
12820 VTABLE_ADD_FUNC(ctype_wchar_do_tolower
)
12821 VTABLE_ADD_FUNC(ctype_wchar_do_tolower_ch
)
12822 VTABLE_ADD_FUNC(ctype_wchar_do_toupper
)
12823 VTABLE_ADD_FUNC(ctype_wchar_do_toupper_ch
)
12824 VTABLE_ADD_FUNC(ctype_wchar_do_widen
)
12825 VTABLE_ADD_FUNC(ctype_wchar_do_widen_ch
)
12826 #if _MSVCP_VER >= 80 && _MSVCP_VER <= 90
12827 VTABLE_ADD_FUNC(ctype_wchar__Do_widen_s
)
12828 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
12829 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
)
12830 VTABLE_ADD_FUNC(ctype_wchar__Do_narrow_s
)
12832 VTABLE_ADD_FUNC(ctype_wchar_do_narrow
)
12833 VTABLE_ADD_FUNC(ctype_wchar_do_narrow_ch
)
12836 __ASM_VTABLE(codecvt_base
,
12837 VTABLE_ADD_FUNC(codecvt_base_vector_dtor
)
12838 #if _MSVCP_VER >= 110
12839 VTABLE_ADD_FUNC(locale_facet__Incref
)
12840 VTABLE_ADD_FUNC(locale_facet__Decref
)
12842 VTABLE_ADD_FUNC(codecvt_base_do_always_noconv
)
12843 VTABLE_ADD_FUNC(codecvt_base_do_max_length
)
12844 VTABLE_ADD_FUNC(codecvt_base_do_encoding
));
12845 __ASM_VTABLE(codecvt_char
,
12846 VTABLE_ADD_FUNC(codecvt_char_vector_dtor
)
12847 #if _MSVCP_VER >= 110
12848 VTABLE_ADD_FUNC(locale_facet__Incref
)
12849 VTABLE_ADD_FUNC(locale_facet__Decref
)
12850 VTABLE_ADD_FUNC(codecvt_char_do_always_noconv
)
12852 VTABLE_ADD_FUNC(codecvt_base_do_always_noconv
)
12854 VTABLE_ADD_FUNC(codecvt_base_do_max_length
)
12855 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
12856 VTABLE_ADD_FUNC(codecvt_char_do_in
)
12857 VTABLE_ADD_FUNC(codecvt_char_do_out
)
12858 VTABLE_ADD_FUNC(codecvt_char_do_unshift
)
12859 VTABLE_ADD_FUNC(codecvt_char_do_length
));
12860 __ASM_VTABLE(codecvt_wchar
,
12861 VTABLE_ADD_FUNC(codecvt_wchar_vector_dtor
)
12862 #if _MSVCP_VER >= 110
12863 VTABLE_ADD_FUNC(locale_facet__Incref
)
12864 VTABLE_ADD_FUNC(locale_facet__Decref
)
12866 VTABLE_ADD_FUNC(codecvt_wchar_do_always_noconv
)
12867 VTABLE_ADD_FUNC(codecvt_wchar_do_max_length
)
12868 #if _MSVCP_VER >= 90 && _MSVCP_VER <= 100
12869 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
12871 VTABLE_ADD_FUNC(codecvt_wchar_do_encoding
)
12873 VTABLE_ADD_FUNC(codecvt_wchar_do_in
)
12874 VTABLE_ADD_FUNC(codecvt_wchar_do_out
)
12875 VTABLE_ADD_FUNC(codecvt_wchar_do_unshift
)
12876 VTABLE_ADD_FUNC(codecvt_wchar_do_length
));
12877 __ASM_VTABLE(codecvt_short
,
12878 VTABLE_ADD_FUNC(codecvt_wchar_vector_dtor
)
12879 #if _MSVCP_VER >= 110
12880 VTABLE_ADD_FUNC(locale_facet__Incref
)
12881 VTABLE_ADD_FUNC(locale_facet__Decref
)
12883 VTABLE_ADD_FUNC(codecvt_wchar_do_always_noconv
)
12884 VTABLE_ADD_FUNC(codecvt_wchar_do_max_length
)
12885 #if _MSVCP_VER >= 90 && _MSVCP_VER <= 100
12886 VTABLE_ADD_FUNC(codecvt_base_do_encoding
)
12888 VTABLE_ADD_FUNC(codecvt_wchar_do_encoding
)
12890 VTABLE_ADD_FUNC(codecvt_wchar_do_in
)
12891 VTABLE_ADD_FUNC(codecvt_wchar_do_out
)
12892 VTABLE_ADD_FUNC(codecvt_wchar_do_unshift
)
12893 VTABLE_ADD_FUNC(codecvt_wchar_do_length
));
12894 __ASM_VTABLE(numpunct_char
,
12895 VTABLE_ADD_FUNC(numpunct_char_vector_dtor
)
12896 #if _MSVCP_VER >= 110
12897 VTABLE_ADD_FUNC(locale_facet__Incref
)
12898 VTABLE_ADD_FUNC(locale_facet__Decref
)
12900 VTABLE_ADD_FUNC(numpunct_char_do_decimal_point
)
12901 VTABLE_ADD_FUNC(numpunct_char_do_thousands_sep
)
12902 VTABLE_ADD_FUNC(numpunct_char_do_grouping
)
12903 VTABLE_ADD_FUNC(numpunct_char_do_falsename
)
12904 VTABLE_ADD_FUNC(numpunct_char_do_truename
));
12905 __ASM_VTABLE(numpunct_wchar
,
12906 VTABLE_ADD_FUNC(numpunct_wchar_vector_dtor
)
12907 #if _MSVCP_VER >= 110
12908 VTABLE_ADD_FUNC(locale_facet__Incref
)
12909 VTABLE_ADD_FUNC(locale_facet__Decref
)
12911 VTABLE_ADD_FUNC(numpunct_wchar_do_decimal_point
)
12912 VTABLE_ADD_FUNC(numpunct_wchar_do_thousands_sep
)
12913 VTABLE_ADD_FUNC(numpunct_wchar_do_grouping
)
12914 VTABLE_ADD_FUNC(numpunct_wchar_do_falsename
)
12915 VTABLE_ADD_FUNC(numpunct_wchar_do_truename
));
12916 __ASM_VTABLE(numpunct_short
,
12917 VTABLE_ADD_FUNC(numpunct_wchar_vector_dtor
)
12918 #if _MSVCP_VER >= 110
12919 VTABLE_ADD_FUNC(locale_facet__Incref
)
12920 VTABLE_ADD_FUNC(locale_facet__Decref
)
12922 VTABLE_ADD_FUNC(numpunct_wchar_do_decimal_point
)
12923 VTABLE_ADD_FUNC(numpunct_wchar_do_thousands_sep
)
12924 VTABLE_ADD_FUNC(numpunct_wchar_do_grouping
)
12925 VTABLE_ADD_FUNC(numpunct_wchar_do_falsename
)
12926 VTABLE_ADD_FUNC(numpunct_wchar_do_truename
));
12927 __ASM_VTABLE(num_get_char
,
12928 VTABLE_ADD_FUNC(num_get_char_vector_dtor
)
12929 #if _MSVCP_VER >= 110
12930 VTABLE_ADD_FUNC(locale_facet__Incref
)
12931 VTABLE_ADD_FUNC(locale_facet__Decref
)
12933 VTABLE_ADD_FUNC(num_get_char_do_get_void
)
12934 VTABLE_ADD_FUNC(num_get_char_do_get_double
)
12935 VTABLE_ADD_FUNC(num_get_char_do_get_double
)
12936 VTABLE_ADD_FUNC(num_get_char_do_get_float
)
12937 VTABLE_ADD_FUNC(num_get_char_do_get_uint64
)
12938 VTABLE_ADD_FUNC(num_get_char_do_get_int64
)
12939 VTABLE_ADD_FUNC(num_get_char_do_get_ulong
)
12940 VTABLE_ADD_FUNC(num_get_char_do_get_long
)
12941 VTABLE_ADD_FUNC(num_get_char_do_get_uint
)
12942 VTABLE_ADD_FUNC(num_get_char_do_get_ushort
)
12943 VTABLE_ADD_FUNC(num_get_char_do_get_bool
));
12944 __ASM_VTABLE(num_get_short
,
12945 VTABLE_ADD_FUNC(num_get_wchar_vector_dtor
)
12946 #if _MSVCP_VER >= 110
12947 VTABLE_ADD_FUNC(locale_facet__Incref
)
12948 VTABLE_ADD_FUNC(locale_facet__Decref
)
12950 VTABLE_ADD_FUNC(num_get_short_do_get_void
)
12951 VTABLE_ADD_FUNC(num_get_short_do_get_double
)
12952 VTABLE_ADD_FUNC(num_get_short_do_get_double
)
12953 VTABLE_ADD_FUNC(num_get_short_do_get_float
)
12954 VTABLE_ADD_FUNC(num_get_short_do_get_uint64
)
12955 VTABLE_ADD_FUNC(num_get_short_do_get_int64
)
12956 VTABLE_ADD_FUNC(num_get_short_do_get_ulong
)
12957 VTABLE_ADD_FUNC(num_get_short_do_get_long
)
12958 VTABLE_ADD_FUNC(num_get_short_do_get_uint
)
12959 VTABLE_ADD_FUNC(num_get_short_do_get_ushort
)
12960 VTABLE_ADD_FUNC(num_get_short_do_get_bool
));
12961 __ASM_VTABLE(num_get_wchar
,
12962 VTABLE_ADD_FUNC(num_get_wchar_vector_dtor
)
12963 #if _MSVCP_VER >= 110
12964 VTABLE_ADD_FUNC(locale_facet__Incref
)
12965 VTABLE_ADD_FUNC(locale_facet__Decref
)
12967 VTABLE_ADD_FUNC(num_get_wchar_do_get_void
)
12968 VTABLE_ADD_FUNC(num_get_wchar_do_get_double
)
12969 VTABLE_ADD_FUNC(num_get_wchar_do_get_double
)
12970 VTABLE_ADD_FUNC(num_get_wchar_do_get_float
)
12971 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint64
)
12972 VTABLE_ADD_FUNC(num_get_wchar_do_get_int64
)
12973 VTABLE_ADD_FUNC(num_get_wchar_do_get_ulong
)
12974 VTABLE_ADD_FUNC(num_get_wchar_do_get_long
)
12975 VTABLE_ADD_FUNC(num_get_wchar_do_get_uint
)
12976 VTABLE_ADD_FUNC(num_get_wchar_do_get_ushort
)
12977 VTABLE_ADD_FUNC(num_get_wchar_do_get_bool
));
12978 __ASM_VTABLE(num_put_char
,
12979 VTABLE_ADD_FUNC(num_put_char_vector_dtor
)
12980 #if _MSVCP_VER >= 110
12981 VTABLE_ADD_FUNC(locale_facet__Incref
)
12982 VTABLE_ADD_FUNC(locale_facet__Decref
)
12984 VTABLE_ADD_FUNC(num_put_char_do_put_ptr
)
12985 VTABLE_ADD_FUNC(num_put_char_do_put_double
)
12986 VTABLE_ADD_FUNC(num_put_char_do_put_double
)
12987 VTABLE_ADD_FUNC(num_put_char_do_put_uint64
)
12988 VTABLE_ADD_FUNC(num_put_char_do_put_int64
)
12989 VTABLE_ADD_FUNC(num_put_char_do_put_ulong
)
12990 VTABLE_ADD_FUNC(num_put_char_do_put_long
)
12991 VTABLE_ADD_FUNC(num_put_char_do_put_bool
));
12992 __ASM_VTABLE(num_put_wchar
,
12993 VTABLE_ADD_FUNC(num_put_wchar_vector_dtor
)
12994 #if _MSVCP_VER >= 110
12995 VTABLE_ADD_FUNC(locale_facet__Incref
)
12996 VTABLE_ADD_FUNC(locale_facet__Decref
)
12998 VTABLE_ADD_FUNC(num_put_wchar_do_put_ptr
)
12999 VTABLE_ADD_FUNC(num_put_wchar_do_put_double
)
13000 VTABLE_ADD_FUNC(num_put_wchar_do_put_double
)
13001 VTABLE_ADD_FUNC(num_put_wchar_do_put_uint64
)
13002 VTABLE_ADD_FUNC(num_put_wchar_do_put_int64
)
13003 VTABLE_ADD_FUNC(num_put_wchar_do_put_ulong
)
13004 VTABLE_ADD_FUNC(num_put_wchar_do_put_long
)
13005 VTABLE_ADD_FUNC(num_put_wchar_do_put_bool
));
13006 __ASM_VTABLE(num_put_short
,
13007 VTABLE_ADD_FUNC(num_put_wchar_vector_dtor
)
13008 #if _MSVCP_VER >= 110
13009 VTABLE_ADD_FUNC(locale_facet__Incref
)
13010 VTABLE_ADD_FUNC(locale_facet__Decref
)
13012 VTABLE_ADD_FUNC(num_put_short_do_put_ptr
)
13013 VTABLE_ADD_FUNC(num_put_short_do_put_double
)
13014 VTABLE_ADD_FUNC(num_put_short_do_put_double
)
13015 VTABLE_ADD_FUNC(num_put_short_do_put_uint64
)
13016 VTABLE_ADD_FUNC(num_put_short_do_put_int64
)
13017 VTABLE_ADD_FUNC(num_put_short_do_put_ulong
)
13018 VTABLE_ADD_FUNC(num_put_short_do_put_long
)
13019 VTABLE_ADD_FUNC(num_put_short_do_put_bool
));
13020 __ASM_VTABLE(time_put_char
,
13021 VTABLE_ADD_FUNC(time_put_char_vector_dtor
)
13022 #if _MSVCP_VER >= 110
13023 VTABLE_ADD_FUNC(locale_facet__Incref
)
13024 VTABLE_ADD_FUNC(locale_facet__Decref
)
13026 VTABLE_ADD_FUNC(time_put_char_do_put
));
13027 __ASM_VTABLE(time_put_wchar
,
13028 VTABLE_ADD_FUNC(time_put_wchar_vector_dtor
)
13029 #if _MSVCP_VER >= 110
13030 VTABLE_ADD_FUNC(locale_facet__Incref
)
13031 VTABLE_ADD_FUNC(locale_facet__Decref
)
13033 VTABLE_ADD_FUNC(time_put_wchar_do_put
));
13034 __ASM_VTABLE(time_put_short
,
13035 VTABLE_ADD_FUNC(time_put_wchar_vector_dtor
)
13036 #if _MSVCP_VER >= 110
13037 VTABLE_ADD_FUNC(locale_facet__Incref
)
13038 VTABLE_ADD_FUNC(locale_facet__Decref
)
13040 VTABLE_ADD_FUNC(time_put_wchar_do_put
));
13041 __ASM_VTABLE(time_get_char
,
13042 VTABLE_ADD_FUNC(time_get_char_vector_dtor
)
13043 #if _MSVCP_VER >= 110
13044 VTABLE_ADD_FUNC(locale_facet__Incref
)
13045 VTABLE_ADD_FUNC(locale_facet__Decref
)
13047 VTABLE_ADD_FUNC(time_get_char_do_date_order
)
13048 VTABLE_ADD_FUNC(time_get_char_do_get_time
)
13049 VTABLE_ADD_FUNC(time_get_char_do_get_date
)
13050 VTABLE_ADD_FUNC(time_get_char_do_get_weekday
)
13051 VTABLE_ADD_FUNC(time_get_char_do_get_monthname
)
13052 VTABLE_ADD_FUNC(time_get_char_do_get_year
)
13053 #if _MSVCP_VER >= 100
13054 VTABLE_ADD_FUNC(time_get_char_do_get
)
13057 __ASM_VTABLE(time_get_wchar
,
13058 VTABLE_ADD_FUNC(time_get_wchar_vector_dtor
)
13059 #if _MSVCP_VER >= 110
13060 VTABLE_ADD_FUNC(locale_facet__Incref
)
13061 VTABLE_ADD_FUNC(locale_facet__Decref
)
13063 VTABLE_ADD_FUNC(time_get_wchar_do_date_order
)
13064 VTABLE_ADD_FUNC(time_get_wchar_do_get_time
)
13065 VTABLE_ADD_FUNC(time_get_wchar_do_get_date
)
13066 VTABLE_ADD_FUNC(time_get_wchar_do_get_weekday
)
13067 VTABLE_ADD_FUNC(time_get_wchar_do_get_monthname
)
13068 VTABLE_ADD_FUNC(time_get_wchar_do_get_year
)
13069 #if _MSVCP_VER >= 100
13070 VTABLE_ADD_FUNC(time_get_wchar_do_get
)
13077 void init_locale(void *base
)
13080 init__Facet_base_rtti(base
);
13081 init_locale_facet_rtti(base
);
13082 init_locale__Locimp_rtti(base
);
13083 init_collate_char_rtti(base
);
13084 init_collate_wchar_rtti(base
);
13085 init_collate_short_rtti(base
);
13086 init_ctype_base_rtti(base
);
13087 init_ctype_char_rtti(base
);
13088 init_ctype_wchar_rtti(base
);
13089 init_ctype_short_rtti(base
);
13090 init_codecvt_base_rtti(base
);
13091 init_codecvt_char_rtti(base
);
13092 init_codecvt_wchar_rtti(base
);
13093 init_codecvt_short_rtti(base
);
13094 init_numpunct_char_rtti(base
);
13095 init_numpunct_wchar_rtti(base
);
13096 init_numpunct_short_rtti(base
);
13097 init_num_get_char_rtti(base
);
13098 init_num_get_wchar_rtti(base
);
13099 init_num_get_short_rtti(base
);
13100 init_num_put_char_rtti(base
);
13101 init_num_put_wchar_rtti(base
);
13102 init_num_put_short_rtti(base
);
13103 init_time_put_char_rtti(base
);
13104 init_time_put_wchar_rtti(base
);
13105 init_time_put_short_rtti(base
);
13106 init_time_base_rtti(base
);
13107 init_time_get_char_rtti(base
);
13108 init_time_get_wchar_rtti(base
);
13112 void free_locale(void)
13114 facets_elem
*iter
, *safe
;
13116 if(global_locale
) {
13117 locale_dtor(&classic_locale
);
13118 locale__Locimp_dtor(global_locale
);
13119 MSVCRT_operator_delete(global_locale
);
13122 LIST_FOR_EACH_ENTRY_SAFE(iter
, safe
, &lazy_facets
, facets_elem
, entry
) {
13123 list_remove(&iter
->entry
);
13124 if(call_locale_facet__Decref(iter
->fac
))
13125 call_locale_facet_vector_dtor(iter
->fac
, 1);
13126 MSVCRT_operator_delete(iter
);