Vincas Miliūnas : msvcp90: Added basic_string<char>:: swap implementation.

Alexandre Julliard julliard at winehq.org
Wed Nov 17 10:38:02 CST 2010


Module: wine
Branch: master
Commit: 676d0d41f5662538478fa80312dde49bf923e3ef
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=676d0d41f5662538478fa80312dde49bf923e3ef

Author: Vincas Miliūnas <vincas.miliunas at gmail.com>
Date:   Tue Nov 16 20:58:15 2010 +0200

msvcp90: Added basic_string<char>::swap implementation.

---

 dlls/msvcp80/msvcp80.spec |    4 ++--
 dlls/msvcp90/msvcp90.spec |    4 ++--
 dlls/msvcp90/string.c     |   22 ++++++++++++++++++++++
 3 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/dlls/msvcp80/msvcp80.spec b/dlls/msvcp80/msvcp80.spec
index f05b53d..ec1458f 100644
--- a/dlls/msvcp80/msvcp80.spec
+++ b/dlls/msvcp80/msvcp80.spec
@@ -5477,8 +5477,8 @@
 @ stub -arch=win64 ?sungetc@?$basic_streambuf at GU?$char_traits at G@std@@@std@@QEAAGXZ
 @ stub -arch=win32 ?sungetc@?$basic_streambuf at _WU?$char_traits at _W@std@@@std@@QAEGXZ
 @ stub -arch=win64 ?sungetc@?$basic_streambuf at _WU?$char_traits at _W@std@@@std@@QEAAGXZ
-@ stub -arch=win32 ?swap@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QAEXAAV12@@Z
-@ stub -arch=win64 ?swap@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEAAXAEAV12@@Z
+@ thiscall -arch=win32 ?swap@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QAEXAAV12@@Z(ptr ptr) msvcp90.?swap@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QAEXAAV12@@Z
+@ cdecl -arch=win64 ?swap@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEAAXAEAV12@@Z (ptr ptr) msvcp90.?swap@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEAAXAEAV12@@Z
 @ stub -arch=win32 ?swap@?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@QAEXAAV12@@Z
 @ stub -arch=win64 ?swap@?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@QEAAXAEAV12@@Z
 @ stub -arch=win32 ?swap@?$basic_string at _WU?$char_traits at _W@std@@V?$allocator at _W@2@@std@@QAEXAAV12@@Z
diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec
index 9ed37ec..2520ab3 100644
--- a/dlls/msvcp90/msvcp90.spec
+++ b/dlls/msvcp90/msvcp90.spec
@@ -5508,8 +5508,8 @@
 @ stub -arch=win64 ?sungetc@?$basic_streambuf at GU?$char_traits at G@std@@@std@@QEAAGXZ
 @ stub -arch=win32 ?sungetc@?$basic_streambuf at _WU?$char_traits at _W@std@@@std@@QAEGXZ
 @ stub -arch=win64 ?sungetc@?$basic_streambuf at _WU?$char_traits at _W@std@@@std@@QEAAGXZ
-@ stub -arch=win32 ?swap@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QAEXAAV12@@Z
-@ stub -arch=win64 ?swap@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEAAXAEAV12@@Z
+@ thiscall -arch=win32 ?swap@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QAEXAAV12@@Z(ptr ptr) MSVCP_basic_string_char_swap
+@ cdecl -arch=win64 ?swap@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEAAXAEAV12@@Z(ptr ptr) MSVCP_basic_string_char_swap
 @ stub -arch=win32 ?swap@?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@QAEXAAV12@@Z
 @ stub -arch=win64 ?swap@?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@QEAAXAEAV12@@Z
 @ stub -arch=win32 ?swap@?$basic_string at _WU?$char_traits at _W@std@@V?$allocator at _W@2@@std@@QAEXAAV12@@Z
diff --git a/dlls/msvcp90/string.c b/dlls/msvcp90/string.c
index cc4ff1b..68eb921 100644
--- a/dlls/msvcp90/string.c
+++ b/dlls/msvcp90/string.c
@@ -1017,3 +1017,25 @@ size_t __thiscall MSVCP_basic_string_wchar_length(basic_string_wchar *this)
     TRACE("%p\n", this);
     return this->size;
 }
+
+/* ?swap@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QAEXAAV12@@Z */
+/* ?swap@?$basic_string at DU?$char_traits at D@std@@V?$allocator at 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)
+{
+    if(this != str) {
+        char tmp[sizeof(this->data)];
+        const size_t size = this->size;
+        const 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;
+    }
+}




More information about the wine-cvs mailing list