From 2f01c45248f150a229723aeb44f96ff82ad76822 Mon Sep 17 00:00:00 2001 From: Piotr Caban <piotr@codeweavers.com> Date: Fri, 14 Sep 2012 12:45:01 +0200 Subject: [PATCH] msvcp100: Remove unused thiscall functions. --- dlls/msvcp100/exception.c | 24 +- dlls/msvcp100/ios.c | 11199 +++++++++++------------------------- dlls/msvcp100/locale.c | 691 +-- dlls/msvcp100/math.c | 12 - dlls/msvcp100/memory.c | 275 +- dlls/msvcp100/msvcp.h | 52 +- dlls/msvcp100/string.c | 3474 +---------- 7 files changed, 3705 insertions(+), 12022 deletions(-) diff --git a/dlls/msvcp100/exception.c b/dlls/msvcp100/exception.c index 55b7cd2ea25..f6e3f50d99f 100644 --- a/dlls/msvcp100/exception.c +++ b/dlls/msvcp100/exception.c @@ -98,8 +98,7 @@ void * __thiscall MSVCP_type_info_vector_dtor(type_info * _this, unsigned int fl DEFINE_RTTI_DATA0( type_info, 0, ".?AVtype_info@@" ); -DEFINE_THISCALL_WRAPPER(MSVCP_exception_ctor, 8) -exception* __thiscall MSVCP_exception_ctor(exception *this, const char **name) +static exception* MSVCP_exception_ctor(exception *this, const char **name) { TRACE("(%p %s)\n", this, *name); @@ -189,8 +188,7 @@ static const cxx_exception_type exception_cxx_type = { /* bad_alloc class data */ typedef exception bad_alloc; -DEFINE_THISCALL_WRAPPER(MSVCP_bad_alloc_ctor, 8) -bad_alloc* __thiscall MSVCP_bad_alloc_ctor(bad_alloc *this, const char **name) +bad_alloc* MSVCP_bad_alloc_ctor(bad_alloc *this, const char **name) { TRACE("%p %s\n", this, *name); MSVCP_exception_ctor(this, name); @@ -273,8 +271,7 @@ typedef struct _logic_error { basic_string_char str; } logic_error; -DEFINE_THISCALL_WRAPPER(MSVCP_logic_error_ctor, 8) -logic_error* __thiscall MSVCP_logic_error_ctor( +static logic_error* MSVCP_logic_error_ctor( logic_error *this, const char **name) { TRACE("%p %s\n", this, *name); @@ -361,8 +358,7 @@ static const cxx_exception_type logic_error_cxx_type = { /* length_error class data */ typedef logic_error length_error; -DEFINE_THISCALL_WRAPPER(MSVCP_length_error_ctor, 8) -length_error* __thiscall MSVCP_length_error_ctor( +static length_error* MSVCP_length_error_ctor( length_error *this, const char **name) { TRACE("%p %s\n", this, *name); @@ -410,8 +406,7 @@ static const cxx_exception_type length_error_cxx_type = { /* out_of_range class data */ typedef logic_error out_of_range; -DEFINE_THISCALL_WRAPPER(MSVCP_out_of_range_ctor, 8) -out_of_range* __thiscall MSVCP_out_of_range_ctor( +static out_of_range* MSVCP_out_of_range_ctor( out_of_range *this, const char **name) { TRACE("%p %s\n", this, *name); @@ -459,8 +454,7 @@ static const cxx_exception_type out_of_range_cxx_type = { /* invalid_argument class data */ typedef logic_error invalid_argument; -DEFINE_THISCALL_WRAPPER(MSVCP_invalid_argument_ctor, 8) -invalid_argument* __thiscall MSVCP_invalid_argument_ctor( +static invalid_argument* MSVCP_invalid_argument_ctor( invalid_argument *this, const char **name) { TRACE("%p %s\n", this, *name); @@ -511,8 +505,7 @@ typedef struct { basic_string_char str; } runtime_error; -DEFINE_THISCALL_WRAPPER(MSVCP_runtime_error_ctor, 8) -runtime_error* __thiscall MSVCP_runtime_error_ctor( +static runtime_error* MSVCP_runtime_error_ctor( runtime_error *this, const char **name) { TRACE("%p %s\n", this, *name); @@ -599,8 +592,7 @@ static const cxx_exception_type runtime_error_cxx_type = { /* failure class data */ typedef runtime_error failure; -DEFINE_THISCALL_WRAPPER(MSVCP_failure_ctor, 8) -failure* __thiscall MSVCP_failure_ctor( +static failure* MSVCP_failure_ctor( failure *this, const char **name) { TRACE("%p %s\n", this, *name); diff --git a/dlls/msvcp100/ios.c b/dlls/msvcp100/ios.c index 59a5f198d53..de67c933697 100644 --- a/dlls/msvcp100/ios.c +++ b/dlls/msvcp100/ios.c @@ -81,28 +81,6 @@ typedef struct { FILE *file; } basic_filebuf_wchar; -typedef enum { - STRINGBUF_allocated = 1, - STRINGBUF_no_write = 2, - STRINGBUF_no_read = 4, - STRINGBUF_append = 8, - STRINGBUF_at_end = 16 -} basic_stringbuf_state; - -typedef struct { - basic_streambuf_char base; - char *seekhigh; - int state; - char allocator; /* empty struct */ -} basic_stringbuf_char; - -typedef struct { - basic_streambuf_wchar base; - wchar_t *seekhigh; - int state; - char allocator; /* empty struct */ -} basic_stringbuf_wchar; - typedef struct { ios_base base; basic_streambuf_char *strbuf; @@ -163,119 +141,6 @@ typedef struct { */ } basic_iostream_wchar; -typedef struct { - basic_ostream_char base; - basic_filebuf_char filebuf; - /* virtual inheritance - * basic_ios_char basic_ios; - */ -} basic_ofstream_char; - -typedef struct { - basic_ostream_wchar base; - basic_filebuf_wchar filebuf; - /* virtual inheritance - * basic_ios_wchar basic_ios; - */ -} basic_ofstream_wchar; - -typedef struct { - basic_istream_char base; - basic_filebuf_char filebuf; - /* virtual inheritance - * basic_ios_char basic_ios; - */ -} basic_ifstream_char; - -typedef struct { - basic_istream_wchar base; - basic_filebuf_wchar filebuf; - /* virtual inheritance - * basic_ios_wchar basic_ios; - */ -} basic_ifstream_wchar; - -typedef struct { - basic_iostream_char base; - basic_filebuf_char filebuf; - /* virtual inheritance - * basic_ios_char basic_ios; - */ -} basic_fstream_char; - -typedef struct { - basic_iostream_wchar base; - basic_filebuf_wchar filebuf; - /* virtual inheritance - * basic_ios_char basic_ios; - */ -} basic_fstream_wchar; - -typedef struct { - basic_ostream_char base; - basic_stringbuf_char strbuf; - /* virtual inheritance - * basic_ios_char basic_ios; - */ -} basic_ostringstream_char; - -typedef struct { - basic_ostream_wchar base; - basic_stringbuf_wchar strbuf; - /* virtual inheritance - * basic_ios_wchar basic_ios; - */ -} basic_ostringstream_wchar; - -typedef struct { - basic_istream_char base; - basic_stringbuf_char strbuf; - /* virtual inheritance - * basic_ios_char basic_ios; - */ -} basic_istringstream_char; - -typedef struct { - basic_istream_wchar base; - basic_stringbuf_wchar strbuf; - /* virtual inheritance - * basic_ios_wchar basic_ios; - */ -} basic_istringstream_wchar; - -typedef struct { - basic_iostream_char base; - basic_stringbuf_char strbuf; - /* virtual inheritance - * basic_ios_char basic_ios; - */ -} basic_stringstream_char; - -typedef struct { - basic_iostream_wchar base; - basic_stringbuf_wchar strbuf; - /* virtual inheritance - * basic_ios_wchar basic_ios; - */ -} basic_stringstream_wchar; - -typedef enum { - STRSTATE_Allocated = 1, - STRSTATE_Constant = 2, - STRSTATE_Dynamic = 4, - STRSTATE_Frozen = 8 -} strstreambuf__Strstate; - -typedef struct { - basic_streambuf_char base; - streamsize minsize; - char *endsave; - char *seekhigh; - int strmode; - void* (__cdecl *palloc)(MSVCP_size_t); - void (__cdecl *pfree)(void*); -} strstreambuf; - extern const vtable_ptr MSVCP_iosb_vtable; /* ??_7ios_base@std@@6B@ */ @@ -308,15 +173,6 @@ extern const vtable_ptr MSVCP_basic_filebuf_wchar_vtable; /* ??_7?$basic_filebuf@GU?$char_traits@G@std@@@std@@6B@ */ extern const vtable_ptr MSVCP_basic_filebuf_short_vtable; -/* ??_7?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_stringbuf_char_vtable; - -/* ??_7?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_stringbuf_wchar_vtable; - -/* ??_7?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_stringbuf_short_vtable; - /* ??_8?$basic_ostream@DU?$char_traits@D@std@@@std@@7B@ */ const int basic_ostream_char_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_ostream_char), 8)}; /* ??_7?$basic_ostream@DU?$char_traits@D@std@@@std@@6B@ */ @@ -365,108 +221,6 @@ extern const vtable_ptr MSVCP_basic_iostream_wchar_vtable; /* ??_7?$basic_iostream@GU?$char_traits@G@std@@@std@@6B@ */ extern const vtable_ptr MSVCP_basic_iostream_short_vtable; -/* ??_8?$basic_ofstream@DU?$char_traits@D@std@@@std@@7B@ */ -const int basic_ofstream_char_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_ofstream_char), 8)}; -/* ??_7?$basic_ofstream@DU?$char_traits@D@std@@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_ofstream_char_vtable; - -/* ??_8?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@7B@ */ -const int basic_ofstream_wchar_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_ofstream_wchar), 8)}; -/* ??_7?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_ofstream_wchar_vtable; - -/* ??_8?$basic_ofstream@GU?$char_traits@G@std@@@std@@7B@ */ -const int basic_ofstream_short_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_ofstream_wchar), 8)}; -/* ??_7?$basic_ofstream@GU?$char_traits@G@std@@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_ofstream_short_vtable; - -/* ??_8?$basic_ifstream@DU?$char_traits@D@std@@@std@@7B@ */ -const int basic_ifstream_char_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_ifstream_char), 8)}; -/* ??_7?$basic_ifstream@DU?$char_traits@D@std@@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_ifstream_char_vtable; - -/* ??_8?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@7B@ */ -const int basic_ifstream_wchar_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_ifstream_wchar), 8)}; -/* ??_7?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_ifstream_wchar_vtable; - -/* ??_8?$basic_ifstream@GU?$char_traits@G@std@@@std@@7B@ */ -const int basic_ifstream_short_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_ifstream_wchar), 8)}; -/* ??_7?$basic_ifstream@GU?$char_traits@G@std@@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_ifstream_short_vtable; - -/* ??_8?$basic_fstream@DU?$char_traits@D@std@@@std@@7B?$basic_istream@DU?$char_traits@D@std@@@1@@ */ -const int basic_fstream_char_vbtable1[] = {0, ALIGNED_SIZE(sizeof(basic_fstream_char), 8)}; -/* ??_8?$basic_fstream@DU?$char_traits@D@std@@@std@@7B?$basic_ostream@DU?$char_traits@D@std@@@1@@ */ -const int basic_fstream_char_vbtable2[] = {0, ALIGNED_SIZE(sizeof(basic_fstream_char), 8)-FIELD_OFFSET(basic_fstream_char, base.base2)}; -/* ??_7?$basic_fstream@DU?$char_traits@D@std@@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_fstream_char_vtable; - -/* ??_8?$basic_fstream@_WU?$char_traits@_W@std@@@std@@7B?$basic_istream@_WU?$char_traits@_W@std@@@1@@ */ -/* ??_8?$basic_fstream@GU?$char_traits@G@std@@@std@@7B?$basic_istream@GU?$char_traits@G@std@@@1@@ */ -const int basic_fstream_wchar_vbtable1[] = {0, ALIGNED_SIZE(sizeof(basic_fstream_wchar), 8)}; -/* ??_8?$basic_fstream@_WU?$char_traits@_W@std@@@std@@7B?$basic_ostream@_WU?$char_traits@_W@std@@@1@@ */ -/* ??_8?$basic_fstream@GU?$char_traits@G@std@@@std@@7B?$basic_ostream@GU?$char_traits@G@std@@@1@@ */ -const int basic_fstream_wchar_vbtable2[] = {0, ALIGNED_SIZE(sizeof(basic_fstream_wchar), 8)-FIELD_OFFSET(basic_fstream_wchar, base.base2)}; -/* ??_7?$basic_fstream@_WU?$char_traits@_W@std@@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_fstream_wchar_vtable; -/* ??_7?$basic_fstream@GU?$char_traits@G@std@@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_fstream_short_vtable; - -/* ??_8?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@7B@ */ -const int basic_ostringstream_char_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_ostringstream_char), 8)}; -/* ??_7?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_ostringstream_char_vtable; - -/* ??_8?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@7B@ */ -const int basic_ostringstream_wchar_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_ostringstream_wchar), 8)}; -/* ??_7?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_ostringstream_wchar_vtable; - -/* ??_8?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@7B@ */ -const int basic_ostringstream_short_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_ostringstream_wchar), 8)}; -/* ??_7?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_ostringstream_short_vtable; - -/* ??_8?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@7B@ */ -const int basic_istringstream_char_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_istringstream_char), 8)}; -/* ??_7?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_istringstream_char_vtable; - -/* ??_8?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@7B@ */ -const int basic_istringstream_wchar_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_istringstream_wchar), 8)}; -/* ??_7?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_istringstream_wchar_vtable; - -/* ??_8?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@7B@ */ -const int basic_istringstream_short_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_istringstream_wchar), 8)}; -/* ??_7?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_istringstream_short_vtable; - -/* ??_8?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@7B?$basic_istream@DU?$char_traits@D@std@@@1@@ */ -const int basic_stringstream_char_vbtable1[] = {0, ALIGNED_SIZE(sizeof(basic_stringstream_char), 8)}; -/* ??_8?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@7B?$basic_ostream@DU?$char_traits@D@std@@@1@@ */ -const int basic_stringstream_char_vbtable2[] = {0, ALIGNED_SIZE(sizeof(basic_stringstream_char), 8)-FIELD_OFFSET(basic_stringstream_char, base.base2)}; -/* ??_7?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_stringstream_char_vtable; - -/* ??_8?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@7B?$basic_istream@_WU?$char_traits@_W@std@@@1@@ */ -const int basic_stringstream_wchar_vbtable1[] = {0, ALIGNED_SIZE(sizeof(basic_stringstream_wchar), 8)}; -/* ??_8?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@7B?$basic_ostream@_WU?$char_traits@_W@std@@@1@@ */ -const int basic_stringstream_wchar_vbtable2[] = {0, ALIGNED_SIZE(sizeof(basic_stringstream_wchar), 8)-FIELD_OFFSET(basic_stringstream_wchar, base.base2)}; -/* ??_7?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_stringstream_wchar_vtable; - -/* ??_8?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@7B?$basic_istream@GU?$char_traits@G@std@@@1@@ */ -const int basic_stringstream_short_vbtable1[] = {0, ALIGNED_SIZE(sizeof(basic_stringstream_wchar), 8)}; -/* ??_8?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@7B?$basic_ostream@GU?$char_traits@G@std@@@1@@ */ -const int basic_stringstream_short_vbtable2[] = {0, ALIGNED_SIZE(sizeof(basic_stringstream_wchar), 8)-FIELD_OFFSET(basic_stringstream_wchar, base.base2)}; -/* ??_7?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@6B@ */ -extern const vtable_ptr MSVCP_basic_stringstream_short_vtable; - -/* ??_7strstreambuf@std@@6B */ -extern const vtable_ptr MSVCP_strstreambuf_vtable; - DEFINE_RTTI_DATA0(iosb, 0, ".?AV?$_Iosb@H@std@@"); DEFINE_RTTI_DATA1(ios_base, 0, &iosb_rtti_base_descriptor, ".?AV?$_Iosb@H@std@@"); DEFINE_RTTI_DATA2(basic_ios_char, 0, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, @@ -487,12 +241,6 @@ DEFINE_RTTI_DATA1(basic_filebuf_wchar, 0, &basic_streambuf_wchar_rtti_base_descr ".?AV?$basic_filebuf@GU?$char_traits@G@std@@@std@@"); DEFINE_RTTI_DATA1(basic_filebuf_short, 0, &basic_streambuf_short_rtti_base_descriptor, ".?AV?$basic_filebuf@DU?$char_traits@D@std@@@std@@"); -DEFINE_RTTI_DATA1(basic_stringbuf_char, 0, &basic_streambuf_char_rtti_base_descriptor, - ".?AV?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@"); -DEFINE_RTTI_DATA1(basic_stringbuf_wchar, 0, &basic_streambuf_wchar_rtti_base_descriptor, - ".?AV?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@"); -DEFINE_RTTI_DATA1(basic_stringbuf_short, 0, &basic_streambuf_short_rtti_base_descriptor, - ".?AV?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@"); DEFINE_RTTI_DATA3(basic_ostream_char, sizeof(basic_ostream_char), &basic_ios_char_rtti_base_descriptor, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, ".?AV?$basic_ostream@DU?$char_traits@D@std@@@std@@"); @@ -529,92 +277,6 @@ DEFINE_RTTI_DATA8(basic_iostream_short, sizeof(basic_iostream_wchar), &basic_ostream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, ".?AV?$basic_iostream@GU?$char_traits@G@std@@@std@@"); -DEFINE_RTTI_DATA4(basic_ofstream_char, sizeof(basic_ofstream_char), - &basic_ostream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - ".?AV?$basic_ofstream@DU?$char_traits@D@std@@@std@@"); -DEFINE_RTTI_DATA4(basic_ofstream_wchar, sizeof(basic_ofstream_wchar), - &basic_ostream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - ".?AV?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@"); -DEFINE_RTTI_DATA4(basic_ofstream_short, sizeof(basic_ofstream_wchar), - &basic_ostream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - ".?AV?$basic_ofstream@GU?$char_traits@G@std@@@std@@"); -DEFINE_RTTI_DATA4(basic_ifstream_char, sizeof(basic_ifstream_char), - &basic_istream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - ".?AV?$basic_ifstream@DU?$char_traits@D@std@@@std@@"); -DEFINE_RTTI_DATA4(basic_ifstream_wchar, sizeof(basic_ifstream_wchar), - &basic_istream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - ".?AV?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@"); -DEFINE_RTTI_DATA4(basic_ifstream_short, sizeof(basic_ifstream_wchar), - &basic_istream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - ".?AV?$basic_ifstream@GU?$char_traits@G@std@@@std@@"); -DEFINE_RTTI_DATA8(basic_fstream_char, sizeof(basic_fstream_char), - &basic_istream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - &basic_ostream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - ".?AV?$basic_fstream@DU?$char_traits@D@std@@@std@@"); -DEFINE_RTTI_DATA8(basic_fstream_wchar, sizeof(basic_fstream_wchar), - &basic_istream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - &basic_ostream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - ".?AV?$basic_fstream@_WU?$char_traits@_W@std@@@std@@"); -DEFINE_RTTI_DATA8(basic_fstream_short, sizeof(basic_fstream_wchar), - &basic_istream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - &basic_ostream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - ".?AV?$basic_fstream@GU?$char_traits@G@std@@@std@@"); -DEFINE_RTTI_DATA4(basic_ostringstream_char, sizeof(basic_ostringstream_char), - &basic_ostream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - ".?AV?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@"); -DEFINE_RTTI_DATA4(basic_ostringstream_wchar, sizeof(basic_ostringstream_wchar), - &basic_ostream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - ".?AV?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@"); -DEFINE_RTTI_DATA4(basic_ostringstream_short, sizeof(basic_ostringstream_wchar), - &basic_ostream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - ".?AV?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@"); -DEFINE_RTTI_DATA4(basic_istringstream_char, sizeof(basic_istringstream_char), - &basic_ostream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - ".?AV?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@"); -DEFINE_RTTI_DATA4(basic_istringstream_wchar, sizeof(basic_istringstream_wchar), - &basic_ostream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - ".?AV?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@"); -DEFINE_RTTI_DATA4(basic_istringstream_short, sizeof(basic_istringstream_wchar), - &basic_ostream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - ".?AV?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@"); -DEFINE_RTTI_DATA8(basic_stringstream_char, sizeof(basic_stringstream_char), - &basic_istream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - &basic_ostream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - ".?AV?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@"); -DEFINE_RTTI_DATA8(basic_stringstream_wchar, sizeof(basic_stringstream_wchar), - &basic_istream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - &basic_ostream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - ".?AV?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@"); -DEFINE_RTTI_DATA8(basic_stringstream_short, sizeof(basic_stringstream_wchar), - &basic_istream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - &basic_ostream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, - ".?AV?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@"); -DEFINE_RTTI_DATA1(strstreambuf, sizeof(strstreambuf), - &basic_streambuf_char_rtti_base_descriptor, ".?AVstrstreambuf@std@@"); #ifndef __GNUC__ void __asm_dummy_vtables(void) { @@ -725,54 +387,6 @@ void __asm_dummy_vtables(void) { VTABLE_ADD_FUNC(basic_filebuf_short_setbuf) VTABLE_ADD_FUNC(basic_filebuf_wchar_sync) VTABLE_ADD_FUNC(basic_filebuf_short_imbue)); - __ASM_VTABLE(basic_stringbuf_char, - VTABLE_ADD_FUNC(basic_stringbuf_char_vector_dtor) - VTABLE_ADD_FUNC(basic_streambuf_char__Lock) - VTABLE_ADD_FUNC(basic_streambuf_char__Unlock) - VTABLE_ADD_FUNC(basic_stringbuf_char_overflow) - VTABLE_ADD_FUNC(basic_stringbuf_char_pbackfail) - VTABLE_ADD_FUNC(basic_streambuf_char_showmanyc) - VTABLE_ADD_FUNC(basic_stringbuf_char_underflow) - VTABLE_ADD_FUNC(basic_streambuf_char_uflow) - VTABLE_ADD_FUNC(basic_streambuf_char_xsgetn) - VTABLE_ADD_FUNC(basic_streambuf_char_xsputn) - VTABLE_ADD_FUNC(basic_stringbuf_char_seekoff) - VTABLE_ADD_FUNC(basic_stringbuf_char_seekpos) - VTABLE_ADD_FUNC(basic_streambuf_char_setbuf) - VTABLE_ADD_FUNC(basic_streambuf_char_sync) - VTABLE_ADD_FUNC(basic_streambuf_char_imbue)); - __ASM_VTABLE(basic_stringbuf_wchar, - VTABLE_ADD_FUNC(basic_stringbuf_wchar_vector_dtor) - VTABLE_ADD_FUNC(basic_streambuf_wchar__Lock) - VTABLE_ADD_FUNC(basic_streambuf_wchar__Unlock) - VTABLE_ADD_FUNC(basic_stringbuf_wchar_overflow) - VTABLE_ADD_FUNC(basic_stringbuf_wchar_pbackfail) - VTABLE_ADD_FUNC(basic_streambuf_wchar_showmanyc) - VTABLE_ADD_FUNC(basic_stringbuf_wchar_underflow) - VTABLE_ADD_FUNC(basic_streambuf_wchar_uflow) - VTABLE_ADD_FUNC(basic_streambuf_wchar_xsgetn) - VTABLE_ADD_FUNC(basic_streambuf_wchar_xsputn) - VTABLE_ADD_FUNC(basic_stringbuf_wchar_seekoff) - VTABLE_ADD_FUNC(basic_stringbuf_wchar_seekpos) - VTABLE_ADD_FUNC(basic_streambuf_wchar_setbuf) - VTABLE_ADD_FUNC(basic_streambuf_wchar_sync) - VTABLE_ADD_FUNC(basic_streambuf_wchar_imbue)); - __ASM_VTABLE(basic_stringbuf_short, - VTABLE_ADD_FUNC(basic_stringbuf_wchar_vector_dtor) - VTABLE_ADD_FUNC(basic_streambuf_wchar__Lock) - VTABLE_ADD_FUNC(basic_streambuf_wchar__Unlock) - VTABLE_ADD_FUNC(basic_stringbuf_wchar_overflow) - VTABLE_ADD_FUNC(basic_stringbuf_wchar_pbackfail) - VTABLE_ADD_FUNC(basic_streambuf_wchar_showmanyc) - VTABLE_ADD_FUNC(basic_stringbuf_wchar_underflow) - VTABLE_ADD_FUNC(basic_streambuf_wchar_uflow) - VTABLE_ADD_FUNC(basic_streambuf_wchar_xsgetn) - VTABLE_ADD_FUNC(basic_streambuf_wchar_xsputn) - VTABLE_ADD_FUNC(basic_stringbuf_wchar_seekoff) - VTABLE_ADD_FUNC(basic_stringbuf_wchar_seekpos) - VTABLE_ADD_FUNC(basic_streambuf_wchar_setbuf) - VTABLE_ADD_FUNC(basic_streambuf_wchar_sync) - VTABLE_ADD_FUNC(basic_streambuf_wchar_imbue)); __ASM_VTABLE(basic_ostream_char, VTABLE_ADD_FUNC(basic_ostream_char_vector_dtor)); __ASM_VTABLE(basic_ostream_wchar, @@ -791,58 +405,6 @@ void __asm_dummy_vtables(void) { VTABLE_ADD_FUNC(basic_iostream_wchar_vector_dtor)); __ASM_VTABLE(basic_iostream_short, VTABLE_ADD_FUNC(basic_iostream_wchar_vector_dtor)); - __ASM_VTABLE(basic_ofstream_char, - VTABLE_ADD_FUNC(basic_ofstream_char_vector_dtor)); - __ASM_VTABLE(basic_ofstream_wchar, - VTABLE_ADD_FUNC(basic_ofstream_wchar_vector_dtor)); - __ASM_VTABLE(basic_ofstream_short, - VTABLE_ADD_FUNC(basic_ofstream_wchar_vector_dtor)); - __ASM_VTABLE(basic_ifstream_char, - VTABLE_ADD_FUNC(basic_ifstream_char_vector_dtor)); - __ASM_VTABLE(basic_ifstream_wchar, - VTABLE_ADD_FUNC(basic_ifstream_wchar_vector_dtor)); - __ASM_VTABLE(basic_ifstream_short, - VTABLE_ADD_FUNC(basic_ifstream_wchar_vector_dtor)); - __ASM_VTABLE(basic_fstream_char, - VTABLE_ADD_FUNC(basic_fstream_char_vector_dtor)); - __ASM_VTABLE(basic_fstream_wchar, - VTABLE_ADD_FUNC(basic_fstream_wchar_vector_dtor)); - __ASM_VTABLE(basic_fstream_short, - VTABLE_ADD_FUNC(basic_fstream_wchar_vector_dtor)); - __ASM_VTABLE(basic_ostringstream_char, - VTABLE_ADD_FUNC(basic_ostringstream_char_vector_dtor)); - __ASM_VTABLE(basic_ostringstream_wchar, - VTABLE_ADD_FUNC(basic_ostringstream_wchar_vector_dtor)); - __ASM_VTABLE(basic_ostringstream_short, - VTABLE_ADD_FUNC(basic_ostringstream_wchar_vector_dtor)); - __ASM_VTABLE(basic_istringstream_char, - VTABLE_ADD_FUNC(basic_istringstream_char_vector_dtor)); - __ASM_VTABLE(basic_istringstream_wchar, - VTABLE_ADD_FUNC(basic_istringstream_wchar_vector_dtor)); - __ASM_VTABLE(basic_istringstream_short, - VTABLE_ADD_FUNC(basic_istringstream_wchar_vector_dtor)); - __ASM_VTABLE(basic_stringstream_char, - VTABLE_ADD_FUNC(basic_stringstream_char_vector_dtor)); - __ASM_VTABLE(basic_stringstream_wchar, - VTABLE_ADD_FUNC(basic_stringstream_wchar_vector_dtor)); - __ASM_VTABLE(basic_stringstream_short, - VTABLE_ADD_FUNC(basic_stringstream_wchar_vector_dtor)); - __ASM_VTABLE(strstreambuf, - VTABLE_ADD_FUNC(strstreambuf_vector_dtor) - VTABLE_ADD_FUNC(basic_streambuf_char__Lock) - VTABLE_ADD_FUNC(basic_streambuf_char__Unlock) - VTABLE_ADD_FUNC(strstreambuf_overflow) - VTABLE_ADD_FUNC(strstreambuf_pbackfail) - VTABLE_ADD_FUNC(basic_streambuf_char_showmanyc) - VTABLE_ADD_FUNC(strstreambuf_underflow) - VTABLE_ADD_FUNC(basic_streambuf_char_uflow) - VTABLE_ADD_FUNC(basic_streambuf_char_xsgetn) - VTABLE_ADD_FUNC(basic_streambuf_char_xsputn) - VTABLE_ADD_FUNC(strstreambuf_seekoff) - VTABLE_ADD_FUNC(strstreambuf_seekpos) - VTABLE_ADD_FUNC(basic_streambuf_char_setbuf) - VTABLE_ADD_FUNC(basic_streambuf_char_sync) - VTABLE_ADD_FUNC(basic_streambuf_char_imbue)); #ifndef __GNUC__ } #endif @@ -1075,8 +637,7 @@ int __thiscall basic_streambuf_char_uflow(basic_streambuf_char *this) /* ?_Xsgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHPADIH@Z */ /* ?_Xsgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEAD_K_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Xsgetn_s, 20) -streamsize __thiscall basic_streambuf_char__Xsgetn_s(basic_streambuf_char *this, char *ptr, MSVCP_size_t size, streamsize count) +static streamsize basic_streambuf_char__Xsgetn_s(basic_streambuf_char *this, char *ptr, MSVCP_size_t size, streamsize count) { streamsize copied, chunk; int c; @@ -1108,8 +669,7 @@ streamsize __thiscall basic_streambuf_char__Xsgetn_s(basic_streambuf_char *this, /* ?_Sgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPADIH@Z */ /* ?_Sgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_K_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Sgetn_s, 20) -streamsize __thiscall basic_streambuf_char__Sgetn_s(basic_streambuf_char *this, char *ptr, MSVCP_size_t size, streamsize count) +static streamsize basic_streambuf_char__Sgetn_s(basic_streambuf_char *this, char *ptr, MSVCP_size_t size, streamsize count) { TRACE("(%p %p %lu %s)\n", this, ptr, size, wine_dbgstr_longlong(count)); return basic_streambuf_char__Xsgetn_s(this, ptr, size, count); @@ -1813,8 +1373,7 @@ unsigned short __thiscall basic_streambuf_wchar_uflow(basic_streambuf_wchar *thi /* ?_Xsgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEA_W_K_J@Z */ /* ?_Xsgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHPAGIH@Z */ /* ?_Xsgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEAG_K_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Xsgetn_s, 20) -streamsize __thiscall basic_streambuf_wchar__Xsgetn_s(basic_streambuf_wchar *this, wchar_t *ptr, MSVCP_size_t size, streamsize count) +static streamsize basic_streambuf_wchar__Xsgetn_s(basic_streambuf_wchar *this, wchar_t *ptr, MSVCP_size_t size, streamsize count) { streamsize copied, chunk; unsigned short c; @@ -1848,8 +1407,7 @@ streamsize __thiscall basic_streambuf_wchar__Xsgetn_s(basic_streambuf_wchar *thi /* ?_Sgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_K_J@Z */ /* ?_Sgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHPAGIH@Z */ /* ?_Sgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_K_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Sgetn_s, 20) -streamsize __thiscall basic_streambuf_wchar__Sgetn_s(basic_streambuf_wchar *this, wchar_t *ptr, MSVCP_size_t size, streamsize count) +static streamsize basic_streambuf_wchar__Sgetn_s(basic_streambuf_wchar *this, wchar_t *ptr, MSVCP_size_t size, streamsize count) { TRACE("(%p %p %lu %s)\n", this, ptr, size, wine_dbgstr_longlong(count)); return basic_streambuf_wchar__Xsgetn_s(this, ptr, size, count); @@ -2351,8 +1909,7 @@ int basic_filebuf_char__Init__Stinit = 0; /* ?_Init@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@12@@Z */ /* ?_Init@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@12@@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_char__Init, 12) -void __thiscall basic_filebuf_char__Init(basic_filebuf_char *this, FILE *file, basic_filebuf__Initfl which) +static void basic_filebuf_char__Init(basic_filebuf_char *this, FILE *file, basic_filebuf__Initfl which) { TRACE("(%p %p %d)\n", this, file, which); @@ -2370,8 +1927,7 @@ void __thiscall basic_filebuf_char__Init(basic_filebuf_char *this, FILE *file, b /* ?_Initcvt@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IAEXPAV?$codecvt@DDH@2@@Z */ /* ?_Initcvt@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IEAAXPEAV?$codecvt@DDH@2@@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_char__Initcvt, 8) -void __thiscall basic_filebuf_char__Initcvt(basic_filebuf_char *this, codecvt_char *cvt) +static void basic_filebuf_char__Initcvt(basic_filebuf_char *this, codecvt_char *cvt) { TRACE("(%p %p)\n", this, cvt); @@ -2385,8 +1941,7 @@ void __thiscall basic_filebuf_char__Initcvt(basic_filebuf_char *this, codecvt_ch /* ?_Endwrite@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IAE_NXZ */ /* ?_Endwrite@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IEAA_NXZ */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_char__Endwrite, 4) -MSVCP_bool __thiscall basic_filebuf_char__Endwrite(basic_filebuf_char *this) +static MSVCP_bool basic_filebuf_char__Endwrite(basic_filebuf_char *this) { TRACE("(%p)\n", this); @@ -2426,8 +1981,7 @@ MSVCP_bool __thiscall basic_filebuf_char__Endwrite(basic_filebuf_char *this) /* ?close@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@XZ */ /* ?close@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@XZ */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_char_close, 4) -basic_filebuf_char* __thiscall basic_filebuf_char_close(basic_filebuf_char *this) +static basic_filebuf_char* basic_filebuf_char_close(basic_filebuf_char *this) { basic_filebuf_char *ret = this; @@ -2448,8 +2002,7 @@ basic_filebuf_char* __thiscall basic_filebuf_char_close(basic_filebuf_char *this /* ??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAE@PAU_iobuf@@@Z */ /* ??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAA@PEAU_iobuf@@@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_char_ctor_file, 8) -basic_filebuf_char* __thiscall basic_filebuf_char_ctor_file(basic_filebuf_char *this, FILE *file) +static basic_filebuf_char* basic_filebuf_char_ctor_file(basic_filebuf_char *this, FILE *file) { TRACE("(%p %p)\n", this, file); @@ -2460,30 +2013,9 @@ basic_filebuf_char* __thiscall basic_filebuf_char_ctor_file(basic_filebuf_char * return this; } -/* ??_F?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEXXZ */ -/* ??_F?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_char_ctor, 4) -basic_filebuf_char* __thiscall basic_filebuf_char_ctor(basic_filebuf_char *this) -{ - return basic_filebuf_char_ctor_file(this, NULL); -} - -/* ??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@@Z */ -/* ??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_char_ctor_uninitialized, 8) -basic_filebuf_char* __thiscall basic_filebuf_char_ctor_uninitialized(basic_filebuf_char *this, int uninitialized) -{ - TRACE("(%p %d)\n", this, uninitialized); - - basic_streambuf_char_ctor(&this->base); - this->base.vtable = &MSVCP_basic_filebuf_char_vtable; - return this; -} - /* ??1?$basic_filebuf@DU?$char_traits@D@std@@@std@@UAE@XZ */ /* ??1?$basic_filebuf@DU?$char_traits@D@std@@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_char_dtor, 4) -void __thiscall basic_filebuf_char_dtor(basic_filebuf_char *this) +static void basic_filebuf_char_dtor(basic_filebuf_char *this) { TRACE("(%p)\n", this); @@ -2514,8 +2046,7 @@ basic_filebuf_char* __thiscall basic_filebuf_char_vector_dtor(basic_filebuf_char /* ?is_open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QBE_NXZ */ /* ?is_open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEBA_NXZ */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_char_is_open, 4) -MSVCP_bool __thiscall basic_filebuf_char_is_open(const basic_filebuf_char *this) +static MSVCP_bool basic_filebuf_char_is_open(const basic_filebuf_char *this) { TRACE("(%p)\n", this); return this->file != NULL; @@ -2591,60 +2122,6 @@ FILE* __cdecl _Fiopen(const char *name, int mode, int prot) return _Fiopen_wchar(nameW, mode, prot); } -/* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PB_WHH@Z */ -/* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEB_WHH@Z */ -/* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PBGHH@Z */ -/* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEBGHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_char_open_wchar, 16) -basic_filebuf_char* __thiscall basic_filebuf_char_open_wchar(basic_filebuf_char *this, const wchar_t *name, int mode, int prot) -{ - FILE *f = NULL; - - TRACE("(%p %s %d %d)\n", this, debugstr_w(name), mode, prot); - - if(basic_filebuf_char_is_open(this)) - return NULL; - - if(!(f = _Fiopen_wchar(name, mode, prot))) - return NULL; - - basic_filebuf_char__Init(this, f, INITFL_open); - basic_filebuf_char__Initcvt(this, codecvt_char_use_facet(this->base.loc)); - return this; -} - -/* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PB_WI@Z */ -/* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEB_WI@Z */ -/* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PBGI@Z */ -/* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEBGI@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_char_open_wchar_mode, 12) -basic_filebuf_char* __thiscall basic_filebuf_char_open_wchar_mode(basic_filebuf_char *this, const wchar_t *name, unsigned int mode) -{ - return basic_filebuf_char_open_wchar(this, name, mode, SH_DENYNO); -} - -/* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PBDHH@Z */ -/* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEBDHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_char_open, 16) -basic_filebuf_char* __thiscall basic_filebuf_char_open(basic_filebuf_char *this, const char *name, int mode, int prot) -{ - wchar_t nameW[FILENAME_MAX]; - - TRACE("(%p %s %d %d)\n", this, name, mode, prot); - - if(mbstowcs_s(NULL, nameW, FILENAME_MAX, name, FILENAME_MAX-1) != 0) - return NULL; - return basic_filebuf_char_open_wchar(this, nameW, mode, prot); -} - -/* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PBDI@Z */ -/* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEBDI@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_char_open_mode, 12) -basic_filebuf_char* __thiscall basic_filebuf_char_open_mode(basic_filebuf_char *this, const char *name, unsigned int mode) -{ - return basic_filebuf_char_open(this, name, mode, SH_DENYNO); -} - /* ?overflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHH@Z */ /* ?overflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z */ DEFINE_THISCALL_WRAPPER(basic_filebuf_char_overflow, 8) @@ -2904,8 +2381,7 @@ int basic_filebuf_short__Init__Stinit = 0; /* ?_Init@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@12@@Z */ /* ?_Init@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@12@@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar__Init, 12) -void __thiscall basic_filebuf_wchar__Init(basic_filebuf_wchar *this, FILE *file, basic_filebuf__Initfl which) +static void basic_filebuf_wchar__Init(basic_filebuf_wchar *this, FILE *file, basic_filebuf__Initfl which) { TRACE("(%p %p %d)\n", this, file, which); @@ -2920,8 +2396,7 @@ void __thiscall basic_filebuf_wchar__Init(basic_filebuf_wchar *this, FILE *file, /* ?_Init@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@12@@Z */ /* ?_Init@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@12@@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_short__Init, 12) -void __thiscall basic_filebuf_short__Init(basic_filebuf_wchar *this, FILE *file, basic_filebuf__Initfl which) +static void basic_filebuf_short__Init(basic_filebuf_wchar *this, FILE *file, basic_filebuf__Initfl which) { TRACE("(%p %p %d)\n", this, file, which); @@ -2938,8 +2413,7 @@ void __thiscall basic_filebuf_short__Init(basic_filebuf_wchar *this, FILE *file, /* ?_Initcvt@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEAV?$codecvt@_WDH@2@@Z */ /* ?_Initcvt@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IAEXPAV?$codecvt@GDH@2@@Z */ /* ?_Initcvt@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IEAAXPEAV?$codecvt@GDH@2@@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar__Initcvt, 8) -void __thiscall basic_filebuf_wchar__Initcvt(basic_filebuf_wchar *this, codecvt_wchar *cvt) +static void basic_filebuf_wchar__Initcvt(basic_filebuf_wchar *this, codecvt_wchar *cvt) { TRACE("(%p %p)\n", this, cvt); @@ -2955,8 +2429,7 @@ void __thiscall basic_filebuf_wchar__Initcvt(basic_filebuf_wchar *this, codecvt_ /* ?_Endwrite@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IEAA_NXZ */ /* ?_Endwrite@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IAE_NXZ */ /* ?_Endwrite@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IEAA_NXZ */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar__Endwrite, 4) -MSVCP_bool __thiscall basic_filebuf_wchar__Endwrite(basic_filebuf_wchar *this) +static MSVCP_bool basic_filebuf_wchar__Endwrite(basic_filebuf_wchar *this) { TRACE("(%p)\n", this); @@ -2997,8 +2470,7 @@ MSVCP_bool __thiscall basic_filebuf_wchar__Endwrite(basic_filebuf_wchar *this) /* ?close@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@XZ */ /* ?close@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAEPAV12@XZ */ /* ?close@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@XZ */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_close, 4) -basic_filebuf_wchar* __thiscall basic_filebuf_wchar_close(basic_filebuf_wchar *this) +static basic_filebuf_wchar* basic_filebuf_wchar_close(basic_filebuf_wchar *this) { basic_filebuf_wchar *ret = this; @@ -3019,8 +2491,7 @@ basic_filebuf_wchar* __thiscall basic_filebuf_wchar_close(basic_filebuf_wchar *t /* ??0?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAE@PAU_iobuf@@@Z */ /* ??0?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAA@PEAU_iobuf@@@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_ctor_file, 8) -basic_filebuf_wchar* __thiscall basic_filebuf_wchar_ctor_file(basic_filebuf_wchar *this, FILE *file) +static basic_filebuf_wchar* basic_filebuf_wchar_ctor_file(basic_filebuf_wchar *this, FILE *file) { TRACE("(%p %p)\n", this, file); @@ -3033,8 +2504,7 @@ basic_filebuf_wchar* __thiscall basic_filebuf_wchar_ctor_file(basic_filebuf_wcha /* ??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAE@PAU_iobuf@@@Z */ /* ??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAA@PEAU_iobuf@@@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_short_ctor_file, 8) -basic_filebuf_wchar* __thiscall basic_filebuf_short_ctor_file(basic_filebuf_wchar *this, FILE *file) +static basic_filebuf_wchar* basic_filebuf_short_ctor_file(basic_filebuf_wchar *this, FILE *file) { TRACE("(%p %p)\n", this, file); @@ -3045,52 +2515,11 @@ basic_filebuf_wchar* __thiscall basic_filebuf_short_ctor_file(basic_filebuf_wcha return this; } -/* ??_F?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ */ -/* ??_F?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_ctor, 4) -basic_filebuf_wchar* __thiscall basic_filebuf_wchar_ctor(basic_filebuf_wchar *this) -{ - return basic_filebuf_wchar_ctor_file(this, NULL); -} - -/* ??_F?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAEXXZ */ -/* ??_F?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_short_ctor, 4) -basic_filebuf_wchar* __thiscall basic_filebuf_short_ctor(basic_filebuf_wchar *this) -{ - return basic_filebuf_short_ctor_file(this, NULL); -} - -/* ??0?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAE@W4_Uninitialized@1@@Z */ -/* ??0?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAA@W4_Uninitialized@1@@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_ctor_uninitialized, 8) -basic_filebuf_wchar* __thiscall basic_filebuf_wchar_ctor_uninitialized(basic_filebuf_wchar *this, int uninitialized) -{ - TRACE("(%p %d)\n", this, uninitialized); - - basic_streambuf_wchar_ctor(&this->base); - this->base.vtable = &MSVCP_basic_filebuf_wchar_vtable; - return this; -} - -/* ??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@@Z */ -/* ??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAA@W4_Uninitialized@1@@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_short_ctor_uninitialized, 8) -basic_filebuf_wchar* __thiscall basic_filebuf_short_ctor_uninitialized(basic_filebuf_wchar *this, int uninitialized) -{ - TRACE("(%p %d)\n", this, uninitialized); - - basic_streambuf_short_ctor(&this->base); - this->base.vtable = &MSVCP_basic_filebuf_short_vtable; - return this; -} - /* ??1?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@UAE@XZ */ /* ??1?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */ /* ??1?$basic_filebuf@GU?$char_traits@G@std@@@std@@UAE@XZ */ /* ??1?$basic_filebuf@GU?$char_traits@G@std@@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_dtor, 4) -void __thiscall basic_filebuf_wchar_dtor(basic_filebuf_wchar *this) +static void basic_filebuf_wchar_dtor(basic_filebuf_wchar *this) { TRACE("(%p)\n", this); @@ -3123,149 +2552,40 @@ basic_filebuf_wchar* __thiscall basic_filebuf_wchar_vector_dtor(basic_filebuf_wc /* ?is_open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEBA_NXZ */ /* ?is_open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QBE_NXZ */ /* ?is_open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEBA_NXZ */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_is_open, 4) -MSVCP_bool __thiscall basic_filebuf_wchar_is_open(const basic_filebuf_wchar *this) +static MSVCP_bool basic_filebuf_wchar_is_open(const basic_filebuf_wchar *this) { TRACE("(%p)\n", this); return this->file != NULL; } -/* ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@PB_WHH@Z */ -/* ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@PEB_WHH@Z */ -/* ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@PBGHH@Z */ -/* ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@PEBGHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_open_wchar, 16) -basic_filebuf_wchar* __thiscall basic_filebuf_wchar_open_wchar(basic_filebuf_wchar *this, const wchar_t *name, int mode, int prot) +/* ?overflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z */ +/* ?overflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z */ +/* ?overflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEGG@Z */ +/* ?overflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z */ +DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_overflow, 8) +unsigned short __thiscall basic_filebuf_wchar_overflow(basic_filebuf_wchar *this, unsigned short c) { - FILE *f = NULL; - - TRACE("(%p %s %d %d)\n", this, debugstr_w(name), mode, prot); - - if(basic_filebuf_wchar_is_open(this)) - return NULL; - - if(!(f = _Fiopen_wchar(name, mode, prot))) - return NULL; + char buf[8], *dyn_buf, *to_next; + wchar_t ch = c; + const wchar_t *from_next; + int max_size; + unsigned short ret; - basic_filebuf_wchar__Init(this, f, INITFL_open); - basic_filebuf_wchar__Initcvt(this, codecvt_wchar_use_facet(this->base.loc)); - return this; -} -/* ?open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAEPAV12@PB_WHH@Z */ -/* ?open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@PEB_WHH@Z */ -/* ?open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAEPAV12@PBGHH@Z */ -/* ?open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@PEBGHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_short_open_wchar, 16) -basic_filebuf_wchar* __thiscall basic_filebuf_short_open_wchar(basic_filebuf_wchar *this, const wchar_t *name, int mode, int prot) -{ - FILE *f = NULL; + TRACE("(%p %d)\n", this, c); - TRACE("(%p %s %d %d)\n", this, debugstr_w(name), mode, prot); + if(!basic_filebuf_wchar_is_open(this)) + return WEOF; + if(c == WEOF) + return !c; - if(basic_filebuf_wchar_is_open(this)) - return NULL; + if(!this->cvt) + return fwrite(&ch, sizeof(wchar_t), 1, this->file) ? c : WEOF; - if(!(f = _Fiopen_wchar(name, mode, prot))) - return NULL; - - basic_filebuf_short__Init(this, f, INITFL_open); - basic_filebuf_wchar__Initcvt(this, codecvt_short_use_facet(this->base.loc)); - return this; -} - -/* ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@PB_WI@Z */ -/* ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@PEB_WI@Z */ -/* ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@PBGI@Z */ -/* ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@PEBGI@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_open_wchar_mode, 12) -basic_filebuf_wchar* __thiscall basic_filebuf_wchar_open_wchar_mode(basic_filebuf_wchar *this, const wchar_t *name, unsigned int mode) -{ - return basic_filebuf_wchar_open_wchar(this, name, mode, SH_DENYNO); -} - -/* ?open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAEPAV12@PB_WI@Z */ -/* ?open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@PEB_WI@Z */ -/* ?open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAEPAV12@PBGI@Z */ -/* ?open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@PEBGI@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_short_open_wchar_mode, 12) -basic_filebuf_wchar* __thiscall basic_filebuf_short_open_wchar_mode(basic_filebuf_wchar *this, const wchar_t *name, unsigned int mode) -{ - return basic_filebuf_short_open_wchar(this, name, mode, SH_DENYNO); -} - -/* ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@PBDHH@Z */ -/* ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@PEBDHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_open, 16) -basic_filebuf_wchar* __thiscall basic_filebuf_wchar_open(basic_filebuf_wchar *this, const char *name, int mode, int prot) -{ - wchar_t nameW[FILENAME_MAX]; - - TRACE("(%p %s %d %d)\n", this, name, mode, prot); - - if(mbstowcs_s(NULL, nameW, FILENAME_MAX, name, FILENAME_MAX-1) != 0) - return NULL; - return basic_filebuf_wchar_open_wchar(this, nameW, mode, prot); -} - -/* ?open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAEPAV12@PBDHH@Z */ -/* ?open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@PEBDHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_short_open, 16) -basic_filebuf_wchar* __thiscall basic_filebuf_short_open(basic_filebuf_wchar *this, const char *name, int mode, int prot) -{ - wchar_t nameW[FILENAME_MAX]; - - TRACE("(%p %s %d %d)\n", this, name, mode, prot); - - if(mbstowcs_s(NULL, nameW, FILENAME_MAX, name, FILENAME_MAX-1) != 0) - return NULL; - return basic_filebuf_short_open_wchar(this, nameW, mode, prot); -} - -/* ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@PBDI@Z */ -/* ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@PEBDI@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_open_mode, 12) -basic_filebuf_wchar* __thiscall basic_filebuf_wchar_open_mode(basic_filebuf_wchar *this, const char *name, unsigned int mode) -{ - return basic_filebuf_wchar_open(this, name, mode, SH_DENYNO); -} - -/* ?open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAEPAV12@PBDI@Z */ -/* ?open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@PEBDI@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_short_open_mode, 12) -basic_filebuf_wchar* __thiscall basic_filebuf_short_open_mode(basic_filebuf_wchar *this, const char *name, unsigned int mode) -{ - return basic_filebuf_short_open(this, name, mode, SH_DENYNO); -} - -/* ?overflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z */ -/* ?overflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z */ -/* ?overflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEGG@Z */ -/* ?overflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z */ -DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_overflow, 8) -unsigned short __thiscall basic_filebuf_wchar_overflow(basic_filebuf_wchar *this, unsigned short c) -{ - char buf[8], *dyn_buf, *to_next; - wchar_t ch = c; - const wchar_t *from_next; - int max_size; - unsigned short ret; - - - TRACE("(%p %d)\n", this, c); - - if(!basic_filebuf_wchar_is_open(this)) - return WEOF; - if(c == WEOF) - return !c; - - if(!this->cvt) - return fwrite(&ch, sizeof(wchar_t), 1, this->file) ? c : WEOF; - - from_next = &ch; - do { - ret = codecvt_wchar_out(this->cvt, &this->state, from_next, &ch+1, - &from_next, buf, buf+sizeof(buf), &to_next); + from_next = &ch; + do { + ret = codecvt_wchar_out(this->cvt, &this->state, from_next, &ch+1, + &from_next, buf, buf+sizeof(buf), &to_next); switch(ret) { case CODECVT_partial: @@ -3544,146 +2864,97 @@ void __thiscall basic_filebuf_short_imbue(basic_filebuf_wchar *this, const local basic_filebuf_wchar__Initcvt(this, codecvt_short_use_facet(loc)); } -/* ?_Getstate@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEHH@Z */ -/* ?_Getstate@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_char__Getstate, 8) -int __thiscall basic_stringbuf_char__Getstate(basic_stringbuf_char *this, IOSB_openmode mode) -{ - int state = 0; - - if(!(mode & OPENMODE_in)) - state |= STRINGBUF_no_read; - - if(!(mode & OPENMODE_out)) - state |= STRINGBUF_no_write; - - if(mode & OPENMODE_ate) - state |= STRINGBUF_at_end; - - if(mode & OPENMODE_app) - state |= STRINGBUF_append; - - return state; -} - -/* ?_Init@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAEXPBDIH@Z */ -/* ?_Init@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEAAXPEBD_KH@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_char__Init, 16) -void __thiscall basic_stringbuf_char__Init(basic_stringbuf_char *this, const char *str, MSVCP_size_t count, int state) +/* ??0ios_base@std@@IAE@XZ */ +/* ??0ios_base@std@@IEAA@XZ */ +DEFINE_THISCALL_WRAPPER(ios_base_ctor, 4) +ios_base* __thiscall ios_base_ctor(ios_base *this) { - TRACE("(%p, %p, %lu, %d)\n", this, str, count, state); - - basic_streambuf_char__Init_empty(&this->base); - - this->state = state; - this->seekhigh = NULL; - - if(count && str) { - char *buf = MSVCRT_operator_new(count); - if(!buf) { - ERR("Out of memory\n"); - throw_exception(EXCEPTION_BAD_ALLOC, NULL); - } - - memcpy(buf, str, count); - this->seekhigh = buf + count; - - this->state |= STRINGBUF_allocated; - - if(!(state & STRINGBUF_no_read)) - basic_streambuf_char_setg(&this->base, buf, buf, buf + count); - - if(!(state & STRINGBUF_no_write)) { - basic_streambuf_char_setp_next(&this->base, buf, (state & STRINGBUF_at_end) ? buf + count : buf, buf + count); - - if(!basic_streambuf_char_gptr(&this->base)) - basic_streambuf_char_setg(&this->base, buf, 0, buf); - } - } + TRACE("(%p)\n", this); + this->vtable = &MSVCP_ios_base_vtable; + return this; } -/* ??0?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@H@Z */ -/* ??0?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_ctor_str, 12) -basic_stringbuf_char* __thiscall basic_stringbuf_char_ctor_str(basic_stringbuf_char *this, - const basic_string_char *str, IOSB_openmode mode) +/* ??0ios_base@std@@QAE@ABV01@@Z */ +/* ??0ios_base@std@@QEAA@AEBV01@@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_copy_ctor, 8) +ios_base* __thiscall ios_base_copy_ctor(ios_base *this, const ios_base *copy) { - TRACE("(%p %p %d)\n", this, str, mode); - - basic_streambuf_char_ctor(&this->base); - this->base.vtable = &MSVCP_basic_stringbuf_char_vtable; - - basic_stringbuf_char__Init(this, MSVCP_basic_string_char_c_str(str), - str->size, basic_stringbuf_char__Getstate(this, mode)); + TRACE("(%p %p)\n", this, copy); + *this = *copy; + this->vtable = &MSVCP_ios_base_vtable; return this; } -/* ??0?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@H@Z */ -/* ??0?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_ctor_mode, 8) -basic_stringbuf_char* __thiscall basic_stringbuf_char_ctor_mode( - basic_stringbuf_char *this, IOSB_openmode mode) +/* ?_Callfns@ios_base@std@@AAEXW4event@12@@Z */ +/* ?_Callfns@ios_base@std@@AEAAXW4event@12@@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_Callfns, 8) +void __thiscall ios_base_Callfns(ios_base *this, IOS_BASE_event event) { - TRACE("(%p %d)\n", this, mode); + IOS_BASE_fnarray *cur; - basic_streambuf_char_ctor(&this->base); - this->base.vtable = &MSVCP_basic_stringbuf_char_vtable; + TRACE("(%p %x)\n", this, event); - basic_stringbuf_char__Init(this, NULL, 0, basic_stringbuf_char__Getstate(this, mode)); - return this; + for(cur=this->calls; cur; cur=cur->next) + cur->event_handler(event, this, cur->index); } -/* ??_F?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */ -/* ??_F?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_ctor, 4) -basic_stringbuf_char* __thiscall basic_stringbuf_char_ctor(basic_stringbuf_char *this) +/* ?_Tidy@ios_base@std@@AAAXXZ */ +/* ?_Tidy@ios_base@std@@AEAAXXZ */ +void CDECL ios_base_Tidy(ios_base *this) { - return basic_stringbuf_char_ctor_mode(this, OPENMODE_in|OPENMODE_out); -} + IOS_BASE_iosarray *arr_cur, *arr_next; + IOS_BASE_fnarray *event_cur, *event_next; -/* ?_Tidy@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAEXXZ */ -/* ?_Tidy@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_char__Tidy, 4) -void __thiscall basic_stringbuf_char__Tidy(basic_stringbuf_char *this) -{ TRACE("(%p)\n", this); - if(this->state & STRINGBUF_allocated) { - MSVCRT_operator_delete(basic_streambuf_char_eback(&this->base)); - this->seekhigh = NULL; - this->state &= ~STRINGBUF_allocated; + ios_base_Callfns(this, EVENT_erase_event); + + for(arr_cur=this->arr; arr_cur; arr_cur=arr_next) { + arr_next = arr_cur->next; + MSVCRT_operator_delete(arr_cur); } + this->arr = NULL; - basic_streambuf_char__Init_empty(&this->base); + for(event_cur=this->calls; event_cur; event_cur=event_next) { + event_next = event_cur->next; + MSVCRT_operator_delete(event_cur); + } + this->calls = NULL; } -/* ??1?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UAE@XZ */ -/* ??1?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_dtor, 4) -void __thiscall basic_stringbuf_char_dtor(basic_stringbuf_char *this) +/* ?_Ios_base_dtor@ios_base@std@@CAXPAV12@@Z */ +/* ?_Ios_base_dtor@ios_base@std@@CAXPEAV12@@Z */ +void CDECL ios_base_Ios_base_dtor(ios_base *obj) { - TRACE("(%p)\n", this); + TRACE("(%p)\n", obj); + if(obj->loc) { + locale_dtor(obj->loc); + MSVCRT_operator_delete(obj->loc); + } + ios_base_Tidy(obj); +} - basic_stringbuf_char__Tidy(this); - basic_streambuf_char_dtor(&this->base); +/* ??1ios_base@std@@UAE@XZ */ +/* ??1ios_base@std@@UEAA@XZ */ +DEFINE_THISCALL_WRAPPER(ios_base_dtor, 4) +void __thiscall ios_base_dtor(ios_base *this) +{ + ios_base_Ios_base_dtor(this); } -DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_vector_dtor, 8) -basic_stringbuf_char* __thiscall basic_stringbuf_char_vector_dtor(basic_stringbuf_char *this, unsigned int flags) +DEFINE_THISCALL_WRAPPER(ios_base_vector_dtor, 8) +ios_base* __thiscall ios_base_vector_dtor(ios_base *this, unsigned int flags) { TRACE("(%p %x)\n", this, flags); - if(flags & 2) { /* we have an array, with the number of elements stored before the first object */ - INT_PTR i, *ptr = (INT_PTR *) this - 1; - - for (i = *ptr - 1; i >= 0; i--) - basic_stringbuf_char_dtor(this+i); + INT_PTR i, *ptr = (INT_PTR *)this-1; + for(i=*ptr-1; i>=0; i--) + ios_base_dtor(this+i); MSVCRT_operator_delete(ptr); - }else { - basic_stringbuf_char_dtor(this); - + } else { + ios_base_dtor(this); if(flags & 1) MSVCRT_operator_delete(this); } @@ -3691,719 +2962,515 @@ basic_stringbuf_char* __thiscall basic_stringbuf_char_vector_dtor(basic_stringbu return this; } -/* ?overflow@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MAEHH@Z */ -/* ?overflow@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MEAAHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_overflow, 8) -int __thiscall basic_stringbuf_char_overflow(basic_stringbuf_char *this, int meta) +DEFINE_THISCALL_WRAPPER(iosb_vector_dtor, 8) +void* __thiscall iosb_vector_dtor(void *this, unsigned int flags) { - MSVCP_size_t oldsize, size; - char *ptr, *buf; - - TRACE("(%p %x)\n", this, meta); + TRACE("(%p %x)\n", this, flags); + if(flags & 2) { + INT_PTR *ptr = (INT_PTR *)this-1; + MSVCRT_operator_delete(ptr); + } else { + if(flags & 1) + MSVCRT_operator_delete(this); + } - if(meta == EOF) - return !EOF; - if(this->state & STRINGBUF_no_write) - return EOF; + return this; +} - ptr = basic_streambuf_char_pptr(&this->base); - if((this->state&STRINGBUF_append) && ptr<this->seekhigh) - basic_streambuf_char_setp_next(&this->base, basic_streambuf_char_pbase(&this->base), - this->seekhigh, basic_streambuf_char_epptr(&this->base)); +/* ?_Findarr@ios_base@std@@AAEAAU_Iosarray@12@H@Z */ +/* ?_Findarr@ios_base@std@@AEAAAEAU_Iosarray@12@H@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_Findarr, 8) +IOS_BASE_iosarray* __thiscall ios_base_Findarr(ios_base *this, int index) +{ + IOS_BASE_iosarray *p; - if(ptr && ptr<basic_streambuf_char_epptr(&this->base)) - return (*basic_streambuf_char__Pninc(&this->base) = meta); + TRACE("(%p %d)\n", this, index); - oldsize = (ptr ? basic_streambuf_char_epptr(&this->base)-basic_streambuf_char_eback(&this->base): 0); - size = oldsize|0xf; - size += size/2; - buf = MSVCRT_operator_new(size); - if(!buf) { - ERR("Out of memory\n"); - throw_exception(EXCEPTION_BAD_ALLOC, NULL); + for(p=this->arr; p; p=p->next) { + if(p->index == index) + return p; } - if(!oldsize) { - this->seekhigh = buf; - basic_streambuf_char_setp(&this->base, buf, buf+size); - if(this->state & STRINGBUF_no_read) - basic_streambuf_char_setg(&this->base, buf, NULL, buf); - else - basic_streambuf_char_setg(&this->base, buf, buf, buf+1); - - this->state |= STRINGBUF_allocated; - }else { - ptr = basic_streambuf_char_eback(&this->base); - memcpy(buf, ptr, oldsize); - - this->seekhigh = buf+(this->seekhigh-ptr); - basic_streambuf_char_setp_next(&this->base, buf, - buf+(basic_streambuf_char_pptr(&this->base)-ptr), buf+size); - if(this->state & STRINGBUF_no_read) - basic_streambuf_char_setg(&this->base, buf, NULL, buf); - else - basic_streambuf_char_setg(&this->base, buf, - buf+(basic_streambuf_char_gptr(&this->base)-ptr), - basic_streambuf_char_pptr(&this->base)+1); - - MSVCRT_operator_delete(ptr); + for(p=this->arr; p; p=p->next) { + if(!p->long_val && !p->ptr_val) { + p->index = index; + return p; + } } - return (*basic_streambuf_char__Pninc(&this->base) = meta); + p = MSVCRT_operator_new(sizeof(IOS_BASE_iosarray)); + p->next = this->arr; + p->index = index; + p->long_val = 0; + p->ptr_val = NULL; + this->arr = p; + return p; } -/* ?pbackfail@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MAEHH@Z */ -/* ?pbackfail@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MEAAHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_pbackfail, 8) -int __thiscall basic_stringbuf_char_pbackfail(basic_stringbuf_char *this, int c) +/* ?iword@ios_base@std@@QAEAAJH@Z */ +/* ?iword@ios_base@std@@QEAAAEAJH@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_iword, 8) +LONG* __thiscall ios_base_iword(ios_base *this, int index) { - char *cur; - - TRACE("(%p %x)\n", this, c); - - cur = basic_streambuf_char_gptr(&this->base); - if(!cur || cur==basic_streambuf_char_eback(&this->base) - || (c!=EOF && c!=cur[-1] && this->state&STRINGBUF_no_write)) - return EOF; + TRACE("(%p %d)\n", this, index); + return &ios_base_Findarr(this, index)->long_val; +} - if(c != EOF) - cur[-1] = c; - basic_streambuf_char_gbump(&this->base, -1); - return c==EOF ? !EOF : c; +/* ?pword@ios_base@std@@QAEAAPAXH@Z */ +/* ?pword@ios_base@std@@QEAAAEAPEAXH@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_pword, 8) +void** __thiscall ios_base_pword(ios_base *this, int index) +{ + TRACE("(%p %d)\n", this, index); + return &ios_base_Findarr(this, index)->ptr_val; } -/* ?underflow@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MAEHXZ */ -/* ?underflow@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MEAAHXZ */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_underflow, 4) -int __thiscall basic_stringbuf_char_underflow(basic_stringbuf_char *this) +/* ?register_callback@ios_base@std@@QAEXP6AXW4event@12@AAV12@H@ZH@Z */ +/* ?register_callback@ios_base@std@@QEAAXP6AXW4event@12@AEAV12@H@ZH@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_register_callback, 12) +void __thiscall ios_base_register_callback(ios_base *this, IOS_BASE_event_callback callback, int index) { - char *ptr, *cur; + IOS_BASE_fnarray *event; - TRACE("(%p)\n", this); + TRACE("(%p %p %d)\n", this, callback, index); - cur = basic_streambuf_char_gptr(&this->base); - if(!cur || this->state&STRINGBUF_no_read) - return EOF; + event = MSVCRT_operator_new(sizeof(IOS_BASE_fnarray)); + event->next = this->calls; + event->index = index; + event->event_handler = callback; + this->calls = event; +} - ptr = basic_streambuf_char_pptr(&this->base); - if(this->seekhigh < ptr) - this->seekhigh = ptr; +/* ?clear@ios_base@std@@QAEXH_N@Z */ +/* ?clear@ios_base@std@@QEAAXH_N@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_clear_reraise, 12) +void __thiscall ios_base_clear_reraise(ios_base *this, IOSB_iostate state, MSVCP_bool reraise) +{ + TRACE("(%p %x %x)\n", this, state, reraise); - ptr = basic_streambuf_char_egptr(&this->base); - if(this->seekhigh > ptr) - basic_streambuf_char_setg(&this->base, basic_streambuf_char_eback(&this->base), cur, this->seekhigh); + this->state = state & IOSTATE_mask; + if(!(this->state & this->except)) + return; - if(cur < this->seekhigh) - return *cur; - return EOF; + if(reraise) + throw_exception(EXCEPTION_RERAISE, NULL); + else if(this->state & this->except & IOSTATE_eofbit) + throw_exception(EXCEPTION_FAILURE, "eofbit is set"); + else if(this->state & this->except & IOSTATE_failbit) + throw_exception(EXCEPTION_FAILURE, "failbit is set"); + else if(this->state & this->except & IOSTATE_badbit) + throw_exception(EXCEPTION_FAILURE, "badbit is set"); + else if(this->state & this->except & IOSTATE__Hardfail) + throw_exception(EXCEPTION_FAILURE, "_Hardfail is set"); } -/* ?seekoff@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MAE?AV?$fpos@H@2@JHH@Z */ -/* ?seekoff@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_seekoff, 24) -fpos_int* __thiscall basic_stringbuf_char_seekoff(basic_stringbuf_char *this, - fpos_int *ret, streamoff off, int way, int mode) +/* ?clear@ios_base@std@@QAEXH@Z */ +/* ?clear@ios_base@std@@QEAAXH@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_clear, 8) +void __thiscall ios_base_clear(ios_base *this, IOSB_iostate state) { - char *beg, *cur_r, *cur_w; - - TRACE("(%p %p %s %d %d)\n", this, ret, wine_dbgstr_longlong(off), way, mode); + ios_base_clear_reraise(this, state, FALSE); +} - cur_w = basic_streambuf_char_pptr(&this->base); - if(cur_w > this->seekhigh) - this->seekhigh = cur_w; - - ret->off = 0; - ret->state = 0; - - beg = basic_streambuf_char_eback(&this->base); - cur_r = basic_streambuf_char_gptr(&this->base); - if((mode & OPENMODE_in) && cur_r) { - if(way==SEEKDIR_cur && !(mode & OPENMODE_out)) - off += cur_r-beg; - else if(way == SEEKDIR_end) - off += this->seekhigh-beg; - else if(way != SEEKDIR_beg) - off = -1; - - if(off<0 || off>this->seekhigh-beg) { - off = -1; - }else { - basic_streambuf_char_gbump(&this->base, beg-cur_r+off); - if((mode & OPENMODE_out) && cur_w) { - basic_streambuf_char_setp_next(&this->base, beg, - basic_streambuf_char_gptr(&this->base), - basic_streambuf_char_epptr(&this->base)); - } - } - }else if((mode & OPENMODE_out) && cur_w) { - if(way == SEEKDIR_cur) - off += cur_w-beg; - else if(way == SEEKDIR_end) - off += this->seekhigh-beg; - else if(way != SEEKDIR_beg) - off = -1; - - if(off<0 || off>this->seekhigh-beg) - off = -1; - else - basic_streambuf_char_pbump(&this->base, beg-cur_w+off); - }else { - off = -1; - } - - ret->pos = off; - return ret; -} - -/* ?seekpos@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MAE?AV?$fpos@H@2@V32@H@Z */ -/* ?seekpos@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_seekpos, 36) -fpos_int* __thiscall basic_stringbuf_char_seekpos(basic_stringbuf_char *this, - fpos_int *ret, fpos_int pos, int mode) +/* ?clear@ios_base@std@@QAEXI@Z */ +/* ?clear@ios_base@std@@QEAAXI@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_clear_unsigned, 8) +void __thiscall ios_base_clear_unsigned(ios_base *this, unsigned int state) { - TRACE("(%p %p %s %d)\n", this, ret, debugstr_fpos_int(&pos), mode); - - if(pos.off==0 && pos.pos==-1 && pos.state==0) { - *ret = pos; - return ret; - } - - return basic_stringbuf_char_seekoff(this, ret, pos.off, SEEKDIR_beg, mode); + ios_base_clear_reraise(this, (IOSB_iostate)state, FALSE); } -/* ?str@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */ -/* ?str@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_str_set, 8) -void __thiscall basic_stringbuf_char_str_set(basic_stringbuf_char *this, const basic_string_char *str) +/* ?exceptions@ios_base@std@@QAEXH@Z */ +/* ?exceptions@ios_base@std@@QEAAXH@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_exceptions_set, 8) +void __thiscall ios_base_exceptions_set(ios_base *this, IOSB_iostate state) { - TRACE("(%p %p)\n", this, str); - - basic_stringbuf_char__Tidy(this); - basic_stringbuf_char__Init(this, MSVCP_basic_string_char_c_str(str), str->size, this->state); + TRACE("(%p %x)\n", this, state); + this->except = state & IOSTATE_mask; + ios_base_clear(this, this->state); } -/* ?str@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -/* ?str@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_str_get, 8) -basic_string_char* __thiscall basic_stringbuf_char_str_get(const basic_stringbuf_char *this, basic_string_char *ret) +/* ?exceptions@ios_base@std@@QAEXI@Z */ +/* ?exceptions@ios_base@std@@QEAAXI@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_exceptions_set_unsigned, 8) +void __thiscall ios_base_exceptions_set_unsigned(ios_base *this, unsigned int state) { - char *ptr; - - TRACE("(%p)\n", this); - - if(!(this->state & STRINGBUF_no_write) && basic_streambuf_char_pptr(&this->base)) { - char *pptr; - - ptr = basic_streambuf_char_pbase(&this->base); - pptr = basic_streambuf_char_pptr(&this->base); - - return MSVCP_basic_string_char_ctor_cstr_len(ret, ptr, (this->seekhigh < pptr ? pptr : this->seekhigh) - ptr); - } - - if(!(this->state & STRINGBUF_no_read) && basic_streambuf_char_gptr(&this->base)) { - ptr = basic_streambuf_char_eback(&this->base); - return MSVCP_basic_string_char_ctor_cstr_len(ret, ptr, basic_streambuf_char_egptr(&this->base) - ptr); - } - - return MSVCP_basic_string_char_ctor(ret); + TRACE("(%p %x)\n", this, state); + ios_base_exceptions_set(this, state); } -/* ?_Getstate@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@AAEHH@Z */ -/* ?_Getstate@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@AEAAHH@Z */ -/* ?_Getstate@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEHH@Z */ -/* ?_Getstate@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar__Getstate, 8) -int __thiscall basic_stringbuf_wchar__Getstate(basic_stringbuf_wchar *this, IOSB_openmode mode) +/* ?exceptions@ios_base@std@@QBEHXZ */ +/* ?exceptions@ios_base@std@@QEBAHXZ */ +DEFINE_THISCALL_WRAPPER(ios_base_exceptions_get, 4) +IOSB_iostate __thiscall ios_base_exceptions_get(ios_base *this) { - int state = 0; - - if(!(mode & OPENMODE_in)) - state |= STRINGBUF_no_read; - - if(!(mode & OPENMODE_out)) - state |= STRINGBUF_no_write; - - if(mode & OPENMODE_ate) - state |= STRINGBUF_at_end; - - if(mode & OPENMODE_app) - state |= STRINGBUF_append; - - return state; + TRACE("(%p)\n", this); + return this->except; } -/* ?_Init@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAEXPB_WIH@Z */ -/* ?_Init@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAAXPEB_W_KH@Z */ -/* ?_Init@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IAEXPBGIH@Z */ -/* ?_Init@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IEAAXPEBG_KH@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar__Init, 16) -void __thiscall basic_stringbuf_wchar__Init(basic_stringbuf_wchar *this, const wchar_t *str, MSVCP_size_t count, int state) +/* ?copyfmt@ios_base@std@@QAEAAV12@ABV12@@Z */ +/* ?copyfmt@ios_base@std@@QEAAAEAV12@AEBV12@@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_copyfmt, 8) +ios_base* __thiscall ios_base_copyfmt(ios_base *this, const ios_base *rhs) { - TRACE("(%p, %p, %lu, %d)\n", this, str, count, state); + TRACE("(%p %p)\n", this, rhs); - basic_streambuf_wchar__Init_empty(&this->base); + if(this != rhs) { + IOS_BASE_iosarray *arr_cur; + IOS_BASE_fnarray *event_cur; - this->state = state; - this->seekhigh = NULL; + ios_base_Tidy(this); - if(count && str) { - wchar_t *buf = MSVCRT_operator_new(count*sizeof(wchar_t)); - if(!buf) { - ERR("Out of memory\n"); - throw_exception(EXCEPTION_BAD_ALLOC, NULL); + for(arr_cur=rhs->arr; arr_cur; arr_cur=arr_cur->next) { + if(arr_cur->long_val) + *ios_base_iword(this, arr_cur->index) = arr_cur->long_val; + if(arr_cur->ptr_val) + *ios_base_pword(this, arr_cur->index) = arr_cur->ptr_val; } + this->stdstr = rhs->stdstr; + this->fmtfl = rhs->fmtfl; + this->prec = rhs->prec; + this->wide = rhs->wide; + locale_operator_assign(this->loc, rhs->loc); - memcpy(buf, str, count*sizeof(wchar_t)); - this->seekhigh = buf + count; - - this->state |= STRINGBUF_allocated; - - if(!(state & STRINGBUF_no_read)) - basic_streambuf_wchar_setg(&this->base, buf, buf, buf + count); - - if(!(state & STRINGBUF_no_write)) { - basic_streambuf_wchar_setp_next(&this->base, buf, (state & STRINGBUF_at_end) ? buf + count : buf, buf + count); + for(event_cur=rhs->calls; event_cur; event_cur=event_cur->next) + ios_base_register_callback(this, event_cur->event_handler, event_cur->index); - if(!basic_streambuf_wchar_gptr(&this->base)) - basic_streambuf_wchar_setg(&this->base, buf, 0, buf); - } + ios_base_Callfns(this, EVENT_copyfmt_event); + ios_base_exceptions_set(this, rhs->except); } + + return this; } -/* ??0?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@1@H@Z */ -/* ??0?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@AEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@1@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_ctor_str, 12) -basic_stringbuf_wchar* __thiscall basic_stringbuf_wchar_ctor_str(basic_stringbuf_wchar *this, - const basic_string_wchar *str, IOSB_openmode mode) +/* ??4ios_base@std@@QAEAAV01@ABV01@@Z */ +/* ??4ios_base@std@@QEAAAEAV01@AEBV01@@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_assign, 8) +ios_base* __thiscall ios_base_assign(ios_base *this, const ios_base *right) { - TRACE("(%p %p %d)\n", this, str, mode); + TRACE("(%p %p)\n", this, right); - basic_streambuf_wchar_ctor(&this->base); - this->base.vtable = &MSVCP_basic_stringbuf_wchar_vtable; + if(this != right) { + this->state = right->state; + ios_base_copyfmt(this, right); + } - basic_stringbuf_wchar__Init(this, MSVCP_basic_string_wchar_c_str(str), - str->size, basic_stringbuf_wchar__Getstate(this, mode)); return this; } -/* ??0?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@1@H@Z */ -/* ??0?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@1@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_short_ctor_str, 12) -basic_stringbuf_wchar* __thiscall basic_stringbuf_short_ctor_str(basic_stringbuf_wchar *this, - const basic_string_wchar *str, IOSB_openmode mode) +/* ?fail@ios_base@std@@QBE_NXZ */ +/* ?fail@ios_base@std@@QEBA_NXZ */ +DEFINE_THISCALL_WRAPPER(ios_base_fail, 4) +MSVCP_bool __thiscall ios_base_fail(const ios_base *this) { - basic_stringbuf_wchar_ctor_str(this, str, mode); - this->base.vtable = &MSVCP_basic_stringbuf_short_vtable; - return this; + TRACE("(%p)\n", this); + return (this->state & (IOSTATE_failbit|IOSTATE_badbit)) != 0; } -/* ??0?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@H@Z */ -/* ??0?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_ctor_mode, 8) -basic_stringbuf_wchar* __thiscall basic_stringbuf_wchar_ctor_mode( - basic_stringbuf_wchar *this, IOSB_openmode mode) +/* ??7ios_base@std@@QBE_NXZ */ +/* ??7ios_base@std@@QEBA_NXZ */ +DEFINE_THISCALL_WRAPPER(ios_base_op_succ, 4) +MSVCP_bool __thiscall ios_base_op_succ(const ios_base *this) { - TRACE("(%p %d)\n", this, mode); - - basic_streambuf_wchar_ctor(&this->base); - this->base.vtable = &MSVCP_basic_stringbuf_wchar_vtable; - - basic_stringbuf_wchar__Init(this, NULL, 0, basic_stringbuf_wchar__Getstate(this, mode)); - return this; + TRACE("(%p)\n", this); + return ios_base_fail(this); } -/* ??0?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@H@Z */ -/* ??0?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_short_ctor_mode, 8) -basic_stringbuf_wchar* __thiscall basic_stringbuf_short_ctor_mode( - basic_stringbuf_wchar *this, IOSB_openmode mode) +/* ??Bios_base@std@@QBEPAXXZ */ +/* ??Bios_base@std@@QEBAPEAXXZ */ +DEFINE_THISCALL_WRAPPER(ios_base_op_fail, 4) +void* __thiscall ios_base_op_fail(const ios_base *this) { - basic_stringbuf_wchar_ctor_mode(this, mode); - this->base.vtable = &MSVCP_basic_stringbuf_short_vtable; - return this; + TRACE("(%p)\n", this); + return ios_base_fail(this) ? NULL : (void*)this; } -/* ??_F?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXXZ */ -/* ??_F?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_ctor, 4) -basic_stringbuf_wchar* __thiscall basic_stringbuf_wchar_ctor(basic_stringbuf_wchar *this) +/* ?_Addstd@ios_base@std@@SAXPAV12@@Z */ +/* ?_Addstd@ios_base@std@@SAXPEAV12@@Z */ +void CDECL ios_base_Addstd(ios_base *add) { - return basic_stringbuf_wchar_ctor_mode(this, OPENMODE_in|OPENMODE_out); + FIXME("(%p) stub\n", add); } -/* ??_F?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */ -/* ??_F?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_short_ctor, 4) -basic_stringbuf_wchar* __thiscall basic_stringbuf_short_ctor(basic_stringbuf_wchar *this) +/* ?_Init@ios_base@std@@IAEXXZ */ +/* ?_Init@ios_base@std@@IEAAXXZ */ +DEFINE_THISCALL_WRAPPER(ios_base_Init, 4) +void __thiscall ios_base_Init(ios_base *this) { - return basic_stringbuf_short_ctor_mode(this, OPENMODE_in|OPENMODE_out); + TRACE("(%p)\n", this); + + this->stdstr = 0; + this->state = this->except = IOSTATE_goodbit; + this->fmtfl = FMTFLAG_skipws | FMTFLAG_dec; + this->prec = 6; + this->wide = 0; + this->arr = NULL; + this->calls = NULL; + this->loc = MSVCRT_operator_new(sizeof(locale)); + locale_ctor(this->loc); } -/* ?_Tidy@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAEXXZ */ -/* ?_Tidy@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAAXXZ */ -/* ?_Tidy@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IAEXXZ */ -/* ?_Tidy@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar__Tidy, 4) -void __thiscall basic_stringbuf_wchar__Tidy(basic_stringbuf_wchar *this) +/* ?bad@ios_base@std@@QBE_NXZ */ +/* ?bad@ios_base@std@@QEBA_NXZ */ +DEFINE_THISCALL_WRAPPER(ios_base_bad, 4) +MSVCP_bool __thiscall ios_base_bad(const ios_base *this) { TRACE("(%p)\n", this); - - if(this->state & STRINGBUF_allocated) { - MSVCRT_operator_delete(basic_streambuf_wchar_eback(&this->base)); - this->seekhigh = NULL; - this->state &= ~STRINGBUF_allocated; - } - - basic_streambuf_wchar__Init_empty(&this->base); + return (this->state & IOSTATE_badbit) != 0; } -/* ??1?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@UAE@XZ */ -/* ??1?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@UEAA@XZ */ -/* ??1?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@UAE@XZ */ -/* ??1?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_dtor, 4) -void __thiscall basic_stringbuf_wchar_dtor(basic_stringbuf_wchar *this) +/* ?eof@ios_base@std@@QBE_NXZ */ +/* ?eof@ios_base@std@@QEBA_NXZ */ +DEFINE_THISCALL_WRAPPER(ios_base_eof, 4) +MSVCP_bool __thiscall ios_base_eof(const ios_base *this) { TRACE("(%p)\n", this); - - basic_stringbuf_wchar__Tidy(this); - basic_streambuf_wchar_dtor(&this->base); + return (this->state & IOSTATE_eofbit) != 0; } -DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_vector_dtor, 8) -basic_stringbuf_wchar* __thiscall basic_stringbuf_wchar_vector_dtor(basic_stringbuf_wchar *this, unsigned int flags) +/* ?flags@ios_base@std@@QAEHH@Z */ +/* ?flags@ios_base@std@@QEAAHH@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_flags_set, 8) +IOSB_fmtflags __thiscall ios_base_flags_set(ios_base *this, IOSB_fmtflags flags) { - TRACE("(%p %x)\n", this, flags); - - if(flags & 2) { - /* we have an array, with the number of elements stored before the first object */ - INT_PTR i, *ptr = (INT_PTR *) this - 1; - - for (i = *ptr - 1; i >= 0; i--) - basic_stringbuf_wchar_dtor(this+i); - - MSVCRT_operator_delete(ptr); - }else { - basic_stringbuf_wchar_dtor(this); + IOSB_fmtflags ret = this->fmtfl; - if(flags & 1) - MSVCRT_operator_delete(this); - } + TRACE("(%p %x)\n", this, flags); - return this; + this->fmtfl = flags & FMTFLAG_mask; + return ret; } -/* ?overflow@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MAEGG@Z */ -/* ?overflow@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MEAAGG@Z */ -/* ?overflow@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MAEGG@Z */ -/* ?overflow@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MEAAGG@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_overflow, 8) -unsigned short __thiscall basic_stringbuf_wchar_overflow(basic_stringbuf_wchar *this, unsigned short meta) +/* ?flags@ios_base@std@@QBEHXZ */ +/* ?flags@ios_base@std@@QEBAHXZ */ +DEFINE_THISCALL_WRAPPER(ios_base_flags_get, 4) +IOSB_fmtflags __thiscall ios_base_flags_get(const ios_base *this) { - MSVCP_size_t oldsize, size; - wchar_t *ptr, *buf; - - TRACE("(%p %x)\n", this, meta); - - if(meta == WEOF) - return !WEOF; - if(this->state & STRINGBUF_no_write) - return WEOF; - - ptr = basic_streambuf_wchar_pptr(&this->base); - if((this->state&STRINGBUF_append) && ptr<this->seekhigh) - basic_streambuf_wchar_setp_next(&this->base, basic_streambuf_wchar_pbase(&this->base), - this->seekhigh, basic_streambuf_wchar_epptr(&this->base)); - - if(ptr && ptr<basic_streambuf_wchar_epptr(&this->base)) - return (*basic_streambuf_wchar__Pninc(&this->base) = meta); - - oldsize = (ptr ? basic_streambuf_wchar_epptr(&this->base)-basic_streambuf_wchar_eback(&this->base): 0); - size = oldsize|0xf; - size += size/2; - buf = MSVCRT_operator_new(size*sizeof(wchar_t)); - if(!buf) { - ERR("Out of memory\n"); - throw_exception(EXCEPTION_BAD_ALLOC, NULL); - } - - if(!oldsize) { - this->seekhigh = buf; - basic_streambuf_wchar_setp(&this->base, buf, buf+size); - if(this->state & STRINGBUF_no_read) - basic_streambuf_wchar_setg(&this->base, buf, NULL, buf); - else - basic_streambuf_wchar_setg(&this->base, buf, buf, buf+1); - - this->state |= STRINGBUF_allocated; - }else { - ptr = basic_streambuf_wchar_eback(&this->base); - memcpy(buf, ptr, oldsize*sizeof(wchar_t)); - - this->seekhigh = buf+(this->seekhigh-ptr); - basic_streambuf_wchar_setp_next(&this->base, buf, - buf+(basic_streambuf_wchar_pptr(&this->base)-ptr), buf+size); - if(this->state & STRINGBUF_no_read) - basic_streambuf_wchar_setg(&this->base, buf, NULL, buf); - else - basic_streambuf_wchar_setg(&this->base, buf, - buf+(basic_streambuf_wchar_gptr(&this->base)-ptr), - basic_streambuf_wchar_pptr(&this->base)+1); - - MSVCRT_operator_delete(ptr); - } - - return (*basic_streambuf_wchar__Pninc(&this->base) = meta); + TRACE("(%p)\n", this); + return this->fmtfl; } -/* ?pbackfail@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MAEGG@Z */ -/* ?pbackfail@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MEAAGG@Z */ -/* ?pbackfail@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MAEGG@Z */ -/* ?pbackfail@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MEAAGG@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_pbackfail, 8) -unsigned short __thiscall basic_stringbuf_wchar_pbackfail(basic_stringbuf_wchar *this, unsigned short c) +/* ?getloc@ios_base@std@@QBE?AVlocale@2@XZ */ +/* ?getloc@ios_base@std@@QEBA?AVlocale@2@XZ */ +DEFINE_THISCALL_WRAPPER(ios_base_getloc, 8) +locale* __thiscall ios_base_getloc(const ios_base *this, locale *ret) { - wchar_t *cur; - - TRACE("(%p %x)\n", this, c); - - cur = basic_streambuf_wchar_gptr(&this->base); - if(!cur || cur==basic_streambuf_wchar_eback(&this->base) - || (c!=WEOF && c!=cur[-1] && this->state&STRINGBUF_no_write)) - return WEOF; - - if(c != WEOF) - cur[-1] = c; - basic_streambuf_wchar_gbump(&this->base, -1); - return c==WEOF ? !WEOF : c; + TRACE("(%p)\n", this); + return locale_copy_ctor(ret, this->loc); } -/* ?underflow@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MAEGXZ */ -/* ?underflow@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MEAAGXZ */ -/* ?underflow@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MAEGXZ */ -/* ?underflow@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MEAAGXZ */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_underflow, 4) -unsigned short __thiscall basic_stringbuf_wchar_underflow(basic_stringbuf_wchar *this) +/* ?good@ios_base@std@@QBE_NXZ */ +/* ?good@ios_base@std@@QEBA_NXZ */ +DEFINE_THISCALL_WRAPPER(ios_base_good, 4) +MSVCP_bool __thiscall ios_base_good(const ios_base *this) { - wchar_t *ptr, *cur; - TRACE("(%p)\n", this); - - cur = basic_streambuf_wchar_gptr(&this->base); - if(!cur || this->state&STRINGBUF_no_read) - return WEOF; - - ptr = basic_streambuf_wchar_pptr(&this->base); - if(this->seekhigh < ptr) - this->seekhigh = ptr; - - ptr = basic_streambuf_wchar_egptr(&this->base); - if(this->seekhigh > ptr) - basic_streambuf_wchar_setg(&this->base, basic_streambuf_wchar_eback(&this->base), cur, this->seekhigh); - - if(cur < this->seekhigh) - return *cur; - return WEOF; + return this->state == IOSTATE_goodbit; } -/* ?seekoff@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MAE?AV?$fpos@H@2@JHH@Z */ -/* ?seekoff@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */ -/* ?seekoff@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MAE?AV?$fpos@H@2@JHH@Z */ -/* ?seekoff@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_seekoff, 24) -fpos_int* __thiscall basic_stringbuf_wchar_seekoff(basic_stringbuf_wchar *this, - fpos_int *ret, streamoff off, int way, int mode) +/* ?imbue@ios_base@std@@QAE?AVlocale@2@ABV32@@Z */ +/* ?imbue@ios_base@std@@QEAA?AVlocale@2@AEBV32@@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_imbue, 12) +locale* __thiscall ios_base_imbue(ios_base *this, locale *ret, const locale *loc) { - wchar_t *beg, *cur_r, *cur_w; - - TRACE("(%p %p %s %d %d)\n", this, ret, wine_dbgstr_longlong(off), way, mode); - - cur_w = basic_streambuf_wchar_pptr(&this->base); - if(cur_w > this->seekhigh) - this->seekhigh = cur_w; - - ret->off = 0; - ret->state = 0; - - beg = basic_streambuf_wchar_eback(&this->base); - cur_r = basic_streambuf_wchar_gptr(&this->base); - if((mode & OPENMODE_in) && cur_r) { - if(way==SEEKDIR_cur && !(mode & OPENMODE_out)) - off += cur_r-beg; - else if(way == SEEKDIR_end) - off += this->seekhigh-beg; - else if(way != SEEKDIR_beg) - off = -1; - - if(off<0 || off>this->seekhigh-beg) { - off = -1; - }else { - basic_streambuf_wchar_gbump(&this->base, beg-cur_r+off); - if((mode & OPENMODE_out) && cur_w) { - basic_streambuf_wchar_setp_next(&this->base, beg, - basic_streambuf_wchar_gptr(&this->base), - basic_streambuf_wchar_epptr(&this->base)); - } - } - }else if((mode & OPENMODE_out) && cur_w) { - if(way == SEEKDIR_cur) - off += cur_w-beg; - else if(way == SEEKDIR_end) - off += this->seekhigh-beg; - else if(way != SEEKDIR_beg) - off = -1; - - if(off<0 || off>this->seekhigh-beg) - off = -1; - else - basic_streambuf_wchar_pbump(&this->base, beg-cur_w+off); - }else { - off = -1; - } - - ret->pos = off; + TRACE("(%p %p)\n", this, loc); + *ret = *this->loc; + locale_copy_ctor(this->loc, loc); return ret; } -/* ?seekpos@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MAE?AV?$fpos@H@2@V32@H@Z */ -/* ?seekpos@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */ -/* ?seekpos@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MAE?AV?$fpos@H@2@V32@H@Z */ -/* ?seekpos@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_seekpos, 36) -fpos_int* __thiscall basic_stringbuf_wchar_seekpos(basic_stringbuf_wchar *this, - fpos_int *ret, fpos_int pos, int mode) +/* ?precision@ios_base@std@@QAEHH@Z */ +/* ?precision@ios_base@std@@QEAA_J_J@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_precision_set, 12) +streamsize __thiscall ios_base_precision_set(ios_base *this, streamsize precision) { - TRACE("(%p %p %s %d)\n", this, ret, debugstr_fpos_int(&pos), mode); + streamsize ret = this->prec; - if(pos.off==0 && pos.pos==-1 && pos.state==0) { - *ret = pos; - return ret; - } + TRACE("(%p %s)\n", this, wine_dbgstr_longlong(precision)); - return basic_stringbuf_wchar_seekoff(this, ret, pos.off, SEEKDIR_beg, mode); + this->prec = precision; + return ret; } -/* ?str@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z */ -/* ?str@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z */ -/* ?str@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z */ -/* ?str@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_str_set, 8) -void __thiscall basic_stringbuf_wchar_str_set(basic_stringbuf_wchar *this, const basic_string_wchar *str) +/* ?precision@ios_base@std@@QBEHXZ */ +/* ?precision@ios_base@std@@QEBA_JXZ */ +DEFINE_THISCALL_WRAPPER(ios_base_precision_get, 4) +streamsize __thiscall ios_base_precision_get(const ios_base *this) { - TRACE("(%p %p)\n", this, str); + TRACE("(%p)\n", this); + return this->prec; +} - basic_stringbuf_wchar__Tidy(this); - basic_stringbuf_wchar__Init(this, MSVCP_basic_string_wchar_c_str(str), str->size, this->state); +/* ?rdstate@ios_base@std@@QBEHXZ */ +/* ?rdstate@ios_base@std@@QEBAHXZ */ +DEFINE_THISCALL_WRAPPER(ios_base_rdstate, 4) +IOSB_iostate __thiscall ios_base_rdstate(const ios_base *this) +{ + TRACE("(%p)\n", this); + return this->state; } -/* ?str@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?str@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?str@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -/* ?str@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_str_get, 8) -basic_string_wchar* __thiscall basic_stringbuf_wchar_str_get(const basic_stringbuf_wchar *this, basic_string_wchar *ret) +/* ?setf@ios_base@std@@QAEHHH@Z */ +/* ?setf@ios_base@std@@QEAAHHH@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_setf_mask, 12) +IOSB_fmtflags __thiscall ios_base_setf_mask(ios_base *this, IOSB_fmtflags flags, IOSB_fmtflags mask) { - wchar_t *ptr; + IOSB_fmtflags ret = this->fmtfl; - TRACE("(%p)\n", this); + TRACE("(%p %x %x)\n", this, flags, mask); - if(!(this->state & STRINGBUF_no_write) && basic_streambuf_wchar_pptr(&this->base)) { - wchar_t *pptr; + this->fmtfl = (this->fmtfl & (~mask)) | (flags & mask & FMTFLAG_mask); + return ret; +} - ptr = basic_streambuf_wchar_pbase(&this->base); - pptr = basic_streambuf_wchar_pptr(&this->base); +/* ?setf@ios_base@std@@QAEHH@Z */ +/* ?setf@ios_base@std@@QEAAHH@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_setf, 8) +IOSB_fmtflags __thiscall ios_base_setf(ios_base *this, IOSB_fmtflags flags) +{ + return ios_base_setf_mask(this, flags, ~0); +} - return MSVCP_basic_string_wchar_ctor_cstr_len(ret, ptr, (this->seekhigh < pptr ? pptr : this->seekhigh) - ptr); - } +/* ?setstate@ios_base@std@@QAEXH_N@Z */ +/* ?setstate@ios_base@std@@QEAAXH_N@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_setstate_reraise, 12) +void __thiscall ios_base_setstate_reraise(ios_base *this, IOSB_iostate state, MSVCP_bool reraise) +{ + TRACE("(%p %x %x)\n", this, state, reraise); - if(!(this->state & STRINGBUF_no_read) && basic_streambuf_wchar_gptr(&this->base)) { - ptr = basic_streambuf_wchar_eback(&this->base); - return MSVCP_basic_string_wchar_ctor_cstr_len(ret, ptr, basic_streambuf_wchar_egptr(&this->base) - ptr); - } + if(state != IOSTATE_goodbit) + ios_base_clear_reraise(this, this->state | state, reraise); +} - return MSVCP_basic_string_wchar_ctor(ret); +/* ?setstate@ios_base@std@@QAEXH@Z */ +/* ?setstate@ios_base@std@@QEAAXH@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_setstate, 8) +void __thiscall ios_base_setstate(ios_base *this, IOSB_iostate state) +{ + ios_base_setstate_reraise(this, state, FALSE); } -/* ??0ios_base@std@@IAE@XZ */ -/* ??0ios_base@std@@IEAA@XZ */ -DEFINE_THISCALL_WRAPPER(ios_base_ctor, 4) -ios_base* __thiscall ios_base_ctor(ios_base *this) +/* ?setstate@ios_base@std@@QAEXI@Z */ +/* ?setstate@ios_base@std@@QEAAXI@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_setstate_unsigned, 8) +void __thiscall ios_base_setstate_unsigned(ios_base *this, unsigned int state) { - TRACE("(%p)\n", this); - this->vtable = &MSVCP_ios_base_vtable; - return this; + ios_base_setstate_reraise(this, (IOSB_iostate)state, FALSE); } -/* ??0ios_base@std@@QAE@ABV01@@Z */ -/* ??0ios_base@std@@QEAA@AEBV01@@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_copy_ctor, 8) -ios_base* __thiscall ios_base_copy_ctor(ios_base *this, const ios_base *copy) +/* ?sync_with_stdio@ios_base@std@@SA_N_N@Z */ +MSVCP_bool CDECL ios_base_sync_with_stdio(MSVCP_bool sync) { - TRACE("(%p %p)\n", this, copy); - *this = *copy; - this->vtable = &MSVCP_ios_base_vtable; - return this; + _Lockit lock; + MSVCP_bool ret; + + TRACE("(%x)\n", sync); + + _Lockit_ctor_locktype(&lock, _LOCK_STREAM); + ret = ios_base_Sync; + ios_base_Sync = sync; + _Lockit_dtor(&lock); + return ret; } -/* ?_Callfns@ios_base@std@@AAEXW4event@12@@Z */ -/* ?_Callfns@ios_base@std@@AEAAXW4event@12@@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_Callfns, 8) -void __thiscall ios_base_Callfns(ios_base *this, IOS_BASE_event event) +/* ?unsetf@ios_base@std@@QAEXH@Z */ +/* ?unsetf@ios_base@std@@QEAAXH@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_unsetf, 8) +void __thiscall ios_base_unsetf(ios_base *this, IOSB_fmtflags flags) { - IOS_BASE_fnarray *cur; + TRACE("(%p %x)\n", this, flags); + this->fmtfl &= ~flags; +} - TRACE("(%p %x)\n", this, event); +/* ?width@ios_base@std@@QAEHH@Z */ +/* ?width@ios_base@std@@QEAA_J_J@Z */ +DEFINE_THISCALL_WRAPPER(ios_base_width_set, 12) +streamsize __thiscall ios_base_width_set(ios_base *this, streamsize width) +{ + streamsize ret = this->wide; - for(cur=this->calls; cur; cur=cur->next) - cur->event_handler(event, this, cur->index); + TRACE("(%p %s)\n", this, wine_dbgstr_longlong(width)); + + this->wide = width; + return ret; } -/* ?_Tidy@ios_base@std@@AAAXXZ */ -/* ?_Tidy@ios_base@std@@AEAAXXZ */ -void CDECL ios_base_Tidy(ios_base *this) +/* ?width@ios_base@std@@QBEHXZ */ +/* ?width@ios_base@std@@QEBA_JXZ */ +DEFINE_THISCALL_WRAPPER(ios_base_width_get, 4) +streamsize __thiscall ios_base_width_get(ios_base *this) { - IOS_BASE_iosarray *arr_cur, *arr_next; - IOS_BASE_fnarray *event_cur, *event_next; + TRACE("(%p)\n", this); + return this->wide; +} + +/* ?xalloc@ios_base@std@@SAHXZ */ +int CDECL ios_base_xalloc(void) +{ + _Lockit lock; + int ret; + + TRACE("\n"); + + _Lockit_ctor_locktype(&lock, _LOCK_STREAM); + ret = ios_base_Index++; + _Lockit_dtor(&lock); + return ret; +} +/* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@IAE@XZ */ +/* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@IEAA@XZ */ +DEFINE_THISCALL_WRAPPER(basic_ios_char_ctor, 4) +basic_ios_char* __thiscall basic_ios_char_ctor(basic_ios_char *this) +{ TRACE("(%p)\n", this); - ios_base_Callfns(this, EVENT_erase_event); + ios_base_ctor(&this->base); + this->base.vtable = &MSVCP_basic_ios_char_vtable; + return this; +} - for(arr_cur=this->arr; arr_cur; arr_cur=arr_next) { - arr_next = arr_cur->next; - MSVCRT_operator_delete(arr_cur); - } - this->arr = NULL; +/* ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z */ +/* ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IEAAXPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_char_init, 12) +void __thiscall basic_ios_char_init(basic_ios_char *this, basic_streambuf_char *streambuf, MSVCP_bool isstd) +{ + TRACE("(%p %p %x)\n", this, streambuf, isstd); + ios_base_Init(&this->base); + this->strbuf = streambuf; + this->stream = NULL; + this->fillch = ' '; - for(event_cur=this->calls; event_cur; event_cur=event_next) { - event_next = event_cur->next; - MSVCRT_operator_delete(event_cur); - } - this->calls = NULL; + if(!streambuf) + ios_base_setstate(&this->base, IOSTATE_badbit); + + if(isstd) + FIXME("standard streams not handled yet\n"); } -/* ?_Ios_base_dtor@ios_base@std@@CAXPAV12@@Z */ -/* ?_Ios_base_dtor@ios_base@std@@CAXPEAV12@@Z */ -void CDECL ios_base_Ios_base_dtor(ios_base *obj) +/* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */ +/* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_char_ctor_streambuf, 8) +basic_ios_char* __thiscall basic_ios_char_ctor_streambuf(basic_ios_char *this, basic_streambuf_char *strbuf) { - TRACE("(%p)\n", obj); - if(obj->loc) { - locale_dtor(obj->loc); - MSVCRT_operator_delete(obj->loc); - } - ios_base_Tidy(obj); + TRACE("(%p %p)\n", this, strbuf); + + basic_ios_char_ctor(this); + basic_ios_char_init(this, strbuf, FALSE); + return this; } -/* ??1ios_base@std@@UAE@XZ */ -/* ??1ios_base@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(ios_base_dtor, 4) -void __thiscall ios_base_dtor(ios_base *this) +/* ??1?$basic_ios@DU?$char_traits@D@std@@@std@@UAE@XZ */ +/* ??1?$basic_ios@DU?$char_traits@D@std@@@std@@UEAA@XZ */ +DEFINE_THISCALL_WRAPPER(basic_ios_char_dtor, 4) +void __thiscall basic_ios_char_dtor(basic_ios_char *this) { - ios_base_Ios_base_dtor(this); + TRACE("(%p)\n", this); + ios_base_dtor(&this->base); } -DEFINE_THISCALL_WRAPPER(ios_base_vector_dtor, 8) -ios_base* __thiscall ios_base_vector_dtor(ios_base *this, unsigned int flags) +DEFINE_THISCALL_WRAPPER(basic_ios_char_vector_dtor, 8) +basic_ios_char* __thiscall basic_ios_char_vector_dtor(basic_ios_char *this, unsigned int flags) { TRACE("(%p %x)\n", this, flags); if(flags & 2) { @@ -4411,10 +3478,10 @@ ios_base* __thiscall ios_base_vector_dtor(ios_base *this, unsigned int flags) INT_PTR i, *ptr = (INT_PTR *)this-1; for(i=*ptr-1; i>=0; i--) - ios_base_dtor(this+i); + basic_ios_char_dtor(this+i); MSVCRT_operator_delete(ptr); } else { - ios_base_dtor(this); + basic_ios_char_dtor(this); if(flags & 1) MSVCRT_operator_delete(this); } @@ -4422,526 +3489,534 @@ ios_base* __thiscall ios_base_vector_dtor(ios_base *this, unsigned int flags) return this; } -DEFINE_THISCALL_WRAPPER(iosb_vector_dtor, 8) -void* __thiscall iosb_vector_dtor(void *this, unsigned int flags) +/* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z */ +/* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_char_clear_reraise, 12) +void __thiscall basic_ios_char_clear_reraise(basic_ios_char *this, IOSB_iostate state, MSVCP_bool reraise) { - TRACE("(%p %x)\n", this, flags); - if(flags & 2) { - INT_PTR *ptr = (INT_PTR *)this-1; - MSVCRT_operator_delete(ptr); - } else { - if(flags & 1) - MSVCRT_operator_delete(this); - } + TRACE("(%p %x %x)\n", this, state, reraise); + ios_base_clear_reraise(&this->base, state | (this->strbuf ? IOSTATE_goodbit : IOSTATE_badbit), reraise); +} + +/* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXI@Z */ +/* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_char_clear, 8) +void __thiscall basic_ios_char_clear(basic_ios_char *this, unsigned int state) +{ + basic_ios_char_clear_reraise(this, (IOSB_iostate)state, FALSE); +} + +/* ?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEAAV12@ABV12@@Z */ +/* ?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEBV12@@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_char_copyfmt, 8) +basic_ios_char* __thiscall basic_ios_char_copyfmt(basic_ios_char *this, basic_ios_char *copy) +{ + TRACE("(%p %p)\n", this, copy); + if(this == copy) + return this; + this->stream = copy->stream; + this->fillch = copy->fillch; + ios_base_copyfmt(&this->base, ©->base); return this; } -/* ?_Findarr@ios_base@std@@AAEAAU_Iosarray@12@H@Z */ -/* ?_Findarr@ios_base@std@@AEAAAEAU_Iosarray@12@H@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_Findarr, 8) -IOS_BASE_iosarray* __thiscall ios_base_Findarr(ios_base *this, int index) +/* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEDD@Z */ +/* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAADD@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_char_fill_set, 8) +char __thiscall basic_ios_char_fill_set(basic_ios_char *this, char fill) { - IOS_BASE_iosarray *p; + char ret = this->fillch; - TRACE("(%p %d)\n", this, index); + TRACE("(%p %c)\n", this, fill); - for(p=this->arr; p; p=p->next) { - if(p->index == index) - return p; - } - - for(p=this->arr; p; p=p->next) { - if(!p->long_val && !p->ptr_val) { - p->index = index; - return p; - } - } - - p = MSVCRT_operator_new(sizeof(IOS_BASE_iosarray)); - p->next = this->arr; - p->index = index; - p->long_val = 0; - p->ptr_val = NULL; - this->arr = p; - return p; + this->fillch = fill; + return ret; } -/* ?iword@ios_base@std@@QAEAAJH@Z */ -/* ?iword@ios_base@std@@QEAAAEAJH@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_iword, 8) -LONG* __thiscall ios_base_iword(ios_base *this, int index) +/* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDXZ */ +/* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADXZ */ +DEFINE_THISCALL_WRAPPER(basic_ios_char_fill_get, 4) +char __thiscall basic_ios_char_fill_get(basic_ios_char *this) { - TRACE("(%p %d)\n", this, index); - return &ios_base_Findarr(this, index)->long_val; + TRACE("(%p)\n", this); + return this->fillch; } -/* ?pword@ios_base@std@@QAEAAPAXH@Z */ -/* ?pword@ios_base@std@@QEAAAEAPEAXH@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_pword, 8) -void** __thiscall ios_base_pword(ios_base *this, int index) +/* ?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QAE?AVlocale@2@ABV32@@Z */ +/* ?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_char_imbue, 12) +locale *__thiscall basic_ios_char_imbue(basic_ios_char *this, locale *ret, const locale *loc) { - TRACE("(%p %d)\n", this, index); - return &ios_base_Findarr(this, index)->ptr_val; -} + TRACE("(%p %p %p)\n", this, ret, loc); -/* ?register_callback@ios_base@std@@QAEXP6AXW4event@12@AAV12@H@ZH@Z */ -/* ?register_callback@ios_base@std@@QEAAXP6AXW4event@12@AEAV12@H@ZH@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_register_callback, 12) -void __thiscall ios_base_register_callback(ios_base *this, IOS_BASE_event_callback callback, int index) -{ - IOS_BASE_fnarray *event; + if(this->strbuf) { + basic_streambuf_char_pubimbue(this->strbuf, ret, loc); + locale_dtor(ret); + } - TRACE("(%p %p %d)\n", this, callback, index); + return ios_base_imbue(&this->base, ret, loc); +} - event = MSVCRT_operator_new(sizeof(IOS_BASE_fnarray)); - event->next = this->calls; - event->index = index; - event->event_handler = callback; - this->calls = event; +/* ?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDDD@Z */ +/* ?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADDD@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_char_narrow, 12) +char __thiscall basic_ios_char_narrow(basic_ios_char *this, char ch, char def) +{ + TRACE("(%p %c %c)\n", this, ch, def); + return ctype_char_narrow_ch(ctype_char_use_facet(this->strbuf->loc), ch, def); } -/* ?clear@ios_base@std@@QAEXH_N@Z */ -/* ?clear@ios_base@std@@QEAAXH_N@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_clear_reraise, 12) -void __thiscall ios_base_clear_reraise(ios_base *this, IOSB_iostate state, MSVCP_bool reraise) +/* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PAV32@@Z */ +/* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PEAV32@@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_char_rdbuf_set, 8) +basic_streambuf_char* __thiscall basic_ios_char_rdbuf_set(basic_ios_char *this, basic_streambuf_char *streambuf) { - TRACE("(%p %x %x)\n", this, state, reraise); + basic_streambuf_char *ret = this->strbuf; - this->state = state & IOSTATE_mask; - if(!(this->state & this->except)) - return; + TRACE("(%p %p)\n", this, streambuf); - if(reraise) - throw_exception(EXCEPTION_RERAISE, NULL); - else if(this->state & this->except & IOSTATE_eofbit) - throw_exception(EXCEPTION_FAILURE, "eofbit is set"); - else if(this->state & this->except & IOSTATE_failbit) - throw_exception(EXCEPTION_FAILURE, "failbit is set"); - else if(this->state & this->except & IOSTATE_badbit) - throw_exception(EXCEPTION_FAILURE, "badbit is set"); - else if(this->state & this->except & IOSTATE__Hardfail) - throw_exception(EXCEPTION_FAILURE, "_Hardfail is set"); + this->strbuf = streambuf; + basic_ios_char_clear(this, IOSTATE_goodbit); + return ret; } -/* ?clear@ios_base@std@@QAEXH@Z */ -/* ?clear@ios_base@std@@QEAAXH@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_clear, 8) -void __thiscall ios_base_clear(ios_base *this, IOSB_iostate state) +/* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ */ +/* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ */ +DEFINE_THISCALL_WRAPPER(basic_ios_char_rdbuf_get, 4) +basic_streambuf_char* __thiscall basic_ios_char_rdbuf_get(const basic_ios_char *this) { - ios_base_clear_reraise(this, state, FALSE); + TRACE("(%p)\n", this); + return this->strbuf; } -/* ?clear@ios_base@std@@QAEXI@Z */ -/* ?clear@ios_base@std@@QEAAXI@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_clear_unsigned, 8) -void __thiscall ios_base_clear_unsigned(ios_base *this, unsigned int state) +/* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z */ +/* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_char_setstate_reraise, 12) +void __thiscall basic_ios_char_setstate_reraise(basic_ios_char *this, IOSB_iostate state, MSVCP_bool reraise) { - ios_base_clear_reraise(this, (IOSB_iostate)state, FALSE); + TRACE("(%p %x %x)\n", this, state, reraise); + + if(state != IOSTATE_goodbit) + basic_ios_char_clear_reraise(this, this->base.state | state, reraise); } -/* ?exceptions@ios_base@std@@QAEXH@Z */ -/* ?exceptions@ios_base@std@@QEAAXH@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_exceptions_set, 8) -void __thiscall ios_base_exceptions_set(ios_base *this, IOSB_iostate state) +/* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXI@Z */ +/* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_char_setstate, 8) +void __thiscall basic_ios_char_setstate(basic_ios_char *this, unsigned int state) { - TRACE("(%p %x)\n", this, state); - this->except = state & IOSTATE_mask; - ios_base_clear(this, this->state); + basic_ios_char_setstate_reraise(this, (IOSB_iostate)state, FALSE); } -/* ?exceptions@ios_base@std@@QAEXI@Z */ -/* ?exceptions@ios_base@std@@QEAAXI@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_exceptions_set_unsigned, 8) -void __thiscall ios_base_exceptions_set_unsigned(ios_base *this, unsigned int state) +/* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@PAV32@@Z */ +/* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@PEAV32@@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_char_tie_set, 8) +basic_ostream_char* __thiscall basic_ios_char_tie_set(basic_ios_char *this, basic_ostream_char *ostream) { - TRACE("(%p %x)\n", this, state); - ios_base_exceptions_set(this, state); + basic_ostream_char *ret = this->stream; + + TRACE("(%p %p)\n", this, ostream); + + this->stream = ostream; + return ret; } -/* ?exceptions@ios_base@std@@QBEHXZ */ -/* ?exceptions@ios_base@std@@QEBAHXZ */ -DEFINE_THISCALL_WRAPPER(ios_base_exceptions_get, 4) -IOSB_iostate __thiscall ios_base_exceptions_get(ios_base *this) +/* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ */ +/* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ */ +DEFINE_THISCALL_WRAPPER(basic_ios_char_tie_get, 4) +basic_ostream_char* __thiscall basic_ios_char_tie_get(const basic_ios_char *this) { TRACE("(%p)\n", this); - return this->except; + return this->stream; } -/* ?copyfmt@ios_base@std@@QAEAAV12@ABV12@@Z */ -/* ?copyfmt@ios_base@std@@QEAAAEAV12@AEBV12@@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_copyfmt, 8) -ios_base* __thiscall ios_base_copyfmt(ios_base *this, const ios_base *rhs) +/* ?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDD@Z */ +/* ?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADD@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_char_widen, 8) +char __thiscall basic_ios_char_widen(basic_ios_char *this, char ch) { - TRACE("(%p %p)\n", this, rhs); - - if(this != rhs) { - IOS_BASE_iosarray *arr_cur; - IOS_BASE_fnarray *event_cur; - - ios_base_Tidy(this); - - for(arr_cur=rhs->arr; arr_cur; arr_cur=arr_cur->next) { - if(arr_cur->long_val) - *ios_base_iword(this, arr_cur->index) = arr_cur->long_val; - if(arr_cur->ptr_val) - *ios_base_pword(this, arr_cur->index) = arr_cur->ptr_val; - } - this->stdstr = rhs->stdstr; - this->fmtfl = rhs->fmtfl; - this->prec = rhs->prec; - this->wide = rhs->wide; - locale_operator_assign(this->loc, rhs->loc); + TRACE("(%p %c)\n", this, ch); + return ctype_char_widen_ch(ctype_char_use_facet(this->strbuf->loc), ch); +} - for(event_cur=rhs->calls; event_cur; event_cur=event_cur->next) - ios_base_register_callback(this, event_cur->event_handler, event_cur->index); - ios_base_Callfns(this, EVENT_copyfmt_event); - ios_base_exceptions_set(this, rhs->except); - } +/* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@IAE@XZ */ +/* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@IEAA@XZ */ +DEFINE_THISCALL_WRAPPER(basic_ios_wchar_ctor, 4) +basic_ios_wchar* __thiscall basic_ios_wchar_ctor(basic_ios_wchar *this) +{ + TRACE("(%p)\n", this); + ios_base_ctor(&this->base); + this->base.vtable = &MSVCP_basic_ios_wchar_vtable; return this; } -/* ??4ios_base@std@@QAEAAV01@ABV01@@Z */ -/* ??4ios_base@std@@QEAAAEAV01@AEBV01@@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_assign, 8) -ios_base* __thiscall ios_base_assign(ios_base *this, const ios_base *right) +/* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@IAE@XZ */ +/* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@IEAA@XZ */ +DEFINE_THISCALL_WRAPPER(basic_ios_short_ctor, 4) +basic_ios_wchar* __thiscall basic_ios_short_ctor(basic_ios_wchar *this) { - TRACE("(%p %p)\n", this, right); - - if(this != right) { - this->state = right->state; - ios_base_copyfmt(this, right); - } - + basic_ios_wchar_ctor(this); + this->base.vtable = &MSVCP_basic_ios_short_vtable; return this; } -/* ?fail@ios_base@std@@QBE_NXZ */ -/* ?fail@ios_base@std@@QEBA_NXZ */ -DEFINE_THISCALL_WRAPPER(ios_base_fail, 4) -MSVCP_bool __thiscall ios_base_fail(const ios_base *this) +/* ?init@?$basic_ios@_WU?$char_traits@_W@std@@@std@@IAEXPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_N@Z */ +/* ?init@?$basic_ios@_WU?$char_traits@_W@std@@@std@@IEAAXPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_N@Z */ +/* ?init@?$basic_ios@GU?$char_traits@G@std@@@std@@IAEXPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@_N@Z */ +/* ?init@?$basic_ios@GU?$char_traits@G@std@@@std@@IEAAXPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_wchar_init, 12) +void __thiscall basic_ios_wchar_init(basic_ios_wchar *this, basic_streambuf_wchar *streambuf, MSVCP_bool isstd) { - TRACE("(%p)\n", this); - return (this->state & (IOSTATE_failbit|IOSTATE_badbit)) != 0; + TRACE("(%p %p %x)\n", this, streambuf, isstd); + ios_base_Init(&this->base); + this->strbuf = streambuf; + this->stream = NULL; + this->fillch = ' '; + + if(!streambuf) + ios_base_setstate(&this->base, IOSTATE_badbit); + + if(isstd) + FIXME("standard streams not handled yet\n"); } -/* ??7ios_base@std@@QBE_NXZ */ -/* ??7ios_base@std@@QEBA_NXZ */ -DEFINE_THISCALL_WRAPPER(ios_base_op_succ, 4) -MSVCP_bool __thiscall ios_base_op_succ(const ios_base *this) +/* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */ +/* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_wchar_ctor_streambuf, 8) +basic_ios_wchar* __thiscall basic_ios_wchar_ctor_streambuf(basic_ios_wchar *this, basic_streambuf_wchar *strbuf) { - TRACE("(%p)\n", this); - return ios_base_fail(this); + TRACE("(%p %p)\n", this, strbuf); + + basic_ios_wchar_ctor(this); + basic_ios_wchar_init(this, strbuf, FALSE); + return this; } -/* ??Bios_base@std@@QBEPAXXZ */ -/* ??Bios_base@std@@QEBAPEAXXZ */ -DEFINE_THISCALL_WRAPPER(ios_base_op_fail, 4) -void* __thiscall ios_base_op_fail(const ios_base *this) +/* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */ +/* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_short_ctor_streambuf, 8) +basic_ios_wchar* __thiscall basic_ios_short_ctor_streambuf(basic_ios_wchar *this, basic_streambuf_wchar *strbuf) { - TRACE("(%p)\n", this); - return ios_base_fail(this) ? NULL : (void*)this; + basic_ios_wchar_ctor_streambuf(this, strbuf); + this->base.vtable = &MSVCP_basic_ios_short_vtable; + return this; } -/* ?_Addstd@ios_base@std@@SAXPAV12@@Z */ -/* ?_Addstd@ios_base@std@@SAXPEAV12@@Z */ -void CDECL ios_base_Addstd(ios_base *add) +/* ??1?$basic_ios@_WU?$char_traits@_W@std@@@std@@UAE@XZ */ +/* ??1?$basic_ios@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */ +/* ??1?$basic_ios@GU?$char_traits@G@std@@@std@@UAE@XZ */ +/* ??1?$basic_ios@GU?$char_traits@G@std@@@std@@UEAA@XZ */ +DEFINE_THISCALL_WRAPPER(basic_ios_wchar_dtor, 4) +void __thiscall basic_ios_wchar_dtor(basic_ios_wchar *this) { - FIXME("(%p) stub\n", add); + TRACE("(%p)\n", this); + ios_base_dtor(&this->base); } -/* ?_Init@ios_base@std@@IAEXXZ */ -/* ?_Init@ios_base@std@@IEAAXXZ */ -DEFINE_THISCALL_WRAPPER(ios_base_Init, 4) -void __thiscall ios_base_Init(ios_base *this) +DEFINE_THISCALL_WRAPPER(basic_ios_wchar_vector_dtor, 8) +basic_ios_wchar* __thiscall basic_ios_wchar_vector_dtor(basic_ios_wchar *this, unsigned int flags) { - TRACE("(%p)\n", this); + TRACE("(%p %x)\n", this, flags); + if(flags & 2) { + /* we have an array, with the number of elements stored before the first object */ + INT_PTR i, *ptr = (INT_PTR *)this-1; - this->stdstr = 0; - this->state = this->except = IOSTATE_goodbit; - this->fmtfl = FMTFLAG_skipws | FMTFLAG_dec; - this->prec = 6; - this->wide = 0; - this->arr = NULL; - this->calls = NULL; - this->loc = MSVCRT_operator_new(sizeof(locale)); - locale_ctor(this->loc); + for(i=*ptr-1; i>=0; i--) + basic_ios_wchar_dtor(this+i); + MSVCRT_operator_delete(ptr); + } else { + basic_ios_wchar_dtor(this); + if(flags & 1) + MSVCRT_operator_delete(this); + } + + return this; } -/* ?bad@ios_base@std@@QBE_NXZ */ -/* ?bad@ios_base@std@@QEBA_NXZ */ -DEFINE_THISCALL_WRAPPER(ios_base_bad, 4) -MSVCP_bool __thiscall ios_base_bad(const ios_base *this) +/* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z */ +/* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z */ +/* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXH_N@Z */ +/* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXH_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_wchar_clear_reraise, 12) +void __thiscall basic_ios_wchar_clear_reraise(basic_ios_wchar *this, IOSB_iostate state, MSVCP_bool reraise) { - TRACE("(%p)\n", this); - return (this->state & IOSTATE_badbit) != 0; + TRACE("(%p %x %x)\n", this, state, reraise); + ios_base_clear_reraise(&this->base, state | (this->strbuf ? IOSTATE_goodbit : IOSTATE_badbit), reraise); } -/* ?eof@ios_base@std@@QBE_NXZ */ -/* ?eof@ios_base@std@@QEBA_NXZ */ -DEFINE_THISCALL_WRAPPER(ios_base_eof, 4) -MSVCP_bool __thiscall ios_base_eof(const ios_base *this) +/* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXI@Z */ +/* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXI@Z */ +/* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXI@Z */ +/* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXI@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_wchar_clear, 8) +void __thiscall basic_ios_wchar_clear(basic_ios_wchar *this, unsigned int state) { - TRACE("(%p)\n", this); - return (this->state & IOSTATE_eofbit) != 0; + basic_ios_wchar_clear_reraise(this, (IOSB_iostate)state, FALSE); } -/* ?flags@ios_base@std@@QAEHH@Z */ -/* ?flags@ios_base@std@@QEAAHH@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_flags_set, 8) -IOSB_fmtflags __thiscall ios_base_flags_set(ios_base *this, IOSB_fmtflags flags) +/* ?copyfmt@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEAAV12@ABV12@@Z */ +/* ?copyfmt@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEBV12@@Z */ +/* ?copyfmt@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEAAV12@ABV12@@Z */ +/* ?copyfmt@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEBV12@@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_wchar_copyfmt, 8) +basic_ios_wchar* __thiscall basic_ios_wchar_copyfmt(basic_ios_wchar *this, basic_ios_wchar *copy) { - IOSB_fmtflags ret = this->fmtfl; - - TRACE("(%p %x)\n", this, flags); + TRACE("(%p %p)\n", this, copy); + if(this == copy) + return this; - this->fmtfl = flags & FMTFLAG_mask; - return ret; + this->stream = copy->stream; + this->fillch = copy->fillch; + ios_base_copyfmt(&this->base, ©->base); + return this; } -/* ?flags@ios_base@std@@QBEHXZ */ -/* ?flags@ios_base@std@@QEBAHXZ */ -DEFINE_THISCALL_WRAPPER(ios_base_flags_get, 4) -IOSB_fmtflags __thiscall ios_base_flags_get(const ios_base *this) +/* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE_W_W@Z */ +/* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA_W_W@Z */ +/* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEGG@Z */ +/* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAGG@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_wchar_fill_set, 8) +wchar_t __thiscall basic_ios_wchar_fill_set(basic_ios_wchar *this, wchar_t fill) { - TRACE("(%p)\n", this); - return this->fmtfl; -} + wchar_t ret = this->fillch; -/* ?getloc@ios_base@std@@QBE?AVlocale@2@XZ */ -/* ?getloc@ios_base@std@@QEBA?AVlocale@2@XZ */ -DEFINE_THISCALL_WRAPPER(ios_base_getloc, 8) -locale* __thiscall ios_base_getloc(const ios_base *this, locale *ret) -{ - TRACE("(%p)\n", this); - return locale_copy_ctor(ret, this->loc); -} + TRACE("(%p %c)\n", this, fill); -/* ?good@ios_base@std@@QBE_NXZ */ -/* ?good@ios_base@std@@QEBA_NXZ */ -DEFINE_THISCALL_WRAPPER(ios_base_good, 4) -MSVCP_bool __thiscall ios_base_good(const ios_base *this) -{ - TRACE("(%p)\n", this); - return this->state == IOSTATE_goodbit; + this->fillch = fill; + return ret; } -/* ?imbue@ios_base@std@@QAE?AVlocale@2@ABV32@@Z */ -/* ?imbue@ios_base@std@@QEAA?AVlocale@2@AEBV32@@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_imbue, 12) -locale* __thiscall ios_base_imbue(ios_base *this, locale *ret, const locale *loc) +/* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBE_WXZ */ +/* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WXZ */ +/* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEGXZ */ +/* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAGXZ */ +DEFINE_THISCALL_WRAPPER(basic_ios_wchar_fill_get, 4) +wchar_t __thiscall basic_ios_wchar_fill_get(basic_ios_wchar *this) { - TRACE("(%p %p)\n", this, loc); - *ret = *this->loc; - locale_copy_ctor(this->loc, loc); - return ret; + TRACE("(%p)\n", this); + return this->fillch; } -/* ?precision@ios_base@std@@QAEHH@Z */ -/* ?precision@ios_base@std@@QEAA_J_J@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_precision_set, 12) -streamsize __thiscall ios_base_precision_set(ios_base *this, streamsize precision) +/* ?imbue@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE?AVlocale@2@ABV32@@Z */ +/* ?imbue@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */ +/* ?imbue@?$basic_ios@GU?$char_traits@G@std@@@std@@QAE?AVlocale@2@ABV32@@Z */ +/* ?imbue@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_wchar_imbue, 12) +locale *__thiscall basic_ios_wchar_imbue(basic_ios_wchar *this, locale *ret, const locale *loc) { - streamsize ret = this->prec; + TRACE("(%p %p %p)\n", this, ret, loc); - TRACE("(%p %s)\n", this, wine_dbgstr_longlong(precision)); + if(this->strbuf) + return basic_streambuf_wchar_pubimbue(this->strbuf, ret, loc); - this->prec = precision; + locale_copy_ctor(ret, loc); return ret; } -/* ?precision@ios_base@std@@QBEHXZ */ -/* ?precision@ios_base@std@@QEBA_JXZ */ -DEFINE_THISCALL_WRAPPER(ios_base_precision_get, 4) -streamsize __thiscall ios_base_precision_get(const ios_base *this) -{ - TRACE("(%p)\n", this); - return this->prec; -} - -/* ?rdstate@ios_base@std@@QBEHXZ */ -/* ?rdstate@ios_base@std@@QEBAHXZ */ -DEFINE_THISCALL_WRAPPER(ios_base_rdstate, 4) -IOSB_iostate __thiscall ios_base_rdstate(const ios_base *this) +/* ?narrow@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBED_WD@Z */ +/* ?narrow@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAD_WD@Z */ +/* ?narrow@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEDGD@Z */ +/* ?narrow@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBADGD@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_wchar_narrow, 12) +char __thiscall basic_ios_wchar_narrow(basic_ios_wchar *this, wchar_t ch, char def) { - TRACE("(%p)\n", this); - return this->state; + TRACE("(%p %c %c)\n", this, ch, def); + return ctype_wchar_narrow_ch(ctype_wchar_use_facet(this->strbuf->loc), ch, def); } -/* ?setf@ios_base@std@@QAEHHH@Z */ -/* ?setf@ios_base@std@@QEAAHHH@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_setf_mask, 12) -IOSB_fmtflags __thiscall ios_base_setf_mask(ios_base *this, IOSB_fmtflags flags, IOSB_fmtflags mask) +/* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PAV32@@Z */ +/* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PEAV32@@Z */ +/* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PAV32@@Z */ +/* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PEAV32@@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_wchar_rdbuf_set, 8) +basic_streambuf_wchar* __thiscall basic_ios_wchar_rdbuf_set(basic_ios_wchar *this, basic_streambuf_wchar *streambuf) { - IOSB_fmtflags ret = this->fmtfl; + basic_streambuf_wchar *ret = this->strbuf; - TRACE("(%p %x %x)\n", this, flags, mask); + TRACE("(%p %p)\n", this, streambuf); - this->fmtfl = (this->fmtfl & (~mask)) | (flags & mask & FMTFLAG_mask); + this->strbuf = streambuf; + basic_ios_wchar_clear(this, IOSTATE_goodbit); return ret; } -/* ?setf@ios_base@std@@QAEHH@Z */ -/* ?setf@ios_base@std@@QEAAHH@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_setf, 8) -IOSB_fmtflags __thiscall ios_base_setf(ios_base *this, IOSB_fmtflags flags) +/* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ */ +/* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ */ +/* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@XZ */ +/* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@XZ */ +DEFINE_THISCALL_WRAPPER(basic_ios_wchar_rdbuf_get, 4) +basic_streambuf_wchar* __thiscall basic_ios_wchar_rdbuf_get(const basic_ios_wchar *this) { - return ios_base_setf_mask(this, flags, ~0); + TRACE("(%p)\n", this); + return this->strbuf; } -/* ?setstate@ios_base@std@@QAEXH_N@Z */ -/* ?setstate@ios_base@std@@QEAAXH_N@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_setstate_reraise, 12) -void __thiscall ios_base_setstate_reraise(ios_base *this, IOSB_iostate state, MSVCP_bool reraise) +/* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z */ +/* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z */ +/* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXH_N@Z */ +/* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXH_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_wchar_setstate_reraise, 12) +void __thiscall basic_ios_wchar_setstate_reraise(basic_ios_wchar *this, IOSB_iostate state, MSVCP_bool reraise) { TRACE("(%p %x %x)\n", this, state, reraise); if(state != IOSTATE_goodbit) - ios_base_clear_reraise(this, this->state | state, reraise); + basic_ios_wchar_clear_reraise(this, this->base.state | state, reraise); } -/* ?setstate@ios_base@std@@QAEXH@Z */ -/* ?setstate@ios_base@std@@QEAAXH@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_setstate, 8) -void __thiscall ios_base_setstate(ios_base *this, IOSB_iostate state) +/* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXI@Z */ +/* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXI@Z */ +/* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXI@Z */ +/* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXI@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_wchar_setstate, 8) +void __thiscall basic_ios_wchar_setstate(basic_ios_wchar *this, IOSB_iostate state) { - ios_base_setstate_reraise(this, state, FALSE); + basic_ios_wchar_setstate_reraise(this, state, FALSE); } -/* ?setstate@ios_base@std@@QAEXI@Z */ -/* ?setstate@ios_base@std@@QEAAXI@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_setstate_unsigned, 8) -void __thiscall ios_base_setstate_unsigned(ios_base *this, unsigned int state) +/* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEPAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@PAV32@@Z */ +/* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@PEAV32@@Z */ +/* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEPAV?$basic_ostream@GU?$char_traits@G@std@@@2@PAV32@@Z */ +/* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAPEAV?$basic_ostream@GU?$char_traits@G@std@@@2@PEAV32@@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_wchar_tie_set, 8) +basic_ostream_wchar* __thiscall basic_ios_wchar_tie_set(basic_ios_wchar *this, basic_ostream_wchar *ostream) { - ios_base_setstate_reraise(this, (IOSB_iostate)state, FALSE); -} - -/* ?sync_with_stdio@ios_base@std@@SA_N_N@Z */ -MSVCP_bool CDECL ios_base_sync_with_stdio(MSVCP_bool sync) -{ - _Lockit lock; - MSVCP_bool ret; + basic_ostream_wchar *ret = this->stream; - TRACE("(%x)\n", sync); + TRACE("(%p %p)\n", this, ostream); - _Lockit_ctor_locktype(&lock, _LOCK_STREAM); - ret = ios_base_Sync; - ios_base_Sync = sync; - _Lockit_dtor(&lock); + this->stream = ostream; return ret; } -/* ?unsetf@ios_base@std@@QAEXH@Z */ -/* ?unsetf@ios_base@std@@QEAAXH@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_unsetf, 8) -void __thiscall ios_base_unsetf(ios_base *this, IOSB_fmtflags flags) +/* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ */ +/* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ */ +/* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_ostream@GU?$char_traits@G@std@@@2@XZ */ +/* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_ostream@GU?$char_traits@G@std@@@2@XZ */ +DEFINE_THISCALL_WRAPPER(basic_ios_wchar_tie_get, 4) +basic_ostream_wchar* __thiscall basic_ios_wchar_tie_get(const basic_ios_wchar *this) { - TRACE("(%p %x)\n", this, flags); - this->fmtfl &= ~flags; + TRACE("(%p)\n", this); + return this->stream; } -/* ?width@ios_base@std@@QAEHH@Z */ -/* ?width@ios_base@std@@QEAA_J_J@Z */ -DEFINE_THISCALL_WRAPPER(ios_base_width_set, 12) -streamsize __thiscall ios_base_width_set(ios_base *this, streamsize width) +/* ?widen@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBE_WD@Z */ +/* ?widen@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WD@Z */ +/* ?widen@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEGD@Z */ +/* ?widen@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAGD@Z */ +DEFINE_THISCALL_WRAPPER(basic_ios_wchar_widen, 8) +wchar_t __thiscall basic_ios_wchar_widen(basic_ios_wchar *this, char ch) { - streamsize ret = this->wide; - - TRACE("(%p %s)\n", this, wine_dbgstr_longlong(width)); - - this->wide = width; - return ret; + TRACE("(%p %c)\n", this, ch); + return ctype_wchar_widen_ch(ctype_wchar_use_facet(this->strbuf->loc), ch); } -/* ?width@ios_base@std@@QBEHXZ */ -/* ?width@ios_base@std@@QEBA_JXZ */ -DEFINE_THISCALL_WRAPPER(ios_base_width_get, 4) -streamsize __thiscall ios_base_width_get(ios_base *this) +/* Caution: basic_ostream uses virtual inheritance. + * All constructors have additional parameter that says if base class should be initialized. + * Base class needs to be accessed using vbtable. + */ +static inline basic_ios_char* basic_ostream_char_get_basic_ios(basic_ostream_char *this) { - TRACE("(%p)\n", this); - return this->wide; + return (basic_ios_char*)((char*)this+this->vbtable[1]); } -/* ?xalloc@ios_base@std@@SAHXZ */ -int CDECL ios_base_xalloc(void) +static inline basic_ios_char* basic_ostream_char_to_basic_ios(basic_ostream_char *ptr) { - _Lockit lock; - int ret; - - TRACE("\n"); + return (basic_ios_char*)((char*)ptr+basic_ostream_char_vbtable[1]); +} - _Lockit_ctor_locktype(&lock, _LOCK_STREAM); - ret = ios_base_Index++; - _Lockit_dtor(&lock); - return ret; +static inline basic_ostream_char* basic_ostream_char_from_basic_ios(basic_ios_char *ptr) +{ + return (basic_ostream_char*)((char*)ptr-basic_ostream_char_vbtable[1]); } -/* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@IAE@XZ */ -/* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@IEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ios_char_ctor, 4) -basic_ios_char* __thiscall basic_ios_char_ctor(basic_ios_char *this) +/* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */ +/* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_ctor, 16) +basic_ostream_char* __thiscall basic_ostream_char_ctor(basic_ostream_char *this, + basic_streambuf_char *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init) { - TRACE("(%p)\n", this); + basic_ios_char *base; - ios_base_ctor(&this->base); - this->base.vtable = &MSVCP_basic_ios_char_vtable; + TRACE("(%p %p %d %d)\n", this, strbuf, isstd, virt_init); + + if(virt_init) { + this->vbtable = basic_ostream_char_vbtable; + base = basic_ostream_char_get_basic_ios(this); + basic_ios_char_ctor(base); + }else { + base = basic_ostream_char_get_basic_ios(this); + } + + base->base.vtable = &MSVCP_basic_ostream_char_vtable; + basic_ios_char_init(base, strbuf, isstd); return this; } -/* ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z */ -/* ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IEAAXPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_char_init, 12) -void __thiscall basic_ios_char_init(basic_ios_char *this, basic_streambuf_char *streambuf, MSVCP_bool isstd) +/* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@_N@Z */ +/* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_ctor_uninitialized, 16) +basic_ostream_char* __thiscall basic_ostream_char_ctor_uninitialized(basic_ostream_char *this, + int uninitialized, MSVCP_bool addstd, MSVCP_bool virt_init) { - TRACE("(%p %p %x)\n", this, streambuf, isstd); - ios_base_Init(&this->base); - this->strbuf = streambuf; - this->stream = NULL; - this->fillch = ' '; + basic_ios_char *base; - if(!streambuf) - ios_base_setstate(&this->base, IOSTATE_badbit); + TRACE("(%p %d %x)\n", this, uninitialized, addstd); - if(isstd) - FIXME("standard streams not handled yet\n"); + if(virt_init) { + this->vbtable = basic_ostream_char_vbtable; + base = basic_ostream_char_get_basic_ios(this); + basic_ios_char_ctor(base); + }else { + base = basic_ostream_char_get_basic_ios(this); + } + + base->base.vtable = &MSVCP_basic_ostream_char_vtable; + if(addstd) + ios_base_Addstd(&base->base); + return this; } -/* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */ -/* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_char_ctor_streambuf, 8) -basic_ios_char* __thiscall basic_ios_char_ctor_streambuf(basic_ios_char *this, basic_streambuf_char *strbuf) +/* ??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UAE@XZ */ +/* ??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UEAA@XZ */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_dtor, 4) +void __thiscall basic_ostream_char_dtor(basic_ios_char *base) { - TRACE("(%p %p)\n", this, strbuf); + basic_ostream_char *this = basic_ostream_char_from_basic_ios(base); - basic_ios_char_ctor(this); - basic_ios_char_init(this, strbuf, FALSE); - return this; + /* don't destroy virtual base here */ + TRACE("(%p)\n", this); } -/* ??1?$basic_ios@DU?$char_traits@D@std@@@std@@UAE@XZ */ -/* ??1?$basic_ios@DU?$char_traits@D@std@@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ios_char_dtor, 4) -void __thiscall basic_ios_char_dtor(basic_ios_char *this) +/* ??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */ +/* ??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_vbase_dtor, 4) +void __thiscall basic_ostream_char_vbase_dtor(basic_ostream_char *this) { TRACE("(%p)\n", this); - ios_base_dtor(&this->base); + basic_ostream_char_dtor(basic_ostream_char_to_basic_ios(this)); + basic_ios_char_dtor(basic_ostream_char_get_basic_ios(this)); } -DEFINE_THISCALL_WRAPPER(basic_ios_char_vector_dtor, 8) -basic_ios_char* __thiscall basic_ios_char_vector_dtor(basic_ios_char *this, unsigned int flags) +DEFINE_THISCALL_WRAPPER(basic_ostream_char_vector_dtor, 8) +basic_ostream_char* __thiscall basic_ostream_char_vector_dtor(basic_ios_char *base, unsigned int flags) { + basic_ostream_char *this = basic_ostream_char_from_basic_ios(base); + TRACE("(%p %x)\n", this, flags); + if(flags & 2) { /* we have an array, with the number of elements stored before the first object */ INT_PTR i, *ptr = (INT_PTR *)this-1; for(i=*ptr-1; i>=0; i--) - basic_ios_char_dtor(this+i); + basic_ostream_char_vbase_dtor(this+i); MSVCRT_operator_delete(ptr); } else { - basic_ios_char_dtor(this); + basic_ostream_char_vbase_dtor(this); if(flags & 1) MSVCRT_operator_delete(this); } @@ -4949,3076 +4024,637 @@ basic_ios_char* __thiscall basic_ios_char_vector_dtor(basic_ios_char *this, unsi return this; } -/* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z */ -/* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_char_clear_reraise, 12) -void __thiscall basic_ios_char_clear_reraise(basic_ios_char *this, IOSB_iostate state, MSVCP_bool reraise) +/* ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ */ +/* ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_flush, 4) +basic_ostream_char* __thiscall basic_ostream_char_flush(basic_ostream_char *this) { - TRACE("(%p %x %x)\n", this, state, reraise); - ios_base_clear_reraise(&this->base, state | (this->strbuf ? IOSTATE_goodbit : IOSTATE_badbit), reraise); -} + /* this function is not matching C++ specification */ + basic_ios_char *base = basic_ostream_char_get_basic_ios(this); -/* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXI@Z */ -/* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_char_clear, 8) -void __thiscall basic_ios_char_clear(basic_ios_char *this, unsigned int state) -{ - basic_ios_char_clear_reraise(this, (IOSB_iostate)state, FALSE); + TRACE("(%p)\n", this); + + if(basic_ios_char_rdbuf_get(base) && ios_base_good(&base->base) + && basic_streambuf_char_pubsync(basic_ios_char_rdbuf_get(base))==-1) + basic_ios_char_setstate(base, IOSTATE_badbit); + return this; } -/* ?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEAAV12@ABV12@@Z */ -/* ?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEBV12@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_char_copyfmt, 8) -basic_ios_char* __thiscall basic_ios_char_copyfmt(basic_ios_char *this, basic_ios_char *copy) +/* ?flush@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z */ +/* ?flush@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@1@AEAV21@@Z */ +basic_ostream_char* __cdecl flush_ostream_char(basic_ostream_char *ostream) { - TRACE("(%p %p)\n", this, copy); - if(this == copy) - return this; - - this->stream = copy->stream; - this->fillch = copy->fillch; - ios_base_copyfmt(&this->base, ©->base); - return this; + return basic_ostream_char_flush(ostream); } -/* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEDD@Z */ -/* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAADD@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_char_fill_set, 8) -char __thiscall basic_ios_char_fill_set(basic_ios_char *this, char fill) +/* ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */ +/* ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char__Osfx, 4) +void __thiscall basic_ostream_char__Osfx(basic_ostream_char *this) { - char ret = this->fillch; + basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - TRACE("(%p %c)\n", this, fill); + TRACE("(%p)\n", this); - this->fillch = fill; - return ret; + if(base->base.fmtfl & FMTFLAG_unitbuf) + basic_ostream_char_flush(this); } -/* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDXZ */ -/* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADXZ */ -DEFINE_THISCALL_WRAPPER(basic_ios_char_fill_get, 4) -char __thiscall basic_ios_char_fill_get(basic_ios_char *this) +/* ?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */ +/* ?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_osfx, 4) +void __thiscall basic_ostream_char_osfx(basic_ostream_char *this) { TRACE("(%p)\n", this); - return this->fillch; + basic_ostream_char__Osfx(this); } -/* ?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QAE?AVlocale@2@ABV32@@Z */ -/* ?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_char_imbue, 12) -locale *__thiscall basic_ios_char_imbue(basic_ios_char *this, locale *ret, const locale *loc) +static BOOL basic_ostream_char_sentry_create(basic_ostream_char *ostr) { - TRACE("(%p %p %p)\n", this, ret, loc); + basic_ios_char *base = basic_ostream_char_get_basic_ios(ostr); - if(this->strbuf) { - basic_streambuf_char_pubimbue(this->strbuf, ret, loc); - locale_dtor(ret); - } + if(basic_ios_char_rdbuf_get(base)) + call_basic_streambuf_char__Lock(base->strbuf); - return ios_base_imbue(&this->base, ret, loc); + if(ios_base_good(&base->base) && base->stream) + basic_ostream_char_flush(base->stream); + + return ios_base_good(&base->base); } -/* ?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDDD@Z */ -/* ?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADDD@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_char_narrow, 12) -char __thiscall basic_ios_char_narrow(basic_ios_char *this, char ch, char def) -{ - TRACE("(%p %c %c)\n", this, ch, def); - return ctype_char_narrow_ch(ctype_char_use_facet(this->strbuf->loc), ch, def); -} - -/* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PAV32@@Z */ -/* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PEAV32@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_char_rdbuf_set, 8) -basic_streambuf_char* __thiscall basic_ios_char_rdbuf_set(basic_ios_char *this, basic_streambuf_char *streambuf) +static void basic_ostream_char_sentry_destroy(basic_ostream_char *ostr) { - basic_streambuf_char *ret = this->strbuf; - - TRACE("(%p %p)\n", this, streambuf); + basic_ios_char *base = basic_ostream_char_get_basic_ios(ostr); - this->strbuf = streambuf; - basic_ios_char_clear(this, IOSTATE_goodbit); - return ret; -} + if(ios_base_good(&base->base) && !__uncaught_exception()) + basic_ostream_char_osfx(ostr); -/* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ */ -/* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ios_char_rdbuf_get, 4) -basic_streambuf_char* __thiscall basic_ios_char_rdbuf_get(const basic_ios_char *this) -{ - TRACE("(%p)\n", this); - return this->strbuf; + if(basic_ios_char_rdbuf_get(base)) + call_basic_streambuf_char__Unlock(base->strbuf); } -/* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z */ -/* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_char_setstate_reraise, 12) -void __thiscall basic_ios_char_setstate_reraise(basic_ios_char *this, IOSB_iostate state, MSVCP_bool reraise) +/* ?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE_NXZ */ +/* ?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA_NXZ */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_opfx, 4) +MSVCP_bool __thiscall basic_ostream_char_opfx(basic_ostream_char *this) { - TRACE("(%p %x %x)\n", this, state, reraise); + basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - if(state != IOSTATE_goodbit) - basic_ios_char_clear_reraise(this, this->base.state | state, reraise); -} + TRACE("(%p)\n", this); -/* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXI@Z */ -/* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_char_setstate, 8) -void __thiscall basic_ios_char_setstate(basic_ios_char *this, unsigned int state) -{ - basic_ios_char_setstate_reraise(this, (IOSB_iostate)state, FALSE); + if(ios_base_good(&base->base) && base->stream) + basic_ostream_char_flush(base->stream); + return ios_base_good(&base->base); } -/* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@PAV32@@Z */ -/* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@PEAV32@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_char_tie_set, 8) -basic_ostream_char* __thiscall basic_ios_char_tie_set(basic_ios_char *this, basic_ostream_char *ostream) +/* ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z */ +/* ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_put, 8) +basic_ostream_char* __thiscall basic_ostream_char_put(basic_ostream_char *this, char ch) { - basic_ostream_char *ret = this->stream; + basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - TRACE("(%p %p)\n", this, ostream); + TRACE("(%p %c)\n", this, ch); - this->stream = ostream; - return ret; -} + if(!basic_ostream_char_sentry_create(this) + || basic_streambuf_char_sputc(base->strbuf, ch)==EOF) { + basic_ostream_char_sentry_destroy(this); + basic_ios_char_setstate(base, IOSTATE_badbit); + return this; + } -/* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ */ -/* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ios_char_tie_get, 4) -basic_ostream_char* __thiscall basic_ios_char_tie_get(const basic_ios_char *this) -{ - TRACE("(%p)\n", this); - return this->stream; + basic_ostream_char_sentry_destroy(this); + return this; } -/* ?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDD@Z */ -/* ?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADD@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_char_widen, 8) -char __thiscall basic_ios_char_widen(basic_ios_char *this, char ch) +/* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@JH@Z */ +/* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_seekp, 16) +basic_ostream_char* __thiscall basic_ostream_char_seekp(basic_ostream_char *this, streamoff off, int way) { - TRACE("(%p %c)\n", this, ch); - return ctype_char_widen_ch(ctype_char_use_facet(this->strbuf->loc), ch); -} + basic_ios_char *base = basic_ostream_char_get_basic_ios(this); + TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(off), way); -/* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@IAE@XZ */ -/* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@IEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ios_wchar_ctor, 4) -basic_ios_wchar* __thiscall basic_ios_wchar_ctor(basic_ios_wchar *this) -{ - TRACE("(%p)\n", this); + if(!ios_base_fail(&base->base)) { + fpos_int seek; - ios_base_ctor(&this->base); - this->base.vtable = &MSVCP_basic_ios_wchar_vtable; + basic_streambuf_char_pubseekoff(basic_ios_char_rdbuf_get(base), + &seek, off, way, OPENMODE_out); + if(seek.off==0 && seek.pos==-1 && seek.state==0) + basic_ios_char_setstate(base, IOSTATE_failbit); + } return this; } -/* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@IAE@XZ */ -/* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@IEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ios_short_ctor, 4) -basic_ios_wchar* __thiscall basic_ios_short_ctor(basic_ios_wchar *this) +/* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */ +/* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_seekp_fpos, 28) +basic_ostream_char* __thiscall basic_ostream_char_seekp_fpos(basic_ostream_char *this, fpos_int pos) { - basic_ios_wchar_ctor(this); - this->base.vtable = &MSVCP_basic_ios_short_vtable; + basic_ios_char *base = basic_ostream_char_get_basic_ios(this); + + TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos)); + + if(!ios_base_fail(&base->base)) { + fpos_int seek; + + basic_streambuf_char_pubseekpos(basic_ios_char_rdbuf_get(base), + &seek, pos, OPENMODE_out); + if(seek.off==0 && seek.pos==-1 && seek.state==0) + basic_ios_char_setstate(base, IOSTATE_failbit); + } return this; } -/* ?init@?$basic_ios@_WU?$char_traits@_W@std@@@std@@IAEXPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_N@Z */ -/* ?init@?$basic_ios@_WU?$char_traits@_W@std@@@std@@IEAAXPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_N@Z */ -/* ?init@?$basic_ios@GU?$char_traits@G@std@@@std@@IAEXPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@_N@Z */ -/* ?init@?$basic_ios@GU?$char_traits@G@std@@@std@@IEAAXPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_wchar_init, 12) -void __thiscall basic_ios_wchar_init(basic_ios_wchar *this, basic_streambuf_wchar *streambuf, MSVCP_bool isstd) +/* ?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@XZ */ +/* ?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@XZ */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_tellp, 8) +fpos_int* __thiscall basic_ostream_char_tellp(basic_ostream_char *this, fpos_int *ret) { - TRACE("(%p %p %x)\n", this, streambuf, isstd); - ios_base_Init(&this->base); - this->strbuf = streambuf; - this->stream = NULL; - this->fillch = ' '; + basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - if(!streambuf) - ios_base_setstate(&this->base, IOSTATE_badbit); + TRACE("(%p)\n", this); - if(isstd) - FIXME("standard streams not handled yet\n"); + if(!ios_base_fail(&base->base)) { + basic_streambuf_char_pubseekoff(basic_ios_char_rdbuf_get(base), + ret, 0, SEEKDIR_cur, OPENMODE_out); + }else { + ret->off = 0; + ret->pos = -1; + ret->state = 0; + } + return ret; } -/* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */ -/* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_wchar_ctor_streambuf, 8) -basic_ios_wchar* __thiscall basic_ios_wchar_ctor_streambuf(basic_ios_wchar *this, basic_streambuf_wchar *strbuf) +/* ?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@PBDH@Z */ +/* ?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEBD_J@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_write, 16) +basic_ostream_char* __thiscall basic_ostream_char_write(basic_ostream_char *this, const char *str, streamsize count) { - TRACE("(%p %p)\n", this, strbuf); + basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - basic_ios_wchar_ctor(this); - basic_ios_wchar_init(this, strbuf, FALSE); + TRACE("(%p %s %s)\n", this, debugstr_a(str), wine_dbgstr_longlong(count)); + + if(!basic_ostream_char_sentry_create(this) + || basic_streambuf_char_sputn(base->strbuf, str, count)!=count) { + basic_ostream_char_sentry_destroy(this); + basic_ios_char_setstate(base, IOSTATE_badbit); + return this; + } + + basic_ostream_char_sentry_destroy(this); return this; } -/* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */ -/* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_short_ctor_streambuf, 8) -basic_ios_wchar* __thiscall basic_ios_short_ctor_streambuf(basic_ios_wchar *this, basic_streambuf_wchar *strbuf) +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@F@Z */ +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@F@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_short, 8) +basic_ostream_char* __thiscall basic_ostream_char_print_short(basic_ostream_char *this, short val) { - basic_ios_wchar_ctor_streambuf(this, strbuf); - this->base.vtable = &MSVCP_basic_ios_short_vtable; + basic_ios_char *base = basic_ostream_char_get_basic_ios(this); + int state = IOSTATE_goodbit; + + TRACE("(%p %d)\n", this, val); + + if(basic_ostream_char_sentry_create(this)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + const num_put *numput = num_put_char_use_facet(strbuf->loc); + ostreambuf_iterator_char dest = {0, strbuf}; + + num_put_char_put_long(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), + (ios_base_flags_get(&base->base) & FMTFLAG_basefield & (FMTFLAG_oct | FMTFLAG_hex)) + ? (LONG)((unsigned short)val) : (LONG)val); + } + basic_ostream_char_sentry_destroy(this); + + basic_ios_char_setstate(base, state); return this; } -/* ??1?$basic_ios@_WU?$char_traits@_W@std@@@std@@UAE@XZ */ -/* ??1?$basic_ios@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */ -/* ??1?$basic_ios@GU?$char_traits@G@std@@@std@@UAE@XZ */ -/* ??1?$basic_ios@GU?$char_traits@G@std@@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ios_wchar_dtor, 4) -void __thiscall basic_ios_wchar_dtor(basic_ios_wchar *this) +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@G@Z */ +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@G@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ushort, 8) +basic_ostream_char* __thiscall basic_ostream_char_print_ushort(basic_ostream_char *this, unsigned short val) { - TRACE("(%p)\n", this); - ios_base_dtor(&this->base); -} + basic_ios_char *base = basic_ostream_char_get_basic_ios(this); + int state = IOSTATE_goodbit; -DEFINE_THISCALL_WRAPPER(basic_ios_wchar_vector_dtor, 8) -basic_ios_wchar* __thiscall basic_ios_wchar_vector_dtor(basic_ios_wchar *this, unsigned int flags) -{ - TRACE("(%p %x)\n", this, flags); - if(flags & 2) { - /* we have an array, with the number of elements stored before the first object */ - INT_PTR i, *ptr = (INT_PTR *)this-1; + TRACE("(%p %u)\n", this, val); - for(i=*ptr-1; i>=0; i--) - basic_ios_wchar_dtor(this+i); - MSVCRT_operator_delete(ptr); - } else { - basic_ios_wchar_dtor(this); - if(flags & 1) - MSVCRT_operator_delete(this); + if(basic_ostream_char_sentry_create(this)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + const num_put *numput = num_put_char_use_facet(strbuf->loc); + ostreambuf_iterator_char dest = {0, strbuf}; + + num_put_char_put_ulong(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val); } + basic_ostream_char_sentry_destroy(this); + basic_ios_char_setstate(base, state); return this; } -/* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z */ -/* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z */ -/* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXH_N@Z */ -/* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXH_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_wchar_clear_reraise, 12) -void __thiscall basic_ios_wchar_clear_reraise(basic_ios_wchar *this, IOSB_iostate state, MSVCP_bool reraise) -{ - TRACE("(%p %x %x)\n", this, state, reraise); - ios_base_clear_reraise(&this->base, state | (this->strbuf ? IOSTATE_goodbit : IOSTATE_badbit), reraise); -} - -/* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXI@Z */ -/* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXI@Z */ -/* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXI@Z */ -/* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXI@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_wchar_clear, 8) -void __thiscall basic_ios_wchar_clear(basic_ios_wchar *this, unsigned int state) -{ - basic_ios_wchar_clear_reraise(this, (IOSB_iostate)state, FALSE); -} - -/* ?copyfmt@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEAAV12@ABV12@@Z */ -/* ?copyfmt@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEBV12@@Z */ -/* ?copyfmt@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEAAV12@ABV12@@Z */ -/* ?copyfmt@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEBV12@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_wchar_copyfmt, 8) -basic_ios_wchar* __thiscall basic_ios_wchar_copyfmt(basic_ios_wchar *this, basic_ios_wchar *copy) -{ - TRACE("(%p %p)\n", this, copy); - if(this == copy) - return this; - - this->stream = copy->stream; - this->fillch = copy->fillch; - ios_base_copyfmt(&this->base, ©->base); - return this; -} - -/* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE_W_W@Z */ -/* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA_W_W@Z */ -/* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEGG@Z */ -/* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAGG@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_wchar_fill_set, 8) -wchar_t __thiscall basic_ios_wchar_fill_set(basic_ios_wchar *this, wchar_t fill) -{ - wchar_t ret = this->fillch; - - TRACE("(%p %c)\n", this, fill); - - this->fillch = fill; - return ret; -} - -/* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBE_WXZ */ -/* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WXZ */ -/* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEGXZ */ -/* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAGXZ */ -DEFINE_THISCALL_WRAPPER(basic_ios_wchar_fill_get, 4) -wchar_t __thiscall basic_ios_wchar_fill_get(basic_ios_wchar *this) -{ - TRACE("(%p)\n", this); - return this->fillch; -} - -/* ?imbue@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE?AVlocale@2@ABV32@@Z */ -/* ?imbue@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */ -/* ?imbue@?$basic_ios@GU?$char_traits@G@std@@@std@@QAE?AVlocale@2@ABV32@@Z */ -/* ?imbue@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_wchar_imbue, 12) -locale *__thiscall basic_ios_wchar_imbue(basic_ios_wchar *this, locale *ret, const locale *loc) -{ - TRACE("(%p %p %p)\n", this, ret, loc); - - if(this->strbuf) - return basic_streambuf_wchar_pubimbue(this->strbuf, ret, loc); - - locale_copy_ctor(ret, loc); - return ret; -} - -/* ?narrow@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBED_WD@Z */ -/* ?narrow@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAD_WD@Z */ -/* ?narrow@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEDGD@Z */ -/* ?narrow@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBADGD@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_wchar_narrow, 12) -char __thiscall basic_ios_wchar_narrow(basic_ios_wchar *this, wchar_t ch, char def) -{ - TRACE("(%p %c %c)\n", this, ch, def); - return ctype_wchar_narrow_ch(ctype_wchar_use_facet(this->strbuf->loc), ch, def); -} - -/* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PAV32@@Z */ -/* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PEAV32@@Z */ -/* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PAV32@@Z */ -/* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PEAV32@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_wchar_rdbuf_set, 8) -basic_streambuf_wchar* __thiscall basic_ios_wchar_rdbuf_set(basic_ios_wchar *this, basic_streambuf_wchar *streambuf) -{ - basic_streambuf_wchar *ret = this->strbuf; - - TRACE("(%p %p)\n", this, streambuf); - - this->strbuf = streambuf; - basic_ios_wchar_clear(this, IOSTATE_goodbit); - return ret; -} - -/* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ */ -/* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ */ -/* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@XZ */ -/* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ios_wchar_rdbuf_get, 4) -basic_streambuf_wchar* __thiscall basic_ios_wchar_rdbuf_get(const basic_ios_wchar *this) -{ - TRACE("(%p)\n", this); - return this->strbuf; -} - -/* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z */ -/* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z */ -/* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXH_N@Z */ -/* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXH_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_wchar_setstate_reraise, 12) -void __thiscall basic_ios_wchar_setstate_reraise(basic_ios_wchar *this, IOSB_iostate state, MSVCP_bool reraise) -{ - TRACE("(%p %x %x)\n", this, state, reraise); - - if(state != IOSTATE_goodbit) - basic_ios_wchar_clear_reraise(this, this->base.state | state, reraise); -} - -/* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXI@Z */ -/* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXI@Z */ -/* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXI@Z */ -/* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXI@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_wchar_setstate, 8) -void __thiscall basic_ios_wchar_setstate(basic_ios_wchar *this, IOSB_iostate state) -{ - basic_ios_wchar_setstate_reraise(this, state, FALSE); -} - -/* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEPAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@PAV32@@Z */ -/* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@PEAV32@@Z */ -/* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEPAV?$basic_ostream@GU?$char_traits@G@std@@@2@PAV32@@Z */ -/* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAPEAV?$basic_ostream@GU?$char_traits@G@std@@@2@PEAV32@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_wchar_tie_set, 8) -basic_ostream_wchar* __thiscall basic_ios_wchar_tie_set(basic_ios_wchar *this, basic_ostream_wchar *ostream) -{ - basic_ostream_wchar *ret = this->stream; - - TRACE("(%p %p)\n", this, ostream); - - this->stream = ostream; - return ret; -} - -/* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ */ -/* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ */ -/* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_ostream@GU?$char_traits@G@std@@@2@XZ */ -/* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_ostream@GU?$char_traits@G@std@@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ios_wchar_tie_get, 4) -basic_ostream_wchar* __thiscall basic_ios_wchar_tie_get(const basic_ios_wchar *this) -{ - TRACE("(%p)\n", this); - return this->stream; -} - -/* ?widen@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBE_WD@Z */ -/* ?widen@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WD@Z */ -/* ?widen@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEGD@Z */ -/* ?widen@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAGD@Z */ -DEFINE_THISCALL_WRAPPER(basic_ios_wchar_widen, 8) -wchar_t __thiscall basic_ios_wchar_widen(basic_ios_wchar *this, char ch) -{ - TRACE("(%p %c)\n", this, ch); - return ctype_wchar_widen_ch(ctype_wchar_use_facet(this->strbuf->loc), ch); -} - -/* Caution: basic_ostream uses virtual inheritance. - * All constructors have additional parameter that says if base class should be initialized. - * Base class needs to be accessed using vbtable. - */ -static inline basic_ios_char* basic_ostream_char_get_basic_ios(basic_ostream_char *this) -{ - return (basic_ios_char*)((char*)this+this->vbtable[1]); -} - -static inline basic_ios_char* basic_ostream_char_to_basic_ios(basic_ostream_char *ptr) -{ - return (basic_ios_char*)((char*)ptr+basic_ostream_char_vbtable[1]); -} - -static inline basic_ostream_char* basic_ostream_char_from_basic_ios(basic_ios_char *ptr) -{ - return (basic_ostream_char*)((char*)ptr-basic_ostream_char_vbtable[1]); -} - -/* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */ -/* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_ctor, 16) -basic_ostream_char* __thiscall basic_ostream_char_ctor(basic_ostream_char *this, - basic_streambuf_char *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init) -{ - basic_ios_char *base; - - TRACE("(%p %p %d %d)\n", this, strbuf, isstd, virt_init); - - if(virt_init) { - this->vbtable = basic_ostream_char_vbtable; - base = basic_ostream_char_get_basic_ios(this); - basic_ios_char_ctor(base); - }else { - base = basic_ostream_char_get_basic_ios(this); - } - - base->base.vtable = &MSVCP_basic_ostream_char_vtable; - basic_ios_char_init(base, strbuf, isstd); - return this; -} - -/* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@_N@Z */ -/* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_ctor_uninitialized, 16) -basic_ostream_char* __thiscall basic_ostream_char_ctor_uninitialized(basic_ostream_char *this, - int uninitialized, MSVCP_bool addstd, MSVCP_bool virt_init) -{ - basic_ios_char *base; - - TRACE("(%p %d %x)\n", this, uninitialized, addstd); - - if(virt_init) { - this->vbtable = basic_ostream_char_vbtable; - base = basic_ostream_char_get_basic_ios(this); - basic_ios_char_ctor(base); - }else { - base = basic_ostream_char_get_basic_ios(this); - } - - base->base.vtable = &MSVCP_basic_ostream_char_vtable; - if(addstd) - ios_base_Addstd(&base->base); - return this; -} - -/* ??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UAE@XZ */ -/* ??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_dtor, 4) -void __thiscall basic_ostream_char_dtor(basic_ios_char *base) -{ - basic_ostream_char *this = basic_ostream_char_from_basic_ios(base); - - /* don't destroy virtual base here */ - TRACE("(%p)\n", this); -} - -/* ??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */ -/* ??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_vbase_dtor, 4) -void __thiscall basic_ostream_char_vbase_dtor(basic_ostream_char *this) -{ - TRACE("(%p)\n", this); - basic_ostream_char_dtor(basic_ostream_char_to_basic_ios(this)); - basic_ios_char_dtor(basic_ostream_char_get_basic_ios(this)); -} - -DEFINE_THISCALL_WRAPPER(basic_ostream_char_vector_dtor, 8) -basic_ostream_char* __thiscall basic_ostream_char_vector_dtor(basic_ios_char *base, unsigned int flags) -{ - basic_ostream_char *this = basic_ostream_char_from_basic_ios(base); - - TRACE("(%p %x)\n", this, flags); - - if(flags & 2) { - /* we have an array, with the number of elements stored before the first object */ - INT_PTR i, *ptr = (INT_PTR *)this-1; - - for(i=*ptr-1; i>=0; i--) - basic_ostream_char_vbase_dtor(this+i); - MSVCRT_operator_delete(ptr); - } else { - basic_ostream_char_vbase_dtor(this); - if(flags & 1) - MSVCRT_operator_delete(this); - } - - return this; -} - -/* ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ */ -/* ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_flush, 4) -basic_ostream_char* __thiscall basic_ostream_char_flush(basic_ostream_char *this) -{ - /* this function is not matching C++ specification */ - basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - - TRACE("(%p)\n", this); - - if(basic_ios_char_rdbuf_get(base) && ios_base_good(&base->base) - && basic_streambuf_char_pubsync(basic_ios_char_rdbuf_get(base))==-1) - basic_ios_char_setstate(base, IOSTATE_badbit); - return this; -} - -/* ?flush@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z */ -/* ?flush@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@1@AEAV21@@Z */ -basic_ostream_char* __cdecl flush_ostream_char(basic_ostream_char *ostream) -{ - return basic_ostream_char_flush(ostream); -} - -/* ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */ -/* ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char__Osfx, 4) -void __thiscall basic_ostream_char__Osfx(basic_ostream_char *this) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - - TRACE("(%p)\n", this); - - if(base->base.fmtfl & FMTFLAG_unitbuf) - basic_ostream_char_flush(this); -} - -/* ?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */ -/* ?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_osfx, 4) -void __thiscall basic_ostream_char_osfx(basic_ostream_char *this) -{ - TRACE("(%p)\n", this); - basic_ostream_char__Osfx(this); -} - -static BOOL basic_ostream_char_sentry_create(basic_ostream_char *ostr) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(ostr); - - if(basic_ios_char_rdbuf_get(base)) - call_basic_streambuf_char__Lock(base->strbuf); - - if(ios_base_good(&base->base) && base->stream) - basic_ostream_char_flush(base->stream); - - return ios_base_good(&base->base); -} - -static void basic_ostream_char_sentry_destroy(basic_ostream_char *ostr) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(ostr); - - if(ios_base_good(&base->base) && !__uncaught_exception()) - basic_ostream_char_osfx(ostr); - - if(basic_ios_char_rdbuf_get(base)) - call_basic_streambuf_char__Unlock(base->strbuf); -} - -/* ?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE_NXZ */ -/* ?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA_NXZ */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_opfx, 4) -MSVCP_bool __thiscall basic_ostream_char_opfx(basic_ostream_char *this) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - - TRACE("(%p)\n", this); - - if(ios_base_good(&base->base) && base->stream) - basic_ostream_char_flush(base->stream); - return ios_base_good(&base->base); -} - -/* ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z */ -/* ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_put, 8) -basic_ostream_char* __thiscall basic_ostream_char_put(basic_ostream_char *this, char ch) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - - TRACE("(%p %c)\n", this, ch); - - if(!basic_ostream_char_sentry_create(this) - || basic_streambuf_char_sputc(base->strbuf, ch)==EOF) { - basic_ostream_char_sentry_destroy(this); - basic_ios_char_setstate(base, IOSTATE_badbit); - return this; - } - - basic_ostream_char_sentry_destroy(this); - return this; -} - -/* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@JH@Z */ -/* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_seekp, 16) -basic_ostream_char* __thiscall basic_ostream_char_seekp(basic_ostream_char *this, streamoff off, int way) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - - TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(off), way); - - if(!ios_base_fail(&base->base)) { - fpos_int seek; - - basic_streambuf_char_pubseekoff(basic_ios_char_rdbuf_get(base), - &seek, off, way, OPENMODE_out); - if(seek.off==0 && seek.pos==-1 && seek.state==0) - basic_ios_char_setstate(base, IOSTATE_failbit); - } - return this; -} - -/* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */ -/* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_seekp_fpos, 28) -basic_ostream_char* __thiscall basic_ostream_char_seekp_fpos(basic_ostream_char *this, fpos_int pos) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - - TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos)); - - if(!ios_base_fail(&base->base)) { - fpos_int seek; - - basic_streambuf_char_pubseekpos(basic_ios_char_rdbuf_get(base), - &seek, pos, OPENMODE_out); - if(seek.off==0 && seek.pos==-1 && seek.state==0) - basic_ios_char_setstate(base, IOSTATE_failbit); - } - return this; -} - -/* ?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@XZ */ -/* ?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_tellp, 8) -fpos_int* __thiscall basic_ostream_char_tellp(basic_ostream_char *this, fpos_int *ret) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - - TRACE("(%p)\n", this); - - if(!ios_base_fail(&base->base)) { - basic_streambuf_char_pubseekoff(basic_ios_char_rdbuf_get(base), - ret, 0, SEEKDIR_cur, OPENMODE_out); - }else { - ret->off = 0; - ret->pos = -1; - ret->state = 0; - } - return ret; -} - -/* ?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@PBDH@Z */ -/* ?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEBD_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_write, 16) -basic_ostream_char* __thiscall basic_ostream_char_write(basic_ostream_char *this, const char *str, streamsize count) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - - TRACE("(%p %s %s)\n", this, debugstr_a(str), wine_dbgstr_longlong(count)); - - if(!basic_ostream_char_sentry_create(this) - || basic_streambuf_char_sputn(base->strbuf, str, count)!=count) { - basic_ostream_char_sentry_destroy(this); - basic_ios_char_setstate(base, IOSTATE_badbit); - return this; - } - - basic_ostream_char_sentry_destroy(this); - return this; -} - -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@F@Z */ -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@F@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_short, 8) -basic_ostream_char* __thiscall basic_ostream_char_print_short(basic_ostream_char *this, short val) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %d)\n", this, val); - - if(basic_ostream_char_sentry_create(this)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_put *numput = num_put_char_use_facet(strbuf->loc); - ostreambuf_iterator_char dest = {0, strbuf}; - - num_put_char_put_long(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), - (ios_base_flags_get(&base->base) & FMTFLAG_basefield & (FMTFLAG_oct | FMTFLAG_hex)) - ? (LONG)((unsigned short)val) : (LONG)val); - } - basic_ostream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@G@Z */ -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@G@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ushort, 8) -basic_ostream_char* __thiscall basic_ostream_char_print_ushort(basic_ostream_char *this, unsigned short val) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %u)\n", this, val); - - if(basic_ostream_char_sentry_create(this)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_put *numput = num_put_char_use_facet(strbuf->loc); - ostreambuf_iterator_char dest = {0, strbuf}; - - num_put_char_put_ulong(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val); - } - basic_ostream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z */ -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@H@Z */ -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@J@Z */ -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@J@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_int, 8) -basic_ostream_char* __thiscall basic_ostream_char_print_int(basic_ostream_char *this, int val) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %d)\n", this, val); - - if(basic_ostream_char_sentry_create(this)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_put *numput = num_put_char_use_facet(strbuf->loc); - ostreambuf_iterator_char dest = {0, strbuf}; - - num_put_char_put_long(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val); - } - basic_ostream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@I@Z */ -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@I@Z */ -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@K@Z */ -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@K@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_uint, 8) -basic_ostream_char* __thiscall basic_ostream_char_print_uint(basic_ostream_char *this, unsigned int val) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %u)\n", this, val); - - if(basic_ostream_char_sentry_create(this)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_put *numput = num_put_char_use_facet(strbuf->loc); - ostreambuf_iterator_char dest = {0, strbuf}; - - num_put_char_put_ulong(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val); - } - basic_ostream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@M@Z */ -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@M@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_float, 8) -basic_ostream_char* __thiscall basic_ostream_char_print_float(basic_ostream_char *this, float val) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %f)\n", this, val); - - if(basic_ostream_char_sentry_create(this)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_put *numput = num_put_char_use_facet(strbuf->loc); - ostreambuf_iterator_char dest = {0, strbuf}; - - num_put_char_put_double(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val); - } - basic_ostream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@N@Z */ -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_double, 12) -basic_ostream_char* __thiscall basic_ostream_char_print_double(basic_ostream_char *this, double val) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %lf)\n", this, val); - - if(basic_ostream_char_sentry_create(this)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_put *numput = num_put_char_use_facet(strbuf->loc); - ostreambuf_iterator_char dest = {0, strbuf}; - - num_put_char_put_double(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val); - } - basic_ostream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@O@Z */ -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@O@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ldouble, 12) -basic_ostream_char* __thiscall basic_ostream_char_print_ldouble(basic_ostream_char *this, double val) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %lf)\n", this, val); - - if(basic_ostream_char_sentry_create(this)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_put *numput = num_put_char_use_facet(strbuf->loc); - ostreambuf_iterator_char dest = {0, strbuf}; - - num_put_char_put_ldouble(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val); - } - basic_ostream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */ -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_streambuf, 8) -basic_ostream_char* __thiscall basic_ostream_char_print_streambuf(basic_ostream_char *this, basic_streambuf_char *val) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - IOSB_iostate state = IOSTATE_badbit; - int c = '\n'; - - TRACE("(%p %p)\n", this, val); - - if(basic_ostream_char_sentry_create(this)) { - for(c = basic_streambuf_char_sgetc(val); c!=EOF; - c = basic_streambuf_char_snextc(val)) { - state = IOSTATE_goodbit; - - if(basic_streambuf_char_sputc(base->strbuf, c) == EOF) { - state = IOSTATE_badbit; - break; - } - } - }else { - state = IOSTATE_badbit; - } - basic_ostream_char_sentry_destroy(this); - - ios_base_width_set(&base->base, 0); - basic_ios_char_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@PBX@Z */ -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEBX@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ptr, 8) -basic_ostream_char* __thiscall basic_ostream_char_print_ptr(basic_ostream_char *this, const void *val) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %p)\n", this, val); - - if(basic_ostream_char_sentry_create(this)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_put *numput = num_put_char_use_facet(strbuf->loc); - ostreambuf_iterator_char dest = {0, strbuf}; - - num_put_char_put_ptr(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val); - } - basic_ostream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_J@Z */ -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_int64, 12) -basic_ostream_char* __thiscall basic_ostream_char_print_int64(basic_ostream_char *this, __int64 val) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p)\n", this); - - if(basic_ostream_char_sentry_create(this)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_put *numput = num_put_char_use_facet(strbuf->loc); - ostreambuf_iterator_char dest = {0, strbuf}; - - num_put_char_put_int64(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val); - } - basic_ostream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_K@Z */ -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_K@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_uint64, 12) -basic_ostream_char* __thiscall basic_ostream_char_print_uint64(basic_ostream_char *this, unsigned __int64 val) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p)\n", this); - - if(basic_ostream_char_sentry_create(this)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_put *numput = num_put_char_use_facet(strbuf->loc); - ostreambuf_iterator_char dest = {0, strbuf}; - - num_put_char_put_uint64(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val); - } - basic_ostream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_N@Z */ -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_bool, 8) -basic_ostream_char* __thiscall basic_ostream_char_print_bool(basic_ostream_char *this, MSVCP_bool val) -{ - basic_ios_char *base = basic_ostream_char_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %x)\n", this, val); - - if(basic_ostream_char_sentry_create(this)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_put *numput = num_put_char_use_facet(strbuf->loc); - ostreambuf_iterator_char dest = {0, strbuf}; - - num_put_char_put_bool(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val); - } - basic_ostream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, state); - return this; -} - -/* ?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z */ -/* ?endl@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@1@AEAV21@@Z */ -basic_ostream_char* __cdecl basic_ostream_char_endl(basic_ostream_char *ostr) -{ - TRACE("(%p)\n", ostr); - - basic_ostream_char_put(ostr, '\n'); - basic_ostream_char_flush(ostr); - return ostr; -} - -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */ -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_func, 8) -basic_ostream_char* __thiscall basic_ostream_char_print_func(basic_ostream_char *this, - basic_ostream_char* (__cdecl *pfunc)(basic_ostream_char*)) -{ - TRACE("(%p %p)\n", this, pfunc); - pfunc(this); - return this; -} - -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@DU?$char_traits@D@std@@@1@AAV21@@Z@Z */ -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@DU?$char_traits@D@std@@@1@AEAV21@@Z@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_func_basic_ios, 8) -basic_ostream_char* __thiscall basic_ostream_char_print_func_basic_ios(basic_ostream_char *this, - basic_ios_char* (__cdecl *pfunc)(basic_ios_char*)) -{ - TRACE("(%p %p)\n", this, pfunc); - pfunc(basic_ostream_char_get_basic_ios(this)); - return this; -} - -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */ -/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_func_ios_base, 8) -basic_ostream_char* __thiscall basic_ostream_char_print_func_ios_base( - basic_ostream_char *this, ios_base* (__cdecl *pfunc)(ios_base*)) -{ - TRACE("(%p %p)\n", this, pfunc); - pfunc(&basic_ostream_char_get_basic_ios(this)->base); - return this; -} - -/* Caution: basic_ostream uses virtual inheritance. */ -static inline basic_ios_wchar* basic_ostream_wchar_get_basic_ios(basic_ostream_wchar *this) -{ - return (basic_ios_wchar*)((char*)this+this->vbtable[1]); -} - -static inline basic_ios_wchar* basic_ostream_wchar_to_basic_ios(basic_ostream_wchar *ptr) -{ - return (basic_ios_wchar*)((char*)ptr+basic_ostream_wchar_vbtable[1]); -} - -static inline basic_ostream_wchar* basic_ostream_wchar_from_basic_ios(basic_ios_wchar *ptr) -{ - return (basic_ostream_wchar*)((char*)ptr-basic_ostream_wchar_vbtable[1]); -} - -/* ??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */ -/* ??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_ctor, 16) -basic_ostream_wchar* __thiscall basic_ostream_wchar_ctor(basic_ostream_wchar *this, - basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init) -{ - basic_ios_wchar *base; - - TRACE("(%p %p %d %d)\n", this, strbuf, isstd, virt_init); - - if(virt_init) { - this->vbtable = basic_ostream_wchar_vbtable; - base = basic_ostream_wchar_get_basic_ios(this); - basic_ios_wchar_ctor(base); - }else { - base = basic_ostream_wchar_get_basic_ios(this); - } - - base->base.vtable = &MSVCP_basic_ostream_wchar_vtable; - basic_ios_wchar_init(base, strbuf, isstd); - return this; -} - -/* ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z */ -/* ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_short_ctor, 16) -basic_ostream_wchar* __thiscall basic_ostream_short_ctor(basic_ostream_wchar *this, - basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init) -{ - basic_ostream_wchar_ctor(this, strbuf, isstd, virt_init); - basic_ostream_wchar_get_basic_ios(this)->base.vtable = &MSVCP_basic_ostream_short_vtable; - return this; -} - -/* ??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE@W4_Uninitialized@1@_N@Z */ -/* ??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_ctor_uninitialized, 16) -basic_ostream_wchar* __thiscall basic_ostream_wchar_ctor_uninitialized(basic_ostream_wchar *this, - int uninitialized, MSVCP_bool addstd, MSVCP_bool virt_init) -{ - basic_ios_wchar *base; - - TRACE("(%p %d %x)\n", this, uninitialized, addstd); - - if(virt_init) { - this->vbtable = basic_ostream_wchar_vbtable; - base = basic_ostream_wchar_get_basic_ios(this); - basic_ios_wchar_ctor(base); - }else { - base = basic_ostream_wchar_get_basic_ios(this); - } - - base->base.vtable = &MSVCP_basic_ostream_wchar_vtable; - if(addstd) - ios_base_Addstd(&base->base); - return this; -} - -/* ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@_N@Z */ -/* ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_short_ctor_uninitialized, 16) -basic_ostream_wchar* __thiscall basic_ostream_short_ctor_uninitialized(basic_ostream_wchar *this, - int uninitialized, MSVCP_bool addstd, MSVCP_bool virt_init) -{ - basic_ostream_wchar_ctor_uninitialized(this, uninitialized, addstd, virt_init); - basic_ostream_wchar_get_basic_ios(this)->base.vtable = &MSVCP_basic_ostream_short_vtable; - return this; -} - -/* ??1?$basic_ostream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */ -/* ??1?$basic_ostream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */ -/* ??1?$basic_ostream@GU?$char_traits@G@std@@@std@@UAE@XZ */ -/* ??1?$basic_ostream@GU?$char_traits@G@std@@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_dtor, 4) -void __thiscall basic_ostream_wchar_dtor(basic_ios_wchar *base) -{ - basic_ostream_wchar *this = basic_ostream_wchar_from_basic_ios(base); - - /* don't destroy virtual base here */ - TRACE("(%p)\n", this); -} - -/* ??_D?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */ -/* ??_D?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */ -/* ??_D?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ */ -/* ??_D?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_vbase_dtor, 4) -void __thiscall basic_ostream_wchar_vbase_dtor(basic_ostream_wchar *this) -{ - TRACE("(%p)\n", this); - basic_ostream_wchar_dtor(basic_ostream_wchar_to_basic_ios(this)); - basic_ios_wchar_dtor(basic_ostream_wchar_get_basic_ios(this)); -} - -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_vector_dtor, 8) -basic_ostream_wchar* __thiscall basic_ostream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags) -{ - basic_ostream_wchar *this = basic_ostream_wchar_from_basic_ios(base); - - TRACE("(%p %x)\n", this, flags); - - if(flags & 2) { - /* we have an array, with the number of elements stored before the first object */ - INT_PTR i, *ptr = (INT_PTR *)this-1; - - for(i=*ptr-1; i>=0; i--) - basic_ostream_wchar_vbase_dtor(this+i); - MSVCRT_operator_delete(ptr); - } else { - basic_ostream_wchar_vbase_dtor(this); - if(flags & 1) - MSVCRT_operator_delete(this); - } - - return this; -} - -/* ?flush@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@XZ */ -/* ?flush@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@XZ */ -/* ?flush@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@XZ */ -/* ?flush@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_flush, 4) -basic_ostream_wchar* __thiscall basic_ostream_wchar_flush(basic_ostream_wchar *this) -{ - /* this function is not matching C++ specification */ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - - TRACE("(%p)\n", this); - - if(basic_ios_wchar_rdbuf_get(base) && ios_base_good(&base->base) - && basic_streambuf_wchar_pubsync(basic_ios_wchar_rdbuf_get(base))==-1) - basic_ios_wchar_setstate(base, IOSTATE_badbit); - return this; -} - -/* ?flush@std@@YAAAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AAV21@@Z */ -/* ?flush@std@@YAAEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AEAV21@@Z */ -/* ?flush@std@@YAAAV?$basic_ostream@GU?$char_traits@G@std@@@1@AAV21@@Z */ -/* ?flush@std@@YAAEAV?$basic_ostream@GU?$char_traits@G@std@@@1@AEAV21@@Z */ -basic_ostream_wchar* __cdecl flush_ostream_wchar(basic_ostream_wchar *ostream) -{ - return basic_ostream_wchar_flush(ostream); -} - -/* ?_Osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */ -/* ?_Osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */ -/* ?_Osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ */ -/* ?_Osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar__Osfx, 4) -void __thiscall basic_ostream_wchar__Osfx(basic_ostream_wchar *this) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - - TRACE("(%p)\n", this); - - if(base->base.fmtfl & FMTFLAG_unitbuf) - basic_ostream_wchar_flush(this); -} - -/* ?osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */ -/* ?osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */ -/* ?osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ */ -/* ?osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_osfx, 4) -void __thiscall basic_ostream_wchar_osfx(basic_ostream_wchar *this) -{ - TRACE("(%p)\n", this); - basic_ostream_wchar__Osfx(this); -} - -static BOOL basic_ostream_wchar_sentry_create(basic_ostream_wchar *ostr) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(ostr); - - if(basic_ios_wchar_rdbuf_get(base)) - basic_streambuf_wchar__Lock(base->strbuf); - - if(ios_base_good(&base->base) && base->stream) - basic_ostream_wchar_flush(base->stream); - - return ios_base_good(&base->base); -} - -static void basic_ostream_wchar_sentry_destroy(basic_ostream_wchar *ostr) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(ostr); - - if(ios_base_good(&base->base) && !__uncaught_exception()) - basic_ostream_wchar_osfx(ostr); - - if(basic_ios_wchar_rdbuf_get(base)) - basic_streambuf_wchar__Unlock(base->strbuf); -} - -/* ?opfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE_NXZ */ -/* ?opfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA_NXZ */ -/* ?opfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE_NXZ */ -/* ?opfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA_NXZ */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_opfx, 4) -MSVCP_bool __thiscall basic_ostream_wchar_opfx(basic_ostream_wchar *this) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - - TRACE("(%p)\n", this); - - if(ios_base_good(&base->base) && base->stream) - basic_ostream_wchar_flush(base->stream); - return ios_base_good(&base->base); -} - -/* ?put@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_W@Z */ -/* ?put@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_W@Z */ -/* ?put@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@G@Z */ -/* ?put@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@G@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_put, 8) -basic_ostream_wchar* __thiscall basic_ostream_wchar_put(basic_ostream_wchar *this, wchar_t ch) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - - TRACE("(%p %c)\n", this, ch); - - if(!basic_ostream_wchar_sentry_create(this) - || basic_streambuf_wchar_sputc(base->strbuf, ch)==WEOF) { - basic_ostream_wchar_sentry_destroy(this); - basic_ios_wchar_setstate(base, IOSTATE_badbit); - return this; - } - - basic_ostream_wchar_sentry_destroy(this); - return this; -} - -/* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@JH@Z */ -/* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JH@Z */ -/* ?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@JH@Z */ -/* ?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_seekp, 16) -basic_ostream_wchar* __thiscall basic_ostream_wchar_seekp(basic_ostream_wchar *this, streamoff off, int way) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - - TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(off), way); - - if(!ios_base_fail(&base->base)) { - fpos_int seek; - - basic_streambuf_wchar_pubseekoff(basic_ios_wchar_rdbuf_get(base), - &seek, off, way, OPENMODE_out); - if(seek.off==0 && seek.pos==-1 && seek.state==0) - basic_ios_wchar_setstate(base, IOSTATE_failbit); - } - return this; -} - -/* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */ -/* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */ -/* ?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */ -/* ?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_seekp_fpos, 28) -basic_ostream_wchar* __thiscall basic_ostream_wchar_seekp_fpos(basic_ostream_wchar *this, fpos_int pos) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - - TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos)); - - if(!ios_base_fail(&base->base)) { - fpos_int seek; - - basic_streambuf_wchar_pubseekpos(basic_ios_wchar_rdbuf_get(base), - &seek, pos, OPENMODE_out); - if(seek.off==0 && seek.pos==-1 && seek.state==0) - basic_ios_wchar_setstate(base, IOSTATE_failbit); - } - return this; -} - -/* ?tellp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@XZ */ -/* ?tellp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@XZ */ -/* ?tellp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@XZ */ -/* ?tellp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_tellp, 8) -fpos_int* __thiscall basic_ostream_wchar_tellp(basic_ostream_wchar *this, fpos_int *ret) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - - TRACE("(%p)\n", this); - - if(!ios_base_fail(&base->base)) { - basic_streambuf_wchar_pubseekoff(basic_ios_wchar_rdbuf_get(base), - ret, 0, SEEKDIR_cur, OPENMODE_out); - }else { - ret->off = 0; - ret->pos = -1; - ret->state = 0; - } - return ret; -} - -/* ?write@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PB_WH@Z */ -/* ?write@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEB_W_J@Z */ -/* ?write@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@PBGH@Z */ -/* ?write@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEBG_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_write, 16) -basic_ostream_wchar* __thiscall basic_ostream_wchar_write(basic_ostream_wchar *this, const wchar_t *str, streamsize count) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - - TRACE("(%p %s %s)\n", this, debugstr_w(str), wine_dbgstr_longlong(count)); - - if(!basic_ostream_wchar_sentry_create(this) - || basic_streambuf_wchar_sputn(base->strbuf, str, count)!=count) { - basic_ostream_wchar_sentry_destroy(this); - basic_ios_wchar_setstate(base, IOSTATE_badbit); - return this; - } - - basic_ostream_wchar_sentry_destroy(this); - return this; -} - -static basic_ostream_wchar* basic_ostream_print_short(basic_ostream_wchar *this, short val, const num_put *numput) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %d)\n", this, val); - - if(basic_ostream_wchar_sentry_create(this)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - ostreambuf_iterator_wchar dest = {0, strbuf}; - - num_put_wchar_put_long(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), - (ios_base_flags_get(&base->base) & FMTFLAG_basefield & (FMTFLAG_oct | FMTFLAG_hex)) - ? (LONG)((unsigned short)val) : (LONG)val); - } - basic_ostream_wchar_sentry_destroy(this); - - basic_ios_wchar_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@F@Z */ -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@F@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_short, 8) -basic_ostream_wchar* __thiscall basic_ostream_wchar_print_short(basic_ostream_wchar *this, short val) -{ - return basic_ostream_print_short(this, val, num_put_wchar_use_facet( - basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); -} - -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@F@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@F@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_short, 8) -basic_ostream_wchar* __thiscall basic_ostream_short_print_short(basic_ostream_wchar *this, short val) -{ - return basic_ostream_print_short(this, val, num_put_short_use_facet( - basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); -} - -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@G@Z */ -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@G@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_ushort, 8) -basic_ostream_wchar* __thiscall basic_ostream_wchar_print_ushort(basic_ostream_wchar *this, unsigned short val) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %u)\n", this, val); - - if(basic_ostream_wchar_sentry_create(this)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - const num_put *numput = num_put_wchar_use_facet(strbuf->loc); - ostreambuf_iterator_wchar dest = {0, strbuf}; - - num_put_wchar_put_ulong(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val); - } - basic_ostream_wchar_sentry_destroy(this); - - basic_ios_wchar_setstate(base, state); - return this; -} - -static basic_ostream_wchar* basic_ostream_print_int(basic_ostream_wchar *this, int val, const num_put *numput) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %d)\n", this, val); - - if(basic_ostream_wchar_sentry_create(this)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - ostreambuf_iterator_wchar dest = {0, strbuf}; - - num_put_wchar_put_long(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val); - } - basic_ostream_wchar_sentry_destroy(this); - - basic_ios_wchar_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@H@Z */ -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@H@Z */ -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@J@Z */ -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@J@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_int, 8) -basic_ostream_wchar* __thiscall basic_ostream_wchar_print_int(basic_ostream_wchar *this, int val) -{ - return basic_ostream_print_int(this, val, num_put_wchar_use_facet( - basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); -} - -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@H@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@H@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@J@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@J@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_int, 8) -basic_ostream_wchar* __thiscall basic_ostream_short_print_int(basic_ostream_wchar *this, int val) -{ - return basic_ostream_print_int(this, val, num_put_short_use_facet( - basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); -} - -static basic_ostream_wchar* basic_ostream_print_uint(basic_ostream_wchar *this, unsigned int val, const num_put *numput) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %u)\n", this, val); - - if(basic_ostream_wchar_sentry_create(this)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - ostreambuf_iterator_wchar dest = {0, strbuf}; - - num_put_wchar_put_ulong(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val); - } - basic_ostream_wchar_sentry_destroy(this); - - basic_ios_wchar_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@I@Z */ -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@I@Z */ -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@K@Z */ -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@K@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_uint, 8) -basic_ostream_wchar* __thiscall basic_ostream_wchar_print_uint(basic_ostream_wchar *this, unsigned int val) -{ - return basic_ostream_print_uint(this, val, num_put_wchar_use_facet( - basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); -} - -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@I@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@I@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@K@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@K@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_uint, 8) -basic_ostream_wchar* __thiscall basic_ostream_short_print_uint(basic_ostream_wchar *this, unsigned int val) -{ - return basic_ostream_print_uint(this, val, num_put_short_use_facet( - basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); -} - -static basic_ostream_wchar* basic_ostream_print_float(basic_ostream_wchar *this, float val, const num_put *numput) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %f)\n", this, val); - - if(basic_ostream_wchar_sentry_create(this)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - ostreambuf_iterator_wchar dest = {0, strbuf}; - - num_put_wchar_put_double(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val); - } - basic_ostream_wchar_sentry_destroy(this); - - basic_ios_wchar_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@M@Z */ -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@M@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_float, 8) -basic_ostream_wchar* __thiscall basic_ostream_wchar_print_float(basic_ostream_wchar *this, float val) -{ - return basic_ostream_print_float(this, val, num_put_wchar_use_facet( - basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); -} - -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@M@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@M@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_float, 8) -basic_ostream_wchar* __thiscall basic_ostream_short_print_float(basic_ostream_wchar *this, float val) -{ - return basic_ostream_print_float(this, val, num_put_short_use_facet( - basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); -} - -static basic_ostream_wchar* basic_ostream_print_double(basic_ostream_wchar *this, double val, const num_put *numput) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %lf)\n", this, val); - - if(basic_ostream_wchar_sentry_create(this)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - ostreambuf_iterator_wchar dest = {0, strbuf}; - - num_put_wchar_put_double(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val); - } - basic_ostream_wchar_sentry_destroy(this); - - basic_ios_wchar_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@N@Z */ -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@N@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_double, 12) -basic_ostream_wchar* __thiscall basic_ostream_wchar_print_double(basic_ostream_wchar *this, double val) -{ - return basic_ostream_print_double(this, val, num_put_wchar_use_facet( - basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); -} - -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@N@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@N@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_double, 12) -basic_ostream_wchar* __thiscall basic_ostream_short_print_double(basic_ostream_wchar *this, double val) -{ - return basic_ostream_print_double(this, val, num_put_short_use_facet( - basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); -} - -static basic_ostream_wchar* basic_ostream_print_ldouble(basic_ostream_wchar *this, double val, const num_put *numput) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %lf)\n", this, val); - - if(basic_ostream_wchar_sentry_create(this)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - ostreambuf_iterator_wchar dest = {0, strbuf}; - - num_put_wchar_put_ldouble(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val); - } - basic_ostream_wchar_sentry_destroy(this); - - basic_ios_wchar_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@O@Z */ -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@O@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_ldouble, 12) -basic_ostream_wchar* __thiscall basic_ostream_wchar_print_ldouble(basic_ostream_wchar *this, double val) -{ - return basic_ostream_print_ldouble(this, val, num_put_wchar_use_facet( - basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); -} - -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@O@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@O@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_ldouble, 12) -basic_ostream_wchar* __thiscall basic_ostream_short_print_ldouble(basic_ostream_wchar *this, double val) -{ - return basic_ostream_print_ldouble(this, val, num_put_short_use_facet( - basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); -} - -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */ -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_streambuf, 8) -basic_ostream_wchar* __thiscall basic_ostream_wchar_print_streambuf(basic_ostream_wchar *this, basic_streambuf_wchar *val) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - IOSB_iostate state = IOSTATE_badbit; - unsigned short c = '\n'; - - TRACE("(%p %p)\n", this, val); - - if(basic_ostream_wchar_sentry_create(this)) { - for(c = basic_streambuf_wchar_sgetc(val); c!=WEOF; - c = basic_streambuf_wchar_snextc(val)) { - state = IOSTATE_goodbit; - - if(basic_streambuf_wchar_sputc(base->strbuf, c) == WEOF) { - state = IOSTATE_badbit; - break; - } - } - }else { - state = IOSTATE_badbit; - } - basic_ostream_wchar_sentry_destroy(this); - - ios_base_width_set(&base->base, 0); - basic_ios_wchar_setstate(base, state); - return this; -} - -static basic_ostream_wchar* basic_ostream_print_ptr(basic_ostream_wchar *this, const void *val, const num_put *numput) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %p)\n", this, val); - - if(basic_ostream_wchar_sentry_create(this)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - ostreambuf_iterator_wchar dest = {0, strbuf}; - - num_put_wchar_put_ptr(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val); - } - basic_ostream_wchar_sentry_destroy(this); - - basic_ios_wchar_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PBX@Z */ -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEBX@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_ptr, 8) -basic_ostream_wchar* __thiscall basic_ostream_wchar_print_ptr(basic_ostream_wchar *this, const void *val) -{ - return basic_ostream_print_ptr(this, val, num_put_wchar_use_facet( - basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); -} - -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@PBX@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEBX@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_ptr, 8) -basic_ostream_wchar* __thiscall basic_ostream_short_print_ptr(basic_ostream_wchar *this, const void *val) -{ - return basic_ostream_print_ptr(this, val, num_put_short_use_facet( - basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); -} - -static basic_ostream_wchar* basic_ostream_print_int64(basic_ostream_wchar *this, __int64 val, const num_put *numput) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p)\n", this); - - if(basic_ostream_wchar_sentry_create(this)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - ostreambuf_iterator_wchar dest = {0, strbuf}; - - num_put_wchar_put_int64(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val); - } - basic_ostream_wchar_sentry_destroy(this); - - basic_ios_wchar_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_J@Z */ -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_int64, 12) -basic_ostream_wchar* __thiscall basic_ostream_wchar_print_int64(basic_ostream_wchar *this, __int64 val) -{ - return basic_ostream_print_int64(this, val, num_put_wchar_use_facet( - basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); -} - -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_J@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_int64, 12) -basic_ostream_wchar* __thiscall basic_ostream_short_print_int64(basic_ostream_wchar *this, __int64 val) -{ - return basic_ostream_print_int64(this, val, num_put_short_use_facet( - basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); -} - -static basic_ostream_wchar* basic_ostream_print_uint64(basic_ostream_wchar *this, unsigned __int64 val, const num_put *numput) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p)\n", this); - - if(basic_ostream_wchar_sentry_create(this)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - ostreambuf_iterator_wchar dest = {0, strbuf}; - - num_put_wchar_put_uint64(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val); - } - basic_ostream_wchar_sentry_destroy(this); - - basic_ios_wchar_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_K@Z */ -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_K@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_uint64, 12) -basic_ostream_wchar* __thiscall basic_ostream_wchar_print_uint64(basic_ostream_wchar *this, unsigned __int64 val) -{ - return basic_ostream_print_uint64(this, val, num_put_wchar_use_facet( - basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); -} - -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_K@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_K@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_uint64, 12) -basic_ostream_wchar* __thiscall basic_ostream_short_print_uint64(basic_ostream_wchar *this, unsigned __int64 val) -{ - return basic_ostream_print_uint64(this, val, num_put_short_use_facet( - basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); -} - -static basic_ostream_wchar* basic_ostream_print_bool(basic_ostream_wchar *this, MSVCP_bool val, const num_put *numput) -{ - basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %x)\n", this, val); - - if(basic_ostream_wchar_sentry_create(this)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - ostreambuf_iterator_wchar dest = {0, strbuf}; - - num_put_wchar_put_bool(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val); - } - basic_ostream_wchar_sentry_destroy(this); - - basic_ios_wchar_setstate(base, state); - return this; -} - -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_N@Z */ -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_bool, 8) -basic_ostream_wchar* __thiscall basic_ostream_wchar_print_bool(basic_ostream_wchar *this, MSVCP_bool val) -{ - return basic_ostream_print_bool(this, val, num_put_wchar_use_facet( - basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); -} - -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_N@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_bool, 8) -basic_ostream_wchar* __thiscall basic_ostream_short_print_bool(basic_ostream_wchar *this, MSVCP_bool val) -{ - return basic_ostream_print_bool(this, val, num_put_short_use_facet( - basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); -} - -/* ?endl@std@@YAAAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AAV21@@Z */ -/* ?endl@std@@YAAEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AEAV21@@Z */ -/* ?endl@std@@YAAAV?$basic_ostream@GU?$char_traits@G@std@@@1@AAV21@@Z */ -/* ?endl@std@@YAAEAV?$basic_ostream@GU?$char_traits@G@std@@@1@AEAV21@@Z */ -basic_ostream_wchar* __cdecl basic_ostream_wchar_endl(basic_ostream_wchar *ostr) -{ - TRACE("(%p)\n", ostr); - - basic_ostream_wchar_put(ostr, '\n'); - basic_ostream_wchar_flush(ostr); - return ostr; -} - -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */ -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_func, 8) -basic_ostream_wchar* __thiscall basic_ostream_wchar_print_func(basic_ostream_wchar *this, - basic_ostream_wchar* (__cdecl *pfunc)(basic_ostream_wchar*)) -{ - TRACE("(%p %p)\n", this, pfunc); - pfunc(this); - return this; -} - -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AAV21@@Z@Z */ -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AEAV21@@Z@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@GU?$char_traits@G@std@@@1@AAV21@@Z@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@GU?$char_traits@G@std@@@1@AEAV21@@Z@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_func_basic_ios, 8) -basic_ostream_wchar* __thiscall basic_ostream_wchar_print_func_basic_ios(basic_ostream_wchar *this, - basic_ios_wchar* (__cdecl *pfunc)(basic_ios_wchar*)) -{ - TRACE("(%p %p)\n", this, pfunc); - pfunc(basic_ostream_wchar_get_basic_ios(this)); - return this; -} - -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */ -/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */ -/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_func_ios_base, 8) -basic_ostream_wchar* __thiscall basic_ostream_wchar_print_func_ios_base( - basic_ostream_wchar *this, ios_base* (__cdecl *pfunc)(ios_base*)) -{ - TRACE("(%p %p)\n", this, pfunc); - pfunc(&basic_ostream_wchar_get_basic_ios(this)->base); - return this; -} - -/* Caution: basic_istream uses virtual inheritance. */ -static inline basic_ios_char* basic_istream_char_get_basic_ios(basic_istream_char *this) -{ - return (basic_ios_char*)((char*)this+this->vbtable[1]); -} - -static inline basic_ios_char* basic_istream_char_to_basic_ios(basic_istream_char *ptr) -{ - return (basic_ios_char*)((char*)ptr+basic_istream_char_vbtable[1]); -} - -static inline basic_istream_char* basic_istream_char_from_basic_ios(basic_ios_char *ptr) -{ - return (basic_istream_char*)((char*)ptr-basic_istream_char_vbtable[1]); -} - -/* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N1@Z */ -/* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N1@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_ctor_init, 20) -basic_istream_char* __thiscall basic_istream_char_ctor_init(basic_istream_char *this, basic_streambuf_char *strbuf, MSVCP_bool isstd, MSVCP_bool noinit, MSVCP_bool virt_init) -{ - basic_ios_char *base; - - TRACE("(%p %p %d %d %d)\n", this, strbuf, isstd, noinit, virt_init); - - if(virt_init) { - this->vbtable = basic_istream_char_vbtable; - base = basic_istream_char_get_basic_ios(this); - basic_ios_char_ctor(base); - }else { - base = basic_istream_char_get_basic_ios(this); - } - - base->base.vtable = &MSVCP_basic_istream_char_vtable; - this->count = 0; - if(!noinit) - basic_ios_char_init(base, strbuf, isstd); - return this; -} - -/* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */ -/* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_ctor, 16) -basic_istream_char* __thiscall basic_istream_char_ctor(basic_istream_char *this, basic_streambuf_char *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init) -{ - return basic_istream_char_ctor_init(this, strbuf, isstd, FALSE, virt_init); -} - -/* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@@Z */ -/* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_ctor_uninitialized, 12) -basic_istream_char* __thiscall basic_istream_char_ctor_uninitialized(basic_istream_char *this, int uninitialized, MSVCP_bool virt_init) -{ - basic_ios_char *base; - - TRACE("(%p %d %d)\n", this, uninitialized, virt_init); - - if(virt_init) { - this->vbtable = basic_istream_char_vbtable; - base = basic_istream_char_get_basic_ios(this); - basic_ios_char_ctor(base); - }else { - base = basic_istream_char_get_basic_ios(this); - } - - base->base.vtable = &MSVCP_basic_istream_char_vtable; - ios_base_Addstd(&base->base); - return this; -} - -/* ??1?$basic_istream@DU?$char_traits@D@std@@@std@@UAE@XZ */ -/* ??1?$basic_istream@DU?$char_traits@D@std@@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_dtor, 4) -void __thiscall basic_istream_char_dtor(basic_ios_char *base) -{ - basic_istream_char *this = basic_istream_char_from_basic_ios(base); - - /* don't destroy virtual base here */ - TRACE("(%p)\n", this); -} - -/* ??_D?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXXZ */ -/* ??_D?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_vbase_dtor, 4) -void __thiscall basic_istream_char_vbase_dtor(basic_istream_char *this) -{ - TRACE("(%p)\n", this); - basic_istream_char_dtor(basic_istream_char_to_basic_ios(this)); - basic_ios_char_dtor(basic_istream_char_get_basic_ios(this)); -} - -DEFINE_THISCALL_WRAPPER(basic_istream_char_vector_dtor, 8) -basic_istream_char* __thiscall basic_istream_char_vector_dtor(basic_ios_char *base, unsigned int flags) -{ - basic_istream_char *this = basic_istream_char_from_basic_ios(base); - - TRACE("(%p %x)\n", this, flags); - - if(flags & 2) { - /* we have an array, with the number of elements stored before the first object */ - INT_PTR i, *ptr = (INT_PTR *)this-1; - - for(i=*ptr-1; i>=0; i--) - basic_istream_char_vbase_dtor(this+i); - MSVCRT_operator_delete(ptr); - } else { - basic_istream_char_vbase_dtor(this); - if(flags & 1) - MSVCRT_operator_delete(this); - } - - return this; -} - -/* ?_Ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE_N_N@Z */ -/* ?_Ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_N_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char__Ipfx, 8) -MSVCP_bool __thiscall basic_istream_char__Ipfx(basic_istream_char *this, MSVCP_bool noskip) -{ - basic_ios_char *base = basic_istream_char_get_basic_ios(this); - - TRACE("(%p %d)\n", this, noskip); - - if(!ios_base_good(&base->base)) { - basic_ios_char_setstate(base, IOSTATE_failbit); - return FALSE; - } - - if(basic_ios_char_tie_get(base)) - basic_ostream_char_flush(basic_ios_char_tie_get(base)); - - if(!noskip && (ios_base_flags_get(&base->base) & FMTFLAG_skipws)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const ctype_char *ctype = ctype_char_use_facet(base->strbuf->loc); - int ch; - - for(ch = basic_streambuf_char_sgetc(strbuf); ; - ch = basic_streambuf_char_snextc(strbuf)) { - if(ch == EOF) { - basic_ios_char_setstate(base, IOSTATE_eofbit); - return FALSE; - } - - if(!ctype_char_is_ch(ctype, _SPACE|_BLANK, ch)) - break; - } - } - - return TRUE; -} - -/* ?ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE_N_N@Z */ -/* ?ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_N_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_ipfx, 8) -MSVCP_bool __thiscall basic_istream_char_ipfx(basic_istream_char *this, MSVCP_bool noskip) -{ - return basic_istream_char__Ipfx(this, noskip); -} - -/* ?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXXZ */ -/* ?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_isfx, 4) -void __thiscall basic_istream_char_isfx(basic_istream_char *this) -{ - TRACE("(%p)\n", this); -} - -static BOOL basic_istream_char_sentry_create(basic_istream_char *istr, MSVCP_bool noskip) -{ - basic_ios_char *base = basic_istream_char_get_basic_ios(istr); - - if(basic_ios_char_rdbuf_get(base)) - call_basic_streambuf_char__Lock(base->strbuf); - - return basic_istream_char_ipfx(istr, noskip); -} - -static void basic_istream_char_sentry_destroy(basic_istream_char *istr) -{ - basic_ios_char *base = basic_istream_char_get_basic_ios(istr); - - if(basic_ios_char_rdbuf_get(base)) - call_basic_streambuf_char__Unlock(base->strbuf); -} - -/* ?gcount@?$basic_istream@DU?$char_traits@D@std@@@std@@QBEHXZ */ -/* ?gcount@?$basic_istream@DU?$char_traits@D@std@@@std@@QEBA_JXZ */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_gcount, 4) -int __thiscall basic_istream_char_gcount(const basic_istream_char *this) -{ - TRACE("(%p)\n", this); - return this->count; -} - -/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ */ -/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_get, 4) -int __thiscall basic_istream_char_get(basic_istream_char *this) -{ - basic_ios_char *base = basic_istream_char_get_basic_ios(this); - int ret; - - TRACE("(%p)\n", this); - - this->count = 0; - - if(!basic_istream_char_sentry_create(this, TRUE)) { - basic_istream_char_sentry_destroy(this); - return EOF; - } - - ret = basic_streambuf_char_sbumpc(basic_ios_char_rdbuf_get(base)); - basic_istream_char_sentry_destroy(this); - if(ret == EOF) - basic_ios_char_setstate(base, IOSTATE_eofbit|IOSTATE_failbit); - else - this->count++; - - return ret; -} - -/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAD@Z */ -/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAD@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_get_ch, 8) -basic_istream_char* __thiscall basic_istream_char_get_ch(basic_istream_char *this, char *ch) -{ - int ret; - - TRACE("(%p %p)\n", this, ch); - - ret = basic_istream_char_get(this); - if(ret != EOF) - *ch = (char)ret; - return this; -} - -/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADHD@Z */ -/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_JD@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_get_str_delim, 20) -basic_istream_char* __thiscall basic_istream_char_get_str_delim(basic_istream_char *this, char *str, streamsize count, char delim) -{ - basic_ios_char *base = basic_istream_char_get_basic_ios(this); - int ch = delim; - - TRACE("(%p %p %s %c)\n", this, str, wine_dbgstr_longlong(count), delim); - - this->count = 0; - - if(basic_istream_char_sentry_create(this, TRUE)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - - for(ch = basic_streambuf_char_sgetc(strbuf); count>1; - ch = basic_streambuf_char_snextc(strbuf)) { - if(ch==EOF || ch==delim) - break; - - *str++ = ch; - this->count++; - count--; - } - } - basic_istream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) | - (ch==EOF ? IOSTATE_eofbit : IOSTATE_goodbit)); - if(count > 0) - *str = 0; - return this; -} - -/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADH@Z */ -/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_get_str, 16) -basic_istream_char* __thiscall basic_istream_char_get_str(basic_istream_char *this, char *str, streamsize count) -{ - return basic_istream_char_get_str_delim(this, str, count, '\n'); -} - -/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAV?$basic_streambuf@DU?$char_traits@D@std@@@2@D@Z */ -/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@D@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_get_streambuf_delim, 12) -basic_istream_char* __thiscall basic_istream_char_get_streambuf_delim(basic_istream_char *this, basic_streambuf_char *strbuf, char delim) -{ - basic_ios_char *base = basic_istream_char_get_basic_ios(this); - int ch = delim; - - TRACE("(%p %p %c)\n", this, strbuf, delim); - - this->count = 0; - - if(basic_istream_char_sentry_create(this, TRUE)) { - basic_streambuf_char *strbuf_read = basic_ios_char_rdbuf_get(base); - - for(ch = basic_streambuf_char_sgetc(strbuf_read); ; - ch = basic_streambuf_char_snextc(strbuf_read)) { - if(ch==EOF || ch==delim) - break; - - if(basic_streambuf_char_sputc(strbuf, ch) == EOF) - break; - this->count++; - } - } - basic_istream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) | - (ch==EOF ? IOSTATE_eofbit : IOSTATE_goodbit)); - return this; -} - -/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z */ -/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_get_streambuf, 8) -basic_istream_char* __thiscall basic_istream_char_get_streambuf(basic_istream_char *this, basic_streambuf_char *strbuf) -{ - return basic_istream_char_get_streambuf_delim(this, strbuf, '\n'); -} - -/* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADHD@Z */ -/* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_JD@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_getline_delim, 20) -basic_istream_char* __thiscall basic_istream_char_getline_delim(basic_istream_char *this, char *str, streamsize count, char delim) -{ - basic_ios_char *base = basic_istream_char_get_basic_ios(this); - int ch = delim; - - TRACE("(%p %p %s %c)\n", this, str, wine_dbgstr_longlong(count), delim); - - this->count = 0; - - if(basic_istream_char_sentry_create(this, TRUE) && count>0) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - - while(count > 1) { - ch = basic_streambuf_char_sbumpc(strbuf); - - if(ch==EOF || ch==delim) - break; - - *str++ = ch; - this->count++; - count--; - } - - if(ch == delim) - this->count++; - else if(ch != EOF) { - ch = basic_streambuf_char_sgetc(strbuf); - - if(ch == delim) { - basic_streambuf_char__Gninc(strbuf); - this->count++; - } - } - } - basic_istream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, (ch==EOF ? IOSTATE_eofbit : IOSTATE_goodbit) | - (!this->count || (ch!=delim && ch!=EOF) ? IOSTATE_failbit : IOSTATE_goodbit)); - if(count > 0) - *str = 0; - return this; -} - -/* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADH@Z */ -/* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_getline, 16) -basic_istream_char* __thiscall basic_istream_char_getline(basic_istream_char *this, char *str, streamsize count) -{ - return basic_istream_char_getline_delim(this, str, count, '\n'); -} - -/* ?ignore@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@HH@Z */ -/* ?ignore@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_ignore, 16) -basic_istream_char* __thiscall basic_istream_char_ignore(basic_istream_char *this, streamsize count, int delim) -{ - basic_ios_char *base = basic_istream_char_get_basic_ios(this); - int ch = delim; - - TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(count), delim); - - this->count = 0; - - if(basic_istream_char_sentry_create(this, TRUE)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - - while(count > 0) { - ch = basic_streambuf_char_sbumpc(strbuf); - - if(ch==EOF || ch==delim) - break; - - this->count++; - if(count != INT_MAX) - count--; - } - } - basic_istream_char_sentry_destroy(this); - - if(ch == EOF) - basic_ios_char_setstate(base, IOSTATE_eofbit); - return this; -} - -/* ?ws@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@1@AAV21@@Z */ -/* ?ws@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@1@AEAV21@@Z */ -basic_istream_char* __cdecl ws_basic_istream_char(basic_istream_char *istream) -{ - basic_ios_char *base = basic_istream_char_get_basic_ios(istream); - int ch = '\n'; - - TRACE("(%p)\n", istream); - - if(basic_istream_char_sentry_create(istream, TRUE)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const ctype_char *ctype = ctype_char_use_facet(strbuf->loc); - - for(ch = basic_streambuf_char_sgetc(strbuf); ctype_char_is_ch(ctype, _SPACE, ch); - ch = basic_streambuf_char_snextc(strbuf)) { - if(ch == EOF) - break; - } - } - basic_istream_char_sentry_destroy(istream); - - if(ch == EOF) - basic_ios_char_setstate(base, IOSTATE_eofbit); - return istream; -} - -/* ?peek@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ */ -/* ?peek@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_peek, 4) -int __thiscall basic_istream_char_peek(basic_istream_char *this) -{ - basic_ios_char *base = basic_istream_char_get_basic_ios(this); - int ret = EOF; - - TRACE("(%p)\n", this); - - this->count = 0; - - if(basic_istream_char_sentry_create(this, TRUE)) - ret = basic_streambuf_char_sgetc(basic_ios_char_rdbuf_get(base)); - basic_istream_char_sentry_destroy(this); - return ret; -} - -/* ?_Read_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADIH@Z */ -/* ?_Read_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_K_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char__Read_s, 20) -basic_istream_char* __thiscall basic_istream_char__Read_s(basic_istream_char *this, char *str, MSVCP_size_t size, streamsize count) -{ - basic_ios_char *base = basic_istream_char_get_basic_ios(this); - IOSB_iostate state = IOSTATE_goodbit; - - TRACE("(%p %p %lu %s)\n", this, str, size, wine_dbgstr_longlong(count)); - - if(basic_istream_char_sentry_create(this, TRUE)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - - this->count = basic_streambuf_char__Sgetn_s(strbuf, str, size, count); - if(this->count != count) - state |= IOSTATE_failbit | IOSTATE_eofbit; - }else { - this->count = 0; - } - basic_istream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, state); - return this; -} - -/* ?read@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADH@Z */ -/* ?read@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_read, 16) -basic_istream_char* __thiscall basic_istream_char_read(basic_istream_char *this, char *str, streamsize count) -{ - return basic_istream_char__Read_s(this, str, count, count); -} - -/* ?_Readsome_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHPADIH@Z */ -/* ?_Readsome_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_K_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char__Readsome_s, 20) -streamsize __thiscall basic_istream_char__Readsome_s(basic_istream_char *this, char *str, MSVCP_size_t size, streamsize count) -{ - basic_ios_char *base = basic_istream_char_get_basic_ios(this); - IOSB_iostate state = IOSTATE_goodbit; - - TRACE("(%p %p %lu %s)\n", this, str, size, wine_dbgstr_longlong(count)); - - this->count = 0; - - if(basic_istream_char_sentry_create(this, TRUE)) { - streamsize avail = basic_streambuf_char_in_avail(basic_ios_char_rdbuf_get(base)); - if(avail > count) - avail = count; - - if(avail == -1) - state |= IOSTATE_eofbit; - else if(avail > 0) - basic_istream_char__Read_s(this, str, size, avail); - }else { - state |= IOSTATE_failbit; - } - basic_istream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, state); - return this->count; -} - -/* ?readsome@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHPADH@Z */ -/* ?readsome@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_readsome, 16) -streamsize __thiscall basic_istream_char_readsome(basic_istream_char *this, char *str, streamsize count) -{ - return basic_istream_char__Readsome_s(this, str, count, count); -} - -/* ?putback@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z */ -/* ?putback@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_putback, 8) -basic_istream_char* __thiscall basic_istream_char_putback(basic_istream_char *this, char ch) -{ - basic_ios_char *base = basic_istream_char_get_basic_ios(this); - IOSB_iostate state = IOSTATE_goodbit; - - TRACE("(%p %c)\n", this, ch); - - this->count = 0; - - if(basic_istream_char_sentry_create(this, TRUE)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - - if(!ios_base_good(&base->base)) - state |= IOSTATE_failbit; - else if(!strbuf || basic_streambuf_char_sputbackc(strbuf, ch)==EOF) - state |= IOSTATE_badbit; - } - basic_istream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, state); - return this; -} - -/* ?unget@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ */ -/* ?unget@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_unget, 4) -basic_istream_char* __thiscall basic_istream_char_unget(basic_istream_char *this) -{ - basic_ios_char *base = basic_istream_char_get_basic_ios(this); - IOSB_iostate state = IOSTATE_goodbit; - - TRACE("(%p)\n", this); - - this->count = 0; - - if(basic_istream_char_sentry_create(this, TRUE)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - - if(!ios_base_good(&base->base)) - state |= IOSTATE_failbit; - else if(!strbuf || basic_streambuf_char_sungetc(strbuf)==EOF) - state |= IOSTATE_badbit; - } - basic_istream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, state); - return this; -} - -/* ?sync@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ */ -/* ?sync@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_sync, 4) -int __thiscall basic_istream_char_sync(basic_istream_char *this) -{ - basic_ios_char *base = basic_istream_char_get_basic_ios(this); - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - - TRACE("(%p)\n", this); - - if(!strbuf) - return -1; - - if(basic_istream_char_sentry_create(this, TRUE)) { - if(basic_streambuf_char_pubsync(strbuf) != -1) { - basic_istream_char_sentry_destroy(this); - return 0; - } - } - basic_istream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, IOSTATE_badbit); - return -1; -} - -/* ?tellg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@XZ */ -/* ?tellg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_tellg, 8) -fpos_int* __thiscall basic_istream_char_tellg(basic_istream_char *this, fpos_int *ret) -{ - TRACE("(%p %p)\n", this, ret); - - if(basic_istream_char_sentry_create(this, TRUE)) { - basic_ios_char *base = basic_istream_char_get_basic_ios(this); - if(!ios_base_fail(&base->base)) { - basic_streambuf_char_pubseekoff(basic_ios_char_rdbuf_get(base), - ret, 0, SEEKDIR_cur, OPENMODE_in); - basic_istream_char_sentry_destroy(this); - - if(ret->off==0 && ret->pos==-1 && ret->state==0) - basic_ios_char_setstate(base, IOSTATE_failbit); - return ret; - } - } - basic_istream_char_sentry_destroy(this); - - ret->off = 0; - ret->pos = -1; - ret->state = 0; - return ret; -} - -/* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@JH@Z */ -/* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_seekg, 16) -basic_istream_char* __thiscall basic_istream_char_seekg(basic_istream_char *this, streamoff off, int dir) -{ - basic_ios_char *base = basic_istream_char_get_basic_ios(this); - - TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(off), dir); - - if(basic_istream_char_sentry_create(this, TRUE)) { - if(!ios_base_fail(&base->base)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - fpos_int ret; - - basic_streambuf_char_pubseekoff(strbuf, &ret, off, dir, OPENMODE_in); - basic_istream_char_sentry_destroy(this); - - if(ret.off==0 && ret.pos==-1 && ret.state==0) - basic_ios_char_setstate(base, IOSTATE_failbit); - else - basic_ios_char_clear(base, IOSTATE_goodbit); - return this; - } - } - basic_istream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, IOSTATE_failbit); - return this; -} - -/* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */ -/* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_seekg_fpos, 28) -basic_istream_char* __thiscall basic_istream_char_seekg_fpos(basic_istream_char *this, fpos_int pos) -{ - basic_ios_char *base = basic_istream_char_get_basic_ios(this); - - TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos)); - - if(basic_istream_char_sentry_create(this, TRUE)) { - if(!ios_base_fail(&base->base)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - fpos_int ret; - - basic_streambuf_char_pubseekpos(strbuf, &ret, pos, OPENMODE_in); - basic_istream_char_sentry_destroy(this); - - if(ret.off==0 && ret.pos==-1 && ret.state==0) - basic_ios_char_setstate(base, IOSTATE_failbit); - else - basic_ios_char_clear(base, IOSTATE_goodbit); - return this; - } - } - basic_istream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, IOSTATE_failbit); - return this; -} - -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAF@Z */ -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAF@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_read_short, 8) -basic_istream_char* __thiscall basic_istream_char_read_short(basic_istream_char *this, short *v) -{ - basic_ios_char *base = basic_istream_char_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %p)\n", this, v); - - if(basic_istream_char_sentry_create(this, FALSE)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_get *numget = num_get_char_use_facet(strbuf->loc); - istreambuf_iterator_char first={0}, last={0}; - LONG tmp; - - first.strbuf = strbuf; - num_get_char_get_long(numget, &last, first, last, &base->base, &state, &tmp); - - if(!(state&IOSTATE_failbit) && tmp==(LONG)((short)tmp)) - *v = tmp; - else - state |= IOSTATE_failbit; - } - basic_istream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, state); - return this; -} - -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAG@Z */ -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAG@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ushort, 8) -basic_istream_char* __thiscall basic_istream_char_read_ushort(basic_istream_char *this, unsigned short *v) -{ - basic_ios_char *base = basic_istream_char_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %p)\n", this, v); - - if(basic_istream_char_sentry_create(this, FALSE)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_get *numget = num_get_char_use_facet(strbuf->loc); - istreambuf_iterator_char first={0}, last={0}; - - first.strbuf = strbuf; - num_get_char_get_ushort(numget, &last, first, last, &base->base, &state, v); - } - basic_istream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, state); - return this; -} - -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAH@Z */ -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAH@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_read_int, 8) -basic_istream_char* __thiscall basic_istream_char_read_int(basic_istream_char *this, int *v) -{ - basic_ios_char *base = basic_istream_char_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %p)\n", this, v); - - if(basic_istream_char_sentry_create(this, FALSE)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_get *numget = num_get_char_use_facet(strbuf->loc); - istreambuf_iterator_char first={0}, last={0}; - - first.strbuf = strbuf; - num_get_char_get_long(numget, &last, first, last, &base->base, &state, v); - } - basic_istream_char_sentry_destroy(this); - - basic_ios_char_setstate(base, state); - return this; -} - -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAI@Z */ -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAI@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_read_uint, 8) -basic_istream_char* __thiscall basic_istream_char_read_uint(basic_istream_char *this, unsigned int *v) +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z */ +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@H@Z */ +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@J@Z */ +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@J@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_int, 8) +basic_ostream_char* __thiscall basic_ostream_char_print_int(basic_ostream_char *this, int val) { - basic_ios_char *base = basic_istream_char_get_basic_ios(this); + basic_ios_char *base = basic_ostream_char_get_basic_ios(this); int state = IOSTATE_goodbit; - TRACE("(%p %p)\n", this, v); + TRACE("(%p %d)\n", this, val); - if(basic_istream_char_sentry_create(this, FALSE)) { + if(basic_ostream_char_sentry_create(this)) { basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_get *numget = num_get_char_use_facet(strbuf->loc); - istreambuf_iterator_char first={0}, last={0}; + const num_put *numput = num_put_char_use_facet(strbuf->loc); + ostreambuf_iterator_char dest = {0, strbuf}; - first.strbuf = strbuf; - num_get_char_get_uint(numget, &last, first, last, &base->base, &state, v); + num_put_char_put_long(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val); } - basic_istream_char_sentry_destroy(this); + basic_ostream_char_sentry_destroy(this); basic_ios_char_setstate(base, state); return this; } -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAJ@Z */ -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAJ@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_read_long, 8) -basic_istream_char* __thiscall basic_istream_char_read_long(basic_istream_char *this, LONG *v) +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@I@Z */ +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@I@Z */ +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@K@Z */ +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@K@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_uint, 8) +basic_ostream_char* __thiscall basic_ostream_char_print_uint(basic_ostream_char *this, unsigned int val) { - basic_ios_char *base = basic_istream_char_get_basic_ios(this); + basic_ios_char *base = basic_ostream_char_get_basic_ios(this); int state = IOSTATE_goodbit; - TRACE("(%p %p)\n", this, v); + TRACE("(%p %u)\n", this, val); - if(basic_istream_char_sentry_create(this, FALSE)) { + if(basic_ostream_char_sentry_create(this)) { basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_get *numget = num_get_char_use_facet(strbuf->loc); - istreambuf_iterator_char first={0}, last={0}; + const num_put *numput = num_put_char_use_facet(strbuf->loc); + ostreambuf_iterator_char dest = {0, strbuf}; - first.strbuf = strbuf; - num_get_char_get_long(numget, &last, first, last, &base->base, &state, v); + num_put_char_put_ulong(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val); } - basic_istream_char_sentry_destroy(this); + basic_ostream_char_sentry_destroy(this); basic_ios_char_setstate(base, state); return this; } -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAK@Z */ -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAK@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ulong, 8) -basic_istream_char* __thiscall basic_istream_char_read_ulong(basic_istream_char *this, ULONG *v) +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@M@Z */ +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@M@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_float, 8) +basic_ostream_char* __thiscall basic_ostream_char_print_float(basic_ostream_char *this, float val) { - basic_ios_char *base = basic_istream_char_get_basic_ios(this); + basic_ios_char *base = basic_ostream_char_get_basic_ios(this); int state = IOSTATE_goodbit; - TRACE("(%p %p)\n", this, v); + TRACE("(%p %f)\n", this, val); - if(basic_istream_char_sentry_create(this, FALSE)) { + if(basic_ostream_char_sentry_create(this)) { basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_get *numget = num_get_char_use_facet(strbuf->loc); - istreambuf_iterator_char first={0}, last={0}; + const num_put *numput = num_put_char_use_facet(strbuf->loc); + ostreambuf_iterator_char dest = {0, strbuf}; - first.strbuf = strbuf; - num_get_char_get_ulong(numget, &last, first, last, &base->base, &state, v); + num_put_char_put_double(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val); } - basic_istream_char_sentry_destroy(this); + basic_ostream_char_sentry_destroy(this); basic_ios_char_setstate(base, state); return this; } -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAM@Z */ -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAM@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_read_float, 8) -basic_istream_char* __thiscall basic_istream_char_read_float(basic_istream_char *this, float *v) +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@N@Z */ +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_double, 12) +basic_ostream_char* __thiscall basic_ostream_char_print_double(basic_ostream_char *this, double val) { - basic_ios_char *base = basic_istream_char_get_basic_ios(this); + basic_ios_char *base = basic_ostream_char_get_basic_ios(this); int state = IOSTATE_goodbit; - TRACE("(%p %p)\n", this, v); + TRACE("(%p %lf)\n", this, val); - if(basic_istream_char_sentry_create(this, FALSE)) { + if(basic_ostream_char_sentry_create(this)) { basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_get *numget = num_get_char_use_facet(strbuf->loc); - istreambuf_iterator_char first={0}, last={0}; + const num_put *numput = num_put_char_use_facet(strbuf->loc); + ostreambuf_iterator_char dest = {0, strbuf}; - first.strbuf = strbuf; - num_get_char_get_float(numget, &last, first, last, &base->base, &state, v); + num_put_char_put_double(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val); } - basic_istream_char_sentry_destroy(this); + basic_ostream_char_sentry_destroy(this); basic_ios_char_setstate(base, state); return this; } -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAN@Z */ -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAN@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_read_double, 8) -basic_istream_char* __thiscall basic_istream_char_read_double(basic_istream_char *this, double *v) +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@O@Z */ +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@O@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ldouble, 12) +basic_ostream_char* __thiscall basic_ostream_char_print_ldouble(basic_ostream_char *this, double val) { - basic_ios_char *base = basic_istream_char_get_basic_ios(this); + basic_ios_char *base = basic_ostream_char_get_basic_ios(this); int state = IOSTATE_goodbit; - TRACE("(%p %p)\n", this, v); + TRACE("(%p %lf)\n", this, val); - if(basic_istream_char_sentry_create(this, FALSE)) { + if(basic_ostream_char_sentry_create(this)) { basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_get *numget = num_get_char_use_facet(strbuf->loc); - istreambuf_iterator_char first={0}, last={0}; + const num_put *numput = num_put_char_use_facet(strbuf->loc); + ostreambuf_iterator_char dest = {0, strbuf}; - first.strbuf = strbuf; - num_get_char_get_double(numget, &last, first, last, &base->base, &state, v); + num_put_char_put_ldouble(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val); } - basic_istream_char_sentry_destroy(this); + basic_ostream_char_sentry_destroy(this); basic_ios_char_setstate(base, state); return this; } -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAO@Z */ -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAO@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ldouble, 8) -basic_istream_char* __thiscall basic_istream_char_read_ldouble(basic_istream_char *this, double *v) +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */ +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_streambuf, 8) +basic_ostream_char* __thiscall basic_ostream_char_print_streambuf(basic_ostream_char *this, basic_streambuf_char *val) { - basic_ios_char *base = basic_istream_char_get_basic_ios(this); - int state = IOSTATE_goodbit; + basic_ios_char *base = basic_ostream_char_get_basic_ios(this); + IOSB_iostate state = IOSTATE_badbit; + int c = '\n'; - TRACE("(%p %p)\n", this, v); + TRACE("(%p %p)\n", this, val); - if(basic_istream_char_sentry_create(this, FALSE)) { - basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_get *numget = num_get_char_use_facet(strbuf->loc); - istreambuf_iterator_char first={0}, last={0}; + if(basic_ostream_char_sentry_create(this)) { + for(c = basic_streambuf_char_sgetc(val); c!=EOF; + c = basic_streambuf_char_snextc(val)) { + state = IOSTATE_goodbit; - first.strbuf = strbuf; - num_get_char_get_ldouble(numget, &last, first, last, &base->base, &state, v); + if(basic_streambuf_char_sputc(base->strbuf, c) == EOF) { + state = IOSTATE_badbit; + break; + } + } + }else { + state = IOSTATE_badbit; } - basic_istream_char_sentry_destroy(this); + basic_ostream_char_sentry_destroy(this); + ios_base_width_set(&base->base, 0); basic_ios_char_setstate(base, state); return this; } -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAPAX@Z */ -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAPEAX@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ptr, 8) -basic_istream_char* __thiscall basic_istream_char_read_ptr(basic_istream_char *this, void **v) +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@PBX@Z */ +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEBX@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ptr, 8) +basic_ostream_char* __thiscall basic_ostream_char_print_ptr(basic_ostream_char *this, const void *val) { - basic_ios_char *base = basic_istream_char_get_basic_ios(this); + basic_ios_char *base = basic_ostream_char_get_basic_ios(this); int state = IOSTATE_goodbit; - TRACE("(%p %p)\n", this, v); + TRACE("(%p %p)\n", this, val); - if(basic_istream_char_sentry_create(this, FALSE)) { + if(basic_ostream_char_sentry_create(this)) { basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_get *numget = num_get_char_use_facet(strbuf->loc); - istreambuf_iterator_char first={0}, last={0}; + const num_put *numput = num_put_char_use_facet(strbuf->loc); + ostreambuf_iterator_char dest = {0, strbuf}; - first.strbuf = strbuf; - num_get_char_get_void(numget, &last, first, last, &base->base, &state, v); + num_put_char_put_ptr(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val); } - basic_istream_char_sentry_destroy(this); + basic_ostream_char_sentry_destroy(this); basic_ios_char_setstate(base, state); return this; } -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_J@Z */ -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_read_int64, 8) -basic_istream_char* __thiscall basic_istream_char_read_int64(basic_istream_char *this, __int64 *v) +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_J@Z */ +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_J@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_int64, 12) +basic_ostream_char* __thiscall basic_ostream_char_print_int64(basic_ostream_char *this, __int64 val) { - basic_ios_char *base = basic_istream_char_get_basic_ios(this); + basic_ios_char *base = basic_ostream_char_get_basic_ios(this); int state = IOSTATE_goodbit; - TRACE("(%p %p)\n", this, v); + TRACE("(%p)\n", this); - if(basic_istream_char_sentry_create(this, FALSE)) { + if(basic_ostream_char_sentry_create(this)) { basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_get *numget = num_get_char_use_facet(strbuf->loc); - istreambuf_iterator_char first={0}, last={0}; + const num_put *numput = num_put_char_use_facet(strbuf->loc); + ostreambuf_iterator_char dest = {0, strbuf}; - first.strbuf = strbuf; - num_get_char_get_int64(numget, &last, first, last, &base->base, &state, v); + num_put_char_put_int64(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val); } - basic_istream_char_sentry_destroy(this); + basic_ostream_char_sentry_destroy(this); basic_ios_char_setstate(base, state); return this; } -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_K@Z */ -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_K@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_read_uint64, 8) -basic_istream_char* __thiscall basic_istream_char_read_uint64(basic_istream_char *this, unsigned __int64 *v) +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_K@Z */ +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_K@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_uint64, 12) +basic_ostream_char* __thiscall basic_ostream_char_print_uint64(basic_ostream_char *this, unsigned __int64 val) { - basic_ios_char *base = basic_istream_char_get_basic_ios(this); + basic_ios_char *base = basic_ostream_char_get_basic_ios(this); int state = IOSTATE_goodbit; - TRACE("(%p %p)\n", this, v); + TRACE("(%p)\n", this); - if(basic_istream_char_sentry_create(this, FALSE)) { + if(basic_ostream_char_sentry_create(this)) { basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_get *numget = num_get_char_use_facet(strbuf->loc); - istreambuf_iterator_char first={0}, last={0}; + const num_put *numput = num_put_char_use_facet(strbuf->loc); + ostreambuf_iterator_char dest = {0, strbuf}; - first.strbuf = strbuf; - num_get_char_get_uint64(numget, &last, first, last, &base->base, &state, v); + num_put_char_put_uint64(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val); } - basic_istream_char_sentry_destroy(this); + basic_ostream_char_sentry_destroy(this); basic_ios_char_setstate(base, state); return this; } -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_N@Z */ -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_read_bool, 8) -basic_istream_char* __thiscall basic_istream_char_read_bool(basic_istream_char *this, MSVCP_bool *v) +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_N@Z */ +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_bool, 8) +basic_ostream_char* __thiscall basic_ostream_char_print_bool(basic_ostream_char *this, MSVCP_bool val) { - basic_ios_char *base = basic_istream_char_get_basic_ios(this); + basic_ios_char *base = basic_ostream_char_get_basic_ios(this); int state = IOSTATE_goodbit; - TRACE("(%p %p)\n", this, v); + TRACE("(%p %x)\n", this, val); - if(basic_istream_char_sentry_create(this, FALSE)) { + if(basic_ostream_char_sentry_create(this)) { basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - const num_get *numget = num_get_char_use_facet(strbuf->loc); - istreambuf_iterator_char first={0}, last={0}; + const num_put *numput = num_put_char_use_facet(strbuf->loc); + ostreambuf_iterator_char dest = {0, strbuf}; - first.strbuf = strbuf; - num_get_char_get_bool(numget, &last, first, last, &base->base, &state, v); + num_put_char_put_bool(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val); } - basic_istream_char_sentry_destroy(this); + basic_ostream_char_sentry_destroy(this); basic_ios_char_setstate(base, state); return this; } -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */ -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_read_streambuf, 8) -basic_istream_char* __thiscall basic_istream_char_read_streambuf( - basic_istream_char *this, basic_streambuf_char *streambuf) +/* ?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z */ +/* ?endl@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@1@AEAV21@@Z */ +basic_ostream_char* __cdecl basic_ostream_char_endl(basic_ostream_char *ostr) { - basic_ios_char *base = basic_istream_char_get_basic_ios(this); - IOSB_iostate state = IOSTATE_failbit; - int c = '\n'; - - TRACE("(%p %p)\n", this, streambuf); - - if(basic_istream_char_sentry_create(this, FALSE)) { - for(c = basic_streambuf_char_sgetc(basic_ios_char_rdbuf_get(base)); c!=EOF; - c = basic_streambuf_char_snextc(basic_ios_char_rdbuf_get(base))) { - state = IOSTATE_goodbit; - if(basic_streambuf_char_sputc(streambuf, c) == EOF) - break; - } - } - basic_istream_char_sentry_destroy(this); + TRACE("(%p)\n", ostr); - basic_ios_char_setstate(base, state | (c==EOF ? IOSTATE_eofbit : IOSTATE_goodbit)); - return this; + basic_ostream_char_put(ostr, '\n'); + basic_ostream_char_flush(ostr); + return ostr; } -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */ -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_read_func, 8) -basic_istream_char* __thiscall basic_istream_char_read_func(basic_istream_char *this, - basic_istream_char* (__cdecl *pfunc)(basic_istream_char*)) +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */ +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_func, 8) +basic_ostream_char* __thiscall basic_ostream_char_print_func(basic_ostream_char *this, + basic_ostream_char* (__cdecl *pfunc)(basic_ostream_char*)) { TRACE("(%p %p)\n", this, pfunc); pfunc(this); return this; } -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@DU?$char_traits@D@std@@@1@AAV21@@Z@Z */ -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@DU?$char_traits@D@std@@@1@AEAV21@@Z@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_read_func_basic_ios, 8) -basic_istream_char* __thiscall basic_istream_char_read_func_basic_ios(basic_istream_char *this, +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@DU?$char_traits@D@std@@@1@AAV21@@Z@Z */ +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@DU?$char_traits@D@std@@@1@AEAV21@@Z@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_func_basic_ios, 8) +basic_ostream_char* __thiscall basic_ostream_char_print_func_basic_ios(basic_ostream_char *this, basic_ios_char* (__cdecl *pfunc)(basic_ios_char*)) { TRACE("(%p %p)\n", this, pfunc); - pfunc(basic_istream_char_get_basic_ios(this)); + pfunc(basic_ostream_char_get_basic_ios(this)); return this; } -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */ -/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_char_read_func_ios_base, 8) -basic_istream_char* __thiscall basic_istream_char_read_func_ios_base(basic_istream_char *this, - ios_base* (__cdecl *pfunc)(ios_base*)) +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */ +/* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_func_ios_base, 8) +basic_ostream_char* __thiscall basic_ostream_char_print_func_ios_base( + basic_ostream_char *this, ios_base* (__cdecl *pfunc)(ios_base*)) { TRACE("(%p %p)\n", this, pfunc); - pfunc(&basic_istream_char_get_basic_ios(this)->base); + pfunc(&basic_ostream_char_get_basic_ios(this)->base); return this; } -/* Caution: basic_istream uses virtual inheritance. */ -static inline basic_ios_wchar* basic_istream_wchar_get_basic_ios(basic_istream_wchar *this) +/* Caution: basic_ostream uses virtual inheritance. */ +static inline basic_ios_wchar* basic_ostream_wchar_get_basic_ios(basic_ostream_wchar *this) { return (basic_ios_wchar*)((char*)this+this->vbtable[1]); } -static inline basic_ios_wchar* basic_istream_wchar_to_basic_ios(basic_istream_wchar *ptr) +static inline basic_ios_wchar* basic_ostream_wchar_to_basic_ios(basic_ostream_wchar *ptr) { - return (basic_ios_wchar*)((char*)ptr+basic_istream_wchar_vbtable[1]); + return (basic_ios_wchar*)((char*)ptr+basic_ostream_wchar_vbtable[1]); } -static inline basic_istream_wchar* basic_istream_wchar_from_basic_ios(basic_ios_wchar *ptr) +static inline basic_ostream_wchar* basic_ostream_wchar_from_basic_ios(basic_ios_wchar *ptr) { - return (basic_istream_wchar*)((char*)ptr-basic_istream_wchar_vbtable[1]); + return (basic_ostream_wchar*)((char*)ptr-basic_ostream_wchar_vbtable[1]); } -/* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N1@Z */ -/* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N1@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ctor_init, 20) -basic_istream_wchar* __thiscall basic_istream_wchar_ctor_init(basic_istream_wchar *this, - basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool noinit, MSVCP_bool virt_init) +/* ??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */ +/* ??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_ctor, 16) +basic_ostream_wchar* __thiscall basic_ostream_wchar_ctor(basic_ostream_wchar *this, + basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init) { basic_ios_wchar *base; - TRACE("(%p %p %d %d %d)\n", this, strbuf, isstd, noinit, virt_init); + TRACE("(%p %p %d %d)\n", this, strbuf, isstd, virt_init); if(virt_init) { - this->vbtable = basic_istream_wchar_vbtable; - base = basic_istream_wchar_get_basic_ios(this); + this->vbtable = basic_ostream_wchar_vbtable; + base = basic_ostream_wchar_get_basic_ios(this); basic_ios_wchar_ctor(base); }else { - base = basic_istream_wchar_get_basic_ios(this); + base = basic_ostream_wchar_get_basic_ios(this); } - base->base.vtable = &MSVCP_basic_istream_wchar_vtable; - this->count = 0; - if(!noinit) - basic_ios_wchar_init(base, strbuf, isstd); - return this; -} - -/* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N1@Z */ -/* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N1@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_short_ctor_init, 20) -basic_istream_wchar* __thiscall basic_istream_short_ctor_init(basic_istream_wchar *this, - basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool noinit, MSVCP_bool virt_init) -{ - basic_istream_wchar_ctor_init(this, strbuf, isstd, noinit, virt_init); - basic_istream_wchar_get_basic_ios(this)->base.vtable = &MSVCP_basic_istream_short_vtable; + base->base.vtable = &MSVCP_basic_ostream_wchar_vtable; + basic_ios_wchar_init(base, strbuf, isstd); return this; } -/* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */ -/* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ctor, 16) -basic_istream_wchar* __thiscall basic_istream_wchar_ctor(basic_istream_wchar *this, - basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init) -{ - return basic_istream_wchar_ctor_init(this, strbuf, isstd, FALSE, virt_init); -} - -/* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z */ -/* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_short_ctor, 16) -basic_istream_wchar* __thiscall basic_istream_short_ctor(basic_istream_wchar *this, +/* ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z */ +/* ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_short_ctor, 16) +basic_ostream_wchar* __thiscall basic_ostream_short_ctor(basic_ostream_wchar *this, basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init) { - return basic_istream_short_ctor_init(this, strbuf, isstd, FALSE, virt_init); + basic_ostream_wchar_ctor(this, strbuf, isstd, virt_init); + basic_ostream_wchar_get_basic_ios(this)->base.vtable = &MSVCP_basic_ostream_short_vtable; + return this; } -/* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@W4_Uninitialized@1@@Z */ -/* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@W4_Uninitialized@1@@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ctor_uninitialized, 12) -basic_istream_wchar* __thiscall basic_istream_wchar_ctor_uninitialized( - basic_istream_wchar *this, int uninitialized, MSVCP_bool virt_init) +/* ??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE@W4_Uninitialized@1@_N@Z */ +/* ??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_ctor_uninitialized, 16) +basic_ostream_wchar* __thiscall basic_ostream_wchar_ctor_uninitialized(basic_ostream_wchar *this, + int uninitialized, MSVCP_bool addstd, MSVCP_bool virt_init) { basic_ios_wchar *base; - TRACE("(%p %d %d)\n", this, uninitialized, virt_init); + TRACE("(%p %d %x)\n", this, uninitialized, addstd); if(virt_init) { - this->vbtable = basic_istream_wchar_vbtable; - base = basic_istream_wchar_get_basic_ios(this); + this->vbtable = basic_ostream_wchar_vbtable; + base = basic_ostream_wchar_get_basic_ios(this); basic_ios_wchar_ctor(base); }else { - base = basic_istream_wchar_get_basic_ios(this); + base = basic_ostream_wchar_get_basic_ios(this); } - base->base.vtable = &MSVCP_basic_istream_wchar_vtable; - ios_base_Addstd(&base->base); + base->base.vtable = &MSVCP_basic_ostream_wchar_vtable; + if(addstd) + ios_base_Addstd(&base->base); return this; } -/* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@@Z */ -/* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@W4_Uninitialized@1@@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_short_ctor_uninitialized, 12) -basic_istream_wchar* __thiscall basic_istream_short_ctor_uninitialized( - basic_istream_wchar *this, int uninitialized, MSVCP_bool virt_init) +/* ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@_N@Z */ +/* ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_short_ctor_uninitialized, 16) +basic_ostream_wchar* __thiscall basic_ostream_short_ctor_uninitialized(basic_ostream_wchar *this, + int uninitialized, MSVCP_bool addstd, MSVCP_bool virt_init) { - basic_istream_wchar_ctor_uninitialized(this, uninitialized, virt_init); - basic_istream_wchar_get_basic_ios(this)->base.vtable = &MSVCP_basic_istream_short_vtable; + basic_ostream_wchar_ctor_uninitialized(this, uninitialized, addstd, virt_init); + basic_ostream_wchar_get_basic_ios(this)->base.vtable = &MSVCP_basic_ostream_short_vtable; return this; } -/* ??1?$basic_istream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */ -/* ??1?$basic_istream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */ -/* ??1?$basic_istream@GU?$char_traits@G@std@@@std@@UAE@XZ */ -/* ??1?$basic_istream@GU?$char_traits@G@std@@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_dtor, 4) -void __thiscall basic_istream_wchar_dtor(basic_ios_wchar *base) +/* ??1?$basic_ostream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */ +/* ??1?$basic_ostream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */ +/* ??1?$basic_ostream@GU?$char_traits@G@std@@@std@@UAE@XZ */ +/* ??1?$basic_ostream@GU?$char_traits@G@std@@@std@@UEAA@XZ */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_dtor, 4) +void __thiscall basic_ostream_wchar_dtor(basic_ios_wchar *base) { - basic_istream_wchar *this = basic_istream_wchar_from_basic_ios(base); + basic_ostream_wchar *this = basic_ostream_wchar_from_basic_ios(base); /* don't destroy virtual base here */ TRACE("(%p)\n", this); } -/* ??_D?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */ -/* ??_D?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */ -/* ??_D?$basic_istream@GU?$char_traits@G@std@@@std@@QAEXXZ */ -/* ??_D?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_vbase_dtor, 4) -void __thiscall basic_istream_wchar_vbase_dtor(basic_istream_wchar *this) +/* ??_D?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */ +/* ??_D?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */ +/* ??_D?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ */ +/* ??_D?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_vbase_dtor, 4) +void __thiscall basic_ostream_wchar_vbase_dtor(basic_ostream_wchar *this) { TRACE("(%p)\n", this); - basic_istream_wchar_dtor(basic_istream_wchar_to_basic_ios(this)); - basic_ios_wchar_dtor(basic_istream_wchar_get_basic_ios(this)); + basic_ostream_wchar_dtor(basic_ostream_wchar_to_basic_ios(this)); + basic_ios_wchar_dtor(basic_ostream_wchar_get_basic_ios(this)); } -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_vector_dtor, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags) +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_vector_dtor, 8) +basic_ostream_wchar* __thiscall basic_ostream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags) { - basic_istream_wchar *this = basic_istream_wchar_from_basic_ios(base); + basic_ostream_wchar *this = basic_ostream_wchar_from_basic_ios(base); TRACE("(%p %x)\n", this, flags); @@ -8027,10 +4663,10 @@ basic_istream_wchar* __thiscall basic_istream_wchar_vector_dtor(basic_ios_wchar INT_PTR i, *ptr = (INT_PTR *)this-1; for(i=*ptr-1; i>=0; i--) - basic_istream_wchar_vbase_dtor(this+i); + basic_ostream_wchar_vbase_dtor(this+i); MSVCRT_operator_delete(ptr); } else { - basic_istream_wchar_vbase_dtor(this); + basic_ostream_wchar_vbase_dtor(this); if(flags & 1) MSVCRT_operator_delete(this); } @@ -8038,1985 +4674,1889 @@ basic_istream_wchar* __thiscall basic_istream_wchar_vector_dtor(basic_ios_wchar return this; } -/* ?_Ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE_N_N@Z */ -/* ?_Ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_N_N@Z */ -/* ?_Ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE_N_N@Z */ -/* ?_Ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_N_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar__Ipfx, 8) -MSVCP_bool __thiscall basic_istream_wchar__Ipfx(basic_istream_wchar *this, MSVCP_bool noskip) +/* ?flush@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@XZ */ +/* ?flush@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@XZ */ +/* ?flush@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@XZ */ +/* ?flush@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@XZ */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_flush, 4) +basic_ostream_wchar* __thiscall basic_ostream_wchar_flush(basic_ostream_wchar *this) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - - TRACE("(%p %d)\n", this, noskip); - - if(!ios_base_good(&base->base)) { - basic_ios_wchar_setstate(base, IOSTATE_failbit); - return FALSE; - } - - if(basic_ios_wchar_tie_get(base)) - basic_ostream_wchar_flush(basic_ios_wchar_tie_get(base)); - - if(!noskip && (ios_base_flags_get(&base->base) & FMTFLAG_skipws)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - const ctype_wchar *ctype = ctype_wchar_use_facet(base->strbuf->loc); - int ch; - - for(ch = basic_streambuf_wchar_sgetc(strbuf); ; - ch = basic_streambuf_wchar_snextc(strbuf)) { - if(ch == WEOF) { - basic_ios_wchar_setstate(base, IOSTATE_eofbit); - return FALSE; - } - - if(!ctype_wchar_is_ch(ctype, _SPACE|_BLANK, ch)) - break; - } - } + /* this function is not matching C++ specification */ + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - return TRUE; -} + TRACE("(%p)\n", this); -/* ?ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE_N_N@Z */ -/* ?ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_N_N@Z */ -/* ?ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE_N_N@Z */ -/* ?ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_N_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ipfx, 8) -MSVCP_bool __thiscall basic_istream_wchar_ipfx(basic_istream_wchar *this, MSVCP_bool noskip) -{ - return basic_istream_wchar__Ipfx(this, noskip); + if(basic_ios_wchar_rdbuf_get(base) && ios_base_good(&base->base) + && basic_streambuf_wchar_pubsync(basic_ios_wchar_rdbuf_get(base))==-1) + basic_ios_wchar_setstate(base, IOSTATE_badbit); + return this; } -/* ?isfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */ -/* ?isfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */ -/* ?isfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEXXZ */ -/* ?isfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_isfx, 4) -void __thiscall basic_istream_wchar_isfx(basic_istream_wchar *this) +/* ?flush@std@@YAAAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AAV21@@Z */ +/* ?flush@std@@YAAEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AEAV21@@Z */ +/* ?flush@std@@YAAAV?$basic_ostream@GU?$char_traits@G@std@@@1@AAV21@@Z */ +/* ?flush@std@@YAAEAV?$basic_ostream@GU?$char_traits@G@std@@@1@AEAV21@@Z */ +basic_ostream_wchar* __cdecl flush_ostream_wchar(basic_ostream_wchar *ostream) { - TRACE("(%p)\n", this); + return basic_ostream_wchar_flush(ostream); } -static BOOL basic_istream_wchar_sentry_create(basic_istream_wchar *istr, MSVCP_bool noskip) +/* ?_Osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */ +/* ?_Osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */ +/* ?_Osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ */ +/* ?_Osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar__Osfx, 4) +void __thiscall basic_ostream_wchar__Osfx(basic_ostream_wchar *this) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istr); - - if(basic_ios_wchar_rdbuf_get(base)) - basic_streambuf_wchar__Lock(base->strbuf); - - return basic_istream_wchar_ipfx(istr, noskip); -} + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); -static void basic_istream_wchar_sentry_destroy(basic_istream_wchar *istr) -{ - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istr); + TRACE("(%p)\n", this); - if(basic_ios_wchar_rdbuf_get(base)) - basic_streambuf_wchar__Unlock(base->strbuf); + if(base->base.fmtfl & FMTFLAG_unitbuf) + basic_ostream_wchar_flush(this); } -/* ?gcount@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QBEHXZ */ -/* ?gcount@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEBA_JXZ */ -/* ?gcount@?$basic_istream@GU?$char_traits@G@std@@@std@@QBEHXZ */ -/* ?gcount@?$basic_istream@GU?$char_traits@G@std@@@std@@QEBA_JXZ */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_gcount, 4) -int __thiscall basic_istream_wchar_gcount(const basic_istream_wchar *this) +/* ?osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */ +/* ?osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */ +/* ?osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ */ +/* ?osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_osfx, 4) +void __thiscall basic_ostream_wchar_osfx(basic_ostream_wchar *this) { TRACE("(%p)\n", this); - return this->count; + basic_ostream_wchar__Osfx(this); } -/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEGXZ */ -/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */ -/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEGXZ */ -/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAGXZ */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get, 4) -unsigned short __thiscall basic_istream_wchar_get(basic_istream_wchar *this) +static BOOL basic_ostream_wchar_sentry_create(basic_ostream_wchar *ostr) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - int ret; - - TRACE("(%p)\n", this); - - this->count = 0; - - if(!basic_istream_wchar_sentry_create(this, TRUE)) { - basic_istream_wchar_sentry_destroy(this); - return WEOF; - } - - ret = basic_streambuf_wchar_sbumpc(basic_ios_wchar_rdbuf_get(base)); - basic_istream_wchar_sentry_destroy(this); - if(ret == WEOF) - basic_ios_wchar_setstate(base, IOSTATE_eofbit|IOSTATE_failbit); - else - this->count++; - - return ret; -} + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(ostr); -/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AA_W@Z */ -/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEA_W@Z */ -/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAG@Z */ -/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAG@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_ch, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_get_ch(basic_istream_wchar *this, wchar_t *ch) -{ - unsigned short ret; + if(basic_ios_wchar_rdbuf_get(base)) + basic_streambuf_wchar__Lock(base->strbuf); - TRACE("(%p %p)\n", this, ch); + if(ios_base_good(&base->base) && base->stream) + basic_ostream_wchar_flush(base->stream); - ret = basic_istream_wchar_get(this); - if(ret != WEOF) - *ch = (wchar_t)ret; - return this; + return ios_base_good(&base->base); } -/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH_W@Z */ -/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J_W@Z */ -/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGHG@Z */ -/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_JG@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_str_delim, 20) -basic_istream_wchar* __thiscall basic_istream_wchar_get_str_delim(basic_istream_wchar *this, wchar_t *str, streamsize count, wchar_t delim) +static void basic_ostream_wchar_sentry_destroy(basic_ostream_wchar *ostr) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - unsigned short ch = delim; - - TRACE("(%p %p %s %c)\n", this, str, wine_dbgstr_longlong(count), delim); - - this->count = 0; - - if(basic_istream_wchar_sentry_create(this, TRUE)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - - for(ch = basic_streambuf_wchar_sgetc(strbuf); count>1; - ch = basic_streambuf_wchar_snextc(strbuf)) { - if(ch==WEOF || ch==delim) - break; - - *str++ = ch; - this->count++; - count--; - } - } - basic_istream_wchar_sentry_destroy(this); + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(ostr); - basic_ios_wchar_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) | - (ch==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit)); - if(count > 0) - *str = 0; - return this; -} + if(ios_base_good(&base->base) && !__uncaught_exception()) + basic_ostream_wchar_osfx(ostr); -/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH@Z */ -/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z */ -/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGH@Z */ -/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_str, 16) -basic_istream_wchar* __thiscall basic_istream_wchar_get_str(basic_istream_wchar *this, wchar_t *str, streamsize count) -{ - return basic_istream_wchar_get_str_delim(this, str, count, '\n'); + if(basic_ios_wchar_rdbuf_get(base)) + basic_streambuf_wchar__Unlock(base->strbuf); } -/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_W@Z */ -/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_W@Z */ -/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAV?$basic_streambuf@GU?$char_traits@G@std@@@2@G@Z */ -/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@G@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_streambuf_delim, 12) -basic_istream_wchar* __thiscall basic_istream_wchar_get_streambuf_delim(basic_istream_wchar *this, basic_streambuf_wchar *strbuf, wchar_t delim) +/* ?opfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE_NXZ */ +/* ?opfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA_NXZ */ +/* ?opfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE_NXZ */ +/* ?opfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA_NXZ */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_opfx, 4) +MSVCP_bool __thiscall basic_ostream_wchar_opfx(basic_ostream_wchar *this) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - unsigned short ch = delim; + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - TRACE("(%p %p %c)\n", this, strbuf, delim); + TRACE("(%p)\n", this); - this->count = 0; + if(ios_base_good(&base->base) && base->stream) + basic_ostream_wchar_flush(base->stream); + return ios_base_good(&base->base); +} - if(basic_istream_wchar_sentry_create(this, TRUE)) { - basic_streambuf_wchar *strbuf_read = basic_ios_wchar_rdbuf_get(base); +/* ?put@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_W@Z */ +/* ?put@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_W@Z */ +/* ?put@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@G@Z */ +/* ?put@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@G@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_put, 8) +basic_ostream_wchar* __thiscall basic_ostream_wchar_put(basic_ostream_wchar *this, wchar_t ch) +{ + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - for(ch = basic_streambuf_wchar_sgetc(strbuf_read); ; - ch = basic_streambuf_wchar_snextc(strbuf_read)) { - if(ch==WEOF || ch==delim) - break; + TRACE("(%p %c)\n", this, ch); - if(basic_streambuf_wchar_sputc(strbuf, ch) == WEOF) - break; - this->count++; - } + if(!basic_ostream_wchar_sentry_create(this) + || basic_streambuf_wchar_sputc(base->strbuf, ch)==WEOF) { + basic_ostream_wchar_sentry_destroy(this); + basic_ios_wchar_setstate(base, IOSTATE_badbit); + return this; } - basic_istream_wchar_sentry_destroy(this); - basic_ios_wchar_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) | - (ch==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit)); + basic_ostream_wchar_sentry_destroy(this); return this; } -/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z */ -/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z */ -/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAV?$basic_streambuf@GU?$char_traits@G@std@@@2@@Z */ -/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_streambuf, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_get_streambuf(basic_istream_wchar *this, basic_streambuf_wchar *strbuf) -{ - return basic_istream_wchar_get_streambuf_delim(this, strbuf, '\n'); -} - -/* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH_W@Z */ -/* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J_W@Z */ -/* ?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGHG@Z */ -/* ?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_JG@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_getline_delim, 20) -basic_istream_wchar* __thiscall basic_istream_wchar_getline_delim(basic_istream_wchar *this, wchar_t *str, streamsize count, wchar_t delim) +/* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@JH@Z */ +/* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JH@Z */ +/* ?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@JH@Z */ +/* ?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JH@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_seekp, 16) +basic_ostream_wchar* __thiscall basic_ostream_wchar_seekp(basic_ostream_wchar *this, streamoff off, int way) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - unsigned short ch = delim; - - TRACE("(%p %p %s %c)\n", this, str, wine_dbgstr_longlong(count), delim); + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - this->count = 0; + TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(off), way); - if(basic_istream_wchar_sentry_create(this, TRUE) && count>0) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + if(!ios_base_fail(&base->base)) { + fpos_int seek; - while(count > 1) { - ch = basic_streambuf_wchar_sbumpc(strbuf); + basic_streambuf_wchar_pubseekoff(basic_ios_wchar_rdbuf_get(base), + &seek, off, way, OPENMODE_out); + if(seek.off==0 && seek.pos==-1 && seek.state==0) + basic_ios_wchar_setstate(base, IOSTATE_failbit); + } + return this; +} - if(ch==WEOF || ch==delim) - break; +/* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */ +/* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */ +/* ?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */ +/* ?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_seekp_fpos, 28) +basic_ostream_wchar* __thiscall basic_ostream_wchar_seekp_fpos(basic_ostream_wchar *this, fpos_int pos) +{ + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - *str++ = ch; - this->count++; - count--; - } + TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos)); - if(ch == delim) - this->count++; - else if(ch != WEOF) { - ch = basic_streambuf_wchar_sgetc(strbuf); + if(!ios_base_fail(&base->base)) { + fpos_int seek; - if(ch == delim) { - basic_streambuf_wchar__Gninc(strbuf); - this->count++; - } - } + basic_streambuf_wchar_pubseekpos(basic_ios_wchar_rdbuf_get(base), + &seek, pos, OPENMODE_out); + if(seek.off==0 && seek.pos==-1 && seek.state==0) + basic_ios_wchar_setstate(base, IOSTATE_failbit); } - basic_istream_wchar_sentry_destroy(this); - - basic_ios_wchar_setstate(base, (ch==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit) | - (!this->count || (ch!=delim && ch!=WEOF) ? IOSTATE_failbit : IOSTATE_goodbit)); - if(count > 0) - *str = 0; return this; } -/* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH@Z */ -/* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z */ -/* ?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGH@Z */ -/* ?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_getline, 16) -basic_istream_wchar* __thiscall basic_istream_wchar_getline(basic_istream_wchar *this, wchar_t *str, streamsize count) -{ - return basic_istream_wchar_getline_delim(this, str, count, '\n'); -} - -/* ?ignore@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@HG@Z */ -/* ?ignore@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JG@Z */ -/* ?ignore@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@HG@Z */ -/* ?ignore@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JG@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ignore, 16) -basic_istream_wchar* __thiscall basic_istream_wchar_ignore(basic_istream_wchar *this, streamsize count, unsigned short delim) +/* ?tellp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@XZ */ +/* ?tellp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@XZ */ +/* ?tellp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@XZ */ +/* ?tellp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@XZ */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_tellp, 8) +fpos_int* __thiscall basic_ostream_wchar_tellp(basic_ostream_wchar *this, fpos_int *ret) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - unsigned short ch = delim; - - TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(count), delim); + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - this->count = 0; + TRACE("(%p)\n", this); - if(basic_istream_wchar_sentry_create(this, TRUE)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + if(!ios_base_fail(&base->base)) { + basic_streambuf_wchar_pubseekoff(basic_ios_wchar_rdbuf_get(base), + ret, 0, SEEKDIR_cur, OPENMODE_out); + }else { + ret->off = 0; + ret->pos = -1; + ret->state = 0; + } + return ret; +} - while(count > 0) { - ch = basic_streambuf_wchar_sbumpc(strbuf); +/* ?write@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PB_WH@Z */ +/* ?write@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEB_W_J@Z */ +/* ?write@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@PBGH@Z */ +/* ?write@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEBG_J@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_write, 16) +basic_ostream_wchar* __thiscall basic_ostream_wchar_write(basic_ostream_wchar *this, const wchar_t *str, streamsize count) +{ + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); - if(ch==WEOF || ch==delim) - break; + TRACE("(%p %s %s)\n", this, debugstr_w(str), wine_dbgstr_longlong(count)); - this->count++; - if(count != INT_MAX) - count--; - } + if(!basic_ostream_wchar_sentry_create(this) + || basic_streambuf_wchar_sputn(base->strbuf, str, count)!=count) { + basic_ostream_wchar_sentry_destroy(this); + basic_ios_wchar_setstate(base, IOSTATE_badbit); + return this; } - basic_istream_wchar_sentry_destroy(this); - if(ch == WEOF) - basic_ios_wchar_setstate(base, IOSTATE_eofbit); + basic_ostream_wchar_sentry_destroy(this); return this; } -/* ?ws@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@1@AAV21@@Z */ -/* ?ws@std@@YAAEAV?$basic_istream@_WU?$char_traits@_W@std@@@1@AEAV21@@Z */ -/* ?ws@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@1@AAV21@@Z */ -/* ?ws@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@1@AEAV21@@Z */ -basic_istream_wchar* __cdecl ws_basic_istream_wchar(basic_istream_wchar *istream) +static basic_ostream_wchar* basic_ostream_print_short(basic_ostream_wchar *this, short val, const num_put *numput) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istream); - unsigned short ch = '\n'; + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; - TRACE("(%p)\n", istream); + TRACE("(%p %d)\n", this, val); - if(basic_istream_wchar_sentry_create(istream, TRUE)) { + if(basic_ostream_wchar_sentry_create(this)) { basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - const ctype_wchar *ctype = ctype_wchar_use_facet(strbuf->loc); + ostreambuf_iterator_wchar dest = {0, strbuf}; - for(ch = basic_streambuf_wchar_sgetc(strbuf); ctype_wchar_is_ch(ctype, _SPACE, ch); - ch = basic_streambuf_wchar_snextc(strbuf)) { - if(ch == WEOF) - break; - } + num_put_wchar_put_long(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), + (ios_base_flags_get(&base->base) & FMTFLAG_basefield & (FMTFLAG_oct | FMTFLAG_hex)) + ? (LONG)((unsigned short)val) : (LONG)val); } - basic_istream_wchar_sentry_destroy(istream); + basic_ostream_wchar_sentry_destroy(this); - if(ch == WEOF) - basic_ios_wchar_setstate(base, IOSTATE_eofbit); - return istream; + basic_ios_wchar_setstate(base, state); + return this; } -/* ?peek@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEGXZ */ -/* ?peek@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */ -/* ?peek@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEGXZ */ -/* ?peek@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAGXZ */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_peek, 4) -unsigned short __thiscall basic_istream_wchar_peek(basic_istream_wchar *this) +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@F@Z */ +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@F@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_short, 8) +basic_ostream_wchar* __thiscall basic_ostream_wchar_print_short(basic_ostream_wchar *this, short val) +{ + return basic_ostream_print_short(this, val, num_put_wchar_use_facet( + basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); +} + +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@F@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@F@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_short, 8) +basic_ostream_wchar* __thiscall basic_ostream_short_print_short(basic_ostream_wchar *this, short val) +{ + return basic_ostream_print_short(this, val, num_put_short_use_facet( + basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); +} + +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@G@Z */ +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@G@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_ushort, 8) +basic_ostream_wchar* __thiscall basic_ostream_wchar_print_ushort(basic_ostream_wchar *this, unsigned short val) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - unsigned short ret = WEOF; + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; - TRACE("(%p)\n", this); + TRACE("(%p %u)\n", this, val); - this->count = 0; + if(basic_ostream_wchar_sentry_create(this)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + const num_put *numput = num_put_wchar_use_facet(strbuf->loc); + ostreambuf_iterator_wchar dest = {0, strbuf}; - if(basic_istream_wchar_sentry_create(this, TRUE)) - ret = basic_streambuf_wchar_sgetc(basic_ios_wchar_rdbuf_get(base)); - basic_istream_wchar_sentry_destroy(this); - return ret; + num_put_wchar_put_ulong(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val); + } + basic_ostream_wchar_sentry_destroy(this); + + basic_ios_wchar_setstate(base, state); + return this; } -/* ?_Read_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WIH@Z */ -/* ?_Read_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_K_J@Z */ -/* ?_Read_s@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGIH@Z */ -/* ?_Read_s@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_K_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar__Read_s, 20) -basic_istream_wchar* __thiscall basic_istream_wchar__Read_s(basic_istream_wchar *this, wchar_t *str, MSVCP_size_t size, streamsize count) +static basic_ostream_wchar* basic_ostream_print_int(basic_ostream_wchar *this, int val, const num_put *numput) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - IOSB_iostate state = IOSTATE_goodbit; + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; - TRACE("(%p %p %lu %s)\n", this, str, size, wine_dbgstr_longlong(count)); + TRACE("(%p %d)\n", this, val); - if(basic_istream_wchar_sentry_create(this, TRUE)) { + if(basic_ostream_wchar_sentry_create(this)) { basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + ostreambuf_iterator_wchar dest = {0, strbuf}; - this->count = basic_streambuf_wchar__Sgetn_s(strbuf, str, size, count); - if(this->count != count) - state |= IOSTATE_failbit | IOSTATE_eofbit; - }else { - this->count = 0; + num_put_wchar_put_long(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val); } - basic_istream_wchar_sentry_destroy(this); + basic_ostream_wchar_sentry_destroy(this); basic_ios_wchar_setstate(base, state); return this; } -/* ?read@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH@Z */ -/* ?read@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z */ -/* ?read@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGH@Z */ -/* ?read@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read, 16) -basic_istream_wchar* __thiscall basic_istream_wchar_read(basic_istream_wchar *this, wchar_t *str, streamsize count) +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@H@Z */ +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@H@Z */ +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@J@Z */ +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@J@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_int, 8) +basic_ostream_wchar* __thiscall basic_ostream_wchar_print_int(basic_ostream_wchar *this, int val) { - return basic_istream_wchar__Read_s(this, str, count, count); + return basic_ostream_print_int(this, val, num_put_wchar_use_facet( + basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); } -/* ?_Readsome_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEHPA_WIH@Z */ -/* ?_Readsome_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_K_J@Z */ -/* ?_Readsome_s@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEHPAGIH@Z */ -/* ?_Readsome_s@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_K_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar__Readsome_s, 20) -streamsize __thiscall basic_istream_wchar__Readsome_s(basic_istream_wchar *this, wchar_t *str, MSVCP_size_t size, streamsize count) +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@H@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@H@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@J@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@J@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_int, 8) +basic_ostream_wchar* __thiscall basic_ostream_short_print_int(basic_ostream_wchar *this, int val) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - IOSB_iostate state = IOSTATE_goodbit; + return basic_ostream_print_int(this, val, num_put_short_use_facet( + basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); +} - TRACE("(%p %p %lu %s)\n", this, str, size, wine_dbgstr_longlong(count)); +static basic_ostream_wchar* basic_ostream_print_uint(basic_ostream_wchar *this, unsigned int val, const num_put *numput) +{ + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; - this->count = 0; + TRACE("(%p %u)\n", this, val); - if(basic_istream_wchar_sentry_create(this, TRUE)) { - streamsize avail = basic_streambuf_wchar_in_avail(basic_ios_wchar_rdbuf_get(base)); - if(avail > count) - avail = count; + if(basic_ostream_wchar_sentry_create(this)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + ostreambuf_iterator_wchar dest = {0, strbuf}; - if(avail == -1) - state |= IOSTATE_eofbit; - else if(avail > 0) - basic_istream_wchar__Read_s(this, str, size, avail); - }else { - state |= IOSTATE_failbit; + num_put_wchar_put_ulong(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val); } - basic_istream_wchar_sentry_destroy(this); + basic_ostream_wchar_sentry_destroy(this); basic_ios_wchar_setstate(base, state); - return this->count; + return this; } -/* ?readsome@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEHPA_WH@Z */ -/* ?readsome@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_J@Z */ -/* ?readsome@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEHPAGH@Z */ -/* ?readsome@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_readsome, 16) -streamsize __thiscall basic_istream_wchar_readsome(basic_istream_wchar *this, wchar_t *str, streamsize count) +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@I@Z */ +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@I@Z */ +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@K@Z */ +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@K@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_uint, 8) +basic_ostream_wchar* __thiscall basic_ostream_wchar_print_uint(basic_ostream_wchar *this, unsigned int val) { - return basic_istream_wchar__Readsome_s(this, str, count, count); + return basic_ostream_print_uint(this, val, num_put_wchar_use_facet( + basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); } -/* ?putback@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_W@Z */ -/* ?putback@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_W@Z */ -/* ?putback@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@G@Z */ -/* ?putback@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@G@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_putback, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_putback(basic_istream_wchar *this, wchar_t ch) +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@I@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@I@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@K@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@K@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_uint, 8) +basic_ostream_wchar* __thiscall basic_ostream_short_print_uint(basic_ostream_wchar *this, unsigned int val) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - IOSB_iostate state = IOSTATE_goodbit; + return basic_ostream_print_uint(this, val, num_put_short_use_facet( + basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); +} - TRACE("(%p %c)\n", this, ch); +static basic_ostream_wchar* basic_ostream_print_float(basic_ostream_wchar *this, float val, const num_put *numput) +{ + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; - this->count = 0; + TRACE("(%p %f)\n", this, val); - if(basic_istream_wchar_sentry_create(this, TRUE)) { + if(basic_ostream_wchar_sentry_create(this)) { basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + ostreambuf_iterator_wchar dest = {0, strbuf}; - if(!ios_base_good(&base->base)) - state |= IOSTATE_failbit; - else if(!strbuf || basic_streambuf_wchar_sputbackc(strbuf, ch)==WEOF) - state |= IOSTATE_badbit; + num_put_wchar_put_double(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val); } - basic_istream_wchar_sentry_destroy(this); + basic_ostream_wchar_sentry_destroy(this); basic_ios_wchar_setstate(base, state); return this; } -/* ?unget@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@XZ */ -/* ?unget@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@XZ */ -/* ?unget@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@XZ */ -/* ?unget@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@XZ */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_unget, 4) -basic_istream_wchar* __thiscall basic_istream_wchar_unget(basic_istream_wchar *this) +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@M@Z */ +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@M@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_float, 8) +basic_ostream_wchar* __thiscall basic_ostream_wchar_print_float(basic_ostream_wchar *this, float val) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - IOSB_iostate state = IOSTATE_goodbit; + return basic_ostream_print_float(this, val, num_put_wchar_use_facet( + basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); +} - TRACE("(%p)\n", this); +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@M@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@M@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_float, 8) +basic_ostream_wchar* __thiscall basic_ostream_short_print_float(basic_ostream_wchar *this, float val) +{ + return basic_ostream_print_float(this, val, num_put_short_use_facet( + basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); +} - this->count = 0; +static basic_ostream_wchar* basic_ostream_print_double(basic_ostream_wchar *this, double val, const num_put *numput) +{ + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; - if(basic_istream_wchar_sentry_create(this, TRUE)) { + TRACE("(%p %lf)\n", this, val); + + if(basic_ostream_wchar_sentry_create(this)) { basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + ostreambuf_iterator_wchar dest = {0, strbuf}; - if(!ios_base_good(&base->base)) - state |= IOSTATE_failbit; - else if(!strbuf || basic_streambuf_wchar_sungetc(strbuf)==WEOF) - state |= IOSTATE_badbit; + num_put_wchar_put_double(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val); } - basic_istream_wchar_sentry_destroy(this); + basic_ostream_wchar_sentry_destroy(this); basic_ios_wchar_setstate(base, state); return this; } -/* ?sync@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEHXZ */ -/* ?sync@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAHXZ */ -/* ?sync@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEHXZ */ -/* ?sync@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAHXZ */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_sync, 4) -int __thiscall basic_istream_wchar_sync(basic_istream_wchar *this) +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@N@Z */ +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@N@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_double, 12) +basic_ostream_wchar* __thiscall basic_ostream_wchar_print_double(basic_ostream_wchar *this, double val) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - - TRACE("(%p)\n", this); - - if(!strbuf) - return -1; - - if(basic_istream_wchar_sentry_create(this, TRUE)) { - if(basic_streambuf_wchar_pubsync(strbuf) != -1) { - basic_istream_wchar_sentry_destroy(this); - return 0; - } - } - basic_istream_wchar_sentry_destroy(this); + return basic_ostream_print_double(this, val, num_put_wchar_use_facet( + basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); +} - basic_ios_wchar_setstate(base, IOSTATE_badbit); - return -1; +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@N@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@N@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_double, 12) +basic_ostream_wchar* __thiscall basic_ostream_short_print_double(basic_ostream_wchar *this, double val) +{ + return basic_ostream_print_double(this, val, num_put_short_use_facet( + basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); } -/* ?tellg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@XZ */ -/* ?tellg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@XZ */ -/* ?tellg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@XZ */ -/* ?tellg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_tellg, 8) -fpos_int* __thiscall basic_istream_wchar_tellg(basic_istream_wchar *this, fpos_int *ret) +static basic_ostream_wchar* basic_ostream_print_ldouble(basic_ostream_wchar *this, double val, const num_put *numput) { - TRACE("(%p %p)\n", this, ret); + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; - if(basic_istream_wchar_sentry_create(this, TRUE)) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - if(!ios_base_fail(&base->base)) { - basic_streambuf_wchar_pubseekoff(basic_ios_wchar_rdbuf_get(base), - ret, 0, SEEKDIR_cur, OPENMODE_in); - basic_istream_wchar_sentry_destroy(this); + TRACE("(%p %lf)\n", this, val); - if(ret->off==0 && ret->pos==-1 && ret->state==0) - basic_ios_wchar_setstate(base, IOSTATE_failbit); - return ret; - } + if(basic_ostream_wchar_sentry_create(this)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + ostreambuf_iterator_wchar dest = {0, strbuf}; + + num_put_wchar_put_ldouble(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val); } - basic_istream_wchar_sentry_destroy(this); + basic_ostream_wchar_sentry_destroy(this); + + basic_ios_wchar_setstate(base, state); + return this; +} - ret->off = 0; - ret->pos = -1; - ret->state = 0; - return ret; +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@O@Z */ +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@O@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_ldouble, 12) +basic_ostream_wchar* __thiscall basic_ostream_wchar_print_ldouble(basic_ostream_wchar *this, double val) +{ + return basic_ostream_print_ldouble(this, val, num_put_wchar_use_facet( + basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); } -/* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@JH@Z */ -/* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JH@Z */ -/* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@JH@Z */ -/* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JH@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_seekg, 16) -basic_istream_wchar* __thiscall basic_istream_wchar_seekg(basic_istream_wchar *this, streamoff off, int dir) +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@O@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@O@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_ldouble, 12) +basic_ostream_wchar* __thiscall basic_ostream_short_print_ldouble(basic_ostream_wchar *this, double val) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + return basic_ostream_print_ldouble(this, val, num_put_short_use_facet( + basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); +} - TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(off), dir); +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */ +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_streambuf, 8) +basic_ostream_wchar* __thiscall basic_ostream_wchar_print_streambuf(basic_ostream_wchar *this, basic_streambuf_wchar *val) +{ + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); + IOSB_iostate state = IOSTATE_badbit; + unsigned short c = '\n'; - if(basic_istream_wchar_sentry_create(this, TRUE)) { - if(!ios_base_fail(&base->base)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - fpos_int ret; + TRACE("(%p %p)\n", this, val); - basic_streambuf_wchar_pubseekoff(strbuf, &ret, off, dir, OPENMODE_in); - basic_istream_wchar_sentry_destroy(this); + if(basic_ostream_wchar_sentry_create(this)) { + for(c = basic_streambuf_wchar_sgetc(val); c!=WEOF; + c = basic_streambuf_wchar_snextc(val)) { + state = IOSTATE_goodbit; - if(ret.off==0 && ret.pos==-1 && ret.state==0) - basic_ios_wchar_setstate(base, IOSTATE_failbit); - else - basic_ios_wchar_clear(base, IOSTATE_goodbit); - return this; + if(basic_streambuf_wchar_sputc(base->strbuf, c) == WEOF) { + state = IOSTATE_badbit; + break; + } } + }else { + state = IOSTATE_badbit; } - basic_istream_wchar_sentry_destroy(this); + basic_ostream_wchar_sentry_destroy(this); - basic_ios_wchar_setstate(base, IOSTATE_failbit); + ios_base_width_set(&base->base, 0); + basic_ios_wchar_setstate(base, state); return this; } -/* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */ -/* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */ -/* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */ -/* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_seekg_fpos, 28) -basic_istream_wchar* __thiscall basic_istream_wchar_seekg_fpos(basic_istream_wchar *this, fpos_int pos) +static basic_ostream_wchar* basic_ostream_print_ptr(basic_ostream_wchar *this, const void *val, const num_put *numput) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - - TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos)); + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; - if(basic_istream_wchar_sentry_create(this, TRUE)) { - if(!ios_base_fail(&base->base)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - fpos_int ret; + TRACE("(%p %p)\n", this, val); - basic_streambuf_wchar_pubseekpos(strbuf, &ret, pos, OPENMODE_in); - basic_istream_wchar_sentry_destroy(this); + if(basic_ostream_wchar_sentry_create(this)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + ostreambuf_iterator_wchar dest = {0, strbuf}; - if(ret.off==0 && ret.pos==-1 && ret.state==0) - basic_ios_wchar_setstate(base, IOSTATE_failbit); - else - basic_ios_wchar_clear(base, IOSTATE_goodbit); - return this; - } + num_put_wchar_put_ptr(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val); } - basic_istream_wchar_sentry_destroy(this); + basic_ostream_wchar_sentry_destroy(this); - basic_ios_wchar_setstate(base, IOSTATE_failbit); + basic_ios_wchar_setstate(base, state); return this; } -static basic_istream_wchar* basic_istream_read_short(basic_istream_wchar *this, short *v, const num_get *numget) +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PBX@Z */ +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEBX@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_ptr, 8) +basic_ostream_wchar* __thiscall basic_ostream_wchar_print_ptr(basic_ostream_wchar *this, const void *val) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + return basic_ostream_print_ptr(this, val, num_put_wchar_use_facet( + basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); +} + +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@PBX@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEBX@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_ptr, 8) +basic_ostream_wchar* __thiscall basic_ostream_short_print_ptr(basic_ostream_wchar *this, const void *val) +{ + return basic_ostream_print_ptr(this, val, num_put_short_use_facet( + basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); +} + +static basic_ostream_wchar* basic_ostream_print_int64(basic_ostream_wchar *this, __int64 val, const num_put *numput) +{ + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); int state = IOSTATE_goodbit; - TRACE("(%p %p)\n", this, v); + TRACE("(%p)\n", this); - if(basic_istream_wchar_sentry_create(this, FALSE)) { + if(basic_ostream_wchar_sentry_create(this)) { basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - istreambuf_iterator_wchar first={0}, last={0}; - LONG tmp; - - first.strbuf = strbuf; - num_get_wchar_get_long(numget, &last, first, last, &base->base, &state, &tmp); + ostreambuf_iterator_wchar dest = {0, strbuf}; - if(!(state&IOSTATE_failbit) && tmp==(LONG)((short)tmp)) - *v = tmp; - else - state |= IOSTATE_failbit; + num_put_wchar_put_int64(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val); } - basic_istream_wchar_sentry_destroy(this); + basic_ostream_wchar_sentry_destroy(this); basic_ios_wchar_setstate(base, state); return this; } -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAF@Z */ -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAF@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_short, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_read_short(basic_istream_wchar *this, short *v) +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_J@Z */ +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_J@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_int64, 12) +basic_ostream_wchar* __thiscall basic_ostream_wchar_print_int64(basic_ostream_wchar *this, __int64 val) { - return basic_istream_read_short(this, v, num_get_wchar_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); + return basic_ostream_print_int64(this, val, num_put_wchar_use_facet( + basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); } -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAF@Z */ -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAF@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_short_read_short, 8) -basic_istream_wchar* __thiscall basic_istream_short_read_short(basic_istream_wchar *this, short *v) +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_J@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_J@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_int64, 12) +basic_ostream_wchar* __thiscall basic_ostream_short_print_int64(basic_ostream_wchar *this, __int64 val) { - return basic_istream_read_short(this, v, num_get_short_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); + return basic_ostream_print_int64(this, val, num_put_short_use_facet( + basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); } -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAG@Z */ -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAG@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_ushort, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_read_ushort(basic_istream_wchar *this, unsigned short *v) +static basic_ostream_wchar* basic_ostream_print_uint64(basic_ostream_wchar *this, unsigned __int64 val, const num_put *numput) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); int state = IOSTATE_goodbit; - TRACE("(%p %p)\n", this, v); + TRACE("(%p)\n", this); - if(basic_istream_wchar_sentry_create(this, FALSE)) { + if(basic_ostream_wchar_sentry_create(this)) { basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - const num_get *numget = num_get_wchar_use_facet(strbuf->loc); - istreambuf_iterator_wchar first={0}, last={0}; + ostreambuf_iterator_wchar dest = {0, strbuf}; - first.strbuf = strbuf; - num_get_wchar_get_ushort(numget, &last, first, last, &base->base, &state, v); + num_put_wchar_put_uint64(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val); } - basic_istream_wchar_sentry_destroy(this); + basic_ostream_wchar_sentry_destroy(this); basic_ios_wchar_setstate(base, state); return this; } -static basic_istream_wchar* basic_istream_read_int(basic_istream_wchar *this, int *v, const num_get *numget) +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_K@Z */ +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_K@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_uint64, 12) +basic_ostream_wchar* __thiscall basic_ostream_wchar_print_uint64(basic_ostream_wchar *this, unsigned __int64 val) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + return basic_ostream_print_uint64(this, val, num_put_wchar_use_facet( + basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); +} + +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_K@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_K@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_uint64, 12) +basic_ostream_wchar* __thiscall basic_ostream_short_print_uint64(basic_ostream_wchar *this, unsigned __int64 val) +{ + return basic_ostream_print_uint64(this, val, num_put_short_use_facet( + basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); +} + +static basic_ostream_wchar* basic_ostream_print_bool(basic_ostream_wchar *this, MSVCP_bool val, const num_put *numput) +{ + basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this); int state = IOSTATE_goodbit; - TRACE("(%p %p)\n", this, v); + TRACE("(%p %x)\n", this, val); - if(basic_istream_wchar_sentry_create(this, FALSE)) { + if(basic_ostream_wchar_sentry_create(this)) { basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - istreambuf_iterator_wchar first={0}, last={0}; + ostreambuf_iterator_wchar dest = {0, strbuf}; - first.strbuf = strbuf; - num_get_wchar_get_long(numget, &last, first, last, &base->base, &state, v); + num_put_wchar_put_bool(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val); } - basic_istream_wchar_sentry_destroy(this); + basic_ostream_wchar_sentry_destroy(this); basic_ios_wchar_setstate(base, state); return this; } -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAH@Z */ -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAH@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_int, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_read_int(basic_istream_wchar *this, int *v) +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_N@Z */ +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_bool, 8) +basic_ostream_wchar* __thiscall basic_ostream_wchar_print_bool(basic_ostream_wchar *this, MSVCP_bool val) { - return basic_istream_read_int(this, v, num_get_wchar_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); + return basic_ostream_print_bool(this, val, num_put_wchar_use_facet( + basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); +} + +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_N@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_bool, 8) +basic_ostream_wchar* __thiscall basic_ostream_short_print_bool(basic_ostream_wchar *this, MSVCP_bool val) +{ + return basic_ostream_print_bool(this, val, num_put_short_use_facet( + basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc)); +} + +/* ?endl@std@@YAAAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AAV21@@Z */ +/* ?endl@std@@YAAEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AEAV21@@Z */ +/* ?endl@std@@YAAAV?$basic_ostream@GU?$char_traits@G@std@@@1@AAV21@@Z */ +/* ?endl@std@@YAAEAV?$basic_ostream@GU?$char_traits@G@std@@@1@AEAV21@@Z */ +basic_ostream_wchar* __cdecl basic_ostream_wchar_endl(basic_ostream_wchar *ostr) +{ + TRACE("(%p)\n", ostr); + + basic_ostream_wchar_put(ostr, '\n'); + basic_ostream_wchar_flush(ostr); + return ostr; +} + +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */ +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_func, 8) +basic_ostream_wchar* __thiscall basic_ostream_wchar_print_func(basic_ostream_wchar *this, + basic_ostream_wchar* (__cdecl *pfunc)(basic_ostream_wchar*)) +{ + TRACE("(%p %p)\n", this, pfunc); + pfunc(this); + return this; } -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAH@Z */ -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAH@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_short_read_int, 8) -basic_istream_wchar* __thiscall basic_istream_short_read_int(basic_istream_wchar *this, int *v) +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AAV21@@Z@Z */ +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AEAV21@@Z@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@GU?$char_traits@G@std@@@1@AAV21@@Z@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@GU?$char_traits@G@std@@@1@AEAV21@@Z@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_func_basic_ios, 8) +basic_ostream_wchar* __thiscall basic_ostream_wchar_print_func_basic_ios(basic_ostream_wchar *this, + basic_ios_wchar* (__cdecl *pfunc)(basic_ios_wchar*)) { - return basic_istream_read_int(this, v, num_get_short_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); + TRACE("(%p %p)\n", this, pfunc); + pfunc(basic_ostream_wchar_get_basic_ios(this)); + return this; } -static basic_istream_wchar* basic_istream_read_uint(basic_istream_wchar *this, unsigned int *v, const num_get *numget) +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */ +/* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */ +/* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */ +DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_func_ios_base, 8) +basic_ostream_wchar* __thiscall basic_ostream_wchar_print_func_ios_base( + basic_ostream_wchar *this, ios_base* (__cdecl *pfunc)(ios_base*)) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %p)\n", this, v); - - if(basic_istream_wchar_sentry_create(this, FALSE)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - istreambuf_iterator_wchar first={0}, last={0}; - - first.strbuf = strbuf; - num_get_wchar_get_uint(numget, &last, first, last, &base->base, &state, v); - } - basic_istream_wchar_sentry_destroy(this); - - basic_ios_wchar_setstate(base, state); + TRACE("(%p %p)\n", this, pfunc); + pfunc(&basic_ostream_wchar_get_basic_ios(this)->base); return this; } -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAI@Z */ -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAI@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_uint, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_read_uint(basic_istream_wchar *this, unsigned int *v) +/* Caution: basic_istream uses virtual inheritance. */ +static inline basic_ios_char* basic_istream_char_get_basic_ios(basic_istream_char *this) { - return basic_istream_read_uint(this, v, num_get_wchar_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); + return (basic_ios_char*)((char*)this+this->vbtable[1]); } -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAI@Z */ -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAI@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_short_read_uint, 8) -basic_istream_wchar* __thiscall basic_istream_short_read_uint(basic_istream_wchar *this, unsigned int *v) +static inline basic_ios_char* basic_istream_char_to_basic_ios(basic_istream_char *ptr) { - return basic_istream_read_uint(this, v, num_get_short_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); + return (basic_ios_char*)((char*)ptr+basic_istream_char_vbtable[1]); } -static basic_istream_wchar* basic_istream_read_long(basic_istream_wchar *this, LONG *v, const num_get *numget) +static inline basic_istream_char* basic_istream_char_from_basic_ios(basic_ios_char *ptr) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; + return (basic_istream_char*)((char*)ptr-basic_istream_char_vbtable[1]); +} - TRACE("(%p %p)\n", this, v); +/* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N1@Z */ +/* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N1@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_ctor_init, 20) +basic_istream_char* __thiscall basic_istream_char_ctor_init(basic_istream_char *this, basic_streambuf_char *strbuf, MSVCP_bool isstd, MSVCP_bool noinit, MSVCP_bool virt_init) +{ + basic_ios_char *base; - if(basic_istream_wchar_sentry_create(this, FALSE)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - istreambuf_iterator_wchar first={0}, last={0}; + TRACE("(%p %p %d %d %d)\n", this, strbuf, isstd, noinit, virt_init); - first.strbuf = strbuf; - num_get_wchar_get_long(numget, &last, first, last, &base->base, &state, v); + if(virt_init) { + this->vbtable = basic_istream_char_vbtable; + base = basic_istream_char_get_basic_ios(this); + basic_ios_char_ctor(base); + }else { + base = basic_istream_char_get_basic_ios(this); } - basic_istream_wchar_sentry_destroy(this); - basic_ios_wchar_setstate(base, state); + base->base.vtable = &MSVCP_basic_istream_char_vtable; + this->count = 0; + if(!noinit) + basic_ios_char_init(base, strbuf, isstd); return this; } -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAJ@Z */ -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAJ@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_long, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_read_long(basic_istream_wchar *this, LONG *v) -{ - return basic_istream_read_long(this, v, num_get_wchar_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); -} - -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAJ@Z */ -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAJ@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_short_read_long, 8) -basic_istream_wchar* __thiscall basic_istream_short_read_long(basic_istream_wchar *this, LONG *v) +/* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */ +/* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_ctor, 16) +basic_istream_char* __thiscall basic_istream_char_ctor(basic_istream_char *this, basic_streambuf_char *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init) { - return basic_istream_read_long(this, v, num_get_short_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); + return basic_istream_char_ctor_init(this, strbuf, isstd, FALSE, virt_init); } -static basic_istream_wchar* basic_istream_read_ulong(basic_istream_wchar *this, ULONG *v, const num_get *numget) +/* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@@Z */ +/* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_ctor_uninitialized, 12) +basic_istream_char* __thiscall basic_istream_char_ctor_uninitialized(basic_istream_char *this, int uninitialized, MSVCP_bool virt_init) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %p)\n", this, v); + basic_ios_char *base; - if(basic_istream_wchar_sentry_create(this, FALSE)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - istreambuf_iterator_wchar first={0}, last={0}; + TRACE("(%p %d %d)\n", this, uninitialized, virt_init); - first.strbuf = strbuf; - num_get_wchar_get_ulong(numget, &last, first, last, &base->base, &state, v); + if(virt_init) { + this->vbtable = basic_istream_char_vbtable; + base = basic_istream_char_get_basic_ios(this); + basic_ios_char_ctor(base); + }else { + base = basic_istream_char_get_basic_ios(this); } - basic_istream_wchar_sentry_destroy(this); - basic_ios_wchar_setstate(base, state); + base->base.vtable = &MSVCP_basic_istream_char_vtable; + ios_base_Addstd(&base->base); return this; } -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAK@Z */ -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAK@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_ulong, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_read_ulong(basic_istream_wchar *this, ULONG *v) +/* ??1?$basic_istream@DU?$char_traits@D@std@@@std@@UAE@XZ */ +/* ??1?$basic_istream@DU?$char_traits@D@std@@@std@@UEAA@XZ */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_dtor, 4) +void __thiscall basic_istream_char_dtor(basic_ios_char *base) { - return basic_istream_read_ulong(this, v, num_get_wchar_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); + basic_istream_char *this = basic_istream_char_from_basic_ios(base); + + /* don't destroy virtual base here */ + TRACE("(%p)\n", this); } -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAK@Z */ -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAK@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_short_read_ulong, 8) -basic_istream_wchar* __thiscall basic_istream_short_read_ulong(basic_istream_wchar *this, ULONG *v) +/* ??_D?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXXZ */ +/* ??_D?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_vbase_dtor, 4) +void __thiscall basic_istream_char_vbase_dtor(basic_istream_char *this) { - return basic_istream_read_ulong(this, v, num_get_short_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); + TRACE("(%p)\n", this); + basic_istream_char_dtor(basic_istream_char_to_basic_ios(this)); + basic_ios_char_dtor(basic_istream_char_get_basic_ios(this)); } -static basic_istream_wchar* basic_istream_read_float(basic_istream_wchar *this, float *v, const num_get *numget) +DEFINE_THISCALL_WRAPPER(basic_istream_char_vector_dtor, 8) +basic_istream_char* __thiscall basic_istream_char_vector_dtor(basic_ios_char *base, unsigned int flags) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; + basic_istream_char *this = basic_istream_char_from_basic_ios(base); - TRACE("(%p %p)\n", this, v); + TRACE("(%p %x)\n", this, flags); - if(basic_istream_wchar_sentry_create(this, FALSE)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - istreambuf_iterator_wchar first={0}, last={0}; + if(flags & 2) { + /* we have an array, with the number of elements stored before the first object */ + INT_PTR i, *ptr = (INT_PTR *)this-1; - first.strbuf = strbuf; - num_get_wchar_get_float(numget, &last, first, last, &base->base, &state, v); + for(i=*ptr-1; i>=0; i--) + basic_istream_char_vbase_dtor(this+i); + MSVCRT_operator_delete(ptr); + } else { + basic_istream_char_vbase_dtor(this); + if(flags & 1) + MSVCRT_operator_delete(this); } - basic_istream_wchar_sentry_destroy(this); - basic_ios_wchar_setstate(base, state); return this; } -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAM@Z */ -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAM@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_float, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_read_float(basic_istream_wchar *this, float *v) +/* ?_Ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE_N_N@Z */ +/* ?_Ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_N_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char__Ipfx, 8) +MSVCP_bool __thiscall basic_istream_char__Ipfx(basic_istream_char *this, MSVCP_bool noskip) { - return basic_istream_read_float(this, v, num_get_wchar_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); -} + basic_ios_char *base = basic_istream_char_get_basic_ios(this); -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAM@Z */ -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAM@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_short_read_float, 8) -basic_istream_wchar* __thiscall basic_istream_short_read_float(basic_istream_wchar *this, float *v) -{ - return basic_istream_read_float(this, v, num_get_short_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); -} + TRACE("(%p %d)\n", this, noskip); -static basic_istream_wchar* basic_istream_read_double(basic_istream_wchar *this, double *v, const num_get *numget) -{ - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; + if(!ios_base_good(&base->base)) { + basic_ios_char_setstate(base, IOSTATE_failbit); + return FALSE; + } - TRACE("(%p %p)\n", this, v); + if(basic_ios_char_tie_get(base)) + basic_ostream_char_flush(basic_ios_char_tie_get(base)); - if(basic_istream_wchar_sentry_create(this, FALSE)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - istreambuf_iterator_wchar first={0}, last={0}; + if(!noskip && (ios_base_flags_get(&base->base) & FMTFLAG_skipws)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + const ctype_char *ctype = ctype_char_use_facet(base->strbuf->loc); + int ch; - first.strbuf = strbuf; - num_get_wchar_get_double(numget, &last, first, last, &base->base, &state, v); + for(ch = basic_streambuf_char_sgetc(strbuf); ; + ch = basic_streambuf_char_snextc(strbuf)) { + if(ch == EOF) { + basic_ios_char_setstate(base, IOSTATE_eofbit); + return FALSE; + } + + if(!ctype_char_is_ch(ctype, _SPACE|_BLANK, ch)) + break; + } } - basic_istream_wchar_sentry_destroy(this); - basic_ios_wchar_setstate(base, state); - return this; + return TRUE; } -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAN@Z */ -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAN@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_double, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_read_double(basic_istream_wchar *this, double *v) +/* ?ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE_N_N@Z */ +/* ?ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_N_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_ipfx, 8) +MSVCP_bool __thiscall basic_istream_char_ipfx(basic_istream_char *this, MSVCP_bool noskip) { - return basic_istream_read_double(this, v, num_get_wchar_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); + return basic_istream_char__Ipfx(this, noskip); } -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAN@Z */ -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAN@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_short_read_double, 8) -basic_istream_wchar* __thiscall basic_istream_short_read_double(basic_istream_wchar *this, double *v) +/* ?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXXZ */ +/* ?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_isfx, 4) +void __thiscall basic_istream_char_isfx(basic_istream_char *this) { - return basic_istream_read_double(this, v, num_get_short_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); + TRACE("(%p)\n", this); } -static basic_istream_wchar* basic_istream_read_ldouble(basic_istream_wchar *this, double *v, const num_get *numget) +static BOOL basic_istream_char_sentry_create(basic_istream_char *istr, MSVCP_bool noskip) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; - - TRACE("(%p %p)\n", this, v); - - if(basic_istream_wchar_sentry_create(this, FALSE)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - istreambuf_iterator_wchar first={0}, last={0}; + basic_ios_char *base = basic_istream_char_get_basic_ios(istr); - first.strbuf = strbuf; - num_get_wchar_get_ldouble(numget, &last, first, last, &base->base, &state, v); - } - basic_istream_wchar_sentry_destroy(this); + if(basic_ios_char_rdbuf_get(base)) + call_basic_streambuf_char__Lock(base->strbuf); - basic_ios_wchar_setstate(base, state); - return this; + return basic_istream_char_ipfx(istr, noskip); } -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAO@Z */ -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAO@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_ldouble, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_read_ldouble(basic_istream_wchar *this, double *v) +static void basic_istream_char_sentry_destroy(basic_istream_char *istr) { - return basic_istream_read_ldouble(this, v, num_get_wchar_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); + basic_ios_char *base = basic_istream_char_get_basic_ios(istr); + + if(basic_ios_char_rdbuf_get(base)) + call_basic_streambuf_char__Unlock(base->strbuf); } -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAO@Z */ -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAO@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_short_read_ldouble, 8) -basic_istream_wchar* __thiscall basic_istream_short_read_ldouble(basic_istream_wchar *this, double *v) +/* ?gcount@?$basic_istream@DU?$char_traits@D@std@@@std@@QBEHXZ */ +/* ?gcount@?$basic_istream@DU?$char_traits@D@std@@@std@@QEBA_JXZ */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_gcount, 4) +int __thiscall basic_istream_char_gcount(const basic_istream_char *this) { - return basic_istream_read_ldouble(this, v, num_get_short_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); + TRACE("(%p)\n", this); + return this->count; } -static basic_istream_wchar* basic_istream_read_ptr(basic_istream_wchar *this, void **v, const num_get *numget) +/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ */ +/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_get, 4) +int __thiscall basic_istream_char_get(basic_istream_char *this) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + int ret; - TRACE("(%p %p)\n", this, v); + TRACE("(%p)\n", this); - if(basic_istream_wchar_sentry_create(this, FALSE)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - istreambuf_iterator_wchar first={0}, last={0}; + this->count = 0; - first.strbuf = strbuf; - num_get_wchar_get_void(numget, &last, first, last, &base->base, &state, v); + if(!basic_istream_char_sentry_create(this, TRUE)) { + basic_istream_char_sentry_destroy(this); + return EOF; } - basic_istream_wchar_sentry_destroy(this); - basic_ios_wchar_setstate(base, state); - return this; -} + ret = basic_streambuf_char_sbumpc(basic_ios_char_rdbuf_get(base)); + basic_istream_char_sentry_destroy(this); + if(ret == EOF) + basic_ios_char_setstate(base, IOSTATE_eofbit|IOSTATE_failbit); + else + this->count++; -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAPAX@Z */ -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAPEAX@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_ptr, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_read_ptr(basic_istream_wchar *this, void **v) -{ - return basic_istream_read_ptr(this, v, num_get_wchar_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); + return ret; } -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAPAX@Z */ -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAPEAX@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_short_read_ptr, 8) -basic_istream_wchar* __thiscall basic_istream_short_read_ptr(basic_istream_wchar *this, void **v) +/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAD@Z */ +/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAD@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_get_ch, 8) +basic_istream_char* __thiscall basic_istream_char_get_ch(basic_istream_char *this, char *ch) { - return basic_istream_read_ptr(this, v, num_get_short_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); + int ret; + + TRACE("(%p %p)\n", this, ch); + + ret = basic_istream_char_get(this); + if(ret != EOF) + *ch = (char)ret; + return this; } -static basic_istream_wchar* basic_istream_read_int64(basic_istream_wchar *this, __int64 *v, const num_get *numget) +/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADHD@Z */ +/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_JD@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_get_str_delim, 20) +basic_istream_char* __thiscall basic_istream_char_get_str_delim(basic_istream_char *this, char *str, streamsize count, char delim) { - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + int ch = delim; - TRACE("(%p %p)\n", this, v); + TRACE("(%p %p %s %c)\n", this, str, wine_dbgstr_longlong(count), delim); - if(basic_istream_wchar_sentry_create(this, FALSE)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - istreambuf_iterator_wchar first={0}, last={0}; + this->count = 0; - first.strbuf = strbuf; - num_get_wchar_get_int64(numget, &last, first, last, &base->base, &state, v); + if(basic_istream_char_sentry_create(this, TRUE)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + + for(ch = basic_streambuf_char_sgetc(strbuf); count>1; + ch = basic_streambuf_char_snextc(strbuf)) { + if(ch==EOF || ch==delim) + break; + + *str++ = ch; + this->count++; + count--; + } } - basic_istream_wchar_sentry_destroy(this); + basic_istream_char_sentry_destroy(this); - basic_ios_wchar_setstate(base, state); + basic_ios_char_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) | + (ch==EOF ? IOSTATE_eofbit : IOSTATE_goodbit)); + if(count > 0) + *str = 0; return this; } -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_J@Z */ -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_int64, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_read_int64(basic_istream_wchar *this, __int64 *v) +/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADH@Z */ +/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_get_str, 16) +basic_istream_char* __thiscall basic_istream_char_get_str(basic_istream_char *this, char *str, streamsize count) { - return basic_istream_read_int64(this, v, num_get_wchar_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); + return basic_istream_char_get_str_delim(this, str, count, '\n'); } -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_J@Z */ -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_J@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_short_read_int64, 8) -basic_istream_wchar* __thiscall basic_istream_short_read_int64(basic_istream_wchar *this, __int64 *v) +/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAV?$basic_streambuf@DU?$char_traits@D@std@@@2@D@Z */ +/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@D@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_get_streambuf_delim, 12) +basic_istream_char* __thiscall basic_istream_char_get_streambuf_delim(basic_istream_char *this, basic_streambuf_char *strbuf, char delim) { - return basic_istream_read_int64(this, v, num_get_short_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); -} + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + int ch = delim; -static basic_istream_wchar* basic_istream_read_uint64(basic_istream_wchar *this, unsigned __int64 *v, const num_get *numget) -{ - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; + TRACE("(%p %p %c)\n", this, strbuf, delim); - TRACE("(%p %p)\n", this, v); + this->count = 0; - if(basic_istream_wchar_sentry_create(this, FALSE)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - istreambuf_iterator_wchar first={0}, last={0}; + if(basic_istream_char_sentry_create(this, TRUE)) { + basic_streambuf_char *strbuf_read = basic_ios_char_rdbuf_get(base); - first.strbuf = strbuf; - num_get_wchar_get_uint64(numget, &last, first, last, &base->base, &state, v); + for(ch = basic_streambuf_char_sgetc(strbuf_read); ; + ch = basic_streambuf_char_snextc(strbuf_read)) { + if(ch==EOF || ch==delim) + break; + + if(basic_streambuf_char_sputc(strbuf, ch) == EOF) + break; + this->count++; + } } - basic_istream_wchar_sentry_destroy(this); + basic_istream_char_sentry_destroy(this); - basic_ios_wchar_setstate(base, state); + basic_ios_char_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) | + (ch==EOF ? IOSTATE_eofbit : IOSTATE_goodbit)); return this; } -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_K@Z */ -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_K@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_uint64, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_read_uint64(basic_istream_wchar *this, unsigned __int64 *v) +/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z */ +/* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_get_streambuf, 8) +basic_istream_char* __thiscall basic_istream_char_get_streambuf(basic_istream_char *this, basic_streambuf_char *strbuf) { - return basic_istream_read_uint64(this, v, num_get_wchar_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); + return basic_istream_char_get_streambuf_delim(this, strbuf, '\n'); } -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_K@Z */ -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_K@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_short_read_uint64, 8) -basic_istream_wchar* __thiscall basic_istream_short_read_uint64(basic_istream_wchar *this, unsigned __int64 *v) +/* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADHD@Z */ +/* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_JD@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_getline_delim, 20) +basic_istream_char* __thiscall basic_istream_char_getline_delim(basic_istream_char *this, char *str, streamsize count, char delim) { - return basic_istream_read_uint64(this, v, num_get_short_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); -} + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + int ch = delim; -static basic_istream_wchar* basic_istream_read_bool(basic_istream_wchar *this, MSVCP_bool *v, const num_get *numget) -{ - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - int state = IOSTATE_goodbit; + TRACE("(%p %p %s %c)\n", this, str, wine_dbgstr_longlong(count), delim); - TRACE("(%p %p)\n", this, v); + this->count = 0; - if(basic_istream_wchar_sentry_create(this, FALSE)) { - basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - istreambuf_iterator_wchar first={0}, last={0}; + if(basic_istream_char_sentry_create(this, TRUE) && count>0) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - first.strbuf = strbuf; - num_get_wchar_get_bool(numget, &last, first, last, &base->base, &state, v); + while(count > 1) { + ch = basic_streambuf_char_sbumpc(strbuf); + + if(ch==EOF || ch==delim) + break; + + *str++ = ch; + this->count++; + count--; + } + + if(ch == delim) + this->count++; + else if(ch != EOF) { + ch = basic_streambuf_char_sgetc(strbuf); + + if(ch == delim) { + basic_streambuf_char__Gninc(strbuf); + this->count++; + } + } } - basic_istream_wchar_sentry_destroy(this); + basic_istream_char_sentry_destroy(this); - basic_ios_wchar_setstate(base, state); + basic_ios_char_setstate(base, (ch==EOF ? IOSTATE_eofbit : IOSTATE_goodbit) | + (!this->count || (ch!=delim && ch!=EOF) ? IOSTATE_failbit : IOSTATE_goodbit)); + if(count > 0) + *str = 0; return this; } -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_N@Z */ -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_bool, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_read_bool(basic_istream_wchar *this, MSVCP_bool *v) +/* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADH@Z */ +/* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_getline, 16) +basic_istream_char* __thiscall basic_istream_char_getline(basic_istream_char *this, char *str, streamsize count) { - return basic_istream_read_bool(this, v, num_get_wchar_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); + return basic_istream_char_getline_delim(this, str, count, '\n'); } -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_N@Z */ -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_short_read_bool, 8) -basic_istream_wchar* __thiscall basic_istream_short_read_bool(basic_istream_wchar *this, MSVCP_bool *v) +/* ?ignore@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@HH@Z */ +/* ?ignore@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_ignore, 16) +basic_istream_char* __thiscall basic_istream_char_ignore(basic_istream_char *this, streamsize count, int delim) { - return basic_istream_read_bool(this, v, num_get_short_use_facet( - basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); -} + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + int ch = delim; -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */ -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */ -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */ -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_streambuf, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_read_streambuf( - basic_istream_wchar *this, basic_streambuf_wchar *streambuf) -{ - basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - IOSB_iostate state = IOSTATE_failbit; - unsigned short c = '\n'; + TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(count), delim); - TRACE("(%p %p)\n", this, streambuf); + this->count = 0; - if(basic_istream_wchar_sentry_create(this, FALSE)) { - for(c = basic_streambuf_wchar_sgetc(basic_ios_wchar_rdbuf_get(base)); c!=WEOF; - c = basic_streambuf_wchar_snextc(basic_ios_wchar_rdbuf_get(base))) { - state = IOSTATE_goodbit; - if(basic_streambuf_wchar_sputc(streambuf, c) == WEOF) + if(basic_istream_char_sentry_create(this, TRUE)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + + while(count > 0) { + ch = basic_streambuf_char_sbumpc(strbuf); + + if(ch==EOF || ch==delim) break; + + this->count++; + if(count != INT_MAX) + count--; } } - basic_istream_wchar_sentry_destroy(this); + basic_istream_char_sentry_destroy(this); - basic_ios_wchar_setstate(base, state | (c==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit)); + if(ch == EOF) + basic_ios_char_setstate(base, IOSTATE_eofbit); return this; } -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */ -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */ -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */ -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_func, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_read_func(basic_istream_wchar *this, - basic_istream_wchar* (__cdecl *pfunc)(basic_istream_wchar*)) +/* ?ws@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@1@AAV21@@Z */ +/* ?ws@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@1@AEAV21@@Z */ +basic_istream_char* __cdecl ws_basic_istream_char(basic_istream_char *istream) { - TRACE("(%p %p)\n", this, pfunc); - pfunc(this); - return this; -} + basic_ios_char *base = basic_istream_char_get_basic_ios(istream); + int ch = '\n'; -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AAV21@@Z@Z */ -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AEAV21@@Z@Z */ -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@GU?$char_traits@G@std@@@1@AAV21@@Z@Z */ -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@GU?$char_traits@G@std@@@1@AEAV21@@Z@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_func_basic_ios, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_read_func_basic_ios(basic_istream_wchar *this, - basic_ios_wchar* (__cdecl *pfunc)(basic_ios_wchar*)) -{ - TRACE("(%p %p)\n", this, pfunc); - pfunc(basic_istream_wchar_get_basic_ios(this)); - return this; -} + TRACE("(%p)\n", istream); -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */ -/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */ -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */ -/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */ -DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_func_ios_base, 8) -basic_istream_wchar* __thiscall basic_istream_wchar_read_func_ios_base( - basic_istream_wchar *this, ios_base* (__cdecl *pfunc)(ios_base*)) -{ - TRACE("(%p %p)\n", this, pfunc); - pfunc(&basic_istream_wchar_get_basic_ios(this)->base); - return this; -} + if(basic_istream_char_sentry_create(istream, TRUE)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + const ctype_char *ctype = ctype_char_use_facet(strbuf->loc); -static inline basic_ios_char* basic_iostream_char_to_basic_ios(basic_iostream_char *ptr) -{ - return (basic_ios_char*)((char*)ptr+basic_iostream_char_vbtable1[1]); + for(ch = basic_streambuf_char_sgetc(strbuf); ctype_char_is_ch(ctype, _SPACE, ch); + ch = basic_streambuf_char_snextc(strbuf)) { + if(ch == EOF) + break; + } + } + basic_istream_char_sentry_destroy(istream); + + if(ch == EOF) + basic_ios_char_setstate(base, IOSTATE_eofbit); + return istream; } -static inline basic_iostream_char* basic_iostream_char_from_basic_ios(basic_ios_char *ptr) +/* ?peek@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ */ +/* ?peek@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_peek, 4) +int __thiscall basic_istream_char_peek(basic_istream_char *this) { - return (basic_iostream_char*)((char*)ptr-basic_iostream_char_vbtable1[1]); + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + int ret = EOF; + + TRACE("(%p)\n", this); + + this->count = 0; + + if(basic_istream_char_sentry_create(this, TRUE)) + ret = basic_streambuf_char_sgetc(basic_ios_char_rdbuf_get(base)); + basic_istream_char_sentry_destroy(this); + return ret; } -/* ??0?$basic_iostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */ -/* ??0?$basic_iostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */ -DEFINE_THISCALL_WRAPPER(basic_iostream_char_ctor, 12) -basic_iostream_char* __thiscall basic_iostream_char_ctor(basic_iostream_char *this, basic_streambuf_char *strbuf, MSVCP_bool virt_init) +/* ?_Read_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADIH@Z */ +/* ?_Read_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_K_J@Z */ +static basic_istream_char* basic_istream_char__Read_s(basic_istream_char *this, char *str, MSVCP_size_t size, streamsize count) { - basic_ios_char *basic_ios; + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + IOSB_iostate state = IOSTATE_goodbit; - TRACE("(%p %p %d)\n", this, strbuf, virt_init); + TRACE("(%p %p %lu %s)\n", this, str, size, wine_dbgstr_longlong(count)); - if(virt_init) { - this->base1.vbtable = basic_iostream_char_vbtable1; - this->base2.vbtable = basic_iostream_char_vbtable2; - basic_ios = basic_istream_char_get_basic_ios(&this->base1); - basic_ios_char_ctor(basic_ios); + if(basic_istream_char_sentry_create(this, TRUE)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + + this->count = basic_streambuf_char__Sgetn_s(strbuf, str, size, count); + if(this->count != count) + state |= IOSTATE_failbit | IOSTATE_eofbit; }else { - basic_ios = basic_istream_char_get_basic_ios(&this->base1); + this->count = 0; } + basic_istream_char_sentry_destroy(this); - basic_ios->base.vtable = &MSVCP_basic_iostream_char_vtable; - - basic_istream_char_ctor(&this->base1, strbuf, FALSE, FALSE); - basic_ostream_char_ctor_uninitialized(&this->base2, 0, FALSE, FALSE); + basic_ios_char_setstate(base, state); return this; } -/* ??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UAE@XZ */ -/* ??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_iostream_char_dtor, 4) -void __thiscall basic_iostream_char_dtor(basic_ios_char *base) +/* ?read@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADH@Z */ +/* ?read@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_read, 16) +basic_istream_char* __thiscall basic_istream_char_read(basic_istream_char *this, char *str, streamsize count) { - basic_iostream_char *this = basic_iostream_char_from_basic_ios(base); - - TRACE("(%p)\n", this); - basic_ostream_char_dtor(basic_ostream_char_to_basic_ios(&this->base2)); - basic_istream_char_dtor(basic_istream_char_to_basic_ios(&this->base1)); + return basic_istream_char__Read_s(this, str, count, count); } -/* ??_D?$basic_iostream@DU?$char_traits@D@std@@@std@@QAEXXZ */ -/* ??_D?$basic_iostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_iostream_char_vbase_dtor, 4) -void __thiscall basic_iostream_char_vbase_dtor(basic_iostream_char *this) +/* ?_Readsome_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHPADIH@Z */ +/* ?_Readsome_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_K_J@Z */ +static streamsize basic_istream_char__Readsome_s(basic_istream_char *this, char *str, MSVCP_size_t size, streamsize count) { - TRACE("(%p)\n", this); - basic_iostream_char_dtor(basic_iostream_char_to_basic_ios(this)); - basic_ios_char_dtor(basic_istream_char_get_basic_ios(&this->base1)); -} + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + IOSB_iostate state = IOSTATE_goodbit; -DEFINE_THISCALL_WRAPPER(basic_iostream_char_vector_dtor, 8) -basic_iostream_char* __thiscall basic_iostream_char_vector_dtor(basic_ios_char *base, unsigned int flags) -{ - basic_iostream_char *this = basic_iostream_char_from_basic_ios(base); + TRACE("(%p %p %lu %s)\n", this, str, size, wine_dbgstr_longlong(count)); - TRACE("(%p %x)\n", this, flags); + this->count = 0; - if(flags & 2) { - /* we have an array, with the number of elements stored before the first object */ - INT_PTR i, *ptr = (INT_PTR *)this-1; + if(basic_istream_char_sentry_create(this, TRUE)) { + streamsize avail = basic_streambuf_char_in_avail(basic_ios_char_rdbuf_get(base)); + if(avail > count) + avail = count; - for(i=*ptr-1; i>=0; i--) - basic_iostream_char_vbase_dtor(this+i); - MSVCRT_operator_delete(ptr); - } else { - basic_iostream_char_vbase_dtor(this); - if(flags & 1) - MSVCRT_operator_delete(this); + if(avail == -1) + state |= IOSTATE_eofbit; + else if(avail > 0) + basic_istream_char__Read_s(this, str, size, avail); + }else { + state |= IOSTATE_failbit; } + basic_istream_char_sentry_destroy(this); - return this; + basic_ios_char_setstate(base, state); + return this->count; } -static inline basic_ios_wchar* basic_iostream_wchar_to_basic_ios(basic_iostream_wchar *ptr) +/* ?readsome@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHPADH@Z */ +/* ?readsome@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_J@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_readsome, 16) +streamsize __thiscall basic_istream_char_readsome(basic_istream_char *this, char *str, streamsize count) { - return (basic_ios_wchar*)((char*)ptr+basic_iostream_wchar_vbtable1[1]); + return basic_istream_char__Readsome_s(this, str, count, count); } -static inline basic_iostream_wchar* basic_iostream_wchar_from_basic_ios(basic_ios_wchar *ptr) -{ - return (basic_iostream_wchar*)((char*)ptr-basic_iostream_wchar_vbtable1[1]); +/* ?putback@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z */ +/* ?putback@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_putback, 8) +basic_istream_char* __thiscall basic_istream_char_putback(basic_istream_char *this, char ch) +{ + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + IOSB_iostate state = IOSTATE_goodbit; + + TRACE("(%p %c)\n", this, ch); + + this->count = 0; + + if(basic_istream_char_sentry_create(this, TRUE)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + + if(!ios_base_good(&base->base)) + state |= IOSTATE_failbit; + else if(!strbuf || basic_streambuf_char_sputbackc(strbuf, ch)==EOF) + state |= IOSTATE_badbit; + } + basic_istream_char_sentry_destroy(this); + + basic_ios_char_setstate(base, state); + return this; } -/* ??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */ -/* ??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */ -DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_ctor, 12) -basic_iostream_wchar* __thiscall basic_iostream_wchar_ctor(basic_iostream_wchar *this, - basic_streambuf_wchar *strbuf, MSVCP_bool virt_init) +/* ?unget@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ */ +/* ?unget@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_unget, 4) +basic_istream_char* __thiscall basic_istream_char_unget(basic_istream_char *this) { - basic_ios_wchar *basic_ios; + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + IOSB_iostate state = IOSTATE_goodbit; - TRACE("(%p %p %d)\n", this, strbuf, virt_init); + TRACE("(%p)\n", this); - if(virt_init) { - this->base1.vbtable = basic_iostream_wchar_vbtable1; - this->base2.vbtable = basic_iostream_wchar_vbtable2; - basic_ios = basic_istream_wchar_get_basic_ios(&this->base1); - basic_ios_wchar_ctor(basic_ios); - }else { - basic_ios = basic_istream_wchar_get_basic_ios(&this->base1); - } + this->count = 0; - basic_istream_wchar_ctor(&this->base1, strbuf, FALSE, FALSE); - basic_ostream_wchar_ctor_uninitialized(&this->base2, 0, FALSE, FALSE); + if(basic_istream_char_sentry_create(this, TRUE)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); - basic_ios->base.vtable = &MSVCP_basic_iostream_wchar_vtable; - return this; -} + if(!ios_base_good(&base->base)) + state |= IOSTATE_failbit; + else if(!strbuf || basic_streambuf_char_sungetc(strbuf)==EOF) + state |= IOSTATE_badbit; + } + basic_istream_char_sentry_destroy(this); -/* ??0?$basic_iostream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */ -/* ??0?$basic_iostream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */ -DEFINE_THISCALL_WRAPPER(basic_iostream_short_ctor, 12) -basic_iostream_wchar* __thiscall basic_iostream_short_ctor(basic_iostream_wchar *this, - basic_streambuf_wchar *strbuf, MSVCP_bool virt_init) -{ - basic_iostream_wchar_ctor(this, strbuf, virt_init); - basic_istream_wchar_get_basic_ios(&this->base1)->base.vtable = &MSVCP_basic_iostream_short_vtable; + basic_ios_char_setstate(base, state); return this; } -/* ??1?$basic_iostream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */ -/* ??1?$basic_iostream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */ -/* ??1?$basic_iostream@GU?$char_traits@G@std@@@std@@UAE@XZ */ -/* ??1?$basic_iostream@GU?$char_traits@G@std@@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_dtor, 4) -void __thiscall basic_iostream_wchar_dtor(basic_ios_wchar *base) +/* ?sync@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ */ +/* ?sync@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_sync, 4) +int __thiscall basic_istream_char_sync(basic_istream_char *this) { - basic_iostream_wchar *this = basic_iostream_wchar_from_basic_ios(base); + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); TRACE("(%p)\n", this); - basic_ostream_wchar_dtor(basic_ostream_wchar_to_basic_ios(&this->base2)); - basic_istream_wchar_dtor(basic_istream_wchar_to_basic_ios(&this->base1)); + + if(!strbuf) + return -1; + + if(basic_istream_char_sentry_create(this, TRUE)) { + if(basic_streambuf_char_pubsync(strbuf) != -1) { + basic_istream_char_sentry_destroy(this); + return 0; + } + } + basic_istream_char_sentry_destroy(this); + + basic_ios_char_setstate(base, IOSTATE_badbit); + return -1; } -/* ??_D?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */ -/* ??_D?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */ -/* ??_D?$basic_iostream@GU?$char_traits@G@std@@@std@@QAEXXZ */ -/* ??_D?$basic_iostream@GU?$char_traits@G@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_vbase_dtor, 4) -void __thiscall basic_iostream_wchar_vbase_dtor(basic_iostream_wchar *this) +/* ?tellg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@XZ */ +/* ?tellg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@XZ */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_tellg, 8) +fpos_int* __thiscall basic_istream_char_tellg(basic_istream_char *this, fpos_int *ret) { - TRACE("(%p)\n", this); - basic_iostream_wchar_dtor(basic_iostream_wchar_to_basic_ios(this)); - basic_ios_wchar_dtor(basic_istream_wchar_get_basic_ios(&this->base1)); + TRACE("(%p %p)\n", this, ret); + + if(basic_istream_char_sentry_create(this, TRUE)) { + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + if(!ios_base_fail(&base->base)) { + basic_streambuf_char_pubseekoff(basic_ios_char_rdbuf_get(base), + ret, 0, SEEKDIR_cur, OPENMODE_in); + basic_istream_char_sentry_destroy(this); + + if(ret->off==0 && ret->pos==-1 && ret->state==0) + basic_ios_char_setstate(base, IOSTATE_failbit); + return ret; + } + } + basic_istream_char_sentry_destroy(this); + + ret->off = 0; + ret->pos = -1; + ret->state = 0; + return ret; } -DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_vector_dtor, 8) -basic_iostream_wchar* __thiscall basic_iostream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags) +/* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@JH@Z */ +/* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_seekg, 16) +basic_istream_char* __thiscall basic_istream_char_seekg(basic_istream_char *this, streamoff off, int dir) { - basic_iostream_wchar *this = basic_iostream_wchar_from_basic_ios(base); + basic_ios_char *base = basic_istream_char_get_basic_ios(this); - TRACE("(%p %x)\n", this, flags); + TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(off), dir); - if(flags & 2) { - /* we have an array, with the number of elements stored before the first object */ - INT_PTR i, *ptr = (INT_PTR *)this-1; + if(basic_istream_char_sentry_create(this, TRUE)) { + if(!ios_base_fail(&base->base)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + fpos_int ret; - for(i=*ptr-1; i>=0; i--) - basic_iostream_wchar_vbase_dtor(this+i); - MSVCRT_operator_delete(ptr); - } else { - basic_iostream_wchar_vbase_dtor(this); - if(flags & 1) - MSVCRT_operator_delete(this); + basic_streambuf_char_pubseekoff(strbuf, &ret, off, dir, OPENMODE_in); + basic_istream_char_sentry_destroy(this); + + if(ret.off==0 && ret.pos==-1 && ret.state==0) + basic_ios_char_setstate(base, IOSTATE_failbit); + else + basic_ios_char_clear(base, IOSTATE_goodbit); + return this; + } } + basic_istream_char_sentry_destroy(this); + basic_ios_char_setstate(base, IOSTATE_failbit); return this; } -static inline basic_ios_char* basic_ofstream_char_to_basic_ios(basic_ofstream_char *ptr) +/* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */ +/* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_seekg_fpos, 28) +basic_istream_char* __thiscall basic_istream_char_seekg_fpos(basic_istream_char *this, fpos_int pos) { - return (basic_ios_char*)((char*)ptr+basic_ofstream_char_vbtable[1]); -} + basic_ios_char *base = basic_istream_char_get_basic_ios(this); -static inline basic_ofstream_char* basic_ofstream_char_from_basic_ios(basic_ios_char *ptr) -{ - return (basic_ofstream_char*)((char*)ptr-basic_ofstream_char_vbtable[1]); -} + TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos)); -/* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAE@XZ */ -/* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_char_ctor, 8) -basic_ofstream_char* __thiscall basic_ofstream_char_ctor(basic_ofstream_char *this, MSVCP_bool virt_init) -{ - basic_ios_char *basic_ios; + if(basic_istream_char_sentry_create(this, TRUE)) { + if(!ios_base_fail(&base->base)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + fpos_int ret; - TRACE("(%p %d)\n", this, virt_init); + basic_streambuf_char_pubseekpos(strbuf, &ret, pos, OPENMODE_in); + basic_istream_char_sentry_destroy(this); - if(virt_init) { - this->base.vbtable = basic_ofstream_char_vbtable; - basic_ios = basic_ostream_char_get_basic_ios(&this->base); - basic_ios_char_ctor(basic_ios); - }else { - basic_ios = basic_ostream_char_get_basic_ios(&this->base); + if(ret.off==0 && ret.pos==-1 && ret.state==0) + basic_ios_char_setstate(base, IOSTATE_failbit); + else + basic_ios_char_clear(base, IOSTATE_goodbit); + return this; + } } + basic_istream_char_sentry_destroy(this); - basic_filebuf_char_ctor(&this->filebuf); - basic_ostream_char_ctor(&this->base, &this->filebuf.base, FALSE, FALSE); - basic_ios->base.vtable = &MSVCP_basic_ofstream_char_vtable; + basic_ios_char_setstate(base, IOSTATE_failbit); return this; } -/* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAE@PAU_iobuf@@@Z */ -/* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAA@PEAU_iobuf@@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_char_ctor_file, 12) -basic_ofstream_char* __thiscall basic_ofstream_char_ctor_file( - basic_ofstream_char *this, FILE *file, MSVCP_bool virt_init) +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAF@Z */ +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAF@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_read_short, 8) +basic_istream_char* __thiscall basic_istream_char_read_short(basic_istream_char *this, short *v) { - basic_ios_char *basic_ios; + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + int state = IOSTATE_goodbit; - TRACE("(%p %p %d)\n", this, file, virt_init); + TRACE("(%p %p)\n", this, v); - if(virt_init) { - this->base.vbtable = basic_ofstream_char_vbtable; - basic_ios = basic_ostream_char_get_basic_ios(&this->base); - basic_ios_char_ctor(basic_ios); - }else { - basic_ios = basic_ostream_char_get_basic_ios(&this->base); + if(basic_istream_char_sentry_create(this, FALSE)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + const num_get *numget = num_get_char_use_facet(strbuf->loc); + istreambuf_iterator_char first={0}, last={0}; + LONG tmp; + + first.strbuf = strbuf; + num_get_char_get_long(numget, &last, first, last, &base->base, &state, &tmp); + + if(!(state&IOSTATE_failbit) && tmp==(LONG)((short)tmp)) + *v = tmp; + else + state |= IOSTATE_failbit; } + basic_istream_char_sentry_destroy(this); - basic_filebuf_char_ctor_file(&this->filebuf, file); - basic_ostream_char_ctor(&this->base, &this->filebuf.base, FALSE, FALSE); - basic_ios->base.vtable = &MSVCP_basic_ofstream_char_vtable; + basic_ios_char_setstate(base, state); return this; } -/* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAE@PBDHH@Z */ -/* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAA@PEBDHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_char_ctor_name, 20) -basic_ofstream_char* __thiscall basic_ofstream_char_ctor_name(basic_ofstream_char *this, - const char *name, int mode, int prot, MSVCP_bool virt_init) +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAG@Z */ +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAG@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ushort, 8) +basic_istream_char* __thiscall basic_istream_char_read_ushort(basic_istream_char *this, unsigned short *v) { - TRACE("(%p %s %d %d %d)\n", this, name, mode, prot, virt_init); + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + int state = IOSTATE_goodbit; + + TRACE("(%p %p)\n", this, v); - basic_ofstream_char_ctor(this, virt_init); + if(basic_istream_char_sentry_create(this, FALSE)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + const num_get *numget = num_get_char_use_facet(strbuf->loc); + istreambuf_iterator_char first={0}, last={0}; - if(!basic_filebuf_char_open(&this->filebuf, name, mode|OPENMODE_out, prot)) { - basic_ios_char *basic_ios = basic_ostream_char_get_basic_ios(&this->base); - basic_ios_char_setstate(basic_ios, IOSTATE_failbit); + first.strbuf = strbuf; + num_get_char_get_ushort(numget, &last, first, last, &base->base, &state, v); } + basic_istream_char_sentry_destroy(this); + + basic_ios_char_setstate(base, state); return this; } -/* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAE@PBGHH@Z */ -/* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAA@PEBGHH@Z */ -/* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAE@PB_WHH@Z */ -/* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAA@PEB_WHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_char_ctor_name_wchar, 20) -basic_ofstream_char* __thiscall basic_ofstream_char_ctor_name_wchar(basic_ofstream_char *this, - const wchar_t *name, int mode, int prot, MSVCP_bool virt_init) +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAH@Z */ +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAH@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_read_int, 8) +basic_istream_char* __thiscall basic_istream_char_read_int(basic_istream_char *this, int *v) { - TRACE("(%p %s %d %d %d)\n", this, debugstr_w(name), mode, prot, virt_init); + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + int state = IOSTATE_goodbit; + + TRACE("(%p %p)\n", this, v); - basic_ofstream_char_ctor(this, virt_init); + if(basic_istream_char_sentry_create(this, FALSE)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + const num_get *numget = num_get_char_use_facet(strbuf->loc); + istreambuf_iterator_char first={0}, last={0}; - if(!basic_filebuf_char_open_wchar(&this->filebuf, name, mode|OPENMODE_out, prot)) { - basic_ios_char *basic_ios = basic_ostream_char_get_basic_ios(&this->base); - basic_ios_char_setstate(basic_ios, IOSTATE_failbit); + first.strbuf = strbuf; + num_get_char_get_long(numget, &last, first, last, &base->base, &state, v); } + basic_istream_char_sentry_destroy(this); + + basic_ios_char_setstate(base, state); return this; } -/* ??1?$basic_ofstream@DU?$char_traits@D@std@@@std@@UAE@XZ */ -/* ??1?$basic_ofstream@DU?$char_traits@D@std@@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_char_dtor, 4) -void __thiscall basic_ofstream_char_dtor(basic_ios_char *base) +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAI@Z */ +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAI@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_read_uint, 8) +basic_istream_char* __thiscall basic_istream_char_read_uint(basic_istream_char *this, unsigned int *v) { - basic_ofstream_char *this = basic_ofstream_char_from_basic_ios(base); + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + int state = IOSTATE_goodbit; - TRACE("(%p)\n", this); + TRACE("(%p %p)\n", this, v); - basic_ostream_char_dtor(basic_ostream_char_to_basic_ios(&this->base)); - basic_filebuf_char_dtor(&this->filebuf); -} + if(basic_istream_char_sentry_create(this, FALSE)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + const num_get *numget = num_get_char_use_facet(strbuf->loc); + istreambuf_iterator_char first={0}, last={0}; -/* ??_D?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXXZ */ -/* ??_D?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_char_vbase_dtor, 4) -void __thiscall basic_ofstream_char_vbase_dtor(basic_ofstream_char *this) -{ - TRACE("(%p)\n", this); + first.strbuf = strbuf; + num_get_char_get_uint(numget, &last, first, last, &base->base, &state, v); + } + basic_istream_char_sentry_destroy(this); - basic_ofstream_char_dtor(basic_ofstream_char_to_basic_ios(this)); - basic_ios_char_dtor(basic_ostream_char_get_basic_ios(&this->base)); + basic_ios_char_setstate(base, state); + return this; } -DEFINE_THISCALL_WRAPPER(basic_ofstream_char_vector_dtor, 8) -basic_ofstream_char* __thiscall basic_ofstream_char_vector_dtor(basic_ios_char *base, unsigned int flags) +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAJ@Z */ +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAJ@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_read_long, 8) +basic_istream_char* __thiscall basic_istream_char_read_long(basic_istream_char *this, LONG *v) { - basic_ofstream_char *this = basic_ofstream_char_from_basic_ios(base); + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + int state = IOSTATE_goodbit; - TRACE("(%p %x)\n", this, flags); + TRACE("(%p %p)\n", this, v); - if(flags & 2) { - /* we have an array, with the number of elements stored before the first object */ - INT_PTR i, *ptr = (INT_PTR *)this-1; + if(basic_istream_char_sentry_create(this, FALSE)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + const num_get *numget = num_get_char_use_facet(strbuf->loc); + istreambuf_iterator_char first={0}, last={0}; - for(i=*ptr-1; i>=0; i--) - basic_ofstream_char_vbase_dtor(this+i); - MSVCRT_operator_delete(ptr); - } else { - basic_ofstream_char_vbase_dtor(this); - if(flags & 1) - MSVCRT_operator_delete(this); + first.strbuf = strbuf; + num_get_char_get_long(numget, &last, first, last, &base->base, &state, v); } + basic_istream_char_sentry_destroy(this); + basic_ios_char_setstate(base, state); return this; } -/* ?close@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXXZ */ -/* ?close@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_char_close, 4) -void __thiscall basic_ofstream_char_close(basic_ofstream_char *this) +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAK@Z */ +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAK@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ulong, 8) +basic_istream_char* __thiscall basic_istream_char_read_ulong(basic_istream_char *this, ULONG *v) { - TRACE("(%p)\n", this); - - if(!basic_filebuf_char_close(&this->filebuf)) { - basic_ios_char *basic_ios = basic_ostream_char_get_basic_ios(&this->base); - basic_ios_char_setstate(basic_ios, IOSTATE_failbit); - } -} + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + int state = IOSTATE_goodbit; -/* ?is_open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QBE_NXZ */ -/* ?is_open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEBA_NXZ */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_char_is_open, 4) -MSVCP_bool __thiscall basic_ofstream_char_is_open(const basic_ofstream_char *this) -{ - TRACE("(%p)\n", this); - return basic_filebuf_char_is_open(&this->filebuf); -} + TRACE("(%p %p)\n", this, v); -/* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXPBDHH@Z */ -/* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_char_open, 16) -void __thiscall basic_ofstream_char_open(basic_ofstream_char *this, - const char *name, int mode, int prot) -{ - TRACE("(%p %s %d %d)\n", this, name, mode, prot); + if(basic_istream_char_sentry_create(this, FALSE)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + const num_get *numget = num_get_char_use_facet(strbuf->loc); + istreambuf_iterator_char first={0}, last={0}; - if(!basic_filebuf_char_open(&this->filebuf, name, mode|OPENMODE_out, prot)) { - basic_ios_char *basic_ios = basic_ostream_char_get_basic_ios(&this->base); - basic_ios_char_setstate(basic_ios, IOSTATE_failbit); + first.strbuf = strbuf; + num_get_char_get_ulong(numget, &last, first, last, &base->base, &state, v); } -} + basic_istream_char_sentry_destroy(this); -/* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXPBDI@Z */ -/* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDI@Z */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_char_open_old, 12) -void __thiscall basic_ofstream_char_open_old(basic_ofstream_char *this, - const char *name, unsigned int mode) -{ - basic_ofstream_char_open(this, name, mode, _SH_DENYNO); + basic_ios_char_setstate(base, state); + return this; } -/* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXPBGHH@Z */ -/* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAAXPEBGHH@Z */ -/* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXPB_WHH@Z */ -/* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAAXPEB_WHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_char_open_wchar, 16) -void __thiscall basic_ofstream_char_open_wchar(basic_ofstream_char *this, - const wchar_t *name, int mode, int prot) +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAM@Z */ +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAM@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_read_float, 8) +basic_istream_char* __thiscall basic_istream_char_read_float(basic_istream_char *this, float *v) { - TRACE("(%p %s %d %d)\n", this, debugstr_w(name), mode, prot); + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + int state = IOSTATE_goodbit; - if(!basic_filebuf_char_open_wchar(&this->filebuf, name, mode|OPENMODE_out, prot)) { - basic_ios_char *basic_ios = basic_ostream_char_get_basic_ios(&this->base); - basic_ios_char_setstate(basic_ios, IOSTATE_failbit); - } -} + TRACE("(%p %p)\n", this, v); -/* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXPBGI@Z */ -/* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAAXPEBGI@Z */ -/* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXPB_WI@Z */ -/* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAAXPEB_WI@Z */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_char_open_wchar_old, 12) -void __thiscall basic_ofstream_char_open_wchar_old(basic_ofstream_char *this, - const wchar_t *name, unsigned int mode) -{ - basic_ofstream_char_open_wchar(this, name, mode, _SH_DENYNO); -} + if(basic_istream_char_sentry_create(this, FALSE)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + const num_get *numget = num_get_char_use_facet(strbuf->loc); + istreambuf_iterator_char first={0}, last={0}; -/* ?rdbuf@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ */ -/* ?rdbuf@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_char_rdbuf, 4) -basic_filebuf_char* __thiscall basic_ofstream_char_rdbuf(const basic_ofstream_char *this) -{ - TRACE("(%p)\n", this); - return (basic_filebuf_char*)&this->filebuf; -} + first.strbuf = strbuf; + num_get_char_get_float(numget, &last, first, last, &base->base, &state, v); + } + basic_istream_char_sentry_destroy(this); -static inline basic_ios_wchar* basic_ofstream_wchar_to_basic_ios(basic_ofstream_wchar *ptr) -{ - return (basic_ios_wchar*)((char*)ptr+basic_ofstream_wchar_vbtable[1]); + basic_ios_char_setstate(base, state); + return this; } -static inline basic_ofstream_wchar* basic_ofstream_wchar_from_basic_ios(basic_ios_wchar *ptr) +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAN@Z */ +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAN@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_read_double, 8) +basic_istream_char* __thiscall basic_istream_char_read_double(basic_istream_char *this, double *v) { - return (basic_ofstream_wchar*)((char*)ptr-basic_ofstream_wchar_vbtable[1]); -} + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + int state = IOSTATE_goodbit; -/* ??0?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAE@XZ */ -/* ??0?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_ctor, 8) -basic_ofstream_wchar* __thiscall basic_ofstream_wchar_ctor(basic_ofstream_wchar *this, MSVCP_bool virt_init) -{ - basic_ios_wchar *basic_ios; + TRACE("(%p %p)\n", this, v); - TRACE("(%p %d)\n", this, virt_init); + if(basic_istream_char_sentry_create(this, FALSE)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + const num_get *numget = num_get_char_use_facet(strbuf->loc); + istreambuf_iterator_char first={0}, last={0}; - if(virt_init) { - this->base.vbtable = basic_ofstream_wchar_vbtable; - basic_ios = basic_ostream_wchar_get_basic_ios(&this->base); - basic_ios_wchar_ctor(basic_ios); - }else { - basic_ios = basic_ostream_wchar_get_basic_ios(&this->base); + first.strbuf = strbuf; + num_get_char_get_double(numget, &last, first, last, &base->base, &state, v); } + basic_istream_char_sentry_destroy(this); - basic_filebuf_wchar_ctor(&this->filebuf); - basic_ostream_wchar_ctor(&this->base, &this->filebuf.base, FALSE, FALSE); - basic_ios->base.vtable = &MSVCP_basic_ofstream_wchar_vtable; + basic_ios_char_setstate(base, state); return this; } -/* ??0?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAE@XZ */ -/* ??0?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_short_ctor, 8) -basic_ofstream_wchar* __thiscall basic_ofstream_short_ctor(basic_ofstream_wchar *this, MSVCP_bool virt_init) +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAO@Z */ +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAO@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ldouble, 8) +basic_istream_char* __thiscall basic_istream_char_read_ldouble(basic_istream_char *this, double *v) { - basic_ofstream_wchar_ctor(this, virt_init); - basic_ostream_wchar_get_basic_ios(&this->base)->base.vtable = &MSVCP_basic_ofstream_short_vtable; - return this; -} + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + int state = IOSTATE_goodbit; -/* ??0?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAE@PAU_iobuf@@@Z */ -/* ??0?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAU_iobuf@@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_ctor_file, 12) -basic_ofstream_wchar* __thiscall basic_ofstream_wchar_ctor_file( - basic_ofstream_wchar *this, FILE *file, MSVCP_bool virt_init) -{ - basic_ios_wchar *basic_ios; + TRACE("(%p %p)\n", this, v); - TRACE("(%p %p %d)\n", this, file, virt_init); + if(basic_istream_char_sentry_create(this, FALSE)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + const num_get *numget = num_get_char_use_facet(strbuf->loc); + istreambuf_iterator_char first={0}, last={0}; - if(virt_init) { - this->base.vbtable = basic_ofstream_wchar_vbtable; - basic_ios = basic_ostream_wchar_get_basic_ios(&this->base); - basic_ios_wchar_ctor(basic_ios); - }else { - basic_ios = basic_ostream_wchar_get_basic_ios(&this->base); + first.strbuf = strbuf; + num_get_char_get_ldouble(numget, &last, first, last, &base->base, &state, v); } + basic_istream_char_sentry_destroy(this); - basic_filebuf_wchar_ctor_file(&this->filebuf, file); - basic_ostream_wchar_ctor(&this->base, &this->filebuf.base, FALSE, FALSE); - basic_ios->base.vtable = &MSVCP_basic_ofstream_wchar_vtable; + basic_ios_char_setstate(base, state); return this; } -/* ??0?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAE@PAU_iobuf@@@Z */ -/* ??0?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAA@PEAU_iobuf@@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_short_ctor_file, 12) -basic_ofstream_wchar* __thiscall basic_ofstream_short_ctor_file( - basic_ofstream_wchar *this, FILE *file, MSVCP_bool virt_init) +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAPAX@Z */ +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAPEAX@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ptr, 8) +basic_istream_char* __thiscall basic_istream_char_read_ptr(basic_istream_char *this, void **v) { - basic_ofstream_wchar_ctor_file(this, file, virt_init); - basic_ostream_wchar_get_basic_ios(&this->base)->base.vtable = &MSVCP_basic_ofstream_short_vtable; - return this; -} + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + int state = IOSTATE_goodbit; -/* ??0?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAE@PBDHH@Z */ -/* ??0?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAA@PEBDHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_ctor_name, 20) -basic_ofstream_wchar* __thiscall basic_ofstream_wchar_ctor_name(basic_ofstream_wchar *this, - const char *name, int mode, int prot, MSVCP_bool virt_init) -{ - TRACE("(%p %s %d %d %d)\n", this, name, mode, prot, virt_init); + TRACE("(%p %p)\n", this, v); - basic_ofstream_wchar_ctor(this, virt_init); + if(basic_istream_char_sentry_create(this, FALSE)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + const num_get *numget = num_get_char_use_facet(strbuf->loc); + istreambuf_iterator_char first={0}, last={0}; - if(!basic_filebuf_wchar_open(&this->filebuf, name, mode|OPENMODE_out, prot)) { - basic_ios_wchar *basic_ios = basic_ostream_wchar_get_basic_ios(&this->base); - basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit); + first.strbuf = strbuf; + num_get_char_get_void(numget, &last, first, last, &base->base, &state, v); } - return this; -} + basic_istream_char_sentry_destroy(this); -/* ??0?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAE@PBDHH@Z */ -/* ??0?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAA@PEBDHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_short_ctor_name, 20) -basic_ofstream_wchar* __thiscall basic_ofstream_short_ctor_name(basic_ofstream_wchar *this, - const char *name, int mode, int prot, MSVCP_bool virt_init) -{ - basic_ofstream_wchar_ctor_name(this, name, mode, prot, virt_init); - basic_ostream_wchar_get_basic_ios(&this->base)->base.vtable = &MSVCP_basic_ofstream_short_vtable; + basic_ios_char_setstate(base, state); return this; } -/* ??0?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAE@PBGHH@Z */ -/* ??0?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAA@PEBGHH@Z */ -/* ??0?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAE@PB_WHH@Z */ -/* ??0?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAA@PEB_WHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_ctor_name_wchar, 20) -basic_ofstream_wchar* __thiscall basic_ofstream_wchar_ctor_name_wchar(basic_ofstream_wchar *this, - const wchar_t *name, int mode, int prot, MSVCP_bool virt_init) +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_J@Z */ +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_J@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_read_int64, 8) +basic_istream_char* __thiscall basic_istream_char_read_int64(basic_istream_char *this, __int64 *v) { - TRACE("(%p %s %d %d %d)\n", this, debugstr_w(name), mode, prot, virt_init); + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + int state = IOSTATE_goodbit; + + TRACE("(%p %p)\n", this, v); - basic_ofstream_wchar_ctor(this, virt_init); + if(basic_istream_char_sentry_create(this, FALSE)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + const num_get *numget = num_get_char_use_facet(strbuf->loc); + istreambuf_iterator_char first={0}, last={0}; - if(!basic_filebuf_wchar_open_wchar(&this->filebuf, name, mode|OPENMODE_out, prot)) { - basic_ios_wchar *basic_ios = basic_ostream_wchar_get_basic_ios(&this->base); - basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit); + first.strbuf = strbuf; + num_get_char_get_int64(numget, &last, first, last, &base->base, &state, v); } - return this; -} + basic_istream_char_sentry_destroy(this); -/* ??0?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAE@PBGHH@Z */ -/* ??0?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAA@PEBGHH@Z */ -/* ??0?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAE@PB_WHH@Z */ -/* ??0?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAA@PEB_WHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_short_ctor_name_wchar, 20) -basic_ofstream_wchar* __thiscall basic_ofstream_short_ctor_name_wchar(basic_ofstream_wchar *this, - const wchar_t *name, int mode, int prot, MSVCP_bool virt_init) -{ - basic_ofstream_wchar_ctor_name_wchar(this, name, mode, prot, virt_init); - basic_ostream_wchar_get_basic_ios(&this->base)->base.vtable = &MSVCP_basic_ofstream_short_vtable; + basic_ios_char_setstate(base, state); return this; } -/* ??1?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */ -/* ??1?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */ -/* ??1?$basic_ofstream@GU?$char_traits@G@std@@@std@@UAE@XZ */ -/* ??1?$basic_ofstream@GU?$char_traits@G@std@@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_dtor, 4) -void __thiscall basic_ofstream_wchar_dtor(basic_ios_wchar *base) +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_K@Z */ +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_K@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_read_uint64, 8) +basic_istream_char* __thiscall basic_istream_char_read_uint64(basic_istream_char *this, unsigned __int64 *v) { - basic_ofstream_wchar *this = basic_ofstream_wchar_from_basic_ios(base); + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + int state = IOSTATE_goodbit; - TRACE("(%p)\n", this); + TRACE("(%p %p)\n", this, v); - basic_ostream_wchar_dtor(basic_ostream_wchar_to_basic_ios(&this->base)); - basic_filebuf_wchar_dtor(&this->filebuf); -} + if(basic_istream_char_sentry_create(this, FALSE)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + const num_get *numget = num_get_char_use_facet(strbuf->loc); + istreambuf_iterator_char first={0}, last={0}; -/* ??_D?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */ -/* ??_D?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */ -/* ??_D?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAEXXZ */ -/* ??_D?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_vbase_dtor, 4) -void __thiscall basic_ofstream_wchar_vbase_dtor(basic_ofstream_wchar *this) -{ - TRACE("(%p)\n", this); + first.strbuf = strbuf; + num_get_char_get_uint64(numget, &last, first, last, &base->base, &state, v); + } + basic_istream_char_sentry_destroy(this); - basic_ofstream_wchar_dtor(basic_ofstream_wchar_to_basic_ios(this)); - basic_ios_wchar_dtor(basic_ostream_wchar_get_basic_ios(&this->base)); + basic_ios_char_setstate(base, state); + return this; } -DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_vector_dtor, 8) -basic_ofstream_wchar* __thiscall basic_ofstream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags) +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_N@Z */ +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_read_bool, 8) +basic_istream_char* __thiscall basic_istream_char_read_bool(basic_istream_char *this, MSVCP_bool *v) { - basic_ofstream_wchar *this = basic_ofstream_wchar_from_basic_ios(base); + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + int state = IOSTATE_goodbit; - TRACE("(%p %x)\n", this, flags); + TRACE("(%p %p)\n", this, v); - if(flags & 2) { - /* we have an array, with the number of elements stored before the first object */ - INT_PTR i, *ptr = (INT_PTR *)this-1; + if(basic_istream_char_sentry_create(this, FALSE)) { + basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base); + const num_get *numget = num_get_char_use_facet(strbuf->loc); + istreambuf_iterator_char first={0}, last={0}; - for(i=*ptr-1; i>=0; i--) - basic_ofstream_wchar_vbase_dtor(this+i); - MSVCRT_operator_delete(ptr); - } else { - basic_ofstream_wchar_vbase_dtor(this); - if(flags & 1) - MSVCRT_operator_delete(this); + first.strbuf = strbuf; + num_get_char_get_bool(numget, &last, first, last, &base->base, &state, v); } + basic_istream_char_sentry_destroy(this); + basic_ios_char_setstate(base, state); return this; } -/* ?close@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */ -/* ?close@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */ -/* ?close@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAEXXZ */ -/* ?close@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_close, 4) -void __thiscall basic_ofstream_wchar_close(basic_ofstream_wchar *this) -{ - TRACE("(%p)\n", this); - - if(!basic_filebuf_wchar_close(&this->filebuf)) { - basic_ios_wchar *basic_ios = basic_ostream_wchar_get_basic_ios(&this->base); - basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit); - } -} - -/* ?is_open@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QBE_NXZ */ -/* ?is_open@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEBA_NXZ */ -/* ?is_open@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QBE_NXZ */ -/* ?is_open@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEBA_NXZ */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_is_open, 4) -MSVCP_bool __thiscall basic_ofstream_wchar_is_open(const basic_ofstream_wchar *this) +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */ +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_read_streambuf, 8) +basic_istream_char* __thiscall basic_istream_char_read_streambuf( + basic_istream_char *this, basic_streambuf_char *streambuf) { - TRACE("(%p)\n", this); - return basic_filebuf_wchar_is_open(&this->filebuf); -} + basic_ios_char *base = basic_istream_char_get_basic_ios(this); + IOSB_iostate state = IOSTATE_failbit; + int c = '\n'; -/* ?open@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAEXPBDHH@Z */ -/* ?open@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAAXPEBDHH@Z */ -/* ?open@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAEXPBDHH@Z */ -/* ?open@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAAXPEBDHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_open, 16) -void __thiscall basic_ofstream_wchar_open(basic_ofstream_wchar *this, - const char *name, int mode, int prot) -{ - TRACE("(%p %s %d %d)\n", this, name, mode, prot); + TRACE("(%p %p)\n", this, streambuf); - if(!basic_filebuf_wchar_open(&this->filebuf, name, mode|OPENMODE_out, prot)) { - basic_ios_wchar *basic_ios = basic_ostream_wchar_get_basic_ios(&this->base); - basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit); + if(basic_istream_char_sentry_create(this, FALSE)) { + for(c = basic_streambuf_char_sgetc(basic_ios_char_rdbuf_get(base)); c!=EOF; + c = basic_streambuf_char_snextc(basic_ios_char_rdbuf_get(base))) { + state = IOSTATE_goodbit; + if(basic_streambuf_char_sputc(streambuf, c) == EOF) + break; + } } + basic_istream_char_sentry_destroy(this); + + basic_ios_char_setstate(base, state | (c==EOF ? IOSTATE_eofbit : IOSTATE_goodbit)); + return this; } -/* ?open@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAEXPBDI@Z */ -/* ?open@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAAXPEBDI@Z */ -/* ?open@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAEXPBDI@Z */ -/* ?open@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAAXPEBDI@Z */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_open_old, 12) -void __thiscall basic_ofstream_wchar_open_old(basic_ofstream_wchar *this, - const char *name, unsigned int mode) +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */ +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_read_func, 8) +basic_istream_char* __thiscall basic_istream_char_read_func(basic_istream_char *this, + basic_istream_char* (__cdecl *pfunc)(basic_istream_char*)) { - basic_ofstream_wchar_open(this, name, mode, _SH_DENYNO); + TRACE("(%p %p)\n", this, pfunc); + pfunc(this); + return this; } -/* ?open@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAEXPBGHH@Z */ -/* ?open@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAAXPEBGHH@Z */ -/* ?open@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAEXPB_WHH@Z */ -/* ?open@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAAXPEB_WHH@Z */ -/* ?open@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAEXPBGHH@Z */ -/* ?open@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAAXPEBGHH@Z */ -/* ?open@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAEXPB_WHH@Z */ -/* ?open@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAAXPEB_WHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_open_wchar, 16) -void __thiscall basic_ofstream_wchar_open_wchar(basic_ofstream_wchar *this, - const wchar_t *name, int mode, int prot) +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@DU?$char_traits@D@std@@@1@AAV21@@Z@Z */ +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@DU?$char_traits@D@std@@@1@AEAV21@@Z@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_read_func_basic_ios, 8) +basic_istream_char* __thiscall basic_istream_char_read_func_basic_ios(basic_istream_char *this, + basic_ios_char* (__cdecl *pfunc)(basic_ios_char*)) { - TRACE("(%p %s %d %d)\n", this, debugstr_w(name), mode, prot); - - if(!basic_filebuf_wchar_open_wchar(&this->filebuf, name, mode|OPENMODE_out, prot)) { - basic_ios_wchar *basic_ios = basic_ostream_wchar_get_basic_ios(&this->base); - basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit); - } + TRACE("(%p %p)\n", this, pfunc); + pfunc(basic_istream_char_get_basic_ios(this)); + return this; } -/* ?open@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAEXPBGI@Z */ -/* ?open@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAAXPEBGI@Z */ -/* ?open@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAEXPB_WI@Z */ -/* ?open@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAAXPEB_WI@Z */ -/* ?open@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAEXPBGI@Z */ -/* ?open@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAAXPEBGI@Z */ -/* ?open@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAEXPB_WI@Z */ -/* ?open@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAAXPEB_WI@Z */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_open_wchar_old, 12) -void __thiscall basic_ofstream_wchar_open_wchar_old(basic_ofstream_wchar *this, - const wchar_t *name, unsigned int mode) +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */ +/* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_read_func_ios_base, 8) +basic_istream_char* __thiscall basic_istream_char_read_func_ios_base(basic_istream_char *this, + ios_base* (__cdecl *pfunc)(ios_base*)) { - basic_ofstream_wchar_open_wchar(this, name, mode, _SH_DENYNO); + TRACE("(%p %p)\n", this, pfunc); + pfunc(&basic_istream_char_get_basic_ios(this)->base); + return this; } -/* ?rdbuf@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_filebuf@_WU?$char_traits@_W@std@@@2@XZ */ -/* ?rdbuf@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_filebuf@_WU?$char_traits@_W@std@@@2@XZ */ -/* ?rdbuf@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_filebuf@GU?$char_traits@G@std@@@2@XZ */ -/* ?rdbuf@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_filebuf@GU?$char_traits@G@std@@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_rdbuf, 4) -basic_filebuf_wchar* __thiscall basic_ofstream_wchar_rdbuf(const basic_ofstream_wchar *this) +/* Caution: basic_istream uses virtual inheritance. */ +static inline basic_ios_wchar* basic_istream_wchar_get_basic_ios(basic_istream_wchar *this) { - TRACE("(%p)\n", this); - return (basic_filebuf_wchar*)&this->filebuf; + return (basic_ios_wchar*)((char*)this+this->vbtable[1]); } -static inline basic_ios_char* basic_ifstream_char_to_basic_ios(basic_ifstream_char *ptr) +static inline basic_ios_wchar* basic_istream_wchar_to_basic_ios(basic_istream_wchar *ptr) { - return (basic_ios_char*)((char*)ptr+basic_ifstream_char_vbtable[1]); + return (basic_ios_wchar*)((char*)ptr+basic_istream_wchar_vbtable[1]); } -static inline basic_ifstream_char* basic_ifstream_char_from_basic_ios(basic_ios_char *ptr) +static inline basic_istream_wchar* basic_istream_wchar_from_basic_ios(basic_ios_wchar *ptr) { - return (basic_ifstream_char*)((char*)ptr-basic_ifstream_char_vbtable[1]); + return (basic_istream_wchar*)((char*)ptr-basic_istream_wchar_vbtable[1]); } -/* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAE@XZ */ -/* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_char_ctor, 8) -basic_ifstream_char* __thiscall basic_ifstream_char_ctor(basic_ifstream_char *this, MSVCP_bool virt_init) +/* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N1@Z */ +/* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N1@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ctor_init, 20) +basic_istream_wchar* __thiscall basic_istream_wchar_ctor_init(basic_istream_wchar *this, + basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool noinit, MSVCP_bool virt_init) { - basic_ios_char *basic_ios; + basic_ios_wchar *base; - TRACE("(%p %d)\n", this, virt_init); + TRACE("(%p %p %d %d %d)\n", this, strbuf, isstd, noinit, virt_init); if(virt_init) { - this->base.vbtable = basic_ifstream_char_vbtable; - basic_ios = basic_istream_char_get_basic_ios(&this->base); - basic_ios_char_ctor(basic_ios); + this->vbtable = basic_istream_wchar_vbtable; + base = basic_istream_wchar_get_basic_ios(this); + basic_ios_wchar_ctor(base); }else { - basic_ios = basic_istream_char_get_basic_ios(&this->base); + base = basic_istream_wchar_get_basic_ios(this); } - basic_filebuf_char_ctor(&this->filebuf); - basic_istream_char_ctor(&this->base, &this->filebuf.base, FALSE, FALSE); - basic_ios->base.vtable = &MSVCP_basic_ifstream_char_vtable; + base->base.vtable = &MSVCP_basic_istream_wchar_vtable; + this->count = 0; + if(!noinit) + basic_ios_wchar_init(base, strbuf, isstd); return this; } -/* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAE@PAU_iobuf@@@Z */ -/* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAA@PEAU_iobuf@@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_char_ctor_file, 12) -basic_ifstream_char* __thiscall basic_ifstream_char_ctor_file( - basic_ifstream_char *this, FILE *file, MSVCP_bool virt_init) +/* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N1@Z */ +/* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N1@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_short_ctor_init, 20) +basic_istream_wchar* __thiscall basic_istream_short_ctor_init(basic_istream_wchar *this, + basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool noinit, MSVCP_bool virt_init) { - basic_ios_char *basic_ios; - - TRACE("(%p %p %d)\n", this, file, virt_init); + basic_istream_wchar_ctor_init(this, strbuf, isstd, noinit, virt_init); + basic_istream_wchar_get_basic_ios(this)->base.vtable = &MSVCP_basic_istream_short_vtable; + return this; +} - if(virt_init) { - this->base.vbtable = basic_ifstream_char_vbtable; - basic_ios = basic_istream_char_get_basic_ios(&this->base); - basic_ios_char_ctor(basic_ios); - }else { - basic_ios = basic_istream_char_get_basic_ios(&this->base); - } +/* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */ +/* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ctor, 16) +basic_istream_wchar* __thiscall basic_istream_wchar_ctor(basic_istream_wchar *this, + basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init) +{ + return basic_istream_wchar_ctor_init(this, strbuf, isstd, FALSE, virt_init); +} - basic_filebuf_char_ctor_file(&this->filebuf, file); - basic_istream_char_ctor(&this->base, &this->filebuf.base, FALSE, FALSE); - basic_ios->base.vtable = &MSVCP_basic_ifstream_char_vtable; - return this; +/* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z */ +/* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_short_ctor, 16) +basic_istream_wchar* __thiscall basic_istream_short_ctor(basic_istream_wchar *this, + basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init) +{ + return basic_istream_short_ctor_init(this, strbuf, isstd, FALSE, virt_init); } -/* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAE@PBDHH@Z */ -/* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAA@PEBDHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_char_ctor_name, 20) -basic_ifstream_char* __thiscall basic_ifstream_char_ctor_name(basic_ifstream_char *this, - const char *name, int mode, int prot, MSVCP_bool virt_init) +/* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@W4_Uninitialized@1@@Z */ +/* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@W4_Uninitialized@1@@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ctor_uninitialized, 12) +basic_istream_wchar* __thiscall basic_istream_wchar_ctor_uninitialized( + basic_istream_wchar *this, int uninitialized, MSVCP_bool virt_init) { - TRACE("(%p %s %d %d %d)\n", this, name, mode, prot, virt_init); + basic_ios_wchar *base; - basic_ifstream_char_ctor(this, virt_init); + TRACE("(%p %d %d)\n", this, uninitialized, virt_init); - if(!basic_filebuf_char_open(&this->filebuf, name, mode|OPENMODE_in, prot)) { - basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base); - basic_ios_char_setstate(basic_ios, IOSTATE_failbit); + if(virt_init) { + this->vbtable = basic_istream_wchar_vbtable; + base = basic_istream_wchar_get_basic_ios(this); + basic_ios_wchar_ctor(base); + }else { + base = basic_istream_wchar_get_basic_ios(this); } + + base->base.vtable = &MSVCP_basic_istream_wchar_vtable; + ios_base_Addstd(&base->base); return this; } -/* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAE@PBGHH@Z */ -/* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAA@PEBGHH@Z */ -/* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAE@PB_WHH@Z */ -/* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAA@PEB_WHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_char_ctor_name_wchar, 20) -basic_ifstream_char* __thiscall basic_ifstream_char_ctor_name_wchar(basic_ifstream_char *this, - const wchar_t *name, int mode, int prot, MSVCP_bool virt_init) +/* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@@Z */ +/* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@W4_Uninitialized@1@@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_short_ctor_uninitialized, 12) +basic_istream_wchar* __thiscall basic_istream_short_ctor_uninitialized( + basic_istream_wchar *this, int uninitialized, MSVCP_bool virt_init) { - TRACE("(%p %s %d %d %d)\n", this, debugstr_w(name), mode, prot, virt_init); - - basic_ifstream_char_ctor(this, virt_init); - - if(!basic_filebuf_char_open_wchar(&this->filebuf, name, mode|OPENMODE_in, prot)) { - basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base); - basic_ios_char_setstate(basic_ios, IOSTATE_failbit); - } + basic_istream_wchar_ctor_uninitialized(this, uninitialized, virt_init); + basic_istream_wchar_get_basic_ios(this)->base.vtable = &MSVCP_basic_istream_short_vtable; return this; } -/* ??1?$basic_ifstream@DU?$char_traits@D@std@@@std@@UAE@XZ */ -/* ??1?$basic_ifstream@DU?$char_traits@D@std@@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_char_dtor, 4) -void __thiscall basic_ifstream_char_dtor(basic_ios_char *base) +/* ??1?$basic_istream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */ +/* ??1?$basic_istream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */ +/* ??1?$basic_istream@GU?$char_traits@G@std@@@std@@UAE@XZ */ +/* ??1?$basic_istream@GU?$char_traits@G@std@@@std@@UEAA@XZ */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_dtor, 4) +void __thiscall basic_istream_wchar_dtor(basic_ios_wchar *base) { - basic_ifstream_char *this = basic_ifstream_char_from_basic_ios(base); + basic_istream_wchar *this = basic_istream_wchar_from_basic_ios(base); + /* don't destroy virtual base here */ TRACE("(%p)\n", this); - - basic_istream_char_dtor(basic_istream_char_to_basic_ios(&this->base)); - basic_filebuf_char_dtor(&this->filebuf); } -/* ??_D?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAEXXZ */ -/* ??_D?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_char_vbase_dtor, 4) -void __thiscall basic_ifstream_char_vbase_dtor(basic_ifstream_char *this) +/* ??_D?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */ +/* ??_D?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */ +/* ??_D?$basic_istream@GU?$char_traits@G@std@@@std@@QAEXXZ */ +/* ??_D?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAXXZ */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_vbase_dtor, 4) +void __thiscall basic_istream_wchar_vbase_dtor(basic_istream_wchar *this) { TRACE("(%p)\n", this); - - basic_ifstream_char_dtor(basic_ifstream_char_to_basic_ios(this)); - basic_ios_char_dtor(basic_istream_char_get_basic_ios(&this->base)); + basic_istream_wchar_dtor(basic_istream_wchar_to_basic_ios(this)); + basic_ios_wchar_dtor(basic_istream_wchar_get_basic_ios(this)); } -DEFINE_THISCALL_WRAPPER(basic_ifstream_char_vector_dtor, 8) -basic_ifstream_char* __thiscall basic_ifstream_char_vector_dtor(basic_ios_char *base, unsigned int flags) +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_vector_dtor, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags) { - basic_ifstream_char *this = basic_ifstream_char_from_basic_ios(base); + basic_istream_wchar *this = basic_istream_wchar_from_basic_ios(base); TRACE("(%p %x)\n", this, flags); @@ -10025,10 +6565,10 @@ basic_ifstream_char* __thiscall basic_ifstream_char_vector_dtor(basic_ios_char * INT_PTR i, *ptr = (INT_PTR *)this-1; for(i=*ptr-1; i>=0; i--) - basic_ifstream_char_vbase_dtor(this+i); + basic_istream_wchar_vbase_dtor(this+i); MSVCRT_operator_delete(ptr); } else { - basic_ifstream_char_vbase_dtor(this); + basic_istream_wchar_vbase_dtor(this); if(flags & 1) MSVCRT_operator_delete(this); } @@ -10036,1812 +6576,1238 @@ basic_ifstream_char* __thiscall basic_ifstream_char_vector_dtor(basic_ios_char * return this; } -/* ?close@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAEXXZ */ -/* ?close@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_char_close, 4) -void __thiscall basic_ifstream_char_close(basic_ifstream_char *this) -{ - TRACE("(%p)\n", this); - - if(!basic_filebuf_char_close(&this->filebuf)) { - basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base); - basic_ios_char_setstate(basic_ios, IOSTATE_failbit); - } -} - -/* ?is_open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QBE_NXZ */ -/* ?is_open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEBA_NXZ */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_char_is_open, 4) -MSVCP_bool __thiscall basic_ifstream_char_is_open(const basic_ifstream_char *this) -{ - TRACE("(%p)\n", this); - return basic_filebuf_char_is_open(&this->filebuf); -} - -/* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAEXPBDHH@Z */ -/* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_char_open, 16) -void __thiscall basic_ifstream_char_open(basic_ifstream_char *this, - const char *name, int mode, int prot) -{ - TRACE("(%p %s %d %d)\n", this, name, mode, prot); - - if(!basic_filebuf_char_open(&this->filebuf, name, mode|OPENMODE_in, prot)) { - basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base); - basic_ios_char_setstate(basic_ios, IOSTATE_failbit); - } -} - -/* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAEXPBDI@Z */ -/* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDI@Z */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_char_open_old, 12) -void __thiscall basic_ifstream_char_open_old(basic_ifstream_char *this, - const char *name, unsigned int mode) -{ - basic_ifstream_char_open(this, name, mode, _SH_DENYNO); -} - -/* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAEXPBGHH@Z */ -/* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAAXPEBGHH@Z */ -/* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAEXPB_WHH@Z */ -/* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAAXPEB_WHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_char_open_wchar, 16) -void __thiscall basic_ifstream_char_open_wchar(basic_ifstream_char *this, - const wchar_t *name, int mode, int prot) -{ - TRACE("(%p %s %d %d)\n", this, debugstr_w(name), mode, prot); - - if(!basic_filebuf_char_open_wchar(&this->filebuf, name, mode|OPENMODE_in, prot)) { - basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base); - basic_ios_char_setstate(basic_ios, IOSTATE_failbit); - } -} - -/* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAEXPBGI@Z */ -/* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAAXPEBGI@Z */ -/* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAEXPB_WI@Z */ -/* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAAXPEB_WI@Z */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_char_open_wchar_old, 12) -void __thiscall basic_ifstream_char_open_wchar_old(basic_ifstream_char *this, - const wchar_t *name, unsigned int mode) -{ - basic_ifstream_char_open_wchar(this, name, mode, _SH_DENYNO); -} - -/* ?rdbuf@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ */ -/* ?rdbuf@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_char_rdbuf, 4) -basic_filebuf_char* __thiscall basic_ifstream_char_rdbuf(const basic_ifstream_char *this) -{ - TRACE("(%p)\n", this); - return (basic_filebuf_char*)&this->filebuf; -} - -static inline basic_ios_wchar* basic_ifstream_wchar_to_basic_ios(basic_ifstream_wchar *ptr) -{ - return (basic_ios_wchar*)((char*)ptr+basic_ifstream_wchar_vbtable[1]); -} - -static inline basic_ifstream_wchar* basic_ifstream_wchar_from_basic_ios(basic_ios_wchar *ptr) -{ - return (basic_ifstream_wchar*)((char*)ptr-basic_ifstream_wchar_vbtable[1]); -} - -/* ??0?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QAE@XZ */ -/* ??0?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_ctor, 8) -basic_ifstream_wchar* __thiscall basic_ifstream_wchar_ctor(basic_ifstream_wchar *this, MSVCP_bool virt_init) -{ - basic_ios_wchar *basic_ios; - - TRACE("(%p %d)\n", this, virt_init); - - if(virt_init) { - this->base.vbtable = basic_ifstream_wchar_vbtable; - basic_ios = basic_istream_wchar_get_basic_ios(&this->base); - basic_ios_wchar_ctor(basic_ios); - }else { - basic_ios = basic_istream_wchar_get_basic_ios(&this->base); - } - - basic_filebuf_wchar_ctor(&this->filebuf); - basic_istream_wchar_ctor(&this->base, &this->filebuf.base, FALSE, FALSE); - basic_ios->base.vtable = &MSVCP_basic_ifstream_wchar_vtable; - return this; -} - -/* ??0?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAE@XZ */ -/* ??0?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_short_ctor, 8) -basic_ifstream_wchar* __thiscall basic_ifstream_short_ctor(basic_ifstream_wchar *this, MSVCP_bool virt_init) -{ - basic_ifstream_wchar_ctor(this, virt_init); - basic_istream_wchar_get_basic_ios(&this->base)->base.vtable = &MSVCP_basic_ifstream_short_vtable; - return this; -} - -/* ??0?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QAE@PAU_iobuf@@@Z */ -/* ??0?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAU_iobuf@@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_ctor_file, 12) -basic_ifstream_wchar* __thiscall basic_ifstream_wchar_ctor_file( - basic_ifstream_wchar *this, FILE *file, MSVCP_bool virt_init) +/* ?_Ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE_N_N@Z */ +/* ?_Ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_N_N@Z */ +/* ?_Ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE_N_N@Z */ +/* ?_Ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_N_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar__Ipfx, 8) +MSVCP_bool __thiscall basic_istream_wchar__Ipfx(basic_istream_wchar *this, MSVCP_bool noskip) { - basic_ios_wchar *basic_ios; + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - TRACE("(%p %p %d)\n", this, file, virt_init); + TRACE("(%p %d)\n", this, noskip); - if(virt_init) { - this->base.vbtable = basic_ifstream_wchar_vbtable; - basic_ios = basic_istream_wchar_get_basic_ios(&this->base); - basic_ios_wchar_ctor(basic_ios); - }else { - basic_ios = basic_istream_wchar_get_basic_ios(&this->base); + if(!ios_base_good(&base->base)) { + basic_ios_wchar_setstate(base, IOSTATE_failbit); + return FALSE; } - basic_filebuf_wchar_ctor_file(&this->filebuf, file); - basic_istream_wchar_ctor(&this->base, &this->filebuf.base, FALSE, FALSE); - basic_ios->base.vtable = &MSVCP_basic_ifstream_wchar_vtable; - return this; -} - -/* ??0?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAE@PAU_iobuf@@@Z */ -/* ??0?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAA@PEAU_iobuf@@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_short_ctor_file, 12) -basic_ifstream_wchar* __thiscall basic_ifstream_short_ctor_file( - basic_ifstream_wchar *this, FILE *file, MSVCP_bool virt_init) -{ - basic_ifstream_wchar_ctor_file(this, file, virt_init); - basic_istream_wchar_get_basic_ios(&this->base)->base.vtable = &MSVCP_basic_ifstream_short_vtable; - return this; -} + if(basic_ios_wchar_tie_get(base)) + basic_ostream_wchar_flush(basic_ios_wchar_tie_get(base)); -/* ??0?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QAE@PBDHH@Z */ -/* ??0?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEAA@PEBDHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_ctor_name, 20) -basic_ifstream_wchar* __thiscall basic_ifstream_wchar_ctor_name(basic_ifstream_wchar *this, - const char *name, int mode, int prot, MSVCP_bool virt_init) -{ - TRACE("(%p %s %d %d %d)\n", this, name, mode, prot, virt_init); + if(!noskip && (ios_base_flags_get(&base->base) & FMTFLAG_skipws)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + const ctype_wchar *ctype = ctype_wchar_use_facet(base->strbuf->loc); + int ch; - basic_ifstream_wchar_ctor(this, virt_init); + for(ch = basic_streambuf_wchar_sgetc(strbuf); ; + ch = basic_streambuf_wchar_snextc(strbuf)) { + if(ch == WEOF) { + basic_ios_wchar_setstate(base, IOSTATE_eofbit); + return FALSE; + } - if(!basic_filebuf_wchar_open(&this->filebuf, name, mode|OPENMODE_in, prot)) { - basic_ios_wchar *basic_ios = basic_istream_wchar_get_basic_ios(&this->base); - basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit); + if(!ctype_wchar_is_ch(ctype, _SPACE|_BLANK, ch)) + break; + } } - return this; -} -/* ??0?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAE@PBDHH@Z */ -/* ??0?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAA@PEBDHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_short_ctor_name, 20) -basic_ifstream_wchar* __thiscall basic_ifstream_short_ctor_name(basic_ifstream_wchar *this, - const char *name, int mode, int prot, MSVCP_bool virt_init) -{ - basic_ifstream_wchar_ctor_name(this, name, mode, prot, virt_init); - basic_istream_wchar_get_basic_ios(&this->base)->base.vtable = &MSVCP_basic_ifstream_short_vtable; - return this; -} - -/* ??0?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QAE@PBGHH@Z */ -/* ??0?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEAA@PEBGHH@Z */ -/* ??0?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QAE@PB_WHH@Z */ -/* ??0?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEAA@PEB_WHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_ctor_name_wchar, 20) -basic_ifstream_wchar* __thiscall basic_ifstream_wchar_ctor_name_wchar(basic_ifstream_wchar *this, - const wchar_t *name, int mode, int prot, MSVCP_bool virt_init) -{ - TRACE("(%p %s %d %d %d)\n", this, debugstr_w(name), mode, prot, virt_init); - - basic_ifstream_wchar_ctor(this, virt_init); - - if(!basic_filebuf_wchar_open_wchar(&this->filebuf, name, mode|OPENMODE_in, prot)) { - basic_ios_wchar *basic_ios = basic_istream_wchar_get_basic_ios(&this->base); - basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit); - } - return this; + return TRUE; } -/* ??0?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAE@PBGHH@Z */ -/* ??0?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAA@PEBGHH@Z */ -/* ??0?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAE@PB_WHH@Z */ -/* ??0?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAA@PEB_WHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_short_ctor_name_wchar, 20) -basic_ifstream_wchar* __thiscall basic_ifstream_short_ctor_name_wchar(basic_ifstream_wchar *this, - const wchar_t *name, int mode, int prot, MSVCP_bool virt_init) +/* ?ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE_N_N@Z */ +/* ?ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_N_N@Z */ +/* ?ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE_N_N@Z */ +/* ?ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_N_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ipfx, 8) +MSVCP_bool __thiscall basic_istream_wchar_ipfx(basic_istream_wchar *this, MSVCP_bool noskip) { - basic_ifstream_wchar_ctor_name_wchar(this, name, mode, prot, virt_init); - basic_istream_wchar_get_basic_ios(&this->base)->base.vtable = &MSVCP_basic_ifstream_short_vtable; - return this; + return basic_istream_wchar__Ipfx(this, noskip); } -/* ??1?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */ -/* ??1?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */ -/* ??1?$basic_ifstream@GU?$char_traits@G@std@@@std@@UAE@XZ */ -/* ??1?$basic_ifstream@GU?$char_traits@G@std@@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_dtor, 4) -void __thiscall basic_ifstream_wchar_dtor(basic_ios_wchar *base) +/* ?isfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */ +/* ?isfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */ +/* ?isfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEXXZ */ +/* ?isfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAXXZ */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_isfx, 4) +void __thiscall basic_istream_wchar_isfx(basic_istream_wchar *this) { - basic_ifstream_wchar *this = basic_ifstream_wchar_from_basic_ios(base); - TRACE("(%p)\n", this); - - basic_istream_wchar_dtor(basic_istream_wchar_to_basic_ios(&this->base)); - basic_filebuf_wchar_dtor(&this->filebuf); } -/* ??_D?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */ -/* ??_D?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */ -/* ??_D?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAEXXZ */ -/* ??_D?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_vbase_dtor, 4) -void __thiscall basic_ifstream_wchar_vbase_dtor(basic_ifstream_wchar *this) +static BOOL basic_istream_wchar_sentry_create(basic_istream_wchar *istr, MSVCP_bool noskip) { - TRACE("(%p)\n", this); + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istr); + + if(basic_ios_wchar_rdbuf_get(base)) + basic_streambuf_wchar__Lock(base->strbuf); - basic_ifstream_wchar_dtor(basic_ifstream_wchar_to_basic_ios(this)); - basic_ios_wchar_dtor(basic_istream_wchar_get_basic_ios(&this->base)); + return basic_istream_wchar_ipfx(istr, noskip); } -DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_vector_dtor, 8) -basic_ifstream_wchar* __thiscall basic_ifstream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags) +static void basic_istream_wchar_sentry_destroy(basic_istream_wchar *istr) { - basic_ifstream_wchar *this = basic_ifstream_wchar_from_basic_ios(base); - - TRACE("(%p %x)\n", this, flags); - - if(flags & 2) { - /* we have an array, with the number of elements stored before the first object */ - INT_PTR i, *ptr = (INT_PTR *)this-1; - - for(i=*ptr-1; i>=0; i--) - basic_ifstream_wchar_vbase_dtor(this+i); - MSVCRT_operator_delete(ptr); - } else { - basic_ifstream_wchar_vbase_dtor(this); - if(flags & 1) - MSVCRT_operator_delete(this); - } + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istr); - return this; + if(basic_ios_wchar_rdbuf_get(base)) + basic_streambuf_wchar__Unlock(base->strbuf); } -/* ?close@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */ -/* ?close@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */ -/* ?close@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAEXXZ */ -/* ?close@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_close, 4) -void __thiscall basic_ifstream_wchar_close(basic_ifstream_wchar *this) +/* ?gcount@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QBEHXZ */ +/* ?gcount@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEBA_JXZ */ +/* ?gcount@?$basic_istream@GU?$char_traits@G@std@@@std@@QBEHXZ */ +/* ?gcount@?$basic_istream@GU?$char_traits@G@std@@@std@@QEBA_JXZ */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_gcount, 4) +int __thiscall basic_istream_wchar_gcount(const basic_istream_wchar *this) { TRACE("(%p)\n", this); - - if(!basic_filebuf_wchar_close(&this->filebuf)) { - basic_ios_wchar *basic_ios = basic_istream_wchar_get_basic_ios(&this->base); - basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit); - } + return this->count; } -/* ?is_open@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QBE_NXZ */ -/* ?is_open@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEBA_NXZ */ -/* ?is_open@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QBE_NXZ */ -/* ?is_open@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEBA_NXZ */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_is_open, 4) -MSVCP_bool __thiscall basic_ifstream_wchar_is_open(const basic_ifstream_wchar *this) +/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEGXZ */ +/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */ +/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEGXZ */ +/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAGXZ */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get, 4) +unsigned short __thiscall basic_istream_wchar_get(basic_istream_wchar *this) { + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + int ret; + TRACE("(%p)\n", this); - return basic_filebuf_wchar_is_open(&this->filebuf); -} -/* ?open@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QAEXPBDHH@Z */ -/* ?open@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEAAXPEBDHH@Z */ -/* ?open@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAEXPBDHH@Z */ -/* ?open@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAAXPEBDHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_open, 16) -void __thiscall basic_ifstream_wchar_open(basic_ifstream_wchar *this, - const char *name, int mode, int prot) -{ - TRACE("(%p %s %d %d)\n", this, name, mode, prot); + this->count = 0; - if(!basic_filebuf_wchar_open(&this->filebuf, name, mode|OPENMODE_in, prot)) { - basic_ios_wchar *basic_ios = basic_istream_wchar_get_basic_ios(&this->base); - basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit); + if(!basic_istream_wchar_sentry_create(this, TRUE)) { + basic_istream_wchar_sentry_destroy(this); + return WEOF; } -} -/* ?open@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QAEXPBDI@Z */ -/* ?open@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEAAXPEBDI@Z */ -/* ?open@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAEXPBDI@Z */ -/* ?open@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAAXPEBDI@Z */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_open_old, 12) -void __thiscall basic_ifstream_wchar_open_old(basic_ifstream_wchar *this, - const char *name, unsigned int mode) -{ - basic_ifstream_wchar_open(this, name, mode, _SH_DENYNO); + ret = basic_streambuf_wchar_sbumpc(basic_ios_wchar_rdbuf_get(base)); + basic_istream_wchar_sentry_destroy(this); + if(ret == WEOF) + basic_ios_wchar_setstate(base, IOSTATE_eofbit|IOSTATE_failbit); + else + this->count++; + + return ret; } -/* ?open@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QAEXPBGHH@Z */ -/* ?open@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEAAXPEBGHH@Z */ -/* ?open@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QAEXPB_WHH@Z */ -/* ?open@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEAAXPEB_WHH@Z */ -/* ?open@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAEXPBGHH@Z */ -/* ?open@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAAXPEBGHH@Z */ -/* ?open@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAEXPB_WHH@Z */ -/* ?open@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAAXPEB_WHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_open_wchar, 16) -void __thiscall basic_ifstream_wchar_open_wchar(basic_ifstream_wchar *this, - const wchar_t *name, int mode, int prot) +/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AA_W@Z */ +/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEA_W@Z */ +/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAG@Z */ +/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAG@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_ch, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_get_ch(basic_istream_wchar *this, wchar_t *ch) { - TRACE("(%p %s %d %d)\n", this, debugstr_w(name), mode, prot); + unsigned short ret; - if(!basic_filebuf_wchar_open_wchar(&this->filebuf, name, mode|OPENMODE_in, prot)) { - basic_ios_wchar *basic_ios = basic_istream_wchar_get_basic_ios(&this->base); - basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit); - } -} + TRACE("(%p %p)\n", this, ch); -/* ?open@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QAEXPBGI@Z */ -/* ?open@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEAAXPEBGI@Z */ -/* ?open@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QAEXPB_WI@Z */ -/* ?open@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEAAXPEB_WI@Z */ -/* ?open@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAEXPBGI@Z */ -/* ?open@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAAXPEBGI@Z */ -/* ?open@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAEXPB_WI@Z */ -/* ?open@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAAXPEB_WI@Z */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_open_wchar_old, 12) -void __thiscall basic_ifstream_wchar_open_wchar_old(basic_ifstream_wchar *this, - const wchar_t *name, unsigned int mode) -{ - basic_ifstream_wchar_open_wchar(this, name, mode, _SH_DENYNO); + ret = basic_istream_wchar_get(this); + if(ret != WEOF) + *ch = (wchar_t)ret; + return this; } -/* ?rdbuf@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_filebuf@_WU?$char_traits@_W@std@@@2@XZ */ -/* ?rdbuf@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_filebuf@_WU?$char_traits@_W@std@@@2@XZ */ -/* ?rdbuf@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_filebuf@GU?$char_traits@G@std@@@2@XZ */ -/* ?rdbuf@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_filebuf@GU?$char_traits@G@std@@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_rdbuf, 4) -basic_filebuf_wchar* __thiscall basic_ifstream_wchar_rdbuf(const basic_ifstream_wchar *this) +/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH_W@Z */ +/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J_W@Z */ +/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGHG@Z */ +/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_JG@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_str_delim, 20) +basic_istream_wchar* __thiscall basic_istream_wchar_get_str_delim(basic_istream_wchar *this, wchar_t *str, streamsize count, wchar_t delim) { - TRACE("(%p)\n", this); - return (basic_filebuf_wchar*)&this->filebuf; -} + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + unsigned short ch = delim; -static inline basic_ios_char* basic_fstream_char_to_basic_ios(basic_fstream_char *ptr) -{ - return (basic_ios_char*)((char*)ptr+basic_fstream_char_vbtable1[1]); -} + TRACE("(%p %p %s %c)\n", this, str, wine_dbgstr_longlong(count), delim); -static inline basic_fstream_char* basic_fstream_char_from_basic_ios(basic_ios_char *ptr) -{ - return (basic_fstream_char*)((char*)ptr-basic_fstream_char_vbtable1[1]); -} + this->count = 0; -/* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@XZ */ -/* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_fstream_char_ctor, 8) -basic_fstream_char* __thiscall basic_fstream_char_ctor(basic_fstream_char *this, MSVCP_bool virt_init) -{ - basic_ios_char *basic_ios; + if(basic_istream_wchar_sentry_create(this, TRUE)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - TRACE("(%p %d)\n", this, virt_init); + for(ch = basic_streambuf_wchar_sgetc(strbuf); count>1; + ch = basic_streambuf_wchar_snextc(strbuf)) { + if(ch==WEOF || ch==delim) + break; - if(virt_init) { - this->base.base1.vbtable = basic_fstream_char_vbtable1; - this->base.base2.vbtable = basic_fstream_char_vbtable2; - basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); - basic_ios_char_ctor(basic_ios); - }else { - basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); + *str++ = ch; + this->count++; + count--; + } } + basic_istream_wchar_sentry_destroy(this); - basic_filebuf_char_ctor(&this->filebuf); - basic_iostream_char_ctor(&this->base, &this->filebuf.base, FALSE); - basic_ios->base.vtable = &MSVCP_basic_fstream_char_vtable; + basic_ios_wchar_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) | + (ch==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit)); + if(count > 0) + *str = 0; return this; } -/* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PAU_iobuf@@@Z */ -/* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEAU_iobuf@@@Z */ -DEFINE_THISCALL_WRAPPER(basic_fstream_char_ctor_file, 12) -basic_fstream_char* __thiscall basic_fstream_char_ctor_file(basic_fstream_char *this, - FILE *file, MSVCP_bool virt_init) +/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH@Z */ +/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z */ +/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGH@Z */ +/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_str, 16) +basic_istream_wchar* __thiscall basic_istream_wchar_get_str(basic_istream_wchar *this, wchar_t *str, streamsize count) { - basic_ios_char *basic_ios; + return basic_istream_wchar_get_str_delim(this, str, count, '\n'); +} - TRACE("(%p %p %d)\n", this, file, virt_init); +/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_W@Z */ +/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_W@Z */ +/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAV?$basic_streambuf@GU?$char_traits@G@std@@@2@G@Z */ +/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@G@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_streambuf_delim, 12) +basic_istream_wchar* __thiscall basic_istream_wchar_get_streambuf_delim(basic_istream_wchar *this, basic_streambuf_wchar *strbuf, wchar_t delim) +{ + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + unsigned short ch = delim; - if(virt_init) { - this->base.base1.vbtable = basic_fstream_char_vbtable1; - this->base.base2.vbtable = basic_fstream_char_vbtable2; - basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); - basic_ios_char_ctor(basic_ios); - }else { - basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); - } + TRACE("(%p %p %c)\n", this, strbuf, delim); - basic_filebuf_char_ctor_file(&this->filebuf, file); - basic_iostream_char_ctor(&this->base, &this->filebuf.base, FALSE); - basic_ios->base.vtable = &MSVCP_basic_fstream_char_vtable; - return this; -} + this->count = 0; -/* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PBDHH@Z */ -/* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEBDHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_fstream_char_ctor_name, 20) -basic_fstream_char* __thiscall basic_fstream_char_ctor_name(basic_fstream_char *this, - const char *name, int mode, int prot, MSVCP_bool virt_init) -{ - TRACE("(%p %s %d %d %d)\n", this, name, mode, prot, virt_init); + if(basic_istream_wchar_sentry_create(this, TRUE)) { + basic_streambuf_wchar *strbuf_read = basic_ios_wchar_rdbuf_get(base); - basic_fstream_char_ctor(this, virt_init); + for(ch = basic_streambuf_wchar_sgetc(strbuf_read); ; + ch = basic_streambuf_wchar_snextc(strbuf_read)) { + if(ch==WEOF || ch==delim) + break; - if(!basic_filebuf_char_open(&this->filebuf, name, mode, prot)) { - basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); - basic_ios_char_setstate(basic_ios, IOSTATE_failbit); + if(basic_streambuf_wchar_sputc(strbuf, ch) == WEOF) + break; + this->count++; + } } + basic_istream_wchar_sentry_destroy(this); + + basic_ios_wchar_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) | + (ch==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit)); return this; } -/* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PBGHH@Z */ -/* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEBGHH@Z */ -/* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PB_WHH@Z */ -/* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEB_WHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_fstream_char_ctor_name_wchar, 20) -basic_fstream_char* __thiscall basic_fstream_char_ctor_name_wchar(basic_fstream_char *this, - const wchar_t *name, int mode, int prot, MSVCP_bool virt_init) +/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z */ +/* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z */ +/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAV?$basic_streambuf@GU?$char_traits@G@std@@@2@@Z */ +/* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_streambuf, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_get_streambuf(basic_istream_wchar *this, basic_streambuf_wchar *strbuf) { - TRACE("(%p %s %d %d %d)\n", this, debugstr_w(name), mode, prot, virt_init); - - basic_fstream_char_ctor(this, virt_init); - - if(!basic_filebuf_char_open_wchar(&this->filebuf, name, mode, prot)) { - basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); - basic_ios_char_setstate(basic_ios, IOSTATE_failbit); - } - return this; + return basic_istream_wchar_get_streambuf_delim(this, strbuf, '\n'); } -/* ??1?$basic_fstream@DU?$char_traits@D@std@@@std@@UAE@XZ */ -/* ??1?$basic_fstream@DU?$char_traits@D@std@@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_fstream_char_dtor, 4) -void __thiscall basic_fstream_char_dtor(basic_ios_char *base) +/* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH_W@Z */ +/* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J_W@Z */ +/* ?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGHG@Z */ +/* ?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_JG@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_getline_delim, 20) +basic_istream_wchar* __thiscall basic_istream_wchar_getline_delim(basic_istream_wchar *this, wchar_t *str, streamsize count, wchar_t delim) { - basic_fstream_char *this = basic_fstream_char_from_basic_ios(base); + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + unsigned short ch = delim; - TRACE("(%p)\n", this); + TRACE("(%p %p %s %c)\n", this, str, wine_dbgstr_longlong(count), delim); - basic_iostream_char_dtor(basic_iostream_char_to_basic_ios(&this->base)); - basic_filebuf_char_dtor(&this->filebuf); -} + this->count = 0; -/* ??_D?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXXZ */ -/* ??_D?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_fstream_char_vbase_dtor, 4) -void __thiscall basic_fstream_char_vbase_dtor(basic_fstream_char *this) -{ - TRACE("(%p)\n", this); + if(basic_istream_wchar_sentry_create(this, TRUE) && count>0) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - basic_fstream_char_dtor(basic_fstream_char_to_basic_ios(this)); - basic_ios_char_dtor(basic_istream_char_get_basic_ios(&this->base.base1)); -} + while(count > 1) { + ch = basic_streambuf_wchar_sbumpc(strbuf); -DEFINE_THISCALL_WRAPPER(basic_fstream_char_vector_dtor, 8) -basic_fstream_char* __thiscall basic_fstream_char_vector_dtor(basic_ios_char *base, unsigned int flags) -{ - basic_fstream_char *this = basic_fstream_char_from_basic_ios(base); + if(ch==WEOF || ch==delim) + break; - TRACE("(%p %x)\n", this, flags); + *str++ = ch; + this->count++; + count--; + } - if(flags & 2) { - /* we have an array, with the number of elements stored before the first object */ - INT_PTR i, *ptr = (INT_PTR *)this-1; + if(ch == delim) + this->count++; + else if(ch != WEOF) { + ch = basic_streambuf_wchar_sgetc(strbuf); - for(i=*ptr-1; i>=0; i--) - basic_fstream_char_vbase_dtor(this+i); - MSVCRT_operator_delete(ptr); - } else { - basic_fstream_char_vbase_dtor(this); - if(flags & 1) - MSVCRT_operator_delete(this); + if(ch == delim) { + basic_streambuf_wchar__Gninc(strbuf); + this->count++; + } + } } + basic_istream_wchar_sentry_destroy(this); + basic_ios_wchar_setstate(base, (ch==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit) | + (!this->count || (ch!=delim && ch!=WEOF) ? IOSTATE_failbit : IOSTATE_goodbit)); + if(count > 0) + *str = 0; return this; } -/* ?close@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXXZ */ -/* ?close@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_fstream_char_close, 4) -void __thiscall basic_fstream_char_close(basic_fstream_char *this) +/* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH@Z */ +/* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z */ +/* ?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGH@Z */ +/* ?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_getline, 16) +basic_istream_wchar* __thiscall basic_istream_wchar_getline(basic_istream_wchar *this, wchar_t *str, streamsize count) { - TRACE("(%p)\n", this); - - if(!basic_filebuf_char_close(&this->filebuf)) { - basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); - basic_ios_char_setstate(basic_ios, IOSTATE_failbit); - } + return basic_istream_wchar_getline_delim(this, str, count, '\n'); } -/* ?is_open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QBE_NXZ */ -/* ?is_open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEBA_NXZ */ -DEFINE_THISCALL_WRAPPER(basic_fstream_char_is_open, 4) -MSVCP_bool __thiscall basic_fstream_char_is_open(const basic_fstream_char *this) +/* ?ignore@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@HG@Z */ +/* ?ignore@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JG@Z */ +/* ?ignore@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@HG@Z */ +/* ?ignore@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JG@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ignore, 16) +basic_istream_wchar* __thiscall basic_istream_wchar_ignore(basic_istream_wchar *this, streamsize count, unsigned short delim) { - TRACE("(%p)\n", this); - return basic_filebuf_char_is_open(&this->filebuf); -} + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + unsigned short ch = delim; -/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBDHH@Z */ -/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_fstream_char_open, 16) -void __thiscall basic_fstream_char_open(basic_fstream_char *this, - const char *name, int mode, int prot) -{ - TRACE("(%p %s %d %d)\n", this, name, mode, prot); + TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(count), delim); + + this->count = 0; + + if(basic_istream_wchar_sentry_create(this, TRUE)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - if(!basic_filebuf_char_open(&this->filebuf, name, mode, prot)) { - basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); - basic_ios_char_setstate(basic_ios, IOSTATE_failbit); + while(count > 0) { + ch = basic_streambuf_wchar_sbumpc(strbuf); + + if(ch==WEOF || ch==delim) + break; + + this->count++; + if(count != INT_MAX) + count--; + } } -} + basic_istream_wchar_sentry_destroy(this); -/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBDI@Z */ -/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDI@Z */ -DEFINE_THISCALL_WRAPPER(basic_fstream_char_open_old, 12) -void __thiscall basic_fstream_char_open_old(basic_fstream_char *this, - const char *name, unsigned int mode) -{ - basic_fstream_char_open(this, name, mode, _SH_DENYNO); + if(ch == WEOF) + basic_ios_wchar_setstate(base, IOSTATE_eofbit); + return this; } -/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBGHH@Z */ -/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBGHH@Z */ -/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPB_WHH@Z */ -/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEB_WHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_fstream_char_open_wchar, 16) -void __thiscall basic_fstream_char_open_wchar(basic_fstream_char *this, - const wchar_t *name, int mode, int prot) +/* ?ws@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@1@AAV21@@Z */ +/* ?ws@std@@YAAEAV?$basic_istream@_WU?$char_traits@_W@std@@@1@AEAV21@@Z */ +/* ?ws@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@1@AAV21@@Z */ +/* ?ws@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@1@AEAV21@@Z */ +basic_istream_wchar* __cdecl ws_basic_istream_wchar(basic_istream_wchar *istream) { - TRACE("(%p %s %d %d)\n", this, debugstr_w(name), mode, prot); + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istream); + unsigned short ch = '\n'; + + TRACE("(%p)\n", istream); + + if(basic_istream_wchar_sentry_create(istream, TRUE)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + const ctype_wchar *ctype = ctype_wchar_use_facet(strbuf->loc); - if(!basic_filebuf_char_open_wchar(&this->filebuf, name, mode, prot)) { - basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); - basic_ios_char_setstate(basic_ios, IOSTATE_failbit); + for(ch = basic_streambuf_wchar_sgetc(strbuf); ctype_wchar_is_ch(ctype, _SPACE, ch); + ch = basic_streambuf_wchar_snextc(strbuf)) { + if(ch == WEOF) + break; + } } + basic_istream_wchar_sentry_destroy(istream); + + if(ch == WEOF) + basic_ios_wchar_setstate(base, IOSTATE_eofbit); + return istream; } -/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBGI@Z */ -/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBGI@Z */ -/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPB_WI@Z */ -/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEB_WI@Z */ -DEFINE_THISCALL_WRAPPER(basic_fstream_char_open_wchar_old, 12) -void __thiscall basic_fstream_char_open_wchar_old(basic_fstream_char *this, - const wchar_t *name, unsigned int mode) +/* ?peek@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEGXZ */ +/* ?peek@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */ +/* ?peek@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEGXZ */ +/* ?peek@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAGXZ */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_peek, 4) +unsigned short __thiscall basic_istream_wchar_peek(basic_istream_wchar *this) { - basic_fstream_char_open_wchar(this, name, mode, _SH_DENYNO); -} + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + unsigned short ret = WEOF; -/* ?rdbuf@?$basic_fstream@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ */ -/* ?rdbuf@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_fstream_char_rdbuf, 4) -basic_filebuf_char* __thiscall basic_fstream_char_rdbuf(const basic_fstream_char *this) -{ TRACE("(%p)\n", this); - return (basic_filebuf_char*)&this->filebuf; -} -static inline basic_ios_wchar* basic_fstream_wchar_to_basic_ios(basic_fstream_wchar *ptr) -{ - return (basic_ios_wchar*)((char*)ptr+basic_fstream_wchar_vbtable1[1]); -} + this->count = 0; -static inline basic_fstream_wchar* basic_fstream_wchar_from_basic_ios(basic_ios_wchar *ptr) -{ - return (basic_fstream_wchar*)((char*)ptr-basic_fstream_wchar_vbtable1[1]); + if(basic_istream_wchar_sentry_create(this, TRUE)) + ret = basic_streambuf_wchar_sgetc(basic_ios_wchar_rdbuf_get(base)); + basic_istream_wchar_sentry_destroy(this); + return ret; } -/* ??0?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QAE@XZ */ -/* ??0?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_ctor, 8) -basic_fstream_wchar* __thiscall basic_fstream_wchar_ctor(basic_fstream_wchar *this, MSVCP_bool virt_init) +/* ?_Read_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WIH@Z */ +/* ?_Read_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_K_J@Z */ +/* ?_Read_s@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGIH@Z */ +/* ?_Read_s@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_K_J@Z */ +static basic_istream_wchar* basic_istream_wchar__Read_s(basic_istream_wchar *this, wchar_t *str, MSVCP_size_t size, streamsize count) { - basic_ios_wchar *basic_ios; + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + IOSB_iostate state = IOSTATE_goodbit; - TRACE("(%p %d)\n", this, virt_init); + TRACE("(%p %p %lu %s)\n", this, str, size, wine_dbgstr_longlong(count)); - if(virt_init) { - this->base.base1.vbtable = basic_fstream_wchar_vbtable1; - this->base.base2.vbtable = basic_fstream_wchar_vbtable2; - basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1); - basic_ios_wchar_ctor(basic_ios); + if(basic_istream_wchar_sentry_create(this, TRUE)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + + this->count = basic_streambuf_wchar__Sgetn_s(strbuf, str, size, count); + if(this->count != count) + state |= IOSTATE_failbit | IOSTATE_eofbit; }else { - basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1); + this->count = 0; } + basic_istream_wchar_sentry_destroy(this); - basic_filebuf_wchar_ctor(&this->filebuf); - basic_iostream_wchar_ctor(&this->base, &this->filebuf.base, FALSE); - basic_ios->base.vtable = &MSVCP_basic_fstream_wchar_vtable; + basic_ios_wchar_setstate(base, state); return this; } -/* ??0?$basic_fstream@GU?$char_traits@G@std@@@std@@QAE@XZ */ -/* ??0?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_fstream_short_ctor, 8) -basic_fstream_wchar* __thiscall basic_fstream_short_ctor(basic_fstream_wchar *this, MSVCP_bool virt_init) +/* ?read@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH@Z */ +/* ?read@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z */ +/* ?read@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGH@Z */ +/* ?read@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read, 16) +basic_istream_wchar* __thiscall basic_istream_wchar_read(basic_istream_wchar *this, wchar_t *str, streamsize count) { - basic_fstream_wchar_ctor(this, virt_init); - basic_istream_wchar_get_basic_ios(&this->base.base1)->base.vtable = &MSVCP_basic_fstream_short_vtable; - return this; + return basic_istream_wchar__Read_s(this, str, count, count); } -/* ??0?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QAE@PAU_iobuf@@@Z */ -/* ??0?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAU_iobuf@@@Z */ -DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_ctor_file, 12) -basic_fstream_wchar* __thiscall basic_fstream_wchar_ctor_file(basic_fstream_wchar *this, - FILE *file, MSVCP_bool virt_init) +/* ?_Readsome_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEHPA_WIH@Z */ +/* ?_Readsome_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_K_J@Z */ +/* ?_Readsome_s@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEHPAGIH@Z */ +/* ?_Readsome_s@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_K_J@Z */ +static streamsize basic_istream_wchar__Readsome_s(basic_istream_wchar *this, wchar_t *str, MSVCP_size_t size, streamsize count) { - basic_ios_wchar *basic_ios; + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + IOSB_iostate state = IOSTATE_goodbit; - TRACE("(%p %p %d)\n", this, file, virt_init); + TRACE("(%p %p %lu %s)\n", this, str, size, wine_dbgstr_longlong(count)); - if(virt_init) { - this->base.base1.vbtable = basic_fstream_wchar_vbtable1; - this->base.base2.vbtable = basic_fstream_wchar_vbtable2; - basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1); - basic_ios_wchar_ctor(basic_ios); + this->count = 0; + + if(basic_istream_wchar_sentry_create(this, TRUE)) { + streamsize avail = basic_streambuf_wchar_in_avail(basic_ios_wchar_rdbuf_get(base)); + if(avail > count) + avail = count; + + if(avail == -1) + state |= IOSTATE_eofbit; + else if(avail > 0) + basic_istream_wchar__Read_s(this, str, size, avail); }else { - basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1); + state |= IOSTATE_failbit; } + basic_istream_wchar_sentry_destroy(this); - basic_filebuf_wchar_ctor_file(&this->filebuf, file); - basic_iostream_wchar_ctor(&this->base, &this->filebuf.base, FALSE); - basic_ios->base.vtable = &MSVCP_basic_fstream_wchar_vtable; - return this; + basic_ios_wchar_setstate(base, state); + return this->count; } -/* ??0?$basic_fstream@GU?$char_traits@G@std@@@std@@QAE@PAU_iobuf@@@Z */ -/* ??0?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAA@PEAU_iobuf@@@Z */ -DEFINE_THISCALL_WRAPPER(basic_fstream_short_ctor_file, 12) -basic_fstream_wchar* __thiscall basic_fstream_short_ctor_file(basic_fstream_wchar *this, - FILE *file, MSVCP_bool virt_init) +/* ?readsome@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEHPA_WH@Z */ +/* ?readsome@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_J@Z */ +/* ?readsome@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEHPAGH@Z */ +/* ?readsome@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_J@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_readsome, 16) +streamsize __thiscall basic_istream_wchar_readsome(basic_istream_wchar *this, wchar_t *str, streamsize count) { - basic_fstream_wchar_ctor_file(this, file, virt_init); - basic_istream_wchar_get_basic_ios(&this->base.base1)->base.vtable = &MSVCP_basic_fstream_short_vtable; - return this; + return basic_istream_wchar__Readsome_s(this, str, count, count); } -/* ??0?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QAE@PB_WHH@Z */ -/* ??0?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEAA@PEB_WHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_ctor_name, 20) -basic_fstream_wchar* __thiscall basic_fstream_wchar_ctor_name(basic_fstream_wchar *this, - const char *name, int mode, int prot, MSVCP_bool virt_init) +/* ?putback@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_W@Z */ +/* ?putback@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_W@Z */ +/* ?putback@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@G@Z */ +/* ?putback@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@G@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_putback, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_putback(basic_istream_wchar *this, wchar_t ch) { - TRACE("(%p %s %d %d %d)\n", this, name, mode, prot, virt_init); - - basic_fstream_wchar_ctor(this, virt_init); - - if(!basic_filebuf_wchar_open(&this->filebuf, name, mode, prot)) { - basic_ios_wchar *basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1); - basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit); - } - return this; -} + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + IOSB_iostate state = IOSTATE_goodbit; -/* ??0?$basic_fstream@GU?$char_traits@G@std@@@std@@QAE@PBGHH@Z */ -/* ??0?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAA@PEBGHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_fstream_short_ctor_name, 20) -basic_fstream_wchar* __thiscall basic_fstream_short_ctor_name(basic_fstream_wchar *this, - const char *name, int mode, int prot, MSVCP_bool virt_init) -{ - basic_fstream_wchar_ctor_name(this, name, mode, prot, virt_init); - basic_istream_wchar_get_basic_ios(&this->base.base1)->base.vtable = &MSVCP_basic_fstream_short_vtable; - return this; -} + TRACE("(%p %c)\n", this, ch); -/* ??0?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QAE@PBGHH@Z */ -/* ??0?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEAA@PEBGHH@Z */ -/* ??0?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QAE@PB_WHH@Z */ -/* ??0?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEAA@PEB_WHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_ctor_name_wchar, 20) -basic_fstream_wchar* __thiscall basic_fstream_wchar_ctor_name_wchar(basic_fstream_wchar *this, - const wchar_t *name, int mode, int prot, MSVCP_bool virt_init) -{ - TRACE("(%p %s %d %d %d)\n", this, debugstr_w(name), mode, prot, virt_init); + this->count = 0; - basic_fstream_wchar_ctor(this, virt_init); + if(basic_istream_wchar_sentry_create(this, TRUE)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - if(!basic_filebuf_wchar_open_wchar(&this->filebuf, name, mode, prot)) { - basic_ios_wchar *basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1); - basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit); + if(!ios_base_good(&base->base)) + state |= IOSTATE_failbit; + else if(!strbuf || basic_streambuf_wchar_sputbackc(strbuf, ch)==WEOF) + state |= IOSTATE_badbit; } - return this; -} + basic_istream_wchar_sentry_destroy(this); -/* ??0?$basic_fstream@GU?$char_traits@G@std@@@std@@QAE@PBGHH@Z */ -/* ??0?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAA@PEBGHH@Z */ -/* ??0?$basic_fstream@GU?$char_traits@G@std@@@std@@QAE@PB_WHH@Z */ -/* ??0?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAA@PEB_WHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_fstream_short_ctor_name_wchar, 20) -basic_fstream_wchar* __thiscall basic_fstream_short_ctor_name_wchar(basic_fstream_wchar *this, - const wchar_t *name, int mode, int prot, MSVCP_bool virt_init) -{ - basic_fstream_wchar_ctor_name_wchar(this, name, mode, prot, virt_init); - basic_istream_wchar_get_basic_ios(&this->base.base1)->base.vtable = &MSVCP_basic_fstream_short_vtable; + basic_ios_wchar_setstate(base, state); return this; } -/* ??1?$basic_fstream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */ -/* ??1?$basic_fstream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */ -/* ??1?$basic_fstream@GU?$char_traits@G@std@@@std@@UAE@XZ */ -/* ??1?$basic_fstream@GU?$char_traits@G@std@@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_dtor, 4) -void __thiscall basic_fstream_wchar_dtor(basic_ios_wchar *base) +/* ?unget@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@XZ */ +/* ?unget@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@XZ */ +/* ?unget@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@XZ */ +/* ?unget@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@XZ */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_unget, 4) +basic_istream_wchar* __thiscall basic_istream_wchar_unget(basic_istream_wchar *this) { - basic_fstream_wchar *this = basic_fstream_wchar_from_basic_ios(base); - - TRACE("(%p)\n", this); - - basic_iostream_wchar_dtor(basic_iostream_wchar_to_basic_ios(&this->base)); - basic_filebuf_wchar_dtor(&this->filebuf); -} + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + IOSB_iostate state = IOSTATE_goodbit; -/* ??_D?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */ -/* ??_D?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */ -/* ??_D?$basic_fstream@GU?$char_traits@G@std@@@std@@QAEXXZ */ -/* ??_D?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_vbase_dtor, 4) -void __thiscall basic_fstream_wchar_vbase_dtor(basic_fstream_wchar *this) -{ TRACE("(%p)\n", this); - basic_fstream_wchar_dtor(basic_fstream_wchar_to_basic_ios(this)); - basic_ios_wchar_dtor(basic_istream_wchar_get_basic_ios(&this->base.base1)); -} - -DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_vector_dtor, 8) -basic_fstream_wchar* __thiscall basic_fstream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags) -{ - basic_fstream_wchar *this = basic_fstream_wchar_from_basic_ios(base); - - TRACE("(%p %x)\n", this, flags); + this->count = 0; - if(flags & 2) { - /* we have an array, with the number of elements stored before the first object */ - INT_PTR i, *ptr = (INT_PTR *)this-1; + if(basic_istream_wchar_sentry_create(this, TRUE)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); - for(i=*ptr-1; i>=0; i--) - basic_fstream_wchar_vbase_dtor(this+i); - MSVCRT_operator_delete(ptr); - } else { - basic_fstream_wchar_vbase_dtor(this); - if(flags & 1) - MSVCRT_operator_delete(this); + if(!ios_base_good(&base->base)) + state |= IOSTATE_failbit; + else if(!strbuf || basic_streambuf_wchar_sungetc(strbuf)==WEOF) + state |= IOSTATE_badbit; } + basic_istream_wchar_sentry_destroy(this); + basic_ios_wchar_setstate(base, state); return this; } -/* ?close@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */ -/* ?close@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */ -/* ?close@?$basic_fstream@GU?$char_traits@G@std@@@std@@QAEXXZ */ -/* ?close@?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_close, 4) -void __thiscall basic_fstream_wchar_close(basic_fstream_wchar *this) +/* ?sync@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEHXZ */ +/* ?sync@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAHXZ */ +/* ?sync@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEHXZ */ +/* ?sync@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAHXZ */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_sync, 4) +int __thiscall basic_istream_wchar_sync(basic_istream_wchar *this) { - TRACE("(%p)\n", this); - - if(!basic_filebuf_wchar_close(&this->filebuf)) { - basic_ios_wchar *basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1); - basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit); - } -} + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); -/* ?is_open@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QBE_NXZ */ -/* ?is_open@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEBA_NXZ */ -/* ?is_open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QBE_NXZ */ -/* ?is_open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QEBA_NXZ */ -DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_is_open, 4) -MSVCP_bool __thiscall basic_fstream_wchar_is_open(const basic_fstream_wchar *this) -{ TRACE("(%p)\n", this); - return basic_filebuf_wchar_is_open(&this->filebuf); -} -/* ?open@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QAEXPBDHH@Z */ -/* ?open@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEAAXPEBDHH@Z */ -/* ?open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QAEXPBDHH@Z */ -/* ?open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAAXPEBDHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_open, 16) -void __thiscall basic_fstream_wchar_open(basic_fstream_wchar *this, - const char *name, int mode, int prot) -{ - TRACE("(%p %s %d %d)\n", this, name, mode, prot); + if(!strbuf) + return -1; - if(!basic_filebuf_wchar_open(&this->filebuf, name, mode, prot)) { - basic_ios_wchar *basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1); - basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit); + if(basic_istream_wchar_sentry_create(this, TRUE)) { + if(basic_streambuf_wchar_pubsync(strbuf) != -1) { + basic_istream_wchar_sentry_destroy(this); + return 0; + } } -} + basic_istream_wchar_sentry_destroy(this); -/* ?open@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QAEXPBDI@Z */ -/* ?open@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEAAXPEBDI@Z */ -/* ?open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QAEXPBDI@Z */ -/* ?open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAAXPEBDI@Z */ -DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_open_old, 12) -void __thiscall basic_fstream_wchar_open_old(basic_fstream_wchar *this, - const char *name, unsigned int mode) -{ - basic_fstream_wchar_open(this, name, mode, _SH_DENYNO); + basic_ios_wchar_setstate(base, IOSTATE_badbit); + return -1; } -/* ?open@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QAEXPBGHH@Z */ -/* ?open@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEAAXPEBGHH@Z */ -/* ?open@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QAEXPB_WHH@Z */ -/* ?open@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEAAXPEB_WHH@Z */ -/* ?open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QAEXPBGHH@Z */ -/* ?open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAAXPEBGHH@Z */ -/* ?open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QAEXPB_WHH@Z */ -/* ?open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAAXPEB_WHH@Z */ -DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_open_wchar, 16) -void __thiscall basic_fstream_wchar_open_wchar(basic_fstream_wchar *this, - const wchar_t *name, int mode, int prot) +/* ?tellg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@XZ */ +/* ?tellg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@XZ */ +/* ?tellg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@XZ */ +/* ?tellg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@XZ */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_tellg, 8) +fpos_int* __thiscall basic_istream_wchar_tellg(basic_istream_wchar *this, fpos_int *ret) { - TRACE("(%p %s %d %d)\n", this, debugstr_w(name), mode, prot); + TRACE("(%p %p)\n", this, ret); - if(!basic_filebuf_wchar_open_wchar(&this->filebuf, name, mode, prot)) { - basic_ios_wchar *basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1); - basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit); - } -} + if(basic_istream_wchar_sentry_create(this, TRUE)) { + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + if(!ios_base_fail(&base->base)) { + basic_streambuf_wchar_pubseekoff(basic_ios_wchar_rdbuf_get(base), + ret, 0, SEEKDIR_cur, OPENMODE_in); + basic_istream_wchar_sentry_destroy(this); -/* ?open@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QAEXPBGI@Z */ -/* ?open@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEAAXPEBGI@Z */ -/* ?open@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QAEXPB_WI@Z */ -/* ?open@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEAAXPEB_WI@Z */ -/* ?open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QAEXPBGI@Z */ -/* ?open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAAXPEBGI@Z */ -/* ?open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QAEXPB_WI@Z */ -/* ?open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAAXPEB_WI@Z */ -DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_open_wchar_old, 12) -void __thiscall basic_fstream_wchar_open_wchar_old(basic_fstream_wchar *this, - const wchar_t *name, unsigned int mode) -{ - basic_fstream_wchar_open_wchar(this, name, mode, _SH_DENYNO); -} + if(ret->off==0 && ret->pos==-1 && ret->state==0) + basic_ios_wchar_setstate(base, IOSTATE_failbit); + return ret; + } + } + basic_istream_wchar_sentry_destroy(this); -/* ?rdbuf@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_filebuf@_WU?$char_traits@_W@std@@@2@XZ */ -/* ?rdbuf@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_filebuf@_WU?$char_traits@_W@std@@@2@XZ */ -/* ?rdbuf@?$basic_fstream@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_filebuf@GU?$char_traits@G@std@@@2@XZ */ -/* ?rdbuf@?$basic_fstream@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_filebuf@GU?$char_traits@G@std@@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_rdbuf, 4) -basic_filebuf_wchar* __thiscall basic_fstream_wchar_rdbuf(const basic_fstream_wchar *this) -{ - TRACE("(%p)\n", this); - return (basic_filebuf_wchar*)&this->filebuf; + ret->off = 0; + ret->pos = -1; + ret->state = 0; + return ret; } -static inline basic_ios_char* basic_ostringstream_char_to_basic_ios(basic_ostringstream_char *ptr) +/* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@JH@Z */ +/* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JH@Z */ +/* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@JH@Z */ +/* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JH@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_seekg, 16) +basic_istream_wchar* __thiscall basic_istream_wchar_seekg(basic_istream_wchar *this, streamoff off, int dir) { - return (basic_ios_char*)((char*)ptr+basic_ostringstream_char_vbtable[1]); -} + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); -static inline basic_ostringstream_char* basic_ostringstream_char_from_basic_ios(basic_ios_char *ptr) -{ - return (basic_ostringstream_char*)((char*)ptr-basic_ostringstream_char_vbtable[1]); -} + TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(off), dir); -/* ??0?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@H@Z */ -/* ??0?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostringstream_char_ctor_str, 16) -basic_ostringstream_char* __thiscall basic_ostringstream_char_ctor_str(basic_ostringstream_char *this, - const basic_string_char *str, int mode, MSVCP_bool virt_init) -{ - basic_ios_char *basic_ios; + if(basic_istream_wchar_sentry_create(this, TRUE)) { + if(!ios_base_fail(&base->base)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + fpos_int ret; - TRACE("(%p %p %d %d)\n", this, str, mode, virt_init); + basic_streambuf_wchar_pubseekoff(strbuf, &ret, off, dir, OPENMODE_in); + basic_istream_wchar_sentry_destroy(this); - if(virt_init) { - this->base.vbtable = basic_ostringstream_char_vbtable; - basic_ios = basic_ostream_char_get_basic_ios(&this->base); - basic_ios_char_ctor(basic_ios); - }else { - basic_ios = basic_ostream_char_get_basic_ios(&this->base); + if(ret.off==0 && ret.pos==-1 && ret.state==0) + basic_ios_wchar_setstate(base, IOSTATE_failbit); + else + basic_ios_wchar_clear(base, IOSTATE_goodbit); + return this; + } } + basic_istream_wchar_sentry_destroy(this); - basic_stringbuf_char_ctor_str(&this->strbuf, str, mode|OPENMODE_out); - basic_ostream_char_ctor(&this->base, &this->strbuf.base, FALSE, FALSE); - basic_ios->base.vtable = &MSVCP_basic_ostringstream_char_vtable; + basic_ios_wchar_setstate(base, IOSTATE_failbit); return this; } -/* ??0?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@H@Z */ -/* ??0?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostringstream_char_ctor_mode, 12) -basic_ostringstream_char* __thiscall basic_ostringstream_char_ctor_mode( - basic_ostringstream_char *this, int mode, MSVCP_bool virt_init) +/* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */ +/* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */ +/* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */ +/* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_seekg_fpos, 28) +basic_istream_wchar* __thiscall basic_istream_wchar_seekg_fpos(basic_istream_wchar *this, fpos_int pos) { - basic_ios_char *basic_ios; - - TRACE("(%p %d %d)\n", this, mode, virt_init); - - if(virt_init) { - this->base.vbtable = basic_ostringstream_char_vbtable; - basic_ios = basic_ostream_char_get_basic_ios(&this->base); - basic_ios_char_ctor(basic_ios); - }else { - basic_ios = basic_ostream_char_get_basic_ios(&this->base); - } + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); - basic_stringbuf_char_ctor_mode(&this->strbuf, mode|OPENMODE_out); - basic_ostream_char_ctor(&this->base, &this->strbuf.base, FALSE, FALSE); - basic_ios->base.vtable = &MSVCP_basic_ostringstream_char_vtable; - return this; -} + TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos)); -/* ??_F?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */ -/* ??_F?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_ostringstream_char_ctor, 8) -basic_ostringstream_char* __thiscall basic_ostringstream_char_ctor( - basic_ostringstream_char *this, MSVCP_bool virt_init) -{ - return basic_ostringstream_char_ctor_mode(this, 0, virt_init); -} + if(basic_istream_wchar_sentry_create(this, TRUE)) { + if(!ios_base_fail(&base->base)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + fpos_int ret; -/* ??1?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UAE@XZ */ -/* ??1?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ostringstream_char_dtor, 4) -void __thiscall basic_ostringstream_char_dtor(basic_ios_char *base) -{ - basic_ostringstream_char *this = basic_ostringstream_char_from_basic_ios(base); + basic_streambuf_wchar_pubseekpos(strbuf, &ret, pos, OPENMODE_in); + basic_istream_wchar_sentry_destroy(this); - TRACE("(%p)\n", this); + if(ret.off==0 && ret.pos==-1 && ret.state==0) + basic_ios_wchar_setstate(base, IOSTATE_failbit); + else + basic_ios_wchar_clear(base, IOSTATE_goodbit); + return this; + } + } + basic_istream_wchar_sentry_destroy(this); - basic_stringbuf_char_dtor(&this->strbuf); - basic_ostream_char_dtor(basic_ostream_char_to_basic_ios(&this->base)); + basic_ios_wchar_setstate(base, IOSTATE_failbit); + return this; } -/* ??_D?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */ -/* ??_D?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_ostringstream_char_vbase_dtor, 4) -void __thiscall basic_ostringstream_char_vbase_dtor(basic_ostringstream_char *this) +static basic_istream_wchar* basic_istream_read_short(basic_istream_wchar *this, short *v, const num_get *numget) { - TRACE("(%p)\n", this); - - basic_ostringstream_char_dtor(basic_ostringstream_char_to_basic_ios(this)); - basic_ios_char_dtor(basic_ostream_char_get_basic_ios(&this->base)); -} + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; -DEFINE_THISCALL_WRAPPER(basic_ostringstream_char_vector_dtor, 8) -basic_ostringstream_char* __thiscall basic_ostringstream_char_vector_dtor(basic_ios_char *base, unsigned int flags) -{ - basic_ostringstream_char *this = basic_ostringstream_char_from_basic_ios(base); + TRACE("(%p %p)\n", this, v); - TRACE("(%p %x)\n", this, flags); + if(basic_istream_wchar_sentry_create(this, FALSE)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + istreambuf_iterator_wchar first={0}, last={0}; + LONG tmp; - if(flags & 2) { - /* we have an array, with the number of elements stored before the first object */ - INT_PTR i, *ptr = (INT_PTR *)this-1; + first.strbuf = strbuf; + num_get_wchar_get_long(numget, &last, first, last, &base->base, &state, &tmp); - for(i=*ptr-1; i>=0; i--) - basic_ostringstream_char_vbase_dtor(this+i); - MSVCRT_operator_delete(ptr); - } else { - basic_ostringstream_char_vbase_dtor(this); - if(flags & 1) - MSVCRT_operator_delete(this); + if(!(state&IOSTATE_failbit) && tmp==(LONG)((short)tmp)) + *v = tmp; + else + state |= IOSTATE_failbit; } + basic_istream_wchar_sentry_destroy(this); + basic_ios_wchar_setstate(base, state); return this; } -/* ?rdbuf@?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPAV?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -/* ?rdbuf@?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEAV?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ostringstream_char_rdbuf, 4) -basic_stringbuf_char* __thiscall basic_ostringstream_char_rdbuf(const basic_ostringstream_char *this) -{ - TRACE("(%p)\n", this); - return (basic_stringbuf_char*)&this->strbuf; -} - -/* ?str@?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */ -/* ?str@?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostringstream_char_str_set, 8) -void __thiscall basic_ostringstream_char_str_set(basic_ostringstream_char *this, const basic_string_char *str) -{ - TRACE("(%p %p)\n", this, str); - basic_stringbuf_char_str_set(&this->strbuf, str); -} - -/* ?str@?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -/* ?str@?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ostringstream_char_str_get, 8) -basic_string_char* __thiscall basic_ostringstream_char_str_get(const basic_ostringstream_char *this, basic_string_char *ret) +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAF@Z */ +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAF@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_short, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_read_short(basic_istream_wchar *this, short *v) { - TRACE("(%p %p)\n", this, ret); - return basic_stringbuf_char_str_get(&this->strbuf, ret); + return basic_istream_read_short(this, v, num_get_wchar_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); } -static inline basic_ios_wchar* basic_ostringstream_wchar_to_basic_ios(basic_ostringstream_wchar *ptr) +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAF@Z */ +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAF@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_short_read_short, 8) +basic_istream_wchar* __thiscall basic_istream_short_read_short(basic_istream_wchar *this, short *v) { - return (basic_ios_wchar*)((char*)ptr+basic_ostringstream_wchar_vbtable[1]); + return basic_istream_read_short(this, v, num_get_short_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); } -static inline basic_ostringstream_wchar* basic_ostringstream_wchar_from_basic_ios(basic_ios_wchar *ptr) +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAG@Z */ +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAG@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_ushort, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_read_ushort(basic_istream_wchar *this, unsigned short *v) { - return (basic_ostringstream_wchar*)((char*)ptr-basic_ostringstream_wchar_vbtable[1]); -} + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; -/* ??0?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@1@H@Z */ -/* ??0?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@AEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@1@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostringstream_wchar_ctor_str, 16) -basic_ostringstream_wchar* __thiscall basic_ostringstream_wchar_ctor_str(basic_ostringstream_wchar *this, - const basic_string_wchar *str, int mode, MSVCP_bool virt_init) -{ - basic_ios_wchar *basic_ios; + TRACE("(%p %p)\n", this, v); - TRACE("(%p %p %d %d)\n", this, str, mode, virt_init); + if(basic_istream_wchar_sentry_create(this, FALSE)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + const num_get *numget = num_get_wchar_use_facet(strbuf->loc); + istreambuf_iterator_wchar first={0}, last={0}; - if(virt_init) { - this->base.vbtable = basic_ostringstream_wchar_vbtable; - basic_ios = basic_ostream_wchar_get_basic_ios(&this->base); - basic_ios_wchar_ctor(basic_ios); - }else { - basic_ios = basic_ostream_wchar_get_basic_ios(&this->base); + first.strbuf = strbuf; + num_get_wchar_get_ushort(numget, &last, first, last, &base->base, &state, v); } + basic_istream_wchar_sentry_destroy(this); - basic_stringbuf_wchar_ctor_str(&this->strbuf, str, mode|OPENMODE_out); - basic_ostream_wchar_ctor(&this->base, &this->strbuf.base, FALSE, FALSE); - basic_ios->base.vtable = &MSVCP_basic_ostringstream_wchar_vtable; + basic_ios_wchar_setstate(base, state); return this; } -/* ??0?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@1@H@Z */ -/* ??0?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@1@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostringstream_short_ctor_str, 16) -basic_ostringstream_wchar* __thiscall basic_ostringstream_short_ctor_str(basic_ostringstream_wchar *this, - const basic_string_wchar *str, int mode, MSVCP_bool virt_init) +static basic_istream_wchar* basic_istream_read_int(basic_istream_wchar *this, int *v, const num_get *numget) { - basic_ostringstream_wchar_ctor_str(this, str, mode, virt_init); - basic_ostream_wchar_get_basic_ios(&this->base)->base.vtable = &MSVCP_basic_ostringstream_short_vtable; - return this; -} + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; -/* ??0?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@H@Z */ -/* ??0?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostringstream_wchar_ctor_mode, 12) -basic_ostringstream_wchar* __thiscall basic_ostringstream_wchar_ctor_mode( - basic_ostringstream_wchar *this, int mode, MSVCP_bool virt_init) -{ - basic_ios_wchar *basic_ios; + TRACE("(%p %p)\n", this, v); - TRACE("(%p %d %d)\n", this, mode, virt_init); + if(basic_istream_wchar_sentry_create(this, FALSE)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + istreambuf_iterator_wchar first={0}, last={0}; - if(virt_init) { - this->base.vbtable = basic_ostringstream_wchar_vbtable; - basic_ios = basic_ostream_wchar_get_basic_ios(&this->base); - basic_ios_wchar_ctor(basic_ios); - }else { - basic_ios = basic_ostream_wchar_get_basic_ios(&this->base); + first.strbuf = strbuf; + num_get_wchar_get_long(numget, &last, first, last, &base->base, &state, v); } + basic_istream_wchar_sentry_destroy(this); - basic_stringbuf_wchar_ctor_mode(&this->strbuf, mode|OPENMODE_out); - basic_ostream_wchar_ctor(&this->base, &this->strbuf.base, FALSE, FALSE); - basic_ios->base.vtable = &MSVCP_basic_ostringstream_wchar_vtable; + basic_ios_wchar_setstate(base, state); return this; } -/* ??0?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@H@Z */ -/* ??0?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostringstream_short_ctor_mode, 12) -basic_ostringstream_wchar* __thiscall basic_ostringstream_short_ctor_mode( - basic_ostringstream_wchar *this, int mode, MSVCP_bool virt_init) +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAH@Z */ +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAH@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_int, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_read_int(basic_istream_wchar *this, int *v) { - basic_ostringstream_wchar_ctor_mode(this, mode, virt_init); - basic_ostream_wchar_get_basic_ios(&this->base)->base.vtable = &MSVCP_basic_ostringstream_short_vtable; - return this; + return basic_istream_read_int(this, v, num_get_wchar_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); } -/* ??_F?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXXZ */ -/* ??_F?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_ostringstream_wchar_ctor, 8) -basic_ostringstream_wchar* __thiscall basic_ostringstream_wchar_ctor( - basic_ostringstream_wchar *this, MSVCP_bool virt_init) +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAH@Z */ +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAH@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_short_read_int, 8) +basic_istream_wchar* __thiscall basic_istream_short_read_int(basic_istream_wchar *this, int *v) { - return basic_ostringstream_wchar_ctor_mode(this, 0, virt_init); + return basic_istream_read_int(this, v, num_get_short_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); } -/* ??_F?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */ -/* ??_F?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_ostringstream_short_ctor, 8) -basic_ostringstream_wchar* __thiscall basic_ostringstream_short_ctor( - basic_ostringstream_wchar *this, MSVCP_bool virt_init) +static basic_istream_wchar* basic_istream_read_uint(basic_istream_wchar *this, unsigned int *v, const num_get *numget) { - return basic_ostringstream_short_ctor_mode(this, 0, virt_init); -} + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; -/* ??1?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@UAE@XZ */ -/* ??1?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@UEAA@XZ */ -/* ??1?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@UAE@XZ */ -/* ??1?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ostringstream_wchar_dtor, 4) -void __thiscall basic_ostringstream_wchar_dtor(basic_ios_wchar *base) -{ - basic_ostringstream_wchar *this = basic_ostringstream_wchar_from_basic_ios(base); + TRACE("(%p %p)\n", this, v); - TRACE("(%p)\n", this); + if(basic_istream_wchar_sentry_create(this, FALSE)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + istreambuf_iterator_wchar first={0}, last={0}; + + first.strbuf = strbuf; + num_get_wchar_get_uint(numget, &last, first, last, &base->base, &state, v); + } + basic_istream_wchar_sentry_destroy(this); - basic_stringbuf_wchar_dtor(&this->strbuf); - basic_ostream_wchar_dtor(basic_ostream_wchar_to_basic_ios(&this->base)); + basic_ios_wchar_setstate(base, state); + return this; } -/* ??_D?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXXZ */ -/* ??_D?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXXZ */ -/* ??_D?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */ -/* ??_D?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_ostringstream_wchar_vbase_dtor, 4) -void __thiscall basic_ostringstream_wchar_vbase_dtor(basic_ostringstream_wchar *this) +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAI@Z */ +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAI@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_uint, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_read_uint(basic_istream_wchar *this, unsigned int *v) { - TRACE("(%p)\n", this); + return basic_istream_read_uint(this, v, num_get_wchar_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); +} - basic_ostringstream_wchar_dtor(basic_ostringstream_wchar_to_basic_ios(this)); - basic_ios_wchar_dtor(basic_ostream_wchar_get_basic_ios(&this->base)); +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAI@Z */ +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAI@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_short_read_uint, 8) +basic_istream_wchar* __thiscall basic_istream_short_read_uint(basic_istream_wchar *this, unsigned int *v) +{ + return basic_istream_read_uint(this, v, num_get_short_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); } -DEFINE_THISCALL_WRAPPER(basic_ostringstream_wchar_vector_dtor, 8) -basic_ostringstream_wchar* __thiscall basic_ostringstream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags) +static basic_istream_wchar* basic_istream_read_long(basic_istream_wchar *this, LONG *v, const num_get *numget) { - basic_ostringstream_wchar *this = basic_ostringstream_wchar_from_basic_ios(base); + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; - TRACE("(%p %x)\n", this, flags); + TRACE("(%p %p)\n", this, v); - if(flags & 2) { - /* we have an array, with the number of elements stored before the first object */ - INT_PTR i, *ptr = (INT_PTR *)this-1; + if(basic_istream_wchar_sentry_create(this, FALSE)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + istreambuf_iterator_wchar first={0}, last={0}; - for(i=*ptr-1; i>=0; i--) - basic_ostringstream_wchar_vbase_dtor(this+i); - MSVCRT_operator_delete(ptr); - } else { - basic_ostringstream_wchar_vbase_dtor(this); - if(flags & 1) - MSVCRT_operator_delete(this); + first.strbuf = strbuf; + num_get_wchar_get_long(numget, &last, first, last, &base->base, &state, v); } + basic_istream_wchar_sentry_destroy(this); + basic_ios_wchar_setstate(base, state); return this; } -/* ?rdbuf@?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEPAV?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?rdbuf@?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAPEAV?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?rdbuf@?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPAV?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -/* ?rdbuf@?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEAV?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ostringstream_wchar_rdbuf, 4) -basic_stringbuf_wchar* __thiscall basic_ostringstream_wchar_rdbuf(const basic_ostringstream_wchar *this) -{ - TRACE("(%p)\n", this); - return (basic_stringbuf_wchar*)&this->strbuf; -} - -/* ?str@?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z */ -/* ?str@?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z */ -/* ?str@?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z */ -/* ?str@?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z */ -DEFINE_THISCALL_WRAPPER(basic_ostringstream_wchar_str_set, 8) -void __thiscall basic_ostringstream_wchar_str_set(basic_ostringstream_wchar *this, const basic_string_wchar *str) -{ - TRACE("(%p %p)\n", this, str); - basic_stringbuf_wchar_str_set(&this->strbuf, str); -} - -/* ?str@?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?str@?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?str@?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -/* ?str@?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_ostringstream_wchar_str_get, 8) -basic_string_wchar* __thiscall basic_ostringstream_wchar_str_get(const basic_ostringstream_wchar *this, basic_string_wchar *ret) -{ - TRACE("(%p %p)\n", this, ret); - return basic_stringbuf_wchar_str_get(&this->strbuf, ret); -} - -static inline basic_ios_char* basic_istringstream_char_to_basic_ios(basic_istringstream_char *ptr) +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAJ@Z */ +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAJ@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_long, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_read_long(basic_istream_wchar *this, LONG *v) { - return (basic_ios_char*)((char*)ptr+basic_istringstream_char_vbtable[1]); + return basic_istream_read_long(this, v, num_get_wchar_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); } -static inline basic_istringstream_char* basic_istringstream_char_from_basic_ios(basic_ios_char *ptr) +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAJ@Z */ +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAJ@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_short_read_long, 8) +basic_istream_wchar* __thiscall basic_istream_short_read_long(basic_istream_wchar *this, LONG *v) { - return (basic_istringstream_char*)((char*)ptr-basic_istringstream_char_vbtable[1]); + return basic_istream_read_long(this, v, num_get_short_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); } -/* ??0?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@H@Z */ -/* ??0?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_istringstream_char_ctor_str, 16) -basic_istringstream_char* __thiscall basic_istringstream_char_ctor_str(basic_istringstream_char *this, - const basic_string_char *str, int mode, MSVCP_bool virt_init) +static basic_istream_wchar* basic_istream_read_ulong(basic_istream_wchar *this, ULONG *v, const num_get *numget) { - basic_ios_char *basic_ios; - - TRACE("(%p %p %d %d)\n", this, str, mode, virt_init); - - if(virt_init) { - this->base.vbtable = basic_istringstream_char_vbtable; - basic_ios = basic_istream_char_get_basic_ios(&this->base); - basic_ios_char_ctor(basic_ios); - }else { - basic_ios = basic_istream_char_get_basic_ios(&this->base); - } - - basic_stringbuf_char_ctor_str(&this->strbuf, str, mode|OPENMODE_in); - basic_istream_char_ctor(&this->base, &this->strbuf.base, FALSE, FALSE); - basic_ios->base.vtable = &MSVCP_basic_istringstream_char_vtable; - return this; -} + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; -/* ??0?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@H@Z */ -/* ??0?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_istringstream_char_ctor_mode, 12) -basic_istringstream_char* __thiscall basic_istringstream_char_ctor_mode( - basic_istringstream_char *this, int mode, MSVCP_bool virt_init) -{ - basic_ios_char *basic_ios; + TRACE("(%p %p)\n", this, v); - TRACE("(%p %d %d)\n", this, mode, virt_init); + if(basic_istream_wchar_sentry_create(this, FALSE)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + istreambuf_iterator_wchar first={0}, last={0}; - if(virt_init) { - this->base.vbtable = basic_istringstream_char_vbtable; - basic_ios = basic_istream_char_get_basic_ios(&this->base); - basic_ios_char_ctor(basic_ios); - }else { - basic_ios = basic_istream_char_get_basic_ios(&this->base); + first.strbuf = strbuf; + num_get_wchar_get_ulong(numget, &last, first, last, &base->base, &state, v); } + basic_istream_wchar_sentry_destroy(this); - basic_stringbuf_char_ctor_mode(&this->strbuf, mode|OPENMODE_in); - basic_istream_char_ctor(&this->base, &this->strbuf.base, FALSE, FALSE); - basic_ios->base.vtable = &MSVCP_basic_istringstream_char_vtable; + basic_ios_wchar_setstate(base, state); return this; } -/* ??_F?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */ -/* ??_F?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_istringstream_char_ctor, 8) -basic_istringstream_char* __thiscall basic_istringstream_char_ctor( - basic_istringstream_char *this, MSVCP_bool virt_init) -{ - return basic_istringstream_char_ctor_mode(this, 0, virt_init); -} - -/* ??1?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UAE@XZ */ -/* ??1?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_istringstream_char_dtor, 4) -void __thiscall basic_istringstream_char_dtor(basic_ios_char *base) +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAK@Z */ +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAK@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_ulong, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_read_ulong(basic_istream_wchar *this, ULONG *v) { - basic_istringstream_char *this = basic_istringstream_char_from_basic_ios(base); - - TRACE("(%p)\n", this); - - basic_stringbuf_char_dtor(&this->strbuf); - basic_istream_char_dtor(basic_istream_char_to_basic_ios(&this->base)); + return basic_istream_read_ulong(this, v, num_get_wchar_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); } -/* ??_D?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */ -/* ??_D?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_istringstream_char_vbase_dtor, 4) -void __thiscall basic_istringstream_char_vbase_dtor(basic_istringstream_char *this) +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAK@Z */ +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAK@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_short_read_ulong, 8) +basic_istream_wchar* __thiscall basic_istream_short_read_ulong(basic_istream_wchar *this, ULONG *v) { - TRACE("(%p)\n", this); - - basic_istringstream_char_dtor(basic_istringstream_char_to_basic_ios(this)); - basic_ios_char_dtor(basic_istream_char_get_basic_ios(&this->base)); + return basic_istream_read_ulong(this, v, num_get_short_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); } -DEFINE_THISCALL_WRAPPER(basic_istringstream_char_vector_dtor, 8) -basic_istringstream_char* __thiscall basic_istringstream_char_vector_dtor(basic_ios_char *base, unsigned int flags) +static basic_istream_wchar* basic_istream_read_float(basic_istream_wchar *this, float *v, const num_get *numget) { - basic_istringstream_char *this = basic_istringstream_char_from_basic_ios(base); + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; - TRACE("(%p %x)\n", this, flags); + TRACE("(%p %p)\n", this, v); - if(flags & 2) { - /* we have an array, with the number of elements stored before the first object */ - INT_PTR i, *ptr = (INT_PTR *)this-1; + if(basic_istream_wchar_sentry_create(this, FALSE)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + istreambuf_iterator_wchar first={0}, last={0}; - for(i=*ptr-1; i>=0; i--) - basic_istringstream_char_vbase_dtor(this+i); - MSVCRT_operator_delete(ptr); - } else { - basic_istringstream_char_vbase_dtor(this); - if(flags & 1) - MSVCRT_operator_delete(this); + first.strbuf = strbuf; + num_get_wchar_get_float(numget, &last, first, last, &base->base, &state, v); } + basic_istream_wchar_sentry_destroy(this); + basic_ios_wchar_setstate(base, state); return this; } -/* ?rdbuf@?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPAV?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -/* ?rdbuf@?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEAV?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_istringstream_char_rdbuf, 4) -basic_stringbuf_char* __thiscall basic_istringstream_char_rdbuf(const basic_istringstream_char *this) -{ - TRACE("(%p)\n", this); - return (basic_stringbuf_char*)&this->strbuf; -} - -/* ?str@?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */ -/* ?str@?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */ -DEFINE_THISCALL_WRAPPER(basic_istringstream_char_str_set, 8) -void __thiscall basic_istringstream_char_str_set(basic_istringstream_char *this, const basic_string_char *str) -{ - TRACE("(%p %p)\n", this, str); - basic_stringbuf_char_str_set(&this->strbuf, str); -} - -/* ?str@?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -/* ?str@?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_istringstream_char_str_get, 8) -basic_string_char* __thiscall basic_istringstream_char_str_get(const basic_istringstream_char *this, basic_string_char *ret) +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAM@Z */ +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAM@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_float, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_read_float(basic_istream_wchar *this, float *v) { - TRACE("(%p %p)\n", this, ret); - return basic_stringbuf_char_str_get(&this->strbuf, ret); + return basic_istream_read_float(this, v, num_get_wchar_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); } -static inline basic_ios_wchar* basic_istringstream_wchar_to_basic_ios(basic_istringstream_wchar *ptr) +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAM@Z */ +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAM@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_short_read_float, 8) +basic_istream_wchar* __thiscall basic_istream_short_read_float(basic_istream_wchar *this, float *v) { - return (basic_ios_wchar*)((char*)ptr+basic_istringstream_wchar_vbtable[1]); + return basic_istream_read_float(this, v, num_get_short_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); } -static inline basic_istringstream_wchar* basic_istringstream_wchar_from_basic_ios(basic_ios_wchar *ptr) +static basic_istream_wchar* basic_istream_read_double(basic_istream_wchar *this, double *v, const num_get *numget) { - return (basic_istringstream_wchar*)((char*)ptr-basic_istringstream_wchar_vbtable[1]); -} + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; -/* ??0?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@1@H@Z */ -/* ??0?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@AEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@1@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_istringstream_wchar_ctor_str, 16) -basic_istringstream_wchar* __thiscall basic_istringstream_wchar_ctor_str(basic_istringstream_wchar *this, - const basic_string_wchar *str, int mode, MSVCP_bool virt_init) -{ - basic_ios_wchar *basic_ios; + TRACE("(%p %p)\n", this, v); - TRACE("(%p %p %d %d)\n", this, str, mode, virt_init); + if(basic_istream_wchar_sentry_create(this, FALSE)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + istreambuf_iterator_wchar first={0}, last={0}; - if(virt_init) { - this->base.vbtable = basic_istringstream_wchar_vbtable; - basic_ios = basic_istream_wchar_get_basic_ios(&this->base); - basic_ios_wchar_ctor(basic_ios); - }else { - basic_ios = basic_istream_wchar_get_basic_ios(&this->base); + first.strbuf = strbuf; + num_get_wchar_get_double(numget, &last, first, last, &base->base, &state, v); } + basic_istream_wchar_sentry_destroy(this); - basic_stringbuf_wchar_ctor_str(&this->strbuf, str, mode|OPENMODE_in); - basic_istream_wchar_ctor(&this->base, &this->strbuf.base, FALSE, FALSE); - basic_ios->base.vtable = &MSVCP_basic_istringstream_wchar_vtable; + basic_ios_wchar_setstate(base, state); return this; } -/* ??0?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@1@H@Z */ -/* ??0?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@1@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_istringstream_short_ctor_str, 16) -basic_istringstream_wchar* __thiscall basic_istringstream_short_ctor_str(basic_istringstream_wchar *this, - const basic_string_wchar *str, int mode, MSVCP_bool virt_init) +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAN@Z */ +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAN@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_double, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_read_double(basic_istream_wchar *this, double *v) { - basic_istringstream_wchar_ctor_str(this, str, mode, virt_init); - basic_istream_wchar_get_basic_ios(&this->base)->base.vtable = &MSVCP_basic_istringstream_short_vtable; - return this; + return basic_istream_read_double(this, v, num_get_wchar_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); } -/* ??0?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@H@Z */ -/* ??0?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_istringstream_wchar_ctor_mode, 12) -basic_istringstream_wchar* __thiscall basic_istringstream_wchar_ctor_mode( - basic_istringstream_wchar *this, int mode, MSVCP_bool virt_init) +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAN@Z */ +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAN@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_short_read_double, 8) +basic_istream_wchar* __thiscall basic_istream_short_read_double(basic_istream_wchar *this, double *v) { - basic_ios_wchar *basic_ios; + return basic_istream_read_double(this, v, num_get_short_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); +} - TRACE("(%p %d %d)\n", this, mode, virt_init); +static basic_istream_wchar* basic_istream_read_ldouble(basic_istream_wchar *this, double *v, const num_get *numget) +{ + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; - if(virt_init) { - this->base.vbtable = basic_istringstream_wchar_vbtable; - basic_ios = basic_istream_wchar_get_basic_ios(&this->base); - basic_ios_wchar_ctor(basic_ios); - }else { - basic_ios = basic_istream_wchar_get_basic_ios(&this->base); + TRACE("(%p %p)\n", this, v); + + if(basic_istream_wchar_sentry_create(this, FALSE)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + istreambuf_iterator_wchar first={0}, last={0}; + + first.strbuf = strbuf; + num_get_wchar_get_ldouble(numget, &last, first, last, &base->base, &state, v); } + basic_istream_wchar_sentry_destroy(this); - basic_stringbuf_wchar_ctor_mode(&this->strbuf, mode|OPENMODE_in); - basic_istream_wchar_ctor(&this->base, &this->strbuf.base, FALSE, FALSE); - basic_ios->base.vtable = &MSVCP_basic_istringstream_wchar_vtable; + basic_ios_wchar_setstate(base, state); return this; } -/* ??0?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@H@Z */ -/* ??0?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_istringstream_short_ctor_mode, 12) -basic_istringstream_wchar* __thiscall basic_istringstream_short_ctor_mode( - basic_istringstream_wchar *this, int mode, MSVCP_bool virt_init) +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAO@Z */ +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAO@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_ldouble, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_read_ldouble(basic_istream_wchar *this, double *v) { - basic_istringstream_wchar_ctor_mode(this, mode, virt_init); - basic_istream_wchar_get_basic_ios(&this->base)->base.vtable = &MSVCP_basic_istringstream_short_vtable; - return this; + return basic_istream_read_ldouble(this, v, num_get_wchar_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); } -/* ??_F?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXXZ */ -/* ??_F?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_istringstream_wchar_ctor, 8) -basic_istringstream_wchar* __thiscall basic_istringstream_wchar_ctor( - basic_istringstream_wchar *this, MSVCP_bool virt_init) +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAO@Z */ +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAO@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_short_read_ldouble, 8) +basic_istream_wchar* __thiscall basic_istream_short_read_ldouble(basic_istream_wchar *this, double *v) { - return basic_istringstream_wchar_ctor_mode(this, 0, virt_init); + return basic_istream_read_ldouble(this, v, num_get_short_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); } -/* ??_F?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */ -/* ??_F?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_istringstream_short_ctor, 8) -basic_istringstream_wchar* __thiscall basic_istringstream_short_ctor( - basic_istringstream_wchar *this, MSVCP_bool virt_init) +static basic_istream_wchar* basic_istream_read_ptr(basic_istream_wchar *this, void **v, const num_get *numget) { - return basic_istringstream_short_ctor_mode(this, 0, virt_init); -} + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; -/* ??1?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@UAE@XZ */ -/* ??1?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@UEAA@XZ */ -/* ??1?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@UAE@XZ */ -/* ??1?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_istringstream_wchar_dtor, 4) -void __thiscall basic_istringstream_wchar_dtor(basic_ios_wchar *base) -{ - basic_istringstream_wchar *this = basic_istringstream_wchar_from_basic_ios(base); + TRACE("(%p %p)\n", this, v); - TRACE("(%p)\n", this); + if(basic_istream_wchar_sentry_create(this, FALSE)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + istreambuf_iterator_wchar first={0}, last={0}; + + first.strbuf = strbuf; + num_get_wchar_get_void(numget, &last, first, last, &base->base, &state, v); + } + basic_istream_wchar_sentry_destroy(this); - basic_stringbuf_wchar_dtor(&this->strbuf); - basic_istream_wchar_dtor(basic_istream_wchar_to_basic_ios(&this->base)); + basic_ios_wchar_setstate(base, state); + return this; } -/* ??_D?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXXZ */ -/* ??_D?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXXZ */ -/* ??_D?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */ -/* ??_D?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_istringstream_wchar_vbase_dtor, 4) -void __thiscall basic_istringstream_wchar_vbase_dtor(basic_istringstream_wchar *this) +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAPAX@Z */ +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAPEAX@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_ptr, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_read_ptr(basic_istream_wchar *this, void **v) { - TRACE("(%p)\n", this); + return basic_istream_read_ptr(this, v, num_get_wchar_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); +} - basic_istringstream_wchar_dtor(basic_istringstream_wchar_to_basic_ios(this)); - basic_ios_wchar_dtor(basic_istream_wchar_get_basic_ios(&this->base)); +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAPAX@Z */ +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAPEAX@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_short_read_ptr, 8) +basic_istream_wchar* __thiscall basic_istream_short_read_ptr(basic_istream_wchar *this, void **v) +{ + return basic_istream_read_ptr(this, v, num_get_short_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); } -DEFINE_THISCALL_WRAPPER(basic_istringstream_wchar_vector_dtor, 8) -basic_istringstream_wchar* __thiscall basic_istringstream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags) +static basic_istream_wchar* basic_istream_read_int64(basic_istream_wchar *this, __int64 *v, const num_get *numget) { - basic_istringstream_wchar *this = basic_istringstream_wchar_from_basic_ios(base); + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; - TRACE("(%p %x)\n", this, flags); + TRACE("(%p %p)\n", this, v); - if(flags & 2) { - /* we have an array, with the number of elements stored before the first object */ - INT_PTR i, *ptr = (INT_PTR *)this-1; + if(basic_istream_wchar_sentry_create(this, FALSE)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + istreambuf_iterator_wchar first={0}, last={0}; - for(i=*ptr-1; i>=0; i--) - basic_istringstream_wchar_vbase_dtor(this+i); - MSVCRT_operator_delete(ptr); - } else { - basic_istringstream_wchar_vbase_dtor(this); - if(flags & 1) - MSVCRT_operator_delete(this); + first.strbuf = strbuf; + num_get_wchar_get_int64(numget, &last, first, last, &base->base, &state, v); } + basic_istream_wchar_sentry_destroy(this); + basic_ios_wchar_setstate(base, state); return this; } -/* ?rdbuf@?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEPAV?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?rdbuf@?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAPEAV?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?rdbuf@?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPAV?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -/* ?rdbuf@?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEAV?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_istringstream_wchar_rdbuf, 4) -basic_stringbuf_wchar* __thiscall basic_istringstream_wchar_rdbuf(const basic_istringstream_wchar *this) -{ - TRACE("(%p)\n", this); - return (basic_stringbuf_wchar*)&this->strbuf; -} - -/* ?str@?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z */ -/* ?str@?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z */ -/* ?str@?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z */ -/* ?str@?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z */ -DEFINE_THISCALL_WRAPPER(basic_istringstream_wchar_str_set, 8) -void __thiscall basic_istringstream_wchar_str_set(basic_istringstream_wchar *this, const basic_string_wchar *str) -{ - TRACE("(%p %p)\n", this, str); - basic_stringbuf_wchar_str_set(&this->strbuf, str); -} - -/* ?str@?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?str@?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?str@?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -/* ?str@?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_istringstream_wchar_str_get, 8) -basic_string_wchar* __thiscall basic_istringstream_wchar_str_get(const basic_istringstream_wchar *this, basic_string_wchar *ret) +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_J@Z */ +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_J@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_int64, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_read_int64(basic_istream_wchar *this, __int64 *v) { - TRACE("(%p %p)\n", this, ret); - return basic_stringbuf_wchar_str_get(&this->strbuf, ret); + return basic_istream_read_int64(this, v, num_get_wchar_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); } -static inline basic_ios_char* basic_stringstream_char_to_basic_ios(basic_stringstream_char *ptr) +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_J@Z */ +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_J@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_short_read_int64, 8) +basic_istream_wchar* __thiscall basic_istream_short_read_int64(basic_istream_wchar *this, __int64 *v) { - return (basic_ios_char*)((char*)ptr+basic_stringstream_char_vbtable1[1]); + return basic_istream_read_int64(this, v, num_get_short_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); } -static inline basic_stringstream_char* basic_stringstream_char_from_basic_ios(basic_ios_char *ptr) +static basic_istream_wchar* basic_istream_read_uint64(basic_istream_wchar *this, unsigned __int64 *v, const num_get *numget) { - return (basic_stringstream_char*)((char*)ptr-basic_stringstream_char_vbtable1[1]); -} + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; -/* ??0?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@H@Z */ -/* ??0?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringstream_char_ctor_str, 16) -basic_stringstream_char* __thiscall basic_stringstream_char_ctor_str(basic_stringstream_char *this, - const basic_string_char *str, int mode, MSVCP_bool virt_init) -{ - basic_ios_char *basic_ios; + TRACE("(%p %p)\n", this, v); - TRACE("(%p %p %d %d)\n", this, str, mode, virt_init); + if(basic_istream_wchar_sentry_create(this, FALSE)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + istreambuf_iterator_wchar first={0}, last={0}; - if(virt_init) { - this->base.base1.vbtable = basic_stringstream_char_vbtable1; - this->base.base2.vbtable = basic_stringstream_char_vbtable2; - basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); - basic_ios_char_ctor(basic_ios); - }else { - basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); + first.strbuf = strbuf; + num_get_wchar_get_uint64(numget, &last, first, last, &base->base, &state, v); } + basic_istream_wchar_sentry_destroy(this); - basic_stringbuf_char_ctor_str(&this->strbuf, str, mode); - basic_iostream_char_ctor(&this->base, &this->strbuf.base, FALSE); - basic_ios->base.vtable = &MSVCP_basic_stringstream_char_vtable; + basic_ios_wchar_setstate(base, state); return this; } -/* ??0?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@H@Z */ -/* ??0?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringstream_char_ctor_mode, 12) -basic_stringstream_char* __thiscall basic_stringstream_char_ctor_mode( - basic_stringstream_char *this, int mode, MSVCP_bool virt_init) +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_K@Z */ +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_K@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_uint64, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_read_uint64(basic_istream_wchar *this, unsigned __int64 *v) { - basic_ios_char *basic_ios; - - TRACE("(%p %d %d)\n", this, mode, virt_init); - - if(virt_init) { - this->base.base1.vbtable = basic_stringstream_char_vbtable1; - this->base.base2.vbtable = basic_stringstream_char_vbtable2; - basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); - basic_ios_char_ctor(basic_ios); - }else { - basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); - } - - basic_stringbuf_char_ctor_mode(&this->strbuf, mode); - basic_iostream_char_ctor(&this->base, &this->strbuf.base, FALSE); - basic_ios->base.vtable = &MSVCP_basic_stringstream_char_vtable; - return this; + return basic_istream_read_uint64(this, v, num_get_wchar_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); } -/* ??_F?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */ -/* ??_F?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_stringstream_char_ctor, 8) -basic_stringstream_char* __thiscall basic_stringstream_char_ctor( - basic_stringstream_char *this, MSVCP_bool virt_init) +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_K@Z */ +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_K@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_short_read_uint64, 8) +basic_istream_wchar* __thiscall basic_istream_short_read_uint64(basic_istream_wchar *this, unsigned __int64 *v) { - return basic_stringstream_char_ctor_mode( - this, OPENMODE_out|OPENMODE_in, virt_init); + return basic_istream_read_uint64(this, v, num_get_short_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); } -/* ??1?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UAE@XZ */ -/* ??1?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_stringstream_char_dtor, 4) -void __thiscall basic_stringstream_char_dtor(basic_ios_char *base) +static basic_istream_wchar* basic_istream_read_bool(basic_istream_wchar *this, MSVCP_bool *v, const num_get *numget) { - basic_stringstream_char *this = basic_stringstream_char_from_basic_ios(base); + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + int state = IOSTATE_goodbit; - TRACE("(%p)\n", this); + TRACE("(%p %p)\n", this, v); + + if(basic_istream_wchar_sentry_create(this, FALSE)) { + basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base); + istreambuf_iterator_wchar first={0}, last={0}; + + first.strbuf = strbuf; + num_get_wchar_get_bool(numget, &last, first, last, &base->base, &state, v); + } + basic_istream_wchar_sentry_destroy(this); - basic_iostream_char_dtor(basic_iostream_char_to_basic_ios(&this->base)); - basic_stringbuf_char_dtor(&this->strbuf); + basic_ios_wchar_setstate(base, state); + return this; } -/* ??_D?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */ -/* ??_D?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_stringstream_char_vbase_dtor, 4) -void __thiscall basic_stringstream_char_vbase_dtor(basic_stringstream_char *this) +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_N@Z */ +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_bool, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_read_bool(basic_istream_wchar *this, MSVCP_bool *v) { - TRACE("(%p)\n", this); - - basic_stringstream_char_dtor(basic_stringstream_char_to_basic_ios(this)); - basic_ios_char_dtor(basic_istream_char_get_basic_ios(&this->base.base1)); + return basic_istream_read_bool(this, v, num_get_wchar_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); } -DEFINE_THISCALL_WRAPPER(basic_stringstream_char_vector_dtor, 8) -basic_stringstream_char* __thiscall basic_stringstream_char_vector_dtor(basic_ios_char *base, unsigned int flags) +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_N@Z */ +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_N@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_short_read_bool, 8) +basic_istream_wchar* __thiscall basic_istream_short_read_bool(basic_istream_wchar *this, MSVCP_bool *v) { - basic_stringstream_char *this = basic_stringstream_char_from_basic_ios(base); + return basic_istream_read_bool(this, v, num_get_short_use_facet( + basic_istream_wchar_get_basic_ios(this)->strbuf->loc)); +} - TRACE("(%p %x)\n", this, flags); +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */ +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */ +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */ +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_streambuf, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_read_streambuf( + basic_istream_wchar *this, basic_streambuf_wchar *streambuf) +{ + basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this); + IOSB_iostate state = IOSTATE_failbit; + unsigned short c = '\n'; - if(flags & 2) { - /* we have an array, with the number of elements stored before the first object */ - INT_PTR i, *ptr = (INT_PTR *)this-1; + TRACE("(%p %p)\n", this, streambuf); - for(i=*ptr-1; i>=0; i--) - basic_stringstream_char_vbase_dtor(this+i); - MSVCRT_operator_delete(ptr); - } else { - basic_stringstream_char_vbase_dtor(this); - if(flags & 1) - MSVCRT_operator_delete(this); + if(basic_istream_wchar_sentry_create(this, FALSE)) { + for(c = basic_streambuf_wchar_sgetc(basic_ios_wchar_rdbuf_get(base)); c!=WEOF; + c = basic_streambuf_wchar_snextc(basic_ios_wchar_rdbuf_get(base))) { + state = IOSTATE_goodbit; + if(basic_streambuf_wchar_sputc(streambuf, c) == WEOF) + break; + } } + basic_istream_wchar_sentry_destroy(this); + basic_ios_wchar_setstate(base, state | (c==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit)); return this; } -/* ?rdbuf@?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPAV?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -/* ?rdbuf@?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEAV?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_stringstream_char_rdbuf, 4) -basic_stringbuf_char* __thiscall basic_stringstream_char_rdbuf(const basic_stringstream_char *this) -{ - TRACE("(%p)\n", this); - return (basic_stringbuf_char*)&this->strbuf; -} - -/* ?str@?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */ -/* ?str@?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringstream_char_str_set, 8) -void __thiscall basic_stringstream_char_str_set(basic_stringstream_char *this, const basic_string_char *str) -{ - TRACE("(%p %p)\n", this, str); - basic_stringbuf_char_str_set(&this->strbuf, str); -} - -/* ?str@?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -/* ?str@?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_stringstream_char_str_get, 8) -basic_string_char* __thiscall basic_stringstream_char_str_get(const basic_stringstream_char *this, basic_string_char *ret) +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */ +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */ +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */ +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_func, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_read_func(basic_istream_wchar *this, + basic_istream_wchar* (__cdecl *pfunc)(basic_istream_wchar*)) { - TRACE("(%p %p)\n", this, ret); - return basic_stringbuf_char_str_get(&this->strbuf, ret); + TRACE("(%p %p)\n", this, pfunc); + pfunc(this); + return this; } -static inline basic_ios_wchar* basic_stringstream_wchar_to_basic_ios(basic_stringstream_wchar *ptr) +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AAV21@@Z@Z */ +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AEAV21@@Z@Z */ +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@GU?$char_traits@G@std@@@1@AAV21@@Z@Z */ +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@GU?$char_traits@G@std@@@1@AEAV21@@Z@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_func_basic_ios, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_read_func_basic_ios(basic_istream_wchar *this, + basic_ios_wchar* (__cdecl *pfunc)(basic_ios_wchar*)) { - return (basic_ios_wchar*)((char*)ptr+basic_stringstream_wchar_vbtable1[1]); + TRACE("(%p %p)\n", this, pfunc); + pfunc(basic_istream_wchar_get_basic_ios(this)); + return this; } -static inline basic_stringstream_wchar* basic_stringstream_wchar_from_basic_ios(basic_ios_wchar *ptr) +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */ +/* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */ +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */ +/* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_func_ios_base, 8) +basic_istream_wchar* __thiscall basic_istream_wchar_read_func_ios_base( + basic_istream_wchar *this, ios_base* (__cdecl *pfunc)(ios_base*)) { - return (basic_stringstream_wchar*)((char*)ptr-basic_stringstream_wchar_vbtable1[1]); + TRACE("(%p %p)\n", this, pfunc); + pfunc(&basic_istream_wchar_get_basic_ios(this)->base); + return this; } -/* ??0?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@1@H@Z */ -/* ??0?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@AEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@1@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringstream_wchar_ctor_str, 16) -basic_stringstream_wchar* __thiscall basic_stringstream_wchar_ctor_str(basic_stringstream_wchar *this, - const basic_string_wchar *str, int mode, MSVCP_bool virt_init) +static inline basic_ios_char* basic_iostream_char_to_basic_ios(basic_iostream_char *ptr) { - basic_ios_wchar *basic_ios; - - TRACE("(%p %p %d %d)\n", this, str, mode, virt_init); - - if(virt_init) { - this->base.base1.vbtable = basic_stringstream_wchar_vbtable1; - this->base.base2.vbtable = basic_stringstream_wchar_vbtable2; - basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1); - basic_ios_wchar_ctor(basic_ios); - }else { - basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1); - } - - basic_stringbuf_wchar_ctor_str(&this->strbuf, str, mode); - basic_iostream_wchar_ctor(&this->base, &this->strbuf.base, FALSE); - basic_ios->base.vtable = &MSVCP_basic_stringstream_wchar_vtable; - return this; + return (basic_ios_char*)((char*)ptr+basic_iostream_char_vbtable1[1]); } -/* ??0?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@1@H@Z */ -/* ??0?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@1@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringstream_short_ctor_str, 16) -basic_stringstream_wchar* __thiscall basic_stringstream_short_ctor_str(basic_stringstream_wchar *this, - const basic_string_wchar *str, int mode, MSVCP_bool virt_init) +static inline basic_iostream_char* basic_iostream_char_from_basic_ios(basic_ios_char *ptr) { - basic_stringstream_wchar_ctor_str(this, str, mode, virt_init); - basic_istream_wchar_get_basic_ios(&this->base.base1)->base.vtable = &MSVCP_basic_stringstream_short_vtable; - return this; + return (basic_iostream_char*)((char*)ptr-basic_iostream_char_vbtable1[1]); } -/* ??0?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@H@Z */ -/* ??0?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringstream_wchar_ctor_mode, 12) -basic_stringstream_wchar* __thiscall basic_stringstream_wchar_ctor_mode( - basic_stringstream_wchar *this, int mode, MSVCP_bool virt_init) +/* ??0?$basic_iostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */ +/* ??0?$basic_iostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */ +DEFINE_THISCALL_WRAPPER(basic_iostream_char_ctor, 12) +basic_iostream_char* __thiscall basic_iostream_char_ctor(basic_iostream_char *this, basic_streambuf_char *strbuf, MSVCP_bool virt_init) { - basic_ios_wchar *basic_ios; + basic_ios_char *basic_ios; - TRACE("(%p %d %d)\n", this, mode, virt_init); + TRACE("(%p %p %d)\n", this, strbuf, virt_init); if(virt_init) { - this->base.base1.vbtable = basic_stringstream_wchar_vbtable1; - this->base.base2.vbtable = basic_stringstream_wchar_vbtable2; - basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1); - basic_ios_wchar_ctor(basic_ios); + this->base1.vbtable = basic_iostream_char_vbtable1; + this->base2.vbtable = basic_iostream_char_vbtable2; + basic_ios = basic_istream_char_get_basic_ios(&this->base1); + basic_ios_char_ctor(basic_ios); }else { - basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1); + basic_ios = basic_istream_char_get_basic_ios(&this->base1); } - basic_stringbuf_wchar_ctor_mode(&this->strbuf, mode); - basic_iostream_wchar_ctor(&this->base, &this->strbuf.base, FALSE); - basic_ios->base.vtable = &MSVCP_basic_stringstream_wchar_vtable; - return this; -} + basic_ios->base.vtable = &MSVCP_basic_iostream_char_vtable; -/* ??0?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@H@Z */ -/* ??0?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@H@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringstream_short_ctor_mode, 12) -basic_stringstream_wchar* __thiscall basic_stringstream_short_ctor_mode( - basic_stringstream_wchar *this, int mode, MSVCP_bool virt_init) -{ - basic_stringstream_wchar_ctor_mode(this, mode, virt_init); - basic_istream_wchar_get_basic_ios(&this->base.base1)->base.vtable = &MSVCP_basic_stringstream_short_vtable; + basic_istream_char_ctor(&this->base1, strbuf, FALSE, FALSE); + basic_ostream_char_ctor_uninitialized(&this->base2, 0, FALSE, FALSE); return this; } -/* ??_F?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXXZ */ -/* ??_F?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_stringstream_wchar_ctor, 8) -basic_stringstream_wchar* __thiscall basic_stringstream_wchar_ctor( - basic_stringstream_wchar *this, MSVCP_bool virt_init) -{ - return basic_stringstream_wchar_ctor_mode( - this, OPENMODE_out|OPENMODE_in, virt_init); -} - -/* ??_F?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */ -/* ??_F?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_stringstream_short_ctor, 8) -basic_stringstream_wchar* __thiscall basic_stringstream_short_ctor( - basic_stringstream_wchar *this, MSVCP_bool virt_init) -{ - return basic_stringstream_short_ctor_mode( - this, OPENMODE_out|OPENMODE_in, virt_init); -} - -/* ??1?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@UAE@XZ */ -/* ??1?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@UEAA@XZ */ -/* ??1?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@UAE@XZ */ -/* ??1?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(basic_stringstream_wchar_dtor, 4) -void __thiscall basic_stringstream_wchar_dtor(basic_ios_wchar *base) +/* ??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UAE@XZ */ +/* ??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UEAA@XZ */ +DEFINE_THISCALL_WRAPPER(basic_iostream_char_dtor, 4) +void __thiscall basic_iostream_char_dtor(basic_ios_char *base) { - basic_stringstream_wchar *this = basic_stringstream_wchar_from_basic_ios(base); + basic_iostream_char *this = basic_iostream_char_from_basic_ios(base); TRACE("(%p)\n", this); - - basic_iostream_wchar_dtor(basic_iostream_wchar_to_basic_ios(&this->base)); - basic_stringbuf_wchar_dtor(&this->strbuf); + basic_ostream_char_dtor(basic_ostream_char_to_basic_ios(&this->base2)); + basic_istream_char_dtor(basic_istream_char_to_basic_ios(&this->base1)); } -/* ??_D?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXXZ */ -/* ??_D?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXXZ */ -/* ??_D?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */ -/* ??_D?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(basic_stringstream_wchar_vbase_dtor, 4) -void __thiscall basic_stringstream_wchar_vbase_dtor(basic_stringstream_wchar *this) +/* ??_D?$basic_iostream@DU?$char_traits@D@std@@@std@@QAEXXZ */ +/* ??_D?$basic_iostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */ +DEFINE_THISCALL_WRAPPER(basic_iostream_char_vbase_dtor, 4) +void __thiscall basic_iostream_char_vbase_dtor(basic_iostream_char *this) { TRACE("(%p)\n", this); - - basic_stringstream_wchar_dtor(basic_stringstream_wchar_to_basic_ios(this)); - basic_ios_wchar_dtor(basic_istream_wchar_get_basic_ios(&this->base.base1)); + basic_iostream_char_dtor(basic_iostream_char_to_basic_ios(this)); + basic_ios_char_dtor(basic_istream_char_get_basic_ios(&this->base1)); } -DEFINE_THISCALL_WRAPPER(basic_stringstream_wchar_vector_dtor, 8) -basic_stringstream_wchar* __thiscall basic_stringstream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags) +DEFINE_THISCALL_WRAPPER(basic_iostream_char_vector_dtor, 8) +basic_iostream_char* __thiscall basic_iostream_char_vector_dtor(basic_ios_char *base, unsigned int flags) { - basic_stringstream_wchar *this = basic_stringstream_wchar_from_basic_ios(base); + basic_iostream_char *this = basic_iostream_char_from_basic_ios(base); TRACE("(%p %x)\n", this, flags); @@ -11850,10 +7816,10 @@ basic_stringstream_wchar* __thiscall basic_stringstream_wchar_vector_dtor(basic_ INT_PTR i, *ptr = (INT_PTR *)this-1; for(i=*ptr-1; i>=0; i--) - basic_stringstream_wchar_vbase_dtor(this+i); + basic_iostream_char_vbase_dtor(this+i); MSVCRT_operator_delete(ptr); } else { - basic_stringstream_wchar_vbase_dtor(this); + basic_iostream_char_vbase_dtor(this); if(flags & 1) MSVCRT_operator_delete(this); } @@ -11861,179 +7827,95 @@ basic_stringstream_wchar* __thiscall basic_stringstream_wchar_vector_dtor(basic_ return this; } -/* ?rdbuf@?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEPAV?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?rdbuf@?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAPEAV?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?rdbuf@?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPAV?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -/* ?rdbuf@?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEAV?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_stringstream_wchar_rdbuf, 4) -basic_stringbuf_wchar* __thiscall basic_stringstream_wchar_rdbuf(const basic_stringstream_wchar *this) -{ - TRACE("(%p)\n", this); - return (basic_stringbuf_wchar*)&this->strbuf; -} - -/* ?str@?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z */ -/* ?str@?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z */ -/* ?str@?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z */ -/* ?str@?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z */ -DEFINE_THISCALL_WRAPPER(basic_stringstream_wchar_str_set, 8) -void __thiscall basic_stringstream_wchar_str_set(basic_stringstream_wchar *this, const basic_string_wchar *str) +static inline basic_ios_wchar* basic_iostream_wchar_to_basic_ios(basic_iostream_wchar *ptr) { - TRACE("(%p %p)\n", this, str); - basic_stringbuf_wchar_str_set(&this->strbuf, str); + return (basic_ios_wchar*)((char*)ptr+basic_iostream_wchar_vbtable1[1]); } -/* ?str@?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?str@?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?str@?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -/* ?str@?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_stringstream_wchar_str_get, 8) -basic_string_wchar* __thiscall basic_stringstream_wchar_str_get(const basic_stringstream_wchar *this, basic_string_wchar *ret) +static inline basic_iostream_wchar* basic_iostream_wchar_from_basic_ios(basic_ios_wchar *ptr) { - TRACE("(%p %p)\n", this, ret); - return basic_stringbuf_wchar_str_get(&this->strbuf, ret); + return (basic_iostream_wchar*)((char*)ptr-basic_iostream_wchar_vbtable1[1]); } -/* ?_Init@strstreambuf@std@@IAEXHPAD0H@Z */ -/* ?_Init@strstreambuf@std@@IEAAX_JPEAD1H@Z */ -DEFINE_THISCALL_WRAPPER(strstreambuf__Init, 24) -void __thiscall strstreambuf__Init(strstreambuf *this, streamsize len, char *g, char *p, int mode) +/* ??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */ +/* ??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */ +DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_ctor, 12) +basic_iostream_wchar* __thiscall basic_iostream_wchar_ctor(basic_iostream_wchar *this, + basic_streambuf_wchar *strbuf, MSVCP_bool virt_init) { - TRACE("(%p %s %p %p %d)\n", this, wine_dbgstr_longlong(len), g, p, mode); + basic_ios_wchar *basic_ios; - this->minsize = 32; - this->endsave = NULL; - this->strmode = mode; - this->palloc = NULL; - this->pfree = NULL; + TRACE("(%p %p %d)\n", this, strbuf, virt_init); - if(!g) { - this->strmode |= STRSTATE_Dynamic; - if(len > this->minsize) - this->minsize = len; - this->seekhigh = NULL; - return; + if(virt_init) { + this->base1.vbtable = basic_iostream_wchar_vbtable1; + this->base2.vbtable = basic_iostream_wchar_vbtable2; + basic_ios = basic_istream_wchar_get_basic_ios(&this->base1); + basic_ios_wchar_ctor(basic_ios); + }else { + basic_ios = basic_istream_wchar_get_basic_ios(&this->base1); } - if(len < 0) - len = INT_MAX; - else if(!len) - len = strlen(g); - - this->seekhigh = g+len; - basic_streambuf_char_setg(&this->base, g, g, p ? p : this->seekhigh); - if(p) - basic_streambuf_char_setp(&this->base, p, this->seekhigh); -} - -/* ??0strstreambuf@std@@QAE@PACH0@Z */ -/* ??0strstreambuf@std@@QEAA@PEAC_J0@Z */ -/* ??0strstreambuf@std@@QAE@PADH0@Z */ -/* ??0strstreambuf@std@@QEAA@PEAD_J0@Z */ -/* ??0strstreambuf@std@@QAE@PAEH0@Z */ -/* ??0strstreambuf@std@@QEAA@PEAE_J0@Z */ -DEFINE_THISCALL_WRAPPER(strstreambuf_ctor_get_put, 20) -strstreambuf* __thiscall strstreambuf_ctor_get_put(strstreambuf *this, char *g, streamsize len, char *p) -{ - TRACE("(%p %p %s %p)\n", this, g, wine_dbgstr_longlong(len), p); - - basic_streambuf_char_ctor(&this->base); - this->base.vtable = &MSVCP_strstreambuf_vtable; - - strstreambuf__Init(this, len, g, p, 0); - return this; -} - -/* ??0strstreambuf@std@@QAE@H@Z */ -/* ??0strstreambuf@std@@QEAA@_J@Z */ -DEFINE_THISCALL_WRAPPER(strstreambuf_ctor_len, 12) -strstreambuf* __thiscall strstreambuf_ctor_len(strstreambuf *this, streamsize len) -{ - return strstreambuf_ctor_get_put(this, NULL, len, NULL); -} - -/* ??0strstreambuf@std@@QAE@P6APAXI@ZP6AXPAX@Z@Z */ -/* ??0strstreambuf@std@@QEAA@P6APEAX_K@ZP6AXPEAX@Z@Z */ -DEFINE_THISCALL_WRAPPER(strstreambuf_ctor_alloc, 12) -strstreambuf* __thiscall strstreambuf_ctor_alloc(strstreambuf *this, void* (__cdecl *palloc)(MSVCP_size_t), void (__cdecl *pfree)(void*)) -{ - TRACE("(%p %p %p)\n", this, palloc, pfree); + basic_istream_wchar_ctor(&this->base1, strbuf, FALSE, FALSE); + basic_ostream_wchar_ctor_uninitialized(&this->base2, 0, FALSE, FALSE); - strstreambuf_ctor_get_put(this, NULL, 0, NULL); - this->palloc = palloc; - this->pfree = pfree; + basic_ios->base.vtable = &MSVCP_basic_iostream_wchar_vtable; return this; } -/* ??0strstreambuf@std@@QAE@PBCH@Z */ -/* ??0strstreambuf@std@@QEAA@PEBC_J@Z */ -/* ??0strstreambuf@std@@QAE@PBDH@Z */ -/* ??0strstreambuf@std@@QEAA@PEBD_J@Z */ -/* ??0strstreambuf@std@@QAE@PBEH@Z */ -/* ??0strstreambuf@std@@QEAA@PEBE_J@Z */ -DEFINE_THISCALL_WRAPPER(strstreambuf_ctor_get, 16) -strstreambuf* __thiscall strstreambuf_ctor_get(strstreambuf *this, const char *g, streamsize len) +/* ??0?$basic_iostream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */ +/* ??0?$basic_iostream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */ +DEFINE_THISCALL_WRAPPER(basic_iostream_short_ctor, 12) +basic_iostream_wchar* __thiscall basic_iostream_short_ctor(basic_iostream_wchar *this, + basic_streambuf_wchar *strbuf, MSVCP_bool virt_init) { - TRACE("(%p %p %s)\n", this, g, wine_dbgstr_longlong(len)); - - strstreambuf_ctor_get_put(this, NULL, 0, NULL); - this->strmode |= STRSTATE_Constant; + basic_iostream_wchar_ctor(this, strbuf, virt_init); + basic_istream_wchar_get_basic_ios(&this->base1)->base.vtable = &MSVCP_basic_iostream_short_vtable; return this; } -/* ??_Fstrstreambuf@std@@QAEXXZ */ -/* ??_Fstrstreambuf@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(strstreambuf_ctor, 4) -strstreambuf* __thiscall strstreambuf_ctor(strstreambuf *this) +/* ??1?$basic_iostream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */ +/* ??1?$basic_iostream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */ +/* ??1?$basic_iostream@GU?$char_traits@G@std@@@std@@UAE@XZ */ +/* ??1?$basic_iostream@GU?$char_traits@G@std@@@std@@UEAA@XZ */ +DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_dtor, 4) +void __thiscall basic_iostream_wchar_dtor(basic_ios_wchar *base) { - return strstreambuf_ctor_get_put(this, NULL, 0, NULL); -} + basic_iostream_wchar *this = basic_iostream_wchar_from_basic_ios(base); -/* ?_Tidy@strstreambuf@std@@IAEXXZ */ -/* ?_Tidy@strstreambuf@std@@IEAAXXZ */ -DEFINE_THISCALL_WRAPPER(strstreambuf__Tidy, 4) -void __thiscall strstreambuf__Tidy(strstreambuf *this) -{ TRACE("(%p)\n", this); - - if((this->strmode & STRSTATE_Allocated) && !(this->strmode & STRSTATE_Frozen)) { - if(this->pfree) - this->pfree(basic_streambuf_char_eback(&this->base)); - else - MSVCRT_operator_delete(basic_streambuf_char_eback(&this->base)); - } - - this->endsave = NULL; - this->seekhigh = NULL; - this->strmode &= ~(STRSTATE_Allocated | STRSTATE_Frozen); - basic_streambuf_char_setg(&this->base, NULL, NULL, NULL); - basic_streambuf_char_setp(&this->base, NULL, NULL); + basic_ostream_wchar_dtor(basic_ostream_wchar_to_basic_ios(&this->base2)); + basic_istream_wchar_dtor(basic_istream_wchar_to_basic_ios(&this->base1)); } -/* ??1strstreambuf@std@@UAE@XZ */ -/* ??1strstreambuf@std@@UEAA@XZ */ -DEFINE_THISCALL_WRAPPER(strstreambuf_dtor, 4) -void __thiscall strstreambuf_dtor(strstreambuf *this) +/* ??_D?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */ +/* ??_D?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */ +/* ??_D?$basic_iostream@GU?$char_traits@G@std@@@std@@QAEXXZ */ +/* ??_D?$basic_iostream@GU?$char_traits@G@std@@@std@@QEAAXXZ */ +DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_vbase_dtor, 4) +void __thiscall basic_iostream_wchar_vbase_dtor(basic_iostream_wchar *this) { TRACE("(%p)\n", this); - - strstreambuf__Tidy(this); - basic_streambuf_char_dtor(&this->base); + basic_iostream_wchar_dtor(basic_iostream_wchar_to_basic_ios(this)); + basic_ios_wchar_dtor(basic_istream_wchar_get_basic_ios(&this->base1)); } -DEFINE_THISCALL_WRAPPER(strstreambuf_vector_dtor, 8) -strstreambuf* __thiscall strstreambuf_vector_dtor(strstreambuf *this, unsigned int flags) +DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_vector_dtor, 8) +basic_iostream_wchar* __thiscall basic_iostream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags) { + basic_iostream_wchar *this = basic_iostream_wchar_from_basic_ios(base); + TRACE("(%p %x)\n", this, flags); + if(flags & 2) { /* we have an array, with the number of elements stored before the first object */ INT_PTR i, *ptr = (INT_PTR *)this-1; for(i=*ptr-1; i>=0; i--) - strstreambuf_dtor(this+i); + basic_iostream_wchar_vbase_dtor(this+i); MSVCRT_operator_delete(ptr); } else { - strstreambuf_dtor(this); + basic_iostream_wchar_vbase_dtor(this); if(flags & 1) MSVCRT_operator_delete(this); } @@ -12041,231 +7923,6 @@ strstreambuf* __thiscall strstreambuf_vector_dtor(strstreambuf *this, unsigned i return this; } -/* ?freeze@strstreambuf@std@@QAEX_N@Z */ -/* ?freeze@strstreambuf@std@@QEAAX_N@Z */ -DEFINE_THISCALL_WRAPPER(strstreambuf_freeze, 8) -void __thiscall strstreambuf_freeze(strstreambuf *this, MSVCP_bool freeze) -{ - TRACE("(%p %d)\n", this, freeze); - - if(!freeze == !(this->strmode *STRSTATE_Frozen)) - return; - - if(freeze) { - this->strmode |= STRSTATE_Frozen; - this->endsave = basic_streambuf_char_epptr(&this->base); - basic_streambuf_char_setp_next(&this->base, basic_streambuf_char_pbase(&this->base), - basic_streambuf_char_pptr(&this->base), basic_streambuf_char_eback(&this->base)); - }else { - this->strmode &= ~STRSTATE_Frozen; - basic_streambuf_char_setp_next(&this->base, basic_streambuf_char_pbase(&this->base), - basic_streambuf_char_pptr(&this->base), this->endsave); - } -} - -/* ?str@strstreambuf@std@@QAEPADXZ */ -/* ?str@strstreambuf@std@@QEAAPEADXZ */ -DEFINE_THISCALL_WRAPPER(strstreambuf_str, 4) -char* __thiscall strstreambuf_str(strstreambuf *this) -{ - TRACE("(%p)\n", this); - - strstreambuf_freeze(this, TRUE); - return basic_streambuf_char_gptr(&this->base); -} - -/* ?pcount@strstreambuf@std@@QBEHXZ */ -/* ?pcount@strstreambuf@std@@QEBA_JXZ */ -DEFINE_THISCALL_WRAPPER(strstreambuf_pcount, 4) -streamsize __thiscall strstreambuf_pcount(const strstreambuf *this) -{ - char *ppos = basic_streambuf_char_pptr(&this->base); - - TRACE("(%p)\n", this); - - return ppos ? ppos-basic_streambuf_char_pbase(&this->base) : 0; -} - -/* ?overflow@strstreambuf@std@@MAEHH@Z */ -/* ?overflow@strstreambuf@std@@MEAAHH@Z */ -DEFINE_THISCALL_WRAPPER(strstreambuf_overflow, 8) -int __thiscall strstreambuf_overflow(strstreambuf *this, int c) -{ - MSVCP_size_t old_size, size; - char *ptr, *buf; - - TRACE("(%p %d)\n", this, c); - - if(c == EOF) - return !EOF; - - if(this->strmode & STRSTATE_Frozen) - return EOF; - - ptr = basic_streambuf_char_pptr(&this->base); - if(ptr && ptr<basic_streambuf_char_epptr(&this->base)) - return (unsigned char)(*basic_streambuf_char__Pninc(&this->base) = c); - - if(!(this->strmode & STRSTATE_Dynamic) || (this->strmode & STRSTATE_Constant)) - return EOF; - - ptr = basic_streambuf_char_eback(&this->base); - old_size = ptr ? basic_streambuf_char_epptr(&this->base) - ptr : 0; - - size = old_size + old_size/2; - if(size < this->minsize) - size = this->minsize; - - if(this->palloc) - buf = this->palloc(size); - else - buf = MSVCRT_operator_new(size); - if(!buf) - return EOF; - - memcpy(buf, ptr, old_size); - if(this->strmode & STRSTATE_Allocated) { - if(this->pfree) - this->pfree(ptr); - else - MSVCRT_operator_delete(ptr); - } - - this->strmode |= STRSTATE_Allocated; - if(!old_size) { - this->seekhigh = buf; - basic_streambuf_char_setp(&this->base, buf, buf+size); - basic_streambuf_char_setg(&this->base, buf, buf, buf); - }else { - this->seekhigh = this->seekhigh-ptr+buf; - basic_streambuf_char_setp_next(&this->base, basic_streambuf_char_pbase(&this->base)-ptr+buf, - basic_streambuf_char_pptr(&this->base)-ptr+buf, buf+size); - basic_streambuf_char_setg(&this->base, buf, basic_streambuf_char_gptr(&this->base)-ptr+buf, - basic_streambuf_char_pptr(&this->base)); - } - - return (unsigned char)(*basic_streambuf_char__Pninc(&this->base) = c); -} - -/* ?pbackfail@strstreambuf@std@@MAEHH@Z */ -/* ?pbackfail@strstreambuf@std@@MEAAHH@Z */ -DEFINE_THISCALL_WRAPPER(strstreambuf_pbackfail, 8) -int __thiscall strstreambuf_pbackfail(strstreambuf *this, int c) -{ - char *ptr = basic_streambuf_char_gptr(&this->base); - - TRACE("(%p %d)\n", this, c); - - if(ptr<=basic_streambuf_char_eback(&this->base) - || ((this->strmode & STRSTATE_Constant) && c!=ptr[-1])) - return EOF; - - basic_streambuf_char_gbump(&this->base, -1); - if(c == EOF) - return !EOF; - if(this->strmode & STRSTATE_Constant) - return (unsigned char)c; - - return (unsigned char)(ptr[0] = c); -} - -/* ?seekoff@strstreambuf@std@@MAE?AV?$fpos@H@2@JHH@Z */ -/* ?seekoff@strstreambuf@std@@MEAA?AV?$fpos@H@2@_JHH@Z */ -DEFINE_THISCALL_WRAPPER(strstreambuf_seekoff, 24) -fpos_int* __thiscall strstreambuf_seekoff(strstreambuf *this, fpos_int *ret, streamoff off, int way, int mode) -{ - char *eback = basic_streambuf_char_eback(&this->base); - char *pptr = basic_streambuf_char_pptr(&this->base); - char *gptr = basic_streambuf_char_gptr(&this->base); - - TRACE("(%p %p %s %d %d)\n", this, ret, wine_dbgstr_longlong(off), way, mode); - - ret->off = 0; - ret->state = 0; - - if(pptr > this->seekhigh) - this->seekhigh = pptr; - - if((mode & OPENMODE_in) && gptr) { - if(way==SEEKDIR_cur && !(mode & OPENMODE_out)) - off += gptr-eback; - else if(way == SEEKDIR_end) - off += this->seekhigh-eback; - else if(way != SEEKDIR_beg) - off = -1; - - if(off<0 || off>this->seekhigh-eback) { - off = -1; - }else { - basic_streambuf_char_gbump(&this->base, eback-gptr+off); - if((mode & OPENMODE_out) && pptr) { - basic_streambuf_char_setp_next(&this->base, eback, - gptr, basic_streambuf_char_epptr(&this->base)); - } - } - }else if((mode & OPENMODE_out) && pptr) { - if(way == SEEKDIR_cur) - off += pptr-eback; - else if(way == SEEKDIR_end) - off += this->seekhigh-eback; - else if(way != SEEKDIR_beg) - off = -1; - - if(off<0 || off>this->seekhigh-eback) - off = -1; - else - basic_streambuf_char_pbump(&this->base, eback-pptr+off); - }else { - off = -1; - } - - ret->pos = off; - return ret; -} - -/* ?seekpos@strstreambuf@std@@MAE?AV?$fpos@H@2@V32@H@Z */ -/* ?seekpos@strstreambuf@std@@MEAA?AV?$fpos@H@2@V32@H@Z */ -DEFINE_THISCALL_WRAPPER(strstreambuf_seekpos, 36) -fpos_int* __thiscall strstreambuf_seekpos(strstreambuf *this, fpos_int *ret, fpos_int pos, int mode) -{ - TRACE("(%p %p %s %d)\n", this, ret, debugstr_fpos_int(&pos), mode); - - if(pos.off==0 && pos.pos==-1 && pos.state==0) { - *ret = pos; - return ret; - } - - return strstreambuf_seekoff(this, ret, pos.off, SEEKDIR_beg, mode); -} - -/* ?underflow@strstreambuf@std@@MAEHXZ */ -/* ?underflow@strstreambuf@std@@MEAAHXZ */ -DEFINE_THISCALL_WRAPPER(strstreambuf_underflow, 4) -int __thiscall strstreambuf_underflow(strstreambuf *this) -{ - char *gptr = basic_streambuf_char_gptr(&this->base); - char *pptr; - - TRACE("(%p)\n", this); - - if(!gptr) - return EOF; - - if(gptr < basic_streambuf_char_egptr(&this->base)) - return (unsigned char)(*gptr); - - pptr = basic_streambuf_char_gptr(&this->base); - if(pptr > this->seekhigh) - this->seekhigh = pptr; - - if(this->seekhigh <= gptr) - return EOF; - - basic_streambuf_char_setg(&this->base, basic_streambuf_char_eback(&this->base), - gptr, this->seekhigh); - return (unsigned char)(*gptr); -} - static void __cdecl setprecision_func(ios_base *base, streamsize prec) { ios_base_precision_set(base, prec); @@ -12486,9 +8143,6 @@ void init_io(void *base) init_basic_filebuf_char_rtti(base); init_basic_filebuf_wchar_rtti(base); init_basic_filebuf_short_rtti(base); - init_basic_stringbuf_char_rtti(base); - init_basic_stringbuf_wchar_rtti(base); - init_basic_stringbuf_short_rtti(base); init_basic_ostream_char_rtti(base); init_basic_ostream_wchar_rtti(base); init_basic_ostream_short_rtti(base); @@ -12498,25 +8152,6 @@ void init_io(void *base) init_basic_iostream_char_rtti(base); init_basic_iostream_wchar_rtti(base); init_basic_iostream_short_rtti(base); - init_basic_ofstream_char_rtti(base); - init_basic_ofstream_wchar_rtti(base); - init_basic_ofstream_short_rtti(base); - init_basic_ifstream_char_rtti(base); - init_basic_ifstream_wchar_rtti(base); - init_basic_ifstream_short_rtti(base); - init_basic_fstream_char_rtti(base); - init_basic_fstream_wchar_rtti(base); - init_basic_fstream_short_rtti(base); - init_basic_ostringstream_char_rtti(base); - init_basic_ostringstream_wchar_rtti(base); - init_basic_ostringstream_short_rtti(base); - init_basic_istringstream_char_rtti(base); - init_basic_istringstream_wchar_rtti(base); - init_basic_istringstream_short_rtti(base); - init_basic_stringstream_char_rtti(base); - init_basic_stringstream_wchar_rtti(base); - init_basic_stringstream_short_rtti(base); - init_strstreambuf_rtti(base); #endif basic_filebuf_char_ctor_file(&filebuf_char_stdin, stdin); diff --git a/dlls/msvcp100/locale.c b/dlls/msvcp100/locale.c index ccf62971cba..d1832eabe3a 100644 --- a/dlls/msvcp100/locale.c +++ b/dlls/msvcp100/locale.c @@ -41,7 +41,7 @@ char* __cdecl _Getmonths(void); void* __cdecl _Gettnames(void); unsigned int __cdecl ___lc_codepage_func(void); LCID* __cdecl ___lc_handle_func(void); -const locale_facet* __thiscall locale__Getfacet(const locale*, MSVCP_size_t); +static const locale_facet* locale__Getfacet(const locale*, MSVCP_size_t); typedef int category; @@ -207,7 +207,6 @@ typedef struct } facets_elem; static struct list lazy_facets = LIST_INIT(lazy_facets); -/* Not exported from msvcp90 */ /* ?facet_Register@facet@locale@std@@CAXPAV123@@Z */ /* ?facet_Register@facet@locale@std@@CAXPEAV123@@Z */ static void __cdecl locale_facet_register(locale_facet *add) @@ -222,16 +221,6 @@ static void __cdecl locale_facet_register(locale_facet *add) list_add_head(&lazy_facets, &head->entry); } -/* Not exported from msvcp90 */ -/* ?_Register@facet@locale@std@@QAEXXZ */ -/* ?_Register@facet@locale@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(locale_facet__Register, 4) -void __thiscall locale_facet__Register(locale_facet *this) -{ - TRACE("(%p)\n", this); - locale_facet_register(this); -} - /* Not exported from msvcp90 */ /* ??_7facet@locale@std@@6B@ */ extern const vtable_ptr MSVCP_locale_facet_vtable; @@ -439,14 +428,6 @@ _Locinfo* __thiscall _Locinfo_ctor_cat_cstr(_Locinfo *this, int category, const return _Locinfo__Locinfo_ctor_cat_cstr(this, category, locstr); } -/* ??0_Locinfo@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z */ -/* ??0_Locinfo@std@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z */ -DEFINE_THISCALL_WRAPPER(_Locinfo_ctor_bstr, 8) -_Locinfo* __thiscall _Locinfo_ctor_bstr(_Locinfo *this, const basic_string_char *locstr) -{ - return _Locinfo__Locinfo_ctor_cat_cstr(this, 1/*FIXME*/, MSVCP_basic_string_char_c_str(locstr)); -} - /* ?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@PBD@Z */ /* ?_Locinfo_ctor@_Locinfo@std@@SAXPEAV12@PEBD@Z */ _Locinfo* __cdecl _Locinfo__Locinfo_ctor_cstr(_Locinfo *locinfo, const char *locstr) @@ -685,17 +666,6 @@ const struct lconv* __thiscall _Locinfo__Getlconv(const _Locinfo *this) return localeconv(); } -/* ?_Getname@_Locinfo@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -/* ?_Getname@_Locinfo@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(_Locinfo__Getname, 8) -basic_string_char* __thiscall _Locinfo__Getname(const _Locinfo *this, basic_string_char *ret) -{ - TRACE("(%p)\n", this); - - MSVCP_basic_string_char_copy_ctor(ret, &this->newlocname); - return ret; -} - /* ?_Gettnames@_Locinfo@std@@QBE?AV_Timevec@2@XZ */ /* ?_Gettnames@_Locinfo@std@@QEBA?AV_Timevec@2@XZ */ DEFINE_THISCALL_WRAPPER(_Locinfo__Gettnames, 8) @@ -713,58 +683,9 @@ locale_id collate_char_id = {0}; /* ??_7?$collate@D@std@@6B@ */ extern const vtable_ptr MSVCP_collate_char_vtable; -/* ?_Init@?$collate@D@std@@IAEXABV_Locinfo@2@@Z */ -/* ?_Init@?$collate@D@std@@IEAAXAEBV_Locinfo@2@@Z */ -DEFINE_THISCALL_WRAPPER(collate_char__Init, 8) -void __thiscall collate_char__Init(collate *this, const _Locinfo *locinfo) -{ - TRACE("(%p %p)\n", this, locinfo); - _Locinfo__Getcoll(locinfo, &this->coll); -} - -/* ??0?$collate@D@std@@IAE@PBDI@Z */ -/* ??0?$collate@D@std@@IEAA@PEBD_K@Z */ -DEFINE_THISCALL_WRAPPER(collate_char_ctor_name, 12) -collate* __thiscall collate_char_ctor_name(collate *this, const char *name, MSVCP_size_t refs) -{ - _Locinfo locinfo; - - TRACE("(%p %s %lu)\n", this, name, refs); - - locale_facet_ctor_refs(&this->facet, refs); - this->facet.vtable = &MSVCP_collate_char_vtable; - - _Locinfo_ctor_cstr(&locinfo, name); - collate_char__Init(this, &locinfo); - _Locinfo_dtor(&locinfo); - return this; -} - -/* ??0?$collate@D@std@@QAE@ABV_Locinfo@1@I@Z */ -/* ??0?$collate@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */ -DEFINE_THISCALL_WRAPPER(collate_char_ctor_locinfo, 12) -collate* __thiscall collate_char_ctor_locinfo(collate *this, _Locinfo *locinfo, MSVCP_size_t refs) -{ - TRACE("(%p %p %lu)\n", this, locinfo, refs); - - locale_facet_ctor_refs(&this->facet, refs); - this->facet.vtable = &MSVCP_collate_char_vtable; - collate_char__Init(this, locinfo); - return this; -} - -/* ??0?$collate@D@std@@QAE@I@Z */ -/* ??0?$collate@D@std@@QEAA@_K@Z */ -DEFINE_THISCALL_WRAPPER(collate_char_ctor_refs, 8) -collate* __thiscall collate_char_ctor_refs(collate *this, MSVCP_size_t refs) -{ - return collate_char_ctor_name(this, "C", refs); -} - /* ??1?$collate@D@std@@MAE@XZ */ /* ??1?$collate@D@std@@MEAA@XZ */ -DEFINE_THISCALL_WRAPPER(collate_char_dtor, 4) -void __thiscall collate_char_dtor(collate *this) +static void collate_char_dtor(collate *this) { TRACE("(%p)\n", this); } @@ -789,14 +710,6 @@ collate* __thiscall collate_char_vector_dtor(collate *this, unsigned int flags) return this; } -/* ??_F?$collate@D@std@@QAEXXZ */ -/* ??_F?$collate@D@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(collate_char_ctor, 4) -collate* __thiscall collate_char_ctor(collate *this) -{ - return collate_char_ctor_name(this, "C", 0); -} - /* _Strcoll */ int __cdecl _Strcoll(const char *first1, const char *last1, const char *first2, const char *last2, const _Collvec *coll) @@ -825,16 +738,6 @@ int __thiscall collate_char_do_compare(const collate *this, const char *first1, return _Strcoll(first1, last1, first2, last2, &this->coll); } -/* ?compare@?$collate@D@std@@QBEHPBD000@Z */ -/* ?compare@?$collate@D@std@@QEBAHPEBD000@Z */ -DEFINE_THISCALL_WRAPPER(collate_char_compare, 20) -int __thiscall collate_char_compare(const collate *this, const char *first1, - const char *last1, const char *first2, const char *last2) -{ - TRACE("(%p %p %p %p %p)\n", this, first1, last1, first2, last2); - return call_collate_char_do_compare(this, first1, last1, first2, last2); -} - /* ?do_hash@?$collate@D@std@@MBEJPBD0@Z */ /* ?do_hash@?$collate@D@std@@MEBAJPEBD0@Z */ DEFINE_THISCALL_WRAPPER(collate_char_do_hash, 12) @@ -852,16 +755,6 @@ LONG __thiscall collate_char_do_hash(const collate *this, return ret; } -/* ?hash@?$collate@D@std@@QBEJPBD0@Z */ -/* ?hash@?$collate@D@std@@QEBAJPEBD0@Z */ -DEFINE_THISCALL_WRAPPER(collate_char_hash, 12) -LONG __thiscall collate_char_hash(const collate *this, - const char *first, const char *last) -{ - TRACE("(%p %p %p)\n", this, first, last); - return call_collate_char_do_hash(this, first, last); -} - /* ?do_transform@?$collate@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */ /* ?do_transform@?$collate@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */ DEFINE_THISCALL_WRAPPER(collate_char_do_transform, 16) @@ -872,16 +765,6 @@ basic_string_char* __thiscall collate_char_do_transform(const collate *this, return ret; } -/* ?transform@?$collate@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */ -/* ?transform@?$collate@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */ -DEFINE_THISCALL_WRAPPER(collate_char_transform, 16) -basic_string_char* __thiscall collate_char_transform(const collate *this, - basic_string_char *ret, const char *first, const char *last) -{ - FIXME("(%p %p %p) stub\n", this, first, last); - return ret; -} - /* ?id@?$collate@_W@std@@2V0locale@2@A */ locale_id collate_wchar_id = {0}; /* ?id@?$collate@G@std@@2V0locale@2@A */ @@ -892,92 +775,11 @@ extern const vtable_ptr MSVCP_collate_wchar_vtable; /* ??_7?$collate@G@std@@6B@ */ extern const vtable_ptr MSVCP_collate_short_vtable; -/* ?_Init@?$collate@_W@std@@IAEXABV_Locinfo@2@@Z */ -/* ?_Init@?$collate@_W@std@@IEAAXAEBV_Locinfo@2@@Z */ -/* ?_Init@?$collate@G@std@@IAEXABV_Locinfo@2@@Z */ -/* ?_Init@?$collate@G@std@@IEAAXAEBV_Locinfo@2@@Z */ -DEFINE_THISCALL_WRAPPER(collate_wchar__Init, 8) -void __thiscall collate_wchar__Init(collate *this, const _Locinfo *locinfo) -{ - TRACE("(%p %p)\n", this, locinfo); - _Locinfo__Getcoll(locinfo, &this->coll); -} - -/* ??0?$collate@_W@std@@IAE@PBDI@Z */ -/* ??0?$collate@_W@std@@IEAA@PEBD_K@Z */ -DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_name, 12) -collate* __thiscall collate_wchar_ctor_name(collate *this, const char *name, MSVCP_size_t refs) -{ - _Locinfo locinfo; - - TRACE("(%p %s %lu)\n", this, name, refs); - - locale_facet_ctor_refs(&this->facet, refs); - this->facet.vtable = &MSVCP_collate_wchar_vtable; - - _Locinfo_ctor_cstr(&locinfo, name); - collate_wchar__Init(this, &locinfo); - _Locinfo_dtor(&locinfo); - return this; -} - -/* ??0?$collate@G@std@@IAE@PBDI@Z */ -/* ??0?$collate@G@std@@IEAA@PEBD_K@Z */ -DEFINE_THISCALL_WRAPPER(collate_short_ctor_name, 12) -collate* __thiscall collate_short_ctor_name(collate *this, const char *name, MSVCP_size_t refs) -{ - collate *ret = collate_wchar_ctor_name(this, name, refs); - ret->facet.vtable = &MSVCP_collate_short_vtable; - return ret; -} - -/* ??0?$collate@_W@std@@QAE@ABV_Locinfo@1@I@Z */ -/* ??0?$collate@_W@std@@QEAA@AEBV_Locinfo@1@_K@Z */ -DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_locinfo, 12) -collate* __thiscall collate_wchar_ctor_locinfo(collate *this, _Locinfo *locinfo, MSVCP_size_t refs) -{ - TRACE("(%p %p %lu)\n", this, locinfo, refs); - - locale_facet_ctor_refs(&this->facet, refs); - this->facet.vtable = &MSVCP_collate_wchar_vtable; - collate_wchar__Init(this, locinfo); - return this; -} - -/* ??0?$collate@G@std@@QAE@ABV_Locinfo@1@I@Z */ -/* ??0?$collate@G@std@@QEAA@AEBV_Locinfo@1@_K@Z */ -DEFINE_THISCALL_WRAPPER(collate_short_ctor_locinfo, 12) -collate* __thiscall collate_short_ctor_locinfo(collate *this, _Locinfo *locinfo, MSVCP_size_t refs) -{ - collate *ret = collate_wchar_ctor_locinfo(this, locinfo, refs); - ret->facet.vtable = &MSVCP_collate_short_vtable; - return ret; -} - -/* ??0?$collate@_W@std@@QAE@I@Z */ -/* ??0?$collate@_W@std@@QEAA@_K@Z */ -DEFINE_THISCALL_WRAPPER(collate_wchar_ctor_refs, 8) -collate* __thiscall collate_wchar_ctor_refs(collate *this, MSVCP_size_t refs) -{ - return collate_wchar_ctor_name(this, "C", refs); -} - -/* ??0?$collate@G@std@@QAE@I@Z */ -/* ??0?$collate@G@std@@QEAA@_K@Z */ -DEFINE_THISCALL_WRAPPER(collate_short_ctor_refs, 8) -collate* __thiscall collate_short_ctor_refs(collate *this, MSVCP_size_t refs) -{ - collate *ret = collate_wchar_ctor_refs(this, refs); - ret->facet.vtable = &MSVCP_collate_short_vtable; - return ret; -} - /* ??1?$collate@_W@std@@MAE@XZ */ /* ??1?$collate@_W@std@@MEAA@XZ */ /* ??1?$collate@G@std@@MAE@XZ */ /* ??1?$collate@G@std@@MEAA@XZ */ -DEFINE_THISCALL_WRAPPER(collate_wchar_dtor, 4) -void __thiscall collate_wchar_dtor(collate *this) +static void collate_wchar_dtor(collate *this) { TRACE("(%p)\n", this); } @@ -1002,24 +804,6 @@ collate* __thiscall collate_wchar_vector_dtor(collate *this, unsigned int flags) return this; } -/* ??_F?$collate@_W@std@@QAEXXZ */ -/* ??_F?$collate@_W@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(collate_wchar_ctor, 4) -collate* __thiscall collate_wchar_ctor(collate *this) -{ - return collate_wchar_ctor_name(this, "C", 0); -} - -/* ??_F?$collate@G@std@@QAEXXZ */ -/* ??_F?$collate@G@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(collate_short_ctor, 4) -collate* __thiscall collate_short_ctor(collate *this) -{ - collate *ret = collate_wchar_ctor(this); - ret->facet.vtable = &MSVCP_collate_short_vtable; - return ret; -} - /* _Wcscoll */ int __cdecl _Wcscoll(const wchar_t *first1, const wchar_t *last1, const wchar_t *first2, const wchar_t *last2, const _Collvec *coll) @@ -1050,18 +834,6 @@ int __thiscall collate_wchar_do_compare(const collate *this, const wchar_t *firs return _Wcscoll(first1, last1, first2, last2, &this->coll); } -/* ?compare@?$collate@_W@std@@QBEHPB_W000@Z */ -/* ?compare@?$collate@_W@std@@QEBAHPEB_W000@Z */ -/* ?compare@?$collate@G@std@@QBEHPBG000@Z */ -/* ?compare@?$collate@G@std@@QEBAHPEBG000@Z */ -DEFINE_THISCALL_WRAPPER(collate_wchar_compare, 20) -int __thiscall collate_wchar_compare(const collate *this, const wchar_t *first1, - const wchar_t *last1, const wchar_t *first2, const wchar_t *last2) -{ - TRACE("(%p %p %p %p %p)\n", this, first1, last1, first2, last2); - return call_collate_wchar_do_compare(this, first1, last1, first2, last2); -} - /* ?do_hash@?$collate@_W@std@@MBEJPB_W0@Z */ /* ?do_hash@?$collate@_W@std@@MEBAJPEB_W0@Z */ /* ?do_hash@?$collate@G@std@@MBEJPBG0@Z */ @@ -1081,18 +853,6 @@ LONG __thiscall collate_wchar_do_hash(const collate *this, return ret; } -/* ?hash@?$collate@_W@std@@QBEJPB_W0@Z */ -/* ?hash@?$collate@_W@std@@QEBAJPEB_W0@Z */ -/* ?hash@?$collate@G@std@@QBEJPBG0@Z */ -/* ?hash@?$collate@G@std@@QEBAJPEBG0@Z */ -DEFINE_THISCALL_WRAPPER(collate_wchar_hash, 12) -LONG __thiscall collate_wchar_hash(const collate *this, - const wchar_t *first, const wchar_t *last) -{ - TRACE("(%p %p %p)\n", this, first, last); - return call_collate_wchar_do_hash(this, first, last); -} - /* ?do_transform@?$collate@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */ /* ?do_transform@?$collate@_W@std@@MEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */ /* ?do_transform@?$collate@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */ @@ -1105,18 +865,6 @@ basic_string_wchar* __thiscall collate_wchar_do_transform(const collate *this, return ret; } -/* ?transform@?$collate@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z */ -/* ?transform@?$collate@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W0@Z */ -/* ?transform@?$collate@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z */ -/* ?transform@?$collate@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z */ -DEFINE_THISCALL_WRAPPER(collate_wchar_transform, 16) -basic_string_wchar* __thiscall collate_wchar_transform(const collate *this, - basic_string_wchar *ret, const wchar_t *first, const wchar_t *last) -{ - FIXME("(%p %p %p) stub\n", this, first, last); - return ret; -} - /* ??_7ctype_base@std@@6B@ */ extern const vtable_ptr MSVCP_ctype_base_vtable; @@ -1170,12 +918,6 @@ ctype_base* __thiscall ctype_base_vector_dtor(ctype_base *this, unsigned int fla return this; } -/* ?_Xran@ctype_base@std@@KAXXZ */ -static void __cdecl ctype_base__Xran(void) -{ - throw_exception(EXCEPTION_OUT_OF_RANGE, "out of range in ctype<T>"); -} - /* ?id@?$ctype@D@std@@2V0locale@2@A */ locale_id ctype_char_id = {0}; /* ?table_size@?$ctype@D@std@@2IB */ @@ -1305,17 +1047,6 @@ const char* __thiscall ctype_char_do_narrow(const ctype_char *this, return last; } -/* ?_Do_narrow_s@?$ctype@D@std@@MBEPBDPBD0DPADI@Z */ -/* ?_Do_narrow_s@?$ctype@D@std@@MEBAPEBDPEBD0DPEAD_K@Z */ -DEFINE_THISCALL_WRAPPER(ctype_char__Do_narrow_s, 24) -const char* __thiscall ctype_char__Do_narrow_s(const ctype_char *this, const char *first, - const char *last, char unused, char *dest, MSVCP_size_t size) -{ - TRACE("(%p %p %p %p %lu)\n", this, first, last, dest, size); - memcpy_s(dest, size, first, last-first); - return last; -} - /* ?narrow@?$ctype@D@std@@QBEDDD@Z */ /* ?narrow@?$ctype@D@std@@QEBADDD@Z */ DEFINE_THISCALL_WRAPPER(ctype_char_narrow_ch, 12) @@ -1335,16 +1066,6 @@ const char* __thiscall ctype_char_narrow(const ctype_char *this, return call_ctype_char_do_narrow(this, first, last, dflt, dest); } -/* ?_Narrow_s@?$ctype@D@std@@QBEPBDPBD0DPADI@Z */ -/* ?_Narrow_s@?$ctype@D@std@@QEBAPEBDPEBD0DPEAD_K@Z */ -DEFINE_THISCALL_WRAPPER(ctype_char__Narrow_s, 24) -const char* __thiscall ctype_char__Narrow_s(const ctype_char *this, const char *first, - const char *last, char dflt, char *dest, MSVCP_size_t size) -{ - TRACE("(%p %p %p %p %lu)\n", this, first, last, dest, size); - return ctype_char__Do_narrow_s(this, first, last, dflt, dest, size); -} - /* ?do_widen@?$ctype@D@std@@MBEDD@Z */ /* ?do_widen@?$ctype@D@std@@MEBADD@Z */ DEFINE_THISCALL_WRAPPER(ctype_char_do_widen_ch, 8) @@ -1370,17 +1091,6 @@ const char* __thiscall ctype_char_do_widen(const ctype_char *this, return last; } -/* ?_Do_widen_s@?$ctype@D@std@@MBEPBDPBD0PADI@Z */ -/* ?_Do_widen_s@?$ctype@D@std@@MEBAPEBDPEBD0PEAD_K@Z */ -DEFINE_THISCALL_WRAPPER(ctype_char__Do_widen_s, 20) -const char* __thiscall ctype_char__Do_widen_s(const ctype_char *this, - const char *first, const char *last, char *dest, MSVCP_size_t size) -{ - TRACE("(%p %p %p %p %lu)\n", this, first, last, dest, size); - memcpy_s(dest, size, first, last-first); - return last; -} - /* ?widen@?$ctype@D@std@@QBEDD@Z */ /* ?widen@?$ctype@D@std@@QEBADD@Z */ DEFINE_THISCALL_WRAPPER(ctype_char_widen_ch, 8) @@ -1400,16 +1110,6 @@ const char* __thiscall ctype_char_widen(const ctype_char *this, return call_ctype_char_do_widen(this, first, last, dest); } -/* ?_Widen_s@?$ctype@D@std@@QBEPBDPBD0PADI@Z */ -/* ?_Widen_s@?$ctype@D@std@@QEBAPEBDPEBD0PEAD_K@Z */ -DEFINE_THISCALL_WRAPPER(ctype_char__Widen_s, 20) -const char* __thiscall ctype_char__Widen_s(const ctype_char *this, - const char *first, const char *last, char *dest, MSVCP_size_t size) -{ - TRACE("(%p %p %p %p %lu)\n", this, first, last, dest, size); - return ctype_char__Do_widen_s(this, first, last, dest, size); -} - /* ?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */ /* ?_Getcat@?$ctype@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */ MSVCP_size_t __cdecl ctype_char__Getcat(const locale_facet **facet, const locale *loc) @@ -1679,15 +1379,6 @@ const char* __thiscall ctype_char_scan_not(const ctype_char *this, short mask, c return first; } -/* ?table@?$ctype@D@std@@IBEPBFXZ */ -/* ?table@?$ctype@D@std@@IEBAPEBFXZ */ -DEFINE_THISCALL_WRAPPER(ctype_char_table, 4) -const short* __thiscall ctype_char_table(const ctype_char *this) -{ - TRACE("(%p)\n", this); - return this->ctype.table; -} - /* ?id@?$ctype@_W@std@@2V0locale@2@A */ locale_id ctype_wchar_id = {0}; /* ?id@?$ctype@G@std@@2V0locale@2@A */ @@ -1762,25 +1453,6 @@ ctype_wchar* __thiscall ctype_short_ctor_refs(ctype_wchar *this, MSVCP_size_t re return ret; } -/* ??0?$ctype@G@std@@IAE@PBDI@Z */ -/* ??0?$ctype@G@std@@IEAA@PEBD_K@Z */ -DEFINE_THISCALL_WRAPPER(ctype_short_ctor_name, 12) -ctype_wchar* __thiscall ctype_short_ctor_name(ctype_wchar *this, - const char *name, MSVCP_size_t refs) -{ - _Locinfo locinfo; - - TRACE("(%p %s %lu)\n", this, debugstr_a(name), refs); - - ctype_base_ctor_refs(&this->base, refs); - this->base.facet.vtable = &MSVCP_ctype_short_vtable; - - _Locinfo_ctor_cstr(&locinfo, name); - ctype_wchar__Init(this, &locinfo); - _Locinfo_dtor(&locinfo); - return this; -} - /* ??_F?$ctype@_W@std@@QAEXXZ */ /* ??_F?$ctype@_W@std@@QEAAXXZ */ DEFINE_THISCALL_WRAPPER(ctype_wchar_ctor, 4) @@ -1907,22 +1579,6 @@ const wchar_t* __thiscall ctype_wchar_do_narrow(const ctype_wchar *this, return last; } -/* ?_Do_narrow_s@?$ctype@_W@std@@MBEPB_WPB_W0DPADI@Z */ -/* ?_Do_narrow_s@?$ctype@_W@std@@MEBAPEB_WPEB_W0DPEAD_K@Z */ -/* ?_Do_narrow_s@?$ctype@G@std@@MBEPBGPBG0DPADI@Z */ -/* ?_Do_narrow_s@?$ctype@G@std@@MEBAPEBGPEBG0DPEAD_K@Z */ -DEFINE_THISCALL_WRAPPER(ctype_wchar__Do_narrow_s, 24) -const wchar_t* __thiscall ctype_wchar__Do_narrow_s(const ctype_wchar *this, - const wchar_t *first, const wchar_t *last, char dflt, char *dest, MSVCP_size_t size) -{ - TRACE("(%p %p %p %d %p %lu)\n", this, first, last, dflt, dest, size); - /* This function converts all multi-byte characters to dflt, - * thanks to it result size is known before converting */ - if(last-first > size) - ctype_base__Xran(); - return ctype_wchar_do_narrow(this, first, last, dflt, dest); -} - /* ?narrow@?$ctype@_W@std@@QBED_WD@Z */ /* ?narrow@?$ctype@_W@std@@QEBAD_WD@Z */ /* ?narrow@?$ctype@G@std@@QBEDGD@Z */ @@ -1946,18 +1602,6 @@ const wchar_t* __thiscall ctype_wchar_narrow(const ctype_wchar *this, return call_ctype_wchar_do_narrow(this, first, last, dflt, dest); } -/* ?_Narrow_s@?$ctype@_W@std@@QBEPB_WPB_W0DPADI@Z */ -/* ?_Narrow_s@?$ctype@_W@std@@QEBAPEB_WPEB_W0DPEAD_K@Z */ -/* ?_Narrow_s@?$ctype@G@std@@QBEPBGPBG0DPADI@Z */ -/* ?_Narrow_s@?$ctype@G@std@@QEBAPEBGPEBG0DPEAD_K@Z */ -DEFINE_THISCALL_WRAPPER(ctype_wchar__Narrow_s, 24) -const wchar_t* __thiscall ctype_wchar__Narrow_s(const ctype_wchar *this, const wchar_t *first, - const wchar_t *last, char dflt, char *dest, MSVCP_size_t size) -{ - TRACE("(%p %p %p %d %p %lu)\n", this, first, last, dflt, dest, size); - return ctype_wchar__Do_narrow_s(this, first, last, dflt, dest, size); -} - /* _Mbrtowc */ int __cdecl _Mbrtowc(wchar_t *out, const char *in, MSVCP_size_t len, int *state, const _Cvtvec *cvt) { @@ -2069,22 +1713,6 @@ const char* __thiscall ctype_wchar_do_widen(const ctype_wchar *this, return last; } -/* ?_Do_widen_s@?$ctype@_W@std@@MBEPBDPBD0PA_WI@Z */ -/* ?_Do_widen_s@?$ctype@_W@std@@MEBAPEBDPEBD0PEA_W_K@Z */ -/* ?_Do_widen_s@?$ctype@G@std@@MBEPBDPBD0PAGI@Z */ -/* ?_Do_widen_s@?$ctype@G@std@@MEBAPEBDPEBD0PEAG_K@Z */ -DEFINE_THISCALL_WRAPPER(ctype_wchar__Do_widen_s, 20) -const char* __thiscall ctype_wchar__Do_widen_s(const ctype_wchar *this, - const char *first, const char *last, wchar_t *dest, MSVCP_size_t size) -{ - TRACE("(%p %p %p %p %lu)\n", this, first, last, dest, size); - /* This function converts all multi-byte characters to WEOF, - * thanks to it result size is known before converting */ - if(size < last-first) - ctype_base__Xran(); - return ctype_wchar_do_widen(this, first, last, dest); -} - /* ?widen@?$ctype@_W@std@@QBE_WD@Z */ /* ?widen@?$ctype@_W@std@@QEBA_WD@Z */ /* ?widen@?$ctype@G@std@@QBEGD@Z */ @@ -2108,18 +1736,6 @@ const char* __thiscall ctype_wchar_widen(const ctype_wchar *this, return call_ctype_wchar_do_widen(this, first, last, dest); } -/* ?_Widen_s@?$ctype@_W@std@@QBEPBDPBD0PA_WI@Z */ -/* ?_Widen_s@?$ctype@_W@std@@QEBAPEBDPEBD0PEA_W_K@Z */ -/* ?_Widen_s@?$ctype@G@std@@QBEPBDPBD0PAGI@Z */ -/* ?_Widen_s@?$ctype@G@std@@QEBAPEBDPEBD0PEAG_K@Z */ -DEFINE_THISCALL_WRAPPER(ctype_wchar__Widen_s, 20) -const char* __thiscall ctype_wchar__Widen_s(const ctype_wchar *this, - const char *first, const char *last, wchar_t *dest, MSVCP_size_t size) -{ - TRACE("(%p %p %p %p %lu)\n", this, first, last, dest, size); - return ctype_wchar__Do_widen_s(this, first, last, dest, size); -} - /* ?_Getcat@?$ctype@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */ /* ?_Getcat@?$ctype@_W@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */ MSVCP_size_t __cdecl ctype_wchar__Getcat(const locale_facet **facet, const locale *loc) @@ -2871,21 +2487,6 @@ codecvt_wchar* __thiscall codecvt_short_ctor_refs(codecvt_wchar *this, MSVCP_siz return this; } -/* ??0?$codecvt@GDH@std@@IAE@PBDI@Z */ -/* ??0?$codecvt@GDH@std@@IEAA@PEBD_K@Z */ -DEFINE_THISCALL_WRAPPER(codecvt_short_ctor_name, 12) -codecvt_wchar* __thiscall codecvt_short_ctor_name(codecvt_wchar *this, const char *name, MSVCP_size_t refs) -{ - _Locinfo locinfo; - - TRACE("(%p %s %ld)\n", this, name, refs); - - _Locinfo_ctor_cstr(&locinfo, name); - codecvt_short_ctor_locinfo(this, &locinfo, refs); - _Locinfo_dtor(&locinfo); - return this; -} - /* ??_F?$codecvt@_WDH@std@@QAEXXZ */ /* ??_F?$codecvt@_WDH@std@@QEAAXXZ */ DEFINE_THISCALL_WRAPPER(codecvt_wchar_ctor, 4) @@ -3251,8 +2852,7 @@ extern const vtable_ptr MSVCP_numpunct_char_vtable; /* ?_Init@?$numpunct@D@std@@IAEXABV_Locinfo@2@_N@Z */ /* ?_Init@?$numpunct@D@std@@IEAAXAEBV_Locinfo@2@_N@Z */ -DEFINE_THISCALL_WRAPPER(numpunct_char__Init, 12) -void __thiscall numpunct_char__Init(numpunct_char *this, const _Locinfo *locinfo, MSVCP_bool isdef) +static void numpunct_char__Init(numpunct_char *this, const _Locinfo *locinfo, MSVCP_bool isdef) { int len; @@ -3299,8 +2899,7 @@ void __thiscall numpunct_char__Init(numpunct_char *this, const _Locinfo *locinfo /* ?_Tidy@?$numpunct@D@std@@AAEXXZ */ /* ?_Tidy@?$numpunct@D@std@@AEAAXXZ */ -DEFINE_THISCALL_WRAPPER(numpunct_char__Tidy, 4) -void __thiscall numpunct_char__Tidy(numpunct_char *this) +static void numpunct_char__Tidy(numpunct_char *this) { TRACE("(%p)\n", this); @@ -3311,8 +2910,7 @@ void __thiscall numpunct_char__Tidy(numpunct_char *this) /* ??0?$numpunct@D@std@@QAE@ABV_Locinfo@1@I_N@Z */ /* ??0?$numpunct@D@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */ -DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_locinfo, 16) -numpunct_char* __thiscall numpunct_char_ctor_locinfo(numpunct_char *this, +static numpunct_char* numpunct_char_ctor_locinfo(numpunct_char *this, const _Locinfo *locinfo, MSVCP_size_t refs, MSVCP_bool usedef) { TRACE("(%p %p %lu %d)\n", this, locinfo, refs, usedef); @@ -3324,8 +2922,7 @@ numpunct_char* __thiscall numpunct_char_ctor_locinfo(numpunct_char *this, /* ??0?$numpunct@D@std@@IAE@PBDI_N@Z */ /* ??0?$numpunct@D@std@@IEAA@PEBD_K_N@Z */ -DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_name, 16) -numpunct_char* __thiscall numpunct_char_ctor_name(numpunct_char *this, +static numpunct_char* numpunct_char_ctor_name(numpunct_char *this, const char *name, MSVCP_size_t refs, MSVCP_bool usedef) { _Locinfo locinfo; @@ -3340,27 +2937,9 @@ numpunct_char* __thiscall numpunct_char_ctor_name(numpunct_char *this, return this; } -/* ??0?$numpunct@D@std@@QAE@I@Z */ -/* ??0?$numpunct@D@std@@QEAA@_K@Z */ -DEFINE_THISCALL_WRAPPER(numpunct_char_ctor_refs, 8) -numpunct_char* __thiscall numpunct_char_ctor_refs(numpunct_char *this, MSVCP_size_t refs) -{ - TRACE("(%p %lu)\n", this, refs); - return numpunct_char_ctor_name(this, "C", refs, FALSE); -} - -/* ??_F?$numpunct@D@std@@QAEXXZ */ -/* ??_F?$numpunct@D@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(numpunct_char_ctor, 4) -numpunct_char* __thiscall numpunct_char_ctor(numpunct_char *this) -{ - return numpunct_char_ctor_refs(this, 0); -} - /* ??1?$numpunct@D@std@@MAE@XZ */ /* ??1?$numpunct@D@std@@MEAA@XZ */ -DEFINE_THISCALL_WRAPPER(numpunct_char_dtor, 4) -void __thiscall numpunct_char_dtor(numpunct_char *this) +static void numpunct_char_dtor(numpunct_char *this) { TRACE("(%p)\n", this); numpunct_char__Tidy(this); @@ -3447,8 +3026,7 @@ char __thiscall numpunct_char_do_decimal_point(const numpunct_char *this) /* ?decimal_point@?$numpunct@D@std@@QBEDXZ */ /* ?decimal_point@?$numpunct@D@std@@QEBADXZ */ -DEFINE_THISCALL_WRAPPER(numpunct_char_decimal_point, 4) -char __thiscall numpunct_char_decimal_point(const numpunct_char *this) +static char numpunct_char_decimal_point(const numpunct_char *this) { TRACE("(%p)\n", this); return call_numpunct_char_do_decimal_point(this); @@ -3467,8 +3045,7 @@ char __thiscall numpunct_char_do_thousands_sep(const numpunct_char *this) /* ?thousands_sep@?$numpunct@D@std@@QBEDXZ */ /* ?thousands_sep@?$numpunct@D@std@@QEBADXZ */ -DEFINE_THISCALL_WRAPPER(numpunct_char_thousands_sep, 4) -char __thiscall numpunct_char_thousands_sep(const numpunct_char *this) +static char numpunct_char_thousands_sep(const numpunct_char *this) { TRACE("(%p)\n", this); return call_numpunct_char_do_thousands_sep(this); @@ -3488,8 +3065,7 @@ basic_string_char* __thiscall numpunct_char_do_grouping( /* ?grouping@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ /* ?grouping@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(numpunct_char_grouping, 8) -basic_string_char* __thiscall numpunct_char_grouping(const numpunct_char *this, basic_string_char *ret) +static basic_string_char* numpunct_char_grouping(const numpunct_char *this, basic_string_char *ret) { TRACE("(%p)\n", this); return call_numpunct_char_do_grouping(this, ret); @@ -3509,8 +3085,7 @@ basic_string_char* __thiscall numpunct_char_do_falsename( /* ?falsename@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ /* ?falsename@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(numpunct_char_falsename, 8) -basic_string_char* __thiscall numpunct_char_falsename(const numpunct_char *this, basic_string_char *ret) +static basic_string_char* numpunct_char_falsename(const numpunct_char *this, basic_string_char *ret) { TRACE("(%p)\n", this); return call_numpunct_char_do_falsename(this, ret); @@ -3530,8 +3105,7 @@ basic_string_char* __thiscall numpunct_char_do_truename( /* ?truename@?$numpunct@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ /* ?truename@?$numpunct@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(numpunct_char_truename, 8) -basic_string_char* __thiscall numpunct_char_truename(const numpunct_char *this, basic_string_char *ret) +static basic_string_char* numpunct_char_truename(const numpunct_char *this, basic_string_char *ret) { TRACE("(%p)\n", this); return call_numpunct_char_do_truename(this, ret); @@ -3551,8 +3125,7 @@ extern const vtable_ptr MSVCP_numpunct_short_vtable; /* ?_Init@?$numpunct@_W@std@@IEAAXAEBV_Locinfo@2@_N@Z */ /* ?_Init@?$numpunct@G@std@@IAEXABV_Locinfo@2@_N@Z */ /* ?_Init@?$numpunct@G@std@@IEAAXAEBV_Locinfo@2@_N@Z */ -DEFINE_THISCALL_WRAPPER(numpunct_wchar__Init, 12) -void __thiscall numpunct_wchar__Init(numpunct_wchar *this, +static void numpunct_wchar__Init(numpunct_wchar *this, const _Locinfo *locinfo, MSVCP_bool isdef) { const char *to_convert; @@ -3610,8 +3183,7 @@ void __thiscall numpunct_wchar__Init(numpunct_wchar *this, /* ?_Tidy@?$numpunct@_W@std@@AEAAXXZ */ /* ?_Tidy@?$numpunct@G@std@@AAEXXZ */ /* ?_Tidy@?$numpunct@G@std@@AEAAXXZ */ -DEFINE_THISCALL_WRAPPER(numpunct_wchar__Tidy, 4) -void __thiscall numpunct_wchar__Tidy(numpunct_wchar *this) +static void numpunct_wchar__Tidy(numpunct_wchar *this) { TRACE("(%p)\n", this); @@ -3622,8 +3194,7 @@ void __thiscall numpunct_wchar__Tidy(numpunct_wchar *this) /* ??0?$numpunct@_W@std@@QAE@ABV_Locinfo@1@I_N@Z */ /* ??0?$numpunct@_W@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */ -DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_locinfo, 16) -numpunct_wchar* __thiscall numpunct_wchar_ctor_locinfo(numpunct_wchar *this, +static numpunct_wchar* numpunct_wchar_ctor_locinfo(numpunct_wchar *this, const _Locinfo *locinfo, MSVCP_size_t refs, MSVCP_bool usedef) { TRACE("(%p %p %lu %d)\n", this, locinfo, refs, usedef); @@ -3635,8 +3206,7 @@ numpunct_wchar* __thiscall numpunct_wchar_ctor_locinfo(numpunct_wchar *this, /* ??0?$numpunct@G@std@@QAE@ABV_Locinfo@1@I_N@Z */ /* ??0?$numpunct@G@std@@QEAA@AEBV_Locinfo@1@_K_N@Z */ -DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_locinfo, 16) -numpunct_wchar* __thiscall numpunct_short_ctor_locinfo(numpunct_wchar *this, +static numpunct_wchar* numpunct_short_ctor_locinfo(numpunct_wchar *this, const _Locinfo *locinfo, MSVCP_size_t refs, MSVCP_bool usedef) { numpunct_wchar_ctor_locinfo(this, locinfo, refs, usedef); @@ -3646,8 +3216,7 @@ numpunct_wchar* __thiscall numpunct_short_ctor_locinfo(numpunct_wchar *this, /* ??0?$numpunct@_W@std@@IAE@PBDI_N@Z */ /* ??0?$numpunct@_W@std@@IEAA@PEBD_K_N@Z */ -DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_name, 16) -numpunct_wchar* __thiscall numpunct_wchar_ctor_name(numpunct_wchar *this, +static numpunct_wchar* numpunct_wchar_ctor_name(numpunct_wchar *this, const char *name, MSVCP_size_t refs, MSVCP_bool usedef) { _Locinfo locinfo; @@ -3664,8 +3233,7 @@ numpunct_wchar* __thiscall numpunct_wchar_ctor_name(numpunct_wchar *this, /* ??0?$numpunct@G@std@@IAE@PBDI_N@Z */ /* ??0?$numpunct@G@std@@IEAA@PEBD_K_N@Z */ - DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_name, 16) -numpunct_wchar* __thiscall numpunct_short_ctor_name(numpunct_wchar *this, +static numpunct_wchar* numpunct_short_ctor_name(numpunct_wchar *this, const char *name, MSVCP_size_t refs, MSVCP_bool usedef) { numpunct_wchar_ctor_name(this, name, refs, usedef); @@ -3673,47 +3241,11 @@ numpunct_wchar* __thiscall numpunct_short_ctor_name(numpunct_wchar *this, return this; } -/* ??0?$numpunct@_W@std@@QAE@I@Z */ -/* ??0?$numpunct@_W@std@@QEAA@_K@Z */ - DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor_refs, 8) -numpunct_wchar* __thiscall numpunct_wchar_ctor_refs(numpunct_wchar *this, MSVCP_size_t refs) -{ - TRACE("(%p %lu)\n", this, refs); - return numpunct_wchar_ctor_name(this, "C", refs, FALSE); -} - -/* ??0?$numpunct@G@std@@QAE@I@Z */ -/* ??0?$numpunct@G@std@@QEAA@_K@Z */ -DEFINE_THISCALL_WRAPPER(numpunct_short_ctor_refs, 8) -numpunct_wchar* __thiscall numpunct_short_ctor_refs(numpunct_wchar *this, MSVCP_size_t refs) -{ - numpunct_wchar_ctor_refs(this, refs); - this->facet.vtable = &MSVCP_numpunct_short_vtable; - return this; -} - -/* ??_F?$numpunct@_W@std@@QAEXXZ */ -/* ??_F?$numpunct@_W@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(numpunct_wchar_ctor, 4) -numpunct_wchar* __thiscall numpunct_wchar_ctor(numpunct_wchar *this) -{ - return numpunct_wchar_ctor_refs(this, 0); -} - -/* ??_F?$numpunct@G@std@@QAEXXZ */ -/* ??_F?$numpunct@G@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(numpunct_short_ctor, 4) -numpunct_wchar* __thiscall numpunct_short_ctor(numpunct_wchar *this) -{ - return numpunct_short_ctor_refs(this, 0); -} - /* ??1?$numpunct@_W@std@@MAE@XZ */ /* ??1?$numpunct@_W@std@@MEAA@XZ */ /* ??1?$numpunct@G@std@@MAE@XZ */ /* ??1?$numpunct@G@std@@MEAA@XZ */ -DEFINE_THISCALL_WRAPPER(numpunct_wchar_dtor, 4) -void __thiscall numpunct_wchar_dtor(numpunct_wchar *this) +static void numpunct_wchar_dtor(numpunct_wchar *this) { TRACE("(%p)\n", this); numpunct_wchar__Tidy(this); @@ -3852,8 +3384,7 @@ wchar_t __thiscall numpunct_wchar_do_decimal_point(const numpunct_wchar *this) /* ?decimal_point@?$numpunct@_W@std@@QEBA_WXZ */ /* ?decimal_point@?$numpunct@G@std@@QBEGXZ */ /* ?decimal_point@?$numpunct@G@std@@QEBAGXZ */ -DEFINE_THISCALL_WRAPPER(numpunct_wchar_decimal_point, 4) -wchar_t __thiscall numpunct_wchar_decimal_point(const numpunct_wchar *this) +static wchar_t numpunct_wchar_decimal_point(const numpunct_wchar *this) { TRACE("(%p)\n", this); return call_numpunct_wchar_do_decimal_point(this); @@ -3876,8 +3407,7 @@ wchar_t __thiscall numpunct_wchar_do_thousands_sep(const numpunct_wchar *this) /* ?thousands_sep@?$numpunct@_W@std@@QEBA_WXZ */ /* ?thousands_sep@?$numpunct@G@std@@QBEGXZ */ /* ?thousands_sep@?$numpunct@G@std@@QEBAGXZ */ -DEFINE_THISCALL_WRAPPER(numpunct_wchar_thousands_sep, 4) -wchar_t __thiscall numpunct_wchar_thousands_sep(const numpunct_wchar *this) +static wchar_t numpunct_wchar_thousands_sep(const numpunct_wchar *this) { TRACE("(%p)\n", this); return call_numpunct_wchar_do_thousands_sep(this); @@ -3900,8 +3430,7 @@ basic_string_char* __thiscall numpunct_wchar_do_grouping(const numpunct_wchar *t /* ?grouping@?$numpunct@_W@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ /* ?grouping@?$numpunct@G@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ /* ?grouping@?$numpunct@G@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(numpunct_wchar_grouping, 8) -basic_string_char* __thiscall numpunct_wchar_grouping(const numpunct_wchar *this, basic_string_char *ret) +static basic_string_char* numpunct_wchar_grouping(const numpunct_wchar *this, basic_string_char *ret) { TRACE("(%p)\n", this); return call_numpunct_wchar_do_grouping(this, ret); @@ -3924,8 +3453,7 @@ basic_string_wchar* __thiscall numpunct_wchar_do_falsename(const numpunct_wchar /* ?falsename@?$numpunct@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ /* ?falsename@?$numpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ /* ?falsename@?$numpunct@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(numpunct_wchar_falsename, 8) -basic_string_wchar* __thiscall numpunct_wchar_falsename(const numpunct_wchar *this, basic_string_wchar *ret) +static basic_string_wchar* numpunct_wchar_falsename(const numpunct_wchar *this, basic_string_wchar *ret) { TRACE("(%p)\n", this); return call_numpunct_wchar_do_falsename(this, ret); @@ -3948,8 +3476,7 @@ basic_string_wchar* __thiscall numpunct_wchar_do_truename(const numpunct_wchar * /* ?truename@?$numpunct@_W@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ /* ?truename@?$numpunct@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ /* ?truename@?$numpunct@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(numpunct_wchar_truename, 8) -basic_string_wchar* __thiscall numpunct_wchar_truename(const numpunct_wchar *this, basic_string_wchar *ret) +static basic_string_wchar* numpunct_wchar_truename(const numpunct_wchar *this, basic_string_wchar *ret) { TRACE("(%p)\n", this); return call_numpunct_wchar_do_truename(this, ret); @@ -8055,8 +7582,7 @@ const vtable_ptr MSVCP_locale__Locimp_vtable[] = { /* ??0locale@std@@AAE@PAV_Locimp@01@@Z */ /* ??0locale@std@@AEAA@PEAV_Locimp@01@@Z */ -DEFINE_THISCALL_WRAPPER(locale_ctor_locimp, 8) -locale* __thiscall locale_ctor_locimp(locale *this, locale__Locimp *locimp) +static locale* locale_ctor_locimp(locale *this, locale__Locimp *locimp) { TRACE("(%p %p)\n", this, locimp); /* Don't change locimp reference counter */ @@ -8099,34 +7625,9 @@ locale__Locimp* __cdecl locale__Init(void) return global_locale; } -/* ??0locale@std@@QAE@ABV01@0H@Z */ -/* ??0locale@std@@QEAA@AEBV01@0H@Z */ -DEFINE_THISCALL_WRAPPER(locale_ctor_locale_locale, 16) -locale* __thiscall locale_ctor_locale_locale(locale *this, const locale *loc, const locale *other, category cat) -{ - _Locinfo locinfo; - - TRACE("(%p %p %p %d)\n", this, loc, other, cat); - - this->ptr = MSVCRT_operator_new(sizeof(locale__Locimp)); - if(!this->ptr) { - ERR("Out of memory\n"); - throw_exception(EXCEPTION_BAD_ALLOC, NULL); - } - locale__Locimp_copy_ctor(this->ptr, loc->ptr); - - _Locinfo_ctor_cat_cstr(&locinfo, loc->ptr->catmask, MSVCP_basic_string_char_c_str(&loc->ptr->name)); - _Locinfo__Addcats(&locinfo, cat & other->ptr->catmask, MSVCP_basic_string_char_c_str(&other->ptr->name)); - locale__Locimp__Makeloc(&locinfo, cat, this->ptr, other); - _Locinfo_dtor(&locinfo); - - return this; -} - /* ??0locale@std@@QAE@ABV01@@Z */ /* ??0locale@std@@QEAA@AEBV01@@Z */ -DEFINE_THISCALL_WRAPPER(locale_copy_ctor, 8) -locale* __thiscall locale_copy_ctor(locale *this, const locale *copy) +locale* locale_copy_ctor(locale *this, const locale *copy) { TRACE("(%p %p)\n", this, copy); this->ptr = copy->ptr; @@ -8134,60 +7635,9 @@ locale* __thiscall locale_copy_ctor(locale *this, const locale *copy) return this; } -/* ??0locale@std@@QAE@ABV01@PBDH@Z */ -/* ??0locale@std@@QEAA@AEBV01@PEBDH@Z */ -DEFINE_THISCALL_WRAPPER(locale_ctor_locale_cstr, 16) -locale* __thiscall locale_ctor_locale_cstr(locale *this, const locale *loc, const char *locname, category cat) -{ - FIXME("(%p %p %s %d) stub\n", this, loc, locname, cat); - return NULL; -} - -/* ??0locale@std@@QAE@PBDH@Z */ -/* ??0locale@std@@QEAA@PEBDH@Z */ -DEFINE_THISCALL_WRAPPER(locale_ctor_cstr, 12) -locale* __thiscall locale_ctor_cstr(locale *this, const char *locname, category cat) -{ - _Locinfo locinfo; - - TRACE("(%p %s %d)\n", this, locname, cat); - - this->ptr = MSVCRT_operator_new(sizeof(locale__Locimp)); - if(!this->ptr) { - ERR("Out of memory\n"); - throw_exception(EXCEPTION_BAD_ALLOC, NULL); - } - locale__Locimp_ctor(this->ptr); - - locale__Init(); - - _Locinfo_ctor_cat_cstr(&locinfo, cat, locname); - if(!memcmp(MSVCP_basic_string_char_c_str(&locinfo.newlocname), "*", 2)) { - _Locinfo_dtor(&locinfo); - MSVCRT_operator_delete(this->ptr); - throw_exception(EXCEPTION_RUNTIME_ERROR, "bad locale name"); - } - - locale__Locimp__Makeloc(&locinfo, cat, this->ptr, NULL); - _Locinfo_dtor(&locinfo); - - return this; -} - -/* ??0locale@std@@QAE@W4_Uninitialized@1@@Z */ -/* ??0locale@std@@QEAA@W4_Uninitialized@1@@Z */ -DEFINE_THISCALL_WRAPPER(locale_ctor_uninitialized, 8) -locale* __thiscall locale_ctor_uninitialized(locale *this, int uninitialized) -{ - TRACE("(%p)\n", this); - this->ptr = NULL; - return this; -} - /* ??0locale@std@@QAE@XZ */ /* ??0locale@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(locale_ctor, 4) -locale* __thiscall locale_ctor(locale *this) +locale* locale_ctor(locale *this) { TRACE("(%p)\n", this); this->ptr = locale__Init(); @@ -8197,93 +7647,24 @@ locale* __thiscall locale_ctor(locale *this) /* ??1locale@std@@QAE@XZ */ /* ??1locale@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(locale_dtor, 4) -void __thiscall locale_dtor(locale *this) +void locale_dtor(locale *this) { TRACE("(%p)\n", this); if(this->ptr) locale__Locimp_dtor(this->ptr); } -DEFINE_THISCALL_WRAPPER(locale_vector_dtor, 8) -locale* __thiscall locale_vector_dtor(locale *this, unsigned int flags) -{ - TRACE("(%p %x)\n", this, flags); - if(flags & 2) { - /* we have an array, with the number of elements stored before the first object */ - INT_PTR i, *ptr = (INT_PTR *)this-1; - - for(i=*ptr-1; i>=0; i--) - locale_dtor(this+i); - MSVCRT_operator_delete(ptr); - } else { - locale_dtor(this); - if(flags & 1) - MSVCRT_operator_delete(this); - } - - return this; -} - /* ??4locale@std@@QAEAAV01@ABV01@@Z */ /* ??4locale@std@@QEAAAEAV01@AEBV01@@Z */ -DEFINE_THISCALL_WRAPPER(locale_operator_assign, 8) -locale* __thiscall locale_operator_assign(locale *this, const locale *loc) +locale* locale_operator_assign(locale *this, const locale *loc) { FIXME("(%p %p) stub\n", this, loc); return NULL; } -/* ??8locale@std@@QBE_NABV01@@Z */ -/* ??8locale@std@@QEBA_NAEBV01@@Z */ -DEFINE_THISCALL_WRAPPER(locale_operator_equal, 8) -MSVCP_bool __thiscall locale_operator_equal(const locale *this, const locale *loc) -{ - FIXME("(%p %p) stub\n", this, loc); - return 0; -} - -/* ??9locale@std@@QBE_NABV01@@Z */ -/* ??9locale@std@@QEBA_NAEBV01@@Z */ -DEFINE_THISCALL_WRAPPER(locale_operator_not_equal, 8) -MSVCP_bool __thiscall locale_operator_not_equal(const locale *this, locale const *loc) -{ - FIXME("(%p %p) stub\n", this, loc); - return 0; -} - -/* ?_Addfac@locale@std@@QAEAAV12@PAVfacet@12@II@Z */ -/* ?_Addfac@locale@std@@QEAAAEAV12@PEAVfacet@12@_K1@Z */ -DEFINE_THISCALL_WRAPPER(locale__Addfac, 16) -locale* __thiscall locale__Addfac(locale *this, locale_facet *facet, MSVCP_size_t id, MSVCP_size_t catmask) -{ - TRACE("(%p %p %lu %lu)\n", this, facet, id, catmask); - - if(this->ptr->facet.refs > 1) { - locale__Locimp *new_ptr = MSVCRT_operator_new(sizeof(locale__Locimp)); - if(!new_ptr) { - ERR("Out of memory\n"); - throw_exception(EXCEPTION_BAD_ALLOC, NULL); - return NULL; - } - locale__Locimp_copy_ctor(new_ptr, this->ptr); - locale_facet__Decref(&this->ptr->facet); - this->ptr = new_ptr; - } - - locale__Locimp__Addfac(this->ptr, facet, id); - - if(catmask) { - MSVCP_basic_string_char_dtor(&this->ptr->name); - MSVCP_basic_string_char_ctor_cstr(&this->ptr->name, "*"); - } - return this; -} - /* ?_Getfacet@locale@std@@QBEPBVfacet@12@I@Z */ /* ?_Getfacet@locale@std@@QEBAPEBVfacet@12@_K@Z */ -DEFINE_THISCALL_WRAPPER(locale__Getfacet, 8) -const locale_facet* __thiscall locale__Getfacet(const locale *this, MSVCP_size_t id) +static const locale_facet* locale__Getfacet(const locale *this, MSVCP_size_t id) { locale_facet *fac; @@ -8337,16 +7718,6 @@ locale* __cdecl locale_empty(locale *ret) return ret; } -/* ?name@locale@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -/* ?name@locale@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(locale_name, 8) -basic_string_char* __thiscall locale_name(const locale *this, basic_string_char *ret) -{ - TRACE( "(%p)\n", this); - MSVCP_basic_string_char_copy_ctor(ret, &this->ptr->name); - return ret; -} - /* ?global@locale@std@@SA?AV12@ABV12@@Z */ /* ?global@locale@std@@SA?AV12@AEBV12@@Z */ locale* __cdecl locale_global(locale *ret, const locale *loc) diff --git a/dlls/msvcp100/math.c b/dlls/msvcp100/math.c index 37229155235..d13eaef49b7 100644 --- a/dlls/msvcp100/math.c +++ b/dlls/msvcp100/math.c @@ -801,15 +801,3 @@ BOOLEAN __cdecl std_numeric_limits_bool_signaling_NaN(void) { return 0; } /* ?signaling_NaN@?$numeric_limits@_W@std@@SA_WXZ -> public: static wchar_t __cdecl std::numeric_limits<wchar_t>::signaling_NaN(void) */ WCHAR __cdecl std_numeric_limits_wchar_t_signaling_NaN(void) { return 0; } - -/* ??4?$_Ctraits@M@std@@QAEAAV01@ABV01@@Z -> public: class std::_Ctraits<float> & __thiscall std::_Ctraits<float>::operator=(class std::_Ctraits<float> const &) */ -/* ??4?$_Ctraits@M@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::_Ctraits<float> & __ptr64 __cdecl std::_Ctraits<float>::operator=(class std::_Ctraits<float> const & __ptr64) __ptr64 */ -/* ??4?$_Ctraits@N@std@@QAEAAV01@ABV01@@Z -> public: class std::_Ctraits<double> & __thiscall std::_Ctraits<double>::operator=(class std::_Ctraits<double> const &) */ -/* ??4?$_Ctraits@N@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::_Ctraits<double> & __ptr64 __cdecl std::_Ctraits<double>::operator=(class std::_Ctraits<double> const & __ptr64) __ptr64 */ -/* ??4?$_Ctraits@O@std@@QAEAAV01@ABV01@@Z -> public: class std::_Ctraits<long double> & __thiscall std::_Ctraits<long double>::operator=(class std::_Ctraits<long double> const &) */ -/* ??4?$_Ctraits@O@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::_Ctraits<long double> & __ptr64 __cdecl std::_Ctraits<long double>::operator=(class std::_Ctraits<long double> const & __ptr64) __ptr64 */ -DEFINE_THISCALL_WRAPPER( std_Ctraits_op_assign, 8 ) -std_Ctraits * __thiscall std_Ctraits_op_assign( std_Ctraits *this, std_Ctraits *right ) -{ - return this; -} diff --git a/dlls/msvcp100/memory.c b/dlls/msvcp100/memory.c index 4407cfe3967..a45dce04219 100644 --- a/dlls/msvcp100/memory.c +++ b/dlls/msvcp100/memory.c @@ -27,141 +27,29 @@ #include "winbase.h" -/* ?address@?$allocator@D@std@@QBEPADAAD@Z */ -/* ?address@?$allocator@D@std@@QEBAPEADAEAD@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_char_address, 8) -char* __thiscall MSVCP_allocator_char_address(void *this, char *ptr) -{ - return ptr; -} - -/* ?address@?$allocator@D@std@@QBEPBDABD@Z */ -/* ?address@?$allocator@D@std@@QEBAPEBDAEBD@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_char_const_address, 8) -const char* __thiscall MSVCP_allocator_char_const_address(void *this, const char *ptr) -{ - return ptr; -} - -/* ??0?$allocator@D@std@@QAE@XZ */ -/* ??0?$allocator@D@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_char_ctor, 4) -void* __thiscall MSVCP_allocator_char_ctor(void *this) -{ - return this; -} - -/* ??0?$allocator@D@std@@QAE@ABV01@@Z */ -/* ??0?$allocator@D@std@@QEAA@AEBV01@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_char_copy_ctor, 8) -void* __thiscall MSVCP_allocator_char_copy_ctor(void *this, const void *copy) -{ - return this; -} - -/* ??4?$allocator@D@std@@QAEAAV01@ABV01@@Z */ -/* ??4?$allocator@D@std@@QEAAAEAV01@AEBV01@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_char_assign, 8) -void* __thiscall MSVCP_allocator_char_assign(void *this, const void *assign) -{ - return this; -} - /* ?deallocate@?$allocator@D@std@@QAEXPADI@Z */ /* ?deallocate@?$allocator@D@std@@QEAAXPEAD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_char_deallocate, 12) -void __thiscall MSVCP_allocator_char_deallocate(void *this, char *ptr, MSVCP_size_t size) +void MSVCP_allocator_char_deallocate(void *this, char *ptr, MSVCP_size_t size) { MSVCRT_operator_delete(ptr); } /* ?allocate@?$allocator@D@std@@QAEPADI@Z */ /* ?allocate@?$allocator@D@std@@QEAAPEAD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_char_allocate, 8) -char* __thiscall MSVCP_allocator_char_allocate(void *this, MSVCP_size_t count) +char* MSVCP_allocator_char_allocate(void *this, MSVCP_size_t count) { return MSVCRT_operator_new(count); } -/* ?allocate@?$allocator@D@std@@QAEPADIPBX@Z */ -/* ?allocate@?$allocator@D@std@@QEAAPEAD_KPEBX@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_char_allocate_hint, 12) -char* __thiscall MSVCP_allocator_char_allocate_hint(void *this, - MSVCP_size_t count, const void *hint) -{ - /* Native ignores hint */ - return MSVCP_allocator_char_allocate(this, count); -} - -/* ?construct@?$allocator@D@std@@QAEXPADABD@Z */ -/* ?construct@?$allocator@D@std@@QEAAXPEADAEBD@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_char_construct, 12) -void __thiscall MSVCP_allocator_char_construct(void *this, char *ptr, const char *val) -{ - *ptr = *val; -} - -/* ?destroy@?$allocator@D@std@@QAEXPAD@Z */ -/* ?destroy@?$allocator@D@std@@QEAAXPEAD@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_char_destroy, 8) -void __thiscall MSVCP_allocator_char_destroy(void *this, char *ptr) -{ -} - -/* ?max_size@?$allocator@D@std@@QBEIXZ */ -/* ?max_size@?$allocator@D@std@@QEBA_KXZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_char_max_size, 4) -MSVCP_size_t __thiscall MSVCP_allocator_char_max_size(void *this) +MSVCP_size_t MSVCP_allocator_char_max_size(void *this) { return UINT_MAX/sizeof(char); } - /* allocator<wchar_t> */ -/* ?address@?$allocator@_W@std@@QBEPA_WAA_W@Z */ -/* ?address@?$allocator@_W@std@@QEBAPEA_WAEA_W@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_wchar_address, 8) -wchar_t* __thiscall MSVCP_allocator_wchar_address(void *this, wchar_t *ptr) -{ - return ptr; -} - -/* ?address@?$allocator@_W@std@@QBEPB_WAB_W@Z */ -/* ?address@?$allocator@_W@std@@QEBAPEB_WAEB_W@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_wchar_const_address, 8) -const wchar_t* __thiscall MSVCP_allocator_wchar_const_address(void *this, const wchar_t *ptr) -{ - return ptr; -} - -/* ??0?$allocator@_W@std@@QAE@XZ */ -/* ??0?$allocator@_W@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_wchar_ctor, 4) -void* __thiscall MSVCP_allocator_wchar_ctor(void *this) -{ - return this; -} - -/* ??0?$allocator@_W@std@@QAE@ABV01@@Z */ -/* ??0?$allocator@_W@std@@QEAA@AEBV01@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_wchar_copy_ctor, 8) -void* __thiscall MSVCP_allocator_wchar_copy_ctor(void *this, void *copy) -{ - return this; -} - -/* ??4?$allocator@_W@std@@QAEAAV01@ABV01@@Z */ -/* ??4?$allocator@_W@std@@QEAAAEAV01@AEBV01@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_wchar_assign, 8) -void* __thiscall MSVCP_allocator_wchar_assign(void *this, void *assign) -{ - return this; -} - /* ?deallocate@?$allocator@_W@std@@QAEXPA_WI@Z */ /* ?deallocate@?$allocator@_W@std@@QEAAXPEA_W_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_wchar_deallocate, 12) -void __thiscall MSVCP_allocator_wchar_deallocate(void *this, +void MSVCP_allocator_wchar_deallocate(void *this, wchar_t *ptr, MSVCP_size_t size) { MSVCRT_operator_delete(ptr); @@ -169,8 +57,7 @@ void __thiscall MSVCP_allocator_wchar_deallocate(void *this, /* ?allocate@?$allocator@_W@std@@QAEPA_WI@Z */ /* ?allocate@?$allocator@_W@std@@QEAAPEA_W_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_wchar_allocate, 8) -wchar_t* __thiscall MSVCP_allocator_wchar_allocate(void *this, MSVCP_size_t count) +wchar_t* MSVCP_allocator_wchar_allocate(void *this, MSVCP_size_t count) { if(UINT_MAX/count < sizeof(wchar_t)) { throw_exception(EXCEPTION_BAD_ALLOC, NULL); @@ -180,159 +67,9 @@ wchar_t* __thiscall MSVCP_allocator_wchar_allocate(void *this, MSVCP_size_t coun return MSVCRT_operator_new(count * sizeof(wchar_t)); } -/* ?allocate@?$allocator@_W@std@@QAEPA_WIPBX@Z */ -/* ?allocate@?$allocator@_W@std@@QEAAPEA_W_KPEBX@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_wchar_allocate_hint, 12) -wchar_t* __thiscall MSVCP_allocator_wchar_allocate_hint(void *this, - MSVCP_size_t count, const void *hint) -{ - return MSVCP_allocator_wchar_allocate(this, count); -} - -/* ?construct@?$allocator@_W@std@@QAEXPA_WAB_W@Z */ -/* ?construct@?$allocator@_W@std@@QEAAXPEA_WAEB_W@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_wchar_construct, 12) -void __thiscall MSVCP_allocator_wchar_construct(void *this, - wchar_t *ptr, const wchar_t *val) -{ - *ptr = *val; -} - -/* ?destroy@?$allocator@_W@std@@QAEXPA_W@Z */ -/* ?destroy@?$allocator@_W@std@@QEAAXPEA_W@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_wchar_destroy, 8) -void __thiscall MSVCP_allocator_wchar_destroy(void *this, char *ptr) -{ -} - /* ?max_size@?$allocator@_W@std@@QBEIXZ */ /* ?max_size@?$allocator@_W@std@@QEBA_KXZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_wchar_max_size, 4) -MSVCP_size_t __thiscall MSVCP_allocator_wchar_max_size(void *this) +MSVCP_size_t MSVCP_allocator_wchar_max_size(void *this) { return UINT_MAX/sizeof(wchar_t); } - -/* allocator<unsigned short> */ -/* ?address@?$allocator@G@std@@QBEPAGAAG@Z */ -/* ?address@?$allocator@G@std@@QEBAPEAGAEAG@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_short_address, 8) -unsigned short* __thiscall MSVCP_allocator_short_address( - void *this, unsigned short *ptr) -{ - return ptr; -} - -/* ?address@?$allocator@G@std@@QBEPBGABG@Z */ -/* ?address@?$allocator@G@std@@QEBAPEBGAEBG@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_short_const_address, 8) -const unsigned short* __thiscall MSVCP_allocator_short_const_address( - void *this, const unsigned short *ptr) -{ - return ptr; -} - -/* ??0?$allocator@G@std@@QAE@XZ */ -/* ??0?$allocator@G@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_short_ctor, 4) -void* __thiscall MSVCP_allocator_short_ctor(void *this) -{ - return this; -} - -/* ??0?$allocator@G@std@@QAE@ABV01@@Z */ -/* ??0?$allocator@G@std@@QEAA@AEBV01@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_short_copy_ctor, 8) -void* __thiscall MSVCP_allocator_short_copy_ctor(void *this, void *copy) -{ - return this; -} - -/* ??4?$allocator@G@std@@QAEAAV01@ABV01@@Z */ -/* ??4?$allocator@G@std@@QEAAAEAV01@AEBV01@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_short_assign, 8) -void* __thiscall MSVCP_allocator_short_assign(void *this, void *assign) -{ - return this; -} - -/* ?deallocate@?$allocator@G@std@@QAEXPAGI@Z */ -/* ?deallocate@?$allocator@G@std@@QEAAXPEAG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_short_deallocate, 12) -void __thiscall MSVCP_allocator_short_deallocate(void *this, - unsigned short *ptr, MSVCP_size_t size) -{ - MSVCRT_operator_delete(ptr); -} - -/* ?allocate@?$allocator@G@std@@QAEPAGI@Z */ -/* ?allocate@?$allocator@G@std@@QEAAPEAG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_short_allocate, 8) -unsigned short* __thiscall MSVCP_allocator_short_allocate( - void *this, MSVCP_size_t count) -{ - if(UINT_MAX/count < sizeof(unsigned short)) { - throw_exception(EXCEPTION_BAD_ALLOC, NULL); - return NULL; - } - - return MSVCRT_operator_new(count * sizeof(unsigned short)); -} - -/* ?allocate@?$allocator@G@std@@QAEPAGIPBX@Z */ -/* ?allocate@?$allocator@G@std@@QEAAPEAG_KPEBX@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_short_allocate_hint, 12) -unsigned short* __thiscall MSVCP_allocator_short_allocate_hint( - void *this, MSVCP_size_t count, const void *hint) -{ - return MSVCP_allocator_short_allocate(this, count); -} - -/* ?construct@?$allocator@G@std@@QAEXPAGABG@Z */ -/* ?construct@?$allocator@G@std@@QEAAXPEAGAEBG@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_short_construct, 12) -void __thiscall MSVCP_allocator_short_construct(void *this, - unsigned short *ptr, unsigned short *val) -{ - *ptr = *val; -} - -/* ?destroy@?$allocator@G@std@@QAEXPAG@Z */ -/* ?destroy@?$allocator@G@std@@QEAAXPEAG@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_short_destroy, 8) -void __thiscall MSVCP_allocator_short_destroy(void *this, MSVCP_size_t *ptr) -{ -} - -/* ?max_size@?$allocator@G@std@@QBEIXZ */ -/* ?max_size@?$allocator@G@std@@QEBA_KXZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_short_max_size, 4) -MSVCP_size_t __thiscall MSVCP_allocator_short_max_size(void *this) -{ - return UINT_MAX/sizeof(unsigned short); -} - -/* allocator<void> */ -/* ??0?$allocator@X@std@@QAE@XZ */ -/* ??0?$allocator@X@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_void_ctor, 4) -void* __thiscall MSVCP_allocator_void_ctor(void *this) -{ - return this; -} - -/* ??0?$allocator@X@std@@QAE@ABV01@@Z */ -/* ??0?$allocator@X@std@@QEAA@AEBV01@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_void_copy_ctor, 8) -void* __thiscall MSVCP_allocator_void_copy_ctor(void *this, void *copy) -{ - return this; -} - -/* ??4?$allocator@X@std@@QAEAAV01@ABV01@@Z */ -/* ??4?$allocator@X@std@@QEAAAEAV01@AEBV01@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_allocator_void_assign, 8) -void* __thiscall MSVCP_allocator_void_assign(void *this, void *assign) -{ - return this; -} diff --git a/dlls/msvcp100/msvcp.h b/dlls/msvcp100/msvcp.h index 733b653238a..dad9e29b5c9 100644 --- a/dlls/msvcp100/msvcp.h +++ b/dlls/msvcp100/msvcp.h @@ -48,15 +48,13 @@ typedef struct MSVCP_size_t res; } basic_string_char; -basic_string_char* __thiscall MSVCP_basic_string_char_ctor(basic_string_char*); -basic_string_char* __stdcall MSVCP_basic_string_char_ctor_cstr(basic_string_char*, const char*); -basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr_len(basic_string_char*, const char*, MSVCP_size_t); -basic_string_char* __stdcall MSVCP_basic_string_char_copy_ctor(basic_string_char*, const basic_string_char*); -void __stdcall MSVCP_basic_string_char_dtor(basic_string_char*); -const char* __stdcall MSVCP_basic_string_char_c_str(const basic_string_char*); -void __thiscall MSVCP_basic_string_char_clear(basic_string_char*); -basic_string_char* __thiscall MSVCP_basic_string_char_append_ch(basic_string_char*, char); -MSVCP_size_t __thiscall MSVCP_basic_string_char_length(const basic_string_char*); +basic_string_char* MSVCP_basic_string_char_ctor(basic_string_char*); +basic_string_char* MSVCP_basic_string_char_ctor_cstr(basic_string_char*, const char*); +basic_string_char* MSVCP_basic_string_char_ctor_cstr_len(basic_string_char*, const char*, MSVCP_size_t); +basic_string_char* MSVCP_basic_string_char_copy_ctor(basic_string_char*, const basic_string_char*); +void MSVCP_basic_string_char_dtor(basic_string_char*); +const char* MSVCP_basic_string_char_c_str(const basic_string_char*); +MSVCP_size_t MSVCP_basic_string_char_length(const basic_string_char*); #define BUF_SIZE_WCHAR 8 typedef struct @@ -70,21 +68,19 @@ typedef struct MSVCP_size_t res; } basic_string_wchar; -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor(basic_string_wchar*); -basic_string_wchar* __stdcall MSVCP_basic_string_wchar_ctor_cstr(basic_string_wchar*, const wchar_t*); -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr_len(basic_string_wchar*, const wchar_t*, MSVCP_size_t); -void __thiscall MSVCP_basic_string_wchar_dtor(basic_string_wchar*); -const wchar_t* __thiscall MSVCP_basic_string_wchar_c_str(const basic_string_wchar*); -void __thiscall MSVCP_basic_string_wchar_clear(basic_string_wchar*); -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_ch(basic_string_wchar*, wchar_t); -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_length(const basic_string_wchar*); - -char* __stdcall MSVCP_allocator_char_allocate(void*, MSVCP_size_t); -void __stdcall MSVCP_allocator_char_deallocate(void*, char*, MSVCP_size_t); -MSVCP_size_t __stdcall MSVCP_allocator_char_max_size(void*); -wchar_t* __stdcall MSVCP_allocator_wchar_allocate(void*, MSVCP_size_t); -void __stdcall MSVCP_allocator_wchar_deallocate(void*, wchar_t*, MSVCP_size_t); -MSVCP_size_t __stdcall MSVCP_allocator_wchar_max_size(void*); +basic_string_wchar* MSVCP_basic_string_wchar_ctor(basic_string_wchar*); +basic_string_wchar* MSVCP_basic_string_wchar_ctor_cstr(basic_string_wchar*, const wchar_t*); +basic_string_wchar* MSVCP_basic_string_wchar_ctor_cstr_len(basic_string_wchar*, const wchar_t*, MSVCP_size_t); +void MSVCP_basic_string_wchar_dtor(basic_string_wchar*); +const wchar_t* MSVCP_basic_string_wchar_c_str(const basic_string_wchar*); +MSVCP_size_t MSVCP_basic_string_wchar_length(const basic_string_wchar*); + +char* MSVCP_allocator_char_allocate(void*, MSVCP_size_t); +void MSVCP_allocator_char_deallocate(void*, char*, MSVCP_size_t); +MSVCP_size_t MSVCP_allocator_char_max_size(void*); +wchar_t* MSVCP_allocator_wchar_allocate(void*, MSVCP_size_t); +void MSVCP_allocator_wchar_deallocate(void*, wchar_t*, MSVCP_size_t); +MSVCP_size_t MSVCP_allocator_wchar_max_size(void*); /* class locale::facet */ typedef struct { @@ -173,10 +169,10 @@ typedef struct struct _locale__Locimp *ptr; } locale; -locale* __thiscall locale_ctor(locale*); -locale* __thiscall locale_copy_ctor(locale*, const locale*); -locale* __thiscall locale_operator_assign(locale*, const locale*); -void __thiscall locale_dtor(locale*); +locale* locale_ctor(locale*); +locale* locale_copy_ctor(locale*, const locale*); +locale* locale_operator_assign(locale*, const locale*); +void locale_dtor(locale*); void free_locale(void); codecvt_char* codecvt_char_use_facet(const locale*); codecvt_wchar* codecvt_wchar_use_facet(const locale*); diff --git a/dlls/msvcp100/string.c b/dlls/msvcp100/string.c index 1d69087477f..5883f55d399 100644 --- a/dlls/msvcp100/string.c +++ b/dlls/msvcp100/string.c @@ -30,28 +30,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(msvcp); /* _String_iterator<char> and _String_const_iterator<char> class */ -typedef struct { - basic_string_char *bstr; - const char *pos; -} String_iterator_char; -typedef String_iterator_char String_reverse_iterator_char; - -typedef struct { - basic_string_wchar *bstr; - const wchar_t *pos; -} String_iterator_wchar; -typedef String_iterator_wchar String_reverse_iterator_wchar; - -/* size_t_noverify structure */ -typedef struct { - MSVCP_size_t val; -} size_t_noverify; - -/* allocator class */ -typedef struct { - char empty_struct; -} allocator; - /* char_traits<char> */ /* ?assign@?$char_traits@D@std@@SAXAADABD@Z */ /* ?assign@?$char_traits@D@std@@SAXAEADAEBD@Z */ @@ -60,15 +38,6 @@ static void CDECL MSVCP_char_traits_char_assign(char *ch, const char *assign) *ch = *assign; } -/* ?compare@?$char_traits@D@std@@SAHPBD0I@Z */ -/* ?compare@?$char_traits@D@std@@SAHPEBD0_K@Z */ -static int CDECL MSVCP_char_traits_char_compare( - const char *s1, const char *s2, MSVCP_size_t count) -{ - int ret = memcmp(s1, s2, count); - return (ret>0 ? 1 : (ret<0 ? -1 : 0)); -} - /* ?length@?$char_traits@D@std@@SAIPBD@Z */ /* ?length@?$char_traits@D@std@@SA_KPEBD@Z */ static MSVCP_size_t CDECL MSVCP_char_traits_char_length(const char *str) @@ -91,14 +60,6 @@ static char* CDECL MSVCP_char_traits_char__Copy_s(char *dest, return memcpy(dest, src, count); } -/* ?find@?$char_traits@D@std@@SAPBDPBDIABD@Z */ -/* ?find@?$char_traits@D@std@@SAPEBDPEBD_KAEBD@Z */ -static const char * CDECL MSVCP_char_traits_char_find( - const char *str, MSVCP_size_t range, const char *c) -{ - return memchr(str, *c, range); -} - /* ?_Move_s@?$char_traits@D@std@@SAPADPADIPBDI@Z */ /* ?_Move_s@?$char_traits@D@std@@SAPEADPEAD_KPEBD1@Z */ static char* CDECL MSVCP_char_traits_char__Move_s(char *dest, @@ -114,14 +75,6 @@ static char* CDECL MSVCP_char_traits_char__Move_s(char *dest, return memmove(dest, src, count); } -/* ?assign@?$char_traits@D@std@@SAPADPADID@Z */ -/* ?assign@?$char_traits@D@std@@SAPEADPEAD_KD@Z */ -static char* CDECL MSVCP_char_traits_char_assignn(char *str, MSVCP_size_t num, char c) -{ - return memset(str, c, num); -} - - /* char_traits<wchar_t> */ /* ?assign@?$char_traits@_W@std@@SAXAA_WAB_W@Z */ /* ?assign@?$char_traits@_W@std@@SAXAEA_WAEB_W@Z */ @@ -131,15 +84,6 @@ static void CDECL MSVCP_char_traits_wchar_assign(wchar_t *ch, *ch = *assign; } -/* ?compare@?$char_traits@_W@std@@SAHPB_W0I@Z */ -/* ?compare@?$char_traits@_W@std@@SAHPEB_W0_K@Z */ -static int CDECL MSVCP_char_traits_wchar_compare(const wchar_t *s1, - const wchar_t *s2, MSVCP_size_t count) -{ - int ret = memcmp(s1, s2, count * sizeof(wchar_t)); - return (ret>0 ? 1 : (ret<0 ? -1 : 0)); -} - /* ?length@?$char_traits@_W@std@@SAIPB_W@Z */ /* ?length@?$char_traits@_W@std@@SA_KPEB_W@Z */ static MSVCP_size_t CDECL MSVCP_char_traits_wchar_length(const wchar_t *str) @@ -162,20 +106,6 @@ static wchar_t* CDECL MSVCP_char_traits_wchar__Copy_s(wchar_t *dest, return memcpy(dest, src, count * sizeof(wchar_t)); } -/* ?find@?$char_traits@_W@std@@SAPB_WPB_WIAB_W@Z */ -/* ?find@?$char_traits@_W@std@@SAPEB_WPEB_W_KAEB_W@Z */ -static const wchar_t* CDECL MSVCP_char_traits_wchar_find( - const wchar_t *str, MSVCP_size_t range, const wchar_t *c) -{ - MSVCP_size_t i=0; - - for(i=0; i<range; i++) - if(str[i] == *c) - return str+i; - - return NULL; -} - /* ?_Move_s@?$char_traits@_W@std@@SAPA_WPA_WIPB_WI@Z */ /* ?_Move_s@?$char_traits@_W@std@@SAPEA_WPEA_W_KPEB_W1@Z */ static wchar_t* CDECL MSVCP_char_traits_wchar__Move_s(wchar_t *dest, @@ -191,30 +121,7 @@ static wchar_t* CDECL MSVCP_char_traits_wchar__Move_s(wchar_t *dest, return memmove(dest, src, count * sizeof(WCHAR)); } -/* ?assign@?$char_traits@_W@std@@SAPA_WPA_WI_W@Z */ -/* ?assign@?$char_traits@_W@std@@SAPEA_WPEA_W_K_W@Z */ -static wchar_t* CDECL MSVCP_char_traits_wchar_assignn(wchar_t *str, - MSVCP_size_t num, wchar_t c) -{ - MSVCP_size_t i; - - for(i=0; i<num; i++) - str[i] = c; - - return str; -} - - /* _String_base */ -/* ?_Xlen@_String_base@std@@SAXXZ */ -static void CDECL MSVCP__String_base_Xlen(void) -{ - static const char msg[] = "string too long"; - - TRACE("\n"); - throw_exception(EXCEPTION_LENGTH_ERROR, msg); -} - /* ?_Xran@_String_base@std@@SAXXZ */ static void CDECL MSVCP__String_base_Xran(void) { @@ -232,8 +139,7 @@ static const MSVCP_size_t MSVCP_basic_string_char_npos = -1; /* ?_Myptr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAEPADXZ */ /* ?_Myptr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEAAPEADXZ */ -DEFINE_THISCALL_WRAPPER(basic_string_char_ptr, 4) -char* __thiscall basic_string_char_ptr(basic_string_char *this) +static char* basic_string_char_ptr(basic_string_char *this) { if(this->res == BUF_SIZE_CHAR-1) return this->data.buf; @@ -242,8 +148,7 @@ char* __thiscall basic_string_char_ptr(basic_string_char *this) /* ?_Myptr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IBEPBDXZ */ /* ?_Myptr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEBAPEBDXZ */ -DEFINE_THISCALL_WRAPPER(basic_string_char_const_ptr, 4) -const char* __thiscall basic_string_char_const_ptr(const basic_string_char *this) +static const char* basic_string_char_const_ptr(const basic_string_char *this) { if(this->res == BUF_SIZE_CHAR-1) return this->data.buf; @@ -252,8 +157,7 @@ const char* __thiscall basic_string_char_const_ptr(const basic_string_char *this /* ?_Eos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAEXI@Z */ /* ?_Eos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEAAX_K@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_eos, 8) -void __thiscall basic_string_char_eos(basic_string_char *this, MSVCP_size_t len) +static void basic_string_char_eos(basic_string_char *this, MSVCP_size_t len) { static const char nullbyte = '\0'; @@ -263,8 +167,7 @@ void __thiscall basic_string_char_eos(basic_string_char *this, MSVCP_size_t len) /* ?_Inside@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAE_NPBD@Z */ /* ?_Inside@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEAA_NPEBD@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_inside, 8) -MSVCP_bool __thiscall basic_string_char_inside( +static MSVCP_bool basic_string_char_inside( basic_string_char *this, const char *ptr) { char *cstr = basic_string_char_ptr(this); @@ -274,8 +177,7 @@ MSVCP_bool __thiscall basic_string_char_inside( /* ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAEX_NI@Z */ /* ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEAAX_N_K@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_tidy, 12) -void __thiscall basic_string_char_tidy(basic_string_char *this, +static void basic_string_char_tidy(basic_string_char *this, MSVCP_bool built, MSVCP_size_t new_size) { if(built && BUF_SIZE_CHAR<=this->res) { @@ -290,19 +192,9 @@ void __thiscall basic_string_char_tidy(basic_string_char *this, basic_string_char_eos(this, new_size); } -/* Exported only from msvcp60/70 */ -/* ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEX_N@Z */ -/* ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAX_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_tidy_built, 8) -void __thiscall basic_string_char_tidy_built(basic_string_char *this, MSVCP_bool built) -{ - basic_string_char_tidy(this, built, 0); -} - /* ?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAE_NI_N@Z */ /* ?_Grow@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEAA_N_K_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_grow, 12) -MSVCP_bool __thiscall basic_string_char_grow( +static MSVCP_bool basic_string_char_grow( basic_string_char *this, MSVCP_size_t new_size, MSVCP_bool trim) { if(this->res < new_size) { @@ -340,46 +232,9 @@ MSVCP_bool __thiscall basic_string_char_grow( return (new_size>0); } -/* ?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAEXII@Z */ -/* ?_Copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEAAX_K0@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char__Copy, 12) -void __thiscall basic_string_char__Copy(basic_string_char *this, - MSVCP_size_t new_size, MSVCP_size_t copy_len) -{ - TRACE("%p %lu %lu\n", this, new_size, copy_len); - - if(!basic_string_char_grow(this, new_size, FALSE)) - return; - basic_string_char_eos(this, copy_len); -} - -/* ?_Pdif@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@KAIV?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0@Z */ -/* ?_Pdif@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@KA_KV?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0@Z */ -static MSVCP_size_t __cdecl MSVCP_basic_string_char_Pdif(String_iterator_char i1, String_iterator_char i2) -{ - TRACE("(%p %p) (%p %p)\n", i1.bstr, i1.pos, i2.bstr, i2.pos); - - if((!i1.bstr && i1.pos) || i1.bstr!=i2.bstr) { - _invalid_parameter(NULL, NULL, NULL, 0, 0); - return 0; - } - - return !i1.pos ? 0 : i1.pos-i2.pos; -} - -/* ?get_allocator@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$allocator@D@2@XZ */ -/* ?get_allocator@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$allocator@D@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_string_char_get_allocator, 8) -allocator* __thiscall basic_string_char_get_allocator(const basic_string_char *this, allocator *ret) -{ - TRACE("%p\n", this); - return ret; -} - /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@II@Z */ /* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_erase, 12) -basic_string_char* __thiscall MSVCP_basic_string_char_erase( +static basic_string_char* MSVCP_basic_string_char_erase( basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t len) { TRACE("%p %lu %lu\n", this, pos, len); @@ -400,48 +255,9 @@ basic_string_char* __thiscall MSVCP_basic_string_char_erase( return this; } -/* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0@Z */ -/* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_erase_iter_range, 24) -String_iterator_char* __thiscall basic_string_char_erase_iter_range(basic_string_char *this, - String_iterator_char *ret, String_iterator_char beg, String_iterator_char end) -{ - MSVCP_size_t off; - - ret->bstr = this; - ret->pos = basic_string_char_ptr(this); - off = MSVCP_basic_string_char_Pdif(beg, *ret); - - MSVCP_basic_string_char_erase(this, off, MSVCP_basic_string_char_Pdif(end, beg)); - - ret->bstr = this; - ret->pos = basic_string_char_ptr(this)+off; - return ret; -} - -/* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */ -/* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_erase_iter, 16) -String_iterator_char* __thiscall basic_string_char_erase_iter(basic_string_char *this, - String_iterator_char *ret, String_iterator_char pos) -{ - MSVCP_size_t off; - - ret->bstr = this; - ret->pos = basic_string_char_ptr(this); - off = MSVCP_basic_string_char_Pdif(pos, *ret); - - MSVCP_basic_string_char_erase(this, off, 1); - - ret->bstr = this; - ret->pos = basic_string_char_ptr(this)+off; - return ret; -} - /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z */ /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_substr, 16) -basic_string_char* __thiscall MSVCP_basic_string_char_assign_substr( +static basic_string_char* MSVCP_basic_string_char_assign_substr( basic_string_char *this, const basic_string_char *assign, MSVCP_size_t pos, MSVCP_size_t len) { @@ -465,12 +281,9 @@ basic_string_char* __thiscall MSVCP_basic_string_char_assign_substr( return this; } -/* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@@Z */ -/* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@@Z */ /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@ABV01@@Z */ /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@AEBV01@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign, 8) -basic_string_char* __thiscall MSVCP_basic_string_char_assign( +static basic_string_char* MSVCP_basic_string_char_assign( basic_string_char *this, const basic_string_char *assign) { return MSVCP_basic_string_char_assign_substr(this, assign, @@ -479,8 +292,7 @@ basic_string_char* __thiscall MSVCP_basic_string_char_assign( /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z */ /* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_cstr_len, 12) -basic_string_char* __thiscall MSVCP_basic_string_char_assign_cstr_len( +static basic_string_char* MSVCP_basic_string_char_assign_cstr_len( basic_string_char *this, const char *str, MSVCP_size_t len) { TRACE("%p %s %lu\n", this, debugstr_an(str, len), len); @@ -497,138 +309,28 @@ basic_string_char* __thiscall MSVCP_basic_string_char_assign_cstr_len( return this; } -/* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@D@Z */ -/* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@D@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_ch, 8) -basic_string_char* __thiscall MSVCP_basic_string_char_assign_ch( - basic_string_char *this, char ch) -{ - return MSVCP_basic_string_char_assign_cstr_len(this, &ch, 1); -} - -/* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z */ -/* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD@Z */ /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z */ /* ??4?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@PEBD@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_cstr, 8) -basic_string_char* __thiscall MSVCP_basic_string_char_assign_cstr( +static basic_string_char* MSVCP_basic_string_char_assign_cstr( basic_string_char *this, const char *str) { return MSVCP_basic_string_char_assign_cstr_len(this, str, MSVCP_char_traits_char_length(str)); } -/* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ID@Z */ -/* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KD@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assignn, 12) -basic_string_char* __thiscall MSVCP_basic_string_char_assignn( - basic_string_char *this, MSVCP_size_t count, char ch) -{ - TRACE("%p %ld %c\n", this, count, ch); - - basic_string_char_grow(this, count, FALSE); - MSVCP_char_traits_char_assignn(basic_string_char_ptr(this), count, ch); - basic_string_char_eos(this, count); - return this; -} - -/* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD0@Z */ -/* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD0@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_ptr_ptr, 12) -basic_string_char* __thiscall MSVCP_basic_string_char_assign_ptr_ptr( - basic_string_char *this, const char *first, const char *last) -{ - return MSVCP_basic_string_char_assign_cstr_len(this, first, last-first); -} - -/* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0@Z */ -/* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_assign_iter, 20) -basic_string_char* __thiscall MSVCP_basic_string_char_assign_iter(basic_string_char *this, - String_iterator_char beg, String_iterator_char end) -{ - return MSVCP_basic_string_char_assign_ptr_ptr(this, beg.pos, end.pos); -} - -/* ?_Chassign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAEXIID@Z */ -/* ?_Chassign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEAAX_K0D@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_Chassign, 16) -void __thiscall MSVCP_basic_string_char_Chassign(basic_string_char *this, - MSVCP_size_t off, MSVCP_size_t count, char ch) -{ - TRACE("%p %lu %lu %c\n", this, off, count, ch); - MSVCP_char_traits_char_assignn(basic_string_char_ptr(this)+off, count, ch); -} - -/* ?_Copy_s@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPADIII@Z */ -/* ?_Copy_s@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEAD_K11@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_Copy_s, 20) -MSVCP_size_t __thiscall MSVCP_basic_string_char_Copy_s(const basic_string_char *this, - char *dest, MSVCP_size_t size, MSVCP_size_t count, MSVCP_size_t off) -{ - TRACE("%p %p %lu %lu %lu\n", this, dest, size, count, off); - - if(this->size < off) - MSVCP__String_base_Xran(); - - if(count > this->size-off) - count = this->size-off; - - MSVCP_char_traits_char__Copy_s(dest, size, - basic_string_char_const_ptr(this)+off, count); - return count; -} - -/* ?copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPADII@Z */ -/* ?copy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEAD_K1@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_copy, 16) -MSVCP_size_t __thiscall basic_string_char_copy(const basic_string_char *this, - char *dest, MSVCP_size_t count, MSVCP_size_t off) -{ - return MSVCP_basic_string_char_Copy_s(this, dest, count, count, off); -} - /* ?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */ /* ?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */ /* ?data@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ */ /* ?data@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEBDXZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_c_str, 4) -const char* __thiscall MSVCP_basic_string_char_c_str(const basic_string_char *this) +const char* MSVCP_basic_string_char_c_str(const basic_string_char *this) { TRACE("%p\n", this); return basic_string_char_const_ptr(this); } -/* ?capacity@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */ -/* ?capacity@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_capacity, 4) -MSVCP_size_t __thiscall MSVCP_basic_string_char_capacity(basic_string_char *this) -{ - TRACE("%p\n", this); - return this->res; -} - -/* ?reserve@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXI@Z */ -/* ?reserve@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_reserve, 8) -void __thiscall MSVCP_basic_string_char_reserve(basic_string_char *this, MSVCP_size_t size) -{ - MSVCP_size_t len; - - TRACE("%p %ld\n", this, size); - - len = this->size; - if(len > size) - return; - - basic_string_char_grow(this, size, FALSE); - basic_string_char_eos(this, len); -} - /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ */ /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor, 4) -basic_string_char* __thiscall MSVCP_basic_string_char_ctor(basic_string_char *this) +basic_string_char* MSVCP_basic_string_char_ctor(basic_string_char *this) { TRACE("%p\n", this); @@ -638,8 +340,7 @@ basic_string_char* __thiscall MSVCP_basic_string_char_ctor(basic_string_char *th /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z */ /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV01@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_copy_ctor, 8) -basic_string_char* __thiscall MSVCP_basic_string_char_copy_ctor( +basic_string_char* MSVCP_basic_string_char_copy_ctor( basic_string_char *this, const basic_string_char *copy) { TRACE("%p %p\n", this, copy); @@ -651,8 +352,7 @@ basic_string_char* __thiscall MSVCP_basic_string_char_copy_ctor( /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z */ /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr, 8) -basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr( +basic_string_char* MSVCP_basic_string_char_ctor_cstr( basic_string_char *this, const char *str) { TRACE("%p %s\n", this, debugstr_a(str)); @@ -662,19 +362,9 @@ basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr( return this; } -/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDABV?$allocator@D@1@@Z */ -/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBDAEBV?$allocator@D@1@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr_alloc, 12) -basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr_alloc( - basic_string_char *this, const char *str, const void *alloc) -{ - return MSVCP_basic_string_char_ctor_cstr(this, str); -} - /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDI@Z */ /* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr_len, 12) -basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr_len( +basic_string_char* MSVCP_basic_string_char_ctor_cstr_len( basic_string_char *this, const char *str, MSVCP_size_t len) { TRACE("%p %s %ld\n", this, debugstr_an(str, len), len); @@ -684,95 +374,9 @@ basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr_len( return this; } -/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBDIABV?$allocator@D@1@@Z */ -/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD_KAEBV?$allocator@D@1@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_cstr_len_alloc, 16) -basic_string_char* __thiscall MSVCP_basic_string_char_ctor_cstr_len_alloc( - basic_string_char *this, const char *str, MSVCP_size_t len, const void *alloc) -{ - return MSVCP_basic_string_char_ctor_cstr_len(this, str, len); -} - -/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@II@Z */ -/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV01@_K1@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_substr, 16) -basic_string_char* __thiscall MSVCP_basic_string_char_ctor_substr( - basic_string_char *this, const basic_string_char *assign, - MSVCP_size_t pos, MSVCP_size_t len) -{ - TRACE("%p %p %lu %lu\n", this, assign, pos, len); - - basic_string_char_tidy(this, FALSE, 0); - MSVCP_basic_string_char_assign_substr(this, assign, pos, len); - return this; -} - -/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@IIABV?$allocator@D@1@@Z */ -/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV01@_K1AEBV?$allocator@D@1@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_substr_alloc, 20) -basic_string_char* __thiscall MSVCP_basic_string_char_ctor_substr_alloc( - basic_string_char *this, const basic_string_char *assign, - MSVCP_size_t pos, MSVCP_size_t len, const void *alloc) -{ - return MSVCP_basic_string_char_ctor_substr(this, assign, pos, len); -} - -/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV?$allocator@D@1@@Z */ -/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV?$allocator@D@1@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_alloc, 8) -basic_string_char* __thiscall MSVCP_basic_string_char_ctor_alloc( - basic_string_char *this, const void *alloc) -{ - TRACE("%p %p\n", this, alloc); - - basic_string_char_tidy(this, FALSE, 0); - return this; -} - -/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ID@Z */ -/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@_KD@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_ch, 12) -basic_string_char* __thiscall MSVCP_basic_string_char_ctor_ch(basic_string_char *this, - MSVCP_size_t count, char ch) -{ - TRACE("%p %ld %c\n", this, count, ch); - - basic_string_char_tidy(this, FALSE, 0); - MSVCP_basic_string_char_assignn(this, count, ch); - return this; -} - -/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@IDABV?$allocator@D@1@@Z */ -/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@_KDAEBV?$allocator@D@1@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_ch_alloc, 16) -basic_string_char* __thiscall MSVCP_basic_string_char_ctor_ch_alloc(basic_string_char *this, - MSVCP_size_t count, char ch, const void *alloc) -{ - return MSVCP_basic_string_char_ctor_ch(this, count, ch); -} - -/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD0@Z */ -/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@PEBD0@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_ptr_ptr, 12) -basic_string_char* __thiscall MSVCP_basic_string_char_ctor_ptr_ptr(basic_string_char *this, - const char *first, const char *last) -{ - return MSVCP_basic_string_char_ctor_cstr_len(this, first, last-first); -} - -/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@1@0@Z */ -/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@1@0@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_ctor_iter, 20) -basic_string_char* __thiscall MSVCP_basic_string_char_ctor_iter(basic_string_char *this, - String_iterator_char beg, String_iterator_char end) -{ - return MSVCP_basic_string_char_ctor_cstr_len(this, beg.pos, end.pos-beg.pos); -} - /* ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ */ /* ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_dtor, 4) -void __thiscall MSVCP_basic_string_char_dtor(basic_string_char *this) +void MSVCP_basic_string_char_dtor(basic_string_char *this) { TRACE("%p\n", this); basic_string_char_tidy(this, TRUE, 0); @@ -782,2930 +386,290 @@ void __thiscall MSVCP_basic_string_char_dtor(basic_string_char *this) /* ?size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */ /* ?length@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */ /* ?length@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_length, 4) -MSVCP_size_t __thiscall MSVCP_basic_string_char_length(const basic_string_char *this) +MSVCP_size_t MSVCP_basic_string_char_length(const basic_string_char *this) { TRACE("%p\n", this); return this->size; } -/* ?max_size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIXZ */ -/* ?max_size@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KXZ */ -DEFINE_THISCALL_WRAPPER(basic_string_char_max_size, 4) -MSVCP_size_t __thiscall basic_string_char_max_size(const basic_string_char *this) +/* basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t>> */ +/* basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short>> */ +/* ?npos@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@2IB */ +/* ?npos@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@2_KB */ +/* ?npos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@2IB */ +/* ?npos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@2_KB */ +const MSVCP_size_t MSVCP_basic_string_wchar_npos = -1; + +/* ?_Myptr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAEPA_WXZ */ +/* ?_Myptr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAAPEA_WXZ */ +/* ?_Myptr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IAEPAGXZ */ +/* ?_Myptr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IEAAPEAGXZ */ +static wchar_t* basic_string_wchar_ptr(basic_string_wchar *this) { - TRACE("%p\n", this); - return MSVCP_allocator_char_max_size(this->allocator)-1; + if(this->res == BUF_SIZE_WCHAR-1) + return this->data.buf; + return this->data.ptr; } -/* ?empty@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE_NXZ */ -/* ?empty@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_NXZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_empty, 4) -MSVCP_bool __thiscall MSVCP_basic_string_char_empty(basic_string_char *this) +/* ?_Myptr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IBEPB_WXZ */ +/* ?_Myptr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEBAPEB_WXZ */ +/* ?_Myptr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IBEPBGXZ */ +/* ?_Myptr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IEBAPEBGXZ */ +static const wchar_t* basic_string_wchar_const_ptr(const basic_string_wchar *this) { - TRACE("%p\n", this); - return this->size == 0; + if(this->res == BUF_SIZE_WCHAR-1) + return this->data.buf; + return this->data.ptr; } -/* ?swap@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXAAV12@@Z */ -/* ?swap@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXAEAV12@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_swap, 8) -void __thiscall MSVCP_basic_string_char_swap(basic_string_char *this, basic_string_char *str) +/* ?_Eos@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAEXI@Z */ +/* ?_Eos@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAAX_K@Z */ +/* ?_Eos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IAEXI@Z */ +/* ?_Eos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IEAAX_K@Z */ +static void basic_string_wchar_eos(basic_string_wchar *this, MSVCP_size_t len) { - if(this != str) { - char tmp[sizeof(this->data)]; - const MSVCP_size_t size = this->size; - const MSVCP_size_t res = this->res; - - memcpy(tmp, this->data.buf, sizeof(this->data)); - memcpy(this->data.buf, str->data.buf, sizeof(this->data)); - memcpy(str->data.buf, tmp, sizeof(this->data)); - - this->size = str->size; - this->res = str->res; + static const wchar_t nullbyte_w = '\0'; - str->size = size; - str->res = res; - } + this->size = len; + MSVCP_char_traits_wchar_assign(basic_string_wchar_ptr(this)+len, &nullbyte_w); } -/* ?substr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV12@II@Z */ -/* ?substr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV12@_K0@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_substr, 16) -basic_string_char* __thiscall MSVCP_basic_string_char_substr(basic_string_char *this, - basic_string_char *ret, MSVCP_size_t off, MSVCP_size_t len) +/* ?_Inside@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAE_NPB_W@Z */ +/* ?_Inside@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAA_NPEB_W@Z */ +/* ?_Inside@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IAE_NPBG@Z */ +/* ?_Inside@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IEAA_NPEBG@Z */ +static MSVCP_bool basic_string_wchar_inside( + basic_string_wchar *this, const wchar_t *ptr) { - TRACE("%p %lu %lu\n", this, off, len); + wchar_t *cstr = basic_string_wchar_ptr(this); - MSVCP_basic_string_char_ctor_substr(ret, this, off, len); - return ret; + return (ptr<cstr || ptr>=cstr+this->size) ? FALSE : TRUE; } -/* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@II@Z */ -/* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_substr, 16) -basic_string_char* __thiscall MSVCP_basic_string_char_append_substr(basic_string_char *this, - const basic_string_char *append, MSVCP_size_t offset, MSVCP_size_t count) +/* ?_Tidy@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAEX_NI@Z */ +/* ?_Tidy@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAAX_N_K@Z */ +/* ?_Tidy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IAEX_NI@Z */ +/* ?_Tidy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IEAAX_N_K@Z */ +static void basic_string_wchar_tidy(basic_string_wchar *this, + MSVCP_bool built, MSVCP_size_t new_size) { - TRACE("%p %p %lu %lu\n", this, append, offset, count); - - if(append->size < offset) - MSVCP__String_base_Xran(); - - if(count > append->size-offset) - count = append->size-offset; - - if(MSVCP_basic_string_char_npos-this->size<=count || this->size+count<this->size) - MSVCP__String_base_Xlen(); + if(built && BUF_SIZE_WCHAR<=this->res) { + wchar_t *ptr = this->data.ptr; - if(basic_string_char_grow(this, this->size+count, FALSE)) { - MSVCP_char_traits_char__Copy_s(basic_string_char_ptr(this)+this->size, - this->res-this->size, basic_string_char_const_ptr(append)+offset, count); - basic_string_char_eos(this, this->size+count); + if(new_size > 0) + MSVCP_char_traits_wchar__Copy_s(this->data.buf, BUF_SIZE_WCHAR, ptr, new_size); + MSVCP_allocator_wchar_deallocate(this->allocator, ptr, this->res+1); } - return this; -} - -/* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ABV12@@Z */ -/* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@AEBV12@@Z */ -/* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@ABV01@@Z */ -/* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@AEBV01@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append, 8) -basic_string_char* __thiscall MSVCP_basic_string_char_append( - basic_string_char *this, const basic_string_char *append) -{ - return MSVCP_basic_string_char_append_substr(this, append, - 0, MSVCP_basic_string_char_npos); + this->res = BUF_SIZE_WCHAR-1; + basic_string_wchar_eos(this, new_size); } -/* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z */ -/* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_cstr_len, 12) -basic_string_char* __thiscall MSVCP_basic_string_char_append_cstr_len( - basic_string_char *this, const char *append, MSVCP_size_t count) +/* ?_Grow@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAE_NI_N@Z */ +/* ?_Grow@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAA_N_K_N@Z */ +/* ?_Grow@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IAE_NI_N@Z */ +/* ?_Grow@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IEAA_N_K_N@Z */ +static MSVCP_bool basic_string_wchar_grow( + basic_string_wchar *this, MSVCP_size_t new_size, MSVCP_bool trim) { - TRACE("%p %s %lu\n", this, debugstr_an(append, count), count); - - if(basic_string_char_inside(this, append)) - return MSVCP_basic_string_char_append_substr(this, this, - append-basic_string_char_ptr(this), count); + if(this->res < new_size) { + MSVCP_size_t new_res = new_size, len = this->size; + wchar_t *ptr; - if(MSVCP_basic_string_char_npos-this->size<=count || this->size+count<this->size) - MSVCP__String_base_Xlen(); + new_res |= 0xf; - if(basic_string_char_grow(this, this->size+count, FALSE)) { - MSVCP_char_traits_char__Copy_s(basic_string_char_ptr(this)+this->size, - this->res-this->size, append, count); - basic_string_char_eos(this, this->size+count); - } + if(new_res/3 < this->res/2) + new_res = this->res + this->res/2; - return this; -} + ptr = MSVCP_allocator_wchar_allocate(this->allocator, new_res+1); + if(!ptr) + ptr = MSVCP_allocator_wchar_allocate(this->allocator, new_size+1); + else + new_size = new_res; + if(!ptr) { + ERR("Out of memory\n"); + basic_string_wchar_tidy(this, TRUE, 0); + return FALSE; + } -/* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD@Z */ -/* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD@Z */ -/* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@PBD@Z */ -/* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@PEBD@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_cstr, 8) -basic_string_char* __thiscall MSVCP_basic_string_char_append_cstr( - basic_string_char *this, const char *append) -{ - return MSVCP_basic_string_char_append_cstr_len(this, append, - MSVCP_char_traits_char_length(append)); -} + MSVCP_char_traits_wchar__Copy_s(ptr, new_size, + basic_string_wchar_ptr(this), this->size); + basic_string_wchar_tidy(this, TRUE, 0); + this->data.ptr = ptr; + this->res = new_size; + basic_string_wchar_eos(this, len); + } else if(trim && new_size < BUF_SIZE_WCHAR) + basic_string_wchar_tidy(this, TRUE, + new_size<this->size ? new_size : this->size); + else if(new_size == 0) + basic_string_wchar_eos(this, 0); -/* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBD0@Z */ -/* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD0@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_beg_end, 12) -basic_string_char* __thiscall MSVCP_basic_string_char_append_beg_end( - basic_string_char *this, const char *beg, const char *end) -{ - return MSVCP_basic_string_char_append_cstr_len(this, beg, end-beg); + return (new_size>0); } -/* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0@Z */ -/* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_iter, 20) -basic_string_char* __thiscall MSVCP_basic_string_char_append_iter( - basic_string_char *this, String_iterator_char beg, String_iterator_char end) +/* ?erase@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@II@Z */ +/* ?erase@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@_K0@Z */ +/* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@II@Z */ +/* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0@Z */ +static basic_string_wchar* MSVCP_basic_string_wchar_erase( + basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t len) { - return MSVCP_basic_string_char_append_cstr_len(this, beg.pos, end.pos-beg.pos); -} + TRACE("%p %lu %lu\n", this, pos, len); -/* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@ID@Z */ -/* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KD@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_len_ch, 12) -basic_string_char* __thiscall MSVCP_basic_string_char_append_len_ch( - basic_string_char *this, MSVCP_size_t count, char ch) -{ - TRACE("%p %lu %c\n", this, count, ch); + if(pos > this->size) + MSVCP__String_base_Xran(); - if(MSVCP_basic_string_char_npos-this->size <= count) - MSVCP__String_base_Xlen(); + if(len > this->size-pos) + len = this->size-pos; - if(basic_string_char_grow(this, this->size+count, FALSE)) { - MSVCP_char_traits_char_assignn(basic_string_char_ptr(this)+this->size, count, ch); - basic_string_char_eos(this, this->size+count); + if(len) { + MSVCP_char_traits_wchar__Move_s(basic_string_wchar_ptr(this)+pos, + this->res-pos, basic_string_wchar_ptr(this)+pos+len, + this->size-pos-len); + basic_string_wchar_eos(this, this->size-len); } return this; } -/* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV01@D@Z */ -/* ??Y?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV01@D@Z */ -/* ?push_back@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXD@Z */ -/* ?push_back@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXD@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_append_ch, 8) -basic_string_char* __thiscall MSVCP_basic_string_char_append_ch( - basic_string_char *this, char ch) -{ - return MSVCP_basic_string_char_append_len_ch(this, 1, ch); -} - -/* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIPBDI@Z */ -/* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0PEBD0@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_cstr_len, 20) -int __thiscall MSVCP_basic_string_char_compare_substr_cstr_len( - const basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t num, - const char *str, MSVCP_size_t count) -{ - int ans; - - TRACE("%p %lu %lu %s %lu\n", this, pos, num, debugstr_an(str, count), count); - - if(this->size < pos) - MSVCP__String_base_Xran(); - - if(num > this->size-pos) - num = this->size-pos; - - ans = MSVCP_char_traits_char_compare(basic_string_char_const_ptr(this)+pos, - str, num>count ? count : num); - if(ans) - return ans; - - if(num > count) - ans = 1; - else if(num < count) - ans = -1; - return ans; -} - -/* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIPBD@Z */ -/* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0PEBD@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_cstr, 16) -int __thiscall MSVCP_basic_string_char_compare_substr_cstr(const basic_string_char *this, - MSVCP_size_t pos, MSVCP_size_t num, const char *str) -{ - return MSVCP_basic_string_char_compare_substr_cstr_len(this, pos, num, - str, MSVCP_char_traits_char_length(str)); -} - -/* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHPBD@Z */ -/* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAHPEBD@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_cstr, 8) -int __thiscall MSVCP_basic_string_char_compare_cstr( - const basic_string_char *this, const char *str) -{ - return MSVCP_basic_string_char_compare_substr_cstr_len(this, 0, this->size, - str, MSVCP_char_traits_char_length(str)); -} - -/* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIABV12@II@Z */ -/* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0AEBV12@00@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_substr, 24) -int __thiscall MSVCP_basic_string_char_compare_substr_substr( - const basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t num, - const basic_string_char *compare, MSVCP_size_t off, MSVCP_size_t count) -{ - TRACE("%p %lu %lu %p %lu %lu\n", this, pos, num, compare, off, count); - - if(compare->size < off) - MSVCP__String_base_Xran(); - - if(count > compare->size-off) - count = compare->size-off; - - return MSVCP_basic_string_char_compare_substr_cstr_len(this, pos, num, - basic_string_char_const_ptr(compare)+off, count); -} - -/* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHIIABV12@@Z */ -/* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAH_K0AEBV12@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr, 16) -int __thiscall MSVCP_basic_string_char_compare_substr( - const basic_string_char *this, MSVCP_size_t pos, MSVCP_size_t num, - const basic_string_char *compare) -{ - return MSVCP_basic_string_char_compare_substr_cstr_len(this, pos, num, - basic_string_char_const_ptr(compare), compare->size); -} - -/* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHABV12@@Z */ -/* ?compare@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAHAEBV12@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare, 8) -int __thiscall MSVCP_basic_string_char_compare( - const basic_string_char *this, const basic_string_char *compare) -{ - return MSVCP_basic_string_char_compare_substr_cstr_len(this, 0, this->size, - basic_string_char_const_ptr(compare), compare->size); -} - -/* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */ -/* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_cstr_substr, 16) -MSVCP_size_t __thiscall MSVCP_basic_string_char_find_cstr_substr( - const basic_string_char *this, const char *find, MSVCP_size_t pos, MSVCP_size_t len) -{ - const char *p, *end; - - TRACE("%p %s %lu %lu\n", this, debugstr_an(find, len), pos, len); - - if(len==0 && pos<=this->size) - return pos; - - end = basic_string_char_const_ptr(this)+this->size-len+1; - for(p=basic_string_char_const_ptr(this)+pos; p<end; p++) { - p = MSVCP_char_traits_char_find(p, end-p, find); - if(!p) - break; - - if(!MSVCP_char_traits_char_compare(p, find, len)) - return p-basic_string_char_const_ptr(this); - } - - return MSVCP_basic_string_char_npos; -} - -/* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */ -/* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_cstr_off, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_char_find_cstr_off( - const basic_string_char *this, const char *find, MSVCP_size_t pos) -{ - return MSVCP_basic_string_char_find_cstr_substr(this, find, pos, - MSVCP_char_traits_char_length(find)); -} - -/* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */ -/* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_off, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_char_find_off( - const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off) -{ - return MSVCP_basic_string_char_find_cstr_substr(this, - basic_string_char_const_ptr(find), off, find->size); -} - -/* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */ -/* ?find@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_ch, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_char_find_ch( - const basic_string_char *this, char ch, MSVCP_size_t pos) -{ - return MSVCP_basic_string_char_find_cstr_substr(this, &ch, pos, 1); -} - -/* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */ -/* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rfind_cstr_substr, 16) -MSVCP_size_t __thiscall MSVCP_basic_string_char_rfind_cstr_substr( - const basic_string_char *this, const char *find, MSVCP_size_t pos, MSVCP_size_t len) -{ - const char *p, *end; - - TRACE("%p %s %lu %lu\n", this, debugstr_an(find, len), pos, len); - - if(len==0) - return pos<this->size ? pos : this->size; - - if(len > this->size) - return MSVCP_basic_string_char_npos; - - if(pos > this->size-len+1) - pos = this->size-len+1; - end = basic_string_char_const_ptr(this); - for(p=end+pos; p>=end; p--) { - if(*p==*find && !MSVCP_char_traits_char_compare(p, find, len)) - return p-basic_string_char_const_ptr(this); - } - - return MSVCP_basic_string_char_npos; -} - -/* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */ -/* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rfind_cstr_off, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_char_rfind_cstr_off( - const basic_string_char *this, const char *find, MSVCP_size_t pos) -{ - return MSVCP_basic_string_char_rfind_cstr_substr(this, find, pos, - MSVCP_char_traits_char_length(find)); -} - -/* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */ -/* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rfind_off, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_char_rfind_off( - const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off) -{ - return MSVCP_basic_string_char_rfind_cstr_substr(this, - basic_string_char_const_ptr(find), off, find->size); -} - -/* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */ -/* ?rfind@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rfind_ch, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_char_rfind_ch( - const basic_string_char *this, char ch, MSVCP_size_t pos) -{ - return MSVCP_basic_string_char_rfind_cstr_substr(this, &ch, pos, 1); -} - -/* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */ -/* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of_cstr_substr, 16) -MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_of_cstr_substr( - const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len) -{ - const char *p, *end; - - TRACE("%p %p %lu %lu\n", this, find, off, len); - - if(len>0 && off<this->size) { - end = basic_string_char_const_ptr(this)+this->size; - for(p=basic_string_char_const_ptr(this)+off; p<end; p++) - if(MSVCP_char_traits_char_find(find, len, p)) - return p-basic_string_char_const_ptr(this); - } - - return MSVCP_basic_string_char_npos; -} - -/* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */ -/* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_of( - const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off) -{ - return MSVCP_basic_string_char_find_first_of_cstr_substr(this, - basic_string_char_const_ptr(find), off, find->size); -} - -/* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */ -/* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of_cstr, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_of_cstr( - const basic_string_char *this, const char *find, MSVCP_size_t off) -{ - return MSVCP_basic_string_char_find_first_of_cstr_substr( - this, find, off, MSVCP_char_traits_char_length(find)); -} - -/* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */ -/* ?find_first_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_of_ch, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_of_ch( - const basic_string_char *this, char ch, MSVCP_size_t off) -{ - return MSVCP_basic_string_char_find_first_of_cstr_substr(this, &ch, off, 1); -} - -/* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */ -/* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of_cstr_substr, 16) -MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_not_of_cstr_substr( - const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len) -{ - const char *p, *end; - - TRACE("%p %p %lu %lu\n", this, find, off, len); - - if(off<this->size) { - end = basic_string_char_const_ptr(this)+this->size; - for(p=basic_string_char_const_ptr(this)+off; p<end; p++) - if(!MSVCP_char_traits_char_find(find, len, p)) - return p-basic_string_char_const_ptr(this); - } - - return MSVCP_basic_string_char_npos; -} - -/* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */ -/* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_not_of( - const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off) -{ - return MSVCP_basic_string_char_find_first_not_of_cstr_substr(this, - basic_string_char_const_ptr(find), off, find->size); -} - -/* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */ -/* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of_cstr, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_not_of_cstr( - const basic_string_char *this, const char *find, MSVCP_size_t off) -{ - return MSVCP_basic_string_char_find_first_not_of_cstr_substr( - this, find, off, MSVCP_char_traits_char_length(find)); -} - -/* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */ -/* ?find_first_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_first_not_of_ch, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_char_find_first_not_of_ch( - const basic_string_char *this, char ch, MSVCP_size_t off) -{ - return MSVCP_basic_string_char_find_first_not_of_cstr_substr(this, &ch, off, 1); -} - -/* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */ -/* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of_cstr_substr, 16) -MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_of_cstr_substr( - const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len) -{ - const char *p, *beg; - - TRACE("%p %p %lu %lu\n", this, find, off, len); - - if(len>0 && this->size>0) { - if(off >= this->size) - off = this->size-1; - - beg = basic_string_char_const_ptr(this); - for(p=beg+off; p>=beg; p--) - if(MSVCP_char_traits_char_find(find, len, p)) - return p-beg; - } - - return MSVCP_basic_string_char_npos; -} - -/* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */ -/* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_of( - const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off) -{ - return MSVCP_basic_string_char_find_last_of_cstr_substr(this, - basic_string_char_const_ptr(find), off, find->size); -} - -/* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */ -/* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of_cstr, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_of_cstr( - const basic_string_char *this, const char *find, MSVCP_size_t off) -{ - return MSVCP_basic_string_char_find_last_of_cstr_substr( - this, find, off, MSVCP_char_traits_char_length(find)); -} - -/* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */ -/* ?find_last_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_of_ch, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_of_ch( - const basic_string_char *this, char ch, MSVCP_size_t off) -{ - return MSVCP_basic_string_char_find_last_of_cstr_substr(this, &ch, off, 1); -} - -/* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDII@Z */ -/* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K1@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_not_of_cstr_substr, 16) -MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_not_of_cstr_substr( - const basic_string_char *this, const char *find, MSVCP_size_t off, MSVCP_size_t len) -{ - const char *p, *beg; - - TRACE("%p %p %lu %lu\n", this, find, off, len); - - if(len>0 && this->size>0) { - if(off >= this->size) - off = this->size-1; - - beg = basic_string_char_const_ptr(this); - for(p=beg+off; p>=beg; p--) - if(!MSVCP_char_traits_char_find(find, len, p)) - return p-beg; - } - - return MSVCP_basic_string_char_npos; -} - -/* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIABV12@I@Z */ -/* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KAEBV12@_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_not_of, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_not_of( - const basic_string_char *this, const basic_string_char *find, MSVCP_size_t off) -{ - return MSVCP_basic_string_char_find_last_not_of_cstr_substr(this, - basic_string_char_const_ptr(find), off, find->size); -} - -/* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIPBDI@Z */ -/* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KPEBD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_not_of_cstr, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_not_of_cstr( - const basic_string_char *this, const char *find, MSVCP_size_t off) -{ - return MSVCP_basic_string_char_find_last_not_of_cstr_substr( - this, find, off, MSVCP_char_traits_char_length(find)); -} - -/* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEIDI@Z */ -/* ?find_last_not_of@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA_KD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_find_last_not_of_ch, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_char_find_last_not_of_ch( - const basic_string_char *this, char ch, MSVCP_size_t off) -{ - return MSVCP_basic_string_char_find_last_not_of_cstr_substr(this, &ch, off, 1); -} - -/* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAADI@Z */ -/* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_operator_at, 8) -char* __thiscall MSVCP_basic_string_char_operator_at( - basic_string_char *this, MSVCP_size_t pos) -{ - TRACE("%p %lu\n", this, pos); - - assert(this->size >= pos); - return basic_string_char_ptr(this)+pos; -} - -/* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDI@Z */ -/* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAAEBD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_const_operator_at, 8) -const char* __thiscall MSVCP_basic_string_char_const_operator_at( - const basic_string_char *this, MSVCP_size_t pos) -{ - TRACE("%p %lu\n", this, pos); - - assert(this->size >= pos); - return basic_string_char_const_ptr(this)+pos; -} - -/* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAADU_Size_type_nosscl@01@@Z */ -/* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEADU_Size_type_nosscl@01@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_operator_at_noverify, 8) -char* __thiscall MSVCP_basic_string_char_operator_at_noverify( - basic_string_char *this, size_t_noverify pos) -{ - TRACE("%p %lu\n", this, pos.val); - return basic_string_char_ptr(this)+pos.val; -} - -/* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDU_Size_type_nosscl@01@@Z */ -/* ??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAAEBDU_Size_type_nosscl@01@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_operator_const_at_noverify, 8) -const char* __thiscall MSVCP_basic_string_char_operator_const_at_noverify( - const basic_string_char *this, size_t_noverify pos) -{ - TRACE("%p %lu\n", this, pos.val); - return basic_string_char_const_ptr(this)+pos.val; -} - -/* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAADI@Z */ -/* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_at, 8) -char* __thiscall MSVCP_basic_string_char_at( - basic_string_char *this, MSVCP_size_t pos) -{ - TRACE("%p %lu\n", this, pos); - - if(this->size <= pos) - MSVCP__String_base_Xran(); - - return basic_string_char_ptr(this)+pos; -} - -/* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDI@Z */ -/* ?at@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAAEBD_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_const_at, 8) -const char* __thiscall MSVCP_basic_string_char_const_at( - const basic_string_char *this, MSVCP_size_t pos) -{ - TRACE("%p %lu\n", this, pos); - - if(this->size <= pos) - MSVCP__String_base_Xran(); - - return basic_string_char_const_ptr(this)+pos; -} - -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIPBDI@Z */ -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0PEBD0@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_replace_cstr_len, 20) -basic_string_char* __thiscall basic_string_char_replace_cstr_len(basic_string_char *this, - MSVCP_size_t off, MSVCP_size_t len, const char *str, MSVCP_size_t str_len) -{ - MSVCP_size_t inside_pos = -1; - char *ptr = basic_string_char_ptr(this); - - TRACE("%p %ld %ld %p %ld\n", this, off, len, str, str_len); - - if(this->size < off) - MSVCP__String_base_Xran(); - - if(len > this->size-off) - len = this->size-off; - - if(MSVCP_basic_string_char_npos-str_len <= this->size-len) - MSVCP__String_base_Xlen(); - - if(basic_string_char_inside(this, str)) - inside_pos = str-ptr; - - if(len < str_len) { - basic_string_char_grow(this, this->size-len+str_len, FALSE); - ptr = basic_string_char_ptr(this); - } - - if(inside_pos == -1) { - memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char)); - memcpy(ptr+off, str, str_len*sizeof(char)); - } else if(len >= str_len) { - memmove(ptr+off, ptr+inside_pos, str_len*sizeof(char)); - memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char)); - } else { - MSVCP_size_t size; - - memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(char)); - - if(inside_pos < off+len) { - size = off+len-inside_pos; - if(size > str_len) - size = str_len; - memmove(ptr+off, ptr+inside_pos, size*sizeof(char)); - } else { - size = 0; - } - - if(str_len > size) - memmove(ptr+off+size, ptr+off+str_len, (str_len-size)*sizeof(char)); - } - - basic_string_char_eos(this, this->size-len+str_len); - return this; -} - -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIPBD@Z */ -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0PEBD@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_replace_cstr, 16) -basic_string_char* __thiscall basic_string_char_replace_cstr(basic_string_char *this, - MSVCP_size_t off, MSVCP_size_t len, const char *str) -{ - return basic_string_char_replace_cstr_len(this, off, len, str, - MSVCP_char_traits_char_length(str)); -} - -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIABV12@II@Z */ -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0AEBV12@00@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_replace_substr, 24) -basic_string_char* __thiscall basic_string_char_replace_substr(basic_string_char *this, MSVCP_size_t off, - MSVCP_size_t len, const basic_string_char *str, MSVCP_size_t str_off, MSVCP_size_t str_len) -{ - if(str->size < str_off) - MSVCP__String_base_Xran(); - - if(str_len > str->size-str_off) - str_len = str->size-str_off; - - return basic_string_char_replace_cstr_len(this, off, len, - basic_string_char_const_ptr(str)+str_off, str_len); -} - -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIABV12@@Z */ -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0AEBV12@@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_replace, 16) -basic_string_char* __thiscall basic_string_char_replace(basic_string_char *this, - MSVCP_size_t off, MSVCP_size_t len, const basic_string_char *str) -{ - return basic_string_char_replace_cstr_len(this, off, len, - basic_string_char_const_ptr(str), str->size); -} - -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IIID@Z */ -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K00D@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_replace_ch, 20) -basic_string_char* __thiscall basic_string_char_replace_ch(basic_string_char *this, - MSVCP_size_t off, MSVCP_size_t len, MSVCP_size_t count, char ch) -{ - char *ptr = basic_string_char_ptr(this); - - TRACE("%p %ld %ld %ld %c\n", this, off, len, count, ch); - - if(this->size < off) - MSVCP__String_base_Xran(); - - if(len > this->size-off) - len = this->size-off; - - if(MSVCP_basic_string_char_npos-count <= this->size-len) - MSVCP__String_base_Xlen(); - - if(len < count) { - basic_string_char_grow(this, this->size-len+count, FALSE); - ptr = basic_string_char_ptr(this); - } - - memmove(ptr+off+count, ptr+off+len, (this->size-off-len)*sizeof(char)); - MSVCP_char_traits_char_assignn(ptr+off, count, ch); - basic_string_char_eos(this, this->size-len+count); - - return this; -} - -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@000@Z */ -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@000@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_iter, 36) -basic_string_char* __thiscall basic_string_char_replace_iter_iter(basic_string_char *this, - String_iterator_char beg, String_iterator_char end, - String_iterator_char res_beg, String_iterator_char res_end) -{ - String_iterator_char begin = { this, basic_string_char_ptr(this) }; - return basic_string_char_replace_cstr_len(this, - MSVCP_basic_string_char_Pdif(beg, begin), MSVCP_basic_string_char_Pdif(end, beg), - res_beg.pos, MSVCP_basic_string_char_Pdif(res_end, res_beg)); -} - -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0ABV12@@Z */ -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0AEBV12@@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_bstr, 24) -basic_string_char* __thiscall basic_string_char_replace_iter_bstr(basic_string_char *this, - String_iterator_char beg, String_iterator_char end, const basic_string_char *str) -{ - String_iterator_char begin = { this, basic_string_char_ptr(this) }; - return basic_string_char_replace(this, MSVCP_basic_string_char_Pdif(beg, begin), - MSVCP_basic_string_char_Pdif(end, beg), str); -} - -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0ID@Z */ -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0_KD@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_ch, 28) -basic_string_char* __thiscall basic_string_char_replace_iter_ch(basic_string_char *this, - String_iterator_char beg, String_iterator_char end, MSVCP_size_t count, char ch) -{ - String_iterator_char begin = { this, basic_string_char_ptr(this) }; - return basic_string_char_replace_ch(this, MSVCP_basic_string_char_Pdif(beg, begin), - MSVCP_basic_string_char_Pdif(end, beg), count, ch); -} - -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0PBD1@Z */ -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0PEBD1@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_ptr_ptr, 28) -basic_string_char* __thiscall basic_string_char_replace_iter_ptr_ptr(basic_string_char *this, - String_iterator_char beg, String_iterator_char end, - const char *res_beg, const char *res_end) -{ - String_iterator_char begin = { this, basic_string_char_ptr(this) }; - return basic_string_char_replace_cstr_len(this, MSVCP_basic_string_char_Pdif(beg, begin), - MSVCP_basic_string_char_Pdif(end, beg), res_beg, res_end-res_beg); -} - -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0PBD@Z */ -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0PEBD@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_cstr, 24) -basic_string_char* __thiscall basic_string_char_replace_iter_cstr(basic_string_char *this, - String_iterator_char beg, String_iterator_char end, const char *str) -{ - String_iterator_char begin = { this, basic_string_char_ptr(this) }; - return basic_string_char_replace_cstr(this, MSVCP_basic_string_char_Pdif(beg, begin), - MSVCP_basic_string_char_Pdif(end, beg), str); -} - -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0PBDI@Z */ -/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@0PEBD_K@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_cstr_len, 28) -basic_string_char* __thiscall basic_string_char_replace_iter_cstr_len(basic_string_char *this, - String_iterator_char beg, String_iterator_char end, const char *str, MSVCP_size_t len) -{ - String_iterator_char begin = { this, basic_string_char_ptr(this) }; - return basic_string_char_replace_cstr_len(this, MSVCP_basic_string_char_Pdif(beg, begin), - MSVCP_basic_string_char_Pdif(end, beg), str, len); -} - -/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IABV12@@Z */ -/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KAEBV12@@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_insert, 12) -basic_string_char* __thiscall basic_string_char_insert(basic_string_char *this, - MSVCP_size_t off, const basic_string_char *str) -{ - return basic_string_char_replace(this, off, 0, str); -} - -/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IABV12@II@Z */ -/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KAEBV12@00@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_insert_substr, 20) -basic_string_char* __thiscall basic_string_char_insert_substr( - basic_string_char *this, MSVCP_size_t off, const basic_string_char *str, - MSVCP_size_t str_off, MSVCP_size_t str_count) -{ - return basic_string_char_replace_substr(this, off, 0, str, str_off, str_count); -} - -/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IPBD@Z */ -/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KPEBD@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_insert_cstr, 12) -basic_string_char* __thiscall basic_string_char_insert_cstr( - basic_string_char *this, MSVCP_size_t off, const char *str) -{ - return basic_string_char_replace_cstr(this, off, 0, str); -} - -/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IPBDI@Z */ -/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KPEBD0@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_insert_cstr_len, 16) -basic_string_char* __thiscall basic_string_char_insert_cstr_len(basic_string_char *this, - MSVCP_size_t off, const char *str, MSVCP_size_t str_len) -{ - return basic_string_char_replace_cstr_len(this, off, 0, str, str_len); -} - -/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IID@Z */ -/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_K0D@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_insert_chn, 16) -basic_string_char* __thiscall basic_string_char_insert_chn(basic_string_char *this, - MSVCP_size_t off, MSVCP_size_t count, char ch) -{ - return basic_string_char_replace_ch(this, off, 0, count, ch); -} - -/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXV?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@ID@Z */ -/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXV?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@_KD@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_chn, 20) -void __thiscall basic_string_char_insert_iter_chn(basic_string_char *this, - String_iterator_char where, MSVCP_size_t count, char ch) -{ - String_iterator_char iter = { this, basic_string_char_ptr(this) }; - MSVCP_size_t off = MSVCP_basic_string_char_Pdif(where, iter); - - basic_string_char_insert_chn(this, off, count, ch); -} - -/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@D@Z */ -/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@D@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_ch, 20) -String_iterator_char* __thiscall basic_string_char_insert_iter_ch(basic_string_char *this, - String_iterator_char *ret, String_iterator_char where, char ch) -{ - MSVCP_size_t off; - - ret->bstr = this; - ret->pos = basic_string_char_ptr(this); - off = MSVCP_basic_string_char_Pdif(where, *ret); - - basic_string_char_insert_chn(this, off, 1, ch); - ret->pos = basic_string_char_ptr(this)+off; - return ret; -} - -/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */ -/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_null, 16) -String_iterator_char* __thiscall basic_string_char_insert_iter_null(basic_string_char *this, - String_iterator_char *ret, String_iterator_char where) -{ - return basic_string_char_insert_iter_ch(this, ret, where, 0); -} - -/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXV?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@00@Z */ -/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXV?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@00@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_beg_end, 28) -void __thiscall basic_string_char_insert_iter_beg_end(basic_string_char *this, - String_iterator_char where, String_iterator_char beg, String_iterator_char end) -{ - basic_string_char_replace_iter_iter(this, where, where, beg, end); -} - -/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXV?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD1@Z */ -/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXV?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD1@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_ptr_ptr, 20) -void __thiscall basic_string_char_insert_iter_ptr_ptr(basic_string_char *this, - String_iterator_char where, const char *beg, const char *end) -{ - basic_string_char_replace_iter_ptr_ptr(this, where, where, beg, end); -} - -/* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXID@Z */ -/* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_KD@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_resize_ch, 12) -void __thiscall MSVCP_basic_string_char_resize_ch( - basic_string_char *this, MSVCP_size_t size, char ch) -{ - TRACE("%p %lu %c\n", this, size, ch); - - if(size <= this->size) - MSVCP_basic_string_char_erase(this, size, this->size); - else - MSVCP_basic_string_char_append_len_ch(this, size-this->size, ch); -} - -/* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXI@Z */ -/* ?resize@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAX_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_resize, 8) -void __thiscall MSVCP_basic_string_char_resize( - basic_string_char *this, MSVCP_size_t size) -{ - MSVCP_basic_string_char_resize_ch(this, size, '\0'); -} - -/* ?clear@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */ -/* ?clear@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_clear, 4) -void __thiscall MSVCP_basic_string_char_clear(basic_string_char *this) -{ - basic_string_char_eos(this, 0); -} - -/* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -/* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -/* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -/* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_begin, 8) -String_iterator_char* __thiscall MSVCP_basic_string_char_begin( - basic_string_char *this, String_iterator_char *ret) -{ - TRACE("%p\n", this); - - ret->bstr = this; - ret->pos = basic_string_char_const_ptr(this); - return ret; -} - -/* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -/* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -/* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -/* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_end, 8) -String_iterator_char* __thiscall MSVCP_basic_string_char_end( - basic_string_char *this, String_iterator_char *ret) -{ - TRACE("%p\n", this); - - ret->bstr = this; - ret->pos = basic_string_char_const_ptr(this)+this->size; - return ret; -} - -/* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$reverse_iterator@V?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@XZ */ -/* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$reverse_iterator@V?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@XZ */ -/* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$reverse_iterator@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@XZ */ -/* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$reverse_iterator@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@XZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rbegin, 8) -String_reverse_iterator_char* __thiscall MSVCP_basic_string_char_rbegin( - basic_string_char *this, String_reverse_iterator_char *ret) -{ - TRACE("%p\n", this); - - ret->bstr = this; - ret->pos = basic_string_char_const_ptr(this)+this->size; - return ret; -} - -/* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$reverse_iterator@V?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@XZ */ -/* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA?AV?$reverse_iterator@V?$_String_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@XZ */ -/* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$reverse_iterator@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@XZ */ -/* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$reverse_iterator@V?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@XZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_rend, 8) -String_reverse_iterator_char* __thiscall MSVCP_basic_string_char_rend( - basic_string_char *this, String_reverse_iterator_char *ret) -{ - TRACE("%p\n", this); - - ret->bstr = this; - ret->pos = basic_string_char_const_ptr(this); - return ret; -} - -/* basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t>> */ -/* basic_string<unsigned short, char_traits<unsigned short>, allocator<unsigned short>> */ -/* ?npos@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@2IB */ -/* ?npos@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@2_KB */ -/* ?npos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@2IB */ -/* ?npos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@2_KB */ -const MSVCP_size_t MSVCP_basic_string_wchar_npos = -1; - -/* ?_Myptr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAEPA_WXZ */ -/* ?_Myptr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAAPEA_WXZ */ -/* ?_Myptr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IAEPAGXZ */ -/* ?_Myptr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IEAAPEAGXZ */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_ptr, 4) -wchar_t* __thiscall basic_string_wchar_ptr(basic_string_wchar *this) -{ - if(this->res == BUF_SIZE_WCHAR-1) - return this->data.buf; - return this->data.ptr; -} - -/* ?_Myptr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IBEPB_WXZ */ -/* ?_Myptr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEBAPEB_WXZ */ -/* ?_Myptr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IBEPBGXZ */ -/* ?_Myptr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IEBAPEBGXZ */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_const_ptr, 4) -const wchar_t* __thiscall basic_string_wchar_const_ptr(const basic_string_wchar *this) -{ - if(this->res == BUF_SIZE_WCHAR-1) - return this->data.buf; - return this->data.ptr; -} - -/* ?_Eos@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAEXI@Z */ -/* ?_Eos@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAAX_K@Z */ -/* ?_Eos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IAEXI@Z */ -/* ?_Eos@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IEAAX_K@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_eos, 8) -void __thiscall basic_string_wchar_eos(basic_string_wchar *this, MSVCP_size_t len) -{ - static const wchar_t nullbyte_w = '\0'; - - this->size = len; - MSVCP_char_traits_wchar_assign(basic_string_wchar_ptr(this)+len, &nullbyte_w); -} - -/* ?_Inside@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAE_NPB_W@Z */ -/* ?_Inside@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAA_NPEB_W@Z */ -/* ?_Inside@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IAE_NPBG@Z */ -/* ?_Inside@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IEAA_NPEBG@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_inside, 8) -MSVCP_bool __thiscall basic_string_wchar_inside( - basic_string_wchar *this, const wchar_t *ptr) -{ - wchar_t *cstr = basic_string_wchar_ptr(this); - - return (ptr<cstr || ptr>=cstr+this->size) ? FALSE : TRUE; -} - -/* ?_Tidy@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAEX_NI@Z */ -/* ?_Tidy@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAAX_N_K@Z */ -/* ?_Tidy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IAEX_NI@Z */ -/* ?_Tidy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IEAAX_N_K@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_tidy, 12) -void __thiscall basic_string_wchar_tidy(basic_string_wchar *this, - MSVCP_bool built, MSVCP_size_t new_size) -{ - if(built && BUF_SIZE_WCHAR<=this->res) { - wchar_t *ptr = this->data.ptr; - - if(new_size > 0) - MSVCP_char_traits_wchar__Copy_s(this->data.buf, BUF_SIZE_WCHAR, ptr, new_size); - MSVCP_allocator_wchar_deallocate(this->allocator, ptr, this->res+1); - } - - this->res = BUF_SIZE_WCHAR-1; - basic_string_wchar_eos(this, new_size); -} - -/* ?_Grow@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAE_NI_N@Z */ -/* ?_Grow@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAA_N_K_N@Z */ -/* ?_Grow@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IAE_NI_N@Z */ -/* ?_Grow@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IEAA_N_K_N@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_grow, 12) -MSVCP_bool __thiscall basic_string_wchar_grow( - basic_string_wchar *this, MSVCP_size_t new_size, MSVCP_bool trim) -{ - if(this->res < new_size) { - MSVCP_size_t new_res = new_size, len = this->size; - wchar_t *ptr; - - new_res |= 0xf; - - if(new_res/3 < this->res/2) - new_res = this->res + this->res/2; - - ptr = MSVCP_allocator_wchar_allocate(this->allocator, new_res+1); - if(!ptr) - ptr = MSVCP_allocator_wchar_allocate(this->allocator, new_size+1); - else - new_size = new_res; - if(!ptr) { - ERR("Out of memory\n"); - basic_string_wchar_tidy(this, TRUE, 0); - return FALSE; - } - - MSVCP_char_traits_wchar__Copy_s(ptr, new_size, - basic_string_wchar_ptr(this), this->size); - basic_string_wchar_tidy(this, TRUE, 0); - this->data.ptr = ptr; - this->res = new_size; - basic_string_wchar_eos(this, len); - } else if(trim && new_size < BUF_SIZE_WCHAR) - basic_string_wchar_tidy(this, TRUE, - new_size<this->size ? new_size : this->size); - else if(new_size == 0) - basic_string_wchar_eos(this, 0); - - return (new_size>0); -} - -/* ?_Copy@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAEXII@Z */ -/* ?_Copy@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAAX_K0@Z */ -/* ?_Copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IAEXII@Z */ -/* ?_Copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IEAAX_K0@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar__Copy, 12) -void __thiscall basic_string_wchar__Copy(basic_string_wchar *this, - MSVCP_size_t new_size, MSVCP_size_t copy_len) -{ - TRACE("%p %lu %lu\n", this, new_size, copy_len); - - if(!basic_string_wchar_grow(this, new_size, FALSE)) - return; - basic_string_wchar_eos(this, copy_len); -} - -/* ?_Pdif@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@KAIV?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0@Z */ -/* ?_Pdif@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@KA_KV?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0@Z */ -/* ?_Pdif@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@KAIV?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@0@Z */ -/* ?_Pdif@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@KA_KV?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@0@Z */ -static MSVCP_size_t __cdecl MSVCP_basic_string_wchar_Pdif(String_iterator_wchar i1, String_iterator_wchar i2) -{ - TRACE("(%p %p) (%p %p)\n", i1.bstr, i1.pos, i2.bstr, i2.pos); - - if((!i1.bstr && i1.pos) || i1.bstr!=i2.bstr) { - _invalid_parameter(NULL, NULL, NULL, 0, 0); - return 0; - } - - return !i1.pos ? 0 : i1.pos-i2.pos; -} - -/* ?get_allocator@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$allocator@_W@2@XZ */ -/* ?get_allocator@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV?$allocator@_W@2@XZ */ -/* ?get_allocator@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$allocator@G@2@XZ */ -/* ?get_allocator@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$allocator@G@2@XZ */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_get_allocator, 8) -allocator* __thiscall basic_string_wchar_get_allocator(const basic_string_wchar *this, allocator *ret) -{ - TRACE("%p\n", this); - return ret; -} - -/* ?erase@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@II@Z */ -/* ?erase@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@_K0@Z */ -/* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@II@Z */ -/* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_erase, 12) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_erase( - basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t len) -{ - TRACE("%p %lu %lu\n", this, pos, len); - - if(pos > this->size) - MSVCP__String_base_Xran(); - - if(len > this->size-pos) - len = this->size-pos; - - if(len) { - MSVCP_char_traits_wchar__Move_s(basic_string_wchar_ptr(this)+pos, - this->res-pos, basic_string_wchar_ptr(this)+pos+len, - this->size-pos-len); - basic_string_wchar_eos(this, this->size-len); - } - - return this; -} - -/* ?erase@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE?AV?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0@Z */ -/* ?erase@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA?AV?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0@Z */ -/* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$_String_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@0@Z */ -/* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA?AV?$_String_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@0@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_erase_iter_range, 24) -String_iterator_wchar* __thiscall basic_string_wchar_erase_iter_range(basic_string_wchar *this, - String_iterator_wchar *ret, String_iterator_wchar beg, String_iterator_wchar end) -{ - MSVCP_size_t off; - - ret->bstr = this; - ret->pos = basic_string_wchar_ptr(this); - off = MSVCP_basic_string_wchar_Pdif(beg, *ret); - - MSVCP_basic_string_wchar_erase(this, off, MSVCP_basic_string_wchar_Pdif(end, beg)); - - ret->bstr = this; - ret->pos = basic_string_wchar_ptr(this)+off; - return ret; -} - -/* ?erase@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE?AV?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z */ -/* ?erase@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA?AV?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z */ -/* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$_String_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z */ -/* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA?AV?$_String_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_erase_iter, 16) -String_iterator_wchar* __thiscall basic_string_wchar_erase_iter(basic_string_wchar *this, - String_iterator_wchar *ret, String_iterator_wchar pos) -{ - MSVCP_size_t off; - - ret->bstr = this; - ret->pos = basic_string_wchar_ptr(this); - off = MSVCP_basic_string_wchar_Pdif(pos, *ret); - - MSVCP_basic_string_wchar_erase(this, off, 1); - - ret->bstr = this; - ret->pos = basic_string_wchar_ptr(this)+off; - return ret; -} - -/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@ABV12@II@Z */ -/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */ -/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@II@Z */ -/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_substr, 16) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_substr( - basic_string_wchar *this, const basic_string_wchar *assign, - MSVCP_size_t pos, MSVCP_size_t len) -{ - TRACE("%p %p %lu %lu\n", this, assign, pos, len); - - if(assign->size < pos) - MSVCP__String_base_Xran(); - - if(len > assign->size-pos) - len = assign->size-pos; - - if(this == assign) { - MSVCP_basic_string_wchar_erase(this, pos+len, MSVCP_basic_string_wchar_npos); - MSVCP_basic_string_wchar_erase(this, 0, pos); - } else if(basic_string_wchar_grow(this, len, FALSE)) { - MSVCP_char_traits_wchar__Copy_s(basic_string_wchar_ptr(this), - this->res, basic_string_wchar_const_ptr(assign)+pos, len); - basic_string_wchar_eos(this, len); - } - - return this; -} - -/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@ABV12@@Z */ -/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@AEBV12@@Z */ -/* ??4?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV01@ABV01@@Z */ -/* ??4?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV01@AEBV01@@Z */ -/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@@Z */ -/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@@Z */ -/* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@ABV01@@Z */ -/* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@AEBV01@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign, 8) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign( - basic_string_wchar *this, const basic_string_wchar *assign) -{ - return MSVCP_basic_string_wchar_assign_substr(this, assign, - 0, MSVCP_basic_string_wchar_npos); -} - -/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@PB_WI@Z */ -/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@PEB_W_K@Z */ -/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBGI@Z */ -/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_cstr_len, 12) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_cstr_len( - basic_string_wchar *this, const wchar_t *str, MSVCP_size_t len) -{ - TRACE("%p %s %lu\n", this, debugstr_wn(str, len), len); - - if(basic_string_wchar_inside(this, str)) - return MSVCP_basic_string_wchar_assign_substr(this, this, - str-basic_string_wchar_ptr(this), len); - else if(basic_string_wchar_grow(this, len, FALSE)) { - MSVCP_char_traits_wchar__Copy_s(basic_string_wchar_ptr(this), - this->res, str, len); - basic_string_wchar_eos(this, len); - } - - return this; -} - -/* ??4?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV01@_W@Z */ -/* ??4?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV01@_W@Z */ -/* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@G@Z */ -/* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@G@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_ch, 8) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_ch( - basic_string_wchar *this, wchar_t ch) -{ - return MSVCP_basic_string_wchar_assign_cstr_len(this, &ch, 1); -} - -/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@PB_W@Z */ -/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@PEB_W@Z */ -/* ??4?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV01@PB_W@Z */ -/* ??4?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV01@PEB_W@Z */ -/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG@Z */ -/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG@Z */ -/* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@PBG@Z */ -/* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@PEBG@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_cstr, 8) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_cstr( - basic_string_wchar *this, const wchar_t *str) -{ - return MSVCP_basic_string_wchar_assign_cstr_len(this, str, - MSVCP_char_traits_wchar_length(str)); -} - -/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@I_W@Z */ -/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@_K_W@Z */ -/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IG@Z */ -/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KG@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assignn, 12) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assignn( - basic_string_wchar *this, MSVCP_size_t count, wchar_t ch) -{ - TRACE("%p %ld %c\n", this, count, ch); - - basic_string_wchar_grow(this, count, FALSE); - MSVCP_char_traits_wchar_assignn(basic_string_wchar_ptr(this), count, ch); - basic_string_wchar_eos(this, count); - return this; -} - -/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@PB_W0@Z */ -/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@PEB_W0@Z */ -/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG0@Z */ -/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG0@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_ptr_ptr, 12) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_ptr_ptr( - basic_string_wchar *this, const wchar_t *first, const wchar_t *last) -{ - return MSVCP_basic_string_wchar_assign_cstr_len(this, first, last-first); -} - -/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0@Z */ -/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0@Z */ -/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@0@Z */ -/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@0@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_assign_iter, 20) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_assign_iter(basic_string_wchar *this, - String_iterator_wchar beg, String_iterator_wchar end) -{ - return MSVCP_basic_string_wchar_assign_ptr_ptr(this, beg.pos, end.pos); -} - -/* ?_Chassign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAEXII_W@Z */ -/* ?_Chassign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAAX_K0_W@Z */ -/* ?_Chassign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IAEXIIG@Z */ -/* ?_Chassign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IEAAX_K0G@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_Chassign, 16) -void __thiscall MSVCP_basic_string_wchar_Chassign(basic_string_wchar *this, - MSVCP_size_t off, MSVCP_size_t count, wchar_t ch) -{ - TRACE("%p %lu %lu %c\n", this, off, count, ch); - MSVCP_char_traits_wchar_assignn(basic_string_wchar_ptr(this)+off, count, ch); -} - -/* ?_Copy_s@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPA_WIII@Z */ -/* ?_Copy_s@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEA_W_K11@Z */ -/* ?_Copy_s@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPAGIII@Z */ -/* ?_Copy_s@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEAG_K11@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_Copy_s, 20) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_Copy_s(const basic_string_wchar *this, - wchar_t *dest, MSVCP_size_t size, MSVCP_size_t count, MSVCP_size_t off) -{ - TRACE("%p %p %lu %lu %lu\n", this, dest, size, count, off); - - if(this->size < off) - MSVCP__String_base_Xran(); - - if(count > this->size-off) - count = this->size-off; - - MSVCP_char_traits_wchar__Copy_s(dest, size, - basic_string_wchar_const_ptr(this)+off, count); - return count; -} - -/* ?copy@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPA_WII@Z */ -/* ?copy@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEA_W_K1@Z */ -/* ?copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPAGII@Z */ -/* ?copy@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEAG_K1@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_copy, 16) -MSVCP_size_t __thiscall basic_string_wchar_copy(const basic_string_wchar *this, - wchar_t *dest, MSVCP_size_t count, MSVCP_size_t off) -{ - return MSVCP_basic_string_wchar_Copy_s(this, dest, count, count, off); -} - -/* ?c_str@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEPB_WXZ */ -/* ?c_str@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAPEB_WXZ */ -/* ?data@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEPB_WXZ */ -/* ?data@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAPEB_WXZ */ -/* ?c_str@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */ -/* ?c_str@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */ -/* ?data@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */ -/* ?data@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_c_str, 4) -const wchar_t* __thiscall MSVCP_basic_string_wchar_c_str(const basic_string_wchar *this) -{ - TRACE("%p\n", this); - return basic_string_wchar_const_ptr(this); -} - -/* ?capacity@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIXZ */ -/* ?capacity@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KXZ */ -/* ?capacity@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */ -/* ?capacity@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_capacity, 4) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_capacity(basic_string_wchar *this) -{ - TRACE("%p\n", this); - return this->res; -} - -/* ?reserve@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXI@Z */ -/* ?reserve@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAX_K@Z */ -/* ?reserve@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXI@Z */ -/* ?reserve@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_reserve, 8) -void __thiscall MSVCP_basic_string_wchar_reserve(basic_string_wchar *this, MSVCP_size_t size) -{ - MSVCP_size_t len; - - TRACE("%p %ld\n", this, size); - - len = this->size; - if(len > size) - return; - - basic_string_wchar_grow(this, size, FALSE); - basic_string_wchar_eos(this, len); -} - -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@XZ */ -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@XZ */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@XZ */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor, 4) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor(basic_string_wchar *this) -{ - TRACE("%p\n", this); - - basic_string_wchar_tidy(this, FALSE, 0); - return this; -} - -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@ABV01@@Z */ -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@AEBV01@@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV01@@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV01@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_copy_ctor, 8) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_copy_ctor( - basic_string_wchar *this, const basic_string_wchar *copy) -{ - TRACE("%p %p\n", this, copy); - - basic_string_wchar_tidy(this, FALSE, 0); - MSVCP_basic_string_wchar_assign(this, copy); - return this; -} - -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@PB_W@Z */ -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@PEB_W@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBG@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr, 8) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr( - basic_string_wchar *this, const wchar_t *str) -{ - TRACE("%p %s\n", this, debugstr_w(str)); - - basic_string_wchar_tidy(this, FALSE, 0); - MSVCP_basic_string_wchar_assign_cstr(this, str); - return this; -} - -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@PB_WABV?$allocator@_W@1@@Z */ -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@PEB_WAEBV?$allocator@_W@1@@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBGABV?$allocator@G@1@@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBGAEBV?$allocator@G@1@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr_alloc, 12) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr_alloc( - basic_string_wchar *this, const wchar_t *str, const void *alloc) -{ - return MSVCP_basic_string_wchar_ctor_cstr(this, str); -} - -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@PB_WI@Z */ -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@PEB_W_K@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBGI@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr_len, 12) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr_len( - basic_string_wchar *this, const wchar_t *str, MSVCP_size_t len) -{ - TRACE("%p %s %ld\n", this, debugstr_wn(str, len), len); - - basic_string_wchar_tidy(this, FALSE, 0); - MSVCP_basic_string_wchar_assign_cstr_len(this, str, len); - return this; -} - -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@PB_WIABV?$allocator@_W@1@@Z */ -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@PEB_W_KAEBV?$allocator@_W@1@@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBGIABV?$allocator@G@1@@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG_KAEBV?$allocator@G@1@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_cstr_len_alloc, 16) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_cstr_len_alloc( - basic_string_wchar *this, const wchar_t *str, MSVCP_size_t len, const void *alloc) -{ - return MSVCP_basic_string_wchar_ctor_cstr_len(this, str, len); -} - -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@ABV01@II@Z */ -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@AEBV01@_K1@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV01@II@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV01@_K1@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_substr, 16) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_substr( - basic_string_wchar *this, const basic_string_wchar *assign, - MSVCP_size_t pos, MSVCP_size_t len) -{ - TRACE("%p %p %lu %lu\n", this, assign, pos, len); - - basic_string_wchar_tidy(this, FALSE, 0); - MSVCP_basic_string_wchar_assign_substr(this, assign, pos, len); - return this; -} - -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@ABV01@IIABV?$allocator@_W@1@@Z */ -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@AEBV01@_K1AEBV?$allocator@_W@1@@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV01@IIABV?$allocator@G@1@@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV01@_K1AEBV?$allocator@G@1@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_substr_alloc, 20) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_substr_alloc( - basic_string_wchar *this, const basic_string_wchar *assign, - MSVCP_size_t pos, MSVCP_size_t len, const void *alloc) -{ - return MSVCP_basic_string_wchar_ctor_substr(this, assign, pos, len); -} - -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@ABV?$allocator@_W@1@@Z */ -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@AEBV?$allocator@_W@1@@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV?$allocator@G@1@@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV?$allocator@G@1@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_alloc, 8) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_alloc( - basic_string_wchar *this, const void *alloc) -{ - TRACE("%p %p\n", this, alloc); - - basic_string_wchar_tidy(this, FALSE, 0); - return this; -} - -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@I_W@Z */ -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@_K_W@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@IG@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@_KG@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_ch, 12) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_ch(basic_string_wchar *this, - MSVCP_size_t count, wchar_t ch) -{ - TRACE("%p %ld %c\n", this, count, ch); - - basic_string_wchar_tidy(this, FALSE, 0); - MSVCP_basic_string_wchar_assignn(this, count, ch); - return this; -} - -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@I_WABV?$allocator@_W@1@@Z */ -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@_K_WAEBV?$allocator@_W@1@@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@IGABV?$allocator@G@1@@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@_KGAEBV?$allocator@G@1@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_ch_alloc, 16) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_ch_alloc(basic_string_wchar *this, - MSVCP_size_t count, wchar_t ch, const void *alloc) -{ - return MSVCP_basic_string_wchar_ctor_ch(this, count, ch); -} - -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@PB_W0@Z */ -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@PEB_W0@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBG0@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG0@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_ptr_ptr, 12) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_ptr_ptr(basic_string_wchar *this, - const wchar_t *first, const wchar_t *last) -{ - return MSVCP_basic_string_wchar_ctor_cstr_len(this, first, last-first); -} - -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@1@0@Z */ -/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@1@0@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@1@0@Z */ -/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@1@0@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_ctor_iter, 20) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_ctor_iter(basic_string_wchar *this, - String_iterator_wchar beg, String_iterator_wchar end) -{ - return MSVCP_basic_string_wchar_ctor_cstr_len(this, beg.pos, end.pos-beg.pos); -} - -/* ??1?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@XZ */ -/* ??1?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@XZ */ -/* ??1?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@XZ */ -/* ??1?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_dtor, 4) -void __thiscall MSVCP_basic_string_wchar_dtor(basic_string_wchar *this) -{ - TRACE("%p\n", this); - basic_string_wchar_tidy(this, TRUE, 0); -} - -/* ?size@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIXZ */ -/* ?size@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KXZ */ -/* ?length@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIXZ */ -/* ?length@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KXZ */ -/* ?size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */ -/* ?size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */ -/* ?length@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */ -/* ?length@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_length, 4) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_length(const basic_string_wchar *this) -{ - TRACE("%p\n", this); - return this->size; -} - -/* ?max_size@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIXZ */ -/* ?max_size@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KXZ */ -/* ?max_size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */ -/* ?max_size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_max_size, 4) -MSVCP_size_t __thiscall basic_string_wchar_max_size(const basic_string_wchar *this) -{ - TRACE("%p\n", this); - return MSVCP_allocator_wchar_max_size(this->allocator)-1; -} - -/* ?empty@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE_NXZ */ -/* ?empty@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_NXZ */ -/* ?empty@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE_NXZ */ -/* ?empty@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_NXZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_empty, 4) -MSVCP_bool __thiscall MSVCP_basic_string_wchar_empty(basic_string_wchar *this) -{ - TRACE("%p\n", this); - return this->size == 0; -} - -/* ?swap@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXAAV12@@Z */ -/* ?swap@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXAEAV12@@Z */ -/* ?swap@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXAAV12@@Z */ -/* ?swap@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXAEAV12@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_swap, 8) -void __thiscall MSVCP_basic_string_wchar_swap(basic_string_wchar *this, basic_string_wchar *str) -{ - if(this != str) { - char tmp[sizeof(this->data)]; - const MSVCP_size_t size = this->size; - const MSVCP_size_t res = this->res; - - memcpy(tmp, this->data.buf, sizeof(this->data)); - memcpy(this->data.buf, str->data.buf, sizeof(this->data)); - memcpy(str->data.buf, tmp, sizeof(this->data)); - - this->size = str->size; - this->res = str->res; - - str->size = size; - str->res = res; - } -} - -/* ?substr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV12@II@Z */ -/* ?substr@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV12@_K0@Z */ -/* ?substr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV12@II@Z */ -/* ?substr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV12@_K0@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_substr, 16) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_substr(basic_string_wchar *this, - basic_string_wchar *ret, MSVCP_size_t off, MSVCP_size_t len) -{ - TRACE("%p %lu %lu\n", this, off, len); - - MSVCP_basic_string_wchar_ctor_substr(ret, this, off, len); - return ret; -} - -/* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@ABV12@II@Z */ -/* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */ -/* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@II@Z */ -/* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_substr, 16) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_substr(basic_string_wchar *this, - const basic_string_wchar *append, MSVCP_size_t offset, MSVCP_size_t count) -{ - TRACE("%p %p %lu %lu\n", this, append, offset, count); - - if(append->size < offset) - MSVCP__String_base_Xran(); - - if(count > append->size-offset) - count = append->size-offset; - - if(MSVCP_basic_string_wchar_npos-this->size<=count || this->size+count<this->size) - MSVCP__String_base_Xlen(); - - if(basic_string_wchar_grow(this, this->size+count, FALSE)) { - MSVCP_char_traits_wchar__Copy_s(basic_string_wchar_ptr(this)+this->size, - this->res-this->size, basic_string_wchar_const_ptr(append)+offset, count); - basic_string_wchar_eos(this, this->size+count); - } - - return this; -} - -/* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@ABV12@@Z */ -/* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@AEBV12@@Z */ -/* ??Y?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV01@ABV01@@Z */ -/* ??Y?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV01@AEBV01@@Z */ -/* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@@Z */ -/* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@@Z */ -/* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@ABV01@@Z */ -/* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@AEBV01@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append, 8) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append( - basic_string_wchar *this, const basic_string_wchar *append) -{ - return MSVCP_basic_string_wchar_append_substr(this, append, - 0, MSVCP_basic_string_wchar_npos); -} - -/* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@PB_WI@Z */ -/* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@PEB_W_K@Z */ -/* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBGI@Z */ -/* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_cstr_len, 12) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_cstr_len( - basic_string_wchar *this, const wchar_t *append, MSVCP_size_t count) -{ - TRACE("%p %s %lu\n", this, debugstr_wn(append, count), count); - - if(basic_string_wchar_inside(this, append)) - return MSVCP_basic_string_wchar_append_substr(this, this, - append-basic_string_wchar_ptr(this), count); - - if(MSVCP_basic_string_wchar_npos-this->size<=count || this->size+count<this->size) - MSVCP__String_base_Xlen(); - - if(basic_string_wchar_grow(this, this->size+count, FALSE)) { - MSVCP_char_traits_wchar__Copy_s(basic_string_wchar_ptr(this)+this->size, - this->res-this->size, append, count); - basic_string_wchar_eos(this, this->size+count); - } - - return this; -} - -/* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@PB_W@Z */ -/* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@PEB_W@Z */ -/* ??Y?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV01@PB_W@Z */ -/* ??Y?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV01@PEB_W@Z */ -/* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG@Z */ -/* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG@Z */ -/* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@PBG@Z */ -/* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@PEBG@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_cstr, 8) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_cstr( - basic_string_wchar *this, const wchar_t *append) -{ - return MSVCP_basic_string_wchar_append_cstr_len(this, append, - MSVCP_char_traits_wchar_length(append)); -} - -/* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@PB_W0@Z */ -/* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@PEB_W0@Z */ -/* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG0@Z */ -/* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG0@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_beg_end, 12) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_beg_end( - basic_string_wchar *this, const wchar_t *beg, const wchar_t *end) -{ - return MSVCP_basic_string_wchar_append_cstr_len(this, beg, end-beg); -} - -/* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0@Z */ -/* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0@Z */ -/* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@0@Z */ -/* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@0@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_iter, 20) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_iter( - basic_string_wchar *this, String_iterator_wchar beg, String_iterator_wchar end) -{ - return MSVCP_basic_string_wchar_append_cstr_len(this, beg.pos, end.pos-beg.pos); -} - -/* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@I_W@Z */ -/* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@_K_W@Z */ -/* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IG@Z */ -/* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KG@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_len_ch, 12) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_len_ch( - basic_string_wchar *this, MSVCP_size_t count, wchar_t ch) -{ - TRACE("%p %lu %c\n", this, count, ch); - - if(MSVCP_basic_string_wchar_npos-this->size <= count) - MSVCP__String_base_Xlen(); - - if(basic_string_wchar_grow(this, this->size+count, FALSE)) { - MSVCP_char_traits_wchar_assignn(basic_string_wchar_ptr(this)+this->size, count, ch); - basic_string_wchar_eos(this, this->size+count); - } - - return this; -} - -/* ??Y?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV01@_W@Z */ -/* ??Y?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV01@_W@Z */ -/* ?push_back@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEX_W@Z */ -/* ?push_back@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAX_W@Z */ -/* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@G@Z */ -/* ??Y?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@G@Z */ -/* ?push_back@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXG@Z */ -/* ?push_back@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXG@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_append_ch, 8) -basic_string_wchar* __thiscall MSVCP_basic_string_wchar_append_ch( - basic_string_wchar *this, wchar_t ch) -{ - return MSVCP_basic_string_wchar_append_len_ch(this, 1, ch); -} - -/* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEHIIPB_WI@Z */ -/* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAH_K0PEB_W0@Z */ -/* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIPBGI@Z */ -/* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0PEBG0@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr_cstr_len, 20) -int __thiscall MSVCP_basic_string_wchar_compare_substr_cstr_len( - const basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t num, - const wchar_t *str, MSVCP_size_t count) -{ - int ans; - - TRACE("%p %lu %lu %s %lu\n", this, pos, num, debugstr_wn(str, count), count); - - if(this->size < pos) - MSVCP__String_base_Xran(); - - if(num > this->size-pos) - num = this->size-pos; - - ans = MSVCP_char_traits_wchar_compare(basic_string_wchar_const_ptr(this)+pos, - str, num>count ? count : num); - if(ans) - return ans; - - if(num > count) - ans = 1; - else if(num < count) - ans = -1; - return ans; -} - -/* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEHIIPB_W@Z */ -/* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAH_K0PEB_W@Z */ -/* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIPBG@Z */ -/* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0PEBG@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr_cstr, 16) -int __thiscall MSVCP_basic_string_wchar_compare_substr_cstr(const basic_string_wchar *this, - MSVCP_size_t pos, MSVCP_size_t num, const wchar_t *str) -{ - return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, pos, num, - str, MSVCP_char_traits_wchar_length(str)); -} - -/* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEHPB_W@Z */ -/* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAHPEB_W@Z */ -/* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHPBG@Z */ -/* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAHPEBG@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_cstr, 8) -int __thiscall MSVCP_basic_string_wchar_compare_cstr( - const basic_string_wchar *this, const wchar_t *str) -{ - return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, 0, this->size, - str, MSVCP_char_traits_wchar_length(str)); -} - -/* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEHIIABV12@II@Z */ -/* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAH_K0AEBV12@00@Z */ -/* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIABV12@II@Z */ -/* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0AEBV12@00@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr_substr, 24) -int __thiscall MSVCP_basic_string_wchar_compare_substr_substr( - const basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t num, - const basic_string_wchar *compare, MSVCP_size_t off, MSVCP_size_t count) -{ - TRACE("%p %lu %lu %p %lu %lu\n", this, pos, num, compare, off, count); - - if(compare->size < off) - MSVCP__String_base_Xran(); - - if(count > compare->size-off) - count = compare->size-off; - - return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, pos, num, - basic_string_wchar_const_ptr(compare)+off, count); -} - -/* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEHIIABV12@@Z */ -/* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAH_K0AEBV12@@Z */ -/* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHIIABV12@@Z */ -/* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAH_K0AEBV12@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare_substr, 16) -int __thiscall MSVCP_basic_string_wchar_compare_substr( - const basic_string_wchar *this, MSVCP_size_t pos, MSVCP_size_t num, - const basic_string_wchar *compare) -{ - return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, pos, num, - basic_string_wchar_const_ptr(compare), compare->size); -} - -/* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEHABV12@@Z */ -/* ?compare@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAHAEBV12@@Z */ -/* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEHABV12@@Z */ -/* ?compare@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAHAEBV12@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_compare, 8) -int __thiscall MSVCP_basic_string_wchar_compare( - const basic_string_wchar *this, const basic_string_wchar *compare) -{ - return MSVCP_basic_string_wchar_compare_substr_cstr_len(this, 0, this->size, - basic_string_wchar_const_ptr(compare), compare->size); -} - -/* ?find@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPB_WII@Z */ -/* ?find@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEB_W_K1@Z */ -/* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */ -/* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_cstr_substr, 16) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_cstr_substr( - const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos, MSVCP_size_t len) -{ - const wchar_t *p, *end; - - TRACE("%p %s %lu %lu\n", this, debugstr_wn(find, len), pos, len); - - if(len==0 && pos<=this->size) - return pos; - - end = basic_string_wchar_const_ptr(this)+this->size-len+1; - for(p=basic_string_wchar_const_ptr(this)+pos; p<end; p++) { - p = MSVCP_char_traits_wchar_find(p, end-p, find); - if(!p) - break; - - if(!MSVCP_char_traits_wchar_compare(p, find, len)) - return p-basic_string_wchar_const_ptr(this); - } - - return MSVCP_basic_string_wchar_npos; -} - -/* ?find@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPB_WI@Z */ -/* ?find@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEB_W_K@Z */ -/* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */ -/* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_cstr_off, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_cstr_off( - const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos) -{ - return MSVCP_basic_string_wchar_find_cstr_substr(this, find, pos, - MSVCP_char_traits_wchar_length(find)); -} - -/* ?find@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIABV12@I@Z */ -/* ?find@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KAEBV12@_K@Z */ -/* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */ -/* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_off, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_off( - const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off) -{ - return MSVCP_basic_string_wchar_find_cstr_substr(this, - basic_string_wchar_const_ptr(find), off, find->size); -} - -/* ?find@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEI_WI@Z */ -/* ?find@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_K_W_K@Z */ -/* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */ -/* ?find@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_ch, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_ch( - const basic_string_wchar *this, wchar_t ch, MSVCP_size_t pos) -{ - return MSVCP_basic_string_wchar_find_cstr_substr(this, &ch, pos, 1); -} - -/* ?rfind@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPB_WII@Z */ -/* ?rfind@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEB_W_K1@Z */ -/* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */ -/* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rfind_cstr_substr, 16) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_rfind_cstr_substr( - const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos, MSVCP_size_t len) -{ - const wchar_t *p, *end; - - TRACE("%p %s %lu %lu\n", this, debugstr_wn(find, len), pos, len); - - if(len==0) - return pos<this->size ? pos : this->size; - - if(len > this->size) - return MSVCP_basic_string_wchar_npos; - - if(pos > this->size-len+1) - pos = this->size-len+1; - end = basic_string_wchar_const_ptr(this); - for(p=end+pos; p>=end; p--) { - if(*p==*find && !MSVCP_char_traits_wchar_compare(p, find, len)) - return p-basic_string_wchar_const_ptr(this); - } - - return MSVCP_basic_string_wchar_npos; -} - -/* ?rfind@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPB_WI@Z */ -/* ?rfind@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEB_W_K@Z */ -/* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */ -/* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rfind_cstr_off, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_rfind_cstr_off( - const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t pos) -{ - return MSVCP_basic_string_wchar_rfind_cstr_substr(this, find, pos, - MSVCP_char_traits_wchar_length(find)); -} - -/* ?rfind@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIABV12@I@Z */ -/* ?rfind@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KAEBV12@_K@Z */ -/* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */ -/* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rfind_off, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_rfind_off( - const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off) -{ - return MSVCP_basic_string_wchar_rfind_cstr_substr(this, - basic_string_wchar_const_ptr(find), off, find->size); -} - -/* ?rfind@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEI_WI@Z */ -/* ?rfind@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_K_W_K@Z */ -/* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */ -/* ?rfind@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rfind_ch, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_rfind_ch( - const basic_string_wchar *this, wchar_t ch, MSVCP_size_t pos) -{ - return MSVCP_basic_string_wchar_rfind_cstr_substr(this, &ch, pos, 1); -} - -/* ?find_first_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPB_WII@Z */ -/* ?find_first_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEB_W_K1@Z */ -/* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */ -/* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of_cstr_substr, 16) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_of_cstr_substr( - const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len) -{ - const wchar_t *p, *end; - - TRACE("%p %p %lu %lu\n", this, find, off, len); - - if(len>0 && off<this->size) { - end = basic_string_wchar_const_ptr(this)+this->size; - for(p=basic_string_wchar_const_ptr(this)+off; p<end; p++) - if(MSVCP_char_traits_wchar_find(find, len, p)) - return p-basic_string_wchar_const_ptr(this); - } - - return MSVCP_basic_string_wchar_npos; -} - -/* ?find_first_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIABV12@I@Z */ -/* ?find_first_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KAEBV12@_K@Z */ -/* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */ -/* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_of( - const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off) -{ - return MSVCP_basic_string_wchar_find_first_of_cstr_substr(this, - basic_string_wchar_const_ptr(find), off, find->size); -} - -/* ?find_first_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPB_WI@Z */ -/* ?find_first_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEB_W_K@Z */ -/* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */ -/* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of_cstr, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_of_cstr( - const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off) -{ - return MSVCP_basic_string_wchar_find_first_of_cstr_substr( - this, find, off, MSVCP_char_traits_wchar_length(find)); -} - -/* ?find_first_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEI_WI@Z */ -/* ?find_first_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_K_W_K@Z */ -/* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */ -/* ?find_first_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_of_ch, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_of_ch( - const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off) -{ - return MSVCP_basic_string_wchar_find_first_of_cstr_substr(this, &ch, off, 1); -} - -/* ?find_first_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPB_WII@Z */ -/* ?find_first_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEB_W_K1@Z */ -/* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */ -/* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of_cstr_substr, 16) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of_cstr_substr( - const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len) -{ - const wchar_t *p, *end; - - TRACE("%p %p %lu %lu\n", this, find, off, len); - - if(off<this->size) { - end = basic_string_wchar_const_ptr(this)+this->size; - for(p=basic_string_wchar_const_ptr(this)+off; p<end; p++) - if(!MSVCP_char_traits_wchar_find(find, len, p)) - return p-basic_string_wchar_const_ptr(this); - } - - return MSVCP_basic_string_wchar_npos; -} - -/* ?find_first_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIABV12@I@Z */ -/* ?find_first_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KAEBV12@_K@Z */ -/* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */ -/* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of( - const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off) -{ - return MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(this, - basic_string_wchar_const_ptr(find), off, find->size); -} - -/* ?find_first_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPB_WI@Z */ -/* ?find_first_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEB_W_K@Z */ -/* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */ -/* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of_cstr, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of_cstr( - const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off) -{ - return MSVCP_basic_string_wchar_find_first_not_of_cstr_substr( - this, find, off, MSVCP_char_traits_wchar_length(find)); -} - -/* ?find_first_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEI_WI@Z */ -/* ?find_first_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_K_W_K@Z */ -/* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */ -/* ?find_first_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_first_not_of_ch, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_first_not_of_ch( - const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off) -{ - return MSVCP_basic_string_wchar_find_first_not_of_cstr_substr(this, &ch, off, 1); -} - -/* ?find_last_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPB_WII@Z */ -/* ?find_last_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEB_W_K1@Z */ -/* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */ -/* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of_cstr_substr, 16) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_of_cstr_substr( - const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len) -{ - const wchar_t *p, *beg; - - TRACE("%p %p %lu %lu\n", this, find, off, len); - - - if(len>0 && this->size>0) { - if(off >= this->size) - off = this->size-1; - - beg = basic_string_wchar_const_ptr(this); - for(p=beg+off; p>=beg; p--) - if(MSVCP_char_traits_wchar_find(find, len, p)) - return p-beg; - } - - return MSVCP_basic_string_wchar_npos; -} - -/* ?find_last_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIABV12@I@Z */ -/* ?find_last_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KAEBV12@_K@Z */ -/* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */ -/* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_of( - const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off) -{ - return MSVCP_basic_string_wchar_find_last_of_cstr_substr(this, - basic_string_wchar_const_ptr(find), off, find->size); -} - -/* ?find_last_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPB_WI@Z */ -/* ?find_last_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEB_W_K@Z */ -/* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */ -/* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of_cstr, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_of_cstr( - const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off) -{ - return MSVCP_basic_string_wchar_find_last_of_cstr_substr( - this, find, off, MSVCP_char_traits_wchar_length(find)); -} - -/* ?find_last_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEI_WI@Z */ -/* ?find_last_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_K_W_K@Z */ -/* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */ -/* ?find_last_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_of_ch, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_of_ch( - const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off) -{ - return MSVCP_basic_string_wchar_find_last_of_cstr_substr(this, &ch, off, 1); -} - -/* ?find_last_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPB_WII@Z */ -/* ?find_last_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEB_W_K1@Z */ -/* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGII@Z */ -/* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K1@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_not_of_cstr_substr, 16) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_not_of_cstr_substr( - const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off, MSVCP_size_t len) -{ - const wchar_t *p, *beg; - - TRACE("%p %p %lu %lu\n", this, find, off, len); - - if(len>0 && this->size>0) { - if(off >= this->size) - off = this->size-1; - - beg = basic_string_wchar_const_ptr(this); - for(p=beg+off; p>=beg; p--) - if(!MSVCP_char_traits_wchar_find(find, len, p)) - return p-beg; - } - - return MSVCP_basic_string_wchar_npos; -} - -/* ?find_last_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIABV12@I@Z */ -/* ?find_last_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KAEBV12@_K@Z */ -/* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIABV12@I@Z */ -/* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KAEBV12@_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_not_of, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_not_of( - const basic_string_wchar *this, const basic_string_wchar *find, MSVCP_size_t off) -{ - return MSVCP_basic_string_wchar_find_last_not_of_cstr_substr(this, - basic_string_wchar_const_ptr(find), off, find->size); -} - -/* ?find_last_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIPB_WI@Z */ -/* ?find_last_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KPEB_W_K@Z */ -/* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIPBGI@Z */ -/* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KPEBG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_not_of_cstr, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_not_of_cstr( - const basic_string_wchar *this, const wchar_t *find, MSVCP_size_t off) -{ - return MSVCP_basic_string_wchar_find_last_not_of_cstr_substr( - this, find, off, MSVCP_char_traits_wchar_length(find)); -} - -/* ?find_last_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEI_WI@Z */ -/* ?find_last_not_of@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_K_W_K@Z */ -/* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIGI@Z */ -/* ?find_last_not_of@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_find_last_not_of_ch, 12) -MSVCP_size_t __thiscall MSVCP_basic_string_wchar_find_last_not_of_ch( - const basic_string_wchar *this, wchar_t ch, MSVCP_size_t off) -{ - return MSVCP_basic_string_wchar_find_last_not_of_cstr_substr(this, &ch, off, 1); -} - -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@IIPB_WI@Z */ -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@_K0PEB_W0@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIPBGI@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0PEBG0@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_cstr_len, 20) -basic_string_wchar* __thiscall basic_string_wchar_replace_cstr_len(basic_string_wchar *this, - MSVCP_size_t off, MSVCP_size_t len, const wchar_t *str, MSVCP_size_t str_len) +/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@ABV12@II@Z */ +/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */ +/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@II@Z */ +/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@_K1@Z */ +static basic_string_wchar* MSVCP_basic_string_wchar_assign_substr( + basic_string_wchar *this, const basic_string_wchar *assign, + MSVCP_size_t pos, MSVCP_size_t len) { - MSVCP_size_t inside_pos = -1; - wchar_t *ptr = basic_string_wchar_ptr(this); - - TRACE("%p %ld %ld %p %ld\n", this, off, len, str, str_len); + TRACE("%p %p %lu %lu\n", this, assign, pos, len); - if(this->size < off) + if(assign->size < pos) MSVCP__String_base_Xran(); - if(len > this->size-off) - len = this->size-off; - - if(MSVCP_basic_string_wchar_npos-str_len <= this->size-len) - MSVCP__String_base_Xlen(); - - if(basic_string_wchar_inside(this, str)) - inside_pos = str-ptr; - - if(len < str_len) { - basic_string_wchar_grow(this, this->size-len+str_len, FALSE); - ptr = basic_string_wchar_ptr(this); - } - - if(inside_pos == -1) { - memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(wchar_t)); - memcpy(ptr+off, str, str_len*sizeof(wchar_t)); - } else if(len >= str_len) { - memmove(ptr+off, ptr+inside_pos, str_len*sizeof(wchar_t)); - memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(wchar_t)); - } else { - MSVCP_size_t size; - - memmove(ptr+off+str_len, ptr+off+len, (this->size-off-len)*sizeof(wchar_t)); - - if(inside_pos < off+len) { - size = off+len-inside_pos; - if(size > str_len) - size = str_len; - memmove(ptr+off, ptr+inside_pos, size*sizeof(wchar_t)); - } else { - size = 0; - } + if(len > assign->size-pos) + len = assign->size-pos; - if(str_len > size) - memmove(ptr+off+size, ptr+off+str_len, (str_len-size)*sizeof(wchar_t)); + if(this == assign) { + MSVCP_basic_string_wchar_erase(this, pos+len, MSVCP_basic_string_wchar_npos); + MSVCP_basic_string_wchar_erase(this, 0, pos); + } else if(basic_string_wchar_grow(this, len, FALSE)) { + MSVCP_char_traits_wchar__Copy_s(basic_string_wchar_ptr(this), + this->res, basic_string_wchar_const_ptr(assign)+pos, len); + basic_string_wchar_eos(this, len); } - basic_string_wchar_eos(this, this->size-len+str_len); return this; } -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@IIPB_W@Z */ -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@_K0PEB_W@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIPBG@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0PEBG@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_cstr, 16) -basic_string_wchar* __thiscall basic_string_wchar_replace_cstr(basic_string_wchar *this, - MSVCP_size_t off, MSVCP_size_t len, const wchar_t *str) -{ - return basic_string_wchar_replace_cstr_len(this, off, len, str, - MSVCP_char_traits_wchar_length(str)); -} - -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@IIABV12@II@Z */ -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@_K0AEBV12@00@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIABV12@II@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0AEBV12@00@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_substr, 24) -basic_string_wchar* __thiscall basic_string_wchar_replace_substr(basic_string_wchar *this, MSVCP_size_t off, - MSVCP_size_t len, const basic_string_wchar *str, MSVCP_size_t str_off, MSVCP_size_t str_len) -{ - if(str->size < str_off) - MSVCP__String_base_Xran(); - - if(str_len > str->size-str_off) - str_len = str->size-str_off; - - return basic_string_wchar_replace_cstr_len(this, off, len, - basic_string_wchar_const_ptr(str)+str_off, str_len); -} - -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@IIABV12@@Z */ -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@_K0AEBV12@@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIABV12@@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0AEBV12@@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace, 16) -basic_string_wchar* __thiscall basic_string_wchar_replace(basic_string_wchar *this, - MSVCP_size_t off, MSVCP_size_t len, const basic_string_wchar *str) -{ - return basic_string_wchar_replace_cstr_len(this, off, len, - basic_string_wchar_const_ptr(str), str->size); -} - -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@III_W@Z */ -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@_K00_W@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIIG@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K00G@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_ch, 20) -basic_string_wchar* __thiscall basic_string_wchar_replace_ch(basic_string_wchar *this, - MSVCP_size_t off, MSVCP_size_t len, MSVCP_size_t count, wchar_t ch) +/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@PB_WI@Z */ +/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@PEB_W_K@Z */ +/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBGI@Z */ +/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG_K@Z */ +static basic_string_wchar* MSVCP_basic_string_wchar_assign_cstr_len( + basic_string_wchar *this, const wchar_t *str, MSVCP_size_t len) { - wchar_t *ptr = basic_string_wchar_ptr(this); - - TRACE("%p %ld %ld %ld %c\n", this, off, len, count, ch); - - if(this->size < off) - MSVCP__String_base_Xran(); - - if(len > this->size-off) - len = this->size-off; - - if(MSVCP_basic_string_wchar_npos-count <= this->size-len) - MSVCP__String_base_Xlen(); + TRACE("%p %s %lu\n", this, debugstr_wn(str, len), len); - if(len < count) { - basic_string_wchar_grow(this, this->size-len+count, FALSE); - ptr = basic_string_wchar_ptr(this); + if(basic_string_wchar_inside(this, str)) + return MSVCP_basic_string_wchar_assign_substr(this, this, + str-basic_string_wchar_ptr(this), len); + else if(basic_string_wchar_grow(this, len, FALSE)) { + MSVCP_char_traits_wchar__Copy_s(basic_string_wchar_ptr(this), + this->res, str, len); + basic_string_wchar_eos(this, len); } - memmove(ptr+off+count, ptr+off+len, (this->size-off-len)*sizeof(wchar_t)); - MSVCP_char_traits_wchar_assignn(ptr+off, count, ch); - basic_string_wchar_eos(this, this->size-len+count); - return this; } -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@000@Z */ -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@000@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@000@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@000@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_iter, 36) -basic_string_wchar* __thiscall basic_string_wchar_replace_iter_iter(basic_string_wchar *this, - String_iterator_wchar beg, String_iterator_wchar end, - String_iterator_wchar res_beg, String_iterator_wchar res_end) -{ - String_iterator_wchar begin = { this, basic_string_wchar_ptr(this) }; - return basic_string_wchar_replace_cstr_len(this, - MSVCP_basic_string_wchar_Pdif(beg, begin), MSVCP_basic_string_wchar_Pdif(end, beg), - res_beg.pos, MSVCP_basic_string_wchar_Pdif(res_end, res_beg)); -} - -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0ABV12@@Z */ -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0AEBV12@@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@0ABV12@@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@0AEBV12@@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_bstr, 24) -basic_string_wchar* __thiscall basic_string_wchar_replace_iter_bstr(basic_string_wchar *this, - String_iterator_wchar beg, String_iterator_wchar end, const basic_string_wchar *str) -{ - String_iterator_wchar begin = { this, basic_string_wchar_ptr(this) }; - return basic_string_wchar_replace(this, MSVCP_basic_string_wchar_Pdif(beg, begin), - MSVCP_basic_string_wchar_Pdif(end, beg), str); -} - -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0I_W@Z */ -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0_K_W@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@0IG@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@0_KG@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_ch, 28) -basic_string_wchar* __thiscall basic_string_wchar_replace_iter_ch(basic_string_wchar *this, - String_iterator_wchar beg, String_iterator_wchar end, MSVCP_size_t count, wchar_t ch) -{ - String_iterator_wchar begin = { this, basic_string_wchar_ptr(this) }; - return basic_string_wchar_replace_ch(this, MSVCP_basic_string_wchar_Pdif(beg, begin), - MSVCP_basic_string_wchar_Pdif(end, beg), count, ch); -} - -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0PB_W1@Z */ -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0PEB_W1@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@0PBG1@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@0PEBG1@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_ptr_ptr, 28) -basic_string_wchar* __thiscall basic_string_wchar_replace_iter_ptr_ptr(basic_string_wchar *this, - String_iterator_wchar beg, String_iterator_wchar end, - const wchar_t *res_beg, const wchar_t *res_end) -{ - String_iterator_wchar begin = { this, basic_string_wchar_ptr(this) }; - return basic_string_wchar_replace_cstr_len(this, MSVCP_basic_string_wchar_Pdif(beg, begin), - MSVCP_basic_string_wchar_Pdif(end, beg), res_beg, res_end-res_beg); -} - -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0PB_W@Z */ -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0PEB_W@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@0PBG@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@0PEBG@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_cstr, 24) -basic_string_wchar* __thiscall basic_string_wchar_replace_iter_cstr(basic_string_wchar *this, - String_iterator_wchar beg, String_iterator_wchar end, const wchar_t *str) -{ - String_iterator_wchar begin = { this, basic_string_wchar_ptr(this) }; - return basic_string_wchar_replace_cstr(this, MSVCP_basic_string_wchar_Pdif(beg, begin), - MSVCP_basic_string_wchar_Pdif(end, beg), str); -} - -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0PB_WI@Z */ -/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@0PEB_W_K@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@0PBGI@Z */ -/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@0PEBG_K@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_cstr_len, 28) -basic_string_wchar* __thiscall basic_string_wchar_replace_iter_cstr_len(basic_string_wchar *this, - String_iterator_wchar beg, String_iterator_wchar end, const wchar_t *str, MSVCP_size_t len) -{ - String_iterator_wchar begin = { this, basic_string_wchar_ptr(this) }; - return basic_string_wchar_replace_cstr_len(this, MSVCP_basic_string_wchar_Pdif(beg, begin), - MSVCP_basic_string_wchar_Pdif(end, beg), str, len); -} - -/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@IABV12@@Z */ -/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@_KAEBV12@@Z */ -/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IABV12@@Z */ -/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KAEBV12@@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert, 12) -basic_string_wchar* __thiscall basic_string_wchar_insert(basic_string_wchar *this, - MSVCP_size_t off, const basic_string_wchar *str) -{ - return basic_string_wchar_replace(this, off, 0, str); -} - -/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@IABV12@II@Z */ -/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@_KAEBV12@00@Z */ -/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IABV12@II@Z */ -/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KAEBV12@00@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_substr, 20) -basic_string_wchar* __thiscall basic_string_wchar_insert_substr( - basic_string_wchar *this, MSVCP_size_t off, const basic_string_wchar *str, - MSVCP_size_t str_off, MSVCP_size_t str_count) -{ - return basic_string_wchar_replace_substr(this, off, 0, str, str_off, str_count); -} - -/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@IPB_W@Z */ -/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@_KPEB_W@Z */ -/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IPBG@Z */ -/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KPEBG@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_cstr, 12) -basic_string_wchar* __thiscall basic_string_wchar_insert_cstr( - basic_string_wchar *this, MSVCP_size_t off, const wchar_t *str) -{ - return basic_string_wchar_replace_cstr(this, off, 0, str); -} - -/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@IPB_WI@Z */ -/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@_KPEB_W0@Z */ -/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IPBGI@Z */ -/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KPEBG0@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_cstr_len, 16) -basic_string_wchar* __thiscall basic_string_wchar_insert_cstr_len(basic_string_wchar *this, - MSVCP_size_t off, const wchar_t *str, MSVCP_size_t str_len) -{ - return basic_string_wchar_replace_cstr_len(this, off, 0, str, str_len); -} - -/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@II_W@Z */ -/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@_K0_W@Z */ -/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IIG@Z */ -/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_K0G@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_chn, 16) -basic_string_wchar* __thiscall basic_string_wchar_insert_chn(basic_string_wchar *this, - MSVCP_size_t off, MSVCP_size_t count, wchar_t ch) -{ - return basic_string_wchar_replace_ch(this, off, 0, count, ch); -} - -/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXV?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@I_W@Z */ -/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXV?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@_K_W@Z */ -/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXV?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@IG@Z */ -/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXV?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@_KG@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_chn, 20) -void __thiscall basic_string_wchar_insert_iter_chn(basic_string_wchar *this, - String_iterator_wchar where, MSVCP_size_t count, wchar_t ch) -{ - String_iterator_wchar iter = { this, basic_string_wchar_ptr(this) }; - MSVCP_size_t off = MSVCP_basic_string_wchar_Pdif(where, iter); - - basic_string_wchar_insert_chn(this, off, count, ch); -} - -/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE?AV?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@_W@Z */ -/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA?AV?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@_W@Z */ -/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$_String_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@G@Z */ -/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA?AV?$_String_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@G@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_ch, 20) -String_iterator_wchar* __thiscall basic_string_wchar_insert_iter_ch(basic_string_wchar *this, - String_iterator_wchar *ret, String_iterator_wchar where, wchar_t ch) -{ - MSVCP_size_t off; - - ret->bstr = this; - ret->pos = basic_string_wchar_ptr(this); - off = MSVCP_basic_string_wchar_Pdif(where, *ret); - - basic_string_wchar_insert_chn(this, off, 1, ch); - ret->pos = basic_string_wchar_ptr(this)+off; - return ret; -} - -/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE?AV?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z */ -/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA?AV?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z */ -/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$_String_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z */ -/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA?AV?$_String_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_null, 16) -String_iterator_wchar* __thiscall basic_string_wchar_insert_iter_null(basic_string_wchar *this, - String_iterator_wchar *ret, String_iterator_wchar where) -{ - return basic_string_wchar_insert_iter_ch(this, ret, where, 0); -} - -/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXV?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@00@Z */ -/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXV?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@00@Z */ -/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXV?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@00@Z */ -/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXV?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@00@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_beg_end, 28) -void __thiscall basic_string_wchar_insert_iter_beg_end(basic_string_wchar *this, - String_iterator_wchar where, String_iterator_wchar beg, String_iterator_wchar end) -{ - basic_string_wchar_replace_iter_iter(this, where, where, beg, end); -} - -/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXV?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W1@Z */ -/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXV?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PEB_W1@Z */ -/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXV?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG1@Z */ -/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXV?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG1@Z */ -DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_ptr_ptr, 20) -void __thiscall basic_string_wchar_insert_iter_ptr_ptr(basic_string_wchar *this, - String_iterator_wchar where, const wchar_t *beg, const wchar_t *end) -{ - basic_string_wchar_replace_iter_ptr_ptr(this, where, where, beg, end); -} - -/* ??A?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAA_WI@Z */ -/* ??A?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEA_W_K@Z */ -/* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAGI@Z */ -/* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_operator_at, 8) -wchar_t* __thiscall MSVCP_basic_string_wchar_operator_at( - basic_string_wchar *this, MSVCP_size_t pos) -{ - TRACE("%p %lu\n", this, pos); - - assert(this->size >= pos); - return basic_string_wchar_ptr(this)+pos; -} - -/* ??A?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEAB_WI@Z */ -/* ??A?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAAEB_W_K@Z */ -/* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEABGI@Z */ -/* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAAEBG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_const_operator_at, 8) -const wchar_t* __thiscall MSVCP_basic_string_wchar_const_operator_at( - const basic_string_wchar *this, MSVCP_size_t pos) -{ - TRACE("%p %lu\n", this, pos); - - assert(this->size >= pos); - return basic_string_wchar_const_ptr(this)+pos; -} - -/* ??A?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAA_WU_Size_type_nosscl@01@@Z */ -/* ??A?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEA_WU_Size_type_nosscl@01@@Z */ -/* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAGU_Size_type_nosscl@01@@Z */ -/* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAGU_Size_type_nosscl@01@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_operator_at_noverify, 8) -wchar_t* __thiscall MSVCP_basic_string_wchar_operator_at_noverify( - basic_string_wchar *this, size_t_noverify pos) -{ - TRACE("%p %lu\n", this, pos.val); - return basic_string_wchar_ptr(this)+pos.val; -} - -/* ??A?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEAB_WU_Size_type_nosscl@01@@Z */ -/* ??A?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAAEB_WU_Size_type_nosscl@01@@Z */ -/* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEABGU_Size_type_nosscl@01@@Z */ -/* ??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAAEBGU_Size_type_nosscl@01@@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_operator_const_at_noverify, 8) -const wchar_t* __thiscall MSVCP_basic_string_wchar_operator_const_at_noverify( - const basic_string_wchar *this, size_t_noverify pos) -{ - TRACE("%p %lu\n", this, pos.val); - return basic_string_wchar_const_ptr(this)+pos.val; -} - -/* ?at@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAA_WI@Z */ -/* ?at@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEA_W_K@Z */ -/* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAGI@Z */ -/* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_at, 8) -wchar_t* __thiscall MSVCP_basic_string_wchar_at( - basic_string_wchar *this, MSVCP_size_t pos) -{ - TRACE("%p %lu\n", this, pos); - - if(this->size <= pos) - MSVCP__String_base_Xran(); - - return basic_string_wchar_ptr(this)+pos; -} - -/* ?at@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEAB_WI@Z */ -/* ?at@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAAEB_W_K@Z */ -/* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEABGI@Z */ -/* ?at@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAAEBG_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_const_at, 8) -const wchar_t* __thiscall MSVCP_basic_string_wchar_const_at( - const basic_string_wchar *this, MSVCP_size_t pos) -{ - TRACE("%p %lu\n", this, pos); - - if(this->size <= pos) - MSVCP__String_base_Xran(); - - return basic_string_wchar_const_ptr(this)+pos; -} - -/* ?resize@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXI_W@Z */ -/* ?resize@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAX_K_W@Z */ -/* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXIG@Z */ -/* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_KG@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_resize_ch, 12) -void __thiscall MSVCP_basic_string_wchar_resize_ch( - basic_string_wchar *this, MSVCP_size_t size, wchar_t ch) -{ - TRACE("%p %lu %c\n", this, size, ch); - - if(size <= this->size) - MSVCP_basic_string_wchar_erase(this, size, this->size); - else - MSVCP_basic_string_wchar_append_len_ch(this, size-this->size, ch); -} - -/* ?resize@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXI@Z */ -/* ?resize@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAX_K@Z */ -/* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXI@Z */ -/* ?resize@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAX_K@Z */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_resize, 8) -void __thiscall MSVCP_basic_string_wchar_resize( - basic_string_wchar *this, MSVCP_size_t size) -{ - MSVCP_basic_string_wchar_resize_ch(this, size, '\0'); -} - -/* ?clear@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXXZ */ -/* ?clear@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXXZ */ -/* ?clear@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */ -/* ?clear@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_clear, 4) -void __thiscall MSVCP_basic_string_wchar_clear(basic_string_wchar *this) +/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@PB_W@Z */ +/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@PEB_W@Z */ +/* ??4?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV01@PB_W@Z */ +/* ??4?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV01@PEB_W@Z */ +/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBG@Z */ +/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG@Z */ +/* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV01@PBG@Z */ +/* ??4?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV01@PEBG@Z */ +static basic_string_wchar* MSVCP_basic_string_wchar_assign_cstr( + basic_string_wchar *this, const wchar_t *str) { - basic_string_wchar_eos(this, 0); + return MSVCP_basic_string_wchar_assign_cstr_len(this, str, + MSVCP_char_traits_wchar_length(str)); } -/* ?begin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE?AV?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?begin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA?AV?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?begin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?begin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$_String_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -/* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA?AV?$_String_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -/* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -/* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_begin, 8) -String_iterator_wchar* __thiscall MSVCP_basic_string_wchar_begin( - basic_string_wchar *this, String_iterator_wchar *ret) +/* ?c_str@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEPB_WXZ */ +/* ?c_str@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAPEB_WXZ */ +/* ?data@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEPB_WXZ */ +/* ?data@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAPEB_WXZ */ +/* ?c_str@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */ +/* ?c_str@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */ +/* ?data@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPBGXZ */ +/* ?data@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEBGXZ */ +const wchar_t* MSVCP_basic_string_wchar_c_str(const basic_string_wchar *this) { TRACE("%p\n", this); - - ret->bstr = this; - ret->pos = basic_string_wchar_const_ptr(this); - return ret; + return basic_string_wchar_const_ptr(this); } -/* ?end@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE?AV?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?end@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA?AV?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?end@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?end@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */ -/* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$_String_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -/* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA?AV?$_String_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -/* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -/* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_end, 8) -String_iterator_wchar* __thiscall MSVCP_basic_string_wchar_end( - basic_string_wchar *this, String_iterator_wchar *ret) +/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@XZ */ +/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@XZ */ +/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@XZ */ +/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@XZ */ +basic_string_wchar* MSVCP_basic_string_wchar_ctor(basic_string_wchar *this) { TRACE("%p\n", this); - ret->bstr = this; - ret->pos = basic_string_wchar_const_ptr(this)+this->size; - return ret; + basic_string_wchar_tidy(this, FALSE, 0); + return this; } -/* ?rbegin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE?AV?$reverse_iterator@V?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ */ -/* ?rbegin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA?AV?$reverse_iterator@V?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ */ -/* ?rbegin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$reverse_iterator@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ */ -/* ?rbegin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV?$reverse_iterator@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ */ -/* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$reverse_iterator@V?$_String_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@2@XZ */ -/* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA?AV?$reverse_iterator@V?$_String_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@2@XZ */ -/* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$reverse_iterator@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@2@XZ */ -/* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$reverse_iterator@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@2@XZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rbegin, 8) -String_reverse_iterator_wchar* __thiscall MSVCP_basic_string_wchar_rbegin( - basic_string_wchar *this, String_reverse_iterator_wchar *ret) +/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@PB_W@Z */ +/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@PEB_W@Z */ +/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBG@Z */ +/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG@Z */ +basic_string_wchar* MSVCP_basic_string_wchar_ctor_cstr( + basic_string_wchar *this, const wchar_t *str) { - TRACE("%p\n", this); + TRACE("%p %s\n", this, debugstr_w(str)); - ret->bstr = this; - ret->pos = basic_string_wchar_const_ptr(this)+this->size; - return ret; + basic_string_wchar_tidy(this, FALSE, 0); + MSVCP_basic_string_wchar_assign_cstr(this, str); + return this; } -/* ?rend@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE?AV?$reverse_iterator@V?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ */ -/* ?rend@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA?AV?$reverse_iterator@V?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ */ -/* ?rend@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$reverse_iterator@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ */ -/* ?rend@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV?$reverse_iterator@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ */ -/* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$reverse_iterator@V?$_String_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@2@XZ */ -/* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA?AV?$reverse_iterator@V?$_String_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@2@XZ */ -/* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$reverse_iterator@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@2@XZ */ -/* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$reverse_iterator@V?$_String_const_iterator@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@2@XZ */ -DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_wchar_rend, 8) -String_reverse_iterator_wchar* __thiscall MSVCP_basic_string_wchar_rend( - basic_string_wchar *this, String_reverse_iterator_wchar *ret) +/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@PB_WI@Z */ +/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@PEB_W_K@Z */ +/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@PBGI@Z */ +/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@PEBG_K@Z */ +basic_string_wchar* MSVCP_basic_string_wchar_ctor_cstr_len( + basic_string_wchar *this, const wchar_t *str, MSVCP_size_t len) { - TRACE("%p\n", this); + TRACE("%p %s %ld\n", this, debugstr_wn(str, len), len); - ret->bstr = this; - ret->pos = basic_string_wchar_const_ptr(this); - return ret; + basic_string_wchar_tidy(this, FALSE, 0); + MSVCP_basic_string_wchar_assign_cstr_len(this, str, len); + return this; } -/* _String_val class */ -/* ??_F?$_String_val@DV?$allocator@D@std@@@std@@QAEXXZ */ -/* ??_F?$_String_val@DV?$allocator@D@std@@@std@@QEAAXXZ */ -/* ??_F?$_String_val@GV?$allocator@G@std@@@std@@QAEXXZ */ -/* ??_F?$_String_val@GV?$allocator@G@std@@@std@@QEAAXXZ */ -/* ??_F?$_String_val@_WV?$allocator@_W@std@@@std@@QAEXXZ */ -/* ??_F?$_String_val@_WV?$allocator@_W@std@@@std@@QEAAXXZ */ -DEFINE_THISCALL_WRAPPER(_String_val_ctor, 4) -void* __thiscall _String_val_ctor(void *this) +/* ??1?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@XZ */ +/* ??1?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@XZ */ +/* ??1?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@XZ */ +/* ??1?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@XZ */ +void MSVCP_basic_string_wchar_dtor(basic_string_wchar *this) { TRACE("%p\n", this); - return this; + basic_string_wchar_tidy(this, TRUE, 0); } -/* ??0?$_String_val@DV?$allocator@D@std@@@std@@IAE@V?$allocator@D@1@@Z */ -/* ??0?$_String_val@DV?$allocator@D@std@@@std@@IEAA@V?$allocator@D@1@@Z */ -/* ??0?$_String_val@GV?$allocator@G@std@@@std@@IAE@V?$allocator@G@1@@Z */ -/* ??0?$_String_val@GV?$allocator@G@std@@@std@@IEAA@V?$allocator@G@1@@Z */ -/* ??0?$_String_val@_WV?$allocator@_W@std@@@std@@IAE@V?$allocator@_W@1@@Z */ -/* ??0?$_String_val@_WV?$allocator@_W@std@@@std@@IEAA@V?$allocator@_W@1@@Z */ -/* ??0?$_String_val@DV?$allocator@D@std@@@std@@QAE@ABV01@@Z */ -/* ??0?$_String_val@DV?$allocator@D@std@@@std@@QEAA@AEBV01@@Z */ -/* ??0?$_String_val@GV?$allocator@G@std@@@std@@QAE@ABV01@@Z */ -/* ??0?$_String_val@GV?$allocator@G@std@@@std@@QEAA@AEBV01@@Z */ -/* ??0?$_String_val@_WV?$allocator@_W@std@@@std@@QAE@ABV01@@Z */ -/* ??0?$_String_val@_WV?$allocator@_W@std@@@std@@QEAA@AEBV01@@Z */ -/* ??4?$_String_val@DV?$allocator@D@std@@@std@@QAEAAV01@ABV01@@Z */ -/* ??4?$_String_val@DV?$allocator@D@std@@@std@@QEAAAEAV01@AEBV01@@Z */ -/* ??4?$_String_val@GV?$allocator@G@std@@@std@@QAEAAV01@ABV01@@Z */ -/* ??4?$_String_val@GV?$allocator@G@std@@@std@@QEAAAEAV01@AEBV01@@Z */ -/* ??4?$_String_val@_WV?$allocator@_W@std@@@std@@QAEAAV01@ABV01@@Z */ -/* ??4?$_String_val@_WV?$allocator@_W@std@@@std@@QEAAAEAV01@AEBV01@@Z */ -/* ??4?$_String_val@DV?$allocator@D@std@@@std@@QAEAAV01@ABV01@@Z */ -DEFINE_THISCALL_WRAPPER(_String_val_null_ctor, 8) -void* __thiscall _String_val_null_ctor(void *this, const void *misc) +/* ?size@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIXZ */ +/* ?size@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KXZ */ +/* ?length@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEIXZ */ +/* ?length@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA_KXZ */ +/* ?size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */ +/* ?size@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */ +/* ?length@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEIXZ */ +/* ?length@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA_KXZ */ +MSVCP_size_t MSVCP_basic_string_wchar_length(const basic_string_wchar *this) { - TRACE("%p %p\n", this, misc); - return this; + TRACE("%p\n", this); + return this->size; } -- GitLab