Piotr Caban : msvcp90: Added operator>>(basic_istream<char>, basic_string< char>) implementation.

Alexandre Julliard julliard at winehq.org
Thu Jun 14 15:31:30 CDT 2012


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Thu Jun 14 15:37:36 2012 +0200

msvcp90: Added operator>>(basic_istream<char>, basic_string<char>) implementation.

---

 dlls/msvcp90/ios.c        |   41 ++++++++++++++++++++++++++++++++++++-----
 dlls/msvcp90/msvcp90.spec |   12 ++++++------
 2 files changed, 42 insertions(+), 11 deletions(-)

diff --git a/dlls/msvcp90/ios.c b/dlls/msvcp90/ios.c
index 7102639..9cb3a59 100644
--- a/dlls/msvcp90/ios.c
+++ b/dlls/msvcp90/ios.c
@@ -4705,11 +4705,11 @@ basic_istream_char* __thiscall basic_istream_char_read_bool(basic_istream_char *
 
 /* ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@0 at AAV10@AAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0 at D@Z */
 /* ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@AEAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0 at D@Z */
-basic_istream_char* __cdecl basic_istream_char_getline_str_delim(
+basic_istream_char* __cdecl basic_istream_char_getline_bstr_delim(
         basic_istream_char *istream, basic_string_char *str, char delim)
 {
     IOSB_iostate state = IOSTATE_failbit;
-    int c;
+    int c = delim;
 
     TRACE("(%p %p %c)\n", istream, str, delim);
 
@@ -4724,16 +4724,47 @@ basic_istream_char* __cdecl basic_istream_char_getline_str_delim(
     }
     basic_istream_char_sentry_destroy(istream);
 
-    basic_ios_char_setstate(basic_istream_char_get_basic_ios(istream), state);
+    basic_ios_char_setstate(basic_istream_char_get_basic_ios(istream),
+        state | (c==EOF ? IOSTATE_eofbit : IOSTATE_goodbit));
     return istream;
 }
 
 /* ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@0 at AAV10@AAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0@@Z */
 /* ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@AEAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0@@Z */
-basic_istream_char* __cdecl basic_istream_char_getline_str(
+basic_istream_char* __cdecl basic_istream_char_getline_bstr(
         basic_istream_char *istream, basic_string_char *str)
 {
-    return basic_istream_char_getline_str_delim(istream, str, '\n');
+    return basic_istream_char_getline_bstr_delim(istream, str, '\n');
+}
+
+/* ??$?5DU?$char_traits at D@std@@V?$allocator at D@1@@std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@0 at AAV10@AAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0@@Z */
+/* ??$?5DU?$char_traits at D@std@@V?$allocator at D@1@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@AEAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0@@Z */
+basic_istream_char* __cdecl basic_istream_char_get_bstr(
+        basic_istream_char *istream, basic_string_char *str)
+{
+    IOSB_iostate state = IOSTATE_failbit;
+    int c = '\n';
+
+    TRACE("(%p %p)\n", istream, str);
+
+    if(basic_istream_char_sentry_create(istream, FALSE)) {
+        basic_ios_char *base = basic_istream_char_get_basic_ios(istream);
+        const ctype_char *ctype = ctype_char_use_facet(base->strbuf->loc);
+
+        MSVCP_basic_string_char_clear(str);
+
+        for(c = basic_streambuf_char_sgetc(basic_ios_char_rdbuf_get(base));
+                c!=EOF && !ctype_char_is_ch(ctype, _SPACE|_BLANK, c);
+                c = basic_streambuf_char_snextc(basic_ios_char_rdbuf_get(base))) {
+            state = IOSTATE_goodbit;
+            MSVCP_basic_string_char_append_ch(str, c);
+        }
+    }
+    basic_istream_char_sentry_destroy(istream);
+
+    basic_ios_char_setstate(basic_istream_char_get_basic_ios(istream),
+        state | (c==EOF ? IOSTATE_eofbit : IOSTATE_goodbit));
+    return istream;
 }
 
 /* ??0?$basic_iostream at DU?$char_traits at D@std@@@std@@QAE at PAV?$basic_streambuf at DU?$char_traits at D@std@@@1@@Z */
diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec
index f4c3783..5c2477a 100644
--- a/dlls/msvcp90/msvcp90.spec
+++ b/dlls/msvcp90/msvcp90.spec
@@ -2,8 +2,8 @@
 @ stub -arch=win64 ??$?5DU?$char_traits at D@std@@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@AEAD at Z
 @ stub -arch=win32 ??$?5DU?$char_traits at D@std@@@std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@0 at AAV10@PAD at Z
 @ stub -arch=win64 ??$?5DU?$char_traits at D@std@@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@PEAD at Z
-@ stub -arch=win32 ??$?5DU?$char_traits at D@std@@V?$allocator at D@1@@std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@0 at AAV10@AAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0@@Z
-@ stub -arch=win64 ??$?5DU?$char_traits at D@std@@V?$allocator at D@1@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@AEAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0@@Z
+@ cdecl -arch=win32 ??$?5DU?$char_traits at D@std@@V?$allocator at D@1@@std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@0 at AAV10@AAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0@@Z(ptr ptr) basic_istream_char_get_bstr
+@ cdecl -arch=win64 ??$?5DU?$char_traits at D@std@@V?$allocator at D@1@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@AEAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0@@Z(ptr ptr) basic_istream_char_get_bstr
 @ stub -arch=win32 ??$?5GU?$char_traits at G@std@@@std@@YAAAV?$basic_istream at GU?$char_traits at G@std@@@0 at AAV10@AAG at Z
 @ stub -arch=win64 ??$?5GU?$char_traits at G@std@@@std@@YAAEAV?$basic_istream at GU?$char_traits at G@std@@@0 at AEAV10@AEAG at Z
 @ stub -arch=win32 ??$?5GU?$char_traits at G@std@@@std@@YAAAV?$basic_istream at GU?$char_traits at G@std@@@0 at AAV10@PAG at Z
@@ -386,10 +386,10 @@
 @ stub -arch=win64 ??$exp at N@std@@YA?AV?$complex at N@0 at AEBV10@@Z
 @ stub -arch=win32 ??$exp at O@std@@YA?AV?$complex at O@0 at ABV10@@Z
 @ stub -arch=win64 ??$exp at O@std@@YA?AV?$complex at O@0 at AEBV10@@Z
-@ cdecl -arch=win32 ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@0 at AAV10@AAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0@@Z(ptr ptr) basic_istream_char_getline_str
-@ cdecl -arch=win64 ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@AEAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0@@Z(ptr ptr) basic_istream_char_getline_str
-@ cdecl -arch=win32 ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@0 at AAV10@AAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0 at D@Z(ptr ptr long) basic_istream_char_getline_str_delim
-@ cdecl -arch=win64 ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@AEAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0 at D@Z(ptr ptr long) basic_istream_char_getline_str_delim
+@ cdecl -arch=win32 ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@0 at AAV10@AAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0@@Z(ptr ptr) basic_istream_char_getline_bstr
+@ cdecl -arch=win64 ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@AEAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0@@Z(ptr ptr) basic_istream_char_getline_bstr
+@ cdecl -arch=win32 ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@YAAAV?$basic_istream at DU?$char_traits at D@std@@@0 at AAV10@AAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0 at D@Z(ptr ptr long) basic_istream_char_getline_bstr_delim
+@ cdecl -arch=win64 ??$getline at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@YAAEAV?$basic_istream at DU?$char_traits at D@std@@@0 at AEAV10@AEAV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@0 at D@Z(ptr ptr long) basic_istream_char_getline_bstr_delim
 @ stub -arch=win32 ??$getline at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@YAAAV?$basic_istream at GU?$char_traits at G@std@@@0 at AAV10@AAV?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@0@@Z
 @ stub -arch=win64 ??$getline at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@YAAEAV?$basic_istream at GU?$char_traits at G@std@@@0 at AEAV10@AEAV?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@0@@Z
 @ stub -arch=win32 ??$getline at GU?$char_traits at G@std@@V?$allocator at G@2@@std@@YAAAV?$basic_istream at GU?$char_traits at G@std@@@0 at AAV10@AAV?$basic_string at GU?$char_traits at G@std@@V?$allocator at G@2@@0 at G@Z




More information about the wine-cvs mailing list