Piotr Caban : msvcp90: Added basic_string<char>::compare implementation.
Alexandre Julliard
julliard at winehq.org
Thu Nov 25 11:18:52 CST 2010
Module: wine
Branch: master
Commit: b09125ad4e538ed296f7e61451ff68f8b53e4058
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b09125ad4e538ed296f7e61451ff68f8b53e4058
Author: Piotr Caban <piotr at codeweavers.com>
Date: Wed Nov 24 19:59:16 2010 +0100
msvcp90: Added basic_string<char>::compare implementation.
---
dlls/msvcp90/msvcp90.spec | 24 ++++++------
dlls/msvcp90/string.c | 90 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 102 insertions(+), 12 deletions(-)
diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec
index 4162234..c4defd2 100644
--- a/dlls/msvcp90/msvcp90.spec
+++ b/dlls/msvcp90/msvcp90.spec
@@ -3114,18 +3114,18 @@
@ stub -arch=win64 ?close@?$messages at G@std@@QEBAXH at Z
@ stub -arch=win32 ?close@?$messages at _W@std@@QBEXH at Z
@ stub -arch=win64 ?close@?$messages at _W@std@@QEBAXH at Z
-@ stub -arch=win32 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEHABV12@@Z
-@ stub -arch=win64 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAHAEBV12@@Z
-@ stub -arch=win32 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEHIIABV12@@Z
-@ stub -arch=win64 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAHPEBD at Z
-@ stub -arch=win32 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEHIIABV12 at II@Z
-@ stub -arch=win64 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAH_K0AEBV12 at 00@Z
-@ stub -arch=win32 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEHIIPBD at Z
-@ stub -arch=win64 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAH_K0AEBV12@@Z
-@ stub -arch=win32 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEHIIPBDI at Z
-@ stub -arch=win64 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAH_K0PEBD0 at Z
-@ stub -arch=win32 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEHPBD at Z
-@ stub -arch=win64 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAH_K0PEBD at Z
+@ thiscall -arch=win32 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEHABV12@@Z(ptr ptr) MSVCP_basic_string_char_compare
+@ cdecl -arch=win64 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAHAEBV12@@Z(ptr ptr) MSVCP_basic_string_char_compare
+@ thiscall -arch=win32 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEHIIABV12@@Z(ptr long long ptr) MSVCP_basic_string_char_compare_substr
+@ cdecl -arch=win64 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAHPEBD at Z(ptr ptr) MSVCP_basic_string_char_compare_cstr
+@ thiscall -arch=win32 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEHIIABV12 at II@Z(ptr long long ptr long long) MSVCP_basic_string_char_compare_substr_substr
+@ cdecl -arch=win64 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAH_K0AEBV12 at 00@Z(ptr long long ptr long long) MSVCP_basic_string_char_compare_substr_substr
+@ thiscall -arch=win32 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEHIIPBD at Z(ptr long long ptr) MSVCP_basic_string_char_compare_substr_cstr
+@ cdecl -arch=win64 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAH_K0AEBV12@@Z(ptr long long ptr) MSVCP_basic_string_char_compare_substr
+@ thiscall -arch=win32 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEHIIPBDI at Z(ptr long long ptr long) MSVCP_basic_string_char_compare_substr_cstr_len
+@ cdecl -arch=win64 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAH_K0PEBD0 at Z(ptr long long ptr long) MSVCP_basic_string_char_compare_substr_cstr_len
+@ thiscall -arch=win32 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEHPBD at Z(ptr ptr) MSVCP_basic_string_char_compare_cstr
+@ cdecl -arch=win64 ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAH_K0PEBD at Z(ptr long long ptr) MSVCP_basic_string_char_compare_substr_cstr
@ stub -arch=win32 ?compare@?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@QBEHABV12@@Z
@ stub -arch=win64 ?compare@?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@QEBAHAEBV12@@Z
@ stub -arch=win32 ?compare@?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@QBEHIIABV12@@Z
diff --git a/dlls/msvcp90/string.c b/dlls/msvcp90/string.c
index 38e6366..49751fe 100644
--- a/dlls/msvcp90/string.c
+++ b/dlls/msvcp90/string.c
@@ -802,6 +802,96 @@ basic_string_char* __thiscall MSVCP_basic_string_char_append(
0, MSVCP_basic_string_char_npos);
}
+/* ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEHIIPBDI at Z */
+/* ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAH_K0PEBD0 at Z */
+DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_cstr_len, 20)
+int __thiscall MSVCP_basic_string_char_compare_substr_cstr_len(
+ basic_string_char *this, size_t pos, size_t num,
+ const char *str, size_t count)
+{
+ int ans;
+
+ TRACE("%p %lu %lu %s %lu\n", this, (unsigned long)pos,
+ (unsigned long)num, str, (unsigned long)count);
+
+ if(this->size < pos)
+ MSVCP__String_base_Xran();
+
+ if(pos+num > this->size)
+ num = this->size-pos;
+
+ ans = MSVCP_char_traits_char_compare(basic_string_char_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 at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEHIIPBD at Z */
+/* ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAH_K0PEBD at Z */
+DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_cstr, 16)
+int __thiscall MSVCP_basic_string_char_compare_substr_cstr(basic_string_char *this,
+ size_t pos, 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 at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEHPBD at Z */
+/* ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAHPEBD at Z */
+DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_cstr, 8)
+int __thiscall MSVCP_basic_string_char_compare_cstr(
+ 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 at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEHIIABV12 at II@Z */
+/* ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAH_K0AEBV12 at 00@Z */
+DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr_substr, 24)
+int __thiscall MSVCP_basic_string_char_compare_substr_substr(
+ basic_string_char *this, size_t pos, size_t num,
+ basic_string_char *compare, size_t off, size_t count)
+{
+ TRACE("%p %lu %lu %p %lu %lu\n", this, (unsigned long)pos, (unsigned long)num,
+ compare, (unsigned long)off, (unsigned long)count);
+
+ if(compare->size < off)
+ MSVCP__String_base_Xran();
+
+ if(off+count > compare->size)
+ count = compare->size-off;
+
+ return MSVCP_basic_string_char_compare_substr_cstr_len(this, pos, num,
+ basic_string_char_ptr(compare)+off, count);
+}
+
+/* ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEHIIABV12@@Z */
+/* ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAH_K0AEBV12@@Z */
+DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare_substr, 16)
+int __thiscall MSVCP_basic_string_char_compare_substr(
+ basic_string_char *this, size_t pos, size_t num,
+ basic_string_char *compare)
+{
+ return MSVCP_basic_string_char_compare_substr_cstr_len(this, pos, num,
+ basic_string_char_ptr(compare), compare->size);
+}
+
+/* ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEHABV12@@Z */
+/* ?compare@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAHAEBV12@@Z */
+DEFINE_THISCALL_WRAPPER(MSVCP_basic_string_char_compare, 8)
+int __thiscall MSVCP_basic_string_char_compare(
+ basic_string_char *this, basic_string_char *compare)
+{
+ return MSVCP_basic_string_char_compare_substr_cstr_len(this, 0, this->size,
+ basic_string_char_ptr(compare), compare->size);
+}
/* basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t>> */
/* ?npos@?$basic_string at _WU?$char_traits at _W@std@@V?$allocator at _W@2@@std@@2IB */
More information about the wine-cvs
mailing list