From fe93ebd83071cc27b9bb0238bcbd9dd345b1d8ed Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Wed, 30 Jul 2014 15:55:11 -0500 Subject: [PATCH] msvcp100: Add basic_istream::swap implementation. --- dlls/msvcp100/msvcp100.spec | 12 ++++++------ dlls/msvcp110/msvcp110.spec | 18 +++++++++--------- dlls/msvcp90/ios.c | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 15 deletions(-) diff --git a/dlls/msvcp100/msvcp100.spec b/dlls/msvcp100/msvcp100.spec index b593c06bd4f..64a338942ef 100644 --- a/dlls/msvcp100/msvcp100.spec +++ b/dlls/msvcp100/msvcp100.spec @@ -2698,12 +2698,12 @@ @ stub -arch=win64 ?swap@?$basic_iostream@GU?$char_traits@G@std@@@std@@QEAAXAEAV12@@Z @ stub -arch=win32 ?swap@?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QAEXAAV12@@Z @ stub -arch=win64 ?swap@?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QEAAXAEAV12@@Z -@ stub -arch=win32 ?swap@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXAAV12@@Z -@ stub -arch=win64 ?swap@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXAEAV12@@Z -@ stub -arch=win32 ?swap@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEXAAV12@@Z -@ stub -arch=win64 ?swap@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAXAEAV12@@Z -@ stub -arch=win32 ?swap@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEXAAV12@@Z -@ stub -arch=win64 ?swap@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXAEAV12@@Z +@ thiscall -arch=win32 ?swap@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXAAV12@@Z(ptr ptr) basic_istream_char_swap +@ cdecl -arch=win64 ?swap@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXAEAV12@@Z(ptr ptr) basic_istream_char_swap +@ thiscall -arch=win32 ?swap@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEXAAV12@@Z(ptr ptr) basic_istream_wchar_swap +@ cdecl -arch=win64 ?swap@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAXAEAV12@@Z(ptr ptr) basic_istream_wchar_swap +@ thiscall -arch=win32 ?swap@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEXAAV12@@Z(ptr ptr) basic_istream_wchar_swap +@ cdecl -arch=win64 ?swap@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXAEAV12@@Z(ptr ptr) basic_istream_wchar_swap @ stub -arch=win32 ?swap@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXAAV12@@Z @ stub -arch=win64 ?swap@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXAEAV12@@Z @ stub -arch=win32 ?swap@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXAAV12@@Z diff --git a/dlls/msvcp110/msvcp110.spec b/dlls/msvcp110/msvcp110.spec index 0618f4880f6..67d706a722e 100644 --- a/dlls/msvcp110/msvcp110.spec +++ b/dlls/msvcp110/msvcp110.spec @@ -3479,15 +3479,15 @@ @ stub -arch=arm ?swap@?$basic_iostream@_WU?$char_traits@_W@std@@@std@@IAAXAAV12@@Z @ stub -arch=i386 ?swap@?$basic_iostream@_WU?$char_traits@_W@std@@@std@@IAEXAAV12@@Z @ stub -arch=win64 ?swap@?$basic_iostream@_WU?$char_traits@_W@std@@@std@@IEAAXAEAV12@@Z -@ stub -arch=arm ?swap@?$basic_istream@DU?$char_traits@D@std@@@std@@IAAXAAV12@@Z -@ stub -arch=i386 ?swap@?$basic_istream@DU?$char_traits@D@std@@@std@@IAEXAAV12@@Z -@ stub -arch=win64 ?swap@?$basic_istream@DU?$char_traits@D@std@@@std@@IEAAXAEAV12@@Z -@ stub -arch=arm ?swap@?$basic_istream@GU?$char_traits@G@std@@@std@@IAAXAAV12@@Z -@ stub -arch=i386 ?swap@?$basic_istream@GU?$char_traits@G@std@@@std@@IAEXAAV12@@Z -@ stub -arch=win64 ?swap@?$basic_istream@GU?$char_traits@G@std@@@std@@IEAAXAEAV12@@Z -@ stub -arch=arm ?swap@?$basic_istream@_WU?$char_traits@_W@std@@@std@@IAAXAAV12@@Z -@ stub -arch=i386 ?swap@?$basic_istream@_WU?$char_traits@_W@std@@@std@@IAEXAAV12@@Z -@ stub -arch=win64 ?swap@?$basic_istream@_WU?$char_traits@_W@std@@@std@@IEAAXAEAV12@@Z +@ cdecl -arch=arm ?swap@?$basic_istream@DU?$char_traits@D@std@@@std@@IAAXAAV12@@Z(ptr ptr) basic_istream_char_swap +@ thiscall -arch=i386 ?swap@?$basic_istream@DU?$char_traits@D@std@@@std@@IAEXAAV12@@Z(ptr ptr) basic_istream_char_swap +@ cdecl -arch=win64 ?swap@?$basic_istream@DU?$char_traits@D@std@@@std@@IEAAXAEAV12@@Z(ptr ptr) basic_istream_char_swap +@ cdecl -arch=arm ?swap@?$basic_istream@GU?$char_traits@G@std@@@std@@IAAXAAV12@@Z(ptr ptr) basic_istream_wchar_swap +@ thiscall -arch=i386 ?swap@?$basic_istream@GU?$char_traits@G@std@@@std@@IAEXAAV12@@Z(ptr ptr) basic_istream_wchar_swap +@ cdecl -arch=win64 ?swap@?$basic_istream@GU?$char_traits@G@std@@@std@@IEAAXAEAV12@@Z(ptr ptr) basic_istream_wchar_swap +@ cdecl -arch=arm ?swap@?$basic_istream@_WU?$char_traits@_W@std@@@std@@IAAXAAV12@@Z(ptr ptr) basic_istream_wchar_swap +@ thiscall -arch=i386 ?swap@?$basic_istream@_WU?$char_traits@_W@std@@@std@@IAEXAAV12@@Z(ptr ptr) basic_istream_wchar_swap +@ cdecl -arch=win64 ?swap@?$basic_istream@_WU?$char_traits@_W@std@@@std@@IEAAXAEAV12@@Z(ptr ptr) basic_istream_wchar_swap @ stub -arch=arm ?swap@?$basic_ostream@DU?$char_traits@D@std@@@std@@IAAXAAV12@@Z @ stub -arch=i386 ?swap@?$basic_ostream@DU?$char_traits@D@std@@@std@@IAEXAAV12@@Z @ stub -arch=win64 ?swap@?$basic_ostream@DU?$char_traits@D@std@@@std@@IEAAXAEAV12@@Z diff --git a/dlls/msvcp90/ios.c b/dlls/msvcp90/ios.c index 0ca65666ece..187494bd76d 100644 --- a/dlls/msvcp90/ios.c +++ b/dlls/msvcp90/ios.c @@ -8896,6 +8896,23 @@ basic_istream_char* __thiscall basic_istream_char_read_func_ios_base(basic_istre return this; } +/* ?swap@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXAAV12@@Z */ +/* ?swap@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXAEAV12@@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_char_swap, 8) +void __thiscall basic_istream_char_swap(basic_istream_char *this, basic_istream_char *r) +{ + TRACE("(%p %p)\n", this, r); + + if(this == r) + return; + + basic_ios_char_swap(basic_istream_char_get_basic_ios(this), + basic_istream_char_get_basic_ios(r)); + this->count ^= r->count; + r->count ^= this->count; + this->count ^= r->count; +} + /* Caution: basic_istream uses virtual inheritance. */ static inline basic_ios_wchar* basic_istream_wchar_get_basic_ios(basic_istream_wchar *this) { @@ -10424,6 +10441,25 @@ basic_istream_wchar* __thiscall basic_istream_wchar_read_func_ios_base( return this; } +/* ?swap@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEXAAV12@@Z */ +/* ?swap@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAXAEAV12@@Z */ +/* ?swap@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEXAAV12@@Z */ +/* ?swap@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXAEAV12@@Z */ +DEFINE_THISCALL_WRAPPER(basic_istream_wchar_swap, 8) +void __thiscall basic_istream_wchar_swap(basic_istream_wchar *this, basic_istream_wchar *r) +{ + TRACE("(%p %p)\n", this, r); + + if(this == r) + return; + + basic_ios_wchar_swap(basic_istream_wchar_get_basic_ios(this), + basic_istream_wchar_get_basic_ios(r)); + this->count ^= r->count; + r->count ^= this->count; + this->count ^= r->count; +} + static inline basic_ios_char* basic_iostream_char_to_basic_ios(basic_iostream_char *ptr) { return (basic_ios_char*)((char*)ptr+basic_iostream_char_vbtable1[1]);