Piotr Caban : msvcp90: Added std::ws(basic_istream) implementation.

Alexandre Julliard julliard at winehq.org
Wed Sep 12 13:39:16 CDT 2012


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Wed Sep 12 13:26:50 2012 +0200

msvcp90: Added std::ws(basic_istream) implementation.

---

 dlls/msvcp90/ios.c        |   54 +++++++++++++++++++++++++++++++++++++++++++++
 dlls/msvcp90/msvcp90.spec |   12 +++++-----
 2 files changed, 60 insertions(+), 6 deletions(-)

diff --git a/dlls/msvcp90/ios.c b/dlls/msvcp90/ios.c
index 699ac98..39e9a9f 100644
--- a/dlls/msvcp90/ios.c
+++ b/dlls/msvcp90/ios.c
@@ -7519,6 +7519,32 @@ basic_istream_char* __thiscall basic_istream_char_ignore(basic_istream_char *thi
     return this;
 }
 
+/* ?ws at std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@1 at AAV21@@Z */
+/* ?ws at std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@1 at AEAV21@@Z */
+basic_istream_char* __cdecl ws_basic_istream_char(basic_istream_char *istream)
+{
+    basic_ios_char *base = basic_istream_char_get_basic_ios(istream);
+    int ch = '\n';
+
+    TRACE("(%p)\n", istream);
+
+    if(basic_istream_char_sentry_create(istream, TRUE)) {
+        basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
+        const ctype_char *ctype = ctype_char_use_facet(strbuf->loc);
+
+        for(ch = basic_streambuf_char_sgetc(strbuf); ctype_char_is_ch(ctype, _SPACE, ch);
+                ch = basic_streambuf_char_snextc(strbuf)) {
+            if(ch == EOF)
+                break;
+        }
+    }
+    basic_istream_char_sentry_destroy(istream);
+
+    if(ch == EOF)
+        basic_ios_char_setstate(base, IOSTATE_eofbit);
+    return istream;
+}
+
 /* ?peek@?$basic_istream at DU?$char_traits at D@std@@@std@@QAEHXZ */
 /* ?peek@?$basic_istream at DU?$char_traits at D@std@@@std@@QEAAHXZ */
 DEFINE_THISCALL_WRAPPER(basic_istream_char_peek, 4)
@@ -8750,6 +8776,34 @@ basic_istream_wchar* __thiscall basic_istream_wchar_ignore(basic_istream_wchar *
     return this;
 }
 
+/* ?ws at std@@YAAAV?$basic_istream at _WU?$char_traits at _W@std@@@1 at AAV21@@Z */
+/* ?ws at std@@YAAEAV?$basic_istream at _WU?$char_traits at _W@std@@@1 at AEAV21@@Z */
+/* ?ws at std@@YAAAV?$basic_istream at GU?$char_traits at G@std@@@1 at AAV21@@Z */
+/* ?ws at std@@YAAEAV?$basic_istream at GU?$char_traits at G@std@@@1 at AEAV21@@Z */
+basic_istream_wchar* __cdecl ws_basic_istream_wchar(basic_istream_wchar *istream)
+{
+    basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istream);
+    unsigned short ch = '\n';
+
+    TRACE("(%p)\n", istream);
+
+    if(basic_istream_wchar_sentry_create(istream, TRUE)) {
+        basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
+        const ctype_wchar *ctype = ctype_wchar_use_facet(strbuf->loc);
+
+        for(ch = basic_streambuf_wchar_sgetc(strbuf); ctype_wchar_is_ch(ctype, _SPACE, ch);
+                ch = basic_streambuf_wchar_snextc(strbuf)) {
+            if(ch == WEOF)
+                break;
+        }
+    }
+    basic_istream_wchar_sentry_destroy(istream);
+
+    if(ch == WEOF)
+        basic_ios_wchar_setstate(base, IOSTATE_eofbit);
+    return istream;
+}
+
 /* ?peek@?$basic_istream at _WU?$char_traits at _W@std@@@std@@QAEGXZ */
 /* ?peek@?$basic_istream at _WU?$char_traits at _W@std@@@std@@QEAAGXZ */
 /* ?peek@?$basic_istream at GU?$char_traits at G@std@@@std@@QAEGXZ */
diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec
index a14225a..b70fd27 100644
--- a/dlls/msvcp90/msvcp90.spec
+++ b/dlls/msvcp90/msvcp90.spec
@@ -5711,12 +5711,12 @@
 @ cdecl -arch=win64 ?write@?$basic_ostream at GU?$char_traits at G@std@@@std@@QEAAAEAV12 at PEBG_J@Z(ptr wstr long) basic_ostream_wchar_write
 @ thiscall -arch=win32 ?write@?$basic_ostream at _WU?$char_traits at _W@std@@@std@@QAEAAV12 at PB_WH@Z(ptr wstr long) basic_ostream_wchar_write
 @ cdecl -arch=win64 ?write@?$basic_ostream at _WU?$char_traits at _W@std@@@std@@QEAAAEAV12 at PEB_W_J@Z(ptr wstr long) basic_ostream_wchar_write
-@ stub -arch=win32 ?ws at std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@1 at AAV21@@Z
-@ stub -arch=win64 ?ws at std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@1 at AEAV21@@Z
-@ stub -arch=win32 ?ws at std@@YAAAV?$basic_istream at GU?$char_traits at G@std@@@1 at AAV21@@Z
-@ stub -arch=win64 ?ws at std@@YAAEAV?$basic_istream at GU?$char_traits at G@std@@@1 at AEAV21@@Z
-@ stub -arch=win32 ?ws at std@@YAAAV?$basic_istream at _WU?$char_traits at _W@std@@@1 at AAV21@@Z
-@ stub -arch=win64 ?ws at std@@YAAEAV?$basic_istream at _WU?$char_traits at _W@std@@@1 at AEAV21@@Z
+@ cdecl -arch=win32 ?ws at std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@1 at AAV21@@Z(ptr) ws_basic_istream_char
+@ cdecl -arch=win64 ?ws at std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@1 at AEAV21@@Z(ptr) ws_basic_istream_char
+@ cdecl -arch=win32 ?ws at std@@YAAAV?$basic_istream at GU?$char_traits at G@std@@@1 at AAV21@@Z(ptr) ws_basic_istream_wchar
+@ cdecl -arch=win64 ?ws at std@@YAAEAV?$basic_istream at GU?$char_traits at G@std@@@1 at AEAV21@@Z(ptr) ws_basic_istream_wchar
+@ cdecl -arch=win32 ?ws at std@@YAAAV?$basic_istream at _WU?$char_traits at _W@std@@@1 at AAV21@@Z(ptr) ws_basic_istream_wchar
+@ cdecl -arch=win64 ?ws at std@@YAAEAV?$basic_istream at _WU?$char_traits at _W@std@@@1 at AEAV21@@Z(ptr) ws_basic_istream_wchar
 @ cdecl ?xalloc at ios_base@std@@SAHXZ() ios_base_xalloc
 @ thiscall -arch=win32 ?xsgetn@?$basic_streambuf at DU?$char_traits at D@std@@@std@@MAEHPADH at Z(ptr ptr long) basic_streambuf_char_xsgetn
 @ cdecl -arch=win64 ?xsgetn@?$basic_streambuf at DU?$char_traits at D@std@@@std@@MEAA_JPEAD_J at Z(ptr ptr long) basic_streambuf_char_xsgetn




More information about the wine-cvs mailing list