msvcp71: Share the string.c implementation with msvcp90.

This commit is contained in:
Alexandre Julliard 2013-12-16 21:55:33 +01:00
parent 0da244851f
commit 40f175f926
3 changed files with 436 additions and 4229 deletions

View File

@ -2520,7 +2520,7 @@
@ cdecl -arch=win64 ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@PEBD_K@Z(ptr str long) MSVCP_basic_string_char_assign_cstr_len
@ thiscall -arch=win32 ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z(ptr str long) MSVCP_basic_string_char_assign_cstr_len
@ cdecl -arch=win64 ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAAEAV12@_KD@Z(ptr long long) MSVCP_basic_string_char_assignn
@ thiscall -arch=win32 ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@Vconst_iterator@12@0@Z(ptr ptr ptr) MSVCP_basic_string_char_assign_iter
@ thiscall -arch=win32 ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@Vconst_iterator@12@0@Z(ptr ptr ptr) basic_string_char_assign_iter
@ thiscall -arch=win32 ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@@Z(ptr ptr) MSVCP_basic_string_wchar_assign
@ cdecl -arch=win64 ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@AEBV12@@Z(ptr ptr) MSVCP_basic_string_wchar_assign
@ thiscall -arch=win32 ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@ABV12@II@Z(ptr ptr long long) MSVCP_basic_string_wchar_assign_substr
@ -2533,7 +2533,7 @@
@ cdecl -arch=win64 ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@PEBG_K@Z(ptr wstr long) MSVCP_basic_string_wchar_assign_cstr_len
@ thiscall -arch=win32 ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@PBGI@Z(ptr wstr long) MSVCP_basic_string_wchar_assign_cstr_len
@ cdecl -arch=win64 ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAAEAV12@_KG@Z(ptr long long) MSVCP_basic_string_wchar_assignn
@ thiscall -arch=win32 ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@Vconst_iterator@12@0@Z(ptr ptr ptr) MSVCP_basic_string_wchar_assign_iter
@ thiscall -arch=win32 ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@Vconst_iterator@12@0@Z(ptr ptr ptr) basic_string_wchar_assign_iter
@ thiscall -arch=win32 ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@ABV12@@Z(ptr ptr) MSVCP_basic_string_wchar_assign
@ cdecl -arch=win64 ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@AEBV12@@Z(ptr ptr) MSVCP_basic_string_wchar_assign
@ thiscall -arch=win32 ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@ABV12@II@Z(ptr ptr long long) MSVCP_basic_string_wchar_assign_substr
@ -2546,7 +2546,7 @@
@ cdecl -arch=win64 ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@PEB_W_K@Z(ptr wstr long) MSVCP_basic_string_wchar_assign_cstr_len
@ thiscall -arch=win32 ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@PB_WI@Z(ptr wstr long) MSVCP_basic_string_wchar_assign_cstr_len
@ cdecl -arch=win64 ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAAEAV12@_K_W@Z(ptr long long) MSVCP_basic_string_wchar_assignn
@ thiscall -arch=win32 ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@Vconst_iterator@12@0@Z(ptr ptr ptr) MSVCP_basic_string_wchar_assign_iter
@ thiscall -arch=win32 ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@Vconst_iterator@12@0@Z(ptr ptr ptr) basic_string_wchar_assign_iter
@ cdecl -arch=win32 ?assign@?$char_traits@D@std@@SAPADPADID@Z(ptr long long) MSVCP_char_traits_char_assignn
@ cdecl -arch=win64 ?assign@?$char_traits@D@std@@SAPEADPEAD_KD@Z(ptr long long) MSVCP_char_traits_char_assignn
@ cdecl -arch=win32 ?assign@?$char_traits@D@std@@SAXAADABD@Z(ptr ptr) MSVCP_char_traits_char_assign

File diff suppressed because it is too large Load Diff

View File

