msvcp90: Implement remaining functions in basic_stringbuf<char> class.
[wine/multimedia.git] / dlls / msvcp90 / ios.c
blob9802f7df3063e27bd3c8acb24480a6eb015bd5b2
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 "msvcp90.h"
27 #include "windef.h"
28 #include "winbase.h"
29 #include "wine/debug.h"
30 WINE_DEFAULT_DEBUG_CHANNEL(msvcp90);
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(%ld %s %d)", 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 enum {
54 INITFL_new = 0,
55 INITFL_open = 1,
56 INITFL_close = 2
57 } basic_filebuf__Initfl;
59 typedef struct {
60 basic_streambuf_char base;
61 codecvt_char *cvt;
62 char putback;
63 MSVCP_bool wrotesome;
64 int state;
65 MSVCP_bool close;
66 FILE *file;
67 } basic_filebuf_char;
69 typedef enum {
70 STRINGBUF_allocated = 1,
71 STRINGBUF_no_write = 2,
72 STRINGBUF_no_read = 4,
73 STRINGBUF_append = 8,
74 STRINGBUF_at_end = 16
75 } basic_stringbuf_state;
77 typedef struct {
78 basic_streambuf_char base;
79 char *seekhigh;
80 int state;
81 char allocator; /* empty struct */
82 } basic_stringbuf_char;
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 typedef struct {
145 basic_ostream_char base;
146 basic_filebuf_char filebuf;
147 /* virtual inheritance
148 * basic_ios_char basic_ios;
150 } basic_ofstream_char;
152 typedef struct {
153 basic_istream_char base;
154 basic_filebuf_char filebuf;
155 /* virtual inheritance
156 * basic_ios_char basic_ios;
158 } basic_ifstream_char;
160 typedef struct {
161 basic_iostream_char base;
162 basic_filebuf_char filebuf;
163 /* virtual inheritance
164 * basic_ios_char basic_ios;
166 } basic_fstream_char;
168 extern const vtable_ptr MSVCP_iosb_vtable;
170 /* ??_7ios_base@std@@6B@ */
171 extern const vtable_ptr MSVCP_ios_base_vtable;
173 /* ??_7?$basic_ios@DU?$char_traits@D@std@@@std@@6B@ */
174 extern const vtable_ptr MSVCP_basic_ios_char_vtable;
176 /* ??_7?$basic_ios@_WU?$char_traits@_W@std@@@std@@6B@ */
177 extern const vtable_ptr MSVCP_basic_ios_wchar_vtable;
179 /* ??_7?$basic_ios@GU?$char_traits@G@std@@@std@@6B@ */
180 extern const vtable_ptr MSVCP_basic_ios_short_vtable;
182 /* ??_7?$basic_streambuf@DU?$char_traits@D@std@@@std@@6B@ */
183 extern const vtable_ptr MSVCP_basic_streambuf_char_vtable;
185 /* ??_7?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@6B@ */
186 extern const vtable_ptr MSVCP_basic_streambuf_wchar_vtable;
188 /* ??_7?$basic_streambuf@GU?$char_traits@G@std@@@std@@6B@ */
189 extern const vtable_ptr MSVCP_basic_streambuf_short_vtable;
191 /* ??_7?$basic_filebuf@DU?$char_traits@D@std@@@std@@6B@ */
192 extern const vtable_ptr MSVCP_basic_filebuf_char_vtable;
194 /* ??_7?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@6B@ */
195 extern const vtable_ptr MSVCP_basic_stringbuf_char_vtable;
197 /* ??_8?$basic_ostream@DU?$char_traits@D@std@@@std@@7B@ */
198 const int basic_ostream_char_vbtable[] = {0, sizeof(basic_ostream_char)};
199 /* ??_7?$basic_ostream@DU?$char_traits@D@std@@@std@@6B@ */
200 extern const vtable_ptr MSVCP_basic_ostream_char_vtable;
202 /* ??_8?$basic_ostream@_WU?$char_traits@_W@std@@@std@@7B@ */
203 const int basic_ostream_wchar_vbtable[] = {0, sizeof(basic_ostream_wchar)};
204 /* ??_7?$basic_ostream@_WU?$char_traits@_W@std@@@std@@6B@ */
205 extern const vtable_ptr MSVCP_basic_ostream_wchar_vtable;
207 /* ??_8?$basic_istream@DU?$char_traits@D@std@@@std@@7B@ */
208 const int basic_istream_char_vbtable[] = {0, sizeof(basic_istream_char)};
209 /* ??_7?$basic_istream@DU?$char_traits@D@std@@@std@@6B@ */
210 extern const vtable_ptr MSVCP_basic_istream_char_vtable;
212 /* ??_8?$basic_istream@_WU?$char_traits@_W@std@@@std@@7B@ */
213 const int basic_istream_wchar_vbtable[] = {0, sizeof(basic_istream_wchar)};
214 /* ??_7?$basic_istream@_WU?$char_traits@_W@std@@@std@@6B@ */
215 extern const vtable_ptr MSVCP_basic_istream_wchar_vtable;
217 /* ??_8?$basic_iostream@DU?$char_traits@D@std@@@std@@7B?$basic_istream@DU?$char_traits@D@std@@@1@@ */
218 const int basic_iostream_char_vbtable1[] = {0, sizeof(basic_iostream_char)};
219 /* ??_8?$basic_iostream@DU?$char_traits@D@std@@@std@@7B?$basic_ostream@DU?$char_traits@D@std@@@1@@ */
220 const int basic_iostream_char_vbtable2[] = {0, sizeof(basic_iostream_char)-FIELD_OFFSET(basic_iostream_char, base2)};
221 /* ??_7?$basic_iostream@DU?$char_traits@D@std@@@std@@6B@ */
222 extern const vtable_ptr MSVCP_basic_iostream_char_vtable;
224 /* ??_8?$basic_iostream@_WU?$char_traits@_W@std@@@std@@7B?$basic_istream@_WU?$char_traits@_W@std@@@1@@ */
225 const int basic_iostream_wchar_vbtable1[] = {0, sizeof(basic_iostream_wchar)};
226 /* ??_8?$basic_iostream@_WU?$char_traits@_W@std@@@std@@7B?$basic_ostream@_WU?$char_traits@_W@std@@@1@@ */
227 const int basic_iostream_wchar_vbtable2[] = {0, sizeof(basic_iostream_wchar)-FIELD_OFFSET(basic_iostream_wchar, base2)};
228 /* ??_7?$basic_iostream@_WU?$char_traits@_W@std@@@std@@6B@ */
229 extern const vtable_ptr MSVCP_basic_iostream_wchar_vtable;
231 /* ??_8?$basic_ofstream@DU?$char_traits@D@std@@@std@@7B@ */
232 const int basic_ofstream_char_vbtable[] = {0, sizeof(basic_ofstream_char)};
233 /* ??_7?$basic_ofstream@DU?$char_traits@D@std@@@std@@6B@ */
234 extern const vtable_ptr MSVCP_basic_ofstream_char_vtable;
236 /*??_8?$basic_ifstream@DU?$char_traits@D@std@@@std@@7B@ */
237 const int basic_ifstream_char_vbtable[] = {0, sizeof(basic_ifstream_char)};
238 /* ??_7?$basic_ifstream@DU?$char_traits@D@std@@@std@@6B@ */
239 extern const vtable_ptr MSVCP_basic_ifstream_char_vtable;
241 /* ??_8?$basic_fstream@DU?$char_traits@D@std@@@std@@7B?$basic_istream@DU?$char_traits@D@std@@@1@@ */
242 const int basic_fstream_char_vbtable1[] = {0, sizeof(basic_fstream_char)};
243 /* ??_8?$basic_fstream@DU?$char_traits@D@std@@@std@@7B?$basic_ostream@DU?$char_traits@D@std@@@1@@ */
244 const int basic_fstream_char_vbtable2[] = {0, sizeof(basic_fstream_char)-FIELD_OFFSET(basic_fstream_char, base.base2)};
245 /* ??_7?$basic_fstream@DU?$char_traits@D@std@@@std@@6B@ */
246 extern const vtable_ptr MSVCP_basic_fstream_char_vtable;
248 DEFINE_RTTI_DATA0(iosb, 0, ".?AV?$_Iosb@H@std@@");
249 DEFINE_RTTI_DATA1(ios_base, 0, &iosb_rtti_base_descriptor, ".?AV?$_Iosb@H@std@@");
250 DEFINE_RTTI_DATA2(basic_ios_char, 0, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
251 ".?AV?$basic_ios@DU?$char_traits@D@std@@@std@@");
252 DEFINE_RTTI_DATA2(basic_ios_wchar, 0, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
253 ".?AV?$basic_ios@_WU?$char_traits@_W@std@@@std@@");
254 DEFINE_RTTI_DATA2(basic_ios_short, 0, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
255 ".?AV?$basic_ios@GU?$char_traits@G@std@@@std@@");
256 DEFINE_RTTI_DATA0(basic_streambuf_char, 0,
257 ".?AV?$basic_streambuf@DU?$char_traits@D@std@@@std@@");
258 DEFINE_RTTI_DATA0(basic_streambuf_wchar, 0,
259 ".?AV?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@");
260 DEFINE_RTTI_DATA0(basic_streambuf_short, 0,
261 ".?AV?$basic_streambuf@GU?$char_traits@G@std@@@std@@");
262 DEFINE_RTTI_DATA1(basic_filebuf_char, 0, &basic_streambuf_char_rtti_base_descriptor,
263 ".?AV?$basic_filebuf@DU?$char_traits@D@std@@@std@@");
264 DEFINE_RTTI_DATA1(basic_stringbuf_char, 0, &basic_streambuf_char_rtti_base_descriptor,
265 "@.?AV?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@");
266 DEFINE_RTTI_DATA3(basic_ostream_char, sizeof(basic_ostream_char), &basic_ios_char_rtti_base_descriptor,
267 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
268 ".?AV?$basic_ostream@DU?$char_traits@D@std@@@std@@");
269 DEFINE_RTTI_DATA3(basic_ostream_wchar, sizeof(basic_ostream_wchar), &basic_ios_wchar_rtti_base_descriptor,
270 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
271 ".?AV?$basic_ostream@_WU?$char_traits@_W@std@@@std@@");
272 DEFINE_RTTI_DATA3(basic_istream_char, sizeof(basic_istream_char), &basic_ios_char_rtti_base_descriptor,
273 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
274 ".?AV?$basic_istream@DU?$char_traits@D@std@@@std@@");
275 DEFINE_RTTI_DATA3(basic_istream_wchar, sizeof(basic_istream_wchar), &basic_ios_wchar_rtti_base_descriptor,
276 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
277 ".?AV?$basic_istream@_WU?$char_traits@_W@std@@@std@@");
278 DEFINE_RTTI_DATA8(basic_iostream_char, sizeof(basic_iostream_char),
279 &basic_istream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
280 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
281 &basic_ostream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
282 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
283 ".?AV?$basic_iostream@DU?$char_traits@D@std@@@std@@");
284 DEFINE_RTTI_DATA8(basic_iostream_wchar, sizeof(basic_iostream_wchar),
285 &basic_istream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor,
286 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
287 &basic_ostream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor,
288 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
289 ".?AV?$basic_iostream@_WU?$char_traits@_W@std@@@std@@");
290 DEFINE_RTTI_DATA4(basic_ofstream_char, sizeof(basic_ofstream_char),
291 &basic_ostream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
292 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
293 ".?AV?$basic_ofstream@DU?$char_traits@D@std@@@std@@");
294 DEFINE_RTTI_DATA4(basic_ifstream_char, sizeof(basic_ifstream_char),
295 &basic_istream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
296 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
297 ".?AV?$basic_ifstream@DU?$char_traits@D@std@@@std@@");
298 DEFINE_RTTI_DATA9(basic_fstream_char, sizeof(basic_fstream_char), &basic_istream_char_rtti_base_descriptor,
299 &basic_istream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
300 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
301 &basic_ostream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
302 &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
303 ".?AV?$basic_fstream@DU?$char_traits@D@std@@@std@@");
305 #ifndef __GNUC__
306 void __asm_dummy_vtables(void) {
307 #endif
308 __ASM_VTABLE(iosb, "");
309 __ASM_VTABLE(ios_base, "");
310 __ASM_VTABLE(basic_ios_char, "");
311 __ASM_VTABLE(basic_ios_wchar, "");
312 __ASM_VTABLE(basic_ios_short, "");
313 __ASM_VTABLE(basic_streambuf_char,
314 VTABLE_ADD_FUNC(basic_streambuf_char_overflow)
315 VTABLE_ADD_FUNC(basic_streambuf_char_pbackfail)
316 VTABLE_ADD_FUNC(basic_streambuf_char_showmanyc)
317 VTABLE_ADD_FUNC(basic_streambuf_char_underflow)
318 VTABLE_ADD_FUNC(basic_streambuf_char_uflow)
319 VTABLE_ADD_FUNC(basic_streambuf_char_xsgetn)
320 VTABLE_ADD_FUNC(basic_streambuf_char__Xsgetn_s)
321 VTABLE_ADD_FUNC(basic_streambuf_char_xsputn)
322 VTABLE_ADD_FUNC(basic_streambuf_char_seekoff)
323 VTABLE_ADD_FUNC(basic_streambuf_char_seekpos)
324 VTABLE_ADD_FUNC(basic_streambuf_char_setbuf)
325 VTABLE_ADD_FUNC(basic_streambuf_char_sync)
326 VTABLE_ADD_FUNC(basic_streambuf_char_imbue));
327 __ASM_VTABLE(basic_streambuf_wchar,
328 VTABLE_ADD_FUNC(basic_streambuf_wchar_overflow)
329 VTABLE_ADD_FUNC(basic_streambuf_wchar_pbackfail)
330 VTABLE_ADD_FUNC(basic_streambuf_wchar_showmanyc)
331 VTABLE_ADD_FUNC(basic_streambuf_wchar_underflow)
332 VTABLE_ADD_FUNC(basic_streambuf_wchar_uflow)
333 VTABLE_ADD_FUNC(basic_streambuf_wchar_xsgetn)
334 VTABLE_ADD_FUNC(basic_streambuf_wchar__Xsgetn_s)
335 VTABLE_ADD_FUNC(basic_streambuf_wchar_xsputn)
336 VTABLE_ADD_FUNC(basic_streambuf_wchar_seekoff)
337 VTABLE_ADD_FUNC(basic_streambuf_wchar_seekpos)
338 VTABLE_ADD_FUNC(basic_streambuf_wchar_setbuf)
339 VTABLE_ADD_FUNC(basic_streambuf_wchar_sync)
340 VTABLE_ADD_FUNC(basic_streambuf_wchar_imbue));
341 __ASM_VTABLE(basic_streambuf_short,
342 VTABLE_ADD_FUNC(basic_streambuf_wchar_overflow)
343 VTABLE_ADD_FUNC(basic_streambuf_wchar_pbackfail)
344 VTABLE_ADD_FUNC(basic_streambuf_wchar_showmanyc)
345 VTABLE_ADD_FUNC(basic_streambuf_wchar_underflow)
346 VTABLE_ADD_FUNC(basic_streambuf_wchar_uflow)
347 VTABLE_ADD_FUNC(basic_streambuf_wchar_xsgetn)
348 VTABLE_ADD_FUNC(basic_streambuf_wchar__Xsgetn_s)
349 VTABLE_ADD_FUNC(basic_streambuf_wchar_xsputn)
350 VTABLE_ADD_FUNC(basic_streambuf_wchar_seekoff)
351 VTABLE_ADD_FUNC(basic_streambuf_wchar_seekpos)
352 VTABLE_ADD_FUNC(basic_streambuf_wchar_setbuf)
353 VTABLE_ADD_FUNC(basic_streambuf_wchar_sync)
354 VTABLE_ADD_FUNC(basic_streambuf_wchar_imbue));
355 __ASM_VTABLE(basic_filebuf_char,
356 VTABLE_ADD_FUNC(basic_filebuf_char_overflow)
357 VTABLE_ADD_FUNC(basic_filebuf_char_pbackfail)
358 VTABLE_ADD_FUNC(basic_streambuf_char_showmanyc)
359 VTABLE_ADD_FUNC(basic_filebuf_char_underflow)
360 VTABLE_ADD_FUNC(basic_filebuf_char_uflow)
361 VTABLE_ADD_FUNC(basic_streambuf_char_xsgetn)
362 VTABLE_ADD_FUNC(basic_streambuf_char__Xsgetn_s)
363 VTABLE_ADD_FUNC(basic_streambuf_char_xsputn)
364 VTABLE_ADD_FUNC(basic_filebuf_char_seekoff)
365 VTABLE_ADD_FUNC(basic_filebuf_char_seekpos)
366 VTABLE_ADD_FUNC(basic_filebuf_char_setbuf)
367 VTABLE_ADD_FUNC(basic_filebuf_char_sync)
368 VTABLE_ADD_FUNC(basic_filebuf_char_imbue));
369 __ASM_VTABLE(basic_stringbuf_char,
370 VTABLE_ADD_FUNC(basic_stringbuf_char_overflow)
371 VTABLE_ADD_FUNC(basic_stringbuf_char_pbackfail)
372 VTABLE_ADD_FUNC(basic_streambuf_char_showmanyc)
373 VTABLE_ADD_FUNC(basic_stringbuf_char_underflow)
374 VTABLE_ADD_FUNC(basic_streambuf_char_uflow)
375 VTABLE_ADD_FUNC(basic_streambuf_char_xsgetn)
376 VTABLE_ADD_FUNC(basic_streambuf_char__Xsgetn_s)
377 VTABLE_ADD_FUNC(basic_streambuf_char_xsputn)
378 VTABLE_ADD_FUNC(basic_stringbuf_char_seekoff)
379 VTABLE_ADD_FUNC(basic_stringbuf_char_seekpos)
380 VTABLE_ADD_FUNC(basic_streambuf_char_setbuf)
381 VTABLE_ADD_FUNC(basic_streambuf_char_sync)
382 VTABLE_ADD_FUNC(basic_streambuf_char_imbue));
383 __ASM_VTABLE(basic_ostream_char, "");
384 __ASM_VTABLE(basic_ostream_wchar, "");
385 __ASM_VTABLE(basic_istream_char, "");
386 __ASM_VTABLE(basic_istream_wchar, "");
387 __ASM_VTABLE(basic_iostream_char, "");
388 __ASM_VTABLE(basic_iostream_wchar, "");
389 __ASM_VTABLE(basic_ofstream_char, "");
390 __ASM_VTABLE(basic_ifstream_char, "");
391 __ASM_VTABLE(basic_fstream_char, "");
392 #ifndef __GNUC__
394 #endif
396 /* ?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD00@Z */
397 /* ?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD00@Z */
398 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_setp_next, 16)
399 void __thiscall basic_streambuf_char_setp_next(basic_streambuf_char *this, char *first, char *next, char *last)
401 TRACE("(%p %p %p %p)\n", this, first, next, last);
403 this->wbuf = first;
404 this->wpos = next;
405 this->wsize = last-next;
408 /* ?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD0@Z */
409 /* ?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD0@Z */
410 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_setp, 12)
411 void __thiscall basic_streambuf_char_setp(basic_streambuf_char *this, char *first, char *last)
413 basic_streambuf_char_setp_next(this, first, first, last);
416 /* ?setg@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD00@Z */
417 /* ?setg@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD00@Z */
418 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_setg, 16)
419 void __thiscall basic_streambuf_char_setg(basic_streambuf_char *this, char *first, char *next, char *last)
421 TRACE("(%p %p %p %p)\n", this, first, next, last);
423 this->rbuf = first;
424 this->rpos = next;
425 this->rsize = last-next;
428 /* ?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXXZ */
429 /* ?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXXZ */
430 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Init_empty, 4)
431 void __thiscall basic_streambuf_char__Init_empty(basic_streambuf_char *this)
433 TRACE("(%p)\n", this);
435 this->prbuf = &this->rbuf;
436 this->pwbuf = &this->wbuf;
437 this->prpos = &this->rpos;
438 this->pwpos = &this->wpos;
439 this->prsize = &this->rsize;
440 this->pwsize = &this->wsize;
442 basic_streambuf_char_setp(this, NULL, NULL);
443 basic_streambuf_char_setg(this, NULL, NULL, NULL);
446 /* ??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAE@W4_Uninitialized@1@@Z */
447 /* ??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAA@W4_Uninitialized@1@@Z */
448 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_ctor_uninitialized, 8)
449 basic_streambuf_char* __thiscall basic_streambuf_char_ctor_uninitialized(basic_streambuf_char *this, int uninitialized)
451 TRACE("(%p %d)\n", this, uninitialized);
452 this->vtable = &MSVCP_basic_streambuf_char_vtable;
453 mutex_ctor(&this->lock);
454 return this;
457 /* ??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAE@XZ */
458 /* ??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAA@XZ */
459 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_ctor, 4)
460 basic_streambuf_char* __thiscall basic_streambuf_char_ctor(basic_streambuf_char *this)
462 TRACE("(%p)\n", this);
464 this->vtable = &MSVCP_basic_streambuf_char_vtable;
465 mutex_ctor(&this->lock);
466 this->loc = MSVCRT_operator_new(sizeof(locale));
467 locale_ctor(this->loc);
468 basic_streambuf_char__Init_empty(this);
470 return this;
473 /* ??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAE@XZ */
474 /* ??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAA@XZ */
475 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_dtor, 4)
476 void __thiscall basic_streambuf_char_dtor(basic_streambuf_char *this)
478 TRACE("(%p)\n", this);
480 mutex_dtor(&this->lock);
481 locale_dtor(this->loc);
482 MSVCRT_operator_delete(this->loc);
485 DEFINE_THISCALL_WRAPPER(MSVCP_basic_streambuf_char_vector_dtor, 8)
486 basic_streambuf_char* __thiscall MSVCP_basic_streambuf_char_vector_dtor(basic_streambuf_char *this, unsigned int flags)
488 TRACE("(%p %x)\n", this, flags);
489 if(flags & 2) {
490 /* we have an array, with the number of elements stored before the first object */
491 int i, *ptr = (int *)this-1;
493 for(i=*ptr-1; i>=0; i--)
494 basic_streambuf_char_dtor(this+i);
495 MSVCRT_operator_delete(ptr);
496 } else {
497 basic_streambuf_char_dtor(this);
498 if(flags & 1)
499 MSVCRT_operator_delete(this);
502 return this;
505 /* ?_Gnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEHXZ */
506 /* ?_Gnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBA_JXZ */
507 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Gnavail, 4)
508 streamsize __thiscall basic_streambuf_char__Gnavail(const basic_streambuf_char *this)
510 TRACE("(%p)\n", this);
511 return *this->prpos ? *this->prsize : 0;
514 /* ?_Gndec@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ */
515 /* ?_Gndec@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ */
516 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Gndec, 4)
517 char* __thiscall basic_streambuf_char__Gndec(basic_streambuf_char *this)
519 TRACE("(%p)\n", this);
520 (*this->prsize)++;
521 (*this->prpos)--;
522 return *this->prpos;
525 /* ?_Gninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ */
526 /* ?_Gninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ */
527 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Gninc, 4)
528 char* __thiscall basic_streambuf_char__Gninc(basic_streambuf_char *this)
530 TRACE("(%p)\n", this);
531 (*this->prsize)--;
532 return (*this->prpos)++;
535 /* ?_Gnpreinc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ */
536 /* ?_Gnpreinc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ */
537 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Gnpreinc, 4)
538 char* __thiscall basic_streambuf_char__Gnpreinc(basic_streambuf_char *this)
540 TRACE("(%p)\n", this);
541 (*this->prsize)--;
542 (*this->prpos)++;
543 return *this->prpos;
546 /* ?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAPAD0PAH001@Z */
547 /* ?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAPEAD0PEAH001@Z */
548 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Init, 28)
549 void __thiscall basic_streambuf_char__Init(basic_streambuf_char *this, char **gf, char **gn, int *gc, char **pf, char **pn, int *pc)
551 TRACE("(%p %p %p %p %p %p %p)\n", this, gf, gn, gc, pf, pn, pc);
553 this->prbuf = gf;
554 this->pwbuf = pf;
555 this->prpos = gn;
556 this->pwpos = pn;
557 this->prsize = gc;
558 this->pwsize = pc;
561 /* ?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ */
562 /* ?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAXXZ */
563 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Lock, 4)
564 void __thiscall basic_streambuf_char__Lock(basic_streambuf_char *this)
566 TRACE("(%p)\n", this);
567 mutex_lock(&this->lock);
570 /* ?_Pnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEHXZ */
571 /* ?_Pnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBA_JXZ */
572 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Pnavail, 4)
573 streamsize __thiscall basic_streambuf_char__Pnavail(const basic_streambuf_char *this)
575 TRACE("(%p)\n", this);
576 return *this->pwpos ? *this->pwsize : 0;
579 /* ?_Pninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ */
580 /* ?_Pninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ */
581 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Pninc, 4)
582 char* __thiscall basic_streambuf_char__Pninc(basic_streambuf_char *this)
584 TRACE("(%p)\n", this);
585 (*this->pwsize)--;
586 return (*this->pwpos)++;
589 /* ?underflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
590 /* ?underflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
591 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_underflow, 4)
592 #define call_basic_streambuf_char_underflow(this) CALL_VTBL_FUNC(this, 16, \
593 int, (basic_streambuf_char*), (this))
594 int __thiscall basic_streambuf_char_underflow(basic_streambuf_char *this)
596 TRACE("(%p)\n", this);
597 return EOF;
600 /* ?uflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
601 /* ?uflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
602 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_uflow, 4)
603 #define call_basic_streambuf_char_uflow(this) CALL_VTBL_FUNC(this, 20, \
604 int, (basic_streambuf_char*), (this))
605 int __thiscall basic_streambuf_char_uflow(basic_streambuf_char *this)
607 int ret;
609 TRACE("(%p)\n", this);
611 if(call_basic_streambuf_char_underflow(this)==EOF)
612 return EOF;
614 ret = **this->prpos;
615 (*this->prsize)--;
616 (*this->prpos)++;
617 return ret;
620 /* ?_Xsgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHPADIH@Z */
621 /* ?_Xsgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEAD_K_J@Z */
622 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Xsgetn_s, 16)
623 #define call_basic_streambuf_char__Xsgetn_s(this, ptr, size, count) CALL_VTBL_FUNC(this, 28, \
624 streamsize, (basic_streambuf_char*, char*, MSVCP_size_t, streamsize), (this, ptr, size, count))
625 streamsize __thiscall basic_streambuf_char__Xsgetn_s(basic_streambuf_char *this, char *ptr, MSVCP_size_t size, streamsize count)
627 streamsize copied, chunk;
629 TRACE("(%p %p %lu %ld)\n", this, ptr, size, count);
631 for(copied=0; copied<count && size;) {
632 chunk = basic_streambuf_char__Gnavail(this);
633 if(chunk > count-copied)
634 chunk = count-copied;
636 if(chunk) {
637 memcpy_s(ptr+copied, size, *this->prpos, chunk);
638 *this->prpos += chunk;
639 *this->prsize -= chunk;
640 copied += chunk;
641 size -= chunk;
642 }else if((ptr[copied] = call_basic_streambuf_char_uflow(this)) != EOF) {
643 copied++;
644 size--;
645 }else {
646 break;
650 return copied;
653 /* ?_Sgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPADIH@Z */
654 /* ?_Sgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_K_J@Z */
655 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Sgetn_s, 16)
656 streamsize __thiscall basic_streambuf_char__Sgetn_s(basic_streambuf_char *this, char *ptr, MSVCP_size_t size, streamsize count)
658 TRACE("(%p %p %lu %ld)\n", this, ptr, size, count);
659 return call_basic_streambuf_char__Xsgetn_s(this, ptr, size, count);
662 /* ?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ */
663 /* ?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAXXZ */
664 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Unlock, 4)
665 void __thiscall basic_streambuf_char__Unlock(basic_streambuf_char *this)
667 TRACE("(%p)\n", this);
668 mutex_unlock(&this->lock);
671 /* ?eback@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
672 /* ?eback@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
673 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_eback, 4)
674 char* __thiscall basic_streambuf_char_eback(const basic_streambuf_char *this)
676 TRACE("(%p)\n", this);
677 return *this->prbuf;
680 /* ?gptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
681 /* ?gptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
682 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_gptr, 4)
683 char* __thiscall basic_streambuf_char_gptr(const basic_streambuf_char *this)
685 TRACE("(%p)\n", this);
686 return *this->prpos;
689 /* ?egptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
690 /* ?egptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
691 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_egptr, 4)
692 char* __thiscall basic_streambuf_char_egptr(const basic_streambuf_char *this)
694 TRACE("(%p)\n", this);
695 return *this->prpos+*this->prsize;
698 /* ?epptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
699 /* ?epptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
700 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_epptr, 4)
701 char* __thiscall basic_streambuf_char_epptr(const basic_streambuf_char *this)
703 TRACE("(%p)\n", this);
704 return *this->pwpos+*this->pwsize;
707 /* ?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z */
708 /* ?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXH@Z */
709 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_gbump, 8)
710 void __thiscall basic_streambuf_char_gbump(basic_streambuf_char *this, int off)
712 TRACE("(%p %d)\n", this, off);
713 *this->prpos += off;
714 *this->prsize -= off;
717 /* ?getloc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QBE?AVlocale@2@XZ */
718 /* ?getloc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEBA?AVlocale@2@XZ */
719 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_getloc, 8)
720 locale* __thiscall basic_streambuf_char_getloc(const basic_streambuf_char *this, locale *ret)
722 TRACE("(%p)\n", this);
723 return locale_copy_ctor(ret, this->loc);
726 /* ?imbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEXABVlocale@2@@Z */
727 /* ?imbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAXAEBVlocale@2@@Z */
728 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_imbue, 8)
729 #define call_basic_streambuf_char_imbue(this, loc) CALL_VTBL_FUNC(this, 52, \
730 void, (basic_streambuf_char*, const locale*), (this, loc))
731 void __thiscall basic_streambuf_char_imbue(basic_streambuf_char *this, const locale *loc)
733 TRACE("(%p %p)\n", this, loc);
736 /* ?overflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHH@Z */
737 /* ?overflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z */
738 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_overflow, 8)
739 #define call_basic_streambuf_char_overflow(this, ch) CALL_VTBL_FUNC(this, 4, \
740 int, (basic_streambuf_char*, int), (this, ch))
741 int __thiscall basic_streambuf_char_overflow(basic_streambuf_char *this, int ch)
743 TRACE("(%p %d)\n", this, ch);
744 return EOF;
747 /* ?pbackfail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHH@Z */
748 /* ?pbackfail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z */
749 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pbackfail, 8)
750 #define call_basic_streambuf_char_pbackfail(this, ch) CALL_VTBL_FUNC(this, 8, \
751 int, (basic_streambuf_char*, int), (this, ch))
752 int __thiscall basic_streambuf_char_pbackfail(basic_streambuf_char *this, int ch)
754 TRACE("(%p %d)\n", this, ch);
755 return EOF;
758 /* ?pbase@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
759 /* ?pbase@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
760 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pbase, 4)
761 char* __thiscall basic_streambuf_char_pbase(const basic_streambuf_char *this)
763 TRACE("(%p)\n", this);
764 return *this->pwbuf;
767 /* ?pbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z */
768 /* ?pbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXH@Z */
769 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pbump, 8)
770 void __thiscall basic_streambuf_char_pbump(basic_streambuf_char *this, int off)
772 TRACE("(%p %d)\n", this, off);
773 *this->pwpos += off;
774 *this->pwsize -= off;
777 /* ?pptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
778 /* ?pptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
779 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pptr, 4)
780 char* __thiscall basic_streambuf_char_pptr(const basic_streambuf_char *this)
782 TRACE("(%p)\n", this);
783 return *this->pwpos;
786 /* ?pubimbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
787 /* ?pubimbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
788 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubimbue, 12)
789 locale* __thiscall basic_streambuf_char_pubimbue(basic_streambuf_char *this, locale *ret, const locale *loc)
791 TRACE("(%p %p)\n", this, loc);
792 memcpy(ret, this->loc, sizeof(locale));
793 call_basic_streambuf_char_imbue(this, loc);
794 locale_copy_ctor(this->loc, loc);
795 return ret;
798 /* ?seekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z */
799 /* ?seekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */
800 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_seekoff, 20)
801 #define call_basic_streambuf_char_seekoff(this, ret, off, way, mode) CALL_VTBL_FUNC(this, 36, \
802 fpos_int*, (basic_streambuf_char*, fpos_int*, streamoff, int, int), (this, ret, off, way, mode))
803 fpos_int* __thiscall basic_streambuf_char_seekoff(basic_streambuf_char *this,
804 fpos_int *ret, streamoff off, int way, int mode)
806 TRACE("(%p %ld %d %d)\n", this, off, way, mode);
807 ret->off = 0;
808 ret->pos = -1;
809 ret->state = 0;
810 return ret;
813 /* ?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@JHH@Z */
814 /* ?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@_JHH@Z */
815 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubseekoff, 20)
816 fpos_int* __thiscall basic_streambuf_char_pubseekoff(basic_streambuf_char *this,
817 fpos_int *ret, streamoff off, int way, int mode)
819 TRACE("(%p %ld %d %d)\n", this, off, way, mode);
820 return call_basic_streambuf_char_seekoff(this, ret, off, way, mode);
823 /* ?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@JII@Z */
824 /* ?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@_JII@Z */
825 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubseekoff_old, 20)
826 fpos_int* __thiscall basic_streambuf_char_pubseekoff_old(basic_streambuf_char *this,
827 fpos_int *ret, streamoff off, unsigned int way, unsigned int mode)
829 TRACE("(%p %ld %d %d)\n", this, off, way, mode);
830 return basic_streambuf_char_pubseekoff(this, ret, off, way, mode);
833 /* ?seekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
834 /* ?seekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
835 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_seekpos, 36)
836 #define call_basic_streambuf_char_seekpos(this, ret, pos, mode) CALL_VTBL_FUNC(this, 40, \
837 fpos_int*, (basic_streambuf_char*, fpos_int*, fpos_int, int), (this, ret, pos, mode))
838 fpos_int* __thiscall basic_streambuf_char_seekpos(basic_streambuf_char *this,
839 fpos_int *ret, fpos_int pos, int mode)
841 TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
842 ret->off = 0;
843 ret->pos = -1;
844 ret->state = 0;
845 return ret;
848 /* ?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@V32@H@Z */
849 /* ?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@V32@H@Z */
850 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubseekpos, 36)
851 fpos_int* __thiscall basic_streambuf_char_pubseekpos(basic_streambuf_char *this,
852 fpos_int *ret, fpos_int pos, int mode)
854 TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
855 return call_basic_streambuf_char_seekpos(this, ret, pos, mode);
858 /* ?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@V32@I@Z */
859 /* ?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@V32@I@Z */
860 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubseekpos_old, 36)
861 fpos_int* __thiscall basic_streambuf_char_pubseekpos_old(basic_streambuf_char *this,
862 fpos_int *ret, fpos_int pos, unsigned int mode)
864 TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
865 return basic_streambuf_char_pubseekpos(this, ret, pos, mode);
868 /* ?setbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEPAV12@PADH@Z */
869 /* ?setbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAPEAV12@PEAD_J@Z */
870 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_setbuf, 12)
871 #define call_basic_streambuf_char_setbuf(this, buf, count) CALL_VTBL_FUNC(this, 44, \
872 basic_streambuf_char*, (basic_streambuf_char*, char*, streamsize), (this, buf, count))
873 basic_streambuf_char* __thiscall basic_streambuf_char_setbuf(basic_streambuf_char *this, char *buf, streamsize count)
875 TRACE("(%p %p %ld)\n", this, buf, count);
876 return this;
879 /* ?pubsetbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PADH@Z */
880 /* ?pubsetbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEAD_J@Z */
881 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubsetbuf, 12)
882 basic_streambuf_char* __thiscall basic_streambuf_char_pubsetbuf(basic_streambuf_char *this, char *buf, streamsize count)
884 TRACE("(%p %p %ld)\n", this, buf, count);
885 return call_basic_streambuf_char_setbuf(this, buf, count);
888 /* ?sync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
889 /* ?sync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
890 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sync, 4)
891 #define call_basic_streambuf_char_sync(this) CALL_VTBL_FUNC(this, 48, \
892 int, (basic_streambuf_char*), (this))
893 int __thiscall basic_streambuf_char_sync(basic_streambuf_char *this)
895 TRACE("(%p)\n", this);
896 return 0;
899 /* ?pubsync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
900 /* ?pubsync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
901 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubsync, 4)
902 int __thiscall basic_streambuf_char_pubsync(basic_streambuf_char *this)
904 TRACE("(%p)\n", this);
905 return call_basic_streambuf_char_sync(this);
908 /* ?sgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPADH@Z */
909 /* ?sgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_J@Z */
910 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sgetn, 12)
911 streamsize __thiscall basic_streambuf_char_sgetn(basic_streambuf_char *this, char *ptr, streamsize count)
913 TRACE("(%p %p %ld)\n", this, ptr, count);
914 return call_basic_streambuf_char__Xsgetn_s(this, ptr, -1, count);
917 /* ?showmanyc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
918 /* ?showmanyc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JXZ */
919 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_showmanyc, 4)
920 #define call_basic_streambuf_char_showmanyc(this) CALL_VTBL_FUNC(this, 12, \
921 streamsize, (basic_streambuf_char*), (this))
922 streamsize __thiscall basic_streambuf_char_showmanyc(basic_streambuf_char *this)
924 TRACE("(%p)\n", this);
925 return 0;
928 /* ?in_avail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
929 /* ?in_avail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JXZ */
930 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_in_avail, 4)
931 streamsize __thiscall basic_streambuf_char_in_avail(basic_streambuf_char *this)
933 streamsize ret;
935 TRACE("(%p)\n", this);
937 ret = basic_streambuf_char__Gnavail(this);
938 return ret ? ret : call_basic_streambuf_char_showmanyc(this);
941 /* ?sputbackc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z */
942 /* ?sputbackc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z */
943 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sputbackc, 8)
944 int __thiscall basic_streambuf_char_sputbackc(basic_streambuf_char *this, char ch)
946 TRACE("(%p %d)\n", this, ch);
947 if(*this->prpos && *this->prpos>*this->prbuf && (*this->prpos)[-1]==ch) {
948 (*this->prsize)++;
949 (*this->prpos)--;
950 return ch;
953 return call_basic_streambuf_char_pbackfail(this, ch);
956 /* ?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z */
957 /* ?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z */
958 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sputc, 8)
959 int __thiscall basic_streambuf_char_sputc(basic_streambuf_char *this, char ch)
961 TRACE("(%p %d)\n", this, ch);
962 return basic_streambuf_char__Pnavail(this) ?
963 (*basic_streambuf_char__Pninc(this) = ch) :
964 call_basic_streambuf_char_overflow(this, ch);
967 /* ?sungetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
968 /* ?sungetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
969 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sungetc, 4)
970 int __thiscall basic_streambuf_char_sungetc(basic_streambuf_char *this)
972 TRACE("(%p)\n", this);
973 if(*this->prpos && *this->prpos>*this->prbuf) {
974 (*this->prsize)++;
975 (*this->prpos)--;
976 return **this->prpos;
979 return call_basic_streambuf_char_pbackfail(this, EOF);
982 /* ?stossc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ */
983 /* ?stossc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAXXZ */
984 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_stossc, 4)
985 void __thiscall basic_streambuf_char_stossc(basic_streambuf_char *this)
987 TRACE("(%p)\n", this);
988 if(basic_streambuf_char__Gnavail(this))
989 basic_streambuf_char__Gninc(this);
990 else
991 call_basic_streambuf_char_uflow(this);
994 /* ?sbumpc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
995 /* ?sbumpc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
996 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sbumpc, 4)
997 int __thiscall basic_streambuf_char_sbumpc(basic_streambuf_char *this)
999 TRACE("(%p)\n", this);
1000 return basic_streambuf_char__Gnavail(this) ?
1001 *basic_streambuf_char__Gninc(this) : call_basic_streambuf_char_uflow(this);
1004 /* ?sgetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
1005 /* ?sgetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
1006 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sgetc, 4)
1007 int __thiscall basic_streambuf_char_sgetc(basic_streambuf_char *this)
1009 TRACE("(%p)\n", this);
1010 return basic_streambuf_char__Gnavail(this) ?
1011 *basic_streambuf_char_gptr(this) : call_basic_streambuf_char_underflow(this);
1014 /* ?snextc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
1015 /* ?snextc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
1016 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_snextc, 4)
1017 int __thiscall basic_streambuf_char_snextc(basic_streambuf_char *this)
1019 TRACE("(%p)\n", this);
1021 if(basic_streambuf_char__Gnavail(this) > 1)
1022 return *basic_streambuf_char__Gnpreinc(this);
1023 return basic_streambuf_char_sbumpc(this)==EOF ?
1024 EOF : basic_streambuf_char_sgetc(this);
1027 /* ?xsgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHPADH@Z */
1028 /* ?xsgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEAD_J@Z */
1029 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_xsgetn, 12)
1030 #define call_basic_streambuf_char_xsgetn(this, ptr, count) CALL_VTBL_FUNC(this, 24, \
1031 streamsize, (basic_streambuf_char*, char*, streamsize), (this, ptr, count))
1032 streamsize __thiscall basic_streambuf_char_xsgetn(basic_streambuf_char *this, char *ptr, streamsize count)
1034 TRACE("(%p %p %ld)\n", this, ptr, count);
1035 return call_basic_streambuf_char__Xsgetn_s(this, ptr, -1, count);
1038 /* ?xsputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHPBDH@Z */
1039 /* ?xsputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEBD_J@Z */
1040 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_xsputn, 12)
1041 #define call_basic_streambuf_char_xsputn(this, ptr, count) CALL_VTBL_FUNC(this, 32, \
1042 streamsize, (basic_streambuf_char*, const char*, streamsize), (this, ptr, count))
1043 streamsize __thiscall basic_streambuf_char_xsputn(basic_streambuf_char *this, const char *ptr, streamsize count)
1045 streamsize copied, chunk;
1047 TRACE("(%p %p %ld)\n", this, ptr, count);
1049 for(copied=0; copied<count;) {
1050 chunk = basic_streambuf_char__Pnavail(this);
1051 if(chunk > count-copied)
1052 chunk = count-copied;
1054 if(chunk) {
1055 memcpy(*this->pwpos, ptr+copied, chunk);
1056 *this->pwpos += chunk;
1057 *this->pwsize -= chunk;
1058 copied += chunk;
1059 }else if(call_basic_streambuf_char_overflow(this, ptr[copied]) != EOF) {
1060 copied++;
1061 }else {
1062 break;
1066 return copied;
1069 /* ?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPBDH@Z */
1070 /* ?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEBD_J@Z */
1071 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sputn, 12)
1072 streamsize __thiscall basic_streambuf_char_sputn(basic_streambuf_char *this, const char *ptr, streamsize count)
1074 TRACE("(%p %p %ld)\n", this, ptr, count);
1075 return call_basic_streambuf_char_xsputn(this, ptr, count);
1078 /* ?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W00@Z */
1079 /* ?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W00@Z */
1080 /* ?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG00@Z */
1081 /* ?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG00@Z */
1082 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_setp_next, 16)
1083 void __thiscall basic_streambuf_wchar_setp_next(basic_streambuf_wchar *this, wchar_t *first, wchar_t *next, wchar_t *last)
1085 TRACE("(%p %p %p %p)\n", this, first, next, last);
1087 this->wbuf = first;
1088 this->wpos = next;
1089 this->wsize = last-next;
1092 /* ?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W0@Z */
1093 /* ?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W0@Z */
1094 /* ?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG0@Z */
1095 /* ?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG0@Z */
1096 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_setp, 12)
1097 void __thiscall basic_streambuf_wchar_setp(basic_streambuf_wchar *this, wchar_t *first, wchar_t *last)
1099 basic_streambuf_wchar_setp_next(this, first, first, last);
1102 /* ?setg@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W00@Z */
1103 /* ?setg@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W00@Z */
1104 /* ?setg@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG00@Z */
1105 /* ?setg@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG00@Z */
1106 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_setg, 16)
1107 void __thiscall basic_streambuf_wchar_setg(basic_streambuf_wchar *this, wchar_t *first, wchar_t *next, wchar_t *last)
1109 TRACE("(%p %p %p %p)\n", this, first, next, last);
1111 this->rbuf = first;
1112 this->rpos = next;
1113 this->rsize = last-next;
1116 /* ?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXXZ */
1117 /* ?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXXZ */
1118 /* ?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXXZ */
1119 /* ?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXXZ */
1120 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Init_empty, 4)
1121 void __thiscall basic_streambuf_wchar__Init_empty(basic_streambuf_wchar *this)
1123 TRACE("(%p)\n", this);
1125 this->prbuf = &this->rbuf;
1126 this->pwbuf = &this->wbuf;
1127 this->prpos = &this->rpos;
1128 this->pwpos = &this->wpos;
1129 this->prsize = &this->rsize;
1130 this->pwsize = &this->wsize;
1132 basic_streambuf_wchar_setp(this, NULL, NULL);
1133 basic_streambuf_wchar_setg(this, NULL, NULL, NULL);
1136 /* ??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAE@W4_Uninitialized@1@@Z */
1137 /* ??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAA@W4_Uninitialized@1@@Z */
1138 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_ctor_uninitialized, 8)
1139 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_ctor_uninitialized(basic_streambuf_wchar *this, int uninitialized)
1141 TRACE("(%p %d)\n", this, uninitialized);
1142 this->vtable = &MSVCP_basic_streambuf_wchar_vtable;
1143 mutex_ctor(&this->lock);
1144 return this;
1147 /* ??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAE@W4_Uninitialized@1@@Z */
1148 /* ??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAA@W4_Uninitialized@1@@Z */
1149 DEFINE_THISCALL_WRAPPER(basic_streambuf_short_ctor_uninitialized, 8)
1150 basic_streambuf_wchar* __thiscall basic_streambuf_short_ctor_uninitialized(basic_streambuf_wchar *this, int uninitialized)
1152 TRACE("(%p %d)\n", this, uninitialized);
1153 basic_streambuf_wchar_ctor_uninitialized(this, uninitialized);
1154 this->vtable = &MSVCP_basic_streambuf_short_vtable;
1155 return this;
1158 /* ??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAE@XZ */
1159 /* ??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAA@XZ */
1160 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_ctor, 4)
1161 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_ctor(basic_streambuf_wchar *this)
1163 TRACE("(%p)\n", this);
1165 this->vtable = &MSVCP_basic_streambuf_wchar_vtable;
1166 mutex_ctor(&this->lock);
1167 this->loc = MSVCRT_operator_new(sizeof(locale));
1168 locale_ctor(this->loc);
1169 basic_streambuf_wchar__Init_empty(this);
1171 return this;
1174 /* ??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAE@XZ */
1175 /* ??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAA@XZ */
1176 DEFINE_THISCALL_WRAPPER(basic_streambuf_short_ctor, 4)
1177 basic_streambuf_wchar* __thiscall basic_streambuf_short_ctor(basic_streambuf_wchar *this)
1179 TRACE("(%p)\n", this);
1180 basic_streambuf_wchar_ctor(this);
1181 this->vtable = &MSVCP_basic_streambuf_short_vtable;
1182 return this;
1185 /* ??1?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
1186 /* ??1?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
1187 /* ??1?$basic_streambuf@GU?$char_traits@G@std@@@std@@UAE@XZ */
1188 /* ??1?$basic_streambuf@GU?$char_traits@G@std@@@std@@UEAA@XZ */
1189 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_dtor, 4)
1190 void __thiscall basic_streambuf_wchar_dtor(basic_streambuf_wchar *this)
1192 TRACE("(%p)\n", this);
1194 mutex_dtor(&this->lock);
1195 locale_dtor(this->loc);
1196 MSVCRT_operator_delete(this->loc);
1199 DEFINE_THISCALL_WRAPPER(MSVCP_basic_streambuf_wchar_vector_dtor, 8)
1200 basic_streambuf_wchar* __thiscall MSVCP_basic_streambuf_wchar_vector_dtor(basic_streambuf_wchar *this, unsigned int flags)
1202 TRACE("(%p %x)\n", this, flags);
1203 if(flags & 2) {
1204 /* we have an array, with the number of elements stored before the first object */
1205 int i, *ptr = (int *)this-1;
1207 for(i=*ptr-1; i>=0; i--)
1208 basic_streambuf_wchar_dtor(this+i);
1209 MSVCRT_operator_delete(ptr);
1210 } else {
1211 basic_streambuf_wchar_dtor(this);
1212 if(flags & 1)
1213 MSVCRT_operator_delete(this);
1216 return this;
1219 DEFINE_THISCALL_WRAPPER(MSVCP_basic_streambuf_short_vector_dtor, 8)
1220 basic_streambuf_wchar* __thiscall MSVCP_basic_streambuf_short_vector_dtor(basic_streambuf_wchar *this, unsigned int flags)
1222 TRACE("(%p %x)\n", this, flags);
1223 return MSVCP_basic_streambuf_wchar_vector_dtor(this, flags);
1226 /* ?_Gnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEHXZ */
1227 /* ?_Gnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBA_JXZ */
1228 /* ?_Gnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEHXZ */
1229 /* ?_Gnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBA_JXZ */
1230 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Gnavail, 4)
1231 streamsize __thiscall basic_streambuf_wchar__Gnavail(const basic_streambuf_wchar *this)
1233 TRACE("(%p)\n", this);
1234 return *this->prpos ? *this->prsize : 0;
1237 /* ?_Gndec@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ */
1238 /* ?_Gndec@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ */
1239 /* ?_Gndec@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ */
1240 /* ?_Gndec@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ */
1241 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Gndec, 4)
1242 wchar_t* __thiscall basic_streambuf_wchar__Gndec(basic_streambuf_wchar *this)
1244 TRACE("(%p)\n", this);
1245 (*this->prsize)++;
1246 (*this->prpos)--;
1247 return *this->prpos;
1250 /* ?_Gninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ */
1251 /* ?_Gninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ */
1252 /* ?_Gninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ */
1253 /* ?_Gninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ */
1254 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Gninc, 4)
1255 wchar_t* __thiscall basic_streambuf_wchar__Gninc(basic_streambuf_wchar *this)
1257 TRACE("(%p)\n", this);
1258 (*this->prsize)--;
1259 return (*this->prpos)++;
1262 /* ?_Gnpreinc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ */
1263 /* ?_Gnpreinc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ */
1264 /* ?_Gnpreinc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ */
1265 /* ?_Gnpreinc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ */
1266 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Gnpreinc, 4)
1267 wchar_t* __thiscall basic_streambuf_wchar__Gnpreinc(basic_streambuf_wchar *this)
1269 TRACE("(%p)\n", this);
1270 (*this->prsize)--;
1271 (*this->prpos)++;
1272 return *this->prpos;
1275 /* ?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPAPA_W0PAH001@Z */
1276 /* ?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEAPEA_W0PEAH001@Z */
1277 /* ?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAPAG0PAH001@Z */
1278 /* ?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAPEAG0PEAH001@Z */
1279 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Init, 28)
1280 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)
1282 TRACE("(%p %p %p %p %p %p %p)\n", this, gf, gn, gc, pf, pn, pc);
1284 this->prbuf = gf;
1285 this->pwbuf = pf;
1286 this->prpos = gn;
1287 this->pwpos = pn;
1288 this->prsize = gc;
1289 this->pwsize = pc;
1292 /* ?_Lock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
1293 /* ?_Lock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
1294 /* ?_Lock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEXXZ */
1295 /* ?_Lock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAXXZ */
1296 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Lock, 4)
1297 void __thiscall basic_streambuf_wchar__Lock(basic_streambuf_wchar *this)
1299 TRACE("(%p)\n", this);
1300 mutex_lock(&this->lock);
1303 /* ?_Pnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEHXZ */
1304 /* ?_Pnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBA_JXZ */
1305 /* ?_Pnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEHXZ */
1306 /* ?_Pnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBA_JXZ */
1307 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Pnavail, 4)
1308 streamsize __thiscall basic_streambuf_wchar__Pnavail(const basic_streambuf_wchar *this)
1310 TRACE("(%p)\n", this);
1311 return *this->pwpos ? *this->pwsize : 0;
1314 /* ?_Pninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ */
1315 /* ?_Pninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ */
1316 /* ?_Pninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ */
1317 /* ?_Pninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ */
1318 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Pninc, 4)
1319 wchar_t* __thiscall basic_streambuf_wchar__Pninc(basic_streambuf_wchar *this)
1321 TRACE("(%p)\n", this);
1322 (*this->pwsize)--;
1323 return (*this->pwpos)++;
1326 /* ?underflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ */
1327 /* ?underflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ */
1328 /* ?underflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGXZ */
1329 /* ?underflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGXZ */
1330 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_underflow, 4)
1331 #define call_basic_streambuf_wchar_underflow(this) CALL_VTBL_FUNC(this, 16, \
1332 unsigned short, (basic_streambuf_wchar*), (this))
1333 unsigned short __thiscall basic_streambuf_wchar_underflow(basic_streambuf_wchar *this)
1335 TRACE("(%p)\n", this);
1336 return WEOF;
1339 /* ?uflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ */
1340 /* ?uflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ */
1341 /* ?uflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGXZ */
1342 /* ?uflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGXZ */
1343 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_uflow, 4)
1344 #define call_basic_streambuf_wchar_uflow(this) CALL_VTBL_FUNC(this, 20, \
1345 unsigned short, (basic_streambuf_wchar*), (this))
1346 unsigned short __thiscall basic_streambuf_wchar_uflow(basic_streambuf_wchar *this)
1348 int ret;
1350 TRACE("(%p)\n", this);
1352 if(call_basic_streambuf_wchar_underflow(this)==WEOF)
1353 return WEOF;
1355 ret = **this->prpos;
1356 (*this->prsize)--;
1357 (*this->prpos)++;
1358 return ret;
1361 /* ?_Xsgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHPA_WIH@Z */
1362 /* ?_Xsgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEA_W_K_J@Z */
1363 /* ?_Xsgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHPAGIH@Z */
1364 /* ?_Xsgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEAG_K_J@Z */
1365 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Xsgetn_s, 16)
1366 #define call_basic_streambuf_wchar__Xsgetn_s(this, ptr, size, count) CALL_VTBL_FUNC(this, 28, \
1367 streamsize, (basic_streambuf_wchar*, wchar_t*, MSVCP_size_t, streamsize), (this, ptr, size, count))
1368 streamsize __thiscall basic_streambuf_wchar__Xsgetn_s(basic_streambuf_wchar *this, wchar_t *ptr, MSVCP_size_t size, streamsize count)
1370 streamsize copied, chunk;
1372 TRACE("(%p %p %lu %ld)\n", this, ptr, size, count);
1374 for(copied=0; copied<count && size;) {
1375 chunk = basic_streambuf_wchar__Gnavail(this);
1376 if(chunk > count-copied)
1377 chunk = count-copied;
1379 if(chunk) {
1380 memcpy_s(ptr+copied, size, *this->prpos, chunk);
1381 *this->prpos += chunk;
1382 *this->prsize -= chunk;
1383 copied += chunk;
1384 size -= chunk;
1385 }else if((ptr[copied] = call_basic_streambuf_wchar_uflow(this)) != WEOF) {
1386 copied++;
1387 size--;
1388 }else {
1389 break;
1393 return copied;
1396 /* ?_Sgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHPA_WIH@Z */
1397 /* ?_Sgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_K_J@Z */
1398 /* ?_Sgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHPAGIH@Z */
1399 /* ?_Sgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_K_J@Z */
1400 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Sgetn_s, 16)
1401 streamsize __thiscall basic_streambuf_wchar__Sgetn_s(basic_streambuf_wchar *this, wchar_t *ptr, MSVCP_size_t size, streamsize count)
1403 TRACE("(%p %p %lu %ld)\n", this, ptr, size, count);
1404 return call_basic_streambuf_wchar__Xsgetn_s(this, ptr, size, count);
1407 /* ?_Unlock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
1408 /* ?_Unlock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
1409 /* ?_Unlock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEXXZ */
1410 /* ?_Unlock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAXXZ */
1411 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Unlock, 4)
1412 void __thiscall basic_streambuf_wchar__Unlock(basic_streambuf_wchar *this)
1414 TRACE("(%p)\n", this);
1415 mutex_unlock(&this->lock);
1418 /* ?eback@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1419 /* ?eback@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1420 /* ?eback@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1421 /* ?eback@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1422 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_eback, 4)
1423 wchar_t* __thiscall basic_streambuf_wchar_eback(const basic_streambuf_wchar *this)
1425 TRACE("(%p)\n", this);
1426 return *this->prbuf;
1429 /* ?gptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1430 /* ?gptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1431 /* ?gptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1432 /* ?gptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1433 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_gptr, 4)
1434 wchar_t* __thiscall basic_streambuf_wchar_gptr(const basic_streambuf_wchar *this)
1436 TRACE("(%p)\n", this);
1437 return *this->prpos;
1440 /* ?egptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1441 /* ?egptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1442 /* ?egptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1443 /* ?egptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1444 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_egptr, 4)
1445 wchar_t* __thiscall basic_streambuf_wchar_egptr(const basic_streambuf_wchar *this)
1447 TRACE("(%p)\n", this);
1448 return *this->prpos+*this->prsize;
1451 /* ?epptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1452 /* ?epptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1453 /* ?epptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1454 /* ?epptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1455 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_epptr, 4)
1456 wchar_t* __thiscall basic_streambuf_wchar_epptr(const basic_streambuf_wchar *this)
1458 TRACE("(%p)\n", this);
1459 return *this->pwpos+*this->pwsize;
1462 /* ?gbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXH@Z */
1463 /* ?gbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXH@Z */
1464 /* ?gbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXH@Z */
1465 /* ?gbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXH@Z */
1466 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_gbump, 8)
1467 void __thiscall basic_streambuf_wchar_gbump(basic_streambuf_wchar *this, int off)
1469 TRACE("(%p %d)\n", this, off);
1470 *this->prpos += off;
1471 *this->prsize -= off;
1474 /* ?getloc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QBE?AVlocale@2@XZ */
1475 /* ?getloc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEBA?AVlocale@2@XZ */
1476 /* ?getloc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QBE?AVlocale@2@XZ */
1477 /* ?getloc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEBA?AVlocale@2@XZ */
1478 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_getloc, 8)
1479 locale* __thiscall basic_streambuf_wchar_getloc(const basic_streambuf_wchar *this, locale *ret)
1481 TRACE("(%p)\n", this);
1482 return locale_copy_ctor(ret, this->loc);
1485 /* ?imbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEXABVlocale@2@@Z */
1486 /* ?imbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAXAEBVlocale@2@@Z */
1487 /* ?imbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEXABVlocale@2@@Z */
1488 /* ?imbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAXAEBVlocale@2@@Z */
1489 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_imbue, 8)
1490 #define call_basic_streambuf_wchar_imbue(this, loc) CALL_VTBL_FUNC(this, 52, \
1491 void, (basic_streambuf_wchar*, const locale*), (this, loc))
1492 void __thiscall basic_streambuf_wchar_imbue(basic_streambuf_wchar *this, const locale *loc)
1494 TRACE("(%p %p)\n", this, loc);
1497 /* ?overflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z */
1498 /* ?overflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z */
1499 /* ?overflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGG@Z */
1500 /* ?overflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z */
1501 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_overflow, 8)
1502 #define call_basic_streambuf_wchar_overflow(this, ch) CALL_VTBL_FUNC(this, 4, \
1503 unsigned short, (basic_streambuf_wchar*, unsigned short), (this, ch))
1504 unsigned short __thiscall basic_streambuf_wchar_overflow(basic_streambuf_wchar *this, unsigned short ch)
1506 TRACE("(%p %d)\n", this, ch);
1507 return WEOF;
1510 /* ?pbackfail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z */
1511 /* ?pbackfail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z */
1512 /* ?pbackfail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGG@Z */
1513 /* ?pbackfail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z */
1514 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pbackfail, 8)
1515 #define call_basic_streambuf_wchar_pbackfail(this, ch) CALL_VTBL_FUNC(this, 8, \
1516 unsigned short, (basic_streambuf_wchar*, unsigned short), (this, ch))
1517 unsigned short __thiscall basic_streambuf_wchar_pbackfail(basic_streambuf_wchar *this, unsigned short ch)
1519 TRACE("(%p %d)\n", this, ch);
1520 return WEOF;
1523 /* ?pbase@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1524 /* ?pbase@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1525 /* ?pbase@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1526 /* ?pbase@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1527 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pbase, 4)
1528 wchar_t* __thiscall basic_streambuf_wchar_pbase(const basic_streambuf_wchar *this)
1530 TRACE("(%p)\n", this);
1531 return *this->pwbuf;
1534 /* ?pbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXH@Z */
1535 /* ?pbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXH@Z */
1536 /* ?pbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXH@Z */
1537 /* ?pbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXH@Z */
1538 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pbump, 8)
1539 void __thiscall basic_streambuf_wchar_pbump(basic_streambuf_wchar *this, int off)
1541 TRACE("(%p %d)\n", this, off);
1542 *this->pwpos += off;
1543 *this->pwsize -= off;
1546 /* ?pptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1547 /* ?pptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1548 /* ?pptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1549 /* ?pptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1550 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pptr, 4)
1551 wchar_t* __thiscall basic_streambuf_wchar_pptr(const basic_streambuf_wchar *this)
1553 TRACE("(%p)\n", this);
1554 return *this->pwpos;
1557 /* ?pubimbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
1558 /* ?pubimbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
1559 /* ?pubimbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
1560 /* ?pubimbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
1561 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubimbue, 12)
1562 locale* __thiscall basic_streambuf_wchar_pubimbue(basic_streambuf_wchar *this, locale *ret, const locale *loc)
1564 TRACE("(%p %p)\n", this, loc);
1565 memcpy(ret, this->loc, sizeof(locale));
1566 call_basic_streambuf_wchar_imbue(this, loc);
1567 locale_copy_ctor(this->loc, loc);
1568 return ret;
1571 /* ?seekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z */
1572 /* ?seekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */
1573 /* ?seekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z */
1574 /* ?seekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */
1575 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_seekoff, 20)
1576 #define call_basic_streambuf_wchar_seekoff(this, ret, off, way, mode) CALL_VTBL_FUNC(this, 36, \
1577 fpos_int*, (basic_streambuf_wchar*, fpos_int*, streamoff, int, int), (this, ret, off, way, mode))
1578 fpos_int* __thiscall basic_streambuf_wchar_seekoff(basic_streambuf_wchar *this,
1579 fpos_int *ret, streamoff off, int way, int mode)
1581 TRACE("(%p %ld %d %d)\n", this, off, way, mode);
1582 ret->off = 0;
1583 ret->pos = -1;
1584 ret->state = 0;
1585 return ret;
1588 /* ?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@JHH@Z */
1589 /* ?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@_JHH@Z */
1590 /* ?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@JHH@Z */
1591 /* ?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@_JHH@Z */
1592 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubseekoff, 20)
1593 fpos_int* __thiscall basic_streambuf_wchar_pubseekoff(basic_streambuf_wchar *this,
1594 fpos_int *ret, streamoff off, int way, int mode)
1596 TRACE("(%p %ld %d %d)\n", this, off, way, mode);
1597 return call_basic_streambuf_wchar_seekoff(this, ret, off, way, mode);
1600 /* ?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@JII@Z */
1601 /* ?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@_JII@Z */
1602 /* ?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@JII@Z */
1603 /* ?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@_JII@Z */
1604 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubseekoff_old, 20)
1605 fpos_int* __thiscall basic_streambuf_wchar_pubseekoff_old(basic_streambuf_wchar *this,
1606 fpos_int *ret, streamoff off, unsigned int way, unsigned int mode)
1608 TRACE("(%p %ld %d %d)\n", this, off, way, mode);
1609 return basic_streambuf_wchar_pubseekoff(this, ret, off, way, mode);
1612 /* ?seekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
1613 /* ?seekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
1614 /* ?seekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
1615 /* ?seekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
1616 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_seekpos, 36)
1617 #define call_basic_streambuf_wchar_seekpos(this, ret, pos, mode) CALL_VTBL_FUNC(this, 40, \
1618 fpos_int*, (basic_streambuf_wchar*, fpos_int*, fpos_int, int), (this, ret, pos, mode))
1619 fpos_int* __thiscall basic_streambuf_wchar_seekpos(basic_streambuf_wchar *this,
1620 fpos_int *ret, fpos_int pos, int mode)
1622 TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
1623 ret->off = 0;
1624 ret->pos = -1;
1625 ret->state = 0;
1626 return ret;
1629 /* ?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@V32@H@Z */
1630 /* ?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@V32@H@Z */
1631 /* ?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@V32@H@Z */
1632 /* ?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@V32@H@Z */
1633 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubseekpos, 36)
1634 fpos_int* __thiscall basic_streambuf_wchar_pubseekpos(basic_streambuf_wchar *this,
1635 fpos_int *ret, fpos_int pos, int mode)
1637 TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
1638 return call_basic_streambuf_wchar_seekpos(this, ret, pos, mode);
1641 /* ?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@V32@I@Z */
1642 /* ?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@V32@I@Z */
1643 /* ?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@V32@I@Z */
1644 /* ?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@V32@I@Z */
1645 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubseekpos_old, 36)
1646 fpos_int* __thiscall basic_streambuf_wchar_pubseekpos_old(basic_streambuf_wchar *this,
1647 fpos_int *ret, fpos_int pos, unsigned int mode)
1649 TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
1650 return basic_streambuf_wchar_pubseekpos(this, ret, pos, mode);
1653 /* ?setbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEPAV12@PA_WH@Z */
1654 /* ?setbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAPEAV12@PEA_W_J@Z */
1655 /* ?setbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEPAV12@PAGH@Z */
1656 /* ?setbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAPEAV12@PEAG_J@Z */
1657 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_setbuf, 12)
1658 #define call_basic_streambuf_wchar_setbuf(this, buf, count) CALL_VTBL_FUNC(this, 44, \
1659 basic_streambuf_wchar*, (basic_streambuf_wchar*, wchar_t*, streamsize), (this, buf, count))
1660 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_setbuf(basic_streambuf_wchar *this, wchar_t *buf, streamsize count)
1662 TRACE("(%p %p %ld)\n", this, buf, count);
1663 return this;
1666 /* ?pubsetbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@PA_WH@Z */
1667 /* ?pubsetbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@PEA_W_J@Z */
1668 /* ?pubsetbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEPAV12@PAGH@Z */
1669 /* ?pubsetbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@PEAG_J@Z */
1670 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubsetbuf, 12)
1671 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_pubsetbuf(basic_streambuf_wchar *this, wchar_t *buf, streamsize count)
1673 TRACE("(%p %p %ld)\n", this, buf, count);
1674 return call_basic_streambuf_wchar_setbuf(this, buf, count);
1677 /* ?sync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHXZ */
1678 /* ?sync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAHXZ */
1679 /* ?sync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHXZ */
1680 /* ?sync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAHXZ */
1681 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sync, 4)
1682 #define call_basic_streambuf_wchar_sync(this) CALL_VTBL_FUNC(this, 48, \
1683 int, (basic_streambuf_wchar*), (this))
1684 int __thiscall basic_streambuf_wchar_sync(basic_streambuf_wchar *this)
1686 TRACE("(%p)\n", this);
1687 return 0;
1690 /* ?pubsync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHXZ */
1691 /* ?pubsync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAHXZ */
1692 /* ?pubsync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHXZ */
1693 /* ?pubsync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAHXZ */
1694 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubsync, 4)
1695 int __thiscall basic_streambuf_wchar_pubsync(basic_streambuf_wchar *this)
1697 TRACE("(%p)\n", this);
1698 return call_basic_streambuf_wchar_sync(this);
1701 /* ?sgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHPA_WH@Z */
1702 /* ?sgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_J@Z */
1703 /* ?sgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHPAGH@Z */
1704 /* ?sgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_J@Z */
1705 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sgetn, 12)
1706 streamsize __thiscall basic_streambuf_wchar_sgetn(basic_streambuf_wchar *this, wchar_t *ptr, streamsize count)
1708 TRACE("(%p %p %ld)\n", this, ptr, count);
1709 return call_basic_streambuf_wchar__Xsgetn_s(this, ptr, -1, count);
1712 /* ?showmanyc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHXZ */
1713 /* ?showmanyc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JXZ */
1714 /* ?showmanyc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHXZ */
1715 /* ?showmanyc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JXZ */
1716 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_showmanyc, 4)
1717 #define call_basic_streambuf_wchar_showmanyc(this) CALL_VTBL_FUNC(this, 12, \
1718 streamsize, (basic_streambuf_wchar*), (this))
1719 streamsize __thiscall basic_streambuf_wchar_showmanyc(basic_streambuf_wchar *this)
1721 TRACE("(%p)\n", this);
1722 return 0;
1725 /* ?in_avail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHXZ */
1726 /* ?in_avail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JXZ */
1727 /* ?in_avail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHXZ */
1728 /* ?in_avail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JXZ */
1729 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_in_avail, 4)
1730 streamsize __thiscall basic_streambuf_wchar_in_avail(basic_streambuf_wchar *this)
1732 streamsize ret;
1734 TRACE("(%p)\n", this);
1736 ret = basic_streambuf_wchar__Gnavail(this);
1737 return ret ? ret : call_basic_streambuf_wchar_showmanyc(this);
1740 /* ?sputbackc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEG_W@Z */
1741 /* ?sputbackc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAG_W@Z */
1742 /* ?sputbackc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGG@Z */
1743 /* ?sputbackc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGG@Z */
1744 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sputbackc, 8)
1745 unsigned short __thiscall basic_streambuf_wchar_sputbackc(basic_streambuf_wchar *this, wchar_t ch)
1747 TRACE("(%p %d)\n", this, ch);
1748 if(*this->prpos && *this->prpos>*this->prbuf && (*this->prpos)[-1]==ch) {
1749 (*this->prsize)++;
1750 (*this->prpos)--;
1751 return ch;
1754 return call_basic_streambuf_wchar_pbackfail(this, ch);
1757 /* ?sputc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEG_W@Z */
1758 /* ?sputc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAG_W@Z */
1759 /* ?sputc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGG@Z */
1760 /* ?sputc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAHG@Z */
1761 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sputc, 8)
1762 unsigned short __thiscall basic_streambuf_wchar_sputc(basic_streambuf_wchar *this, wchar_t ch)
1764 TRACE("(%p %d)\n", this, ch);
1765 return basic_streambuf_wchar__Pnavail(this) ?
1766 (*basic_streambuf_wchar__Pninc(this) = ch) :
1767 call_basic_streambuf_wchar_overflow(this, ch);
1770 /* ?sungetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
1771 /* ?sungetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
1772 /* ?sungetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ */
1773 /* ?sungetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ */
1774 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sungetc, 4)
1775 unsigned short __thiscall basic_streambuf_wchar_sungetc(basic_streambuf_wchar *this)
1777 TRACE("(%p)\n", this);
1778 if(*this->prpos && *this->prpos>*this->prbuf) {
1779 (*this->prsize)++;
1780 (*this->prpos)--;
1781 return **this->prpos;
1784 return call_basic_streambuf_wchar_pbackfail(this, WEOF);
1787 /* ?stossc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
1788 /* ?stossc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
1789 /* ?stossc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEXXZ */
1790 /* ?stossc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAXXZ */
1791 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_stossc, 4)
1792 void __thiscall basic_streambuf_wchar_stossc(basic_streambuf_wchar *this)
1794 TRACE("(%p)\n", this);
1795 if(basic_streambuf_wchar__Gnavail(this))
1796 basic_streambuf_wchar__Gninc(this);
1797 else
1798 call_basic_streambuf_wchar_uflow(this);
1801 /* ?sbumpc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
1802 /* ?sbumpc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
1803 /* ?sbumpc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ */
1804 /* ?sbumpc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ */
1805 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sbumpc, 4)
1806 unsigned short __thiscall basic_streambuf_wchar_sbumpc(basic_streambuf_wchar *this)
1808 TRACE("(%p)\n", this);
1809 return basic_streambuf_wchar__Gnavail(this) ?
1810 *basic_streambuf_wchar__Gninc(this) : call_basic_streambuf_wchar_uflow(this);
1813 /* ?sgetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
1814 /* ?sgetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
1815 /* ?sgetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ */
1816 /* ?sgetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ */
1817 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sgetc, 4)
1818 unsigned short __thiscall basic_streambuf_wchar_sgetc(basic_streambuf_wchar *this)
1820 TRACE("(%p)\n", this);
1821 return basic_streambuf_wchar__Gnavail(this) ?
1822 *basic_streambuf_wchar_gptr(this) : call_basic_streambuf_wchar_underflow(this);
1825 /* ?snextc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
1826 /* ?snextc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
1827 /* ?snextc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ */
1828 /* ?snextc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ */
1829 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_snextc, 4)
1830 unsigned short __thiscall basic_streambuf_wchar_snextc(basic_streambuf_wchar *this)
1832 TRACE("(%p)\n", this);
1834 if(basic_streambuf_wchar__Gnavail(this) > 1)
1835 return *basic_streambuf_wchar__Gnpreinc(this);
1836 return basic_streambuf_wchar_sbumpc(this)==WEOF ?
1837 WEOF : basic_streambuf_wchar_sgetc(this);
1840 /* ?xsgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHPA_WH@Z */
1841 /* ?xsgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEA_W_J@Z */
1842 /* ?xsgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHPAGH@Z */
1843 /* ?xsgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEAG_J@Z */
1844 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_xsgetn, 12)
1845 #define call_basic_streambuf_wchar_xsgetn(this, ptr, count) CALL_VTBL_FUNC(this, 24, \
1846 streamsize, (basic_streambuf_wchar*, wchar_t*, streamsize), (this, ptr, count))
1847 streamsize __thiscall basic_streambuf_wchar_xsgetn(basic_streambuf_wchar *this, wchar_t *ptr, streamsize count)
1849 TRACE("(%p %p %ld)\n", this, ptr, count);
1850 return call_basic_streambuf_wchar__Xsgetn_s(this, ptr, -1, count);
1853 /* ?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHPB_WH@Z */
1854 /* ?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEB_W_J@Z */
1855 /* ?xsputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHPBGH@Z */
1856 /* ?xsputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEBG_J@Z */
1857 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_xsputn, 12)
1858 #define call_basic_streambuf_wchar_xsputn(this, ptr, count) CALL_VTBL_FUNC(this, 32, \
1859 streamsize, (basic_streambuf_wchar*, const wchar_t*, streamsize), (this, ptr, count))
1860 streamsize __thiscall basic_streambuf_wchar_xsputn(basic_streambuf_wchar *this, const wchar_t *ptr, streamsize count)
1862 streamsize copied, chunk;
1864 TRACE("(%p %p %ld)\n", this, ptr, count);
1866 for(copied=0; copied<count;) {
1867 chunk = basic_streambuf_wchar__Pnavail(this);
1868 if(chunk > count-copied)
1869 chunk = count-copied;
1871 if(chunk) {
1872 memcpy(*this->pwpos, ptr+copied, chunk);
1873 *this->pwpos += chunk;
1874 *this->pwsize -= chunk;
1875 copied += chunk;
1876 }else if(call_basic_streambuf_wchar_overflow(this, ptr[copied]) != WEOF) {
1877 copied++;
1878 }else {
1879 break;
1883 return copied;
1886 /* ?sputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHPB_WH@Z */
1887 /* ?sputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEB_W_J@Z */
1888 /* ?sputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHPBGH@Z */
1889 /* ?sputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEBG_J@Z */
1890 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sputn, 12)
1891 streamsize __thiscall basic_streambuf_wchar_sputn(basic_streambuf_wchar *this, const wchar_t *ptr, streamsize count)
1893 TRACE("(%p %p %ld)\n", this, ptr, count);
1894 return call_basic_streambuf_wchar_xsputn(this, ptr, count);
1897 /* ?_Stinit@?1??_Init@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@23@@Z@4HA */
1898 /* ?_Stinit@?1??_Init@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@23@@Z@4HA */
1899 int basic_filebuf_char__Init__Stinit = 0;
1901 /* ?_Init@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@12@@Z */
1902 /* ?_Init@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@12@@Z */
1903 DEFINE_THISCALL_WRAPPER(basic_filebuf_char__Init, 12)
1904 void __thiscall basic_filebuf_char__Init(basic_filebuf_char *this, FILE *file, basic_filebuf__Initfl which)
1906 TRACE("(%p %p %d)\n", this, file, which);
1908 this->cvt = NULL;
1909 this->wrotesome = FALSE;
1910 this->state = basic_filebuf_char__Init__Stinit;
1911 this->close = (which == INITFL_open);
1912 this->file = file;
1914 basic_streambuf_char__Init_empty(&this->base);
1915 if(file)
1916 basic_streambuf_char__Init(&this->base, &file->_base, &file->_ptr,
1917 &file->_cnt, &file->_base, &file->_ptr, &file->_cnt);
1920 /* ?_Initcvt@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IAEXPAV?$codecvt@DDH@2@@Z */
1921 /* ?_Initcvt@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IEAAXPEAV?$codecvt@DDH@2@@Z */
1922 DEFINE_THISCALL_WRAPPER(basic_filebuf_char__Initcvt, 8)
1923 void __thiscall basic_filebuf_char__Initcvt(basic_filebuf_char *this, codecvt_char *cvt)
1925 TRACE("(%p %p)\n", this, cvt);
1927 if(codecvt_base_always_noconv(&cvt->base)) {
1928 this->cvt = NULL;
1929 }else {
1930 basic_streambuf_char__Init_empty(&this->base);
1931 this->cvt = cvt;
1935 /* ?_Endwrite@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IAE_NXZ */
1936 /* ?_Endwrite@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IEAA_NXZ */
1937 DEFINE_THISCALL_WRAPPER(basic_filebuf_char__Endwrite, 4)
1938 MSVCP_bool __thiscall basic_filebuf_char__Endwrite(basic_filebuf_char *this)
1940 TRACE("(%p)\n", this);
1942 if(!this->wrotesome || !this->cvt)
1943 return TRUE;
1946 if(call_basic_streambuf_char_overflow(&this->base, EOF) == EOF)
1947 return FALSE;
1949 while(1) {
1950 /* TODO: check if we need a dynamic buffer here */
1951 char buf[128];
1952 char *next;
1953 int ret;
1955 ret = codecvt_char_unshift(this->cvt, &this->state, buf, buf+sizeof(buf), &next);
1956 switch(ret) {
1957 case CODECVT_ok:
1958 this->wrotesome = FALSE;
1959 /* fall through */
1960 case CODECVT_partial:
1961 if(!fwrite(buf, next-buf, 1, this->file))
1962 return FALSE;
1963 if(this->wrotesome)
1964 break;
1965 /* fall through */
1966 case CODECVT_noconv:
1967 if(call_basic_streambuf_char_overflow(&this->base, EOF) == EOF)
1968 return FALSE;
1969 return TRUE;
1970 default:
1971 return FALSE;
1976 /* ?close@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@XZ */
1977 /* ?close@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@XZ */
1978 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_close, 4)
1979 basic_filebuf_char* __thiscall basic_filebuf_char_close(basic_filebuf_char *this)
1981 basic_filebuf_char *ret = this;
1983 TRACE("(%p)\n", this);
1985 if(!this->file)
1986 return NULL;
1988 /* TODO: handle exceptions */
1989 if(!basic_filebuf_char__Endwrite(this))
1990 ret = NULL;
1991 if(!fclose(this->file))
1992 ret = NULL;
1994 basic_filebuf_char__Init(this, NULL, INITFL_close);
1995 return ret;
1998 /* ??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAE@PAU_iobuf@@@Z */
1999 /* ??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAA@PEAU_iobuf@@@Z */
2000 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_ctor_file, 8)
2001 basic_filebuf_char* __thiscall basic_filebuf_char_ctor_file(basic_filebuf_char *this, FILE *file)
2003 TRACE("(%p %p)\n", this, file);
2005 basic_streambuf_char_ctor(&this->base);
2006 this->base.vtable = &MSVCP_basic_filebuf_char_vtable;
2008 basic_filebuf_char__Init(this, file, INITFL_new);
2009 return this;
2012 /* ??_F?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEXXZ */
2013 /* ??_F?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAXXZ */
2014 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_ctor, 4)
2015 basic_filebuf_char* __thiscall basic_filebuf_char_ctor(basic_filebuf_char *this)
2017 return basic_filebuf_char_ctor_file(this, NULL);
2020 /* ??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@@Z */
2021 /* ??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@@Z */
2022 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_ctor_uninitialized, 8)
2023 basic_filebuf_char* __thiscall basic_filebuf_char_ctor_uninitialized(basic_filebuf_char *this, int uninitialized)
2025 TRACE("(%p %d)\n", this, uninitialized);
2027 basic_streambuf_char_ctor(&this->base);
2028 this->base.vtable = &MSVCP_basic_filebuf_char_vtable;
2029 return this;
2032 /* ??1?$basic_filebuf@DU?$char_traits@D@std@@@std@@UAE@XZ */
2033 /* ??1?$basic_filebuf@DU?$char_traits@D@std@@@std@@UEAA@XZ */
2034 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_dtor, 4)
2035 void __thiscall basic_filebuf_char_dtor(basic_filebuf_char *this)
2037 TRACE("(%p)\n", this);
2039 if(this->close)
2040 basic_filebuf_char_close(this);
2041 basic_streambuf_char_dtor(&this->base);
2044 DEFINE_THISCALL_WRAPPER(MSVCP_basic_filebuf_char_vector_dtor, 8)
2045 basic_filebuf_char* __thiscall MSVCP_basic_filebuf_char_vector_dtor(basic_filebuf_char *this, unsigned int flags)
2047 TRACE("(%p %x)\n", this, flags);
2048 if(flags & 2) {
2049 /* we have an array, with the number of elements stored before the first object */
2050 int i, *ptr = (int *)this-1;
2052 for(i=*ptr-1; i>=0; i--)
2053 basic_filebuf_char_dtor(this+i);
2054 MSVCRT_operator_delete(ptr);
2055 } else {
2056 basic_filebuf_char_dtor(this);
2057 if(flags & 1)
2058 MSVCRT_operator_delete(this);
2061 return this;
2064 /* ?is_open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QBE_NXZ */
2065 /* ?is_open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEBA_NXZ */
2066 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_is_open, 4)
2067 MSVCP_bool __thiscall basic_filebuf_char_is_open(const basic_filebuf_char *this)
2069 TRACE("(%p)\n", this);
2070 return this->file != NULL;
2073 /* ?_Fiopen@std@@YAPAU_iobuf@@PB_WHH@Z */
2074 /* ?_Fiopen@std@@YAPEAU_iobuf@@PEB_WHH@Z */
2075 FILE* __cdecl _Fiopen_wchar(const wchar_t *name, int mode, int prot)
2077 static const wchar_t rW[] = {'r',0};
2078 static const struct {
2079 int mode;
2080 const wchar_t str[4];
2081 const wchar_t str_bin[4];
2082 } str_mode[] = {
2083 {OPENMODE_out, {'w',0}, {'w','b',0}},
2084 {OPENMODE_out|OPENMODE_app, {'a',0}, {'a','b',0}},
2085 {OPENMODE_app, {'a',0}, {'a','b',0}},
2086 {OPENMODE_out|OPENMODE_trunc, {'w',0}, {'w','b',0}},
2087 {OPENMODE_in, {'r',0}, {'r','b',0}},
2088 {OPENMODE_in|OPENMODE_out, {'r','+',0}, {'r','+','b',0}},
2089 {OPENMODE_in|OPENMODE_out|OPENMODE_trunc, {'w','+',0}, {'w','+','b',0}},
2090 {OPENMODE_in|OPENMODE_out|OPENMODE_app, {'a','+',0}, {'a','+','b',0}},
2091 {OPENMODE_in|OPENMODE_app, {'a','+',0}, {'a','+','b',0}}
2094 int real_mode = mode & ~(OPENMODE_ate|OPENMODE__Nocreate|OPENMODE__Noreplace|OPENMODE_binary);
2095 int mode_idx;
2096 FILE *f = NULL;
2098 TRACE("(%s %d %d)\n", debugstr_w(name), mode, prot);
2100 for(mode_idx=0; mode_idx<sizeof(str_mode)/sizeof(str_mode[0]); mode_idx++)
2101 if(str_mode[mode_idx].mode == real_mode)
2102 break;
2103 if(mode_idx == sizeof(str_mode)/sizeof(str_mode[0]))
2104 return NULL;
2106 if((mode & OPENMODE__Nocreate) && !(f = _wfopen(name, rW)))
2107 return NULL;
2108 else if(f)
2109 fclose(f);
2111 if((mode & OPENMODE__Noreplace) && (mode & (OPENMODE_out|OPENMODE_app))
2112 && (f = _wfopen(name, rW))) {
2113 fclose(f);
2114 return NULL;
2117 f = _wfsopen(name, (mode & OPENMODE_binary) ? str_mode[mode_idx].str_bin
2118 : str_mode[mode_idx].str, prot);
2119 if(!f)
2120 return NULL;
2122 if((mode & OPENMODE_ate) && fseek(f, 0, SEEK_END)) {
2123 fclose(f);
2124 return NULL;
2127 return f;
2130 /* ?_Fiopen@std@@YAPAU_iobuf@@PBDHH@Z */
2131 /* ?_Fiopen@std@@YAPEAU_iobuf@@PEBDHH@Z */
2132 FILE* __cdecl _Fiopen(const char *name, int mode, int prot)
2134 wchar_t nameW[FILENAME_MAX];
2136 TRACE("(%s %d %d)\n", name, mode, prot);
2138 if(mbstowcs_s(NULL, nameW, FILENAME_MAX, name, FILENAME_MAX-1) != 0)
2139 return NULL;
2140 return _Fiopen_wchar(nameW, mode, prot);
2143 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PB_WHH@Z */
2144 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEB_WHH@Z */
2145 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PBGHH@Z */
2146 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEBGHH@Z */
2147 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_open_wchar, 16)
2148 basic_filebuf_char* __thiscall basic_filebuf_char_open_wchar(basic_filebuf_char *this, const wchar_t *name, int mode, int prot)
2150 FILE *f = NULL;
2152 TRACE("(%p %s %d %d)\n", this, debugstr_w(name), mode, prot);
2154 if(basic_filebuf_char_is_open(this))
2155 return NULL;
2157 if(!(f = _Fiopen_wchar(name, mode, prot)))
2158 return NULL;
2160 basic_filebuf_char__Init(this, f, INITFL_open);
2161 basic_filebuf_char__Initcvt(this, codecvt_char_use_facet(this->base.loc));
2162 return this;
2165 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PB_WI@Z */
2166 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEB_WI@Z */
2167 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PBGI@Z */
2168 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEBGI@Z */
2169 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_open_wchar_mode, 12)
2170 basic_filebuf_char* __thiscall basic_filebuf_char_open_wchar_mode(basic_filebuf_char *this, const wchar_t *name, unsigned int mode)
2172 return basic_filebuf_char_open_wchar(this, name, mode, SH_DENYNO);
2175 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PBDHH@Z */
2176 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEBDHH@Z */
2177 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_open, 16)
2178 basic_filebuf_char* __thiscall basic_filebuf_char_open(basic_filebuf_char *this, const char *name, int mode, int prot)
2180 wchar_t nameW[FILENAME_MAX];
2182 TRACE("(%p %s %d %d)\n", this, name, mode, prot);
2184 if(mbstowcs_s(NULL, nameW, FILENAME_MAX, name, FILENAME_MAX-1) != 0)
2185 return NULL;
2186 return basic_filebuf_char_open_wchar(this, nameW, mode, prot);
2189 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PBDI@Z */
2190 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEBDI@Z */
2191 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_open_mode, 12)
2192 basic_filebuf_char* __thiscall basic_filebuf_char_open_mode(basic_filebuf_char *this, const char *name, unsigned int mode)
2194 return basic_filebuf_char_open(this, name, mode, SH_DENYNO);
2197 /* ?overflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHH@Z */
2198 /* ?overflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z */
2199 #define call_basic_filebuf_char_overflow(this, c) CALL_VTBL_FUNC(this, 4, \
2200 int, (basic_filebuf_char*, int), (this, c))
2201 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_overflow, 8)
2202 int __thiscall basic_filebuf_char_overflow(basic_filebuf_char *this, int c)
2204 char buf[8], *dyn_buf;
2205 char ch = c, *to_next;
2206 const char *from_next;
2207 int ret, max_size;
2210 TRACE("(%p %d)\n", this, c);
2212 if(!basic_filebuf_char_is_open(this))
2213 return EOF;
2214 if(c == EOF)
2215 return !c;
2217 if(!this->cvt)
2218 return fwrite(&ch, sizeof(char), 1, this->file) ? c : EOF;
2220 from_next = &ch;
2221 do {
2222 ret = codecvt_char_out(this->cvt, &this->state, from_next, &ch+1,
2223 &from_next, buf, buf+sizeof(buf), &to_next);
2225 switch(ret) {
2226 case CODECVT_partial:
2227 if(to_next == buf)
2228 break;
2229 /* fall through */
2230 case CODECVT_ok:
2231 if(!fwrite(buf, to_next-buf, 1, this->file))
2232 return EOF;
2233 if(ret == CODECVT_partial)
2234 continue;
2235 return c;
2236 case CODECVT_noconv:
2237 return fwrite(&ch, sizeof(char), 1, this->file) ? c : EOF;
2238 default:
2239 return EOF;
2241 } while(0);
2243 max_size = codecvt_base_max_length(&this->cvt->base);
2244 dyn_buf = malloc(max_size);
2245 if(!dyn_buf)
2246 return EOF;
2248 ret = codecvt_char_out(this->cvt, &this->state, from_next, &ch+1,
2249 &from_next, dyn_buf, dyn_buf+max_size, &to_next);
2251 switch(ret) {
2252 case CODECVT_ok:
2253 ret = fwrite(dyn_buf, to_next-dyn_buf, 1, this->file);
2254 free(dyn_buf);
2255 return ret ? c : EOF;
2256 case CODECVT_partial:
2257 ERR("buffer should be big enough to store all output\n");
2258 /* fall through */
2259 default:
2260 free(dyn_buf);
2261 return EOF;
2265 /* ?pbackfail@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHH@Z */
2266 /* ?pbackfail@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z */
2267 #define call_basic_filebuf_char_pbackfail(this, c) CALL_VTBL_FUNC(this, 8, \
2268 int, (basic_filebuf_char*, int), (this, c))
2269 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_pbackfail, 8)
2270 int __thiscall basic_filebuf_char_pbackfail(basic_filebuf_char *this, int c)
2272 TRACE("(%p %d)\n", this, c);
2274 if(!basic_filebuf_char_is_open(this))
2275 return EOF;
2277 if(basic_streambuf_char_gptr(&this->base)>basic_streambuf_char_eback(&this->base)
2278 && (c==EOF || basic_streambuf_char_gptr(&this->base)[-1]==(char)c)) {
2279 basic_streambuf_char__Gndec(&this->base);
2280 return c==EOF ? !c : c;
2281 }else if(c!=EOF && !this->cvt) {
2282 return ungetc(c, this->file);
2285 return EOF;
2288 /* ?uflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
2289 /* ?uflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
2290 #define call_basic_filebuf_char_uflow(this) CALL_VTBL_FUNC(this, 20, \
2291 int, (basic_filebuf_char*), (this))
2292 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_uflow, 4)
2293 int __thiscall basic_filebuf_char_uflow(basic_filebuf_char *this)
2295 char ch, buf[128], *to_next;
2296 const char *buf_next;
2297 int c, i;
2299 TRACE("(%p)\n", this);
2301 if(!basic_filebuf_char_is_open(this))
2302 return EOF;
2304 if(basic_streambuf_char_gptr(&this->base) < basic_streambuf_char_egptr(&this->base))
2305 return *basic_streambuf_char__Gninc(&this->base);
2307 c = fgetc(this->file);
2308 if(!this->cvt || !c)
2309 return c;
2311 buf_next = buf;
2312 for(i=0; i < sizeof(buf)/sizeof(char); i++) {
2313 buf[i] = c;
2315 switch(codecvt_char_in(this->cvt, &this->state, buf_next,
2316 buf+i+1, &buf_next, &ch, &ch+1, &to_next)) {
2317 case CODECVT_partial:
2318 case CODECVT_ok:
2319 if(to_next == &ch) {
2320 c = fgetc(this->file);
2321 if(!c)
2322 return EOF;
2323 continue;
2326 for(i--; i>=buf_next-buf; i--)
2327 ungetc(buf[i], this->file);
2328 return ch;
2329 case CODECVT_noconv:
2330 return buf[0];
2331 default:
2332 return EOF;
2336 FIXME("buffer is to small\n");
2337 return EOF;
2340 /* ?underflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
2341 /* ?underflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
2342 #define call_basic_filebuf_char_underflow(this) CALL_VTBL_FUNC(this, 16, \
2343 int, (basic_filebuf_char*), (this))
2344 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_underflow, 4)
2345 int __thiscall basic_filebuf_char_underflow(basic_filebuf_char *this)
2347 int ret;
2349 TRACE("(%p)\n", this);
2351 if(basic_streambuf_char_gptr(&this->base) < basic_streambuf_char_egptr(&this->base))
2352 return *basic_streambuf_char_gptr(&this->base);
2354 ret = call_basic_filebuf_char_uflow(this);
2355 if(ret)
2356 ret = call_basic_filebuf_char_pbackfail(this, ret);
2357 return ret;
2360 /* ?seekoff@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@JHH@Z */
2361 /* ?seekoff@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */
2362 #define call_basic_filebuf_char_seekoff(this, ret, off, way, mode) CALL_VTBL_FUNC(this, 36, \
2363 fpos_int*, (basic_filebuf_char*, fpos_int*, streamoff, int, int), (this, ret, off, way, mode))
2364 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_seekoff, 20)
2365 fpos_int* __thiscall basic_filebuf_char_seekoff(basic_filebuf_char *this,
2366 fpos_int *ret, streamoff off, int way, int mode)
2368 fpos_t pos;
2370 TRACE("(%p %p %ld %d %d)\n", this, ret, off, way, mode);
2372 if(!basic_filebuf_char_is_open(this) || !basic_filebuf_char__Endwrite(this)
2373 || fseek(this->file, off, way)) {
2374 ret->off = 0;
2375 ret->pos = -1;
2376 ret->state = 0;
2377 return ret;
2380 fgetpos(this->file, &pos);
2381 ret->off = 0;
2382 ret->pos = pos;
2383 ret->state = this->state;
2384 return ret;
2387 /* ?seekpos@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
2388 /* ?seekpos@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
2389 #define call_basic_filebuf_char_seekpos(this, ret, pos, mode) CALL_VTBL_FUNC(this, 40, \
2390 fpos_int*, (basic_filebuf_char*, fpos_int*, fpos_int, mode), (this, ret, pos, mode))
2391 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_seekpos, 36)
2392 fpos_int* __thiscall basic_filebuf_char_seekpos(basic_filebuf_char *this,
2393 fpos_int *ret, fpos_int pos, int mode)
2395 fpos_t fpos;
2397 TRACE("(%p %p %s %d)\n", this, ret, debugstr_fpos_int(&pos), mode);
2399 if(!basic_filebuf_char_is_open(this) || !basic_filebuf_char__Endwrite(this)
2400 || fseek(this->file, (LONG)pos.pos, SEEK_SET)
2401 || (pos.off && fseek(this->file, pos.off, SEEK_CUR))) {
2402 ret->off = 0;
2403 ret->pos = -1;
2404 ret->state = 0;
2405 return ret;
2408 fgetpos(this->file, &fpos);
2409 ret->off = 0;
2410 ret->pos = fpos;
2411 ret->state = this->state;
2412 return ret;
2415 /* ?setbuf@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PADH@Z */
2416 /* ?setbuf@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PEAD_J@Z */
2417 #define call_basic_filebuf_char_setbuf(this, buf, count) CALL_VTBL_FUNC(this, 44, \
2418 basic_streambuf_char*, (basic_filebuf_char*, char*, streamsize), (this, buf, count))
2419 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_setbuf, 12)
2420 basic_streambuf_char* __thiscall basic_filebuf_char_setbuf(basic_filebuf_char *this, char *buf, streamsize count)
2422 TRACE("(%p %p %ld)\n", this, buf, count);
2424 if(!basic_filebuf_char_is_open(this))
2425 return NULL;
2427 if(setvbuf(this->file, buf, (buf==NULL && count==0) ? _IONBF : _IOFBF, count))
2428 return NULL;
2430 basic_filebuf_char__Init(this, this->file, INITFL_open);
2431 return &this->base;
2434 /* ?sync@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
2435 /* ?sync@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
2436 #define call_basic_filebuf_char_sync(this) CALL_VTBL_FUNC(this, 48, \
2437 int, (basic_filebuf_char*), (this))
2438 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_sync, 4)
2439 int __thiscall basic_filebuf_char_sync(basic_filebuf_char *this)
2441 TRACE("(%p)\n", this);
2443 if(!basic_filebuf_char_is_open(this))
2444 return 0;
2446 if(call_basic_filebuf_char_overflow(this, EOF) == EOF)
2447 return 0;
2448 return fflush(this->file);
2451 /* ?imbue@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEXABVlocale@2@@Z */
2452 /* ?imbue@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAXAEBVlocale@2@@Z */
2453 #define call_basic_filebuf_char_imbue(this, loc) CALL_VTBL_FUNC(this, 52, \
2454 void, (basic_filebuf_char*, const locale*), (this, loc))
2455 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_imbue, 8)
2456 void __thiscall basic_filebuf_char_imbue(basic_filebuf_char *this, const locale *loc)
2458 TRACE("(%p %p)\n", this, loc);
2459 basic_filebuf_char__Initcvt(this, codecvt_char_use_facet(loc));
2462 /* ?_Getstate@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEHH@Z */
2463 /* ?_Getstate@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAHH@Z */
2464 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char__Getstate, 8)
2465 int __thiscall basic_stringbuf_char__Getstate(basic_stringbuf_char *this, IOSB_openmode mode)
2467 int state = 0;
2469 if(!(mode & OPENMODE_in))
2470 state |= STRINGBUF_no_read;
2472 if(!(mode & OPENMODE_out))
2473 state |= STRINGBUF_no_write;
2475 if(mode & OPENMODE_ate)
2476 state |= STRINGBUF_at_end;
2478 if(mode & OPENMODE_app)
2479 state |= STRINGBUF_append;
2481 return state;
2484 /* ?_Init@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAEXPBDIH@Z */
2485 /* ?_Init@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEAAXPEBD_KH@Z */
2486 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char__Init, 16)
2487 void __thiscall basic_stringbuf_char__Init(basic_stringbuf_char *this, const char *str, MSVCP_size_t count, int state)
2489 TRACE("(%p, %p, %ld, %d)\n", this, str, count, state);
2491 basic_streambuf_char__Init_empty(&this->base);
2493 this->state = state;
2494 this->seekhigh = NULL;
2496 if(count && str) {
2497 char *buf = MSVCRT_operator_new(count);
2498 if(!buf) {
2499 ERR("Out of memory\n");
2500 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
2503 memcpy(buf, str, count);
2504 this->seekhigh = buf + count;
2506 this->state |= STRINGBUF_allocated;
2508 if(!(state & STRINGBUF_no_read))
2509 basic_streambuf_char_setg(&this->base, buf, buf, buf + count);
2511 if(!(state & STRINGBUF_no_write)) {
2512 basic_streambuf_char_setp_next(&this->base, buf, (state & STRINGBUF_at_end) ? buf + count : buf, buf + count);
2514 if(!basic_streambuf_char_gptr(&this->base))
2515 basic_streambuf_char_setg(&this->base, buf, 0, buf);
2520 /* ??0?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@H@Z */
2521 /* ??0?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@H@Z */
2522 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_ctor_str, 12)
2523 basic_stringbuf_char* __thiscall basic_stringbuf_char_ctor_str(basic_stringbuf_char *this,
2524 basic_string_char *str, IOSB_openmode mode)
2526 TRACE("(%p %p %d)\n", this, str, mode);
2528 basic_streambuf_char_ctor(&this->base);
2529 this->base.vtable = &MSVCP_basic_stringbuf_char_vtable;
2531 basic_stringbuf_char__Init(this, MSVCP_basic_string_char_c_str(str),
2532 str->size, basic_stringbuf_char__Getstate(this, mode));
2533 return this;
2536 /* ??0?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@H@Z */
2537 /* ??0?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@H@Z */
2538 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_ctor_mode, 8)
2539 basic_stringbuf_char* __thiscall basic_stringbuf_char_ctor_mode(
2540 basic_stringbuf_char *this, IOSB_openmode mode)
2542 TRACE("(%p %d)\n", this, mode);
2544 basic_streambuf_char_ctor(&this->base);
2545 this->base.vtable = &MSVCP_basic_stringbuf_char_vtable;
2547 basic_stringbuf_char__Init(this, NULL, 0, basic_stringbuf_char__Getstate(this, mode));
2548 return this;
2551 /* ??_F?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */
2552 /* ??_F?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */
2553 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_ctor, 4)
2554 basic_stringbuf_char* __thiscall basic_stringbuf_char_ctor(basic_stringbuf_char *this)
2556 return basic_stringbuf_char_ctor_mode(this, OPENMODE_in|OPENMODE_out);
2559 /* ?_Tidy@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAEXXZ */
2560 /* ?_Tidy@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEAAXXZ */
2561 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char__Tidy, 4)
2562 void __thiscall basic_stringbuf_char__Tidy(basic_stringbuf_char *this)
2564 TRACE("(%p)\n", this);
2566 if(this->state & STRINGBUF_allocated) {
2567 MSVCRT_operator_delete(basic_streambuf_char_eback(&this->base));
2568 this->seekhigh = NULL;
2569 this->state &= ~STRINGBUF_allocated;
2572 basic_streambuf_char__Init_empty(&this->base);
2575 /* ??1?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UAE@XZ */
2576 /* ??1?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UEAA@XZ */
2577 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_dtor, 4)
2578 void __thiscall basic_stringbuf_char_dtor(basic_stringbuf_char *this)
2580 TRACE("(%p)\n", this);
2582 basic_stringbuf_char__Tidy(this);
2583 basic_streambuf_char_dtor(&this->base);
2586 DEFINE_THISCALL_WRAPPER(MSVCP_basic_stringbuf_char_vector_dtor, 8)
2587 basic_stringbuf_char* __thiscall MSVCP_basic_stringbuf_char_vector_dtor(basic_stringbuf_char *this, unsigned int flags)
2589 TRACE("(%p %x)\n", this, flags);
2591 if(flags & 2) {
2592 /* we have an array, with the number of elements stored before the first object */
2593 int i, *ptr = (int *) this - 1;
2595 for (i = *ptr - 1; i >= 0; i--)
2596 basic_stringbuf_char_dtor(this+i);
2598 MSVCRT_operator_delete(ptr);
2599 }else {
2600 basic_stringbuf_char_dtor(this);
2602 if(flags & 1)
2603 MSVCRT_operator_delete(this);
2606 return this;
2609 /* ?overflow@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MAEHH@Z */
2610 /* ?overflow@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MEAAHH@Z */
2611 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_overflow, 8)
2612 int __thiscall basic_stringbuf_char_overflow(basic_stringbuf_char *this, int meta)
2614 MSVCP_size_t oldsize, size;
2615 char *ptr, *buf;
2617 TRACE("(%p %x)\n", this, meta);
2619 if(meta == EOF)
2620 return !EOF;
2621 if(this->state & STRINGBUF_no_write)
2622 return EOF;
2624 ptr = basic_streambuf_char_pptr(&this->base);
2625 if((this->state&STRINGBUF_append) && ptr<this->seekhigh)
2626 basic_streambuf_char_setp_next(&this->base, basic_streambuf_char_pbase(&this->base),
2627 this->seekhigh, basic_streambuf_char_epptr(&this->base));
2629 if(ptr && ptr<basic_streambuf_char_epptr(&this->base))
2630 return (*basic_streambuf_char__Pninc(&this->base) = meta);
2632 oldsize = (ptr ? basic_streambuf_char_epptr(&this->base)-basic_streambuf_char_eback(&this->base): 0);
2633 size = oldsize|0xf;
2634 size += size/2;
2635 buf = MSVCRT_operator_new(size);
2636 if(!buf) {
2637 ERR("Out of memory\n");
2638 throw_exception(EXCEPTION_BAD_ALLOC, NULL);
2641 if(!oldsize) {
2642 this->seekhigh = buf;
2643 basic_streambuf_char_setp(&this->base, buf, buf+size);
2644 if(this->state & STRINGBUF_no_read)
2645 basic_streambuf_char_setg(&this->base, buf, NULL, buf);
2646 else
2647 basic_streambuf_char_setg(&this->base, buf, buf, buf+1);
2649 this->state |= STRINGBUF_allocated;
2650 }else {
2651 ptr = basic_streambuf_char_eback(&this->base);
2652 memcpy(buf, ptr, oldsize);
2654 this->seekhigh = buf+(this->seekhigh-ptr);
2655 basic_streambuf_char_setp_next(&this->base, buf,
2656 buf+(basic_streambuf_char_pptr(&this->base)-ptr), buf+size);
2657 if(this->state & STRINGBUF_no_read)
2658 basic_streambuf_char_setg(&this->base, buf, NULL, buf);
2659 else
2660 basic_streambuf_char_setg(&this->base, buf,
2661 buf+(basic_streambuf_char_gptr(&this->base)-ptr),
2662 basic_streambuf_char_pptr(&this->base)+1);
2664 MSVCRT_operator_delete(ptr);
2667 return (*basic_streambuf_char__Pninc(&this->base) = meta);
2670 /* ?pbackfail@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MAEHH@Z */
2671 /* ?pbackfail@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MEAAHH@Z */
2672 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_pbackfail, 8)
2673 int __thiscall basic_stringbuf_char_pbackfail(basic_stringbuf_char *this, int c)
2675 char *cur;
2677 TRACE("(%p %x)\n", this, c);
2679 cur = basic_streambuf_char_gptr(&this->base);
2680 if(!cur || cur==basic_streambuf_char_eback(&this->base)
2681 || (c!=EOF && c!=cur[-1] && this->state&STRINGBUF_no_write))
2682 return EOF;
2684 if(c != EOF)
2685 cur[-1] = c;
2686 basic_streambuf_char_gbump(&this->base, -1);
2687 return c==EOF ? !EOF : c;
2690 /* ?underflow@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MAEHXZ */
2691 /* ?underflow@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MEAAHXZ */
2692 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_underflow, 4)
2693 int __thiscall basic_stringbuf_char_underflow(basic_stringbuf_char *this)
2695 char *ptr, *cur;
2697 TRACE("(%p)\n", this);
2699 cur = basic_streambuf_char_gptr(&this->base);
2700 if(!cur || this->state&STRINGBUF_no_read)
2701 return EOF;
2703 ptr = basic_streambuf_char_pptr(&this->base);
2704 if(this->seekhigh < ptr)
2705 this->seekhigh = ptr;
2707 ptr = basic_streambuf_char_egptr(&this->base);
2708 if(this->seekhigh > ptr)
2709 basic_streambuf_char_setg(&this->base, basic_streambuf_char_eback(&this->base), cur, this->seekhigh);
2711 if(cur < this->seekhigh)
2712 return *cur;
2713 return EOF;
2716 /* ?seekoff@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MAE?AV?$fpos@H@2@JHH@Z */
2717 /* ?seekoff@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MEAA?AV?$fpos@H@2@_JHH@Z */
2718 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_seekoff, 20)
2719 fpos_int* __thiscall basic_stringbuf_char_seekoff(basic_stringbuf_char *this,
2720 fpos_int *ret, streamoff off, int way, int mode)
2722 char *beg, *cur_r, *cur_w;
2724 TRACE("(%p %p %ld %d %d)\n", this, ret, off, way, mode);
2726 cur_w = basic_streambuf_char_pptr(&this->base);
2727 if(cur_w > this->seekhigh)
2728 this->seekhigh = cur_w;
2730 ret->off = 0;
2731 ret->state = 0;
2733 beg = basic_streambuf_char_eback(&this->base);
2734 cur_r = basic_streambuf_char_gptr(&this->base);
2735 if((mode & OPENMODE_in) && cur_r) {
2736 if(way==SEEKDIR_cur && !(mode & OPENMODE_out))
2737 off += cur_r-beg;
2738 else if(way == SEEKDIR_end)
2739 off += this->seekhigh-beg;
2740 else if(way != SEEKDIR_beg)
2741 off = -1;
2743 if(off<0 || off>this->seekhigh-beg) {
2744 off = -1;
2745 }else {
2746 basic_streambuf_char_gbump(&this->base, beg-cur_r+off);
2747 if((mode & OPENMODE_out) && cur_w) {
2748 basic_streambuf_char_setp_next(&this->base, beg,
2749 basic_streambuf_char_gptr(&this->base),
2750 basic_streambuf_char_epptr(&this->base));
2753 }else if((mode & OPENMODE_out) && cur_w) {
2754 if(way == SEEKDIR_cur)
2755 off += cur_w-beg;
2756 else if(way == SEEKDIR_end)
2757 off += this->seekhigh-beg;
2758 else if(way != SEEKDIR_beg)
2759 off = -1;
2761 if(off<0 || off>this->seekhigh-beg)
2762 off = -1;
2763 else
2764 basic_streambuf_char_pbump(&this->base, beg-cur_w+off);
2765 }else {
2766 off = -1;
2769 ret->pos = off;
2770 return ret;
2773 /* ?seekpos@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
2774 /* ?seekpos@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
2775 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_seekpos, 36)
2776 fpos_int* __thiscall basic_stringbuf_char_seekpos(basic_stringbuf_char *this,
2777 fpos_int *ret, fpos_int pos, int mode)
2779 TRACE("(%p %p %s %d)\n", this, ret, debugstr_fpos_int(&pos), mode);
2781 if(pos.off==0 && pos.pos==-1 && pos.state==0) {
2782 *ret = pos;
2783 return ret;
2786 return basic_stringbuf_char_seekoff(this, ret, pos.off, SEEKDIR_beg, mode);
2789 /* ?str@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
2790 /* ?str@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
2791 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_str_set, 8)
2792 void __thiscall basic_stringbuf_char_str_set(basic_stringbuf_char *this, basic_string_char *str)
2794 TRACE("(%p %p)\n", this, str);
2796 basic_stringbuf_char__Tidy(this);
2797 basic_stringbuf_char__Init(this, MSVCP_basic_string_char_c_str(str), str->size, this->state);
2800 /* ?str@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
2801 /* ?str@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
2803 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_str_get, 8)
2804 basic_string_char* __thiscall basic_stringbuf_char_str_get(basic_stringbuf_char *this, basic_string_char *ret)
2806 char *ptr;
2808 TRACE("(%p)\n", this);
2810 if(!(this->state & STRINGBUF_no_write) && basic_streambuf_char_pptr(&this->base)) {
2811 char *pptr;
2813 ptr = basic_streambuf_char_pbase(&this->base);
2814 pptr = basic_streambuf_char_pptr(&this->base);
2816 return MSVCP_basic_string_char_ctor_cstr_len(ret, ptr, (this->seekhigh < pptr ? pptr : this->seekhigh) - ptr);
2819 if(!(this->state & STRINGBUF_no_read) && basic_streambuf_char_gptr(&this->base)) {
2820 ptr = basic_streambuf_char_eback(&this->base);
2821 return MSVCP_basic_string_char_ctor_cstr_len(ret, ptr, basic_streambuf_char_egptr(&this->base) - ptr);
2824 return MSVCP_basic_string_char_ctor(ret);
2827 /* ??0ios_base@std@@IAE@XZ */
2828 /* ??0ios_base@std@@IEAA@XZ */
2829 DEFINE_THISCALL_WRAPPER(ios_base_ctor, 4)
2830 ios_base* __thiscall ios_base_ctor(ios_base *this)
2832 TRACE("(%p)\n", this);
2833 this->vtable = &MSVCP_ios_base_vtable;
2834 return this;
2837 /* ??0ios_base@std@@QAE@ABV01@@Z */
2838 /* ??0ios_base@std@@QEAA@AEBV01@@Z */
2839 DEFINE_THISCALL_WRAPPER(ios_base_copy_ctor, 8)
2840 ios_base* __thiscall ios_base_copy_ctor(ios_base *this, const ios_base *copy)
2842 TRACE("(%p %p)\n", this, copy);
2843 *this = *copy;
2844 this->vtable = &MSVCP_ios_base_vtable;
2845 return this;
2848 /* ?_Callfns@ios_base@std@@AAEXW4event@12@@Z */
2849 /* ?_Callfns@ios_base@std@@AEAAXW4event@12@@Z */
2850 DEFINE_THISCALL_WRAPPER(ios_base_Callfns, 8)
2851 void __thiscall ios_base_Callfns(ios_base *this, IOS_BASE_event event)
2853 IOS_BASE_fnarray *cur;
2855 TRACE("(%p %x)\n", this, event);
2857 for(cur=this->calls; cur; cur=cur->next)
2858 cur->event_handler(event, this, cur->index);
2861 /* ?_Tidy@ios_base@std@@AAAXXZ */
2862 /* ?_Tidy@ios_base@std@@AEAAXXZ */
2863 void CDECL ios_base_Tidy(ios_base *this)
2865 IOS_BASE_iosarray *arr_cur, *arr_next;
2866 IOS_BASE_fnarray *event_cur, *event_next;
2868 TRACE("(%p)\n", this);
2870 ios_base_Callfns(this, EVENT_erase_event);
2872 for(arr_cur=this->arr; arr_cur; arr_cur=arr_next) {
2873 arr_next = arr_cur->next;
2874 MSVCRT_operator_delete(arr_cur);
2876 this->arr = NULL;
2878 for(event_cur=this->calls; event_cur; event_cur=event_next) {
2879 event_next = event_cur->next;
2880 MSVCRT_operator_delete(event_cur);
2882 this->calls = NULL;
2885 /* ?_Ios_base_dtor@ios_base@std@@CAXPAV12@@Z */
2886 /* ?_Ios_base_dtor@ios_base@std@@CAXPEAV12@@Z */
2887 void CDECL ios_base_Ios_base_dtor(ios_base *obj)
2889 TRACE("(%p)\n", obj);
2890 if(obj->loc) {
2891 locale_dtor(obj->loc);
2892 MSVCRT_operator_delete(obj->loc);
2894 ios_base_Tidy(obj);
2897 /* ??1ios_base@std@@UAE@XZ */
2898 /* ??1ios_base@std@@UEAA@XZ */
2899 DEFINE_THISCALL_WRAPPER(ios_base_dtor, 4)
2900 void __thiscall ios_base_dtor(ios_base *this)
2902 ios_base_Ios_base_dtor(this);
2905 DEFINE_THISCALL_WRAPPER(MSVCP_ios_base_vector_dtor, 8)
2906 ios_base* __thiscall MSVCP_ios_base_vector_dtor(ios_base *this, unsigned int flags)
2908 TRACE("(%p %x)\n", this, flags);
2909 if(flags & 2) {
2910 /* we have an array, with the number of elements stored before the first object */
2911 int i, *ptr = (int *)this-1;
2913 for(i=*ptr-1; i>=0; i--)
2914 ios_base_dtor(this+i);
2915 MSVCRT_operator_delete(ptr);
2916 } else {
2917 ios_base_dtor(this);
2918 if(flags & 1)
2919 MSVCRT_operator_delete(this);
2922 return this;
2925 DEFINE_THISCALL_WRAPPER(MSVCP_iosb_vector_dtor, 8)
2926 void* __thiscall MSVCP_iosb_vector_dtor(void *this, unsigned int flags)
2928 TRACE("(%p %x)\n", this, flags);
2929 if(flags & 2) {
2930 int *ptr = (int *)this-1;
2931 MSVCRT_operator_delete(ptr);
2932 } else {
2933 if(flags & 1)
2934 MSVCRT_operator_delete(this);
2937 return this;
2940 /* ?_Findarr@ios_base@std@@AAEAAU_Iosarray@12@H@Z */
2941 /* ?_Findarr@ios_base@std@@AEAAAEAU_Iosarray@12@H@Z */
2942 DEFINE_THISCALL_WRAPPER(ios_base_Findarr, 8)
2943 IOS_BASE_iosarray* __thiscall ios_base_Findarr(ios_base *this, int index)
2945 IOS_BASE_iosarray *p;
2947 TRACE("(%p %d)\n", this, index);
2949 for(p=this->arr; p; p=p->next) {
2950 if(p->index == index)
2951 return p;
2954 for(p=this->arr; p; p=p->next) {
2955 if(!p->long_val && !p->ptr_val) {
2956 p->index = index;
2957 return p;
2961 p = MSVCRT_operator_new(sizeof(IOS_BASE_iosarray));
2962 p->next = this->arr;
2963 p->index = index;
2964 p->long_val = 0;
2965 p->ptr_val = NULL;
2966 this->arr = p;
2967 return p;
2970 /* ?iword@ios_base@std@@QAEAAJH@Z */
2971 /* ?iword@ios_base@std@@QEAAAEAJH@Z */
2972 DEFINE_THISCALL_WRAPPER(ios_base_iword, 8)
2973 LONG* __thiscall ios_base_iword(ios_base *this, int index)
2975 TRACE("(%p %d)\n", this, index);
2976 return &ios_base_Findarr(this, index)->long_val;
2979 /* ?pword@ios_base@std@@QAEAAPAXH@Z */
2980 /* ?pword@ios_base@std@@QEAAAEAPEAXH@Z */
2981 DEFINE_THISCALL_WRAPPER(ios_base_pword, 8)
2982 void** __thiscall ios_base_pword(ios_base *this, int index)
2984 TRACE("(%p %d)\n", this, index);
2985 return &ios_base_Findarr(this, index)->ptr_val;
2988 /* ?register_callback@ios_base@std@@QAEXP6AXW4event@12@AAV12@H@ZH@Z */
2989 /* ?register_callback@ios_base@std@@QEAAXP6AXW4event@12@AEAV12@H@ZH@Z */
2990 DEFINE_THISCALL_WRAPPER(ios_base_register_callback, 12)
2991 void __thiscall ios_base_register_callback(ios_base *this, IOS_BASE_event_callback callback, int index)
2993 IOS_BASE_fnarray *event;
2995 TRACE("(%p %p %d)\n", this, callback, index);
2997 event = MSVCRT_operator_new(sizeof(IOS_BASE_fnarray));
2998 event->next = this->calls;
2999 event->index = index;
3000 event->event_handler = callback;
3001 this->calls = event;
3004 /* ?clear@ios_base@std@@QAEXH_N@Z */
3005 /* ?clear@ios_base@std@@QEAAXH_N@Z */
3006 DEFINE_THISCALL_WRAPPER(ios_base_clear_reraise, 12)
3007 void __thiscall ios_base_clear_reraise(ios_base *this, IOSB_iostate state, MSVCP_bool reraise)
3009 TRACE("(%p %x %x)\n", this, state, reraise);
3011 this->state = state & IOSTATE_mask;
3012 if(!(this->state & this->except))
3013 return;
3015 if(reraise)
3016 throw_exception(EXCEPTION_RERAISE, NULL);
3017 else if(this->state & this->except & IOSTATE_eofbit)
3018 throw_exception(EXCEPTION_FAILURE, "eofbit is set");
3019 else if(this->state & this->except & IOSTATE_failbit)
3020 throw_exception(EXCEPTION_FAILURE, "failbit is set");
3021 else if(this->state & this->except & IOSTATE_badbit)
3022 throw_exception(EXCEPTION_FAILURE, "badbit is set");
3023 else if(this->state & this->except & IOSTATE__Hardfail)
3024 throw_exception(EXCEPTION_FAILURE, "_Hardfail is set");
3027 /* ?clear@ios_base@std@@QAEXH@Z */
3028 /* ?clear@ios_base@std@@QEAAXH@Z */
3029 DEFINE_THISCALL_WRAPPER(ios_base_clear, 8)
3030 void __thiscall ios_base_clear(ios_base *this, IOSB_iostate state)
3032 ios_base_clear_reraise(this, state, FALSE);
3035 /* ?clear@ios_base@std@@QAEXI@Z */
3036 /* ?clear@ios_base@std@@QEAAXI@Z */
3037 DEFINE_THISCALL_WRAPPER(ios_base_clear_unsigned, 8)
3038 void __thiscall ios_base_clear_unsigned(ios_base *this, unsigned int state)
3040 ios_base_clear_reraise(this, (IOSB_iostate)state, FALSE);
3043 /* ?exceptions@ios_base@std@@QAEXH@Z */
3044 /* ?exceptions@ios_base@std@@QEAAXH@Z */
3045 DEFINE_THISCALL_WRAPPER(ios_base_exceptions_set, 8)
3046 void __thiscall ios_base_exceptions_set(ios_base *this, IOSB_iostate state)
3048 TRACE("(%p %x)\n", this, state);
3049 this->except = state & IOSTATE_mask;
3050 ios_base_clear(this, this->state);
3053 /* ?exceptions@ios_base@std@@QAEXI@Z */
3054 /* ?exceptions@ios_base@std@@QEAAXI@Z */
3055 DEFINE_THISCALL_WRAPPER(ios_base_exceptions_set_unsigned, 8)
3056 void __thiscall ios_base_exceptions_set_unsigned(ios_base *this, unsigned int state)
3058 TRACE("(%p %x)\n", this, state);
3059 ios_base_exceptions_set(this, state);
3062 /* ?exceptions@ios_base@std@@QBEHXZ */
3063 /* ?exceptions@ios_base@std@@QEBAHXZ */
3064 DEFINE_THISCALL_WRAPPER(ios_base_exceptions_get, 4)
3065 IOSB_iostate __thiscall ios_base_exceptions_get(ios_base *this)
3067 TRACE("(%p)\n", this);
3068 return this->except;
3071 /* ?copyfmt@ios_base@std@@QAEAAV12@ABV12@@Z */
3072 /* ?copyfmt@ios_base@std@@QEAAAEAV12@AEBV12@@Z */
3073 DEFINE_THISCALL_WRAPPER(ios_base_copyfmt, 8)
3074 ios_base* __thiscall ios_base_copyfmt(ios_base *this, const ios_base *rhs)
3076 TRACE("(%p %p)\n", this, rhs);
3078 if(this != rhs) {
3079 IOS_BASE_iosarray *arr_cur;
3080 IOS_BASE_fnarray *event_cur;
3082 ios_base_Tidy(this);
3084 for(arr_cur=rhs->arr; arr_cur; arr_cur=arr_cur->next) {
3085 if(arr_cur->long_val)
3086 *ios_base_iword(this, arr_cur->index) = arr_cur->long_val;
3087 if(arr_cur->ptr_val)
3088 *ios_base_pword(this, arr_cur->index) = arr_cur->ptr_val;
3090 this->stdstr = rhs->stdstr;
3091 this->fmtfl = rhs->fmtfl;
3092 this->prec = rhs->prec;
3093 this->wide = rhs->wide;
3094 locale_operator_assign(this->loc, rhs->loc);
3096 for(event_cur=rhs->calls; event_cur; event_cur=event_cur->next)
3097 ios_base_register_callback(this, event_cur->event_handler, event_cur->index);
3099 ios_base_Callfns(this, EVENT_copyfmt_event);
3100 ios_base_exceptions_set(this, rhs->except);
3103 return this;
3106 /* ??4ios_base@std@@QAEAAV01@ABV01@@Z */
3107 /* ??4ios_base@std@@QEAAAEAV01@AEBV01@@Z */
3108 DEFINE_THISCALL_WRAPPER(ios_base_assign, 8)
3109 ios_base* __thiscall ios_base_assign(ios_base *this, const ios_base *right)
3111 TRACE("(%p %p)\n", this, right);
3113 if(this != right) {
3114 this->state = right->state;
3115 ios_base_copyfmt(this, right);
3118 return this;
3121 /* ?fail@ios_base@std@@QBE_NXZ */
3122 /* ?fail@ios_base@std@@QEBA_NXZ */
3123 DEFINE_THISCALL_WRAPPER(ios_base_fail, 4)
3124 MSVCP_bool __thiscall ios_base_fail(const ios_base *this)
3126 TRACE("(%p)\n", this);
3127 return (this->state & (IOSTATE_failbit|IOSTATE_badbit)) != 0;
3130 /* ??7ios_base@std@@QBE_NXZ */
3131 /* ??7ios_base@std@@QEBA_NXZ */
3132 DEFINE_THISCALL_WRAPPER(ios_base_op_succ, 4)
3133 MSVCP_bool __thiscall ios_base_op_succ(const ios_base *this)
3135 TRACE("(%p)\n", this);
3136 return ios_base_fail(this);
3139 /* ??Bios_base@std@@QBEPAXXZ */
3140 /* ??Bios_base@std@@QEBAPEAXXZ */
3141 DEFINE_THISCALL_WRAPPER(ios_base_op_fail, 4)
3142 void* __thiscall ios_base_op_fail(const ios_base *this)
3144 TRACE("(%p)\n", this);
3145 return ios_base_fail(this) ? NULL : (void*)this;
3148 /* ?_Addstd@ios_base@std@@SAXPAV12@@Z */
3149 /* ?_Addstd@ios_base@std@@SAXPEAV12@@Z */
3150 void CDECL ios_base_Addstd(ios_base *add)
3152 FIXME("(%p) stub\n", add);
3155 /* ?_Index_func@ios_base@std@@CAAAHXZ */
3156 /* ?_Index_func@ios_base@std@@CAAEAHXZ */
3157 int* CDECL ios_base_Index_func(void)
3159 TRACE("\n");
3160 return &ios_base_Index;
3163 /* ?_Init@ios_base@std@@IAEXXZ */
3164 /* ?_Init@ios_base@std@@IEAAXXZ */
3165 DEFINE_THISCALL_WRAPPER(ios_base_Init, 4)
3166 void __thiscall ios_base_Init(ios_base *this)
3168 TRACE("(%p)\n", this);
3170 this->stdstr = 0;
3171 this->state = this->except = IOSTATE_goodbit;
3172 this->fmtfl = FMTFLAG_skipws | FMTFLAG_dec;
3173 this->prec = 6;
3174 this->wide = 0;
3175 this->arr = NULL;
3176 this->calls = NULL;
3177 this->loc = MSVCRT_operator_new(sizeof(locale));
3178 locale_ctor(this->loc);
3181 /* ?_Sync_func@ios_base@std@@CAAA_NXZ */
3182 /* ?_Sync_func@ios_base@std@@CAAEA_NXZ */
3183 MSVCP_bool* CDECL ios_base_Sync_func(void)
3185 TRACE("\n");
3186 return &ios_base_Sync;
3189 /* ?bad@ios_base@std@@QBE_NXZ */
3190 /* ?bad@ios_base@std@@QEBA_NXZ */
3191 DEFINE_THISCALL_WRAPPER(ios_base_bad, 4)
3192 MSVCP_bool __thiscall ios_base_bad(const ios_base *this)
3194 TRACE("(%p)\n", this);
3195 return (this->state & IOSTATE_badbit) != 0;
3198 /* ?eof@ios_base@std@@QBE_NXZ */
3199 /* ?eof@ios_base@std@@QEBA_NXZ */
3200 DEFINE_THISCALL_WRAPPER(ios_base_eof, 4)
3201 MSVCP_bool __thiscall ios_base_eof(const ios_base *this)
3203 TRACE("(%p)\n", this);
3204 return (this->state & IOSTATE_eofbit) != 0;
3207 /* ?flags@ios_base@std@@QAEHH@Z */
3208 /* ?flags@ios_base@std@@QEAAHH@Z */
3209 DEFINE_THISCALL_WRAPPER(ios_base_flags_set, 8)
3210 IOSB_fmtflags __thiscall ios_base_flags_set(ios_base *this, IOSB_fmtflags flags)
3212 IOSB_fmtflags ret = this->fmtfl;
3214 TRACE("(%p %x)\n", this, flags);
3216 this->fmtfl = flags & FMTFLAG_mask;
3217 return ret;
3220 /* ?flags@ios_base@std@@QBEHXZ */
3221 /* ?flags@ios_base@std@@QEBAHXZ */
3222 DEFINE_THISCALL_WRAPPER(ios_base_flags_get, 4)
3223 IOSB_fmtflags __thiscall ios_base_flags_get(const ios_base *this)
3225 TRACE("(%p)\n", this);
3226 return this->fmtfl;
3229 /* ?getloc@ios_base@std@@QBE?AVlocale@2@XZ */
3230 /* ?getloc@ios_base@std@@QEBA?AVlocale@2@XZ */
3231 DEFINE_THISCALL_WRAPPER(ios_base_getloc, 8)
3232 locale* __thiscall ios_base_getloc(const ios_base *this, locale *ret)
3234 TRACE("(%p)\n", this);
3235 return locale_copy_ctor(ret, this->loc);
3238 /* ?good@ios_base@std@@QBE_NXZ */
3239 /* ?good@ios_base@std@@QEBA_NXZ */
3240 DEFINE_THISCALL_WRAPPER(ios_base_good, 4)
3241 MSVCP_bool __thiscall ios_base_good(const ios_base *this)
3243 TRACE("(%p)\n", this);
3244 return this->state == IOSTATE_goodbit;
3247 /* ?imbue@ios_base@std@@QAE?AVlocale@2@ABV32@@Z */
3248 /* ?imbue@ios_base@std@@QEAA?AVlocale@2@AEBV32@@Z */
3249 DEFINE_THISCALL_WRAPPER(ios_base_imbue, 12)
3250 locale* __thiscall ios_base_imbue(ios_base *this, locale *ret, const locale *loc)
3252 TRACE("(%p %p)\n", this, loc);
3253 *ret = *this->loc;
3254 locale_copy_ctor(this->loc, loc);
3255 return ret;
3258 /* ?precision@ios_base@std@@QAEHH@Z */
3259 /* ?precision@ios_base@std@@QEAA_J_J@Z */
3260 DEFINE_THISCALL_WRAPPER(ios_base_precision_set, 8)
3261 streamsize __thiscall ios_base_precision_set(ios_base *this, streamsize precision)
3263 streamsize ret = this->prec;
3265 TRACE("(%p %ld)\n", this, precision);
3267 this->prec = precision;
3268 return ret;
3271 /* ?precision@ios_base@std@@QBEHXZ */
3272 /* ?precision@ios_base@std@@QEBA_JXZ */
3273 DEFINE_THISCALL_WRAPPER(ios_base_precision_get, 4)
3274 streamsize __thiscall ios_base_precision_get(const ios_base *this)
3276 TRACE("(%p)\n", this);
3277 return this->prec;
3280 /* ?rdstate@ios_base@std@@QBEHXZ */
3281 /* ?rdstate@ios_base@std@@QEBAHXZ */
3282 DEFINE_THISCALL_WRAPPER(ios_base_rdstate, 4)
3283 IOSB_iostate __thiscall ios_base_rdstate(const ios_base *this)
3285 TRACE("(%p)\n", this);
3286 return this->state;
3289 /* ?setf@ios_base@std@@QAEHHH@Z */
3290 /* ?setf@ios_base@std@@QEAAHHH@Z */
3291 DEFINE_THISCALL_WRAPPER(ios_base_setf_mask, 12)
3292 IOSB_fmtflags __thiscall ios_base_setf_mask(ios_base *this, IOSB_fmtflags flags, IOSB_fmtflags mask)
3294 IOSB_fmtflags ret = this->fmtfl;
3296 TRACE("(%p %x %x)\n", this, flags, mask);
3298 this->fmtfl = (this->fmtfl & (~mask)) | (flags & mask & FMTFLAG_mask);
3299 return ret;
3302 /* ?setf@ios_base@std@@QAEHH@Z */
3303 /* ?setf@ios_base@std@@QEAAHH@Z */
3304 DEFINE_THISCALL_WRAPPER(ios_base_setf, 8)
3305 IOSB_fmtflags __thiscall ios_base_setf(ios_base *this, IOSB_fmtflags flags)
3307 return ios_base_setf_mask(this, flags, ~0);
3310 /* ?setstate@ios_base@std@@QAEXH_N@Z */
3311 /* ?setstate@ios_base@std@@QEAAXH_N@Z */
3312 DEFINE_THISCALL_WRAPPER(ios_base_setstate_reraise, 12)
3313 void __thiscall ios_base_setstate_reraise(ios_base *this, IOSB_iostate state, MSVCP_bool reraise)
3315 TRACE("(%p %x %x)\n", this, state, reraise);
3317 if(state != IOSTATE_goodbit)
3318 ios_base_clear_reraise(this, this->state | state, reraise);
3321 /* ?setstate@ios_base@std@@QAEXH@Z */
3322 /* ?setstate@ios_base@std@@QEAAXH@Z */
3323 DEFINE_THISCALL_WRAPPER(ios_base_setstate, 8)
3324 void __thiscall ios_base_setstate(ios_base *this, IOSB_iostate state)
3326 ios_base_setstate_reraise(this, state, FALSE);
3329 /* ?setstate@ios_base@std@@QAEXI@Z */
3330 /* ?setstate@ios_base@std@@QEAAXI@Z */
3331 DEFINE_THISCALL_WRAPPER(ios_base_setstate_unsigned, 8)
3332 void __thiscall ios_base_setstate_unsigned(ios_base *this, unsigned int state)
3334 ios_base_setstate_reraise(this, (IOSB_iostate)state, FALSE);
3337 /* ?sync_with_stdio@ios_base@std@@SA_N_N@Z */
3338 MSVCP_bool CDECL ios_base_sync_with_stdio(MSVCP_bool sync)
3340 _Lockit lock;
3341 MSVCP_bool ret;
3343 TRACE("(%x)\n", sync);
3345 _Lockit_ctor_locktype(&lock, _LOCK_STREAM);
3346 ret = ios_base_Sync;
3347 ios_base_Sync = sync;
3348 _Lockit_dtor(&lock);
3349 return ret;
3352 /* ?unsetf@ios_base@std@@QAEXH@Z */
3353 /* ?unsetf@ios_base@std@@QEAAXH@Z */
3354 DEFINE_THISCALL_WRAPPER(ios_base_unsetf, 8)
3355 void __thiscall ios_base_unsetf(ios_base *this, IOSB_fmtflags flags)
3357 TRACE("(%p %x)\n", this, flags);
3358 this->fmtfl &= ~flags;
3361 /* ?width@ios_base@std@@QAEHH@Z */
3362 /* ?width@ios_base@std@@QEAA_J_J@Z */
3363 DEFINE_THISCALL_WRAPPER(ios_base_width_set, 8)
3364 streamsize __thiscall ios_base_width_set(ios_base *this, streamsize width)
3366 streamsize ret = this->wide;
3368 TRACE("(%p %ld)\n", this, width);
3370 this->wide = width;
3371 return ret;
3374 /* ?width@ios_base@std@@QBEHXZ */
3375 /* ?width@ios_base@std@@QEBA_JXZ */
3376 DEFINE_THISCALL_WRAPPER(ios_base_width_get, 4)
3377 streamsize __thiscall ios_base_width_get(ios_base *this)
3379 TRACE("(%p)\n", this);
3380 return this->wide;
3383 /* ?xalloc@ios_base@std@@SAHXZ */
3384 int CDECL ios_base_xalloc(void)
3386 _Lockit lock;
3387 int ret;
3389 TRACE("\n");
3391 _Lockit_ctor_locktype(&lock, _LOCK_STREAM);
3392 ret = ios_base_Index++;
3393 _Lockit_dtor(&lock);
3394 return ret;
3397 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@IAE@XZ */
3398 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@IEAA@XZ */
3399 DEFINE_THISCALL_WRAPPER(basic_ios_char_ctor, 4)
3400 basic_ios_char* __thiscall basic_ios_char_ctor(basic_ios_char *this)
3402 TRACE("(%p)\n", this);
3404 ios_base_ctor(&this->base);
3405 this->base.vtable = &MSVCP_basic_ios_char_vtable;
3406 return this;
3409 /* ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z */
3410 /* ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IEAAXPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z */
3411 DEFINE_THISCALL_WRAPPER(basic_ios_char_init, 12)
3412 void __thiscall basic_ios_char_init(basic_ios_char *this, basic_streambuf_char *streambuf, MSVCP_bool isstd)
3414 TRACE("(%p %p %x)\n", this, streambuf, isstd);
3415 ios_base_Init(&this->base);
3416 this->strbuf = streambuf;
3417 this->stream = NULL;
3418 this->fillch = ' ';
3420 if(!streambuf)
3421 ios_base_setstate(&this->base, IOSTATE_badbit);
3423 if(isstd)
3424 FIXME("standard streams not handled yet\n");
3427 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
3428 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
3429 DEFINE_THISCALL_WRAPPER(basic_ios_char_ctor_streambuf, 8)
3430 basic_ios_char* __thiscall basic_ios_char_ctor_streambuf(basic_ios_char *this, basic_streambuf_char *strbuf)
3432 TRACE("(%p %p)\n", this, strbuf);
3434 basic_ios_char_ctor(this);
3435 basic_ios_char_init(this, strbuf, FALSE);
3436 return this;
3439 /* ??1?$basic_ios@DU?$char_traits@D@std@@@std@@UAE@XZ */
3440 /* ??1?$basic_ios@DU?$char_traits@D@std@@@std@@UEAA@XZ */
3441 DEFINE_THISCALL_WRAPPER(basic_ios_char_dtor, 4)
3442 void __thiscall basic_ios_char_dtor(basic_ios_char *this)
3444 TRACE("(%p)\n", this);
3445 ios_base_dtor(&this->base);
3448 DEFINE_THISCALL_WRAPPER(MSVCP_basic_ios_char_vector_dtor, 8)
3449 basic_ios_char* __thiscall MSVCP_basic_ios_char_vector_dtor(basic_ios_char *this, unsigned int flags)
3451 TRACE("(%p %x)\n", this, flags);
3452 if(flags & 2) {
3453 /* we have an array, with the number of elements stored before the first object */
3454 int i, *ptr = (int *)this-1;
3456 for(i=*ptr-1; i>=0; i--)
3457 basic_ios_char_dtor(this+i);
3458 MSVCRT_operator_delete(ptr);
3459 } else {
3460 basic_ios_char_dtor(this);
3461 if(flags & 1)
3462 MSVCRT_operator_delete(this);
3465 return this;
3468 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z */
3469 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z */
3470 DEFINE_THISCALL_WRAPPER(basic_ios_char_clear_reraise, 12)
3471 void __thiscall basic_ios_char_clear_reraise(basic_ios_char *this, IOSB_iostate state, MSVCP_bool reraise)
3473 TRACE("(%p %x %x)\n", this, state, reraise);
3474 ios_base_clear_reraise(&this->base, state | (this->strbuf ? IOSTATE_goodbit : IOSTATE_badbit), reraise);
3477 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXI@Z */
3478 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z */
3479 DEFINE_THISCALL_WRAPPER(basic_ios_char_clear, 8)
3480 void __thiscall basic_ios_char_clear(basic_ios_char *this, unsigned int state)
3482 basic_ios_char_clear_reraise(this, (IOSB_iostate)state, FALSE);
3485 /* ?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEAAV12@ABV12@@Z */
3486 /* ?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEBV12@@Z */
3487 DEFINE_THISCALL_WRAPPER(basic_ios_char_copyfmt, 8)
3488 basic_ios_char* __thiscall basic_ios_char_copyfmt(basic_ios_char *this, basic_ios_char *copy)
3490 TRACE("(%p %p)\n", this, copy);
3491 if(this == copy)
3492 return this;
3494 this->stream = copy->stream;
3495 this->fillch = copy->fillch;
3496 ios_base_copyfmt(&this->base, &copy->base);
3497 return this;
3500 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEDD@Z */
3501 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAADD@Z */
3502 DEFINE_THISCALL_WRAPPER(basic_ios_char_fill_set, 8)
3503 char __thiscall basic_ios_char_fill_set(basic_ios_char *this, char fill)
3505 char ret = this->fillch;
3507 TRACE("(%p %c)\n", this, fill);
3509 this->fillch = fill;
3510 return ret;
3513 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDXZ */
3514 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADXZ */
3515 DEFINE_THISCALL_WRAPPER(basic_ios_char_fill_get, 4)
3516 char __thiscall basic_ios_char_fill_get(basic_ios_char *this)
3518 TRACE("(%p)\n", this);
3519 return this->fillch;
3522 /* ?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
3523 /* ?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
3524 DEFINE_THISCALL_WRAPPER(basic_ios_char_imbue, 12)
3525 locale *__thiscall basic_ios_char_imbue(basic_ios_char *this, locale *ret, const locale *loc)
3527 TRACE("(%p %p %p)\n", this, ret, loc);
3529 if(this->strbuf) {
3530 basic_streambuf_char_pubimbue(this->strbuf, ret, loc);
3531 locale_dtor(ret);
3534 return ios_base_imbue(&this->base, ret, loc);
3537 /* ?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDDD@Z */
3538 /* ?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADDD@Z */
3539 DEFINE_THISCALL_WRAPPER(basic_ios_char_narrow, 12)
3540 char __thiscall basic_ios_char_narrow(basic_ios_char *this, char ch, char def)
3542 TRACE("(%p %c %c)\n", this, ch, def);
3543 return ctype_char_narrow_ch(ctype_char_use_facet(this->strbuf->loc), ch, def);
3546 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PAV32@@Z */
3547 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PEAV32@@Z */
3548 DEFINE_THISCALL_WRAPPER(basic_ios_char_rdbuf_set, 8)
3549 basic_streambuf_char* __thiscall basic_ios_char_rdbuf_set(basic_ios_char *this, basic_streambuf_char *streambuf)
3551 basic_streambuf_char *ret = this->strbuf;
3553 TRACE("(%p %p)\n", this, streambuf);
3555 this->strbuf = streambuf;
3556 basic_ios_char_clear(this, IOSTATE_goodbit);
3557 return ret;
3560 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ */
3561 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ */
3562 DEFINE_THISCALL_WRAPPER(basic_ios_char_rdbuf_get, 4)
3563 basic_streambuf_char* __thiscall basic_ios_char_rdbuf_get(const basic_ios_char *this)
3565 TRACE("(%p)\n", this);
3566 return this->strbuf;
3569 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z */
3570 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z */
3571 DEFINE_THISCALL_WRAPPER(basic_ios_char_setstate_reraise, 12)
3572 void __thiscall basic_ios_char_setstate_reraise(basic_ios_char *this, IOSB_iostate state, MSVCP_bool reraise)
3574 TRACE("(%p %x %x)\n", this, state, reraise);
3576 if(state != IOSTATE_goodbit)
3577 basic_ios_char_clear_reraise(this, this->base.state | state, reraise);
3580 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXI@Z */
3581 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z */
3582 DEFINE_THISCALL_WRAPPER(basic_ios_char_setstate, 8)
3583 void __thiscall basic_ios_char_setstate(basic_ios_char *this, unsigned int state)
3585 basic_ios_char_setstate_reraise(this, (IOSB_iostate)state, FALSE);
3588 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@PAV32@@Z */
3589 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@PEAV32@@Z */
3590 DEFINE_THISCALL_WRAPPER(basic_ios_char_tie_set, 8)
3591 basic_ostream_char* __thiscall basic_ios_char_tie_set(basic_ios_char *this, basic_ostream_char *ostream)
3593 basic_ostream_char *ret = this->stream;
3595 TRACE("(%p %p)\n", this, ostream);
3597 this->stream = ostream;
3598 return ret;
3601 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ */
3602 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ */
3603 DEFINE_THISCALL_WRAPPER(basic_ios_char_tie_get, 4)
3604 basic_ostream_char* __thiscall basic_ios_char_tie_get(const basic_ios_char *this)
3606 TRACE("(%p)\n", this);
3607 return this->stream;
3610 /* ?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDD@Z */
3611 /* ?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADD@Z */
3612 DEFINE_THISCALL_WRAPPER(basic_ios_char_widen, 8)
3613 char __thiscall basic_ios_char_widen(basic_ios_char *this, char ch)
3615 TRACE("(%p %c)\n", this, ch);
3616 return ctype_char_widen_ch(ctype_char_use_facet(this->strbuf->loc), ch);
3620 /* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@IAE@XZ */
3621 /* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@IEAA@XZ */
3622 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_ctor, 4)
3623 basic_ios_wchar* __thiscall basic_ios_wchar_ctor(basic_ios_wchar *this)
3625 TRACE("(%p)\n", this);
3627 ios_base_ctor(&this->base);
3628 this->base.vtable = &MSVCP_basic_ios_wchar_vtable;
3629 return this;
3632 /* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@IAE@XZ */
3633 /* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@IEAA@XZ */
3634 DEFINE_THISCALL_WRAPPER(basic_ios_short_ctor, 4)
3635 basic_ios_wchar* __thiscall basic_ios_short_ctor(basic_ios_wchar *this)
3637 basic_ios_wchar_ctor(this);
3638 this->base.vtable = &MSVCP_basic_ios_short_vtable;
3639 return this;
3642 /* ?init@?$basic_ios@_WU?$char_traits@_W@std@@@std@@IAEXPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_N@Z */
3643 /* ?init@?$basic_ios@_WU?$char_traits@_W@std@@@std@@IEAAXPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_N@Z */
3644 /* ?init@?$basic_ios@GU?$char_traits@G@std@@@std@@IAEXPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@_N@Z */
3645 /* ?init@?$basic_ios@GU?$char_traits@G@std@@@std@@IEAAXPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@_N@Z */
3646 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_init, 12)
3647 void __thiscall basic_ios_wchar_init(basic_ios_wchar *this, basic_streambuf_wchar *streambuf, MSVCP_bool isstd)
3649 TRACE("(%p %p %x)\n", this, streambuf, isstd);
3650 ios_base_Init(&this->base);
3651 this->strbuf = streambuf;
3652 this->stream = NULL;
3653 this->fillch = ' ';
3655 if(!streambuf)
3656 ios_base_setstate(&this->base, IOSTATE_badbit);
3658 if(isstd)
3659 FIXME("standard streams not handled yet\n");
3662 /* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
3663 /* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
3664 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_ctor_streambuf, 8)
3665 basic_ios_wchar* __thiscall basic_ios_wchar_ctor_streambuf(basic_ios_wchar *this, basic_streambuf_wchar *strbuf)
3667 TRACE("(%p %p)\n", this, strbuf);
3669 basic_ios_wchar_ctor(this);
3670 basic_ios_wchar_init(this, strbuf, FALSE);
3671 return this;
3674 /* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
3675 /* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
3676 DEFINE_THISCALL_WRAPPER(basic_ios_short_ctor_streambuf, 8)
3677 basic_ios_wchar* __thiscall basic_ios_short_ctor_streambuf(basic_ios_wchar *this, basic_streambuf_wchar *strbuf)
3679 basic_ios_wchar_ctor_streambuf(this, strbuf);
3680 this->base.vtable = &MSVCP_basic_ios_short_vtable;
3681 return this;
3684 /* ??1?$basic_ios@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
3685 /* ??1?$basic_ios@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
3686 /* ??1?$basic_ios@GU?$char_traits@G@std@@@std@@UAE@XZ */
3687 /* ??1?$basic_ios@GU?$char_traits@G@std@@@std@@UEAA@XZ */
3688 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_dtor, 4)
3689 void __thiscall basic_ios_wchar_dtor(basic_ios_wchar *this)
3691 TRACE("(%p)\n", this);
3692 ios_base_dtor(&this->base);
3695 DEFINE_THISCALL_WRAPPER(MSVCP_basic_ios_wchar_vector_dtor, 8)
3696 basic_ios_wchar* __thiscall MSVCP_basic_ios_wchar_vector_dtor(basic_ios_wchar *this, unsigned int flags)
3698 TRACE("(%p %x)\n", this, flags);
3699 if(flags & 2) {
3700 /* we have an array, with the number of elements stored before the first object */
3701 int i, *ptr = (int *)this-1;
3703 for(i=*ptr-1; i>=0; i--)
3704 basic_ios_wchar_dtor(this+i);
3705 MSVCRT_operator_delete(ptr);
3706 } else {
3707 basic_ios_wchar_dtor(this);
3708 if(flags & 1)
3709 MSVCRT_operator_delete(this);
3712 return this;
3715 DEFINE_THISCALL_WRAPPER(MSVCP_basic_ios_short_vector_dtor, 8)
3716 basic_ios_wchar* __thiscall MSVCP_basic_ios_short_vector_dtor(basic_ios_wchar *this, unsigned int flags)
3718 return MSVCP_basic_ios_wchar_vector_dtor(this, flags);
3721 /* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z */
3722 /* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z */
3723 /* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXH_N@Z */
3724 /* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXH_N@Z */
3725 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_clear_reraise, 12)
3726 void __thiscall basic_ios_wchar_clear_reraise(basic_ios_wchar *this, IOSB_iostate state, MSVCP_bool reraise)
3728 TRACE("(%p %x %x)\n", this, state, reraise);
3729 ios_base_clear_reraise(&this->base, state | (this->strbuf ? IOSTATE_goodbit : IOSTATE_badbit), reraise);
3732 /* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXI@Z */
3733 /* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXI@Z */
3734 /* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXI@Z */
3735 /* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXI@Z */
3736 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_clear, 8)
3737 void __thiscall basic_ios_wchar_clear(basic_ios_wchar *this, unsigned int state)
3739 basic_ios_wchar_clear_reraise(this, (IOSB_iostate)state, FALSE);
3742 /* ?copyfmt@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEAAV12@ABV12@@Z */
3743 /* ?copyfmt@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEBV12@@Z */
3744 /* ?copyfmt@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEAAV12@ABV12@@Z */
3745 /* ?copyfmt@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEBV12@@Z */
3746 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_copyfmt, 8)
3747 basic_ios_wchar* __thiscall basic_ios_wchar_copyfmt(basic_ios_wchar *this, basic_ios_wchar *copy)
3749 TRACE("(%p %p)\n", this, copy);
3750 if(this == copy)
3751 return this;
3753 this->stream = copy->stream;
3754 this->fillch = copy->fillch;
3755 ios_base_copyfmt(&this->base, &copy->base);
3756 return this;
3759 /* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE_W_W@Z */
3760 /* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA_W_W@Z */
3761 /* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEGG@Z */
3762 /* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAGG@Z */
3763 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_fill_set, 8)
3764 wchar_t __thiscall basic_ios_wchar_fill_set(basic_ios_wchar *this, wchar_t fill)
3766 wchar_t ret = this->fillch;
3768 TRACE("(%p %c)\n", this, fill);
3770 this->fillch = fill;
3771 return ret;
3774 /* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBE_WXZ */
3775 /* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WXZ */
3776 /* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEGXZ */
3777 /* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAGXZ */
3778 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_fill_get, 4)
3779 wchar_t __thiscall basic_ios_wchar_fill_get(basic_ios_wchar *this)
3781 TRACE("(%p)\n", this);
3782 return this->fillch;
3785 /* ?imbue@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
3786 /* ?imbue@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
3787 /* ?imbue@?$basic_ios@GU?$char_traits@G@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
3788 /* ?imbue@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
3789 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_imbue, 12)
3790 locale *__thiscall basic_ios_wchar_imbue(basic_ios_wchar *this, locale *ret, const locale *loc)
3792 TRACE("(%p %p %p)\n", this, ret, loc);
3794 if(this->strbuf)
3795 return basic_streambuf_wchar_pubimbue(this->strbuf, ret, loc);
3797 locale_copy_ctor(ret, loc);
3798 return ret;
3801 /* ?narrow@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBED_WD@Z */
3802 /* ?narrow@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAD_WD@Z */
3803 /* ?narrow@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEDGD@Z */
3804 /* ?narrow@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBADGD@Z */
3805 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_narrow, 12)
3806 char __thiscall basic_ios_wchar_narrow(basic_ios_wchar *this, wchar_t ch, char def)
3808 TRACE("(%p %c %c)\n", this, ch, def);
3809 return ctype_wchar_narrow_ch(ctype_wchar_use_facet(this->strbuf->loc), ch, def);
3812 /* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PAV32@@Z */
3813 /* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PEAV32@@Z */
3814 /* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PAV32@@Z */
3815 /* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PEAV32@@Z */
3816 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_rdbuf_set, 8)
3817 basic_streambuf_wchar* __thiscall basic_ios_wchar_rdbuf_set(basic_ios_wchar *this, basic_streambuf_wchar *streambuf)
3819 basic_streambuf_wchar *ret = this->strbuf;
3821 TRACE("(%p %p)\n", this, streambuf);
3823 this->strbuf = streambuf;
3824 basic_ios_wchar_clear(this, IOSTATE_goodbit);
3825 return ret;
3828 /* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ */
3829 /* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ */
3830 /* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@XZ */
3831 /* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@XZ */
3832 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_rdbuf_get, 4)
3833 basic_streambuf_wchar* __thiscall basic_ios_wchar_rdbuf_get(const basic_ios_wchar *this)
3835 TRACE("(%p)\n", this);
3836 return this->strbuf;
3839 /* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z */
3840 /* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z */
3841 /* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXH_N@Z */
3842 /* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXH_N@Z */
3843 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_setstate_reraise, 12)
3844 void __thiscall basic_ios_wchar_setstate_reraise(basic_ios_wchar *this, IOSB_iostate state, MSVCP_bool reraise)
3846 TRACE("(%p %x %x)\n", this, state, reraise);
3848 if(state != IOSTATE_goodbit)
3849 basic_ios_wchar_clear_reraise(this, this->base.state | state, reraise);
3852 /* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXI@Z */
3853 /* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXI@Z */
3854 /* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXI@Z */
3855 /* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXI@Z */
3856 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_setstate, 8)
3857 void __thiscall basic_ios_wchar_setstate(basic_ios_wchar *this, IOSB_iostate state)
3859 basic_ios_wchar_setstate_reraise(this, state, FALSE);
3862 /* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEPAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@PAV32@@Z */
3863 /* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@PEAV32@@Z */
3864 /* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEPAV?$basic_ostream@GU?$char_traits@G@std@@@2@PAV32@@Z */
3865 /* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAPEAV?$basic_ostream@GU?$char_traits@G@std@@@2@PEAV32@@Z */
3866 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_tie_set, 8)
3867 basic_ostream_wchar* __thiscall basic_ios_wchar_tie_set(basic_ios_wchar *this, basic_ostream_wchar *ostream)
3869 basic_ostream_wchar *ret = this->stream;
3871 TRACE("(%p %p)\n", this, ostream);
3873 this->stream = ostream;
3874 return ret;
3877 /* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ */
3878 /* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ */
3879 /* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_ostream@GU?$char_traits@G@std@@@2@XZ */
3880 /* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_ostream@GU?$char_traits@G@std@@@2@XZ */
3881 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_tie_get, 4)
3882 basic_ostream_wchar* __thiscall basic_ios_wchar_tie_get(const basic_ios_wchar *this)
3884 TRACE("(%p)\n", this);
3885 return this->stream;
3888 /* ?widen@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBE_WD@Z */
3889 /* ?widen@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WD@Z */
3890 /* ?widen@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEGD@Z */
3891 /* ?widen@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAGD@Z */
3892 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_widen, 8)
3893 wchar_t __thiscall basic_ios_wchar_widen(basic_ios_wchar *this, char ch)
3895 TRACE("(%p %c)\n", this, ch);
3896 return ctype_wchar_widen_ch(ctype_wchar_use_facet(this->strbuf->loc), ch);
3899 /* Caution: basic_ostream uses virtual inheritance.
3900 * All constructors have additional parameter that says if base class should be initialized.
3901 * Base class needs to be accessed using vbtable.
3903 static inline basic_ios_char* basic_ostream_char_get_basic_ios(basic_ostream_char *this)
3905 return (basic_ios_char*)((char*)this+this->vbtable[1]);
3908 /* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */
3909 /* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */
3910 DEFINE_THISCALL_WRAPPER(basic_ostream_char_ctor, 16)
3911 basic_ostream_char* __thiscall basic_ostream_char_ctor(basic_ostream_char *this,
3912 basic_streambuf_char *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init)
3914 basic_ios_char *base;
3916 TRACE("(%p %p %d %d)\n", this, strbuf, isstd, virt_init);
3918 if(virt_init) {
3919 this->vbtable = basic_ostream_char_vbtable;
3920 base = basic_ostream_char_get_basic_ios(this);
3921 basic_ios_char_ctor(base);
3922 }else {
3923 base = basic_ostream_char_get_basic_ios(this);
3926 base->base.vtable = &MSVCP_basic_ostream_char_vtable;
3927 basic_ios_char_init(base, strbuf, isstd);
3928 return this;
3931 /* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@_N@Z */
3932 /* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z */
3933 DEFINE_THISCALL_WRAPPER(basic_ostream_char_ctor_uninitialized, 16)
3934 basic_ostream_char* __thiscall basic_ostream_char_ctor_uninitialized(basic_ostream_char *this,
3935 int uninitialized, MSVCP_bool addstd, MSVCP_bool virt_init)
3937 basic_ios_char *base;
3939 TRACE("(%p %d %x)\n", this, uninitialized, addstd);
3941 if(virt_init) {
3942 this->vbtable = basic_ostream_char_vbtable;
3943 base = basic_ostream_char_get_basic_ios(this);
3944 basic_ios_char_ctor(base);
3945 }else {
3946 base = basic_ostream_char_get_basic_ios(this);
3949 base->base.vtable = &MSVCP_basic_ostream_char_vtable;
3950 if(addstd)
3951 ios_base_Addstd(&base->base);
3952 return this;
3955 /* ??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UAE@XZ */
3956 /* ??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UEAA@XZ */
3957 DEFINE_THISCALL_WRAPPER(basic_ostream_char_dtor, 4)
3958 void __thiscall basic_ostream_char_dtor(basic_ostream_char *this)
3960 /* don't destroy virtual base here */
3961 TRACE("(%p)\n", this);
3964 /* ??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
3965 /* ??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
3966 DEFINE_THISCALL_WRAPPER(basic_ostream_char_vbase_dtor, 4)
3967 void __thiscall basic_ostream_char_vbase_dtor(basic_ostream_char *this)
3969 TRACE("(%p)\n", this);
3970 basic_ostream_char_dtor(this);
3971 basic_ios_char_dtor(basic_ostream_char_get_basic_ios(this));
3974 DEFINE_THISCALL_WRAPPER(MSVCP_basic_ostream_char_vector_dtor, 8)
3975 basic_ostream_char* __thiscall MSVCP_basic_ostream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
3977 basic_ostream_char *this = (basic_ostream_char *)((char*)base - basic_ostream_char_vbtable[1] + basic_ostream_char_vbtable[0]);
3979 TRACE("(%p %x)\n", this, flags);
3981 if(flags & 2) {
3982 /* we have an array, with the number of elements stored before the first object */
3983 int i, *ptr = (int *)this-1;
3985 for(i=*ptr-1; i>=0; i--)
3986 basic_ostream_char_vbase_dtor(this+i);
3987 MSVCRT_operator_delete(ptr);
3988 } else {
3989 basic_ostream_char_vbase_dtor(this);
3990 if(flags & 1)
3991 MSVCRT_operator_delete(this);
3994 return this;
3997 /* ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ */
3998 /* ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ */
3999 DEFINE_THISCALL_WRAPPER(basic_ostream_char_flush, 4)
4000 basic_ostream_char* __thiscall basic_ostream_char_flush(basic_ostream_char *this)
4002 /* this function is not matching C++ specification */
4003 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4005 TRACE("(%p)\n", this);
4007 if(basic_ios_char_rdbuf_get(base) && ios_base_good(&base->base)
4008 && basic_streambuf_char_pubsync(basic_ios_char_rdbuf_get(base))==-1)
4009 basic_ios_char_setstate(base, IOSTATE_badbit);
4010 return this;
4013 /* ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
4014 /* ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
4015 DEFINE_THISCALL_WRAPPER(basic_ostream_char__Osfx, 4)
4016 void __thiscall basic_ostream_char__Osfx(basic_ostream_char *this)
4018 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4020 TRACE("(%p)\n", this);
4022 if(base->base.fmtfl & FMTFLAG_unitbuf)
4023 basic_ostream_char_flush(this);
4026 /* ?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
4027 /* ?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
4028 DEFINE_THISCALL_WRAPPER(basic_ostream_char_osfx, 4)
4029 void __thiscall basic_ostream_char_osfx(basic_ostream_char *this)
4031 TRACE("(%p)\n", this);
4032 basic_ostream_char__Osfx(this);
4035 static BOOL basic_ostream_char_sentry_create(basic_ostream_char *ostr)
4037 basic_ios_char *base = basic_ostream_char_get_basic_ios(ostr);
4039 if(basic_ios_char_rdbuf_get(base))
4040 basic_streambuf_char__Lock(base->strbuf);
4042 if(ios_base_good(&base->base) && base->stream)
4043 basic_ostream_char_flush(base->stream);
4045 return ios_base_good(&base->base);
4048 static void basic_ostream_char_sentry_destroy(basic_ostream_char *ostr)
4050 basic_ios_char *base = basic_ostream_char_get_basic_ios(ostr);
4052 if(ios_base_good(&base->base) && !__uncaught_exception())
4053 basic_ostream_char_osfx(ostr);
4055 if(basic_ios_char_rdbuf_get(base))
4056 basic_streambuf_char__Unlock(base->strbuf);
4059 /* ?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE_NXZ */
4060 /* ?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA_NXZ */
4061 DEFINE_THISCALL_WRAPPER(basic_ostream_char_opfx, 4)
4062 MSVCP_bool __thiscall basic_ostream_char_opfx(basic_ostream_char *this)
4064 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4066 TRACE("(%p)\n", this);
4068 if(ios_base_good(&base->base) && base->stream)
4069 basic_ostream_char_flush(base->stream);
4070 return ios_base_good(&base->base);
4073 /* ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z */
4074 /* ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z */
4075 DEFINE_THISCALL_WRAPPER(basic_ostream_char_put, 8)
4076 basic_ostream_char* __thiscall basic_ostream_char_put(basic_ostream_char *this, char ch)
4078 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4080 TRACE("(%p %c)\n", this, ch);
4082 if(!basic_ostream_char_sentry_create(this)
4083 || basic_streambuf_char_sputc(base->strbuf, ch)==EOF) {
4084 basic_ostream_char_sentry_destroy(this);
4085 basic_ios_char_setstate(base, IOSTATE_badbit);
4086 return this;
4089 basic_ostream_char_sentry_destroy(this);
4090 return this;
4093 /* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@JH@Z */
4094 /* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z */
4095 DEFINE_THISCALL_WRAPPER(basic_ostream_char_seekp, 12)
4096 basic_ostream_char* __thiscall basic_ostream_char_seekp(basic_ostream_char *this, streamoff off, int way)
4098 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4100 TRACE("(%p %ld %d)\n", this, off, way);
4102 if(!ios_base_fail(&base->base)) {
4103 fpos_int seek;
4105 basic_streambuf_char_pubseekoff(basic_ios_char_rdbuf_get(base),
4106 &seek, off, way, OPENMODE_out);
4107 if(seek.off==0 && seek.pos==-1 && seek.state==0)
4108 basic_ios_char_setstate(base, IOSTATE_failbit);
4110 return this;
4113 /* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
4114 /* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
4115 DEFINE_THISCALL_WRAPPER(basic_ostream_char_seekp_fpos, 28)
4116 basic_ostream_char* __thiscall basic_ostream_char_seekp_fpos(basic_ostream_char *this, fpos_int pos)
4118 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4120 TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos));
4122 if(!ios_base_fail(&base->base)) {
4123 fpos_int seek;
4125 basic_streambuf_char_pubseekpos(basic_ios_char_rdbuf_get(base),
4126 &seek, pos, OPENMODE_out);
4127 if(seek.off==0 && seek.pos==-1 && seek.state==0)
4128 basic_ios_char_setstate(base, IOSTATE_failbit);
4130 return this;
4133 /* ?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@XZ */
4134 /* ?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
4135 DEFINE_THISCALL_WRAPPER(basic_ostream_char_tellp, 8)
4136 fpos_int* __thiscall basic_ostream_char_tellp(basic_ostream_char *this, fpos_int *ret)
4138 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4140 TRACE("(%p)\n", this);
4142 if(!ios_base_fail(&base->base)) {
4143 basic_streambuf_char_pubseekoff(basic_ios_char_rdbuf_get(base),
4144 ret, 0, SEEKDIR_cur, OPENMODE_out);
4145 }else {
4146 ret->off = 0;
4147 ret->pos = -1;
4148 ret->state = 0;
4150 return ret;
4153 /* ?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@PBDH@Z */
4154 /* ?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEBD_J@Z */
4155 DEFINE_THISCALL_WRAPPER(basic_ostream_char_write, 12)
4156 basic_ostream_char* __thiscall basic_ostream_char_write(basic_ostream_char *this, const char *str, streamsize count)
4158 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4160 TRACE("(%p %s %ld)\n", this, debugstr_a(str), count);
4162 if(!basic_ostream_char_sentry_create(this)
4163 || basic_streambuf_char_sputn(base->strbuf, str, count)!=count) {
4164 basic_ostream_char_sentry_destroy(this);
4165 basic_ios_char_setstate(base, IOSTATE_badbit);
4166 return this;
4169 basic_ostream_char_sentry_destroy(this);
4170 return this;
4173 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@F@Z */
4174 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@F@Z */
4175 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_short, 8)
4176 basic_ostream_char* __thiscall basic_ostream_char_print_short(basic_ostream_char *this, short val)
4178 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4179 int state = IOSTATE_goodbit;
4181 TRACE("(%p %d)\n", this, val);
4183 if(basic_ostream_char_sentry_create(this)) {
4184 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4185 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4186 ostreambuf_iterator_char dest = {0, strbuf};
4188 num_put_char_put_long(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base),
4189 (ios_base_flags_get(&base->base) & FMTFLAG_basefield & (FMTFLAG_oct | FMTFLAG_hex))
4190 ? (LONG)((unsigned short)val) : (LONG)val);
4192 basic_ostream_char_sentry_destroy(this);
4194 basic_ios_char_setstate(base, state);
4195 return this;
4198 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@G@Z */
4199 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@G@Z */
4200 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ushort, 8)
4201 basic_ostream_char* __thiscall basic_ostream_char_print_ushort(basic_ostream_char *this, unsigned short val)
4203 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4204 int state = IOSTATE_goodbit;
4206 TRACE("(%p %u)\n", this, val);
4208 if(basic_ostream_char_sentry_create(this)) {
4209 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4210 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4211 ostreambuf_iterator_char dest = {0, strbuf};
4213 num_put_char_put_ulong(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4215 basic_ostream_char_sentry_destroy(this);
4217 basic_ios_char_setstate(base, state);
4218 return this;
4221 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z */
4222 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@H@Z */
4223 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@J@Z */
4224 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@J@Z */
4225 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_int, 8)
4226 basic_ostream_char* __thiscall basic_ostream_char_print_int(basic_ostream_char *this, int val)
4228 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4229 int state = IOSTATE_goodbit;
4231 TRACE("(%p %d)\n", this, val);
4233 if(basic_ostream_char_sentry_create(this)) {
4234 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4235 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4236 ostreambuf_iterator_char dest = {0, strbuf};
4238 num_put_char_put_long(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4240 basic_ostream_char_sentry_destroy(this);
4242 basic_ios_char_setstate(base, state);
4243 return this;
4246 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@I@Z */
4247 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@I@Z */
4248 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@K@Z */
4249 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@K@Z */
4250 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_uint, 8)
4251 basic_ostream_char* __thiscall basic_ostream_char_print_uint(basic_ostream_char *this, unsigned int val)
4253 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4254 int state = IOSTATE_goodbit;
4256 TRACE("(%p %u)\n", this, val);
4258 if(basic_ostream_char_sentry_create(this)) {
4259 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4260 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4261 ostreambuf_iterator_char dest = {0, strbuf};
4263 num_put_char_put_ulong(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4265 basic_ostream_char_sentry_destroy(this);
4267 basic_ios_char_setstate(base, state);
4268 return this;
4271 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@M@Z */
4272 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@M@Z */
4273 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_float, 8)
4274 basic_ostream_char* __thiscall basic_ostream_char_print_float(basic_ostream_char *this, float val)
4276 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4277 int state = IOSTATE_goodbit;
4279 TRACE("(%p %f)\n", this, val);
4281 if(basic_ostream_char_sentry_create(this)) {
4282 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4283 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4284 ostreambuf_iterator_char dest = {0, strbuf};
4286 num_put_char_put_double(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4288 basic_ostream_char_sentry_destroy(this);
4290 basic_ios_char_setstate(base, state);
4291 return this;
4294 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@N@Z */
4295 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z */
4296 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_double, 12)
4297 basic_ostream_char* __thiscall basic_ostream_char_print_double(basic_ostream_char *this, double val)
4299 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4300 int state = IOSTATE_goodbit;
4302 TRACE("(%p %lf)\n", this, val);
4304 if(basic_ostream_char_sentry_create(this)) {
4305 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4306 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4307 ostreambuf_iterator_char dest = {0, strbuf};
4309 num_put_char_put_double(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4311 basic_ostream_char_sentry_destroy(this);
4313 basic_ios_char_setstate(base, state);
4314 return this;
4317 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@O@Z */
4318 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@O@Z */
4319 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ldouble, 12)
4320 basic_ostream_char* __thiscall basic_ostream_char_print_ldouble(basic_ostream_char *this, double val)
4322 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4323 int state = IOSTATE_goodbit;
4325 TRACE("(%p %lf)\n", this, val);
4327 if(basic_ostream_char_sentry_create(this)) {
4328 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4329 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4330 ostreambuf_iterator_char dest = {0, strbuf};
4332 num_put_char_put_ldouble(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4334 basic_ostream_char_sentry_destroy(this);
4336 basic_ios_char_setstate(base, state);
4337 return this;
4340 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
4341 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
4342 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_streambuf, 8)
4343 basic_ostream_char* __thiscall basic_ostream_char_print_streambuf(basic_ostream_char *this, basic_streambuf_char *val)
4345 FIXME("(%p %p) stub\n", this, val);
4346 return NULL;
4349 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@PBX@Z */
4350 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEBX@Z */
4351 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ptr, 8)
4352 basic_ostream_char* __thiscall basic_ostream_char_print_ptr(basic_ostream_char *this, const void *val)
4354 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4355 int state = IOSTATE_goodbit;
4357 TRACE("(%p %p)\n", this, val);
4359 if(basic_ostream_char_sentry_create(this)) {
4360 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4361 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4362 ostreambuf_iterator_char dest = {0, strbuf};
4364 num_put_char_put_ptr(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4366 basic_ostream_char_sentry_destroy(this);
4368 basic_ios_char_setstate(base, state);
4369 return this;
4372 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_J@Z */
4373 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_J@Z */
4374 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_int64, 12)
4375 basic_ostream_char* __thiscall basic_ostream_char_print_int64(basic_ostream_char *this, __int64 val)
4377 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4378 int state = IOSTATE_goodbit;
4380 TRACE("(%p)\n", this);
4382 if(basic_ostream_char_sentry_create(this)) {
4383 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4384 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4385 ostreambuf_iterator_char dest = {0, strbuf};
4387 num_put_char_put_int64(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4389 basic_ostream_char_sentry_destroy(this);
4391 basic_ios_char_setstate(base, state);
4392 return this;
4395 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_K@Z */
4396 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_K@Z */
4397 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_uint64, 12)
4398 basic_ostream_char* __thiscall basic_ostream_char_print_uint64(basic_ostream_char *this, unsigned __int64 val)
4400 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4401 int state = IOSTATE_goodbit;
4403 TRACE("(%p)\n", this);
4405 if(basic_ostream_char_sentry_create(this)) {
4406 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4407 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4408 ostreambuf_iterator_char dest = {0, strbuf};
4410 num_put_char_put_uint64(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4412 basic_ostream_char_sentry_destroy(this);
4414 basic_ios_char_setstate(base, state);
4415 return this;
4418 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_N@Z */
4419 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_N@Z */
4420 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_bool, 8)
4421 basic_ostream_char* __thiscall basic_ostream_char_print_bool(basic_ostream_char *this, MSVCP_bool val)
4423 basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
4424 int state = IOSTATE_goodbit;
4426 TRACE("(%p %x)\n", this, val);
4428 if(basic_ostream_char_sentry_create(this)) {
4429 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
4430 const num_put *numput = num_put_char_use_facet(strbuf->loc);
4431 ostreambuf_iterator_char dest = {0, strbuf};
4433 num_put_char_put_bool(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
4435 basic_ostream_char_sentry_destroy(this);
4437 basic_ios_char_setstate(base, state);
4438 return this;
4441 /* ?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z */
4442 /* ?endl@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@1@AEAV21@@Z */
4443 basic_ostream_char* __cdecl basic_ostream_char_endl(basic_ostream_char *ostr)
4445 TRACE("(%p)\n", ostr);
4447 basic_ostream_char_put(ostr, '\n');
4448 basic_ostream_char_flush(ostr);
4449 return ostr;
4452 /* $?6DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
4453 /* ??$?6DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
4454 basic_ostream_char* __cdecl basic_ostream_char_print_bstr(basic_ostream_char *ostr, const basic_string_char *str)
4456 basic_ios_char *base = basic_ostream_char_get_basic_ios(ostr);
4457 IOSB_iostate state = IOSTATE_goodbit;
4459 TRACE("(%p %p)\n", ostr, str);
4461 if(basic_ostream_char_sentry_create(ostr)) {
4462 MSVCP_size_t len = MSVCP_basic_string_char_length(str);
4463 streamsize pad = (base->base.wide>len ? base->base.wide-len : 0);
4465 if((base->base.fmtfl & FMTFLAG_adjustfield) != FMTFLAG_left) {
4466 for(; pad!=0; pad--) {
4467 if(basic_streambuf_char_sputc(base->strbuf, base->fillch) == EOF) {
4468 state = IOSTATE_badbit;
4469 break;
4474 if(state == IOSTATE_goodbit) {
4475 if(basic_streambuf_char_sputn(base->strbuf, MSVCP_basic_string_char_c_str(str), len) != len)
4476 state = IOSTATE_badbit;
4479 for(; pad!=0; pad--) {
4480 if(basic_streambuf_char_sputc(base->strbuf, base->fillch) == EOF) {
4481 state = IOSTATE_badbit;
4482 break;
4486 base->base.wide = 0;
4487 }else {
4488 state = IOSTATE_badbit;
4490 basic_ostream_char_sentry_destroy(ostr);
4492 basic_ios_char_setstate(base, state);
4493 return ostr;
4496 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */
4497 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */
4498 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_func, 8)
4499 basic_ostream_char* __thiscall basic_ostream_char_print_func(basic_ostream_char *this,
4500 basic_ostream_char* (__cdecl *pfunc)(basic_ostream_char*))
4502 TRACE("(%p %p)\n", this, pfunc);
4503 pfunc(this);
4504 return this;
4507 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@DU?$char_traits@D@std@@@1@AAV21@@Z@Z */
4508 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@DU?$char_traits@D@std@@@1@AEAV21@@Z@Z */
4509 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_func_basic_ios, 8)
4510 basic_ostream_char* __thiscall basic_ostream_char_print_func_basic_ios(basic_ostream_char *this,
4511 basic_ios_char* (__cdecl *pfunc)(basic_ios_char*))
4513 TRACE("(%p %p)\n", this, pfunc);
4514 pfunc(basic_ostream_char_get_basic_ios(this));
4515 return this;
4518 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */
4519 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */
4520 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_func_ios_base, 8)
4521 basic_ostream_char* __thiscall basic_ostream_char_print_func_ios_base(
4522 basic_ostream_char *this, ios_base* (__cdecl *pfunc)(ios_base*))
4524 TRACE("(%p %p)\n", this, pfunc);
4525 pfunc(&basic_ostream_char_get_basic_ios(this)->base);
4526 return this;
4529 /* Caution: basic_ostream uses virtual inheritance. */
4530 static inline basic_ios_wchar* basic_ostream_wchar_get_basic_ios(basic_ostream_wchar *this)
4532 return (basic_ios_wchar*)((char*)this+this->vbtable[1]);
4535 /* ??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */
4536 /* ??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */
4537 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_ctor, 16)
4538 basic_ostream_wchar* __thiscall basic_ostream_wchar_ctor(basic_ostream_wchar *this,
4539 basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init)
4541 basic_ios_wchar *base;
4543 TRACE("(%p %p %d %d)\n", this, strbuf, isstd, virt_init);
4545 if(virt_init) {
4546 this->vbtable = basic_ostream_wchar_vbtable;
4547 base = basic_ostream_wchar_get_basic_ios(this);
4548 basic_ios_wchar_ctor(base);
4549 }else {
4550 base = basic_ostream_wchar_get_basic_ios(this);
4553 base->base.vtable = &MSVCP_basic_ostream_wchar_vtable;
4554 basic_ios_wchar_init(base, strbuf, isstd);
4555 return this;
4558 /* ??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE@W4_Uninitialized@1@_N@Z */
4559 /* ??0?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA@W4_Uninitialized@1@_N@Z */
4560 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_ctor_uninitialized, 16)
4561 basic_ostream_wchar* __thiscall basic_ostream_wchar_ctor_uninitialized(basic_ostream_wchar *this,
4562 int uninitialized, MSVCP_bool addstd, MSVCP_bool virt_init)
4564 basic_ios_wchar *base;
4566 TRACE("(%p %d %x)\n", this, uninitialized, addstd);
4568 if(virt_init) {
4569 this->vbtable = basic_ostream_wchar_vbtable;
4570 base = basic_ostream_wchar_get_basic_ios(this);
4571 basic_ios_wchar_ctor(base);
4572 }else {
4573 base = basic_ostream_wchar_get_basic_ios(this);
4576 base->base.vtable = &MSVCP_basic_ostream_wchar_vtable;
4577 if(addstd)
4578 ios_base_Addstd(&base->base);
4579 return this;
4582 /* ??1?$basic_ostream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
4583 /* ??1?$basic_ostream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
4584 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_dtor, 4)
4585 void __thiscall basic_ostream_wchar_dtor(basic_ostream_wchar *this)
4587 /* don't destroy virtual base here */
4588 TRACE("(%p)\n", this);
4591 /* ??_D?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
4592 /* ??_D?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
4593 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_vbase_dtor, 4)
4594 void __thiscall basic_ostream_wchar_vbase_dtor(basic_ostream_wchar *this)
4596 TRACE("(%p)\n", this);
4597 basic_ostream_wchar_dtor(this);
4598 basic_ios_wchar_dtor(basic_ostream_wchar_get_basic_ios(this));
4601 DEFINE_THISCALL_WRAPPER(MSVCP_basic_ostream_wchar_vector_dtor, 8)
4602 basic_ostream_wchar* __thiscall MSVCP_basic_ostream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags)
4604 basic_ostream_wchar *this = (basic_ostream_wchar *)((char*)base - basic_ostream_wchar_vbtable[1] + basic_ostream_wchar_vbtable[0]);
4606 TRACE("(%p %x)\n", this, flags);
4608 if(flags & 2) {
4609 /* we have an array, with the number of elements stored before the first object */
4610 int i, *ptr = (int *)this-1;
4612 for(i=*ptr-1; i>=0; i--)
4613 basic_ostream_wchar_vbase_dtor(this+i);
4614 MSVCRT_operator_delete(ptr);
4615 } else {
4616 basic_ostream_wchar_vbase_dtor(this);
4617 if(flags & 1)
4618 MSVCRT_operator_delete(this);
4621 return this;
4624 /* ?flush@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@XZ */
4625 /* ?flush@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@XZ */
4626 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_flush, 4)
4627 basic_ostream_wchar* __thiscall basic_ostream_wchar_flush(basic_ostream_wchar *this)
4629 /* this function is not matching C++ specification */
4630 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4632 TRACE("(%p)\n", this);
4634 if(basic_ios_wchar_rdbuf_get(base) && ios_base_good(&base->base)
4635 && basic_streambuf_wchar_pubsync(basic_ios_wchar_rdbuf_get(base))==-1)
4636 basic_ios_wchar_setstate(base, IOSTATE_badbit);
4637 return this;
4640 /* ?_Osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
4641 /* ?_Osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
4642 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar__Osfx, 4)
4643 void __thiscall basic_ostream_wchar__Osfx(basic_ostream_wchar *this)
4645 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4647 TRACE("(%p)\n", this);
4649 if(base->base.fmtfl & FMTFLAG_unitbuf)
4650 basic_ostream_wchar_flush(this);
4653 /* ?osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
4654 /* ?osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
4655 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_osfx, 4)
4656 void __thiscall basic_ostream_wchar_osfx(basic_ostream_wchar *this)
4658 TRACE("(%p)\n", this);
4659 basic_ostream_wchar__Osfx(this);
4662 static BOOL basic_ostream_wchar_sentry_create(basic_ostream_wchar *ostr)
4664 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(ostr);
4666 if(basic_ios_wchar_rdbuf_get(base))
4667 basic_streambuf_wchar__Lock(base->strbuf);
4669 if(ios_base_good(&base->base) && base->stream)
4670 basic_ostream_wchar_flush(base->stream);
4672 return ios_base_good(&base->base);
4675 static void basic_ostream_wchar_sentry_destroy(basic_ostream_wchar *ostr)
4677 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(ostr);
4679 if(ios_base_good(&base->base) && !__uncaught_exception())
4680 basic_ostream_wchar_osfx(ostr);
4682 if(basic_ios_wchar_rdbuf_get(base))
4683 basic_streambuf_wchar__Unlock(base->strbuf);
4686 /* ?opfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE_NXZ */
4687 /* ?opfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA_NXZ */
4688 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_opfx, 4)
4689 MSVCP_bool __thiscall basic_ostream_wchar_opfx(basic_ostream_wchar *this)
4691 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4693 TRACE("(%p)\n", this);
4695 if(ios_base_good(&base->base) && base->stream)
4696 basic_ostream_wchar_flush(base->stream);
4697 return ios_base_good(&base->base);
4700 /* ?put@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_W@Z */
4701 /* ?put@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_W@Z */
4702 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_put, 8)
4703 basic_ostream_wchar* __thiscall basic_ostream_wchar_put(basic_ostream_wchar *this, wchar_t ch)
4705 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4707 TRACE("(%p %c)\n", this, ch);
4709 if(!basic_ostream_wchar_sentry_create(this)
4710 || basic_streambuf_wchar_sputc(base->strbuf, ch)==WEOF) {
4711 basic_ostream_wchar_sentry_destroy(this);
4712 basic_ios_wchar_setstate(base, IOSTATE_badbit);
4713 return this;
4716 basic_ostream_wchar_sentry_destroy(this);
4717 return this;
4720 /* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@JH@Z */
4721 /* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JH@Z */
4722 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_seekp, 12)
4723 basic_ostream_wchar* __thiscall basic_ostream_wchar_seekp(basic_ostream_wchar *this, streamoff off, int way)
4725 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4727 TRACE("(%p %ld %d)\n", this, off, way);
4729 if(!ios_base_fail(&base->base)) {
4730 fpos_int seek;
4732 basic_streambuf_wchar_pubseekoff(basic_ios_wchar_rdbuf_get(base),
4733 &seek, off, way, OPENMODE_out);
4734 if(seek.off==0 && seek.pos==-1 && seek.state==0)
4735 basic_ios_wchar_setstate(base, IOSTATE_failbit);
4737 return this;
4740 /* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
4741 /* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
4742 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_seekp_fpos, 28)
4743 basic_ostream_wchar* __thiscall basic_ostream_wchar_seekp_fpos(basic_ostream_wchar *this, fpos_int pos)
4745 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4747 TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos));
4749 if(!ios_base_fail(&base->base)) {
4750 fpos_int seek;
4752 basic_streambuf_wchar_pubseekpos(basic_ios_wchar_rdbuf_get(base),
4753 &seek, pos, OPENMODE_out);
4754 if(seek.off==0 && seek.pos==-1 && seek.state==0)
4755 basic_ios_wchar_setstate(base, IOSTATE_failbit);
4757 return this;
4760 /* ?tellp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@XZ */
4761 /* ?tellp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
4762 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_tellp, 8)
4763 fpos_int* __thiscall basic_ostream_wchar_tellp(basic_ostream_wchar *this, fpos_int *ret)
4765 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4767 TRACE("(%p)\n", this);
4769 if(!ios_base_fail(&base->base)) {
4770 basic_streambuf_wchar_pubseekoff(basic_ios_wchar_rdbuf_get(base),
4771 ret, 0, SEEKDIR_cur, OPENMODE_out);
4772 }else {
4773 ret->off = 0;
4774 ret->pos = -1;
4775 ret->state = 0;
4777 return ret;
4780 /* ?write@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PB_WH@Z */
4781 /* ?write@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEB_W_J@Z */
4782 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_write, 12)
4783 basic_ostream_wchar* __thiscall basic_ostream_wchar_write(basic_ostream_wchar *this, const wchar_t *str, streamsize count)
4785 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4787 TRACE("(%p %s %ld)\n", this, debugstr_w(str), count);
4789 if(!basic_ostream_wchar_sentry_create(this)
4790 || basic_streambuf_wchar_sputn(base->strbuf, str, count)!=count) {
4791 basic_ostream_wchar_sentry_destroy(this);
4792 basic_ios_wchar_setstate(base, IOSTATE_badbit);
4793 return this;
4796 basic_ostream_wchar_sentry_destroy(this);
4797 return this;
4800 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@F@Z */
4801 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@F@Z */
4802 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_short, 8)
4803 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_short(basic_ostream_wchar *this, short val)
4805 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4806 int state = IOSTATE_goodbit;
4808 TRACE("(%p %d)\n", this, val);
4810 if(basic_ostream_wchar_sentry_create(this)) {
4811 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
4812 const num_put *numput = num_put_wchar_use_facet(strbuf->loc);
4813 ostreambuf_iterator_wchar dest = {0, strbuf};
4815 num_put_wchar_put_long(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base),
4816 (ios_base_flags_get(&base->base) & FMTFLAG_basefield & (FMTFLAG_oct | FMTFLAG_hex))
4817 ? (LONG)((unsigned short)val) : (LONG)val);
4819 basic_ostream_wchar_sentry_destroy(this);
4821 basic_ios_wchar_setstate(base, state);
4822 return this;
4825 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@G@Z */
4826 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@G@Z */
4827 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_ushort, 8)
4828 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_ushort(basic_ostream_wchar *this, unsigned short val)
4830 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4831 int state = IOSTATE_goodbit;
4833 TRACE("(%p %u)\n", this, val);
4835 if(basic_ostream_wchar_sentry_create(this)) {
4836 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
4837 const num_put *numput = num_put_wchar_use_facet(strbuf->loc);
4838 ostreambuf_iterator_wchar dest = {0, strbuf};
4840 num_put_wchar_put_ulong(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
4842 basic_ostream_wchar_sentry_destroy(this);
4844 basic_ios_wchar_setstate(base, state);
4845 return this;
4848 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@H@Z */
4849 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@H@Z */
4850 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@J@Z */
4851 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@J@Z */
4852 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_int, 8)
4853 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_int(basic_ostream_wchar *this, int val)
4855 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4856 int state = IOSTATE_goodbit;
4858 TRACE("(%p %d)\n", this, val);
4860 if(basic_ostream_wchar_sentry_create(this)) {
4861 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
4862 const num_put *numput = num_put_wchar_use_facet(strbuf->loc);
4863 ostreambuf_iterator_wchar dest = {0, strbuf};
4865 num_put_wchar_put_long(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
4867 basic_ostream_wchar_sentry_destroy(this);
4869 basic_ios_wchar_setstate(base, state);
4870 return this;
4873 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@I@Z */
4874 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@I@Z */
4875 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@K@Z */
4876 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@K@Z */
4877 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_uint, 8)
4878 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_uint(basic_ostream_wchar *this, unsigned int val)
4880 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4881 int state = IOSTATE_goodbit;
4883 TRACE("(%p %u)\n", this, val);
4885 if(basic_ostream_wchar_sentry_create(this)) {
4886 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
4887 const num_put *numput = num_put_wchar_use_facet(strbuf->loc);
4888 ostreambuf_iterator_wchar dest = {0, strbuf};
4890 num_put_wchar_put_ulong(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
4892 basic_ostream_wchar_sentry_destroy(this);
4894 basic_ios_wchar_setstate(base, state);
4895 return this;
4898 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@M@Z */
4899 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@M@Z */
4900 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_float, 8)
4901 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_float(basic_ostream_wchar *this, float val)
4903 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4904 int state = IOSTATE_goodbit;
4906 TRACE("(%p %f)\n", this, val);
4908 if(basic_ostream_wchar_sentry_create(this)) {
4909 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
4910 const num_put *numput = num_put_wchar_use_facet(strbuf->loc);
4911 ostreambuf_iterator_wchar dest = {0, strbuf};
4913 num_put_wchar_put_double(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
4915 basic_ostream_wchar_sentry_destroy(this);
4917 basic_ios_wchar_setstate(base, state);
4918 return this;
4921 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@N@Z */
4922 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@N@Z */
4923 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_double, 12)
4924 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_double(basic_ostream_wchar *this, double val)
4926 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4927 int state = IOSTATE_goodbit;
4929 TRACE("(%p %lf)\n", this, val);
4931 if(basic_ostream_wchar_sentry_create(this)) {
4932 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
4933 const num_put *numput = num_put_wchar_use_facet(strbuf->loc);
4934 ostreambuf_iterator_wchar dest = {0, strbuf};
4936 num_put_wchar_put_double(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
4938 basic_ostream_wchar_sentry_destroy(this);
4940 basic_ios_wchar_setstate(base, state);
4941 return this;
4944 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@O@Z */
4945 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@O@Z */
4946 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_ldouble, 12)
4947 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_ldouble(basic_ostream_wchar *this, double val)
4949 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4950 int state = IOSTATE_goodbit;
4952 TRACE("(%p %lf)\n", this, val);
4954 if(basic_ostream_wchar_sentry_create(this)) {
4955 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
4956 const num_put *numput = num_put_wchar_use_facet(strbuf->loc);
4957 ostreambuf_iterator_wchar dest = {0, strbuf};
4959 num_put_wchar_put_ldouble(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
4961 basic_ostream_wchar_sentry_destroy(this);
4963 basic_ios_wchar_setstate(base, state);
4964 return this;
4967 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
4968 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
4969 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_streambuf, 8)
4970 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_streambuf(basic_ostream_wchar *this, basic_streambuf_wchar *val)
4972 FIXME("(%p %p) stub\n", this, val);
4973 return NULL;
4976 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PBX@Z */
4977 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEBX@Z */
4978 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_ptr, 8)
4979 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_ptr(basic_ostream_wchar *this, const void *val)
4981 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
4982 int state = IOSTATE_goodbit;
4984 TRACE("(%p %p)\n", this, val);
4986 if(basic_ostream_wchar_sentry_create(this)) {
4987 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
4988 const num_put *numput = num_put_wchar_use_facet(strbuf->loc);
4989 ostreambuf_iterator_wchar dest = {0, strbuf};
4991 num_put_wchar_put_ptr(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
4993 basic_ostream_wchar_sentry_destroy(this);
4995 basic_ios_wchar_setstate(base, state);
4996 return this;
4999 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_J@Z */
5000 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_J@Z */
5001 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_int64, 12)
5002 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_int64(basic_ostream_wchar *this, __int64 val)
5004 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5005 int state = IOSTATE_goodbit;
5007 TRACE("(%p)\n", this);
5009 if(basic_ostream_wchar_sentry_create(this)) {
5010 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
5011 const num_put *numput = num_put_wchar_use_facet(strbuf->loc);
5012 ostreambuf_iterator_wchar dest = {0, strbuf};
5014 num_put_wchar_put_int64(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
5016 basic_ostream_wchar_sentry_destroy(this);
5018 basic_ios_wchar_setstate(base, state);
5019 return this;
5022 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_K@Z */
5023 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_K@Z */
5024 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_uint64, 12)
5025 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_uint64(basic_ostream_wchar *this, unsigned __int64 val)
5027 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5028 int state = IOSTATE_goodbit;
5030 TRACE("(%p)\n", this);
5032 if(basic_ostream_wchar_sentry_create(this)) {
5033 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
5034 const num_put *numput = num_put_wchar_use_facet(strbuf->loc);
5035 ostreambuf_iterator_wchar dest = {0, strbuf};
5037 num_put_wchar_put_uint64(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
5039 basic_ostream_wchar_sentry_destroy(this);
5041 basic_ios_wchar_setstate(base, state);
5042 return this;
5045 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@_N@Z */
5046 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@_N@Z */
5047 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_bool, 8)
5048 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_bool(basic_ostream_wchar *this, MSVCP_bool val)
5050 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5051 int state = IOSTATE_goodbit;
5053 TRACE("(%p %x)\n", this, val);
5055 if(basic_ostream_wchar_sentry_create(this)) {
5056 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
5057 const num_put *numput = num_put_wchar_use_facet(strbuf->loc);
5058 ostreambuf_iterator_wchar dest = {0, strbuf};
5060 num_put_wchar_put_bool(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
5062 basic_ostream_wchar_sentry_destroy(this);
5064 basic_ios_wchar_setstate(base, state);
5065 return this;
5068 /* ?endl@std@@YAAAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AAV21@@Z */
5069 /* ?endl@std@@YAAEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AEAV21@@Z */
5070 basic_ostream_wchar* __cdecl basic_ostream_wchar_endl(basic_ostream_wchar *ostr)
5072 TRACE("(%p)\n", ostr);
5074 basic_ostream_wchar_put(ostr, '\n');
5075 basic_ostream_wchar_flush(ostr);
5076 return ostr;
5079 /* ??$?6_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YAAAV?$basic_ostream@_WU?$char_traits@_W@std@@@0@AAV10@ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@@Z */
5080 /* ??$?6_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YAAEAV?$basic_ostream@_WU?$char_traits@_W@std@@@0@AEAV10@AEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@@Z */
5081 basic_ostream_wchar* __cdecl basic_ostream_wchar_print_bstr(basic_ostream_wchar *ostr, const basic_string_wchar *str)
5083 basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(ostr);
5084 IOSB_iostate state = IOSTATE_goodbit;
5086 TRACE("(%p %p)\n", ostr, str);
5088 if(basic_ostream_wchar_sentry_create(ostr)) {
5089 MSVCP_size_t len = MSVCP_basic_string_wchar_length(str);
5090 streamsize pad = (base->base.wide>len ? base->base.wide-len : 0);
5092 if((base->base.fmtfl & FMTFLAG_adjustfield) != FMTFLAG_left) {
5093 for(; pad!=0; pad--) {
5094 if(basic_streambuf_wchar_sputc(base->strbuf, base->fillch) == WEOF) {
5095 state = IOSTATE_badbit;
5096 break;
5101 if(state == IOSTATE_goodbit) {
5102 if(basic_streambuf_wchar_sputn(base->strbuf, MSVCP_basic_string_wchar_c_str(str), len) != len)
5103 state = IOSTATE_badbit;
5106 for(; pad!=0; pad--) {
5107 if(basic_streambuf_wchar_sputc(base->strbuf, base->fillch) == WEOF) {
5108 state = IOSTATE_badbit;
5109 break;
5113 base->base.wide = 0;
5114 }else {
5115 state = IOSTATE_badbit;
5117 basic_ostream_wchar_sentry_destroy(ostr);
5119 basic_ios_wchar_setstate(base, state);
5120 return ostr;
5123 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */
5124 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */
5125 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_func, 8)
5126 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_func(basic_ostream_wchar *this,
5127 basic_ostream_wchar* (__cdecl *pfunc)(basic_ostream_wchar*))
5129 TRACE("(%p %p)\n", this, pfunc);
5130 pfunc(this);
5131 return this;
5134 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AAV21@@Z@Z */
5135 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AEAV21@@Z@Z */
5136 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_func_basic_ios, 8)
5137 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_func_basic_ios(basic_ostream_wchar *this,
5138 basic_ios_wchar* (__cdecl *pfunc)(basic_ios_wchar*))
5140 TRACE("(%p %p)\n", this, pfunc);
5141 pfunc(basic_ostream_wchar_get_basic_ios(this));
5142 return this;
5145 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */
5146 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */
5147 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_func_ios_base, 8)
5148 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_func_ios_base(
5149 basic_ostream_wchar *this, ios_base* (__cdecl *pfunc)(ios_base*))
5151 TRACE("(%p %p)\n", this, pfunc);
5152 pfunc(&basic_ostream_wchar_get_basic_ios(this)->base);
5153 return this;
5156 /* Caution: basic_istream uses virtual inheritance. */
5157 static inline basic_ios_char* basic_istream_char_get_basic_ios(basic_istream_char *this)
5159 return (basic_ios_char*)((char*)this+this->vbtable[1]);
5162 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N1@Z */
5163 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N1@Z */
5164 DEFINE_THISCALL_WRAPPER(basic_istream_char_ctor_init, 20)
5165 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)
5167 basic_ios_char *base;
5169 TRACE("(%p %p %d %d %d)\n", this, strbuf, isstd, noinit, virt_init);
5171 if(virt_init) {
5172 this->vbtable = basic_istream_char_vbtable;
5173 base = basic_istream_char_get_basic_ios(this);
5174 basic_ios_char_ctor(base);
5175 }else {
5176 base = basic_istream_char_get_basic_ios(this);
5179 base->base.vtable = &MSVCP_basic_istream_char_vtable;
5180 this->count = 0;
5181 if(!noinit)
5182 basic_ios_char_init(base, strbuf, isstd);
5183 return this;
5186 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */
5187 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */
5188 DEFINE_THISCALL_WRAPPER(basic_istream_char_ctor, 16)
5189 basic_istream_char* __thiscall basic_istream_char_ctor(basic_istream_char *this, basic_streambuf_char *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init)
5191 return basic_istream_char_ctor_init(this, strbuf, isstd, FALSE, virt_init);
5194 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@@Z */
5195 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@@Z */
5196 DEFINE_THISCALL_WRAPPER(basic_istream_char_ctor_uninitialized, 12)
5197 basic_istream_char* __thiscall basic_istream_char_ctor_uninitialized(basic_istream_char *this, int uninitialized, MSVCP_bool virt_init)
5199 basic_ios_char *base;
5201 TRACE("(%p %d %d)\n", this, uninitialized, virt_init);
5203 if(virt_init) {
5204 this->vbtable = basic_istream_char_vbtable;
5205 base = basic_istream_char_get_basic_ios(this);
5206 basic_ios_char_ctor(base);
5207 }else {
5208 base = basic_istream_char_get_basic_ios(this);
5211 base->base.vtable = &MSVCP_basic_istream_char_vtable;
5212 ios_base_Addstd(&base->base);
5213 return this;
5216 /* ??1?$basic_istream@DU?$char_traits@D@std@@@std@@UAE@XZ */
5217 /* ??1?$basic_istream@DU?$char_traits@D@std@@@std@@UEAA@XZ */
5218 DEFINE_THISCALL_WRAPPER(basic_istream_char_dtor, 4)
5219 void __thiscall basic_istream_char_dtor(basic_istream_char *this)
5221 /* don't destroy virtual base here */
5222 TRACE("(%p)\n", this);
5225 /* ??_D?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXXZ */
5226 /* ??_D?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
5227 DEFINE_THISCALL_WRAPPER(basic_istream_char_vbase_dtor, 4)
5228 void __thiscall basic_istream_char_vbase_dtor(basic_istream_char *this)
5230 TRACE("(%p)\n", this);
5231 basic_istream_char_dtor(this);
5232 basic_ios_char_dtor(basic_istream_char_get_basic_ios(this));
5235 DEFINE_THISCALL_WRAPPER(MSVCP_basic_istream_char_vector_dtor, 8)
5236 basic_istream_char* __thiscall MSVCP_basic_istream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
5238 basic_istream_char *this = (basic_istream_char *)((char*)base - basic_istream_char_vbtable[1] + basic_istream_char_vbtable[0]);
5240 TRACE("(%p %x)\n", this, flags);
5242 if(flags & 2) {
5243 /* we have an array, with the number of elements stored before the first object */
5244 int i, *ptr = (int *)this-1;
5246 for(i=*ptr-1; i>=0; i--)
5247 basic_istream_char_vbase_dtor(this+i);
5248 MSVCRT_operator_delete(ptr);
5249 } else {
5250 basic_istream_char_vbase_dtor(this);
5251 if(flags & 1)
5252 MSVCRT_operator_delete(this);
5255 return this;
5258 /* ?_Ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE_N_N@Z */
5259 /* ?_Ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_N_N@Z */
5260 DEFINE_THISCALL_WRAPPER(basic_istream_char__Ipfx, 8)
5261 MSVCP_bool __thiscall basic_istream_char__Ipfx(basic_istream_char *this, MSVCP_bool noskip)
5263 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5265 TRACE("(%p %d)\n", this, noskip);
5267 if(!ios_base_good(&base->base)) {
5268 basic_ios_char_setstate(base, IOSTATE_failbit);
5269 return FALSE;
5272 if(basic_ios_char_tie_get(base))
5273 basic_ostream_char_flush(basic_ios_char_tie_get(base));
5275 if(!noskip && (ios_base_flags_get(&base->base) & FMTFLAG_skipws)) {
5276 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5277 const ctype_char *ctype = ctype_char_use_facet(base->strbuf->loc);
5278 int ch;
5280 for(ch = basic_streambuf_char_sgetc(strbuf); ;
5281 ch = basic_streambuf_char_snextc(strbuf)) {
5282 if(ch == EOF) {
5283 basic_ios_char_setstate(base, IOSTATE_eofbit);
5284 return FALSE;
5287 if(!ctype_char_is_ch(ctype, _SPACE|_BLANK, ch))
5288 break;
5292 return TRUE;
5295 /* ?ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE_N_N@Z */
5296 /* ?ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_N_N@Z */
5297 DEFINE_THISCALL_WRAPPER(basic_istream_char_ipfx, 8)
5298 MSVCP_bool __thiscall basic_istream_char_ipfx(basic_istream_char *this, MSVCP_bool noskip)
5300 return basic_istream_char__Ipfx(this, noskip);
5303 /* ?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXXZ */
5304 /* ?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
5305 DEFINE_THISCALL_WRAPPER(basic_istream_char_isfx, 4)
5306 void __thiscall basic_istream_char_isfx(basic_istream_char *this)
5308 TRACE("(%p)\n", this);
5311 static BOOL basic_istream_char_sentry_create(basic_istream_char *istr, MSVCP_bool noskip)
5313 basic_ios_char *base = basic_istream_char_get_basic_ios(istr);
5315 if(basic_ios_char_rdbuf_get(base))
5316 basic_streambuf_char__Lock(base->strbuf);
5318 return basic_istream_char_ipfx(istr, noskip);
5321 static void basic_istream_char_sentry_destroy(basic_istream_char *istr)
5323 basic_ios_char *base = basic_istream_char_get_basic_ios(istr);
5325 if(basic_ios_char_rdbuf_get(base))
5326 basic_streambuf_char__Unlock(base->strbuf);
5329 /* ?gcount@?$basic_istream@DU?$char_traits@D@std@@@std@@QBEHXZ */
5330 /* ?gcount@?$basic_istream@DU?$char_traits@D@std@@@std@@QEBA_JXZ */
5331 DEFINE_THISCALL_WRAPPER(basic_istream_char_gcount, 4)
5332 int __thiscall basic_istream_char_gcount(const basic_istream_char *this)
5334 TRACE("(%p)\n", this);
5335 return this->count;
5338 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ */
5339 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ */
5340 DEFINE_THISCALL_WRAPPER(basic_istream_char_get, 4)
5341 int __thiscall basic_istream_char_get(basic_istream_char *this)
5343 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5344 int ret;
5346 TRACE("(%p)\n", this);
5348 this->count = 0;
5350 if(!basic_istream_char_sentry_create(this, TRUE)) {
5351 basic_istream_char_sentry_destroy(this);
5352 return EOF;
5355 ret = basic_streambuf_char_sbumpc(basic_ios_char_rdbuf_get(base));
5356 basic_istream_char_sentry_destroy(this);
5357 if(ret == EOF)
5358 basic_ios_char_setstate(base, IOSTATE_eofbit|IOSTATE_failbit);
5359 else
5360 this->count++;
5362 return ret;
5365 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAD@Z */
5366 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAD@Z */
5367 DEFINE_THISCALL_WRAPPER(basic_istream_char_get_ch, 8)
5368 basic_istream_char* __thiscall basic_istream_char_get_ch(basic_istream_char *this, char *ch)
5370 int ret;
5372 TRACE("(%p %p)\n", this, ch);
5374 ret = basic_istream_char_get(this);
5375 if(ret != EOF)
5376 *ch = (char)ret;
5377 return this;
5380 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADHD@Z */
5381 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_JD@Z */
5382 DEFINE_THISCALL_WRAPPER(basic_istream_char_get_str_delim, 16)
5383 basic_istream_char* __thiscall basic_istream_char_get_str_delim(basic_istream_char *this, char *str, streamsize count, char delim)
5385 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5386 int ch = delim;
5388 TRACE("(%p %p %ld %c)\n", this, str, count, delim);
5390 this->count = 0;
5392 if(basic_istream_char_sentry_create(this, TRUE)) {
5393 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5395 for(ch = basic_streambuf_char_sgetc(strbuf); count>1;
5396 ch = basic_streambuf_char_snextc(strbuf)) {
5397 if(ch==EOF || ch==delim)
5398 break;
5400 *str++ = ch;
5401 this->count++;
5402 count--;
5405 basic_istream_char_sentry_destroy(this);
5407 basic_ios_char_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) |
5408 (ch==EOF ? IOSTATE_eofbit : IOSTATE_goodbit));
5409 if(count > 0)
5410 *str = 0;
5411 return this;
5414 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADH@Z */
5415 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z */
5416 DEFINE_THISCALL_WRAPPER(basic_istream_char_get_str, 12)
5417 basic_istream_char* __thiscall basic_istream_char_get_str(basic_istream_char *this, char *str, streamsize count)
5419 return basic_istream_char_get_str_delim(this, str, count, '\n');
5422 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAV?$basic_streambuf@DU?$char_traits@D@std@@@2@D@Z */
5423 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@D@Z */
5424 DEFINE_THISCALL_WRAPPER(basic_istream_char_get_streambuf_delim, 12)
5425 basic_istream_char* __thiscall basic_istream_char_get_streambuf_delim(basic_istream_char *this, basic_streambuf_char *strbuf, char delim)
5427 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5428 int ch = delim;
5430 TRACE("(%p %p %c)\n", this, strbuf, delim);
5432 this->count = 0;
5434 if(basic_istream_char_sentry_create(this, TRUE)) {
5435 basic_streambuf_char *strbuf_read = basic_ios_char_rdbuf_get(base);
5437 for(ch = basic_streambuf_char_sgetc(strbuf_read); ;
5438 ch = basic_streambuf_char_snextc(strbuf_read)) {
5439 if(ch==EOF || ch==delim)
5440 break;
5442 if(basic_streambuf_char_sputc(strbuf, ch) == EOF)
5443 break;
5444 this->count++;
5447 basic_istream_char_sentry_destroy(this);
5449 basic_ios_char_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) |
5450 (ch==EOF ? IOSTATE_eofbit : IOSTATE_goodbit));
5451 return this;
5454 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z */
5455 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z */
5456 DEFINE_THISCALL_WRAPPER(basic_istream_char_get_streambuf, 8)
5457 basic_istream_char* __thiscall basic_istream_char_get_streambuf(basic_istream_char *this, basic_streambuf_char *strbuf)
5459 return basic_istream_char_get_streambuf_delim(this, strbuf, '\n');
5462 /* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADHD@Z */
5463 /* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_JD@Z */
5464 DEFINE_THISCALL_WRAPPER(basic_istream_char_getline_delim, 16)
5465 basic_istream_char* __thiscall basic_istream_char_getline_delim(basic_istream_char *this, char *str, streamsize count, char delim)
5467 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5468 int ch = delim;
5470 TRACE("(%p %p %ld %c)\n", this, str, count, delim);
5472 this->count = 0;
5474 if(basic_istream_char_sentry_create(this, TRUE) && count>0) {
5475 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5477 while(count > 1) {
5478 ch = basic_streambuf_char_sbumpc(strbuf);
5480 if(ch==EOF || ch==delim)
5481 break;
5483 *str++ = ch;
5484 this->count++;
5485 count--;
5488 if(ch == delim)
5489 this->count++;
5490 else if(ch != EOF) {
5491 ch = basic_streambuf_char_sgetc(strbuf);
5493 if(ch == delim) {
5494 basic_streambuf_char__Gninc(strbuf);
5495 this->count++;
5499 basic_istream_char_sentry_destroy(this);
5501 basic_ios_char_setstate(base, (ch==EOF ? IOSTATE_eofbit : IOSTATE_goodbit) |
5502 (!this->count || (ch!=delim && ch!=EOF) ? IOSTATE_failbit : IOSTATE_goodbit));
5503 if(count > 0)
5504 *str = 0;
5505 return this;
5508 /* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADH@Z */
5509 /* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z */
5510 DEFINE_THISCALL_WRAPPER(basic_istream_char_getline, 12)
5511 basic_istream_char* __thiscall basic_istream_char_getline(basic_istream_char *this, char *str, streamsize count)
5513 return basic_istream_char_getline_delim(this, str, count, '\n');
5516 /* ?ignore@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@HH@Z */
5517 /* ?ignore@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z */
5518 DEFINE_THISCALL_WRAPPER(basic_istream_char_ignore, 12)
5519 basic_istream_char* __thiscall basic_istream_char_ignore(basic_istream_char *this, streamsize count, int delim)
5521 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5522 int ch = delim;
5524 TRACE("(%p %ld %d)\n", this, count, delim);
5526 this->count = 0;
5528 if(basic_istream_char_sentry_create(this, TRUE)) {
5529 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5531 while(count > 0) {
5532 ch = basic_streambuf_char_sbumpc(strbuf);
5534 if(ch==EOF || ch==delim)
5535 break;
5537 this->count++;
5538 if(count != INT_MAX)
5539 count--;
5542 basic_istream_char_sentry_destroy(this);
5544 if(ch == EOF)
5545 basic_ios_char_setstate(base, IOSTATE_eofbit);
5546 return this;
5549 /* ?peek@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ */
5550 /* ?peek@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ */
5551 DEFINE_THISCALL_WRAPPER(basic_istream_char_peek, 4)
5552 int __thiscall basic_istream_char_peek(basic_istream_char *this)
5554 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5555 int ret = EOF;
5557 TRACE("(%p)\n", this);
5559 this->count = 0;
5561 if(basic_istream_char_sentry_create(this, TRUE))
5562 ret = basic_streambuf_char_sgetc(basic_ios_char_rdbuf_get(base));
5563 basic_istream_char_sentry_destroy(this);
5564 return ret;
5567 /* ?_Read_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADIH@Z */
5568 /* ?_Read_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_K_J@Z */
5569 DEFINE_THISCALL_WRAPPER(basic_istream_char__Read_s, 16)
5570 basic_istream_char* __thiscall basic_istream_char__Read_s(basic_istream_char *this, char *str, MSVCP_size_t size, streamsize count)
5572 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5573 IOSB_iostate state = IOSTATE_goodbit;
5575 TRACE("(%p %p %lu %ld)\n", this, str, size, count);
5577 if(basic_istream_char_sentry_create(this, TRUE)) {
5578 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5580 this->count = basic_streambuf_char__Sgetn_s(strbuf, str, size, count);
5581 if(this->count != count)
5582 state |= IOSTATE_failbit | IOSTATE_eofbit;
5583 }else {
5584 this->count = 0;
5586 basic_istream_char_sentry_destroy(this);
5588 basic_ios_char_setstate(base, state);
5589 return this;
5592 /* ?read@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADH@Z */
5593 /* ?read@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z */
5594 DEFINE_THISCALL_WRAPPER(basic_istream_char_read, 12)
5595 basic_istream_char* __thiscall basic_istream_char_read(basic_istream_char *this, char *str, streamsize count)
5597 return basic_istream_char__Read_s(this, str, count, count);
5600 /* ?_Readsome_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHPADIH@Z */
5601 /* ?_Readsome_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_K_J@Z */
5602 DEFINE_THISCALL_WRAPPER(basic_istream_char__Readsome_s, 16)
5603 streamsize __thiscall basic_istream_char__Readsome_s(basic_istream_char *this, char *str, MSVCP_size_t size, streamsize count)
5605 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5606 IOSB_iostate state = IOSTATE_goodbit;
5608 TRACE("(%p %p %lu %ld)\n", this, str, size, count);
5610 this->count = 0;
5612 if(basic_istream_char_sentry_create(this, TRUE)) {
5613 streamsize avail = basic_streambuf_char_in_avail(basic_ios_char_rdbuf_get(base));
5614 if(avail > count)
5615 avail = count;
5617 if(avail == -1)
5618 state |= IOSTATE_eofbit;
5619 else if(avail > 0)
5620 basic_istream_char__Read_s(this, str, size, avail);
5621 }else {
5622 state |= IOSTATE_failbit;
5624 basic_istream_char_sentry_destroy(this);
5626 basic_ios_char_setstate(base, state);
5627 return this->count;
5630 /* ?readsome@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHPADH@Z */
5631 /* ?readsome@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_J@Z */
5632 DEFINE_THISCALL_WRAPPER(basic_istream_char_readsome, 12)
5633 streamsize __thiscall basic_istream_char_readsome(basic_istream_char *this, char *str, streamsize count)
5635 return basic_istream_char__Readsome_s(this, str, count, count);
5638 /* ?putback@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z */
5639 /* ?putback@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z */
5640 DEFINE_THISCALL_WRAPPER(basic_istream_char_putback, 8)
5641 basic_istream_char* __thiscall basic_istream_char_putback(basic_istream_char *this, char ch)
5643 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5644 IOSB_iostate state = IOSTATE_goodbit;
5646 TRACE("(%p %c)\n", this, ch);
5648 this->count = 0;
5650 if(basic_istream_char_sentry_create(this, TRUE)) {
5651 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5653 if(!ios_base_good(&base->base))
5654 state |= IOSTATE_failbit;
5655 else if(!strbuf || basic_streambuf_char_sputbackc(strbuf, ch)==EOF)
5656 state |= IOSTATE_badbit;
5658 basic_istream_char_sentry_destroy(this);
5660 basic_ios_char_setstate(base, state);
5661 return this;
5664 /* ?unget@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ */
5665 /* ?unget@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ */
5666 DEFINE_THISCALL_WRAPPER(basic_istream_char_unget, 4)
5667 basic_istream_char* __thiscall basic_istream_char_unget(basic_istream_char *this)
5669 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5670 IOSB_iostate state = IOSTATE_goodbit;
5672 TRACE("(%p)\n", this);
5674 this->count = 0;
5676 if(basic_istream_char_sentry_create(this, TRUE)) {
5677 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5679 if(!ios_base_good(&base->base))
5680 state |= IOSTATE_failbit;
5681 else if(!strbuf || basic_streambuf_char_sungetc(strbuf)==EOF)
5682 state |= IOSTATE_badbit;
5684 basic_istream_char_sentry_destroy(this);
5686 basic_ios_char_setstate(base, state);
5687 return this;
5690 /* ?sync@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ */
5691 /* ?sync@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ */
5692 DEFINE_THISCALL_WRAPPER(basic_istream_char_sync, 4)
5693 int __thiscall basic_istream_char_sync(basic_istream_char *this)
5695 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5696 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5698 TRACE("(%p)\n", this);
5700 if(!strbuf)
5701 return -1;
5703 if(basic_istream_char_sentry_create(this, TRUE)) {
5704 if(basic_streambuf_char_pubsync(strbuf) != -1) {
5705 basic_istream_char_sentry_destroy(this);
5706 return 0;
5709 basic_istream_char_sentry_destroy(this);
5711 basic_ios_char_setstate(base, IOSTATE_badbit);
5712 return -1;
5715 /* ?tellg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@XZ */
5716 /* ?tellg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
5717 DEFINE_THISCALL_WRAPPER(basic_istream_char_tellg, 8)
5718 fpos_int* __thiscall basic_istream_char_tellg(basic_istream_char *this, fpos_int *ret)
5720 TRACE("(%p %p)\n", this, ret);
5722 if(basic_istream_char_sentry_create(this, TRUE)) {
5723 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5724 if(!ios_base_fail(&base->base)) {
5725 basic_streambuf_char_pubseekoff(basic_ios_char_rdbuf_get(base),
5726 ret, 0, SEEKDIR_cur, OPENMODE_in);
5727 basic_istream_char_sentry_destroy(this);
5729 if(ret->off==0 && ret->pos==-1 && ret->state==0)
5730 basic_ios_char_setstate(base, IOSTATE_failbit);
5731 return ret;
5734 basic_istream_char_sentry_destroy(this);
5736 ret->off = 0;
5737 ret->pos = -1;
5738 ret->state = 0;
5739 return ret;
5742 /* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@JH@Z */
5743 /* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z */
5744 DEFINE_THISCALL_WRAPPER(basic_istream_char_seekg, 12)
5745 basic_istream_char* __thiscall basic_istream_char_seekg(basic_istream_char *this, streamoff off, int dir)
5747 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5749 TRACE("(%p %ld %d)\n", this, off, dir);
5751 if(basic_istream_char_sentry_create(this, TRUE)) {
5752 if(!ios_base_fail(&base->base)) {
5753 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5754 fpos_int ret;
5756 basic_streambuf_char_pubseekoff(strbuf, &ret, off, dir, OPENMODE_in);
5757 basic_istream_char_sentry_destroy(this);
5759 if(ret.off==0 && ret.pos==-1 && ret.state==0)
5760 basic_ios_char_setstate(base, IOSTATE_failbit);
5761 else
5762 basic_ios_char_clear(base, IOSTATE_goodbit);
5763 return this;
5766 basic_istream_char_sentry_destroy(this);
5768 basic_ios_char_setstate(base, IOSTATE_failbit);
5769 return this;
5772 /* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
5773 /* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
5774 DEFINE_THISCALL_WRAPPER(basic_istream_char_seekg_fpos, 28)
5775 basic_istream_char* __thiscall basic_istream_char_seekg_fpos(basic_istream_char *this, fpos_int pos)
5777 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5779 TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos));
5781 if(basic_istream_char_sentry_create(this, TRUE)) {
5782 if(!ios_base_fail(&base->base)) {
5783 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5784 fpos_int ret;
5786 basic_streambuf_char_pubseekpos(strbuf, &ret, pos, OPENMODE_in);
5787 basic_istream_char_sentry_destroy(this);
5789 if(ret.off==0 && ret.pos==-1 && ret.state==0)
5790 basic_ios_char_setstate(base, IOSTATE_failbit);
5791 else
5792 basic_ios_char_clear(base, IOSTATE_goodbit);
5793 return this;
5796 basic_istream_char_sentry_destroy(this);
5798 basic_ios_char_setstate(base, IOSTATE_failbit);
5799 return this;
5802 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAF@Z */
5803 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAF@Z */
5804 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_short, 8)
5805 basic_istream_char* __thiscall basic_istream_char_read_short(basic_istream_char *this, short *v)
5807 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5808 int state = IOSTATE_goodbit;
5810 TRACE("(%p %p)\n", this, v);
5812 if(basic_istream_char_sentry_create(this, FALSE)) {
5813 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5814 const num_get *numget = num_get_char_use_facet(strbuf->loc);
5815 istreambuf_iterator_char first={0}, last={0};
5816 LONG tmp;
5818 first.strbuf = strbuf;
5819 num_get_char_get_long(numget, &last, first, last, &base->base, &state, &tmp);
5821 if(!(state&IOSTATE_failbit) && tmp==(LONG)((short)tmp))
5822 *v = tmp;
5823 else
5824 state |= IOSTATE_failbit;
5826 basic_istream_char_sentry_destroy(this);
5828 basic_ios_char_setstate(base, state);
5829 return this;
5832 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAG@Z */
5833 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAG@Z */
5834 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ushort, 8)
5835 basic_istream_char* __thiscall basic_istream_char_read_ushort(basic_istream_char *this, unsigned short *v)
5837 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5838 int state = IOSTATE_goodbit;
5840 TRACE("(%p %p)\n", this, v);
5842 if(basic_istream_char_sentry_create(this, FALSE)) {
5843 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5844 const num_get *numget = num_get_char_use_facet(strbuf->loc);
5845 istreambuf_iterator_char first={0}, last={0};
5847 first.strbuf = strbuf;
5848 num_get_char_get_ushort(numget, &last, first, last, &base->base, &state, v);
5850 basic_istream_char_sentry_destroy(this);
5852 basic_ios_char_setstate(base, state);
5853 return this;
5856 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAH@Z */
5857 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAH@Z */
5858 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_int, 8)
5859 basic_istream_char* __thiscall basic_istream_char_read_int(basic_istream_char *this, int *v)
5861 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5862 int state = IOSTATE_goodbit;
5864 TRACE("(%p %p)\n", this, v);
5866 if(basic_istream_char_sentry_create(this, FALSE)) {
5867 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5868 const num_get *numget = num_get_char_use_facet(strbuf->loc);
5869 istreambuf_iterator_char first={0}, last={0};
5871 first.strbuf = strbuf;
5872 num_get_char_get_long(numget, &last, first, last, &base->base, &state, v);
5874 basic_istream_char_sentry_destroy(this);
5876 basic_ios_char_setstate(base, state);
5877 return this;
5880 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAI@Z */
5881 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAI@Z */
5882 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_uint, 8)
5883 basic_istream_char* __thiscall basic_istream_char_read_uint(basic_istream_char *this, unsigned int *v)
5885 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5886 int state = IOSTATE_goodbit;
5888 TRACE("(%p %p)\n", this, v);
5890 if(basic_istream_char_sentry_create(this, FALSE)) {
5891 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5892 const num_get *numget = num_get_char_use_facet(strbuf->loc);
5893 istreambuf_iterator_char first={0}, last={0};
5895 first.strbuf = strbuf;
5896 num_get_char_get_uint(numget, &last, first, last, &base->base, &state, v);
5898 basic_istream_char_sentry_destroy(this);
5900 basic_ios_char_setstate(base, state);
5901 return this;
5904 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAJ@Z */
5905 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAJ@Z */
5906 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_long, 8)
5907 basic_istream_char* __thiscall basic_istream_char_read_long(basic_istream_char *this, LONG *v)
5909 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5910 int state = IOSTATE_goodbit;
5912 TRACE("(%p %p)\n", this, v);
5914 if(basic_istream_char_sentry_create(this, FALSE)) {
5915 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5916 const num_get *numget = num_get_char_use_facet(strbuf->loc);
5917 istreambuf_iterator_char first={0}, last={0};
5919 first.strbuf = strbuf;
5920 num_get_char_get_long(numget, &last, first, last, &base->base, &state, v);
5922 basic_istream_char_sentry_destroy(this);
5924 basic_ios_char_setstate(base, state);
5925 return this;
5928 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAK@Z */
5929 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAK@Z */
5930 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ulong, 8)
5931 basic_istream_char* __thiscall basic_istream_char_read_ulong(basic_istream_char *this, ULONG *v)
5933 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5934 int state = IOSTATE_goodbit;
5936 TRACE("(%p %p)\n", this, v);
5938 if(basic_istream_char_sentry_create(this, FALSE)) {
5939 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5940 const num_get *numget = num_get_char_use_facet(strbuf->loc);
5941 istreambuf_iterator_char first={0}, last={0};
5943 first.strbuf = strbuf;
5944 num_get_char_get_ulong(numget, &last, first, last, &base->base, &state, v);
5946 basic_istream_char_sentry_destroy(this);
5948 basic_ios_char_setstate(base, state);
5949 return this;
5952 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAM@Z */
5953 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAM@Z */
5954 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_float, 8)
5955 basic_istream_char* __thiscall basic_istream_char_read_float(basic_istream_char *this, float *v)
5957 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5958 int state = IOSTATE_goodbit;
5960 TRACE("(%p %p)\n", this, v);
5962 if(basic_istream_char_sentry_create(this, FALSE)) {
5963 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5964 const num_get *numget = num_get_char_use_facet(strbuf->loc);
5965 istreambuf_iterator_char first={0}, last={0};
5967 first.strbuf = strbuf;
5968 num_get_char_get_float(numget, &last, first, last, &base->base, &state, v);
5970 basic_istream_char_sentry_destroy(this);
5972 basic_ios_char_setstate(base, state);
5973 return this;
5976 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAN@Z */
5977 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAN@Z */
5978 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_double, 8)
5979 basic_istream_char* __thiscall basic_istream_char_read_double(basic_istream_char *this, double *v)
5981 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
5982 int state = IOSTATE_goodbit;
5984 TRACE("(%p %p)\n", this, v);
5986 if(basic_istream_char_sentry_create(this, FALSE)) {
5987 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5988 const num_get *numget = num_get_char_use_facet(strbuf->loc);
5989 istreambuf_iterator_char first={0}, last={0};
5991 first.strbuf = strbuf;
5992 num_get_char_get_double(numget, &last, first, last, &base->base, &state, v);
5994 basic_istream_char_sentry_destroy(this);
5996 basic_ios_char_setstate(base, state);
5997 return this;
6000 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAO@Z */
6001 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAO@Z */
6002 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ldouble, 8)
6003 basic_istream_char* __thiscall basic_istream_char_read_ldouble(basic_istream_char *this, double *v)
6005 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6006 int state = IOSTATE_goodbit;
6008 TRACE("(%p %p)\n", this, v);
6010 if(basic_istream_char_sentry_create(this, FALSE)) {
6011 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6012 const num_get *numget = num_get_char_use_facet(strbuf->loc);
6013 istreambuf_iterator_char first={0}, last={0};
6015 first.strbuf = strbuf;
6016 num_get_char_get_ldouble(numget, &last, first, last, &base->base, &state, v);
6018 basic_istream_char_sentry_destroy(this);
6020 basic_ios_char_setstate(base, state);
6021 return this;
6024 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAPAX@Z */
6025 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAPEAX@Z */
6026 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ptr, 8)
6027 basic_istream_char* __thiscall basic_istream_char_read_ptr(basic_istream_char *this, void **v)
6029 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6030 int state = IOSTATE_goodbit;
6032 TRACE("(%p %p)\n", this, v);
6034 if(basic_istream_char_sentry_create(this, FALSE)) {
6035 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6036 const num_get *numget = num_get_char_use_facet(strbuf->loc);
6037 istreambuf_iterator_char first={0}, last={0};
6039 first.strbuf = strbuf;
6040 num_get_char_get_void(numget, &last, first, last, &base->base, &state, v);
6042 basic_istream_char_sentry_destroy(this);
6044 basic_ios_char_setstate(base, state);
6045 return this;
6048 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_J@Z */
6049 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_J@Z */
6050 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_int64, 8)
6051 basic_istream_char* __thiscall basic_istream_char_read_int64(basic_istream_char *this, __int64 *v)
6053 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6054 int state = IOSTATE_goodbit;
6056 TRACE("(%p %p)\n", this, v);
6058 if(basic_istream_char_sentry_create(this, FALSE)) {
6059 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6060 const num_get *numget = num_get_char_use_facet(strbuf->loc);
6061 istreambuf_iterator_char first={0}, last={0};
6063 first.strbuf = strbuf;
6064 num_get_char_get_int64(numget, &last, first, last, &base->base, &state, v);
6066 basic_istream_char_sentry_destroy(this);
6068 basic_ios_char_setstate(base, state);
6069 return this;
6072 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_K@Z */
6073 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_K@Z */
6074 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_uint64, 8)
6075 basic_istream_char* __thiscall basic_istream_char_read_uint64(basic_istream_char *this, unsigned __int64 *v)
6077 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6078 int state = IOSTATE_goodbit;
6080 TRACE("(%p %p)\n", this, v);
6082 if(basic_istream_char_sentry_create(this, FALSE)) {
6083 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6084 const num_get *numget = num_get_char_use_facet(strbuf->loc);
6085 istreambuf_iterator_char first={0}, last={0};
6087 first.strbuf = strbuf;
6088 num_get_char_get_uint64(numget, &last, first, last, &base->base, &state, v);
6090 basic_istream_char_sentry_destroy(this);
6092 basic_ios_char_setstate(base, state);
6093 return this;
6096 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_N@Z */
6097 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_N@Z */
6098 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_bool, 8)
6099 basic_istream_char* __thiscall basic_istream_char_read_bool(basic_istream_char *this, MSVCP_bool *v)
6101 basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6102 int state = IOSTATE_goodbit;
6104 TRACE("(%p %p)\n", this, v);
6106 if(basic_istream_char_sentry_create(this, FALSE)) {
6107 basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6108 const num_get *numget = num_get_char_use_facet(strbuf->loc);
6109 istreambuf_iterator_char first={0}, last={0};
6111 first.strbuf = strbuf;
6112 num_get_char_get_bool(numget, &last, first, last, &base->base, &state, v);
6114 basic_istream_char_sentry_destroy(this);
6116 basic_ios_char_setstate(base, state);
6117 return this;
6120 /* ??$getline@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@D@Z */
6121 /* ??$getline@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@D@Z */
6122 basic_istream_char* __cdecl basic_istream_char_getline_bstr_delim(
6123 basic_istream_char *istream, basic_string_char *str, char delim)
6125 IOSB_iostate state = IOSTATE_failbit;
6126 int c = delim;
6128 TRACE("(%p %p %c)\n", istream, str, delim);
6130 if(basic_istream_char_sentry_create(istream, TRUE)) {
6131 MSVCP_basic_string_char_clear(str);
6133 for(c = basic_istream_char_get(istream); c!=delim && c!=EOF;
6134 c = basic_istream_char_get(istream)) {
6135 state = IOSTATE_goodbit;
6136 MSVCP_basic_string_char_append_ch(str, c);
6139 basic_istream_char_sentry_destroy(istream);
6141 basic_ios_char_setstate(basic_istream_char_get_basic_ios(istream),
6142 state | (c==EOF ? IOSTATE_eofbit : IOSTATE_goodbit));
6143 return istream;
6146 /* ??$getline@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
6147 /* ??$getline@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
6148 basic_istream_char* __cdecl basic_istream_char_getline_bstr(
6149 basic_istream_char *istream, basic_string_char *str)
6151 return basic_istream_char_getline_bstr_delim(istream, str, '\n');
6154 /* ??$?5DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
6155 /* ??$?5DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z */
6156 basic_istream_char* __cdecl basic_istream_char_get_bstr(
6157 basic_istream_char *istream, basic_string_char *str)
6159 IOSB_iostate state = IOSTATE_failbit;
6160 int c = '\n';
6162 TRACE("(%p %p)\n", istream, str);
6164 if(basic_istream_char_sentry_create(istream, FALSE)) {
6165 basic_ios_char *base = basic_istream_char_get_basic_ios(istream);
6166 const ctype_char *ctype = ctype_char_use_facet(base->strbuf->loc);
6168 MSVCP_basic_string_char_clear(str);
6170 for(c = basic_streambuf_char_sgetc(basic_ios_char_rdbuf_get(base));
6171 c!=EOF && !ctype_char_is_ch(ctype, _SPACE|_BLANK, c);
6172 c = basic_streambuf_char_snextc(basic_ios_char_rdbuf_get(base))) {
6173 state = IOSTATE_goodbit;
6174 MSVCP_basic_string_char_append_ch(str, c);
6177 basic_istream_char_sentry_destroy(istream);
6179 basic_ios_char_setstate(basic_istream_char_get_basic_ios(istream),
6180 state | (c==EOF ? IOSTATE_eofbit : IOSTATE_goodbit));
6181 return istream;
6184 /* ??$?5DU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAD@Z */
6185 /* ??$?5DU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAD@Z */
6186 basic_istream_char* __cdecl basic_istream_char_read_ch(basic_istream_char *istream, char *ch)
6188 IOSB_iostate state = IOSTATE_failbit;
6189 int c = 0;
6191 TRACE("(%p %p)\n", istream, ch);
6193 if(basic_istream_char_sentry_create(istream, FALSE)) {
6194 c = basic_streambuf_char_sbumpc(basic_ios_char_rdbuf_get(
6195 basic_istream_char_get_basic_ios(istream)));
6196 if(c != EOF) {
6197 state = IOSTATE_goodbit;
6198 *ch = c;
6201 basic_istream_char_sentry_destroy(istream);
6203 basic_ios_char_setstate(basic_istream_char_get_basic_ios(istream),
6204 state | (c==EOF ? IOSTATE_eofbit : IOSTATE_goodbit));
6205 return istream;
6208 /* Caution: basic_istream uses virtual inheritance. */
6209 static inline basic_ios_wchar* basic_istream_wchar_get_basic_ios(basic_istream_wchar *this)
6211 return (basic_ios_wchar*)((char*)this+this->vbtable[1]);
6214 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N1@Z */
6215 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N1@Z */
6216 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ctor_init, 20)
6217 basic_istream_wchar* __thiscall basic_istream_wchar_ctor_init(basic_istream_wchar *this, basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool noinit, MSVCP_bool virt_init)
6219 basic_ios_wchar *base;
6221 TRACE("(%p %p %d %d %d)\n", this, strbuf, isstd, noinit, virt_init);
6223 if(virt_init) {
6224 this->vbtable = basic_istream_wchar_vbtable;
6225 base = basic_istream_wchar_get_basic_ios(this);
6226 basic_ios_wchar_ctor(base);
6227 }else {
6228 base = basic_istream_wchar_get_basic_ios(this);
6231 base->base.vtable = &MSVCP_basic_istream_wchar_vtable;
6232 this->count = 0;
6233 if(!noinit)
6234 basic_ios_wchar_init(base, strbuf, isstd);
6235 return this;
6238 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */
6239 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */
6240 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ctor, 16)
6241 basic_istream_wchar* __thiscall basic_istream_wchar_ctor(basic_istream_wchar *this, basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init)
6243 return basic_istream_wchar_ctor_init(this, strbuf, isstd, FALSE, virt_init);
6246 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@W4_Uninitialized@1@@Z */
6247 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@W4_Uninitialized@1@@Z */
6248 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ctor_uninitialized, 12)
6249 basic_istream_wchar* __thiscall basic_istream_wchar_ctor_uninitialized(basic_istream_wchar *this, int uninitialized, MSVCP_bool virt_init)
6251 basic_ios_wchar *base;
6253 TRACE("(%p %d %d)\n", this, uninitialized, virt_init);
6255 if(virt_init) {
6256 this->vbtable = basic_istream_wchar_vbtable;
6257 base = basic_istream_wchar_get_basic_ios(this);
6258 basic_ios_wchar_ctor(base);
6259 }else {
6260 base = basic_istream_wchar_get_basic_ios(this);
6263 base->base.vtable = &MSVCP_basic_istream_wchar_vtable;
6264 ios_base_Addstd(&base->base);
6265 return this;
6268 /* ??1?$basic_istream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
6269 /* ??1?$basic_istream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
6270 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_dtor, 4)
6271 void __thiscall basic_istream_wchar_dtor(basic_istream_wchar *this)
6273 /* don't destroy virtual base here */
6274 TRACE("(%p)\n", this);
6277 /* ??_D?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
6278 /* ??_D?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
6279 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_vbase_dtor, 4)
6280 void __thiscall basic_istream_wchar_vbase_dtor(basic_istream_wchar *this)
6282 TRACE("(%p)\n", this);
6283 basic_istream_wchar_dtor(this);
6284 basic_ios_wchar_dtor(basic_istream_wchar_get_basic_ios(this));
6287 DEFINE_THISCALL_WRAPPER(MSVCP_basic_istream_wchar_vector_dtor, 8)
6288 basic_istream_wchar* __thiscall MSVCP_basic_istream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags)
6290 basic_istream_wchar *this = (basic_istream_wchar *)((char*)base - basic_istream_wchar_vbtable[1] + basic_istream_wchar_vbtable[0]);
6292 TRACE("(%p %x)\n", this, flags);
6294 if(flags & 2) {
6295 /* we have an array, with the number of elements stored before the first object */
6296 int i, *ptr = (int *)this-1;
6298 for(i=*ptr-1; i>=0; i--)
6299 basic_istream_wchar_vbase_dtor(this+i);
6300 MSVCRT_operator_delete(ptr);
6301 } else {
6302 basic_istream_wchar_vbase_dtor(this);
6303 if(flags & 1)
6304 MSVCRT_operator_delete(this);
6307 return this;
6310 /* ?_Ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE_N_N@Z */
6311 /* ?_Ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_N_N@Z */
6312 DEFINE_THISCALL_WRAPPER(basic_istream_wchar__Ipfx, 8)
6313 MSVCP_bool __thiscall basic_istream_wchar__Ipfx(basic_istream_wchar *this, MSVCP_bool noskip)
6315 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6317 TRACE("(%p %d)\n", this, noskip);
6319 if(!ios_base_good(&base->base)) {
6320 basic_ios_wchar_setstate(base, IOSTATE_failbit);
6321 return FALSE;
6324 if(basic_ios_wchar_tie_get(base))
6325 basic_ostream_wchar_flush(basic_ios_wchar_tie_get(base));
6327 if(!noskip && (ios_base_flags_get(&base->base) & FMTFLAG_skipws)) {
6328 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6329 const ctype_wchar *ctype = ctype_wchar_use_facet(base->strbuf->loc);
6330 int ch;
6332 for(ch = basic_streambuf_wchar_sgetc(strbuf); ;
6333 ch = basic_streambuf_wchar_snextc(strbuf)) {
6334 if(ch == WEOF) {
6335 basic_ios_wchar_setstate(base, IOSTATE_eofbit);
6336 return FALSE;
6339 if(!ctype_wchar_is_ch(ctype, _SPACE|_BLANK, ch))
6340 break;
6344 return TRUE;
6347 /* ?ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE_N_N@Z */
6348 /* ?ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_N_N@Z */
6349 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ipfx, 8)
6350 MSVCP_bool __thiscall basic_istream_wchar_ipfx(basic_istream_wchar *this, MSVCP_bool noskip)
6352 return basic_istream_wchar__Ipfx(this, noskip);
6355 /* ?isfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
6356 /* ?isfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
6357 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_isfx, 4)
6358 void __thiscall basic_istream_wchar_isfx(basic_istream_wchar *this)
6360 TRACE("(%p)\n", this);
6363 static BOOL basic_istream_wchar_sentry_create(basic_istream_wchar *istr, MSVCP_bool noskip)
6365 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istr);
6367 if(basic_ios_wchar_rdbuf_get(base))
6368 basic_streambuf_wchar__Lock(base->strbuf);
6370 return basic_istream_wchar_ipfx(istr, noskip);
6373 static void basic_istream_wchar_sentry_destroy(basic_istream_wchar *istr)
6375 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istr);
6377 if(basic_ios_wchar_rdbuf_get(base))
6378 basic_streambuf_wchar__Unlock(base->strbuf);
6381 /* ?gcount@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QBEHXZ */
6382 /* ?gcount@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEBA_JXZ */
6383 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_gcount, 4)
6384 int __thiscall basic_istream_wchar_gcount(const basic_istream_wchar *this)
6386 TRACE("(%p)\n", this);
6387 return this->count;
6390 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
6391 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
6392 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get, 4)
6393 unsigned short __thiscall basic_istream_wchar_get(basic_istream_wchar *this)
6395 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6396 int ret;
6398 TRACE("(%p)\n", this);
6400 this->count = 0;
6402 if(!basic_istream_wchar_sentry_create(this, TRUE)) {
6403 basic_istream_wchar_sentry_destroy(this);
6404 return WEOF;
6407 ret = basic_streambuf_wchar_sbumpc(basic_ios_wchar_rdbuf_get(base));
6408 basic_istream_wchar_sentry_destroy(this);
6409 if(ret == WEOF)
6410 basic_ios_wchar_setstate(base, IOSTATE_eofbit|IOSTATE_failbit);
6411 else
6412 this->count++;
6414 return ret;
6417 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AA_W@Z */
6418 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEA_W@Z */
6419 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_ch, 8)
6420 basic_istream_wchar* __thiscall basic_istream_wchar_get_ch(basic_istream_wchar *this, wchar_t *ch)
6422 unsigned short ret;
6424 TRACE("(%p %p)\n", this, ch);
6426 ret = basic_istream_wchar_get(this);
6427 if(ret != WEOF)
6428 *ch = (wchar_t)ret;
6429 return this;
6432 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH_W@Z */
6433 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J_W@Z */
6434 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_str_delim, 16)
6435 basic_istream_wchar* __thiscall basic_istream_wchar_get_str_delim(basic_istream_wchar *this, wchar_t *str, streamsize count, wchar_t delim)
6437 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6438 unsigned short ch = delim;
6440 TRACE("(%p %p %ld %c)\n", this, str, count, delim);
6442 this->count = 0;
6444 if(basic_istream_wchar_sentry_create(this, TRUE)) {
6445 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6447 for(ch = basic_streambuf_wchar_sgetc(strbuf); count>1;
6448 ch = basic_streambuf_wchar_snextc(strbuf)) {
6449 if(ch==WEOF || ch==delim)
6450 break;
6452 *str++ = ch;
6453 this->count++;
6454 count--;
6457 basic_istream_wchar_sentry_destroy(this);
6459 basic_ios_wchar_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) |
6460 (ch==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit));
6461 if(count > 0)
6462 *str = 0;
6463 return this;
6466 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH@Z */
6467 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z */
6468 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_str, 12)
6469 basic_istream_wchar* __thiscall basic_istream_wchar_get_str(basic_istream_wchar *this, wchar_t *str, streamsize count)
6471 return basic_istream_wchar_get_str_delim(this, str, count, '\n');
6474 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_W@Z */
6475 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_W@Z */
6476 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_streambuf_delim, 12)
6477 basic_istream_wchar* __thiscall basic_istream_wchar_get_streambuf_delim(basic_istream_wchar *this, basic_streambuf_wchar *strbuf, wchar_t delim)
6479 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6480 unsigned short ch = delim;
6482 TRACE("(%p %p %c)\n", this, strbuf, delim);
6484 this->count = 0;
6486 if(basic_istream_wchar_sentry_create(this, TRUE)) {
6487 basic_streambuf_wchar *strbuf_read = basic_ios_wchar_rdbuf_get(base);
6489 for(ch = basic_streambuf_wchar_sgetc(strbuf_read); ;
6490 ch = basic_streambuf_wchar_snextc(strbuf_read)) {
6491 if(ch==WEOF || ch==delim)
6492 break;
6494 if(basic_streambuf_wchar_sputc(strbuf, ch) == WEOF)
6495 break;
6496 this->count++;
6499 basic_istream_wchar_sentry_destroy(this);
6501 basic_ios_wchar_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) |
6502 (ch==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit));
6503 return this;
6506 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z */
6507 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z */
6508 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_streambuf, 8)
6509 basic_istream_wchar* __thiscall basic_istream_wchar_get_streambuf(basic_istream_wchar *this, basic_streambuf_wchar *strbuf)
6511 return basic_istream_wchar_get_streambuf_delim(this, strbuf, '\n');
6514 /* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH_W@Z */
6515 /* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J_W@Z */
6516 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_getline_delim, 16)
6517 basic_istream_wchar* __thiscall basic_istream_wchar_getline_delim(basic_istream_wchar *this, wchar_t *str, streamsize count, wchar_t delim)
6519 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6520 unsigned short ch = delim;
6522 TRACE("(%p %p %ld %c)\n", this, str, count, delim);
6524 this->count = 0;
6526 if(basic_istream_wchar_sentry_create(this, TRUE) && count>0) {
6527 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6529 while(count > 1) {
6530 ch = basic_streambuf_wchar_sbumpc(strbuf);
6532 if(ch==WEOF || ch==delim)
6533 break;
6535 *str++ = ch;
6536 this->count++;
6537 count--;
6540 if(ch == delim)
6541 this->count++;
6542 else if(ch != WEOF) {
6543 ch = basic_streambuf_wchar_sgetc(strbuf);
6545 if(ch == delim) {
6546 basic_streambuf_wchar__Gninc(strbuf);
6547 this->count++;
6551 basic_istream_wchar_sentry_destroy(this);
6553 basic_ios_wchar_setstate(base, (ch==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit) |
6554 (!this->count || (ch!=delim && ch!=WEOF) ? IOSTATE_failbit : IOSTATE_goodbit));
6555 if(count > 0)
6556 *str = 0;
6557 return this;
6560 /* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH@Z */
6561 /* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z */
6562 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_getline, 12)
6563 basic_istream_wchar* __thiscall basic_istream_wchar_getline(basic_istream_wchar *this, wchar_t *str, streamsize count)
6565 return basic_istream_wchar_getline_delim(this, str, count, '\n');
6568 /* ?ignore@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@HG@Z */
6569 /* ?ignore@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JG@Z */
6570 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ignore, 12)
6571 basic_istream_wchar* __thiscall basic_istream_wchar_ignore(basic_istream_wchar *this, streamsize count, unsigned short delim)
6573 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6574 unsigned short ch = delim;
6576 TRACE("(%p %ld %d)\n", this, count, delim);
6578 this->count = 0;
6580 if(basic_istream_wchar_sentry_create(this, TRUE)) {
6581 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6583 while(count > 0) {
6584 ch = basic_streambuf_wchar_sbumpc(strbuf);
6586 if(ch==WEOF || ch==delim)
6587 break;
6589 this->count++;
6590 if(count != INT_MAX)
6591 count--;
6594 basic_istream_wchar_sentry_destroy(this);
6596 if(ch == WEOF)
6597 basic_ios_wchar_setstate(base, IOSTATE_eofbit);
6598 return this;
6601 /* ?peek@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
6602 /* ?peek@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
6603 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_peek, 4)
6604 unsigned short __thiscall basic_istream_wchar_peek(basic_istream_wchar *this)
6606 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6607 unsigned short ret = WEOF;
6609 TRACE("(%p)\n", this);
6611 this->count = 0;
6613 if(basic_istream_wchar_sentry_create(this, TRUE))
6614 ret = basic_streambuf_wchar_sgetc(basic_ios_wchar_rdbuf_get(base));
6615 basic_istream_wchar_sentry_destroy(this);
6616 return ret;
6619 /* ?_Read_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WIH@Z */
6620 /* ?_Read_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_K_J@Z */
6621 DEFINE_THISCALL_WRAPPER(basic_istream_wchar__Read_s, 16)
6622 basic_istream_wchar* __thiscall basic_istream_wchar__Read_s(basic_istream_wchar *this, wchar_t *str, MSVCP_size_t size, streamsize count)
6624 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6625 IOSB_iostate state = IOSTATE_goodbit;
6627 TRACE("(%p %p %lu %ld)\n", this, str, size, count);
6629 if(basic_istream_wchar_sentry_create(this, TRUE)) {
6630 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6632 this->count = basic_streambuf_wchar__Sgetn_s(strbuf, str, size, count);
6633 if(this->count != count)
6634 state |= IOSTATE_failbit | IOSTATE_eofbit;
6635 }else {
6636 this->count = 0;
6638 basic_istream_wchar_sentry_destroy(this);
6640 basic_ios_wchar_setstate(base, state);
6641 return this;
6644 /* ?read@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH@Z */
6645 /* ?read@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z */
6646 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read, 12)
6647 basic_istream_wchar* __thiscall basic_istream_wchar_read(basic_istream_wchar *this, wchar_t *str, streamsize count)
6649 return basic_istream_wchar__Read_s(this, str, count, count);
6652 /* ?_Readsome_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEHPA_WIH@Z */
6653 /* ?_Readsome_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_K_J@Z */
6654 DEFINE_THISCALL_WRAPPER(basic_istream_wchar__Readsome_s, 16)
6655 streamsize __thiscall basic_istream_wchar__Readsome_s(basic_istream_wchar *this, wchar_t *str, MSVCP_size_t size, streamsize count)
6657 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6658 IOSB_iostate state = IOSTATE_goodbit;
6660 TRACE("(%p %p %lu %ld)\n", this, str, size, count);
6662 this->count = 0;
6664 if(basic_istream_wchar_sentry_create(this, TRUE)) {
6665 streamsize avail = basic_streambuf_wchar_in_avail(basic_ios_wchar_rdbuf_get(base));
6666 if(avail > count)
6667 avail = count;
6669 if(avail == -1)
6670 state |= IOSTATE_eofbit;
6671 else if(avail > 0)
6672 basic_istream_wchar__Read_s(this, str, size, avail);
6673 }else {
6674 state |= IOSTATE_failbit;
6676 basic_istream_wchar_sentry_destroy(this);
6678 basic_ios_wchar_setstate(base, state);
6679 return this->count;
6682 /* ?readsome@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEHPA_WH@Z */
6683 /* ?readsome@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_J@Z */
6684 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_readsome, 12)
6685 streamsize __thiscall basic_istream_wchar_readsome(basic_istream_wchar *this, wchar_t *str, streamsize count)
6687 return basic_istream_wchar__Readsome_s(this, str, count, count);
6690 /* ?putback@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_W@Z */
6691 /* ?putback@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_W@Z */
6692 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_putback, 8)
6693 basic_istream_wchar* __thiscall basic_istream_wchar_putback(basic_istream_wchar *this, wchar_t ch)
6695 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6696 IOSB_iostate state = IOSTATE_goodbit;
6698 TRACE("(%p %c)\n", this, ch);
6700 this->count = 0;
6702 if(basic_istream_wchar_sentry_create(this, TRUE)) {
6703 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6705 if(!ios_base_good(&base->base))
6706 state |= IOSTATE_failbit;
6707 else if(!strbuf || basic_streambuf_wchar_sputbackc(strbuf, ch)==WEOF)
6708 state |= IOSTATE_badbit;
6710 basic_istream_wchar_sentry_destroy(this);
6712 basic_ios_wchar_setstate(base, state);
6713 return this;
6716 /* ?unget@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@XZ */
6717 /* ?unget@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@XZ */
6718 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_unget, 4)
6719 basic_istream_wchar* __thiscall basic_istream_wchar_unget(basic_istream_wchar *this)
6721 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6722 IOSB_iostate state = IOSTATE_goodbit;
6724 TRACE("(%p)\n", this);
6726 this->count = 0;
6728 if(basic_istream_wchar_sentry_create(this, TRUE)) {
6729 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6731 if(!ios_base_good(&base->base))
6732 state |= IOSTATE_failbit;
6733 else if(!strbuf || basic_streambuf_wchar_sungetc(strbuf)==WEOF)
6734 state |= IOSTATE_badbit;
6736 basic_istream_wchar_sentry_destroy(this);
6738 basic_ios_wchar_setstate(base, state);
6739 return this;
6742 /* ?sync@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEHXZ */
6743 /* ?sync@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAHXZ */
6744 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_sync, 4)
6745 int __thiscall basic_istream_wchar_sync(basic_istream_wchar *this)
6747 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6748 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6750 TRACE("(%p)\n", this);
6752 if(!strbuf)
6753 return -1;
6755 if(basic_istream_wchar_sentry_create(this, TRUE)) {
6756 if(basic_streambuf_wchar_pubsync(strbuf) != -1) {
6757 basic_istream_wchar_sentry_destroy(this);
6758 return 0;
6761 basic_istream_wchar_sentry_destroy(this);
6763 basic_ios_wchar_setstate(base, IOSTATE_badbit);
6764 return -1;
6767 /* ?tellg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@XZ */
6768 /* ?tellg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
6769 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_tellg, 8)
6770 fpos_int* __thiscall basic_istream_wchar_tellg(basic_istream_wchar *this, fpos_int *ret)
6772 TRACE("(%p %p)\n", this, ret);
6774 if(basic_istream_wchar_sentry_create(this, TRUE)) {
6775 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6776 if(!ios_base_fail(&base->base)) {
6777 basic_streambuf_wchar_pubseekoff(basic_ios_wchar_rdbuf_get(base),
6778 ret, 0, SEEKDIR_cur, OPENMODE_in);
6779 basic_istream_wchar_sentry_destroy(this);
6781 if(ret->off==0 && ret->pos==-1 && ret->state==0)
6782 basic_ios_wchar_setstate(base, IOSTATE_failbit);
6783 return ret;
6786 basic_istream_wchar_sentry_destroy(this);
6788 ret->off = 0;
6789 ret->pos = -1;
6790 ret->state = 0;
6791 return ret;
6794 /* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@JH@Z */
6795 /* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JH@Z */
6796 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_seekg, 12)
6797 basic_istream_wchar* __thiscall basic_istream_wchar_seekg(basic_istream_wchar *this, streamoff off, int dir)
6799 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6801 TRACE("(%p %ld %d)\n", this, off, dir);
6803 if(basic_istream_wchar_sentry_create(this, TRUE)) {
6804 if(!ios_base_fail(&base->base)) {
6805 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6806 fpos_int ret;
6808 basic_streambuf_wchar_pubseekoff(strbuf, &ret, off, dir, OPENMODE_in);
6809 basic_istream_wchar_sentry_destroy(this);
6811 if(ret.off==0 && ret.pos==-1 && ret.state==0)
6812 basic_ios_wchar_setstate(base, IOSTATE_failbit);
6813 else
6814 basic_ios_wchar_clear(base, IOSTATE_goodbit);
6815 return this;
6818 basic_istream_wchar_sentry_destroy(this);
6820 basic_ios_wchar_setstate(base, IOSTATE_failbit);
6821 return this;
6824 /* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
6825 /* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
6826 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_seekg_fpos, 28)
6827 basic_istream_wchar* __thiscall basic_istream_wchar_seekg_fpos(basic_istream_wchar *this, fpos_int pos)
6829 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6831 TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos));
6833 if(basic_istream_wchar_sentry_create(this, TRUE)) {
6834 if(!ios_base_fail(&base->base)) {
6835 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6836 fpos_int ret;
6838 basic_streambuf_wchar_pubseekpos(strbuf, &ret, pos, OPENMODE_in);
6839 basic_istream_wchar_sentry_destroy(this);
6841 if(ret.off==0 && ret.pos==-1 && ret.state==0)
6842 basic_ios_wchar_setstate(base, IOSTATE_failbit);
6843 else
6844 basic_ios_wchar_clear(base, IOSTATE_goodbit);
6845 return this;
6848 basic_istream_wchar_sentry_destroy(this);
6850 basic_ios_wchar_setstate(base, IOSTATE_failbit);
6851 return this;
6854 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAF@Z */
6855 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAF@Z */
6856 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_short, 8)
6857 basic_istream_wchar* __thiscall basic_istream_wchar_read_short(basic_istream_wchar *this, short *v)
6859 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6860 int state = IOSTATE_goodbit;
6862 TRACE("(%p %p)\n", this, v);
6864 if(basic_istream_wchar_sentry_create(this, FALSE)) {
6865 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6866 const num_get *numget = num_get_wchar_use_facet(strbuf->loc);
6867 istreambuf_iterator_wchar first={0}, last={0};
6868 LONG tmp;
6870 first.strbuf = strbuf;
6871 num_get_wchar_get_long(numget, &last, first, last, &base->base, &state, &tmp);
6873 if(!(state&IOSTATE_failbit) && tmp==(LONG)((short)tmp))
6874 *v = tmp;
6875 else
6876 state |= IOSTATE_failbit;
6878 basic_istream_wchar_sentry_destroy(this);
6880 basic_ios_wchar_setstate(base, state);
6881 return this;
6884 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAG@Z */
6885 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAG@Z */
6886 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_ushort, 8)
6887 basic_istream_wchar* __thiscall basic_istream_wchar_read_ushort(basic_istream_wchar *this, unsigned short *v)
6889 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6890 int state = IOSTATE_goodbit;
6892 TRACE("(%p %p)\n", this, v);
6894 if(basic_istream_wchar_sentry_create(this, FALSE)) {
6895 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6896 const num_get *numget = num_get_wchar_use_facet(strbuf->loc);
6897 istreambuf_iterator_wchar first={0}, last={0};
6899 first.strbuf = strbuf;
6900 num_get_wchar_get_ushort(numget, &last, first, last, &base->base, &state, v);
6902 basic_istream_wchar_sentry_destroy(this);
6904 basic_ios_wchar_setstate(base, state);
6905 return this;
6908 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAH@Z */
6909 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAH@Z */
6910 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_int, 8)
6911 basic_istream_wchar* __thiscall basic_istream_wchar_read_int(basic_istream_wchar *this, int *v)
6913 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6914 int state = IOSTATE_goodbit;
6916 TRACE("(%p %p)\n", this, v);
6918 if(basic_istream_wchar_sentry_create(this, FALSE)) {
6919 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6920 const num_get *numget = num_get_wchar_use_facet(strbuf->loc);
6921 istreambuf_iterator_wchar first={0}, last={0};
6923 first.strbuf = strbuf;
6924 num_get_wchar_get_long(numget, &last, first, last, &base->base, &state, v);
6926 basic_istream_wchar_sentry_destroy(this);
6928 basic_ios_wchar_setstate(base, state);
6929 return this;
6932 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAI@Z */
6933 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAI@Z */
6934 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_uint, 8)
6935 basic_istream_wchar* __thiscall basic_istream_wchar_read_uint(basic_istream_wchar *this, unsigned int *v)
6937 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6938 int state = IOSTATE_goodbit;
6940 TRACE("(%p %p)\n", this, v);
6942 if(basic_istream_wchar_sentry_create(this, FALSE)) {
6943 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6944 const num_get *numget = num_get_wchar_use_facet(strbuf->loc);
6945 istreambuf_iterator_wchar first={0}, last={0};
6947 first.strbuf = strbuf;
6948 num_get_wchar_get_uint(numget, &last, first, last, &base->base, &state, v);
6950 basic_istream_wchar_sentry_destroy(this);
6952 basic_ios_wchar_setstate(base, state);
6953 return this;
6956 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAJ@Z */
6957 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAJ@Z */
6958 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_long, 8)
6959 basic_istream_wchar* __thiscall basic_istream_wchar_read_long(basic_istream_wchar *this, LONG *v)
6961 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6962 int state = IOSTATE_goodbit;
6964 TRACE("(%p %p)\n", this, v);
6966 if(basic_istream_wchar_sentry_create(this, FALSE)) {
6967 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6968 const num_get *numget = num_get_wchar_use_facet(strbuf->loc);
6969 istreambuf_iterator_wchar first={0}, last={0};
6971 first.strbuf = strbuf;
6972 num_get_wchar_get_long(numget, &last, first, last, &base->base, &state, v);
6974 basic_istream_wchar_sentry_destroy(this);
6976 basic_ios_wchar_setstate(base, state);
6977 return this;
6980 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAK@Z */
6981 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAK@Z */
6982 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_ulong, 8)
6983 basic_istream_wchar* __thiscall basic_istream_wchar_read_ulong(basic_istream_wchar *this, ULONG *v)
6985 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
6986 int state = IOSTATE_goodbit;
6988 TRACE("(%p %p)\n", this, v);
6990 if(basic_istream_wchar_sentry_create(this, FALSE)) {
6991 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6992 const num_get *numget = num_get_wchar_use_facet(strbuf->loc);
6993 istreambuf_iterator_wchar first={0}, last={0};
6995 first.strbuf = strbuf;
6996 num_get_wchar_get_ulong(numget, &last, first, last, &base->base, &state, v);
6998 basic_istream_wchar_sentry_destroy(this);
7000 basic_ios_wchar_setstate(base, state);
7001 return this;
7004 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAM@Z */
7005 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAM@Z */
7006 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_float, 8)
7007 basic_istream_wchar* __thiscall basic_istream_wchar_read_float(basic_istream_wchar *this, float *v)
7009 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7010 int state = IOSTATE_goodbit;
7012 TRACE("(%p %p)\n", this, v);
7014 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7015 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7016 const num_get *numget = num_get_wchar_use_facet(strbuf->loc);
7017 istreambuf_iterator_wchar first={0}, last={0};
7019 first.strbuf = strbuf;
7020 num_get_wchar_get_float(numget, &last, first, last, &base->base, &state, v);
7022 basic_istream_wchar_sentry_destroy(this);
7024 basic_ios_wchar_setstate(base, state);
7025 return this;
7028 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAN@Z */
7029 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAN@Z */
7030 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_double, 8)
7031 basic_istream_wchar* __thiscall basic_istream_wchar_read_double(basic_istream_wchar *this, double *v)
7033 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7034 int state = IOSTATE_goodbit;
7036 TRACE("(%p %p)\n", this, v);
7038 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7039 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7040 const num_get *numget = num_get_wchar_use_facet(strbuf->loc);
7041 istreambuf_iterator_wchar first={0}, last={0};
7043 first.strbuf = strbuf;
7044 num_get_wchar_get_double(numget, &last, first, last, &base->base, &state, v);
7046 basic_istream_wchar_sentry_destroy(this);
7048 basic_ios_wchar_setstate(base, state);
7049 return this;
7052 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAO@Z */
7053 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAO@Z */
7054 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_ldouble, 8)
7055 basic_istream_wchar* __thiscall basic_istream_wchar_read_ldouble(basic_istream_wchar *this, double *v)
7057 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7058 int state = IOSTATE_goodbit;
7060 TRACE("(%p %p)\n", this, v);
7062 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7063 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7064 const num_get *numget = num_get_wchar_use_facet(strbuf->loc);
7065 istreambuf_iterator_wchar first={0}, last={0};
7067 first.strbuf = strbuf;
7068 num_get_wchar_get_ldouble(numget, &last, first, last, &base->base, &state, v);
7070 basic_istream_wchar_sentry_destroy(this);
7072 basic_ios_wchar_setstate(base, state);
7073 return this;
7076 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAPAX@Z */
7077 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAPEAX@Z */
7078 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_ptr, 8)
7079 basic_istream_wchar* __thiscall basic_istream_wchar_read_ptr(basic_istream_wchar *this, void **v)
7081 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7082 int state = IOSTATE_goodbit;
7084 TRACE("(%p %p)\n", this, v);
7086 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7087 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7088 const num_get *numget = num_get_wchar_use_facet(strbuf->loc);
7089 istreambuf_iterator_wchar first={0}, last={0};
7091 first.strbuf = strbuf;
7092 num_get_wchar_get_void(numget, &last, first, last, &base->base, &state, v);
7094 basic_istream_wchar_sentry_destroy(this);
7096 basic_ios_wchar_setstate(base, state);
7097 return this;
7100 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_J@Z */
7101 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_J@Z */
7102 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_int64, 8)
7103 basic_istream_wchar* __thiscall basic_istream_wchar_read_int64(basic_istream_wchar *this, __int64 *v)
7105 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7106 int state = IOSTATE_goodbit;
7108 TRACE("(%p %p)\n", this, v);
7110 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7111 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7112 const num_get *numget = num_get_wchar_use_facet(strbuf->loc);
7113 istreambuf_iterator_wchar first={0}, last={0};
7115 first.strbuf = strbuf;
7116 num_get_wchar_get_int64(numget, &last, first, last, &base->base, &state, v);
7118 basic_istream_wchar_sentry_destroy(this);
7120 basic_ios_wchar_setstate(base, state);
7121 return this;
7124 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_K@Z */
7125 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_K@Z */
7126 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_uint64, 8)
7127 basic_istream_wchar* __thiscall basic_istream_wchar_read_uint64(basic_istream_wchar *this, unsigned __int64 *v)
7129 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7130 int state = IOSTATE_goodbit;
7132 TRACE("(%p %p)\n", this, v);
7134 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7135 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7136 const num_get *numget = num_get_wchar_use_facet(strbuf->loc);
7137 istreambuf_iterator_wchar first={0}, last={0};
7139 first.strbuf = strbuf;
7140 num_get_wchar_get_uint64(numget, &last, first, last, &base->base, &state, v);
7142 basic_istream_wchar_sentry_destroy(this);
7144 basic_ios_wchar_setstate(base, state);
7145 return this;
7148 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AA_N@Z */
7149 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEA_N@Z */
7150 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_bool, 8)
7151 basic_istream_wchar* __thiscall basic_istream_wchar_read_bool(basic_istream_wchar *this, MSVCP_bool *v)
7153 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7154 int state = IOSTATE_goodbit;
7156 TRACE("(%p %p)\n", this, v);
7158 if(basic_istream_wchar_sentry_create(this, FALSE)) {
7159 basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7160 const num_get *numget = num_get_wchar_use_facet(strbuf->loc);
7161 istreambuf_iterator_wchar first={0}, last={0};
7163 first.strbuf = strbuf;
7164 num_get_wchar_get_bool(numget, &last, first, last, &base->base, &state, v);
7166 basic_istream_wchar_sentry_destroy(this);
7168 basic_ios_wchar_setstate(base, state);
7169 return this;
7172 /* ??$getline@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AAV10@AAV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@_W@Z */
7173 /* ??$getline@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@YAAEAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AEAV10@AEAV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@_W@Z */
7174 basic_istream_wchar* __cdecl basic_istream_wchar_getline_bstr_delim(
7175 basic_istream_wchar *istream, basic_string_wchar *str, wchar_t delim)
7177 IOSB_iostate state = IOSTATE_failbit;
7178 int c = delim;
7180 TRACE("(%p %p %c)\n", istream, str, delim);
7182 if(basic_istream_wchar_sentry_create(istream, TRUE)) {
7183 MSVCP_basic_string_wchar_clear(str);
7185 for(c = basic_istream_wchar_get(istream); c!=delim && c!=WEOF;
7186 c = basic_istream_wchar_get(istream)) {
7187 state = IOSTATE_goodbit;
7188 MSVCP_basic_string_wchar_append_ch(str, c);
7191 basic_istream_wchar_sentry_destroy(istream);
7193 basic_ios_wchar_setstate(basic_istream_wchar_get_basic_ios(istream),
7194 state | (c==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit));
7195 return istream;
7198 /* ??$getline@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AAV10@AAV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@@Z */
7199 /* ??$getline@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@YAAEAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AEAV10@AEAV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@@Z */
7200 basic_istream_wchar* __cdecl basic_istream_wchar_getline_bstr(
7201 basic_istream_wchar *istream, basic_string_wchar *str)
7203 return basic_istream_wchar_getline_bstr_delim(istream, str, '\n');
7206 /* ??$?5_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AAV10@AAV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@@Z */
7207 /* ??$?5_WU?$char_traits@_W@std@@V?$allocator@_W@1@@std@@YAAEAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AEAV10@AEAV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@0@@Z */
7208 basic_istream_wchar* __cdecl basic_istream_wchar_get_bstr(
7209 basic_istream_wchar *istream, basic_string_wchar *str)
7211 IOSB_iostate state = IOSTATE_failbit;
7212 int c = '\n';
7214 TRACE("(%p %p)\n", istream, str);
7216 if(basic_istream_wchar_sentry_create(istream, FALSE)) {
7217 basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istream);
7218 const ctype_wchar *ctype = ctype_wchar_use_facet(base->strbuf->loc);
7220 MSVCP_basic_string_wchar_clear(str);
7222 for(c = basic_streambuf_wchar_sgetc(basic_ios_wchar_rdbuf_get(base));
7223 c!=WEOF && !ctype_wchar_is_ch(ctype, _SPACE|_BLANK, c);
7224 c = basic_streambuf_wchar_snextc(basic_ios_wchar_rdbuf_get(base))) {
7225 state = IOSTATE_goodbit;
7226 MSVCP_basic_string_wchar_append_ch(str, c);
7229 basic_istream_wchar_sentry_destroy(istream);
7231 basic_ios_wchar_setstate(basic_istream_wchar_get_basic_ios(istream),
7232 state | (c==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit));
7233 return istream;
7236 /* ??$?5_WU?$char_traits@_W@std@@@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AAV10@AA_W@Z */
7237 /* ??$?5_WU?$char_traits@_W@std@@@std@@YAAEAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AEAV10@AEA_W@Z */
7238 basic_istream_wchar* __cdecl basic_istream_wchar_read_ch(basic_istream_wchar *istream, wchar_t *ch)
7240 IOSB_iostate state = IOSTATE_failbit;
7241 unsigned short c = 0;
7243 TRACE("(%p %p)\n", istream, ch);
7245 if(basic_istream_wchar_sentry_create(istream, FALSE)) {
7246 c = basic_streambuf_wchar_sbumpc(basic_ios_wchar_rdbuf_get(
7247 basic_istream_wchar_get_basic_ios(istream)));
7248 if(c != WEOF) {
7249 state = IOSTATE_goodbit;
7250 *ch = c;
7253 basic_istream_wchar_sentry_destroy(istream);
7255 basic_ios_wchar_setstate(basic_istream_wchar_get_basic_ios(istream),
7256 state | (c==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit));
7257 return istream;
7260 /* ??0?$basic_iostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
7261 /* ??0?$basic_iostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
7262 DEFINE_THISCALL_WRAPPER(basic_iostream_char_ctor, 12)
7263 basic_iostream_char* __thiscall basic_iostream_char_ctor(basic_iostream_char *this, basic_streambuf_char *strbuf, MSVCP_bool virt_init)
7265 basic_ios_char *basic_ios;
7267 TRACE("(%p %p %d)\n", this, strbuf, virt_init);
7269 if(virt_init) {
7270 this->base1.vbtable = basic_iostream_char_vbtable1;
7271 this->base2.vbtable = basic_iostream_char_vbtable2;
7272 basic_ios = basic_istream_char_get_basic_ios(&this->base1);
7273 basic_ios_char_ctor(basic_ios);
7274 }else {
7275 basic_ios = basic_istream_char_get_basic_ios(&this->base1);
7278 basic_ios->base.vtable = &MSVCP_basic_iostream_char_vtable;
7280 basic_istream_char_ctor(&this->base1, strbuf, FALSE, FALSE);
7281 basic_ostream_char_ctor_uninitialized(&this->base2, 0, FALSE, FALSE);
7282 return this;
7285 /* ??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UAE@XZ */
7286 /* ??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UEAA@XZ */
7287 DEFINE_THISCALL_WRAPPER(basic_iostream_char_dtor, 4)
7288 void __thiscall basic_iostream_char_dtor(basic_iostream_char *this)
7290 TRACE("(%p)\n", this);
7291 basic_ostream_char_dtor(&this->base2);
7292 basic_istream_char_dtor(&this->base1);
7295 /* ??_D?$basic_iostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
7296 /* ??_D?$basic_iostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
7297 DEFINE_THISCALL_WRAPPER(basic_iostream_char_vbase_dtor, 4)
7298 void __thiscall basic_iostream_char_vbase_dtor(basic_iostream_char *this)
7300 TRACE("(%p)\n", this);
7301 basic_iostream_char_dtor(this);
7302 basic_ios_char_dtor(basic_istream_char_get_basic_ios(&this->base1));
7305 DEFINE_THISCALL_WRAPPER(MSVCP_basic_iostream_char_vector_dtor, 8)
7306 basic_iostream_char* __thiscall MSVCP_basic_iostream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
7308 basic_iostream_char *this = (basic_iostream_char *)((char*)base - basic_iostream_char_vbtable1[1] + basic_iostream_char_vbtable1[0]);
7310 TRACE("(%p %x)\n", this, flags);
7312 if(flags & 2) {
7313 /* we have an array, with the number of elements stored before the first object */
7314 int i, *ptr = (int *)this-1;
7316 for(i=*ptr-1; i>=0; i--)
7317 basic_iostream_char_vbase_dtor(this+i);
7318 MSVCRT_operator_delete(ptr);
7319 } else {
7320 basic_iostream_char_vbase_dtor(this);
7321 if(flags & 1)
7322 MSVCRT_operator_delete(this);
7325 return this;
7328 /* ??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
7329 /* ??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
7330 DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_ctor, 12)
7331 basic_iostream_wchar* __thiscall basic_iostream_wchar_ctor(basic_iostream_wchar *this, basic_streambuf_wchar *strbuf, MSVCP_bool virt_init)
7333 basic_ios_wchar *basic_ios;
7335 TRACE("(%p %p %d)\n", this, strbuf, virt_init);
7337 if(virt_init) {
7338 this->base1.vbtable = basic_iostream_wchar_vbtable1;
7339 this->base2.vbtable = basic_iostream_wchar_vbtable2;
7340 basic_ios = basic_istream_wchar_get_basic_ios(&this->base1);
7341 basic_ios_wchar_ctor(basic_ios);
7342 }else {
7343 basic_ios = basic_istream_wchar_get_basic_ios(&this->base1);
7346 basic_ios->base.vtable = &MSVCP_basic_iostream_wchar_vtable;
7348 basic_istream_wchar_ctor(&this->base1, strbuf, FALSE, FALSE);
7349 basic_ostream_wchar_ctor_uninitialized(&this->base2, 0, FALSE, FALSE);
7350 return this;
7353 /* ??1?$basic_iostream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
7354 /* ??1?$basic_iostream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
7355 DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_dtor, 4)
7356 void __thiscall basic_iostream_wchar_dtor(basic_iostream_wchar *this)
7358 TRACE("(%p)\n", this);
7359 basic_ostream_wchar_dtor(&this->base2);
7360 basic_istream_wchar_dtor(&this->base1);
7363 /* ??_D?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
7364 /* ??_D?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
7365 DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_vbase_dtor, 4)
7366 void __thiscall basic_iostream_wchar_vbase_dtor(basic_iostream_wchar *this)
7368 TRACE("(%p)\n", this);
7369 basic_iostream_wchar_dtor(this);
7370 basic_ios_wchar_dtor(basic_istream_wchar_get_basic_ios(&this->base1));
7373 DEFINE_THISCALL_WRAPPER(MSVCP_basic_iostream_wchar_vector_dtor, 8)
7374 basic_iostream_wchar* __thiscall MSVCP_basic_iostream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags)
7376 basic_iostream_wchar *this = (basic_iostream_wchar *)((char*)base - basic_iostream_wchar_vbtable1[1] + basic_iostream_wchar_vbtable1[0]);
7378 TRACE("(%p %x)\n", this, flags);
7380 if(flags & 2) {
7381 /* we have an array, with the number of elements stored before the first object */
7382 int i, *ptr = (int *)this-1;
7384 for(i=*ptr-1; i>=0; i--)
7385 basic_iostream_wchar_vbase_dtor(this+i);
7386 MSVCRT_operator_delete(ptr);
7387 } else {
7388 basic_iostream_wchar_vbase_dtor(this);
7389 if(flags & 1)
7390 MSVCRT_operator_delete(this);
7393 return this;
7396 /* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAE@XZ */
7397 /* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAA@XZ */
7398 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_ctor, 8)
7399 basic_ofstream_char* __thiscall basic_ofstream_char_ctor(basic_ofstream_char *this, MSVCP_bool virt_init)
7401 basic_ios_char *basic_ios;
7403 TRACE("(%p %d)\n", this, virt_init);
7405 if(virt_init) {
7406 this->base.vbtable = basic_ofstream_char_vbtable;
7407 basic_ios = basic_ostream_char_get_basic_ios(&this->base);
7408 basic_ios_char_ctor(basic_ios);
7409 }else {
7410 basic_ios = basic_ostream_char_get_basic_ios(&this->base);
7413 basic_filebuf_char_ctor(&this->filebuf);
7414 basic_ostream_char_ctor(&this->base, &this->filebuf.base, FALSE, FALSE);
7415 basic_ios->base.vtable = &MSVCP_basic_ofstream_char_vtable;
7416 return this;
7419 /* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAE@PAU_iobuf@@@Z */
7420 /* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAA@PEAU_iobuf@@@Z */
7421 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_ctor_file, 12)
7422 basic_ofstream_char* __thiscall basic_ofstream_char_ctor_file(
7423 basic_ofstream_char *this, FILE *file, MSVCP_bool virt_init)
7425 basic_ios_char *basic_ios;
7427 TRACE("(%p %p %d)\n", this, file, virt_init);
7429 if(virt_init) {
7430 this->base.vbtable = basic_ofstream_char_vbtable;
7431 basic_ios = basic_ostream_char_get_basic_ios(&this->base);
7432 basic_ios_char_ctor(basic_ios);
7433 }else {
7434 basic_ios = basic_ostream_char_get_basic_ios(&this->base);
7437 basic_filebuf_char_ctor_file(&this->filebuf, file);
7438 basic_ostream_char_ctor(&this->base, &this->filebuf.base, FALSE, FALSE);
7439 basic_ios->base.vtable = &MSVCP_basic_ofstream_char_vtable;
7440 return this;
7443 /* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAE@PBDHH@Z */
7444 /* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAA@PEBDHH@Z */
7445 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_ctor_name, 20)
7446 basic_ofstream_char* __thiscall basic_ofstream_char_ctor_name(basic_ofstream_char *this,
7447 const char *name, int mode, int prot, MSVCP_bool virt_init)
7449 TRACE("(%p %s %d %d %d)\n", this, name, mode, prot, virt_init);
7451 basic_ofstream_char_ctor(this, virt_init);
7453 if(!basic_filebuf_char_open(&this->filebuf, name, mode|OPENMODE_out, prot)) {
7454 basic_ios_char *basic_ios = basic_ostream_char_get_basic_ios(&this->base);
7455 basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
7457 return this;
7460 /* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAE@PBGHH@Z */
7461 /* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAA@PEBGHH@Z */
7462 /* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAE@PB_WHH@Z */
7463 /* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAA@PEB_WHH@Z */
7464 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_ctor_name_wchar, 20)
7465 basic_ofstream_char* __thiscall basic_ofstream_char_ctor_name_wchar(basic_ofstream_char *this,
7466 const wchar_t *name, int mode, int prot, MSVCP_bool virt_init)
7468 TRACE("(%p %s %d %d %d)\n", this, debugstr_w(name), mode, prot, virt_init);
7470 basic_ofstream_char_ctor(this, virt_init);
7472 if(!basic_filebuf_char_open_wchar(&this->filebuf, name, mode|OPENMODE_out, prot)) {
7473 basic_ios_char *basic_ios = basic_ostream_char_get_basic_ios(&this->base);
7474 basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
7476 return this;
7479 /* ??1?$basic_ofstream@DU?$char_traits@D@std@@@std@@UAE@XZ */
7480 /* ??1?$basic_ofstream@DU?$char_traits@D@std@@@std@@UEAA@XZ */
7481 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_dtor, 4)
7482 void __thiscall basic_ofstream_char_dtor(basic_ofstream_char *this)
7484 TRACE("(%p)\n", this);
7486 basic_ostream_char_dtor(&this->base);
7487 basic_filebuf_char_dtor(&this->filebuf);
7490 /* ??_D?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXXZ */
7491 /* ??_D?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
7492 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_vbase_dtor, 4)
7493 void __thiscall basic_ofstream_char_vbase_dtor(basic_ofstream_char *this)
7495 TRACE("(%p)\n", this);
7497 basic_ofstream_char_dtor(this);
7498 basic_ios_char_dtor(basic_ostream_char_get_basic_ios(&this->base));
7501 DEFINE_THISCALL_WRAPPER(MSVCP_basic_ofstream_char_vector_dtor, 8)
7502 basic_ofstream_char* __thiscall MSVCP_basic_ofstream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
7504 basic_ofstream_char *this = (basic_ofstream_char *)((char*)base - basic_ofstream_char_vbtable[1] + basic_ofstream_char_vbtable[0]);
7506 TRACE("(%p %x)\n", this, flags);
7508 if(flags & 2) {
7509 /* we have an array, with the number of elements stored before the first object */
7510 int i, *ptr = (int *)this-1;
7512 for(i=*ptr-1; i>=0; i--)
7513 basic_ofstream_char_vbase_dtor(this+i);
7514 MSVCRT_operator_delete(ptr);
7515 } else {
7516 basic_ofstream_char_vbase_dtor(this);
7517 if(flags & 1)
7518 MSVCRT_operator_delete(this);
7521 return this;
7524 /* ?close@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXXZ */
7525 /* ?close@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
7526 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_close, 4)
7527 void __thiscall basic_ofstream_char_close(basic_ofstream_char *this)
7529 TRACE("(%p)\n", this);
7531 if(!basic_filebuf_char_close(&this->filebuf)) {
7532 basic_ios_char *basic_ios = basic_ostream_char_get_basic_ios(&this->base);
7533 basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
7537 /* ?is_open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QBE_NXZ */
7538 /* ?is_open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEBA_NXZ */
7539 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_is_open, 4)
7540 MSVCP_bool __thiscall basic_ofstream_char_is_open(const basic_ofstream_char *this)
7542 TRACE("(%p)\n", this);
7543 return basic_filebuf_char_is_open(&this->filebuf);
7546 /* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXPBDHH@Z */
7547 /* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDHH@Z */
7548 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_open, 16)
7549 void __thiscall basic_ofstream_char_open(basic_ofstream_char *this,
7550 const char *name, int mode, int prot)
7552 TRACE("(%p %s %d %d)\n", this, name, mode, prot);
7554 if(!basic_filebuf_char_open(&this->filebuf, name, mode|OPENMODE_out, prot)) {
7555 basic_ios_char *basic_ios = basic_ostream_char_get_basic_ios(&this->base);
7556 basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
7560 /* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXPBDI@Z */
7561 /* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDI@Z */
7562 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_open_old, 12)
7563 void __thiscall basic_ofstream_char_open_old(basic_ofstream_char *this,
7564 const char *name, unsigned int mode)
7566 basic_ofstream_char_open(this, name, mode, _SH_DENYNO);
7569 /* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXPBGHH@Z */
7570 /* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAAXPEBGHH@Z */
7571 /* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXPB_WHH@Z */
7572 /* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAAXPEB_WHH@Z */
7573 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_open_wchar, 16)
7574 void __thiscall basic_ofstream_char_open_wchar(basic_ofstream_char *this,
7575 const wchar_t *name, int mode, int prot)
7577 TRACE("(%p %s %d %d)\n", this, debugstr_w(name), mode, prot);
7579 if(!basic_filebuf_char_open_wchar(&this->filebuf, name, mode|OPENMODE_out, prot)) {
7580 basic_ios_char *basic_ios = basic_ostream_char_get_basic_ios(&this->base);
7581 basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
7585 /* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXPBGI@Z */
7586 /* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAAXPEBGI@Z */
7587 /* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXPB_WI@Z */
7588 /* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAAXPEB_WI@Z */
7589 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_open_wchar_old, 12)
7590 void __thiscall basic_ofstream_char_open_wchar_old(basic_ofstream_char *this,
7591 const wchar_t *name, unsigned int mode)
7593 basic_ofstream_char_open_wchar(this, name, mode, _SH_DENYNO);
7596 /* ?rdbuf@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ */
7597 /* ?rdbuf@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ */
7598 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_rdbuf, 4)
7599 basic_filebuf_char* __thiscall basic_ofstream_char_rdbuf(const basic_ofstream_char *this)
7601 TRACE("(%p)\n", this);
7602 return (basic_filebuf_char*)&this->filebuf;
7605 /* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAE@XZ */
7606 /* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAA@XZ */
7607 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_ctor, 8)
7608 basic_ifstream_char* __thiscall basic_ifstream_char_ctor(basic_ifstream_char *this, MSVCP_bool virt_init)
7610 basic_ios_char *basic_ios;
7612 TRACE("(%p %d)\n", this, virt_init);
7614 if(virt_init) {
7615 this->base.vbtable = basic_ifstream_char_vbtable;
7616 basic_ios = basic_istream_char_get_basic_ios(&this->base);
7617 basic_ios_char_ctor(basic_ios);
7618 }else {
7619 basic_ios = basic_istream_char_get_basic_ios(&this->base);
7622 basic_filebuf_char_ctor(&this->filebuf);
7623 basic_istream_char_ctor(&this->base, &this->filebuf.base, FALSE, FALSE);
7624 basic_ios->base.vtable = &MSVCP_basic_ifstream_char_vtable;
7625 return this;
7628 /* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAE@PAU_iobuf@@@Z */
7629 /* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAA@PEAU_iobuf@@@Z */
7630 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_ctor_file, 12)
7631 basic_ifstream_char* __thiscall basic_ifstream_char_ctor_file(
7632 basic_ifstream_char *this, FILE *file, MSVCP_bool virt_init)
7634 basic_ios_char *basic_ios;
7636 TRACE("(%p %p %d)\n", this, file, virt_init);
7638 if(virt_init) {
7639 this->base.vbtable = basic_ifstream_char_vbtable;
7640 basic_ios = basic_istream_char_get_basic_ios(&this->base);
7641 basic_ios_char_ctor(basic_ios);
7642 }else {
7643 basic_ios = basic_istream_char_get_basic_ios(&this->base);
7646 basic_filebuf_char_ctor_file(&this->filebuf, file);
7647 basic_istream_char_ctor(&this->base, &this->filebuf.base, FALSE, FALSE);
7648 basic_ios->base.vtable = &MSVCP_basic_ifstream_char_vtable;
7649 return this;
7652 /* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAE@PBDHH@Z */
7653 /* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAA@PEBDHH@Z */
7654 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_ctor_name, 20)
7655 basic_ifstream_char* __thiscall basic_ifstream_char_ctor_name(basic_ifstream_char *this,
7656 const char *name, int mode, int prot, MSVCP_bool virt_init)
7658 TRACE("(%p %s %d %d %d)\n", this, name, mode, prot, virt_init);
7660 basic_ifstream_char_ctor(this, virt_init);
7662 if(!basic_filebuf_char_open(&this->filebuf, name, mode|OPENMODE_in, prot)) {
7663 basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base);
7664 basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
7666 return this;
7669 /* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAE@PBGHH@Z */
7670 /* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAA@PEBGHH@Z */
7671 /* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAE@PB_WHH@Z */
7672 /* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAA@PEB_WHH@Z */
7673 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_ctor_name_wchar, 20)
7674 basic_ifstream_char* __thiscall basic_ifstream_char_ctor_name_wchar(basic_ifstream_char *this,
7675 const wchar_t *name, int mode, int prot, MSVCP_bool virt_init)
7677 TRACE("(%p %s %d %d %d)\n", this, debugstr_w(name), mode, prot, virt_init);
7679 basic_ifstream_char_ctor(this, virt_init);
7681 if(!basic_filebuf_char_open_wchar(&this->filebuf, name, mode|OPENMODE_in, prot)) {
7682 basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base);
7683 basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
7685 return this;
7688 /* ??1?$basic_ifstream@DU?$char_traits@D@std@@@std@@UAE@XZ */
7689 /* ??1?$basic_ifstream@DU?$char_traits@D@std@@@std@@UEAA@XZ */
7690 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_dtor, 4)
7691 void __thiscall basic_ifstream_char_dtor(basic_ifstream_char *this)
7693 TRACE("(%p)\n", this);
7695 basic_istream_char_dtor(&this->base);
7696 basic_filebuf_char_dtor(&this->filebuf);
7699 /* ??_D?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAEXXZ */
7700 /* ??_D?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
7701 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_vbase_dtor, 4)
7702 void __thiscall basic_ifstream_char_vbase_dtor(basic_ifstream_char *this)
7704 TRACE("(%p)\n", this);
7706 basic_ifstream_char_dtor(this);
7707 basic_ios_char_dtor(basic_istream_char_get_basic_ios(&this->base));
7710 DEFINE_THISCALL_WRAPPER(MSVCP_basic_ifstream_char_vector_dtor, 8)
7711 basic_ifstream_char* __thiscall MSVCP_basic_ifstream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
7713 basic_ifstream_char *this = (basic_ifstream_char *)((char*)base - basic_ifstream_char_vbtable[1] + basic_ifstream_char_vbtable[0]);
7715 TRACE("(%p %x)\n", this, flags);
7717 if(flags & 2) {
7718 /* we have an array, with the number of elements stored before the first object */
7719 int i, *ptr = (int *)this-1;
7721 for(i=*ptr-1; i>=0; i--)
7722 basic_ifstream_char_vbase_dtor(this+i);
7723 MSVCRT_operator_delete(ptr);
7724 } else {
7725 basic_ifstream_char_vbase_dtor(this);
7726 if(flags & 1)
7727 MSVCRT_operator_delete(this);
7730 return this;
7733 /* ?close@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAEXXZ */
7734 /* ?close@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
7735 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_close, 4)
7736 void __thiscall basic_ifstream_char_close(basic_ifstream_char *this)
7738 TRACE("(%p)\n", this);
7740 if(!basic_filebuf_char_close(&this->filebuf)) {
7741 basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base);
7742 basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
7746 /* ?is_open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QBE_NXZ */
7747 /* ?is_open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEBA_NXZ */
7748 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_is_open, 4)
7749 MSVCP_bool __thiscall basic_ifstream_char_is_open(const basic_ifstream_char *this)
7751 TRACE("(%p)\n", this);
7752 return basic_filebuf_char_is_open(&this->filebuf);
7755 /* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAEXPBDHH@Z */
7756 /* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDHH@Z */
7757 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_open, 16)
7758 void __thiscall basic_ifstream_char_open(basic_ifstream_char *this,
7759 const char *name, int mode, int prot)
7761 TRACE("(%p %s %d %d)\n", this, name, mode, prot);
7763 if(!basic_filebuf_char_open(&this->filebuf, name, mode|OPENMODE_in, prot)) {
7764 basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base);
7765 basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
7769 /* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAEXPBDI@Z */
7770 /* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDI@Z */
7771 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_open_old, 12)
7772 void __thiscall basic_ifstream_char_open_old(basic_ifstream_char *this,
7773 const char *name, unsigned int mode)
7775 basic_ifstream_char_open(this, name, mode, _SH_DENYNO);
7778 /* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAEXPBGHH@Z */
7779 /* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAAXPEBGHH@Z */
7780 /* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAEXPB_WHH@Z */
7781 /* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAAXPEB_WHH@Z */
7782 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_open_wchar, 16)
7783 void __thiscall basic_ifstream_char_open_wchar(basic_ifstream_char *this,
7784 const wchar_t *name, int mode, int prot)
7786 TRACE("(%p %s %d %d)\n", this, debugstr_w(name), mode, prot);
7788 if(!basic_filebuf_char_open_wchar(&this->filebuf, name, mode|OPENMODE_in, prot)) {
7789 basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base);
7790 basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
7794 /* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAEXPBGI@Z */
7795 /* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAAXPEBGI@Z */
7796 /* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAEXPB_WI@Z */
7797 /* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAAXPEB_WI@Z */
7798 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_open_wchar_old, 12)
7799 void __thiscall basic_ifstream_char_open_wchar_old(basic_ifstream_char *this,
7800 const wchar_t *name, unsigned int mode)
7802 basic_ifstream_char_open_wchar(this, name, mode, _SH_DENYNO);
7805 /* ?rdbuf@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ */
7806 /* ?rdbuf@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ */
7807 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_rdbuf, 4)
7808 basic_filebuf_char* __thiscall basic_ifstream_char_rdbuf(const basic_ifstream_char *this)
7810 TRACE("(%p)\n", this);
7811 return (basic_filebuf_char*)&this->filebuf;
7814 /* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@XZ */
7815 /* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@XZ */
7816 DEFINE_THISCALL_WRAPPER(basic_fstream_char_ctor, 8)
7817 basic_fstream_char* __thiscall basic_fstream_char_ctor(basic_fstream_char *this, MSVCP_bool virt_init)
7819 basic_ios_char *basic_ios;
7821 TRACE("(%p %d)\n", this, virt_init);
7823 if(virt_init) {
7824 this->base.base1.vbtable = basic_fstream_char_vbtable1;
7825 this->base.base2.vbtable = basic_fstream_char_vbtable2;
7826 basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
7827 basic_ios_char_ctor(basic_ios);
7828 }else {
7829 basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
7832 basic_filebuf_char_ctor(&this->filebuf);
7833 basic_iostream_char_ctor(&this->base, &this->filebuf.base, FALSE);
7834 basic_ios->base.vtable = &MSVCP_basic_fstream_char_vtable;
7835 return this;
7838 /* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PAU_iobuf@@@Z */
7839 /* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEAU_iobuf@@@Z */
7840 DEFINE_THISCALL_WRAPPER(basic_fstream_char_ctor_file, 12)
7841 basic_fstream_char* __thiscall basic_fstream_char_ctor_file(basic_fstream_char *this,
7842 FILE *file, MSVCP_bool virt_init)
7844 basic_ios_char *basic_ios;
7846 TRACE("(%p %p %d)\n", this, file, virt_init);
7848 if(virt_init) {
7849 this->base.base1.vbtable = basic_fstream_char_vbtable1;
7850 this->base.base2.vbtable = basic_fstream_char_vbtable2;
7851 basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
7852 basic_ios_char_ctor(basic_ios);
7853 }else {
7854 basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
7857 basic_filebuf_char_ctor_file(&this->filebuf, file);
7858 basic_iostream_char_ctor(&this->base, &this->filebuf.base, FALSE);
7859 basic_ios->base.vtable = &MSVCP_basic_fstream_char_vtable;
7860 return this;
7863 /* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PBDHH@Z */
7864 /* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEBDHH@Z */
7865 DEFINE_THISCALL_WRAPPER(basic_fstream_char_ctor_name, 20)
7866 basic_fstream_char* __thiscall basic_fstream_char_ctor_name(basic_fstream_char *this,
7867 const char *name, int mode, int prot, MSVCP_bool virt_init)
7869 TRACE("(%p %s %d %d %d)\n", this, name, mode, prot, virt_init);
7871 basic_fstream_char_ctor(this, virt_init);
7873 if(!basic_filebuf_char_open(&this->filebuf, name, mode, prot)) {
7874 basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
7875 basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
7877 return this;
7880 /* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PBGHH@Z */
7881 /* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEBGHH@Z */
7882 /* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PB_WHH@Z */
7883 /* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEB_WHH@Z */
7884 DEFINE_THISCALL_WRAPPER(basic_fstream_char_ctor_name_wchar, 20)
7885 basic_fstream_char* __thiscall basic_fstream_char_ctor_name_wchar(basic_fstream_char *this,
7886 const wchar_t *name, int mode, int prot, MSVCP_bool virt_init)
7888 TRACE("(%p %s %d %d %d)\n", this, debugstr_w(name), mode, prot, virt_init);
7890 basic_fstream_char_ctor(this, virt_init);
7892 if(!basic_filebuf_char_open_wchar(&this->filebuf, name, mode, prot)) {
7893 basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
7894 basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
7896 return this;
7899 /* ??1?$basic_fstream@DU?$char_traits@D@std@@@std@@UAE@XZ */
7900 /* ??1?$basic_fstream@DU?$char_traits@D@std@@@std@@UEAA@XZ */
7901 DEFINE_THISCALL_WRAPPER(basic_fstream_char_dtor, 4)
7902 void __thiscall basic_fstream_char_dtor(basic_fstream_char *this)
7904 TRACE("(%p)\n", this);
7906 basic_iostream_char_dtor(&this->base);
7907 basic_filebuf_char_dtor(&this->filebuf);
7910 /* ??_D?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXXZ */
7911 /* ??_D?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
7912 DEFINE_THISCALL_WRAPPER(basic_fstream_char_vbase_dtor, 4)
7913 void __thiscall basic_fstream_char_vbase_dtor(basic_fstream_char *this)
7915 TRACE("(%p)\n", this);
7917 basic_fstream_char_dtor(this);
7918 basic_ios_char_dtor(basic_istream_char_get_basic_ios(&this->base.base1));
7921 DEFINE_THISCALL_WRAPPER(MSVCP_basic_fstream_char_vector_dtor, 8)
7922 basic_fstream_char* __thiscall MSVCP_basic_fstream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
7924 basic_fstream_char *this = (basic_fstream_char *)((char*)base - basic_fstream_char_vbtable1[1] + basic_fstream_char_vbtable1[0]);
7926 TRACE("(%p %x)\n", this, flags);
7928 if(flags & 2) {
7929 /* we have an array, with the number of elements stored before the first object */
7930 int i, *ptr = (int *)this-1;
7932 for(i=*ptr-1; i>=0; i--)
7933 basic_fstream_char_vbase_dtor(this+i);
7934 MSVCRT_operator_delete(ptr);
7935 } else {
7936 basic_fstream_char_vbase_dtor(this);
7937 if(flags & 1)
7938 MSVCRT_operator_delete(this);
7941 return this;
7944 /* ?close@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXXZ */
7945 /* ?close@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
7946 DEFINE_THISCALL_WRAPPER(basic_fstream_char_close, 4)
7947 void __thiscall basic_fstream_char_close(basic_fstream_char *this)
7949 TRACE("(%p)\n", this);
7951 if(!basic_filebuf_char_close(&this->filebuf)) {
7952 basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
7953 basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
7957 /* ?is_open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QBE_NXZ */
7958 /* ?is_open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEBA_NXZ */
7959 DEFINE_THISCALL_WRAPPER(basic_fstream_char_is_open, 4)
7960 MSVCP_bool __thiscall basic_fstream_char_is_open(const basic_fstream_char *this)
7962 TRACE("(%p)\n", this);
7963 return basic_filebuf_char_is_open(&this->filebuf);
7966 /* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBDHH@Z */
7967 /* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDHH@Z */
7968 DEFINE_THISCALL_WRAPPER(basic_fstream_char_open, 16)
7969 void __thiscall basic_fstream_char_open(basic_fstream_char *this,
7970 const char *name, int mode, int prot)
7972 TRACE("(%p %s %d %d)\n", this, name, mode, prot);
7974 if(!basic_filebuf_char_open(&this->filebuf, name, mode, prot)) {
7975 basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
7976 basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
7980 /* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBDI@Z */
7981 /* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDI@Z */
7982 DEFINE_THISCALL_WRAPPER(basic_fstream_char_open_old, 12)
7983 void __thiscall basic_fstream_char_open_old(basic_fstream_char *this,
7984 const char *name, unsigned int mode)
7986 basic_fstream_char_open(this, name, mode, _SH_DENYNO);
7989 /* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBGHH@Z */
7990 /* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBGHH@Z */
7991 /* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPB_WHH@Z */
7992 /* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEB_WHH@Z */
7993 DEFINE_THISCALL_WRAPPER(basic_fstream_char_open_wchar, 16)
7994 void __thiscall basic_fstream_char_open_wchar(basic_fstream_char *this,
7995 const wchar_t *name, int mode, int prot)
7997 TRACE("(%p %s %d %d)\n", this, debugstr_w(name), mode, prot);
7999 if(!basic_filebuf_char_open_wchar(&this->filebuf, name, mode, prot)) {
8000 basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
8001 basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
8005 /* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBGI@Z */
8006 /* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBGI@Z */
8007 /* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPB_WI@Z */
8008 /* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEB_WI@Z */
8009 DEFINE_THISCALL_WRAPPER(basic_fstream_char_open_wchar_old, 12)
8010 void __thiscall basic_fstream_char_open_wchar_old(basic_fstream_char *this,
8011 const wchar_t *name, unsigned int mode)
8013 basic_fstream_char_open_wchar(this, name, mode, _SH_DENYNO);
8016 /* ?rdbuf@?$basic_fstream@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ */
8017 /* ?rdbuf@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ */
8018 DEFINE_THISCALL_WRAPPER(basic_fstream_char_rdbuf, 4)
8019 basic_filebuf_char* __thiscall basic_fstream_char_rdbuf(const basic_fstream_char *this)
8021 TRACE("(%p)\n", this);
8022 return (basic_filebuf_char*)&this->filebuf;
8025 static void __cdecl setprecision_func(ios_base *base, streamsize prec)
8027 ios_base_precision_set(base, prec);
8030 /* ?setprecision@std@@YA?AU?$_Smanip@H@1@H@Z */
8031 /* ?setprecision@std@@YA?AU?$_Smanip@_J@1@_J@Z */
8032 manip_streamsize* __cdecl setprecision(manip_streamsize *ret, streamsize prec)
8034 TRACE("(%p %ld)\n", ret, prec);
8036 ret->pfunc = setprecision_func;
8037 ret->arg = prec;
8038 return ret;
8041 static void __cdecl setw_func(ios_base *base, streamsize width)
8043 ios_base_width_set(base, width);
8046 /* ?setw@std@@YA?AU?$_Smanip@H@1@H@Z */
8047 /* ?setw@std@@YA?AU?$_Smanip@_J@1@_J@Z */
8048 manip_streamsize* __cdecl setw(manip_streamsize *ret, streamsize width)
8050 TRACE("(%p %ld)\n", ret, width);
8052 ret->pfunc = setw_func;
8053 ret->arg = width;
8054 return ret;
8057 static basic_filebuf_char filebuf_stdin;
8058 /* ?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A */
8059 struct {
8060 basic_istream_char obj;
8061 basic_ios_char vbase;
8062 } cin = { { 0 } };
8063 /* ?_Ptr_cin@std@@3PAV?$basic_istream@DU?$char_traits@D@std@@@1@A */
8064 /* ?_Ptr_cin@std@@3PEAV?$basic_istream@DU?$char_traits@D@std@@@1@EA */
8065 basic_istream_char *_Ptr_cin = &cin.obj;
8067 static basic_filebuf_char filebuf_stdout;
8068 /* ?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A */
8069 struct {
8070 basic_ostream_char obj;
8071 basic_ios_char vbase;
8072 } cout = { { 0 } };
8073 /* ?_Ptr_cout@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A */
8074 /* ?_Ptr_cout@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA */
8075 basic_ostream_char *_Ptr_cout = &cout.obj;
8077 static basic_filebuf_char filebuf_stderr;
8078 /* ?cerr@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A */
8079 struct {
8080 basic_ostream_char obj;
8081 basic_ios_char vbase;
8082 } cerr = { { 0 } };
8083 /* ?_Ptr_cerr@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A */
8084 /* ?_Ptr_cerr@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA */
8085 basic_ostream_char *_Ptr_cerr = &cerr.obj;
8087 static basic_filebuf_char filebuf_log;
8088 /* ?clog@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A */
8089 struct {
8090 basic_ostream_char obj;
8091 basic_ios_char vbase;
8092 } clog = { { 0 } };
8093 /* ?_Ptr_clog@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A */
8094 /* ?_Ptr_clog@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA */
8095 basic_ostream_char *_Ptr_clog = &clog.obj;
8097 void init_io(void)
8099 basic_filebuf_char_ctor_file(&filebuf_stdin, stdin);
8100 basic_istream_char_ctor(&cin.obj, &filebuf_stdin.base, FALSE/*FIXME*/, TRUE);
8102 basic_filebuf_char_ctor_file(&filebuf_stdout, stdout);
8103 basic_ostream_char_ctor(&cout.obj, &filebuf_stdout.base, FALSE/*FIXME*/, TRUE);
8105 basic_filebuf_char_ctor_file(&filebuf_stderr, stderr);
8106 basic_ostream_char_ctor(&cerr.obj, &filebuf_stderr.base, FALSE/*FIXME*/, TRUE);
8108 basic_filebuf_char_ctor_file(&filebuf_log, stderr);
8109 basic_ostream_char_ctor(&clog.obj, &filebuf_log.base, FALSE/*FIXME*/, TRUE);
8112 void free_io(void)
8114 basic_istream_char_dtor(&cin.obj);
8115 basic_filebuf_char_dtor(&filebuf_stdin);
8117 basic_ostream_char_dtor(&cout.obj);
8118 basic_filebuf_char_dtor(&filebuf_stdout);
8120 basic_ostream_char_dtor(&cerr.obj);
8121 basic_filebuf_char_dtor(&filebuf_stderr);
8123 basic_ostream_char_dtor(&clog.obj);
8124 basic_filebuf_char_dtor(&filebuf_log);