From: Piotr Caban Subject: msvcp71: Added basic_string::insert(iterator, char*, char*) implementation Message-Id: <54CCF332.3080508@codeweavers.com> Date: Sat, 31 Jan 2015 16:22:26 +0100 --- dlls/msvcp71/msvcp71.spec | 4 ++-- dlls/msvcp90/string.c | 27 +++++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/dlls/msvcp71/msvcp71.spec b/dlls/msvcp71/msvcp71.spec index 0bac67c..6b62d5c 100644 --- a/dlls/msvcp71/msvcp71.spec +++ b/dlls/msvcp71/msvcp71.spec @@ -3832,8 +3832,8 @@ @ thiscall -arch=win32 ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@IPBDI@Z(ptr long ptr long) basic_string_char_insert_cstr_len @ cdecl -arch=win64 ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KPEBD@Z(ptr long str) basic_string_char_insert_cstr @ thiscall -arch=win32 ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXViterator@12@ID@Z(ptr ptr long long) basic_string_char_insert_iter_chn -@ thiscall -arch=win32 ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXViterator@12@PBD1@Z(ptr ptr ptr ptr) basic_string_wchar_insert_iter_ptr_ptr -@ thiscall -arch=win32 ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXViterator@12@Vconst_iterator@12@1@Z(ptr ptr ptr ptr) basic_string_wchar_insert_iter_beg_end +@ thiscall -arch=win32 ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXViterator@12@PBD1@Z(ptr ptr ptr ptr) basic_string_char_insert_iter_ptr_ptr +@ thiscall -arch=win32 ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXViterator@12@Vconst_iterator@12@1@Z(ptr ptr ptr ptr) basic_string_char_insert_iter_beg_end @ thiscall -arch=win32 ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AViterator@12@V312@@Z(ptr ptr ptr) basic_string_wchar_insert_iter_null @ thiscall -arch=win32 ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AViterator@12@V312@G@Z(ptr ptr ptr long) basic_string_wchar_insert_iter_ch @ thiscall -arch=win32 ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@IABV12@@Z(ptr long ptr) basic_string_wchar_insert diff --git a/dlls/msvcp90/string.c b/dlls/msvcp90/string.c index 810fb5a..3afb375 100644 --- a/dlls/msvcp90/string.c +++ b/dlls/msvcp90/string.c @@ -4138,6 +4138,15 @@ basic_string_char* __thiscall basic_string_char_replace_iter_ch(basic_string_cha return this; } +static basic_string_char* basic_string_char_replace_iter_ptr_ptr(basic_string_char *this, + basic_string_char_iterator beg, basic_string_char_iterator end, + const char *res_beg, const char *res_end) +{ + basic_string_char_iterator begin = { basic_string_char_ptr(this) }; + return basic_string_char_replace_cstr_len(this, basic_string_char__Pdif(beg, begin), + 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@Viterator@12@0PBD1@Z */ /* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@V?$_Ptrit@DHPADAADPADAAD@2@0PBD1@Z */ DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_beg_end, 20) @@ -4205,6 +4214,22 @@ basic_string_char_iterator* __thiscall basic_string_char_insert_iter_null(basic_ return basic_string_char_insert_iter_ch(this, ret, where, 0); } +/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXViterator@12@PBD1@Z */ +DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_ptr_ptr, 16) +void __thiscall basic_string_char_insert_iter_ptr_ptr(basic_string_char *this, + basic_string_char_iterator where, const char *beg, const char *end) +{ + basic_string_char_replace_iter_ptr_ptr(this, where, where, beg, end); +} + +/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXViterator@12@PBD1@Z */ +DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_beg_end, 16) +void __thiscall basic_string_char_insert_iter_beg_end(basic_string_char *this, + basic_string_char_iterator where, basic_string_char_iterator beg, basic_string_char_iterator end) +{ + basic_string_char_replace_iter_ptr_ptr(this, where, where, beg.pos, end.pos); +} + /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AViterator@12@XZ */ /* ?begin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AVconst_iterator@12@XZ */ /* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AV?$reverse_iterator@Viterator@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@XZ */ @@ -4360,8 +4385,6 @@ basic_string_wchar* __thiscall basic_string_wchar_replace_iter_ch(basic_string_w 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@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 */ static basic_string_wchar* basic_string_wchar_replace_iter_ptr_ptr(basic_string_wchar *this, basic_string_wchar_iterator beg, basic_string_wchar_iterator end, const wchar_t *res_beg, const wchar_t *res_end)