@ -514,6 +514,13 @@ void CDECL MSVCP__String_base_Xlen(void)
throw_exception(EXCEPTION_LENGTH_ERROR, msg);
}
/* ?_Xlen@_String_base@std@@QBEXXZ */
DEFINE_THISCALL_WRAPPER(_String_base__Xlen, 4)
void __thiscall _String_base__Xlen(const void/*_String_base*/ *this)
{
MSVCP__String_base_Xlen();
}
/* ?_Xran@_String_base@std@@SAXXZ */
void CDECL MSVCP__String_base_Xran(void)
{
@ -523,6 +530,13 @@ void CDECL MSVCP__String_base_Xran(void)
throw_exception(EXCEPTION_OUT_OF_RANGE, msg);
}
/* ?_Xran@_String_base@std@@QBEXXZ */
DEFINE_THISCALL_WRAPPER(_String_base__Xran, 4)
void __thiscall _String_base__Xran(const void/*_String_base*/ *this)
{
MSVCP__String_base_Xran();
}
/* ?_Xinvarg@_String_base@std@@SAXXZ */
void CDECL MSVCP__String_base_Xinvarg(void)
{
@ -4491,3 +4505,422 @@ void* __thiscall _String_val_null_ctor(void *this, const void *misc)
TRACE("%p %p\n", this, misc);
return this;
}
#if _MSVCP_VER < 80 /* old iterator functions */
typedef struct {
const char *pos;
} basic_string_char_iterator;
typedef struct {
const wchar_t *pos;
} basic_string_wchar_iterator;
/* ?_Pdif@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@KAIVconst_iterator@12@0@Z */
MSVCP_size_t __cdecl basic_string_char__Pdif(basic_string_char_iterator i1, basic_string_char_iterator i2)
{
TRACE("(%p %p)\n", i1.pos, i2.pos);
return !i1.pos ? 0 : i1.pos-i2.pos;
}
/* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AViterator@12@V312@0@Z */
DEFINE_THISCALL_WRAPPER(basic_string_char_erase_iter_range, 16)
basic_string_char_iterator* __thiscall basic_string_char_erase_iter_range(basic_string_char *this,
basic_string_char_iterator *ret, basic_string_char_iterator beg, basic_string_char_iterator end)
{
MSVCP_size_t off;
ret->pos = basic_string_char_ptr(this);
off = basic_string_char__Pdif(beg, *ret);
MSVCP_basic_string_char_erase(this, off, basic_string_char__Pdif(end, beg));
ret->pos = basic_string_char_ptr(this)+off;
return ret;
}
/* ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AViterator@12@V312@@Z */
DEFINE_THISCALL_WRAPPER(basic_string_char_erase_iter, 12)
basic_string_char_iterator* __thiscall basic_string_char_erase_iter(basic_string_char *this,
basic_string_char_iterator *ret, basic_string_char_iterator pos)
{
MSVCP_size_t off;
ret->pos = basic_string_char_ptr(this);
off = basic_string_char__Pdif(pos, *ret);
MSVCP_basic_string_char_erase(this, off, 1);
ret->pos = basic_string_char_ptr(this)+off;
return ret;
}
/* ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@Vconst_iterator@12@0@Z */
DEFINE_THISCALL_WRAPPER(basic_string_char_assign_iter, 12)
basic_string_char* __thiscall basic_string_char_assign_iter(basic_string_char *this,
basic_string_char_iterator beg, basic_string_char_iterator end)
{
return MSVCP_basic_string_char_assign_ptr_ptr(this, beg.pos, end.pos);
}
/* ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@Vconst_iterator@01@0@Z */
DEFINE_THISCALL_WRAPPER(basic_string_char_ctor_iter, 12)
basic_string_char* __thiscall basic_string_char_ctor_iter(basic_string_char *this,
basic_string_char_iterator beg, basic_string_char_iterator end)
{
return MSVCP_basic_string_char_ctor_cstr_len(this, beg.pos, end.pos-beg.pos);
}
/* ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@Vconst_iterator@12@0@Z */
DEFINE_THISCALL_WRAPPER(basic_string_char_append_iter, 12)
basic_string_char* __thiscall basic_string_char_append_iter(basic_string_char *this,
basic_string_char_iterator beg, basic_string_char_iterator end)
{
return basic_string_char_replace_cstr_len(this, this->size, 0, beg.pos, end.pos-beg.pos);
}
/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@Viterator@12@0Vconst_iterator@12@1@Z */
DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_iter, 20)
basic_string_char* __thiscall basic_string_char_replace_iter_iter(basic_string_char *this,
basic_string_char_iterator beg, basic_string_char_iterator end,
basic_string_char_iterator rbeg, basic_string_char_iterator rend)
{
return basic_string_char_replace_cstr_len(this, beg.pos-basic_string_char_ptr(this),
end.pos-beg.pos, rbeg.pos, rend.pos-rbeg.pos);
}
/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@Viterator@12@0ABV12@@Z */
DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_bstr, 16)
basic_string_char* __thiscall basic_string_char_replace_iter_bstr(basic_string_char *this,
basic_string_char_iterator beg, basic_string_char_iterator end, basic_string_char *str)
{
return basic_string_char_replace_cstr_len(this, beg.pos-basic_string_char_ptr(this),
end.pos-beg.pos, basic_string_char_ptr(str), str->size);
}
/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@Viterator@12@0ID@Z */
DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_ch, 20)
basic_string_char* __thiscall basic_string_char_replace_iter_ch(basic_string_char *this,
basic_string_char_iterator beg, basic_string_char_iterator end, MSVCP_size_t count, char ch)
{
/* TODO: add more efficient implementation */
MSVCP_size_t off = beg.pos-basic_string_char_ptr(this);
basic_string_char_replace_cstr_len(this, off, end.pos-beg.pos, NULL, 0);
while(count--)
basic_string_char_replace_cstr_len(this, off, 0, &ch, 1);
return this;
}
/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@Viterator@12@0PBD1@Z */
DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_beg_end, 20)
basic_string_char* __thiscall basic_string_char_replace_iter_beg_end(basic_string_char *this,
basic_string_char_iterator beg, basic_string_char_iterator end, const char *rbeg, const char *rend)
{
return basic_string_char_replace_cstr_len(this, beg.pos-basic_string_char_ptr(this),
end.pos-beg.pos, rbeg, rend-rbeg);
}
/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@Viterator@12@0PBD@Z */
DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_cstr, 16)
basic_string_char* __thiscall basic_string_char_replace_iter_cstr(basic_string_char *this,
basic_string_char_iterator beg, basic_string_char_iterator end, const char *str)
{
return basic_string_char_replace_cstr_len(this, beg.pos-basic_string_char_ptr(this),
end.pos-beg.pos, str, strlen(str));
}
/* ?replace@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@Viterator@12@0PBDI@Z */
DEFINE_THISCALL_WRAPPER(basic_string_char_replace_iter_cstr_len, 20)
basic_string_char* __thiscall basic_string_char_replace_iter_cstr_len(basic_string_char *this,
basic_string_char_iterator beg, basic_string_char_iterator end, const char *str, MSVCP_size_t len)
{
return basic_string_char_replace_cstr_len(this, beg.pos-basic_string_char_ptr(this),
end.pos-beg.pos, str, len);
}
/* ?insert@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXViterator@12@ID@Z */
DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_chn, 16)
void __thiscall basic_string_char_insert_iter_chn(basic_string_char *this,
basic_string_char_iterator where, MSVCP_size_t count, char ch)
{
basic_string_char_iterator iter = { basic_string_char_ptr(this) };
MSVCP_size_t off = 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?AViterator@12@V312@D@Z */
DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_ch, 16)
basic_string_char_iterator* __thiscall basic_string_char_insert_iter_ch(basic_string_char *this,
basic_string_char_iterator *ret, basic_string_char_iterator where, char ch)
{
MSVCP_size_t off;
ret->pos = basic_string_char_ptr(this);
off = 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?AViterator@12@V312@@Z */
DEFINE_THISCALL_WRAPPER(basic_string_char_insert_iter_null, 12)
basic_string_char_iterator* __thiscall basic_string_char_insert_iter_null(basic_string_char *this,
basic_string_char_iterator *ret, basic_string_char_iterator where)
{
return basic_string_char_insert_iter_ch(this, ret, where, 0);
}
/* ?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 */
/* ?rend@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$reverse_iterator@Vconst_iterator@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@XZ */
DEFINE_THISCALL_WRAPPER(basic_string_char_begin, 8)
basic_string_char_iterator* __thiscall basic_string_char_begin(
basic_string_char *this, basic_string_char_iterator *ret)
{
ret->pos = basic_string_char_ptr(this);
return ret;
}
/* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE?AViterator@12@XZ */
/* ?end@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AVconst_iterator@12@XZ */
/* ?rbegin@?$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 */
/* ?rbegin@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$reverse_iterator@Vconst_iterator@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@XZ */
DEFINE_THISCALL_WRAPPER(basic_string_char_end, 8)
basic_string_char_iterator* __thiscall basic_string_char_end(
basic_string_char *this, basic_string_char_iterator *ret)
{
ret->pos = basic_string_char_ptr(this)+this->size;
return ret;
}
/* ?_Pdif@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@KAIVconst_iterator@12@0@Z */
/* ?_Pdif@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@KAIVconst_iterator@12@0@Z */
MSVCP_size_t __cdecl basic_string_wchar__Pdif(basic_string_wchar_iterator i1, basic_string_wchar_iterator i2)
{
TRACE("(%p %p)\n", i1.pos, i2.pos);
return !i1.pos ? 0 : i1.pos-i2.pos;
}
/* ?erase@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE?AViterator@12@V312@0@Z */
/* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AViterator@12@V312@0@Z */
DEFINE_THISCALL_WRAPPER(basic_string_wchar_erase_iter_range, 16)
basic_string_wchar_iterator* __thiscall basic_string_wchar_erase_iter_range(basic_string_wchar *this,
basic_string_wchar_iterator *ret, basic_string_wchar_iterator beg, basic_string_wchar_iterator end)
{
MSVCP_size_t off;
ret->pos = basic_string_wchar_ptr(this);
off = basic_string_wchar__Pdif(beg, *ret);
MSVCP_basic_string_wchar_erase(this, off, basic_string_wchar__Pdif(end, beg));
ret->pos = basic_string_wchar_ptr(this)+off;
return ret;
}
/* ?erase@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE?AViterator@12@V312@@Z */
/* ?erase@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AViterator@12@V312@@Z */
DEFINE_THISCALL_WRAPPER(basic_string_wchar_erase_iter, 12)
basic_string_wchar_iterator* __thiscall basic_string_wchar_erase_iter(basic_string_wchar *this,
basic_string_wchar_iterator *ret, basic_string_wchar_iterator pos)
{
MSVCP_size_t off;
ret->pos = basic_string_wchar_ptr(this);
off = basic_string_wchar__Pdif(pos, *ret);
MSVCP_basic_string_wchar_erase(this, off, 1);
ret->pos = basic_string_wchar_ptr(this)+off;
return ret;
}
/* ?assign@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@Vconst_iterator@12@0@Z */
/* ?assign@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@Vconst_iterator@12@0@Z */
DEFINE_THISCALL_WRAPPER(basic_string_wchar_assign_iter, 12)
basic_string_wchar* __thiscall basic_string_wchar_assign_iter(basic_string_wchar *this,
basic_string_wchar_iterator beg, basic_string_wchar_iterator end)
{
return MSVCP_basic_string_wchar_assign_ptr_ptr(this, beg.pos, end.pos);
}
/* ??0?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@Vconst_iterator@01@0@Z */
/* ??0?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@Vconst_iterator@01@0@Z */
DEFINE_THISCALL_WRAPPER(basic_string_wchar_ctor_iter, 12)
basic_string_wchar* __thiscall basic_string_wchar_ctor_iter(basic_string_wchar *this,
basic_string_wchar_iterator beg, basic_string_wchar_iterator end)
{
return MSVCP_basic_string_wchar_ctor_cstr_len(this, beg.pos, end.pos-beg.pos);
}
/* ?append@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@Vconst_iterator@12@0@Z */
/* ?append@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@Vconst_iterator@12@0@Z */
DEFINE_THISCALL_WRAPPER(basic_string_wchar_append_iter, 12)
basic_string_wchar* __thiscall basic_string_wchar_append_iter(basic_string_wchar *this,
basic_string_wchar_iterator beg, basic_string_wchar_iterator end)
{
return basic_string_wchar_replace_cstr_len(this, this->size, 0, beg.pos, end.pos-beg.pos);
}
/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@Viterator@12@0Vconst_iterator@12@1@Z */
/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@Viterator@12@0Vconst_iterator@12@1@Z */
DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_iter, 20)
basic_string_wchar* __thiscall basic_string_wchar_replace_iter_iter(basic_string_wchar *this,
basic_string_wchar_iterator beg, basic_string_wchar_iterator end,
basic_string_wchar_iterator rbeg, basic_string_wchar_iterator rend)
{
return basic_string_wchar_replace_cstr_len(this, beg.pos-basic_string_wchar_ptr(this),
end.pos-beg.pos, rbeg.pos, rend.pos-rbeg.pos);
}
/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@Viterator@12@0ABV12@@Z */
/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@Viterator@12@0ABV12@@Z */
DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_bstr, 16)
basic_string_wchar* __thiscall basic_string_wchar_replace_iter_bstr(basic_string_wchar *this,
basic_string_wchar_iterator beg, basic_string_wchar_iterator end, basic_string_wchar *str)
{
return basic_string_wchar_replace_cstr_len(this, beg.pos-basic_string_wchar_ptr(this),
end.pos-beg.pos, basic_string_wchar_ptr(str), str->size);
}
/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@Viterator@12@0IG@Z */
/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@Viterator@12@0I_W@Z */
DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_ch, 20)
basic_string_wchar* __thiscall basic_string_wchar_replace_iter_ch(basic_string_wchar *this,
basic_string_wchar_iterator beg, basic_string_wchar_iterator end, MSVCP_size_t count, wchar_t ch)
{
/* TODO: add more efficient implementation */
MSVCP_size_t off = beg.pos-basic_string_wchar_ptr(this);
basic_string_wchar_replace_cstr_len(this, off, end.pos-beg.pos, NULL, 0);
while(count--)
basic_string_wchar_replace_cstr_len(this, off, 0, &ch, 1);
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)
{
basic_string_wchar_iterator begin = { basic_string_wchar_ptr(this) };
return basic_string_wchar_replace_cstr_len(this, basic_string_wchar__Pdif(beg, begin),
basic_string_wchar__Pdif(end, beg), res_beg, res_end-res_beg);
}
/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@Viterator@12@0PBG1@Z */
/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@Viterator@12@0PB_W1@Z */
DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_beg_end, 20)
basic_string_wchar* __thiscall basic_string_wchar_replace_iter_beg_end(basic_string_wchar *this,
basic_string_wchar_iterator beg, basic_string_wchar_iterator end,
const wchar_t *rbeg, const wchar_t *rend)
{
return basic_string_wchar_replace_cstr_len(this, beg.pos-basic_string_wchar_ptr(this),
end.pos-beg.pos, rbeg, rend-rbeg);
}
/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@Viterator@12@0PBG@Z */
/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@Viterator@12@0PB_W@Z */
DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_cstr, 16)
basic_string_wchar* __thiscall basic_string_wchar_replace_iter_cstr(basic_string_wchar *this,
basic_string_wchar_iterator beg, basic_string_wchar_iterator end, const wchar_t *str)
{
return basic_string_wchar_replace_cstr_len(this, beg.pos-basic_string_wchar_ptr(this),
end.pos-beg.pos, str, wcslen(str));
}
/* ?replace@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAV12@Viterator@12@0PBGI@Z */
/* ?replace@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEAAV12@Viterator@12@0PB_WI@Z */
DEFINE_THISCALL_WRAPPER(basic_string_wchar_replace_iter_cstr_len, 20)
basic_string_wchar* __thiscall basic_string_wchar_replace_iter_cstr_len(basic_string_wchar *this,
basic_string_wchar_iterator beg, basic_string_wchar_iterator end,
const wchar_t *str, MSVCP_size_t len)
{
return basic_string_wchar_replace_cstr_len(this, beg.pos-basic_string_wchar_ptr(this),
end.pos-beg.pos, str, len);
}
/* ?insert@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXViterator@12@I_W@Z */
/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXViterator@12@IG@Z */
DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_chn, 16)
void __thiscall basic_string_wchar_insert_iter_chn(basic_string_wchar *this,
basic_string_wchar_iterator where, MSVCP_size_t count, wchar_t ch)
{
basic_string_wchar_iterator iter = { basic_string_wchar_ptr(this) };
MSVCP_size_t off = 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?AViterator@12@V312@_W@Z */
/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AViterator@12@V312@G@Z */
DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_ch, 16)
basic_string_wchar_iterator* __thiscall basic_string_wchar_insert_iter_ch(basic_string_wchar *this,
basic_string_wchar_iterator *ret, basic_string_wchar_iterator where, wchar_t ch)
{
MSVCP_size_t off;
ret->pos = basic_string_wchar_ptr(this);
off = 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?AViterator@12@V312@@Z */
/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AViterator@12@V312@@Z */
DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_null, 12)
basic_string_wchar_iterator* __thiscall basic_string_wchar_insert_iter_null(basic_string_wchar *this,
basic_string_wchar_iterator *ret, basic_string_wchar_iterator 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@@QAEXViterator@12@PB_W1@Z */
/* ?insert@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXViterator@12@PBG1@Z */
DEFINE_THISCALL_WRAPPER(basic_string_wchar_insert_iter_ptr_ptr, 16)
void __thiscall basic_string_wchar_insert_iter_ptr_ptr(basic_string_wchar *this,
basic_string_wchar_iterator where, const wchar_t *beg, const wchar_t *end)
{
basic_string_wchar_replace_iter_ptr_ptr(this, where, where, beg, end);
}
/* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AViterator@12@XZ */
/* ?begin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AVconst_iterator@12@XZ */
/* ?begin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE?AViterator@12@XZ */
/* ?begin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AVconst_iterator@12@XZ */
/* ?rend@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$reverse_iterator@Viterator@?$basic_string@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@Vconst_iterator@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@2@XZ */
/* ?rend@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE?AV?$reverse_iterator@Viterator@?$basic_string@_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@Vconst_iterator@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ */
DEFINE_THISCALL_WRAPPER(basic_string_wchar_begin, 8)
basic_string_wchar_iterator* __thiscall basic_string_wchar_begin(
basic_string_wchar *this, basic_string_wchar_iterator *ret)
{
ret->pos = basic_string_wchar_ptr(this);
return ret;
}
/* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AViterator@12@XZ */
/* ?end@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AVconst_iterator@12@XZ */
/* ?end@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE?AViterator@12@XZ */
/* ?end@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AVconst_iterator@12@XZ */
/* ?rbegin@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE?AV?$reverse_iterator@Viterator@?$basic_string@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@Vconst_iterator@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@2@XZ */
/* ?rbegin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE?AV?$reverse_iterator@Viterator@?$basic_string@_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@Vconst_iterator@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ */
DEFINE_THISCALL_WRAPPER(basic_string_wchar_end, 8)
basic_string_wchar_iterator* __thiscall basic_string_wchar_end(
basic_string_wchar *this, basic_string_wchar_iterator *ret)
{
ret->pos = basic_string_wchar_ptr(this)+this->size;
return ret;
}
#endif /* _MSVCP_VER < 80 */