Piotr Caban : msvcp100: Add basic_ios::swap implementation.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Jul 30 17:21:36 CDT 2014


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Wed Jul 30 15:54:44 2014 -0500

msvcp100: Add basic_ios::swap implementation.

---

 dlls/msvcp100/msvcp100.spec | 12 ++++++------
 dlls/msvcp110/msvcp110.spec | 18 +++++++++---------
 dlls/msvcp90/ios.c          | 43 +++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 58 insertions(+), 15 deletions(-)

diff --git a/dlls/msvcp100/msvcp100.spec b/dlls/msvcp100/msvcp100.spec
index 3d0db763..b593c06 100644
--- a/dlls/msvcp100/msvcp100.spec
+++ b/dlls/msvcp100/msvcp100.spec
@@ -2686,12 +2686,12 @@
 @ cdecl -arch=win64 ?sungetc@?$basic_streambuf at GU?$char_traits at G@std@@@std@@QEAAGXZ(ptr) basic_streambuf_wchar_sungetc
 @ thiscall -arch=win32 ?sungetc@?$basic_streambuf at _WU?$char_traits at _W@std@@@std@@QAEGXZ(ptr) basic_streambuf_wchar_sungetc
 @ cdecl -arch=win64 ?sungetc@?$basic_streambuf at _WU?$char_traits at _W@std@@@std@@QEAAGXZ(ptr) basic_streambuf_wchar_sungetc
-@ stub -arch=win32 ?swap@?$basic_ios at DU?$char_traits at D@std@@@std@@QAEXAAV12@@Z
-@ stub -arch=win64 ?swap@?$basic_ios at DU?$char_traits at D@std@@@std@@QEAAXAEAV12@@Z
-@ stub -arch=win32 ?swap@?$basic_ios at GU?$char_traits at G@std@@@std@@QAEXAAV12@@Z
-@ stub -arch=win64 ?swap@?$basic_ios at GU?$char_traits at G@std@@@std@@QEAAXAEAV12@@Z
-@ stub -arch=win32 ?swap@?$basic_ios at _WU?$char_traits at _W@std@@@std@@QAEXAAV12@@Z
-@ stub -arch=win64 ?swap@?$basic_ios at _WU?$char_traits at _W@std@@@std@@QEAAXAEAV12@@Z
+@ thiscall -arch=win32 ?swap@?$basic_ios at DU?$char_traits at D@std@@@std@@QAEXAAV12@@Z(ptr ptr) basic_ios_char_swap
+@ cdecl -arch=win64 ?swap@?$basic_ios at DU?$char_traits at D@std@@@std@@QEAAXAEAV12@@Z(ptr ptr) basic_ios_char_swap
+@ thiscall -arch=win32 ?swap@?$basic_ios at GU?$char_traits at G@std@@@std@@QAEXAAV12@@Z(ptr ptr) basic_ios_wchar_swap
+@ cdecl -arch=win64 ?swap@?$basic_ios at GU?$char_traits at G@std@@@std@@QEAAXAEAV12@@Z(ptr ptr) basic_ios_wchar_swap
+@ thiscall -arch=win32 ?swap@?$basic_ios at _WU?$char_traits at _W@std@@@std@@QAEXAAV12@@Z(ptr ptr) basic_ios_wchar_swap
+@ cdecl -arch=win64 ?swap@?$basic_ios at _WU?$char_traits at _W@std@@@std@@QEAAXAEAV12@@Z(ptr ptr) basic_ios_wchar_swap
 @ stub -arch=win32 ?swap@?$basic_iostream at DU?$char_traits at D@std@@@std@@QAEXAAV12@@Z
 @ stub -arch=win64 ?swap@?$basic_iostream at DU?$char_traits at D@std@@@std@@QEAAXAEAV12@@Z
 @ stub -arch=win32 ?swap@?$basic_iostream at GU?$char_traits at G@std@@@std@@QAEXAAV12@@Z
diff --git a/dlls/msvcp110/msvcp110.spec b/dlls/msvcp110/msvcp110.spec
index ecf2db3..0618f48 100644
--- a/dlls/msvcp110/msvcp110.spec
+++ b/dlls/msvcp110/msvcp110.spec
@@ -3461,15 +3461,15 @@
 @ cdecl -arch=arm ?sungetc@?$basic_streambuf at _WU?$char_traits at _W@std@@@std@@QAAGXZ(ptr) basic_streambuf_wchar_sungetc
 @ thiscall -arch=i386 ?sungetc@?$basic_streambuf at _WU?$char_traits at _W@std@@@std@@QAEGXZ(ptr) basic_streambuf_wchar_sungetc
 @ cdecl -arch=win64 ?sungetc@?$basic_streambuf at _WU?$char_traits at _W@std@@@std@@QEAAGXZ(ptr) basic_streambuf_wchar_sungetc
