gdiplus/tests: Cleanup resources on error path in test_font_height_scaling (coverity).
[wine.git] / dlls / msvcp100 / ios.c
blob32f36ceb055c23751c8292162298dce36bc5168e
1 /*
2 * Copyright 2011 Piotr Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #include "config.h"
21 #include <stdarg.h>
22 #include <stdio.h>
23 #include <limits.h>
24 #include <share.h>
26 #include "msvcp.h"
27 #include "windef.h"
28 #include "winbase.h"
29 #include "wine/debug.h"
30 WINE_DEFAULT_DEBUG_CHANNEL(msvcp);
32 /* ?_Index@ios_base@std@@0HA */
33 int ios_base_Index = 0;
34 /* ?_Sync@ios_base@std@@0_NA */
35 MSVCP_bool ios_base_Sync = FALSE;
37 typedef struct {
38 streamoff off;
39 __int64 DECLSPEC_ALIGN(8) pos;
40 int state;
41 } fpos_int;
43 static inline const char* debugstr_fpos_int(fpos_int *fpos)
45 return wine_dbg_sprintf("fpos(%s %s %d)", wine_dbgstr_longlong(fpos->off), wine_dbgstr_longlong(fpos->pos), fpos->state);
48 typedef struct {
49 void (__cdecl *pfunc)(ios_base*, streamsize);
50 streamsize arg;
51 } manip_streamsize;
53 typedef struct {
54 void (__cdecl *pfunc)(ios_base*, int);
55 int arg;
56 } manip_int;
58 typedef enum {
59 INITFL_new = 0,
60 INITFL_open = 1,
61 INITFL_close = 2
62 } basic_filebuf__Initfl;
64 typedef struct {
65 basic_streambuf_char base;
66 codecvt_char *cvt;
67 char putback;
68 MSVCP_bool wrotesome;
69 int state;
70 MSVCP_bool close;
71 FILE *file;
72 } basic_filebuf_char;
74 typedef struct {
75 basic_streambuf_wchar base;
76 codecvt_wchar *cvt;
77 wchar_t putback;
78 MSVCP_bool wrotesome;
79 int state;
80 MSVCP_bool close;
81 FILE *file;
82 } basic_filebuf_wchar;
84 typedef struct {
85 ios_base base;
86 basic_streambuf_char *strbuf;
87 struct _basic_ostream_char *stream;
88 char fillch;
89 } basic_ios_char;
91 typedef struct {
92 ios_base base;
93 basic_streambuf_wchar *strbuf;
94 struct _basic_ostream_wchar *stream;
95 wchar_t fillch;
96 } basic_ios_wchar;
98 typedef struct _basic_ostream_char {
99 const int *vbtable;
100 /* virtual inheritance
101 * basic_ios_char basic_ios;
103 } basic_ostream_char;
105 typedef struct _basic_ostream_wchar {
106 const int *vbtable;
107 /* virtual inheritance
108 * basic_ios_wchar basic_ios;
110 } basic_ostream_wchar;
112 typedef struct {
113 const int *vbtable;
114 streamsize count;
115 /* virtual inheritance
116 * basic_ios_char basic_ios;
118 } basic_istream_char;
120 typedef struct {
121 const int *vbtable;
122 streamsize count;
123 /* virtual inheritance
124 * basic_ios_wchar basic_ios;
126 } basic_istream_wchar;
128 typedef struct {
129 basic_istream_char base1;
130 basic_ostream_char base2;
131 /* virtual inheritance
132 * basic_ios_char basic_ios;
134 } basic_iostream_char;
136 typedef struct {
137 basic_istream_wchar base1;
138 basic_ostream_wchar base2;
139 /* virtual inheritance
140 * basic_ios_wchar basic_ios;
142 } basic_iostream_wchar;
144 extern const vtable_ptr MSVCP_iosb_vtable;
146 /* ??_7ios_base@std@@6B@ */
147 extern const vtable_ptr MSVCP_ios_base_vtable;
149 /* ??_7?$basic_ios@DU?$char_traits@D@std@@@std@@6B@ */
150 extern const vtable_ptr MSVCP_basic_ios_char_vtable;
152 /* ??_7?$basic_ios@_WU?$char_traits@_W@std@@@std@@6B@ */
153 extern const vtable_ptr MSVCP_basic_ios_wchar_vtable;
155 /* ??_7?$basic_ios@GU?$char_traits@G@std@@@std@@6B@ */
156 extern const vtable_ptr MSVCP_basic_ios_short_vtable;
158 /* ??_7?$basic_streambuf@DU?$char_traits@D@std@@@std@@6B@ */
159 extern const vtable_ptr MSVCP_basic_streambuf_char_vtable;
161 /* ??_7?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@6B@ */
162 extern const vtable_ptr MSVCP_basic_streambuf_wchar_vtable;
164 /* ??_7?$basic_streambuf@GU?$char_traits@G@std@@@std@@6B@ */
165 extern const vtable_ptr MSVCP_basic_streambuf_short_vtable;
167 /* ??_7?$basic_filebuf@DU?$char_traits@D@std@@@std@@6B@ */
168 extern const vtable_ptr MSVCP_basic_filebuf_char_vtable;
170 /* ??_7?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@6B@ */
171 extern const vtable_ptr MSVCP_basic_filebuf_wchar_vtable;
173 /* ??_7?$basic_filebuf@GU?$char_traits@G@std@@@std@@6B@ */
174 extern const vtable_ptr MSVCP_basic_filebuf_short_vtable;
176 /* ??_8?$basic_ostream@DU?$char_traits@D@std@@@std@@7B@ */
177 const int basic_ostream_char_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_ostream_char), 8)};
178 /* ??_7?$basic_ostream@DU?$char_traits@D@std@@@std@@6B@ */
179 extern const vtable_ptr MSVCP_basic_ostream_char_vtable;
181 /* ??_8?$basic_ostream@_WU?$char_traits@_W@std@@@std@@7B@ */
182 const int basic_ostream_wchar_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_ostream_wchar), 8)};
183 /* ??_7?$basic_ostream@_WU?$char_traits@_W@std@@@std@@6B@ */
184 extern const vtable_ptr MSVCP_basic_ostream_wchar_vtable;
186 /* ??_8?$basic_ostream@GU?$char_traits@G@std@@@std@@7B@ */
187 const int basic_ostream_short_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_ostream_wchar), 8)};
188 /* ??_7?$basic_ostream@GU?$char_traits@G@std@@@std@@6B@ */
189 extern const vtable_ptr MSVCP_basic_ostream_short_vtable;
191 /* ??_8?$basic_istream@DU?$char_traits@D@std@@@std@@7B@ */
192 const int basic_istream_char_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_istream_char), 8)};
193 /* ??_7?$basic_istream@DU?$char_traits@D@std@@@std@@6B@ */
194 extern const vtable_ptr MSVCP_basic_istream_char_vtable;
196 /* ??_8?$basic_istream@_WU?$char_traits@_W@std@@@std@@7B@ */
197 const int basic_istream_wchar_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_istream_wchar), 8)};
198 /* ??_7?$basic_istream@_WU?$char_traits@_W@std@@@std@@6B@ */
199 extern const vtable_ptr MSVCP_basic_istream_wchar_vtable;
201 /* ??_8?$basic_istream@GU?$char_traits@G@std@@@std@@7B@ */
202 const int basic_istream_short_vbtable[] = {0, ALIGNED_SIZE(sizeof(basic_istream_wchar), 8)};
203 /* ??_7?$basic_istream@GU?$char_traits@G@std@@@std@@6B@ */
204 extern const vtable_ptr MSVCP_basic_istream_short_vtable;
206 /* ??_8?$basic_iostream@DU?$char_traits@D@std@@@std@@7B?$basic_istream@DU?$char_traits@D@std@@@1@@ */
207 const int basic_iostream_char_vbtable1[] = {0, ALIGNED_SIZE(sizeof(basic_iostream_char), 8)};
208 /* ??_8?$basic_iostream@DU?$char_traits@D@std@@@std@@7B?$basic_ostream@DU?$char_traits@D@std@@@1@@ */
209 const int basic_iostream_char_vbtable2[] = {0, ALIGNED_SIZE(sizeof(basic_iostream_char), 8)-FIELD_OFFSET(basic_iostream_char, base2)};
210 /* ??_7?$basic_iostream@DU?$char_traits@D@std@@@std@@6B@ */
211 extern const vtable_ptr MSVCP_basic_iostream_char_vtable;
213 /* ??_8?$basic_iostream@_WU?$char_traits@_W@std@@@std@@7B?$basic_istream@_WU?$char_traits@_W@std@@@1@@ */
214 /* ??_8?$basic_iostream@GU?$char_traits@G@std@@@std@@7B?$basic_istream@GU?$char_traits@G@std@@@1@@ */
215 const int basic_iostream_wchar_vbtable1[] = {0, ALIGNED_SIZE(sizeof(basic_iostream_wchar), 8)};
216 /* ??_8?$basic_iostream@_WU?$char_traits@_W@std@@@std@@7B?$basic_ostream@_WU?$char_traits@_W@std@@@1@@ */
217 /* ??_8?$basic_iostream@GU?$char_traits@G@std@@@std@@7B?$basic_ostream@GU?$char_traits@G@std@@@1@@ */
218 const int basic_iostream_wchar_vbtable2[] = {0, ALIGNED_SIZE(sizeof(basic_iostream_wchar), 8)-FIELD_OFFSET(basic_iostream_wchar, base2)};
219 /* ??_7?$basic_iostream@_WU?$char_traits@_W@std@@@std@@6B@ */
220 extern const vtable_ptr MSVCP_basic_iostream_wchar_vtable;
221 /* ??_7?$basic_iostream@GU?$char_traits@G@std@@@std@@6B@ */
222 extern const vtable_ptr MSVCP_basic_iostream_short_vtable;
224 DEFINE_RTTI_DATA0(iosb, 0, ".?AV?$_Iosb@H@std@@");
225 DEFINE_RTTI_DATA1(ios_base, 0, &iosb_rtti_base_descriptor, ".?AV?$_Iosb@H@std@@");
226 DEFINE_RTTI_DATA2(basic_ios_char, 0, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
227 ".?AV?$basic_ios@DU?$char_traits@D@std@@@std@@");
228 DEFINE_RTTI_DATA2(basic_ios_wchar, 0, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
229 ".?AV?$basic_ios@_WU?$char_traits@_W@std@@@std@@");
230 DEFINE_RTTI_DATA2(basic_ios_short, 0, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
231 ".?AV?$basic_ios@GU?$char_traits@G@std@@@std@@");
232 DEFINE_RTTI_DATA0(basic_streambuf_char, 0,
233 ".?AV?$basic_streambuf@DU?$char_traits@D@std@@@std@@");
234 DEFINE_RTTI_DATA0(basic_streambuf_wchar, 0,
235 ".?AV?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@");
236 DEFINE_RTTI_DATA0(basic_streambuf_short, 0,
237 ".?AV?$basic_streambuf@GU?$char_traits@G@std@@@std@@");
238 DEFINE_RTTI_DATA1(basic_filebuf_char, 0, &basic_streambuf_char_rtti_base_descriptor,
239 ".?AV?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@");
240 DEFINE_RTTI_DATA1(basic_filebuf_wchar, 0, &basic_streambuf_wchar_rtti_base_descriptor,
241 ".?AV?$basic_filebuf@GU?$char_traits@G@std@@@std@@");
242 DEFINE_RTTI_DATA1(basic_filebuf_short, 0, &basic_streambuf_short_rtti_base_descriptor,
243 ".?AV?$basic_filebuf@DU?$char_traits@D@std@@@std@@");
244 DEFINE_RTTI_DATA3(basic_ostream_char, sizeof(basic_ostream_char), &basic_ios_char_rtti_base_descriptor,
245 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
246 ".?AV?$basic_ostream@DU?$char_traits@D@std@@@std@@");
247 DEFINE_RTTI_DATA3(basic_ostream_wchar, sizeof(basic_ostream_wchar), &basic_ios_wchar_rtti_base_descriptor,
248 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
249 ".?AV?$basic_ostream@_WU?$char_traits@_W@std@@@std@@");
250 DEFINE_RTTI_DATA3(basic_ostream_short, sizeof(basic_ostream_wchar), &basic_ios_short_rtti_base_descriptor,
251 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
252 ".?AV?$basic_ostream@GU?$char_traits@G@std@@@std@@");
253 DEFINE_RTTI_DATA3(basic_istream_char, sizeof(basic_istream_char), &basic_ios_char_rtti_base_descriptor,
254 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
255 ".?AV?$basic_istream@DU?$char_traits@D@std@@@std@@");
256 DEFINE_RTTI_DATA3(basic_istream_wchar, sizeof(basic_istream_wchar), &basic_ios_wchar_rtti_base_descriptor,
257 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
258 ".?AV?$basic_istream@_WU?$char_traits@_W@std@@@std@@");
259 DEFINE_RTTI_DATA3(basic_istream_short, sizeof(basic_istream_wchar), &basic_ios_short_rtti_base_descriptor,
260 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
261 ".?AV?$basic_istream@GU?$char_traits@G@std@@@std@@");
262 DEFINE_RTTI_DATA8(basic_iostream_char, sizeof(basic_iostream_char),
263 &basic_istream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
264 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
265 &basic_ostream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
266 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
267 ".?AV?$basic_iostream@DU?$char_traits@D@std@@@std@@");
268 DEFINE_RTTI_DATA8(basic_iostream_wchar, sizeof(basic_iostream_wchar),
269 &basic_istream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor,
270 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
271 &basic_ostream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor,
272 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
273 ".?AV?$basic_iostream@_WU?$char_traits@_W@std@@@std@@");
274 DEFINE_RTTI_DATA8(basic_iostream_short, sizeof(basic_iostream_wchar),
275 &basic_istream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor,
276 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
277 &basic_ostream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor,
278 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
279 ".?AV?$basic_iostream@GU?$char_traits@G@std@@@std@@");
281 #ifndef __GNUC__
282 void __asm_dummy_vtables(void) {
283 #endif
284 __ASM_VTABLE(iosb,
285 VTABLE_ADD_FUNC(iosb_vector_dtor));
286 __ASM_VTABLE(ios_base,
287 VTABLE_ADD_FUNC(ios_base_vector_dtor));
288 __ASM_VTABLE(basic_ios_char,
289 VTABLE_ADD_FUNC(basic_ios_char_vector_dtor));
290 __ASM_VTABLE(basic_ios_wchar,
291 VTABLE_ADD_FUNC(basic_ios_wchar_vector_dtor));
292 __ASM_VTABLE(basic_ios_short,
293 VTABLE_ADD_FUNC(basic_ios_wchar_vector_dtor));
294 __ASM_VTABLE(basic_streambuf_char,
295 VTABLE_ADD_FUNC(basic_streambuf_char_vector_dtor)
296 VTABLE_ADD_FUNC(basic_streambuf_char__Lock)
297 VTABLE_ADD_FUNC(basic_streambuf_char__Unlock)
298 VTABLE_ADD_FUNC(basic_streambuf_char_overflow)
299 VTABLE_ADD_FUNC(basic_streambuf_char_pbackfail)
300 VTABLE_ADD_FUNC(basic_streambuf_char_showmanyc)
301 VTABLE_ADD_FUNC(basic_streambuf_char_underflow)
302 VTABLE_ADD_FUNC(basic_streambuf_char_uflow)
303 VTABLE_ADD_FUNC(basic_streambuf_char_xsgetn)
304 VTABLE_ADD_FUNC(basic_streambuf_char_xsputn)
305 VTABLE_ADD_FUNC(basic_streambuf_char_seekoff)
306 VTABLE_ADD_FUNC(basic_streambuf_char_seekpos)
307 VTABLE_ADD_FUNC(basic_streambuf_char_setbuf)
308 VTABLE_ADD_FUNC(basic_streambuf_char_sync)
309 VTABLE_ADD_FUNC(basic_streambuf_char_imbue));
310 __ASM_VTABLE(basic_streambuf_wchar,
311 VTABLE_ADD_FUNC(basic_streambuf_wchar_vector_dtor)
312 VTABLE_ADD_FUNC(basic_streambuf_wchar__Lock)
313 VTABLE_ADD_FUNC(basic_streambuf_wchar__Unlock)
314 VTABLE_ADD_FUNC(basic_streambuf_wchar_overflow)
315 VTABLE_ADD_FUNC(basic_streambuf_wchar_pbackfail)
316 VTABLE_ADD_FUNC(basic_streambuf_wchar_showmanyc)
317 VTABLE_ADD_FUNC(basic_streambuf_wchar_underflow)
318 VTABLE_ADD_FUNC(basic_streambuf_wchar_uflow)
319 VTABLE_ADD_FUNC(basic_streambuf_wchar_xsgetn)
320 VTABLE_ADD_FUNC(basic_streambuf_wchar_xsputn)
321 VTABLE_ADD_FUNC(basic_streambuf_wchar_seekoff)
322 VTABLE_ADD_FUNC(basic_streambuf_wchar_seekpos)
323 VTABLE_ADD_FUNC(basic_streambuf_wchar_setbuf)
324 VTABLE_ADD_FUNC(basic_streambuf_wchar_sync)
325 VTABLE_ADD_FUNC(basic_streambuf_wchar_imbue));
326 __ASM_VTABLE(basic_streambuf_short,
327 VTABLE_ADD_FUNC(basic_streambuf_wchar_vector_dtor)
328 VTABLE_ADD_FUNC(basic_streambuf_wchar__Lock)
329 VTABLE_ADD_FUNC(basic_streambuf_wchar__Unlock)
330 VTABLE_ADD_FUNC(basic_streambuf_wchar_overflow)
331 VTABLE_ADD_FUNC(basic_streambuf_wchar_pbackfail)
332 VTABLE_ADD_FUNC(basic_streambuf_wchar_showmanyc)
333 VTABLE_ADD_FUNC(basic_streambuf_wchar_underflow)
334 VTABLE_ADD_FUNC(basic_streambuf_wchar_uflow)
335 VTABLE_ADD_FUNC(basic_streambuf_wchar_xsgetn)
336 VTABLE_ADD_FUNC(basic_streambuf_wchar_xsputn)
337 VTABLE_ADD_FUNC(basic_streambuf_wchar_seekoff)
338 VTABLE_ADD_FUNC(basic_streambuf_wchar_seekpos)
339 VTABLE_ADD_FUNC(basic_streambuf_wchar_setbuf)
340 VTABLE_ADD_FUNC(basic_streambuf_wchar_sync)
341 VTABLE_ADD_FUNC(basic_streambuf_wchar_imbue));
342 __ASM_VTABLE(basic_filebuf_char,
343 VTABLE_ADD_FUNC(basic_filebuf_char_vector_dtor)
344 VTABLE_ADD_FUNC(basic_streambuf_char__Lock)
345 VTABLE_ADD_FUNC(basic_streambuf_char__Unlock)
346 VTABLE_ADD_FUNC(basic_filebuf_char_overflow)
347 VTABLE_ADD_FUNC(basic_filebuf_char_pbackfail)
348 VTABLE_ADD_FUNC(basic_streambuf_char_showmanyc)
349 VTABLE_ADD_FUNC(basic_filebuf_char_underflow)
350 VTABLE_ADD_FUNC(basic_filebuf_char_uflow)
351 VTABLE_ADD_FUNC(basic_streambuf_char_xsgetn)
352 VTABLE_ADD_FUNC(basic_streambuf_char_xsputn)
353 VTABLE_ADD_FUNC(basic_filebuf_char_seekoff)
354 VTABLE_ADD_FUNC(basic_filebuf_char_seekpos)
355 VTABLE_ADD_FUNC(basic_filebuf_char_setbuf)
356 VTABLE_ADD_FUNC(basic_filebuf_char_sync)
357 VTABLE_ADD_FUNC(basic_filebuf_char_imbue));
358 __ASM_VTABLE(basic_filebuf_wchar,
359 VTABLE_ADD_FUNC(basic_filebuf_wchar_vector_dtor)
360 VTABLE_ADD_FUNC(basic_streambuf_wchar__Lock)
361 VTABLE_ADD_FUNC(basic_streambuf_wchar__Unlock)
362 VTABLE_ADD_FUNC(basic_filebuf_wchar_overflow)
363 VTABLE_ADD_FUNC(basic_filebuf_wchar_pbackfail)
364 VTABLE_ADD_FUNC(basic_streambuf_wchar_showmanyc)
365 VTABLE_ADD_FUNC(basic_filebuf_wchar_underflow)
366 VTABLE_ADD_FUNC(basic_filebuf_wchar_uflow)
367 VTABLE_ADD_FUNC(basic_streambuf_wchar_xsgetn)
368 VTABLE_ADD_FUNC(basic_streambuf_wchar_xsputn)
369 VTABLE_ADD_FUNC(basic_filebuf_wchar_seekoff)
370 VTABLE_ADD_FUNC(basic_filebuf_wchar_seekpos)
371 VTABLE_ADD_FUNC(basic_filebuf_wchar_setbuf)
372 VTABLE_ADD_FUNC(basic_filebuf_wchar_sync)
373 VTABLE_ADD_FUNC(basic_filebuf_wchar_imbue));
374 __ASM_VTABLE(basic_filebuf_short,
375 VTABLE_ADD_FUNC(basic_filebuf_wchar_vector_dtor)
376 VTABLE_ADD_FUNC(basic_streambuf_wchar__Lock)
377 VTABLE_ADD_FUNC(basic_streambuf_wchar__Unlock)
378 VTABLE_ADD_FUNC(basic_filebuf_wchar_overflow)
379 VTABLE_ADD_FUNC(basic_filebuf_wchar_pbackfail)
380 VTABLE_ADD_FUNC(basic_streambuf_wchar_showmanyc)
381 VTABLE_ADD_FUNC(basic_filebuf_wchar_underflow)
382 VTABLE_ADD_FUNC(basic_filebuf_wchar_uflow)
383 VTABLE_ADD_FUNC(basic_streambuf_wchar_xsgetn)
384 VTABLE_ADD_FUNC(basic_streambuf_wchar_xsputn)
385 VTABLE_ADD_FUNC(basic_filebuf_wchar_seekoff)
386 VTABLE_ADD_FUNC(basic_filebuf_wchar_seekpos)
387 VTABLE_ADD_FUNC(basic_filebuf_short_setbuf)
388 VTABLE_ADD_FUNC(basic_filebuf_wchar_sync)
389 VTABLE_ADD_FUNC(basic_filebuf_short_imbue));
390 __ASM_VTABLE(basic_ostream_char,
391 VTABLE_ADD_FUNC(basic_ostream_char_vector_dtor));
392 __ASM_VTABLE(basic_ostream_wchar,
393 VTABLE_ADD_FUNC(basic_ostream_wchar_vector_dtor));
394 __ASM_VTABLE(basic_ostream_short,
395 VTABLE_ADD_FUNC(basic_ostream_wchar_vector_dtor));
396 __ASM_VTABLE(basic_istream_char,
397 VTABLE_ADD_FUNC(basic_istream_char_vector_dtor));
398 __ASM_VTABLE(basic_istream_wchar,
399 VTABLE_ADD_FUNC(basic_istream_wchar_vector_dtor));
400 __ASM_VTABLE(basic_istream_short,
401 VTABLE_ADD_FUNC(basic_istream_wchar_vector_dtor));
402 __ASM_VTABLE(basic_iostream_char,
403 VTABLE_ADD_FUNC(basic_iostream_char_vector_dtor));
404 __ASM_VTABLE(basic_iostream_wchar,
405 VTABLE_ADD_FUNC(basic_iostream_wchar_vector_dtor));
406 __ASM_VTABLE(basic_iostream_short,
407 VTABLE_ADD_FUNC(basic_iostream_wchar_vector_dtor));
408 #ifndef __GNUC__
410 #endif
412 /* ?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD00@Z */
413 /* ?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD00@Z */
414 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_setp_next, 16)
415 void __thiscall basic_streambuf_char_setp_next(basic_streambuf_char *this, char *first, char *next, char *last)
417 TRACE("(%p %p %p %p)\n", this, first, next, last);
419 this->wbuf = first;
420 this->wpos = next;
421 this->wsize = last-next;
424 /* ?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD0@Z */
425 /* ?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD0@Z */
426 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_setp, 12)
427 void __thiscall basic_streambuf_char_setp(basic_streambuf_char *this, char *first, char *last)
429 basic_streambuf_char_setp_next(this, first, first, last);
432 /* ?setg@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD00@Z */
433 /* ?setg@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD00@Z */
434 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_setg, 16)
435 void __thiscall basic_streambuf_char_setg(basic_streambuf_char *this, char *first, char *next, char *last)
437 TRACE("(%p %p %p %p)\n", this, first, next, last);
439 this->rbuf = first;
440 this->rpos = next;
441 this->rsize = last-next;
444 /* ?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXXZ */
445 /* ?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXXZ */
446 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Init_empty, 4)
447 void __thiscall basic_streambuf_char__Init_empty(basic_streambuf_char *this)
449 TRACE("(%p)\n", this);
451 this->prbuf = &this->rbuf;
452 this->pwbuf = &this->wbuf;
453 this->prpos = &this->rpos;
454 this->pwpos = &this->wpos;
455 this->prsize = &this->rsize;
456 this->pwsize = &this->wsize;
458 basic_streambuf_char_setp(this, NULL, NULL);
459 basic_streambuf_char_setg(this, NULL, NULL, NULL);
462 /* ??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAE@W4_Uninitialized@1@@Z */
463 /* ??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAA@W4_Uninitialized@1@@Z */
464 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_ctor_uninitialized, 8)
465 basic_streambuf_char* __thiscall basic_streambuf_char_ctor_uninitialized(basic_streambuf_char *this, int uninitialized)
467 TRACE("(%p %d)\n", this, uninitialized);
468 this->vtable = &MSVCP_basic_streambuf_char_vtable;
469 mutex_ctor(&this->lock);
470 return this;
473 /* ??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAE@XZ */
474 /* ??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAA@XZ */
475 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_ctor, 4)
476 basic_streambuf_char* __thiscall basic_streambuf_char_ctor(basic_streambuf_char *this)
478 TRACE("(%p)\n", this);
480 this->vtable = &MSVCP_basic_streambuf_char_vtable;
481 mutex_ctor(&this->lock);
482 this->loc = MSVCRT_operator_new(sizeof(locale));
483 locale_ctor(this->loc);
484 basic_streambuf_char__Init_empty(this);
486 return this;
489 /* ??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAE@XZ */
490 /* ??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAA@XZ */
491 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_dtor, 4)
492 void __thiscall basic_streambuf_char_dtor(basic_streambuf_char *this)
494 TRACE("(%p)\n", this);
496 mutex_dtor(&this->lock);
497 locale_dtor(this->loc);
498 MSVCRT_operator_delete(this->loc);
501 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_vector_dtor, 8)
502 basic_streambuf_char* __thiscall basic_streambuf_char_vector_dtor(basic_streambuf_char *this, unsigned int flags)
504 TRACE("(%p %x)\n", this, flags);
505 if(flags & 2) {
506 /* we have an array, with the number of elements stored before the first object */
507 INT_PTR i, *ptr = (INT_PTR *)this-1;
509 for(i=*ptr-1; i>=0; i--)
510 basic_streambuf_char_dtor(this+i);
511 MSVCRT_operator_delete(ptr);
512 } else {
513 basic_streambuf_char_dtor(this);
514 if(flags & 1)
515 MSVCRT_operator_delete(this);
518 return this;
521 /* ?_Gnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEHXZ */
522 /* ?_Gnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBA_JXZ */
523 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Gnavail, 4)
524 streamsize __thiscall basic_streambuf_char__Gnavail(const basic_streambuf_char *this)
526 TRACE("(%p)\n", this);
527 return *this->prpos ? *this->prsize : 0;
530 /* ?_Gndec@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ */
531 /* ?_Gndec@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ */
532 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Gndec, 4)
533 char* __thiscall basic_streambuf_char__Gndec(basic_streambuf_char *this)
535 TRACE("(%p)\n", this);
536 (*this->prsize)++;
537 (*this->prpos)--;
538 return *this->prpos;
541 /* ?_Gninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ */
542 /* ?_Gninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ */
543 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Gninc, 4)
544 char* __thiscall basic_streambuf_char__Gninc(basic_streambuf_char *this)
546 TRACE("(%p)\n", this);
547 (*this->prsize)--;
548 return (*this->prpos)++;
551 /* ?_Gnpreinc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ */
552 /* ?_Gnpreinc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ */
553 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Gnpreinc, 4)
554 char* __thiscall basic_streambuf_char__Gnpreinc(basic_streambuf_char *this)
556 TRACE("(%p)\n", this);
557 (*this->prsize)--;
558 (*this->prpos)++;
559 return *this->prpos;
562 /* ?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAPAD0PAH001@Z */
563 /* ?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAPEAD0PEAH001@Z */
564 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Init, 28)
565 void __thiscall basic_streambuf_char__Init(basic_streambuf_char *this, char **gf, char **gn, int *gc, char **pf, char **pn, int *pc)
567 TRACE("(%p %p %p %p %p %p %p)\n", this, gf, gn, gc, pf, pn, pc);
569 this->prbuf = gf;
570 this->pwbuf = pf;
571 this->prpos = gn;
572 this->pwpos = pn;
573 this->prsize = gc;
574 this->pwsize = pc;
577 /* ?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ */
578 /* ?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAXXZ */
579 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Lock, 4)
580 #define call_basic_streambuf_char__Lock(this) CALL_VTBL_FUNC(this, 4, \
581 void, (basic_streambuf_char*), (this))
582 void __thiscall basic_streambuf_char__Lock(basic_streambuf_char *this)
584 TRACE("(%p)\n", this);
585 mutex_lock(&this->lock);
588 /* ?_Pnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEHXZ */
589 /* ?_Pnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBA_JXZ */
590 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Pnavail, 4)
591 streamsize __thiscall basic_streambuf_char__Pnavail(const basic_streambuf_char *this)
593 TRACE("(%p)\n", this);
594 return *this->pwpos ? *this->pwsize : 0;
597 /* ?_Pninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ */
598 /* ?_Pninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ */
599 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Pninc, 4)
600 char* __thiscall basic_streambuf_char__Pninc(basic_streambuf_char *this)
602 TRACE("(%p)\n", this);
603 (*this->pwsize)--;
604 return (*this->pwpos)++;
607 /* ?underflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
608 /* ?underflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
609 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_underflow, 4)
610 #define call_basic_streambuf_char_underflow(this) CALL_VTBL_FUNC(this, 24, \
611 int, (basic_streambuf_char*), (this))
612 int __thiscall basic_streambuf_char_underflow(basic_streambuf_char *this)
614 TRACE("(%p)\n", this);
615 return EOF;
618 /* ?uflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
619 /* ?uflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
620 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_uflow, 4)
621 #define call_basic_streambuf_char_uflow(this) CALL_VTBL_FUNC(this, 28, \
622 int, (basic_streambuf_char*), (this))
623 int __thiscall basic_streambuf_char_uflow(basic_streambuf_char *this)
625 int ret;
627 TRACE("(%p)\n", this);
629 if(call_basic_streambuf_char_underflow(this)==EOF)
630 return EOF;
632 ret = (unsigned char)**this->prpos;
633 (*this->prsize)--;
634 (*this->prpos)++;
635 return ret;
638 /* ?_Xsgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHPADIH@Z */
639 /* ?_Xsgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEAD_K_J@Z */
640 static streamsize basic_streambuf_char__Xsgetn_s(basic_streambuf_char *this, char *ptr, MSVCP_size_t size, streamsize count)
642 streamsize copied, chunk;
643 int c;
645 TRACE("(%p %p %lu %s)\n", this, ptr, size, wine_dbgstr_longlong(count));
647 for(copied=0; copied<count && size;) {
648 chunk = basic_streambuf_char__Gnavail(this);
649 if(chunk > count-copied)
650 chunk = count-copied;
652 if(chunk > 0) {
653 memcpy_s(ptr+copied, size, *this->prpos, chunk);
654 *this->prpos += chunk;
655 *this->prsize -= chunk;
656 copied += chunk;
657 size -= chunk;
658 }else if((c = call_basic_streambuf_char_uflow(this)) != EOF) {
659 ptr[copied] = c;
660 copied++;
661 size--;
662 }else {
663 break;
667 return copied;
670 /* ?_Sgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPADIH@Z */
671 /* ?_Sgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_K_J@Z */
672 static streamsize basic_streambuf_char__Sgetn_s(basic_streambuf_char *this, char *ptr, MSVCP_size_t size, streamsize count)
674 TRACE("(%p %p %lu %s)\n", this, ptr, size, wine_dbgstr_longlong(count));
675 return basic_streambuf_char__Xsgetn_s(this, ptr, size, count);
678 /* ?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ */
679 /* ?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAXXZ */
680 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Unlock, 4)
681 #define call_basic_streambuf_char__Unlock(this) CALL_VTBL_FUNC(this, 8, \
682 void, (basic_streambuf_char*), (this))
683 void __thiscall basic_streambuf_char__Unlock(basic_streambuf_char *this)
685 TRACE("(%p)\n", this);
686 mutex_unlock(&this->lock);
689 /* ?eback@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
690 /* ?eback@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
691 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_eback, 4)
692 char* __thiscall basic_streambuf_char_eback(const basic_streambuf_char *this)
694 TRACE("(%p)\n", this);
695 return *this->prbuf;
698 /* ?gptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
699 /* ?gptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
700 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_gptr, 4)
701 char* __thiscall basic_streambuf_char_gptr(const basic_streambuf_char *this)
703 TRACE("(%p)\n", this);
704 return *this->prpos;
707 /* ?egptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
708 /* ?egptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
709 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_egptr, 4)
710 char* __thiscall basic_streambuf_char_egptr(const basic_streambuf_char *this)
712 TRACE("(%p)\n", this);
713 return *this->prpos+*this->prsize;
716 /* ?epptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
717 /* ?epptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
718 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_epptr, 4)
719 char* __thiscall basic_streambuf_char_epptr(const basic_streambuf_char *this)
721 TRACE("(%p)\n", this);
722 return *this->pwpos+*this->pwsize;
725 /* ?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z */
726 /* ?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXH@Z */
727 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_gbump, 8)
728 void __thiscall basic_streambuf_char_gbump(basic_streambuf_char *this, int off)
730 TRACE("(%p %d)\n", this, off);
731 *this->prpos += off;
732 *this->prsize -= off;
735 /* ?getloc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QBE?AVlocale@2@XZ */
736 /* ?getloc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEBA?AVlocale@2@XZ */
737 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_getloc, 8)
738 locale* __thiscall basic_streambuf_char_getloc(const basic_streambuf_char *this, locale *ret)
740 TRACE("(%p)\n", this);
741 return locale_copy_ctor(ret, this->loc);
744 /* ?imbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEXABVlocale@2@@Z */
745 /* ?imbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAXAEBVlocale@2@@Z */
746 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_imbue, 8)
747 #define call_basic_streambuf_char_imbue(this, loc) CALL_VTBL_FUNC(this, 56, \
748 void, (basic_streambuf_char*, const locale*), (this, loc))
749 void __thiscall basic_streambuf_char_imbue(basic_streambuf_char *this, const locale *loc)
751 TRACE("(%p %p)\n", this, loc);
754 /* ?overflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHH@Z */
755 /* ?overflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z */
756 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_overflow, 8)
757 #define call_basic_streambuf_char_overflow(this, ch) CALL_VTBL_FUNC(this, 12, \
758 int, (basic_streambuf_char*, int), (this, ch))
759 int __thiscall basic_streambuf_char_overflow(basic_streambuf_char *this, int ch)
761 TRACE("(%p %d)\n", this, ch);
762 return EOF;
765 /* ?pbackfail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHH@Z */
766 /* ?pbackfail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z */
767 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pbackfail, 8)
768 #define call_basic_streambuf_char_pbackfail(this, ch) CALL_VTBL_FUNC(this, 16, \
769 int, (basic_streambuf_char*, int), (this, ch))
770 int __thiscall basic_streambuf_char_pbackfail(basic_streambuf_char *this, int ch)
772 TRACE("(%p %d)\n", this, ch);
773 return EOF;
776 /* ?pbase@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
777 /* ?pbase@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
778 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pbase, 4)
779 char* __thiscall basic_streambuf_char_pbase(const basic_streambuf_char *this)
781 TRACE("(%p)\n", this);
782 return *this->pwbuf;
785 /* ?pbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z */
786 /* ?pbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXH@Z */
787 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pbump, 8)
788 void __thiscall basic_streambuf_char_pbump(basic_streambuf_char *this, int off)
790 TRACE("(%p %d)\n", this, off);
791 *this->pwpos += off;
792 *this->pwsize -= off;
795 /* ?pptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
796 /* ?pptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
797 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pptr, 4)
798 char* __thiscall basic_streambuf_char_pptr(const basic_streambuf_char *this)
800 TRACE("(%p)\n", this);
801 return *this->pwpos;
804 /* ?pubimbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
805 /* ?pubimbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
806 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubimbue, 12)
807 locale* __thiscall basic_streambuf_char_pubimbue(basic_streambuf_char *this, locale *ret, const locale *loc)
809 TRACE("(%p %p)\n", this, loc);
810 memcpy(ret, this->loc, sizeof(locale));
811 call_basic_streambuf_char_imbue(this, loc);
812 locale_copy_ctor(this->loc, loc);
813 return ret;
816 /* ?seekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z */
817 /* ?seekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */
818 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_seekoff, 24)
819 #define call_basic_streambuf_char_seekoff(this, ret, off, way, mode) CALL_VTBL_FUNC(this, 40, \
820 fpos_int*, (basic_streambuf_char*, fpos_int*, streamoff, int, int), (this, ret, off, way, mode))
821 fpos_int* __thiscall basic_streambuf_char_seekoff(basic_streambuf_char *this,
822 fpos_int *ret, streamoff off, int way, int mode)
824 TRACE("(%p %s %d %d)\n", this, wine_dbgstr_longlong(off), way, mode);
825 ret->off = 0;
826 ret->pos = -1;
827 ret->state = 0;
828 return ret;
831 /* ?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@JHH@Z */
832 /* ?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@_JHH@Z */
833 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubseekoff, 24)
834 fpos_int* __thiscall basic_streambuf_char_pubseekoff(basic_streambuf_char *this,
835 fpos_int *ret, streamoff off, int way, int mode)
837 TRACE("(%p %s %d %d)\n", this, wine_dbgstr_longlong(off), way, mode);
838 return call_basic_streambuf_char_seekoff(this, ret, off, way, mode);
841 /* ?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@JII@Z */
842 /* ?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@_JII@Z */
843 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubseekoff_old, 24)
844 fpos_int* __thiscall basic_streambuf_char_pubseekoff_old(basic_streambuf_char *this,
845 fpos_int *ret, streamoff off, unsigned int way, unsigned int mode)
847 TRACE("(%p %s %d %d)\n", this, wine_dbgstr_longlong(off), way, mode);
848 return basic_streambuf_char_pubseekoff(this, ret, off, way, mode);
851 /* ?seekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
852 /* ?seekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
853 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_seekpos, 36)
854 #define call_basic_streambuf_char_seekpos(this, ret, pos, mode) CALL_VTBL_FUNC(this, 44, \
855 fpos_int*, (basic_streambuf_char*, fpos_int*, fpos_int, int), (this, ret, pos, mode))
856 fpos_int* __thiscall basic_streambuf_char_seekpos(basic_streambuf_char *this,
857 fpos_int *ret, fpos_int pos, int mode)
859 TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
860 ret->off = 0;
861 ret->pos = -1;
862 ret->state = 0;
863 return ret;
866 /* ?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@V32@H@Z */
867 /* ?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@V32@H@Z */
868 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubseekpos, 36)
869 fpos_int* __thiscall basic_streambuf_char_pubseekpos(basic_streambuf_char *this,
870 fpos_int *ret, fpos_int pos, int mode)
872 TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
873 return call_basic_streambuf_char_seekpos(this, ret, pos, mode);
876 /* ?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@V32@I@Z */
877 /* ?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@V32@I@Z */
878 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubseekpos_old, 36)
879 fpos_int* __thiscall basic_streambuf_char_pubseekpos_old(basic_streambuf_char *this,
880 fpos_int *ret, fpos_int pos, unsigned int mode)
882 TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
883 return basic_streambuf_char_pubseekpos(this, ret, pos, mode);
886 /* ?setbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEPAV12@PADH@Z */
887 /* ?setbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAPEAV12@PEAD_J@Z */
888 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_setbuf, 16)
889 #define call_basic_streambuf_char_setbuf(this, buf, count) CALL_VTBL_FUNC(this, 48, \
890 basic_streambuf_char*, (basic_streambuf_char*, char*, streamsize), (this, buf, count))
891 basic_streambuf_char* __thiscall basic_streambuf_char_setbuf(basic_streambuf_char *this, char *buf, streamsize count)
893 TRACE("(%p %p %s)\n", this, buf, wine_dbgstr_longlong(count));
894 return this;
897 /* ?pubsetbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PADH@Z */
898 /* ?pubsetbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEAD_J@Z */
899 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubsetbuf, 16)
900 basic_streambuf_char* __thiscall basic_streambuf_char_pubsetbuf(basic_streambuf_char *this, char *buf, streamsize count)
902 TRACE("(%p %p %s)\n", this, buf, wine_dbgstr_longlong(count));
903 return call_basic_streambuf_char_setbuf(this, buf, count);
906 /* ?sync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
907 /* ?sync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
908 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sync, 4)
909 #define call_basic_streambuf_char_sync(this) CALL_VTBL_FUNC(this, 52, \
910 int, (basic_streambuf_char*), (this))
911 int __thiscall basic_streambuf_char_sync(basic_streambuf_char *this)
913 TRACE("(%p)\n", this);
914 return 0;
917 /* ?pubsync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
918 /* ?pubsync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
919 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubsync, 4)
920 int __thiscall basic_streambuf_char_pubsync(basic_streambuf_char *this)
922 TRACE("(%p)\n", this);
923 return call_basic_streambuf_char_sync(this);
926 /* ?sgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPADH@Z */
927 /* ?sgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_J@Z */
928 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sgetn, 16)
929 streamsize __thiscall basic_streambuf_char_sgetn(basic_streambuf_char *this, char *ptr, streamsize count)
931 TRACE("(%p %p %s)\n", this, ptr, wine_dbgstr_longlong(count));
932 return basic_streambuf_char__Xsgetn_s(this, ptr, -1, count);
935 /* ?showmanyc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
936 /* ?showmanyc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JXZ */
937 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_showmanyc, 4)
938 #define call_basic_streambuf_char_showmanyc(this) CALL_VTBL_FUNC(this, 20, \
939 streamsize, (basic_streambuf_char*), (this))
940 streamsize __thiscall basic_streambuf_char_showmanyc(basic_streambuf_char *this)
942 TRACE("(%p)\n", this);
943 return 0;
946 /* ?in_avail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
947 /* ?in_avail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JXZ */
948 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_in_avail, 4)
949 streamsize __thiscall basic_streambuf_char_in_avail(basic_streambuf_char *this)
951 streamsize ret;
953 TRACE("(%p)\n", this);
955 ret = basic_streambuf_char__Gnavail(this);
956 return ret ? ret : call_basic_streambuf_char_showmanyc(this);
959 /* ?sputbackc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z */
960 /* ?sputbackc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z */
961 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sputbackc, 8)
962 int __thiscall basic_streambuf_char_sputbackc(basic_streambuf_char *this, char ch)
964 TRACE("(%p %d)\n", this, ch);
965 if(*this->prpos && *this->prpos>*this->prbuf && (*this->prpos)[-1]==ch) {
966 (*this->prsize)++;
967 (*this->prpos)--;
968 return (unsigned char)ch;
971 return call_basic_streambuf_char_pbackfail(this, (unsigned char)ch);
974 /* ?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z */
975 /* ?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z */
976 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sputc, 8)
977 int __thiscall basic_streambuf_char_sputc(basic_streambuf_char *this, char ch)
979 TRACE("(%p %d)\n", this, ch);
980 return basic_streambuf_char__Pnavail(this) ?
981 (*basic_streambuf_char__Pninc(this) = ch) :
982 call_basic_streambuf_char_overflow(this, (unsigned char)ch);
985 /* ?sungetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
986 /* ?sungetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
987 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sungetc, 4)
988 int __thiscall basic_streambuf_char_sungetc(basic_streambuf_char *this)
990 TRACE("(%p)\n", this);
991 if(*this->prpos && *this->prpos>*this->prbuf) {
992 (*this->prsize)++;
993 (*this->prpos)--;
994 return (unsigned char)**this->prpos;
997 return call_basic_streambuf_char_pbackfail(this, EOF);
1000 /* ?stossc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ */
1001 /* ?stossc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAXXZ */
1002 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_stossc, 4)
1003 void __thiscall basic_streambuf_char_stossc(basic_streambuf_char *this)
1005 TRACE("(%p)\n", this);
1006 if(basic_streambuf_char__Gnavail(this))
1007 basic_streambuf_char__Gninc(this);
1008 else
1009 call_basic_streambuf_char_uflow(this);
1012 /* ?sbumpc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
1013 /* ?sbumpc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
1014 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sbumpc, 4)
1015 int __thiscall basic_streambuf_char_sbumpc(basic_streambuf_char *this)
1017 TRACE("(%p)\n", this);
1018 return basic_streambuf_char__Gnavail(this) ?
1019 (int)(unsigned char)*basic_streambuf_char__Gninc(this) : call_basic_streambuf_char_uflow(this);
1022 /* ?sgetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
1023 /* ?sgetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
1024 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sgetc, 4)
1025 int __thiscall basic_streambuf_char_sgetc(basic_streambuf_char *this)
1027 TRACE("(%p)\n", this);
1028 return basic_streambuf_char__Gnavail(this) ?
1029 (int)(unsigned char)*basic_streambuf_char_gptr(this) : call_basic_streambuf_char_underflow(this);
1032 /* ?snextc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
1033 /* ?snextc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
1034 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_snextc, 4)
1035 int __thiscall basic_streambuf_char_snextc(basic_streambuf_char *this)
1037 TRACE("(%p)\n", this);
1039 if(basic_streambuf_char__Gnavail(this) > 1)
1040 return (unsigned char)*basic_streambuf_char__Gnpreinc(this);
1041 return basic_streambuf_char_sbumpc(this)==EOF ?
1042 EOF : basic_streambuf_char_sgetc(this);
1045 /* ?xsgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHPADH@Z */
1046 /* ?xsgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEAD_J@Z */
1047 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_xsgetn, 16)
1048 #define call_basic_streambuf_char_xsgetn(this, ptr, count) CALL_VTBL_FUNC(this, 32, \
1049 streamsize, (basic_streambuf_char*, char*, streamsize), (this, ptr, count))
1050 streamsize __thiscall basic_streambuf_char_xsgetn(basic_streambuf_char *this, char *ptr, streamsize count)
1052 TRACE("(%p %p %s)\n", this, ptr, wine_dbgstr_longlong(count));
1053 return basic_streambuf_char__Xsgetn_s(this, ptr, -1, count);
1056 /* ?xsputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHPBDH@Z */
1057 /* ?xsputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEBD_J@Z */
1058 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_xsputn, 16)
1059 #define call_basic_streambuf_char_xsputn(this, ptr, count) CALL_VTBL_FUNC(this, 36, \
1060 streamsize, (basic_streambuf_char*, const char*, streamsize), (this, ptr, count))
1061 streamsize __thiscall basic_streambuf_char_xsputn(basic_streambuf_char *this, const char *ptr, streamsize count)
1063 streamsize copied, chunk;
1065 TRACE("(%p %p %s)\n", this, ptr, wine_dbgstr_longlong(count));
1067 for(copied=0; copied<count;) {
1068 chunk = basic_streambuf_char__Pnavail(this);
1069 if(chunk > count-copied)
1070 chunk = count-copied;
1072 if(chunk > 0) {
1073 memcpy(*this->pwpos, ptr+copied, chunk);
1074 *this->pwpos += chunk;
1075 *this->pwsize -= chunk;
1076 copied += chunk;
1077 }else if(call_basic_streambuf_char_overflow(this, (unsigned char)ptr[copied]) != EOF) {
1078 copied++;
1079 }else {
1080 break;
1084 return copied;
1087 /* ?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPBDH@Z */
1088 /* ?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEBD_J@Z */
1089 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sputn, 16)
1090 streamsize __thiscall basic_streambuf_char_sputn(basic_streambuf_char *this, const char *ptr, streamsize count)
1092 TRACE("(%p %p %s)\n", this, ptr, wine_dbgstr_longlong(count));
1093 return call_basic_streambuf_char_xsputn(this, ptr, count);
1096 /* ?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W00@Z */
1097 /* ?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W00@Z */
1098 /* ?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG00@Z */
1099 /* ?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG00@Z */
1100 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_setp_next, 16)
1101 void __thiscall basic_streambuf_wchar_setp_next(basic_streambuf_wchar *this, wchar_t *first, wchar_t *next, wchar_t *last)
1103 TRACE("(%p %p %p %p)\n", this, first, next, last);
1105 this->wbuf = first;
1106 this->wpos = next;
1107 this->wsize = last-next;
1110 /* ?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W0@Z */
1111 /* ?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W0@Z */
1112 /* ?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG0@Z */
1113 /* ?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG0@Z */
1114 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_setp, 12)
1115 void __thiscall basic_streambuf_wchar_setp(basic_streambuf_wchar *this, wchar_t *first, wchar_t *last)
1117 basic_streambuf_wchar_setp_next(this, first, first, last);
1120 /* ?setg@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W00@Z */
1121 /* ?setg@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W00@Z */
1122 /* ?setg@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG00@Z */
1123 /* ?setg@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG00@Z */
1124 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_setg, 16)
1125 void __thiscall basic_streambuf_wchar_setg(basic_streambuf_wchar *this, wchar_t *first, wchar_t *next, wchar_t *last)
1127 TRACE("(%p %p %p %p)\n", this, first, next, last);
1129 this->rbuf = first;
1130 this->rpos = next;
1131 this->rsize = last-next;
1134 /* ?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXXZ */
1135 /* ?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXXZ */
1136 /* ?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXXZ */
1137 /* ?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXXZ */
1138 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Init_empty, 4)
1139 void __thiscall basic_streambuf_wchar__Init_empty(basic_streambuf_wchar *this)
1141 TRACE("(%p)\n", this);
1143 this->prbuf = &this->rbuf;
1144 this->pwbuf = &this->wbuf;
1145 this->prpos = &this->rpos;
1146 this->pwpos = &this->wpos;
1147 this->prsize = &this->rsize;
1148 this->pwsize = &this->wsize;
1150 basic_streambuf_wchar_setp(this, NULL, NULL);
1151 basic_streambuf_wchar_setg(this, NULL, NULL, NULL);
1154 /* ??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAE@W4_Uninitialized@1@@Z */
1155 /* ??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAA@W4_Uninitialized@1@@Z */
1156 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_ctor_uninitialized, 8)
1157 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_ctor_uninitialized(basic_streambuf_wchar *this, int uninitialized)
1159 TRACE("(%p %d)\n", this, uninitialized);
1160 this->vtable = &MSVCP_basic_streambuf_wchar_vtable;
1161 mutex_ctor(&this->lock);
1162 return this;
1165 /* ??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAE@W4_Uninitialized@1@@Z */
1166 /* ??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAA@W4_Uninitialized@1@@Z */
1167 DEFINE_THISCALL_WRAPPER(basic_streambuf_short_ctor_uninitialized, 8)
1168 basic_streambuf_wchar* __thiscall basic_streambuf_short_ctor_uninitialized(basic_streambuf_wchar *this, int uninitialized)
1170 TRACE("(%p %d)\n", this, uninitialized);
1171 basic_streambuf_wchar_ctor_uninitialized(this, uninitialized);
1172 this->vtable = &MSVCP_basic_streambuf_short_vtable;
1173 return this;
1176 /* ??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAE@XZ */
1177 /* ??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAA@XZ */
1178 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_ctor, 4)
1179 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_ctor(basic_streambuf_wchar *this)
1181 TRACE("(%p)\n", this);
1183 this->vtable = &MSVCP_basic_streambuf_wchar_vtable;
1184 mutex_ctor(&this->lock);
1185 this->loc = MSVCRT_operator_new(sizeof(locale));
1186 locale_ctor(this->loc);
1187 basic_streambuf_wchar__Init_empty(this);
1189 return this;
1192 /* ??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAE@XZ */
1193 /* ??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAA@XZ */
1194 DEFINE_THISCALL_WRAPPER(basic_streambuf_short_ctor, 4)
1195 basic_streambuf_wchar* __thiscall basic_streambuf_short_ctor(basic_streambuf_wchar *this)
1197 TRACE("(%p)\n", this);
1198 basic_streambuf_wchar_ctor(this);
1199 this->vtable = &MSVCP_basic_streambuf_short_vtable;
1200 return this;
1203 /* ??1?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
1204 /* ??1?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
1205 /* ??1?$basic_streambuf@GU?$char_traits@G@std@@@std@@UAE@XZ */
1206 /* ??1?$basic_streambuf@GU?$char_traits@G@std@@@std@@UEAA@XZ */
1207 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_dtor, 4)
1208 void __thiscall basic_streambuf_wchar_dtor(basic_streambuf_wchar *this)
1210 TRACE("(%p)\n", this);
1212 mutex_dtor(&this->lock);
1213 locale_dtor(this->loc);
1214 MSVCRT_operator_delete(this->loc);
1217 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_vector_dtor, 8)
1218 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_vector_dtor(basic_streambuf_wchar *this, unsigned int flags)
1220 TRACE("(%p %x)\n", this, flags);
1221 if(flags & 2) {
1222 /* we have an array, with the number of elements stored before the first object */
1223 INT_PTR i, *ptr = (INT_PTR *)this-1;
1225 for(i=*ptr-1; i>=0; i--)
1226 basic_streambuf_wchar_dtor(this+i);
1227 MSVCRT_operator_delete(ptr);
1228 } else {
1229 basic_streambuf_wchar_dtor(this);
1230 if(flags & 1)
1231 MSVCRT_operator_delete(this);
1234 return this;
1237 /* ?_Gnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEHXZ */
1238 /* ?_Gnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBA_JXZ */
1239 /* ?_Gnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEHXZ */
1240 /* ?_Gnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBA_JXZ */
1241 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Gnavail, 4)
1242 streamsize __thiscall basic_streambuf_wchar__Gnavail(const basic_streambuf_wchar *this)
1244 TRACE("(%p)\n", this);
1245 return *this->prpos ? *this->prsize : 0;
1248 /* ?_Gndec@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ */
1249 /* ?_Gndec@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ */
1250 /* ?_Gndec@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ */
1251 /* ?_Gndec@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ */
1252 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Gndec, 4)
1253 wchar_t* __thiscall basic_streambuf_wchar__Gndec(basic_streambuf_wchar *this)
1255 TRACE("(%p)\n", this);
1256 (*this->prsize)++;
1257 (*this->prpos)--;
1258 return *this->prpos;
1261 /* ?_Gninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ */
1262 /* ?_Gninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ */
1263 /* ?_Gninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ */
1264 /* ?_Gninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ */
1265 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Gninc, 4)
1266 wchar_t* __thiscall basic_streambuf_wchar__Gninc(basic_streambuf_wchar *this)
1268 TRACE("(%p)\n", this);
1269 (*this->prsize)--;
1270 return (*this->prpos)++;
1273 /* ?_Gnpreinc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ */
1274 /* ?_Gnpreinc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ */
1275 /* ?_Gnpreinc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ */
1276 /* ?_Gnpreinc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ */
1277 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Gnpreinc, 4)
1278 wchar_t* __thiscall basic_streambuf_wchar__Gnpreinc(basic_streambuf_wchar *this)
1280 TRACE("(%p)\n", this);
1281 (*this->prsize)--;
1282 (*this->prpos)++;
1283 return *this->prpos;
1286 /* ?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPAPA_W0PAH001@Z */
1287 /* ?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEAPEA_W0PEAH001@Z */
1288 /* ?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAPAG0PAH001@Z */
1289 /* ?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAPEAG0PEAH001@Z */
1290 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Init, 28)
1291 void __thiscall basic_streambuf_wchar__Init(basic_streambuf_wchar *this, wchar_t **gf, wchar_t **gn, int *gc, wchar_t **pf, wchar_t **pn, int *pc)
1293 TRACE("(%p %p %p %p %p %p %p)\n", this, gf, gn, gc, pf, pn, pc);
1295 this->prbuf = gf;
1296 this->pwbuf = pf;
1297 this->prpos = gn;
1298 this->pwpos = pn;
1299 this->prsize = gc;
1300 this->pwsize = pc;
1303 /* ?_Lock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
1304 /* ?_Lock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
1305 /* ?_Lock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEXXZ */
1306 /* ?_Lock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAXXZ */
1307 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Lock, 4)
1308 void __thiscall basic_streambuf_wchar__Lock(basic_streambuf_wchar *this)
1310 TRACE("(%p)\n", this);
1311 mutex_lock(&this->lock);
1314 /* ?_Pnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEHXZ */
1315 /* ?_Pnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBA_JXZ */
1316 /* ?_Pnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEHXZ */
1317 /* ?_Pnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBA_JXZ */
1318 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Pnavail, 4)
1319 streamsize __thiscall basic_streambuf_wchar__Pnavail(const basic_streambuf_wchar *this)
1321 TRACE("(%p)\n", this);
1322 return *this->pwpos ? *this->pwsize : 0;
1325 /* ?_Pninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ */
1326 /* ?_Pninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ */
1327 /* ?_Pninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ */
1328 /* ?_Pninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ */
1329 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Pninc, 4)
1330 wchar_t* __thiscall basic_streambuf_wchar__Pninc(basic_streambuf_wchar *this)
1332 TRACE("(%p)\n", this);
1333 (*this->pwsize)--;
1334 return (*this->pwpos)++;
1337 /* ?underflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ */
1338 /* ?underflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ */
1339 /* ?underflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGXZ */
1340 /* ?underflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGXZ */
1341 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_underflow, 4)
1342 #define call_basic_streambuf_wchar_underflow(this) CALL_VTBL_FUNC(this, 24, \
1343 unsigned short, (basic_streambuf_wchar*), (this))
1344 unsigned short __thiscall basic_streambuf_wchar_underflow(basic_streambuf_wchar *this)
1346 TRACE("(%p)\n", this);
1347 return WEOF;
1350 /* ?uflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ */
1351 /* ?uflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ */
1352 /* ?uflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGXZ */
1353 /* ?uflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGXZ */
1354 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_uflow, 4)
1355 #define call_basic_streambuf_wchar_uflow(this) CALL_VTBL_FUNC(this, 28, \
1356 unsigned short, (basic_streambuf_wchar*), (this))
1357 unsigned short __thiscall basic_streambuf_wchar_uflow(basic_streambuf_wchar *this)
1359 int ret;
1361 TRACE("(%p)\n", this);
1363 if(call_basic_streambuf_wchar_underflow(this)==WEOF)
1364 return WEOF;
1366 ret = **this->prpos;
1367 (*this->prsize)--;
1368 (*this->prpos)++;
1369 return ret;
1372 /* ?_Xsgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHPA_WIH@Z */
1373 /* ?_Xsgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEA_W_K_J@Z */
1374 /* ?_Xsgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHPAGIH@Z */
1375 /* ?_Xsgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEAG_K_J@Z */
1376 static streamsize basic_streambuf_wchar__Xsgetn_s(basic_streambuf_wchar *this, wchar_t *ptr, MSVCP_size_t size, streamsize count)
1378 streamsize copied, chunk;
1379 unsigned short c;
1381 TRACE("(%p %p %lu %s)\n", this, ptr, size, wine_dbgstr_longlong(count));
1383 for(copied=0; copied<count && size;) {
1384 chunk = basic_streambuf_wchar__Gnavail(this);
1385 if(chunk > count-copied)
1386 chunk = count-copied;
1388 if(chunk > 0) {
1389 memcpy_s(ptr+copied, size, *this->prpos, chunk*sizeof(wchar_t));
1390 *this->prpos += chunk;
1391 *this->prsize -= chunk;
1392 copied += chunk;
1393 size -= chunk*sizeof(wchar_t);
1394 }else if((c = call_basic_streambuf_wchar_uflow(this)) != WEOF) {
1395 ptr[copied] = c;
1396 copied++;
1397 size--;
1398 }else {
1399 break;
1403 return copied;
1406 /* ?_Sgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHPA_WIH@Z */
1407 /* ?_Sgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_K_J@Z */
1408 /* ?_Sgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHPAGIH@Z */
1409 /* ?_Sgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_K_J@Z */
1410 static streamsize basic_streambuf_wchar__Sgetn_s(basic_streambuf_wchar *this, wchar_t *ptr, MSVCP_size_t size, streamsize count)
1412 TRACE("(%p %p %lu %s)\n", this, ptr, size, wine_dbgstr_longlong(count));
1413 return basic_streambuf_wchar__Xsgetn_s(this, ptr, size, count);
1416 /* ?_Unlock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
1417 /* ?_Unlock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
1418 /* ?_Unlock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEXXZ */
1419 /* ?_Unlock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAXXZ */
1420 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Unlock, 4)
1421 void __thiscall basic_streambuf_wchar__Unlock(basic_streambuf_wchar *this)
1423 TRACE("(%p)\n", this);
1424 mutex_unlock(&this->lock);
1427 /* ?eback@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1428 /* ?eback@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1429 /* ?eback@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1430 /* ?eback@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1431 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_eback, 4)
1432 wchar_t* __thiscall basic_streambuf_wchar_eback(const basic_streambuf_wchar *this)
1434 TRACE("(%p)\n", this);
1435 return *this->prbuf;
1438 /* ?gptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1439 /* ?gptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1440 /* ?gptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1441 /* ?gptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1442 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_gptr, 4)
1443 wchar_t* __thiscall basic_streambuf_wchar_gptr(const basic_streambuf_wchar *this)
1445 TRACE("(%p)\n", this);
1446 return *this->prpos;
1449 /* ?egptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1450 /* ?egptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1451 /* ?egptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1452 /* ?egptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1453 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_egptr, 4)
1454 wchar_t* __thiscall basic_streambuf_wchar_egptr(const basic_streambuf_wchar *this)
1456 TRACE("(%p)\n", this);
1457 return *this->prpos+*this->prsize;
1460 /* ?epptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1461 /* ?epptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1462 /* ?epptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1463 /* ?epptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1464 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_epptr, 4)
1465 wchar_t* __thiscall basic_streambuf_wchar_epptr(const basic_streambuf_wchar *this)
1467 TRACE("(%p)\n", this);
1468 return *this->pwpos+*this->pwsize;
1471 /* ?gbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXH@Z */
1472 /* ?gbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXH@Z */
1473 /* ?gbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXH@Z */
1474 /* ?gbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXH@Z */
1475 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_gbump, 8)
1476 void __thiscall basic_streambuf_wchar_gbump(basic_streambuf_wchar *this, int off)
1478 TRACE("(%p %d)\n", this, off);
1479 *this->prpos += off;
1480 *this->prsize -= off;
1483 /* ?getloc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QBE?AVlocale@2@XZ */
1484 /* ?getloc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEBA?AVlocale@2@XZ */
1485 /* ?getloc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QBE?AVlocale@2@XZ */
1486 /* ?getloc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEBA?AVlocale@2@XZ */
1487 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_getloc, 8)
1488 locale* __thiscall basic_streambuf_wchar_getloc(const basic_streambuf_wchar *this, locale *ret)
1490 TRACE("(%p)\n", this);
1491 return locale_copy_ctor(ret, this->loc);
1494 /* ?imbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEXABVlocale@2@@Z */
1495 /* ?imbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAXAEBVlocale@2@@Z */
1496 /* ?imbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEXABVlocale@2@@Z */
1497 /* ?imbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAXAEBVlocale@2@@Z */
1498 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_imbue, 8)
1499 #define call_basic_streambuf_wchar_imbue(this, loc) CALL_VTBL_FUNC(this, 56, \
1500 void, (basic_streambuf_wchar*, const locale*), (this, loc))
1501 void __thiscall basic_streambuf_wchar_imbue(basic_streambuf_wchar *this, const locale *loc)
1503 TRACE("(%p %p)\n", this, loc);
1506 /* ?overflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z */
1507 /* ?overflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z */
1508 /* ?overflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGG@Z */
1509 /* ?overflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z */
1510 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_overflow, 8)
1511 #define call_basic_streambuf_wchar_overflow(this, ch) CALL_VTBL_FUNC(this, 12, \
1512 unsigned short, (basic_streambuf_wchar*, unsigned short), (this, ch))
1513 unsigned short __thiscall basic_streambuf_wchar_overflow(basic_streambuf_wchar *this, unsigned short ch)
1515 TRACE("(%p %d)\n", this, ch);
1516 return WEOF;
1519 /* ?pbackfail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z */
1520 /* ?pbackfail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z */
1521 /* ?pbackfail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGG@Z */
1522 /* ?pbackfail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z */
1523 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pbackfail, 8)
1524 #define call_basic_streambuf_wchar_pbackfail(this, ch) CALL_VTBL_FUNC(this, 16, \
1525 unsigned short, (basic_streambuf_wchar*, unsigned short), (this, ch))
1526 unsigned short __thiscall basic_streambuf_wchar_pbackfail(basic_streambuf_wchar *this, unsigned short ch)
1528 TRACE("(%p %d)\n", this, ch);
1529 return WEOF;
1532 /* ?pbase@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1533 /* ?pbase@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1534 /* ?pbase@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1535 /* ?pbase@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1536 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pbase, 4)
1537 wchar_t* __thiscall basic_streambuf_wchar_pbase(const basic_streambuf_wchar *this)
1539 TRACE("(%p)\n", this);
1540 return *this->pwbuf;
1543 /* ?pbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXH@Z */
1544 /* ?pbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXH@Z */
1545 /* ?pbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXH@Z */
1546 /* ?pbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXH@Z */
1547 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pbump, 8)
1548 void __thiscall basic_streambuf_wchar_pbump(basic_streambuf_wchar *this, int off)
1550 TRACE("(%p %d)\n", this, off);
1551 *this->pwpos += off;
1552 *this->pwsize -= off;
1555 /* ?pptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1556 /* ?pptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1557 /* ?pptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1558 /* ?pptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1559 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pptr, 4)
1560 wchar_t* __thiscall basic_streambuf_wchar_pptr(const basic_streambuf_wchar *this)
1562 TRACE("(%p)\n", this);
1563 return *this->pwpos;
1566 /* ?pubimbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
1567 /* ?pubimbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
1568 /* ?pubimbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
1569 /* ?pubimbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
1570 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubimbue, 12)
1571 locale* __thiscall basic_streambuf_wchar_pubimbue(basic_streambuf_wchar *this, locale *ret, const locale *loc)
1573 TRACE("(%p %p)\n", this, loc);
1574 memcpy(ret, this->loc, sizeof(locale));
1575 call_basic_streambuf_wchar_imbue(this, loc);
1576 locale_copy_ctor(this->loc, loc);
1577 return ret;
1580 /* ?seekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z */
1581 /* ?seekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */
1582 /* ?seekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z */
1583 /* ?seekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */
1584 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_seekoff, 24)
1585 #define call_basic_streambuf_wchar_seekoff(this, ret, off, way, mode) CALL_VTBL_FUNC(this, 40, \
1586 fpos_int*, (basic_streambuf_wchar*, fpos_int*, streamoff, int, int), (this, ret, off, way, mode))
1587 fpos_int* __thiscall basic_streambuf_wchar_seekoff(basic_streambuf_wchar *this,
1588 fpos_int *ret, streamoff off, int way, int mode)
1590 TRACE("(%p %s %d %d)\n", this, wine_dbgstr_longlong(off), way, mode);
1591 ret->off = 0;
1592 ret->pos = -1;
1593 ret->state = 0;
1594 return ret;
1597 /* ?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@JHH@Z */
1598 /* ?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@_JHH@Z */
1599 /* ?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@JHH@Z */
1600 /* ?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@_JHH@Z */
1601 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubseekoff, 24)
1602 fpos_int* __thiscall basic_streambuf_wchar_pubseekoff(basic_streambuf_wchar *this,
1603 fpos_int *ret, streamoff off, int way, int mode)
1605 TRACE("(%p %s %d %d)\n", this, wine_dbgstr_longlong(off), way, mode);
1606 return call_basic_streambuf_wchar_seekoff(this, ret, off, way, mode);
1609 /* ?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@JII@Z */
1610 /* ?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@_JII@Z */
1611 /* ?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@JII@Z */
1612 /* ?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@_JII@Z */
1613 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubseekoff_old, 24)
1614 fpos_int* __thiscall basic_streambuf_wchar_pubseekoff_old(basic_streambuf_wchar *this,
1615 fpos_int *ret, streamoff off, unsigned int way, unsigned int mode)
1617 TRACE("(%p %s %d %d)\n", this, wine_dbgstr_longlong(off), way, mode);
1618 return basic_streambuf_wchar_pubseekoff(this, ret, off, way, mode);
1621 /* ?seekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
1622 /* ?seekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
1623 /* ?seekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
1624 /* ?seekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
1625 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_seekpos, 36)
1626 #define call_basic_streambuf_wchar_seekpos(this, ret, pos, mode) CALL_VTBL_FUNC(this, 44, \
1627 fpos_int*, (basic_streambuf_wchar*, fpos_int*, fpos_int, int), (this, ret, pos, mode))
1628 fpos_int* __thiscall basic_streambuf_wchar_seekpos(basic_streambuf_wchar *this,
1629 fpos_int *ret, fpos_int pos, int mode)
1631 TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
1632 ret->off = 0;
1633 ret->pos = -1;
1634 ret->state = 0;
1635 return ret;
1638 /* ?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@V32@H@Z */
1639 /* ?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@V32@H@Z */
1640 /* ?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@V32@H@Z */
1641 /* ?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@V32@H@Z */
1642 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubseekpos, 36)
1643 fpos_int* __thiscall basic_streambuf_wchar_pubseekpos(basic_streambuf_wchar *this,
1644 fpos_int *ret, fpos_int pos, int mode)
1646 TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
1647 return call_basic_streambuf_wchar_seekpos(this, ret, pos, mode);
1650 /* ?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@V32@I@Z */
1651 /* ?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@V32@I@Z */
1652 /* ?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@V32@I@Z */
1653 /* ?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@V32@I@Z */
1654 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubseekpos_old, 36)
1655 fpos_int* __thiscall basic_streambuf_wchar_pubseekpos_old(basic_streambuf_wchar *this,
1656 fpos_int *ret, fpos_int pos, unsigned int mode)
1658 TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
1659 return basic_streambuf_wchar_pubseekpos(this, ret, pos, mode);
1662 /* ?setbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEPAV12@PA_WH@Z */
1663 /* ?setbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAPEAV12@PEA_W_J@Z */
1664 /* ?setbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEPAV12@PAGH@Z */
1665 /* ?setbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAPEAV12@PEAG_J@Z */
1666 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_setbuf, 16)
1667 #define call_basic_streambuf_wchar_setbuf(this, buf, count) CALL_VTBL_FUNC(this, 48, \
1668 basic_streambuf_wchar*, (basic_streambuf_wchar*, wchar_t*, streamsize), (this, buf, count))
1669 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_setbuf(basic_streambuf_wchar *this, wchar_t *buf, streamsize count)
1671 TRACE("(%p %p %s)\n", this, buf, wine_dbgstr_longlong(count));
1672 return this;
1675 /* ?pubsetbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@PA_WH@Z */
1676 /* ?pubsetbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@PEA_W_J@Z */
1677 /* ?pubsetbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEPAV12@PAGH@Z */
1678 /* ?pubsetbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@PEAG_J@Z */
1679 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubsetbuf, 16)
1680 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_pubsetbuf(basic_streambuf_wchar *this, wchar_t *buf, streamsize count)
1682 TRACE("(%p %p %s)\n", this, buf, wine_dbgstr_longlong(count));
1683 return call_basic_streambuf_wchar_setbuf(this, buf, count);
1686 /* ?sync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHXZ */
1687 /* ?sync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAHXZ */
1688 /* ?sync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHXZ */
1689 /* ?sync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAHXZ */
1690 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sync, 4)
1691 #define call_basic_streambuf_wchar_sync(this) CALL_VTBL_FUNC(this, 52, \
1692 int, (basic_streambuf_wchar*), (this))
1693 int __thiscall basic_streambuf_wchar_sync(basic_streambuf_wchar *this)
1695 TRACE("(%p)\n", this);
1696 return 0;
1699 /* ?pubsync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHXZ */
1700 /* ?pubsync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAHXZ */
1701 /* ?pubsync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHXZ */
1702 /* ?pubsync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAHXZ */
1703 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubsync, 4)
1704 int __thiscall basic_streambuf_wchar_pubsync(basic_streambuf_wchar *this)
1706 TRACE("(%p)\n", this);
1707 return call_basic_streambuf_wchar_sync(this);
1710 /* ?sgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHPA_WH@Z */
1711 /* ?sgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_J@Z */
1712 /* ?sgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHPAGH@Z */
1713 /* ?sgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_J@Z */
1714 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sgetn, 16)
1715 streamsize __thiscall basic_streambuf_wchar_sgetn(basic_streambuf_wchar *this, wchar_t *ptr, streamsize count)
1717 TRACE("(%p %p %s)\n", this, ptr, wine_dbgstr_longlong(count));
1718 return basic_streambuf_wchar__Xsgetn_s(this, ptr, -1, count);
1721 /* ?showmanyc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHXZ */
1722 /* ?showmanyc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JXZ */
1723 /* ?showmanyc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHXZ */
1724 /* ?showmanyc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JXZ */
1725 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_showmanyc, 4)
1726 #define call_basic_streambuf_wchar_showmanyc(this) CALL_VTBL_FUNC(this, 20, \
1727 streamsize, (basic_streambuf_wchar*), (this))
1728 streamsize __thiscall basic_streambuf_wchar_showmanyc(basic_streambuf_wchar *this)
1730 TRACE("(%p)\n", this);
1731 return 0;
1734 /* ?in_avail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHXZ */
1735 /* ?in_avail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JXZ */
1736 /* ?in_avail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHXZ */
1737 /* ?in_avail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JXZ */
1738 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_in_avail, 4)
1739 streamsize __thiscall basic_streambuf_wchar_in_avail(basic_streambuf_wchar *this)
1741 streamsize ret;
1743 TRACE("(%p)\n", this);
1745 ret = basic_streambuf_wchar__Gnavail(this);
1746 return ret ? ret : call_basic_streambuf_wchar_showmanyc(this);
1749 /* ?sputbackc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEG_W@Z */
1750 /* ?sputbackc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAG_W@Z */
1751 /* ?sputbackc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGG@Z */
1752 /* ?sputbackc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGG@Z */
1753 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sputbackc, 8)
1754 unsigned short __thiscall basic_streambuf_wchar_sputbackc(basic_streambuf_wchar *this, wchar_t ch)
1756 TRACE("(%p %d)\n", this, ch);
1757 if(*this->prpos && *this->prpos>*this->prbuf && (*this->prpos)[-1]==ch) {
1758 (*this->prsize)++;
1759 (*this->prpos)--;
1760 return ch;
1763 return call_basic_streambuf_wchar_pbackfail(this, ch);
1766 /* ?sputc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEG_W@Z */
1767 /* ?sputc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAG_W@Z */
1768 /* ?sputc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGG@Z */
1769 /* ?sputc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAHG@Z */
1770 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sputc, 8)
1771 unsigned short __thiscall basic_streambuf_wchar_sputc(basic_streambuf_wchar *this, wchar_t ch)
1773 TRACE("(%p %d)\n", this, ch);
1774 return basic_streambuf_wchar__Pnavail(this) ?
1775 (*basic_streambuf_wchar__Pninc(this) = ch) :
1776 call_basic_streambuf_wchar_overflow(this, ch);
1779 /* ?sungetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
1780 /* ?sungetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
1781 /* ?sungetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ */
1782 /* ?sungetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ */
1783 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sungetc, 4)
1784 unsigned short __thiscall basic_streambuf_wchar_sungetc(basic_streambuf_wchar *this)
1786 TRACE("(%p)\n", this);
1787 if(*this->prpos && *this->prpos>*this->prbuf) {
1788 (*this->prsize)++;
1789 (*this->prpos)--;
1790 return **this->prpos;
1793 return call_basic_streambuf_wchar_pbackfail(this, WEOF);
1796 /* ?stossc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
1797 /* ?stossc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
1798 /* ?stossc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEXXZ */
1799 /* ?stossc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAXXZ */
1800 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_stossc, 4)
1801 void __thiscall basic_streambuf_wchar_stossc(basic_streambuf_wchar *this)
1803 TRACE("(%p)\n", this);
1804 if(basic_streambuf_wchar__Gnavail(this))
1805 basic_streambuf_wchar__Gninc(this);
1806 else
1807 call_basic_streambuf_wchar_uflow(this);
1810 /* ?sbumpc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
1811 /* ?sbumpc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
1812 /* ?sbumpc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ */
1813 /* ?sbumpc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ */
1814 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sbumpc, 4)
1815 unsigned short __thiscall basic_streambuf_wchar_sbumpc(basic_streambuf_wchar *this)
1817 TRACE("(%p)\n", this);
1818 return basic_streambuf_wchar__Gnavail(this) ?
1819 *basic_streambuf_wchar__Gninc(this) : call_basic_streambuf_wchar_uflow(this);
1822 /* ?sgetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
1823 /* ?sgetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
1824 /* ?sgetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ */
1825 /* ?sgetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ */
1826 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sgetc, 4)
1827 unsigned short __thiscall basic_streambuf_wchar_sgetc(basic_streambuf_wchar *this)
1829 TRACE("(%p)\n", this);
1830 return basic_streambuf_wchar__Gnavail(this) ?
1831 *basic_streambuf_wchar_gptr(this) : call_basic_streambuf_wchar_underflow(this);
1834 /* ?snextc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
1835 /* ?snextc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
1836 /* ?snextc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ */
1837 /* ?snextc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ */
1838 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_snextc, 4)
1839 unsigned short __thiscall basic_streambuf_wchar_snextc(basic_streambuf_wchar *this)
1841 TRACE("(%p)\n", this);
1843 if(basic_streambuf_wchar__Gnavail(this) > 1)
1844 return *basic_streambuf_wchar__Gnpreinc(this);
1845 return basic_streambuf_wchar_sbumpc(this)==WEOF ?
1846 WEOF : basic_streambuf_wchar_sgetc(this);
1849 /* ?xsgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHPA_WH@Z */
1850 /* ?xsgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEA_W_J@Z */
1851 /* ?xsgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHPAGH@Z */
1852 /* ?xsgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEAG_J@Z */
1853 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_xsgetn, 16)
1854 #define call_basic_streambuf_wchar_xsgetn(this, ptr, count) CALL_VTBL_FUNC(this, 32, \
1855 streamsize, (basic_streambuf_wchar*, wchar_t*, streamsize), (this, ptr, count))
1856 streamsize __thiscall basic_streambuf_wchar_xsgetn(basic_streambuf_wchar *this, wchar_t *ptr, streamsize count)
1858 TRACE("(%p %p %s)\n", this, ptr, wine_dbgstr_longlong(count));
1859 return basic_streambuf_wchar__Xsgetn_s(this, ptr, -1, count);
1862 /* ?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHPB_WH@Z */
1863 /* ?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEB_W_J@Z */
1864 /* ?xsputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHPBGH@Z */
1865 /* ?xsputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEBG_J@Z */
1866 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_xsputn, 16)
1867 #define call_basic_streambuf_wchar_xsputn(this, ptr, count) CALL_VTBL_FUNC(this, 36, \
1868 streamsize, (basic_streambuf_wchar*, const wchar_t*, streamsize), (this, ptr, count))
1869 streamsize __thiscall basic_streambuf_wchar_xsputn(basic_streambuf_wchar *this, const wchar_t *ptr, streamsize count)
1871 streamsize copied, chunk;
1873 TRACE("(%p %p %s)\n", this, ptr, wine_dbgstr_longlong(count));
1875 for(copied=0; copied<count;) {
1876 chunk = basic_streambuf_wchar__Pnavail(this);
1877 if(chunk > count-copied)
1878 chunk = count-copied;
1880 if(chunk > 0) {
1881 memcpy(*this->pwpos, ptr+copied, chunk*sizeof(wchar_t));
1882 *this->pwpos += chunk;
1883 *this->pwsize -= chunk;
1884 copied += chunk;
1885 }else if(call_basic_streambuf_wchar_overflow(this, ptr[copied]) != WEOF) {
1886 copied++;
1887 }else {
1888 break;
1892 return copied;
1895 /* ?sputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHPB_WH@Z */
1896 /* ?sputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEB_W_J@Z */
1897 /* ?sputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHPBGH@Z */
1898 /* ?sputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEBG_J@Z */
1899 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sputn, 16)
1900 streamsize __thiscall basic_streambuf_wchar_sputn(basic_streambuf_wchar *this, const wchar_t *ptr, streamsize count)
1902 TRACE("(%p %p %s)\n", this, ptr, wine_dbgstr_longlong(count));
1903 return call_basic_streambuf_wchar_xsputn(this, ptr, count);
1906 /* ?_Stinit@?1??_Init@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@23@@Z@4HA */
1907 /* ?_Stinit@?1??_Init@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@23@@Z@4HA */
1908 static int basic_filebuf_char__Init__Stinit = 0;
1910 /* ?_Init@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@12@@Z */
1911 /* ?_Init@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@12@@Z */
1912 static void basic_filebuf_char__Init(basic_filebuf_char *this, FILE *file, basic_filebuf__Initfl which)
1914 TRACE("(%p %p %d)\n", this, file, which);
1916 this->cvt = NULL;
1917 this->wrotesome = FALSE;
1918 this->state = basic_filebuf_char__Init__Stinit;
1919 this->close = (which == INITFL_open);
1920 this->file = file;
1922 basic_streambuf_char__Init_empty(&this->base);
1923 if(file)
1924 basic_streambuf_char__Init(&this->base, &file->_base, &file->_ptr,
1925 &file->_cnt, &file->_base, &file->_ptr, &file->_cnt);
1928 /* ?_Initcvt@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IAEXPAV?$codecvt@DDH@2@@Z */
1929 /* ?_Initcvt@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IEAAXPEAV?$codecvt@DDH@2@@Z */
1930 static void basic_filebuf_char__Initcvt(basic_filebuf_char *this, codecvt_char *cvt)
1932 TRACE("(%p %p)\n", this, cvt);
1934 if(codecvt_base_always_noconv(&cvt->base)) {
1935 this->cvt = NULL;
1936 }else {
1937 basic_streambuf_char__Init_empty(&this->base);
1938 this->cvt = cvt;
1942 /* ?_Endwrite@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IAE_NXZ */
1943 /* ?_Endwrite@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IEAA_NXZ */
1944 static MSVCP_bool basic_filebuf_char__Endwrite(basic_filebuf_char *this)
1946 TRACE("(%p)\n", this);
1948 if(!this->wrotesome || !this->cvt)
1949 return TRUE;
1952 if(call_basic_streambuf_char_overflow(&this->base, EOF) == EOF)
1953 return FALSE;
1955 while(1) {
1956 /* TODO: check if we need a dynamic buffer here */
1957 char buf[128];
1958 char *next;
1959 int ret;
1961 ret = codecvt_char_unshift(this->cvt, &this->state, buf, buf+sizeof(buf), &next);
1962 switch(ret) {
1963 case CODECVT_ok:
1964 this->wrotesome = FALSE;
1965 /* fall through */
1966 case CODECVT_partial:
1967 if(!fwrite(buf, next-buf, 1, this->file))
1968 return FALSE;
1969 if(this->wrotesome)
1970 break;
1971 /* fall through */
1972 case CODECVT_noconv:
1973 if(call_basic_streambuf_char_overflow(&this->base, EOF) == EOF)
1974 return FALSE;
1975 return TRUE;
1976 default:
1977 return FALSE;
1982 /* ?close@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@XZ */
1983 /* ?close@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@XZ */
1984 static basic_filebuf_char* basic_filebuf_char_close(basic_filebuf_char *this)
1986 basic_filebuf_char *ret = this;
1988 TRACE("(%p)\n", this);
1990 if(!this->file)
1991 return NULL;
1993 /* TODO: handle exceptions */
1994 if(!basic_filebuf_char__Endwrite(this))
1995 ret = NULL;
1996 if(fclose(this->file))
1997 ret = NULL;
1999 basic_filebuf_char__Init(this, NULL, INITFL_close);
2000 return ret;
2003 /* ??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAE@PAU_iobuf@@@Z */
2004 /* ??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAA@PEAU_iobuf@@@Z */
2005 static basic_filebuf_char* basic_filebuf_char_ctor_file(basic_filebuf_char *this, FILE *file)
2007 TRACE("(%p %p)\n", this, file);
2009 basic_streambuf_char_ctor(&this->base);
2010 this->base.vtable = &MSVCP_basic_filebuf_char_vtable;
2012 basic_filebuf_char__Init(this, file, INITFL_new);
2013 return this;
2016 /* ??1?$basic_filebuf@DU?$char_traits@D@std@@@std@@UAE@XZ */
2017 /* ??1?$basic_filebuf@DU?$char_traits@D@std@@@std@@UEAA@XZ */
2018 static void basic_filebuf_char_dtor(basic_filebuf_char *this)
2020 TRACE("(%p)\n", this);
2022 if(this->close)
2023 basic_filebuf_char_close(this);
2024 basic_streambuf_char_dtor(&this->base);
2027 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_vector_dtor, 8)
2028 basic_filebuf_char* __thiscall basic_filebuf_char_vector_dtor(basic_filebuf_char *this, unsigned int flags)
2030 TRACE("(%p %x)\n", this, flags);
2031 if(flags & 2) {
2032 /* we have an array, with the number of elements stored before the first object */
2033 INT_PTR i, *ptr = (INT_PTR *)this-1;
2035 for(i=*ptr-1; i>=0; i--)
2036 basic_filebuf_char_dtor(this+i);
2037 MSVCRT_operator_delete(ptr);
2038 } else {
2039 basic_filebuf_char_dtor(this);
2040 if(flags & 1)
2041 MSVCRT_operator_delete(this);
2044 return this;
2047 /* ?is_open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QBE_NXZ */
2048 /* ?is_open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEBA_NXZ */
2049 static MSVCP_bool basic_filebuf_char_is_open(const basic_filebuf_char *this)
2051 TRACE("(%p)\n", this);
2052 return this->file != NULL;
2055 /* ?_Fiopen@std@@YAPAU_iobuf@@PB_WHH@Z */
2056 /* ?_Fiopen@std@@YAPEAU_iobuf@@PEB_WHH@Z */
2057 FILE* __cdecl _Fiopen_wchar(const wchar_t *name, int mode, int prot)
2059 static const wchar_t rW[] = {'r',0};
2060 static const struct {
2061 int mode;
2062 const wchar_t str[4];
2063 const wchar_t str_bin[4];
2064 } str_mode[] = {
2065 {OPENMODE_out, {'w',0}, {'w','b',0}},
2066 {OPENMODE_out|OPENMODE_app, {'a',0}, {'a','b',0}},
2067 {OPENMODE_app, {'a',0}, {'a','b',0}},
2068 {OPENMODE_out|OPENMODE_trunc, {'w',0}, {'w','b',0}},
2069 {OPENMODE_in, {'r',0}, {'r','b',0}},
2070 {OPENMODE_in|OPENMODE_out, {'r','+',0}, {'r','+','b',0}},
2071 {OPENMODE_in|OPENMODE_out|OPENMODE_trunc, {'w','+',0}, {'w','+','b',0}},
2072 {OPENMODE_in|OPENMODE_out|OPENMODE_app, {'a','+',0}, {'a','+','b',0}},
2073 {OPENMODE_in|OPENMODE_app, {'a','+',0}, {'a','+','b',0}}
2076 int real_mode = mode & ~(OPENMODE_ate|OPENMODE__Nocreate|OPENMODE__Noreplace|OPENMODE_binary);
2077 int mode_idx;
2078 FILE *f = NULL;
2080 TRACE("(%s %d %d)\n", debugstr_w(name), mode, prot);
2082 for(mode_idx=0; mode_idx<sizeof(str_mode)/sizeof(str_mode[0]); mode_idx++)
2083 if(str_mode[mode_idx].mode == real_mode)
2084 break;
2085 if(mode_idx == sizeof(str_mode)/sizeof(str_mode[0]))
2086 return NULL;
2088 if((mode & OPENMODE__Nocreate) && !(f = _wfopen(name, rW)))
2089 return NULL;
2090 else if(f)
2091 fclose(f);
2093 if((mode & OPENMODE__Noreplace) && (mode & (OPENMODE_out|OPENMODE_app))
2094 && (f = _wfopen(name, rW))) {
2095 fclose(f);
2096 return NULL;
2099 f = _wfsopen(name, (mode & OPENMODE_binary) ? str_mode[mode_idx].str_bin
2100 : str_mode[mode_idx].str, prot);
2101 if(!f)
2102 return NULL;
2104 if((mode & OPENMODE_ate) && fseek(f, 0, SEEK_END)) {
2105 fclose(f);
2106 return NULL;
2109 return f;
2112 /* ?_Fiopen@std@@YAPAU_iobuf@@PBDHH@Z */
2113 /* ?_Fiopen@std@@YAPEAU_iobuf@@PEBDHH@Z */
2114 FILE* __cdecl _Fiopen(const char *name, int mode, int prot)
2116 wchar_t nameW[FILENAME_MAX];
2118 TRACE("(%s %d %d)\n", name, mode, prot);
2120 if(mbstowcs_s(NULL, nameW, FILENAME_MAX, name, FILENAME_MAX-1) != 0)
2121 return NULL;
2122 return _Fiopen_wchar(nameW, mode, prot);
2125 /* ?overflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHH@Z */
2126 /* ?overflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z */
2127 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_overflow, 8)
2128 int __thiscall basic_filebuf_char_overflow(basic_filebuf_char *this, int c)
2130 char buf[8], *dyn_buf;
2131 char ch = c, *to_next;
2132 const char *from_next;
2133 int ret, max_size;
2136 TRACE("(%p %d)\n", this, c);
2138 if(!basic_filebuf_char_is_open(this))
2139 return EOF;
2140 if(c == EOF)
2141 return !c;
2143 if(!this->cvt)
2144 return fwrite(&ch, sizeof(char), 1, this->file) ? c : EOF;
2146 from_next = &ch;
2147 do {
2148 ret = codecvt_char_out(this->cvt, &this->state, from_next, &ch+1,
2149 &from_next, buf, buf+sizeof(buf), &to_next);
2151 switch(ret) {
2152 case CODECVT_partial:
2153 if(to_next == buf)
2154 break;
2155 /* fall through */
2156 case CODECVT_ok:
2157 if(!fwrite(buf, to_next-buf, 1, this->file))
2158 return EOF;
2159 if(ret == CODECVT_partial)
2160 continue;
2161 return c;
2162 case CODECVT_noconv:
2163 return fwrite(&ch, sizeof(char), 1, this->file) ? c : EOF;
2164 default:
2165 return EOF;
2168 break;
2169 } while(1);
2171 max_size = codecvt_base_max_length(&this->cvt->base);
2172 dyn_buf = malloc(max_size);
2173 if(!dyn_buf)
2174 return EOF;
2176 ret = codecvt_char_out(this->cvt, &this->state, from_next, &ch+1,
2177 &from_next, dyn_buf, dyn_buf+max_size, &to_next);
2179 switch(ret) {
2180 case CODECVT_ok:
2181 ret = fwrite(dyn_buf, to_next-dyn_buf, 1, this->file);
2182 free(dyn_buf);
2183 return ret ? c : EOF;
2184 case CODECVT_partial:
2185 ERR("buffer should be big enough to store all output\n");
2186 /* fall through */
2187 default:
2188 free(dyn_buf);
2189 return EOF;
2193 /* ?pbackfail@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHH@Z */
2194 /* ?pbackfail@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z */
2195 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_pbackfail, 8)
2196 int __thiscall basic_filebuf_char_pbackfail(basic_filebuf_char *this, int c)
2198 TRACE("(%p %d)\n", this, c);
2200 if(!basic_filebuf_char_is_open(this))
2201 return EOF;
2203 if(basic_streambuf_char_gptr(&this->base)>basic_streambuf_char_eback(&this->base)
2204 && (c==EOF || (int)(unsigned char)basic_streambuf_char_gptr(&this->base)[-1]==c)) {
2205 basic_streambuf_char__Gndec(&this->base);
2206 return c==EOF ? !c : c;
2207 }else if(c!=EOF && !this->cvt) {
2208 return ungetc(c, this->file);
2211 return EOF;
2214 /* ?uflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
2215 /* ?uflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
2216 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_uflow, 4)
2217 int __thiscall basic_filebuf_char_uflow(basic_filebuf_char *this)
2219 char ch, buf[128], *to_next;
2220 const char *buf_next;
2221 int c, i;
2223 TRACE("(%p)\n", this);
2225 if(!basic_filebuf_char_is_open(this))
2226 return EOF;
2228 if(basic_streambuf_char_gptr(&this->base) < basic_streambuf_char_egptr(&this->base))
2229 return (unsigned char)*basic_streambuf_char__Gninc(&this->base);
2231 c = fgetc(this->file);
2232 if(!this->cvt || c==EOF)
2233 return c;
2235 buf_next = buf;
2236 for(i=0; i < sizeof(buf)/sizeof(buf[0]); i++) {
2237 buf[i] = c;
2239 switch(codecvt_char_in(this->cvt, &this->state, buf_next,
2240 buf+i+1, &buf_next, &ch, &ch+1, &to_next)) {
2241 case CODECVT_partial:
2242 case CODECVT_ok:
2243 if(to_next == &ch) {
2244 c = fgetc(this->file);
2245 if(c == EOF)
2246 return EOF;
2247 continue;
2250 for(i--; i>=buf_next-buf; i--)
2251 ungetc(buf[i], this->file);
2252 return ch;
2253 case CODECVT_noconv:
2254 return (unsigned char)buf[0];
2255 default:
2256 return EOF;
2260 FIXME("buffer is too small\n");
2261 return EOF;
2264 /* ?underflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
2265 /* ?underflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
2266 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_underflow, 4)
2267 int __thiscall basic_filebuf_char_underflow(basic_filebuf_char *this)
2269 int ret;
2271 TRACE("(%p)\n", this);
2273 if(basic_streambuf_char_gptr(&this->base) < basic_streambuf_char_egptr(&this->base))
2274 return (unsigned char)*basic_streambuf_char_gptr(&this->base);
2276 ret = call_basic_streambuf_char_uflow(&this->base);
2277 if(ret != EOF)
2278 ret = call_basic_streambuf_char_pbackfail(&this->base, ret);
2279 return ret;
2282 /* ?seekoff@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z */
2283 /* ?seekoff@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */
2284 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_seekoff, 24)
2285 fpos_int* __thiscall basic_filebuf_char_seekoff(basic_filebuf_char *this,
2286 fpos_int *ret, streamoff off, int way, int mode)
2288 fpos_t pos;
2290 TRACE("(%p %p %s %d %d)\n", this, ret, wine_dbgstr_longlong(off), way, mode);
2292 if(!basic_filebuf_char_is_open(this) || !basic_filebuf_char__Endwrite(this)
2293 || fseek(this->file, off, way)) {
2294 ret->off = 0;
2295 ret->pos = -1;
2296 ret->state = 0;
2297 return ret;
2300 fgetpos(this->file, &pos);
2301 ret->off = 0;
2302 ret->pos = pos;
2303 ret->state = this->state;
2304 return ret;
2307 /* ?seekpos@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
2308 /* ?seekpos@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
2309 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_seekpos, 36)
2310 fpos_int* __thiscall basic_filebuf_char_seekpos(basic_filebuf_char *this,
2311 fpos_int *ret, fpos_int pos, int mode)
2313 fpos_t fpos;
2315 TRACE("(%p %p %s %d)\n", this, ret, debugstr_fpos_int(&pos), mode);
2317 if(!basic_filebuf_char_is_open(this) || !basic_filebuf_char__Endwrite(this)
2318 || fseek(this->file, (LONG)pos.pos, SEEK_SET)
2319 || (pos.off && fseek(this->file, pos.off, SEEK_CUR))) {
2320 ret->off = 0;
2321 ret->pos = -1;
2322 ret->state = 0;
2323 return ret;
2326 fgetpos(this->file, &fpos);
2327 ret->off = 0;
2328 ret->pos = fpos;
2329 ret->state = this->state;
2330 return ret;
2333 /* ?setbuf@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PADH@Z */
2334 /* ?setbuf@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PEAD_J@Z */
2335 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_setbuf, 16)
2336 basic_streambuf_char* __thiscall basic_filebuf_char_setbuf(basic_filebuf_char *this, char *buf, streamsize count)
2338 TRACE("(%p %p %s)\n", this, buf, wine_dbgstr_longlong(count));
2340 if(!basic_filebuf_char_is_open(this))
2341 return NULL;
2343 if(setvbuf(this->file, buf, (buf==NULL && count==0) ? _IONBF : _IOFBF, count))
2344 return NULL;
2346 basic_filebuf_char__Init(this, this->file, INITFL_open);
2347 return &this->base;
2350 /* ?sync@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
2351 /* ?sync@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
2352 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_sync, 4)
2353 int __thiscall basic_filebuf_char_sync(basic_filebuf_char *this)
2355 TRACE("(%p)\n", this);
2357 if(!basic_filebuf_char_is_open(this))
2358 return 0;
2360 if(call_basic_streambuf_char_overflow(&this->base, EOF) == EOF)
2361 return 0;
2362 return fflush(this->file);
2365 /* ?imbue@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEXABVlocale@2@@Z */
2366 /* ?imbue@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAXAEBVlocale@2@@Z */
2367 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_imbue, 8)
2368 void __thiscall basic_filebuf_char_imbue(basic_filebuf_char *this, const locale *loc)
2370 TRACE("(%p %p)\n", this, loc);
2371 basic_filebuf_char__Initcvt(this, codecvt_char_use_facet(loc));
2374 /* ?_Stinit@?1??_Init@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@23@@Z@4HA */
2375 /* ?_Stinit@?1??_Init@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@23@@Z@4HA */
2376 static int basic_filebuf_wchar__Init__Stinit = 0;
2378 /* ?_Stinit@?1??_Init@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@23@@Z@4HA */
2379 /* ?_Stinit@?1??_Init@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@23@@Z@4HA */
2380 static int basic_filebuf_short__Init__Stinit = 0;
2382 /* ?_Init@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@12@@Z */
2383 /* ?_Init@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@12@@Z */
2384 static void basic_filebuf_wchar__Init(basic_filebuf_wchar *this, FILE *file, basic_filebuf__Initfl which)
2386 TRACE("(%p %p %d)\n", this, file, which);
2388 this->cvt = NULL;
2389 this->wrotesome = FALSE;
2390 this->state = basic_filebuf_wchar__Init__Stinit;
2391 this->close = (which == INITFL_open);
2392 this->file = file;
2394 basic_streambuf_wchar__Init_empty(&this->base);
2397 /* ?_Init@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@12@@Z */
2398 /* ?_Init@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@12@@Z */
2399 static void basic_filebuf_short__Init(basic_filebuf_wchar *this, FILE *file, basic_filebuf__Initfl which)
2401 TRACE("(%p %p %d)\n", this, file, which);
2403 this->cvt = NULL;
2404 this->wrotesome = FALSE;
2405 this->state = basic_filebuf_short__Init__Stinit;
2406 this->close = (which == INITFL_open);
2407 this->file = file;
2409 basic_streambuf_wchar__Init_empty(&this->base);
2412 /* ?_Initcvt@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IAEXPAV?$codecvt@_WDH@2@@Z */
2413 /* ?_Initcvt@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEAV?$codecvt@_WDH@2@@Z */
2414 /* ?_Initcvt@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IAEXPAV?$codecvt@GDH@2@@Z */
2415 /* ?_Initcvt@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IEAAXPEAV?$codecvt@GDH@2@@Z */
2416 static void basic_filebuf_wchar__Initcvt(basic_filebuf_wchar *this, codecvt_wchar *cvt)
2418 TRACE("(%p %p)\n", this, cvt);
2420 if(codecvt_base_always_noconv(&cvt->base)) {
2421 this->cvt = NULL;
2422 }else {
2423 basic_streambuf_wchar__Init_empty(&this->base);
2424 this->cvt = cvt;
2428 /* ?_Endwrite@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IAE_NXZ */
2429 /* ?_Endwrite@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IEAA_NXZ */
2430 /* ?_Endwrite@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IAE_NXZ */
2431 /* ?_Endwrite@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IEAA_NXZ */
2432 static MSVCP_bool basic_filebuf_wchar__Endwrite(basic_filebuf_wchar *this)
2434 TRACE("(%p)\n", this);
2436 if(!this->wrotesome || !this->cvt)
2437 return TRUE;
2439 if(call_basic_streambuf_wchar_overflow(&this->base, WEOF) == WEOF)
2440 return FALSE;
2442 while(1) {
2443 /* TODO: check if we need a dynamic buffer here */
2444 char buf[128];
2445 char *next;
2446 int ret;
2448 ret = codecvt_wchar_unshift(this->cvt, &this->state, buf, buf+sizeof(buf), &next);
2449 switch(ret) {
2450 case CODECVT_ok:
2451 this->wrotesome = FALSE;
2452 /* fall through */
2453 case CODECVT_partial:
2454 if(!fwrite(buf, next-buf, 1, this->file))
2455 return FALSE;
2456 if(this->wrotesome)
2457 break;
2458 /* fall through */
2459 case CODECVT_noconv:
2460 if(call_basic_streambuf_wchar_overflow(&this->base, WEOF) == WEOF)
2461 return FALSE;
2462 return TRUE;
2463 default:
2464 return FALSE;
2469 /* ?close@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@XZ */
2470 /* ?close@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@XZ */
2471 /* ?close@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAEPAV12@XZ */
2472 /* ?close@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@XZ */
2473 static basic_filebuf_wchar* basic_filebuf_wchar_close(basic_filebuf_wchar *this)
2475 basic_filebuf_wchar *ret = this;
2477 TRACE("(%p)\n", this);
2479 if(!this->file)
2480 return NULL;
2482 /* TODO: handle exceptions */
2483 if(!basic_filebuf_wchar__Endwrite(this))
2484 ret = NULL;
2485 if(fclose(this->file))
2486 ret = NULL;
2488 basic_filebuf_wchar__Init(this, NULL, INITFL_close);
2489 return ret;
2492 /* ??0?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAE@PAU_iobuf@@@Z */
2493 /* ??0?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAA@PEAU_iobuf@@@Z */
2494 static basic_filebuf_wchar* basic_filebuf_wchar_ctor_file(basic_filebuf_wchar *this, FILE *file)
2496 TRACE("(%p %p)\n", this, file);
2498 basic_streambuf_wchar_ctor(&this->base);
2499 this->base.vtable = &MSVCP_basic_filebuf_wchar_vtable;
2501 basic_filebuf_wchar__Init(this, file, INITFL_new);
2502 return this;
2505 /* ??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAE@PAU_iobuf@@@Z */
2506 /* ??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAA@PEAU_iobuf@@@Z */
2507 static basic_filebuf_wchar* basic_filebuf_short_ctor_file(basic_filebuf_wchar *this, FILE *file)
2509 TRACE("(%p %p)\n", this, file);
2511 basic_streambuf_short_ctor(&this->base);
2512 this->base.vtable = &MSVCP_basic_filebuf_short_vtable;
2514 basic_filebuf_short__Init(this, file, INITFL_new);
2515 return this;
2518 /* ??1?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
2519 /* ??1?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
2520 /* ??1?$basic_filebuf@GU?$char_traits@G@std@@@std@@UAE@XZ */
2521 /* ??1?$basic_filebuf@GU?$char_traits@G@std@@@std@@UEAA@XZ */
2522 static void basic_filebuf_wchar_dtor(basic_filebuf_wchar *this)
2524 TRACE("(%p)\n", this);
2526 if(this->close)
2527 basic_filebuf_wchar_close(this);
2528 basic_streambuf_wchar_dtor(&this->base);
2531 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_vector_dtor, 8)
2532 basic_filebuf_wchar* __thiscall basic_filebuf_wchar_vector_dtor(basic_filebuf_wchar *this, unsigned int flags)
2534 TRACE("(%p %x)\n", this, flags);
2535 if(flags & 2) {
2536 /* we have an array, with the number of elements stored before the first object */
2537 INT_PTR i, *ptr = (INT_PTR *)this-1;
2539 for(i=*ptr-1; i>=0; i--)
2540 basic_filebuf_wchar_dtor(this+i);
2541 MSVCRT_operator_delete(ptr);
2542 } else {
2543 basic_filebuf_wchar_dtor(this);
2544 if(flags & 1)
2545 MSVCRT_operator_delete(this);
2548 return this;
2551 /* ?is_open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QBE_NXZ */
2552 /* ?is_open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEBA_NXZ */
2553 /* ?is_open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QBE_NXZ */
2554 /* ?is_open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEBA_NXZ */
2555 static MSVCP_bool basic_filebuf_wchar_is_open(const basic_filebuf_wchar *this)
2557 TRACE("(%p)\n", this);
2558 return this->file != NULL;
2561 /* ?overflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z */
2562 /* ?overflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z */
2563 /* ?overflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEGG@Z */
2564 /* ?overflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z */
2565 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_overflow, 8)
2566 unsigned short __thiscall basic_filebuf_wchar_overflow(basic_filebuf_wchar *this, unsigned short c)
2568 char buf[8], *dyn_buf, *to_next;
2569 wchar_t ch = c;
2570 const wchar_t *from_next;
2571 int max_size;
2572 unsigned short ret;
2575 TRACE("(%p %d)\n", this, c);
2577 if(!basic_filebuf_wchar_is_open(this))
2578 return WEOF;
2579 if(c == WEOF)
2580 return !c;
2582 if(!this->cvt)
2583 return fwrite(&ch, sizeof(wchar_t), 1, this->file) ? c : WEOF;
2585 from_next = &ch;
2586 do {
2587 ret = codecvt_wchar_out(this->cvt, &this->state, from_next, &ch+1,
2588 &from_next, buf, buf+sizeof(buf), &to_next);
2590 switch(ret) {
2591 case CODECVT_partial:
2592 if(to_next == buf)
2593 break;
2594 /* fall through */
2595 case CODECVT_ok:
2596 if(!fwrite(buf, to_next-buf, 1, this->file))
2597 return WEOF;
2598 if(ret == CODECVT_partial)
2599 continue;
2600 return c;
2601 case CODECVT_noconv:
2602 return fwrite(&ch, sizeof(wchar_t), 1, this->file) ? c : WEOF;
2603 default:
2604 return WEOF;
2607 break;
2608 } while(1);
2610 max_size = codecvt_base_max_length(&this->cvt->base);
2611 dyn_buf = malloc(max_size);
2612 if(!dyn_buf)
2613 return WEOF;
2615 ret = codecvt_wchar_out(this->cvt, &this->state, from_next, &ch+1,
2616 &from_next, dyn_buf, dyn_buf+max_size, &to_next);
2618 switch(ret) {
2619 case CODECVT_ok:
2620 ret = fwrite(dyn_buf, to_next-dyn_buf, 1, this->file);
2621 free(dyn_buf);
2622 return ret ? c : WEOF;
2623 case CODECVT_partial:
2624 ERR("buffer should be big enough to store all output\n");
2625 /* fall through */
2626 default:
2627 free(dyn_buf);
2628 return WEOF;
2632 /* ?pbackfail@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z */
2633 /* ?pbackfail@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z */
2634 /* ?pbackfail@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEGG@Z */
2635 /* ?pbackfail@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z */
2636 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_pbackfail, 8)
2637 unsigned short __thiscall basic_filebuf_wchar_pbackfail(basic_filebuf_wchar *this, unsigned short c)
2639 TRACE("(%p %d)\n", this, c);
2641 if(!basic_filebuf_wchar_is_open(this))
2642 return WEOF;
2644 if(basic_streambuf_wchar_gptr(&this->base)>basic_streambuf_wchar_eback(&this->base)
2645 && (c==WEOF || basic_streambuf_wchar_gptr(&this->base)[-1]==c)) {
2646 basic_streambuf_wchar__Gndec(&this->base);
2647 return c==WEOF ? !c : c;
2648 }else if(c!=WEOF && !this->cvt) {
2649 return ungetwc(c, this->file);
2650 }else if(c!=WEOF && basic_streambuf_wchar_gptr(&this->base)!=&this->putback) {
2651 this->putback = c;
2652 basic_streambuf_wchar_setg(&this->base, &this->putback, &this->putback, &this->putback+1);
2653 return c;
2656 return WEOF;
2659 /* ?uflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ */
2660 /* ?uflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ */
2661 /* ?uflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEGXZ */
2662 /* ?uflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAGXZ */
2663 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_uflow, 4)
2664 unsigned short __thiscall basic_filebuf_wchar_uflow(basic_filebuf_wchar *this)
2666 wchar_t ch, *to_next;
2667 char buf[128];
2668 const char *buf_next;
2669 int c, i;
2671 TRACE("(%p)\n", this);
2673 if(!basic_filebuf_wchar_is_open(this))
2674 return WEOF;
2676 if(basic_streambuf_wchar_gptr(&this->base) < basic_streambuf_wchar_egptr(&this->base))
2677 return *basic_streambuf_wchar__Gninc(&this->base);
2679 if(!this->cvt)
2680 return fgetwc(this->file);
2682 buf_next = buf;
2683 for(i=0; i < sizeof(buf)/sizeof(buf[0]); i++) {
2684 if((c = fgetc(this->file)) == EOF)
2685 return WEOF;
2686 buf[i] = c;
2688 switch(codecvt_wchar_in(this->cvt, &this->state, buf_next,
2689 buf+i+1, &buf_next, &ch, &ch+1, &to_next)) {
2690 case CODECVT_partial:
2691 case CODECVT_ok:
2692 if(to_next == &ch)
2693 continue;
2695 for(i--; i>=buf_next-buf; i--)
2696 ungetc(buf[i], this->file);
2697 return ch;
2698 case CODECVT_noconv:
2699 if(i+1 < sizeof(wchar_t))
2700 continue;
2702 memcpy(&ch, buf, sizeof(wchar_t));
2703 return ch;
2704 default:
2705 return WEOF;
2709 FIXME("buffer is too small\n");
2710 return WEOF;
2713 /* ?underflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ */
2714 /* ?underflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ */
2715 /* ?underflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEGXZ */
2716 /* ?underflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAGXZ */
2717 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_underflow, 4)
2718 unsigned short __thiscall basic_filebuf_wchar_underflow(basic_filebuf_wchar *this)
2720 unsigned short ret;
2722 TRACE("(%p)\n", this);
2724 if(basic_streambuf_wchar_gptr(&this->base) < basic_streambuf_wchar_egptr(&this->base))
2725 return *basic_streambuf_wchar_gptr(&this->base);
2727 ret = call_basic_streambuf_wchar_uflow(&this->base);
2728 if(ret != WEOF)
2729 ret = call_basic_streambuf_wchar_pbackfail(&this->base, ret);
2730 return ret;
2733 /* ?seekoff@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z */
2734 /* ?seekoff@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */
2735 /* ?seekoff@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z */
2736 /* ?seekoff@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */
2737 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_seekoff, 24)
2738 fpos_int* __thiscall basic_filebuf_wchar_seekoff(basic_filebuf_wchar *this,
2739 fpos_int *ret, streamoff off, int way, int mode)
2741 fpos_t pos;
2743 TRACE("(%p %p %s %d %d)\n", this, ret, wine_dbgstr_longlong(off), way, mode);
2745 if(basic_streambuf_wchar_gptr(&this->base) == &this->putback) {
2746 if(way == SEEKDIR_cur)
2747 off -= sizeof(wchar_t);
2749 basic_streambuf_wchar_setg(&this->base, &this->putback, &this->putback+1, &this->putback+1);
2752 if(!basic_filebuf_wchar_is_open(this) || !basic_filebuf_wchar__Endwrite(this)
2753 || fseek(this->file, off, way)) {
2754 ret->off = 0;
2755 ret->pos = -1;
2756 ret->state = 0;
2757 return ret;
2760 fgetpos(this->file, &pos);
2761 ret->off = 0;
2762 ret->pos = pos;
2763 ret->state = this->state;
2764 return ret;
2767 /* ?seekpos@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
2768 /* ?seekpos@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
2769 /* ?seekpos@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
2770 /* ?seekpos@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
2771 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_seekpos, 36)
2772 fpos_int* __thiscall basic_filebuf_wchar_seekpos(basic_filebuf_wchar *this,
2773 fpos_int *ret, fpos_int pos, int mode)
2775 fpos_t fpos;
2777 TRACE("(%p %p %s %d)\n", this, ret, debugstr_fpos_int(&pos), mode);
2779 if(!basic_filebuf_wchar_is_open(this) || !basic_filebuf_wchar__Endwrite(this)
2780 || fseek(this->file, (LONG)pos.pos, SEEK_SET)
2781 || (pos.off && fseek(this->file, pos.off, SEEK_CUR))) {
2782 ret->off = 0;
2783 ret->pos = -1;
2784 ret->state = 0;
2785 return ret;
2788 if(basic_streambuf_wchar_gptr(&this->base) == &this->putback)
2789 basic_streambuf_wchar_setg(&this->base, &this->putback, &this->putback+1, &this->putback+1);
2791 fgetpos(this->file, &fpos);
2792 ret->off = 0;
2793 ret->pos = fpos;
2794 ret->state = this->state;
2795 return ret;
2798 /* ?setbuf@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PA_WH@Z */
2799 /* ?setbuf@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PEA_W_J@Z */
2800 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_setbuf, 16)
2801 basic_streambuf_wchar* __thiscall basic_filebuf_wchar_setbuf(basic_filebuf_wchar *this, wchar_t *buf, streamsize count)
2803 TRACE("(%p %p %s)\n", this, buf, wine_dbgstr_longlong(count));
2805 if(!basic_filebuf_wchar_is_open(this))
2806 return NULL;
2808 if(setvbuf(this->file, (char*)buf, (buf==NULL && count==0) ? _IONBF : _IOFBF, count*sizeof(wchar_t)))
2809 return NULL;
2811 basic_filebuf_wchar__Init(this, this->file, INITFL_open);
2812 return &this->base;
2815 /* ?setbuf@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PAGH@Z */
2816 /* ?setbuf@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PEAG_J@Z */
2817 DEFINE_THISCALL_WRAPPER(basic_filebuf_short_setbuf, 16)
2818 basic_streambuf_wchar* __thiscall basic_filebuf_short_setbuf(basic_filebuf_wchar *this, wchar_t *buf, streamsize count)
2820 TRACE("(%p %p %s)\n", this, buf, wine_dbgstr_longlong(count));
2822 if(!basic_filebuf_wchar_is_open(this))
2823 return NULL;
2825 if(setvbuf(this->file, (char*)buf, (buf==NULL && count==0) ? _IONBF : _IOFBF, count*sizeof(wchar_t)))
2826 return NULL;
2828 basic_filebuf_short__Init(this, this->file, INITFL_open);
2829 return &this->base;
2832 /* ?sync@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEHXZ */
2833 /* ?sync@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAHXZ */
2834 /* ?sync@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEHXZ */
2835 /* ?sync@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAHXZ */
2836 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_sync, 4)
2837 int __thiscall basic_filebuf_wchar_sync(basic_filebuf_wchar *this)
2839 TRACE("(%p)\n", this);
2841 if(!basic_filebuf_wchar_is_open(this))
2842 return 0;
2844 if(call_basic_streambuf_wchar_overflow(&this->base, WEOF) == WEOF)
2845 return 0;
2846 return fflush(this->file);
2849 /* ?imbue@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEXABVlocale@2@@Z */
2850 /* ?imbue@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAXAEBVlocale@2@@Z */
2851 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_imbue, 8)
2852 void __thiscall basic_filebuf_wchar_imbue(basic_filebuf_wchar *this, const locale *loc)
2854 TRACE("(%p %p)\n", this, loc);
2855 basic_filebuf_wchar__Initcvt(this, codecvt_wchar_use_facet(loc));
2858 /* ?imbue@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEXABVlocale@2@@Z */
2859 /* ?imbue@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAXAEBVlocale@2@@Z */
2860 DEFINE_THISCALL_WRAPPER(basic_filebuf_short_imbue, 8)
2861 void __thiscall basic_filebuf_short_imbue(basic_filebuf_wchar *this, const locale *loc)
2863 TRACE("(%p %p)\n", this, loc);
2864 basic_filebuf_wchar__Initcvt(this, codecvt_short_use_facet(loc));
2867 /* ??0ios_base@std@@IAE@XZ */
2868 /* ??0ios_base@std@@IEAA@XZ */
2869 DEFINE_THISCALL_WRAPPER(ios_base_ctor, 4)
2870 ios_base* __thiscall ios_base_ctor(ios_base *this)
2872 TRACE("(%p)\n", this);
2873 this->vtable = &MSVCP_ios_base_vtable;
2874 return this;
2877 /* ??0ios_base@std@@QAE@ABV01@@Z */
2878 /* ??0ios_base@std@@QEAA@AEBV01@@Z */
2879 DEFINE_THISCALL_WRAPPER(ios_base_copy_ctor, 8)
2880 ios_base* __thiscall ios_base_copy_ctor(ios_base *this, const ios_base *copy)
2882 TRACE("(%p %p)\n", this, copy);
2883 *this = *copy;
2884 this->vtable = &MSVCP_ios_base_vtable;
2885 return this;
2888 /* ?_Callfns@ios_base@std@@AAEXW4event@12@@Z */
2889 /* ?_Callfns@ios_base@std@@AEAAXW4event@12@@Z */
2890 DEFINE_THISCALL_WRAPPER(ios_base_Callfns, 8)
2891 void __thiscall ios_base_Callfns(ios_base *this, IOS_BASE_event event)
2893 IOS_BASE_fnarray *cur;
2895 TRACE("(%p %x)\n", this, event);
2897 for(cur=this->calls; cur; cur=cur->next)
2898 cur->event_handler(event, this, cur->index);
2901 /* ?_Tidy@ios_base@std@@AAAXXZ */
2902 /* ?_Tidy@ios_base@std@@AEAAXXZ */
2903 void CDECL ios_base_Tidy(ios_base *this)
2905 IOS_BASE_iosarray *arr_cur, *arr_next;
2906 IOS_BASE_fnarray *event_cur, *event_next;
2908 TRACE("(%p)\n", this);
2910 ios_base_Callfns(this, EVENT_erase_event);
2912 for(arr_cur=this->arr; arr_cur; arr_cur=arr_next) {
2913 arr_next = arr_cur->next;
2914 MSVCRT_operator_delete(arr_cur);
2916 this->arr = NULL;
2918 for(event_cur=this->calls; event_cur; event_cur=event_next) {
2919 event_next = event_cur->next;
2920 MSVCRT_operator_delete(event_cur);
2922 this->calls = NULL;
2925 /* ?_Ios_base_dtor@ios_base@std@@CAXPAV12@@Z */
2926 /* ?_Ios_base_dtor@ios_base@std@@CAXPEAV12@@Z */
2927 void CDECL ios_base_Ios_base_dtor(ios_base *obj)
2929 TRACE("(%p)\n", obj);
2930 if(obj->loc) {
2931 locale_dtor(obj->loc);
2932 MSVCRT_operator_delete(obj->loc);
2934 ios_base_Tidy(obj);
2937 /* ??1ios_base@std@@UAE@XZ */
2938 /* ??1ios_base@std@@UEAA@XZ */
2939 DEFINE_THISCALL_WRAPPER(ios_base_dtor, 4)
2940 void __thiscall ios_base_dtor(ios_base *this)
2942 ios_base_Ios_base_dtor(this);
2945 DEFINE_THISCALL_WRAPPER(ios_base_vector_dtor, 8)
2946 ios_base* __thiscall ios_base_vector_dtor(ios_base *this, unsigned int flags)
2948 TRACE("(%p %x)\n", this, flags);
2949 if(flags & 2) {
2950 /* we have an array, with the number of elements stored before the first object */
2951 INT_PTR i, *ptr = (INT_PTR *)this-1;
2953 for(i=*ptr-1; i>=0; i--)
2954 ios_base_dtor(this+i);
2955 MSVCRT_operator_delete(ptr);
2956 } else {
2957 ios_base_dtor(this);
2958 if(flags & 1)
2959 MSVCRT_operator_delete(this);
2962 return this;
2965 DEFINE_THISCALL_WRAPPER(iosb_vector_dtor, 8)
2966 void* __thiscall iosb_vector_dtor(void *this, unsigned int flags)
2968 TRACE("(%p %x)\n", this, flags);
2969 if(flags & 2) {
2970 INT_PTR *ptr = (INT_PTR *)this-1;
2971 MSVCRT_operator_delete(ptr);
2972 } else {
2973 if(flags & 1)
2974 MSVCRT_operator_delete(this);
2977 return this;
2980 /* ?_Findarr@ios_base@std@@AAEAAU_Iosarray@12@H@Z */
2981 /* ?_Findarr@ios_base@std@@AEAAAEAU_Iosarray@12@H@Z */
2982 DEFINE_THISCALL_WRAPPER(ios_base_Findarr, 8)
2983 IOS_BASE_iosarray* __thiscall ios_base_Findarr(ios_base *this, int index)
2985 IOS_BASE_iosarray *p;
2987 TRACE("(%p %d)\n", this, index);
2989 for(p=this->arr; p; p=p->next) {
2990 if(p->index == index)
2991 return p;
2994 for(p=this->arr; p; p=p->next) {
2995 if(!p->long_val && !p->ptr_val) {
2996 p->index = index;
2997 return p;
3001 p = MSVCRT_operator_new(sizeof(IOS_BASE_iosarray));
3002 p->next = this->arr;
3003 p->index = index;
3004 p->long_val = 0;
3005 p->ptr_val = NULL;
3006 this->arr = p;
3007 return p;
3010 /* ?iword@ios_base@std@@QAEAAJH@Z */
3011 /* ?iword@ios_base@std@@QEAAAEAJH@Z */
3012 DEFINE_THISCALL_WRAPPER(ios_base_iword, 8)
3013 LONG* __thiscall ios_base_iword(ios_base *this, int index)
3015 TRACE("(%p %d)\n", this, index);
3016 return &ios_base_Findarr(this, index)->long_val;
3019 /* ?pword@ios_base@std@@QAEAAPAXH@Z */
3020 /* ?pword@ios_base@std@@QEAAAEAPEAXH@Z */
3021 DEFINE_THISCALL_WRAPPER(ios_base_pword, 8)
3022 void** __thiscall ios_base_pword(ios_base *this, int index)
3024 TRACE("(%p %d)\n", this, index);
3025 return &ios_base_Findarr(this, index)->ptr_val;
3028 /* ?register_callback@ios_base@std@@QAEXP6AXW4event@12@AAV12@H@ZH@Z */
3029 /* ?register_callback@ios_base@std@@QEAAXP6AXW4event@12@AEAV12@H@ZH@Z */
3030 DEFINE_THISCALL_WRAPPER(ios_base_register_callback, 12)
3031 void __thiscall ios_base_register_callback(ios_base *this, IOS_BASE_event_callback callback, int index)
3033 IOS_BASE_fnarray *event;
3035 TRACE("(%p %p %d)\n", this, callback, index);
3037 event = MSVCRT_operator_new(sizeof(IOS_BASE_fnarray));
3038 event->next = this->calls;
3039 event->index = index;
3040 event->event_handler = callback;
3041 this->calls = event;
3044 /* ?clear@ios_base@std@@QAEXH_N@Z */
3045 /* ?clear@ios_base@std@@QEAAXH_N@Z */
3046 DEFINE_THISCALL_WRAPPER(ios_base_clear_reraise, 12)
3047 void __thiscall ios_base_clear_reraise(ios_base *this, IOSB_iostate state, MSVCP_bool reraise)
3049 TRACE("(%p %x %x)\n", this, state, reraise);
3051 this->state = state & IOSTATE_mask;
3052 if(!(this->state & this->except))
3053 return;
3055 if(reraise)
3056 throw_exception(EXCEPTION_RERAISE, NULL);
3057 else if(this->state & this->except & IOSTATE_eofbit)
3058 throw_exception(EXCEPTION_FAILURE, "eofbit is set");
3059 else if(this->state & this->except & IOSTATE_failbit)
3060 throw_exception(EXCEPTION_FAILURE, "failbit is set");
3061 else if(this->state & this->except & IOSTATE_badbit)
3062 throw_exception(EXCEPTION_FAILURE, "badbit is set");
3063 else if(this->state & this->except & IOSTATE__Hardfail)
3064 throw_exception(EXCEPTION_FAILURE, "_Hardfail is set");
3067 /* ?clear@ios_base@std@@QAEXH@Z */
3068 /* ?clear@ios_base@std@@QEAAXH@Z */
3069 DEFINE_THISCALL_WRAPPER(ios_base_clear, 8)
3070 void __thiscall ios_base_clear(ios_base *this, IOSB_iostate state)
3072 ios_base_clear_reraise(this, state, FALSE);
3075 /* ?clear@ios_base@std@@QAEXI@Z */
3076 /* ?clear@ios_base@std@@QEAAXI@Z */
3077 DEFINE_THISCALL_WRAPPER(ios_base_clear_unsigned, 8)
3078 void __thiscall ios_base_clear_unsigned(ios_base *this, unsigned int state)
3080 ios_base_clear_reraise(this, (IOSB_iostate)state, FALSE);
3083 /* ?exceptions@ios_base@std@@QAEXH@Z */
3084 /* ?exceptions@ios_base@std@@QEAAXH@Z */
3085 DEFINE_THISCALL_WRAPPER(ios_base_exceptions_set, 8)
3086 void __thiscall ios_base_exceptions_set(ios_base *this, IOSB_iostate state)
3088 TRACE("(%p %x)\n", this, state);
3089 this->except = state & IOSTATE_mask;
3090 ios_base_clear(this, this->state);
3093 /* ?exceptions@ios_base@std@@QAEXI@Z */
3094 /* ?exceptions@ios_base@std@@QEAAXI@Z */
3095 DEFINE_THISCALL_WRAPPER(ios_base_exceptions_set_unsigned, 8)
3096 void __thiscall ios_base_exceptions_set_unsigned(ios_base *this, unsigned int state)
3098 TRACE("(%p %x)\n", this, state);
3099 ios_base_exceptions_set(this, state);
3102 /* ?exceptions@ios_base@std@@QBEHXZ */
3103 /* ?exceptions@ios_base@std@@QEBAHXZ */
3104 DEFINE_THISCALL_WRAPPER(ios_base_exceptions_get, 4)
3105 IOSB_iostate __thiscall ios_base_exceptions_get(ios_base *this)
3107 TRACE("(%p)\n", this);
3108 return this->except;
3111 /* ?copyfmt@ios_base@std@@QAEAAV12@ABV12@@Z */
3112 /* ?copyfmt@ios_base@std@@QEAAAEAV12@AEBV12@@Z */
3113 DEFINE_THISCALL_WRAPPER(ios_base_copyfmt, 8)
3114 ios_base* __thiscall ios_base_copyfmt(ios_base *this, const ios_base *rhs)
3116 TRACE("(%p %p)\n", this, rhs);
3118 if(this != rhs) {
3119 IOS_BASE_iosarray *arr_cur;
3120 IOS_BASE_fnarray *event_cur;
3122 ios_base_Tidy(this);
3124 for(arr_cur=rhs->arr; arr_cur; arr_cur=arr_cur->next) {
3125 if(arr_cur->long_val)
3126 *ios_base_iword(this, arr_cur->index) = arr_cur->long_val;
3127 if(arr_cur->ptr_val)
3128 *ios_base_pword(this, arr_cur->index) = arr_cur->ptr_val;
3130 this->stdstr = rhs->stdstr;
3131 this->fmtfl = rhs->fmtfl;
3132 this->prec = rhs->prec;
3133 this->wide = rhs->wide;
3134 locale_operator_assign(this->loc, rhs->loc);
3136 for(event_cur=rhs->calls; event_cur; event_cur=event_cur->next)
3137 ios_base_register_callback(this, event_cur->event_handler, event_cur->index);
3139 ios_base_Callfns(this, EVENT_copyfmt_event);
3140 ios_base_exceptions_set(this, rhs->except);
3143 return this;
3146 /* ??4ios_base@std@@QAEAAV01@ABV01@@Z */
3147 /* ??4ios_base@std@@QEAAAEAV01@AEBV01@@Z */
3148 DEFINE_THISCALL_WRAPPER(ios_base_assign, 8)
3149 ios_base* __thiscall ios_base_assign(ios_base *this, const ios_base *right)
3151 TRACE("(%p %p)\n", this, right);
3153 if(this != right) {
3154 this->state = right->state;
3155 ios_base_copyfmt(this, right);
3158 return this;
3161 /* ?fail@ios_base@std@@QBE_NXZ */
3162 /* ?fail@ios_base@std@@QEBA_NXZ */
3163 DEFINE_THISCALL_WRAPPER(ios_base_fail, 4)
3164 MSVCP_bool __thiscall ios_base_fail(const ios_base *this)
3166 TRACE("(%p)\n", this);
3167 return (this->state & (IOSTATE_failbit|IOSTATE_badbit)) != 0;
3170 /* ??7ios_base@std@@QBE_NXZ */
3171 /* ??7ios_base@std@@QEBA_NXZ */
3172 DEFINE_THISCALL_WRAPPER(ios_base_op_succ, 4)
3173 MSVCP_bool __thiscall ios_base_op_succ(const ios_base *this)
3175 TRACE("(%p)\n", this);
3176 return ios_base_fail(this);
3179 /* ??Bios_base@std@@QBEPAXXZ */
3180 /* ??Bios_base@std@@QEBAPEAXXZ */
3181 DEFINE_THISCALL_WRAPPER(ios_base_op_fail, 4)
3182 void* __thiscall ios_base_op_fail(const ios_base *this)
3184 TRACE("(%p)\n", this);
3185 return ios_base_fail(this) ? NULL : (void*)this;
3188 /* ?_Addstd@ios_base@std@@SAXPAV12@@Z */
3189 /* ?_Addstd@ios_base@std@@SAXPEAV12@@Z */
3190 void CDECL ios_base_Addstd(ios_base *add)
3192 FIXME("(%p) stub\n", add);
3195 /* ?_Init@ios_base@std@@IAEXXZ */
3196 /* ?_Init@ios_base@std@@IEAAXXZ */
3197 DEFINE_THISCALL_WRAPPER(ios_base__Init, 4)
3198 void __thiscall ios_base__Init(ios_base *this)
3200 TRACE("(%p)\n", this);
3202 this->stdstr = 0;
3203 this->state = this->except = IOSTATE_goodbit;
3204 this->fmtfl = FMTFLAG_skipws | FMTFLAG_dec;
3205 this->prec = 6;
3206 this->wide = 0;
3207 this->arr = NULL;
3208 this->calls = NULL;
3209 this->loc = MSVCRT_operator_new(sizeof(locale));
3210 locale_ctor(this->loc);
3213 /* ?bad@ios_base@std@@QBE_NXZ */
3214 /* ?bad@ios_base@std@@QEBA_NXZ */
3215 DEFINE_THISCALL_WRAPPER(ios_base_bad, 4)
3216 MSVCP_bool __thiscall ios_base_bad(const ios_base *this)
3218 TRACE("(%p)\n", this);
3219 return (this->state & IOSTATE_badbit) != 0;
3222 /* ?eof@ios_base@std@@QBE_NXZ */
3223 /* ?eof@ios_base@std@@QEBA_NXZ */
3224 DEFINE_THISCALL_WRAPPER(ios_base_eof, 4)
3225 MSVCP_bool __thiscall ios_base_eof(const ios_base *this)
3227 TRACE("(%p)\n", this);
3228 return (this->state & IOSTATE_eofbit) != 0;
3231 /* ?flags@ios_base@std@@QAEHH@Z */
3232 /* ?flags@ios_base@std@@QEAAHH@Z */
3233 DEFINE_THISCALL_WRAPPER(ios_base_flags_set, 8)
3234 IOSB_fmtflags __thiscall ios_base_flags_set(ios_base *this, IOSB_fmtflags flags)
3236 IOSB_fmtflags ret = this->fmtfl;
3238 TRACE("(%p %x)\n", this, flags);
3240 this->fmtfl = flags & FMTFLAG_mask;
3241 return ret;
3244 /* ?flags@ios_base@std@@QBEHXZ */
3245 /* ?flags@ios_base@std@@QEBAHXZ */
3246 DEFINE_THISCALL_WRAPPER(ios_base_flags_get, 4)
3247 IOSB_fmtflags __thiscall ios_base_flags_get(const ios_base *this)
3249 TRACE("(%p)\n", this);
3250 return this->fmtfl;
3253 /* ?getloc@ios_base@std@@QBE?AVlocale@2@XZ */
3254 /* ?getloc@ios_base@std@@QEBA?AVlocale@2@XZ */
3255 DEFINE_THISCALL_WRAPPER(ios_base_getloc, 8)
3256 locale* __thiscall ios_base_getloc(const ios_base *this, locale *ret)
3258 TRACE("(%p)\n", this);
3259 return locale_copy_ctor(ret, this->loc);
3262 /* ?good@ios_base@std@@QBE_NXZ */
3263 /* ?good@ios_base@std@@QEBA_NXZ */
3264 DEFINE_THISCALL_WRAPPER(ios_base_good, 4)
3265 MSVCP_bool __thiscall ios_base_good(const ios_base *this)
3267 TRACE("(%p)\n", this);
3268 return this->state == IOSTATE_goodbit;
3271 /* ?imbue@ios_base@std@@QAE?AVlocale@2@ABV32@@Z */
3272 /* ?imbue@ios_base@std@@QEAA?AVlocale@2@AEBV32@@Z */
3273 DEFINE_THISCALL_WRAPPER(ios_base_imbue, 12)
3274 locale* __thiscall ios_base_imbue(ios_base *this, locale *ret, const locale *loc)
3276 TRACE("(%p %p)\n", this, loc);
3277 *ret = *this->loc;
3278 locale_copy_ctor(this->loc, loc);
3279 return ret;
3282 /* ?precision@ios_base@std@@QAEHH@Z */
3283 /* ?precision@ios_base@std@@QEAA_J_J@Z */
3284 DEFINE_THISCALL_WRAPPER(ios_base_precision_set, 12)
3285 streamsize __thiscall ios_base_precision_set(ios_base *this, streamsize precision)
3287 streamsize ret = this->prec;
3289 TRACE("(%p %s)\n", this, wine_dbgstr_longlong(precision));
3291 this->prec = precision;
3292 return ret;
3295 /* ?precision@ios_base@std@@QBEHXZ */
3296 /* ?precision@ios_base@std@@QEBA_JXZ */
3297 DEFINE_THISCALL_WRAPPER(ios_base_precision_get, 4)
3298 streamsize __thiscall ios_base_precision_get(const ios_base *this)
3300 TRACE("(%p)\n", this);
3301 return this->prec;
3304 /* ?rdstate@ios_base@std@@QBEHXZ */
3305 /* ?rdstate@ios_base@std@@QEBAHXZ */
3306 DEFINE_THISCALL_WRAPPER(ios_base_rdstate, 4)
3307 IOSB_iostate __thiscall ios_base_rdstate(const ios_base *this)
3309 TRACE("(%p)\n", this);
3310 return this->state;
3313 /* ?setf@ios_base@std@@QAEHHH@Z */
3314 /* ?setf@ios_base@std@@QEAAHHH@Z */
3315 DEFINE_THISCALL_WRAPPER(ios_base_setf_mask, 12)
3316 IOSB_fmtflags __thiscall ios_base_setf_mask(ios_base *this, IOSB_fmtflags flags, IOSB_fmtflags mask)
3318 IOSB_fmtflags ret = this->fmtfl;
3320 TRACE("(%p %x %x)\n", this, flags, mask);
3322 this->fmtfl = (this->fmtfl & (~mask)) | (flags & mask & FMTFLAG_mask);
3323 return ret;
3326 /* ?setf@ios_base@std@@QAEHH@Z */
3327 /* ?setf@ios_base@std@@QEAAHH@Z */
3328 DEFINE_THISCALL_WRAPPER(ios_base_setf, 8)
3329 IOSB_fmtflags __thiscall ios_base_setf(ios_base *this, IOSB_fmtflags flags)
3331 return ios_base_setf_mask(this, flags, ~0);
3334 /* ?setstate@ios_base@std@@QAEXH_N@Z */
3335 /* ?setstate@ios_base@std@@QEAAXH_N@Z */
3336 DEFINE_THISCALL_WRAPPER(ios_base_setstate_reraise, 12)
3337 void __thiscall ios_base_setstate_reraise(ios_base *this, IOSB_iostate state, MSVCP_bool reraise)
3339 TRACE("(%p %x %x)\n", this, state, reraise);
3341 if(state != IOSTATE_goodbit)
3342 ios_base_clear_reraise(this, this->state | state, reraise);
3345 /* ?setstate@ios_base@std@@QAEXH@Z */
3346 /* ?setstate@ios_base@std@@QEAAXH@Z */
3347 DEFINE_THISCALL_WRAPPER(ios_base_setstate, 8)
3348 void __thiscall ios_base_setstate(ios_base *this, IOSB_iostate state)
3350 ios_base_setstate_reraise(this, state, FALSE);
3353 /* ?setstate@ios_base@std@@QAEXI@Z */
3354 /* ?setstate@ios_base@std@@QEAAXI@Z */
3355 DEFINE_THISCALL_WRAPPER(ios_base_setstate_unsigned, 8)
3356 void __thiscall ios_base_setstate_unsigned(ios_base *this, unsigned int state)
3358 ios_base_setstate_reraise(this, (IOSB_iostate)state, FALSE);
3361 /* ?sync_with_stdio@ios_base@std@@SA_N_N@Z */
3362 MSVCP_bool CDECL ios_base_sync_with_stdio(MSVCP_bool sync)
3364 _Lockit lock;
3365 MSVCP_bool ret;
3367 TRACE("(%x)\n", sync);
3369 _Lockit_ctor_locktype(&lock, _LOCK_STREAM);
3370 ret = ios_base_Sync;
3371 ios_base_Sync = sync;
3372 _Lockit_dtor(&lock);
3373 return ret;
3376 /* ?unsetf@ios_base@std@@QAEXH@Z */
3377 /* ?unsetf@ios_base@std@@QEAAXH@Z */
3378 DEFINE_THISCALL_WRAPPER(ios_base_unsetf, 8)
3379 void __thiscall ios_base_unsetf(ios_base *this, IOSB_fmtflags flags)
3381 TRACE("(%p %x)\n", this, flags);
3382 this->fmtfl &= ~flags;
3385 /* ?width@ios_base@std@@QAEHH@Z */
3386 /* ?width@ios_base@std@@QEAA_J_J@Z */
3387 DEFINE_THISCALL_WRAPPER(ios_base_width_set, 12)
3388 streamsize __thiscall ios_base_width_set(ios_base *this, streamsize width)
3390 streamsize ret = this->wide;
3392 TRACE("(%p %s)\n", this, wine_dbgstr_longlong(width));
3394 this->wide = width;
3395 return ret;
3398 /* ?width@ios_base@std@@QBEHXZ */
3399 /* ?width@ios_base@std@@QEBA_JXZ */
3400 DEFINE_THISCALL_WRAPPER(ios_base_width_get, 4)
3401 streamsize __thiscall ios_base_width_get(ios_base *this)
3403 TRACE("(%p)\n", this);
3404 return this->wide;
3407 /* ?xalloc@ios_base@std@@SAHXZ */
3408 int CDECL ios_base_xalloc(void)
3410 _Lockit lock;
3411 int ret;
3413 TRACE("\n");
3415 _Lockit_ctor_locktype(&lock, _LOCK_STREAM);
3416 ret = ios_base_Index++;
3417 _Lockit_dtor(&lock);
3418 return ret;
3421 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@IAE@XZ */
3422 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@IEAA@XZ */
3423 DEFINE_THISCALL_WRAPPER(basic_ios_char_ctor, 4)
3424 basic_ios_char* __thiscall basic_ios_char_ctor(basic_ios_char *this)
3426 TRACE("(%p)\n", this);
3428 ios_base_ctor(&this->base);
3429 this->base.vtable = &MSVCP_basic_ios_char_vtable;
3430 return this;
3433 /* ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z */
3434 /* ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IEAAXPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z */
3435 DEFINE_THISCALL_WRAPPER(basic_ios_char_init, 12)
3436 void __thiscall basic_ios_char_init(basic_ios_char *this, basic_streambuf_char *streambuf, MSVCP_bool isstd)
3438 TRACE("(%p %p %x)\n", this, streambuf, isstd);
3439 ios_base__Init(&this->base);
3440 this->strbuf = streambuf;
3441 this->stream = NULL;
3442 this->fillch = ' ';
3444 if(!streambuf)
3445 ios_base_setstate(&this->base, IOSTATE_badbit);
3447 if(isstd)
3448 FIXME("standard streams not handled yet\n");
3451 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
3452 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
3453 DEFINE_THISCALL_WRAPPER(basic_ios_char_ctor_streambuf, 8)
3454 basic_ios_char* __thiscall basic_ios_char_ctor_streambuf(basic_ios_char *this, basic_streambuf_char *strbuf)
3456 TRACE("(%p %p)\n", this, strbuf);
3458 basic_ios_char_ctor(this);
3459 basic_ios_char_init(this, strbuf, FALSE);
3460 return this;
3463 /* ??1?$basic_ios@DU?$char_traits@D@std@@@std@@UAE@XZ */
3464 /* ??1?$basic_ios@DU?$char_traits@D@std@@@std@@UEAA@XZ */
3465 DEFINE_THISCALL_WRAPPER(basic_ios_char_dtor, 4)
3466 void __thiscall basic_ios_char_dtor(basic_ios_char *this)
3468 TRACE("(%p)\n", this);
3469 ios_base_dtor(&this->base);
3472 DEFINE_THISCALL_WRAPPER(basic_ios_char_vector_dtor, 8)
3473 basic_ios_char* __thiscall basic_ios_char_vector_dtor(basic_ios_char *this, unsigned int flags)
3475 TRACE("(%p %x)\n", this, flags);
3476 if(flags & 2) {
3477 /* we have an array, with the number of elements stored before the first object */
3478 INT_PTR i, *ptr = (INT_PTR *)this-1;
3480 for(i=*ptr-1; i>=0; i--)
3481 basic_ios_char_dtor(this+i);
3482 MSVCRT_operator_delete(ptr);
3483 } else {
3484 basic_ios_char_dtor(this);
3485 if(flags & 1)
3486 MSVCRT_operator_delete(this);
3489 return this;
3492 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z */
3493 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z */
3494 DEFINE_THISCALL_WRAPPER(basic_ios_char_clear_reraise, 12)
3495 void __thiscall basic_ios_char_clear_reraise(basic_ios_char *this, IOSB_iostate state, MSVCP_bool reraise)
3497 TRACE("(%p %x %x)\n", this, state, reraise);
3498 ios_base_clear_reraise(&this->base, state | (this->strbuf ? IOSTATE_goodbit : IOSTATE_badbit), reraise);
3501 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXI@Z */
3502 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z */
3503 DEFINE_THISCALL_WRAPPER(basic_ios_char_clear, 8)
3504 void __thiscall basic_ios_char_clear(basic_ios_char *this, unsigned int state)
3506 basic_ios_char_clear_reraise(this, (IOSB_iostate)state, FALSE);
3509 /* ?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEAAV12@ABV12@@Z */
3510 /* ?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEBV12@@Z */
3511 DEFINE_THISCALL_WRAPPER(basic_ios_char_copyfmt, 8)
3512 basic_ios_char* __thiscall basic_ios_char_copyfmt(basic_ios_char *this, basic_ios_char *copy)
3514 TRACE("(%p %p)\n", this, copy);
3515 if(this == copy)
3516 return this;
3518 this->stream = copy->stream;
3519 this->fillch = copy->fillch;
3520 ios_base_copyfmt(&this->base, &copy->base);
3521 return this;
3524 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEDD@Z */
3525 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAADD@Z */
3526 DEFINE_THISCALL_WRAPPER(basic_ios_char_fill_set, 8)
3527 char __thiscall basic_ios_char_fill_set(basic_ios_char *this, char fill)
3529 char ret = this->fillch;
3531 TRACE("(%p %c)\n", this, fill);
3533 this->fillch = fill;
3534 return ret;
3537 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDXZ */
3538 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADXZ */
3539 DEFINE_THISCALL_WRAPPER(basic_ios_char_fill_get, 4)
3540 char __thiscall basic_ios_char_fill_get(basic_ios_char *this)
3542 TRACE("(%p)\n", this);
3543 return this->fillch;
3546 /* ?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
3547 /* ?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
3548 DEFINE_THISCALL_WRAPPER(basic_ios_char_imbue, 12)
3549 locale *__thiscall basic_ios_char_imbue(basic_ios_char *this, locale *ret, const locale *loc)
3551 TRACE("(%p %p %p)\n", this, ret, loc);
3553 if(this->strbuf) {
3554 basic_streambuf_char_pubimbue(this->strbuf, ret, loc);
3555 locale_dtor(ret);
3558 return ios_base_imbue(&this->base, ret, loc);
3561 /* ?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDDD@Z */
3562 /* ?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADDD@Z */
3563 DEFINE_THISCALL_WRAPPER(basic_ios_char_narrow, 12)
3564 char __thiscall basic_ios_char_narrow(basic_ios_char *this, char ch, char def)
3566 TRACE("(%p %c %c)\n", this, ch, def);
3567 return ctype_char_narrow_ch(ctype_char_use_facet(this->strbuf->loc), ch, def);
3570 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PAV32@@Z */
3571 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PEAV32@@Z */
3572 DEFINE_THISCALL_WRAPPER(basic_ios_char_rdbuf_set, 8)
3573 basic_streambuf_char* __thiscall basic_ios_char_rdbuf_set(basic_ios_char *this, basic_streambuf_char *streambuf)
3575 basic_streambuf_char *ret = this->strbuf;
3577 TRACE("(%p %p)\n", this, streambuf);
3579 this->strbuf = streambuf;
3580 basic_ios_char_clear(this, IOSTATE_goodbit);
3581 return ret;
3584 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ */
3585 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ */
3586 DEFINE_THISCALL_WRAPPER(basic_ios_char_rdbuf_get, 4)
3587 basic_streambuf_char* __thiscall basic_ios_char_rdbuf_get(const basic_ios_char *this)
3589 TRACE("(%p)\n", this);
3590 return this->strbuf;
3593 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z */
3594 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z */
3595 DEFINE_THISCALL_WRAPPER(basic_ios_char_setstate_reraise, 12)
3596 void __thiscall basic_ios_char_setstate_reraise(basic_ios_char *this, IOSB_iostate state, MSVCP_bool reraise)
3598 TRACE("(%p %x %x)\n", this, state, reraise);
3600 if(state != IOSTATE_goodbit)
3601 basic_ios_char_clear_reraise(this, this->base.state | state, reraise);
3604 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXI@Z */
3605 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z */
3606 DEFINE_THISCALL_WRAPPER(basic_ios_char_setstate, 8)
3607 void __thiscall basic_ios_char_setstate(basic_ios_char *this, unsigned int state)
3609 basic_ios_char_setstate_reraise(this, (IOSB_iostate)state, FALSE);
3612 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@PAV32@@Z */
3613 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@PEAV32@@Z */
3614 DEFINE_THISCALL_WRAPPER(basic_ios_char_tie_set, 8)
3615 basic_ostream_char* __thiscall basic_ios_char_tie_set(basic_ios_char *this, basic_ostream_char *ostream)
3617 basic_ostream_char *ret = this->stream;
3619 TRACE("(%p %p)\n", this, ostream);
3621 this->stream = ostream;
3622 return ret;
3625 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ */
3626 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ */
3627 DEFINE_THISCALL_WRAPPER(basic_ios_char_tie_get, 4)
3628 basic_ostream_char* __thiscall basic_ios_char_tie_get(const basic_ios_char *this)
3630 TRACE("(%p)\n", this);
3631 return this->stream;
3634 /* ?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDD@Z */
3635 /* ?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADD@Z */
3636 DEFINE_THISCALL_WRAPPER(basic_ios_char_widen, 8)
3637 char __thiscall basic_ios_char_widen(basic_ios_char *this, char ch)
3639 TRACE("(%p %c)\n", this, ch);
3640 return ctype_char_widen_ch(ctype_char_use_facet(this->strbuf->loc), ch);
3644 /* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@IAE@XZ */
3645 /* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@IEAA@XZ */
3646 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_ctor, 4)
3647 basic_ios_wchar* __thiscall basic_ios_wchar_ctor(basic_ios_wchar *this)
3649 TRACE("(%p)\n", this);
3651 ios_base_ctor(&this->base);
3652 this->base.vtable = &MSVCP_basic_ios_wchar_vtable;
3653 return this;
3656 /* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@IAE@XZ */
3657 /* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@IEAA@XZ */
3658 DEFINE_THISCALL_WRAPPER(basic_ios_short_ctor, 4)
3659 basic_ios_wchar* __thiscall basic_ios_short_ctor(basic_ios_wchar *this)
3661 basic_ios_wchar_ctor(this);
3662 this->base.vtable = &MSVCP_basic_ios_short_vtable;
3663 return this;
3666 /* ?init@?$basic_ios@_WU?$char_traits@_W@std@@@std@@IAEXPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_N@Z */
3667 /* ?init@?$basic_ios@_WU?$char_traits@_W@std@@@std@@IEAAXPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_N@Z */
3668 /* ?init@?$basic_ios@GU?$char_traits@G@std@@@std@@IAEXPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@_N@Z */
3669 /* ?init@?$basic_ios@GU?$char_traits@G@std@@@std@@IEAAXPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@_N@Z */
3670 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_init, 12)
3671 void __thiscall basic_ios_wchar_init(basic_ios_wchar *this, basic_streambuf_wchar *streambuf, MSVCP_bool isstd)
3673 TRACE("(%p %p %x)\n", this, streambuf, isstd);
3674 ios_base__Init(&this->base);
3675 this->strbuf = streambuf;
3676 this->stream = NULL;
3677 this->fillch = ' ';
3679 if(!streambuf)
3680 ios_base_setstate(&this->base, IOSTATE_badbit);
3682 if(isstd)
3683 FIXME("standard streams not handled yet\n");
3686 /* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
3687 /* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
3688 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_ctor_streambuf, 8)
3689 basic_ios_wchar* __thiscall basic_ios_wchar_ctor_streambuf(basic_ios_wchar *this, basic_streambuf_wchar *strbuf)
3691 TRACE("(%p %p)\n", this, strbuf);
3693 basic_ios_wchar_ctor(this);
3694 basic_ios_wchar_init(this, strbuf, FALSE);
3695 return this;
3698 /* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
3699 /* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
3700 DEFINE_THISCALL_WRAPPER(basic_ios_short_ctor_streambuf, 8)
3701 basic_ios_wchar* __thiscall basic_ios_short_ctor_streambuf(basic_ios_wchar *this, basic_streambuf_wchar *strbuf)
3703 basic_ios_wchar_ctor_streambuf(this, strbuf);
3704 this->base.vtable = &MSVCP_basic_ios_short_vtable;
3705 return this;
3708 /* ??1?$basic_ios@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
3709 /* ??1?$basic_ios@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
3710 /* ??1?$basic_ios@GU?$char_traits@G@std@@@std@@UAE@XZ */
3711 /* ??1?$basic_ios@GU?$char_traits@G@std@@@std@@UEAA@XZ */
3712 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_dtor, 4)
3713 void __thiscall basic_ios_wchar_dtor(basic_ios_wchar *this)
3715 TRACE("(%p)\n", this);
3716 ios_base_dtor(&this->base);
3719 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_vector_dtor, 8)
3720 basic_ios_wchar* __thiscall basic_ios_wchar_vector_dtor(basic_ios_wchar *this, unsigned int flags)
3722 TRACE("(%p %x)\n", this, flags);
3723 if(flags & 2) {
3724 /* we have an array, with the number of elements stored before the first object */
3725 INT_PTR i, *ptr = (INT_PTR *)this-1;
3727 for(i=*ptr-1; i>=0; i--)
3728 basic_ios_wchar_dtor(this+i);
3729 MSVCRT_operator_delete(ptr);
3730 } else {
3731 basic_ios_wchar_dtor(this);
3732 if(flags & 1)
3733 MSVCRT_operator_delete(this);
3736 return this;
3739 /* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z */
3740 /* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z */
3741 /* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXH_N@Z */
3742 /* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXH_N@Z */
3743 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_clear_reraise, 12)
3744 void __thiscall basic_ios_wchar_clear_reraise(basic_ios_wchar *this, IOSB_iostate state, MSVCP_bool reraise)
3746 TRACE("(%p %x %x)\n", this, state, reraise);
3747 ios_base_clear_reraise(&this->base, state | (this->strbuf ? IOSTATE_goodbit : IOSTATE_badbit), reraise);
3750 /* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXI@Z */
3751 /* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXI@Z */
3752 /* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXI@Z */
3753 /* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXI@Z */
3754 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_clear, 8)
3755 void __thiscall basic_ios_wchar_clear(basic_ios_wchar *this, unsigned int state)
3757 basic_ios_wchar_clear_reraise(this, (IOSB_iostate)state, FALSE);
3760 /* ?copyfmt@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEAAV12@ABV12@@Z */
3761 /* ?copyfmt@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEBV12@@Z */
3762 /* ?copyfmt@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEAAV12@ABV12@@Z */
3763 /* ?copyfmt@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEBV12@@Z */
3764 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_copyfmt, 8)
3765 basic_ios_wchar* __thiscall basic_ios_wchar_copyfmt(basic_ios_wchar *this, basic_ios_wchar *copy)
3767 TRACE("(%p %p)\n", this, copy);
3768 if(this == copy)
3769 return this;
3771 this->stream = copy->stream;
3772 this->fillch = copy->fillch;
3773 ios_base_copyfmt(&this->base, &copy->base);
3774 return this;
3777 /* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE_W_W@Z */
3778 /* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA_W_W@Z */
3779 /* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEGG@Z */
3780 /* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAGG@Z */
3781 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_fill_set, 8)
3782 wchar_t __thiscall basic_ios_wchar_fill_set(basic_ios_wchar *this, wchar_t fill)
3784 wchar_t ret = this->fillch;
3786 TRACE("(%p %c)\n", this, fill);
3788 this->fillch = fill;
3789 return ret;
3792 /* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBE_WXZ */
3793 /* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WXZ */
3794 /* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEGXZ */
3795 /* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAGXZ */
3796 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_fill_get, 4)
3797 wchar_t __thiscall basic_ios_wchar_fill_get(basic_ios_wchar *this)
3799 TRACE("(%p)\n", this);
3800 return this->fillch;
3803 /* ?imbue@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
3804 /* ?imbue@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
3805 /* ?imbue@?$basic_ios@GU?$char_traits@G@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
3806 /* ?imbue@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
3807 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_imbue, 12)
3808 locale *__thiscall basic_ios_wchar_imbue(basic_ios_wchar *this, locale *ret, const locale *loc)
3810 TRACE("(%p %p %p)\n", this, ret, loc);
3812 if(this->strbuf) {
3813 basic_streambuf_wchar_pubimbue(this->strbuf, ret, loc);
3814 locale_dtor(ret);
3817 return ios_base_imbue(&this->base, ret, loc);
3820 /* ?narrow@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBED_WD@Z */
3821 /* ?narrow@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAD_WD@Z */
3822 /* ?narrow@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEDGD@Z */
3823 /* ?narrow@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBADGD@Z */
3824 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_narrow, 12)
3825 char __thiscall basic_ios_wchar_narrow(basic_ios_wchar *this, wchar_t ch, char def)
3827 TRACE("(%p %c %c)\n", this, ch, def);
3828 return ctype_wchar_narrow_ch(ctype_wchar_use_facet(this->strbuf->loc), ch, def);
3831 /* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PAV32@@Z */
3832 /* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PEAV32@@Z */
3833 /* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PAV32@@Z */
3834 /* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PEAV32@@Z */
3835 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_rdbuf_set, 8)
3836 basic_streambuf_wchar* __thiscall basic_ios_wchar_rdbuf_set(basic_ios_wchar *this, basic_streambuf_wchar *streambuf)
3838 basic_streambuf_wchar *ret = this->strbuf;
3840 TRACE("(%p %p)\n", this, streambuf);
3842 this->strbuf = streambuf;
3843 basic_ios_wchar_clear(this, IOSTATE_goodbit);
3844 return ret;
3847 /* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ */
3848 /* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ */
3849 /* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@XZ */
3850 /* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@XZ */
3851 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_rdbuf_get, 4)
3852 basic_streambuf_wchar* __thiscall basic_ios_wchar_rdbuf_get(const basic_ios_wchar *this)
3854 TRACE("(%p)\n", this);
3855 return this->strbuf;
3858 /* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z */
3859 /* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z */
3860 /* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXH_N@Z */
3861 /* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXH_N@Z */
3862 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_setstate_reraise, 12)
3863 void __thiscall basic_ios_wchar_setstate_reraise(basic_ios_wchar *this, IOSB_iostate state, MSVCP_bool reraise)
3865 TRACE("(%p %x %x)\n", this, state, reraise);
3867 if(state != IOSTATE_goodbit)
3868 basic_ios_wchar_clear_reraise(this, this->base.state | state, reraise);
3871 /* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXI@Z */
3872 /* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXI@Z */
3873 /* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXI@Z */
3874 /* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXI@Z */
3875 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_setstate, 8)
3876 void __thiscall basic_ios_wchar_setstate(basic_ios_wchar *this, IOSB_iostate state)
3878 basic_ios_wchar_setstate_reraise(this, state, FALSE);
3881 /* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEPAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@PAV32@@Z */
3882 /* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@PEAV32@@Z */
3883 /* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEPAV?$basic_ostream@GU?$char_traits@G@std@@@2@PAV32@@Z */
3884 /* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAPEAV?$basic_ostream@GU?$char_traits@G@std@@@2@PEAV32@@Z */
3885 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_tie_set, 8)
3886 basic_ostream_wchar* __thiscall basic_ios_wchar_tie_set(basic_ios_wchar *this, basic_ostream_wchar *ostream)
3888 basic_ostream_wchar *ret = this->stream;
3890 TRACE("(%p %p)\n", this, ostream);
3892 this->stream = ostream;
3893 return ret;
3896 /* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ */
3897 /* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ */
3898 /* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_ostream@GU?$char_traits@G@std@@@2@XZ */
3899 /* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_ostream@GU?$char_traits@G@std@@@2@XZ */
3900 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_tie_get, 4)
3901 basic_ostream_wchar* __thiscall basic_ios_wchar_tie_get(const basic_ios_wchar *this)
3903 TRACE("(%p)\n", this);
3904 return this->stream;
3907 /* ?widen@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBE_WD@Z */
3908 /* ?widen@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WD@Z */
3909 /* ?widen@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEGD@Z */
3910 /* ?widen@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAGD@Z */
3911 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_widen, 8)
3912 wchar_t __thiscall basic_ios_wchar_widen(basic_ios_wchar *this, char ch)
3914 TRACE("(%p %c)\n", this, ch);
3915 return ctype_wchar_widen_ch(ctype_wchar_use_facet(this->strbuf->loc), ch);
3918 /* Caution: basic_ostream uses virtual inheritance.
3919 * All constructors have additional parameter that says if base class should be initialized.
3920 * Base class needs to be accessed using vbtable.
3922 static inline basic_ios_char* basic_ostream_char_get_basic_ios(basic_ostream_char *this)
3924 return (basic_ios_char*)((char*)this+this->vbtable[1]);
3927 static inline basic_ios_char* basic_ostream_char_to_basic_ios(basic_ostream_char *ptr)
3929 return (basic_ios_char*)((char*)ptr+basic_ostream_char_vbtable[1]);
3932 static inline basic_ostream_char* basic_ostream_char_from_basic_ios(basic_ios_char *ptr)
3934 return (basic_ostream_char*)((char*)ptr-basic_ostream_char_vbtable[1]);
3937 /* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */
3938 /* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */
3939 DEFINE_THISCALL_WRAPPER(basic_ostream_char_ctor, 16)
3940 basic_ostream_char* __thiscall basic_ostream_char_ctor(basic_ostream_char *this,
3941 basic_streambuf_char *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init)
3943 basic_ios_char *base;
3945 TRACE("(%p %p %d %d)\n", this, strbuf, isstd, virt_init);
3947 if(virt_init) {
3948 this->vbtable = basic_ostream_char_vbtable;
3949 base = basic_ostream_char_get_basic_ios(this);
3950 basic_ios_char_ctor(base);
3951 }else {
3952 base = basic_ostream_char_get_basic_ios(this);
3955 base->base.vtable = &MSVCP_basic_ostream_char_vtable;
3956 basic_ios_char_init(base, strbuf, isstd);
3957 return this;
3960 /* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@_N@Z */
3961 /* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z */
3962 DEFINE_THISCALL_WRAPPER(basic_ostream_char_ctor_uninitialized, 16)
3963 basic_ostream_char* __thiscall basic_ostream_char_ctor_uninitialized(basic_ostream_char *this,
3964 int uninitialized, MSVCP_bool addstd, MSVCP_bool virt_init)
3966 basic_ios_char *base;
3968 TRACE("(%p %d %x)\n", this, uninitialized, addstd);
3970 if(virt_init) {
3971 this->vbtable = basic_ostream_char_vbtable;
3972 base = basic_ostream_char_get_basic_ios(this);
3973 basic_ios_char_ctor(base);
3974 }else {
3975 base = basic_ostream_char_get_basic_ios(this);
3978 base->base.vtable = &MSVCP_basic_ostream_char_vtable;
3979 if(addstd)
3980 ios_base_Addstd(&base->base);
3981 return this;
3984 /* ??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UAE@XZ */
3985 /* ??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UEAA@XZ */
3986 DEFINE_THISCALL_WRAPPER(basic_ostream_char_dtor, 4)
3987 void __thiscall basic_ostream_char_dtor(basic_ios_char *base)
3989 basic_ostream_char *this = basic_ostream_char_from_basic_ios(base);
3991 /* don't destroy virtual base here */
3992 TRACE("(%p)\n", this);
3995 /* ??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
3996 /* ??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
3997 DEFINE_THISCALL_WRAPPER(basic_ostream_char_vbase_dtor, 4)
3998 void __thiscall basic_ostream_char_vbase_dtor(basic_ostream_char *this)
4000 TRACE("(%p)\n", this);
4001 basic_ostream_char_dtor(basic_ostream_char_to_basic_ios(this));
4002 basic_ios_char_dtor(basic_ostream_char_get_basic_ios(this));
4005 DEFINE_THISCALL_WRAPPER(basic_ostream_char_vector_dtor, 8)
4006 basic_ostream_char* __thiscall basic_ostream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
4008 basic_ostream_char *this = basic_ostream_char_from_basic_ios(base);
4010 TRACE("(%p %x)\n", this, flags);
4012 if(flags & 2) {
4013 /* we have an array, with the number of elements stored before the first object */
4014 INT_PTR i, *ptr = (INT_PTR *)this-1;
4016 for(i=*ptr-1; i>=0; i--)
4017 basic_ostream_char_vbase_dtor(this+i);
4018 MSVCRT_operator_delete(ptr);
4019 } else {
4020 basic_ostream_char_vbase_dtor(this);
4021 if(flags & 1)
4022 MSVCRT_operator_delete(this);
4025 return this;
4028 /* ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ */
4029 /* ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ */
4030 DEFINE_THISCALL_WRAPPER(basic_ostream_char_flush, 4)
4031 basic_ostream_char* __thiscall basic_ostream_char_flush(basic_ostream_char *this)
4033 /* this function is not matching C++ specification */
4034 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4036 TRACE("(%p)\n", this);
4038 if(basic_ios_char_rdbuf_get(base) && ios_base_good(&base->base)
4039 && basic_streambuf_char_pubsync(basic_ios_char_rdbuf_get(base))==-1)
4040 basic_ios_char_setstate(base, IOSTATE_badbit);
4041 return this;
4044 /* ?flush@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z */
4045 /* ?flush@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@1@AEAV21@@Z */
4046 basic_ostream_char* __cdecl flush_ostream_char(basic_ostream_char *ostream)
4048 return basic_ostream_char_flush(ostream);
4051 /* ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
4052 /* ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
4053 DEFINE_THISCALL_WRAPPER(basic_ostream_char__Osfx, 4)
4054 void __thiscall basic_ostream_char__Osfx(basic_ostream_char *this)
4056 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4058 TRACE("(%p)\n", this);
4060 if(base->base.fmtfl & FMTFLAG_unitbuf)
4061 basic_ostream_char_flush(this);
4064 /* ?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
4065 /* ?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
4066 DEFINE_THISCALL_WRAPPER(basic_ostream_char_osfx, 4)
4067 void __thiscall basic_ostream_char_osfx(basic_ostream_char *this)
4069 TRACE("(%p)\n", this);
4070 basic_ostream_char__Osfx(this);
4073 static BOOL basic_ostream_char_sentry_create(basic_ostream_char *ostr)
4075 basic_ios_char *base = basic_ostream_char_get_basic_ios(ostr);
4077 if(basic_ios_char_rdbuf_get(base))
4078 call_basic_streambuf_char__Lock(base->strbuf);
4080 if(ios_base_good(&base->base) && base->stream)
4081 basic_ostream_char_flush(base->stream);
4083 return ios_base_good(&base->base);
4086 static void basic_ostream_char_sentry_destroy(basic_ostream_char *ostr)
4088 basic_ios_char *base = basic_ostream_char_get_basic_ios(ostr);
4090 if(ios_base_good(&base->base) && !__uncaught_exception())
4091 basic_ostream_char_osfx(ostr);
4093 if(basic_ios_char_rdbuf_get(base))
4094 call_basic_streambuf_char__Unlock(base->strbuf);
4097 /* ?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE_NXZ */
4098 /* ?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA_NXZ */
4099 DEFINE_THISCALL_WRAPPER(basic_ostream_char_opfx, 4)
4100 MSVCP_bool __thiscall basic_ostream_char_opfx(basic_ostream_char *this)
4102 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4104 TRACE("(%p)\n", this);
4106 if(ios_base_good(&base->base) && base->stream)
4107 basic_ostream_char_flush(base->stream);
4108 return ios_base_good(&base->base);
4111 /* ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z */
4112 /* ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z */
4113 DEFINE_THISCALL_WRAPPER(basic_ostream_char_put, 8)
4114 basic_ostream_char* __thiscall basic_ostream_char_put(basic_ostream_char *this, char ch)
4116 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4118 TRACE("(%p %c)\n", this, ch);
4120 if(!basic_ostream_char_sentry_create(this)
4121 || basic_streambuf_char_sputc(base->strbuf, ch)==EOF) {
4122 basic_ostream_char_sentry_destroy(this);
4123 basic_ios_char_setstate(base, IOSTATE_badbit);
4124 return this;
4127 basic_ostream_char_sentry_destroy(this);
4128 return this;
4131 /* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@JH@Z */
4132 /* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z */
4133 DEFINE_THISCALL_WRAPPER(basic_ostream_char_seekp, 16)
4134 basic_ostream_char* __thiscall basic_ostream_char_seekp(basic_ostream_char *this, streamoff off, int way)
4136 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4138 TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(off), way);
4140 if(!ios_base_fail(&base->base)) {
4141 fpos_int seek;
4143 basic_streambuf_char_pubseekoff(basic_ios_char_rdbuf_get(base),
4144 &seek, off, way, OPENMODE_out);
4145 if(seek.off==0 && seek.pos==-1 && seek.state==0)
4146 basic_ios_char_setstate(base, IOSTATE_failbit);
4148 return this;
4151 /* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
4152 /* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
4153 DEFINE_THISCALL_WRAPPER(basic_ostream_char_seekp_fpos, 28)
4154 basic_ostream_char* __thiscall basic_ostream_char_seekp_fpos(basic_ostream_char *this, fpos_int pos)
4156 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4158 TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos));
4160 if(!ios_base_fail(&base->base)) {
4161 fpos_int seek;
4163 basic_streambuf_char_pubseekpos(basic_ios_char_rdbuf_get(base),
4164 &seek, pos, OPENMODE_out);
4165 if(seek.off==0 && seek.pos==-1 && seek.state==0)
4166 basic_ios_char_setstate(base, IOSTATE_failbit);
4168 return this;
4171 /* ?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@XZ */
4172 /* ?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
4173 DEFINE_THISCALL_WRAPPER(basic_ostream_char_tellp, 8)
4174 fpos_int* __thiscall basic_ostream_char_tellp(basic_ostream_char *this, fpos_int *ret)
4176 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4178 TRACE("(%p)\n", this);
4180 if(!ios_base_fail(&base->base)) {
4181 basic_streambuf_char_pubseekoff(basic_ios_char_rdbuf_get(base),
4182 ret, 0, SEEKDIR_cur, OPENMODE_out);
4183 }else {
4184 ret->off = 0;
4185 ret->pos = -1;
4186 ret->state = 0;
4188 return ret;
4191 /* ?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@PBDH@Z */
4192 /* ?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEBD_J@Z */
4193 DEFINE_THISCALL_WRAPPER(basic_ostream_char_write, 16)
4194 basic_ostream_char* __thiscall basic_ostream_char_write(basic_ostream_char *this, const char *str, streamsize count)
4196 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4198 TRACE("(%p %s %s)\n", this, debugstr_a(str), wine_dbgstr_longlong(count));
4200 if(!basic_ostream_char_sentry_create(this)
4201 || basic_streambuf_char_sputn(base->strbuf, str, count)!=count) {
4202 basic_ostream_char_sentry_destroy(this);
4203 basic_ios_char_setstate(base, IOSTATE_badbit);
4204 return this;
4207 basic_ostream_char_sentry_destroy(this);
4208 return this;
4211 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@F@Z */
4212 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@F@Z */
4213 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_short, 8)
4214 basic_ostream_char* __thiscall basic_ostream_char_print_short(basic_ostream_char *this, short val)
4216 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4217 int state = IOSTATE_goodbit;
4219 TRACE("(%p %d)\n", this, val);
4221 if(basic_ostream_char_sentry_create(this)) {
4222 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4223 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4224 ostreambuf_iterator_char dest = {0, strbuf};
4226 num_put_char_put_long(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base),
4227 (ios_base_flags_get(&base->base) & FMTFLAG_basefield & (FMTFLAG_oct | FMTFLAG_hex))
4228 ? (LONG)((unsigned short)val) : (LONG)val);
4230 basic_ostream_char_sentry_destroy(this);
4232 basic_ios_char_setstate(base, state);
4233 return this;
4236 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@G@Z */
4237 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@G@Z */
4238 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ushort, 8)
4239 basic_ostream_char* __thiscall basic_ostream_char_print_ushort(basic_ostream_char *this, unsigned short val)
4241 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4242 int state = IOSTATE_goodbit;
4244 TRACE("(%p %u)\n", this, val);
4246 if(basic_ostream_char_sentry_create(this)) {
4247 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4248 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4249 ostreambuf_iterator_char dest = {0, strbuf};
4251 num_put_char_put_ulong(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4253 basic_ostream_char_sentry_destroy(this);
4255 basic_ios_char_setstate(base, state);
4256 return this;
4259 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z */
4260 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@H@Z */
4261 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@J@Z */
4262 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@J@Z */
4263 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_int, 8)
4264 basic_ostream_char* __thiscall basic_ostream_char_print_int(basic_ostream_char *this, int val)
4266 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4267 int state = IOSTATE_goodbit;
4269 TRACE("(%p %d)\n", this, val);
4271 if(basic_ostream_char_sentry_create(this)) {
4272 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4273 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4274 ostreambuf_iterator_char dest = {0, strbuf};
4276 num_put_char_put_long(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4278 basic_ostream_char_sentry_destroy(this);
4280 basic_ios_char_setstate(base, state);
4281 return this;
4284 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@I@Z */
4285 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@I@Z */
4286 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@K@Z */
4287 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@K@Z */
4288 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_uint, 8)
4289 basic_ostream_char* __thiscall basic_ostream_char_print_uint(basic_ostream_char *this, unsigned int val)
4291 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4292 int state = IOSTATE_goodbit;
4294 TRACE("(%p %u)\n", this, val);
4296 if(basic_ostream_char_sentry_create(this)) {
4297 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4298 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4299 ostreambuf_iterator_char dest = {0, strbuf};
4301 num_put_char_put_ulong(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4303 basic_ostream_char_sentry_destroy(this);
4305 basic_ios_char_setstate(base, state);
4306 return this;
4309 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@M@Z */
4310 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@M@Z */
4311 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_float, 8)
4312 basic_ostream_char* __thiscall basic_ostream_char_print_float(basic_ostream_char *this, float val)
4314 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4315 int state = IOSTATE_goodbit;
4317 TRACE("(%p %f)\n", this, val);
4319 if(basic_ostream_char_sentry_create(this)) {
4320 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4321 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4322 ostreambuf_iterator_char dest = {0, strbuf};
4324 num_put_char_put_double(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4326 basic_ostream_char_sentry_destroy(this);
4328 basic_ios_char_setstate(base, state);
4329 return this;
4332 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@N@Z */
4333 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z */
4334 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_double, 12)
4335 basic_ostream_char* __thiscall basic_ostream_char_print_double(basic_ostream_char *this, double val)
4337 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4338 int state = IOSTATE_goodbit;
4340 TRACE("(%p %lf)\n", this, val);
4342 if(basic_ostream_char_sentry_create(this)) {
4343 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4344 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4345 ostreambuf_iterator_char dest = {0, strbuf};
4347 num_put_char_put_double(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4349 basic_ostream_char_sentry_destroy(this);
4351 basic_ios_char_setstate(base, state);
4352 return this;
4355 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@O@Z */
4356 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@O@Z */
4357 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ldouble, 12)
4358 basic_ostream_char* __thiscall basic_ostream_char_print_ldouble(basic_ostream_char *this, double val)
4360 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4361 int state = IOSTATE_goodbit;
4363 TRACE("(%p %lf)\n", this, val);
4365 if(basic_ostream_char_sentry_create(this)) {
4366 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4367 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4368 ostreambuf_iterator_char dest = {0, strbuf};
4370 num_put_char_put_ldouble(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4372 basic_ostream_char_sentry_destroy(this);
4374 basic_ios_char_setstate(base, state);
4375 return this;
4378 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
4379 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
4380 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_streambuf, 8)
4381 basic_ostream_char* __thiscall basic_ostream_char_print_streambuf(basic_ostream_char *this, basic_streambuf_char *val)
4383 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4384 IOSB_iostate state = IOSTATE_badbit;
4385 int c = '\n';
4387 TRACE("(%p %p)\n", this, val);
4389 if(basic_ostream_char_sentry_create(this)) {
4390 for(c = basic_streambuf_char_sgetc(val); c!=EOF;
4391 c = basic_streambuf_char_snextc(val)) {
4392 state = IOSTATE_goodbit;
4394 if(basic_streambuf_char_sputc(base->strbuf, c) == EOF) {
4395 state = IOSTATE_badbit;
4396 break;
4399 }else {
4400 state = IOSTATE_badbit;
4402 basic_ostream_char_sentry_destroy(this);
4404 ios_base_width_set(&base->base, 0);
4405 basic_ios_char_setstate(base, state);
4406 return this;
4409 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@PBX@Z */
4410 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEBX@Z */
4411 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ptr, 8)
4412 basic_ostream_char* __thiscall basic_ostream_char_print_ptr(basic_ostream_char *this, const void *val)
4414 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4415 int state = IOSTATE_goodbit;
4417 TRACE("(%p %p)\n", this, val);
4419 if(basic_ostream_char_sentry_create(this)) {
4420 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4421 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4422 ostreambuf_iterator_char dest = {0, strbuf};
4424 num_put_char_put_ptr(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4426 basic_ostream_char_sentry_destroy(this);
4428 basic_ios_char_setstate(base, state);
4429 return this;
4432 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_J@Z */
4433 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_J@Z */
4434 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_int64, 12)
4435 basic_ostream_char* __thiscall basic_ostream_char_print_int64(basic_ostream_char *this, __int64 val)
4437 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4438 int state = IOSTATE_goodbit;
4440 TRACE("(%p)\n", this);
4442 if(basic_ostream_char_sentry_create(this)) {
4443 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4444 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4445 ostreambuf_iterator_char dest = {0, strbuf};
4447 num_put_char_put_int64(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4449 basic_ostream_char_sentry_destroy(this);
4451 basic_ios_char_setstate(base, state);
4452 return this;
4455 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_K@Z */
4456 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_K@Z */
4457 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_uint64, 12)
4458 basic_ostream_char* __thiscall basic_ostream_char_print_uint64(basic_ostream_char *this, unsigned __int64 val)
4460 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4461 int state = IOSTATE_goodbit;
4463 TRACE("(%p)\n", this);
4465 if(basic_ostream_char_sentry_create(this)) {
4466 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4467 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4468 ostreambuf_iterator_char dest = {0, strbuf};
4470 num_put_char_put_uint64(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4472 basic_ostream_char_sentry_destroy(this);
4474 basic_ios_char_setstate(base, state);
4475 return this;
4478 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_N@Z */
4479 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_N@Z */
4480 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_bool, 8)
4481 basic_ostream_char* __thiscall basic_ostream_char_print_bool(basic_ostream_char *this, MSVCP_bool val)
4483 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4484 int state = IOSTATE_goodbit;
4486 TRACE("(%p %x)\n", this, val);
4488 if(basic_ostream_char_sentry_create(this)) {
4489 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4490 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4491 ostreambuf_iterator_char dest = {0, strbuf};
4493 num_put_char_put_bool(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4495 basic_ostream_char_sentry_destroy(this);
4497 basic_ios_char_setstate(base, state);
4498 return this;
4501 /* ?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z */
4502 /* ?endl@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@1@AEAV21@@Z */
4503 basic_ostream_char* __cdecl basic_ostream_char_endl(basic_ostream_char *ostr)
4505 TRACE("(%p)\n", ostr);
4507 basic_ostream_char_put(ostr, '\n');
4508 basic_ostream_char_flush(ostr);
4509 return ostr;
4512 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */
4513 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */
4514 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_func, 8)
4515 basic_ostream_char* __thiscall basic_ostream_char_print_func(basic_ostream_char *this,
4516 basic_ostream_char* (__cdecl *pfunc)(basic_ostream_char*))
4518 TRACE("(%p %p)\n", this, pfunc);
4519 pfunc(this);
4520 return this;
4523 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@DU?$char_traits@D@std@@@1@AAV21@@Z@Z */
4524 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@DU?$char_traits@D@std@@@1@AEAV21@@Z@Z */
4525 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_func_basic_ios, 8)
4526 basic_ostream_char* __thiscall basic_ostream_char_print_func_basic_ios(basic_ostream_char *this,
4527 basic_ios_char* (__cdecl *pfunc)(basic_ios_char*))
4529 TRACE("(%p %p)\n", this, pfunc);
4530 pfunc(basic_ostream_char_get_basic_ios(this));
4531 return this;
4534 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */
4535 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */
4536 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_func_ios_base, 8)
4537 basic_ostream_char* __thiscall basic_ostream_char_print_func_ios_base(
4538 basic_ostream_char *this, ios_base* (__cdecl *pfunc)(ios_base*))
4540 TRACE("(%p %p)\n", this, pfunc);
4541 pfunc(&basic_ostream_char_get_basic_ios(this)->base);
4542 return this;
4545 /* Caution: basic_ostream uses virtual inheritance. */
4546 static inline basic_ios_wchar* basic_ostream_wchar_get_basic_ios(basic_ostream_wchar *this)
4548 return (basic_ios_wchar*)((char*)this+this->vbtable[1]);
4551 static inline basic_ios_wchar* basic_ostream_wchar_to_basic_ios(basic_ostream_wchar *ptr)
4553 return (basic_ios_wchar*)((char*)ptr+basic_ostream_wchar_vbtable[1]);
4556 static inline basic_ostream_wchar* basic_ostream_wchar_from_basic_ios(basic_ios_wchar *ptr)
4558 return (basic_ostream_wchar*)((char*)ptr-basic_ostream_wchar_vbtable[1]);
4561 /* ??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */
4562 /* ??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */
4563 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_ctor, 16)
4564 basic_ostream_wchar* __thiscall basic_ostream_wchar_ctor(basic_ostream_wchar *this,
4565 basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init)
4567 basic_ios_wchar *base;
4569 TRACE("(%p %p %d %d)\n", this, strbuf, isstd, virt_init);
4571 if(virt_init) {
4572 this->vbtable = basic_ostream_wchar_vbtable;
4573 base = basic_ostream_wchar_get_basic_ios(this);
4574 basic_ios_wchar_ctor(base);
4575 }else {
4576 base = basic_ostream_wchar_get_basic_ios(this);
4579 base->base.vtable = &MSVCP_basic_ostream_wchar_vtable;
4580 basic_ios_wchar_init(base, strbuf, isstd);
4581 return this;
4584 /* ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z */
4585 /* ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z */
4586 DEFINE_THISCALL_WRAPPER(basic_ostream_short_ctor, 16)
4587 basic_ostream_wchar* __thiscall basic_ostream_short_ctor(basic_ostream_wchar *this,
4588 basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init)
4590 basic_ostream_wchar_ctor(this, strbuf, isstd, virt_init);
4591 basic_ostream_wchar_get_basic_ios(this)->base.vtable = &MSVCP_basic_ostream_short_vtable;
4592 return this;
4595 /* ??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE@W4_Uninitialized@1@_N@Z */
4596 /* ??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z */
4597 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_ctor_uninitialized, 16)
4598 basic_ostream_wchar* __thiscall basic_ostream_wchar_ctor_uninitialized(basic_ostream_wchar *this,
4599 int uninitialized, MSVCP_bool addstd, MSVCP_bool virt_init)
4601 basic_ios_wchar *base;
4603 TRACE("(%p %d %x)\n", this, uninitialized, addstd);
4605 if(virt_init) {
4606 this->vbtable = basic_ostream_wchar_vbtable;
4607 base = basic_ostream_wchar_get_basic_ios(this);
4608 basic_ios_wchar_ctor(base);
4609 }else {
4610 base = basic_ostream_wchar_get_basic_ios(this);
4613 base->base.vtable = &MSVCP_basic_ostream_wchar_vtable;
4614 if(addstd)
4615 ios_base_Addstd(&base->base);
4616 return this;
4619 /* ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@_N@Z */
4620 /* ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z */
4621 DEFINE_THISCALL_WRAPPER(basic_ostream_short_ctor_uninitialized, 16)
4622 basic_ostream_wchar* __thiscall basic_ostream_short_ctor_uninitialized(basic_ostream_wchar *this,
4623 int uninitialized, MSVCP_bool addstd, MSVCP_bool virt_init)
4625 basic_ostream_wchar_ctor_uninitialized(this, uninitialized, addstd, virt_init);
4626 basic_ostream_wchar_get_basic_ios(this)->base.vtable = &MSVCP_basic_ostream_short_vtable;
4627 return this;
4630 /* ??1?$basic_ostream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
4631 /* ??1?$basic_ostream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
4632 /* ??1?$basic_ostream@GU?$char_traits@G@std@@@std@@UAE@XZ */
4633 /* ??1?$basic_ostream@GU?$char_traits@G@std@@@std@@UEAA@XZ */
4634 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_dtor, 4)
4635 void __thiscall basic_ostream_wchar_dtor(basic_ios_wchar *base)
4637 basic_ostream_wchar *this = basic_ostream_wchar_from_basic_ios(base);
4639 /* don't destroy virtual base here */
4640 TRACE("(%p)\n", this);
4643 /* ??_D?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
4644 /* ??_D?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
4645 /* ??_D?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ */
4646 /* ??_D?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
4647 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_vbase_dtor, 4)
4648 void __thiscall basic_ostream_wchar_vbase_dtor(basic_ostream_wchar *this)
4650 TRACE("(%p)\n", this);
4651 basic_ostream_wchar_dtor(basic_ostream_wchar_to_basic_ios(this));
4652 basic_ios_wchar_dtor(basic_ostream_wchar_get_basic_ios(this));
4655 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_vector_dtor, 8)
4656 basic_ostream_wchar* __thiscall basic_ostream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags)
4658 basic_ostream_wchar *this = basic_ostream_wchar_from_basic_ios(base);
4660 TRACE("(%p %x)\n", this, flags);
4662 if(flags & 2) {
4663 /* we have an array, with the number of elements stored before the first object */
4664 INT_PTR i, *ptr = (INT_PTR *)this-1;
4666 for(i=*ptr-1; i>=0; i--)
4667 basic_ostream_wchar_vbase_dtor(this+i);
4668 MSVCRT_operator_delete(ptr);
4669 } else {
4670 basic_ostream_wchar_vbase_dtor(this);
4671 if(flags & 1)
4672 MSVCRT_operator_delete(this);
4675 return this;
4678 /* ?flush@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@XZ */
4679 /* ?flush@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@XZ */
4680 /* ?flush@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@XZ */
4681 /* ?flush@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@XZ */
4682 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_flush, 4)
4683 basic_ostream_wchar* __thiscall basic_ostream_wchar_flush(basic_ostream_wchar *this)
4685 /* this function is not matching C++ specification */
4686 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4688 TRACE("(%p)\n", this);
4690 if(basic_ios_wchar_rdbuf_get(base) && ios_base_good(&base->base)
4691 && basic_streambuf_wchar_pubsync(basic_ios_wchar_rdbuf_get(base))==-1)
4692 basic_ios_wchar_setstate(base, IOSTATE_badbit);
4693 return this;
4696 /* ?flush@std@@YAAAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AAV21@@Z */
4697 /* ?flush@std@@YAAEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AEAV21@@Z */
4698 /* ?flush@std@@YAAAV?$basic_ostream@GU?$char_traits@G@std@@@1@AAV21@@Z */
4699 /* ?flush@std@@YAAEAV?$basic_ostream@GU?$char_traits@G@std@@@1@AEAV21@@Z */
4700 basic_ostream_wchar* __cdecl flush_ostream_wchar(basic_ostream_wchar *ostream)
4702 return basic_ostream_wchar_flush(ostream);
4705 /* ?_Osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
4706 /* ?_Osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
4707 /* ?_Osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ */
4708 /* ?_Osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
4709 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar__Osfx, 4)
4710 void __thiscall basic_ostream_wchar__Osfx(basic_ostream_wchar *this)
4712 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4714 TRACE("(%p)\n", this);
4716 if(base->base.fmtfl & FMTFLAG_unitbuf)
4717 basic_ostream_wchar_flush(this);
4720 /* ?osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
4721 /* ?osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
4722 /* ?osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ */
4723 /* ?osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
4724 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_osfx, 4)
4725 void __thiscall basic_ostream_wchar_osfx(basic_ostream_wchar *this)
4727 TRACE("(%p)\n", this);
4728 basic_ostream_wchar__Osfx(this);
4731 static BOOL basic_ostream_wchar_sentry_create(basic_ostream_wchar *ostr)
4733 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(ostr);
4735 if(basic_ios_wchar_rdbuf_get(base))
4736 basic_streambuf_wchar__Lock(base->strbuf);
4738 if(ios_base_good(&base->base) && base->stream)
4739 basic_ostream_wchar_flush(base->stream);
4741 return ios_base_good(&base->base);
4744 static void basic_ostream_wchar_sentry_destroy(basic_ostream_wchar *ostr)
4746 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(ostr);
4748 if(ios_base_good(&base->base) && !__uncaught_exception())
4749 basic_ostream_wchar_osfx(ostr);
4751 if(basic_ios_wchar_rdbuf_get(base))
4752 basic_streambuf_wchar__Unlock(base->strbuf);
4755 /* ?opfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE_NXZ */
4756 /* ?opfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA_NXZ */
4757 /* ?opfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE_NXZ */
4758 /* ?opfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA_NXZ */
4759 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_opfx, 4)
4760 MSVCP_bool __thiscall basic_ostream_wchar_opfx(basic_ostream_wchar *this)
4762 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4764 TRACE("(%p)\n", this);
4766 if(ios_base_good(&base->base) && base->stream)
4767 basic_ostream_wchar_flush(base->stream);
4768 return ios_base_good(&base->base);
4771 /* ?put@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_W@Z */
4772 /* ?put@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_W@Z */
4773 /* ?put@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@G@Z */
4774 /* ?put@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@G@Z */
4775 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_put, 8)
4776 basic_ostream_wchar* __thiscall basic_ostream_wchar_put(basic_ostream_wchar *this, wchar_t ch)
4778 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4780 TRACE("(%p %c)\n", this, ch);
4782 if(!basic_ostream_wchar_sentry_create(this)
4783 || basic_streambuf_wchar_sputc(base->strbuf, ch)==WEOF) {
4784 basic_ostream_wchar_sentry_destroy(this);
4785 basic_ios_wchar_setstate(base, IOSTATE_badbit);
4786 return this;
4789 basic_ostream_wchar_sentry_destroy(this);
4790 return this;
4793 /* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@JH@Z */
4794 /* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JH@Z */
4795 /* ?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@JH@Z */
4796 /* ?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JH@Z */
4797 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_seekp, 16)
4798 basic_ostream_wchar* __thiscall basic_ostream_wchar_seekp(basic_ostream_wchar *this, streamoff off, int way)
4800 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4802 TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(off), way);
4804 if(!ios_base_fail(&base->base)) {
4805 fpos_int seek;
4807 basic_streambuf_wchar_pubseekoff(basic_ios_wchar_rdbuf_get(base),
4808 &seek, off, way, OPENMODE_out);
4809 if(seek.off==0 && seek.pos==-1 && seek.state==0)
4810 basic_ios_wchar_setstate(base, IOSTATE_failbit);
4812 return this;
4815 /* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
4816 /* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
4817 /* ?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
4818 /* ?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
4819 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_seekp_fpos, 28)
4820 basic_ostream_wchar* __thiscall basic_ostream_wchar_seekp_fpos(basic_ostream_wchar *this, fpos_int pos)
4822 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4824 TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos));
4826 if(!ios_base_fail(&base->base)) {
4827 fpos_int seek;
4829 basic_streambuf_wchar_pubseekpos(basic_ios_wchar_rdbuf_get(base),
4830 &seek, pos, OPENMODE_out);
4831 if(seek.off==0 && seek.pos==-1 && seek.state==0)
4832 basic_ios_wchar_setstate(base, IOSTATE_failbit);
4834 return this;
4837 /* ?tellp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@XZ */
4838 /* ?tellp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
4839 /* ?tellp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@XZ */
4840 /* ?tellp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
4841 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_tellp, 8)
4842 fpos_int* __thiscall basic_ostream_wchar_tellp(basic_ostream_wchar *this, fpos_int *ret)
4844 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4846 TRACE("(%p)\n", this);
4848 if(!ios_base_fail(&base->base)) {
4849 basic_streambuf_wchar_pubseekoff(basic_ios_wchar_rdbuf_get(base),
4850 ret, 0, SEEKDIR_cur, OPENMODE_out);
4851 }else {
4852 ret->off = 0;
4853 ret->pos = -1;
4854 ret->state = 0;
4856 return ret;
4859 /* ?write@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PB_WH@Z */
4860 /* ?write@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEB_W_J@Z */
4861 /* ?write@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@PBGH@Z */
4862 /* ?write@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEBG_J@Z */
4863 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_write, 16)
4864 basic_ostream_wchar* __thiscall basic_ostream_wchar_write(basic_ostream_wchar *this, const wchar_t *str, streamsize count)
4866 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4868 TRACE("(%p %s %s)\n", this, debugstr_w(str), wine_dbgstr_longlong(count));
4870 if(!basic_ostream_wchar_sentry_create(this)
4871 || basic_streambuf_wchar_sputn(base->strbuf, str, count)!=count) {
4872 basic_ostream_wchar_sentry_destroy(this);
4873 basic_ios_wchar_setstate(base, IOSTATE_badbit);
4874 return this;
4877 basic_ostream_wchar_sentry_destroy(this);
4878 return this;
4881 static basic_ostream_wchar* basic_ostream_print_short(basic_ostream_wchar *this, short val, const num_put *numput)
4883 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4884 int state = IOSTATE_goodbit;
4886 TRACE("(%p %d)\n", this, val);
4888 if(basic_ostream_wchar_sentry_create(this)) {
4889 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
4890 ostreambuf_iterator_wchar dest = {0, strbuf};
4892 num_put_wchar_put_long(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base),
4893 (ios_base_flags_get(&base->base) & FMTFLAG_basefield & (FMTFLAG_oct | FMTFLAG_hex))
4894 ? (LONG)((unsigned short)val) : (LONG)val);
4896 basic_ostream_wchar_sentry_destroy(this);
4898 basic_ios_wchar_setstate(base, state);
4899 return this;
4902 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@F@Z */
4903 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@F@Z */
4904 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_short, 8)
4905 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_short(basic_ostream_wchar *this, short val)
4907 return basic_ostream_print_short(this, val, num_put_wchar_use_facet(
4908 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
4911 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@F@Z */
4912 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@F@Z */
4913 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_short, 8)
4914 basic_ostream_wchar* __thiscall basic_ostream_short_print_short(basic_ostream_wchar *this, short val)
4916 return basic_ostream_print_short(this, val, num_put_short_use_facet(
4917 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
4920 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@G@Z */
4921 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@G@Z */
4922 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_ushort, 8)
4923 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_ushort(basic_ostream_wchar *this, unsigned short val)
4925 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4926 int state = IOSTATE_goodbit;
4928 TRACE("(%p %u)\n", this, val);
4930 if(basic_ostream_wchar_sentry_create(this)) {
4931 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
4932 const num_put *numput = num_put_wchar_use_facet(strbuf->loc);
4933 ostreambuf_iterator_wchar dest = {0, strbuf};
4935 num_put_wchar_put_ulong(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
4937 basic_ostream_wchar_sentry_destroy(this);
4939 basic_ios_wchar_setstate(base, state);
4940 return this;
4943 static basic_ostream_wchar* basic_ostream_print_int(basic_ostream_wchar *this, int val, const num_put *numput)
4945 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4946 int state = IOSTATE_goodbit;
4948 TRACE("(%p %d)\n", this, val);
4950 if(basic_ostream_wchar_sentry_create(this)) {
4951 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
4952 ostreambuf_iterator_wchar dest = {0, strbuf};
4954 num_put_wchar_put_long(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
4956 basic_ostream_wchar_sentry_destroy(this);
4958 basic_ios_wchar_setstate(base, state);
4959 return this;
4962 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@H@Z */
4963 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@H@Z */
4964 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@J@Z */
4965 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@J@Z */
4966 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_int, 8)
4967 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_int(basic_ostream_wchar *this, int val)
4969 return basic_ostream_print_int(this, val, num_put_wchar_use_facet(
4970 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
4973 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@H@Z */
4974 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@H@Z */
4975 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@J@Z */
4976 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@J@Z */
4977 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_int, 8)
4978 basic_ostream_wchar* __thiscall basic_ostream_short_print_int(basic_ostream_wchar *this, int val)
4980 return basic_ostream_print_int(this, val, num_put_short_use_facet(
4981 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
4984 static basic_ostream_wchar* basic_ostream_print_uint(basic_ostream_wchar *this, unsigned int val, const num_put *numput)
4986 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4987 int state = IOSTATE_goodbit;
4989 TRACE("(%p %u)\n", this, val);
4991 if(basic_ostream_wchar_sentry_create(this)) {
4992 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
4993 ostreambuf_iterator_wchar dest = {0, strbuf};
4995 num_put_wchar_put_ulong(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
4997 basic_ostream_wchar_sentry_destroy(this);
4999 basic_ios_wchar_setstate(base, state);
5000 return this;
5003 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@I@Z */
5004 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@I@Z */
5005 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@K@Z */
5006 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@K@Z */
5007 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_uint, 8)
5008 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_uint(basic_ostream_wchar *this, unsigned int val)
5010 return basic_ostream_print_uint(this, val, num_put_wchar_use_facet(
5011 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5014 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@I@Z */
5015 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@I@Z */
5016 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@K@Z */
5017 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@K@Z */
5018 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_uint, 8)
5019 basic_ostream_wchar* __thiscall basic_ostream_short_print_uint(basic_ostream_wchar *this, unsigned int val)
5021 return basic_ostream_print_uint(this, val, num_put_short_use_facet(
5022 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5025 static basic_ostream_wchar* basic_ostream_print_float(basic_ostream_wchar *this, float val, const num_put *numput)
5027 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5028 int state = IOSTATE_goodbit;
5030 TRACE("(%p %f)\n", this, val);
5032 if(basic_ostream_wchar_sentry_create(this)) {
5033 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
5034 ostreambuf_iterator_wchar dest = {0, strbuf};
5036 num_put_wchar_put_double(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
5038 basic_ostream_wchar_sentry_destroy(this);
5040 basic_ios_wchar_setstate(base, state);
5041 return this;
5044 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@M@Z */
5045 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@M@Z */
5046 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_float, 8)
5047 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_float(basic_ostream_wchar *this, float val)
5049 return basic_ostream_print_float(this, val, num_put_wchar_use_facet(
5050 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5053 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@M@Z */
5054 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@M@Z */
5055 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_float, 8)
5056 basic_ostream_wchar* __thiscall basic_ostream_short_print_float(basic_ostream_wchar *this, float val)
5058 return basic_ostream_print_float(this, val, num_put_short_use_facet(
5059 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5062 static basic_ostream_wchar* basic_ostream_print_double(basic_ostream_wchar *this, double val, const num_put *numput)
5064 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5065 int state = IOSTATE_goodbit;
5067 TRACE("(%p %lf)\n", this, val);
5069 if(basic_ostream_wchar_sentry_create(this)) {
5070 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
5071 ostreambuf_iterator_wchar dest = {0, strbuf};
5073 num_put_wchar_put_double(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
5075 basic_ostream_wchar_sentry_destroy(this);
5077 basic_ios_wchar_setstate(base, state);
5078 return this;
5081 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@N@Z */
5082 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@N@Z */
5083 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_double, 12)
5084 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_double(basic_ostream_wchar *this, double val)
5086 return basic_ostream_print_double(this, val, num_put_wchar_use_facet(
5087 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5090 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@N@Z */
5091 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@N@Z */
5092 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_double, 12)
5093 basic_ostream_wchar* __thiscall basic_ostream_short_print_double(basic_ostream_wchar *this, double val)
5095 return basic_ostream_print_double(this, val, num_put_short_use_facet(
5096 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5099 static basic_ostream_wchar* basic_ostream_print_ldouble(basic_ostream_wchar *this, double val, const num_put *numput)
5101 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5102 int state = IOSTATE_goodbit;
5104 TRACE("(%p %lf)\n", this, val);
5106 if(basic_ostream_wchar_sentry_create(this)) {
5107 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
5108 ostreambuf_iterator_wchar dest = {0, strbuf};
5110 num_put_wchar_put_ldouble(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
5112 basic_ostream_wchar_sentry_destroy(this);
5114 basic_ios_wchar_setstate(base, state);
5115 return this;
5118 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@O@Z */
5119 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@O@Z */
5120 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_ldouble, 12)
5121 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_ldouble(basic_ostream_wchar *this, double val)
5123 return basic_ostream_print_ldouble(this, val, num_put_wchar_use_facet(
5124 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5127 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@O@Z */
5128 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@O@Z */
5129 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_ldouble, 12)
5130 basic_ostream_wchar* __thiscall basic_ostream_short_print_ldouble(basic_ostream_wchar *this, double val)
5132 return basic_ostream_print_ldouble(this, val, num_put_short_use_facet(
5133 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5136 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
5137 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
5138 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
5139 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
5140 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_streambuf, 8)
5141 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_streambuf(basic_ostream_wchar *this, basic_streambuf_wchar *val)
5143 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5144 IOSB_iostate state = IOSTATE_badbit;
5145 unsigned short c = '\n';
5147 TRACE("(%p %p)\n", this, val);
5149 if(basic_ostream_wchar_sentry_create(this)) {
5150 for(c = basic_streambuf_wchar_sgetc(val); c!=WEOF;
5151 c = basic_streambuf_wchar_snextc(val)) {
5152 state = IOSTATE_goodbit;
5154 if(basic_streambuf_wchar_sputc(base->strbuf, c) == WEOF) {
5155 state = IOSTATE_badbit;
5156 break;
5159 }else {
5160 state = IOSTATE_badbit;
5162 basic_ostream_wchar_sentry_destroy(this);
5164 ios_base_width_set(&base->base, 0);
5165 basic_ios_wchar_setstate(base, state);
5166 return this;
5169 static basic_ostream_wchar* basic_ostream_print_ptr(basic_ostream_wchar *this, const void *val, const num_put *numput)
5171 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5172 int state = IOSTATE_goodbit;
5174 TRACE("(%p %p)\n", this, val);
5176 if(basic_ostream_wchar_sentry_create(this)) {
5177 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
5178 ostreambuf_iterator_wchar dest = {0, strbuf};
5180 num_put_wchar_put_ptr(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
5182 basic_ostream_wchar_sentry_destroy(this);
5184 basic_ios_wchar_setstate(base, state);
5185 return this;
5188 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PBX@Z */
5189 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEBX@Z */
5190 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_ptr, 8)
5191 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_ptr(basic_ostream_wchar *this, const void *val)
5193 return basic_ostream_print_ptr(this, val, num_put_wchar_use_facet(
5194 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5197 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@PBX@Z */
5198 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEBX@Z */
5199 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_ptr, 8)
5200 basic_ostream_wchar* __thiscall basic_ostream_short_print_ptr(basic_ostream_wchar *this, const void *val)
5202 return basic_ostream_print_ptr(this, val, num_put_short_use_facet(
5203 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5206 static basic_ostream_wchar* basic_ostream_print_int64(basic_ostream_wchar *this, __int64 val, const num_put *numput)
5208 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5209 int state = IOSTATE_goodbit;
5211 TRACE("(%p)\n", this);
5213 if(basic_ostream_wchar_sentry_create(this)) {
5214 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
5215 ostreambuf_iterator_wchar dest = {0, strbuf};
5217 num_put_wchar_put_int64(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
5219 basic_ostream_wchar_sentry_destroy(this);
5221 basic_ios_wchar_setstate(base, state);
5222 return this;
5225 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_J@Z */
5226 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_J@Z */
5227 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_int64, 12)
5228 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_int64(basic_ostream_wchar *this, __int64 val)
5230 return basic_ostream_print_int64(this, val, num_put_wchar_use_facet(
5231 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5234 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_J@Z */
5235 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_J@Z */
5236 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_int64, 12)
5237 basic_ostream_wchar* __thiscall basic_ostream_short_print_int64(basic_ostream_wchar *this, __int64 val)
5239 return basic_ostream_print_int64(this, val, num_put_short_use_facet(
5240 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5243 static basic_ostream_wchar* basic_ostream_print_uint64(basic_ostream_wchar *this, unsigned __int64 val, const num_put *numput)
5245 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5246 int state = IOSTATE_goodbit;
5248 TRACE("(%p)\n", this);
5250 if(basic_ostream_wchar_sentry_create(this)) {
5251 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
5252 ostreambuf_iterator_wchar dest = {0, strbuf};
5254 num_put_wchar_put_uint64(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
5256 basic_ostream_wchar_sentry_destroy(this);
5258 basic_ios_wchar_setstate(base, state);
5259 return this;
5262 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_K@Z */
5263 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_K@Z */
5264 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_uint64, 12)
5265 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_uint64(basic_ostream_wchar *this, unsigned __int64 val)
5267 return basic_ostream_print_uint64(this, val, num_put_wchar_use_facet(
5268 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5271 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_K@Z */
5272 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_K@Z */
5273 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_uint64, 12)
5274 basic_ostream_wchar* __thiscall basic_ostream_short_print_uint64(basic_ostream_wchar *this, unsigned __int64 val)
5276 return basic_ostream_print_uint64(this, val, num_put_short_use_facet(
5277 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5280 static basic_ostream_wchar* basic_ostream_print_bool(basic_ostream_wchar *this, MSVCP_bool val, const num_put *numput)
5282 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5283 int state = IOSTATE_goodbit;
5285 TRACE("(%p %x)\n", this, val);
5287 if(basic_ostream_wchar_sentry_create(this)) {
5288 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
5289 ostreambuf_iterator_wchar dest = {0, strbuf};
5291 num_put_wchar_put_bool(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
5293 basic_ostream_wchar_sentry_destroy(this);
5295 basic_ios_wchar_setstate(base, state);
5296 return this;
5299 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_N@Z */
5300 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_N@Z */
5301 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_bool, 8)
5302 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_bool(basic_ostream_wchar *this, MSVCP_bool val)
5304 return basic_ostream_print_bool(this, val, num_put_wchar_use_facet(
5305 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5308 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_N@Z */
5309 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_N@Z */
5310 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_bool, 8)
5311 basic_ostream_wchar* __thiscall basic_ostream_short_print_bool(basic_ostream_wchar *this, MSVCP_bool val)
5313 return basic_ostream_print_bool(this, val, num_put_short_use_facet(
5314 basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
5317 /* ?endl@std@@YAAAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AAV21@@Z */
5318 /* ?endl@std@@YAAEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AEAV21@@Z */
5319 /* ?endl@std@@YAAAV?$basic_ostream@GU?$char_traits@G@std@@@1@AAV21@@Z */
5320 /* ?endl@std@@YAAEAV?$basic_ostream@GU?$char_traits@G@std@@@1@AEAV21@@Z */
5321 basic_ostream_wchar* __cdecl basic_ostream_wchar_endl(basic_ostream_wchar *ostr)
5323 TRACE("(%p)\n", ostr);
5325 basic_ostream_wchar_put(ostr, '\n');
5326 basic_ostream_wchar_flush(ostr);
5327 return ostr;
5330 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */
5331 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */
5332 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */
5333 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */
5334 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_func, 8)
5335 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_func(basic_ostream_wchar *this,
5336 basic_ostream_wchar* (__cdecl *pfunc)(basic_ostream_wchar*))
5338 TRACE("(%p %p)\n", this, pfunc);
5339 pfunc(this);
5340 return this;
5343 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AAV21@@Z@Z */
5344 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AEAV21@@Z@Z */
5345 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@GU?$char_traits@G@std@@@1@AAV21@@Z@Z */
5346 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@GU?$char_traits@G@std@@@1@AEAV21@@Z@Z */
5347 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_func_basic_ios, 8)
5348 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_func_basic_ios(basic_ostream_wchar *this,
5349 basic_ios_wchar* (__cdecl *pfunc)(basic_ios_wchar*))
5351 TRACE("(%p %p)\n", this, pfunc);
5352 pfunc(basic_ostream_wchar_get_basic_ios(this));
5353 return this;
5356 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */
5357 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */
5358 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */
5359 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */
5360 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_func_ios_base, 8)
5361 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_func_ios_base(
5362 basic_ostream_wchar *this, ios_base* (__cdecl *pfunc)(ios_base*))
5364 TRACE("(%p %p)\n", this, pfunc);
5365 pfunc(&basic_ostream_wchar_get_basic_ios(this)->base);
5366 return this;
5369 /* Caution: basic_istream uses virtual inheritance. */
5370 static inline basic_ios_char* basic_istream_char_get_basic_ios(basic_istream_char *this)
5372 return (basic_ios_char*)((char*)this+this->vbtable[1]);
5375 static inline basic_ios_char* basic_istream_char_to_basic_ios(basic_istream_char *ptr)
5377 return (basic_ios_char*)((char*)ptr+basic_istream_char_vbtable[1]);
5380 static inline basic_istream_char* basic_istream_char_from_basic_ios(basic_ios_char *ptr)
5382 return (basic_istream_char*)((char*)ptr-basic_istream_char_vbtable[1]);
5385 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N1@Z */
5386 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N1@Z */
5387 DEFINE_THISCALL_WRAPPER(basic_istream_char_ctor_init, 20)
5388 basic_istream_char* __thiscall basic_istream_char_ctor_init(basic_istream_char *this, basic_streambuf_char *strbuf, MSVCP_bool isstd, MSVCP_bool noinit, MSVCP_bool virt_init)
5390 basic_ios_char *base;
5392 TRACE("(%p %p %d %d %d)\n", this, strbuf, isstd, noinit, virt_init);
5394 if(virt_init) {
5395 this->vbtable = basic_istream_char_vbtable;
5396 base = basic_istream_char_get_basic_ios(this);
5397 basic_ios_char_ctor(base);
5398 }else {
5399 base = basic_istream_char_get_basic_ios(this);
5402 base->base.vtable = &MSVCP_basic_istream_char_vtable;
5403 this->count = 0;
5404 if(!noinit)
5405 basic_ios_char_init(base, strbuf, isstd);
5406 return this;
5409 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */
5410 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */
5411 DEFINE_THISCALL_WRAPPER(basic_istream_char_ctor, 16)
5412 basic_istream_char* __thiscall basic_istream_char_ctor(basic_istream_char *this, basic_streambuf_char *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init)
5414 return basic_istream_char_ctor_init(this, strbuf, isstd, FALSE, virt_init);
5417 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@@Z */
5418 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@@Z */
5419 DEFINE_THISCALL_WRAPPER(basic_istream_char_ctor_uninitialized, 12)
5420 basic_istream_char* __thiscall basic_istream_char_ctor_uninitialized(basic_istream_char *this, int uninitialized, MSVCP_bool virt_init)
5422 basic_ios_char *base;
5424 TRACE("(%p %d %d)\n", this, uninitialized, virt_init);
5426 if(virt_init) {
5427 this->vbtable = basic_istream_char_vbtable;
5428 base = basic_istream_char_get_basic_ios(this);
5429 basic_ios_char_ctor(base);
5430 }else {
5431 base = basic_istream_char_get_basic_ios(this);
5434 base->base.vtable = &MSVCP_basic_istream_char_vtable;
5435 ios_base_Addstd(&base->base);
5436 return this;
5439 /* ??1?$basic_istream@DU?$char_traits@D@std@@@std@@UAE@XZ */
5440 /* ??1?$basic_istream@DU?$char_traits@D@std@@@std@@UEAA@XZ */
5441 DEFINE_THISCALL_WRAPPER(basic_istream_char_dtor, 4)
5442 void __thiscall basic_istream_char_dtor(basic_ios_char *base)
5444 basic_istream_char *this = basic_istream_char_from_basic_ios(base);
5446 /* don't destroy virtual base here */
5447 TRACE("(%p)\n", this);
5450 /* ??_D?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXXZ */
5451 /* ??_D?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
5452 DEFINE_THISCALL_WRAPPER(basic_istream_char_vbase_dtor, 4)
5453 void __thiscall basic_istream_char_vbase_dtor(basic_istream_char *this)
5455 TRACE("(%p)\n", this);
5456 basic_istream_char_dtor(basic_istream_char_to_basic_ios(this));
5457 basic_ios_char_dtor(basic_istream_char_get_basic_ios(this));
5460 DEFINE_THISCALL_WRAPPER(basic_istream_char_vector_dtor, 8)
5461 basic_istream_char* __thiscall basic_istream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
5463 basic_istream_char *this = basic_istream_char_from_basic_ios(base);
5465 TRACE("(%p %x)\n", this, flags);
5467 if(flags & 2) {
5468 /* we have an array, with the number of elements stored before the first object */
5469 INT_PTR i, *ptr = (INT_PTR *)this-1;
5471 for(i=*ptr-1; i>=0; i--)
5472 basic_istream_char_vbase_dtor(this+i);
5473 MSVCRT_operator_delete(ptr);
5474 } else {
5475 basic_istream_char_vbase_dtor(this);
5476 if(flags & 1)
5477 MSVCRT_operator_delete(this);
5480 return this;
5483 /* ?_Ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE_N_N@Z */
5484 /* ?_Ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_N_N@Z */
5485 DEFINE_THISCALL_WRAPPER(basic_istream_char__Ipfx, 8)
5486 MSVCP_bool __thiscall basic_istream_char__Ipfx(basic_istream_char *this, MSVCP_bool noskip)
5488 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5490 TRACE("(%p %d)\n", this, noskip);
5492 if(ios_base_good(&base->base)) {
5493 if(basic_ios_char_tie_get(base))
5494 basic_ostream_char_flush(basic_ios_char_tie_get(base));
5496 if(!noskip && (ios_base_flags_get(&base->base) & FMTFLAG_skipws)) {
5497 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5498 const ctype_char *ctype = ctype_char_use_facet(base->strbuf->loc);
5499 int ch;
5501 for(ch = basic_streambuf_char_sgetc(strbuf); ;
5502 ch = basic_streambuf_char_snextc(strbuf)) {
5503 if(ch == EOF) {
5504 basic_ios_char_setstate(base, IOSTATE_eofbit);
5505 break;
5508 if(!ctype_char_is_ch(ctype, _SPACE|_BLANK, ch))
5509 break;
5514 if(!ios_base_good(&base->base)) {
5515 basic_ios_char_setstate(base, IOSTATE_failbit);
5516 return FALSE;
5519 return TRUE;
5522 /* ?ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE_N_N@Z */
5523 /* ?ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_N_N@Z */
5524 DEFINE_THISCALL_WRAPPER(basic_istream_char_ipfx, 8)
5525 MSVCP_bool __thiscall basic_istream_char_ipfx(basic_istream_char *this, MSVCP_bool noskip)
5527 return basic_istream_char__Ipfx(this, noskip);
5530 /* ?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXXZ */
5531 /* ?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
5532 DEFINE_THISCALL_WRAPPER(basic_istream_char_isfx, 4)
5533 void __thiscall basic_istream_char_isfx(basic_istream_char *this)
5535 TRACE("(%p)\n", this);
5538 static BOOL basic_istream_char_sentry_create(basic_istream_char *istr, MSVCP_bool noskip)
5540 basic_ios_char *base = basic_istream_char_get_basic_ios(istr);
5542 if(basic_ios_char_rdbuf_get(base))
5543 call_basic_streambuf_char__Lock(base->strbuf);
5545 return basic_istream_char_ipfx(istr, noskip);
5548 static void basic_istream_char_sentry_destroy(basic_istream_char *istr)
5550 basic_ios_char *base = basic_istream_char_get_basic_ios(istr);
5552 if(basic_ios_char_rdbuf_get(base))
5553 call_basic_streambuf_char__Unlock(base->strbuf);
5556 /* ?gcount@?$basic_istream@DU?$char_traits@D@std@@@std@@QBEHXZ */
5557 /* ?gcount@?$basic_istream@DU?$char_traits@D@std@@@std@@QEBA_JXZ */
5558 DEFINE_THISCALL_WRAPPER(basic_istream_char_gcount, 4)
5559 int __thiscall basic_istream_char_gcount(const basic_istream_char *this)
5561 TRACE("(%p)\n", this);
5562 return this->count;
5565 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ */
5566 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ */
5567 DEFINE_THISCALL_WRAPPER(basic_istream_char_get, 4)
5568 int __thiscall basic_istream_char_get(basic_istream_char *this)
5570 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5571 int ret;
5573 TRACE("(%p)\n", this);
5575 this->count = 0;
5577 if(!basic_istream_char_sentry_create(this, TRUE)) {
5578 basic_istream_char_sentry_destroy(this);
5579 return EOF;
5582 ret = basic_streambuf_char_sbumpc(basic_ios_char_rdbuf_get(base));
5583 basic_istream_char_sentry_destroy(this);
5584 if(ret == EOF)
5585 basic_ios_char_setstate(base, IOSTATE_eofbit|IOSTATE_failbit);
5586 else
5587 this->count++;
5589 return ret;
5592 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAD@Z */
5593 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAD@Z */
5594 DEFINE_THISCALL_WRAPPER(basic_istream_char_get_ch, 8)
5595 basic_istream_char* __thiscall basic_istream_char_get_ch(basic_istream_char *this, char *ch)
5597 int ret;
5599 TRACE("(%p %p)\n", this, ch);
5601 ret = basic_istream_char_get(this);
5602 if(ret != EOF)
5603 *ch = (char)ret;
5604 return this;
5607 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADHD@Z */
5608 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_JD@Z */
5609 DEFINE_THISCALL_WRAPPER(basic_istream_char_get_str_delim, 20)
5610 basic_istream_char* __thiscall basic_istream_char_get_str_delim(basic_istream_char *this, char *str, streamsize count, char delim)
5612 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5613 int ch = delim;
5615 TRACE("(%p %p %s %c)\n", this, str, wine_dbgstr_longlong(count), delim);
5617 this->count = 0;
5619 if(basic_istream_char_sentry_create(this, TRUE)) {
5620 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5622 for(ch = basic_streambuf_char_sgetc(strbuf); count>1;
5623 ch = basic_streambuf_char_snextc(strbuf)) {
5624 if(ch==EOF || ch==delim)
5625 break;
5627 *str++ = ch;
5628 this->count++;
5629 count--;
5632 basic_istream_char_sentry_destroy(this);
5634 basic_ios_char_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) |
5635 (ch==EOF ? IOSTATE_eofbit : IOSTATE_goodbit));
5636 if(count > 0)
5637 *str = 0;
5638 return this;
5641 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADH@Z */
5642 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z */
5643 DEFINE_THISCALL_WRAPPER(basic_istream_char_get_str, 16)
5644 basic_istream_char* __thiscall basic_istream_char_get_str(basic_istream_char *this, char *str, streamsize count)
5646 return basic_istream_char_get_str_delim(this, str, count, '\n');
5649 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAV?$basic_streambuf@DU?$char_traits@D@std@@@2@D@Z */
5650 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@D@Z */
5651 DEFINE_THISCALL_WRAPPER(basic_istream_char_get_streambuf_delim, 12)
5652 basic_istream_char* __thiscall basic_istream_char_get_streambuf_delim(basic_istream_char *this, basic_streambuf_char *strbuf, char delim)
5654 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5655 int ch = delim;
5657 TRACE("(%p %p %c)\n", this, strbuf, delim);
5659 this->count = 0;
5661 if(basic_istream_char_sentry_create(this, TRUE)) {
5662 basic_streambuf_char *strbuf_read = basic_ios_char_rdbuf_get(base);
5664 for(ch = basic_streambuf_char_sgetc(strbuf_read); ;
5665 ch = basic_streambuf_char_snextc(strbuf_read)) {
5666 if(ch==EOF || ch==delim)
5667 break;
5669 if(basic_streambuf_char_sputc(strbuf, ch) == EOF)
5670 break;
5671 this->count++;
5674 basic_istream_char_sentry_destroy(this);
5676 basic_ios_char_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) |
5677 (ch==EOF ? IOSTATE_eofbit : IOSTATE_goodbit));
5678 return this;
5681 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z */
5682 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z */
5683 DEFINE_THISCALL_WRAPPER(basic_istream_char_get_streambuf, 8)
5684 basic_istream_char* __thiscall basic_istream_char_get_streambuf(basic_istream_char *this, basic_streambuf_char *strbuf)
5686 return basic_istream_char_get_streambuf_delim(this, strbuf, '\n');
5689 /* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADHD@Z */
5690 /* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_JD@Z */
5691 DEFINE_THISCALL_WRAPPER(basic_istream_char_getline_delim, 20)
5692 basic_istream_char* __thiscall basic_istream_char_getline_delim(basic_istream_char *this, char *str, streamsize count, char delim)
5694 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5695 int ch = (unsigned char)delim;
5697 TRACE("(%p %p %s %c)\n", this, str, wine_dbgstr_longlong(count), delim);
5699 this->count = 0;
5701 if(basic_istream_char_sentry_create(this, TRUE) && count>0) {
5702 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5704 while(count > 1) {
5705 ch = basic_streambuf_char_sbumpc(strbuf);
5707 if(ch==EOF || ch==(unsigned char)delim)
5708 break;
5710 *str++ = ch;
5711 this->count++;
5712 count--;
5715 if(ch == (unsigned char)delim)
5716 this->count++;
5717 else if(ch != EOF) {
5718 ch = basic_streambuf_char_sgetc(strbuf);
5720 if(ch == (unsigned char)delim) {
5721 basic_streambuf_char__Gninc(strbuf);
5722 this->count++;
5726 basic_istream_char_sentry_destroy(this);
5728 basic_ios_char_setstate(base, (ch==EOF ? IOSTATE_eofbit : IOSTATE_goodbit) |
5729 (!this->count || (ch!=(unsigned char)delim && ch!=EOF) ? IOSTATE_failbit : IOSTATE_goodbit));
5730 if(count > 0)
5731 *str = 0;
5732 return this;
5735 /* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADH@Z */
5736 /* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z */
5737 DEFINE_THISCALL_WRAPPER(basic_istream_char_getline, 16)
5738 basic_istream_char* __thiscall basic_istream_char_getline(basic_istream_char *this, char *str, streamsize count)
5740 return basic_istream_char_getline_delim(this, str, count, '\n');
5743 /* ?ignore@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@HH@Z */
5744 /* ?ignore@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z */
5745 DEFINE_THISCALL_WRAPPER(basic_istream_char_ignore, 16)
5746 basic_istream_char* __thiscall basic_istream_char_ignore(basic_istream_char *this, streamsize count, int delim)
5748 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5749 int ch = (unsigned char)delim;
5750 unsigned int state;
5752 TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(count), delim);
5754 this->count = 0;
5756 if(basic_istream_char_sentry_create(this, TRUE)) {
5757 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5758 state = IOSTATE_goodbit;
5760 while(count > 0) {
5761 ch = basic_streambuf_char_sbumpc(strbuf);
5763 if(ch==EOF) {
5764 state = IOSTATE_eofbit;
5765 break;
5768 if(ch==(unsigned char)delim)
5769 break;
5771 this->count++;
5772 if(count != INT_MAX)
5773 count--;
5775 }else
5776 state = IOSTATE_failbit;
5777 basic_istream_char_sentry_destroy(this);
5779 basic_ios_char_setstate(base, state);
5780 return this;
5783 /* ?ws@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@1@AAV21@@Z */
5784 /* ?ws@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@1@AEAV21@@Z */
5785 basic_istream_char* __cdecl ws_basic_istream_char(basic_istream_char *istream)
5787 basic_ios_char *base = basic_istream_char_get_basic_ios(istream);
5788 int ch = '\n';
5790 TRACE("(%p)\n", istream);
5792 if(basic_istream_char_sentry_create(istream, TRUE)) {
5793 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5794 const ctype_char *ctype = ctype_char_use_facet(strbuf->loc);
5796 for(ch = basic_streambuf_char_sgetc(strbuf); ctype_char_is_ch(ctype, _SPACE, ch);
5797 ch = basic_streambuf_char_snextc(strbuf)) {
5798 if(ch == EOF)
5799 break;
5802 basic_istream_char_sentry_destroy(istream);
5804 if(ch == EOF)
5805 basic_ios_char_setstate(base, IOSTATE_eofbit);
5806 return istream;
5809 /* ?peek@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ */
5810 /* ?peek@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ */
5811 DEFINE_THISCALL_WRAPPER(basic_istream_char_peek, 4)
5812 int __thiscall basic_istream_char_peek(basic_istream_char *this)
5814 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5815 int ret = EOF;
5817 TRACE("(%p)\n", this);
5819 this->count = 0;
5821 if(basic_istream_char_sentry_create(this, TRUE))
5822 ret = basic_streambuf_char_sgetc(basic_ios_char_rdbuf_get(base));
5823 basic_istream_char_sentry_destroy(this);
5825 if (ret == EOF)
5826 basic_ios_char_setstate(base, IOSTATE_eofbit);
5828 return ret;
5831 /* ?_Read_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADIH@Z */
5832 /* ?_Read_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_K_J@Z */
5833 static basic_istream_char* basic_istream_char__Read_s(basic_istream_char *this, char *str, MSVCP_size_t size, streamsize count)
5835 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5836 IOSB_iostate state = IOSTATE_goodbit;
5838 TRACE("(%p %p %lu %s)\n", this, str, size, wine_dbgstr_longlong(count));
5840 if(basic_istream_char_sentry_create(this, TRUE)) {
5841 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5843 this->count = basic_streambuf_char__Sgetn_s(strbuf, str, size, count);
5844 if(this->count != count)
5845 state |= IOSTATE_failbit | IOSTATE_eofbit;
5846 }else {
5847 this->count = 0;
5849 basic_istream_char_sentry_destroy(this);
5851 basic_ios_char_setstate(base, state);
5852 return this;
5855 /* ?read@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADH@Z */
5856 /* ?read@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z */
5857 DEFINE_THISCALL_WRAPPER(basic_istream_char_read, 16)
5858 basic_istream_char* __thiscall basic_istream_char_read(basic_istream_char *this, char *str, streamsize count)
5860 return basic_istream_char__Read_s(this, str, count, count);
5863 /* ?_Readsome_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHPADIH@Z */
5864 /* ?_Readsome_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_K_J@Z */
5865 static streamsize basic_istream_char__Readsome_s(basic_istream_char *this, char *str, MSVCP_size_t size, streamsize count)
5867 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5868 IOSB_iostate state = IOSTATE_goodbit;
5870 TRACE("(%p %p %lu %s)\n", this, str, size, wine_dbgstr_longlong(count));
5872 this->count = 0;
5874 if(basic_istream_char_sentry_create(this, TRUE)) {
5875 streamsize avail = basic_streambuf_char_in_avail(basic_ios_char_rdbuf_get(base));
5876 if(avail > count)
5877 avail = count;
5879 if(avail == -1)
5880 state |= IOSTATE_eofbit;
5881 else if(avail > 0)
5882 basic_istream_char__Read_s(this, str, size, avail);
5883 }else {
5884 state |= IOSTATE_failbit;
5886 basic_istream_char_sentry_destroy(this);
5888 basic_ios_char_setstate(base, state);
5889 return this->count;
5892 /* ?readsome@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHPADH@Z */
5893 /* ?readsome@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_J@Z */
5894 DEFINE_THISCALL_WRAPPER(basic_istream_char_readsome, 16)
5895 streamsize __thiscall basic_istream_char_readsome(basic_istream_char *this, char *str, streamsize count)
5897 return basic_istream_char__Readsome_s(this, str, count, count);
5900 /* ?putback@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z */
5901 /* ?putback@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z */
5902 DEFINE_THISCALL_WRAPPER(basic_istream_char_putback, 8)
5903 basic_istream_char* __thiscall basic_istream_char_putback(basic_istream_char *this, char ch)
5905 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5906 IOSB_iostate state = IOSTATE_goodbit;
5908 TRACE("(%p %c)\n", this, ch);
5910 this->count = 0;
5912 if(basic_istream_char_sentry_create(this, TRUE)) {
5913 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5915 if(!ios_base_good(&base->base))
5916 state |= IOSTATE_failbit;
5917 else if(!strbuf || basic_streambuf_char_sputbackc(strbuf, ch)==EOF)
5918 state |= IOSTATE_badbit;
5920 basic_istream_char_sentry_destroy(this);
5922 basic_ios_char_setstate(base, state);
5923 return this;
5926 /* ?unget@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ */
5927 /* ?unget@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ */
5928 DEFINE_THISCALL_WRAPPER(basic_istream_char_unget, 4)
5929 basic_istream_char* __thiscall basic_istream_char_unget(basic_istream_char *this)
5931 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5932 IOSB_iostate state = IOSTATE_goodbit;
5934 TRACE("(%p)\n", this);
5936 this->count = 0;
5938 if(basic_istream_char_sentry_create(this, TRUE)) {
5939 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5941 if(!ios_base_good(&base->base))
5942 state |= IOSTATE_failbit;
5943 else if(!strbuf || basic_streambuf_char_sungetc(strbuf)==EOF)
5944 state |= IOSTATE_badbit;
5946 basic_istream_char_sentry_destroy(this);
5948 basic_ios_char_setstate(base, state);
5949 return this;
5952 /* ?sync@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ */
5953 /* ?sync@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ */
5954 DEFINE_THISCALL_WRAPPER(basic_istream_char_sync, 4)
5955 int __thiscall basic_istream_char_sync(basic_istream_char *this)
5957 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5958 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5960 TRACE("(%p)\n", this);
5962 if(!strbuf)
5963 return -1;
5965 if(basic_istream_char_sentry_create(this, TRUE)) {
5966 if(basic_streambuf_char_pubsync(strbuf) != -1) {
5967 basic_istream_char_sentry_destroy(this);
5968 return 0;
5971 basic_istream_char_sentry_destroy(this);
5973 basic_ios_char_setstate(base, IOSTATE_badbit);
5974 return -1;
5977 /* ?tellg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@XZ */
5978 /* ?tellg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
5979 DEFINE_THISCALL_WRAPPER(basic_istream_char_tellg, 8)
5980 fpos_int* __thiscall basic_istream_char_tellg(basic_istream_char *this, fpos_int *ret)
5982 TRACE("(%p %p)\n", this, ret);
5984 if(basic_istream_char_sentry_create(this, TRUE)) {
5985 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5986 if(!ios_base_fail(&base->base)) {
5987 basic_streambuf_char_pubseekoff(basic_ios_char_rdbuf_get(base),
5988 ret, 0, SEEKDIR_cur, OPENMODE_in);
5989 basic_istream_char_sentry_destroy(this);
5991 if(ret->off==0 && ret->pos==-1 && ret->state==0)
5992 basic_ios_char_setstate(base, IOSTATE_failbit);
5993 return ret;
5996 basic_istream_char_sentry_destroy(this);
5998 ret->off = 0;
5999 ret->pos = -1;
6000 ret->state = 0;
6001 return ret;
6004 /* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@JH@Z */
6005 /* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z */
6006 DEFINE_THISCALL_WRAPPER(basic_istream_char_seekg, 16)
6007 basic_istream_char* __thiscall basic_istream_char_seekg(basic_istream_char *this, streamoff off, int dir)
6009 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6011 TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(off), dir);
6013 if(!ios_base_fail(&base->base)) {
6014 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6015 fpos_int ret;
6017 basic_streambuf_char_pubseekoff(strbuf, &ret, off, dir, OPENMODE_in);
6019 if(ret.off==0 && ret.pos==-1 && ret.state==0)
6020 basic_ios_char_setstate(base, IOSTATE_failbit);
6021 else
6022 basic_ios_char_clear(base, IOSTATE_goodbit);
6023 return this;
6024 }else
6025 basic_ios_char_clear(base, IOSTATE_goodbit);
6027 return this;
6030 /* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
6031 /* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
6032 DEFINE_THISCALL_WRAPPER(basic_istream_char_seekg_fpos, 28)
6033 basic_istream_char* __thiscall basic_istream_char_seekg_fpos(basic_istream_char *this, fpos_int pos)
6035 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6037 TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos));
6039 if(!ios_base_fail(&base->base)) {
6040 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6041 fpos_int ret;
6043 basic_streambuf_char_pubseekpos(strbuf, &ret, pos, OPENMODE_in);
6044 basic_istream_char_sentry_destroy(this);
6046 if(ret.off==0 && ret.pos==-1 && ret.state==0)
6047 basic_ios_char_setstate(base, IOSTATE_failbit);
6048 else
6049 basic_ios_char_clear(base, IOSTATE_goodbit);
6050 return this;
6051 }else
6052 basic_ios_char_clear(base, IOSTATE_goodbit);
6054 return this;
6057 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAF@Z */
6058 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAF@Z */
6059 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_short, 8)
6060 basic_istream_char* __thiscall basic_istream_char_read_short(basic_istream_char *this, short *v)
6062 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6063 int state = IOSTATE_goodbit;
6065 TRACE("(%p %p)\n", this, v);
6067 if(basic_istream_char_sentry_create(this, FALSE)) {
6068 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6069 const num_get *numget = num_get_char_use_facet(strbuf->loc);
6070 istreambuf_iterator_char first={0}, last={0};
6071 LONG tmp;
6073 first.strbuf = strbuf;
6074 num_get_char_get_long(numget, &last, first, last, &base->base, &state, &tmp);
6076 if(!(state&IOSTATE_failbit) && tmp==(LONG)((short)tmp))
6077 *v = tmp;
6078 else
6079 state |= IOSTATE_failbit;
6081 basic_istream_char_sentry_destroy(this);
6083 basic_ios_char_setstate(base, state);
6084 return this;
6087 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAG@Z */
6088 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAG@Z */
6089 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ushort, 8)
6090 basic_istream_char* __thiscall basic_istream_char_read_ushort(basic_istream_char *this, unsigned short *v)
6092 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6093 int state = IOSTATE_goodbit;
6095 TRACE("(%p %p)\n", this, v);
6097 if(basic_istream_char_sentry_create(this, FALSE)) {
6098 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6099 const num_get *numget = num_get_char_use_facet(strbuf->loc);
6100 istreambuf_iterator_char first={0}, last={0};
6102 first.strbuf = strbuf;
6103 num_get_char_get_ushort(numget, &last, first, last, &base->base, &state, v);
6105 basic_istream_char_sentry_destroy(this);
6107 basic_ios_char_setstate(base, state);
6108 return this;
6111 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAH@Z */
6112 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAH@Z */
6113 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_int, 8)
6114 basic_istream_char* __thiscall basic_istream_char_read_int(basic_istream_char *this, int *v)
6116 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6117 int state = IOSTATE_goodbit;
6119 TRACE("(%p %p)\n", this, v);
6121 if(basic_istream_char_sentry_create(this, FALSE)) {
6122 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6123 const num_get *numget = num_get_char_use_facet(strbuf->loc);
6124 istreambuf_iterator_char first={0}, last={0};
6126 first.strbuf = strbuf;
6127 num_get_char_get_long(numget, &last, first, last, &base->base, &state, v);
6129 basic_istream_char_sentry_destroy(this);
6131 basic_ios_char_setstate(base, state);
6132 return this;
6135 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAI@Z */
6136 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAI@Z */
6137 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_uint, 8)
6138 basic_istream_char* __thiscall basic_istream_char_read_uint(basic_istream_char *this, unsigned int *v)
6140 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6141 int state = IOSTATE_goodbit;
6143 TRACE("(%p %p)\n", this, v);
6145 if(basic_istream_char_sentry_create(this, FALSE)) {
6146 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6147 const num_get *numget = num_get_char_use_facet(strbuf->loc);
6148 istreambuf_iterator_char first={0}, last={0};
6150 first.strbuf = strbuf;
6151 num_get_char_get_uint(numget, &last, first, last, &base->base, &state, v);
6153 basic_istream_char_sentry_destroy(this);
6155 basic_ios_char_setstate(base, state);
6156 return this;
6159 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAJ@Z */
6160 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAJ@Z */
6161 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_long, 8)
6162 basic_istream_char* __thiscall basic_istream_char_read_long(basic_istream_char *this, LONG *v)
6164 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6165 int state = IOSTATE_goodbit;
6167 TRACE("(%p %p)\n", this, v);
6169 if(basic_istream_char_sentry_create(this, FALSE)) {
6170 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6171 const num_get *numget = num_get_char_use_facet(strbuf->loc);
6172 istreambuf_iterator_char first={0}, last={0};
6174 first.strbuf = strbuf;
6175 num_get_char_get_long(numget, &last, first, last, &base->base, &state, v);
6177 basic_istream_char_sentry_destroy(this);
6179 basic_ios_char_setstate(base, state);
6180 return this;
6183 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAK@Z */
6184 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAK@Z */
6185 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ulong, 8)
6186 basic_istream_char* __thiscall basic_istream_char_read_ulong(basic_istream_char *this, ULONG *v)
6188 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6189 int state = IOSTATE_goodbit;
6191 TRACE("(%p %p)\n", this, v);
6193 if(basic_istream_char_sentry_create(this, FALSE)) {
6194 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6195 const num_get *numget = num_get_char_use_facet(strbuf->loc);
6196 istreambuf_iterator_char first={0}, last={0};
6198 first.strbuf = strbuf;
6199 num_get_char_get_ulong(numget, &last, first, last, &base->base, &state, v);
6201 basic_istream_char_sentry_destroy(this);
6203 basic_ios_char_setstate(base, state);
6204 return this;
6207 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAM@Z */
6208 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAM@Z */
6209 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_float, 8)
6210 basic_istream_char* __thiscall basic_istream_char_read_float(basic_istream_char *this, float *v)
6212 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6213 int state = IOSTATE_goodbit;
6215 TRACE("(%p %p)\n", this, v);
6217 if(basic_istream_char_sentry_create(this, FALSE)) {
6218 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6219 const num_get *numget = num_get_char_use_facet(strbuf->loc);
6220 istreambuf_iterator_char first={0}, last={0};
6222 first.strbuf = strbuf;
6223 num_get_char_get_float(numget, &last, first, last, &base->base, &state, v);
6225 basic_istream_char_sentry_destroy(this);
6227 basic_ios_char_setstate(base, state);
6228 return this;
6231 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAN@Z */
6232 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAN@Z */
6233 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_double, 8)
6234 basic_istream_char* __thiscall basic_istream_char_read_double(basic_istream_char *this, double *v)
6236 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6237 int state = IOSTATE_goodbit;
6239 TRACE("(%p %p)\n", this, v);
6241 if(basic_istream_char_sentry_create(this, FALSE)) {
6242 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6243 const num_get *numget = num_get_char_use_facet(strbuf->loc);
6244 istreambuf_iterator_char first={0}, last={0};
6246 first.strbuf = strbuf;
6247 num_get_char_get_double(numget, &last, first, last, &base->base, &state, v);
6249 basic_istream_char_sentry_destroy(this);
6251 basic_ios_char_setstate(base, state);
6252 return this;
6255 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAO@Z */
6256 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAO@Z */
6257 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ldouble, 8)
6258 basic_istream_char* __thiscall basic_istream_char_read_ldouble(basic_istream_char *this, double *v)
6260 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6261 int state = IOSTATE_goodbit;
6263 TRACE("(%p %p)\n", this, v);
6265 if(basic_istream_char_sentry_create(this, FALSE)) {
6266 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6267 const num_get *numget = num_get_char_use_facet(strbuf->loc);
6268 istreambuf_iterator_char first={0}, last={0};
6270 first.strbuf = strbuf;
6271 num_get_char_get_ldouble(numget, &last, first, last, &base->base, &state, v);
6273 basic_istream_char_sentry_destroy(this);
6275 basic_ios_char_setstate(base, state);
6276 return this;
6279 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAPAX@Z */
6280 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAPEAX@Z */
6281 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ptr, 8)
6282 basic_istream_char* __thiscall basic_istream_char_read_ptr(basic_istream_char *this, void **v)
6284 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6285 int state = IOSTATE_goodbit;
6287 TRACE("(%p %p)\n", this, v);
6289 if(basic_istream_char_sentry_create(this, FALSE)) {
6290 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6291 const num_get *numget = num_get_char_use_facet(strbuf->loc);
6292 istreambuf_iterator_char first={0}, last={0};
6294 first.strbuf = strbuf;
6295 num_get_char_get_void(numget, &last, first, last, &base->base, &state, v);
6297 basic_istream_char_sentry_destroy(this);
6299 basic_ios_char_setstate(base, state);
6300 return this;
6303 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_J@Z */
6304 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_J@Z */
6305 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_int64, 8)
6306 basic_istream_char* __thiscall basic_istream_char_read_int64(basic_istream_char *this, __int64 *v)
6308 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6309 int state = IOSTATE_goodbit;
6311 TRACE("(%p %p)\n", this, v);
6313 if(basic_istream_char_sentry_create(this, FALSE)) {
6314 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6315 const num_get *numget = num_get_char_use_facet(strbuf->loc);
6316 istreambuf_iterator_char first={0}, last={0};
6318 first.strbuf = strbuf;
6319 num_get_char_get_int64(numget, &last, first, last, &base->base, &state, v);
6321 basic_istream_char_sentry_destroy(this);
6323 basic_ios_char_setstate(base, state);
6324 return this;
6327 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_K@Z */
6328 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_K@Z */
6329 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_uint64, 8)
6330 basic_istream_char* __thiscall basic_istream_char_read_uint64(basic_istream_char *this, unsigned __int64 *v)
6332 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6333 int state = IOSTATE_goodbit;
6335 TRACE("(%p %p)\n", this, v);
6337 if(basic_istream_char_sentry_create(this, FALSE)) {
6338 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6339 const num_get *numget = num_get_char_use_facet(strbuf->loc);
6340 istreambuf_iterator_char first={0}, last={0};
6342 first.strbuf = strbuf;
6343 num_get_char_get_uint64(numget, &last, first, last, &base->base, &state, v);
6345 basic_istream_char_sentry_destroy(this);
6347 basic_ios_char_setstate(base, state);
6348 return this;
6351 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_N@Z */
6352 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_N@Z */
6353 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_bool, 8)
6354 basic_istream_char* __thiscall basic_istream_char_read_bool(basic_istream_char *this, MSVCP_bool *v)
6356 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6357 int state = IOSTATE_goodbit;
6359 TRACE("(%p %p)\n", this, v);
6361 if(basic_istream_char_sentry_create(this, FALSE)) {
6362 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6363 const num_get *numget = num_get_char_use_facet(strbuf->loc);
6364 istreambuf_iterator_char first={0}, last={0};
6366 first.strbuf = strbuf;
6367 num_get_char_get_bool(numget, &last, first, last, &base->base, &state, v);
6369 basic_istream_char_sentry_destroy(this);
6371 basic_ios_char_setstate(base, state);
6372 return this;
6375 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
6376 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
6377 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_streambuf, 8)
6378 basic_istream_char* __thiscall basic_istream_char_read_streambuf(
6379 basic_istream_char *this, basic_streambuf_char *streambuf)
6381 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6382 IOSB_iostate state = IOSTATE_failbit;
6383 int c = '\n';
6385 TRACE("(%p %p)\n", this, streambuf);
6387 if(basic_istream_char_sentry_create(this, FALSE)) {
6388 for(c = basic_streambuf_char_sgetc(basic_ios_char_rdbuf_get(base)); c!=EOF;
6389 c = basic_streambuf_char_snextc(basic_ios_char_rdbuf_get(base))) {
6390 state = IOSTATE_goodbit;
6391 if(basic_streambuf_char_sputc(streambuf, c) == EOF)
6392 break;
6395 basic_istream_char_sentry_destroy(this);
6397 basic_ios_char_setstate(base, state | (c==EOF ? IOSTATE_eofbit : IOSTATE_goodbit));
6398 return this;
6401 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */
6402 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */
6403 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_func, 8)
6404 basic_istream_char* __thiscall basic_istream_char_read_func(basic_istream_char *this,
6405 basic_istream_char* (__cdecl *pfunc)(basic_istream_char*))
6407 TRACE("(%p %p)\n", this, pfunc);
6408 pfunc(this);
6409 return this;
6412 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@DU?$char_traits@D@std@@@1@AAV21@@Z@Z */
6413 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@DU?$char_traits@D@std@@@1@AEAV21@@Z@Z */
6414 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_func_basic_ios, 8)
6415 basic_istream_char* __thiscall basic_istream_char_read_func_basic_ios(basic_istream_char *this,
6416 basic_ios_char* (__cdecl *pfunc)(basic_ios_char*))
6418 TRACE("(%p %p)\n", this, pfunc);
6419 pfunc(basic_istream_char_get_basic_ios(this));
6420 return this;
6423 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */
6424 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */
6425 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_func_ios_base, 8)
6426 basic_istream_char* __thiscall basic_istream_char_read_func_ios_base(basic_istream_char *this,
6427 ios_base* (__cdecl *pfunc)(ios_base*))
6429 TRACE("(%p %p)\n", this, pfunc);
6430 pfunc(&basic_istream_char_get_basic_ios(this)->base);
6431 return this;
6434 /* Caution: basic_istream uses virtual inheritance. */
6435 static inline basic_ios_wchar* basic_istream_wchar_get_basic_ios(basic_istream_wchar *this)
6437 return (basic_ios_wchar*)((char*)this+this->vbtable[1]);
6440 static inline basic_ios_wchar* basic_istream_wchar_to_basic_ios(basic_istream_wchar *ptr)
6442 return (basic_ios_wchar*)((char*)ptr+basic_istream_wchar_vbtable[1]);
6445 static inline basic_istream_wchar* basic_istream_wchar_from_basic_ios(basic_ios_wchar *ptr)
6447 return (basic_istream_wchar*)((char*)ptr-basic_istream_wchar_vbtable[1]);
6450 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N1@Z */
6451 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N1@Z */
6452 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ctor_init, 20)
6453 basic_istream_wchar* __thiscall basic_istream_wchar_ctor_init(basic_istream_wchar *this,
6454 basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool noinit, MSVCP_bool virt_init)
6456 basic_ios_wchar *base;
6458 TRACE("(%p %p %d %d %d)\n", this, strbuf, isstd, noinit, virt_init);
6460 if(virt_init) {
6461 this->vbtable = basic_istream_wchar_vbtable;
6462 base = basic_istream_wchar_get_basic_ios(this);
6463 basic_ios_wchar_ctor(base);
6464 }else {
6465 base = basic_istream_wchar_get_basic_ios(this);
6468 base->base.vtable = &MSVCP_basic_istream_wchar_vtable;
6469 this->count = 0;
6470 if(!noinit)
6471 basic_ios_wchar_init(base, strbuf, isstd);
6472 return this;
6475 /* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N1@Z */
6476 /* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N1@Z */
6477 DEFINE_THISCALL_WRAPPER(basic_istream_short_ctor_init, 20)
6478 basic_istream_wchar* __thiscall basic_istream_short_ctor_init(basic_istream_wchar *this,
6479 basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool noinit, MSVCP_bool virt_init)
6481 basic_istream_wchar_ctor_init(this, strbuf, isstd, noinit, virt_init);
6482 basic_istream_wchar_get_basic_ios(this)->base.vtable = &MSVCP_basic_istream_short_vtable;
6483 return this;
6486 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */
6487 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */
6488 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ctor, 16)
6489 basic_istream_wchar* __thiscall basic_istream_wchar_ctor(basic_istream_wchar *this,
6490 basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init)
6492 return basic_istream_wchar_ctor_init(this, strbuf, isstd, FALSE, virt_init);
6495 /* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z */
6496 /* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z */
6497 DEFINE_THISCALL_WRAPPER(basic_istream_short_ctor, 16)
6498 basic_istream_wchar* __thiscall basic_istream_short_ctor(basic_istream_wchar *this,
6499 basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init)
6501 return basic_istream_short_ctor_init(this, strbuf, isstd, FALSE, virt_init);
6504 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@W4_Uninitialized@1@@Z */
6505 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@W4_Uninitialized@1@@Z */
6506 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ctor_uninitialized, 12)
6507 basic_istream_wchar* __thiscall basic_istream_wchar_ctor_uninitialized(
6508 basic_istream_wchar *this, int uninitialized, MSVCP_bool virt_init)
6510 basic_ios_wchar *base;
6512 TRACE("(%p %d %d)\n", this, uninitialized, virt_init);
6514 if(virt_init) {
6515 this->vbtable = basic_istream_wchar_vbtable;
6516 base = basic_istream_wchar_get_basic_ios(this);
6517 basic_ios_wchar_ctor(base);
6518 }else {
6519 base = basic_istream_wchar_get_basic_ios(this);
6522 base->base.vtable = &MSVCP_basic_istream_wchar_vtable;
6523 ios_base_Addstd(&base->base);
6524 return this;
6527 /* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@@Z */
6528 /* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@W4_Uninitialized@1@@Z */
6529 DEFINE_THISCALL_WRAPPER(basic_istream_short_ctor_uninitialized, 12)
6530 basic_istream_wchar* __thiscall basic_istream_short_ctor_uninitialized(
6531 basic_istream_wchar *this, int uninitialized, MSVCP_bool virt_init)
6533 basic_istream_wchar_ctor_uninitialized(this, uninitialized, virt_init);
6534 basic_istream_wchar_get_basic_ios(this)->base.vtable = &MSVCP_basic_istream_short_vtable;
6535 return this;
6538 /* ??1?$basic_istream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
6539 /* ??1?$basic_istream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
6540 /* ??1?$basic_istream@GU?$char_traits@G@std@@@std@@UAE@XZ */
6541 /* ??1?$basic_istream@GU?$char_traits@G@std@@@std@@UEAA@XZ */
6542 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_dtor, 4)
6543 void __thiscall basic_istream_wchar_dtor(basic_ios_wchar *base)
6545 basic_istream_wchar *this = basic_istream_wchar_from_basic_ios(base);
6547 /* don't destroy virtual base here */
6548 TRACE("(%p)\n", this);
6551 /* ??_D?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
6552 /* ??_D?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
6553 /* ??_D?$basic_istream@GU?$char_traits@G@std@@@std@@QAEXXZ */
6554 /* ??_D?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
6555 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_vbase_dtor, 4)
6556 void __thiscall basic_istream_wchar_vbase_dtor(basic_istream_wchar *this)
6558 TRACE("(%p)\n", this);
6559 basic_istream_wchar_dtor(basic_istream_wchar_to_basic_ios(this));
6560 basic_ios_wchar_dtor(basic_istream_wchar_get_basic_ios(this));
6563 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_vector_dtor, 8)
6564 basic_istream_wchar* __thiscall basic_istream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags)
6566 basic_istream_wchar *this = basic_istream_wchar_from_basic_ios(base);
6568 TRACE("(%p %x)\n", this, flags);
6570 if(flags & 2) {
6571 /* we have an array, with the number of elements stored before the first object */
6572 INT_PTR i, *ptr = (INT_PTR *)this-1;
6574 for(i=*ptr-1; i>=0; i--)
6575 basic_istream_wchar_vbase_dtor(this+i);
6576 MSVCRT_operator_delete(ptr);
6577 } else {
6578 basic_istream_wchar_vbase_dtor(this);
6579 if(flags & 1)
6580 MSVCRT_operator_delete(this);
6583 return this;
6586 /* ?_Ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE_N_N@Z */
6587 /* ?_Ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_N_N@Z */
6588 /* ?_Ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE_N_N@Z */
6589 /* ?_Ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_N_N@Z */
6590 DEFINE_THISCALL_WRAPPER(basic_istream_wchar__Ipfx, 8)
6591 MSVCP_bool __thiscall basic_istream_wchar__Ipfx(basic_istream_wchar *this, MSVCP_bool noskip)
6593 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6595 TRACE("(%p %d)\n", this, noskip);
6597 if(ios_base_good(&base->base)) {
6598 if(basic_ios_wchar_tie_get(base))
6599 basic_ostream_wchar_flush(basic_ios_wchar_tie_get(base));
6601 if(!noskip && (ios_base_flags_get(&base->base) & FMTFLAG_skipws)) {
6602 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6603 const ctype_wchar *ctype = ctype_wchar_use_facet(base->strbuf->loc);
6604 int ch;
6606 for(ch = basic_streambuf_wchar_sgetc(strbuf); ;
6607 ch = basic_streambuf_wchar_snextc(strbuf)) {
6608 if(ch == WEOF) {
6609 basic_ios_wchar_setstate(base, IOSTATE_eofbit);
6610 break;
6613 if(!ctype_wchar_is_ch(ctype, _SPACE|_BLANK, ch))
6614 break;
6619 if(!ios_base_good(&base->base)) {
6620 basic_ios_wchar_setstate(base, IOSTATE_failbit);
6621 return FALSE;
6623 return TRUE;
6626 /* ?ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE_N_N@Z */
6627 /* ?ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_N_N@Z */
6628 /* ?ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE_N_N@Z */
6629 /* ?ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_N_N@Z */
6630 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ipfx, 8)
6631 MSVCP_bool __thiscall basic_istream_wchar_ipfx(basic_istream_wchar *this, MSVCP_bool noskip)
6633 return basic_istream_wchar__Ipfx(this, noskip);
6636 /* ?isfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
6637 /* ?isfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
6638 /* ?isfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEXXZ */
6639 /* ?isfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
6640 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_isfx, 4)
6641 void __thiscall basic_istream_wchar_isfx(basic_istream_wchar *this)
6643 TRACE("(%p)\n", this);
6646 static BOOL basic_istream_wchar_sentry_create(basic_istream_wchar *istr, MSVCP_bool noskip)
6648 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istr);
6650 if(basic_ios_wchar_rdbuf_get(base))
6651 basic_streambuf_wchar__Lock(base->strbuf);
6653 return basic_istream_wchar_ipfx(istr, noskip);
6656 static void basic_istream_wchar_sentry_destroy(basic_istream_wchar *istr)
6658 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istr);
6660 if(basic_ios_wchar_rdbuf_get(base))
6661 basic_streambuf_wchar__Unlock(base->strbuf);
6664 /* ?gcount@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QBEHXZ */
6665 /* ?gcount@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEBA_JXZ */
6666 /* ?gcount@?$basic_istream@GU?$char_traits@G@std@@@std@@QBEHXZ */
6667 /* ?gcount@?$basic_istream@GU?$char_traits@G@std@@@std@@QEBA_JXZ */
6668 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_gcount, 4)
6669 int __thiscall basic_istream_wchar_gcount(const basic_istream_wchar *this)
6671 TRACE("(%p)\n", this);
6672 return this->count;
6675 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
6676 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
6677 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEGXZ */
6678 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAGXZ */
6679 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get, 4)
6680 unsigned short __thiscall basic_istream_wchar_get(basic_istream_wchar *this)
6682 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6683 int ret;
6685 TRACE("(%p)\n", this);
6687 this->count = 0;
6689 if(!basic_istream_wchar_sentry_create(this, TRUE)) {
6690 basic_istream_wchar_sentry_destroy(this);
6691 return WEOF;
6694 ret = basic_streambuf_wchar_sbumpc(basic_ios_wchar_rdbuf_get(base));
6695 basic_istream_wchar_sentry_destroy(this);
6696 if(ret == WEOF)
6697 basic_ios_wchar_setstate(base, IOSTATE_eofbit|IOSTATE_failbit);
6698 else
6699 this->count++;
6701 return ret;
6704 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AA_W@Z */
6705 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEA_W@Z */
6706 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAG@Z */
6707 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAG@Z */
6708 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_ch, 8)
6709 basic_istream_wchar* __thiscall basic_istream_wchar_get_ch(basic_istream_wchar *this, wchar_t *ch)
6711 unsigned short ret;
6713 TRACE("(%p %p)\n", this, ch);
6715 ret = basic_istream_wchar_get(this);
6716 if(ret != WEOF)
6717 *ch = (wchar_t)ret;
6718 return this;
6721 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH_W@Z */
6722 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J_W@Z */
6723 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGHG@Z */
6724 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_JG@Z */
6725 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_str_delim, 20)
6726 basic_istream_wchar* __thiscall basic_istream_wchar_get_str_delim(basic_istream_wchar *this, wchar_t *str, streamsize count, wchar_t delim)
6728 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6729 unsigned short ch = delim;
6731 TRACE("(%p %p %s %c)\n", this, str, wine_dbgstr_longlong(count), delim);
6733 this->count = 0;
6735 if(basic_istream_wchar_sentry_create(this, TRUE)) {
6736 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6738 for(ch = basic_streambuf_wchar_sgetc(strbuf); count>1;
6739 ch = basic_streambuf_wchar_snextc(strbuf)) {
6740 if(ch==WEOF || ch==delim)
6741 break;
6743 *str++ = ch;
6744 this->count++;
6745 count--;
6748 basic_istream_wchar_sentry_destroy(this);
6750 basic_ios_wchar_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) |
6751 (ch==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit));
6752 if(count > 0)
6753 *str = 0;
6754 return this;
6757 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH@Z */
6758 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z */
6759 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGH@Z */
6760 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z */
6761 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_str, 16)
6762 basic_istream_wchar* __thiscall basic_istream_wchar_get_str(basic_istream_wchar *this, wchar_t *str, streamsize count)
6764 return basic_istream_wchar_get_str_delim(this, str, count, '\n');
6767 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_W@Z */
6768 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_W@Z */
6769 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAV?$basic_streambuf@GU?$char_traits@G@std@@@2@G@Z */
6770 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@G@Z */
6771 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_streambuf_delim, 12)
6772 basic_istream_wchar* __thiscall basic_istream_wchar_get_streambuf_delim(basic_istream_wchar *this, basic_streambuf_wchar *strbuf, wchar_t delim)
6774 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6775 unsigned short ch = delim;
6777 TRACE("(%p %p %c)\n", this, strbuf, delim);
6779 this->count = 0;
6781 if(basic_istream_wchar_sentry_create(this, TRUE)) {
6782 basic_streambuf_wchar *strbuf_read = basic_ios_wchar_rdbuf_get(base);
6784 for(ch = basic_streambuf_wchar_sgetc(strbuf_read); ;
6785 ch = basic_streambuf_wchar_snextc(strbuf_read)) {
6786 if(ch==WEOF || ch==delim)
6787 break;
6789 if(basic_streambuf_wchar_sputc(strbuf, ch) == WEOF)
6790 break;
6791 this->count++;
6794 basic_istream_wchar_sentry_destroy(this);
6796 basic_ios_wchar_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) |
6797 (ch==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit));
6798 return this;
6801 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z */
6802 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z */
6803 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAV?$basic_streambuf@GU?$char_traits@G@std@@@2@@Z */
6804 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@@Z */
6805 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_streambuf, 8)
6806 basic_istream_wchar* __thiscall basic_istream_wchar_get_streambuf(basic_istream_wchar *this, basic_streambuf_wchar *strbuf)
6808 return basic_istream_wchar_get_streambuf_delim(this, strbuf, '\n');
6811 /* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH_W@Z */
6812 /* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J_W@Z */
6813 /* ?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGHG@Z */
6814 /* ?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_JG@Z */
6815 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_getline_delim, 20)
6816 basic_istream_wchar* __thiscall basic_istream_wchar_getline_delim(basic_istream_wchar *this, wchar_t *str, streamsize count, wchar_t delim)
6818 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6819 unsigned short ch = delim;
6821 TRACE("(%p %p %s %c)\n", this, str, wine_dbgstr_longlong(count), delim);
6823 this->count = 0;
6825 if(basic_istream_wchar_sentry_create(this, TRUE) && count>0) {
6826 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6828 while(count > 1) {
6829 ch = basic_streambuf_wchar_sbumpc(strbuf);
6831 if(ch==WEOF || ch==delim)
6832 break;
6834 *str++ = ch;
6835 this->count++;
6836 count--;
6839 if(ch == delim)
6840 this->count++;
6841 else if(ch != WEOF) {
6842 ch = basic_streambuf_wchar_sgetc(strbuf);
6844 if(ch == delim) {
6845 basic_streambuf_wchar__Gninc(strbuf);
6846 this->count++;
6850 basic_istream_wchar_sentry_destroy(this);
6852 basic_ios_wchar_setstate(base, (ch==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit) |
6853 (!this->count || (ch!=delim && ch!=WEOF) ? IOSTATE_failbit : IOSTATE_goodbit));
6854 if(count > 0)
6855 *str = 0;
6856 return this;
6859 /* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH@Z */
6860 /* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z */
6861 /* ?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGH@Z */
6862 /* ?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z */
6863 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_getline, 16)
6864 basic_istream_wchar* __thiscall basic_istream_wchar_getline(basic_istream_wchar *this, wchar_t *str, streamsize count)
6866 return basic_istream_wchar_getline_delim(this, str, count, '\n');
6869 /* ?ignore@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@HG@Z */
6870 /* ?ignore@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JG@Z */
6871 /* ?ignore@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@HG@Z */
6872 /* ?ignore@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JG@Z */
6873 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ignore, 16)
6874 basic_istream_wchar* __thiscall basic_istream_wchar_ignore(basic_istream_wchar *this, streamsize count, unsigned short delim)
6876 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6877 unsigned short ch = delim;
6878 unsigned int state;
6880 TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(count), delim);
6882 this->count = 0;
6884 if(basic_istream_wchar_sentry_create(this, TRUE)) {
6885 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6886 state = IOSTATE_goodbit;
6888 while(count > 0) {
6889 ch = basic_streambuf_wchar_sbumpc(strbuf);
6891 if(ch==WEOF) {
6892 state = IOSTATE_eofbit;
6893 break;
6896 if(ch==delim)
6897 break;
6899 this->count++;
6900 if(count != INT_MAX)
6901 count--;
6903 }else
6904 state = IOSTATE_failbit;
6905 basic_istream_wchar_sentry_destroy(this);
6907 basic_ios_wchar_setstate(base, state);
6908 return this;
6911 /* ?ws@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@1@AAV21@@Z */
6912 /* ?ws@std@@YAAEAV?$basic_istream@_WU?$char_traits@_W@std@@@1@AEAV21@@Z */
6913 /* ?ws@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@1@AAV21@@Z */
6914 /* ?ws@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@1@AEAV21@@Z */
6915 basic_istream_wchar* __cdecl ws_basic_istream_wchar(basic_istream_wchar *istream)
6917 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istream);
6918 unsigned short ch = '\n';
6920 TRACE("(%p)\n", istream);
6922 if(basic_istream_wchar_sentry_create(istream, TRUE)) {
6923 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6924 const ctype_wchar *ctype = ctype_wchar_use_facet(strbuf->loc);
6926 for(ch = basic_streambuf_wchar_sgetc(strbuf); ctype_wchar_is_ch(ctype, _SPACE, ch);
6927 ch = basic_streambuf_wchar_snextc(strbuf)) {
6928 if(ch == WEOF)
6929 break;
6932 basic_istream_wchar_sentry_destroy(istream);
6934 if(ch == WEOF)
6935 basic_ios_wchar_setstate(base, IOSTATE_eofbit);
6936 return istream;
6939 /* ?peek@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
6940 /* ?peek@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
6941 /* ?peek@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEGXZ */
6942 /* ?peek@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAGXZ */
6943 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_peek, 4)
6944 unsigned short __thiscall basic_istream_wchar_peek(basic_istream_wchar *this)
6946 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6947 unsigned short ret = WEOF;
6949 TRACE("(%p)\n", this);
6951 this->count = 0;
6953 if(basic_istream_wchar_sentry_create(this, TRUE))
6954 ret = basic_streambuf_wchar_sgetc(basic_ios_wchar_rdbuf_get(base));
6955 basic_istream_wchar_sentry_destroy(this);
6957 if (ret == WEOF)
6958 basic_ios_wchar_setstate(base, IOSTATE_eofbit);
6960 return ret;
6963 /* ?_Read_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WIH@Z */
6964 /* ?_Read_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_K_J@Z */
6965 /* ?_Read_s@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGIH@Z */
6966 /* ?_Read_s@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_K_J@Z */
6967 static basic_istream_wchar* basic_istream_wchar__Read_s(basic_istream_wchar *this, wchar_t *str, MSVCP_size_t size, streamsize count)
6969 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6970 IOSB_iostate state = IOSTATE_goodbit;
6972 TRACE("(%p %p %lu %s)\n", this, str, size, wine_dbgstr_longlong(count));
6974 if(basic_istream_wchar_sentry_create(this, TRUE)) {
6975 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6977 this->count = basic_streambuf_wchar__Sgetn_s(strbuf, str, size, count);
6978 if(this->count != count)
6979 state |= IOSTATE_failbit | IOSTATE_eofbit;
6980 }else {
6981 this->count = 0;
6983 basic_istream_wchar_sentry_destroy(this);
6985 basic_ios_wchar_setstate(base, state);
6986 return this;
6989 /* ?read@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH@Z */
6990 /* ?read@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z */
6991 /* ?read@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGH@Z */
6992 /* ?read@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z */
6993 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read, 16)
6994 basic_istream_wchar* __thiscall basic_istream_wchar_read(basic_istream_wchar *this, wchar_t *str, streamsize count)
6996 return basic_istream_wchar__Read_s(this, str, count, count);
6999 /* ?_Readsome_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEHPA_WIH@Z */
7000 /* ?_Readsome_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_K_J@Z */
7001 /* ?_Readsome_s@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEHPAGIH@Z */
7002 /* ?_Readsome_s@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_K_J@Z */
7003 static streamsize basic_istream_wchar__Readsome_s(basic_istream_wchar *this, wchar_t *str, MSVCP_size_t size, streamsize count)
7005 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7006 IOSB_iostate state = IOSTATE_goodbit;
7008 TRACE("(%p %p %lu %s)\n", this, str, size, wine_dbgstr_longlong(count));
7010 this->count = 0;
7012 if(basic_istream_wchar_sentry_create(this, TRUE)) {
7013 streamsize avail = basic_streambuf_wchar_in_avail(basic_ios_wchar_rdbuf_get(base));
7014 if(avail > count)
7015 avail = count;
7017 if(avail == -1)
7018 state |= IOSTATE_eofbit;
7019 else if(avail > 0)
7020 basic_istream_wchar__Read_s(this, str, size, avail);
7021 }else {
7022 state |= IOSTATE_failbit;
7024 basic_istream_wchar_sentry_destroy(this);
7026 basic_ios_wchar_setstate(base, state);
7027 return this->count;
7030 /* ?readsome@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEHPA_WH@Z */
7031 /* ?readsome@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_J@Z */
7032 /* ?readsome@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEHPAGH@Z */
7033 /* ?readsome@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_J@Z */
7034 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_readsome, 16)
7035 streamsize __thiscall basic_istream_wchar_readsome(basic_istream_wchar *this, wchar_t *str, streamsize count)
7037 return basic_istream_wchar__Readsome_s(this, str, count, count);
7040 /* ?putback@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_W@Z */
7041 /* ?putback@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_W@Z */
7042 /* ?putback@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@G@Z */
7043 /* ?putback@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@G@Z */
7044 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_putback, 8)
7045 basic_istream_wchar* __thiscall basic_istream_wchar_putback(basic_istream_wchar *this, wchar_t ch)
7047 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7048 IOSB_iostate state = IOSTATE_goodbit;
7050 TRACE("(%p %c)\n", this, ch);
7052 this->count = 0;
7054 if(basic_istream_wchar_sentry_create(this, TRUE)) {
7055 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7057 if(!ios_base_good(&base->base))
7058 state |= IOSTATE_failbit;
7059 else if(!strbuf || basic_streambuf_wchar_sputbackc(strbuf, ch)==WEOF)
7060 state |= IOSTATE_badbit;
7062 basic_istream_wchar_sentry_destroy(this);
7064 basic_ios_wchar_setstate(base, state);
7065 return this;
7068 /* ?unget@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@XZ */
7069 /* ?unget@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@XZ */
7070 /* ?unget@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@XZ */
7071 /* ?unget@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@XZ */
7072 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_unget, 4)
7073 basic_istream_wchar* __thiscall basic_istream_wchar_unget(basic_istream_wchar *this)
7075 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7076 IOSB_iostate state = IOSTATE_goodbit;
7078 TRACE("(%p)\n", this);
7080 this->count = 0;
7082 if(basic_istream_wchar_sentry_create(this, TRUE)) {
7083 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7085 if(!ios_base_good(&base->base))
7086 state |= IOSTATE_failbit;
7087 else if(!strbuf || basic_streambuf_wchar_sungetc(strbuf)==WEOF)
7088 state |= IOSTATE_badbit;
7090 basic_istream_wchar_sentry_destroy(this);
7092 basic_ios_wchar_setstate(base, state);
7093 return this;
7096 /* ?sync@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEHXZ */
7097 /* ?sync@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAHXZ */
7098 /* ?sync@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEHXZ */
7099 /* ?sync@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAHXZ */
7100 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_sync, 4)
7101 int __thiscall basic_istream_wchar_sync(basic_istream_wchar *this)
7103 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7104 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7106 TRACE("(%p)\n", this);
7108 if(!strbuf)
7109 return -1;
7111 if(basic_istream_wchar_sentry_create(this, TRUE)) {
7112 if(basic_streambuf_wchar_pubsync(strbuf) != -1) {
7113 basic_istream_wchar_sentry_destroy(this);
7114 return 0;
7117 basic_istream_wchar_sentry_destroy(this);
7119 basic_ios_wchar_setstate(base, IOSTATE_badbit);
7120 return -1;
7123 /* ?tellg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@XZ */
7124 /* ?tellg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
7125 /* ?tellg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@XZ */
7126 /* ?tellg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
7127 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_tellg, 8)
7128 fpos_int* __thiscall basic_istream_wchar_tellg(basic_istream_wchar *this, fpos_int *ret)
7130 TRACE("(%p %p)\n", this, ret);
7132 if(basic_istream_wchar_sentry_create(this, TRUE)) {
7133 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7134 if(!ios_base_fail(&base->base)) {
7135 basic_streambuf_wchar_pubseekoff(basic_ios_wchar_rdbuf_get(base),
7136 ret, 0, SEEKDIR_cur, OPENMODE_in);
7137 basic_istream_wchar_sentry_destroy(this);
7139 if(ret->off==0 && ret->pos==-1 && ret->state==0)
7140 basic_ios_wchar_setstate(base, IOSTATE_failbit);
7141 return ret;
7144 basic_istream_wchar_sentry_destroy(this);
7146 ret->off = 0;
7147 ret->pos = -1;
7148 ret->state = 0;
7149 return ret;
7152 /* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@JH@Z */
7153 /* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JH@Z */
7154 /* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@JH@Z */
7155 /* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JH@Z */
7156 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_seekg, 16)
7157 basic_istream_wchar* __thiscall basic_istream_wchar_seekg(basic_istream_wchar *this, streamoff off, int dir)
7159 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7161 TRACE("(%p %s %d)\n", this, wine_dbgstr_longlong(off), dir);
7163 if(!ios_base_fail(&base->base)) {
7164 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7165 fpos_int ret;
7167 basic_streambuf_wchar_pubseekoff(strbuf, &ret, off, dir, OPENMODE_in);
7168 basic_istream_wchar_sentry_destroy(this);
7170 if(ret.off==0 && ret.pos==-1 && ret.state==0)
7171 basic_ios_wchar_setstate(base, IOSTATE_failbit);
7172 else
7173 basic_ios_wchar_clear(base, IOSTATE_goodbit);
7174 return this;
7175 }else
7176 basic_ios_wchar_clear(base, IOSTATE_goodbit);
7178 return this;
7181 /* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
7182 /* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
7183 /* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
7184 /* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
7185 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_seekg_fpos, 28)
7186 basic_istream_wchar* __thiscall basic_istream_wchar_seekg_fpos(basic_istream_wchar *this, fpos_int pos)
7188 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7190 TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos));
7192 if(!ios_base_fail(&base->base)) {
7193 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7194 fpos_int ret;
7196 basic_streambuf_wchar_pubseekpos(strbuf, &ret, pos, OPENMODE_in);
7197 basic_istream_wchar_sentry_destroy(this);
7199 if(ret.off==0 && ret.pos==-1 && ret.state==0)
7200 basic_ios_wchar_setstate(base, IOSTATE_failbit);
7201 else
7202 basic_ios_wchar_clear(base, IOSTATE_goodbit);
7203 return this;
7204 }else
7205 basic_ios_wchar_clear(base, IOSTATE_goodbit);
7207 return this;
7210 static basic_istream_wchar* basic_istream_read_short(basic_istream_wchar *this, short *v, const num_get *numget)
7212 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7213 int state = IOSTATE_goodbit;
7215 TRACE("(%p %p)\n", this, v);
7217 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7218 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7219 istreambuf_iterator_wchar first={0}, last={0};
7220 LONG tmp;
7222 first.strbuf = strbuf;
7223 num_get_wchar_get_long(numget, &last, first, last, &base->base, &state, &tmp);
7225 if(!(state&IOSTATE_failbit) && tmp==(LONG)((short)tmp))
7226 *v = tmp;
7227 else
7228 state |= IOSTATE_failbit;
7230 basic_istream_wchar_sentry_destroy(this);
7232 basic_ios_wchar_setstate(base, state);
7233 return this;
7236 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAF@Z */
7237 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAF@Z */
7238 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_short, 8)
7239 basic_istream_wchar* __thiscall basic_istream_wchar_read_short(basic_istream_wchar *this, short *v)
7241 return basic_istream_read_short(this, v, num_get_wchar_use_facet(
7242 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7245 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAF@Z */
7246 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAF@Z */
7247 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_short, 8)
7248 basic_istream_wchar* __thiscall basic_istream_short_read_short(basic_istream_wchar *this, short *v)
7250 return basic_istream_read_short(this, v, num_get_short_use_facet(
7251 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7254 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAG@Z */
7255 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAG@Z */
7256 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_ushort, 8)
7257 basic_istream_wchar* __thiscall basic_istream_wchar_read_ushort(basic_istream_wchar *this, unsigned short *v)
7259 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7260 int state = IOSTATE_goodbit;
7262 TRACE("(%p %p)\n", this, v);
7264 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7265 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7266 const num_get *numget = num_get_wchar_use_facet(strbuf->loc);
7267 istreambuf_iterator_wchar first={0}, last={0};
7269 first.strbuf = strbuf;
7270 num_get_wchar_get_ushort(numget, &last, first, last, &base->base, &state, v);
7272 basic_istream_wchar_sentry_destroy(this);
7274 basic_ios_wchar_setstate(base, state);
7275 return this;
7278 static basic_istream_wchar* basic_istream_read_int(basic_istream_wchar *this, int *v, const num_get *numget)
7280 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7281 int state = IOSTATE_goodbit;
7283 TRACE("(%p %p)\n", this, v);
7285 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7286 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7287 istreambuf_iterator_wchar first={0}, last={0};
7289 first.strbuf = strbuf;
7290 num_get_wchar_get_long(numget, &last, first, last, &base->base, &state, v);
7292 basic_istream_wchar_sentry_destroy(this);
7294 basic_ios_wchar_setstate(base, state);
7295 return this;
7298 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAH@Z */
7299 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAH@Z */
7300 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_int, 8)
7301 basic_istream_wchar* __thiscall basic_istream_wchar_read_int(basic_istream_wchar *this, int *v)
7303 return basic_istream_read_int(this, v, num_get_wchar_use_facet(
7304 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7307 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAH@Z */
7308 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAH@Z */
7309 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_int, 8)
7310 basic_istream_wchar* __thiscall basic_istream_short_read_int(basic_istream_wchar *this, int *v)
7312 return basic_istream_read_int(this, v, num_get_short_use_facet(
7313 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7316 static basic_istream_wchar* basic_istream_read_uint(basic_istream_wchar *this, unsigned int *v, const num_get *numget)
7318 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7319 int state = IOSTATE_goodbit;
7321 TRACE("(%p %p)\n", this, v);
7323 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7324 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7325 istreambuf_iterator_wchar first={0}, last={0};
7327 first.strbuf = strbuf;
7328 num_get_wchar_get_uint(numget, &last, first, last, &base->base, &state, v);
7330 basic_istream_wchar_sentry_destroy(this);
7332 basic_ios_wchar_setstate(base, state);
7333 return this;
7336 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAI@Z */
7337 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAI@Z */
7338 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_uint, 8)
7339 basic_istream_wchar* __thiscall basic_istream_wchar_read_uint(basic_istream_wchar *this, unsigned int *v)
7341 return basic_istream_read_uint(this, v, num_get_wchar_use_facet(
7342 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7345 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAI@Z */
7346 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAI@Z */
7347 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_uint, 8)
7348 basic_istream_wchar* __thiscall basic_istream_short_read_uint(basic_istream_wchar *this, unsigned int *v)
7350 return basic_istream_read_uint(this, v, num_get_short_use_facet(
7351 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7354 static basic_istream_wchar* basic_istream_read_long(basic_istream_wchar *this, LONG *v, const num_get *numget)
7356 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7357 int state = IOSTATE_goodbit;
7359 TRACE("(%p %p)\n", this, v);
7361 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7362 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7363 istreambuf_iterator_wchar first={0}, last={0};
7365 first.strbuf = strbuf;
7366 num_get_wchar_get_long(numget, &last, first, last, &base->base, &state, v);
7368 basic_istream_wchar_sentry_destroy(this);
7370 basic_ios_wchar_setstate(base, state);
7371 return this;
7374 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAJ@Z */
7375 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAJ@Z */
7376 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_long, 8)
7377 basic_istream_wchar* __thiscall basic_istream_wchar_read_long(basic_istream_wchar *this, LONG *v)
7379 return basic_istream_read_long(this, v, num_get_wchar_use_facet(
7380 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7383 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAJ@Z */
7384 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAJ@Z */
7385 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_long, 8)
7386 basic_istream_wchar* __thiscall basic_istream_short_read_long(basic_istream_wchar *this, LONG *v)
7388 return basic_istream_read_long(this, v, num_get_short_use_facet(
7389 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7392 static basic_istream_wchar* basic_istream_read_ulong(basic_istream_wchar *this, ULONG *v, const num_get *numget)
7394 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7395 int state = IOSTATE_goodbit;
7397 TRACE("(%p %p)\n", this, v);
7399 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7400 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7401 istreambuf_iterator_wchar first={0}, last={0};
7403 first.strbuf = strbuf;
7404 num_get_wchar_get_ulong(numget, &last, first, last, &base->base, &state, v);
7406 basic_istream_wchar_sentry_destroy(this);
7408 basic_ios_wchar_setstate(base, state);
7409 return this;
7412 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAK@Z */
7413 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAK@Z */
7414 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_ulong, 8)
7415 basic_istream_wchar* __thiscall basic_istream_wchar_read_ulong(basic_istream_wchar *this, ULONG *v)
7417 return basic_istream_read_ulong(this, v, num_get_wchar_use_facet(
7418 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7421 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAK@Z */
7422 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAK@Z */
7423 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_ulong, 8)
7424 basic_istream_wchar* __thiscall basic_istream_short_read_ulong(basic_istream_wchar *this, ULONG *v)
7426 return basic_istream_read_ulong(this, v, num_get_short_use_facet(
7427 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7430 static basic_istream_wchar* basic_istream_read_float(basic_istream_wchar *this, float *v, const num_get *numget)
7432 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7433 int state = IOSTATE_goodbit;
7435 TRACE("(%p %p)\n", this, v);
7437 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7438 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7439 istreambuf_iterator_wchar first={0}, last={0};
7441 first.strbuf = strbuf;
7442 num_get_wchar_get_float(numget, &last, first, last, &base->base, &state, v);
7444 basic_istream_wchar_sentry_destroy(this);
7446 basic_ios_wchar_setstate(base, state);
7447 return this;
7450 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAM@Z */
7451 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAM@Z */
7452 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_float, 8)
7453 basic_istream_wchar* __thiscall basic_istream_wchar_read_float(basic_istream_wchar *this, float *v)
7455 return basic_istream_read_float(this, v, num_get_wchar_use_facet(
7456 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7459 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAM@Z */
7460 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAM@Z */
7461 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_float, 8)
7462 basic_istream_wchar* __thiscall basic_istream_short_read_float(basic_istream_wchar *this, float *v)
7464 return basic_istream_read_float(this, v, num_get_short_use_facet(
7465 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7468 static basic_istream_wchar* basic_istream_read_double(basic_istream_wchar *this, double *v, const num_get *numget)
7470 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7471 int state = IOSTATE_goodbit;
7473 TRACE("(%p %p)\n", this, v);
7475 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7476 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7477 istreambuf_iterator_wchar first={0}, last={0};
7479 first.strbuf = strbuf;
7480 num_get_wchar_get_double(numget, &last, first, last, &base->base, &state, v);
7482 basic_istream_wchar_sentry_destroy(this);
7484 basic_ios_wchar_setstate(base, state);
7485 return this;
7488 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAN@Z */
7489 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAN@Z */
7490 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_double, 8)
7491 basic_istream_wchar* __thiscall basic_istream_wchar_read_double(basic_istream_wchar *this, double *v)
7493 return basic_istream_read_double(this, v, num_get_wchar_use_facet(
7494 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7497 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAN@Z */
7498 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAN@Z */
7499 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_double, 8)
7500 basic_istream_wchar* __thiscall basic_istream_short_read_double(basic_istream_wchar *this, double *v)
7502 return basic_istream_read_double(this, v, num_get_short_use_facet(
7503 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7506 static basic_istream_wchar* basic_istream_read_ldouble(basic_istream_wchar *this, double *v, const num_get *numget)
7508 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7509 int state = IOSTATE_goodbit;
7511 TRACE("(%p %p)\n", this, v);
7513 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7514 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7515 istreambuf_iterator_wchar first={0}, last={0};
7517 first.strbuf = strbuf;
7518 num_get_wchar_get_ldouble(numget, &last, first, last, &base->base, &state, v);
7520 basic_istream_wchar_sentry_destroy(this);
7522 basic_ios_wchar_setstate(base, state);
7523 return this;
7526 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAO@Z */
7527 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAO@Z */
7528 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_ldouble, 8)
7529 basic_istream_wchar* __thiscall basic_istream_wchar_read_ldouble(basic_istream_wchar *this, double *v)
7531 return basic_istream_read_ldouble(this, v, num_get_wchar_use_facet(
7532 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7535 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAO@Z */
7536 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAO@Z */
7537 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_ldouble, 8)
7538 basic_istream_wchar* __thiscall basic_istream_short_read_ldouble(basic_istream_wchar *this, double *v)
7540 return basic_istream_read_ldouble(this, v, num_get_short_use_facet(
7541 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7544 static basic_istream_wchar* basic_istream_read_ptr(basic_istream_wchar *this, void **v, const num_get *numget)
7546 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7547 int state = IOSTATE_goodbit;
7549 TRACE("(%p %p)\n", this, v);
7551 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7552 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7553 istreambuf_iterator_wchar first={0}, last={0};
7555 first.strbuf = strbuf;
7556 num_get_wchar_get_void(numget, &last, first, last, &base->base, &state, v);
7558 basic_istream_wchar_sentry_destroy(this);
7560 basic_ios_wchar_setstate(base, state);
7561 return this;
7564 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAPAX@Z */
7565 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAPEAX@Z */
7566 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_ptr, 8)
7567 basic_istream_wchar* __thiscall basic_istream_wchar_read_ptr(basic_istream_wchar *this, void **v)
7569 return basic_istream_read_ptr(this, v, num_get_wchar_use_facet(
7570 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7573 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAPAX@Z */
7574 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAPEAX@Z */
7575 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_ptr, 8)
7576 basic_istream_wchar* __thiscall basic_istream_short_read_ptr(basic_istream_wchar *this, void **v)
7578 return basic_istream_read_ptr(this, v, num_get_short_use_facet(
7579 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7582 static basic_istream_wchar* basic_istream_read_int64(basic_istream_wchar *this, __int64 *v, const num_get *numget)
7584 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7585 int state = IOSTATE_goodbit;
7587 TRACE("(%p %p)\n", this, v);
7589 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7590 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7591 istreambuf_iterator_wchar first={0}, last={0};
7593 first.strbuf = strbuf;
7594 num_get_wchar_get_int64(numget, &last, first, last, &base->base, &state, v);
7596 basic_istream_wchar_sentry_destroy(this);
7598 basic_ios_wchar_setstate(base, state);
7599 return this;
7602 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_J@Z */
7603 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_J@Z */
7604 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_int64, 8)
7605 basic_istream_wchar* __thiscall basic_istream_wchar_read_int64(basic_istream_wchar *this, __int64 *v)
7607 return basic_istream_read_int64(this, v, num_get_wchar_use_facet(
7608 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7611 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_J@Z */
7612 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_J@Z */
7613 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_int64, 8)
7614 basic_istream_wchar* __thiscall basic_istream_short_read_int64(basic_istream_wchar *this, __int64 *v)
7616 return basic_istream_read_int64(this, v, num_get_short_use_facet(
7617 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7620 static basic_istream_wchar* basic_istream_read_uint64(basic_istream_wchar *this, unsigned __int64 *v, const num_get *numget)
7622 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7623 int state = IOSTATE_goodbit;
7625 TRACE("(%p %p)\n", this, v);
7627 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7628 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7629 istreambuf_iterator_wchar first={0}, last={0};
7631 first.strbuf = strbuf;
7632 num_get_wchar_get_uint64(numget, &last, first, last, &base->base, &state, v);
7634 basic_istream_wchar_sentry_destroy(this);
7636 basic_ios_wchar_setstate(base, state);
7637 return this;
7640 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_K@Z */
7641 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_K@Z */
7642 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_uint64, 8)
7643 basic_istream_wchar* __thiscall basic_istream_wchar_read_uint64(basic_istream_wchar *this, unsigned __int64 *v)
7645 return basic_istream_read_uint64(this, v, num_get_wchar_use_facet(
7646 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7649 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_K@Z */
7650 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_K@Z */
7651 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_uint64, 8)
7652 basic_istream_wchar* __thiscall basic_istream_short_read_uint64(basic_istream_wchar *this, unsigned __int64 *v)
7654 return basic_istream_read_uint64(this, v, num_get_short_use_facet(
7655 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7658 static basic_istream_wchar* basic_istream_read_bool(basic_istream_wchar *this, MSVCP_bool *v, const num_get *numget)
7660 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7661 int state = IOSTATE_goodbit;
7663 TRACE("(%p %p)\n", this, v);
7665 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7666 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7667 istreambuf_iterator_wchar first={0}, last={0};
7669 first.strbuf = strbuf;
7670 num_get_wchar_get_bool(numget, &last, first, last, &base->base, &state, v);
7672 basic_istream_wchar_sentry_destroy(this);
7674 basic_ios_wchar_setstate(base, state);
7675 return this;
7678 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_N@Z */
7679 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_N@Z */
7680 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_bool, 8)
7681 basic_istream_wchar* __thiscall basic_istream_wchar_read_bool(basic_istream_wchar *this, MSVCP_bool *v)
7683 return basic_istream_read_bool(this, v, num_get_wchar_use_facet(
7684 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7687 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_N@Z */
7688 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_N@Z */
7689 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_bool, 8)
7690 basic_istream_wchar* __thiscall basic_istream_short_read_bool(basic_istream_wchar *this, MSVCP_bool *v)
7692 return basic_istream_read_bool(this, v, num_get_short_use_facet(
7693 basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
7696 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
7697 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
7698 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
7699 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
7700 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_streambuf, 8)
7701 basic_istream_wchar* __thiscall basic_istream_wchar_read_streambuf(
7702 basic_istream_wchar *this, basic_streambuf_wchar *streambuf)
7704 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7705 IOSB_iostate state = IOSTATE_failbit;
7706 unsigned short c = '\n';
7708 TRACE("(%p %p)\n", this, streambuf);
7710 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7711 for(c = basic_streambuf_wchar_sgetc(basic_ios_wchar_rdbuf_get(base)); c!=WEOF;
7712 c = basic_streambuf_wchar_snextc(basic_ios_wchar_rdbuf_get(base))) {
7713 state = IOSTATE_goodbit;
7714 if(basic_streambuf_wchar_sputc(streambuf, c) == WEOF)
7715 break;
7718 basic_istream_wchar_sentry_destroy(this);
7720 basic_ios_wchar_setstate(base, state | (c==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit));
7721 return this;
7724 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */
7725 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */
7726 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */
7727 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */
7728 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_func, 8)
7729 basic_istream_wchar* __thiscall basic_istream_wchar_read_func(basic_istream_wchar *this,
7730 basic_istream_wchar* (__cdecl *pfunc)(basic_istream_wchar*))
7732 TRACE("(%p %p)\n", this, pfunc);
7733 pfunc(this);
7734 return this;
7737 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AAV21@@Z@Z */
7738 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AEAV21@@Z@Z */
7739 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@GU?$char_traits@G@std@@@1@AAV21@@Z@Z */
7740 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@GU?$char_traits@G@std@@@1@AEAV21@@Z@Z */
7741 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_func_basic_ios, 8)
7742 basic_istream_wchar* __thiscall basic_istream_wchar_read_func_basic_ios(basic_istream_wchar *this,
7743 basic_ios_wchar* (__cdecl *pfunc)(basic_ios_wchar*))
7745 TRACE("(%p %p)\n", this, pfunc);
7746 pfunc(basic_istream_wchar_get_basic_ios(this));
7747 return this;
7750 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */
7751 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */
7752 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */
7753 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */
7754 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_func_ios_base, 8)
7755 basic_istream_wchar* __thiscall basic_istream_wchar_read_func_ios_base(
7756 basic_istream_wchar *this, ios_base* (__cdecl *pfunc)(ios_base*))
7758 TRACE("(%p %p)\n", this, pfunc);
7759 pfunc(&basic_istream_wchar_get_basic_ios(this)->base);
7760 return this;
7763 static inline basic_ios_char* basic_iostream_char_to_basic_ios(basic_iostream_char *ptr)
7765 return (basic_ios_char*)((char*)ptr+basic_iostream_char_vbtable1[1]);
7768 static inline basic_iostream_char* basic_iostream_char_from_basic_ios(basic_ios_char *ptr)
7770 return (basic_iostream_char*)((char*)ptr-basic_iostream_char_vbtable1[1]);
7773 /* ??0?$basic_iostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
7774 /* ??0?$basic_iostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
7775 DEFINE_THISCALL_WRAPPER(basic_iostream_char_ctor, 12)
7776 basic_iostream_char* __thiscall basic_iostream_char_ctor(basic_iostream_char *this, basic_streambuf_char *strbuf, MSVCP_bool virt_init)
7778 basic_ios_char *basic_ios;
7780 TRACE("(%p %p %d)\n", this, strbuf, virt_init);
7782 if(virt_init) {
7783 this->base1.vbtable = basic_iostream_char_vbtable1;
7784 this->base2.vbtable = basic_iostream_char_vbtable2;
7785 basic_ios = basic_istream_char_get_basic_ios(&this->base1);
7786 basic_ios_char_ctor(basic_ios);
7787 }else {
7788 basic_ios = basic_istream_char_get_basic_ios(&this->base1);
7791 basic_ios->base.vtable = &MSVCP_basic_iostream_char_vtable;
7793 basic_istream_char_ctor(&this->base1, strbuf, FALSE, FALSE);
7794 basic_ostream_char_ctor_uninitialized(&this->base2, 0, FALSE, FALSE);
7795 return this;
7798 /* ??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UAE@XZ */
7799 /* ??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UEAA@XZ */
7800 DEFINE_THISCALL_WRAPPER(basic_iostream_char_dtor, 4)
7801 void __thiscall basic_iostream_char_dtor(basic_ios_char *base)
7803 basic_iostream_char *this = basic_iostream_char_from_basic_ios(base);
7805 TRACE("(%p)\n", this);
7806 basic_ostream_char_dtor(basic_ostream_char_to_basic_ios(&this->base2));
7807 basic_istream_char_dtor(basic_istream_char_to_basic_ios(&this->base1));
7810 /* ??_D?$basic_iostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
7811 /* ??_D?$basic_iostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
7812 DEFINE_THISCALL_WRAPPER(basic_iostream_char_vbase_dtor, 4)
7813 void __thiscall basic_iostream_char_vbase_dtor(basic_iostream_char *this)
7815 TRACE("(%p)\n", this);
7816 basic_iostream_char_dtor(basic_iostream_char_to_basic_ios(this));
7817 basic_ios_char_dtor(basic_istream_char_get_basic_ios(&this->base1));
7820 DEFINE_THISCALL_WRAPPER(basic_iostream_char_vector_dtor, 8)
7821 basic_iostream_char* __thiscall basic_iostream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
7823 basic_iostream_char *this = basic_iostream_char_from_basic_ios(base);
7825 TRACE("(%p %x)\n", this, flags);
7827 if(flags & 2) {
7828 /* we have an array, with the number of elements stored before the first object */
7829 INT_PTR i, *ptr = (INT_PTR *)this-1;
7831 for(i=*ptr-1; i>=0; i--)
7832 basic_iostream_char_vbase_dtor(this+i);
7833 MSVCRT_operator_delete(ptr);
7834 } else {
7835 basic_iostream_char_vbase_dtor(this);
7836 if(flags & 1)
7837 MSVCRT_operator_delete(this);
7840 return this;
7843 static inline basic_ios_wchar* basic_iostream_wchar_to_basic_ios(basic_iostream_wchar *ptr)
7845 return (basic_ios_wchar*)((char*)ptr+basic_iostream_wchar_vbtable1[1]);
7848 static inline basic_iostream_wchar* basic_iostream_wchar_from_basic_ios(basic_ios_wchar *ptr)
7850 return (basic_iostream_wchar*)((char*)ptr-basic_iostream_wchar_vbtable1[1]);
7853 /* ??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
7854 /* ??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
7855 DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_ctor, 12)
7856 basic_iostream_wchar* __thiscall basic_iostream_wchar_ctor(basic_iostream_wchar *this,
7857 basic_streambuf_wchar *strbuf, MSVCP_bool virt_init)
7859 basic_ios_wchar *basic_ios;
7861 TRACE("(%p %p %d)\n", this, strbuf, virt_init);
7863 if(virt_init) {
7864 this->base1.vbtable = basic_iostream_wchar_vbtable1;
7865 this->base2.vbtable = basic_iostream_wchar_vbtable2;
7866 basic_ios = basic_istream_wchar_get_basic_ios(&this->base1);
7867 basic_ios_wchar_ctor(basic_ios);
7868 }else {
7869 basic_ios = basic_istream_wchar_get_basic_ios(&this->base1);
7872 basic_istream_wchar_ctor(&this->base1, strbuf, FALSE, FALSE);
7873 basic_ostream_wchar_ctor_uninitialized(&this->base2, 0, FALSE, FALSE);
7875 basic_ios->base.vtable = &MSVCP_basic_iostream_wchar_vtable;
7876 return this;
7879 /* ??0?$basic_iostream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
7880 /* ??0?$basic_iostream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
7881 DEFINE_THISCALL_WRAPPER(basic_iostream_short_ctor, 12)
7882 basic_iostream_wchar* __thiscall basic_iostream_short_ctor(basic_iostream_wchar *this,
7883 basic_streambuf_wchar *strbuf, MSVCP_bool virt_init)
7885 basic_iostream_wchar_ctor(this, strbuf, virt_init);
7886 basic_istream_wchar_get_basic_ios(&this->base1)->base.vtable = &MSVCP_basic_iostream_short_vtable;
7887 return this;
7890 /* ??1?$basic_iostream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
7891 /* ??1?$basic_iostream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
7892 /* ??1?$basic_iostream@GU?$char_traits@G@std@@@std@@UAE@XZ */
7893 /* ??1?$basic_iostream@GU?$char_traits@G@std@@@std@@UEAA@XZ */
7894 DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_dtor, 4)
7895 void __thiscall basic_iostream_wchar_dtor(basic_ios_wchar *base)
7897 basic_iostream_wchar *this = basic_iostream_wchar_from_basic_ios(base);
7899 TRACE("(%p)\n", this);
7900 basic_ostream_wchar_dtor(basic_ostream_wchar_to_basic_ios(&this->base2));
7901 basic_istream_wchar_dtor(basic_istream_wchar_to_basic_ios(&this->base1));
7904 /* ??_D?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
7905 /* ??_D?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
7906 /* ??_D?$basic_iostream@GU?$char_traits@G@std@@@std@@QAEXXZ */
7907 /* ??_D?$basic_iostream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
7908 DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_vbase_dtor, 4)
7909 void __thiscall basic_iostream_wchar_vbase_dtor(basic_iostream_wchar *this)
7911 TRACE("(%p)\n", this);
7912 basic_iostream_wchar_dtor(basic_iostream_wchar_to_basic_ios(this));
7913 basic_ios_wchar_dtor(basic_istream_wchar_get_basic_ios(&this->base1));
7916 DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_vector_dtor, 8)
7917 basic_iostream_wchar* __thiscall basic_iostream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags)
7919 basic_iostream_wchar *this = basic_iostream_wchar_from_basic_ios(base);
7921 TRACE("(%p %x)\n", this, flags);
7923 if(flags & 2) {
7924 /* we have an array, with the number of elements stored before the first object */
7925 INT_PTR i, *ptr = (INT_PTR *)this-1;
7927 for(i=*ptr-1; i>=0; i--)
7928 basic_iostream_wchar_vbase_dtor(this+i);
7929 MSVCRT_operator_delete(ptr);
7930 } else {
7931 basic_iostream_wchar_vbase_dtor(this);
7932 if(flags & 1)
7933 MSVCRT_operator_delete(this);
7936 return this;
7939 static void __cdecl setprecision_func(ios_base *base, streamsize prec)
7941 ios_base_precision_set(base, prec);
7944 /* ?setprecision@std@@YA?AU?$_Smanip@H@1@H@Z */
7945 /* ?setprecision@std@@YA?AU?$_Smanip@_J@1@_J@Z */
7946 manip_streamsize* __cdecl setprecision(manip_streamsize *ret, streamsize prec)
7948 TRACE("(%p %s)\n", ret, wine_dbgstr_longlong(prec));
7950 ret->pfunc = setprecision_func;
7951 ret->arg = prec;
7952 return ret;
7955 static void __cdecl setw_func(ios_base *base, streamsize width)
7957 ios_base_width_set(base, width);
7960 /* ?setw@std@@YA?AU?$_Smanip@H@1@H@Z */
7961 /* ?setw@std@@YA?AU?$_Smanip@_J@1@_J@Z */
7962 manip_streamsize* __cdecl setw(manip_streamsize *ret, streamsize width)
7964 TRACE("(%p %s)\n", ret, wine_dbgstr_longlong(width));
7966 ret->pfunc = setw_func;
7967 ret->arg = width;
7968 return ret;
7971 static void __cdecl resetioflags_func(ios_base *base, int mask)
7973 ios_base_setf_mask(base, 0, mask);
7976 /* ?resetiosflags@std@@YA?AU?$_Smanip@H@1@H@Z */
7977 manip_int* __cdecl resetiosflags(manip_int *ret, int mask)
7979 TRACE("(%p %d)\n", ret, mask);
7981 ret->pfunc = resetioflags_func;
7982 ret->arg = mask;
7983 return ret;
7986 static void __cdecl setiosflags_func(ios_base *base, int mask)
7988 ios_base_setf_mask(base, FMTFLAG_mask, mask);
7991 /* ?setiosflags@std@@YA?AU?$_Smanip@H@1@H@Z */
7992 manip_int* __cdecl setiosflags(manip_int *ret, int mask)
7994 TRACE("(%p %d)\n", ret, mask);
7996 ret->pfunc = setiosflags_func;
7997 ret->arg = mask;
7998 return ret;
8001 static void __cdecl setbase_func(ios_base *base, int set_base)
8003 if(set_base == 10)
8004 set_base = FMTFLAG_dec;
8005 else if(set_base == 8)
8006 set_base = FMTFLAG_oct;
8007 else if(set_base == 16)
8008 set_base = FMTFLAG_hex;
8009 else
8010 set_base = 0;
8012 ios_base_setf_mask(base, set_base, FMTFLAG_basefield);
8015 /* ?setbase@std@@YA?AU?$_Smanip@H@1@H@Z */
8016 manip_int* __cdecl setbase(manip_int *ret, int base)
8018 TRACE("(%p %d)\n", ret, base);
8020 ret->pfunc = setbase_func;
8021 ret->arg = base;
8022 return ret;
8025 static basic_filebuf_char filebuf_char_stdin;
8026 /* ?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A */
8027 struct {
8028 basic_istream_char obj;
8029 basic_ios_char vbase;
8030 } cin = { { 0 } };
8031 /* ?_Ptr_cin@std@@3PAV?$basic_istream@DU?$char_traits@D@std@@@1@A */
8032 /* ?_Ptr_cin@std@@3PEAV?$basic_istream@DU?$char_traits@D@std@@@1@EA */
8033 basic_istream_char *_Ptr_cin = &cin.obj;
8035 static basic_filebuf_wchar filebuf_short_stdin;
8036 /* ?wcin@std@@3V?$basic_istream@GU?$char_traits@G@std@@@1@A */
8037 struct {
8038 basic_istream_wchar obj;
8039 basic_ios_wchar vbase;
8040 } ucin = { { 0 } };
8041 /* ?_Ptr_wcin@std@@3PAV?$basic_istream@GU?$char_traits@G@std@@@1@A */
8042 /* ?_Ptr_wcin@std@@3PEAV?$basic_istream@GU?$char_traits@G@std@@@1@EA */
8043 basic_istream_wchar *_Ptr_ucin = &ucin.obj;
8045 static basic_filebuf_wchar filebuf_wchar_stdin;
8046 /* ?wcin@std@@3V?$basic_istream@_WU?$char_traits@_W@std@@@1@A */
8047 struct {
8048 basic_istream_wchar obj;
8049 basic_ios_wchar vbase;
8050 } wcin = { { 0 } };
8051 /* ?_Ptr_wcin@std@@3PAV?$basic_istream@_WU?$char_traits@_W@std@@@1@A */
8052 /* ?_Ptr_wcin@std@@3PEAV?$basic_istream@_WU?$char_traits@_W@std@@@1@EA */
8053 basic_istream_wchar *_Ptr_wcin = &wcin.obj;
8055 static basic_filebuf_char filebuf_char_stdout;
8056 /* ?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A */
8057 struct {
8058 basic_ostream_char obj;
8059 basic_ios_char vbase;
8060 } cout = { { 0 } };
8061 /* ?_Ptr_cout@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A */
8062 /* ?_Ptr_cout@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA */
8063 basic_ostream_char *_Ptr_cout = &cout.obj;
8065 static basic_filebuf_wchar filebuf_short_stdout;
8066 /* ?wcout@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A */
8067 struct {
8068 basic_ostream_wchar obj;
8069 basic_ios_wchar vbase;
8070 } ucout = { { 0 } };
8071 /* ?_Ptr_wcout@std@@3PAV?$basic_ostream@GU?$char_traits@G@std@@@1@A */
8072 /* ?_Ptr_wcout@std@@3PEAV?$basic_ostream@GU?$char_traits@G@std@@@1@EA */
8073 basic_ostream_wchar *_Ptr_ucout = &ucout.obj;
8075 static basic_filebuf_wchar filebuf_wchar_stdout;
8076 /* ?wcout@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A */
8077 struct {
8078 basic_ostream_wchar obj;
8079 basic_ios_wchar vbase;
8080 } wcout = { { 0 } };
8081 /* ?_Ptr_wcout@std@@3PAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@A */
8082 /* ?_Ptr_wcout@std@@3PEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@EA */
8083 basic_ostream_wchar *_Ptr_wcout = &wcout.obj;
8085 static basic_filebuf_char filebuf_char_stderr;
8086 /* ?cerr@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A */
8087 struct {
8088 basic_ostream_char obj;
8089 basic_ios_char vbase;
8090 } cerr = { { 0 } };
8091 /* ?_Ptr_cerr@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A */
8092 /* ?_Ptr_cerr@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA */
8093 basic_ostream_char *_Ptr_cerr = &cerr.obj;
8095 static basic_filebuf_wchar filebuf_short_stderr;
8096 /* ?wcerr@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A */
8097 struct {
8098 basic_ostream_wchar obj;
8099 basic_ios_wchar vbase;
8100 } ucerr = { { 0 } };
8101 /* ?_Ptr_wcerr@std@@3PAV?$basic_ostream@GU?$char_traits@G@std@@@1@A */
8102 /* ?_Ptr_wcerr@std@@3PEAV?$basic_ostream@GU?$char_traits@G@std@@@1@EA */
8103 basic_ostream_wchar *_Ptr_ucerr = &ucerr.obj;
8105 static basic_filebuf_wchar filebuf_wchar_stderr;
8106 /* ?wcerr@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A */
8107 struct {
8108 basic_ostream_wchar obj;
8109 basic_ios_wchar vbase;
8110 } wcerr = { { 0 } };
8111 /* ?_Ptr_wcerr@std@@3PAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@A */
8112 /* ?_Ptr_wcerr@std@@3PEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@EA */
8113 basic_ostream_wchar *_Ptr_wcerr = &wcerr.obj;
8115 static basic_filebuf_char filebuf_char_log;
8116 /* ?clog@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A */
8117 struct {
8118 basic_ostream_char obj;
8119 basic_ios_char vbase;
8120 } clog = { { 0 } };
8121 /* ?_Ptr_clog@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A */
8122 /* ?_Ptr_clog@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA */
8123 basic_ostream_char *_Ptr_clog = &clog.obj;
8125 static basic_filebuf_wchar filebuf_short_log;
8126 /* ?wclog@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A */
8127 struct {
8128 basic_ostream_wchar obj;
8129 basic_ios_wchar vbase;
8130 } uclog = { { 0 } };
8131 /* ?_Ptr_wclog@std@@3PAV?$basic_ostream@GU?$char_traits@G@std@@@1@A */
8132 /* ?_Ptr_wclog@std@@3PEAV?$basic_ostream@GU?$char_traits@G@std@@@1@EA */
8133 basic_ostream_wchar *_Ptr_uclog = &uclog.obj;
8135 static basic_filebuf_wchar filebuf_wchar_log;
8136 /* ?wclog@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A */
8137 struct {
8138 basic_ostream_wchar obj;
8139 basic_ios_wchar vbase;
8140 } wclog = { { 0 } };
8141 /* ?_Ptr_wclog@std@@3PAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@A */
8142 /* ?_Ptr_wclog@std@@3PEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@EA */
8143 basic_ostream_wchar *_Ptr_wclog = &wclog.obj;
8145 /* ?_Init_cnt@Init@ios_base@std@@0HA */
8146 int ios_base_Init__Init_cnt = -1;
8148 /* ?_Init_cnt_func@Init@ios_base@std@@CAAAHXZ */
8149 /* ?_Init_cnt_func@Init@ios_base@std@@CAAEAHXZ */
8150 int* __cdecl ios_base_Init__Init_cnt_func(void)
8152 return &ios_base_Init__Init_cnt;
8155 /* ?_Init_ctor@Init@ios_base@std@@CAXPAV123@@Z */
8156 /* ?_Init_ctor@Init@ios_base@std@@CAXPEAV123@@Z */
8157 void __cdecl ios_base_Init__Init_ctor(void *this)
8159 TRACE("(%p)\n", this);
8161 if(ios_base_Init__Init_cnt < 0)
8162 ios_base_Init__Init_cnt = 1;
8163 else
8164 ios_base_Init__Init_cnt++;
8167 /* ??0Init@ios_base@std@@QAE@XZ */
8168 /* ??0Init@ios_base@std@@QEAA@XZ */
8169 DEFINE_THISCALL_WRAPPER(ios_base_Init_ctor, 4)
8170 void* __thiscall ios_base_Init_ctor(void *this)
8172 ios_base_Init__Init_ctor(this);
8173 return this;
8176 /* ?_Init_dtor@Init@ios_base@std@@CAXPAV123@@Z */
8177 /* ?_Init_dtor@Init@ios_base@std@@CAXPEAV123@@Z */
8178 void __cdecl ios_base_Init__Init_dtor(void *this)
8180 TRACE("(%p)\n", this);
8182 ios_base_Init__Init_cnt--;
8183 if(!ios_base_Init__Init_cnt) {
8184 basic_ostream_char_flush(&cout.obj);
8185 basic_ostream_char_flush(&cerr.obj);
8186 basic_ostream_char_flush(&clog.obj);
8190 /* ??1Init@ios_base@std@@QAE@XZ */
8191 /* ??1Init@ios_base@std@@QEAA@XZ */
8192 DEFINE_THISCALL_WRAPPER(ios_base_Init_dtor, 4)
8193 void __thiscall ios_base_Init_dtor(void *this)
8195 ios_base_Init__Init_dtor(this);
8198 /* ??4Init@ios_base@std@@QAEAAV012@ABV012@@Z */
8199 /* ??4Init@ios_base@std@@QEAAAEAV012@AEBV012@@Z */
8200 DEFINE_THISCALL_WRAPPER(ios_base_Init_op_assign, 8)
8201 void* __thiscall ios_base_Init_op_assign(void *this, void *rhs)
8203 TRACE("(%p %p)\n", this, rhs);
8204 return this;
8207 /* ?_Init_cnt@_Winit@std@@0HA */
8208 int _Winit__Init_cnt = -1;
8210 /* ??0_Winit@std@@QAE@XZ */
8211 /* ??0_Winit@std@@QEAA@XZ */
8212 DEFINE_THISCALL_WRAPPER(_Winit_ctor, 4)
8213 void* __thiscall _Winit_ctor(void *this)
8215 TRACE("(%p)\n", this);
8217 if(_Winit__Init_cnt < 0)
8218 _Winit__Init_cnt = 1;
8219 else
8220 _Winit__Init_cnt++;
8222 return this;
8225 /* ??1_Winit@std@@QAE@XZ */
8226 /* ??1_Winit@std@@QAE@XZ */
8227 DEFINE_THISCALL_WRAPPER(_Winit_dtor, 4)
8228 void __thiscall _Winit_dtor(void *this)
8230 TRACE("(%p)\n", this);
8232 _Winit__Init_cnt--;
8233 if(!_Winit__Init_cnt) {
8234 basic_ostream_wchar_flush(&wcout.obj);
8235 basic_ostream_wchar_flush(&wcerr.obj);
8236 basic_ostream_wchar_flush(&wclog.obj);
8240 /* ??4_Winit@std@@QAEAAV01@ABV01@@Z */
8241 /* ??4_Winit@std@@QEAAAEAV01@AEBV01@@Z */
8242 DEFINE_THISCALL_WRAPPER(_Winit_op_assign, 8)
8243 void* __thiscall _Winit_op_assign(void *this, void *rhs)
8245 TRACE("(%p %p)\n", this, rhs);
8246 return this;
8249 void init_io(void *base)
8251 #ifdef __x86_64__
8252 init_iosb_rtti(base);
8253 init_ios_base_rtti(base);
8254 init_basic_ios_char_rtti(base);
8255 init_basic_ios_wchar_rtti(base);
8256 init_basic_ios_short_rtti(base);
8257 init_basic_streambuf_char_rtti(base);
8258 init_basic_streambuf_wchar_rtti(base);
8259 init_basic_streambuf_short_rtti(base);
8260 init_basic_filebuf_char_rtti(base);
8261 init_basic_filebuf_wchar_rtti(base);
8262 init_basic_filebuf_short_rtti(base);
8263 init_basic_ostream_char_rtti(base);
8264 init_basic_ostream_wchar_rtti(base);
8265 init_basic_ostream_short_rtti(base);
8266 init_basic_istream_char_rtti(base);
8267 init_basic_istream_wchar_rtti(base);
8268 init_basic_istream_short_rtti(base);
8269 init_basic_iostream_char_rtti(base);
8270 init_basic_iostream_wchar_rtti(base);
8271 init_basic_iostream_short_rtti(base);
8272 #endif
8274 basic_filebuf_char_ctor_file(&filebuf_char_stdin, stdin);
8275 basic_istream_char_ctor(&cin.obj, &filebuf_char_stdin.base, FALSE/*FIXME*/, TRUE);
8277 basic_filebuf_short_ctor_file(&filebuf_short_stdin, stdin);
8278 basic_istream_short_ctor(&ucin.obj, &filebuf_short_stdin.base, FALSE/*FIXME*/, TRUE);
8280 basic_filebuf_wchar_ctor_file(&filebuf_wchar_stdin, stdin);
8281 basic_istream_wchar_ctor(&wcin.obj, &filebuf_wchar_stdin.base, FALSE/*FIXME*/, TRUE);
8283 basic_filebuf_char_ctor_file(&filebuf_char_stdout, stdout);
8284 basic_ostream_char_ctor(&cout.obj, &filebuf_char_stdout.base, FALSE/*FIXME*/, TRUE);
8286 basic_filebuf_short_ctor_file(&filebuf_short_stdout, stdout);
8287 basic_ostream_short_ctor(&ucout.obj, &filebuf_short_stdout.base, FALSE/*FIXME*/, TRUE);
8289 basic_filebuf_wchar_ctor_file(&filebuf_wchar_stdout, stdout);
8290 basic_ostream_wchar_ctor(&wcout.obj, &filebuf_wchar_stdout.base, FALSE/*FIXME*/, TRUE);
8292 basic_filebuf_char_ctor_file(&filebuf_char_stderr, stderr);
8293 basic_ostream_char_ctor(&cerr.obj, &filebuf_char_stderr.base, FALSE/*FIXME*/, TRUE);
8295 basic_filebuf_short_ctor_file(&filebuf_short_stderr, stderr);
8296 basic_ostream_short_ctor(&ucerr.obj, &filebuf_short_stderr.base, FALSE/*FIXME*/, TRUE);
8298 basic_filebuf_wchar_ctor_file(&filebuf_wchar_stderr, stderr);
8299 basic_ostream_wchar_ctor(&wcerr.obj, &filebuf_wchar_stderr.base, FALSE/*FIXME*/, TRUE);
8301 basic_filebuf_char_ctor_file(&filebuf_char_log, stderr);
8302 basic_ostream_char_ctor(&clog.obj, &filebuf_char_log.base, FALSE/*FIXME*/, TRUE);
8304 basic_filebuf_short_ctor_file(&filebuf_short_log, stderr);
8305 basic_ostream_short_ctor(&uclog.obj, &filebuf_short_log.base, FALSE/*FIXME*/, TRUE);
8307 basic_filebuf_wchar_ctor_file(&filebuf_wchar_log, stderr);
8308 basic_ostream_wchar_ctor(&wclog.obj, &filebuf_wchar_log.base, FALSE/*FIXME*/, TRUE);
8311 void free_io(void)
8313 basic_istream_char_vbase_dtor(&cin.obj);
8314 basic_filebuf_char_dtor(&filebuf_char_stdin);
8316 basic_istream_wchar_vbase_dtor(&ucin.obj);
8317 basic_filebuf_wchar_dtor(&filebuf_short_stdin);
8319 basic_istream_wchar_vbase_dtor(&wcin.obj);
8320 basic_filebuf_wchar_dtor(&filebuf_wchar_stdin);
8322 basic_ostream_char_vbase_dtor(&cout.obj);
8323 basic_filebuf_char_dtor(&filebuf_char_stdout);
8325 basic_ostream_wchar_vbase_dtor(&ucout.obj);
8326 basic_filebuf_wchar_dtor(&filebuf_short_stdout);
8328 basic_ostream_wchar_vbase_dtor(&wcout.obj);
8329 basic_filebuf_wchar_dtor(&filebuf_wchar_stdout);
8331 basic_ostream_char_vbase_dtor(&cerr.obj);
8332 basic_filebuf_char_dtor(&filebuf_char_stderr);
8334 basic_ostream_wchar_vbase_dtor(&ucerr.obj);
8335 basic_filebuf_wchar_dtor(&filebuf_short_stderr);
8337 basic_ostream_wchar_vbase_dtor(&wcerr.obj);
8338 basic_filebuf_wchar_dtor(&filebuf_wchar_stderr);
8340 basic_ostream_char_vbase_dtor(&clog.obj);
8341 basic_filebuf_char_dtor(&filebuf_char_log);
8343 basic_ostream_wchar_vbase_dtor(&uclog.obj);
8344 basic_filebuf_wchar_dtor(&filebuf_short_log);
8346 basic_ostream_wchar_vbase_dtor(&wclog.obj);
8347 basic_filebuf_wchar_dtor(&filebuf_wchar_log);