-@ stub -arch=arm ?swap@?$basic_ios at DU?$char_traits at D@std@@@std@@QAAXAAV12@@Z
-@ stub -arch=i386 ?swap@?$basic_ios at DU?$char_traits at D@std@@@std@@QAEXAAV12@@Z
-@ stub -arch=win64 ?swap@?$basic_ios at DU?$char_traits at D@std@@@std@@QEAAXAEAV12@@Z
-@ stub -arch=arm ?swap@?$basic_ios at GU?$char_traits at G@std@@@std@@QAAXAAV12@@Z
-@ stub -arch=i386 ?swap@?$basic_ios at GU?$char_traits at G@std@@@std@@QAEXAAV12@@Z
-@ stub -arch=win64 ?swap@?$basic_ios at GU?$char_traits at G@std@@@std@@QEAAXAEAV12@@Z
-@ stub -arch=arm ?swap@?$basic_ios at _WU?$char_traits at _W@std@@@std@@QAAXAAV12@@Z
-@ stub -arch=i386 ?swap@?$basic_ios at _WU?$char_traits at _W@std@@@std@@QAEXAAV12@@Z
-@ stub -arch=win64 ?swap@?$basic_ios at _WU?$char_traits at _W@std@@@std@@QEAAXAEAV12@@Z
+@ cdecl -arch=arm ?swap@?$basic_ios at DU?$char_traits at D@std@@@std@@QAAXAAV12@@Z(ptr ptr) basic_ios_char_swap
+@ thiscall -arch=i386 ?swap@?$basic_ios at DU?$char_traits at D@std@@@std@@QAEXAAV12@@Z(ptr ptr) basic_ios_char_swap
+@ cdecl -arch=win64 ?swap@?$basic_ios at DU?$char_traits at D@std@@@std@@QEAAXAEAV12@@Z(ptr ptr) basic_ios_char_swap
+@ cdecl -arch=arm ?swap@?$basic_ios at GU?$char_traits at G@std@@@std@@QAAXAAV12@@Z(ptr ptr) basic_ios_wchar_swap
+@ thiscall -arch=i386 ?swap@?$basic_ios at GU?$char_traits at G@std@@@std@@QAEXAAV12@@Z(ptr ptr) basic_ios_wchar_swap
+@ cdecl -arch=win64 ?swap@?$basic_ios at GU?$char_traits at G@std@@@std@@QEAAXAEAV12@@Z(ptr ptr) basic_ios_wchar_swap
+@ cdecl -arch=arm ?swap@?$basic_ios at _WU?$char_traits at _W@std@@@std@@QAAXAAV12@@Z(ptr ptr) basic_ios_wchar_swap
+@ thiscall -arch=i386 ?swap@?$basic_ios at _WU?$char_traits at _W@std@@@std@@QAEXAAV12@@Z(ptr ptr) basic_ios_wchar_swap
+@ cdecl -arch=win64 ?swap@?$basic_ios at _WU?$char_traits at _W@std@@@std@@QEAAXAEAV12@@Z(ptr ptr) basic_ios_wchar_swap
 @ stub -arch=arm ?swap@?$basic_iostream at DU?$char_traits at D@std@@@std@@IAAXAAV12@@Z
 @ stub -arch=i386 ?swap@?$basic_iostream at DU?$char_traits at D@std@@@std@@IAEXAAV12@@Z
 @ stub -arch=win64 ?swap@?$basic_iostream at DU?$char_traits at D@std@@@std@@IEAAXAEAV12@@Z
diff --git a/dlls/msvcp90/ios.c b/dlls/msvcp90/ios.c
index 14b3b25..0ca6566 100644
--- a/dlls/msvcp90/ios.c
+++ b/dlls/msvcp90/ios.c
@@ -5505,6 +5505,26 @@ char __thiscall basic_ios_char_widen(basic_ios_char *this, char ch)
     return ctype_char_widen_ch(ctype_char_use_facet(this->strbuf->loc), ch);
 }
 
+/* ?swap@?$basic_ios at DU?$char_traits at D@std@@@std@@QAEXAAV12@@Z */
+/* ?swap@?$basic_ios at DU?$char_traits at D@std@@@std@@QEAAXAEAV12@@Z */
+DEFINE_THISCALL_WRAPPER(basic_ios_char_swap, 8)
+void __thiscall basic_ios_char_swap(basic_ios_char *this, basic_ios_char *r)
+{
+    void *swap_ptr;
+
+    TRACE("(%p %p)\n", this, r);
+
+    if(this == r)
+        return;
+
+    ios_base_swap(&this->base, &r->base);
+    swap_ptr = this->stream;
+    this->stream = r->stream;
+    r->stream = swap_ptr;
+    this->fillch ^= r->fillch;
+    r->fillch ^= this->fillch;
+    this->fillch ^= r->fillch;
+}
 
 /* ??0?$basic_ios at _WU?$char_traits at _W@std@@@std@@IAE at XZ */
 /* ??0?$basic_ios at _WU?$char_traits at _W@std@@@std@@IEAA at XZ */
@@ -5780,6 +5800,29 @@ wchar_t __thiscall basic_ios_wchar_widen(basic_ios_wchar *this, char ch)
     return ctype_wchar_widen_ch(ctype_wchar_use_facet(this->strbuf->loc), ch);
 }
 
+/* ?swap@?$basic_ios at GU?$char_traits at G@std@@@std@@QAEXAAV12@@Z */
+/* ?swap@?$basic_ios at GU?$char_traits at G@std@@@std@@QEAAXAEAV12@@Z */
+/* ?swap@?$basic_ios at _WU?$char_traits at _W@std@@@std@@QAEXAAV12@@Z */
+/* ?swap@?$basic_ios at _WU?$char_traits at _W@std@@@std@@QEAAXAEAV12@@Z */
+DEFINE_THISCALL_WRAPPER(basic_ios_wchar_swap, 8)
+void __thiscall basic_ios_wchar_swap(basic_ios_wchar *this, basic_ios_wchar *r)
+{
+    void *swap_ptr;
+
+    TRACE("(%p %p)\n", this, r);
+
+    if(this == r)
+        return;
+
+    ios_base_swap(&this->base, &r->base);
+    swap_ptr = this->stream;
+    this->stream = r->stream;
+    r->stream = swap_ptr;
+    this->fillch ^= r->fillch;
+    r->fillch ^= this->fillch;
+    this->fillch ^= r->fillch;
+}
+
 /* 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.




More information about the wine-cvs mailing list