Release 1.5.29.
[wine] / dlls / msvcp60 / ios.c
1 /*
2  * Copyright 2011 Piotr Caban for CodeWeavers
3  *
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.
8  *
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.
13  *
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
17  */
18
19 #include "config.h"
20
21 #include <stdarg.h>
22 #include <stdio.h>
23 #include <limits.h>
24 #include <share.h>
25 #include <locale.h>
26
27 #include "msvcp.h"
28 #include "windef.h"
29 #include "winbase.h"
30 #include "wine/debug.h"
31 WINE_DEFAULT_DEBUG_CHANNEL(msvcp);
32
33 /* ?_Index@ios_base@std@@0HA */
34 int ios_base_Index = 0;
35 /* ?_Sync@ios_base@std@@0_NA */
36 MSVCP_bool ios_base_Sync = FALSE;
37
38 typedef struct {
39     streamoff off;
40     __int64 DECLSPEC_ALIGN(8) pos;
41     int state;
42 } fpos_int;
43
44 static inline const char* debugstr_fpos_int(fpos_int *fpos)
45 {
46     return wine_dbg_sprintf("fpos(%ld %s %d)", fpos->off, wine_dbgstr_longlong(fpos->pos), fpos->state);
47 }
48
49 typedef struct {
50     void (__cdecl *pfunc)(ios_base*, streamsize);
51     streamsize arg;
52 } manip_streamsize;
53
54 typedef struct {
55     void (__cdecl *pfunc)(ios_base*, int);
56     int arg;
57 } manip_int;
58
59 typedef enum {
60     INITFL_new   = 0,
61     INITFL_open  = 1,
62     INITFL_close = 2
63 } basic_filebuf__Initfl;
64
65 typedef struct {
66     basic_streambuf_char base;
67     codecvt_char *cvt;
68     int state0;
69     int state;
70     basic_string_char *str;
71     MSVCP_bool close;
72     locale loc;
73     FILE *file;
74 } basic_filebuf_char;
75
76 typedef struct {
77     basic_streambuf_wchar base;
78     codecvt_wchar *cvt;
79     int state0;
80     int state;
81     basic_string_char *str;
82     MSVCP_bool close;
83     locale loc;
84     FILE *file;
85 } basic_filebuf_wchar;
86
87 typedef enum {
88     STRINGBUF_allocated = 1,
89     STRINGBUF_no_write = 2,
90     STRINGBUF_no_read = 4,
91     STRINGBUF_append = 8,
92     STRINGBUF_at_end = 16
93 } basic_stringbuf_state;
94
95 typedef struct {
96     basic_streambuf_char base;
97     char *pendsave;
98     char *seekhigh;
99     int alsize;
100     int state;
101     char allocator; /* empty struct */
102 } basic_stringbuf_char;
103
104 typedef struct {
105     basic_streambuf_wchar base;
106     wchar_t *pendsave;
107     wchar_t *seekhigh;
108     int alsize;
109     int state;
110     char allocator; /* empty struct */
111 } basic_stringbuf_wchar;
112
113 typedef struct {
114     ios_base base;
115     basic_streambuf_char *strbuf;
116     struct _basic_ostream_char *stream;
117     char fillch;
118 } basic_ios_char;
119
120 typedef struct {
121     ios_base base;
122     basic_streambuf_wchar *strbuf;
123     struct _basic_ostream_wchar *stream;
124     wchar_t fillch;
125 } basic_ios_wchar;
126
127 typedef struct _basic_ostream_char {
128     const int *vbtable;
129     /* virtual inheritance
130      * basic_ios_char basic_ios;
131      */
132 } basic_ostream_char;
133
134 typedef struct _basic_ostream_wchar {
135     const int *vbtable;
136     /* virtual inheritance
137      * basic_ios_wchar basic_ios;
138      */
139 } basic_ostream_wchar;
140
141 typedef struct {
142     const int *vbtable;
143     streamsize count;
144     /* virtual inheritance
145      * basic_ios_char basic_ios;
146      */
147 } basic_istream_char;
148
149 typedef struct {
150     const int *vbtable;
151     streamsize count;
152     /* virtual inheritance
153      * basic_ios_wchar basic_ios;
154      */
155 } basic_istream_wchar;
156
157 typedef struct {
158     basic_istream_char base1;
159     basic_ostream_char base2;
160     /* virtual inheritance
161      * basic_ios_char basic_ios;
162      */
163 } basic_iostream_char;
164
165 typedef struct {
166     basic_istream_wchar base1;
167     basic_ostream_wchar base2;
168     /* virtual inheritance
169      * basic_ios_wchar basic_ios;
170      */
171 } basic_iostream_wchar;
172
173 typedef struct {
174     basic_ostream_char base;
175     basic_filebuf_char filebuf;
176     /* virtual inheritance
177      * basic_ios_char basic_ios;
178      */
179 } basic_ofstream_char;
180
181 typedef struct {
182     basic_ostream_wchar base;
183     basic_filebuf_wchar filebuf;
184     /* virtual inheritance
185      * basic_ios_wchar basic_ios;
186      */
187 } basic_ofstream_wchar;
188
189 typedef struct {
190     basic_istream_char base;
191     basic_filebuf_char filebuf;
192     /* virtual inheritance
193      * basic_ios_char basic_ios;
194      */
195 } basic_ifstream_char;
196
197 typedef struct {
198     basic_istream_wchar base;
199     basic_filebuf_wchar filebuf;
200     /* virtual inheritance
201      * basic_ios_wchar basic_ios;
202      */
203 } basic_ifstream_wchar;
204
205 typedef struct {
206     basic_iostream_char base;
207     basic_filebuf_char filebuf;
208     /* virtual inheritance
209      * basic_ios_char basic_ios;
210      */
211 } basic_fstream_char;
212
213 typedef struct {
214     basic_iostream_wchar base;
215     basic_filebuf_wchar filebuf;
216     /* virtual inheritance
217      * basic_ios_char basic_ios;
218      */
219 } basic_fstream_wchar;
220
221 typedef struct {
222     basic_ostream_char base;
223     basic_stringbuf_char strbuf;
224     /* virtual inheritance
225      * basic_ios_char basic_ios;
226      */
227 } basic_ostringstream_char;
228
229 typedef struct {
230     basic_ostream_wchar base;
231     basic_stringbuf_wchar strbuf;
232     /* virtual inheritance
233      * basic_ios_wchar basic_ios;
234      */
235 } basic_ostringstream_wchar;
236
237 typedef struct {
238     basic_istream_char base;
239     basic_stringbuf_char strbuf;
240     /* virtual inheritance
241      * basic_ios_char basic_ios;
242      */
243 } basic_istringstream_char;
244
245 typedef struct {
246     basic_istream_wchar base;
247     basic_stringbuf_wchar strbuf;
248     /* virtual inheritance
249      * basic_ios_wchar basic_ios;
250      */
251 } basic_istringstream_wchar;
252
253 typedef struct {
254     basic_iostream_char base;
255     basic_stringbuf_char strbuf;
256     /* virtual inheritance
257      * basic_ios_char basic_ios;
258      */
259 } basic_stringstream_char;
260
261 typedef struct {
262     basic_iostream_wchar base;
263     basic_stringbuf_wchar strbuf;
264     /* virtual inheritance
265      * basic_ios_wchar basic_ios;
266      */
267 } basic_stringstream_wchar;
268
269 typedef enum {
270     STRSTATE_Allocated = 1,
271     STRSTATE_Constant = 2,
272     STRSTATE_Dynamic = 4,
273     STRSTATE_Frozen = 8
274 } strstreambuf__Strstate;
275
276 typedef struct {
277     basic_streambuf_char base;
278     char *endsave;
279     char *seekhigh;
280     streamsize minsize;
281     int strmode;
282     void* (__cdecl *palloc)(MSVCP_size_t);
283     void (__cdecl *pfree)(void*);
284 } strstreambuf;
285
286 typedef struct {
287     basic_ostream_char base;
288     strstreambuf buf;
289     /* virtual inheritance
290      * basic_ios_char basic_ios;
291      */
292 } ostrstream;
293
294 typedef struct {
295     basic_istream_char base;
296     strstreambuf buf;
297     /* virtual inheritance
298      * basic_ios_char basic_ios;
299      */
300 } istrstream;
301
302 typedef struct {
303     basic_iostream_char base;
304     strstreambuf buf;
305     /* virtual inheritance
306      * basic_ios_char basic_ios;
307      */
308 } strstream;
309
310 extern const vtable_ptr MSVCP_iosb_vtable;
311
312 /* ??_7ios_base@std@@6B@ */
313 extern const vtable_ptr MSVCP_ios_base_vtable;
314
315 /* ??_7?$basic_ios@DU?$char_traits@D@std@@@std@@6B@ */
316 extern const vtable_ptr MSVCP_basic_ios_char_vtable;
317
318 /* ??_7?$basic_ios@_WU?$char_traits@_W@std@@@std@@6B@ */
319 extern const vtable_ptr MSVCP_basic_ios_wchar_vtable;
320
321 /* ??_7?$basic_ios@GU?$char_traits@G@std@@@std@@6B@ */
322 extern const vtable_ptr MSVCP_basic_ios_short_vtable;
323
324 /* ??_7?$basic_streambuf@DU?$char_traits@D@std@@@std@@6B@ */
325 extern const vtable_ptr MSVCP_basic_streambuf_char_vtable;
326
327 /* ??_7?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@6B@ */
328 extern const vtable_ptr MSVCP_basic_streambuf_wchar_vtable;
329
330 /* ??_7?$basic_streambuf@GU?$char_traits@G@std@@@std@@6B@ */
331 extern const vtable_ptr MSVCP_basic_streambuf_short_vtable;
332
333 /* ??_7?$basic_filebuf@DU?$char_traits@D@std@@@std@@6B@ */
334 extern const vtable_ptr MSVCP_basic_filebuf_char_vtable;
335
336 /* ??_7?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@6B@ */
337 extern const vtable_ptr MSVCP_basic_filebuf_wchar_vtable;
338
339 /* ??_7?$basic_filebuf@GU?$char_traits@G@std@@@std@@6B@ */
340 extern const vtable_ptr MSVCP_basic_filebuf_short_vtable;
341
342 /* ??_7?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@6B@ */
343 extern const vtable_ptr MSVCP_basic_stringbuf_char_vtable;
344
345 /* ??_7?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@6B@ */
346 extern const vtable_ptr MSVCP_basic_stringbuf_wchar_vtable;
347
348 /* ??_7?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@6B@ */
349 extern const vtable_ptr MSVCP_basic_stringbuf_short_vtable;
350
351 /* ??_8?$basic_ostream@DU?$char_traits@D@std@@@std@@7B@ */
352 const int basic_ostream_char_vbtable[] = {0, sizeof(basic_ostream_char)};
353 /* ??_7?$basic_ostream@DU?$char_traits@D@std@@@std@@6B@ */
354 extern const vtable_ptr MSVCP_basic_ostream_char_vtable;
355
356 /* ??_8?$basic_ostream@_WU?$char_traits@_W@std@@@std@@7B@ */
357 const int basic_ostream_wchar_vbtable[] = {0, sizeof(basic_ostream_wchar)};
358 /* ??_7?$basic_ostream@_WU?$char_traits@_W@std@@@std@@6B@ */
359 extern const vtable_ptr MSVCP_basic_ostream_wchar_vtable;
360
361 /* ??_8?$basic_ostream@GU?$char_traits@G@std@@@std@@7B@ */
362 const int basic_ostream_short_vbtable[] = {0, sizeof(basic_ostream_wchar)};
363 /* ??_7?$basic_ostream@GU?$char_traits@G@std@@@std@@6B@ */
364 extern const vtable_ptr MSVCP_basic_ostream_short_vtable;
365
366 /* ??_8?$basic_istream@DU?$char_traits@D@std@@@std@@7B@ */
367 const int basic_istream_char_vbtable[] = {0, sizeof(basic_istream_char)};
368 /* ??_7?$basic_istream@DU?$char_traits@D@std@@@std@@6B@ */
369 extern const vtable_ptr MSVCP_basic_istream_char_vtable;
370
371 /* ??_8?$basic_istream@_WU?$char_traits@_W@std@@@std@@7B@ */
372 const int basic_istream_wchar_vbtable[] = {0, sizeof(basic_istream_wchar)};
373 /* ??_7?$basic_istream@_WU?$char_traits@_W@std@@@std@@6B@ */
374 extern const vtable_ptr MSVCP_basic_istream_wchar_vtable;
375
376 /* ??_8?$basic_istream@GU?$char_traits@G@std@@@std@@7B@ */
377 const int basic_istream_short_vbtable[] = {0, sizeof(basic_istream_wchar)};
378 /* ??_7?$basic_istream@GU?$char_traits@G@std@@@std@@6B@ */
379 extern const vtable_ptr MSVCP_basic_istream_short_vtable;
380
381 /* ??_8?$basic_iostream@DU?$char_traits@D@std@@@std@@7B?$basic_istream@DU?$char_traits@D@std@@@1@@ */
382 const int basic_iostream_char_vbtable1[] = {0, sizeof(basic_iostream_char)};
383 /* ??_8?$basic_iostream@DU?$char_traits@D@std@@@std@@7B?$basic_ostream@DU?$char_traits@D@std@@@1@@ */
384 const int basic_iostream_char_vbtable2[] = {0, sizeof(basic_iostream_char)-FIELD_OFFSET(basic_iostream_char, base2)};
385 /* ??_7?$basic_iostream@DU?$char_traits@D@std@@@std@@6B@ */
386 extern const vtable_ptr MSVCP_basic_iostream_char_vtable;
387
388 /* ??_8?$basic_iostream@_WU?$char_traits@_W@std@@@std@@7B?$basic_istream@_WU?$char_traits@_W@std@@@1@@ */
389 /* ??_8?$basic_iostream@GU?$char_traits@G@std@@@std@@7B?$basic_istream@GU?$char_traits@G@std@@@1@@ */
390 const int basic_iostream_wchar_vbtable1[] = {0, sizeof(basic_iostream_wchar)};
391 /* ??_8?$basic_iostream@_WU?$char_traits@_W@std@@@std@@7B?$basic_ostream@_WU?$char_traits@_W@std@@@1@@ */
392 /* ??_8?$basic_iostream@GU?$char_traits@G@std@@@std@@7B?$basic_ostream@GU?$char_traits@G@std@@@1@@ */
393 const int basic_iostream_wchar_vbtable2[] = {0, sizeof(basic_iostream_wchar)-FIELD_OFFSET(basic_iostream_wchar, base2)};
394 /* ??_7?$basic_iostream@_WU?$char_traits@_W@std@@@std@@6B@ */
395 extern const vtable_ptr MSVCP_basic_iostream_wchar_vtable;
396 /* ??_7?$basic_iostream@GU?$char_traits@G@std@@@std@@6B@ */
397 extern const vtable_ptr MSVCP_basic_iostream_short_vtable;
398
399 /* ??_8?$basic_ofstream@DU?$char_traits@D@std@@@std@@7B@ */
400 const int basic_ofstream_char_vbtable[] = {0, sizeof(basic_ofstream_char)};
401 /* ??_7?$basic_ofstream@DU?$char_traits@D@std@@@std@@6B@ */
402 extern const vtable_ptr MSVCP_basic_ofstream_char_vtable;
403
404 /* ??_8?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@7B@ */
405 const int basic_ofstream_wchar_vbtable[] = {0, sizeof(basic_ofstream_wchar)};
406 /* ??_7?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@6B@ */
407 extern const vtable_ptr MSVCP_basic_ofstream_wchar_vtable;
408
409 /* ??_8?$basic_ofstream@GU?$char_traits@G@std@@@std@@7B@ */
410 const int basic_ofstream_short_vbtable[] = {0, sizeof(basic_ofstream_wchar)};
411 /* ??_7?$basic_ofstream@GU?$char_traits@G@std@@@std@@6B@ */
412 extern const vtable_ptr MSVCP_basic_ofstream_short_vtable;
413
414 /* ??_8?$basic_ifstream@DU?$char_traits@D@std@@@std@@7B@ */
415 const int basic_ifstream_char_vbtable[] = {0, sizeof(basic_ifstream_char)};
416 /* ??_7?$basic_ifstream@DU?$char_traits@D@std@@@std@@6B@ */
417 extern const vtable_ptr MSVCP_basic_ifstream_char_vtable;
418
419 /* ??_8?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@7B@ */
420 const int basic_ifstream_wchar_vbtable[] = {0, sizeof(basic_ifstream_wchar)};
421 /* ??_7?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@6B@ */
422 extern const vtable_ptr MSVCP_basic_ifstream_wchar_vtable;
423
424 /* ??_8?$basic_ifstream@GU?$char_traits@G@std@@@std@@7B@ */
425 const int basic_ifstream_short_vbtable[] = {0, sizeof(basic_ifstream_wchar)};
426 /* ??_7?$basic_ifstream@GU?$char_traits@G@std@@@std@@6B@ */
427 extern const vtable_ptr MSVCP_basic_ifstream_short_vtable;
428
429 /* ??_8?$basic_fstream@DU?$char_traits@D@std@@@std@@7B?$basic_istream@DU?$char_traits@D@std@@@1@@ */
430 const int basic_fstream_char_vbtable1[] = {0, sizeof(basic_fstream_char)};
431 /* ??_8?$basic_fstream@DU?$char_traits@D@std@@@std@@7B?$basic_ostream@DU?$char_traits@D@std@@@1@@ */
432 const int basic_fstream_char_vbtable2[] = {0, sizeof(basic_fstream_char)-FIELD_OFFSET(basic_fstream_char, base.base2)};
433 /* ??_7?$basic_fstream@DU?$char_traits@D@std@@@std@@6B@ */
434 extern const vtable_ptr MSVCP_basic_fstream_char_vtable;
435
436 /* ??_8?$basic_fstream@_WU?$char_traits@_W@std@@@std@@7B?$basic_istream@_WU?$char_traits@_W@std@@@1@@ */
437 /* ??_8?$basic_fstream@GU?$char_traits@G@std@@@std@@7B?$basic_istream@GU?$char_traits@G@std@@@1@@ */
438 const int basic_fstream_wchar_vbtable1[] = {0, sizeof(basic_fstream_wchar)};
439 /* ??_8?$basic_fstream@_WU?$char_traits@_W@std@@@std@@7B?$basic_ostream@_WU?$char_traits@_W@std@@@1@@ */
440 /* ??_8?$basic_fstream@GU?$char_traits@G@std@@@std@@7B?$basic_ostream@GU?$char_traits@G@std@@@1@@ */
441 const int basic_fstream_wchar_vbtable2[] = {0, sizeof(basic_fstream_wchar)-FIELD_OFFSET(basic_fstream_wchar, base.base2)};
442 /* ??_7?$basic_fstream@_WU?$char_traits@_W@std@@@std@@6B@ */
443 extern const vtable_ptr MSVCP_basic_fstream_wchar_vtable;
444 /* ??_7?$basic_fstream@GU?$char_traits@G@std@@@std@@6B@ */
445 extern const vtable_ptr MSVCP_basic_fstream_short_vtable;
446
447 /* ??_8?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@7B@ */
448 const int basic_ostringstream_char_vbtable[] = {0, sizeof(basic_ostringstream_char)};
449 /* ??_7?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@6B@ */
450 extern const vtable_ptr MSVCP_basic_ostringstream_char_vtable;
451
452 /* ??_8?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@7B@ */
453 const int basic_ostringstream_wchar_vbtable[] = {0, sizeof(basic_ostringstream_wchar)};
454 /* ??_7?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@6B@ */
455 extern const vtable_ptr MSVCP_basic_ostringstream_wchar_vtable;
456
457 /* ??_8?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@7B@ */
458 const int basic_ostringstream_short_vbtable[] = {0, sizeof(basic_ostringstream_wchar)};
459 /* ??_7?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@6B@ */
460 extern const vtable_ptr MSVCP_basic_ostringstream_short_vtable;
461
462 /* ??_8?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@7B@ */
463 const int basic_istringstream_char_vbtable[] = {0, sizeof(basic_istringstream_char)};
464 /* ??_7?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@6B@ */
465 extern const vtable_ptr MSVCP_basic_istringstream_char_vtable;
466
467 /* ??_8?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@7B@ */
468 const int basic_istringstream_wchar_vbtable[] = {0, sizeof(basic_istringstream_wchar)};
469 /* ??_7?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@6B@ */
470 extern const vtable_ptr MSVCP_basic_istringstream_wchar_vtable;
471
472 /* ??_8?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@7B@ */
473 const int basic_istringstream_short_vbtable[] = {0, sizeof(basic_istringstream_wchar)};
474 /* ??_7?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@6B@ */
475 extern const vtable_ptr MSVCP_basic_istringstream_short_vtable;
476
477 /* ??_8?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@7B?$basic_istream@DU?$char_traits@D@std@@@1@@ */
478 const int basic_stringstream_char_vbtable1[] = {0, sizeof(basic_stringstream_char)};
479 /* ??_8?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@7B?$basic_ostream@DU?$char_traits@D@std@@@1@@ */
480 const int basic_stringstream_char_vbtable2[] = {0, sizeof(basic_stringstream_char)-FIELD_OFFSET(basic_stringstream_char, base.base2)};
481 /* ??_7?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@6B@ */
482 extern const vtable_ptr MSVCP_basic_stringstream_char_vtable;
483
484 /* ??_8?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@7B?$basic_istream@_WU?$char_traits@_W@std@@@1@@ */
485 const int basic_stringstream_wchar_vbtable1[] = {0, sizeof(basic_stringstream_wchar)};
486 /* ??_8?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@7B?$basic_ostream@_WU?$char_traits@_W@std@@@1@@ */
487 const int basic_stringstream_wchar_vbtable2[] = {0, sizeof(basic_stringstream_wchar)-FIELD_OFFSET(basic_stringstream_wchar, base.base2)};
488 /* ??_7?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@6B@ */
489 extern const vtable_ptr MSVCP_basic_stringstream_wchar_vtable;
490
491 /* ??_8?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@7B?$basic_istream@GU?$char_traits@G@std@@@1@@ */
492 const int basic_stringstream_short_vbtable1[] = {0, sizeof(basic_stringstream_wchar)};
493 /* ??_8?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@7B?$basic_ostream@GU?$char_traits@G@std@@@1@@ */
494 const int basic_stringstream_short_vbtable2[] = {0, sizeof(basic_stringstream_wchar)-FIELD_OFFSET(basic_stringstream_wchar, base.base2)};
495 /* ??_7?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@6B@ */
496 extern const vtable_ptr MSVCP_basic_stringstream_short_vtable;
497
498 /* ??_7strstreambuf@std@@6B */
499 extern const vtable_ptr MSVCP_strstreambuf_vtable;
500
501 static const int ostrstream_vbtable[] = {0, sizeof(ostrstream)};
502 extern const vtable_ptr MSVCP_ostrstream_vtable;
503
504 static const int istrstream_vbtable[] = {0, sizeof(istrstream)};
505
506 static const int strstream_vbtable1[] = {0, sizeof(strstream)};
507 static const int strstream_vbtable2[] = {0, sizeof(strstream)-FIELD_OFFSET(strstream, base.base2)};
508 extern const vtable_ptr MSVCP_strstream_vtable;
509
510 DEFINE_RTTI_DATA0(iosb, 0, ".?AV?$_Iosb@H@std@@")
511 DEFINE_RTTI_DATA1(ios_base, 0, &iosb_rtti_base_descriptor, ".?AV?$_Iosb@H@std@@")
512 DEFINE_RTTI_DATA2(basic_ios_char, 0, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
513         ".?AV?$basic_ios@DU?$char_traits@D@std@@@std@@")
514 DEFINE_RTTI_DATA2(basic_ios_wchar, 0, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
515         ".?AV?$basic_ios@_WU?$char_traits@_W@std@@@std@@")
516 DEFINE_RTTI_DATA2(basic_ios_short, 0, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
517         ".?AV?$basic_ios@GU?$char_traits@G@std@@@std@@")
518 DEFINE_RTTI_DATA0(basic_streambuf_char, 0,
519         ".?AV?$basic_streambuf@DU?$char_traits@D@std@@@std@@")
520 DEFINE_RTTI_DATA0(basic_streambuf_wchar, 0,
521         ".?AV?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@")
522 DEFINE_RTTI_DATA0(basic_streambuf_short, 0,
523         ".?AV?$basic_streambuf@GU?$char_traits@G@std@@@std@@")
524 DEFINE_RTTI_DATA1(basic_filebuf_char, 0, &basic_streambuf_char_rtti_base_descriptor,
525         ".?AV?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@")
526 DEFINE_RTTI_DATA1(basic_filebuf_wchar, 0, &basic_streambuf_wchar_rtti_base_descriptor,
527         ".?AV?$basic_filebuf@GU?$char_traits@G@std@@@std@@")
528 DEFINE_RTTI_DATA1(basic_filebuf_short, 0, &basic_streambuf_short_rtti_base_descriptor,
529         ".?AV?$basic_filebuf@DU?$char_traits@D@std@@@std@@")
530 DEFINE_RTTI_DATA1(basic_stringbuf_char, 0, &basic_streambuf_char_rtti_base_descriptor,
531         ".?AV?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@")
532 DEFINE_RTTI_DATA1(basic_stringbuf_wchar, 0, &basic_streambuf_wchar_rtti_base_descriptor,
533         ".?AV?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@")
534 DEFINE_RTTI_DATA1(basic_stringbuf_short, 0, &basic_streambuf_short_rtti_base_descriptor,
535         ".?AV?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@")
536 DEFINE_RTTI_DATA3(basic_ostream_char, sizeof(basic_ostream_char), &basic_ios_char_rtti_base_descriptor,
537         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
538         ".?AV?$basic_ostream@DU?$char_traits@D@std@@@std@@")
539 DEFINE_RTTI_DATA3(basic_ostream_wchar, sizeof(basic_ostream_wchar), &basic_ios_wchar_rtti_base_descriptor,
540         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
541         ".?AV?$basic_ostream@_WU?$char_traits@_W@std@@@std@@")
542 DEFINE_RTTI_DATA3(basic_ostream_short, sizeof(basic_ostream_wchar), &basic_ios_short_rtti_base_descriptor,
543         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
544         ".?AV?$basic_ostream@GU?$char_traits@G@std@@@std@@")
545 DEFINE_RTTI_DATA3(basic_istream_char, sizeof(basic_istream_char), &basic_ios_char_rtti_base_descriptor,
546         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
547         ".?AV?$basic_istream@DU?$char_traits@D@std@@@std@@")
548 DEFINE_RTTI_DATA3(basic_istream_wchar, sizeof(basic_istream_wchar), &basic_ios_wchar_rtti_base_descriptor,
549         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
550         ".?AV?$basic_istream@_WU?$char_traits@_W@std@@@std@@")
551 DEFINE_RTTI_DATA3(basic_istream_short, sizeof(basic_istream_wchar), &basic_ios_short_rtti_base_descriptor,
552         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
553         ".?AV?$basic_istream@GU?$char_traits@G@std@@@std@@")
554 DEFINE_RTTI_DATA8(basic_iostream_char, sizeof(basic_iostream_char),
555         &basic_istream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
556         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
557         &basic_ostream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
558         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
559         ".?AV?$basic_iostream@DU?$char_traits@D@std@@@std@@")
560 DEFINE_RTTI_DATA8(basic_iostream_wchar, sizeof(basic_iostream_wchar),
561         &basic_istream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor,
562         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
563         &basic_ostream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor,
564         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
565         ".?AV?$basic_iostream@_WU?$char_traits@_W@std@@@std@@")
566 DEFINE_RTTI_DATA8(basic_iostream_short, sizeof(basic_iostream_wchar),
567         &basic_istream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor,
568         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
569         &basic_ostream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor,
570         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
571         ".?AV?$basic_iostream@GU?$char_traits@G@std@@@std@@")
572 DEFINE_RTTI_DATA4(basic_ofstream_char, sizeof(basic_ofstream_char),
573         &basic_ostream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
574         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
575         ".?AV?$basic_ofstream@DU?$char_traits@D@std@@@std@@")
576 DEFINE_RTTI_DATA4(basic_ofstream_wchar, sizeof(basic_ofstream_wchar),
577         &basic_ostream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor,
578         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
579         ".?AV?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@")
580 DEFINE_RTTI_DATA4(basic_ofstream_short, sizeof(basic_ofstream_wchar),
581         &basic_ostream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor,
582         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
583         ".?AV?$basic_ofstream@GU?$char_traits@G@std@@@std@@")
584 DEFINE_RTTI_DATA4(basic_ifstream_char, sizeof(basic_ifstream_char),
585         &basic_istream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
586         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
587         ".?AV?$basic_ifstream@DU?$char_traits@D@std@@@std@@")
588 DEFINE_RTTI_DATA4(basic_ifstream_wchar, sizeof(basic_ifstream_wchar),
589         &basic_istream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor,
590         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
591         ".?AV?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@")
592 DEFINE_RTTI_DATA4(basic_ifstream_short, sizeof(basic_ifstream_wchar),
593         &basic_istream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor,
594         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
595         ".?AV?$basic_ifstream@GU?$char_traits@G@std@@@std@@")
596 DEFINE_RTTI_DATA8(basic_fstream_char, sizeof(basic_fstream_char),
597         &basic_istream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
598         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
599         &basic_ostream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
600         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
601         ".?AV?$basic_fstream@DU?$char_traits@D@std@@@std@@")
602 DEFINE_RTTI_DATA8(basic_fstream_wchar, sizeof(basic_fstream_wchar),
603         &basic_istream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor,
604         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
605         &basic_ostream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor,
606         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
607         ".?AV?$basic_fstream@_WU?$char_traits@_W@std@@@std@@")
608 DEFINE_RTTI_DATA8(basic_fstream_short, sizeof(basic_fstream_wchar),
609         &basic_istream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor,
610         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
611         &basic_ostream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor,
612         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
613         ".?AV?$basic_fstream@GU?$char_traits@G@std@@@std@@")
614 DEFINE_RTTI_DATA4(basic_ostringstream_char, sizeof(basic_ostringstream_char),
615         &basic_ostream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
616         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
617         ".?AV?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@")
618 DEFINE_RTTI_DATA4(basic_ostringstream_wchar, sizeof(basic_ostringstream_wchar),
619         &basic_ostream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor,
620         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
621         ".?AV?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@")
622 DEFINE_RTTI_DATA4(basic_ostringstream_short, sizeof(basic_ostringstream_wchar),
623         &basic_ostream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor,
624         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
625         ".?AV?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@")
626 DEFINE_RTTI_DATA4(basic_istringstream_char, sizeof(basic_istringstream_char),
627         &basic_ostream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
628         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
629         ".?AV?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@")
630 DEFINE_RTTI_DATA4(basic_istringstream_wchar, sizeof(basic_istringstream_wchar),
631         &basic_ostream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor,
632         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
633         ".?AV?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@")
634 DEFINE_RTTI_DATA4(basic_istringstream_short, sizeof(basic_istringstream_wchar),
635         &basic_ostream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor,
636         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
637         ".?AV?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@")
638 DEFINE_RTTI_DATA8(basic_stringstream_char, sizeof(basic_stringstream_char),
639         &basic_istream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
640         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
641         &basic_ostream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
642         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
643         ".?AV?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@")
644 DEFINE_RTTI_DATA8(basic_stringstream_wchar, sizeof(basic_stringstream_wchar),
645         &basic_istream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor,
646         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
647         &basic_ostream_wchar_rtti_base_descriptor, &basic_ios_wchar_rtti_base_descriptor,
648         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
649         ".?AV?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@")
650 DEFINE_RTTI_DATA8(basic_stringstream_short, sizeof(basic_stringstream_wchar),
651         &basic_istream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor,
652         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
653         &basic_ostream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor,
654         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
655         ".?AV?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@")
656 DEFINE_RTTI_DATA1(strstreambuf, sizeof(strstreambuf),
657         &basic_streambuf_char_rtti_base_descriptor, ".?AVstrstreambuf@std@@")
658 DEFINE_RTTI_DATA4(ostrstream, sizeof(ostrstream),
659         &basic_ostream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
660         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
661         "?AVostrstream@std@@")
662 DEFINE_RTTI_DATA8(strstream, sizeof(strstream),
663         &basic_istream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
664         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
665         &basic_ostream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor,
666         &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor,
667         "?AVstrstream@std@@")
668
669 #ifndef __GNUC__
670 void __asm_dummy_vtables(void) {
671 #endif
672     __ASM_VTABLE(iosb,
673             VTABLE_ADD_FUNC(iosb_vector_dtor));
674     __ASM_VTABLE(ios_base,
675             VTABLE_ADD_FUNC(ios_base_vector_dtor));
676     __ASM_VTABLE(basic_ios_char,
677             VTABLE_ADD_FUNC(basic_ios_char_vector_dtor));
678     __ASM_VTABLE(basic_ios_wchar,
679             VTABLE_ADD_FUNC(basic_ios_wchar_vector_dtor));
680     __ASM_VTABLE(basic_ios_short,
681             VTABLE_ADD_FUNC(basic_ios_wchar_vector_dtor));
682     __ASM_VTABLE(basic_streambuf_char,
683             VTABLE_ADD_FUNC(basic_streambuf_char_vector_dtor)
684             VTABLE_ADD_FUNC(basic_streambuf_char_overflow)
685             VTABLE_ADD_FUNC(basic_streambuf_char_pbackfail)
686             VTABLE_ADD_FUNC(basic_streambuf_char_showmanyc)
687             VTABLE_ADD_FUNC(basic_streambuf_char_underflow)
688             VTABLE_ADD_FUNC(basic_streambuf_char_uflow)
689             VTABLE_ADD_FUNC(basic_streambuf_char_xsgetn)
690             VTABLE_ADD_FUNC(basic_streambuf_char_xsputn)
691             VTABLE_ADD_FUNC(basic_streambuf_char_seekoff)
692             VTABLE_ADD_FUNC(basic_streambuf_char_seekpos)
693             VTABLE_ADD_FUNC(basic_streambuf_char_setbuf)
694             VTABLE_ADD_FUNC(basic_streambuf_char_sync)
695             VTABLE_ADD_FUNC(basic_streambuf_char_imbue));
696     __ASM_VTABLE(basic_streambuf_wchar,
697             VTABLE_ADD_FUNC(basic_streambuf_wchar_vector_dtor)
698             VTABLE_ADD_FUNC(basic_streambuf_wchar_overflow)
699             VTABLE_ADD_FUNC(basic_streambuf_wchar_pbackfail)
700             VTABLE_ADD_FUNC(basic_streambuf_wchar_showmanyc)
701             VTABLE_ADD_FUNC(basic_streambuf_wchar_underflow)
702             VTABLE_ADD_FUNC(basic_streambuf_wchar_uflow)
703             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsgetn)
704             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsputn)
705             VTABLE_ADD_FUNC(basic_streambuf_wchar_seekoff)
706             VTABLE_ADD_FUNC(basic_streambuf_wchar_seekpos)
707             VTABLE_ADD_FUNC(basic_streambuf_wchar_setbuf)
708             VTABLE_ADD_FUNC(basic_streambuf_wchar_sync)
709             VTABLE_ADD_FUNC(basic_streambuf_wchar_imbue));
710     __ASM_VTABLE(basic_streambuf_short,
711             VTABLE_ADD_FUNC(basic_streambuf_wchar_vector_dtor)
712             VTABLE_ADD_FUNC(basic_streambuf_wchar_overflow)
713             VTABLE_ADD_FUNC(basic_streambuf_wchar_pbackfail)
714             VTABLE_ADD_FUNC(basic_streambuf_wchar_showmanyc)
715             VTABLE_ADD_FUNC(basic_streambuf_wchar_underflow)
716             VTABLE_ADD_FUNC(basic_streambuf_wchar_uflow)
717             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsgetn)
718             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsputn)
719             VTABLE_ADD_FUNC(basic_streambuf_wchar_seekoff)
720             VTABLE_ADD_FUNC(basic_streambuf_wchar_seekpos)
721             VTABLE_ADD_FUNC(basic_streambuf_wchar_setbuf)
722             VTABLE_ADD_FUNC(basic_streambuf_wchar_sync)
723             VTABLE_ADD_FUNC(basic_streambuf_wchar_imbue));
724     __ASM_VTABLE(basic_filebuf_char,
725             VTABLE_ADD_FUNC(basic_filebuf_char_vector_dtor)
726             VTABLE_ADD_FUNC(basic_filebuf_char_overflow)
727             VTABLE_ADD_FUNC(basic_filebuf_char_pbackfail)
728             VTABLE_ADD_FUNC(basic_streambuf_char_showmanyc)
729             VTABLE_ADD_FUNC(basic_filebuf_char_underflow)
730             VTABLE_ADD_FUNC(basic_filebuf_char_uflow)
731             VTABLE_ADD_FUNC(basic_streambuf_char_xsgetn)
732             VTABLE_ADD_FUNC(basic_streambuf_char_xsputn)
733             VTABLE_ADD_FUNC(basic_filebuf_char_seekoff)
734             VTABLE_ADD_FUNC(basic_filebuf_char_seekpos)
735             VTABLE_ADD_FUNC(basic_filebuf_char_setbuf)
736             VTABLE_ADD_FUNC(basic_filebuf_char_sync)
737             VTABLE_ADD_FUNC(basic_streambuf_char_imbue));
738     __ASM_VTABLE(basic_filebuf_wchar,
739             VTABLE_ADD_FUNC(basic_filebuf_wchar_vector_dtor)
740             VTABLE_ADD_FUNC(basic_filebuf_wchar_overflow)
741             VTABLE_ADD_FUNC(basic_filebuf_wchar_pbackfail)
742             VTABLE_ADD_FUNC(basic_streambuf_wchar_showmanyc)
743             VTABLE_ADD_FUNC(basic_filebuf_wchar_underflow)
744             VTABLE_ADD_FUNC(basic_filebuf_wchar_uflow)
745             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsgetn)
746             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsputn)
747             VTABLE_ADD_FUNC(basic_filebuf_wchar_seekoff)
748             VTABLE_ADD_FUNC(basic_filebuf_wchar_seekpos)
749             VTABLE_ADD_FUNC(basic_filebuf_wchar_setbuf)
750             VTABLE_ADD_FUNC(basic_filebuf_wchar_sync)
751             VTABLE_ADD_FUNC(basic_streambuf_wchar_imbue));
752     __ASM_VTABLE(basic_filebuf_short,
753             VTABLE_ADD_FUNC(basic_filebuf_wchar_vector_dtor)
754             VTABLE_ADD_FUNC(basic_filebuf_wchar_overflow)
755             VTABLE_ADD_FUNC(basic_filebuf_wchar_pbackfail)
756             VTABLE_ADD_FUNC(basic_streambuf_wchar_showmanyc)
757             VTABLE_ADD_FUNC(basic_filebuf_wchar_underflow)
758             VTABLE_ADD_FUNC(basic_filebuf_wchar_uflow)
759             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsgetn)
760             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsputn)
761             VTABLE_ADD_FUNC(basic_filebuf_wchar_seekoff)
762             VTABLE_ADD_FUNC(basic_filebuf_wchar_seekpos)
763             VTABLE_ADD_FUNC(basic_filebuf_short_setbuf)
764             VTABLE_ADD_FUNC(basic_filebuf_wchar_sync)
765             VTABLE_ADD_FUNC(basic_streambuf_wchar_imbue));
766     __ASM_VTABLE(basic_stringbuf_char,
767             VTABLE_ADD_FUNC(basic_stringbuf_char_vector_dtor)
768             VTABLE_ADD_FUNC(basic_stringbuf_char_overflow)
769             VTABLE_ADD_FUNC(basic_stringbuf_char_pbackfail)
770             VTABLE_ADD_FUNC(basic_streambuf_char_showmanyc)
771             VTABLE_ADD_FUNC(basic_stringbuf_char_underflow)
772             VTABLE_ADD_FUNC(basic_streambuf_char_uflow)
773             VTABLE_ADD_FUNC(basic_streambuf_char_xsgetn)
774             VTABLE_ADD_FUNC(basic_streambuf_char_xsputn)
775             VTABLE_ADD_FUNC(basic_stringbuf_char_seekoff)
776             VTABLE_ADD_FUNC(basic_stringbuf_char_seekpos)
777             VTABLE_ADD_FUNC(basic_streambuf_char_setbuf)
778             VTABLE_ADD_FUNC(basic_streambuf_char_sync)
779             VTABLE_ADD_FUNC(basic_streambuf_char_imbue));
780     __ASM_VTABLE(basic_stringbuf_wchar,
781             VTABLE_ADD_FUNC(basic_stringbuf_wchar_vector_dtor)
782             VTABLE_ADD_FUNC(basic_stringbuf_wchar_overflow)
783             VTABLE_ADD_FUNC(basic_stringbuf_wchar_pbackfail)
784             VTABLE_ADD_FUNC(basic_streambuf_wchar_showmanyc)
785             VTABLE_ADD_FUNC(basic_stringbuf_wchar_underflow)
786             VTABLE_ADD_FUNC(basic_streambuf_wchar_uflow)
787             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsgetn)
788             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsputn)
789             VTABLE_ADD_FUNC(basic_stringbuf_wchar_seekoff)
790             VTABLE_ADD_FUNC(basic_stringbuf_wchar_seekpos)
791             VTABLE_ADD_FUNC(basic_streambuf_wchar_setbuf)
792             VTABLE_ADD_FUNC(basic_streambuf_wchar_sync)
793             VTABLE_ADD_FUNC(basic_streambuf_wchar_imbue));
794     __ASM_VTABLE(basic_stringbuf_short,
795             VTABLE_ADD_FUNC(basic_stringbuf_wchar_vector_dtor)
796             VTABLE_ADD_FUNC(basic_stringbuf_wchar_overflow)
797             VTABLE_ADD_FUNC(basic_stringbuf_wchar_pbackfail)
798             VTABLE_ADD_FUNC(basic_streambuf_wchar_showmanyc)
799             VTABLE_ADD_FUNC(basic_stringbuf_wchar_underflow)
800             VTABLE_ADD_FUNC(basic_streambuf_wchar_uflow)
801             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsgetn)
802             VTABLE_ADD_FUNC(basic_streambuf_wchar_xsputn)
803             VTABLE_ADD_FUNC(basic_stringbuf_wchar_seekoff)
804             VTABLE_ADD_FUNC(basic_stringbuf_wchar_seekpos)
805             VTABLE_ADD_FUNC(basic_streambuf_wchar_setbuf)
806             VTABLE_ADD_FUNC(basic_streambuf_wchar_sync)
807             VTABLE_ADD_FUNC(basic_streambuf_wchar_imbue));
808     __ASM_VTABLE(basic_ostream_char,
809             VTABLE_ADD_FUNC(basic_ostream_char_vector_dtor));
810     __ASM_VTABLE(basic_ostream_wchar,
811             VTABLE_ADD_FUNC(basic_ostream_wchar_vector_dtor));
812     __ASM_VTABLE(basic_ostream_short,
813             VTABLE_ADD_FUNC(basic_ostream_wchar_vector_dtor));
814     __ASM_VTABLE(basic_istream_char,
815             VTABLE_ADD_FUNC(basic_istream_char_vector_dtor));
816     __ASM_VTABLE(basic_istream_wchar,
817             VTABLE_ADD_FUNC(basic_istream_wchar_vector_dtor));
818     __ASM_VTABLE(basic_istream_short,
819             VTABLE_ADD_FUNC(basic_istream_wchar_vector_dtor));
820     __ASM_VTABLE(basic_iostream_char,
821             VTABLE_ADD_FUNC(basic_iostream_char_vector_dtor));
822     __ASM_VTABLE(basic_iostream_wchar,
823             VTABLE_ADD_FUNC(basic_iostream_wchar_vector_dtor));
824     __ASM_VTABLE(basic_iostream_short,
825             VTABLE_ADD_FUNC(basic_iostream_wchar_vector_dtor));
826     __ASM_VTABLE(basic_ofstream_char,
827             VTABLE_ADD_FUNC(basic_ofstream_char_vector_dtor));
828     __ASM_VTABLE(basic_ofstream_wchar,
829             VTABLE_ADD_FUNC(basic_ofstream_wchar_vector_dtor));
830     __ASM_VTABLE(basic_ofstream_short,
831             VTABLE_ADD_FUNC(basic_ofstream_wchar_vector_dtor));
832     __ASM_VTABLE(basic_ifstream_char,
833             VTABLE_ADD_FUNC(basic_ifstream_char_vector_dtor));
834     __ASM_VTABLE(basic_ifstream_wchar,
835             VTABLE_ADD_FUNC(basic_ifstream_wchar_vector_dtor));
836     __ASM_VTABLE(basic_ifstream_short,
837             VTABLE_ADD_FUNC(basic_ifstream_wchar_vector_dtor));
838     __ASM_VTABLE(basic_fstream_char,
839             VTABLE_ADD_FUNC(basic_fstream_char_vector_dtor));
840     __ASM_VTABLE(basic_fstream_wchar,
841             VTABLE_ADD_FUNC(basic_fstream_wchar_vector_dtor));
842     __ASM_VTABLE(basic_fstream_short,
843             VTABLE_ADD_FUNC(basic_fstream_wchar_vector_dtor));
844     __ASM_VTABLE(basic_ostringstream_char,
845             VTABLE_ADD_FUNC(basic_ostringstream_char_vector_dtor));
846     __ASM_VTABLE(basic_ostringstream_wchar,
847             VTABLE_ADD_FUNC(basic_ostringstream_wchar_vector_dtor));
848     __ASM_VTABLE(basic_ostringstream_short,
849             VTABLE_ADD_FUNC(basic_ostringstream_wchar_vector_dtor));
850     __ASM_VTABLE(basic_istringstream_char,
851             VTABLE_ADD_FUNC(basic_istringstream_char_vector_dtor));
852     __ASM_VTABLE(basic_istringstream_wchar,
853             VTABLE_ADD_FUNC(basic_istringstream_wchar_vector_dtor));
854     __ASM_VTABLE(basic_istringstream_short,
855             VTABLE_ADD_FUNC(basic_istringstream_wchar_vector_dtor));
856     __ASM_VTABLE(basic_stringstream_char,
857             VTABLE_ADD_FUNC(basic_stringstream_char_vector_dtor));
858     __ASM_VTABLE(basic_stringstream_wchar,
859             VTABLE_ADD_FUNC(basic_stringstream_wchar_vector_dtor));
860     __ASM_VTABLE(basic_stringstream_short,
861             VTABLE_ADD_FUNC(basic_stringstream_wchar_vector_dtor));
862     __ASM_VTABLE(strstreambuf,
863             VTABLE_ADD_FUNC(strstreambuf_vector_dtor)
864             VTABLE_ADD_FUNC(strstreambuf_overflow)
865             VTABLE_ADD_FUNC(strstreambuf_pbackfail)
866             VTABLE_ADD_FUNC(basic_streambuf_char_showmanyc)
867             VTABLE_ADD_FUNC(strstreambuf_underflow)
868             VTABLE_ADD_FUNC(basic_streambuf_char_uflow)
869             VTABLE_ADD_FUNC(basic_streambuf_char_xsgetn)
870             VTABLE_ADD_FUNC(basic_streambuf_char_xsputn)
871             VTABLE_ADD_FUNC(strstreambuf_seekoff)
872             VTABLE_ADD_FUNC(strstreambuf_seekpos)
873             VTABLE_ADD_FUNC(basic_streambuf_char_setbuf)
874             VTABLE_ADD_FUNC(basic_streambuf_char_sync)
875             VTABLE_ADD_FUNC(basic_streambuf_char_imbue));
876     __ASM_VTABLE(ostrstream,
877             VTABLE_ADD_FUNC(ostrstream_vector_dtor));
878     __ASM_VTABLE(strstream,
879             VTABLE_ADD_FUNC(strstream_vector_dtor));
880 #ifndef __GNUC__
881 }
882 #endif
883
884 /* ?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD00@Z */
885 /* ?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD00@Z */
886 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_setp_next, 16)
887 void __thiscall basic_streambuf_char_setp_next(basic_streambuf_char *this, char *first, char *next, char *last)
888 {
889     TRACE("(%p %p %p %p)\n", this, first, next, last);
890
891     this->wbuf = first;
892     this->wpos = next;
893     this->wsize = last-next;
894 }
895
896 /* ?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD0@Z */
897 /* ?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD0@Z */
898 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_setp, 12)
899 void __thiscall basic_streambuf_char_setp(basic_streambuf_char *this, char *first, char *last)
900 {
901     basic_streambuf_char_setp_next(this, first, first, last);
902 }
903
904 /* ?setg@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD00@Z */
905 /* ?setg@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAD00@Z */
906 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_setg, 16)
907 void __thiscall basic_streambuf_char_setg(basic_streambuf_char *this, char *first, char *next, char *last)
908 {
909     TRACE("(%p %p %p %p)\n", this, first, next, last);
910
911     this->rbuf = first;
912     this->rpos = next;
913     this->rsize = last-next;
914 }
915
916 /* ?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXXZ */
917 /* ?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXXZ */
918 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Init_empty, 4)
919 void __thiscall basic_streambuf_char__Init_empty(basic_streambuf_char *this)
920 {
921     TRACE("(%p)\n", this);
922
923     this->prbuf = &this->rbuf;
924     this->pwbuf = &this->wbuf;
925     this->prpos = &this->rpos;
926     this->pwpos = &this->wpos;
927     this->prsize = &this->rsize;
928     this->pwsize = &this->wsize;
929
930     basic_streambuf_char_setp(this, NULL, NULL);
931     basic_streambuf_char_setg(this, NULL, NULL, NULL);
932 }
933
934 /* ??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAE@W4_Uninitialized@1@@Z */
935 /* ??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAA@W4_Uninitialized@1@@Z */
936 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_ctor_uninitialized, 8)
937 basic_streambuf_char* __thiscall basic_streambuf_char_ctor_uninitialized(basic_streambuf_char *this, int uninitialized)
938 {
939     TRACE("(%p %d)\n", this, uninitialized);
940     this->vtable = &MSVCP_basic_streambuf_char_vtable;
941     return this;
942 }
943
944 /* ??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAE@XZ */
945 /* ??0?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAA@XZ */
946 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_ctor, 4)
947 basic_streambuf_char* __thiscall basic_streambuf_char_ctor(basic_streambuf_char *this)
948 {
949     TRACE("(%p)\n", this);
950
951     this->vtable = &MSVCP_basic_streambuf_char_vtable;
952     locale_ctor(&this->loc);
953     basic_streambuf_char__Init_empty(this);
954
955     return this;
956 }
957
958 /* ??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAE@XZ */
959 /* ??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UEAA@XZ */
960 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_dtor, 4)
961 void __thiscall basic_streambuf_char_dtor(basic_streambuf_char *this)
962 {
963     TRACE("(%p)\n", this);
964
965     locale_dtor(&this->loc);
966 }
967
968 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_vector_dtor, 8)
969 basic_streambuf_char* __thiscall basic_streambuf_char_vector_dtor(basic_streambuf_char *this, unsigned int flags)
970 {
971     TRACE("(%p %x)\n", this, flags);
972     if(flags & 2) {
973         /* we have an array, with the number of elements stored before the first object */
974         INT_PTR i, *ptr = (INT_PTR *)this-1;
975
976         for(i=*ptr-1; i>=0; i--)
977             basic_streambuf_char_dtor(this+i);
978         MSVCRT_operator_delete(ptr);
979     } else {
980         basic_streambuf_char_dtor(this);
981         if(flags & 1)
982             MSVCRT_operator_delete(this);
983     }
984
985     return this;
986 }
987
988 /* ?_Gnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEHXZ */
989 /* ?_Gnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBA_JXZ */
990 static streamsize basic_streambuf_char__Gnavail(const basic_streambuf_char *this)
991 {
992     TRACE("(%p)\n", this);
993     return *this->prpos ? *this->prsize : 0;
994 }
995
996 /* ?_Gndec@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ */
997 /* ?_Gndec@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ */
998 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Gndec, 4)
999 char* __thiscall basic_streambuf_char__Gndec(basic_streambuf_char *this)
1000 {
1001     TRACE("(%p)\n", this);
1002     (*this->prsize)++;
1003     (*this->prpos)--;
1004     return *this->prpos;
1005 }
1006
1007 /* ?_Gninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ */
1008 /* ?_Gninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ */
1009 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Gninc, 4)
1010 char* __thiscall basic_streambuf_char__Gninc(basic_streambuf_char *this)
1011 {
1012     TRACE("(%p)\n", this);
1013     (*this->prsize)--;
1014     return (*this->prpos)++;
1015 }
1016
1017 /* ?_Gnpreinc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ */
1018 /* ?_Gnpreinc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ */
1019 static char* basic_streambuf_char__Gnpreinc(basic_streambuf_char *this)
1020 {
1021     TRACE("(%p)\n", this);
1022     (*this->prsize)--;
1023     (*this->prpos)++;
1024     return *this->prpos;
1025 }
1026
1027 /* ?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAPAD0PAH001@Z */
1028 /* ?_Init@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXPEAPEAD0PEAH001@Z */
1029 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Init, 28)
1030 void __thiscall basic_streambuf_char__Init(basic_streambuf_char *this, char **gf, char **gn, int *gc, char **pf, char **pn, int *pc)
1031 {
1032     TRACE("(%p %p %p %p %p %p %p)\n", this, gf, gn, gc, pf, pn, pc);
1033
1034     this->prbuf = gf;
1035     this->pwbuf = pf;
1036     this->prpos = gn;
1037     this->pwpos = pn;
1038     this->prsize = gc;
1039     this->pwsize = pc;
1040 }
1041
1042 /* ?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ */
1043 /* ?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAXXZ */
1044 static void basic_streambuf_char__Lock(basic_streambuf_char *this)
1045 {
1046     TRACE("(%p)\n", this);
1047 }
1048
1049 /* ?_Pnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEHXZ */
1050 /* ?_Pnavail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBA_JXZ */
1051 static streamsize basic_streambuf_char__Pnavail(const basic_streambuf_char *this)
1052 {
1053     TRACE("(%p)\n", this);
1054     return *this->pwpos ? *this->pwsize : 0;
1055 }
1056
1057 /* ?_Pninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEPADXZ */
1058 /* ?_Pninc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAPEADXZ */
1059 DEFINE_THISCALL_WRAPPER(basic_streambuf_char__Pninc, 4)
1060 char* __thiscall basic_streambuf_char__Pninc(basic_streambuf_char *this)
1061 {
1062     TRACE("(%p)\n", this);
1063     (*this->pwsize)--;
1064     return (*this->pwpos)++;
1065 }
1066
1067 /* ?underflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
1068 /* ?underflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
1069 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_underflow, 4)
1070 #define call_basic_streambuf_char_underflow(this) CALL_VTBL_FUNC(this, 16, \
1071         int, (basic_streambuf_char*), (this))
1072 int __thiscall basic_streambuf_char_underflow(basic_streambuf_char *this)
1073 {
1074     TRACE("(%p)\n", this);
1075     return EOF;
1076 }
1077
1078 /* ?uflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
1079 /* ?uflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
1080 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_uflow, 4)
1081 #define call_basic_streambuf_char_uflow(this) CALL_VTBL_FUNC(this, 20, \
1082         int, (basic_streambuf_char*), (this))
1083 int __thiscall basic_streambuf_char_uflow(basic_streambuf_char *this)
1084 {
1085     int ret;
1086
1087     TRACE("(%p)\n", this);
1088
1089     if(call_basic_streambuf_char_underflow(this)==EOF)
1090         return EOF;
1091
1092     ret = (unsigned char)**this->prpos;
1093     (*this->prsize)--;
1094     (*this->prpos)++;
1095     return ret;
1096 }
1097
1098 /* ?_Xsgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHPADIH@Z */
1099 /* ?_Xsgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEAD_K_J@Z */
1100 static streamsize basic_streambuf_char__Xsgetn_s(basic_streambuf_char *this, char *ptr, MSVCP_size_t size, streamsize count)
1101 {
1102     streamsize copied, chunk;
1103     int c;
1104
1105     TRACE("(%p %p %lu %ld)\n", this, ptr, size, count);
1106
1107     for(copied=0; copied<count && size;) {
1108         chunk = basic_streambuf_char__Gnavail(this);
1109         if(chunk > count-copied)
1110             chunk = count-copied;
1111
1112         if(chunk > 0) {
1113             memcpy_s(ptr+copied, size, *this->prpos, chunk);
1114             *this->prpos += chunk;
1115             *this->prsize -= chunk;
1116             copied += chunk;
1117             size -= chunk;
1118         }else if((c = call_basic_streambuf_char_uflow(this)) != EOF) {
1119             ptr[copied] = c;
1120             copied++;
1121             size--;
1122         }else {
1123             break;
1124         }
1125     }
1126
1127     return copied;
1128 }
1129
1130 /* ?_Sgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPADIH@Z */
1131 /* ?_Sgetn_s@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_K_J@Z */
1132 static streamsize basic_streambuf_char__Sgetn_s(basic_streambuf_char *this, char *ptr, MSVCP_size_t size, streamsize count)
1133 {
1134     TRACE("(%p %p %lu %ld)\n", this, ptr, size, count);
1135     return basic_streambuf_char__Xsgetn_s(this, ptr, size, count);
1136 }
1137
1138 /* ?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ */
1139 /* ?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAXXZ */
1140 static void basic_streambuf_char__Unlock(basic_streambuf_char *this)
1141 {
1142     TRACE("(%p)\n", this);
1143 }
1144
1145 /* ?eback@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
1146 /* ?eback@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
1147 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_eback, 4)
1148 char* __thiscall basic_streambuf_char_eback(const basic_streambuf_char *this)
1149 {
1150     TRACE("(%p)\n", this);
1151     return *this->prbuf;
1152 }
1153
1154 /* ?gptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
1155 /* ?gptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
1156 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_gptr, 4)
1157 char* __thiscall basic_streambuf_char_gptr(const basic_streambuf_char *this)
1158 {
1159     TRACE("(%p)\n", this);
1160     return *this->prpos;
1161 }
1162
1163 /* ?egptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
1164 /* ?egptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
1165 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_egptr, 4)
1166 char* __thiscall basic_streambuf_char_egptr(const basic_streambuf_char *this)
1167 {
1168     TRACE("(%p)\n", this);
1169     return *this->prpos+*this->prsize;
1170 }
1171
1172 /* ?epptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
1173 /* ?epptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
1174 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_epptr, 4)
1175 char* __thiscall basic_streambuf_char_epptr(const basic_streambuf_char *this)
1176 {
1177     TRACE("(%p)\n", this);
1178     return *this->pwpos+*this->pwsize;
1179 }
1180
1181 /* ?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z */
1182 /* ?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXH@Z */
1183 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_gbump, 8)
1184 void __thiscall basic_streambuf_char_gbump(basic_streambuf_char *this, int off)
1185 {
1186     TRACE("(%p %d)\n", this, off);
1187     *this->prpos += off;
1188     *this->prsize -= off;
1189 }
1190
1191 /* ?imbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEXABVlocale@2@@Z */
1192 /* ?imbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAXAEBVlocale@2@@Z */
1193 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_imbue, 8)
1194 #define call_basic_streambuf_char_imbue(this, loc) CALL_VTBL_FUNC(this, 48, \
1195         void, (basic_streambuf_char*, const locale*), (this, loc))
1196 void __thiscall basic_streambuf_char_imbue(basic_streambuf_char *this, const locale *loc)
1197 {
1198     TRACE("(%p %p)\n", this, loc);
1199 }
1200
1201 /* ?overflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHH@Z */
1202 /* ?overflow@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z */
1203 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_overflow, 8)
1204 #define call_basic_streambuf_char_overflow(this, ch) CALL_VTBL_FUNC(this, 4, \
1205         int, (basic_streambuf_char*, int), (this, ch))
1206 int __thiscall basic_streambuf_char_overflow(basic_streambuf_char *this, int ch)
1207 {
1208     TRACE("(%p %d)\n", this, ch);
1209     return EOF;
1210 }
1211
1212 /* ?pbackfail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHH@Z */
1213 /* ?pbackfail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z */
1214 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pbackfail, 8)
1215 #define call_basic_streambuf_char_pbackfail(this, ch) CALL_VTBL_FUNC(this, 8, \
1216         int, (basic_streambuf_char*, int), (this, ch))
1217 int __thiscall basic_streambuf_char_pbackfail(basic_streambuf_char *this, int ch)
1218 {
1219     TRACE("(%p %d)\n", this, ch);
1220     return EOF;
1221 }
1222
1223 /* ?pbase@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
1224 /* ?pbase@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
1225 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pbase, 4)
1226 char* __thiscall basic_streambuf_char_pbase(const basic_streambuf_char *this)
1227 {
1228     TRACE("(%p)\n", this);
1229     return *this->pwbuf;
1230 }
1231
1232 /* ?pbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z */
1233 /* ?pbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXH@Z */
1234 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pbump, 8)
1235 void __thiscall basic_streambuf_char_pbump(basic_streambuf_char *this, int off)
1236 {
1237     TRACE("(%p %d)\n", this, off);
1238     *this->pwpos += off;
1239     *this->pwsize -= off;
1240 }
1241
1242 /* ?pptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ */
1243 /* ?pptr@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ */
1244 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pptr, 4)
1245 char* __thiscall basic_streambuf_char_pptr(const basic_streambuf_char *this)
1246 {
1247     TRACE("(%p)\n", this);
1248     return *this->pwpos;
1249 }
1250
1251 /* ?pubimbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
1252 /* ?pubimbue@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
1253 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubimbue, 12)
1254 locale* __thiscall basic_streambuf_char_pubimbue(basic_streambuf_char *this, locale *ret, const locale *loc)
1255 {
1256     TRACE("(%p %p)\n", this, loc);
1257     memcpy(ret, &this->loc, sizeof(locale));
1258     call_basic_streambuf_char_imbue(this, loc);
1259     locale_copy_ctor(&this->loc, loc);
1260     return ret;
1261 }
1262
1263 /* ?seekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@JW4seekdir@ios_base@2@H@Z */
1264 /* ?seekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@H@2@_JW4seekdir@ios_base@2@H@Z */
1265 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_seekoff, 20)
1266 #define call_basic_streambuf_char_seekoff(this, ret, off, way, mode) CALL_VTBL_FUNC(this, 32, \
1267         fpos_int*, (basic_streambuf_char*, fpos_int*, streamoff, int, int), (this, ret, off, way, mode))
1268 fpos_int* __thiscall basic_streambuf_char_seekoff(basic_streambuf_char *this,
1269         fpos_int *ret, streamoff off, int way, int mode)
1270 {
1271     TRACE("(%p %ld %d %d)\n", this, off, way, mode);
1272     ret->off = -1;
1273     ret->pos = 0;
1274     ret->state = 0;
1275     return ret;
1276 }
1277
1278 /* ?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@JHH@Z */
1279 /* ?pubseekoff@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@_JHH@Z */
1280 static fpos_int* basic_streambuf_char_pubseekoff(basic_streambuf_char *this,
1281         fpos_int *ret, streamoff off, int way, int mode)
1282 {
1283     TRACE("(%p %ld %d %d)\n", this, off, way, mode);
1284     return call_basic_streambuf_char_seekoff(this, ret, off, way, mode);
1285 }
1286
1287 /* ?seekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
1288 /* ?seekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
1289 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_seekpos, 36)
1290 #define call_basic_streambuf_char_seekpos(this, ret, pos, mode) CALL_VTBL_FUNC(this, 36, \
1291         fpos_int*, (basic_streambuf_char*, fpos_int*, fpos_int, int), (this, ret, pos, mode))
1292 fpos_int* __thiscall basic_streambuf_char_seekpos(basic_streambuf_char *this,
1293         fpos_int *ret, fpos_int pos, int mode)
1294 {
1295     TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
1296     ret->off = -1;
1297     ret->pos = 0;
1298     ret->state = 0;
1299     return ret;
1300 }
1301
1302 /* ?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@V32@H@Z */
1303 /* ?pubseekpos@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@V32@H@Z */
1304 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubseekpos, 36)
1305 fpos_int* __thiscall basic_streambuf_char_pubseekpos(basic_streambuf_char *this,
1306         fpos_int *ret, fpos_int pos, int mode)
1307 {
1308     TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
1309     return call_basic_streambuf_char_seekpos(this, ret, pos, mode);
1310 }
1311
1312 /* ?setbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEPAV12@PADH@Z */
1313 /* ?setbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAPEAV12@PEAD_J@Z */
1314 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_setbuf, 12)
1315 #define call_basic_streambuf_char_setbuf(this, buf, count) CALL_VTBL_FUNC(this, 40, \
1316         basic_streambuf_char*, (basic_streambuf_char*, char*, streamsize), (this, buf, count))
1317 basic_streambuf_char* __thiscall basic_streambuf_char_setbuf(basic_streambuf_char *this, char *buf, streamsize count)
1318 {
1319     TRACE("(%p %p %ld)\n", this, buf, count);
1320     return this;
1321 }
1322
1323 /* ?pubsetbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PADH@Z */
1324 /* ?pubsetbuf@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEAD_J@Z */
1325 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubsetbuf, 12)
1326 basic_streambuf_char* __thiscall basic_streambuf_char_pubsetbuf(basic_streambuf_char *this, char *buf, streamsize count)
1327 {
1328     TRACE("(%p %p %ld)\n", this, buf, count);
1329     return call_basic_streambuf_char_setbuf(this, buf, count);
1330 }
1331
1332 /* ?sync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
1333 /* ?sync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
1334 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sync, 4)
1335 #define call_basic_streambuf_char_sync(this) CALL_VTBL_FUNC(this, 44, \
1336         int, (basic_streambuf_char*), (this))
1337 int __thiscall basic_streambuf_char_sync(basic_streambuf_char *this)
1338 {
1339     TRACE("(%p)\n", this);
1340     return 0;
1341 }
1342
1343 /* ?pubsync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
1344 /* ?pubsync@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
1345 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_pubsync, 4)
1346 int __thiscall basic_streambuf_char_pubsync(basic_streambuf_char *this)
1347 {
1348     TRACE("(%p)\n", this);
1349     return call_basic_streambuf_char_sync(this);
1350 }
1351
1352 /* ?sgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPADH@Z */
1353 /* ?sgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_J@Z */
1354 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sgetn, 12)
1355 streamsize __thiscall basic_streambuf_char_sgetn(basic_streambuf_char *this, char *ptr, streamsize count)
1356 {
1357     TRACE("(%p %p %ld)\n", this, ptr, count);
1358     return basic_streambuf_char__Xsgetn_s(this, ptr, -1, count);
1359 }
1360
1361 /* ?showmanyc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
1362 /* ?showmanyc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JXZ */
1363 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_showmanyc, 4)
1364 #define call_basic_streambuf_char_showmanyc(this) CALL_VTBL_FUNC(this, 12, \
1365         streamsize, (basic_streambuf_char*), (this))
1366 streamsize __thiscall basic_streambuf_char_showmanyc(basic_streambuf_char *this)
1367 {
1368     TRACE("(%p)\n", this);
1369     return 0;
1370 }
1371
1372 /* ?in_avail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
1373 /* ?in_avail@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JXZ */
1374 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_in_avail, 4)
1375 streamsize __thiscall basic_streambuf_char_in_avail(basic_streambuf_char *this)
1376 {
1377     streamsize ret;
1378
1379     TRACE("(%p)\n", this);
1380
1381     ret = basic_streambuf_char__Gnavail(this);
1382     return ret ? ret : call_basic_streambuf_char_showmanyc(this);
1383 }
1384
1385 /* ?sputbackc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z */
1386 /* ?sputbackc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z */
1387 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sputbackc, 8)
1388 int __thiscall basic_streambuf_char_sputbackc(basic_streambuf_char *this, char ch)
1389 {
1390     TRACE("(%p %d)\n", this, ch);
1391     if(*this->prpos && *this->prpos>*this->prbuf && (*this->prpos)[-1]==ch) {
1392         (*this->prsize)++;
1393         (*this->prpos)--;
1394         return (unsigned char)ch;
1395     }
1396
1397     return call_basic_streambuf_char_pbackfail(this, (unsigned char)ch);
1398 }
1399
1400 /* ?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z */
1401 /* ?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z */
1402 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sputc, 8)
1403 int __thiscall basic_streambuf_char_sputc(basic_streambuf_char *this, char ch)
1404 {
1405     TRACE("(%p %d)\n", this, ch);
1406     return basic_streambuf_char__Pnavail(this) ?
1407         (*basic_streambuf_char__Pninc(this) = ch) :
1408         call_basic_streambuf_char_overflow(this, (unsigned char)ch);
1409 }
1410
1411 /* ?sungetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
1412 /* ?sungetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
1413 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sungetc, 4)
1414 int __thiscall basic_streambuf_char_sungetc(basic_streambuf_char *this)
1415 {
1416     TRACE("(%p)\n", this);
1417     if(*this->prpos && *this->prpos>*this->prbuf) {
1418         (*this->prsize)++;
1419         (*this->prpos)--;
1420         return (unsigned char)**this->prpos;
1421     }
1422
1423     return call_basic_streambuf_char_pbackfail(this, EOF);
1424 }
1425
1426 /* ?stossc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ */
1427 /* ?stossc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAXXZ */
1428 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_stossc, 4)
1429 void __thiscall basic_streambuf_char_stossc(basic_streambuf_char *this)
1430 {
1431     TRACE("(%p)\n", this);
1432     if(basic_streambuf_char__Gnavail(this))
1433         basic_streambuf_char__Gninc(this);
1434     else
1435         call_basic_streambuf_char_uflow(this);
1436 }
1437
1438 /* ?sbumpc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
1439 /* ?sbumpc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
1440 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sbumpc, 4)
1441 int __thiscall basic_streambuf_char_sbumpc(basic_streambuf_char *this)
1442 {
1443     TRACE("(%p)\n", this);
1444     return basic_streambuf_char__Gnavail(this) ?
1445         (int)(unsigned char)*basic_streambuf_char__Gninc(this) : call_basic_streambuf_char_uflow(this);
1446 }
1447
1448 /* ?sgetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
1449 /* ?sgetc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
1450 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sgetc, 4)
1451 int __thiscall basic_streambuf_char_sgetc(basic_streambuf_char *this)
1452 {
1453     TRACE("(%p)\n", this);
1454     return basic_streambuf_char__Gnavail(this) ?
1455         (int)(unsigned char)*basic_streambuf_char_gptr(this) : call_basic_streambuf_char_underflow(this);
1456 }
1457
1458 /* ?snextc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ */
1459 /* ?snextc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHXZ */
1460 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_snextc, 4)
1461 int __thiscall basic_streambuf_char_snextc(basic_streambuf_char *this)
1462 {
1463     TRACE("(%p)\n", this);
1464
1465     if(basic_streambuf_char__Gnavail(this) > 1)
1466         return (unsigned char)*basic_streambuf_char__Gnpreinc(this);
1467     return basic_streambuf_char_sbumpc(this)==EOF ?
1468         EOF : basic_streambuf_char_sgetc(this);
1469 }
1470
1471 /* ?xsgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHPADH@Z */
1472 /* ?xsgetn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEAD_J@Z */
1473 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_xsgetn, 12)
1474 #define call_basic_streambuf_char_xsgetn(this, ptr, count) CALL_VTBL_FUNC(this, 24, \
1475         streamsize, (basic_streambuf_char*, char*, streamsize), (this, ptr, count))
1476 streamsize __thiscall basic_streambuf_char_xsgetn(basic_streambuf_char *this, char *ptr, streamsize count)
1477 {
1478     TRACE("(%p %p %ld)\n", this, ptr, count);
1479     return basic_streambuf_char__Xsgetn_s(this, ptr, -1, count);
1480 }
1481
1482 /* ?xsputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MAEHPBDH@Z */
1483 /* ?xsputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@MEAA_JPEBD_J@Z */
1484 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_xsputn, 12)
1485 #define call_basic_streambuf_char_xsputn(this, ptr, count) CALL_VTBL_FUNC(this, 28, \
1486         streamsize, (basic_streambuf_char*, const char*, streamsize), (this, ptr, count))
1487 streamsize __thiscall basic_streambuf_char_xsputn(basic_streambuf_char *this, const char *ptr, streamsize count)
1488 {
1489     streamsize copied, chunk;
1490
1491     TRACE("(%p %p %ld)\n", this, ptr, count);
1492
1493     for(copied=0; copied<count;) {
1494         chunk = basic_streambuf_char__Pnavail(this);
1495         if(chunk > count-copied)
1496             chunk = count-copied;
1497
1498         if(chunk > 0) {
1499             memcpy(*this->pwpos, ptr+copied, chunk);
1500             *this->pwpos += chunk;
1501             *this->pwsize -= chunk;
1502             copied += chunk;
1503         }else if(call_basic_streambuf_char_overflow(this, (unsigned char)ptr[copied]) != EOF) {
1504             copied++;
1505         }else {
1506             break;
1507         }
1508     }
1509
1510     return copied;
1511 }
1512
1513 /* ?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPBDH@Z */
1514 /* ?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEBD_J@Z */
1515 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_sputn, 12)
1516 streamsize __thiscall basic_streambuf_char_sputn(basic_streambuf_char *this, const char *ptr, streamsize count)
1517 {
1518     TRACE("(%p %p %ld)\n", this, ptr, count);
1519     return call_basic_streambuf_char_xsputn(this, ptr, count);
1520 }
1521
1522 /* ?getloc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE?AVlocale@2@XZ */
1523 /* ?getloc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA?AVlocale@2@XZ */
1524 DEFINE_THISCALL_WRAPPER(basic_streambuf_char_getloc, 8)
1525 locale* __thiscall basic_streambuf_char_getloc(basic_streambuf_char *this, locale *ret)
1526 {
1527     TRACE("(%p %p)\n", this, ret);
1528     return locale_copy_ctor(ret, &this->loc);
1529 }
1530
1531 /* ?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W00@Z */
1532 /* ?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W00@Z */
1533 /* ?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG00@Z */
1534 /* ?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG00@Z */
1535 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_setp_next, 16)
1536 void __thiscall basic_streambuf_wchar_setp_next(basic_streambuf_wchar *this, wchar_t *first, wchar_t *next, wchar_t *last)
1537 {
1538     TRACE("(%p %p %p %p)\n", this, first, next, last);
1539
1540     this->wbuf = first;
1541     this->wpos = next;
1542     this->wsize = last-next;
1543 }
1544
1545 /* ?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W0@Z */
1546 /* ?setp@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W0@Z */
1547 /* ?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG0@Z */
1548 /* ?setp@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG0@Z */
1549 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_setp, 12)
1550 void __thiscall basic_streambuf_wchar_setp(basic_streambuf_wchar *this, wchar_t *first, wchar_t *last)
1551 {
1552     basic_streambuf_wchar_setp_next(this, first, first, last);
1553 }
1554
1555 /* ?setg@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPA_W00@Z */
1556 /* ?setg@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEA_W00@Z */
1557 /* ?setg@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAG00@Z */
1558 /* ?setg@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAG00@Z */
1559 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_setg, 16)
1560 void __thiscall basic_streambuf_wchar_setg(basic_streambuf_wchar *this, wchar_t *first, wchar_t *next, wchar_t *last)
1561 {
1562     TRACE("(%p %p %p %p)\n", this, first, next, last);
1563
1564     this->rbuf = first;
1565     this->rpos = next;
1566     this->rsize = last-next;
1567 }
1568
1569 /* ?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXXZ */
1570 /* ?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXXZ */
1571 /* ?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXXZ */
1572 /* ?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXXZ */
1573 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Init_empty, 4)
1574 void __thiscall basic_streambuf_wchar__Init_empty(basic_streambuf_wchar *this)
1575 {
1576     TRACE("(%p)\n", this);
1577
1578     this->prbuf = &this->rbuf;
1579     this->pwbuf = &this->wbuf;
1580     this->prpos = &this->rpos;
1581     this->pwpos = &this->wpos;
1582     this->prsize = &this->rsize;
1583     this->pwsize = &this->wsize;
1584
1585     basic_streambuf_wchar_setp(this, NULL, NULL);
1586     basic_streambuf_wchar_setg(this, NULL, NULL, NULL);
1587 }
1588
1589 /* ??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAE@W4_Uninitialized@1@@Z */
1590 /* ??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAA@W4_Uninitialized@1@@Z */
1591 static basic_streambuf_wchar* basic_streambuf_wchar_ctor_uninitialized(basic_streambuf_wchar *this, int uninitialized)
1592 {
1593     TRACE("(%p %d)\n", this, uninitialized);
1594     this->vtable = &MSVCP_basic_streambuf_wchar_vtable;
1595     return this;
1596 }
1597
1598 /* ??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAE@W4_Uninitialized@1@@Z */
1599 /* ??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAA@W4_Uninitialized@1@@Z */
1600 DEFINE_THISCALL_WRAPPER(basic_streambuf_short_ctor_uninitialized, 8)
1601 basic_streambuf_wchar* __thiscall basic_streambuf_short_ctor_uninitialized(basic_streambuf_wchar *this, int uninitialized)
1602 {
1603     TRACE("(%p %d)\n", this, uninitialized);
1604     basic_streambuf_wchar_ctor_uninitialized(this, uninitialized);
1605     this->vtable = &MSVCP_basic_streambuf_short_vtable;
1606     return this;
1607 }
1608
1609 /* ??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAE@XZ */
1610 /* ??0?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAA@XZ */
1611 static basic_streambuf_wchar* basic_streambuf_wchar_ctor(basic_streambuf_wchar *this)
1612 {
1613     TRACE("(%p)\n", this);
1614
1615     this->vtable = &MSVCP_basic_streambuf_wchar_vtable;
1616     locale_ctor(&this->loc);
1617     basic_streambuf_wchar__Init_empty(this);
1618
1619     return this;
1620 }
1621
1622 /* ??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAE@XZ */
1623 /* ??0?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAA@XZ */
1624 DEFINE_THISCALL_WRAPPER(basic_streambuf_short_ctor, 4)
1625 basic_streambuf_wchar* __thiscall basic_streambuf_short_ctor(basic_streambuf_wchar *this)
1626 {
1627     TRACE("(%p)\n", this);
1628     basic_streambuf_wchar_ctor(this);
1629     this->vtable = &MSVCP_basic_streambuf_short_vtable;
1630     return this;
1631 }
1632
1633 /* ??1?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
1634 /* ??1?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
1635 /* ??1?$basic_streambuf@GU?$char_traits@G@std@@@std@@UAE@XZ */
1636 /* ??1?$basic_streambuf@GU?$char_traits@G@std@@@std@@UEAA@XZ */
1637 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_dtor, 4)
1638 void __thiscall basic_streambuf_wchar_dtor(basic_streambuf_wchar *this)
1639 {
1640     TRACE("(%p)\n", this);
1641
1642     locale_dtor(&this->loc);
1643 }
1644
1645 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_vector_dtor, 8)
1646 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_vector_dtor(basic_streambuf_wchar *this, unsigned int flags)
1647 {
1648     TRACE("(%p %x)\n", this, flags);
1649     if(flags & 2) {
1650         /* we have an array, with the number of elements stored before the first object */
1651         INT_PTR i, *ptr = (INT_PTR *)this-1;
1652
1653         for(i=*ptr-1; i>=0; i--)
1654             basic_streambuf_wchar_dtor(this+i);
1655         MSVCRT_operator_delete(ptr);
1656     } else {
1657         basic_streambuf_wchar_dtor(this);
1658         if(flags & 1)
1659             MSVCRT_operator_delete(this);
1660     }
1661
1662     return this;
1663 }
1664
1665 /* ?_Gnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEHXZ */
1666 /* ?_Gnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBA_JXZ */
1667 /* ?_Gnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEHXZ */
1668 /* ?_Gnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBA_JXZ */
1669 static streamsize basic_streambuf_wchar__Gnavail(const basic_streambuf_wchar *this)
1670 {
1671     TRACE("(%p)\n", this);
1672     return *this->prpos ? *this->prsize : 0;
1673 }
1674
1675 /* ?_Gndec@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ */
1676 /* ?_Gndec@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ */
1677 /* ?_Gndec@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ */
1678 /* ?_Gndec@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ */
1679 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Gndec, 4)
1680 wchar_t* __thiscall basic_streambuf_wchar__Gndec(basic_streambuf_wchar *this)
1681 {
1682     TRACE("(%p)\n", this);
1683     (*this->prsize)++;
1684     (*this->prpos)--;
1685     return *this->prpos;
1686 }
1687
1688 /* ?_Gninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ */
1689 /* ?_Gninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ */
1690 /* ?_Gninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ */
1691 /* ?_Gninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ */
1692 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Gninc, 4)
1693 wchar_t* __thiscall basic_streambuf_wchar__Gninc(basic_streambuf_wchar *this)
1694 {
1695     TRACE("(%p)\n", this);
1696     (*this->prsize)--;
1697     return (*this->prpos)++;
1698 }
1699
1700 /* ?_Gnpreinc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ */
1701 /* ?_Gnpreinc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ */
1702 /* ?_Gnpreinc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ */
1703 /* ?_Gnpreinc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ */
1704 static wchar_t* basic_streambuf_wchar__Gnpreinc(basic_streambuf_wchar *this)
1705 {
1706     TRACE("(%p)\n", this);
1707     (*this->prsize)--;
1708     (*this->prpos)++;
1709     return *this->prpos;
1710 }
1711
1712 /* ?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXPAPA_W0PAH001@Z */
1713 /* ?_Init@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEAPEA_W0PEAH001@Z */
1714 /* ?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXPAPAG0PAH001@Z */
1715 /* ?_Init@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXPEAPEAG0PEAH001@Z */
1716 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Init, 28)
1717 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)
1718 {
1719     TRACE("(%p %p %p %p %p %p %p)\n", this, gf, gn, gc, pf, pn, pc);
1720
1721     this->prbuf = gf;
1722     this->pwbuf = pf;
1723     this->prpos = gn;
1724     this->pwpos = pn;
1725     this->prsize = gc;
1726     this->pwsize = pc;
1727 }
1728
1729 /* ?_Lock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
1730 /* ?_Lock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
1731 /* ?_Lock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEXXZ */
1732 /* ?_Lock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAXXZ */
1733 static void basic_streambuf_wchar__Lock(basic_streambuf_wchar *this)
1734 {
1735     TRACE("(%p)\n", this);
1736 }
1737
1738 /* ?_Pnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEHXZ */
1739 /* ?_Pnavail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBA_JXZ */
1740 /* ?_Pnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEHXZ */
1741 /* ?_Pnavail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBA_JXZ */
1742 static streamsize basic_streambuf_wchar__Pnavail(const basic_streambuf_wchar *this)
1743 {
1744     TRACE("(%p)\n", this);
1745     return *this->pwpos ? *this->pwsize : 0;
1746 }
1747
1748 /* ?_Pninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEPA_WXZ */
1749 /* ?_Pninc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAPEA_WXZ */
1750 /* ?_Pninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEPAGXZ */
1751 /* ?_Pninc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAPEAGXZ */
1752 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar__Pninc, 4)
1753 wchar_t* __thiscall basic_streambuf_wchar__Pninc(basic_streambuf_wchar *this)
1754 {
1755     TRACE("(%p)\n", this);
1756     (*this->pwsize)--;
1757     return (*this->pwpos)++;
1758 }
1759
1760 /* ?underflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ */
1761 /* ?underflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ */
1762 /* ?underflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGXZ */
1763 /* ?underflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGXZ */
1764 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_underflow, 4)
1765 #define call_basic_streambuf_wchar_underflow(this) CALL_VTBL_FUNC(this, 16, \
1766         unsigned short, (basic_streambuf_wchar*), (this))
1767 unsigned short __thiscall basic_streambuf_wchar_underflow(basic_streambuf_wchar *this)
1768 {
1769     TRACE("(%p)\n", this);
1770     return WEOF;
1771 }
1772
1773 /* ?uflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ */
1774 /* ?uflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ */
1775 /* ?uflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGXZ */
1776 /* ?uflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGXZ */
1777 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_uflow, 4)
1778 #define call_basic_streambuf_wchar_uflow(this) CALL_VTBL_FUNC(this, 20, \
1779         unsigned short, (basic_streambuf_wchar*), (this))
1780 unsigned short __thiscall basic_streambuf_wchar_uflow(basic_streambuf_wchar *this)
1781 {
1782     int ret;
1783
1784     TRACE("(%p)\n", this);
1785
1786     if(call_basic_streambuf_wchar_underflow(this)==WEOF)
1787         return WEOF;
1788
1789     ret = **this->prpos;
1790     (*this->prsize)--;
1791     (*this->prpos)++;
1792     return ret;
1793 }
1794
1795 /* ?_Xsgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHPA_WIH@Z */
1796 /* ?_Xsgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEA_W_K_J@Z */
1797 /* ?_Xsgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHPAGIH@Z */
1798 /* ?_Xsgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEAG_K_J@Z */
1799 static streamsize basic_streambuf_wchar__Xsgetn_s(basic_streambuf_wchar *this, wchar_t *ptr, MSVCP_size_t size, streamsize count)
1800 {
1801     streamsize copied, chunk;
1802     unsigned short c;
1803
1804     TRACE("(%p %p %lu %ld)\n", this, ptr, size, count);
1805
1806     for(copied=0; copied<count && size;) {
1807         chunk = basic_streambuf_wchar__Gnavail(this);
1808         if(chunk > count-copied)
1809             chunk = count-copied;
1810
1811         if(chunk > 0) {
1812             memcpy_s(ptr+copied, size, *this->prpos, chunk*sizeof(wchar_t));
1813             *this->prpos += chunk;
1814             *this->prsize -= chunk;
1815             copied += chunk;
1816             size -= chunk*sizeof(wchar_t);
1817         }else if((c = call_basic_streambuf_wchar_uflow(this)) != WEOF) {
1818             ptr[copied] = c;
1819             copied++;
1820             size--;
1821         }else {
1822             break;
1823         }
1824     }
1825
1826     return copied;
1827 }
1828
1829 /* ?_Sgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHPA_WIH@Z */
1830 /* ?_Sgetn_s@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_K_J@Z */
1831 /* ?_Sgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHPAGIH@Z */
1832 /* ?_Sgetn_s@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_K_J@Z */
1833 static streamsize basic_streambuf_wchar__Sgetn_s(basic_streambuf_wchar *this, wchar_t *ptr, MSVCP_size_t size, streamsize count)
1834 {
1835     TRACE("(%p %p %lu %ld)\n", this, ptr, size, count);
1836     return basic_streambuf_wchar__Xsgetn_s(this, ptr, size, count);
1837 }
1838
1839 /* ?_Unlock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
1840 /* ?_Unlock@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
1841 /* ?_Unlock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEXXZ */
1842 /* ?_Unlock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAXXZ */
1843 static void basic_streambuf_wchar__Unlock(basic_streambuf_wchar *this)
1844 {
1845     TRACE("(%p)\n", this);
1846 }
1847
1848 /* ?eback@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1849 /* ?eback@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1850 /* ?eback@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1851 /* ?eback@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1852 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_eback, 4)
1853 wchar_t* __thiscall basic_streambuf_wchar_eback(const basic_streambuf_wchar *this)
1854 {
1855     TRACE("(%p)\n", this);
1856     return *this->prbuf;
1857 }
1858
1859 /* ?gptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1860 /* ?gptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1861 /* ?gptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1862 /* ?gptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1863 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_gptr, 4)
1864 wchar_t* __thiscall basic_streambuf_wchar_gptr(const basic_streambuf_wchar *this)
1865 {
1866     TRACE("(%p)\n", this);
1867     return *this->prpos;
1868 }
1869
1870 /* ?egptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1871 /* ?egptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1872 /* ?egptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1873 /* ?egptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1874 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_egptr, 4)
1875 wchar_t* __thiscall basic_streambuf_wchar_egptr(const basic_streambuf_wchar *this)
1876 {
1877     TRACE("(%p)\n", this);
1878     return *this->prpos+*this->prsize;
1879 }
1880
1881 /* ?epptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1882 /* ?epptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1883 /* ?epptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1884 /* ?epptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1885 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_epptr, 4)
1886 wchar_t* __thiscall basic_streambuf_wchar_epptr(const basic_streambuf_wchar *this)
1887 {
1888     TRACE("(%p)\n", this);
1889     return *this->pwpos+*this->pwsize;
1890 }
1891
1892 /* ?gbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXH@Z */
1893 /* ?gbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXH@Z */
1894 /* ?gbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXH@Z */
1895 /* ?gbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXH@Z */
1896 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_gbump, 8)
1897 void __thiscall basic_streambuf_wchar_gbump(basic_streambuf_wchar *this, int off)
1898 {
1899     TRACE("(%p %d)\n", this, off);
1900     *this->prpos += off;
1901     *this->prsize -= off;
1902 }
1903
1904 /* ?imbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEXABVlocale@2@@Z */
1905 /* ?imbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAXAEBVlocale@2@@Z */
1906 /* ?imbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEXABVlocale@2@@Z */
1907 /* ?imbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAXAEBVlocale@2@@Z */
1908 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_imbue, 8)
1909 #define call_basic_streambuf_wchar_imbue(this, loc) CALL_VTBL_FUNC(this, 48, \
1910         void, (basic_streambuf_wchar*, const locale*), (this, loc))
1911 void __thiscall basic_streambuf_wchar_imbue(basic_streambuf_wchar *this, const locale *loc)
1912 {
1913     TRACE("(%p %p)\n", this, loc);
1914 }
1915
1916 /* ?overflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z */
1917 /* ?overflow@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z */
1918 /* ?overflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGG@Z */
1919 /* ?overflow@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z */
1920 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_overflow, 8)
1921 #define call_basic_streambuf_wchar_overflow(this, ch) CALL_VTBL_FUNC(this, 4, \
1922         unsigned short, (basic_streambuf_wchar*, unsigned short), (this, ch))
1923 unsigned short __thiscall basic_streambuf_wchar_overflow(basic_streambuf_wchar *this, unsigned short ch)
1924 {
1925     TRACE("(%p %d)\n", this, ch);
1926     return WEOF;
1927 }
1928
1929 /* ?pbackfail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z */
1930 /* ?pbackfail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z */
1931 /* ?pbackfail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEGG@Z */
1932 /* ?pbackfail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z */
1933 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pbackfail, 8)
1934 #define call_basic_streambuf_wchar_pbackfail(this, ch) CALL_VTBL_FUNC(this, 8, \
1935         unsigned short, (basic_streambuf_wchar*, unsigned short), (this, ch))
1936 unsigned short __thiscall basic_streambuf_wchar_pbackfail(basic_streambuf_wchar *this, unsigned short ch)
1937 {
1938     TRACE("(%p %d)\n", this, ch);
1939     return WEOF;
1940 }
1941
1942 /* ?pbase@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1943 /* ?pbase@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1944 /* ?pbase@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1945 /* ?pbase@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1946 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pbase, 4)
1947 wchar_t* __thiscall basic_streambuf_wchar_pbase(const basic_streambuf_wchar *this)
1948 {
1949     TRACE("(%p)\n", this);
1950     return *this->pwbuf;
1951 }
1952
1953 /* ?pbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXH@Z */
1954 /* ?pbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXH@Z */
1955 /* ?pbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXH@Z */
1956 /* ?pbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXH@Z */
1957 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pbump, 8)
1958 void __thiscall basic_streambuf_wchar_pbump(basic_streambuf_wchar *this, int off)
1959 {
1960     TRACE("(%p %d)\n", this, off);
1961     *this->pwpos += off;
1962     *this->pwsize -= off;
1963 }
1964
1965 /* ?pptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IBEPA_WXZ */
1966 /* ?pptr@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEBAPEA_WXZ */
1967 /* ?pptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ */
1968 /* ?pptr@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEBAPEAGXZ */
1969 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pptr, 4)
1970 wchar_t* __thiscall basic_streambuf_wchar_pptr(const basic_streambuf_wchar *this)
1971 {
1972     TRACE("(%p)\n", this);
1973     return *this->pwpos;
1974 }
1975
1976 /* ?pubimbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
1977 /* ?pubimbue@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
1978 /* ?pubimbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
1979 /* ?pubimbue@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
1980 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubimbue, 12)
1981 locale* __thiscall basic_streambuf_wchar_pubimbue(basic_streambuf_wchar *this, locale *ret, const locale *loc)
1982 {
1983     TRACE("(%p %p)\n", this, loc);
1984     memcpy(ret, &this->loc, sizeof(locale));
1985     call_basic_streambuf_wchar_imbue(this, loc);
1986     locale_copy_ctor(&this->loc, loc);
1987     return ret;
1988 }
1989
1990 /* ?seekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@JW4seekdir@ios_base@2@H@Z */
1991 /* ?seekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@H@2@_JW4seekdir@ios_base@2@H@Z */
1992 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_seekoff, 20)
1993 #define call_basic_streambuf_wchar_seekoff(this, ret, off, way, mode) CALL_VTBL_FUNC(this, 32, \
1994         fpos_int*, (basic_streambuf_wchar*, fpos_int*, streamoff, int, int), (this, ret, off, way, mode))
1995 fpos_int* __thiscall basic_streambuf_wchar_seekoff(basic_streambuf_wchar *this,
1996         fpos_int *ret, streamoff off, int way, int mode)
1997 {
1998     TRACE("(%p %ld %d %d)\n", this, off, way, mode);
1999     ret->off = -1;
2000     ret->pos = 0;
2001     ret->state = 0;
2002     return ret;
2003 }
2004
2005 /* ?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@JHH@Z */
2006 /* ?pubseekoff@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@_JHH@Z */
2007 /* ?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@JHH@Z */
2008 /* ?pubseekoff@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@_JHH@Z */
2009 static fpos_int* basic_streambuf_wchar_pubseekoff(basic_streambuf_wchar *this,
2010         fpos_int *ret, streamoff off, int way, int mode)
2011 {
2012     TRACE("(%p %ld %d %d)\n", this, off, way, mode);
2013     return call_basic_streambuf_wchar_seekoff(this, ret, off, way, mode);
2014 }
2015
2016 /* ?seekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
2017 /* ?seekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
2018 /* ?seekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
2019 /* ?seekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
2020 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_seekpos, 36)
2021 #define call_basic_streambuf_wchar_seekpos(this, ret, pos, mode) CALL_VTBL_FUNC(this, 36, \
2022         fpos_int*, (basic_streambuf_wchar*, fpos_int*, fpos_int, int), (this, ret, pos, mode))
2023 fpos_int* __thiscall basic_streambuf_wchar_seekpos(basic_streambuf_wchar *this,
2024         fpos_int *ret, fpos_int pos, int mode)
2025 {
2026     TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
2027     ret->off = -1;
2028     ret->pos = 0;
2029     ret->state = 0;
2030     return ret;
2031 }
2032
2033 /* ?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@V32@H@Z */
2034 /* ?pubseekpos@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@V32@H@Z */
2035 /* ?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@V32@H@Z */
2036 /* ?pubseekpos@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@V32@H@Z */
2037 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubseekpos, 36)
2038 fpos_int* __thiscall basic_streambuf_wchar_pubseekpos(basic_streambuf_wchar *this,
2039         fpos_int *ret, fpos_int pos, int mode)
2040 {
2041     TRACE("(%p %s %d)\n", this, debugstr_fpos_int(&pos), mode);
2042     return call_basic_streambuf_wchar_seekpos(this, ret, pos, mode);
2043 }
2044
2045 /* ?setbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEPAV12@PA_WH@Z */
2046 /* ?setbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAPEAV12@PEA_W_J@Z */
2047 /* ?setbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEPAV12@PAGH@Z */
2048 /* ?setbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAPEAV12@PEAG_J@Z */
2049 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_setbuf, 12)
2050 #define call_basic_streambuf_wchar_setbuf(this, buf, count) CALL_VTBL_FUNC(this, 40, \
2051         basic_streambuf_wchar*, (basic_streambuf_wchar*, wchar_t*, streamsize), (this, buf, count))
2052 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_setbuf(basic_streambuf_wchar *this, wchar_t *buf, streamsize count)
2053 {
2054     TRACE("(%p %p %ld)\n", this, buf, count);
2055     return this;
2056 }
2057
2058 /* ?pubsetbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@PA_WH@Z */
2059 /* ?pubsetbuf@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@PEA_W_J@Z */
2060 /* ?pubsetbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEPAV12@PAGH@Z */
2061 /* ?pubsetbuf@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@PEAG_J@Z */
2062 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubsetbuf, 12)
2063 basic_streambuf_wchar* __thiscall basic_streambuf_wchar_pubsetbuf(basic_streambuf_wchar *this, wchar_t *buf, streamsize count)
2064 {
2065     TRACE("(%p %p %ld)\n", this, buf, count);
2066     return call_basic_streambuf_wchar_setbuf(this, buf, count);
2067 }
2068
2069 /* ?sync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHXZ */
2070 /* ?sync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAAHXZ */
2071 /* ?sync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHXZ */
2072 /* ?sync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAAHXZ */
2073 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sync, 4)
2074 #define call_basic_streambuf_wchar_sync(this) CALL_VTBL_FUNC(this, 44, \
2075         int, (basic_streambuf_wchar*), (this))
2076 int __thiscall basic_streambuf_wchar_sync(basic_streambuf_wchar *this)
2077 {
2078     TRACE("(%p)\n", this);
2079     return 0;
2080 }
2081
2082 /* ?pubsync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHXZ */
2083 /* ?pubsync@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAHXZ */
2084 /* ?pubsync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHXZ */
2085 /* ?pubsync@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAHXZ */
2086 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_pubsync, 4)
2087 int __thiscall basic_streambuf_wchar_pubsync(basic_streambuf_wchar *this)
2088 {
2089     TRACE("(%p)\n", this);
2090     return call_basic_streambuf_wchar_sync(this);
2091 }
2092
2093 /* ?sgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHPA_WH@Z */
2094 /* ?sgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_J@Z */
2095 /* ?sgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHPAGH@Z */
2096 /* ?sgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_J@Z */
2097 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sgetn, 12)
2098 streamsize __thiscall basic_streambuf_wchar_sgetn(basic_streambuf_wchar *this, wchar_t *ptr, streamsize count)
2099 {
2100     TRACE("(%p %p %ld)\n", this, ptr, count);
2101     return basic_streambuf_wchar__Xsgetn_s(this, ptr, -1, count);
2102 }
2103
2104 /* ?showmanyc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHXZ */
2105 /* ?showmanyc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JXZ */
2106 /* ?showmanyc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHXZ */
2107 /* ?showmanyc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JXZ */
2108 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_showmanyc, 4)
2109 #define call_basic_streambuf_wchar_showmanyc(this) CALL_VTBL_FUNC(this, 12, \
2110         streamsize, (basic_streambuf_wchar*), (this))
2111 streamsize __thiscall basic_streambuf_wchar_showmanyc(basic_streambuf_wchar *this)
2112 {
2113     TRACE("(%p)\n", this);
2114     return 0;
2115 }
2116
2117 /* ?in_avail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHXZ */
2118 /* ?in_avail@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JXZ */
2119 /* ?in_avail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHXZ */
2120 /* ?in_avail@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JXZ */
2121 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_in_avail, 4)
2122 streamsize __thiscall basic_streambuf_wchar_in_avail(basic_streambuf_wchar *this)
2123 {
2124     streamsize ret;
2125
2126     TRACE("(%p)\n", this);
2127
2128     ret = basic_streambuf_wchar__Gnavail(this);
2129     return ret ? ret : call_basic_streambuf_wchar_showmanyc(this);
2130 }
2131
2132 /* ?sputbackc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEG_W@Z */
2133 /* ?sputbackc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAG_W@Z */
2134 /* ?sputbackc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGG@Z */
2135 /* ?sputbackc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGG@Z */
2136 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sputbackc, 8)
2137 unsigned short __thiscall basic_streambuf_wchar_sputbackc(basic_streambuf_wchar *this, wchar_t ch)
2138 {
2139     TRACE("(%p %d)\n", this, ch);
2140     if(*this->prpos && *this->prpos>*this->prbuf && (*this->prpos)[-1]==ch) {
2141         (*this->prsize)++;
2142         (*this->prpos)--;
2143         return ch;
2144     }
2145
2146     return call_basic_streambuf_wchar_pbackfail(this, ch);
2147 }
2148
2149 /* ?sputc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEG_W@Z */
2150 /* ?sputc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAG_W@Z */
2151 /* ?sputc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGG@Z */
2152 /* ?sputc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAHG@Z */
2153 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sputc, 8)
2154 unsigned short __thiscall basic_streambuf_wchar_sputc(basic_streambuf_wchar *this, wchar_t ch)
2155 {
2156     TRACE("(%p %d)\n", this, ch);
2157     return basic_streambuf_wchar__Pnavail(this) ?
2158         (*basic_streambuf_wchar__Pninc(this) = ch) :
2159         call_basic_streambuf_wchar_overflow(this, ch);
2160 }
2161
2162 /* ?sungetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
2163 /* ?sungetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
2164 /* ?sungetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ */
2165 /* ?sungetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ */
2166 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sungetc, 4)
2167 unsigned short __thiscall basic_streambuf_wchar_sungetc(basic_streambuf_wchar *this)
2168 {
2169     TRACE("(%p)\n", this);
2170     if(*this->prpos && *this->prpos>*this->prbuf) {
2171         (*this->prsize)++;
2172         (*this->prpos)--;
2173         return **this->prpos;
2174     }
2175
2176     return call_basic_streambuf_wchar_pbackfail(this, WEOF);
2177 }
2178
2179 /* ?stossc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
2180 /* ?stossc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
2181 /* ?stossc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEXXZ */
2182 /* ?stossc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAXXZ */
2183 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_stossc, 4)
2184 void __thiscall basic_streambuf_wchar_stossc(basic_streambuf_wchar *this)
2185 {
2186     TRACE("(%p)\n", this);
2187     if(basic_streambuf_wchar__Gnavail(this))
2188         basic_streambuf_wchar__Gninc(this);
2189     else
2190         call_basic_streambuf_wchar_uflow(this);
2191 }
2192
2193 /* ?sbumpc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
2194 /* ?sbumpc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
2195 /* ?sbumpc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ */
2196 /* ?sbumpc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ */
2197 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sbumpc, 4)
2198 unsigned short __thiscall basic_streambuf_wchar_sbumpc(basic_streambuf_wchar *this)
2199 {
2200     TRACE("(%p)\n", this);
2201     return basic_streambuf_wchar__Gnavail(this) ?
2202         *basic_streambuf_wchar__Gninc(this) : call_basic_streambuf_wchar_uflow(this);
2203 }
2204
2205 /* ?sgetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
2206 /* ?sgetc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
2207 /* ?sgetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ */
2208 /* ?sgetc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ */
2209 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sgetc, 4)
2210 unsigned short __thiscall basic_streambuf_wchar_sgetc(basic_streambuf_wchar *this)
2211 {
2212     TRACE("(%p)\n", this);
2213     return basic_streambuf_wchar__Gnavail(this) ?
2214         *basic_streambuf_wchar_gptr(this) : call_basic_streambuf_wchar_underflow(this);
2215 }
2216
2217 /* ?snextc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
2218 /* ?snextc@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
2219 /* ?snextc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEGXZ */
2220 /* ?snextc@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAAGXZ */
2221 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_snextc, 4)
2222 unsigned short __thiscall basic_streambuf_wchar_snextc(basic_streambuf_wchar *this)
2223 {
2224     TRACE("(%p)\n", this);
2225
2226     if(basic_streambuf_wchar__Gnavail(this) > 1)
2227         return *basic_streambuf_wchar__Gnpreinc(this);
2228     return basic_streambuf_wchar_sbumpc(this)==WEOF ?
2229         WEOF : basic_streambuf_wchar_sgetc(this);
2230 }
2231
2232 /* ?xsgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHPA_WH@Z */
2233 /* ?xsgetn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEA_W_J@Z */
2234 /* ?xsgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHPAGH@Z */
2235 /* ?xsgetn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEAG_J@Z */
2236 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_xsgetn, 12)
2237 #define call_basic_streambuf_wchar_xsgetn(this, ptr, count) CALL_VTBL_FUNC(this, 24, \
2238         streamsize, (basic_streambuf_wchar*, wchar_t*, streamsize), (this, ptr, count))
2239 streamsize __thiscall basic_streambuf_wchar_xsgetn(basic_streambuf_wchar *this, wchar_t *ptr, streamsize count)
2240 {
2241     TRACE("(%p %p %ld)\n", this, ptr, count);
2242     return basic_streambuf_wchar__Xsgetn_s(this, ptr, -1, count);
2243 }
2244
2245 /* ?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MAEHPB_WH@Z */
2246 /* ?xsputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@MEAA_JPEB_W_J@Z */
2247 /* ?xsputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MAEHPBGH@Z */
2248 /* ?xsputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@MEAA_JPEBG_J@Z */
2249 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_xsputn, 12)
2250 #define call_basic_streambuf_wchar_xsputn(this, ptr, count) CALL_VTBL_FUNC(this, 28, \
2251         streamsize, (basic_streambuf_wchar*, const wchar_t*, streamsize), (this, ptr, count))
2252 streamsize __thiscall basic_streambuf_wchar_xsputn(basic_streambuf_wchar *this, const wchar_t *ptr, streamsize count)
2253 {
2254     streamsize copied, chunk;
2255
2256     TRACE("(%p %p %ld)\n", this, ptr, count);
2257
2258     for(copied=0; copied<count;) {
2259         chunk = basic_streambuf_wchar__Pnavail(this);
2260         if(chunk > count-copied)
2261             chunk = count-copied;
2262
2263         if(chunk > 0) {
2264             memcpy(*this->pwpos, ptr+copied, chunk*sizeof(wchar_t));
2265             *this->pwpos += chunk;
2266             *this->pwsize -= chunk;
2267             copied += chunk;
2268         }else if(call_basic_streambuf_wchar_overflow(this, ptr[copied]) != WEOF) {
2269             copied++;
2270         }else {
2271             break;
2272         }
2273     }
2274
2275     return copied;
2276 }
2277
2278 /* ?sputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QAEHPB_WH@Z */
2279 /* ?sputn@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@QEAA_JPEB_W_J@Z */
2280 /* ?sputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEHPBGH@Z */
2281 /* ?sputn@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QEAA_JPEBG_J@Z */
2282 DEFINE_THISCALL_WRAPPER(basic_streambuf_wchar_sputn, 12)
2283 streamsize __thiscall basic_streambuf_wchar_sputn(basic_streambuf_wchar *this, const wchar_t *ptr, streamsize count)
2284 {
2285     TRACE("(%p %p %ld)\n", this, ptr, count);
2286     return call_basic_streambuf_wchar_xsputn(this, ptr, count);
2287 }
2288
2289 /* ?_Stinit@?1??_Init@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@23@@Z@4HA */
2290 /* ?_Stinit@?1??_Init@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@23@@Z@4HA */
2291 int basic_filebuf_char__Init__Stinit = 0;
2292
2293 /* ?_Init@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@12@@Z */
2294 /* ?_Init@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@12@@Z */
2295 DEFINE_THISCALL_WRAPPER(basic_filebuf_char__Init, 12)
2296 void __thiscall basic_filebuf_char__Init(basic_filebuf_char *this, FILE *file, basic_filebuf__Initfl which)
2297 {
2298     TRACE("(%p %p %d)\n", this, file, which);
2299
2300     this->cvt = NULL;
2301     this->state0 = basic_filebuf_char__Init__Stinit;
2302     this->state = basic_filebuf_char__Init__Stinit;
2303     this->str = NULL;
2304     this->close = (which == INITFL_open);
2305     this->file = file;
2306
2307     basic_streambuf_char__Init_empty(&this->base);
2308     if(file)
2309         basic_streambuf_char__Init(&this->base, &file->_base, &file->_ptr,
2310                 &file->_cnt, &file->_base, &file->_ptr, &file->_cnt);
2311 }
2312
2313 /* ?_Initcvt@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IAEXXZ */
2314 /* ?_Initcvt@?$basic_filebuf@DU?$char_traits@D@std@@@std@@IEAAXXZ */
2315 DEFINE_THISCALL_WRAPPER(basic_filebuf_char__Initcvt, 4)
2316 void __thiscall basic_filebuf_char__Initcvt(basic_filebuf_char *this)
2317 {
2318     TRACE("(%p)\n", this);
2319
2320     this->cvt = codecvt_char_use_facet(&this->base.loc);
2321     locale__Addfac(&this->loc, &this->cvt->base.facet, codecvt_char_id.id, LC_CTYPE);
2322     if(codecvt_base_always_noconv(&this->cvt->base)) {
2323         this->cvt = NULL;
2324     }else {
2325         this->str = MSVCRT_operator_new(sizeof(basic_string_char));
2326         basic_string_char_ctor(this->str);
2327     }
2328 }
2329
2330 /* ?close@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@XZ */
2331 /* ?close@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@XZ */
2332 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_close, 4)
2333 basic_filebuf_char* __thiscall basic_filebuf_char_close(basic_filebuf_char *this)
2334 {
2335     basic_filebuf_char *ret = this;
2336
2337     TRACE("(%p)\n", this);
2338
2339     if(!this->file || fclose(this->file))
2340         return NULL;
2341
2342     basic_filebuf_char__Init(this, NULL, INITFL_close);
2343     return ret;
2344 }
2345
2346 /* ??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAE@PAU_iobuf@@@Z */
2347 /* ??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAA@PEAU_iobuf@@@Z */
2348 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_ctor_file, 8)
2349 basic_filebuf_char* __thiscall basic_filebuf_char_ctor_file(basic_filebuf_char *this, FILE *file)
2350 {
2351     TRACE("(%p %p)\n", this, file);
2352
2353     basic_streambuf_char_ctor(&this->base);
2354     this->base.vtable = &MSVCP_basic_filebuf_char_vtable;
2355
2356     locale_ctor(&this->loc);
2357     basic_filebuf_char__Init(this, file, INITFL_new);
2358     return this;
2359 }
2360
2361 /* ??_F?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEXXZ */
2362 /* ??_F?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAXXZ */
2363 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_ctor, 4)
2364 basic_filebuf_char* __thiscall basic_filebuf_char_ctor(basic_filebuf_char *this)
2365 {
2366     return basic_filebuf_char_ctor_file(this, NULL);
2367 }
2368
2369 /* ??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@@Z */
2370 /* ??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@@Z */
2371 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_ctor_uninitialized, 8)
2372 basic_filebuf_char* __thiscall basic_filebuf_char_ctor_uninitialized(basic_filebuf_char *this, int uninitialized)
2373 {
2374     TRACE("(%p %d)\n", this, uninitialized);
2375
2376     basic_streambuf_char_ctor_uninitialized(&this->base, 0);
2377     this->base.vtable = &MSVCP_basic_filebuf_char_vtable;
2378     locale_ctor(&this->loc);
2379     return this;
2380 }
2381
2382 /* ??1?$basic_filebuf@DU?$char_traits@D@std@@@std@@UAE@XZ */
2383 /* ??1?$basic_filebuf@DU?$char_traits@D@std@@@std@@UEAA@XZ */
2384 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_dtor, 4)
2385 void __thiscall basic_filebuf_char_dtor(basic_filebuf_char *this)
2386 {
2387     TRACE("(%p)\n", this);
2388
2389     if(this->close)
2390         basic_filebuf_char_close(this);
2391     if(this->str) {
2392         basic_string_char_dtor(this->str);
2393         MSVCRT_operator_delete(this->str);
2394     }
2395     locale_dtor(&this->loc);
2396     basic_streambuf_char_dtor(&this->base);
2397 }
2398
2399 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_vector_dtor, 8)
2400 basic_filebuf_char* __thiscall basic_filebuf_char_vector_dtor(basic_filebuf_char *this, unsigned int flags)
2401 {
2402     TRACE("(%p %x)\n", this, flags);
2403     if(flags & 2) {
2404         /* we have an array, with the number of elements stored before the first object */
2405         INT_PTR i, *ptr = (INT_PTR *)this-1;
2406
2407         for(i=*ptr-1; i>=0; i--)
2408             basic_filebuf_char_dtor(this+i);
2409         MSVCRT_operator_delete(ptr);
2410     } else {
2411         basic_filebuf_char_dtor(this);
2412         if(flags & 1)
2413             MSVCRT_operator_delete(this);
2414     }
2415
2416     return this;
2417 }
2418
2419 /* ?is_open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QBE_NXZ */
2420 /* ?is_open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEBA_NXZ */
2421 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_is_open, 4)
2422 MSVCP_bool __thiscall basic_filebuf_char_is_open(const basic_filebuf_char *this)
2423 {
2424     TRACE("(%p)\n", this);
2425     return this->file != NULL;
2426 }
2427
2428 /* ?_Fiopen@std@@YAPAU_iobuf@@PB_WHH@Z */
2429 /* ?_Fiopen@std@@YAPEAU_iobuf@@PEB_WHH@Z */
2430 static FILE* _Fiopen_wchar(const wchar_t *name, int mode, int prot)
2431 {
2432     static const wchar_t rW[] = {'r',0};
2433     static const struct {
2434         int mode;
2435         const wchar_t str[4];
2436         const wchar_t str_bin[4];
2437     } str_mode[] = {
2438         {OPENMODE_out,                            {'w',0},     {'w','b',0}},
2439         {OPENMODE_out|OPENMODE_app,               {'a',0},     {'a','b',0}},
2440         {OPENMODE_app,                            {'a',0},     {'a','b',0}},
2441         {OPENMODE_out|OPENMODE_trunc,             {'w',0},     {'w','b',0}},
2442         {OPENMODE_in,                             {'r',0},     {'r','b',0}},
2443         {OPENMODE_in|OPENMODE_out,                {'r','+',0}, {'r','+','b',0}},
2444         {OPENMODE_in|OPENMODE_out|OPENMODE_trunc, {'w','+',0}, {'w','+','b',0}},
2445         {OPENMODE_in|OPENMODE_out|OPENMODE_app,   {'a','+',0}, {'a','+','b',0}},
2446         {OPENMODE_in|OPENMODE_app,                {'a','+',0}, {'a','+','b',0}}
2447     };
2448
2449     int real_mode = mode & ~(OPENMODE_ate|OPENMODE__Nocreate|OPENMODE__Noreplace|OPENMODE_binary);
2450     unsigned int mode_idx;
2451     FILE *f = NULL;
2452
2453     TRACE("(%s %d %d)\n", debugstr_w(name), mode, prot);
2454
2455     for(mode_idx=0; mode_idx<sizeof(str_mode)/sizeof(str_mode[0]); mode_idx++)
2456         if(str_mode[mode_idx].mode == real_mode)
2457             break;
2458     if(mode_idx == sizeof(str_mode)/sizeof(str_mode[0]))
2459         return NULL;
2460
2461     if((mode & OPENMODE__Nocreate) && !(f = _wfopen(name, rW)))
2462         return NULL;
2463     else if(f)
2464         fclose(f);
2465
2466     if((mode & OPENMODE__Noreplace) && (mode & (OPENMODE_out|OPENMODE_app))
2467             && (f = _wfopen(name, rW))) {
2468         fclose(f);
2469         return NULL;
2470     }
2471
2472     f = _wfsopen(name, (mode & OPENMODE_binary) ? str_mode[mode_idx].str_bin
2473             : str_mode[mode_idx].str, prot);
2474     if(!f)
2475         return NULL;
2476
2477     if((mode & OPENMODE_ate) && fseek(f, 0, SEEK_END)) {
2478         fclose(f);
2479         return NULL;
2480     }
2481
2482     return f;
2483 }
2484
2485 /* ?_Fiopen@std@@YAPAU_iobuf@@PBDHH@Z */
2486 /* ?_Fiopen@std@@YAPEAU_iobuf@@PEBDHH@Z */
2487 static FILE* _Fiopen(const char *name, int mode, int prot)
2488 {
2489     wchar_t nameW[FILENAME_MAX];
2490
2491     TRACE("(%s %d %d)\n", name, mode, prot);
2492
2493     if(mbstowcs_s(NULL, nameW, FILENAME_MAX, name, FILENAME_MAX-1) != 0)
2494         return NULL;
2495     return _Fiopen_wchar(nameW, mode, prot);
2496 }
2497
2498 /* ?__Fiopen@std@@YAPAU_iobuf@@PBDH@Z */
2499 /* ?__Fiopen@std@@YAPEAU_iobuf@@PEBDH@Z */
2500 FILE* __cdecl ___Fiopen(const char *name, int mode)
2501 {
2502     TRACE("(%p %d)\n", name, mode);
2503     return _Fiopen(name, mode, _SH_DENYNO);
2504 }
2505
2506 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PB_WHH@Z */
2507 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEB_WHH@Z */
2508 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PBGHH@Z */
2509 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEBGHH@Z */
2510 static basic_filebuf_char* basic_filebuf_char_open_wchar(basic_filebuf_char *this, const wchar_t *name, int mode, int prot)
2511 {
2512     FILE *f = NULL;
2513
2514     TRACE("(%p %s %d %d)\n", this, debugstr_w(name), mode, prot);
2515
2516     if(basic_filebuf_char_is_open(this))
2517         return NULL;
2518
2519     if(!(f = _Fiopen_wchar(name, mode, prot)))
2520         return NULL;
2521
2522     basic_filebuf_char__Init(this, f, INITFL_open);
2523     basic_filebuf_char__Initcvt(this);
2524     return this;
2525 }
2526
2527 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PBDHH@Z */
2528 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEBDHH@Z */
2529 static basic_filebuf_char* basic_filebuf_char_open(basic_filebuf_char *this, const char *name, int mode, int prot)
2530 {
2531     wchar_t nameW[FILENAME_MAX];
2532
2533     TRACE("(%p %s %d %d)\n", this, name, mode, prot);
2534
2535     if(mbstowcs_s(NULL, nameW, FILENAME_MAX, name, FILENAME_MAX-1) != 0)
2536         return NULL;
2537     return basic_filebuf_char_open_wchar(this, nameW, mode, prot);
2538 }
2539
2540 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PBDF@Z */
2541 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEBDF@Z */
2542 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_open_mode_old, 12)
2543 basic_filebuf_char* __thiscall basic_filebuf_char_open_mode_old(basic_filebuf_char *this, const char *name, short mode)
2544 {
2545     TRACE("(%p %p %d)\n", this, name, mode);
2546     return basic_filebuf_char_open(this, name, mode, _SH_DENYNO);
2547 }
2548
2549 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAEPAV12@PBDH@Z */
2550 /* ?open@?$basic_filebuf@DU?$char_traits@D@std@@@std@@QEAAPEAV12@PEBDH@Z */
2551 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_open_mode, 12)
2552 basic_filebuf_char* __thiscall basic_filebuf_char_open_mode(basic_filebuf_char *this, const char *name, int mode)
2553 {
2554     TRACE("(%p %p %d)\n", this, name, mode);
2555     return basic_filebuf_char_open(this, name, mode, _SH_DENYNO);
2556 }
2557
2558 /* ?overflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHH@Z */
2559 /* ?overflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z */
2560 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_overflow, 8)
2561 int __thiscall basic_filebuf_char_overflow(basic_filebuf_char *this, int c)
2562 {
2563     char *ptr, ch = c, *to_next;
2564     const char *from_next;
2565     int ret;
2566
2567
2568     TRACE("(%p %d)\n", this, c);
2569
2570     if(!basic_filebuf_char_is_open(this))
2571         return EOF;
2572     if(c == EOF)
2573         return !c;
2574
2575     if(!this->cvt)
2576         return fwrite(&ch, sizeof(char), 1, this->file) ? c : EOF;
2577
2578     from_next = &ch;
2579     basic_string_char_clear(this->str);
2580     basic_string_char_append_len_ch(this->str, 8, '\0');
2581     ptr = this->str->ptr;
2582     ret = codecvt_char_out(this->cvt, &this->state, from_next, &ch+1, &from_next,
2583             ptr, ptr+basic_string_char_length(this->str), &to_next);
2584
2585     switch(ret) {
2586     case CODECVT_partial:
2587         if(from_next == &ch)
2588             return EOF;
2589     case CODECVT_ok:
2590         if(!fwrite(ptr, to_next-ptr, 1, this->file))
2591             return EOF;
2592         return c;
2593     case CODECVT_noconv:
2594         return fwrite(&ch, sizeof(char), 1, this->file) ? c : EOF;
2595     default:
2596         return EOF;
2597     }
2598 }
2599
2600 /* ?pbackfail@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHH@Z */
2601 /* ?pbackfail@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z */
2602 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_pbackfail, 8)
2603 int __thiscall basic_filebuf_char_pbackfail(basic_filebuf_char *this, int c)
2604 {
2605     TRACE("(%p %d)\n", this, c);
2606
2607     if(!basic_filebuf_char_is_open(this))
2608         return EOF;
2609
2610     if(basic_streambuf_char_gptr(&this->base)>basic_streambuf_char_eback(&this->base)
2611             && (c==EOF || (int)(unsigned char)basic_streambuf_char_gptr(&this->base)[-1]==c)) {
2612         basic_streambuf_char__Gndec(&this->base);
2613         return c==EOF ? !c : c;
2614     }else if(c == EOF) {
2615         return EOF;
2616     }else if(!this->cvt) {
2617         return ungetc(c, this->file);
2618     }else if(basic_string_char_length(this->str)) {
2619         char *b, *e, *cur;
2620
2621         e = this->str->ptr;
2622         b = e+this->str->size-1;
2623         for(cur = b; cur>=e; cur--) {
2624             if(ungetc(*cur, this->file) == EOF) {
2625                 for(; cur<=b; cur++)
2626                     fgetc(this->file);
2627                 return EOF;
2628             }
2629         }
2630         basic_string_char_clear(this->str);
2631         this->state = this->state0;
2632         return c;
2633     }
2634
2635     return EOF;
2636 }
2637
2638 /* ?uflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
2639 /* ?uflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
2640 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_uflow, 4)
2641 int __thiscall basic_filebuf_char_uflow(basic_filebuf_char *this)
2642 {
2643     char ch, *to_next;
2644     const char *buf_next;
2645     int c;
2646
2647     TRACE("(%p)\n", this);
2648
2649     if(!basic_filebuf_char_is_open(this))
2650         return EOF;
2651
2652     if(basic_streambuf_char_gptr(&this->base) < basic_streambuf_char_egptr(&this->base))
2653         return (unsigned char)*basic_streambuf_char__Gninc(&this->base);
2654
2655     c = fgetc(this->file);
2656     if(!this->cvt || c==EOF)
2657         return c;
2658
2659     basic_string_char_clear(this->str);
2660     this->state0 = this->state;
2661     while(1) {
2662         basic_string_char_append_ch(this->str, c);
2663         this->state = this->state0;
2664
2665         switch(codecvt_char_in(this->cvt, &this->state, this->str->ptr,
2666                     this->str->ptr+this->str->size, &buf_next, &ch, &ch+1, &to_next)) {
2667         case CODECVT_partial:
2668             break;
2669         case CODECVT_noconv:
2670             return (unsigned char)this->str->ptr[0];
2671         case CODECVT_ok:
2672             return (unsigned char)ch;
2673         default:
2674             return EOF;
2675         }
2676
2677         c = fgetc(this->file);
2678         if(c == EOF)
2679             return EOF;
2680     }
2681 }
2682
2683 /* ?underflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
2684 /* ?underflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
2685 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_underflow, 4)
2686 int __thiscall basic_filebuf_char_underflow(basic_filebuf_char *this)
2687 {
2688     int ret;
2689
2690     TRACE("(%p)\n", this);
2691
2692     if(basic_streambuf_char_gptr(&this->base) < basic_streambuf_char_egptr(&this->base))
2693         return (unsigned char)*basic_streambuf_char_gptr(&this->base);
2694
2695     ret = call_basic_streambuf_char_uflow(&this->base);
2696     if(ret != EOF)
2697         ret = call_basic_streambuf_char_pbackfail(&this->base, ret);
2698     return ret;
2699 }
2700
2701 /* ?seekoff@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@JW4seekdir@ios_base@2@H@Z */
2702 /* ?seekoff@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@H@2@_JW4seekdir@ios_base@2@H@Z */
2703 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_seekoff, 20)
2704 fpos_int* __thiscall basic_filebuf_char_seekoff(basic_filebuf_char *this,
2705         fpos_int *ret, streamoff off, int way, int mode)
2706 {
2707     fpos_t pos;
2708
2709     TRACE("(%p %p %ld %d %d)\n", this, ret, off, way, mode);
2710
2711     if(!basic_filebuf_char_is_open(this) || fseek(this->file, off, way)) {
2712         ret->off = -1;
2713         ret->pos = 0;
2714         ret->state = 0;
2715         return ret;
2716     }
2717
2718     fgetpos(this->file, &pos);
2719     ret->off = 0;
2720     ret->pos = pos;
2721     ret->state = this->state;
2722     return ret;
2723 }
2724
2725 /* ?seekpos@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
2726 /* ?seekpos@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
2727 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_seekpos, 36)
2728 fpos_int* __thiscall basic_filebuf_char_seekpos(basic_filebuf_char *this,
2729         fpos_int *ret, fpos_int pos, int mode)
2730 {
2731     fpos_t fpos;
2732
2733     TRACE("(%p %p %s %d)\n", this, ret, debugstr_fpos_int(&pos), mode);
2734
2735     if(!basic_filebuf_char_is_open(this) || fseek(this->file, (LONG)pos.pos, SEEK_SET)
2736             || (pos.off && fseek(this->file, pos.off, SEEK_CUR))) {
2737         ret->off = -1;
2738         ret->pos = 0;
2739         ret->state = 0;
2740         return ret;
2741     }
2742
2743     fgetpos(this->file, &fpos);
2744     ret->off = 0;
2745     ret->pos = fpos;
2746     ret->state = this->state;
2747     return ret;
2748 }
2749
2750 /* ?setbuf@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PADH@Z */
2751 /* ?setbuf@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PEAD_J@Z */
2752 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_setbuf, 12)
2753 basic_streambuf_char* __thiscall basic_filebuf_char_setbuf(basic_filebuf_char *this, char *buf, streamsize count)
2754 {
2755     TRACE("(%p %p %ld)\n", this, buf, count);
2756
2757     if(!basic_filebuf_char_is_open(this))
2758         return NULL;
2759
2760     if(setvbuf(this->file, buf, (buf==NULL && count==0) ? _IONBF : _IOFBF, count))
2761         return NULL;
2762
2763     basic_filebuf_char__Init(this, this->file, INITFL_open);
2764     return &this->base;
2765 }
2766
2767 /* ?sync@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHXZ */
2768 /* ?sync@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHXZ */
2769 DEFINE_THISCALL_WRAPPER(basic_filebuf_char_sync, 4)
2770 int __thiscall basic_filebuf_char_sync(basic_filebuf_char *this)
2771 {
2772     TRACE("(%p)\n", this);
2773
2774     if(!basic_filebuf_char_is_open(this))
2775         return 0;
2776
2777     if(call_basic_streambuf_char_overflow(&this->base, EOF) == EOF)
2778         return 0;
2779     return fflush(this->file);
2780 }
2781
2782 /* ?_Stinit@?1??_Init@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@23@@Z@4HA */
2783 /* ?_Stinit@?1??_Init@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@23@@Z@4HA */
2784 int basic_filebuf_short__Init__Stinit = 0;
2785
2786 /* ?_Init@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@12@@Z */
2787 /* ?_Init@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@12@@Z */
2788 static void basic_filebuf_wchar__Init(basic_filebuf_wchar *this, FILE *file, basic_filebuf__Initfl which)
2789 {
2790     TRACE("(%p %p %d)\n", this, file, which);
2791
2792     this->cvt = NULL;
2793     this->state0 = basic_filebuf_short__Init__Stinit;
2794     this->state = basic_filebuf_short__Init__Stinit;
2795     this->str = NULL;
2796     this->close = (which == INITFL_open);
2797     this->file = file;
2798
2799     basic_streambuf_wchar__Init_empty(&this->base);
2800 }
2801
2802 /* ?_Init@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IAEXPAU_iobuf@@W4_Initfl@12@@Z */
2803 /* ?_Init@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IEAAXPEAU_iobuf@@W4_Initfl@12@@Z */
2804 DEFINE_THISCALL_WRAPPER(basic_filebuf_short__Init, 12)
2805 void __thiscall basic_filebuf_short__Init(basic_filebuf_wchar *this, FILE *file, basic_filebuf__Initfl which)
2806 {
2807     TRACE("(%p %p %d)\n", this, file, which);
2808
2809     this->cvt = NULL;
2810     this->state0 = basic_filebuf_short__Init__Stinit;
2811     this->state = basic_filebuf_short__Init__Stinit;
2812     this->str = NULL;
2813     this->close = (which == INITFL_open);
2814     this->file = file;
2815
2816     basic_streambuf_wchar__Init_empty(&this->base);
2817 }
2818
2819 /* ?_Initcvt@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IAEXXZ */
2820 /* ?_Initcvt@?$basic_filebuf@GU?$char_traits@G@std@@@std@@IEAAXXZ */
2821 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar__Initcvt, 4)
2822 void __thiscall basic_filebuf_wchar__Initcvt(basic_filebuf_wchar *this)
2823 {
2824     TRACE("(%p)\n", this);
2825
2826     this->cvt = codecvt_short_use_facet(&this->base.loc);
2827     locale__Addfac(&this->loc, &this->cvt->base.facet, codecvt_short_id.id, LC_CTYPE);
2828     if(codecvt_base_always_noconv(&this->cvt->base)) {
2829         this->cvt = NULL;
2830     }else {
2831         this->str = MSVCRT_operator_new(sizeof(basic_string_char));
2832         basic_string_char_ctor(this->str);
2833     }
2834 }
2835
2836 /* ?close@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@XZ */
2837 /* ?close@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@XZ */
2838 /* ?close@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAEPAV12@XZ */
2839 /* ?close@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@XZ */
2840 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_close, 4)
2841 basic_filebuf_wchar* __thiscall basic_filebuf_wchar_close(basic_filebuf_wchar *this)
2842 {
2843     basic_filebuf_wchar *ret = this;
2844
2845     TRACE("(%p)\n", this);
2846
2847     if(!this->file || fclose(this->file))
2848         return NULL;
2849
2850     basic_filebuf_wchar__Init(this, NULL, INITFL_close);
2851     return ret;
2852 }
2853
2854 /* ??0?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAE@PAU_iobuf@@@Z */
2855 /* ??0?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAA@PEAU_iobuf@@@Z */
2856 static basic_filebuf_wchar* basic_filebuf_wchar_ctor_file(basic_filebuf_wchar *this, FILE *file)
2857 {
2858     TRACE("(%p %p)\n", this, file);
2859
2860     basic_streambuf_wchar_ctor(&this->base);
2861     this->base.vtable = &MSVCP_basic_filebuf_wchar_vtable;
2862
2863     locale_ctor(&this->loc);
2864     basic_filebuf_wchar__Init(this, file, INITFL_new);
2865     return this;
2866 }
2867
2868 /* ??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAE@PAU_iobuf@@@Z */
2869 /* ??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAA@PEAU_iobuf@@@Z */
2870 DEFINE_THISCALL_WRAPPER(basic_filebuf_short_ctor_file, 8)
2871 basic_filebuf_wchar* __thiscall basic_filebuf_short_ctor_file(basic_filebuf_wchar *this, FILE *file)
2872 {
2873     TRACE("(%p %p)\n", this, file);
2874
2875     basic_streambuf_short_ctor(&this->base);
2876     this->base.vtable = &MSVCP_basic_filebuf_short_vtable;
2877
2878     locale_ctor(&this->loc);
2879     basic_filebuf_short__Init(this, file, INITFL_new);
2880     return this;
2881 }
2882
2883 /* ??_F?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
2884 /* ??_F?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
2885 static basic_filebuf_wchar* basic_filebuf_wchar_ctor(basic_filebuf_wchar *this)
2886 {
2887     return basic_filebuf_wchar_ctor_file(this, NULL);
2888 }
2889
2890 /* ??_F?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAEXXZ */
2891 /* ??_F?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAAXXZ */
2892 DEFINE_THISCALL_WRAPPER(basic_filebuf_short_ctor, 4)
2893 basic_filebuf_wchar* __thiscall basic_filebuf_short_ctor(basic_filebuf_wchar *this)
2894 {
2895     return basic_filebuf_short_ctor_file(this, NULL);
2896 }
2897
2898 /* ??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@@Z */
2899 /* ??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAA@W4_Uninitialized@1@@Z */
2900 DEFINE_THISCALL_WRAPPER(basic_filebuf_short_ctor_uninitialized, 8)
2901 basic_filebuf_wchar* __thiscall basic_filebuf_short_ctor_uninitialized(basic_filebuf_wchar *this, int uninitialized)
2902 {
2903     TRACE("(%p %d)\n", this, uninitialized);
2904
2905     basic_streambuf_short_ctor_uninitialized(&this->base, 0);
2906     this->base.vtable = &MSVCP_basic_filebuf_short_vtable;
2907     locale_ctor(&this->loc);
2908     return this;
2909 }
2910
2911 /* ??1?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
2912 /* ??1?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
2913 /* ??1?$basic_filebuf@GU?$char_traits@G@std@@@std@@UAE@XZ */
2914 /* ??1?$basic_filebuf@GU?$char_traits@G@std@@@std@@UEAA@XZ */
2915 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_dtor, 4)
2916 void __thiscall basic_filebuf_wchar_dtor(basic_filebuf_wchar *this)
2917 {
2918     TRACE("(%p)\n", this);
2919
2920     if(this->close)
2921         basic_filebuf_wchar_close(this);
2922     if(this->str) {
2923         basic_string_char_dtor(this->str);
2924         MSVCRT_operator_delete(this->str);
2925     }
2926     locale_dtor(&this->loc);
2927     basic_streambuf_wchar_dtor(&this->base);
2928 }
2929
2930 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_vector_dtor, 8)
2931 basic_filebuf_wchar* __thiscall basic_filebuf_wchar_vector_dtor(basic_filebuf_wchar *this, unsigned int flags)
2932 {
2933     TRACE("(%p %x)\n", this, flags);
2934     if(flags & 2) {
2935         /* we have an array, with the number of elements stored before the first object */
2936         INT_PTR i, *ptr = (INT_PTR *)this-1;
2937
2938         for(i=*ptr-1; i>=0; i--)
2939             basic_filebuf_wchar_dtor(this+i);
2940         MSVCRT_operator_delete(ptr);
2941     } else {
2942         basic_filebuf_wchar_dtor(this);
2943         if(flags & 1)
2944             MSVCRT_operator_delete(this);
2945     }
2946
2947     return this;
2948 }
2949
2950 /* ?is_open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QBE_NXZ */
2951 /* ?is_open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEBA_NXZ */
2952 /* ?is_open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QBE_NXZ */
2953 /* ?is_open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEBA_NXZ */
2954 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_is_open, 4)
2955 MSVCP_bool __thiscall basic_filebuf_wchar_is_open(const basic_filebuf_wchar *this)
2956 {
2957     TRACE("(%p)\n", this);
2958     return this->file != NULL;
2959 }
2960
2961 /* ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@PB_WHH@Z */
2962 /* ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@PEB_WHH@Z */
2963 /* ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@PBGHH@Z */
2964 /* ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@PEBGHH@Z */
2965 static basic_filebuf_wchar* basic_filebuf_wchar_open_wchar(basic_filebuf_wchar *this, const wchar_t *name, int mode, int prot)
2966 {
2967     FILE *f = NULL;
2968
2969     TRACE("(%p %s %d %d)\n", this, debugstr_w(name), mode, prot);
2970
2971     if(basic_filebuf_wchar_is_open(this))
2972         return NULL;
2973
2974     if(!(f = _Fiopen_wchar(name, mode, prot)))
2975         return NULL;
2976
2977     basic_filebuf_wchar__Init(this, f, INITFL_open);
2978     basic_filebuf_wchar__Initcvt(this);
2979     return this;
2980 }
2981
2982 /* ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@PBDHH@Z */
2983 /* ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@PEBDHH@Z */
2984 static basic_filebuf_wchar* basic_filebuf_wchar_open(basic_filebuf_wchar *this, const char *name, int mode, int prot)
2985 {
2986     wchar_t nameW[FILENAME_MAX];
2987
2988     TRACE("(%p %s %d %d)\n", this, name, mode, prot);
2989
2990     if(mbstowcs_s(NULL, nameW, FILENAME_MAX, name, FILENAME_MAX-1) != 0)
2991         return NULL;
2992     return basic_filebuf_wchar_open_wchar(this, nameW, mode, prot);
2993 }
2994
2995 /* ?open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAEPAV12@PBDF@Z */
2996 /* ?open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@PEBDF@Z */
2997 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_open_mode_old, 12)
2998 basic_filebuf_wchar* __thiscall basic_filebuf_wchar_open_mode_old(basic_filebuf_wchar *this, const char *name, short mode)
2999 {
3000     TRACE("(%p %p %d)\n", this, name, mode);
3001     return basic_filebuf_wchar_open(this, name, mode, _SH_DENYNO);
3002 }
3003
3004 /* ?open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAEPAV12@PBDH@Z */
3005 /* ?open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@PEBDH@Z */
3006 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_open_mode, 12)
3007 basic_filebuf_wchar* __thiscall basic_filebuf_wchar_open_mode(basic_filebuf_wchar *this, const char *name, int mode)
3008 {
3009     TRACE("(%p %p %d)\n", this, name, mode);
3010     return basic_filebuf_wchar_open(this, name, mode, _SH_DENYNO);
3011 }
3012
3013 /* ?overflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z */
3014 /* ?overflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z */
3015 /* ?overflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEGG@Z */
3016 /* ?overflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z */
3017 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_overflow, 8)
3018 unsigned short __thiscall basic_filebuf_wchar_overflow(basic_filebuf_wchar *this, unsigned short c)
3019 {
3020     char *ptr, *to_next;
3021     wchar_t ch = c;
3022     const wchar_t *from_next;
3023     unsigned short ret;
3024
3025
3026     TRACE("(%p %d)\n", this, c);
3027
3028     if(!basic_filebuf_wchar_is_open(this))
3029         return WEOF;
3030     if(c == WEOF)
3031         return !c;
3032
3033     if(!this->cvt)
3034         return fwrite(&ch, sizeof(wchar_t), 1, this->file) ? c : WEOF;
3035
3036     from_next = &ch;
3037     basic_string_char_clear(this->str);
3038     basic_string_char_append_len_ch(this->str, 8, '\0');
3039     ptr = this->str->ptr;
3040     ret = codecvt_wchar_out(this->cvt, &this->state, &ch, &ch+1, &from_next,
3041             ptr, ptr+basic_string_char_length(this->str), &to_next);
3042
3043     switch(ret) {
3044     case CODECVT_partial:
3045         if(from_next == &ch)
3046             return WEOF;
3047         /* fall through */
3048     case CODECVT_ok:
3049         if(!fwrite(ptr, to_next-ptr, 1, this->file))
3050             return WEOF;
3051         return c;
3052     case CODECVT_noconv:
3053         return fwrite(&ch, sizeof(wchar_t), 1, this->file) ? c : WEOF;
3054     default:
3055         return WEOF;
3056     }
3057 }
3058
3059 /* ?pbackfail@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEGG@Z */
3060 /* ?pbackfail@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAGG@Z */
3061 /* ?pbackfail@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEGG@Z */
3062 /* ?pbackfail@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAGG@Z */
3063 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_pbackfail, 8)
3064 unsigned short __thiscall basic_filebuf_wchar_pbackfail(basic_filebuf_wchar *this, unsigned short c)
3065 {
3066     TRACE("(%p %d)\n", this, c);
3067
3068     if(!basic_filebuf_wchar_is_open(this))
3069         return WEOF;
3070
3071     if(basic_streambuf_wchar_gptr(&this->base)>basic_streambuf_wchar_eback(&this->base)
3072             && (c==WEOF || basic_streambuf_wchar_gptr(&this->base)[-1]==c)) {
3073         basic_streambuf_wchar__Gndec(&this->base);
3074         return c==WEOF ? !c : c;
3075     }else if(c == WEOF) {
3076         return WEOF;
3077     }else if(!this->cvt) {
3078         return ungetwc(c, this->file);
3079     }else if(basic_string_char_length(this->str)) {
3080         char *b, *e, *cur;
3081
3082         e = this->str->ptr;
3083         b = e+this->str->size-1;
3084         for(cur = b; cur>=e; cur--) {
3085             if(ungetc(*cur, this->file) == EOF) {
3086                 for(; cur<=b; cur++)
3087                     fgetc(this->file);
3088                 return WEOF;
3089             }
3090         }
3091         basic_string_char_clear(this->str);
3092         this->state = this->state0;
3093         return c;
3094     }
3095
3096     return WEOF;
3097 }
3098
3099 /* ?uflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ */
3100 /* ?uflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ */
3101 /* ?uflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEGXZ */
3102 /* ?uflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAGXZ */
3103 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_uflow, 4)
3104 unsigned short __thiscall basic_filebuf_wchar_uflow(basic_filebuf_wchar *this)
3105 {
3106     wchar_t ch, *to_next;
3107     const char *buf_next;
3108     int c;
3109
3110     TRACE("(%p)\n", this);
3111
3112     if(!basic_filebuf_wchar_is_open(this))
3113         return WEOF;
3114
3115     if(basic_streambuf_wchar_gptr(&this->base) < basic_streambuf_wchar_egptr(&this->base))
3116         return *basic_streambuf_wchar__Gninc(&this->base);
3117
3118     if(!this->cvt)
3119         return fgetwc(this->file);
3120
3121     basic_string_char_clear(this->str);
3122     this->state0 = this->state;
3123     while(1) {
3124         if((c = fgetc(this->file)) == EOF)
3125             return WEOF;
3126         basic_string_char_append_ch(this->str, c);
3127         this->state = this->state0;
3128
3129         switch(codecvt_wchar_in(this->cvt, &this->state, this->str->ptr,
3130                     this->str->ptr+this->str->size, &buf_next, &ch, &ch+1, &to_next)) {
3131         case CODECVT_partial:
3132             break;
3133         case CODECVT_noconv:
3134             if(this->str->size < sizeof(unsigned short)/sizeof(char))
3135                 break;
3136             return *(unsigned short*)this->str->ptr;
3137         case CODECVT_ok:
3138             return (unsigned short)ch;
3139         default:
3140             return WEOF;
3141         }
3142     }
3143 }
3144
3145 /* ?underflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEGXZ */
3146 /* ?underflow@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAGXZ */
3147 /* ?underflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEGXZ */
3148 /* ?underflow@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAGXZ */
3149 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_underflow, 4)
3150 unsigned short __thiscall basic_filebuf_wchar_underflow(basic_filebuf_wchar *this)
3151 {
3152     unsigned short ret;
3153
3154     TRACE("(%p)\n", this);
3155
3156     if(basic_streambuf_wchar_gptr(&this->base) < basic_streambuf_wchar_egptr(&this->base))
3157         return *basic_streambuf_wchar_gptr(&this->base);
3158
3159     ret = call_basic_streambuf_wchar_uflow(&this->base);
3160     if(ret != WEOF)
3161         ret = call_basic_streambuf_wchar_pbackfail(&this->base, ret);
3162     return ret;
3163 }
3164
3165 /* ?seekoff@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@JW4seekdir@ios_base@2@H@Z */
3166 /* ?seekoff@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@H@2@_JW4seekdir@ios_base@2@H@Z */
3167 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_seekoff, 20)
3168 fpos_int* __thiscall basic_filebuf_wchar_seekoff(basic_filebuf_wchar *this,
3169         fpos_int *ret, streamoff off, int way, int mode)
3170 {
3171     fpos_t pos;
3172
3173     TRACE("(%p %p %ld %d %d)\n", this, ret, off, way, mode);
3174
3175     if(!basic_filebuf_wchar_is_open(this) || fseek(this->file, off, way)) {
3176         ret->off = -1;
3177         ret->pos = 0;
3178         ret->state = 0;
3179         return ret;
3180     }
3181
3182     fgetpos(this->file, &pos);
3183     ret->off = 0;
3184     ret->pos = pos;
3185     ret->state = this->state;
3186     return ret;
3187 }
3188
3189 /* ?seekpos@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
3190 /* ?seekpos@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
3191 /* ?seekpos@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
3192 /* ?seekpos@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
3193 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_seekpos, 36)
3194 fpos_int* __thiscall basic_filebuf_wchar_seekpos(basic_filebuf_wchar *this,
3195         fpos_int *ret, fpos_int pos, int mode)
3196 {
3197     fpos_t fpos;
3198
3199     TRACE("(%p %p %s %d)\n", this, ret, debugstr_fpos_int(&pos), mode);
3200
3201     if(!basic_filebuf_wchar_is_open(this) || fseek(this->file, (LONG)pos.pos, SEEK_SET)
3202             || (pos.off && fseek(this->file, pos.off, SEEK_CUR))) {
3203         ret->off = -1;
3204         ret->pos = 0;
3205         ret->state = 0;
3206         return ret;
3207     }
3208
3209     fgetpos(this->file, &fpos);
3210     ret->off = 0;
3211     ret->pos = fpos;
3212     ret->state = this->state;
3213     return ret;
3214 }
3215
3216 /* ?setbuf@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PA_WH@Z */
3217 /* ?setbuf@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PEA_W_J@Z */
3218 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_setbuf, 12)
3219 basic_streambuf_wchar* __thiscall basic_filebuf_wchar_setbuf(basic_filebuf_wchar *this, wchar_t *buf, streamsize count)
3220 {
3221     TRACE("(%p %p %ld)\n", this, buf, count);
3222
3223     if(!basic_filebuf_wchar_is_open(this))
3224         return NULL;
3225
3226     if(setvbuf(this->file, (char*)buf, (buf==NULL && count==0) ? _IONBF : _IOFBF, count*sizeof(wchar_t)))
3227         return NULL;
3228
3229     basic_filebuf_wchar__Init(this, this->file, INITFL_open);
3230     return &this->base;
3231 }
3232
3233 /* ?setbuf@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PAGH@Z */
3234 /* ?setbuf@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PEAG_J@Z */
3235 DEFINE_THISCALL_WRAPPER(basic_filebuf_short_setbuf, 12)
3236 basic_streambuf_wchar* __thiscall basic_filebuf_short_setbuf(basic_filebuf_wchar *this, wchar_t *buf, streamsize count)
3237 {
3238     TRACE("(%p %p %ld)\n", this, buf, count);
3239
3240     if(!basic_filebuf_wchar_is_open(this))
3241         return NULL;
3242
3243     if(setvbuf(this->file, (char*)buf, (buf==NULL && count==0) ? _IONBF : _IOFBF, count*sizeof(wchar_t)))
3244         return NULL;
3245
3246     basic_filebuf_short__Init(this, this->file, INITFL_open);
3247     return &this->base;
3248 }
3249
3250 /* ?sync@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MAEHXZ */
3251 /* ?sync@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@MEAAHXZ */
3252 /* ?sync@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEHXZ */
3253 /* ?sync@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MEAAHXZ */
3254 DEFINE_THISCALL_WRAPPER(basic_filebuf_wchar_sync, 4)
3255 int __thiscall basic_filebuf_wchar_sync(basic_filebuf_wchar *this)
3256 {
3257     TRACE("(%p)\n", this);
3258
3259     if(!basic_filebuf_wchar_is_open(this))
3260         return 0;
3261
3262     if(call_basic_streambuf_wchar_overflow(&this->base, WEOF) == WEOF)
3263         return 0;
3264     return fflush(this->file);
3265 }
3266
3267 /* ?_Getstate@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEHH@Z */
3268 /* ?_Getstate@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAHH@Z */
3269 /* ?_Mode@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEHH@Z */
3270 /* ?_Mode@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAHH@Z */
3271 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char__Getstate, 8)
3272 int __thiscall basic_stringbuf_char__Getstate(basic_stringbuf_char *this, IOSB_openmode mode)
3273 {
3274     int state = 0;
3275
3276     if(!(mode & OPENMODE_in))
3277         state |= STRINGBUF_no_read;
3278
3279     if(!(mode & OPENMODE_out))
3280         state |= STRINGBUF_no_write;
3281
3282     if(mode & OPENMODE_ate)
3283         state |= STRINGBUF_at_end;
3284
3285     if(mode & OPENMODE_app)
3286         state |= STRINGBUF_append;
3287
3288     return state;
3289 }
3290
3291 /* ?_Init@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAEXPBDIH@Z */
3292 /* ?_Init@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEAAXPEBD_KH@Z */
3293 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char__Init, 16)
3294 void __thiscall basic_stringbuf_char__Init(basic_stringbuf_char *this, const char *str, MSVCP_size_t count, int state)
3295 {
3296     TRACE("(%p, %p, %ld, %d)\n", this, str, count, state);
3297
3298     basic_streambuf_char__Init_empty(&this->base);
3299
3300     this->state = state;
3301     this->seekhigh = NULL;
3302
3303     if(count && str) {
3304         char *buf = MSVCRT_operator_new(count);
3305         if(!buf) {
3306             ERR("Out of memory\n");
3307             throw_exception(EXCEPTION_BAD_ALLOC, NULL);
3308         }
3309
3310         memcpy(buf, str, count);
3311         this->seekhigh = buf + count;
3312
3313         this->state |= STRINGBUF_allocated;
3314
3315         if(!(state & STRINGBUF_no_read))
3316             basic_streambuf_char_setg(&this->base, buf, buf, buf + count);
3317
3318         if(!(state & STRINGBUF_no_write)) {
3319             basic_streambuf_char_setp_next(&this->base, buf, (state & STRINGBUF_at_end) ? buf + count : buf, buf + count);
3320
3321             if(!basic_streambuf_char_gptr(&this->base))
3322                 basic_streambuf_char_setg(&this->base, buf, 0, buf);
3323         }
3324     }
3325 }
3326
3327 /* ??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 */
3328 /* ??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 */
3329 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_ctor_str, 12)
3330 basic_stringbuf_char* __thiscall basic_stringbuf_char_ctor_str(basic_stringbuf_char *this,
3331         const basic_string_char *str, IOSB_openmode mode)
3332 {
3333     TRACE("(%p %p %d)\n", this, str, mode);
3334
3335     basic_streambuf_char_ctor(&this->base);
3336     this->base.vtable = &MSVCP_basic_stringbuf_char_vtable;
3337
3338     basic_stringbuf_char__Init(this, basic_string_char_c_str(str),
3339             str->size, basic_stringbuf_char__Getstate(this, mode));
3340     return this;
3341 }
3342
3343 /* ??0?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@H@Z */
3344 /* ??0?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@H@Z */
3345 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_ctor_mode, 8)
3346 basic_stringbuf_char* __thiscall basic_stringbuf_char_ctor_mode(
3347         basic_stringbuf_char *this, IOSB_openmode mode)
3348 {
3349     TRACE("(%p %d)\n", this, mode);
3350
3351     basic_streambuf_char_ctor(&this->base);
3352     this->base.vtable = &MSVCP_basic_stringbuf_char_vtable;
3353
3354     basic_stringbuf_char__Init(this, NULL, 0, basic_stringbuf_char__Getstate(this, mode));
3355     return this;
3356 }
3357
3358 /* ??_F?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */
3359 /* ??_F?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */
3360 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_ctor, 4)
3361 basic_stringbuf_char* __thiscall basic_stringbuf_char_ctor(basic_stringbuf_char *this)
3362 {
3363     return basic_stringbuf_char_ctor_mode(this, OPENMODE_in|OPENMODE_out);
3364 }
3365
3366 /* ?_Tidy@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAEXXZ */
3367 /* ?_Tidy@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IEAAXXZ */
3368 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char__Tidy, 4)
3369 void __thiscall basic_stringbuf_char__Tidy(basic_stringbuf_char *this)
3370 {
3371     TRACE("(%p)\n", this);
3372
3373     if(this->state & STRINGBUF_allocated) {
3374         MSVCRT_operator_delete(basic_streambuf_char_eback(&this->base));
3375         this->seekhigh = NULL;
3376         this->state &= ~STRINGBUF_allocated;
3377     }
3378
3379     basic_streambuf_char__Init_empty(&this->base);
3380 }
3381
3382 /* ??1?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UAE@XZ */
3383 /* ??1?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UEAA@XZ */
3384 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_dtor, 4)
3385 void __thiscall basic_stringbuf_char_dtor(basic_stringbuf_char *this)
3386 {
3387     TRACE("(%p)\n", this);
3388
3389     basic_stringbuf_char__Tidy(this);
3390     basic_streambuf_char_dtor(&this->base);
3391 }
3392
3393 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_vector_dtor, 8)
3394 basic_stringbuf_char* __thiscall basic_stringbuf_char_vector_dtor(basic_stringbuf_char *this, unsigned int flags)
3395 {
3396     TRACE("(%p %x)\n", this, flags);
3397
3398     if(flags & 2) {
3399         /* we have an array, with the number of elements stored before the first object */
3400         INT_PTR i, *ptr = (INT_PTR *) this - 1;
3401
3402         for (i = *ptr - 1; i >= 0; i--)
3403             basic_stringbuf_char_dtor(this+i);
3404
3405         MSVCRT_operator_delete(ptr);
3406     }else {
3407         basic_stringbuf_char_dtor(this);
3408
3409         if(flags & 1)
3410             MSVCRT_operator_delete(this);
3411     }
3412
3413     return this;
3414 }
3415
3416 /* ?overflow@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MAEHH@Z */
3417 /* ?overflow@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MEAAHH@Z */
3418 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_overflow, 8)
3419 int __thiscall basic_stringbuf_char_overflow(basic_stringbuf_char *this, int meta)
3420 {
3421     MSVCP_size_t oldsize, size;
3422     char *ptr, *buf;
3423
3424     TRACE("(%p %x)\n", this, meta);
3425
3426     if(meta == EOF)
3427         return !EOF;
3428     if(this->state & STRINGBUF_no_write)
3429         return EOF;
3430
3431     ptr = basic_streambuf_char_pptr(&this->base);
3432     if((this->state&STRINGBUF_append) && ptr<this->seekhigh)
3433         basic_streambuf_char_setp_next(&this->base, basic_streambuf_char_pbase(&this->base),
3434                 this->seekhigh, basic_streambuf_char_epptr(&this->base));
3435
3436     if(ptr && ptr<basic_streambuf_char_epptr(&this->base))
3437         return (*basic_streambuf_char__Pninc(&this->base) = meta);
3438
3439     oldsize = (ptr ? basic_streambuf_char_epptr(&this->base)-basic_streambuf_char_eback(&this->base): 0);
3440     size = oldsize|0xf;
3441     size += size/2;
3442     buf = MSVCRT_operator_new(size);
3443     if(!buf) {
3444         ERR("Out of memory\n");
3445         throw_exception(EXCEPTION_BAD_ALLOC, NULL);
3446     }
3447
3448     if(!oldsize) {
3449         this->seekhigh = buf;
3450         basic_streambuf_char_setp(&this->base, buf, buf+size);
3451         if(this->state & STRINGBUF_no_read)
3452             basic_streambuf_char_setg(&this->base, buf, NULL, buf);
3453         else
3454             basic_streambuf_char_setg(&this->base, buf, buf, buf+1);
3455
3456         this->state |= STRINGBUF_allocated;
3457     }else {
3458         ptr = basic_streambuf_char_eback(&this->base);
3459         memcpy(buf, ptr, oldsize);
3460
3461         this->seekhigh = buf+(this->seekhigh-ptr);
3462         basic_streambuf_char_setp_next(&this->base, buf,
3463                 buf+(basic_streambuf_char_pptr(&this->base)-ptr), buf+size);
3464         if(this->state & STRINGBUF_no_read)
3465             basic_streambuf_char_setg(&this->base, buf, NULL, buf);
3466         else
3467             basic_streambuf_char_setg(&this->base, buf,
3468                     buf+(basic_streambuf_char_gptr(&this->base)-ptr),
3469                     basic_streambuf_char_pptr(&this->base)+1);
3470
3471         MSVCRT_operator_delete(ptr);
3472     }
3473
3474     return (*basic_streambuf_char__Pninc(&this->base) = meta);
3475 }
3476
3477 /* ?pbackfail@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MAEHH@Z */
3478 /* ?pbackfail@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MEAAHH@Z */
3479 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_pbackfail, 8)
3480 int __thiscall basic_stringbuf_char_pbackfail(basic_stringbuf_char *this, int c)
3481 {
3482     char *cur;
3483
3484     TRACE("(%p %x)\n", this, c);
3485
3486     cur = basic_streambuf_char_gptr(&this->base);
3487     if(!cur || cur==basic_streambuf_char_eback(&this->base)
3488             || (c!=EOF && c!=cur[-1] && this->state&STRINGBUF_no_write))
3489         return EOF;
3490
3491     if(c != EOF)
3492         cur[-1] = c;
3493     basic_streambuf_char_gbump(&this->base, -1);
3494     return c==EOF ? !EOF : c;
3495 }
3496
3497 /* ?underflow@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MAEHXZ */
3498 /* ?underflow@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MEAAHXZ */
3499 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_underflow, 4)
3500 int __thiscall basic_stringbuf_char_underflow(basic_stringbuf_char *this)
3501 {
3502     char *ptr, *cur;
3503
3504     TRACE("(%p)\n", this);
3505
3506     cur = basic_streambuf_char_gptr(&this->base);
3507     if(!cur || this->state&STRINGBUF_no_read)
3508         return EOF;
3509
3510     ptr  = basic_streambuf_char_pptr(&this->base);
3511     if(this->seekhigh < ptr)
3512         this->seekhigh = ptr;
3513
3514     ptr = basic_streambuf_char_egptr(&this->base);
3515     if(this->seekhigh > ptr)
3516         basic_streambuf_char_setg(&this->base, basic_streambuf_char_eback(&this->base), cur, this->seekhigh);
3517
3518     if(cur < this->seekhigh)
3519         return (unsigned char)*cur;
3520     return EOF;
3521 }
3522
3523 /* ?seekoff@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MAE?AV?$fpos@H@2@JW4seekdir@ios_base@2@H@Z */
3524 /* ?seekoff@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MEAA?AV?$fpos@H@2@_JW4seekdir@ios_base@2@H@Z */
3525 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_seekoff, 20)
3526 fpos_int* __thiscall basic_stringbuf_char_seekoff(basic_stringbuf_char *this,
3527         fpos_int *ret, streamoff off, int way, int mode)
3528 {
3529     char *beg, *cur_r, *cur_w;
3530
3531     TRACE("(%p %p %ld %d %d)\n", this, ret, off, way, mode);
3532
3533     cur_w = basic_streambuf_char_pptr(&this->base);
3534     if(cur_w > this->seekhigh)
3535         this->seekhigh = cur_w;
3536
3537     ret->off = 0;
3538     ret->pos = 0;
3539     ret->state = 0;
3540
3541     beg = basic_streambuf_char_eback(&this->base);
3542     cur_r = basic_streambuf_char_gptr(&this->base);
3543     if((mode & OPENMODE_in) && cur_r) {
3544         if(way==SEEKDIR_cur && !(mode & OPENMODE_out))
3545             off += cur_r-beg;
3546         else if(way == SEEKDIR_end)
3547             off += this->seekhigh-beg;
3548         else if(way != SEEKDIR_beg)
3549             off = -1;
3550
3551         if(off<0 || off>this->seekhigh-beg) {
3552             off = -1;
3553         }else {
3554             basic_streambuf_char_gbump(&this->base, beg-cur_r+off);
3555             if((mode & OPENMODE_out) && cur_w) {
3556                 basic_streambuf_char_setp_next(&this->base, beg,
3557                         basic_streambuf_char_gptr(&this->base),
3558                         basic_streambuf_char_epptr(&this->base));
3559             }
3560         }
3561     }else if((mode & OPENMODE_out) && cur_w) {
3562         if(way == SEEKDIR_cur)
3563             off += cur_w-beg;
3564         else if(way == SEEKDIR_end)
3565             off += this->seekhigh-beg;
3566         else if(way != SEEKDIR_beg)
3567             off = -1;
3568
3569         if(off<0 || off>this->seekhigh-beg)
3570             off = -1;
3571         else
3572             basic_streambuf_char_pbump(&this->base, beg-cur_w+off);
3573     }else {
3574         off = -1;
3575     }
3576
3577     ret->off = off;
3578     return ret;
3579 }
3580
3581 /* ?seekpos@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
3582 /* ?seekpos@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
3583 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_seekpos, 36)
3584 fpos_int* __thiscall basic_stringbuf_char_seekpos(basic_stringbuf_char *this,
3585         fpos_int *ret, fpos_int pos, int mode)
3586 {
3587     TRACE("(%p %p %s %d)\n", this, ret, debugstr_fpos_int(&pos), mode);
3588
3589     if(pos.off==-1 && pos.pos==0 && pos.state==0) {
3590         *ret = pos;
3591         return ret;
3592     }
3593
3594     return basic_stringbuf_char_seekoff(this, ret, pos.off, SEEKDIR_beg, mode);
3595 }
3596
3597 /* ?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 */
3598 /* ?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 */
3599 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_str_set, 8)
3600 void __thiscall basic_stringbuf_char_str_set(basic_stringbuf_char *this, const basic_string_char *str)
3601 {
3602     TRACE("(%p %p)\n", this, str);
3603
3604     basic_stringbuf_char__Tidy(this);
3605     basic_stringbuf_char__Init(this, basic_string_char_c_str(str), str->size, this->state);
3606 }
3607
3608 /* ?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 */
3609 /* ?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 */
3610 DEFINE_THISCALL_WRAPPER(basic_stringbuf_char_str_get, 8)
3611 basic_string_char* __thiscall basic_stringbuf_char_str_get(const basic_stringbuf_char *this, basic_string_char *ret)
3612 {
3613     char *ptr;
3614
3615     TRACE("(%p)\n", this);
3616
3617     if(!(this->state & STRINGBUF_no_write) && basic_streambuf_char_pptr(&this->base)) {
3618         char *pptr;
3619
3620         ptr = basic_streambuf_char_pbase(&this->base);
3621         pptr = basic_streambuf_char_pptr(&this->base);
3622
3623         return basic_string_char_ctor_cstr_len(ret, ptr, (this->seekhigh < pptr ? pptr : this->seekhigh) - ptr);
3624     }
3625
3626     if(!(this->state & STRINGBUF_no_read) && basic_streambuf_char_gptr(&this->base)) {
3627         ptr = basic_streambuf_char_eback(&this->base);
3628         return basic_string_char_ctor_cstr_len(ret, ptr, basic_streambuf_char_egptr(&this->base) - ptr);
3629     }
3630
3631     return basic_string_char_ctor(ret);
3632 }
3633
3634 /* ?_Getstate@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@AAEHH@Z */
3635 /* ?_Getstate@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@AEAAHH@Z */
3636 /* ?_Getstate@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEHH@Z */
3637 /* ?_Getstate@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAHH@Z */
3638 /* ?_Mode@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AAEHH@Z */
3639 /* ?_Mode@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@AEAAHH@Z */
3640 DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar__Getstate, 8)
3641 int __thiscall basic_stringbuf_wchar__Getstate(basic_stringbuf_wchar *this, IOSB_openmode mode)
3642 {
3643     int state = 0;
3644
3645     if(!(mode & OPENMODE_in))
3646         state |= STRINGBUF_no_read;
3647
3648     if(!(mode & OPENMODE_out))
3649         state |= STRINGBUF_no_write;
3650
3651     if(mode & OPENMODE_ate)
3652         state |= STRINGBUF_at_end;
3653
3654     if(mode & OPENMODE_app)
3655         state |= STRINGBUF_append;
3656
3657     return state;
3658 }
3659
3660 /* ?_Init@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAEXPB_WIH@Z */
3661 /* ?_Init@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAAXPEB_W_KH@Z */
3662 /* ?_Init@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IAEXPBGIH@Z */
3663 /* ?_Init@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IEAAXPEBG_KH@Z */
3664 DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar__Init, 16)
3665 void __thiscall basic_stringbuf_wchar__Init(basic_stringbuf_wchar *this, const wchar_t *str, MSVCP_size_t count, int state)
3666 {
3667     TRACE("(%p, %p, %lu, %d)\n", this, str, count, state);
3668
3669     basic_streambuf_wchar__Init_empty(&this->base);
3670
3671     this->state = state;
3672     this->seekhigh = NULL;
3673
3674     if(count && str) {
3675         wchar_t *buf = MSVCRT_operator_new(count*sizeof(wchar_t));
3676         if(!buf) {
3677             ERR("Out of memory\n");
3678             throw_exception(EXCEPTION_BAD_ALLOC, NULL);
3679         }
3680
3681         memcpy(buf, str, count*sizeof(wchar_t));
3682         this->seekhigh = buf + count;
3683
3684         this->state |= STRINGBUF_allocated;
3685
3686         if(!(state & STRINGBUF_no_read))
3687             basic_streambuf_wchar_setg(&this->base, buf, buf, buf + count);
3688
3689         if(!(state & STRINGBUF_no_write)) {
3690             basic_streambuf_wchar_setp_next(&this->base, buf, (state & STRINGBUF_at_end) ? buf + count : buf, buf + count);
3691
3692             if(!basic_streambuf_wchar_gptr(&this->base))
3693                 basic_streambuf_wchar_setg(&this->base, buf, 0, buf);
3694         }
3695     }
3696 }
3697
3698 /* ??0?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@1@H@Z */
3699 /* ??0?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@AEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@1@H@Z */
3700 static basic_stringbuf_wchar* basic_stringbuf_wchar_ctor_str(basic_stringbuf_wchar *this,
3701         const basic_string_wchar *str, IOSB_openmode mode)
3702 {
3703     TRACE("(%p %p %d)\n", this, str, mode);
3704
3705     basic_streambuf_wchar_ctor(&this->base);
3706     this->base.vtable = &MSVCP_basic_stringbuf_wchar_vtable;
3707
3708     basic_stringbuf_wchar__Init(this, basic_string_wchar_c_str(str),
3709             str->size, basic_stringbuf_wchar__Getstate(this, mode));
3710     return this;
3711 }
3712
3713 /* ??0?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@1@H@Z */
3714 /* ??0?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@1@H@Z */
3715 DEFINE_THISCALL_WRAPPER(basic_stringbuf_short_ctor_str, 12)
3716 basic_stringbuf_wchar* __thiscall basic_stringbuf_short_ctor_str(basic_stringbuf_wchar *this,
3717         const basic_string_wchar *str, IOSB_openmode mode)
3718 {
3719     basic_stringbuf_wchar_ctor_str(this, str, mode);
3720     this->base.vtable = &MSVCP_basic_stringbuf_short_vtable;
3721     return this;
3722 }
3723
3724 /* ??0?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@H@Z */
3725 /* ??0?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@H@Z */
3726 static basic_stringbuf_wchar* basic_stringbuf_wchar_ctor_mode(
3727         basic_stringbuf_wchar *this, IOSB_openmode mode)
3728 {
3729     TRACE("(%p %d)\n", this, mode);
3730
3731     basic_streambuf_wchar_ctor(&this->base);
3732     this->base.vtable = &MSVCP_basic_stringbuf_wchar_vtable;
3733
3734     basic_stringbuf_wchar__Init(this, NULL, 0, basic_stringbuf_wchar__Getstate(this, mode));
3735     return this;
3736 }
3737
3738 /* ??0?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@H@Z */
3739 /* ??0?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@H@Z */
3740 DEFINE_THISCALL_WRAPPER(basic_stringbuf_short_ctor_mode, 8)
3741 basic_stringbuf_wchar* __thiscall basic_stringbuf_short_ctor_mode(
3742         basic_stringbuf_wchar *this, IOSB_openmode mode)
3743 {
3744     basic_stringbuf_wchar_ctor_mode(this, mode);
3745     this->base.vtable = &MSVCP_basic_stringbuf_short_vtable;
3746     return this;
3747 }
3748
3749 /* ??_F?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */
3750 /* ??_F?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */
3751 DEFINE_THISCALL_WRAPPER(basic_stringbuf_short_ctor, 4)
3752 basic_stringbuf_wchar* __thiscall basic_stringbuf_short_ctor(basic_stringbuf_wchar *this)
3753 {
3754     return basic_stringbuf_short_ctor_mode(this, OPENMODE_in|OPENMODE_out);
3755 }
3756
3757 /* ?_Tidy@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IAEXXZ */
3758 /* ?_Tidy@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IEAAXXZ */
3759 /* ?_Tidy@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IAEXXZ */
3760 /* ?_Tidy@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@IEAAXXZ */
3761 DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar__Tidy, 4)
3762 void __thiscall basic_stringbuf_wchar__Tidy(basic_stringbuf_wchar *this)
3763 {
3764     TRACE("(%p)\n", this);
3765
3766     if(this->state & STRINGBUF_allocated) {
3767         MSVCRT_operator_delete(basic_streambuf_wchar_eback(&this->base));
3768         this->seekhigh = NULL;
3769         this->state &= ~STRINGBUF_allocated;
3770     }
3771
3772     basic_streambuf_wchar__Init_empty(&this->base);
3773 }
3774
3775 /* ??1?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@UAE@XZ */
3776 /* ??1?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@UEAA@XZ */
3777 /* ??1?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@UAE@XZ */
3778 /* ??1?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@UEAA@XZ */
3779 DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_dtor, 4)
3780 void __thiscall basic_stringbuf_wchar_dtor(basic_stringbuf_wchar *this)
3781 {
3782     TRACE("(%p)\n", this);
3783
3784     basic_stringbuf_wchar__Tidy(this);
3785     basic_streambuf_wchar_dtor(&this->base);
3786 }
3787
3788 DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_vector_dtor, 8)
3789 basic_stringbuf_wchar* __thiscall basic_stringbuf_wchar_vector_dtor(basic_stringbuf_wchar *this, unsigned int flags)
3790 {
3791     TRACE("(%p %x)\n", this, flags);
3792
3793     if(flags & 2) {
3794         /* we have an array, with the number of elements stored before the first object */
3795         INT_PTR i, *ptr = (INT_PTR *) this - 1;
3796
3797         for (i = *ptr - 1; i >= 0; i--)
3798             basic_stringbuf_wchar_dtor(this+i);
3799
3800         MSVCRT_operator_delete(ptr);
3801     }else {
3802         basic_stringbuf_wchar_dtor(this);
3803
3804         if(flags & 1)
3805             MSVCRT_operator_delete(this);
3806     }
3807
3808     return this;
3809 }
3810
3811 /* ?overflow@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MAEGG@Z */
3812 /* ?overflow@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MEAAGG@Z */
3813 /* ?overflow@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MAEGG@Z */
3814 /* ?overflow@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MEAAGG@Z */
3815 DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_overflow, 8)
3816 unsigned short __thiscall basic_stringbuf_wchar_overflow(basic_stringbuf_wchar *this, unsigned short meta)
3817 {
3818     MSVCP_size_t oldsize, size;
3819     wchar_t *ptr, *buf;
3820
3821     TRACE("(%p %x)\n", this, meta);
3822
3823     if(meta == WEOF)
3824         return !WEOF;
3825     if(this->state & STRINGBUF_no_write)
3826         return WEOF;
3827
3828     ptr = basic_streambuf_wchar_pptr(&this->base);
3829     if((this->state&STRINGBUF_append) && ptr<this->seekhigh)
3830         basic_streambuf_wchar_setp_next(&this->base, basic_streambuf_wchar_pbase(&this->base),
3831                 this->seekhigh, basic_streambuf_wchar_epptr(&this->base));
3832
3833     if(ptr && ptr<basic_streambuf_wchar_epptr(&this->base))
3834         return (*basic_streambuf_wchar__Pninc(&this->base) = meta);
3835
3836     oldsize = (ptr ? basic_streambuf_wchar_epptr(&this->base)-basic_streambuf_wchar_eback(&this->base): 0);
3837     size = oldsize|0xf;
3838     size += size/2;
3839     buf = MSVCRT_operator_new(size*sizeof(wchar_t));
3840     if(!buf) {
3841         ERR("Out of memory\n");
3842         throw_exception(EXCEPTION_BAD_ALLOC, NULL);
3843     }
3844
3845     if(!oldsize) {
3846         this->seekhigh = buf;
3847         basic_streambuf_wchar_setp(&this->base, buf, buf+size);
3848         if(this->state & STRINGBUF_no_read)
3849             basic_streambuf_wchar_setg(&this->base, buf, NULL, buf);
3850         else
3851             basic_streambuf_wchar_setg(&this->base, buf, buf, buf+1);
3852
3853         this->state |= STRINGBUF_allocated;
3854     }else {
3855         ptr = basic_streambuf_wchar_eback(&this->base);
3856         memcpy(buf, ptr, oldsize*sizeof(wchar_t));
3857
3858         this->seekhigh = buf+(this->seekhigh-ptr);
3859         basic_streambuf_wchar_setp_next(&this->base, buf,
3860                 buf+(basic_streambuf_wchar_pptr(&this->base)-ptr), buf+size);
3861         if(this->state & STRINGBUF_no_read)
3862             basic_streambuf_wchar_setg(&this->base, buf, NULL, buf);
3863         else
3864             basic_streambuf_wchar_setg(&this->base, buf,
3865                     buf+(basic_streambuf_wchar_gptr(&this->base)-ptr),
3866                     basic_streambuf_wchar_pptr(&this->base)+1);
3867
3868         MSVCRT_operator_delete(ptr);
3869     }
3870
3871     return (*basic_streambuf_wchar__Pninc(&this->base) = meta);
3872 }
3873
3874 /* ?pbackfail@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MAEGG@Z */
3875 /* ?pbackfail@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MEAAGG@Z */
3876 /* ?pbackfail@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MAEGG@Z */
3877 /* ?pbackfail@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MEAAGG@Z */
3878 DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_pbackfail, 8)
3879 unsigned short __thiscall basic_stringbuf_wchar_pbackfail(basic_stringbuf_wchar *this, unsigned short c)
3880 {
3881     wchar_t *cur;
3882
3883     TRACE("(%p %x)\n", this, c);
3884
3885     cur = basic_streambuf_wchar_gptr(&this->base);
3886     if(!cur || cur==basic_streambuf_wchar_eback(&this->base)
3887             || (c!=WEOF && c!=cur[-1] && this->state&STRINGBUF_no_write))
3888         return WEOF;
3889
3890     if(c != WEOF)
3891         cur[-1] = c;
3892     basic_streambuf_wchar_gbump(&this->base, -1);
3893     return c==WEOF ? !WEOF : c;
3894 }
3895
3896 /* ?underflow@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MAEGXZ */
3897 /* ?underflow@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MEAAGXZ */
3898 /* ?underflow@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MAEGXZ */
3899 /* ?underflow@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MEAAGXZ */
3900 DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_underflow, 4)
3901 unsigned short __thiscall basic_stringbuf_wchar_underflow(basic_stringbuf_wchar *this)
3902 {
3903     wchar_t *ptr, *cur;
3904
3905     TRACE("(%p)\n", this);
3906
3907     cur = basic_streambuf_wchar_gptr(&this->base);
3908     if(!cur || this->state&STRINGBUF_no_read)
3909         return WEOF;
3910
3911     ptr  = basic_streambuf_wchar_pptr(&this->base);
3912     if(this->seekhigh < ptr)
3913         this->seekhigh = ptr;
3914
3915     ptr = basic_streambuf_wchar_egptr(&this->base);
3916     if(this->seekhigh > ptr)
3917         basic_streambuf_wchar_setg(&this->base, basic_streambuf_wchar_eback(&this->base), cur, this->seekhigh);
3918
3919     if(cur < this->seekhigh)
3920         return *cur;
3921     return WEOF;
3922 }
3923
3924 /* ?seekoff@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MAE?AV?$fpos@H@2@JW4seekdir@ios_base@2@H@Z */
3925 /* ?seekoff@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MEAA?AV?$fpos@H@2@_JW4seekdir@ios_base@2@H@Z */
3926 DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_seekoff, 20)
3927 fpos_int* __thiscall basic_stringbuf_wchar_seekoff(basic_stringbuf_wchar *this,
3928         fpos_int *ret, streamoff off, int way, int mode)
3929 {
3930     wchar_t *beg, *cur_r, *cur_w;
3931
3932     TRACE("(%p %p %ld %d %d)\n", this, ret, off, way, mode);
3933
3934     cur_w = basic_streambuf_wchar_pptr(&this->base);
3935     if(cur_w > this->seekhigh)
3936         this->seekhigh = cur_w;
3937
3938     ret->off = 0;
3939     ret->pos = 0;
3940     ret->state = 0;
3941
3942     beg = basic_streambuf_wchar_eback(&this->base);
3943     cur_r = basic_streambuf_wchar_gptr(&this->base);
3944     if((mode & OPENMODE_in) && cur_r) {
3945         if(way==SEEKDIR_cur && !(mode & OPENMODE_out))
3946             off += cur_r-beg;
3947         else if(way == SEEKDIR_end)
3948             off += this->seekhigh-beg;
3949         else if(way != SEEKDIR_beg)
3950             off = -1;
3951
3952         if(off<0 || off>this->seekhigh-beg) {
3953             off = -1;
3954         }else {
3955             basic_streambuf_wchar_gbump(&this->base, beg-cur_r+off);
3956             if((mode & OPENMODE_out) && cur_w) {
3957                 basic_streambuf_wchar_setp_next(&this->base, beg,
3958                         basic_streambuf_wchar_gptr(&this->base),
3959                         basic_streambuf_wchar_epptr(&this->base));
3960             }
3961         }
3962     }else if((mode & OPENMODE_out) && cur_w) {
3963         if(way == SEEKDIR_cur)
3964             off += cur_w-beg;
3965         else if(way == SEEKDIR_end)
3966             off += this->seekhigh-beg;
3967         else if(way != SEEKDIR_beg)
3968             off = -1;
3969
3970         if(off<0 || off>this->seekhigh-beg)
3971             off = -1;
3972         else
3973             basic_streambuf_wchar_pbump(&this->base, beg-cur_w+off);
3974     }else {
3975         off = -1;
3976     }
3977
3978     ret->off = off;
3979     return ret;
3980 }
3981
3982 /* ?seekpos@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
3983 /* ?seekpos@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
3984 /* ?seekpos@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MAE?AV?$fpos@H@2@V32@H@Z */
3985 /* ?seekpos@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
3986 DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_seekpos, 36)
3987 fpos_int* __thiscall basic_stringbuf_wchar_seekpos(basic_stringbuf_wchar *this,
3988         fpos_int *ret, fpos_int pos, int mode)
3989 {
3990     TRACE("(%p %p %s %d)\n", this, ret, debugstr_fpos_int(&pos), mode);
3991
3992     if(pos.off==-1 && pos.pos==0 && pos.state==0) {
3993         *ret = pos;
3994         return ret;
3995     }
3996
3997     return basic_stringbuf_wchar_seekoff(this, ret, pos.off, SEEKDIR_beg, mode);
3998 }
3999
4000 /* ?str@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z */
4001 /* ?str@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z */
4002 /* ?str@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z */
4003 /* ?str@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z */
4004 DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_str_set, 8)
4005 void __thiscall basic_stringbuf_wchar_str_set(basic_stringbuf_wchar *this, const basic_string_wchar *str)
4006 {
4007     TRACE("(%p %p)\n", this, str);
4008
4009     basic_stringbuf_wchar__Tidy(this);
4010     basic_stringbuf_wchar__Init(this, basic_string_wchar_c_str(str), str->size, this->state);
4011 }
4012
4013 /* ?str@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4014 /* ?str@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
4015 /* ?str@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4016 /* ?str@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
4017 DEFINE_THISCALL_WRAPPER(basic_stringbuf_wchar_str_get, 8)
4018 basic_string_wchar* __thiscall basic_stringbuf_wchar_str_get(const basic_stringbuf_wchar *this, basic_string_wchar *ret)
4019 {
4020     wchar_t *ptr;
4021
4022     TRACE("(%p)\n", this);
4023
4024     if(!(this->state & STRINGBUF_no_write) && basic_streambuf_wchar_pptr(&this->base)) {
4025         wchar_t *pptr;
4026
4027         ptr = basic_streambuf_wchar_pbase(&this->base);
4028         pptr = basic_streambuf_wchar_pptr(&this->base);
4029
4030         return basic_string_wchar_ctor_cstr_len(ret, ptr, (this->seekhigh < pptr ? pptr : this->seekhigh) - ptr);
4031     }
4032
4033     if(!(this->state & STRINGBUF_no_read) && basic_streambuf_wchar_gptr(&this->base)) {
4034         ptr = basic_streambuf_wchar_eback(&this->base);
4035         return basic_string_wchar_ctor_cstr_len(ret, ptr, basic_streambuf_wchar_egptr(&this->base) - ptr);
4036     }
4037
4038     return basic_string_wchar_ctor(ret);
4039 }
4040
4041 /* ??0ios_base@std@@IAE@XZ */
4042 /* ??0ios_base@std@@IEAA@XZ */
4043 DEFINE_THISCALL_WRAPPER(ios_base_ctor, 4)
4044 ios_base* __thiscall ios_base_ctor(ios_base *this)
4045 {
4046     TRACE("(%p)\n", this);
4047     this->vtable = &MSVCP_ios_base_vtable;
4048     locale_ctor_uninitialized(&this->loc, 0);
4049     return this;
4050 }
4051
4052 /* ??0ios_base@std@@QAE@ABV01@@Z */
4053 /* ??0ios_base@std@@QEAA@AEBV01@@Z */
4054 DEFINE_THISCALL_WRAPPER(ios_base_copy_ctor, 8)
4055 ios_base* __thiscall ios_base_copy_ctor(ios_base *this, const ios_base *copy)
4056 {
4057     TRACE("(%p %p)\n", this, copy);
4058     *this = *copy;
4059     this->vtable = &MSVCP_ios_base_vtable;
4060     return this;
4061 }
4062
4063 /* ?_Callfns@ios_base@std@@AAEXW4event@12@@Z */
4064 /* ?_Callfns@ios_base@std@@AEAAXW4event@12@@Z */
4065 DEFINE_THISCALL_WRAPPER(ios_base_Callfns, 8)
4066 void __thiscall ios_base_Callfns(ios_base *this, IOS_BASE_event event)
4067 {
4068     IOS_BASE_fnarray *cur;
4069
4070     TRACE("(%p %x)\n", this, event);
4071
4072     for(cur=this->calls; cur; cur=cur->next)
4073         cur->event_handler(event, this, cur->index);
4074 }
4075
4076 /* ?_Tidy@ios_base@std@@AAAXXZ */
4077 /* ?_Tidy@ios_base@std@@AEAAXXZ */
4078 void CDECL ios_base_Tidy(ios_base *this)
4079 {
4080     IOS_BASE_iosarray *arr_cur, *arr_next;
4081     IOS_BASE_fnarray *event_cur, *event_next;
4082
4083     TRACE("(%p)\n", this);
4084
4085     ios_base_Callfns(this, EVENT_erase_event);
4086
4087     for(arr_cur=this->arr; arr_cur; arr_cur=arr_next) {
4088         arr_next = arr_cur->next;
4089         MSVCRT_operator_delete(arr_cur);
4090     }
4091     this->arr = NULL;
4092
4093     for(event_cur=this->calls; event_cur; event_cur=event_next) {
4094         event_next = event_cur->next;
4095         MSVCRT_operator_delete(event_cur);
4096     }
4097     this->calls = NULL;
4098 }
4099
4100 /* ?_Ios_base_dtor@ios_base@std@@CAXPAV12@@Z */
4101 /* ?_Ios_base_dtor@ios_base@std@@CAXPEAV12@@Z */
4102 static void ios_base_Ios_base_dtor(ios_base *obj)
4103 {
4104     TRACE("(%p)\n", obj);
4105     locale_dtor(&obj->loc);
4106     ios_base_Tidy(obj);
4107 }
4108
4109 /* ??1ios_base@std@@UAE@XZ */
4110 /* ??1ios_base@std@@UEAA@XZ */
4111 DEFINE_THISCALL_WRAPPER(ios_base_dtor, 4)
4112 void __thiscall ios_base_dtor(ios_base *this)
4113 {
4114     ios_base_Ios_base_dtor(this);
4115 }
4116
4117 DEFINE_THISCALL_WRAPPER(ios_base_vector_dtor, 8)
4118 ios_base* __thiscall ios_base_vector_dtor(ios_base *this, unsigned int flags)
4119 {
4120     TRACE("(%p %x)\n", this, flags);
4121     if(flags & 2) {
4122         /* we have an array, with the number of elements stored before the first object */
4123         INT_PTR i, *ptr = (INT_PTR *)this-1;
4124
4125         for(i=*ptr-1; i>=0; i--)
4126             ios_base_dtor(this+i);
4127         MSVCRT_operator_delete(ptr);
4128     } else {
4129         ios_base_dtor(this);
4130         if(flags & 1)
4131             MSVCRT_operator_delete(this);
4132     }
4133
4134     return this;
4135 }
4136
4137 DEFINE_THISCALL_WRAPPER(iosb_vector_dtor, 8)
4138 void* __thiscall iosb_vector_dtor(void *this, unsigned int flags)
4139 {
4140     TRACE("(%p %x)\n", this, flags);
4141     if(flags & 2) {
4142         INT_PTR *ptr = (INT_PTR *)this-1;
4143         MSVCRT_operator_delete(ptr);
4144     } else {
4145         if(flags & 1)
4146             MSVCRT_operator_delete(this);
4147     }
4148
4149     return this;
4150 }
4151
4152 /* ?_Findarr@ios_base@std@@AAEAAU_Iosarray@12@H@Z */
4153 /* ?_Findarr@ios_base@std@@AEAAAEAU_Iosarray@12@H@Z */
4154 DEFINE_THISCALL_WRAPPER(ios_base_Findarr, 8)
4155 IOS_BASE_iosarray* __thiscall ios_base_Findarr(ios_base *this, int index)
4156 {
4157     IOS_BASE_iosarray *p;
4158
4159     TRACE("(%p %d)\n", this, index);
4160
4161     for(p=this->arr; p; p=p->next) {
4162         if(p->index == index)
4163             return p;
4164     }
4165
4166     for(p=this->arr; p; p=p->next) {
4167         if(!p->long_val && !p->ptr_val) {
4168             p->index = index;
4169             return p;
4170         }
4171     }
4172
4173     p = MSVCRT_operator_new(sizeof(IOS_BASE_iosarray));
4174     p->next = this->arr;
4175     p->index = index;
4176     p->long_val = 0;
4177     p->ptr_val = NULL;
4178     this->arr = p;
4179     return p;
4180 }
4181
4182 /* ?iword@ios_base@std@@QAEAAJH@Z */
4183 /* ?iword@ios_base@std@@QEAAAEAJH@Z */
4184 DEFINE_THISCALL_WRAPPER(ios_base_iword, 8)
4185 LONG* __thiscall ios_base_iword(ios_base *this, int index)
4186 {
4187     TRACE("(%p %d)\n", this, index);
4188     return &ios_base_Findarr(this, index)->long_val;
4189 }
4190
4191 /* ?pword@ios_base@std@@QAEAAPAXH@Z */
4192 /* ?pword@ios_base@std@@QEAAAEAPEAXH@Z */
4193 DEFINE_THISCALL_WRAPPER(ios_base_pword, 8)
4194 void** __thiscall ios_base_pword(ios_base *this, int index)
4195 {
4196     TRACE("(%p %d)\n", this, index);
4197     return &ios_base_Findarr(this, index)->ptr_val;
4198 }
4199
4200 /* ?register_callback@ios_base@std@@QAEXP6AXW4event@12@AAV12@H@ZH@Z */
4201 /* ?register_callback@ios_base@std@@QEAAXP6AXW4event@12@AEAV12@H@ZH@Z */
4202 DEFINE_THISCALL_WRAPPER(ios_base_register_callback, 12)
4203 void __thiscall ios_base_register_callback(ios_base *this, IOS_BASE_event_callback callback, int index)
4204 {
4205     IOS_BASE_fnarray *event;
4206
4207     TRACE("(%p %p %d)\n", this, callback, index);
4208
4209     event = MSVCRT_operator_new(sizeof(IOS_BASE_fnarray));
4210     event->next = this->calls;
4211     event->index = index;
4212     event->event_handler = callback;
4213     this->calls = event;
4214 }
4215
4216 /* ?clear@ios_base@std@@QAEXH_N@Z */
4217 /* ?clear@ios_base@std@@QEAAXH_N@Z */
4218 DEFINE_THISCALL_WRAPPER(ios_base_clear_reraise, 12)
4219 void __thiscall ios_base_clear_reraise(ios_base *this, IOSB_iostate state, MSVCP_bool reraise)
4220 {
4221     TRACE("(%p %x %x)\n", this, state, reraise);
4222
4223     this->state = state & IOSTATE_mask;
4224     if(!(this->state & this->except))
4225         return;
4226
4227     if(reraise)
4228         throw_exception(EXCEPTION_RERAISE, NULL);
4229     else if(this->state & this->except & IOSTATE_eofbit)
4230         throw_exception(EXCEPTION_FAILURE, "eofbit is set");
4231     else if(this->state & this->except & IOSTATE_failbit)
4232         throw_exception(EXCEPTION_FAILURE, "failbit is set");
4233     else if(this->state & this->except & IOSTATE_badbit)
4234         throw_exception(EXCEPTION_FAILURE, "badbit is set");
4235     else if(this->state & this->except & IOSTATE__Hardfail)
4236         throw_exception(EXCEPTION_FAILURE, "_Hardfail is set");
4237 }
4238
4239 /* ?clear@ios_base@std@@QAEXH@Z */
4240 /* ?clear@ios_base@std@@QEAAXH@Z */
4241 static void ios_base_clear(ios_base *this, IOSB_iostate state)
4242 {
4243     ios_base_clear_reraise(this, state, FALSE);
4244 }
4245
4246 /* ?exceptions@ios_base@std@@QAEXH@Z */
4247 /* ?exceptions@ios_base@std@@QEAAXH@Z */
4248 DEFINE_THISCALL_WRAPPER(ios_base_exceptions_set, 8)
4249 void __thiscall ios_base_exceptions_set(ios_base *this, IOSB_iostate state)
4250 {
4251     TRACE("(%p %x)\n", this, state);
4252     this->except = state & IOSTATE_mask;
4253     ios_base_clear(this, this->state);
4254 }
4255
4256 /* ?exceptions@ios_base@std@@QBEHXZ */
4257 /* ?exceptions@ios_base@std@@QEBAHXZ */
4258 DEFINE_THISCALL_WRAPPER(ios_base_exceptions_get, 4)
4259 IOSB_iostate __thiscall ios_base_exceptions_get(ios_base *this)
4260 {
4261     TRACE("(%p)\n", this);
4262     return this->except;
4263 }
4264
4265 /* ?copyfmt@ios_base@std@@QAEAAV12@ABV12@@Z */
4266 /* ?copyfmt@ios_base@std@@QEAAAEAV12@AEBV12@@Z */
4267 DEFINE_THISCALL_WRAPPER(ios_base_copyfmt, 8)
4268 ios_base* __thiscall ios_base_copyfmt(ios_base *this, const ios_base *rhs)
4269 {
4270     TRACE("(%p %p)\n", this, rhs);
4271
4272     if(this != rhs) {
4273         IOS_BASE_iosarray *arr_cur;
4274         IOS_BASE_fnarray *event_cur;
4275
4276         ios_base_Tidy(this);
4277
4278         for(arr_cur=rhs->arr; arr_cur; arr_cur=arr_cur->next) {
4279             if(arr_cur->long_val)
4280                 *ios_base_iword(this, arr_cur->index) = arr_cur->long_val;
4281             if(arr_cur->ptr_val)
4282                 *ios_base_pword(this, arr_cur->index) = arr_cur->ptr_val;
4283         }
4284         this->stdstr = rhs->stdstr;
4285         this->fmtfl = rhs->fmtfl;
4286         this->prec = rhs->prec;
4287         this->wide = rhs->wide;
4288         locale_operator_assign(&this->loc, &rhs->loc);
4289
4290         for(event_cur=rhs->calls; event_cur; event_cur=event_cur->next)
4291             ios_base_register_callback(this, event_cur->event_handler, event_cur->index);
4292
4293         ios_base_Callfns(this, EVENT_copyfmt_event);
4294         ios_base_exceptions_set(this, rhs->except);
4295     }
4296
4297     return this;
4298 }
4299
4300 /* ??4ios_base@std@@QAEAAV01@ABV01@@Z */
4301 /* ??4ios_base@std@@QEAAAEAV01@AEBV01@@Z */
4302 DEFINE_THISCALL_WRAPPER(ios_base_assign, 8)
4303 ios_base* __thiscall ios_base_assign(ios_base *this, const ios_base *right)
4304 {
4305     TRACE("(%p %p)\n", this, right);
4306
4307     if(this != right) {
4308         this->state = right->state;
4309         ios_base_copyfmt(this, right);
4310     }
4311
4312     return this;
4313 }
4314
4315 /* ?fail@ios_base@std@@QBE_NXZ */
4316 /* ?fail@ios_base@std@@QEBA_NXZ */
4317 DEFINE_THISCALL_WRAPPER(ios_base_fail, 4)
4318 MSVCP_bool __thiscall ios_base_fail(const ios_base *this)
4319 {
4320     TRACE("(%p)\n", this);
4321     return (this->state & (IOSTATE_failbit|IOSTATE_badbit)) != 0;
4322 }
4323
4324 /* ??7ios_base@std@@QBE_NXZ */
4325 /* ??7ios_base@std@@QEBA_NXZ */
4326 DEFINE_THISCALL_WRAPPER(ios_base_op_succ, 4)
4327 MSVCP_bool __thiscall ios_base_op_succ(const ios_base *this)
4328 {
4329     TRACE("(%p)\n", this);
4330     return ios_base_fail(this);
4331 }
4332
4333 /* ??Bios_base@std@@QBEPAXXZ */
4334 /* ??Bios_base@std@@QEBAPEAXXZ */
4335 DEFINE_THISCALL_WRAPPER(ios_base_op_fail, 4)
4336 void* __thiscall ios_base_op_fail(const ios_base *this)
4337 {
4338     TRACE("(%p)\n", this);
4339     return ios_base_fail(this) ? NULL : (void*)this;
4340 }
4341
4342 /* ?_Addstd@ios_base@std@@SAXPAV12@@Z */
4343 /* ?_Addstd@ios_base@std@@SAXPEAV12@@Z */
4344 static void ios_base_Addstd(ios_base *add)
4345 {
4346     FIXME("(%p) stub\n", add);
4347 }
4348
4349 /* ?_Init@ios_base@std@@IAEXXZ */
4350 /* ?_Init@ios_base@std@@IEAAXXZ */
4351 DEFINE_THISCALL_WRAPPER(ios_base__Init, 4)
4352 void __thiscall ios_base__Init(ios_base *this)
4353 {
4354     TRACE("(%p)\n", this);
4355
4356     this->stdstr = 0;
4357     this->state = this->except = IOSTATE_goodbit;
4358     this->fmtfl = FMTFLAG_skipws | FMTFLAG_dec;
4359     this->prec = 6;
4360     this->wide = 0;
4361     this->arr = NULL;
4362     this->calls = NULL;
4363     locale_ctor(&this->loc);
4364 }
4365
4366 /* ?bad@ios_base@std@@QBE_NXZ */
4367 /* ?bad@ios_base@std@@QEBA_NXZ */
4368 DEFINE_THISCALL_WRAPPER(ios_base_bad, 4)
4369 MSVCP_bool __thiscall ios_base_bad(const ios_base *this)
4370 {
4371     TRACE("(%p)\n", this);
4372     return (this->state & IOSTATE_badbit) != 0;
4373 }
4374
4375 /* ?eof@ios_base@std@@QBE_NXZ */
4376 /* ?eof@ios_base@std@@QEBA_NXZ */
4377 DEFINE_THISCALL_WRAPPER(ios_base_eof, 4)
4378 MSVCP_bool __thiscall ios_base_eof(const ios_base *this)
4379 {
4380     TRACE("(%p)\n", this);
4381     return (this->state & IOSTATE_eofbit) != 0;
4382 }
4383
4384 /* ?flags@ios_base@std@@QAEHH@Z */
4385 /* ?flags@ios_base@std@@QEAAHH@Z */
4386 DEFINE_THISCALL_WRAPPER(ios_base_flags_set, 8)
4387 IOSB_fmtflags __thiscall ios_base_flags_set(ios_base *this, IOSB_fmtflags flags)
4388 {
4389     IOSB_fmtflags ret = this->fmtfl;
4390
4391     TRACE("(%p %x)\n", this, flags);
4392
4393     this->fmtfl = flags & FMTFLAG_mask;
4394     return ret;
4395 }
4396
4397 /* ?flags@ios_base@std@@QBEHXZ */
4398 /* ?flags@ios_base@std@@QEBAHXZ */
4399 DEFINE_THISCALL_WRAPPER(ios_base_flags_get, 4)
4400 IOSB_fmtflags __thiscall ios_base_flags_get(const ios_base *this)
4401 {
4402     TRACE("(%p)\n", this);
4403     return this->fmtfl;
4404 }
4405
4406 /* ?getloc@ios_base@std@@QBE?AVlocale@2@XZ */
4407 /* ?getloc@ios_base@std@@QEBA?AVlocale@2@XZ */
4408 DEFINE_THISCALL_WRAPPER(ios_base_getloc, 8)
4409 locale* __thiscall ios_base_getloc(const ios_base *this, locale *ret)
4410 {
4411     TRACE("(%p)\n", this);
4412     return locale_copy_ctor(ret, &this->loc);
4413 }
4414
4415 /* ?good@ios_base@std@@QBE_NXZ */
4416 /* ?good@ios_base@std@@QEBA_NXZ */
4417 DEFINE_THISCALL_WRAPPER(ios_base_good, 4)
4418 MSVCP_bool __thiscall ios_base_good(const ios_base *this)
4419 {
4420     TRACE("(%p)\n", this);
4421     return this->state == IOSTATE_goodbit;
4422 }
4423
4424 /* ?imbue@ios_base@std@@QAE?AVlocale@2@ABV32@@Z */
4425 /* ?imbue@ios_base@std@@QEAA?AVlocale@2@AEBV32@@Z */
4426 DEFINE_THISCALL_WRAPPER(ios_base_imbue, 12)
4427 locale* __thiscall ios_base_imbue(ios_base *this, locale *ret, const locale *loc)
4428 {
4429     TRACE("(%p %p)\n", this, loc);
4430     *ret = this->loc;
4431     locale_copy_ctor(&this->loc, loc);
4432     return ret;
4433 }
4434
4435 /* ?precision@ios_base@std@@QAEHH@Z */
4436 /* ?precision@ios_base@std@@QEAA_J_J@Z */
4437 DEFINE_THISCALL_WRAPPER(ios_base_precision_set, 8)
4438 streamsize __thiscall ios_base_precision_set(ios_base *this, streamsize precision)
4439 {
4440     streamsize ret = this->prec;
4441
4442     TRACE("(%p %ld)\n", this, precision);
4443
4444     this->prec = precision;
4445     return ret;
4446 }
4447
4448 /* ?precision@ios_base@std@@QBEHXZ */
4449 /* ?precision@ios_base@std@@QEBA_JXZ */
4450 DEFINE_THISCALL_WRAPPER(ios_base_precision_get, 4)
4451 streamsize __thiscall ios_base_precision_get(const ios_base *this)
4452 {
4453     TRACE("(%p)\n", this);
4454     return this->prec;
4455 }
4456
4457 /* ?rdstate@ios_base@std@@QBEHXZ */
4458 /* ?rdstate@ios_base@std@@QEBAHXZ */
4459 DEFINE_THISCALL_WRAPPER(ios_base_rdstate, 4)
4460 IOSB_iostate __thiscall ios_base_rdstate(const ios_base *this)
4461 {
4462     TRACE("(%p)\n", this);
4463     return this->state;
4464 }
4465
4466 /* ?setf@ios_base@std@@QAEHHH@Z */
4467 /* ?setf@ios_base@std@@QEAAHHH@Z */
4468 DEFINE_THISCALL_WRAPPER(ios_base_setf_mask, 12)
4469 IOSB_fmtflags __thiscall ios_base_setf_mask(ios_base *this, IOSB_fmtflags flags, IOSB_fmtflags mask)
4470 {
4471     IOSB_fmtflags ret = this->fmtfl;
4472
4473     TRACE("(%p %x %x)\n", this, flags, mask);
4474
4475     this->fmtfl = (this->fmtfl & (~mask)) | (flags & mask & FMTFLAG_mask);
4476     return ret;
4477 }
4478
4479 /* ?setf@ios_base@std@@QAEHH@Z */
4480 /* ?setf@ios_base@std@@QEAAHH@Z */
4481 DEFINE_THISCALL_WRAPPER(ios_base_setf, 8)
4482 IOSB_fmtflags __thiscall ios_base_setf(ios_base *this, IOSB_fmtflags flags)
4483 {
4484     return ios_base_setf_mask(this, flags, ~0);
4485 }
4486
4487 /* ?setstate@ios_base@std@@QAEXH_N@Z */
4488 /* ?setstate@ios_base@std@@QEAAXH_N@Z */
4489 DEFINE_THISCALL_WRAPPER(ios_base_setstate_reraise, 12)
4490 void __thiscall ios_base_setstate_reraise(ios_base *this, IOSB_iostate state, MSVCP_bool reraise)
4491 {
4492     TRACE("(%p %x %x)\n", this, state, reraise);
4493
4494     if(state != IOSTATE_goodbit)
4495         ios_base_clear_reraise(this, this->state | state, reraise);
4496 }
4497
4498 /* ?setstate@ios_base@std@@QAEXH@Z */
4499 /* ?setstate@ios_base@std@@QEAAXH@Z */
4500 static void ios_base_setstate(ios_base *this, IOSB_iostate state)
4501 {
4502     ios_base_setstate_reraise(this, state, FALSE);
4503 }
4504
4505 /* ?sync_with_stdio@ios_base@std@@SA_N_N@Z */
4506 MSVCP_bool CDECL ios_base_sync_with_stdio(MSVCP_bool sync)
4507 {
4508     _Lockit lock;
4509     MSVCP_bool ret;
4510
4511     TRACE("(%x)\n", sync);
4512
4513     _Lockit_ctor_locktype(&lock, _LOCK_STREAM);
4514     ret = ios_base_Sync;
4515     ios_base_Sync = sync;
4516     _Lockit_dtor(&lock);
4517     return ret;
4518 }
4519
4520 /* ?unsetf@ios_base@std@@QAEXH@Z */
4521 /* ?unsetf@ios_base@std@@QEAAXH@Z */
4522 DEFINE_THISCALL_WRAPPER(ios_base_unsetf, 8)
4523 void __thiscall ios_base_unsetf(ios_base *this, IOSB_fmtflags flags)
4524 {
4525     TRACE("(%p %x)\n", this, flags);
4526     this->fmtfl &= ~flags;
4527 }
4528
4529 /* ?width@ios_base@std@@QAEHH@Z */
4530 /* ?width@ios_base@std@@QEAA_J_J@Z */
4531 DEFINE_THISCALL_WRAPPER(ios_base_width_set, 8)
4532 streamsize __thiscall ios_base_width_set(ios_base *this, streamsize width)
4533 {
4534     streamsize ret = this->wide;
4535
4536     TRACE("(%p %ld)\n", this, width);
4537
4538     this->wide = width;
4539     return ret;
4540 }
4541
4542 /* ?width@ios_base@std@@QBEHXZ */
4543 /* ?width@ios_base@std@@QEBA_JXZ */
4544 DEFINE_THISCALL_WRAPPER(ios_base_width_get, 4)
4545 streamsize __thiscall ios_base_width_get(ios_base *this)
4546 {
4547     TRACE("(%p)\n", this);
4548     return this->wide;
4549 }
4550
4551 /* ?xalloc@ios_base@std@@SAHXZ */
4552 int CDECL ios_base_xalloc(void)
4553 {
4554     _Lockit lock;
4555     int ret;
4556
4557     TRACE("\n");
4558
4559     _Lockit_ctor_locktype(&lock, _LOCK_STREAM);
4560     ret = ios_base_Index++;
4561     _Lockit_dtor(&lock);
4562     return ret;
4563 }
4564
4565 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@IAE@XZ */
4566 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@IEAA@XZ */
4567 DEFINE_THISCALL_WRAPPER(basic_ios_char_ctor, 4)
4568 basic_ios_char* __thiscall basic_ios_char_ctor(basic_ios_char *this)
4569 {
4570     TRACE("(%p)\n", this);
4571
4572     ios_base_ctor(&this->base);
4573     this->base.vtable = &MSVCP_basic_ios_char_vtable;
4574     return this;
4575 }
4576
4577 /* ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IAEXPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z */
4578 /* ?init@?$basic_ios@DU?$char_traits@D@std@@@std@@IEAAXPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@_N@Z */
4579 DEFINE_THISCALL_WRAPPER(basic_ios_char_init, 12)
4580 void __thiscall basic_ios_char_init(basic_ios_char *this, basic_streambuf_char *streambuf, MSVCP_bool isstd)
4581 {
4582     TRACE("(%p %p %x)\n", this, streambuf, isstd);
4583     ios_base__Init(&this->base);
4584     this->strbuf = streambuf;
4585     this->stream = NULL;
4586     this->fillch = ' ';
4587
4588     if(!streambuf)
4589         ios_base_setstate(&this->base, IOSTATE_badbit);
4590
4591     if(isstd)
4592         FIXME("standard streams not handled yet\n");
4593 }
4594
4595 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
4596 /* ??0?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
4597 DEFINE_THISCALL_WRAPPER(basic_ios_char_ctor_streambuf, 8)
4598 basic_ios_char* __thiscall basic_ios_char_ctor_streambuf(basic_ios_char *this, basic_streambuf_char *strbuf)
4599 {
4600     TRACE("(%p %p)\n", this, strbuf);
4601
4602     basic_ios_char_ctor(this);
4603     basic_ios_char_init(this, strbuf, FALSE);
4604     return this;
4605 }
4606
4607 /* ??1?$basic_ios@DU?$char_traits@D@std@@@std@@UAE@XZ */
4608 /* ??1?$basic_ios@DU?$char_traits@D@std@@@std@@UEAA@XZ */
4609 DEFINE_THISCALL_WRAPPER(basic_ios_char_dtor, 4)
4610 void __thiscall basic_ios_char_dtor(basic_ios_char *this)
4611 {
4612     TRACE("(%p)\n", this);
4613     ios_base_dtor(&this->base);
4614 }
4615
4616 DEFINE_THISCALL_WRAPPER(basic_ios_char_vector_dtor, 8)
4617 basic_ios_char* __thiscall basic_ios_char_vector_dtor(basic_ios_char *this, unsigned int flags)
4618 {
4619     TRACE("(%p %x)\n", this, flags);
4620     if(flags & 2) {
4621         /* we have an array, with the number of elements stored before the first object */
4622         INT_PTR i, *ptr = (INT_PTR *)this-1;
4623
4624         for(i=*ptr-1; i>=0; i--)
4625             basic_ios_char_dtor(this+i);
4626         MSVCRT_operator_delete(ptr);
4627     } else {
4628         basic_ios_char_dtor(this);
4629         if(flags & 1)
4630             MSVCRT_operator_delete(this);
4631     }
4632
4633     return this;
4634 }
4635
4636 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z */
4637 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z */
4638 DEFINE_THISCALL_WRAPPER(basic_ios_char_clear_reraise, 12)
4639 void __thiscall basic_ios_char_clear_reraise(basic_ios_char *this, IOSB_iostate state, MSVCP_bool reraise)
4640 {
4641     TRACE("(%p %x %x)\n", this, state, reraise);
4642     ios_base_clear_reraise(&this->base, state | (this->strbuf ? IOSTATE_goodbit : IOSTATE_badbit), reraise);
4643 }
4644
4645 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXI@Z */
4646 /* ?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z */
4647 static void basic_ios_char_clear(basic_ios_char *this, unsigned int state)
4648 {
4649     basic_ios_char_clear_reraise(this, (IOSB_iostate)state, FALSE);
4650 }
4651
4652 /* ?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEAAV12@ABV12@@Z */
4653 /* ?copyfmt@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEBV12@@Z */
4654 DEFINE_THISCALL_WRAPPER(basic_ios_char_copyfmt, 8)
4655 basic_ios_char* __thiscall basic_ios_char_copyfmt(basic_ios_char *this, basic_ios_char *copy)
4656 {
4657     TRACE("(%p %p)\n", this, copy);
4658     if(this == copy)
4659         return this;
4660
4661     this->stream = copy->stream;
4662     this->fillch = copy->fillch;
4663     ios_base_copyfmt(&this->base, &copy->base);
4664     return this;
4665 }
4666
4667 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEDD@Z */
4668 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAADD@Z */
4669 DEFINE_THISCALL_WRAPPER(basic_ios_char_fill_set, 8)
4670 char __thiscall basic_ios_char_fill_set(basic_ios_char *this, char fill)
4671 {
4672     char ret = this->fillch;
4673
4674     TRACE("(%p %c)\n", this, fill);
4675
4676     this->fillch = fill;
4677     return ret;
4678 }
4679
4680 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDXZ */
4681 /* ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADXZ */
4682 DEFINE_THISCALL_WRAPPER(basic_ios_char_fill_get, 4)
4683 char __thiscall basic_ios_char_fill_get(basic_ios_char *this)
4684 {
4685     TRACE("(%p)\n", this);
4686     return this->fillch;
4687 }
4688
4689 /* ?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
4690 /* ?imbue@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
4691 DEFINE_THISCALL_WRAPPER(basic_ios_char_imbue, 12)
4692 locale *__thiscall basic_ios_char_imbue(basic_ios_char *this, locale *ret, const locale *loc)
4693 {
4694     TRACE("(%p %p %p)\n", this, ret, loc);
4695
4696     if(this->strbuf) {
4697         basic_streambuf_char_pubimbue(this->strbuf, ret, loc);
4698         locale_dtor(ret);
4699     }
4700
4701     return ios_base_imbue(&this->base, ret, loc);
4702 }
4703
4704 /* ?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDDD@Z */
4705 /* ?narrow@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADDD@Z */
4706 DEFINE_THISCALL_WRAPPER(basic_ios_char_narrow, 12)
4707 char __thiscall basic_ios_char_narrow(basic_ios_char *this, char ch, char def)
4708 {
4709     TRACE("(%p %c %c)\n", this, ch, def);
4710     return ctype_char_narrow_ch(ctype_char_use_facet(&this->strbuf->loc), ch, def);
4711 }
4712
4713 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PAV32@@Z */
4714 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@PEAV32@@Z */
4715 DEFINE_THISCALL_WRAPPER(basic_ios_char_rdbuf_set, 8)
4716 basic_streambuf_char* __thiscall basic_ios_char_rdbuf_set(basic_ios_char *this, basic_streambuf_char *streambuf)
4717 {
4718     basic_streambuf_char *ret = this->strbuf;
4719
4720     TRACE("(%p %p)\n", this, streambuf);
4721
4722     this->strbuf = streambuf;
4723     basic_ios_char_clear(this, IOSTATE_goodbit);
4724     return ret;
4725 }
4726
4727 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ */
4728 /* ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ */
4729 DEFINE_THISCALL_WRAPPER(basic_ios_char_rdbuf_get, 4)
4730 basic_streambuf_char* __thiscall basic_ios_char_rdbuf_get(const basic_ios_char *this)
4731 {
4732     TRACE("(%p)\n", this);
4733     return this->strbuf;
4734 }
4735
4736 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z */
4737 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z */
4738 DEFINE_THISCALL_WRAPPER(basic_ios_char_setstate_reraise, 12)
4739 void __thiscall basic_ios_char_setstate_reraise(basic_ios_char *this, IOSB_iostate state, MSVCP_bool reraise)
4740 {
4741     TRACE("(%p %x %x)\n", this, state, reraise);
4742
4743     if(state != IOSTATE_goodbit)
4744         basic_ios_char_clear_reraise(this, this->base.state | state, reraise);
4745 }
4746
4747 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXI@Z */
4748 /* ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXI@Z */
4749 static void basic_ios_char_setstate(basic_ios_char *this, unsigned int state)
4750 {
4751     basic_ios_char_setstate_reraise(this, (IOSB_iostate)state, FALSE);
4752 }
4753
4754 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@PAV32@@Z */
4755 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@PEAV32@@Z */
4756 DEFINE_THISCALL_WRAPPER(basic_ios_char_tie_set, 8)
4757 basic_ostream_char* __thiscall basic_ios_char_tie_set(basic_ios_char *this, basic_ostream_char *ostream)
4758 {
4759     basic_ostream_char *ret = this->stream;
4760
4761     TRACE("(%p %p)\n", this, ostream);
4762
4763     this->stream = ostream;
4764     return ret;
4765 }
4766
4767 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ */
4768 /* ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ */
4769 DEFINE_THISCALL_WRAPPER(basic_ios_char_tie_get, 4)
4770 basic_ostream_char* __thiscall basic_ios_char_tie_get(const basic_ios_char *this)
4771 {
4772     TRACE("(%p)\n", this);
4773     return this->stream;
4774 }
4775
4776 /* ?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDD@Z */
4777 /* ?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADD@Z */
4778 DEFINE_THISCALL_WRAPPER(basic_ios_char_widen, 8)
4779 char __thiscall basic_ios_char_widen(basic_ios_char *this, char ch)
4780 {
4781     TRACE("(%p %c)\n", this, ch);
4782     return ctype_char_widen_ch(ctype_char_use_facet(&this->strbuf->loc), ch);
4783 }
4784
4785
4786 /* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@IAE@XZ */
4787 /* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@IEAA@XZ */
4788 static basic_ios_wchar* basic_ios_wchar_ctor(basic_ios_wchar *this)
4789 {
4790     TRACE("(%p)\n", this);
4791
4792     ios_base_ctor(&this->base);
4793     this->base.vtable = &MSVCP_basic_ios_wchar_vtable;
4794     return this;
4795 }
4796
4797 /* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@IAE@XZ */
4798 /* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@IEAA@XZ */
4799 DEFINE_THISCALL_WRAPPER(basic_ios_short_ctor, 4)
4800 basic_ios_wchar* __thiscall basic_ios_short_ctor(basic_ios_wchar *this)
4801 {
4802     basic_ios_wchar_ctor(this);
4803     this->base.vtable = &MSVCP_basic_ios_short_vtable;
4804     return this;
4805 }
4806
4807 /* ?init@?$basic_ios@_WU?$char_traits@_W@std@@@std@@IAEXPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_N@Z */
4808 /* ?init@?$basic_ios@_WU?$char_traits@_W@std@@@std@@IEAAXPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_N@Z */
4809 /* ?init@?$basic_ios@GU?$char_traits@G@std@@@std@@IAEXPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@_N@Z */
4810 /* ?init@?$basic_ios@GU?$char_traits@G@std@@@std@@IEAAXPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@_N@Z */
4811 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_init, 12)
4812 void __thiscall basic_ios_wchar_init(basic_ios_wchar *this, basic_streambuf_wchar *streambuf, MSVCP_bool isstd)
4813 {
4814     TRACE("(%p %p %x)\n", this, streambuf, isstd);
4815     ios_base__Init(&this->base);
4816     this->strbuf = streambuf;
4817     this->stream = NULL;
4818     this->fillch = ' ';
4819
4820     if(!streambuf)
4821         ios_base_setstate(&this->base, IOSTATE_badbit);
4822
4823     if(isstd)
4824         FIXME("standard streams not handled yet\n");
4825 }
4826
4827 /* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
4828 /* ??0?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
4829 static basic_ios_wchar* basic_ios_wchar_ctor_streambuf(basic_ios_wchar *this, basic_streambuf_wchar *strbuf)
4830 {
4831     TRACE("(%p %p)\n", this, strbuf);
4832
4833     basic_ios_wchar_ctor(this);
4834     basic_ios_wchar_init(this, strbuf, FALSE);
4835     return this;
4836 }
4837
4838 /* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
4839 /* ??0?$basic_ios@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
4840 DEFINE_THISCALL_WRAPPER(basic_ios_short_ctor_streambuf, 8)
4841 basic_ios_wchar* __thiscall basic_ios_short_ctor_streambuf(basic_ios_wchar *this, basic_streambuf_wchar *strbuf)
4842 {
4843     basic_ios_wchar_ctor_streambuf(this, strbuf);
4844     this->base.vtable = &MSVCP_basic_ios_short_vtable;
4845     return this;
4846 }
4847
4848 /* ??1?$basic_ios@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
4849 /* ??1?$basic_ios@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
4850 /* ??1?$basic_ios@GU?$char_traits@G@std@@@std@@UAE@XZ */
4851 /* ??1?$basic_ios@GU?$char_traits@G@std@@@std@@UEAA@XZ */
4852 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_dtor, 4)
4853 void __thiscall basic_ios_wchar_dtor(basic_ios_wchar *this)
4854 {
4855     TRACE("(%p)\n", this);
4856     ios_base_dtor(&this->base);
4857 }
4858
4859 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_vector_dtor, 8)
4860 basic_ios_wchar* __thiscall basic_ios_wchar_vector_dtor(basic_ios_wchar *this, unsigned int flags)
4861 {
4862     TRACE("(%p %x)\n", this, flags);
4863     if(flags & 2) {
4864         /* we have an array, with the number of elements stored before the first object */
4865         INT_PTR i, *ptr = (INT_PTR *)this-1;
4866
4867         for(i=*ptr-1; i>=0; i--)
4868             basic_ios_wchar_dtor(this+i);
4869         MSVCRT_operator_delete(ptr);
4870     } else {
4871         basic_ios_wchar_dtor(this);
4872         if(flags & 1)
4873             MSVCRT_operator_delete(this);
4874     }
4875
4876     return this;
4877 }
4878
4879 /* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z */
4880 /* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z */
4881 /* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXH_N@Z */
4882 /* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXH_N@Z */
4883 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_clear_reraise, 12)
4884 void __thiscall basic_ios_wchar_clear_reraise(basic_ios_wchar *this, IOSB_iostate state, MSVCP_bool reraise)
4885 {
4886     TRACE("(%p %x %x)\n", this, state, reraise);
4887     ios_base_clear_reraise(&this->base, state | (this->strbuf ? IOSTATE_goodbit : IOSTATE_badbit), reraise);
4888 }
4889
4890 /* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXI@Z */
4891 /* ?clear@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXI@Z */
4892 /* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXI@Z */
4893 /* ?clear@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXI@Z */
4894 static void basic_ios_wchar_clear(basic_ios_wchar *this, unsigned int state)
4895 {
4896     basic_ios_wchar_clear_reraise(this, (IOSB_iostate)state, FALSE);
4897 }
4898
4899 /* ?copyfmt@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEAAV12@ABV12@@Z */
4900 /* ?copyfmt@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEBV12@@Z */
4901 /* ?copyfmt@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEAAV12@ABV12@@Z */
4902 /* ?copyfmt@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEBV12@@Z */
4903 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_copyfmt, 8)
4904 basic_ios_wchar* __thiscall basic_ios_wchar_copyfmt(basic_ios_wchar *this, basic_ios_wchar *copy)
4905 {
4906     TRACE("(%p %p)\n", this, copy);
4907     if(this == copy)
4908         return this;
4909
4910     this->stream = copy->stream;
4911     this->fillch = copy->fillch;
4912     ios_base_copyfmt(&this->base, &copy->base);
4913     return this;
4914 }
4915
4916 /* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE_W_W@Z */
4917 /* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA_W_W@Z */
4918 /* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEGG@Z */
4919 /* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAGG@Z */
4920 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_fill_set, 8)
4921 wchar_t __thiscall basic_ios_wchar_fill_set(basic_ios_wchar *this, wchar_t fill)
4922 {
4923     wchar_t ret = this->fillch;
4924
4925     TRACE("(%p %c)\n", this, fill);
4926
4927     this->fillch = fill;
4928     return ret;
4929 }
4930
4931 /* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBE_WXZ */
4932 /* ?fill@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WXZ */
4933 /* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEGXZ */
4934 /* ?fill@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAGXZ */
4935 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_fill_get, 4)
4936 wchar_t __thiscall basic_ios_wchar_fill_get(basic_ios_wchar *this)
4937 {
4938     TRACE("(%p)\n", this);
4939     return this->fillch;
4940 }
4941
4942 /* ?imbue@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
4943 /* ?imbue@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
4944 /* ?imbue@?$basic_ios@GU?$char_traits@G@std@@@std@@QAE?AVlocale@2@ABV32@@Z */
4945 /* ?imbue@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAA?AVlocale@2@AEBV32@@Z */
4946 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_imbue, 12)
4947 locale *__thiscall basic_ios_wchar_imbue(basic_ios_wchar *this, locale *ret, const locale *loc)
4948 {
4949     TRACE("(%p %p %p)\n", this, ret, loc);
4950
4951     if(this->strbuf) {
4952         basic_streambuf_wchar_pubimbue(this->strbuf, ret, loc);
4953         locale_dtor(ret);
4954     }
4955
4956     return ios_base_imbue(&this->base, ret, loc);
4957 }
4958
4959 /* ?narrow@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBED_WD@Z */
4960 /* ?narrow@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAD_WD@Z */
4961 /* ?narrow@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEDGD@Z */
4962 /* ?narrow@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBADGD@Z */
4963 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_narrow, 12)
4964 char __thiscall basic_ios_wchar_narrow(basic_ios_wchar *this, wchar_t ch, char def)
4965 {
4966     TRACE("(%p %c %c)\n", this, ch, def);
4967     return ctype_wchar_narrow_ch(ctype_wchar_use_facet(&this->strbuf->loc), ch, def);
4968 }
4969
4970 /* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PAV32@@Z */
4971 /* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@PEAV32@@Z */
4972 /* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PAV32@@Z */
4973 /* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@PEAV32@@Z */
4974 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_rdbuf_set, 8)
4975 basic_streambuf_wchar* __thiscall basic_ios_wchar_rdbuf_set(basic_ios_wchar *this, basic_streambuf_wchar *streambuf)
4976 {
4977     basic_streambuf_wchar *ret = this->strbuf;
4978
4979     TRACE("(%p %p)\n", this, streambuf);
4980
4981     this->strbuf = streambuf;
4982     basic_ios_wchar_clear(this, IOSTATE_goodbit);
4983     return ret;
4984 }
4985
4986 /* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ */
4987 /* ?rdbuf@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@XZ */
4988 /* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_streambuf@GU?$char_traits@G@std@@@2@XZ */
4989 /* ?rdbuf@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@XZ */
4990 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_rdbuf_get, 4)
4991 basic_streambuf_wchar* __thiscall basic_ios_wchar_rdbuf_get(const basic_ios_wchar *this)
4992 {
4993     TRACE("(%p)\n", this);
4994     return this->strbuf;
4995 }
4996
4997 /* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXH_N@Z */
4998 /* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXH_N@Z */
4999 /* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXH_N@Z */
5000 /* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXH_N@Z */
5001 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_setstate_reraise, 12)
5002 void __thiscall basic_ios_wchar_setstate_reraise(basic_ios_wchar *this, IOSB_iostate state, MSVCP_bool reraise)
5003 {
5004     TRACE("(%p %x %x)\n", this, state, reraise);
5005
5006     if(state != IOSTATE_goodbit)
5007         basic_ios_wchar_clear_reraise(this, this->base.state | state, reraise);
5008 }
5009
5010 /* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEXI@Z */
5011 /* ?setstate@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAXI@Z */
5012 /* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEXI@Z */
5013 /* ?setstate@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAXI@Z */
5014 static void basic_ios_wchar_setstate(basic_ios_wchar *this, IOSB_iostate state)
5015 {
5016     basic_ios_wchar_setstate_reraise(this, state, FALSE);
5017 }
5018
5019 /* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QAEPAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@PAV32@@Z */
5020 /* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEAAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@PEAV32@@Z */
5021 /* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QAEPAV?$basic_ostream@GU?$char_traits@G@std@@@2@PAV32@@Z */
5022 /* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QEAAPEAV?$basic_ostream@GU?$char_traits@G@std@@@2@PEAV32@@Z */
5023 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_tie_set, 8)
5024 basic_ostream_wchar* __thiscall basic_ios_wchar_tie_set(basic_ios_wchar *this, basic_ostream_wchar *ostream)
5025 {
5026     basic_ostream_wchar *ret = this->stream;
5027
5028     TRACE("(%p %p)\n", this, ostream);
5029
5030     this->stream = ostream;
5031     return ret;
5032 }
5033
5034 /* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ */
5035 /* ?tie@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_ostream@_WU?$char_traits@_W@std@@@2@XZ */
5036 /* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_ostream@GU?$char_traits@G@std@@@2@XZ */
5037 /* ?tie@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_ostream@GU?$char_traits@G@std@@@2@XZ */
5038 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_tie_get, 4)
5039 basic_ostream_wchar* __thiscall basic_ios_wchar_tie_get(const basic_ios_wchar *this)
5040 {
5041     TRACE("(%p)\n", this);
5042     return this->stream;
5043 }
5044
5045 /* ?widen@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QBE_WD@Z */
5046 /* ?widen@?$basic_ios@_WU?$char_traits@_W@std@@@std@@QEBA_WD@Z */
5047 /* ?widen@?$basic_ios@GU?$char_traits@G@std@@@std@@QBEGD@Z */
5048 /* ?widen@?$basic_ios@GU?$char_traits@G@std@@@std@@QEBAGD@Z */
5049 DEFINE_THISCALL_WRAPPER(basic_ios_wchar_widen, 8)
5050 wchar_t __thiscall basic_ios_wchar_widen(basic_ios_wchar *this, char ch)
5051 {
5052     TRACE("(%p %c)\n", this, ch);
5053     return ctype_wchar_widen_ch(ctype_wchar_use_facet(&this->strbuf->loc), ch);
5054 }
5055
5056 /* Caution: basic_ostream uses virtual inheritance.
5057  * All constructors have additional parameter that says if base class should be initialized.
5058  * Base class needs to be accessed using vbtable.
5059  */
5060 static inline basic_ios_char* basic_ostream_char_get_basic_ios(basic_ostream_char *this)
5061 {
5062     return (basic_ios_char*)((char*)this+this->vbtable[1]);
5063 }
5064
5065 static inline basic_ios_char* basic_ostream_char_to_basic_ios(basic_ostream_char *ptr)
5066 {
5067     return (basic_ios_char*)((char*)ptr+basic_ostream_char_vbtable[1]);
5068 }
5069
5070 static inline basic_ostream_char* basic_ostream_char_from_basic_ios(basic_ios_char *ptr)
5071 {
5072     return (basic_ostream_char*)((char*)ptr-basic_ostream_char_vbtable[1]);
5073 }
5074
5075 /* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N1@Z */
5076 /* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N1@Z */
5077 DEFINE_THISCALL_WRAPPER(basic_ostream_char_ctor, 20)
5078 basic_ostream_char* __thiscall basic_ostream_char_ctor(basic_ostream_char *this,
5079         basic_streambuf_char *strbuf, MSVCP_bool isstd, MSVCP_bool init, MSVCP_bool virt_init)
5080 {
5081     basic_ios_char *base;
5082
5083     TRACE("(%p %p %d %d %d)\n", this, strbuf, isstd, init, virt_init);
5084
5085     if(virt_init) {
5086         this->vbtable = basic_ostream_char_vbtable;
5087         base = basic_ostream_char_get_basic_ios(this);
5088         basic_ios_char_ctor(base);
5089     }else {
5090         base = basic_ostream_char_get_basic_ios(this);
5091     }
5092
5093     base->base.vtable = &MSVCP_basic_ostream_char_vtable;
5094     if(init)
5095         basic_ios_char_init(base, strbuf, isstd);
5096     return this;
5097 }
5098
5099 /* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@@Z */
5100 /* ??0?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@@Z */
5101 DEFINE_THISCALL_WRAPPER(basic_ostream_char_ctor_uninitialized, 12)
5102 basic_ostream_char* __thiscall basic_ostream_char_ctor_uninitialized(basic_ostream_char *this,
5103         int uninitialized, MSVCP_bool virt_init)
5104 {
5105     basic_ios_char *base;
5106
5107     TRACE("(%p %d)\n", this, uninitialized);
5108
5109     if(virt_init) {
5110         this->vbtable = basic_ostream_char_vbtable;
5111         base = basic_ostream_char_get_basic_ios(this);
5112         basic_ios_char_ctor(base);
5113     }else {
5114         base = basic_ostream_char_get_basic_ios(this);
5115     }
5116
5117     base->base.vtable = &MSVCP_basic_ostream_char_vtable;
5118     ios_base_Addstd(&base->base);
5119     return this;
5120 }
5121
5122 /* ??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UAE@XZ */
5123 /* ??1?$basic_ostream@DU?$char_traits@D@std@@@std@@UEAA@XZ */
5124 DEFINE_THISCALL_WRAPPER(basic_ostream_char_dtor, 4)
5125 void __thiscall basic_ostream_char_dtor(basic_ios_char *base)
5126 {
5127     basic_ostream_char *this = basic_ostream_char_from_basic_ios(base);
5128
5129     /* don't destroy virtual base here */
5130     TRACE("(%p)\n", this);
5131 }
5132
5133 /* ??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
5134 /* ??_D?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
5135 DEFINE_THISCALL_WRAPPER(basic_ostream_char_vbase_dtor, 4)
5136 void __thiscall basic_ostream_char_vbase_dtor(basic_ostream_char *this)
5137 {
5138     TRACE("(%p)\n", this);
5139     basic_ostream_char_dtor(basic_ostream_char_to_basic_ios(this));
5140     basic_ios_char_dtor(basic_ostream_char_get_basic_ios(this));
5141 }
5142
5143 DEFINE_THISCALL_WRAPPER(basic_ostream_char_vector_dtor, 8)
5144 basic_ostream_char* __thiscall basic_ostream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
5145 {
5146     basic_ostream_char *this = basic_ostream_char_from_basic_ios(base);
5147
5148     TRACE("(%p %x)\n", this, flags);
5149
5150     if(flags & 2) {
5151         /* we have an array, with the number of elements stored before the first object */
5152         INT_PTR i, *ptr = (INT_PTR *)this-1;
5153
5154         for(i=*ptr-1; i>=0; i--)
5155             basic_ostream_char_vbase_dtor(this+i);
5156         MSVCRT_operator_delete(ptr);
5157     } else {
5158         basic_ostream_char_vbase_dtor(this);
5159         if(flags & 1)
5160             MSVCRT_operator_delete(this);
5161     }
5162
5163     return this;
5164 }
5165
5166 /* ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ */
5167 /* ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ */
5168 DEFINE_THISCALL_WRAPPER(basic_ostream_char_flush, 4)
5169 basic_ostream_char* __thiscall basic_ostream_char_flush(basic_ostream_char *this)
5170 {
5171     /* this function is not matching C++ specification */
5172     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
5173
5174     TRACE("(%p)\n", this);
5175
5176     if(basic_ios_char_rdbuf_get(base) && ios_base_good(&base->base)
5177             && basic_streambuf_char_pubsync(basic_ios_char_rdbuf_get(base))==-1)
5178         basic_ios_char_setstate(base, IOSTATE_badbit);
5179     return this;
5180 }
5181
5182 /* ?flush@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z */
5183 /* ?flush@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@1@AEAV21@@Z */
5184 basic_ostream_char* __cdecl flush_ostream_char(basic_ostream_char *ostream)
5185 {
5186     return basic_ostream_char_flush(ostream);
5187 }
5188
5189 /* ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
5190 /* ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
5191 static void basic_ostream_char__Osfx(basic_ostream_char *this)
5192 {
5193     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
5194
5195     TRACE("(%p)\n", this);
5196
5197     if(base->base.fmtfl & FMTFLAG_unitbuf)
5198         basic_ostream_char_flush(this);
5199 }
5200
5201 /* ?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
5202 /* ?osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
5203 DEFINE_THISCALL_WRAPPER(basic_ostream_char_osfx, 4)
5204 void __thiscall basic_ostream_char_osfx(basic_ostream_char *this)
5205 {
5206     TRACE("(%p)\n", this);
5207     basic_ostream_char__Osfx(this);
5208 }
5209
5210 static BOOL basic_ostream_char_sentry_create(basic_ostream_char *ostr)
5211 {
5212     basic_ios_char *base = basic_ostream_char_get_basic_ios(ostr);
5213
5214     if(basic_ios_char_rdbuf_get(base))
5215         basic_streambuf_char__Lock(base->strbuf);
5216
5217     if(ios_base_good(&base->base) && base->stream)
5218         basic_ostream_char_flush(base->stream);
5219
5220     return ios_base_good(&base->base);
5221 }
5222
5223 static void basic_ostream_char_sentry_destroy(basic_ostream_char *ostr)
5224 {
5225     basic_ios_char *base = basic_ostream_char_get_basic_ios(ostr);
5226
5227     if(ios_base_good(&base->base) && !__uncaught_exception())
5228         basic_ostream_char_osfx(ostr);
5229
5230     if(basic_ios_char_rdbuf_get(base))
5231         basic_streambuf_char__Unlock(base->strbuf);
5232 }
5233
5234 /* ?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE_NXZ */
5235 /* ?opfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA_NXZ */
5236 DEFINE_THISCALL_WRAPPER(basic_ostream_char_opfx, 4)
5237 MSVCP_bool __thiscall basic_ostream_char_opfx(basic_ostream_char *this)
5238 {
5239     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
5240
5241     TRACE("(%p)\n", this);
5242
5243     if(ios_base_good(&base->base) && base->stream)
5244         basic_ostream_char_flush(base->stream);
5245     return ios_base_good(&base->base);
5246 }
5247
5248 /* ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z */
5249 /* ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z */
5250 DEFINE_THISCALL_WRAPPER(basic_ostream_char_put, 8)
5251 basic_ostream_char* __thiscall basic_ostream_char_put(basic_ostream_char *this, char ch)
5252 {
5253     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
5254
5255     TRACE("(%p %c)\n", this, ch);
5256
5257     if(!basic_ostream_char_sentry_create(this)
5258             || basic_streambuf_char_sputc(base->strbuf, ch)==EOF) {
5259         basic_ostream_char_sentry_destroy(this);
5260         basic_ios_char_setstate(base, IOSTATE_badbit);
5261         return this;
5262     }
5263
5264     basic_ostream_char_sentry_destroy(this);
5265     return this;
5266 }
5267
5268 /* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
5269 /* ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
5270 DEFINE_THISCALL_WRAPPER(basic_ostream_char_seekp_fpos, 28)
5271 basic_ostream_char* __thiscall basic_ostream_char_seekp_fpos(basic_ostream_char *this, fpos_int pos)
5272 {
5273     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
5274
5275     TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos));
5276
5277     if(!ios_base_fail(&base->base)) {
5278         fpos_int seek;
5279
5280         basic_streambuf_char_pubseekpos(basic_ios_char_rdbuf_get(base),
5281                 &seek, pos, OPENMODE_out);
5282         if(seek.off==-1 && seek.pos==0 && seek.state==0)
5283             basic_ios_char_setstate(base, IOSTATE_failbit);
5284     }
5285     return this;
5286 }
5287
5288 /* ?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@XZ */
5289 /* ?tellp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
5290 DEFINE_THISCALL_WRAPPER(basic_ostream_char_tellp, 8)
5291 fpos_int* __thiscall basic_ostream_char_tellp(basic_ostream_char *this, fpos_int *ret)
5292 {
5293     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
5294
5295     TRACE("(%p)\n", this);
5296
5297     if(!ios_base_fail(&base->base)) {
5298         basic_streambuf_char_pubseekoff(basic_ios_char_rdbuf_get(base),
5299                 ret, 0, SEEKDIR_cur, OPENMODE_out);
5300     }else {
5301         ret->off = -1;
5302         ret->pos = 0;
5303         ret->state = 0;
5304     }
5305     return ret;
5306 }
5307
5308 /* ?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@PBDH@Z */
5309 /* ?write@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEBD_J@Z */
5310 DEFINE_THISCALL_WRAPPER(basic_ostream_char_write, 12)
5311 basic_ostream_char* __thiscall basic_ostream_char_write(basic_ostream_char *this, const char *str, streamsize count)
5312 {
5313     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
5314
5315     TRACE("(%p %s %ld)\n", this, debugstr_a(str), count);
5316
5317     if(!basic_ostream_char_sentry_create(this)
5318             || basic_streambuf_char_sputn(base->strbuf, str, count)!=count) {
5319         basic_ostream_char_sentry_destroy(this);
5320         basic_ios_char_setstate(base, IOSTATE_badbit);
5321         return this;
5322     }
5323
5324     basic_ostream_char_sentry_destroy(this);
5325     return this;
5326 }
5327
5328 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@F@Z */
5329 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@F@Z */
5330 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_short, 8)
5331 basic_ostream_char* __thiscall basic_ostream_char_print_short(basic_ostream_char *this, short val)
5332 {
5333     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
5334     int state = IOSTATE_goodbit;
5335
5336     TRACE("(%p %d)\n", this, val);
5337
5338     if(basic_ostream_char_sentry_create(this)) {
5339         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5340         const num_put *numput = num_put_char_use_facet(&strbuf->loc);
5341         ostreambuf_iterator_char dest = {0, strbuf};
5342
5343         num_put_char_put_long(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base),
5344                 (ios_base_flags_get(&base->base) & FMTFLAG_basefield & (FMTFLAG_oct | FMTFLAG_hex))
5345                 ? (LONG)((unsigned short)val) : (LONG)val);
5346     }
5347     basic_ostream_char_sentry_destroy(this);
5348
5349     basic_ios_char_setstate(base, state);
5350     return this;
5351 }
5352
5353 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@G@Z */
5354 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@G@Z */
5355 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ushort, 8)
5356 basic_ostream_char* __thiscall basic_ostream_char_print_ushort(basic_ostream_char *this, unsigned short val)
5357 {
5358     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
5359     int state = IOSTATE_goodbit;
5360
5361     TRACE("(%p %u)\n", this, val);
5362
5363     if(basic_ostream_char_sentry_create(this)) {
5364         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5365         const num_put *numput = num_put_char_use_facet(&strbuf->loc);
5366         ostreambuf_iterator_char dest = {0, strbuf};
5367
5368         num_put_char_put_ulong(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
5369     }
5370     basic_ostream_char_sentry_destroy(this);
5371
5372     basic_ios_char_setstate(base, state);
5373     return this;
5374 }
5375
5376 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z */
5377 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@H@Z */
5378 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@J@Z */
5379 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@J@Z */
5380 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_int, 8)
5381 basic_ostream_char* __thiscall basic_ostream_char_print_int(basic_ostream_char *this, int val)
5382 {
5383     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
5384     int state = IOSTATE_goodbit;
5385
5386     TRACE("(%p %d)\n", this, val);
5387
5388     if(basic_ostream_char_sentry_create(this)) {
5389         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5390         const num_put *numput = num_put_char_use_facet(&strbuf->loc);
5391         ostreambuf_iterator_char dest = {0, strbuf};
5392
5393         num_put_char_put_long(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
5394     }
5395     basic_ostream_char_sentry_destroy(this);
5396
5397     basic_ios_char_setstate(base, state);
5398     return this;
5399 }
5400
5401 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@I@Z */
5402 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@I@Z */
5403 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@K@Z */
5404 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@K@Z */
5405 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_uint, 8)
5406 basic_ostream_char* __thiscall basic_ostream_char_print_uint(basic_ostream_char *this, unsigned int val)
5407 {
5408     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
5409     int state = IOSTATE_goodbit;
5410
5411     TRACE("(%p %u)\n", this, val);
5412
5413     if(basic_ostream_char_sentry_create(this)) {
5414         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5415         const num_put *numput = num_put_char_use_facet(&strbuf->loc);
5416         ostreambuf_iterator_char dest = {0, strbuf};
5417
5418         num_put_char_put_ulong(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
5419     }
5420     basic_ostream_char_sentry_destroy(this);
5421
5422     basic_ios_char_setstate(base, state);
5423     return this;
5424 }
5425
5426 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@M@Z */
5427 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@M@Z */
5428 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_float, 8)
5429 basic_ostream_char* __thiscall basic_ostream_char_print_float(basic_ostream_char *this, float val)
5430 {
5431     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
5432     int state = IOSTATE_goodbit;
5433
5434     TRACE("(%p %f)\n", this, val);
5435
5436     if(basic_ostream_char_sentry_create(this)) {
5437         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5438         const num_put *numput = num_put_char_use_facet(&strbuf->loc);
5439         ostreambuf_iterator_char dest = {0, strbuf};
5440
5441         num_put_char_put_double(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
5442     }
5443     basic_ostream_char_sentry_destroy(this);
5444
5445     basic_ios_char_setstate(base, state);
5446     return this;
5447 }
5448
5449 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@N@Z */
5450 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z */
5451 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_double, 12)
5452 basic_ostream_char* __thiscall basic_ostream_char_print_double(basic_ostream_char *this, double val)
5453 {
5454     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
5455     int state = IOSTATE_goodbit;
5456
5457     TRACE("(%p %lf)\n", this, val);
5458
5459     if(basic_ostream_char_sentry_create(this)) {
5460         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5461         const num_put *numput = num_put_char_use_facet(&strbuf->loc);
5462         ostreambuf_iterator_char dest = {0, strbuf};
5463
5464         num_put_char_put_double(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
5465     }
5466     basic_ostream_char_sentry_destroy(this);
5467
5468     basic_ios_char_setstate(base, state);
5469     return this;
5470 }
5471
5472 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@O@Z */
5473 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@O@Z */
5474 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ldouble, 12)
5475 basic_ostream_char* __thiscall basic_ostream_char_print_ldouble(basic_ostream_char *this, double val)
5476 {
5477     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
5478     int state = IOSTATE_goodbit;
5479
5480     TRACE("(%p %lf)\n", this, val);
5481
5482     if(basic_ostream_char_sentry_create(this)) {
5483         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5484         const num_put *numput = num_put_char_use_facet(&strbuf->loc);
5485         ostreambuf_iterator_char dest = {0, strbuf};
5486
5487         num_put_char_put_ldouble(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
5488     }
5489     basic_ostream_char_sentry_destroy(this);
5490
5491     basic_ios_char_setstate(base, state);
5492     return this;
5493 }
5494
5495 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
5496 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
5497 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_streambuf, 8)
5498 basic_ostream_char* __thiscall basic_ostream_char_print_streambuf(basic_ostream_char *this, basic_streambuf_char *val)
5499 {
5500     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
5501     IOSB_iostate state = IOSTATE_badbit;
5502     int c = '\n';
5503
5504     TRACE("(%p %p)\n", this, val);
5505
5506     if(basic_ostream_char_sentry_create(this)) {
5507         for(c = basic_streambuf_char_sgetc(val); c!=EOF;
5508                 c = basic_streambuf_char_snextc(val)) {
5509             state = IOSTATE_goodbit;
5510
5511             if(basic_streambuf_char_sputc(base->strbuf, c) == EOF) {
5512                 state = IOSTATE_badbit;
5513                 break;
5514             }
5515         }
5516     }else {
5517         state = IOSTATE_badbit;
5518     }
5519     basic_ostream_char_sentry_destroy(this);
5520
5521     ios_base_width_set(&base->base, 0);
5522     basic_ios_char_setstate(base, state);
5523     return this;
5524 }
5525
5526 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@PBX@Z */
5527 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEBX@Z */
5528 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_ptr, 8)
5529 basic_ostream_char* __thiscall basic_ostream_char_print_ptr(basic_ostream_char *this, const void *val)
5530 {
5531     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
5532     int state = IOSTATE_goodbit;
5533
5534     TRACE("(%p %p)\n", this, val);
5535
5536     if(basic_ostream_char_sentry_create(this)) {
5537         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5538         const num_put *numput = num_put_char_use_facet(&strbuf->loc);
5539         ostreambuf_iterator_char dest = {0, strbuf};
5540
5541         num_put_char_put_ptr(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
5542     }
5543     basic_ostream_char_sentry_destroy(this);
5544
5545     basic_ios_char_setstate(base, state);
5546     return this;
5547 }
5548
5549 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_J@Z */
5550 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_J@Z */
5551 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_int64, 12)
5552 basic_ostream_char* __thiscall basic_ostream_char_print_int64(basic_ostream_char *this, __int64 val)
5553 {
5554     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
5555     int state = IOSTATE_goodbit;
5556
5557     TRACE("(%p)\n", this);
5558
5559     if(basic_ostream_char_sentry_create(this)) {
5560         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5561         const num_put *numput = num_put_char_use_facet(&strbuf->loc);
5562         ostreambuf_iterator_char dest = {0, strbuf};
5563
5564         num_put_char_put_int64(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
5565     }
5566     basic_ostream_char_sentry_destroy(this);
5567
5568     basic_ios_char_setstate(base, state);
5569     return this;
5570 }
5571
5572 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_K@Z */
5573 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_K@Z */
5574 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_uint64, 12)
5575 basic_ostream_char* __thiscall basic_ostream_char_print_uint64(basic_ostream_char *this, unsigned __int64 val)
5576 {
5577     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
5578     int state = IOSTATE_goodbit;
5579
5580     TRACE("(%p)\n", this);
5581
5582     if(basic_ostream_char_sentry_create(this)) {
5583         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5584         const num_put *numput = num_put_char_use_facet(&strbuf->loc);
5585         ostreambuf_iterator_char dest = {0, strbuf};
5586
5587         num_put_char_put_uint64(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
5588     }
5589     basic_ostream_char_sentry_destroy(this);
5590
5591     basic_ios_char_setstate(base, state);
5592     return this;
5593 }
5594
5595 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@_N@Z */
5596 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@_N@Z */
5597 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_bool, 8)
5598 basic_ostream_char* __thiscall basic_ostream_char_print_bool(basic_ostream_char *this, MSVCP_bool val)
5599 {
5600     basic_ios_char *base = basic_ostream_char_get_basic_ios(this);
5601     int state = IOSTATE_goodbit;
5602
5603     TRACE("(%p %x)\n", this, val);
5604
5605     if(basic_ostream_char_sentry_create(this)) {
5606         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
5607         const num_put *numput = num_put_char_use_facet(&strbuf->loc);
5608         ostreambuf_iterator_char dest = {0, strbuf};
5609
5610         num_put_char_put_bool(numput, &dest, dest, &base->base, basic_ios_char_fill_get(base), val);
5611     }
5612     basic_ostream_char_sentry_destroy(this);
5613
5614     basic_ios_char_setstate(base, state);
5615     return this;
5616 }
5617
5618 /* ?ends@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z */
5619 /* ?ends@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@1@AEAV21@@Z */
5620 basic_ostream_char* __cdecl basic_ostream_char_ends(basic_ostream_char *ostr)
5621 {
5622     TRACE("(%p)\n", ostr);
5623
5624     basic_ostream_char_put(ostr, 0);
5625     return ostr;
5626 }
5627
5628 /* ?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z */
5629 /* ?endl@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@1@AEAV21@@Z */
5630 basic_ostream_char* __cdecl basic_ostream_char_endl(basic_ostream_char *ostr)
5631 {
5632     TRACE("(%p)\n", ostr);
5633
5634     basic_ostream_char_put(ostr, '\n');
5635     basic_ostream_char_flush(ostr);
5636     return ostr;
5637 }
5638
5639 /* $?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 */
5640 /* ??$?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 */
5641 basic_ostream_char* __cdecl basic_ostream_char_print_bstr(basic_ostream_char *ostr, const basic_string_char *str)
5642 {
5643     basic_ios_char *base = basic_ostream_char_get_basic_ios(ostr);
5644     IOSB_iostate state = IOSTATE_goodbit;
5645
5646     TRACE("(%p %p)\n", ostr, str);
5647
5648     if(basic_ostream_char_sentry_create(ostr)) {
5649         MSVCP_size_t len = basic_string_char_length(str);
5650         streamsize pad = (base->base.wide>len ? base->base.wide-len : 0);
5651
5652         if((base->base.fmtfl & FMTFLAG_adjustfield) != FMTFLAG_left) {
5653             for(; pad!=0; pad--) {
5654                 if(basic_streambuf_char_sputc(base->strbuf, base->fillch) == EOF) {
5655                     state = IOSTATE_badbit;
5656                     break;
5657                 }
5658             }
5659         }
5660
5661         if(state == IOSTATE_goodbit) {
5662             if(basic_streambuf_char_sputn(base->strbuf, basic_string_char_c_str(str), len) != len)
5663                     state = IOSTATE_badbit;
5664         }
5665
5666         if(state == IOSTATE_goodbit) {
5667             for(; pad!=0; pad--) {
5668                 if(basic_streambuf_char_sputc(base->strbuf, base->fillch) == EOF) {
5669                     state = IOSTATE_badbit;
5670                     break;
5671                 }
5672             }
5673         }
5674
5675         base->base.wide = 0;
5676     }else {
5677         state = IOSTATE_badbit;
5678     }
5679     basic_ostream_char_sentry_destroy(ostr);
5680
5681     basic_ios_char_setstate(base, state);
5682     return ostr;
5683 }
5684
5685 /* ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@C@Z */
5686 /* ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@C@Z */
5687 /* ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@D@Z */
5688 /* ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z */
5689 /* ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@E@Z */
5690 /* ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@E@Z */
5691 basic_ostream_char* __cdecl basic_ostream_char_print_ch(basic_ostream_char *ostr, char ch)
5692 {
5693     basic_ios_char *base = basic_ostream_char_get_basic_ios(ostr);
5694     IOSB_iostate state = IOSTATE_goodbit;
5695
5696     TRACE("(%p %d)\n", ostr, ch);
5697
5698     if(basic_ostream_char_sentry_create(ostr)) {
5699         streamsize pad = (base->base.wide>1 ? base->base.wide-1 : 0);
5700
5701         if((base->base.fmtfl & FMTFLAG_adjustfield) != FMTFLAG_left) {
5702             for(; pad!=0; pad--) {
5703                 if(basic_streambuf_char_sputc(base->strbuf, base->fillch) == EOF) {
5704                     state = IOSTATE_badbit;
5705                     break;
5706                 }
5707             }
5708         }
5709
5710         if(state == IOSTATE_goodbit) {
5711             if(basic_streambuf_char_sputc(base->strbuf, ch) == EOF)
5712                 state = IOSTATE_badbit;
5713         }
5714
5715         if(state == IOSTATE_goodbit) {
5716             for(; pad!=0; pad--) {
5717                 if(basic_streambuf_char_sputc(base->strbuf, base->fillch) == EOF) {
5718                     state = IOSTATE_badbit;
5719                     break;
5720                 }
5721             }
5722         }
5723
5724         base->base.wide = 0;
5725     }else {
5726         state = IOSTATE_badbit;
5727     }
5728     basic_ostream_char_sentry_destroy(ostr);
5729
5730     basic_ios_char_setstate(base, state);
5731     return ostr;
5732 }
5733
5734 /* ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBC@Z */
5735 /* ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBC@Z */
5736 /* ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z */
5737 /* ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z */
5738 /* ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBE@Z */
5739 /* ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBE@Z */
5740 basic_ostream_char* __cdecl basic_ostream_char_print_str(basic_ostream_char *ostr, const char *str)
5741 {
5742     basic_ios_char *base = basic_ostream_char_get_basic_ios(ostr);
5743     IOSB_iostate state = IOSTATE_goodbit;
5744
5745     TRACE("(%p %s)\n", ostr, str);
5746
5747     if(basic_ostream_char_sentry_create(ostr)) {
5748         MSVCP_size_t len = strlen(str);
5749         streamsize pad = (base->base.wide>len ? base->base.wide-len : 0);
5750
5751         if((base->base.fmtfl & FMTFLAG_adjustfield) != FMTFLAG_left) {
5752             for(; pad!=0; pad--) {
5753                 if(basic_streambuf_char_sputc(base->strbuf, base->fillch) == EOF) {
5754                     state = IOSTATE_badbit;
5755                     break;
5756                 }
5757             }
5758         }
5759
5760         if(state == IOSTATE_goodbit) {
5761             if(basic_streambuf_char_sputn(base->strbuf, str, len) != len)
5762                 state = IOSTATE_badbit;
5763         }
5764
5765         if(state == IOSTATE_goodbit) {
5766             for(; pad!=0; pad--) {
5767                 if(basic_streambuf_char_sputc(base->strbuf, base->fillch) == EOF) {
5768                     state = IOSTATE_badbit;
5769                     break;
5770                 }
5771             }
5772         }
5773
5774         base->base.wide = 0;
5775     }else {
5776         state = IOSTATE_badbit;
5777     }
5778     basic_ostream_char_sentry_destroy(ostr);
5779
5780     basic_ios_char_setstate(base, state);
5781     return ostr;
5782 }
5783
5784 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */
5785 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */
5786 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_func, 8)
5787 basic_ostream_char* __thiscall basic_ostream_char_print_func(basic_ostream_char *this,
5788         basic_ostream_char* (__cdecl *pfunc)(basic_ostream_char*))
5789 {
5790     TRACE("(%p %p)\n", this, pfunc);
5791     pfunc(this);
5792     return this;
5793 }
5794
5795 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@DU?$char_traits@D@std@@@1@AAV21@@Z@Z */
5796 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@DU?$char_traits@D@std@@@1@AEAV21@@Z@Z */
5797 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_func_basic_ios, 8)
5798 basic_ostream_char* __thiscall basic_ostream_char_print_func_basic_ios(basic_ostream_char *this,
5799         basic_ios_char* (__cdecl *pfunc)(basic_ios_char*))
5800 {
5801     TRACE("(%p %p)\n", this, pfunc);
5802     pfunc(basic_ostream_char_get_basic_ios(this));
5803     return this;
5804 }
5805
5806 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */
5807 /* ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */
5808 DEFINE_THISCALL_WRAPPER(basic_ostream_char_print_func_ios_base, 8)
5809 basic_ostream_char* __thiscall basic_ostream_char_print_func_ios_base(
5810         basic_ostream_char *this, ios_base* (__cdecl *pfunc)(ios_base*))
5811 {
5812     TRACE("(%p %p)\n", this, pfunc);
5813     pfunc(&basic_ostream_char_get_basic_ios(this)->base);
5814     return this;
5815 }
5816
5817 /* Caution: basic_ostream uses virtual inheritance. */
5818 static inline basic_ios_wchar* basic_ostream_wchar_get_basic_ios(basic_ostream_wchar *this)
5819 {
5820     return (basic_ios_wchar*)((char*)this+this->vbtable[1]);
5821 }
5822
5823 static inline basic_ios_wchar* basic_ostream_wchar_to_basic_ios(basic_ostream_wchar *ptr)
5824 {
5825     return (basic_ios_wchar*)((char*)ptr+basic_ostream_wchar_vbtable[1]);
5826 }
5827
5828 static inline basic_ostream_wchar* basic_ostream_wchar_from_basic_ios(basic_ios_wchar *ptr)
5829 {
5830     return (basic_ostream_wchar*)((char*)ptr-basic_ostream_wchar_vbtable[1]);
5831 }
5832
5833 /* ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N1@Z */
5834 /* ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N1@Z */
5835 DEFINE_THISCALL_WRAPPER(basic_ostream_short_ctor, 20)
5836 basic_ostream_wchar* __thiscall basic_ostream_short_ctor(basic_ostream_wchar *this,
5837         basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool init, MSVCP_bool virt_init)
5838 {
5839     basic_ios_wchar *base;
5840
5841     TRACE("(%p %p %d %d %d)\n", this, strbuf, isstd, init, virt_init);
5842
5843     if(virt_init) {
5844         this->vbtable = basic_ostream_wchar_vbtable;
5845         base = basic_ostream_wchar_get_basic_ios(this);
5846         basic_ios_wchar_ctor(base);
5847     }else {
5848         base = basic_ostream_wchar_get_basic_ios(this);
5849     }
5850
5851     base->base.vtable = &MSVCP_basic_ostream_short_vtable;
5852     if(init)
5853         basic_ios_wchar_init(base, strbuf, isstd);
5854     return this;
5855 }
5856
5857 /* ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@@Z */
5858 /* ??0?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA@W4_Uninitialized@1@@Z */
5859 DEFINE_THISCALL_WRAPPER(basic_ostream_short_ctor_uninitialized, 12)
5860 basic_ostream_wchar* __thiscall basic_ostream_short_ctor_uninitialized(basic_ostream_wchar *this,
5861         int uninitialized, MSVCP_bool virt_init)
5862 {
5863     basic_ios_wchar *base;
5864
5865     TRACE("(%p %d)\n", this, uninitialized);
5866
5867     if(virt_init) {
5868         this->vbtable = basic_ostream_wchar_vbtable;
5869         base = basic_ostream_wchar_get_basic_ios(this);
5870         basic_ios_wchar_ctor(base);
5871     }else {
5872         base = basic_ostream_wchar_get_basic_ios(this);
5873     }
5874
5875     base->base.vtable = &MSVCP_basic_ostream_short_vtable;
5876     ios_base_Addstd(&base->base);
5877     return this;
5878 }
5879
5880 /* ??1?$basic_ostream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
5881 /* ??1?$basic_ostream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
5882 /* ??1?$basic_ostream@GU?$char_traits@G@std@@@std@@UAE@XZ */
5883 /* ??1?$basic_ostream@GU?$char_traits@G@std@@@std@@UEAA@XZ */
5884 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_dtor, 4)
5885 void __thiscall basic_ostream_wchar_dtor(basic_ios_wchar *base)
5886 {
5887     basic_ostream_wchar *this = basic_ostream_wchar_from_basic_ios(base);
5888
5889     /* don't destroy virtual base here */
5890     TRACE("(%p)\n", this);
5891 }
5892
5893 /* ??_D?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
5894 /* ??_D?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
5895 /* ??_D?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ */
5896 /* ??_D?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
5897 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_vbase_dtor, 4)
5898 void __thiscall basic_ostream_wchar_vbase_dtor(basic_ostream_wchar *this)
5899 {
5900     TRACE("(%p)\n", this);
5901     basic_ostream_wchar_dtor(basic_ostream_wchar_to_basic_ios(this));
5902     basic_ios_wchar_dtor(basic_ostream_wchar_get_basic_ios(this));
5903 }
5904
5905 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_vector_dtor, 8)
5906 basic_ostream_wchar* __thiscall basic_ostream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags)
5907 {
5908     basic_ostream_wchar *this = basic_ostream_wchar_from_basic_ios(base);
5909
5910     TRACE("(%p %x)\n", this, flags);
5911
5912     if(flags & 2) {
5913         /* we have an array, with the number of elements stored before the first object */
5914         INT_PTR i, *ptr = (INT_PTR *)this-1;
5915
5916         for(i=*ptr-1; i>=0; i--)
5917             basic_ostream_wchar_vbase_dtor(this+i);
5918         MSVCRT_operator_delete(ptr);
5919     } else {
5920         basic_ostream_wchar_vbase_dtor(this);
5921         if(flags & 1)
5922             MSVCRT_operator_delete(this);
5923     }
5924
5925     return this;
5926 }
5927
5928 /* ?flush@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@XZ */
5929 /* ?flush@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@XZ */
5930 /* ?flush@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@XZ */
5931 /* ?flush@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@XZ */
5932 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_flush, 4)
5933 basic_ostream_wchar* __thiscall basic_ostream_wchar_flush(basic_ostream_wchar *this)
5934 {
5935     /* this function is not matching C++ specification */
5936     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5937
5938     TRACE("(%p)\n", this);
5939
5940     if(basic_ios_wchar_rdbuf_get(base) && ios_base_good(&base->base)
5941             && basic_streambuf_wchar_pubsync(basic_ios_wchar_rdbuf_get(base))==-1)
5942         basic_ios_wchar_setstate(base, IOSTATE_badbit);
5943     return this;
5944 }
5945
5946 /* ?flush@std@@YAAAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AAV21@@Z */
5947 /* ?flush@std@@YAAEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AEAV21@@Z */
5948 /* ?flush@std@@YAAAV?$basic_ostream@GU?$char_traits@G@std@@@1@AAV21@@Z */
5949 /* ?flush@std@@YAAEAV?$basic_ostream@GU?$char_traits@G@std@@@1@AEAV21@@Z */
5950 basic_ostream_wchar* __cdecl flush_ostream_wchar(basic_ostream_wchar *ostream)
5951 {
5952     return basic_ostream_wchar_flush(ostream);
5953 }
5954
5955 /* ?_Osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
5956 /* ?_Osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
5957 /* ?_Osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ */
5958 /* ?_Osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
5959 static void basic_ostream_wchar__Osfx(basic_ostream_wchar *this)
5960 {
5961     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
5962
5963     TRACE("(%p)\n", this);
5964
5965     if(base->base.fmtfl & FMTFLAG_unitbuf)
5966         basic_ostream_wchar_flush(this);
5967 }
5968
5969 /* ?osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
5970 /* ?osfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
5971 /* ?osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEXXZ */
5972 /* ?osfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
5973 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_osfx, 4)
5974 void __thiscall basic_ostream_wchar_osfx(basic_ostream_wchar *this)
5975 {
5976     TRACE("(%p)\n", this);
5977     basic_ostream_wchar__Osfx(this);
5978 }
5979
5980 static BOOL basic_ostream_wchar_sentry_create(basic_ostream_wchar *ostr)
5981 {
5982     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(ostr);
5983
5984     if(basic_ios_wchar_rdbuf_get(base))
5985         basic_streambuf_wchar__Lock(base->strbuf);
5986
5987     if(ios_base_good(&base->base) && base->stream)
5988         basic_ostream_wchar_flush(base->stream);
5989
5990     return ios_base_good(&base->base);
5991 }
5992
5993 static void basic_ostream_wchar_sentry_destroy(basic_ostream_wchar *ostr)
5994 {
5995     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(ostr);
5996
5997     if(ios_base_good(&base->base) && !__uncaught_exception())
5998         basic_ostream_wchar_osfx(ostr);
5999
6000     if(basic_ios_wchar_rdbuf_get(base))
6001         basic_streambuf_wchar__Unlock(base->strbuf);
6002 }
6003
6004 /* ?opfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE_NXZ */
6005 /* ?opfx@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA_NXZ */
6006 /* ?opfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE_NXZ */
6007 /* ?opfx@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA_NXZ */
6008 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_opfx, 4)
6009 MSVCP_bool __thiscall basic_ostream_wchar_opfx(basic_ostream_wchar *this)
6010 {
6011     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
6012
6013     TRACE("(%p)\n", this);
6014
6015     if(ios_base_good(&base->base) && base->stream)
6016         basic_ostream_wchar_flush(base->stream);
6017     return ios_base_good(&base->base);
6018 }
6019
6020 /* ?put@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_W@Z */
6021 /* ?put@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_W@Z */
6022 /* ?put@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@G@Z */
6023 /* ?put@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@G@Z */
6024 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_put, 8)
6025 basic_ostream_wchar* __thiscall basic_ostream_wchar_put(basic_ostream_wchar *this, wchar_t ch)
6026 {
6027     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
6028
6029     TRACE("(%p %c)\n", this, ch);
6030
6031     if(!basic_ostream_wchar_sentry_create(this)
6032             || basic_streambuf_wchar_sputc(base->strbuf, ch)==WEOF) {
6033         basic_ostream_wchar_sentry_destroy(this);
6034         basic_ios_wchar_setstate(base, IOSTATE_badbit);
6035         return this;
6036     }
6037
6038     basic_ostream_wchar_sentry_destroy(this);
6039     return this;
6040 }
6041
6042 /* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
6043 /* ?seekp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
6044 /* ?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
6045 /* ?seekp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
6046 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_seekp_fpos, 28)
6047 basic_ostream_wchar* __thiscall basic_ostream_wchar_seekp_fpos(basic_ostream_wchar *this, fpos_int pos)
6048 {
6049     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
6050
6051     TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos));
6052
6053     if(!ios_base_fail(&base->base)) {
6054         fpos_int seek;
6055
6056         basic_streambuf_wchar_pubseekpos(basic_ios_wchar_rdbuf_get(base),
6057                 &seek, pos, OPENMODE_out);
6058         if(seek.off==-1 && seek.pos==0 && seek.state==0)
6059             basic_ios_wchar_setstate(base, IOSTATE_failbit);
6060     }
6061     return this;
6062 }
6063
6064 /* ?tellp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@XZ */
6065 /* ?tellp@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
6066 /* ?tellp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@XZ */
6067 /* ?tellp@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
6068 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_tellp, 8)
6069 fpos_int* __thiscall basic_ostream_wchar_tellp(basic_ostream_wchar *this, fpos_int *ret)
6070 {
6071     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
6072
6073     TRACE("(%p)\n", this);
6074
6075     if(!ios_base_fail(&base->base)) {
6076         basic_streambuf_wchar_pubseekoff(basic_ios_wchar_rdbuf_get(base),
6077                 ret, 0, SEEKDIR_cur, OPENMODE_out);
6078     }else {
6079         ret->off = -1;
6080         ret->pos = 0;
6081         ret->state = 0;
6082     }
6083     return ret;
6084 }
6085
6086 /* ?write@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PB_WH@Z */
6087 /* ?write@?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEB_W_J@Z */
6088 /* ?write@?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV12@PBGH@Z */
6089 /* ?write@?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEBG_J@Z */
6090 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_write, 12)
6091 basic_ostream_wchar* __thiscall basic_ostream_wchar_write(basic_ostream_wchar *this, const wchar_t *str, streamsize count)
6092 {
6093     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
6094
6095     TRACE("(%p %s %ld)\n", this, debugstr_w(str), count);
6096
6097     if(!basic_ostream_wchar_sentry_create(this)
6098             || basic_streambuf_wchar_sputn(base->strbuf, str, count)!=count) {
6099         basic_ostream_wchar_sentry_destroy(this);
6100         basic_ios_wchar_setstate(base, IOSTATE_badbit);
6101         return this;
6102     }
6103
6104     basic_ostream_wchar_sentry_destroy(this);
6105     return this;
6106 }
6107
6108 static basic_ostream_wchar* basic_ostream_print_short(basic_ostream_wchar *this, short val, const num_put *numput)
6109 {
6110     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
6111     int state = IOSTATE_goodbit;
6112
6113     TRACE("(%p %d)\n", this, val);
6114
6115     if(basic_ostream_wchar_sentry_create(this)) {
6116         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6117         ostreambuf_iterator_wchar dest = {0, strbuf};
6118
6119         num_put_wchar_put_long(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base),
6120                 (ios_base_flags_get(&base->base) & FMTFLAG_basefield & (FMTFLAG_oct | FMTFLAG_hex))
6121                 ? (LONG)((unsigned short)val) : (LONG)val);
6122     }
6123     basic_ostream_wchar_sentry_destroy(this);
6124
6125     basic_ios_wchar_setstate(base, state);
6126     return this;
6127 }
6128
6129 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@F@Z */
6130 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@F@Z */
6131 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_short, 8)
6132 basic_ostream_wchar* __thiscall basic_ostream_short_print_short(basic_ostream_wchar *this, short val)
6133 {
6134     return basic_ostream_print_short(this, val, num_put_short_use_facet(
6135                 &basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
6136 }
6137
6138 static basic_ostream_wchar* basic_ostream_print_int(basic_ostream_wchar *this, int val, const num_put *numput)
6139 {
6140     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
6141     int state = IOSTATE_goodbit;
6142
6143     TRACE("(%p %d)\n", this, val);
6144
6145     if(basic_ostream_wchar_sentry_create(this)) {
6146         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6147         ostreambuf_iterator_wchar dest = {0, strbuf};
6148
6149         num_put_wchar_put_long(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
6150     }
6151     basic_ostream_wchar_sentry_destroy(this);
6152
6153     basic_ios_wchar_setstate(base, state);
6154     return this;
6155 }
6156
6157 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@H@Z */
6158 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@H@Z */
6159 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@J@Z */
6160 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@J@Z */
6161 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_int, 8)
6162 basic_ostream_wchar* __thiscall basic_ostream_short_print_int(basic_ostream_wchar *this, int val)
6163 {
6164     return basic_ostream_print_int(this, val, num_put_short_use_facet(
6165                 &basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
6166 }
6167
6168 static basic_ostream_wchar* basic_ostream_print_uint(basic_ostream_wchar *this, unsigned int val, const num_put *numput)
6169 {
6170     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
6171     int state = IOSTATE_goodbit;
6172
6173     TRACE("(%p %u)\n", this, val);
6174
6175     if(basic_ostream_wchar_sentry_create(this)) {
6176         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6177         ostreambuf_iterator_wchar dest = {0, strbuf};
6178
6179         num_put_wchar_put_ulong(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
6180     }
6181     basic_ostream_wchar_sentry_destroy(this);
6182
6183     basic_ios_wchar_setstate(base, state);
6184     return this;
6185 }
6186
6187 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@I@Z */
6188 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@I@Z */
6189 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@K@Z */
6190 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@K@Z */
6191 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_uint, 8)
6192 basic_ostream_wchar* __thiscall basic_ostream_short_print_uint(basic_ostream_wchar *this, unsigned int val)
6193 {
6194     return basic_ostream_print_uint(this, val, num_put_short_use_facet(
6195                 &basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
6196 }
6197
6198 static basic_ostream_wchar* basic_ostream_print_float(basic_ostream_wchar *this, float val, const num_put *numput)
6199 {
6200     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
6201     int state = IOSTATE_goodbit;
6202
6203     TRACE("(%p %f)\n", this, val);
6204
6205     if(basic_ostream_wchar_sentry_create(this)) {
6206         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6207         ostreambuf_iterator_wchar dest = {0, strbuf};
6208
6209         num_put_wchar_put_double(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
6210     }
6211     basic_ostream_wchar_sentry_destroy(this);
6212
6213     basic_ios_wchar_setstate(base, state);
6214     return this;
6215 }
6216
6217 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@M@Z */
6218 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@M@Z */
6219 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_float, 8)
6220 basic_ostream_wchar* __thiscall basic_ostream_short_print_float(basic_ostream_wchar *this, float val)
6221 {
6222     return basic_ostream_print_float(this, val, num_put_short_use_facet(
6223                 &basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
6224 }
6225
6226 static basic_ostream_wchar* basic_ostream_print_double(basic_ostream_wchar *this, double val, const num_put *numput)
6227 {
6228     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
6229     int state = IOSTATE_goodbit;
6230
6231     TRACE("(%p %lf)\n", this, val);
6232
6233     if(basic_ostream_wchar_sentry_create(this)) {
6234         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6235         ostreambuf_iterator_wchar dest = {0, strbuf};
6236
6237         num_put_wchar_put_double(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
6238     }
6239     basic_ostream_wchar_sentry_destroy(this);
6240
6241     basic_ios_wchar_setstate(base, state);
6242     return this;
6243 }
6244
6245 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@N@Z */
6246 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@N@Z */
6247 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_double, 12)
6248 basic_ostream_wchar* __thiscall basic_ostream_short_print_double(basic_ostream_wchar *this, double val)
6249 {
6250     return basic_ostream_print_double(this, val, num_put_short_use_facet(
6251                 &basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
6252 }
6253
6254 static basic_ostream_wchar* basic_ostream_print_ldouble(basic_ostream_wchar *this, double val, const num_put *numput)
6255 {
6256     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
6257     int state = IOSTATE_goodbit;
6258
6259     TRACE("(%p %lf)\n", this, val);
6260
6261     if(basic_ostream_wchar_sentry_create(this)) {
6262         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6263         ostreambuf_iterator_wchar dest = {0, strbuf};
6264
6265         num_put_wchar_put_ldouble(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
6266     }
6267     basic_ostream_wchar_sentry_destroy(this);
6268
6269     basic_ios_wchar_setstate(base, state);
6270     return this;
6271 }
6272
6273 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@O@Z */
6274 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@O@Z */
6275 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_ldouble, 12)
6276 basic_ostream_wchar* __thiscall basic_ostream_short_print_ldouble(basic_ostream_wchar *this, double val)
6277 {
6278     return basic_ostream_print_ldouble(this, val, num_put_short_use_facet(
6279                 &basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
6280 }
6281
6282 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
6283 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
6284 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
6285 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
6286 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_streambuf, 8)
6287 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_streambuf(basic_ostream_wchar *this, basic_streambuf_wchar *val)
6288 {
6289     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
6290     IOSB_iostate state = IOSTATE_badbit;
6291     unsigned short c = '\n';
6292
6293     TRACE("(%p %p)\n", this, val);
6294
6295     if(basic_ostream_wchar_sentry_create(this)) {
6296         for(c = basic_streambuf_wchar_sgetc(val); c!=WEOF;
6297                 c = basic_streambuf_wchar_snextc(val)) {
6298             state = IOSTATE_goodbit;
6299
6300             if(basic_streambuf_wchar_sputc(base->strbuf, c) == WEOF) {
6301                 state = IOSTATE_badbit;
6302                 break;
6303             }
6304         }
6305     }else {
6306         state = IOSTATE_badbit;
6307     }
6308     basic_ostream_wchar_sentry_destroy(this);
6309
6310     ios_base_width_set(&base->base, 0);
6311     basic_ios_wchar_setstate(base, state);
6312     return this;
6313 }
6314
6315 static basic_ostream_wchar* basic_ostream_print_ptr(basic_ostream_wchar *this, const void *val, const num_put *numput)
6316 {
6317     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
6318     int state = IOSTATE_goodbit;
6319
6320     TRACE("(%p %p)\n", this, val);
6321
6322     if(basic_ostream_wchar_sentry_create(this)) {
6323         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6324         ostreambuf_iterator_wchar dest = {0, strbuf};
6325
6326         num_put_wchar_put_ptr(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
6327     }
6328     basic_ostream_wchar_sentry_destroy(this);
6329
6330     basic_ios_wchar_setstate(base, state);
6331     return this;
6332 }
6333
6334 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@PBX@Z */
6335 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEBX@Z */
6336 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_ptr, 8)
6337 basic_ostream_wchar* __thiscall basic_ostream_short_print_ptr(basic_ostream_wchar *this, const void *val)
6338 {
6339     return basic_ostream_print_ptr(this, val, num_put_short_use_facet(
6340                 &basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
6341 }
6342
6343 static basic_ostream_wchar* basic_ostream_print_int64(basic_ostream_wchar *this, __int64 val, const num_put *numput)
6344 {
6345     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
6346     int state = IOSTATE_goodbit;
6347
6348     TRACE("(%p)\n", this);
6349
6350     if(basic_ostream_wchar_sentry_create(this)) {
6351         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6352         ostreambuf_iterator_wchar dest = {0, strbuf};
6353
6354         num_put_wchar_put_int64(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
6355     }
6356     basic_ostream_wchar_sentry_destroy(this);
6357
6358     basic_ios_wchar_setstate(base, state);
6359     return this;
6360 }
6361
6362 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_J@Z */
6363 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_J@Z */
6364 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_int64, 12)
6365 basic_ostream_wchar* __thiscall basic_ostream_short_print_int64(basic_ostream_wchar *this, __int64 val)
6366 {
6367     return basic_ostream_print_int64(this, val, num_put_short_use_facet(
6368                 &basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
6369 }
6370
6371 static basic_ostream_wchar* basic_ostream_print_uint64(basic_ostream_wchar *this, unsigned __int64 val, const num_put *numput)
6372 {
6373     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
6374     int state = IOSTATE_goodbit;
6375
6376     TRACE("(%p)\n", this);
6377
6378     if(basic_ostream_wchar_sentry_create(this)) {
6379         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6380         ostreambuf_iterator_wchar dest = {0, strbuf};
6381
6382         num_put_wchar_put_uint64(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
6383     }
6384     basic_ostream_wchar_sentry_destroy(this);
6385
6386     basic_ios_wchar_setstate(base, state);
6387     return this;
6388 }
6389
6390 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_K@Z */
6391 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_K@Z */
6392 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_uint64, 12)
6393 basic_ostream_wchar* __thiscall basic_ostream_short_print_uint64(basic_ostream_wchar *this, unsigned __int64 val)
6394 {
6395     return basic_ostream_print_uint64(this, val, num_put_short_use_facet(
6396                 &basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
6397 }
6398
6399 static basic_ostream_wchar* basic_ostream_print_bool(basic_ostream_wchar *this, MSVCP_bool val, const num_put *numput)
6400 {
6401     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(this);
6402     int state = IOSTATE_goodbit;
6403
6404     TRACE("(%p %x)\n", this, val);
6405
6406     if(basic_ostream_wchar_sentry_create(this)) {
6407         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
6408         ostreambuf_iterator_wchar dest = {0, strbuf};
6409
6410         num_put_wchar_put_bool(numput, &dest, dest, &base->base, basic_ios_wchar_fill_get(base), val);
6411     }
6412     basic_ostream_wchar_sentry_destroy(this);
6413
6414     basic_ios_wchar_setstate(base, state);
6415     return this;
6416 }
6417
6418 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@_N@Z */
6419 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@_N@Z */
6420 DEFINE_THISCALL_WRAPPER(basic_ostream_short_print_bool, 8)
6421 basic_ostream_wchar* __thiscall basic_ostream_short_print_bool(basic_ostream_wchar *this, MSVCP_bool val)
6422 {
6423     return basic_ostream_print_bool(this, val, num_put_short_use_facet(
6424                 &basic_ios_wchar_rdbuf_get(basic_ostream_wchar_get_basic_ios(this))->loc));
6425 }
6426
6427 /* ?ends@std@@YAAAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AAV21@@Z */
6428 /* ?ends@std@@YAAEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AEAV21@@Z */
6429 /* ?ends@std@@YAAAV?$basic_ostream@GU?$char_traits@G@std@@@1@AAV21@@Z */
6430 /* ?ends@std@@YAAEAV?$basic_ostream@GU?$char_traits@G@std@@@1@AEAV21@@Z */
6431 basic_ostream_wchar* __cdecl basic_ostream_wchar_ends(basic_ostream_wchar *ostr)
6432 {
6433     TRACE("(%p)\n", ostr);
6434
6435     basic_ostream_wchar_put(ostr, 0);
6436     return ostr;
6437 }
6438
6439 /* ?endl@std@@YAAAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AAV21@@Z */
6440 /* ?endl@std@@YAAEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@AEAV21@@Z */
6441 /* ?endl@std@@YAAAV?$basic_ostream@GU?$char_traits@G@std@@@1@AAV21@@Z */
6442 /* ?endl@std@@YAAEAV?$basic_ostream@GU?$char_traits@G@std@@@1@AEAV21@@Z */
6443 basic_ostream_wchar* __cdecl basic_ostream_wchar_endl(basic_ostream_wchar *ostr)
6444 {
6445     TRACE("(%p)\n", ostr);
6446
6447     basic_ostream_wchar_put(ostr, '\n');
6448     basic_ostream_wchar_flush(ostr);
6449     return ostr;
6450 }
6451
6452 /* ??$?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 */
6453 /* ??$?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 */
6454 /* ??$?6GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YAAAV?$basic_ostream@GU?$char_traits@G@std@@@0@AAV10@ABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
6455 /* ??$?6GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YAAEAV?$basic_ostream@GU?$char_traits@G@std@@@0@AEAV10@AEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
6456 basic_ostream_wchar* __cdecl basic_ostream_wchar_print_bstr(basic_ostream_wchar *ostr, const basic_string_wchar *str)
6457 {
6458     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(ostr);
6459     IOSB_iostate state = IOSTATE_goodbit;
6460
6461     TRACE("(%p %p)\n", ostr, str);
6462
6463     if(basic_ostream_wchar_sentry_create(ostr)) {
6464         MSVCP_size_t len = basic_string_wchar_length(str);
6465         streamsize pad = (base->base.wide>len ? base->base.wide-len : 0);
6466
6467         if((base->base.fmtfl & FMTFLAG_adjustfield) != FMTFLAG_left) {
6468             for(; pad!=0; pad--) {
6469                 if(basic_streambuf_wchar_sputc(base->strbuf, base->fillch) == WEOF) {
6470                     state = IOSTATE_badbit;
6471                     break;
6472                 }
6473             }
6474         }
6475
6476         if(state == IOSTATE_goodbit) {
6477             if(basic_streambuf_wchar_sputn(base->strbuf, basic_string_wchar_c_str(str), len) != len)
6478                 state = IOSTATE_badbit;
6479         }
6480
6481         if(state == IOSTATE_goodbit) {
6482             for(; pad!=0; pad--) {
6483                 if(basic_streambuf_wchar_sputc(base->strbuf, base->fillch) == WEOF) {
6484                     state = IOSTATE_badbit;
6485                     break;
6486                 }
6487             }
6488         }
6489
6490         base->base.wide = 0;
6491     }else {
6492         state = IOSTATE_badbit;
6493     }
6494     basic_ostream_wchar_sentry_destroy(ostr);
6495
6496     basic_ios_wchar_setstate(base, state);
6497     return ostr;
6498 }
6499
6500 /* ??$?6_WU?$char_traits@_W@std@@@std@@YAAAV?$basic_ostream@_WU?$char_traits@_W@std@@@0@AAV10@_W@Z */
6501 /* ??$?6_WU?$char_traits@_W@std@@@std@@YAAEAV?$basic_ostream@_WU?$char_traits@_W@std@@@0@AEAV10@_W@Z */
6502 /* ??$?6GU?$char_traits@G@std@@@std@@YAAAV?$basic_ostream@GU?$char_traits@G@std@@@0@AAV10@G@Z */
6503 /* ??$?6GU?$char_traits@G@std@@@std@@YAAEAV?$basic_ostream@GU?$char_traits@G@std@@@0@AEAV10@G@Z */
6504 basic_ostream_wchar* __cdecl basic_ostream_wchar_print_ch(basic_ostream_wchar *ostr, wchar_t ch)
6505 {
6506     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(ostr);
6507     IOSB_iostate state = IOSTATE_goodbit;
6508
6509     TRACE("(%p %d)\n", ostr, ch);
6510
6511     if(basic_ostream_wchar_sentry_create(ostr)) {
6512         streamsize pad = (base->base.wide>1 ? base->base.wide-1 : 0);
6513
6514         if((base->base.fmtfl & FMTFLAG_adjustfield) != FMTFLAG_left) {
6515             for(; pad!=0; pad--) {
6516                 if(basic_streambuf_wchar_sputc(base->strbuf, base->fillch) == WEOF) {
6517                     state = IOSTATE_badbit;
6518                     break;
6519                 }
6520             }
6521         }
6522
6523         if(state == IOSTATE_goodbit) {
6524             if(basic_streambuf_wchar_sputc(base->strbuf, ch) == WEOF)
6525                 state = IOSTATE_badbit;
6526         }
6527
6528         if(state == IOSTATE_goodbit) {
6529             for(; pad!=0; pad--) {
6530                 if(basic_streambuf_wchar_sputc(base->strbuf, base->fillch) == WEOF) {
6531                     state = IOSTATE_badbit;
6532                     break;
6533                 }
6534             }
6535         }
6536
6537         base->base.wide = 0;
6538     }else {
6539         state = IOSTATE_badbit;
6540     }
6541     basic_ostream_wchar_sentry_destroy(ostr);
6542
6543     basic_ios_wchar_setstate(base, state);
6544     return ostr;
6545 }
6546
6547 /* ??$?6_WU?$char_traits@_W@std@@@std@@YAAAV?$basic_ostream@_WU?$char_traits@_W@std@@@0@AAV10@PB_W@Z */
6548 /* ??$?6_WU?$char_traits@_W@std@@@std@@YAAEAV?$basic_ostream@_WU?$char_traits@_W@std@@@0@AEAV10@PEB_W@Z */
6549 /* ??$?6GU?$char_traits@G@std@@@std@@YAAAV?$basic_ostream@GU?$char_traits@G@std@@@0@AAV10@PBG@Z */
6550 /* ??$?6GU?$char_traits@G@std@@@std@@YAAEAV?$basic_ostream@GU?$char_traits@G@std@@@0@AEAV10@PEBG@Z */
6551 basic_ostream_wchar* __cdecl basic_ostream_wchar_print_str(basic_ostream_wchar *ostr, const wchar_t *str)
6552 {
6553     basic_ios_wchar *base = basic_ostream_wchar_get_basic_ios(ostr);
6554     IOSB_iostate state = IOSTATE_goodbit;
6555
6556     TRACE("(%p %s)\n", ostr, debugstr_w(str));
6557
6558     if(basic_ostream_wchar_sentry_create(ostr)) {
6559         MSVCP_size_t len = wcslen(str);
6560         streamsize pad = (base->base.wide>len ? base->base.wide-len : 0);
6561
6562         if((base->base.fmtfl & FMTFLAG_adjustfield) != FMTFLAG_left) {
6563             for(; pad!=0; pad--) {
6564                 if(basic_streambuf_wchar_sputc(base->strbuf, base->fillch) == WEOF) {
6565                     state = IOSTATE_badbit;
6566                     break;
6567                 }
6568             }
6569         }
6570
6571         if(state == IOSTATE_goodbit) {
6572             if(basic_streambuf_wchar_sputn(base->strbuf, str, len) != len)
6573                                         state = IOSTATE_badbit;
6574         }
6575
6576         if(state == IOSTATE_goodbit) {
6577             for(; pad!=0; pad--) {
6578                 if(basic_streambuf_wchar_sputc(base->strbuf, base->fillch) == WEOF) {
6579                     state = IOSTATE_badbit;
6580                     break;
6581                 }
6582             }
6583         }
6584
6585         base->base.wide = 0;
6586     }else {
6587         state = IOSTATE_badbit;
6588     }
6589     basic_ostream_wchar_sentry_destroy(ostr);
6590
6591     basic_ios_wchar_setstate(base, state);
6592     return ostr;
6593 }
6594
6595 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */
6596 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */
6597 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */
6598 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */
6599 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_func, 8)
6600 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_func(basic_ostream_wchar *this,
6601         basic_ostream_wchar* (__cdecl *pfunc)(basic_ostream_wchar*))
6602 {
6603     TRACE("(%p %p)\n", this, pfunc);
6604     pfunc(this);
6605     return this;
6606 }
6607
6608 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AAV21@@Z@Z */
6609 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AEAV21@@Z@Z */
6610 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@GU?$char_traits@G@std@@@1@AAV21@@Z@Z */
6611 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@GU?$char_traits@G@std@@@1@AEAV21@@Z@Z */
6612 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_func_basic_ios, 8)
6613 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_func_basic_ios(basic_ostream_wchar *this,
6614         basic_ios_wchar* (__cdecl *pfunc)(basic_ios_wchar*))
6615 {
6616     TRACE("(%p %p)\n", this, pfunc);
6617     pfunc(basic_ostream_wchar_get_basic_ios(this));
6618     return this;
6619 }
6620
6621 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */
6622 /* ??6?$basic_ostream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */
6623 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */
6624 /* ??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */
6625 DEFINE_THISCALL_WRAPPER(basic_ostream_wchar_print_func_ios_base, 8)
6626 basic_ostream_wchar* __thiscall basic_ostream_wchar_print_func_ios_base(
6627         basic_ostream_wchar *this, ios_base* (__cdecl *pfunc)(ios_base*))
6628 {
6629     TRACE("(%p %p)\n", this, pfunc);
6630     pfunc(&basic_ostream_wchar_get_basic_ios(this)->base);
6631     return this;
6632 }
6633
6634 /* Caution: basic_istream uses virtual inheritance. */
6635 static inline basic_ios_char* basic_istream_char_get_basic_ios(basic_istream_char *this)
6636 {
6637     return (basic_ios_char*)((char*)this+this->vbtable[1]);
6638 }
6639
6640 static inline basic_ios_char* basic_istream_char_to_basic_ios(basic_istream_char *ptr)
6641 {
6642     return (basic_ios_char*)((char*)ptr+basic_istream_char_vbtable[1]);
6643 }
6644
6645 static inline basic_istream_char* basic_istream_char_from_basic_ios(basic_ios_char *ptr)
6646 {
6647     return (basic_istream_char*)((char*)ptr-basic_istream_char_vbtable[1]);
6648 }
6649
6650 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N1@Z */
6651 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N1@Z */
6652 static basic_istream_char* basic_istream_char_ctor_init(basic_istream_char *this, basic_streambuf_char *strbuf, MSVCP_bool isstd, MSVCP_bool noinit, MSVCP_bool virt_init)
6653 {
6654     basic_ios_char *base;
6655
6656     TRACE("(%p %p %d %d %d)\n", this, strbuf, isstd, noinit, virt_init);
6657
6658     if(virt_init) {
6659         this->vbtable = basic_istream_char_vbtable;
6660         base = basic_istream_char_get_basic_ios(this);
6661         basic_ios_char_ctor(base);
6662     }else {
6663         base = basic_istream_char_get_basic_ios(this);
6664     }
6665
6666     base->base.vtable = &MSVCP_basic_istream_char_vtable;
6667     this->count = 0;
6668     if(!noinit)
6669         basic_ios_char_init(base, strbuf, isstd);
6670     return this;
6671 }
6672
6673 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */
6674 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@_N@Z */
6675 DEFINE_THISCALL_WRAPPER(basic_istream_char_ctor, 16)
6676 basic_istream_char* __thiscall basic_istream_char_ctor(basic_istream_char *this, basic_streambuf_char *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init)
6677 {
6678     return basic_istream_char_ctor_init(this, strbuf, isstd, FALSE, virt_init);
6679 }
6680
6681 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@@Z */
6682 /* ??0?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA@W4_Uninitialized@1@@Z */
6683 DEFINE_THISCALL_WRAPPER(basic_istream_char_ctor_uninitialized, 12)
6684 basic_istream_char* __thiscall basic_istream_char_ctor_uninitialized(basic_istream_char *this, int uninitialized, MSVCP_bool virt_init)
6685 {
6686     basic_ios_char *base;
6687
6688     TRACE("(%p %d %d)\n", this, uninitialized, virt_init);
6689
6690     if(virt_init) {
6691         this->vbtable = basic_istream_char_vbtable;
6692         base = basic_istream_char_get_basic_ios(this);
6693         basic_ios_char_ctor(base);
6694     }else {
6695         base = basic_istream_char_get_basic_ios(this);
6696     }
6697
6698     base->base.vtable = &MSVCP_basic_istream_char_vtable;
6699     ios_base_Addstd(&base->base);
6700     return this;
6701 }
6702
6703 /* ??1?$basic_istream@DU?$char_traits@D@std@@@std@@UAE@XZ */
6704 /* ??1?$basic_istream@DU?$char_traits@D@std@@@std@@UEAA@XZ */
6705 DEFINE_THISCALL_WRAPPER(basic_istream_char_dtor, 4)
6706 void __thiscall basic_istream_char_dtor(basic_ios_char *base)
6707 {
6708     basic_istream_char *this = basic_istream_char_from_basic_ios(base);
6709
6710     /* don't destroy virtual base here */
6711     TRACE("(%p)\n", this);
6712 }
6713
6714 /* ??_D?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXXZ */
6715 /* ??_D?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
6716 DEFINE_THISCALL_WRAPPER(basic_istream_char_vbase_dtor, 4)
6717 void __thiscall basic_istream_char_vbase_dtor(basic_istream_char *this)
6718 {
6719     TRACE("(%p)\n", this);
6720     basic_istream_char_dtor(basic_istream_char_to_basic_ios(this));
6721     basic_ios_char_dtor(basic_istream_char_get_basic_ios(this));
6722 }
6723
6724 DEFINE_THISCALL_WRAPPER(basic_istream_char_vector_dtor, 8)
6725 basic_istream_char* __thiscall basic_istream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
6726 {
6727     basic_istream_char *this = basic_istream_char_from_basic_ios(base);
6728
6729     TRACE("(%p %x)\n", this, flags);
6730
6731     if(flags & 2) {
6732         /* we have an array, with the number of elements stored before the first object */
6733         INT_PTR i, *ptr = (INT_PTR *)this-1;
6734
6735         for(i=*ptr-1; i>=0; i--)
6736             basic_istream_char_vbase_dtor(this+i);
6737         MSVCRT_operator_delete(ptr);
6738     } else {
6739         basic_istream_char_vbase_dtor(this);
6740         if(flags & 1)
6741             MSVCRT_operator_delete(this);
6742     }
6743
6744     return this;
6745 }
6746
6747 /* ?_Ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE_N_N@Z */
6748 /* ?_Ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_N_N@Z */
6749 static MSVCP_bool basic_istream_char__Ipfx(basic_istream_char *this, MSVCP_bool noskip)
6750 {
6751     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6752
6753     TRACE("(%p %d)\n", this, noskip);
6754
6755     if(ios_base_good(&base->base)) {
6756         if(basic_ios_char_tie_get(base))
6757             basic_ostream_char_flush(basic_ios_char_tie_get(base));
6758
6759         if(!noskip && (ios_base_flags_get(&base->base) & FMTFLAG_skipws)) {
6760             basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6761             const ctype_char *ctype = ctype_char_use_facet(&base->strbuf->loc);
6762             int ch;
6763
6764             for(ch = basic_streambuf_char_sgetc(strbuf); ;
6765                     ch = basic_streambuf_char_snextc(strbuf)) {
6766                 if(ch==EOF || !ctype_char_is_ch(ctype, _SPACE|_BLANK, ch))
6767                     break;
6768             }
6769         }
6770     }
6771
6772     if(!ios_base_good(&base->base)) {
6773         basic_ios_char_setstate(base, IOSTATE_failbit);
6774         return FALSE;
6775     }
6776
6777     return TRUE;
6778 }
6779
6780 /* ?ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE_N_N@Z */
6781 /* ?ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_N_N@Z */
6782 DEFINE_THISCALL_WRAPPER(basic_istream_char_ipfx, 8)
6783 MSVCP_bool __thiscall basic_istream_char_ipfx(basic_istream_char *this, MSVCP_bool noskip)
6784 {
6785     return basic_istream_char__Ipfx(this, noskip);
6786 }
6787
6788 /* ?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXXZ */
6789 /* ?isfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
6790 DEFINE_THISCALL_WRAPPER(basic_istream_char_isfx, 4)
6791 void __thiscall basic_istream_char_isfx(basic_istream_char *this)
6792 {
6793     TRACE("(%p)\n", this);
6794 }
6795
6796 static BOOL basic_istream_char_sentry_create(basic_istream_char *istr, MSVCP_bool noskip)
6797 {
6798     basic_ios_char *base = basic_istream_char_get_basic_ios(istr);
6799
6800     if(basic_ios_char_rdbuf_get(base))
6801         basic_streambuf_char__Lock(base->strbuf);
6802
6803     return basic_istream_char_ipfx(istr, noskip);
6804 }
6805
6806 static void basic_istream_char_sentry_destroy(basic_istream_char *istr)
6807 {
6808     basic_ios_char *base = basic_istream_char_get_basic_ios(istr);
6809
6810     if(basic_ios_char_rdbuf_get(base))
6811         basic_streambuf_char__Unlock(base->strbuf);
6812 }
6813
6814 /* ?gcount@?$basic_istream@DU?$char_traits@D@std@@@std@@QBEHXZ */
6815 /* ?gcount@?$basic_istream@DU?$char_traits@D@std@@@std@@QEBA_JXZ */
6816 DEFINE_THISCALL_WRAPPER(basic_istream_char_gcount, 4)
6817 int __thiscall basic_istream_char_gcount(const basic_istream_char *this)
6818 {
6819     TRACE("(%p)\n", this);
6820     return this->count;
6821 }
6822
6823 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ */
6824 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ */
6825 DEFINE_THISCALL_WRAPPER(basic_istream_char_get, 4)
6826 int __thiscall basic_istream_char_get(basic_istream_char *this)
6827 {
6828     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6829     int ret;
6830
6831     TRACE("(%p)\n", this);
6832
6833     this->count = 0;
6834
6835     if(!basic_istream_char_sentry_create(this, TRUE)) {
6836         basic_istream_char_sentry_destroy(this);
6837         return EOF;
6838     }
6839
6840     ret = basic_streambuf_char_sbumpc(basic_ios_char_rdbuf_get(base));
6841     basic_istream_char_sentry_destroy(this);
6842     if(ret == EOF)
6843         basic_ios_char_setstate(base, IOSTATE_eofbit|IOSTATE_failbit);
6844     else
6845         this->count++;
6846
6847     return ret;
6848 }
6849
6850 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAD@Z */
6851 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAD@Z */
6852 DEFINE_THISCALL_WRAPPER(basic_istream_char_get_ch, 8)
6853 basic_istream_char* __thiscall basic_istream_char_get_ch(basic_istream_char *this, char *ch)
6854 {
6855     int ret;
6856
6857     TRACE("(%p %p)\n", this, ch);
6858
6859     ret = basic_istream_char_get(this);
6860     if(ret != EOF)
6861         *ch = (char)ret;
6862     return this;
6863 }
6864
6865 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADHD@Z */
6866 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_JD@Z */
6867 DEFINE_THISCALL_WRAPPER(basic_istream_char_get_str_delim, 16)
6868 basic_istream_char* __thiscall basic_istream_char_get_str_delim(basic_istream_char *this, char *str, streamsize count, char delim)
6869 {
6870     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6871     int ch = delim;
6872
6873     TRACE("(%p %p %ld %c)\n", this, str, count, delim);
6874
6875     this->count = 0;
6876
6877     if(basic_istream_char_sentry_create(this, TRUE)) {
6878         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6879
6880         for(ch = basic_streambuf_char_sgetc(strbuf); count>1;
6881                 ch = basic_streambuf_char_snextc(strbuf)) {
6882             if(ch==EOF || ch==delim)
6883                 break;
6884
6885             *str++ = ch;
6886             this->count++;
6887             count--;
6888         }
6889     }
6890     basic_istream_char_sentry_destroy(this);
6891
6892     basic_ios_char_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) |
6893             (ch==EOF ? IOSTATE_eofbit : IOSTATE_goodbit));
6894     if(count > 0)
6895         *str = 0;
6896     return this;
6897 }
6898
6899 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADH@Z */
6900 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z */
6901 DEFINE_THISCALL_WRAPPER(basic_istream_char_get_str, 12)
6902 basic_istream_char* __thiscall basic_istream_char_get_str(basic_istream_char *this, char *str, streamsize count)
6903 {
6904     return basic_istream_char_get_str_delim(this, str, count, '\n');
6905 }
6906
6907 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAV?$basic_streambuf@DU?$char_traits@D@std@@@2@D@Z */
6908 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@D@Z */
6909 DEFINE_THISCALL_WRAPPER(basic_istream_char_get_streambuf_delim, 12)
6910 basic_istream_char* __thiscall basic_istream_char_get_streambuf_delim(basic_istream_char *this, basic_streambuf_char *strbuf, char delim)
6911 {
6912     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6913     int ch = delim;
6914
6915     TRACE("(%p %p %c)\n", this, strbuf, delim);
6916
6917     this->count = 0;
6918
6919     if(basic_istream_char_sentry_create(this, TRUE)) {
6920         basic_streambuf_char *strbuf_read = basic_ios_char_rdbuf_get(base);
6921
6922         for(ch = basic_streambuf_char_sgetc(strbuf_read); ;
6923                 ch = basic_streambuf_char_snextc(strbuf_read)) {
6924             if(ch==EOF || ch==delim)
6925                 break;
6926
6927             if(basic_streambuf_char_sputc(strbuf, ch) == EOF)
6928                 break;
6929             this->count++;
6930         }
6931     }
6932     basic_istream_char_sentry_destroy(this);
6933
6934     basic_ios_char_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) |
6935             (ch==EOF ? IOSTATE_eofbit : IOSTATE_goodbit));
6936     return this;
6937 }
6938
6939 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@AAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z */
6940 /* ?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@@Z */
6941 DEFINE_THISCALL_WRAPPER(basic_istream_char_get_streambuf, 8)
6942 basic_istream_char* __thiscall basic_istream_char_get_streambuf(basic_istream_char *this, basic_streambuf_char *strbuf)
6943 {
6944     return basic_istream_char_get_streambuf_delim(this, strbuf, '\n');
6945 }
6946
6947 /* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADHD@Z */
6948 /* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_JD@Z */
6949 DEFINE_THISCALL_WRAPPER(basic_istream_char_getline_delim, 16)
6950 basic_istream_char* __thiscall basic_istream_char_getline_delim(basic_istream_char *this, char *str, streamsize count, char delim)
6951 {
6952     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
6953     int ch = (unsigned char)delim;
6954
6955     TRACE("(%p %p %ld %c)\n", this, str, count, delim);
6956
6957     this->count = 0;
6958
6959     if(basic_istream_char_sentry_create(this, TRUE) && count>0) {
6960         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
6961
6962         while(count > 1) {
6963             ch = basic_streambuf_char_sbumpc(strbuf);
6964
6965             if(ch==EOF || ch==(unsigned char)delim)
6966                 break;
6967
6968             *str++ = ch;
6969             this->count++;
6970             count--;
6971         }
6972
6973         if(ch == (unsigned char)delim)
6974             this->count++;
6975         else if(ch != EOF) {
6976             ch = basic_streambuf_char_sgetc(strbuf);
6977
6978             if(ch == (unsigned char)delim) {
6979                 basic_streambuf_char__Gninc(strbuf);
6980                 this->count++;
6981             }
6982         }
6983     }
6984     basic_istream_char_sentry_destroy(this);
6985
6986     basic_ios_char_setstate(base, (ch==EOF ? IOSTATE_eofbit : IOSTATE_goodbit) |
6987             (!this->count || (ch!=(unsigned char)delim && ch!=EOF) ? IOSTATE_failbit : IOSTATE_goodbit));
6988     if(count > 0)
6989         *str = 0;
6990     return this;
6991 }
6992
6993 /* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADH@Z */
6994 /* ?getline@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z */
6995 DEFINE_THISCALL_WRAPPER(basic_istream_char_getline, 12)
6996 basic_istream_char* __thiscall basic_istream_char_getline(basic_istream_char *this, char *str, streamsize count)
6997 {
6998     return basic_istream_char_getline_delim(this, str, count, '\n');
6999 }
7000
7001 /* ?ignore@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@HH@Z */
7002 /* ?ignore@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JH@Z */
7003 DEFINE_THISCALL_WRAPPER(basic_istream_char_ignore, 12)
7004 basic_istream_char* __thiscall basic_istream_char_ignore(basic_istream_char *this, streamsize count, int delim)
7005 {
7006     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7007     int ch = (unsigned char)delim;
7008     unsigned int state;
7009
7010     TRACE("(%p %ld %d)\n", this, count, delim);
7011
7012     this->count = 0;
7013
7014     if(basic_istream_char_sentry_create(this, TRUE)) {
7015         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7016         state = IOSTATE_goodbit;
7017
7018         while(count > 0) {
7019             ch = basic_streambuf_char_sbumpc(strbuf);
7020
7021             if(ch==EOF) {
7022                 state = IOSTATE_eofbit;
7023                 break;
7024             }
7025
7026             if(ch==(unsigned char)delim)
7027                 break;
7028
7029             this->count++;
7030             if(count != INT_MAX)
7031                 count--;
7032         }
7033     }else
7034         state = IOSTATE_failbit;
7035     basic_istream_char_sentry_destroy(this);
7036
7037     basic_ios_char_setstate(base, state);
7038     return this;
7039 }
7040
7041 /* ?ws@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@1@AAV21@@Z */
7042 /* ?ws@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@1@AEAV21@@Z */
7043 basic_istream_char* __cdecl ws_basic_istream_char(basic_istream_char *istream)
7044 {
7045     basic_ios_char *base = basic_istream_char_get_basic_ios(istream);
7046     int ch = '\n';
7047
7048     TRACE("(%p)\n", istream);
7049
7050     if(basic_istream_char_sentry_create(istream, TRUE)) {
7051         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7052         const ctype_char *ctype = ctype_char_use_facet(&strbuf->loc);
7053
7054         for(ch = basic_streambuf_char_sgetc(strbuf); ctype_char_is_ch(ctype, _SPACE, ch);
7055                 ch = basic_streambuf_char_snextc(strbuf)) {
7056             if(ch == EOF)
7057                 break;
7058         }
7059     }
7060     basic_istream_char_sentry_destroy(istream);
7061
7062     if(ch == EOF)
7063         basic_ios_char_setstate(base, IOSTATE_eofbit);
7064     return istream;
7065 }
7066
7067 /* ?peek@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ */
7068 /* ?peek@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ */
7069 DEFINE_THISCALL_WRAPPER(basic_istream_char_peek, 4)
7070 int __thiscall basic_istream_char_peek(basic_istream_char *this)
7071 {
7072     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7073     int ret = EOF;
7074
7075     TRACE("(%p)\n", this);
7076
7077     this->count = 0;
7078
7079     if(basic_istream_char_sentry_create(this, TRUE))
7080         ret = basic_streambuf_char_sgetc(basic_ios_char_rdbuf_get(base));
7081     basic_istream_char_sentry_destroy(this);
7082
7083     if (ret == EOF)
7084         basic_ios_char_setstate(base, IOSTATE_eofbit);
7085
7086     return ret;
7087 }
7088
7089 /* ?_Read_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADIH@Z */
7090 /* ?_Read_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_K_J@Z */
7091 static basic_istream_char* basic_istream_char__Read_s(basic_istream_char *this, char *str, MSVCP_size_t size, streamsize count)
7092 {
7093     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7094     IOSB_iostate state = IOSTATE_goodbit;
7095
7096     TRACE("(%p %p %lu %ld)\n", this, str, size, count);
7097
7098     if(basic_istream_char_sentry_create(this, TRUE)) {
7099         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7100
7101         this->count = basic_streambuf_char__Sgetn_s(strbuf, str, size, count);
7102         if(this->count != count)
7103             state |= IOSTATE_failbit | IOSTATE_eofbit;
7104     }else {
7105         this->count = 0;
7106     }
7107     basic_istream_char_sentry_destroy(this);
7108
7109     basic_ios_char_setstate(base, state);
7110     return this;
7111 }
7112
7113 /* ?read@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@PADH@Z */
7114 /* ?read@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@PEAD_J@Z */
7115 DEFINE_THISCALL_WRAPPER(basic_istream_char_read, 12)
7116 basic_istream_char* __thiscall basic_istream_char_read(basic_istream_char *this, char *str, streamsize count)
7117 {
7118     return basic_istream_char__Read_s(this, str, count, count);
7119 }
7120
7121 /* ?_Readsome_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHPADIH@Z */
7122 /* ?_Readsome_s@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_K_J@Z */
7123 static streamsize basic_istream_char__Readsome_s(basic_istream_char *this, char *str, MSVCP_size_t size, streamsize count)
7124 {
7125     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7126     IOSB_iostate state = IOSTATE_goodbit;
7127
7128     TRACE("(%p %p %lu %ld)\n", this, str, size, count);
7129
7130     this->count = 0;
7131
7132     if(basic_istream_char_sentry_create(this, TRUE)) {
7133         streamsize avail = basic_streambuf_char_in_avail(basic_ios_char_rdbuf_get(base));
7134         if(avail > count)
7135             avail = count;
7136
7137         if(avail == -1)
7138             state |= IOSTATE_eofbit;
7139         else if(avail > 0)
7140             basic_istream_char__Read_s(this, str, size, avail);
7141     }else {
7142         state |= IOSTATE_failbit;
7143     }
7144     basic_istream_char_sentry_destroy(this);
7145
7146     basic_ios_char_setstate(base, state);
7147     return this->count;
7148 }
7149
7150 /* ?readsome@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHPADH@Z */
7151 /* ?readsome@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA_JPEAD_J@Z */
7152 DEFINE_THISCALL_WRAPPER(basic_istream_char_readsome, 12)
7153 streamsize __thiscall basic_istream_char_readsome(basic_istream_char *this, char *str, streamsize count)
7154 {
7155     return basic_istream_char__Readsome_s(this, str, count, count);
7156 }
7157
7158 /* ?putback@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z */
7159 /* ?putback@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@D@Z */
7160 DEFINE_THISCALL_WRAPPER(basic_istream_char_putback, 8)
7161 basic_istream_char* __thiscall basic_istream_char_putback(basic_istream_char *this, char ch)
7162 {
7163     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7164     IOSB_iostate state = IOSTATE_goodbit;
7165
7166     TRACE("(%p %c)\n", this, ch);
7167
7168     this->count = 0;
7169
7170     if(basic_istream_char_sentry_create(this, TRUE)) {
7171         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7172
7173         if(!ios_base_good(&base->base))
7174             state |= IOSTATE_failbit;
7175         else if(!strbuf || basic_streambuf_char_sputbackc(strbuf, ch)==EOF)
7176             state |= IOSTATE_badbit;
7177     }
7178     basic_istream_char_sentry_destroy(this);
7179
7180     basic_ios_char_setstate(base, state);
7181     return this;
7182 }
7183
7184 /* ?unget@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ */
7185 /* ?unget@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ */
7186 DEFINE_THISCALL_WRAPPER(basic_istream_char_unget, 4)
7187 basic_istream_char* __thiscall basic_istream_char_unget(basic_istream_char *this)
7188 {
7189     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7190     IOSB_iostate state = IOSTATE_goodbit;
7191
7192     TRACE("(%p)\n", this);
7193
7194     this->count = 0;
7195
7196     if(basic_istream_char_sentry_create(this, TRUE)) {
7197         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7198
7199         if(!ios_base_good(&base->base))
7200             state |= IOSTATE_failbit;
7201         else if(!strbuf || basic_streambuf_char_sungetc(strbuf)==EOF)
7202             state |= IOSTATE_badbit;
7203     }
7204     basic_istream_char_sentry_destroy(this);
7205
7206     basic_ios_char_setstate(base, state);
7207     return this;
7208 }
7209
7210 /* ?sync@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ */
7211 /* ?sync@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ */
7212 DEFINE_THISCALL_WRAPPER(basic_istream_char_sync, 4)
7213 int __thiscall basic_istream_char_sync(basic_istream_char *this)
7214 {
7215     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7216     basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7217
7218     TRACE("(%p)\n", this);
7219
7220     if(!strbuf)
7221         return -1;
7222
7223     if(basic_istream_char_sentry_create(this, TRUE)) {
7224         if(basic_streambuf_char_pubsync(strbuf) != -1) {
7225             basic_istream_char_sentry_destroy(this);
7226             return 0;
7227         }
7228     }
7229     basic_istream_char_sentry_destroy(this);
7230
7231     basic_ios_char_setstate(base, IOSTATE_badbit);
7232     return -1;
7233 }
7234
7235 /* ?tellg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE?AV?$fpos@H@2@XZ */
7236 /* ?tellg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
7237 DEFINE_THISCALL_WRAPPER(basic_istream_char_tellg, 8)
7238 fpos_int* __thiscall basic_istream_char_tellg(basic_istream_char *this, fpos_int *ret)
7239 {
7240     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7241
7242     TRACE("(%p %p)\n", this, ret);
7243
7244     if(ios_base_fail(&base->base)) {
7245         ret->off = -1;
7246         ret->pos = 0;
7247         ret->state = 0;
7248         return ret;
7249     }
7250
7251     basic_streambuf_char_pubseekoff(basic_ios_char_rdbuf_get(base),
7252             ret, 0, SEEKDIR_cur, OPENMODE_in);
7253
7254     if(ret->off==-1 && ret->pos==0 && ret->state==0)
7255         basic_ios_char_setstate(base, IOSTATE_failbit);
7256
7257     return ret;
7258 }
7259
7260 /* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@JW4seekdir@ios_base@2@@Z */
7261 /* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@_JW4seekdir@ios_base@2@@Z */
7262 DEFINE_THISCALL_WRAPPER(basic_istream_char_seekg, 12)
7263 basic_istream_char* __thiscall basic_istream_char_seekg(basic_istream_char *this, streamoff off, int dir)
7264 {
7265     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7266
7267     TRACE("(%p %ld %d)\n", this, off, dir);
7268
7269     if(!ios_base_fail(&base->base)) {
7270         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7271         fpos_int ret;
7272
7273         basic_streambuf_char_pubseekoff(strbuf, &ret, off, dir, OPENMODE_in);
7274     }
7275
7276     return this;
7277 }
7278
7279 /* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
7280 /* ?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
7281 DEFINE_THISCALL_WRAPPER(basic_istream_char_seekg_fpos, 28)
7282 basic_istream_char* __thiscall basic_istream_char_seekg_fpos(basic_istream_char *this, fpos_int pos)
7283 {
7284     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7285
7286     TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos));
7287
7288     if(!ios_base_fail(&base->base)) {
7289         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7290         fpos_int ret;
7291
7292         basic_streambuf_char_pubseekpos(strbuf, &ret, pos, OPENMODE_in);
7293     }
7294
7295     return this;
7296 }
7297
7298 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAF@Z */
7299 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAF@Z */
7300 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_short, 8)
7301 basic_istream_char* __thiscall basic_istream_char_read_short(basic_istream_char *this, short *v)
7302 {
7303     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7304     int state = IOSTATE_goodbit;
7305
7306     TRACE("(%p %p)\n", this, v);
7307
7308     if(basic_istream_char_sentry_create(this, FALSE)) {
7309         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7310         const num_get *numget = num_get_char_use_facet(&strbuf->loc);
7311         istreambuf_iterator_char first={0}, last={0};
7312         LONG tmp;
7313
7314         first.strbuf = strbuf;
7315         num_get_char_get_long(numget, &last, first, last, &base->base, &state, &tmp);
7316
7317         if(!(state&IOSTATE_failbit) && tmp==(LONG)((short)tmp))
7318             *v = tmp;
7319         else
7320             state |= IOSTATE_failbit;
7321     }
7322     basic_istream_char_sentry_destroy(this);
7323
7324     basic_ios_char_setstate(base, state);
7325     return this;
7326 }
7327
7328 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAG@Z */
7329 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAG@Z */
7330 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ushort, 8)
7331 basic_istream_char* __thiscall basic_istream_char_read_ushort(basic_istream_char *this, unsigned short *v)
7332 {
7333     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7334     int state = IOSTATE_goodbit;
7335
7336     TRACE("(%p %p)\n", this, v);
7337
7338     if(basic_istream_char_sentry_create(this, FALSE)) {
7339         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7340         const num_get *numget = num_get_char_use_facet(&strbuf->loc);
7341         istreambuf_iterator_char first={0}, last={0};
7342
7343         first.strbuf = strbuf;
7344         num_get_char_get_ushort(numget, &last, first, last, &base->base, &state, v);
7345     }
7346     basic_istream_char_sentry_destroy(this);
7347
7348     basic_ios_char_setstate(base, state);
7349     return this;
7350 }
7351
7352 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAH@Z */
7353 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAH@Z */
7354 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_int, 8)
7355 basic_istream_char* __thiscall basic_istream_char_read_int(basic_istream_char *this, int *v)
7356 {
7357     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7358     int state = IOSTATE_goodbit;
7359
7360     TRACE("(%p %p)\n", this, v);
7361
7362     if(basic_istream_char_sentry_create(this, FALSE)) {
7363         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7364         const num_get *numget = num_get_char_use_facet(&strbuf->loc);
7365         istreambuf_iterator_char first={0}, last={0};
7366
7367         first.strbuf = strbuf;
7368         num_get_char_get_long(numget, &last, first, last, &base->base, &state, v);
7369     }
7370     basic_istream_char_sentry_destroy(this);
7371
7372     basic_ios_char_setstate(base, state);
7373     return this;
7374 }
7375
7376 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAI@Z */
7377 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAI@Z */
7378 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_uint, 8)
7379 basic_istream_char* __thiscall basic_istream_char_read_uint(basic_istream_char *this, unsigned int *v)
7380 {
7381     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7382     int state = IOSTATE_goodbit;
7383
7384     TRACE("(%p %p)\n", this, v);
7385
7386     if(basic_istream_char_sentry_create(this, FALSE)) {
7387         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7388         const num_get *numget = num_get_char_use_facet(&strbuf->loc);
7389         istreambuf_iterator_char first={0}, last={0};
7390
7391         first.strbuf = strbuf;
7392         num_get_char_get_uint(numget, &last, first, last, &base->base, &state, v);
7393     }
7394     basic_istream_char_sentry_destroy(this);
7395
7396     basic_ios_char_setstate(base, state);
7397     return this;
7398 }
7399
7400 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAJ@Z */
7401 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAJ@Z */
7402 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_long, 8)
7403 basic_istream_char* __thiscall basic_istream_char_read_long(basic_istream_char *this, LONG *v)
7404 {
7405     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7406     int state = IOSTATE_goodbit;
7407
7408     TRACE("(%p %p)\n", this, v);
7409
7410     if(basic_istream_char_sentry_create(this, FALSE)) {
7411         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7412         const num_get *numget = num_get_char_use_facet(&strbuf->loc);
7413         istreambuf_iterator_char first={0}, last={0};
7414
7415         first.strbuf = strbuf;
7416         num_get_char_get_long(numget, &last, first, last, &base->base, &state, v);
7417     }
7418     basic_istream_char_sentry_destroy(this);
7419
7420     basic_ios_char_setstate(base, state);
7421     return this;
7422 }
7423
7424 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAK@Z */
7425 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAK@Z */
7426 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ulong, 8)
7427 basic_istream_char* __thiscall basic_istream_char_read_ulong(basic_istream_char *this, ULONG *v)
7428 {
7429     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7430     int state = IOSTATE_goodbit;
7431
7432     TRACE("(%p %p)\n", this, v);
7433
7434     if(basic_istream_char_sentry_create(this, FALSE)) {
7435         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7436         const num_get *numget = num_get_char_use_facet(&strbuf->loc);
7437         istreambuf_iterator_char first={0}, last={0};
7438
7439         first.strbuf = strbuf;
7440         num_get_char_get_ulong(numget, &last, first, last, &base->base, &state, v);
7441     }
7442     basic_istream_char_sentry_destroy(this);
7443
7444     basic_ios_char_setstate(base, state);
7445     return this;
7446 }
7447
7448 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAM@Z */
7449 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAM@Z */
7450 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_float, 8)
7451 basic_istream_char* __thiscall basic_istream_char_read_float(basic_istream_char *this, float *v)
7452 {
7453     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7454     int state = IOSTATE_goodbit;
7455
7456     TRACE("(%p %p)\n", this, v);
7457
7458     if(basic_istream_char_sentry_create(this, FALSE)) {
7459         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7460         const num_get *numget = num_get_char_use_facet(&strbuf->loc);
7461         istreambuf_iterator_char first={0}, last={0};
7462
7463         first.strbuf = strbuf;
7464         num_get_char_get_float(numget, &last, first, last, &base->base, &state, v);
7465     }
7466     basic_istream_char_sentry_destroy(this);
7467
7468     basic_ios_char_setstate(base, state);
7469     return this;
7470 }
7471
7472 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAN@Z */
7473 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAN@Z */
7474 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_double, 8)
7475 basic_istream_char* __thiscall basic_istream_char_read_double(basic_istream_char *this, double *v)
7476 {
7477     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7478     int state = IOSTATE_goodbit;
7479
7480     TRACE("(%p %p)\n", this, v);
7481
7482     if(basic_istream_char_sentry_create(this, FALSE)) {
7483         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7484         const num_get *numget = num_get_char_use_facet(&strbuf->loc);
7485         istreambuf_iterator_char first={0}, last={0};
7486
7487         first.strbuf = strbuf;
7488         num_get_char_get_double(numget, &last, first, last, &base->base, &state, v);
7489     }
7490     basic_istream_char_sentry_destroy(this);
7491
7492     basic_ios_char_setstate(base, state);
7493     return this;
7494 }
7495
7496 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAO@Z */
7497 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAO@Z */
7498 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ldouble, 8)
7499 basic_istream_char* __thiscall basic_istream_char_read_ldouble(basic_istream_char *this, double *v)
7500 {
7501     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7502     int state = IOSTATE_goodbit;
7503
7504     TRACE("(%p %p)\n", this, v);
7505
7506     if(basic_istream_char_sentry_create(this, FALSE)) {
7507         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7508         const num_get *numget = num_get_char_use_facet(&strbuf->loc);
7509         istreambuf_iterator_char first={0}, last={0};
7510
7511         first.strbuf = strbuf;
7512         num_get_char_get_ldouble(numget, &last, first, last, &base->base, &state, v);
7513     }
7514     basic_istream_char_sentry_destroy(this);
7515
7516     basic_ios_char_setstate(base, state);
7517     return this;
7518 }
7519
7520 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAPAX@Z */
7521 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAPEAX@Z */
7522 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_ptr, 8)
7523 basic_istream_char* __thiscall basic_istream_char_read_ptr(basic_istream_char *this, void **v)
7524 {
7525     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7526     int state = IOSTATE_goodbit;
7527
7528     TRACE("(%p %p)\n", this, v);
7529
7530     if(basic_istream_char_sentry_create(this, FALSE)) {
7531         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7532         const num_get *numget = num_get_char_use_facet(&strbuf->loc);
7533         istreambuf_iterator_char first={0}, last={0};
7534
7535         first.strbuf = strbuf;
7536         num_get_char_get_void(numget, &last, first, last, &base->base, &state, v);
7537     }
7538     basic_istream_char_sentry_destroy(this);
7539
7540     basic_ios_char_setstate(base, state);
7541     return this;
7542 }
7543
7544 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_J@Z */
7545 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_J@Z */
7546 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_int64, 8)
7547 basic_istream_char* __thiscall basic_istream_char_read_int64(basic_istream_char *this, __int64 *v)
7548 {
7549     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7550     int state = IOSTATE_goodbit;
7551
7552     TRACE("(%p %p)\n", this, v);
7553
7554     if(basic_istream_char_sentry_create(this, FALSE)) {
7555         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7556         const num_get *numget = num_get_char_use_facet(&strbuf->loc);
7557         istreambuf_iterator_char first={0}, last={0};
7558
7559         first.strbuf = strbuf;
7560         num_get_char_get_int64(numget, &last, first, last, &base->base, &state, v);
7561     }
7562     basic_istream_char_sentry_destroy(this);
7563
7564     basic_ios_char_setstate(base, state);
7565     return this;
7566 }
7567
7568 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_K@Z */
7569 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_K@Z */
7570 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_uint64, 8)
7571 basic_istream_char* __thiscall basic_istream_char_read_uint64(basic_istream_char *this, unsigned __int64 *v)
7572 {
7573     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7574     int state = IOSTATE_goodbit;
7575
7576     TRACE("(%p %p)\n", this, v);
7577
7578     if(basic_istream_char_sentry_create(this, FALSE)) {
7579         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7580         const num_get *numget = num_get_char_use_facet(&strbuf->loc);
7581         istreambuf_iterator_char first={0}, last={0};
7582
7583         first.strbuf = strbuf;
7584         num_get_char_get_uint64(numget, &last, first, last, &base->base, &state, v);
7585     }
7586     basic_istream_char_sentry_destroy(this);
7587
7588     basic_ios_char_setstate(base, state);
7589     return this;
7590 }
7591
7592 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AA_N@Z */
7593 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEA_N@Z */
7594 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_bool, 8)
7595 basic_istream_char* __thiscall basic_istream_char_read_bool(basic_istream_char *this, MSVCP_bool *v)
7596 {
7597     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7598     int state = IOSTATE_goodbit;
7599
7600     TRACE("(%p %p)\n", this, v);
7601
7602     if(basic_istream_char_sentry_create(this, FALSE)) {
7603         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7604         const num_get *numget = num_get_char_use_facet(&strbuf->loc);
7605         istreambuf_iterator_char first={0}, last={0};
7606
7607         first.strbuf = strbuf;
7608         num_get_char_get_bool(numget, &last, first, last, &base->base, &state, v);
7609     }
7610     basic_istream_char_sentry_destroy(this);
7611
7612     basic_ios_char_setstate(base, state);
7613     return this;
7614 }
7615
7616 /* ??$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 */
7617 /* ??$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 */
7618 basic_istream_char* __cdecl basic_istream_char_getline_bstr_delim(
7619         basic_istream_char *istream, basic_string_char *str, char delim)
7620 {
7621     basic_ios_char *base = basic_istream_char_get_basic_ios(istream);
7622     IOSB_iostate state = IOSTATE_goodbit;
7623     int c = (unsigned char)delim;
7624
7625     TRACE("(%p %p %c)\n", istream, str, delim);
7626
7627     basic_string_char_clear(str);
7628     if(basic_istream_char_sentry_create(istream, TRUE)) {
7629         basic_streambuf_char *strbuf = basic_ios_char_rdbuf_get(base);
7630
7631         c = basic_streambuf_char_sgetc(strbuf);
7632         for(; c!=(unsigned char)delim && c!=EOF; c = basic_streambuf_char_snextc(strbuf))
7633             basic_string_char_append_ch(str, c);
7634         if(c==EOF) state |= IOSTATE_eofbit;
7635         else if(c==(unsigned char)delim) basic_streambuf_char_sbumpc(strbuf);
7636
7637         if(!basic_string_char_length(str) && c!=(unsigned char)delim) state |= IOSTATE_failbit;
7638     }
7639     basic_istream_char_sentry_destroy(istream);
7640
7641     basic_ios_char_setstate(basic_istream_char_get_basic_ios(istream), state);
7642     return istream;
7643 }
7644
7645 /* ??$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 */
7646 /* ??$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 */
7647 basic_istream_char* __cdecl basic_istream_char_getline_bstr(
7648         basic_istream_char *istream, basic_string_char *str)
7649 {
7650     return basic_istream_char_getline_bstr_delim(istream, str, '\n');
7651 }
7652
7653 /* ??$?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 */
7654 /* ??$?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 */
7655 basic_istream_char* __cdecl basic_istream_char_read_bstr(
7656         basic_istream_char *istream, basic_string_char *str)
7657 {
7658     basic_ios_char *base = basic_istream_char_get_basic_ios(istream);
7659     IOSB_iostate state = IOSTATE_failbit;
7660     int c = '\n';
7661
7662     TRACE("(%p %p)\n", istream, str);
7663
7664     if(basic_istream_char_sentry_create(istream, FALSE)) {
7665         const ctype_char *ctype = ctype_char_use_facet(&base->strbuf->loc);
7666         MSVCP_size_t count = ios_base_width_get(&base->base);
7667
7668         if(!count)
7669             count = -1;
7670
7671         basic_string_char_clear(str);
7672
7673         for(c = basic_streambuf_char_sgetc(basic_ios_char_rdbuf_get(base));
7674                 c!=EOF && !ctype_char_is_ch(ctype, _SPACE|_BLANK, c) && count>0;
7675                 c = basic_streambuf_char_snextc(basic_ios_char_rdbuf_get(base)), count--) {
7676             state = IOSTATE_goodbit;
7677             basic_string_char_append_ch(str, c);
7678         }
7679     }
7680     basic_istream_char_sentry_destroy(istream);
7681
7682     ios_base_width_set(&base->base, 0);
7683     basic_ios_char_setstate(base, state | (c==EOF ? IOSTATE_eofbit : IOSTATE_goodbit));
7684     return istream;
7685 }
7686
7687 /* ??$?5DU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@PAD@Z */
7688 /* ??$?5DU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@PEAD@Z */
7689 /* ??$?5U?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@PAC@Z */
7690 /* ??$?5U?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@PEAC@Z */
7691 /* ??$?5U?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@PAE@Z */
7692 /* ??$?5U?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@PEAE@Z */
7693 basic_istream_char* __cdecl basic_istream_char_read_str(basic_istream_char *istream, char *str)
7694 {
7695     basic_ios_char *base = basic_istream_char_get_basic_ios(istream);
7696     IOSB_iostate state = IOSTATE_failbit;
7697     int c = '\n';
7698
7699     TRACE("(%p %p)\n", istream, str);
7700
7701     if(basic_istream_char_sentry_create(istream, FALSE)) {
7702         const ctype_char *ctype = ctype_char_use_facet(&base->strbuf->loc);
7703         MSVCP_size_t count = ios_base_width_get(&base->base)-1;
7704
7705         for(c = basic_streambuf_char_sgetc(basic_ios_char_rdbuf_get(base));
7706                 c!=EOF && !ctype_char_is_ch(ctype, _SPACE|_BLANK, c) && count>0;
7707                 c = basic_streambuf_char_snextc(basic_ios_char_rdbuf_get(base)), count--) {
7708             state = IOSTATE_goodbit;
7709             *str++ = c;
7710         }
7711     }
7712     basic_istream_char_sentry_destroy(istream);
7713
7714     *str = 0;
7715     ios_base_width_set(&base->base, 0);
7716     basic_ios_char_setstate(base, state | (c==EOF ? IOSTATE_eofbit : IOSTATE_goodbit));
7717     return istream;
7718 }
7719
7720 /* ??$?5DU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAD@Z */
7721 /* ??$?5DU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAD@Z */
7722 /* ??$?5U?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAC@Z */
7723 /* ??$?5U?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAC@Z */
7724 /* ??$?5U?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAE@Z */
7725 /* ??$?5U?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAE@Z */
7726 basic_istream_char* __cdecl basic_istream_char_read_ch(basic_istream_char *istream, char *ch)
7727 {
7728     IOSB_iostate state = IOSTATE_failbit;
7729     int c = 0;
7730
7731     TRACE("(%p %p)\n", istream, ch);
7732
7733     if(basic_istream_char_sentry_create(istream, FALSE)) {
7734         c = basic_streambuf_char_sbumpc(basic_ios_char_rdbuf_get(
7735                     basic_istream_char_get_basic_ios(istream)));
7736         if(c != EOF) {
7737             state = IOSTATE_goodbit;
7738             *ch = c;
7739         }
7740     }
7741     basic_istream_char_sentry_destroy(istream);
7742
7743     basic_ios_char_setstate(basic_istream_char_get_basic_ios(istream),
7744             state | (c==EOF ? IOSTATE_eofbit : IOSTATE_goodbit));
7745     return istream;
7746 }
7747
7748 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
7749 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
7750 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_streambuf, 8)
7751 basic_istream_char* __thiscall basic_istream_char_read_streambuf(
7752         basic_istream_char *this, basic_streambuf_char *streambuf)
7753 {
7754     basic_ios_char *base = basic_istream_char_get_basic_ios(this);
7755     IOSB_iostate state = IOSTATE_failbit;
7756     int c = '\n';
7757
7758     TRACE("(%p %p)\n", this, streambuf);
7759
7760     if(basic_istream_char_sentry_create(this, FALSE)) {
7761         for(c = basic_streambuf_char_sgetc(basic_ios_char_rdbuf_get(base)); c!=EOF;
7762                 c = basic_streambuf_char_snextc(basic_ios_char_rdbuf_get(base))) {
7763             state = IOSTATE_goodbit;
7764             if(basic_streambuf_char_sputc(streambuf, c) == EOF)
7765                 break;
7766         }
7767     }
7768     basic_istream_char_sentry_destroy(this);
7769
7770     basic_ios_char_setstate(base, state | (c==EOF ? IOSTATE_eofbit : IOSTATE_goodbit));
7771     return this;
7772 }
7773
7774 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */
7775 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */
7776 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_func, 8)
7777 basic_istream_char* __thiscall basic_istream_char_read_func(basic_istream_char *this,
7778         basic_istream_char* (__cdecl *pfunc)(basic_istream_char*))
7779 {
7780     TRACE("(%p %p)\n", this, pfunc);
7781     pfunc(this);
7782     return this;
7783 }
7784
7785 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@DU?$char_traits@D@std@@@1@AAV21@@Z@Z */
7786 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@DU?$char_traits@D@std@@@1@AEAV21@@Z@Z */
7787 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_func_basic_ios, 8)
7788 basic_istream_char* __thiscall basic_istream_char_read_func_basic_ios(basic_istream_char *this,
7789         basic_ios_char* (__cdecl *pfunc)(basic_ios_char*))
7790 {
7791     TRACE("(%p %p)\n", this, pfunc);
7792     pfunc(basic_istream_char_get_basic_ios(this));
7793     return this;
7794 }
7795
7796 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */
7797 /* ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */
7798 DEFINE_THISCALL_WRAPPER(basic_istream_char_read_func_ios_base, 8)
7799 basic_istream_char* __thiscall basic_istream_char_read_func_ios_base(basic_istream_char *this,
7800         ios_base* (__cdecl *pfunc)(ios_base*))
7801 {
7802     TRACE("(%p %p)\n", this, pfunc);
7803     pfunc(&basic_istream_char_get_basic_ios(this)->base);
7804     return this;
7805 }
7806
7807 /* Caution: basic_istream uses virtual inheritance. */
7808 static inline basic_ios_wchar* basic_istream_wchar_get_basic_ios(basic_istream_wchar *this)
7809 {
7810     return (basic_ios_wchar*)((char*)this+this->vbtable[1]);
7811 }
7812
7813 static inline basic_ios_wchar* basic_istream_wchar_to_basic_ios(basic_istream_wchar *ptr)
7814 {
7815     return (basic_ios_wchar*)((char*)ptr+basic_istream_wchar_vbtable[1]);
7816 }
7817
7818 static inline basic_istream_wchar* basic_istream_wchar_from_basic_ios(basic_ios_wchar *ptr)
7819 {
7820     return (basic_istream_wchar*)((char*)ptr-basic_istream_wchar_vbtable[1]);
7821 }
7822
7823 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N1@Z */
7824 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N1@Z */
7825 static basic_istream_wchar* basic_istream_wchar_ctor_init(basic_istream_wchar *this,
7826         basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool noinit, MSVCP_bool virt_init)
7827 {
7828     basic_ios_wchar *base;
7829
7830     TRACE("(%p %p %d %d %d)\n", this, strbuf, isstd, noinit, virt_init);
7831
7832     if(virt_init) {
7833         this->vbtable = basic_istream_wchar_vbtable;
7834         base = basic_istream_wchar_get_basic_ios(this);
7835         basic_ios_wchar_ctor(base);
7836     }else {
7837         base = basic_istream_wchar_get_basic_ios(this);
7838     }
7839
7840     base->base.vtable = &MSVCP_basic_istream_wchar_vtable;
7841     this->count = 0;
7842     if(!noinit)
7843         basic_ios_wchar_init(base, strbuf, isstd);
7844     return this;
7845 }
7846
7847 /* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N1@Z */
7848 /* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N1@Z */
7849 static basic_istream_wchar* basic_istream_short_ctor_init(basic_istream_wchar *this,
7850         basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool noinit, MSVCP_bool virt_init)
7851 {
7852     basic_istream_wchar_ctor_init(this, strbuf, isstd, noinit, virt_init);
7853     basic_istream_wchar_get_basic_ios(this)->base.vtable = &MSVCP_basic_istream_short_vtable;
7854     return this;
7855 }
7856
7857 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */
7858 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@_N@Z */
7859 static basic_istream_wchar* basic_istream_wchar_ctor(basic_istream_wchar *this,
7860         basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init)
7861 {
7862     return basic_istream_wchar_ctor_init(this, strbuf, isstd, FALSE, virt_init);
7863 }
7864
7865 /* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z */
7866 /* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@_N@Z */
7867 DEFINE_THISCALL_WRAPPER(basic_istream_short_ctor, 16)
7868 basic_istream_wchar* __thiscall basic_istream_short_ctor(basic_istream_wchar *this,
7869         basic_streambuf_wchar *strbuf, MSVCP_bool isstd, MSVCP_bool virt_init)
7870 {
7871     return basic_istream_short_ctor_init(this, strbuf, isstd, FALSE, virt_init);
7872 }
7873
7874 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE@W4_Uninitialized@1@@Z */
7875 /* ??0?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA@W4_Uninitialized@1@@Z */
7876 static basic_istream_wchar* basic_istream_wchar_ctor_uninitialized(
7877         basic_istream_wchar *this, int uninitialized, MSVCP_bool virt_init)
7878 {
7879     basic_ios_wchar *base;
7880
7881     TRACE("(%p %d %d)\n", this, uninitialized, virt_init);
7882
7883     if(virt_init) {
7884         this->vbtable = basic_istream_wchar_vbtable;
7885         base = basic_istream_wchar_get_basic_ios(this);
7886         basic_ios_wchar_ctor(base);
7887     }else {
7888         base = basic_istream_wchar_get_basic_ios(this);
7889     }
7890
7891     base->base.vtable = &MSVCP_basic_istream_wchar_vtable;
7892     ios_base_Addstd(&base->base);
7893     return this;
7894 }
7895
7896 /* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@@Z */
7897 /* ??0?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA@W4_Uninitialized@1@@Z */
7898 DEFINE_THISCALL_WRAPPER(basic_istream_short_ctor_uninitialized, 12)
7899 basic_istream_wchar* __thiscall basic_istream_short_ctor_uninitialized(
7900         basic_istream_wchar *this, int uninitialized, MSVCP_bool virt_init)
7901 {
7902     basic_istream_wchar_ctor_uninitialized(this, uninitialized, virt_init);
7903     basic_istream_wchar_get_basic_ios(this)->base.vtable = &MSVCP_basic_istream_short_vtable;
7904     return this;
7905 }
7906
7907 /* ??1?$basic_istream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
7908 /* ??1?$basic_istream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
7909 /* ??1?$basic_istream@GU?$char_traits@G@std@@@std@@UAE@XZ */
7910 /* ??1?$basic_istream@GU?$char_traits@G@std@@@std@@UEAA@XZ */
7911 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_dtor, 4)
7912 void __thiscall basic_istream_wchar_dtor(basic_ios_wchar *base)
7913 {
7914     basic_istream_wchar *this = basic_istream_wchar_from_basic_ios(base);
7915
7916     /* don't destroy virtual base here */
7917     TRACE("(%p)\n", this);
7918 }
7919
7920 /* ??_D?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
7921 /* ??_D?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
7922 /* ??_D?$basic_istream@GU?$char_traits@G@std@@@std@@QAEXXZ */
7923 /* ??_D?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
7924 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_vbase_dtor, 4)
7925 void __thiscall basic_istream_wchar_vbase_dtor(basic_istream_wchar *this)
7926 {
7927     TRACE("(%p)\n", this);
7928     basic_istream_wchar_dtor(basic_istream_wchar_to_basic_ios(this));
7929     basic_ios_wchar_dtor(basic_istream_wchar_get_basic_ios(this));
7930 }
7931
7932 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_vector_dtor, 8)
7933 basic_istream_wchar* __thiscall basic_istream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags)
7934 {
7935     basic_istream_wchar *this = basic_istream_wchar_from_basic_ios(base);
7936
7937     TRACE("(%p %x)\n", this, flags);
7938
7939     if(flags & 2) {
7940         /* we have an array, with the number of elements stored before the first object */
7941         INT_PTR i, *ptr = (INT_PTR *)this-1;
7942
7943         for(i=*ptr-1; i>=0; i--)
7944             basic_istream_wchar_vbase_dtor(this+i);
7945         MSVCRT_operator_delete(ptr);
7946     } else {
7947         basic_istream_wchar_vbase_dtor(this);
7948         if(flags & 1)
7949             MSVCRT_operator_delete(this);
7950     }
7951
7952     return this;
7953 }
7954
7955 /* ?_Ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE_N_N@Z */
7956 /* ?_Ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_N_N@Z */
7957 /* ?_Ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE_N_N@Z */
7958 /* ?_Ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_N_N@Z */
7959 static MSVCP_bool basic_istream_wchar__Ipfx(basic_istream_wchar *this, MSVCP_bool noskip)
7960 {
7961     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
7962
7963     TRACE("(%p %d)\n", this, noskip);
7964
7965     if(ios_base_good(&base->base)) {
7966         if(basic_ios_wchar_tie_get(base))
7967             basic_ostream_wchar_flush(basic_ios_wchar_tie_get(base));
7968
7969         if(!noskip && (ios_base_flags_get(&base->base) & FMTFLAG_skipws)) {
7970             basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
7971             const ctype_wchar *ctype = ctype_wchar_use_facet(&base->strbuf->loc);
7972             int ch;
7973
7974             for(ch = basic_streambuf_wchar_sgetc(strbuf); ;
7975                     ch = basic_streambuf_wchar_snextc(strbuf)) {
7976                 if(ch==WEOF || !ctype_wchar_is_ch(ctype, _SPACE|_BLANK, ch))
7977                     break;
7978             }
7979         }
7980     }
7981
7982     if(!ios_base_good(&base->base)) {
7983         basic_ios_wchar_setstate(base, IOSTATE_failbit);
7984         return FALSE;
7985     }
7986     return TRUE;
7987 }
7988
7989 /* ?ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE_N_N@Z */
7990 /* ?ipfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_N_N@Z */
7991 /* ?ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE_N_N@Z */
7992 /* ?ipfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_N_N@Z */
7993 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ipfx, 8)
7994 MSVCP_bool __thiscall basic_istream_wchar_ipfx(basic_istream_wchar *this, MSVCP_bool noskip)
7995 {
7996     return basic_istream_wchar__Ipfx(this, noskip);
7997 }
7998
7999 /* ?isfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
8000 /* ?isfx@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
8001 /* ?isfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEXXZ */
8002 /* ?isfx@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
8003 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_isfx, 4)
8004 void __thiscall basic_istream_wchar_isfx(basic_istream_wchar *this)
8005 {
8006     TRACE("(%p)\n", this);
8007 }
8008
8009 static BOOL basic_istream_wchar_sentry_create(basic_istream_wchar *istr, MSVCP_bool noskip)
8010 {
8011     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istr);
8012
8013     if(basic_ios_wchar_rdbuf_get(base))
8014         basic_streambuf_wchar__Lock(base->strbuf);
8015
8016     return basic_istream_wchar_ipfx(istr, noskip);
8017 }
8018
8019 static void basic_istream_wchar_sentry_destroy(basic_istream_wchar *istr)
8020 {
8021     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istr);
8022
8023     if(basic_ios_wchar_rdbuf_get(base))
8024         basic_streambuf_wchar__Unlock(base->strbuf);
8025 }
8026
8027 /* ?gcount@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QBEHXZ */
8028 /* ?gcount@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEBA_JXZ */
8029 /* ?gcount@?$basic_istream@GU?$char_traits@G@std@@@std@@QBEHXZ */
8030 /* ?gcount@?$basic_istream@GU?$char_traits@G@std@@@std@@QEBA_JXZ */
8031 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_gcount, 4)
8032 int __thiscall basic_istream_wchar_gcount(const basic_istream_wchar *this)
8033 {
8034     TRACE("(%p)\n", this);
8035     return this->count;
8036 }
8037
8038 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
8039 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
8040 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEGXZ */
8041 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAGXZ */
8042 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get, 4)
8043 unsigned short __thiscall basic_istream_wchar_get(basic_istream_wchar *this)
8044 {
8045     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8046     int ret;
8047
8048     TRACE("(%p)\n", this);
8049
8050     this->count = 0;
8051
8052     if(!basic_istream_wchar_sentry_create(this, TRUE)) {
8053         basic_istream_wchar_sentry_destroy(this);
8054         return WEOF;
8055     }
8056
8057     ret = basic_streambuf_wchar_sbumpc(basic_ios_wchar_rdbuf_get(base));
8058     basic_istream_wchar_sentry_destroy(this);
8059     if(ret == WEOF)
8060         basic_ios_wchar_setstate(base, IOSTATE_eofbit|IOSTATE_failbit);
8061     else
8062         this->count++;
8063
8064     return ret;
8065 }
8066
8067 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AA_W@Z */
8068 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEA_W@Z */
8069 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAG@Z */
8070 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAG@Z */
8071 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_ch, 8)
8072 basic_istream_wchar* __thiscall basic_istream_wchar_get_ch(basic_istream_wchar *this, wchar_t *ch)
8073 {
8074     unsigned short ret;
8075
8076     TRACE("(%p %p)\n", this, ch);
8077
8078     ret = basic_istream_wchar_get(this);
8079     if(ret != WEOF)
8080         *ch = (wchar_t)ret;
8081     return this;
8082 }
8083
8084 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH_W@Z */
8085 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J_W@Z */
8086 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGHG@Z */
8087 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_JG@Z */
8088 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_str_delim, 16)
8089 basic_istream_wchar* __thiscall basic_istream_wchar_get_str_delim(basic_istream_wchar *this, wchar_t *str, streamsize count, wchar_t delim)
8090 {
8091     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8092     unsigned short ch = delim;
8093
8094     TRACE("(%p %p %ld %c)\n", this, str, count, delim);
8095
8096     this->count = 0;
8097
8098     if(basic_istream_wchar_sentry_create(this, TRUE)) {
8099         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8100
8101         for(ch = basic_streambuf_wchar_sgetc(strbuf); count>1;
8102                 ch = basic_streambuf_wchar_snextc(strbuf)) {
8103             if(ch==WEOF || ch==delim)
8104                 break;
8105
8106             *str++ = ch;
8107             this->count++;
8108             count--;
8109         }
8110     }
8111     basic_istream_wchar_sentry_destroy(this);
8112
8113     basic_ios_wchar_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) |
8114             (ch==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit));
8115     if(count > 0)
8116         *str = 0;
8117     return this;
8118 }
8119
8120 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH@Z */
8121 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z */
8122 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGH@Z */
8123 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z */
8124 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_str, 12)
8125 basic_istream_wchar* __thiscall basic_istream_wchar_get_str(basic_istream_wchar *this, wchar_t *str, streamsize count)
8126 {
8127     return basic_istream_wchar_get_str_delim(this, str, count, '\n');
8128 }
8129
8130 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_W@Z */
8131 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@_W@Z */
8132 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAV?$basic_streambuf@GU?$char_traits@G@std@@@2@G@Z */
8133 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@G@Z */
8134 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_streambuf_delim, 12)
8135 basic_istream_wchar* __thiscall basic_istream_wchar_get_streambuf_delim(basic_istream_wchar *this, basic_streambuf_wchar *strbuf, wchar_t delim)
8136 {
8137     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8138     unsigned short ch = delim;
8139
8140     TRACE("(%p %p %c)\n", this, strbuf, delim);
8141
8142     this->count = 0;
8143
8144     if(basic_istream_wchar_sentry_create(this, TRUE)) {
8145         basic_streambuf_wchar *strbuf_read = basic_ios_wchar_rdbuf_get(base);
8146
8147         for(ch = basic_streambuf_wchar_sgetc(strbuf_read); ;
8148                 ch = basic_streambuf_wchar_snextc(strbuf_read)) {
8149             if(ch==WEOF || ch==delim)
8150                 break;
8151
8152             if(basic_streambuf_wchar_sputc(strbuf, ch) == WEOF)
8153                 break;
8154             this->count++;
8155         }
8156     }
8157     basic_istream_wchar_sentry_destroy(this);
8158
8159     basic_ios_wchar_setstate(base, (!this->count ? IOSTATE_failbit : IOSTATE_goodbit) |
8160             (ch==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit));
8161     return this;
8162 }
8163
8164 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@AAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z */
8165 /* ?get@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@2@@Z */
8166 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@AAV?$basic_streambuf@GU?$char_traits@G@std@@@2@@Z */
8167 /* ?get@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@AEAV?$basic_streambuf@GU?$char_traits@G@std@@@2@@Z */
8168 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_get_streambuf, 8)
8169 basic_istream_wchar* __thiscall basic_istream_wchar_get_streambuf(basic_istream_wchar *this, basic_streambuf_wchar *strbuf)
8170 {
8171     return basic_istream_wchar_get_streambuf_delim(this, strbuf, '\n');
8172 }
8173
8174 /* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH_W@Z */
8175 /* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J_W@Z */
8176 /* ?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGHG@Z */
8177 /* ?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_JG@Z */
8178 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_getline_delim, 16)
8179 basic_istream_wchar* __thiscall basic_istream_wchar_getline_delim(basic_istream_wchar *this, wchar_t *str, streamsize count, wchar_t delim)
8180 {
8181     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8182     unsigned short ch = delim;
8183
8184     TRACE("(%p %p %ld %c)\n", this, str, count, delim);
8185
8186     this->count = 0;
8187
8188     if(basic_istream_wchar_sentry_create(this, TRUE) && count>0) {
8189         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8190
8191         while(count > 1) {
8192             ch = basic_streambuf_wchar_sbumpc(strbuf);
8193
8194             if(ch==WEOF || ch==delim)
8195                 break;
8196
8197             *str++ = ch;
8198             this->count++;
8199             count--;
8200         }
8201
8202         if(ch == delim)
8203             this->count++;
8204         else if(ch != WEOF) {
8205             ch = basic_streambuf_wchar_sgetc(strbuf);
8206
8207             if(ch == delim) {
8208                 basic_streambuf_wchar__Gninc(strbuf);
8209                 this->count++;
8210             }
8211         }
8212     }
8213     basic_istream_wchar_sentry_destroy(this);
8214
8215     basic_ios_wchar_setstate(base, (ch==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit) |
8216             (!this->count || (ch!=delim && ch!=WEOF) ? IOSTATE_failbit : IOSTATE_goodbit));
8217     if(count > 0)
8218         *str = 0;
8219     return this;
8220 }
8221
8222 /* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH@Z */
8223 /* ?getline@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z */
8224 /* ?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGH@Z */
8225 /* ?getline@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z */
8226 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_getline, 12)
8227 basic_istream_wchar* __thiscall basic_istream_wchar_getline(basic_istream_wchar *this, wchar_t *str, streamsize count)
8228 {
8229     return basic_istream_wchar_getline_delim(this, str, count, '\n');
8230 }
8231
8232 /* ?ignore@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@HG@Z */
8233 /* ?ignore@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_JG@Z */
8234 /* ?ignore@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@HG@Z */
8235 /* ?ignore@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JG@Z */
8236 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_ignore, 12)
8237 basic_istream_wchar* __thiscall basic_istream_wchar_ignore(basic_istream_wchar *this, streamsize count, unsigned short delim)
8238 {
8239     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8240     unsigned short ch = delim;
8241     unsigned int state;
8242
8243     TRACE("(%p %ld %d)\n", this, count, delim);
8244
8245     this->count = 0;
8246
8247     if(basic_istream_wchar_sentry_create(this, TRUE)) {
8248         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8249         state = IOSTATE_goodbit;
8250
8251         while(count > 0) {
8252             ch = basic_streambuf_wchar_sbumpc(strbuf);
8253
8254             if(ch==WEOF) {
8255                 state = IOSTATE_eofbit;
8256                 break;
8257             }
8258
8259             if(ch==delim)
8260                 break;
8261
8262             this->count++;
8263             if(count != INT_MAX)
8264                 count--;
8265         }
8266     }else
8267         state = IOSTATE_failbit;
8268     basic_istream_wchar_sentry_destroy(this);
8269
8270     basic_ios_wchar_setstate(base, state);
8271     return this;
8272 }
8273
8274 /* ?ws@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@1@AAV21@@Z */
8275 /* ?ws@std@@YAAEAV?$basic_istream@_WU?$char_traits@_W@std@@@1@AEAV21@@Z */
8276 /* ?ws@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@1@AAV21@@Z */
8277 /* ?ws@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@1@AEAV21@@Z */
8278 basic_istream_wchar* __cdecl ws_basic_istream_wchar(basic_istream_wchar *istream)
8279 {
8280     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istream);
8281     unsigned short ch = '\n';
8282
8283     TRACE("(%p)\n", istream);
8284
8285     if(basic_istream_wchar_sentry_create(istream, TRUE)) {
8286         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8287         const ctype_wchar *ctype = ctype_wchar_use_facet(&strbuf->loc);
8288
8289         for(ch = basic_streambuf_wchar_sgetc(strbuf); ctype_wchar_is_ch(ctype, _SPACE, ch);
8290                 ch = basic_streambuf_wchar_snextc(strbuf)) {
8291             if(ch == WEOF)
8292                 break;
8293         }
8294     }
8295     basic_istream_wchar_sentry_destroy(istream);
8296
8297     if(ch == WEOF)
8298         basic_ios_wchar_setstate(base, IOSTATE_eofbit);
8299     return istream;
8300 }
8301
8302 /* ?peek@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEGXZ */
8303 /* ?peek@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAGXZ */
8304 /* ?peek@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEGXZ */
8305 /* ?peek@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAGXZ */
8306 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_peek, 4)
8307 unsigned short __thiscall basic_istream_wchar_peek(basic_istream_wchar *this)
8308 {
8309     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8310     unsigned short ret = WEOF;
8311
8312     TRACE("(%p)\n", this);
8313
8314     this->count = 0;
8315
8316     if(basic_istream_wchar_sentry_create(this, TRUE))
8317         ret = basic_streambuf_wchar_sgetc(basic_ios_wchar_rdbuf_get(base));
8318     basic_istream_wchar_sentry_destroy(this);
8319
8320     if (ret == WEOF)
8321         basic_ios_wchar_setstate(base, IOSTATE_eofbit);
8322
8323     return ret;
8324 }
8325
8326 /* ?_Read_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WIH@Z */
8327 /* ?_Read_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_K_J@Z */
8328 /* ?_Read_s@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGIH@Z */
8329 /* ?_Read_s@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_K_J@Z */
8330 static basic_istream_wchar* basic_istream_wchar__Read_s(basic_istream_wchar *this, wchar_t *str, MSVCP_size_t size, streamsize count)
8331 {
8332     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8333     IOSB_iostate state = IOSTATE_goodbit;
8334
8335     TRACE("(%p %p %lu %ld)\n", this, str, size, count);
8336
8337     if(basic_istream_wchar_sentry_create(this, TRUE)) {
8338         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8339
8340         this->count = basic_streambuf_wchar__Sgetn_s(strbuf, str, size, count);
8341         if(this->count != count)
8342             state |= IOSTATE_failbit | IOSTATE_eofbit;
8343     }else {
8344         this->count = 0;
8345     }
8346     basic_istream_wchar_sentry_destroy(this);
8347
8348     basic_ios_wchar_setstate(base, state);
8349     return this;
8350 }
8351
8352 /* ?read@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@PA_WH@Z */
8353 /* ?read@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@PEA_W_J@Z */
8354 /* ?read@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@PAGH@Z */
8355 /* ?read@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@PEAG_J@Z */
8356 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read, 12)
8357 basic_istream_wchar* __thiscall basic_istream_wchar_read(basic_istream_wchar *this, wchar_t *str, streamsize count)
8358 {
8359     return basic_istream_wchar__Read_s(this, str, count, count);
8360 }
8361
8362 /* ?_Readsome_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEHPA_WIH@Z */
8363 /* ?_Readsome_s@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_K_J@Z */
8364 /* ?_Readsome_s@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEHPAGIH@Z */
8365 /* ?_Readsome_s@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_K_J@Z */
8366 static streamsize basic_istream_wchar__Readsome_s(basic_istream_wchar *this, wchar_t *str, MSVCP_size_t size, streamsize count)
8367 {
8368     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8369     IOSB_iostate state = IOSTATE_goodbit;
8370
8371     TRACE("(%p %p %lu %ld)\n", this, str, size, count);
8372
8373     this->count = 0;
8374
8375     if(basic_istream_wchar_sentry_create(this, TRUE)) {
8376         streamsize avail = basic_streambuf_wchar_in_avail(basic_ios_wchar_rdbuf_get(base));
8377         if(avail > count)
8378             avail = count;
8379
8380         if(avail == -1)
8381             state |= IOSTATE_eofbit;
8382         else if(avail > 0)
8383             basic_istream_wchar__Read_s(this, str, size, avail);
8384     }else {
8385         state |= IOSTATE_failbit;
8386     }
8387     basic_istream_wchar_sentry_destroy(this);
8388
8389     basic_ios_wchar_setstate(base, state);
8390     return this->count;
8391 }
8392
8393 /* ?readsome@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEHPA_WH@Z */
8394 /* ?readsome@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA_JPEA_W_J@Z */
8395 /* ?readsome@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEHPAGH@Z */
8396 /* ?readsome@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA_JPEAG_J@Z */
8397 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_readsome, 12)
8398 streamsize __thiscall basic_istream_wchar_readsome(basic_istream_wchar *this, wchar_t *str, streamsize count)
8399 {
8400     return basic_istream_wchar__Readsome_s(this, str, count, count);
8401 }
8402
8403 /* ?putback@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@_W@Z */
8404 /* ?putback@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@_W@Z */
8405 /* ?putback@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@G@Z */
8406 /* ?putback@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@G@Z */
8407 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_putback, 8)
8408 basic_istream_wchar* __thiscall basic_istream_wchar_putback(basic_istream_wchar *this, wchar_t ch)
8409 {
8410     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8411     IOSB_iostate state = IOSTATE_goodbit;
8412
8413     TRACE("(%p %c)\n", this, ch);
8414
8415     this->count = 0;
8416
8417     if(basic_istream_wchar_sentry_create(this, TRUE)) {
8418         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8419
8420         if(!ios_base_good(&base->base))
8421             state |= IOSTATE_failbit;
8422         else if(!strbuf || basic_streambuf_wchar_sputbackc(strbuf, ch)==WEOF)
8423             state |= IOSTATE_badbit;
8424     }
8425     basic_istream_wchar_sentry_destroy(this);
8426
8427     basic_ios_wchar_setstate(base, state);
8428     return this;
8429 }
8430
8431 /* ?unget@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@XZ */
8432 /* ?unget@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@XZ */
8433 /* ?unget@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@XZ */
8434 /* ?unget@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@XZ */
8435 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_unget, 4)
8436 basic_istream_wchar* __thiscall basic_istream_wchar_unget(basic_istream_wchar *this)
8437 {
8438     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8439     IOSB_iostate state = IOSTATE_goodbit;
8440
8441     TRACE("(%p)\n", this);
8442
8443     this->count = 0;
8444
8445     if(basic_istream_wchar_sentry_create(this, TRUE)) {
8446         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8447
8448         if(!ios_base_good(&base->base))
8449             state |= IOSTATE_failbit;
8450         else if(!strbuf || basic_streambuf_wchar_sungetc(strbuf)==WEOF)
8451             state |= IOSTATE_badbit;
8452     }
8453     basic_istream_wchar_sentry_destroy(this);
8454
8455     basic_ios_wchar_setstate(base, state);
8456     return this;
8457 }
8458
8459 /* ?sync@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEHXZ */
8460 /* ?sync@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAHXZ */
8461 /* ?sync@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEHXZ */
8462 /* ?sync@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAHXZ */
8463 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_sync, 4)
8464 int __thiscall basic_istream_wchar_sync(basic_istream_wchar *this)
8465 {
8466     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8467     basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8468
8469     TRACE("(%p)\n", this);
8470
8471     if(!strbuf)
8472         return -1;
8473
8474     if(basic_istream_wchar_sentry_create(this, TRUE)) {
8475         if(basic_streambuf_wchar_pubsync(strbuf) != -1) {
8476             basic_istream_wchar_sentry_destroy(this);
8477             return 0;
8478         }
8479     }
8480     basic_istream_wchar_sentry_destroy(this);
8481
8482     basic_ios_wchar_setstate(base, IOSTATE_badbit);
8483     return -1;
8484 }
8485
8486 /* ?tellg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAE?AV?$fpos@H@2@XZ */
8487 /* ?tellg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
8488 /* ?tellg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAE?AV?$fpos@H@2@XZ */
8489 /* ?tellg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAA?AV?$fpos@H@2@XZ */
8490 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_tellg, 8)
8491 fpos_int* __thiscall basic_istream_wchar_tellg(basic_istream_wchar *this, fpos_int *ret)
8492 {
8493     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8494
8495     TRACE("(%p %p)\n", this, ret);
8496
8497     if(ios_base_fail(&base->base)) {
8498         ret->off = -1;
8499         ret->pos = 0;
8500         ret->state = 0;
8501         return ret;
8502     }
8503
8504     basic_streambuf_wchar_pubseekoff(basic_ios_wchar_rdbuf_get(base),
8505             ret, 0, SEEKDIR_cur, OPENMODE_in);
8506     if(ret->off==-1 && ret->pos==0 && ret->state==0)
8507         basic_ios_wchar_setstate(base, IOSTATE_failbit);
8508
8509     return ret;
8510 }
8511
8512 /* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@JW4seekdir@ios_base@2@@Z */
8513 /* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@_JW4seekdir@ios_base@2@@Z */
8514 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_seekg, 12)
8515 basic_istream_wchar* __thiscall basic_istream_wchar_seekg(basic_istream_wchar *this, streamoff off, int dir)
8516 {
8517     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8518
8519     TRACE("(%p %ld %d)\n", this, off, dir);
8520
8521     if(!ios_base_fail(&base->base)) {
8522         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8523         fpos_int ret;
8524
8525         basic_streambuf_wchar_pubseekoff(strbuf, &ret, off, dir, OPENMODE_in);
8526     }
8527
8528     return this;
8529 }
8530
8531 /* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
8532 /* ?seekg@?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
8533 /* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z */
8534 /* ?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z */
8535 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_seekg_fpos, 28)
8536 basic_istream_wchar* __thiscall basic_istream_wchar_seekg_fpos(basic_istream_wchar *this, fpos_int pos)
8537 {
8538     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8539
8540     TRACE("(%p %s)\n", this, debugstr_fpos_int(&pos));
8541
8542     if(!ios_base_fail(&base->base)) {
8543         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8544         fpos_int ret;
8545
8546         basic_streambuf_wchar_pubseekpos(strbuf, &ret, pos, OPENMODE_in);
8547     }
8548
8549     return this;
8550 }
8551
8552 static basic_istream_wchar* basic_istream_read_short(basic_istream_wchar *this, short *v, const num_get *numget)
8553 {
8554     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8555     int state = IOSTATE_goodbit;
8556
8557     TRACE("(%p %p)\n", this, v);
8558
8559     if(basic_istream_wchar_sentry_create(this, FALSE)) {
8560         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8561         istreambuf_iterator_wchar first={0}, last={0};
8562         LONG tmp;
8563
8564         first.strbuf = strbuf;
8565         num_get_wchar_get_long(numget, &last, first, last, &base->base, &state, &tmp);
8566
8567         if(!(state&IOSTATE_failbit) && tmp==(LONG)((short)tmp))
8568             *v = tmp;
8569         else
8570             state |= IOSTATE_failbit;
8571     }
8572     basic_istream_wchar_sentry_destroy(this);
8573
8574     basic_ios_wchar_setstate(base, state);
8575     return this;
8576 }
8577
8578 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAF@Z */
8579 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAF@Z */
8580 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_short, 8)
8581 basic_istream_wchar* __thiscall basic_istream_short_read_short(basic_istream_wchar *this, short *v)
8582 {
8583     return basic_istream_read_short(this, v, num_get_short_use_facet(
8584                 &basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
8585 }
8586
8587 static basic_istream_wchar* basic_istream_read_int(basic_istream_wchar *this, int *v, const num_get *numget)
8588 {
8589     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8590     int state = IOSTATE_goodbit;
8591
8592     TRACE("(%p %p)\n", this, v);
8593
8594     if(basic_istream_wchar_sentry_create(this, FALSE)) {
8595         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8596         istreambuf_iterator_wchar first={0}, last={0};
8597
8598         first.strbuf = strbuf;
8599         num_get_wchar_get_long(numget, &last, first, last, &base->base, &state, v);
8600     }
8601     basic_istream_wchar_sentry_destroy(this);
8602
8603     basic_ios_wchar_setstate(base, state);
8604     return this;
8605 }
8606
8607 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAH@Z */
8608 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAH@Z */
8609 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_int, 8)
8610 basic_istream_wchar* __thiscall basic_istream_short_read_int(basic_istream_wchar *this, int *v)
8611 {
8612     return basic_istream_read_int(this, v, num_get_short_use_facet(
8613                 &basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
8614 }
8615
8616 static basic_istream_wchar* basic_istream_read_uint(basic_istream_wchar *this, unsigned int *v, const num_get *numget)
8617 {
8618     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8619     int state = IOSTATE_goodbit;
8620
8621     TRACE("(%p %p)\n", this, v);
8622
8623     if(basic_istream_wchar_sentry_create(this, FALSE)) {
8624         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8625         istreambuf_iterator_wchar first={0}, last={0};
8626
8627         first.strbuf = strbuf;
8628         num_get_wchar_get_uint(numget, &last, first, last, &base->base, &state, v);
8629     }
8630     basic_istream_wchar_sentry_destroy(this);
8631
8632     basic_ios_wchar_setstate(base, state);
8633     return this;
8634 }
8635
8636 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAI@Z */
8637 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAI@Z */
8638 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_uint, 8)
8639 basic_istream_wchar* __thiscall basic_istream_short_read_uint(basic_istream_wchar *this, unsigned int *v)
8640 {
8641     return basic_istream_read_uint(this, v, num_get_short_use_facet(
8642                 &basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
8643 }
8644
8645 static basic_istream_wchar* basic_istream_read_long(basic_istream_wchar *this, LONG *v, const num_get *numget)
8646 {
8647     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8648     int state = IOSTATE_goodbit;
8649
8650     TRACE("(%p %p)\n", this, v);
8651
8652     if(basic_istream_wchar_sentry_create(this, FALSE)) {
8653         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8654         istreambuf_iterator_wchar first={0}, last={0};
8655
8656         first.strbuf = strbuf;
8657         num_get_wchar_get_long(numget, &last, first, last, &base->base, &state, v);
8658     }
8659     basic_istream_wchar_sentry_destroy(this);
8660
8661     basic_ios_wchar_setstate(base, state);
8662     return this;
8663 }
8664
8665 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@AAJ@Z */
8666 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@AEAJ@Z */
8667 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_long, 8)
8668 basic_istream_wchar* __thiscall basic_istream_short_read_long(basic_istream_wchar *this, LONG *v)
8669 {
8670     return basic_istream_read_long(this, v, num_get_short_use_facet(
8671                 &basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
8672 }
8673
8674 static basic_istream_wchar* basic_istream_read_ulong(basic_istream_wchar *this, ULONG *v, const num_get *numget)
8675 {
8676     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8677     int state = IOSTATE_goodbit;
8678
8679     TRACE("(%p %p)\n", this, v);
8680
8681     if(basic_istream_wchar_sentry_create(this, FALSE)) {
8682         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8683         istreambuf_iterator_wchar first={0}, last={0};
8684
8685         first.strbuf = strbuf;
8686         num_get_wchar_get_ulong(numget, &last, first, last, &base->base, &state, v);
8687     }
8688     basic_istream_wchar_sentry_destroy(this);
8689
8690     basic_ios_wchar_setstate(base, state);
8691     return this;
8692 }
8693
8694 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAK@Z */
8695 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAK@Z */
8696 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_ulong, 8)
8697 basic_istream_wchar* __thiscall basic_istream_short_read_ulong(basic_istream_wchar *this, ULONG *v)
8698 {
8699     return basic_istream_read_ulong(this, v, num_get_short_use_facet(
8700                 &basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
8701 }
8702
8703 static basic_istream_wchar* basic_istream_read_float(basic_istream_wchar *this, float *v, const num_get *numget)
8704 {
8705     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8706     int state = IOSTATE_goodbit;
8707
8708     TRACE("(%p %p)\n", this, v);
8709
8710     if(basic_istream_wchar_sentry_create(this, FALSE)) {
8711         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8712         istreambuf_iterator_wchar first={0}, last={0};
8713
8714         first.strbuf = strbuf;
8715         num_get_wchar_get_float(numget, &last, first, last, &base->base, &state, v);
8716     }
8717     basic_istream_wchar_sentry_destroy(this);
8718
8719     basic_ios_wchar_setstate(base, state);
8720     return this;
8721 }
8722
8723 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAM@Z */
8724 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAM@Z */
8725 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_float, 8)
8726 basic_istream_wchar* __thiscall basic_istream_short_read_float(basic_istream_wchar *this, float *v)
8727 {
8728     return basic_istream_read_float(this, v, num_get_short_use_facet(
8729                 &basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
8730 }
8731
8732 static basic_istream_wchar* basic_istream_read_double(basic_istream_wchar *this, double *v, const num_get *numget)
8733 {
8734     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8735     int state = IOSTATE_goodbit;
8736
8737     TRACE("(%p %p)\n", this, v);
8738
8739     if(basic_istream_wchar_sentry_create(this, FALSE)) {
8740         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8741         istreambuf_iterator_wchar first={0}, last={0};
8742
8743         first.strbuf = strbuf;
8744         num_get_wchar_get_double(numget, &last, first, last, &base->base, &state, v);
8745     }
8746     basic_istream_wchar_sentry_destroy(this);
8747
8748     basic_ios_wchar_setstate(base, state);
8749     return this;
8750 }
8751
8752 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAN@Z */
8753 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAN@Z */
8754 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_double, 8)
8755 basic_istream_wchar* __thiscall basic_istream_short_read_double(basic_istream_wchar *this, double *v)
8756 {
8757     return basic_istream_read_double(this, v, num_get_short_use_facet(
8758                 &basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
8759 }
8760
8761 static basic_istream_wchar* basic_istream_read_ldouble(basic_istream_wchar *this, double *v, const num_get *numget)
8762 {
8763     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8764     int state = IOSTATE_goodbit;
8765
8766     TRACE("(%p %p)\n", this, v);
8767
8768     if(basic_istream_wchar_sentry_create(this, FALSE)) {
8769         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8770         istreambuf_iterator_wchar first={0}, last={0};
8771
8772         first.strbuf = strbuf;
8773         num_get_wchar_get_ldouble(numget, &last, first, last, &base->base, &state, v);
8774     }
8775     basic_istream_wchar_sentry_destroy(this);
8776
8777     basic_ios_wchar_setstate(base, state);
8778     return this;
8779 }
8780
8781 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAO@Z */
8782 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAO@Z */
8783 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_ldouble, 8)
8784 basic_istream_wchar* __thiscall basic_istream_short_read_ldouble(basic_istream_wchar *this, double *v)
8785 {
8786     return basic_istream_read_ldouble(this, v, num_get_short_use_facet(
8787                 &basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
8788 }
8789
8790 static basic_istream_wchar* basic_istream_read_ptr(basic_istream_wchar *this, void **v, const num_get *numget)
8791 {
8792     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8793     int state = IOSTATE_goodbit;
8794
8795     TRACE("(%p %p)\n", this, v);
8796
8797     if(basic_istream_wchar_sentry_create(this, FALSE)) {
8798         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8799         istreambuf_iterator_wchar first={0}, last={0};
8800
8801         first.strbuf = strbuf;
8802         num_get_wchar_get_void(numget, &last, first, last, &base->base, &state, v);
8803     }
8804     basic_istream_wchar_sentry_destroy(this);
8805
8806     basic_ios_wchar_setstate(base, state);
8807     return this;
8808 }
8809
8810 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AAPAX@Z */
8811 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEAPEAX@Z */
8812 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_ptr, 8)
8813 basic_istream_wchar* __thiscall basic_istream_short_read_ptr(basic_istream_wchar *this, void **v)
8814 {
8815     return basic_istream_read_ptr(this, v, num_get_short_use_facet(
8816                 &basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
8817 }
8818
8819 static basic_istream_wchar* basic_istream_read_int64(basic_istream_wchar *this, __int64 *v, const num_get *numget)
8820 {
8821     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8822     int state = IOSTATE_goodbit;
8823
8824     TRACE("(%p %p)\n", this, v);
8825
8826     if(basic_istream_wchar_sentry_create(this, FALSE)) {
8827         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8828         istreambuf_iterator_wchar first={0}, last={0};
8829
8830         first.strbuf = strbuf;
8831         num_get_wchar_get_int64(numget, &last, first, last, &base->base, &state, v);
8832     }
8833     basic_istream_wchar_sentry_destroy(this);
8834
8835     basic_ios_wchar_setstate(base, state);
8836     return this;
8837 }
8838
8839 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_J@Z */
8840 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_J@Z */
8841 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_int64, 8)
8842 basic_istream_wchar* __thiscall basic_istream_short_read_int64(basic_istream_wchar *this, __int64 *v)
8843 {
8844     return basic_istream_read_int64(this, v, num_get_short_use_facet(
8845                 &basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
8846 }
8847
8848 static basic_istream_wchar* basic_istream_read_uint64(basic_istream_wchar *this, unsigned __int64 *v, const num_get *numget)
8849 {
8850     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8851     int state = IOSTATE_goodbit;
8852
8853     TRACE("(%p %p)\n", this, v);
8854
8855     if(basic_istream_wchar_sentry_create(this, FALSE)) {
8856         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8857         istreambuf_iterator_wchar first={0}, last={0};
8858
8859         first.strbuf = strbuf;
8860         num_get_wchar_get_uint64(numget, &last, first, last, &base->base, &state, v);
8861     }
8862     basic_istream_wchar_sentry_destroy(this);
8863
8864     basic_ios_wchar_setstate(base, state);
8865     return this;
8866 }
8867
8868 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_K@Z */
8869 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_K@Z */
8870 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_uint64, 8)
8871 basic_istream_wchar* __thiscall basic_istream_short_read_uint64(basic_istream_wchar *this, unsigned __int64 *v)
8872 {
8873     return basic_istream_read_uint64(this, v, num_get_short_use_facet(
8874                 &basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
8875 }
8876
8877 static basic_istream_wchar* basic_istream_read_bool(basic_istream_wchar *this, MSVCP_bool *v, const num_get *numget)
8878 {
8879     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
8880     int state = IOSTATE_goodbit;
8881
8882     TRACE("(%p %p)\n", this, v);
8883
8884     if(basic_istream_wchar_sentry_create(this, FALSE)) {
8885         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8886         istreambuf_iterator_wchar first={0}, last={0};
8887
8888         first.strbuf = strbuf;
8889         num_get_wchar_get_bool(numget, &last, first, last, &base->base, &state, v);
8890     }
8891     basic_istream_wchar_sentry_destroy(this);
8892
8893     basic_ios_wchar_setstate(base, state);
8894     return this;
8895 }
8896
8897 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@AA_N@Z */
8898 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@AEA_N@Z */
8899 DEFINE_THISCALL_WRAPPER(basic_istream_short_read_bool, 8)
8900 basic_istream_wchar* __thiscall basic_istream_short_read_bool(basic_istream_wchar *this, MSVCP_bool *v)
8901 {
8902     return basic_istream_read_bool(this, v, num_get_short_use_facet(
8903                 &basic_istream_wchar_get_basic_ios(this)->strbuf->loc));
8904 }
8905
8906 /* ??$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 */
8907 /* ??$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 */
8908 /* ??$getline@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@0@AAV10@AAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@G@Z */
8909 /* ??$getline@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@0@AEAV10@AEAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@G@Z */
8910 basic_istream_wchar* __cdecl basic_istream_wchar_getline_bstr_delim(
8911         basic_istream_wchar *istream, basic_string_wchar *str, wchar_t delim)
8912 {
8913     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istream);
8914     IOSB_iostate state = IOSTATE_goodbit;
8915     int c = delim;
8916
8917     TRACE("(%p %p %c)\n", istream, str, delim);
8918
8919     basic_string_wchar_clear(str);
8920     if(basic_istream_wchar_sentry_create(istream, TRUE)) {
8921         basic_streambuf_wchar *strbuf = basic_ios_wchar_rdbuf_get(base);
8922
8923         c = basic_streambuf_wchar_sgetc(strbuf);
8924         for(; c!=delim && c!=WEOF; c = basic_streambuf_wchar_snextc(strbuf))
8925             basic_string_wchar_append_ch(str, c);
8926         if(c==delim) basic_streambuf_wchar_sbumpc(strbuf);
8927         else if(c==WEOF) state |= IOSTATE_eofbit;
8928
8929         if(!basic_string_wchar_length(str) && c!=delim) state |= IOSTATE_failbit;
8930     }
8931     basic_istream_wchar_sentry_destroy(istream);
8932
8933     basic_ios_wchar_setstate(basic_istream_wchar_get_basic_ios(istream), state);
8934     return istream;
8935 }
8936
8937 /* ??$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 */
8938 /* ??$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 */
8939 /* ??$getline@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@0@AAV10@AAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
8940 /* ??$getline@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@0@AEAV10@AEAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
8941 basic_istream_wchar* __cdecl basic_istream_wchar_getline_bstr(
8942         basic_istream_wchar *istream, basic_string_wchar *str)
8943 {
8944     return basic_istream_wchar_getline_bstr_delim(istream, str, '\n');
8945 }
8946
8947 static basic_istream_wchar* basic_istream_read_bstr(basic_istream_wchar *istream,
8948         basic_string_wchar *str, const ctype_wchar *ctype)
8949 {
8950     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istream);
8951     IOSB_iostate state = IOSTATE_failbit;
8952     int c = '\n';
8953
8954     TRACE("(%p %p)\n", istream, str);
8955
8956     if(basic_istream_wchar_sentry_create(istream, FALSE)) {
8957         MSVCP_size_t count = ios_base_width_get(&base->base);
8958
8959         if(!count)
8960             count = -1;
8961
8962         basic_string_wchar_clear(str);
8963
8964         for(c = basic_streambuf_wchar_sgetc(basic_ios_wchar_rdbuf_get(base));
8965                 c!=WEOF && !ctype_wchar_is_ch(ctype, _SPACE|_BLANK, c) && count>0;
8966                 c = basic_streambuf_wchar_snextc(basic_ios_wchar_rdbuf_get(base)), count--) {
8967             state = IOSTATE_goodbit;
8968             basic_string_wchar_append_ch(str, c);
8969         }
8970     }
8971     basic_istream_wchar_sentry_destroy(istream);
8972
8973     ios_base_width_set(&base->base, 0);
8974     basic_ios_wchar_setstate(base, state | (c==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit));
8975     return istream;
8976 }
8977
8978 /* ??$?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 */
8979 /* ??$?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 */
8980 basic_istream_wchar* __cdecl basic_istream_wchar_read_bstr(
8981         basic_istream_wchar *istream, basic_string_wchar *str)
8982 {
8983     return basic_istream_read_bstr(istream, str, ctype_wchar_use_facet(
8984                 &basic_istream_wchar_get_basic_ios(istream)->strbuf->loc));
8985 }
8986
8987 /* ??$?5GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@0@AAV10@AAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
8988 /* ??$?5GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@0@AEAV10@AEAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z */
8989 basic_istream_wchar* __cdecl basic_istream_short_read_bstr(
8990         basic_istream_wchar *istream, basic_string_wchar *str)
8991 {
8992     return basic_istream_read_bstr(istream, str, ctype_short_use_facet(
8993                 &basic_istream_wchar_get_basic_ios(istream)->strbuf->loc));
8994 }
8995
8996 static basic_istream_wchar* basic_istream_read_str(basic_istream_wchar *istream, wchar_t *str, const ctype_wchar *ctype)
8997 {
8998     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(istream);
8999     IOSB_iostate state = IOSTATE_failbit;
9000     unsigned short c = '\n';
9001
9002     TRACE("(%p %p)\n", istream, str);
9003
9004     if(basic_istream_wchar_sentry_create(istream, FALSE)) {
9005         MSVCP_size_t count = ios_base_width_get(&base->base)-1;
9006
9007         for(c = basic_streambuf_wchar_sgetc(basic_ios_wchar_rdbuf_get(base));
9008                 c!=WEOF && !ctype_wchar_is_ch(ctype, _SPACE|_BLANK, c) && count>0;
9009                 c = basic_streambuf_wchar_snextc(basic_ios_wchar_rdbuf_get(base)), count--) {
9010             state = IOSTATE_goodbit;
9011             *str++ = c;
9012         }
9013     }
9014     basic_istream_wchar_sentry_destroy(istream);
9015
9016     *str = 0;
9017     ios_base_width_set(&base->base, 0);
9018     basic_ios_wchar_setstate(base, state | (c==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit));
9019     return istream;
9020 }
9021
9022 /* ??$?5GU?$char_traits@G@std@@@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@0@AAV10@PAG@Z */
9023 /* ??$?5GU?$char_traits@G@std@@@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@0@AEAV10@PEAG@Z */
9024 basic_istream_wchar* __cdecl basic_istream_short_read_str(basic_istream_wchar *istream, wchar_t *str)
9025 {
9026     return basic_istream_read_str(istream, str, ctype_short_use_facet(
9027                 &basic_istream_wchar_get_basic_ios(istream)->strbuf->loc));
9028 }
9029
9030 /* ??$?5_WU?$char_traits@_W@std@@@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AAV10@AA_W@Z */
9031 /* ??$?5_WU?$char_traits@_W@std@@@std@@YAAEAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AEAV10@AEA_W@Z */
9032 /* ??$?5GU?$char_traits@G@std@@@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@0@AAV10@AAG@Z */
9033 /* ??$?5GU?$char_traits@G@std@@@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@0@AEAV10@AEAG@Z */
9034 basic_istream_wchar* __cdecl basic_istream_wchar_read_ch(basic_istream_wchar *istream, wchar_t *ch)
9035 {
9036     IOSB_iostate state = IOSTATE_failbit;
9037     unsigned short c = 0;
9038
9039     TRACE("(%p %p)\n", istream, ch);
9040
9041     if(basic_istream_wchar_sentry_create(istream, FALSE)) {
9042         c = basic_streambuf_wchar_sbumpc(basic_ios_wchar_rdbuf_get(
9043                     basic_istream_wchar_get_basic_ios(istream)));
9044         if(c != WEOF) {
9045             state = IOSTATE_goodbit;
9046             *ch = c;
9047         }
9048     }
9049     basic_istream_wchar_sentry_destroy(istream);
9050
9051     basic_ios_wchar_setstate(basic_istream_wchar_get_basic_ios(istream),
9052             state | (c==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit));
9053     return istream;
9054 }
9055
9056 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
9057 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
9058 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
9059 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
9060 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_streambuf, 8)
9061 basic_istream_wchar* __thiscall basic_istream_wchar_read_streambuf(
9062         basic_istream_wchar *this, basic_streambuf_wchar *streambuf)
9063 {
9064     basic_ios_wchar *base = basic_istream_wchar_get_basic_ios(this);
9065     IOSB_iostate state = IOSTATE_failbit;
9066     unsigned short c = '\n';
9067
9068     TRACE("(%p %p)\n", this, streambuf);
9069
9070     if(basic_istream_wchar_sentry_create(this, FALSE)) {
9071         for(c = basic_streambuf_wchar_sgetc(basic_ios_wchar_rdbuf_get(base)); c!=WEOF;
9072                 c = basic_streambuf_wchar_snextc(basic_ios_wchar_rdbuf_get(base))) {
9073             state = IOSTATE_goodbit;
9074             if(basic_streambuf_wchar_sputc(streambuf, c) == WEOF)
9075                 break;
9076         }
9077     }
9078     basic_istream_wchar_sentry_destroy(this);
9079
9080     basic_ios_wchar_setstate(base, state | (c==WEOF ? IOSTATE_eofbit : IOSTATE_goodbit));
9081     return this;
9082 }
9083
9084 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */
9085 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */
9086 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z */
9087 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV01@AEAV01@@Z@Z */
9088 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_func, 8)
9089 basic_istream_wchar* __thiscall basic_istream_wchar_read_func(basic_istream_wchar *this,
9090         basic_istream_wchar* (__cdecl *pfunc)(basic_istream_wchar*))
9091 {
9092     TRACE("(%p %p)\n", this, pfunc);
9093     pfunc(this);
9094     return this;
9095 }
9096
9097 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AAV21@@Z@Z */
9098 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@_WU?$char_traits@_W@std@@@1@AEAV21@@Z@Z */
9099 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAV?$basic_ios@GU?$char_traits@G@std@@@1@AAV21@@Z@Z */
9100 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAV?$basic_ios@GU?$char_traits@G@std@@@1@AEAV21@@Z@Z */
9101 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_func_basic_ios, 8)
9102 basic_istream_wchar* __thiscall basic_istream_wchar_read_func_basic_ios(basic_istream_wchar *this,
9103         basic_ios_wchar* (__cdecl *pfunc)(basic_ios_wchar*))
9104 {
9105     TRACE("(%p %p)\n", this, pfunc);
9106     pfunc(basic_istream_wchar_get_basic_ios(this));
9107     return this;
9108 }
9109
9110 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */
9111 /* ??5?$basic_istream@_WU?$char_traits@_W@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */
9112 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z */
9113 /* ??5?$basic_istream@GU?$char_traits@G@std@@@std@@QEAAAEAV01@P6AAEAVios_base@1@AEAV21@@Z@Z */
9114 DEFINE_THISCALL_WRAPPER(basic_istream_wchar_read_func_ios_base, 8)
9115 basic_istream_wchar* __thiscall basic_istream_wchar_read_func_ios_base(
9116         basic_istream_wchar *this, ios_base* (__cdecl *pfunc)(ios_base*))
9117 {
9118     TRACE("(%p %p)\n", this, pfunc);
9119     pfunc(&basic_istream_wchar_get_basic_ios(this)->base);
9120     return this;
9121 }
9122
9123 static inline basic_ios_char* basic_iostream_char_to_basic_ios(basic_iostream_char *ptr)
9124 {
9125     return (basic_ios_char*)((char*)ptr+basic_iostream_char_vbtable1[1]);
9126 }
9127
9128 static inline basic_iostream_char* basic_iostream_char_from_basic_ios(basic_ios_char *ptr)
9129 {
9130     return (basic_iostream_char*)((char*)ptr-basic_iostream_char_vbtable1[1]);
9131 }
9132
9133 /* ??0?$basic_iostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
9134 /* ??0?$basic_iostream@DU?$char_traits@D@std@@@std@@QEAA@PEAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z */
9135 DEFINE_THISCALL_WRAPPER(basic_iostream_char_ctor, 12)
9136 basic_iostream_char* __thiscall basic_iostream_char_ctor(basic_iostream_char *this, basic_streambuf_char *strbuf, MSVCP_bool virt_init)
9137 {
9138     basic_ios_char *basic_ios;
9139
9140     TRACE("(%p %p %d)\n", this, strbuf, virt_init);
9141
9142     if(virt_init) {
9143         this->base1.vbtable = basic_iostream_char_vbtable1;
9144         this->base2.vbtable = basic_iostream_char_vbtable2;
9145         basic_ios = basic_istream_char_get_basic_ios(&this->base1);
9146         basic_ios_char_ctor(basic_ios);
9147     }else {
9148         basic_ios = basic_istream_char_get_basic_ios(&this->base1);
9149     }
9150
9151     basic_ios->base.vtable = &MSVCP_basic_iostream_char_vtable;
9152
9153     basic_istream_char_ctor(&this->base1, strbuf, FALSE, FALSE);
9154     basic_ostream_char_ctor(&this->base2, NULL, FALSE, FALSE, FALSE);
9155     return this;
9156 }
9157
9158 /* ??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UAE@XZ */
9159 /* ??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UEAA@XZ */
9160 DEFINE_THISCALL_WRAPPER(basic_iostream_char_dtor, 4)
9161 void __thiscall basic_iostream_char_dtor(basic_ios_char *base)
9162 {
9163     basic_iostream_char *this = basic_iostream_char_from_basic_ios(base);
9164
9165     TRACE("(%p)\n", this);
9166     basic_ostream_char_dtor(basic_ostream_char_to_basic_ios(&this->base2));
9167     basic_istream_char_dtor(basic_istream_char_to_basic_ios(&this->base1));
9168 }
9169
9170 /* ??_D?$basic_iostream@DU?$char_traits@D@std@@@std@@QAEXXZ */
9171 /* ??_D?$basic_iostream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
9172 DEFINE_THISCALL_WRAPPER(basic_iostream_char_vbase_dtor, 4)
9173 void __thiscall basic_iostream_char_vbase_dtor(basic_iostream_char *this)
9174 {
9175     TRACE("(%p)\n", this);
9176     basic_iostream_char_dtor(basic_iostream_char_to_basic_ios(this));
9177     basic_ios_char_dtor(basic_istream_char_get_basic_ios(&this->base1));
9178 }
9179
9180 DEFINE_THISCALL_WRAPPER(basic_iostream_char_vector_dtor, 8)
9181 basic_iostream_char* __thiscall basic_iostream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
9182 {
9183     basic_iostream_char *this = basic_iostream_char_from_basic_ios(base);
9184
9185     TRACE("(%p %x)\n", this, flags);
9186
9187     if(flags & 2) {
9188         /* we have an array, with the number of elements stored before the first object */
9189         INT_PTR i, *ptr = (INT_PTR *)this-1;
9190
9191         for(i=*ptr-1; i>=0; i--)
9192             basic_iostream_char_vbase_dtor(this+i);
9193         MSVCRT_operator_delete(ptr);
9194     } else {
9195         basic_iostream_char_vbase_dtor(this);
9196         if(flags & 1)
9197             MSVCRT_operator_delete(this);
9198     }
9199
9200     return this;
9201 }
9202
9203 static inline basic_ios_wchar* basic_iostream_wchar_to_basic_ios(basic_iostream_wchar *ptr)
9204 {
9205     return (basic_ios_wchar*)((char*)ptr+basic_iostream_wchar_vbtable1[1]);
9206 }
9207
9208 static inline basic_iostream_wchar* basic_iostream_wchar_from_basic_ios(basic_ios_wchar *ptr)
9209 {
9210     return (basic_iostream_wchar*)((char*)ptr-basic_iostream_wchar_vbtable1[1]);
9211 }
9212
9213 /* ??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QAE@PAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
9214 /* ??0?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAV?$basic_streambuf@_WU?$char_traits@_W@std@@@1@@Z */
9215 static basic_iostream_wchar* basic_iostream_wchar_ctor(basic_iostream_wchar *this,
9216         basic_streambuf_wchar *strbuf, MSVCP_bool virt_init)
9217 {
9218     basic_ios_wchar *basic_ios;
9219
9220     TRACE("(%p %p %d)\n", this, strbuf, virt_init);
9221
9222     if(virt_init) {
9223         this->base1.vbtable = basic_iostream_wchar_vbtable1;
9224         this->base2.vbtable = basic_iostream_wchar_vbtable2;
9225         basic_ios = basic_istream_wchar_get_basic_ios(&this->base1);
9226         basic_ios_wchar_ctor(basic_ios);
9227     }else {
9228         basic_ios = basic_istream_wchar_get_basic_ios(&this->base1);
9229     }
9230
9231     basic_istream_wchar_ctor(&this->base1, strbuf, FALSE, FALSE);
9232     basic_ostream_short_ctor(&this->base2, NULL, FALSE, FALSE, FALSE);
9233
9234     basic_ios->base.vtable = &MSVCP_basic_iostream_wchar_vtable;
9235     return this;
9236 }
9237
9238 /* ??0?$basic_iostream@GU?$char_traits@G@std@@@std@@QAE@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
9239 /* ??0?$basic_iostream@GU?$char_traits@G@std@@@std@@QEAA@PEAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z */
9240 DEFINE_THISCALL_WRAPPER(basic_iostream_short_ctor, 12)
9241 basic_iostream_wchar* __thiscall basic_iostream_short_ctor(basic_iostream_wchar *this,
9242         basic_streambuf_wchar *strbuf, MSVCP_bool virt_init)
9243 {
9244     basic_iostream_wchar_ctor(this, strbuf, virt_init);
9245     basic_istream_wchar_get_basic_ios(&this->base1)->base.vtable = &MSVCP_basic_iostream_short_vtable;
9246     return this;
9247 }
9248
9249 /* ??1?$basic_iostream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
9250 /* ??1?$basic_iostream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
9251 /* ??1?$basic_iostream@GU?$char_traits@G@std@@@std@@UAE@XZ */
9252 /* ??1?$basic_iostream@GU?$char_traits@G@std@@@std@@UEAA@XZ */
9253 DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_dtor, 4)
9254 void __thiscall basic_iostream_wchar_dtor(basic_ios_wchar *base)
9255 {
9256     basic_iostream_wchar *this = basic_iostream_wchar_from_basic_ios(base);
9257
9258     TRACE("(%p)\n", this);
9259     basic_ostream_wchar_dtor(basic_ostream_wchar_to_basic_ios(&this->base2));
9260     basic_istream_wchar_dtor(basic_istream_wchar_to_basic_ios(&this->base1));
9261 }
9262
9263 /* ??_D?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
9264 /* ??_D?$basic_iostream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
9265 /* ??_D?$basic_iostream@GU?$char_traits@G@std@@@std@@QAEXXZ */
9266 /* ??_D?$basic_iostream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
9267 DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_vbase_dtor, 4)
9268 void __thiscall basic_iostream_wchar_vbase_dtor(basic_iostream_wchar *this)
9269 {
9270     TRACE("(%p)\n", this);
9271     basic_iostream_wchar_dtor(basic_iostream_wchar_to_basic_ios(this));
9272     basic_ios_wchar_dtor(basic_istream_wchar_get_basic_ios(&this->base1));
9273 }
9274
9275 DEFINE_THISCALL_WRAPPER(basic_iostream_wchar_vector_dtor, 8)
9276 basic_iostream_wchar* __thiscall basic_iostream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags)
9277 {
9278     basic_iostream_wchar *this = basic_iostream_wchar_from_basic_ios(base);
9279
9280     TRACE("(%p %x)\n", this, flags);
9281
9282     if(flags & 2) {
9283         /* we have an array, with the number of elements stored before the first object */
9284         INT_PTR i, *ptr = (INT_PTR *)this-1;
9285
9286         for(i=*ptr-1; i>=0; i--)
9287             basic_iostream_wchar_vbase_dtor(this+i);
9288         MSVCRT_operator_delete(ptr);
9289     } else {
9290         basic_iostream_wchar_vbase_dtor(this);
9291         if(flags & 1)
9292             MSVCRT_operator_delete(this);
9293     }
9294
9295     return this;
9296 }
9297
9298 static inline basic_ios_char* basic_ofstream_char_to_basic_ios(basic_ofstream_char *ptr)
9299 {
9300     return (basic_ios_char*)((char*)ptr+basic_ofstream_char_vbtable[1]);
9301 }
9302
9303 static inline basic_ofstream_char* basic_ofstream_char_from_basic_ios(basic_ios_char *ptr)
9304 {
9305     return (basic_ofstream_char*)((char*)ptr-basic_ofstream_char_vbtable[1]);
9306 }
9307
9308 /* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAE@XZ */
9309 /* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAA@XZ */
9310 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_ctor, 8)
9311 basic_ofstream_char* __thiscall basic_ofstream_char_ctor(basic_ofstream_char *this, MSVCP_bool virt_init)
9312 {
9313     basic_ios_char *basic_ios;
9314
9315     TRACE("(%p %d)\n", this, virt_init);
9316
9317     if(virt_init) {
9318         this->base.vbtable = basic_ofstream_char_vbtable;
9319         basic_ios = basic_ostream_char_get_basic_ios(&this->base);
9320         basic_ios_char_ctor(basic_ios);
9321     }else {
9322         basic_ios = basic_ostream_char_get_basic_ios(&this->base);
9323     }
9324
9325     basic_filebuf_char_ctor(&this->filebuf);
9326     basic_ostream_char_ctor(&this->base, &this->filebuf.base, FALSE, TRUE, FALSE);
9327     basic_ios->base.vtable = &MSVCP_basic_ofstream_char_vtable;
9328     return this;
9329 }
9330
9331 /* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAE@PAU_iobuf@@@Z */
9332 /* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAA@PEAU_iobuf@@@Z */
9333 static basic_ofstream_char* basic_ofstream_char_ctor_file(
9334         basic_ofstream_char *this, FILE *file, MSVCP_bool virt_init)
9335 {
9336     basic_ios_char *basic_ios;
9337
9338     TRACE("(%p %p %d)\n", this, file, virt_init);
9339
9340     if(virt_init) {
9341         this->base.vbtable = basic_ofstream_char_vbtable;
9342         basic_ios = basic_ostream_char_get_basic_ios(&this->base);
9343         basic_ios_char_ctor(basic_ios);
9344     }else {
9345         basic_ios = basic_ostream_char_get_basic_ios(&this->base);
9346     }
9347
9348     basic_filebuf_char_ctor_file(&this->filebuf, file);
9349     basic_ostream_char_ctor(&this->base, &this->filebuf.base, FALSE, TRUE, FALSE);
9350     basic_ios->base.vtable = &MSVCP_basic_ofstream_char_vtable;
9351     return this;
9352 }
9353
9354 /* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAE@ABV01@@Z */
9355 /* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAA@AEBV01@@Z */
9356 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_copy_ctor, 12)
9357 basic_ofstream_char* __thiscall basic_ofstream_char_copy_ctor(basic_ofstream_char *this,
9358         basic_ofstream_char *copy, MSVCP_bool virt_init)
9359 {
9360     TRACE("(%p %p %d)\n", this, copy, virt_init);
9361     return basic_ofstream_char_ctor_file(this, copy->filebuf.file, virt_init);
9362 }
9363
9364 /* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAE@PBDH@Z */
9365 /* ??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAA@PEBDH@Z */
9366 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_ctor_name, 16)
9367 basic_ofstream_char* __thiscall basic_ofstream_char_ctor_name(basic_ofstream_char *this,
9368         const char *name, int mode, MSVCP_bool virt_init)
9369 {
9370     TRACE("(%p %s %d %d)\n", this, name, mode, virt_init);
9371
9372     basic_ofstream_char_ctor(this, virt_init);
9373
9374     if(!basic_filebuf_char_open(&this->filebuf, name, mode|OPENMODE_out, _SH_DENYNO)) {
9375         basic_ios_char *basic_ios = basic_ostream_char_get_basic_ios(&this->base);
9376         basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
9377     }
9378     return this;
9379 }
9380
9381 /* ??1?$basic_ofstream@DU?$char_traits@D@std@@@std@@UAE@XZ */
9382 /* ??1?$basic_ofstream@DU?$char_traits@D@std@@@std@@UEAA@XZ */
9383 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_dtor, 4)
9384 void __thiscall basic_ofstream_char_dtor(basic_ios_char *base)
9385 {
9386     basic_ofstream_char *this = basic_ofstream_char_from_basic_ios(base);
9387
9388     TRACE("(%p)\n", this);
9389
9390     basic_ostream_char_dtor(basic_ostream_char_to_basic_ios(&this->base));
9391     basic_filebuf_char_dtor(&this->filebuf);
9392 }
9393
9394 /* ??_D?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXXZ */
9395 /* ??_D?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
9396 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_vbase_dtor, 4)
9397 void __thiscall basic_ofstream_char_vbase_dtor(basic_ofstream_char *this)
9398 {
9399     TRACE("(%p)\n", this);
9400
9401     basic_ofstream_char_dtor(basic_ofstream_char_to_basic_ios(this));
9402     basic_ios_char_dtor(basic_ostream_char_get_basic_ios(&this->base));
9403 }
9404
9405 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_vector_dtor, 8)
9406 basic_ofstream_char* __thiscall basic_ofstream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
9407 {
9408     basic_ofstream_char *this = basic_ofstream_char_from_basic_ios(base);
9409
9410     TRACE("(%p %x)\n", this, flags);
9411
9412     if(flags & 2) {
9413         /* we have an array, with the number of elements stored before the first object */
9414         INT_PTR i, *ptr = (INT_PTR *)this-1;
9415
9416         for(i=*ptr-1; i>=0; i--)
9417             basic_ofstream_char_vbase_dtor(this+i);
9418         MSVCRT_operator_delete(ptr);
9419     } else {
9420         basic_ofstream_char_vbase_dtor(this);
9421         if(flags & 1)
9422             MSVCRT_operator_delete(this);
9423     }
9424
9425     return this;
9426 }
9427
9428 /* ?close@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXXZ */
9429 /* ?close@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
9430 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_close, 4)
9431 void __thiscall basic_ofstream_char_close(basic_ofstream_char *this)
9432 {
9433     TRACE("(%p)\n", this);
9434
9435     if(!basic_filebuf_char_close(&this->filebuf)) {
9436         basic_ios_char *basic_ios = basic_ostream_char_get_basic_ios(&this->base);
9437         basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
9438     }
9439 }
9440
9441 /* ?is_open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QBE_NXZ */
9442 /* ?is_open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEBA_NXZ */
9443 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_is_open, 4)
9444 MSVCP_bool __thiscall basic_ofstream_char_is_open(const basic_ofstream_char *this)
9445 {
9446     TRACE("(%p)\n", this);
9447     return basic_filebuf_char_is_open(&this->filebuf);
9448 }
9449
9450 /* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXPBDH@Z */
9451 /* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDH@Z */
9452 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_open, 12)
9453 void __thiscall basic_ofstream_char_open(basic_ofstream_char *this,
9454         const char *name, int mode)
9455 {
9456     TRACE("(%p %s %d)\n", this, name, mode);
9457
9458     if(!basic_filebuf_char_open(&this->filebuf, name, mode|OPENMODE_out, _SH_DENYNO)) {
9459         basic_ios_char *basic_ios = basic_ostream_char_get_basic_ios(&this->base);
9460         basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
9461     }
9462 }
9463
9464 /* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXPBDF@Z */
9465 /* ?open@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDF@Z */
9466 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_open_old, 12)
9467 void __thiscall basic_ofstream_char_open_old(basic_ofstream_char *this,
9468         const char *name, short mode)
9469 {
9470     basic_ofstream_char_open(this, name, mode);
9471 }
9472
9473 /* ?rdbuf@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ */
9474 /* ?rdbuf@?$basic_ofstream@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ */
9475 DEFINE_THISCALL_WRAPPER(basic_ofstream_char_rdbuf, 4)
9476 basic_filebuf_char* __thiscall basic_ofstream_char_rdbuf(const basic_ofstream_char *this)
9477 {
9478     TRACE("(%p)\n", this);
9479     return (basic_filebuf_char*)&this->filebuf;
9480 }
9481
9482 static inline basic_ios_wchar* basic_ofstream_wchar_to_basic_ios(basic_ofstream_wchar *ptr)
9483 {
9484     return (basic_ios_wchar*)((char*)ptr+basic_ofstream_wchar_vbtable[1]);
9485 }
9486
9487 static inline basic_ofstream_wchar* basic_ofstream_wchar_from_basic_ios(basic_ios_wchar *ptr)
9488 {
9489     return (basic_ofstream_wchar*)((char*)ptr-basic_ofstream_wchar_vbtable[1]);
9490 }
9491
9492 /* ??0?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAE@XZ */
9493 /* ??0?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAA@XZ */
9494 static basic_ofstream_wchar* basic_ofstream_wchar_ctor(basic_ofstream_wchar *this, MSVCP_bool virt_init)
9495 {
9496     basic_ios_wchar *basic_ios;
9497
9498     TRACE("(%p %d)\n", this, virt_init);
9499
9500     if(virt_init) {
9501         this->base.vbtable = basic_ofstream_wchar_vbtable;
9502         basic_ios = basic_ostream_wchar_get_basic_ios(&this->base);
9503         basic_ios_wchar_ctor(basic_ios);
9504     }else {
9505         basic_ios = basic_ostream_wchar_get_basic_ios(&this->base);
9506     }
9507
9508     basic_filebuf_wchar_ctor(&this->filebuf);
9509     basic_ostream_short_ctor(&this->base, &this->filebuf.base, FALSE, TRUE, FALSE);
9510     basic_ios->base.vtable = &MSVCP_basic_ofstream_wchar_vtable;
9511     return this;
9512 }
9513
9514 /* ??0?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAE@XZ */
9515 /* ??0?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAA@XZ */
9516 DEFINE_THISCALL_WRAPPER(basic_ofstream_short_ctor, 8)
9517 basic_ofstream_wchar* __thiscall basic_ofstream_short_ctor(basic_ofstream_wchar *this, MSVCP_bool virt_init)
9518 {
9519     basic_ofstream_wchar_ctor(this, virt_init);
9520     basic_ostream_wchar_get_basic_ios(&this->base)->base.vtable = &MSVCP_basic_ofstream_short_vtable;
9521     return this;
9522 }
9523
9524 /* ??0?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAE@PAU_iobuf@@@Z */
9525 /* ??0?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAU_iobuf@@@Z */
9526 static basic_ofstream_wchar* basic_ofstream_wchar_ctor_file(
9527         basic_ofstream_wchar *this, FILE *file, MSVCP_bool virt_init)
9528 {
9529     basic_ios_wchar *basic_ios;
9530
9531     TRACE("(%p %p %d)\n", this, file, virt_init);
9532
9533     if(virt_init) {
9534         this->base.vbtable = basic_ofstream_wchar_vbtable;
9535         basic_ios = basic_ostream_wchar_get_basic_ios(&this->base);
9536         basic_ios_wchar_ctor(basic_ios);
9537     }else {
9538         basic_ios = basic_ostream_wchar_get_basic_ios(&this->base);
9539     }
9540
9541     basic_filebuf_wchar_ctor_file(&this->filebuf, file);
9542     basic_ostream_short_ctor(&this->base, &this->filebuf.base, FALSE, TRUE, FALSE);
9543     basic_ios->base.vtable = &MSVCP_basic_ofstream_wchar_vtable;
9544     return this;
9545 }
9546
9547 /* ??0?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAE@PAU_iobuf@@@Z */
9548 /* ??0?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAA@PEAU_iobuf@@@Z */
9549 static basic_ofstream_wchar* basic_ofstream_short_ctor_file(
9550         basic_ofstream_wchar *this, FILE *file, MSVCP_bool virt_init)
9551 {
9552     basic_ofstream_wchar_ctor_file(this, file, virt_init);
9553     basic_ostream_wchar_get_basic_ios(&this->base)->base.vtable = &MSVCP_basic_ofstream_short_vtable;
9554     return this;
9555 }
9556
9557 /* ??0?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAE@ABV01@@Z */
9558 /* ??0?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAA@AEBV01@@Z */
9559 DEFINE_THISCALL_WRAPPER(basic_ofstream_short_copy_ctor, 12)
9560 basic_ofstream_wchar* __thiscall basic_ofstream_short_copy_ctor(basic_ofstream_wchar *this,
9561         basic_ofstream_wchar *copy, MSVCP_bool virt_init)
9562 {
9563     TRACE("(%p %p %d)\n", this, copy, virt_init);
9564     return basic_ofstream_short_ctor_file(this, copy->filebuf.file, virt_init);
9565 }
9566
9567 /* ??0?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAE@PBDH@Z */
9568 /* ??0?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAA@PEBDH@Z */
9569 DEFINE_THISCALL_WRAPPER(basic_ofstream_short_ctor_name, 16)
9570 basic_ofstream_wchar* __thiscall basic_ofstream_short_ctor_name(basic_ofstream_wchar *this,
9571         const char *name, int mode, MSVCP_bool virt_init)
9572 {
9573     TRACE("(%p %s %d %d)\n", this, name, mode, virt_init);
9574
9575     basic_ofstream_short_ctor(this, virt_init);
9576
9577     if(!basic_filebuf_wchar_open(&this->filebuf, name, mode|OPENMODE_out, _SH_DENYNO)) {
9578         basic_ios_wchar *basic_ios = basic_ostream_wchar_get_basic_ios(&this->base);
9579         basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit);
9580     }
9581     return this;
9582 }
9583
9584 /* ??1?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
9585 /* ??1?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
9586 /* ??1?$basic_ofstream@GU?$char_traits@G@std@@@std@@UAE@XZ */
9587 /* ??1?$basic_ofstream@GU?$char_traits@G@std@@@std@@UEAA@XZ */
9588 DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_dtor, 4)
9589 void __thiscall basic_ofstream_wchar_dtor(basic_ios_wchar *base)
9590 {
9591     basic_ofstream_wchar *this = basic_ofstream_wchar_from_basic_ios(base);
9592
9593     TRACE("(%p)\n", this);
9594
9595     basic_ostream_wchar_dtor(basic_ostream_wchar_to_basic_ios(&this->base));
9596     basic_filebuf_wchar_dtor(&this->filebuf);
9597 }
9598
9599 /* ??_D?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
9600 /* ??_D?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
9601 /* ??_D?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAEXXZ */
9602 /* ??_D?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
9603 DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_vbase_dtor, 4)
9604 void __thiscall basic_ofstream_wchar_vbase_dtor(basic_ofstream_wchar *this)
9605 {
9606     TRACE("(%p)\n", this);
9607
9608     basic_ofstream_wchar_dtor(basic_ofstream_wchar_to_basic_ios(this));
9609     basic_ios_wchar_dtor(basic_ostream_wchar_get_basic_ios(&this->base));
9610 }
9611
9612 DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_vector_dtor, 8)
9613 basic_ofstream_wchar* __thiscall basic_ofstream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags)
9614 {
9615     basic_ofstream_wchar *this = basic_ofstream_wchar_from_basic_ios(base);
9616
9617     TRACE("(%p %x)\n", this, flags);
9618
9619     if(flags & 2) {
9620         /* we have an array, with the number of elements stored before the first object */
9621         INT_PTR i, *ptr = (INT_PTR *)this-1;
9622
9623         for(i=*ptr-1; i>=0; i--)
9624             basic_ofstream_wchar_vbase_dtor(this+i);
9625         MSVCRT_operator_delete(ptr);
9626     } else {
9627         basic_ofstream_wchar_vbase_dtor(this);
9628         if(flags & 1)
9629             MSVCRT_operator_delete(this);
9630     }
9631
9632     return this;
9633 }
9634
9635 /* ?close@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
9636 /* ?close@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
9637 /* ?close@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAEXXZ */
9638 /* ?close@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
9639 DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_close, 4)
9640 void __thiscall basic_ofstream_wchar_close(basic_ofstream_wchar *this)
9641 {
9642     TRACE("(%p)\n", this);
9643
9644     if(!basic_filebuf_wchar_close(&this->filebuf)) {
9645         basic_ios_wchar *basic_ios = basic_ostream_wchar_get_basic_ios(&this->base);
9646         basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit);
9647     }
9648 }
9649
9650 /* ?is_open@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QBE_NXZ */
9651 /* ?is_open@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEBA_NXZ */
9652 /* ?is_open@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QBE_NXZ */
9653 /* ?is_open@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEBA_NXZ */
9654 DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_is_open, 4)
9655 MSVCP_bool __thiscall basic_ofstream_wchar_is_open(const basic_ofstream_wchar *this)
9656 {
9657     TRACE("(%p)\n", this);
9658     return basic_filebuf_wchar_is_open(&this->filebuf);
9659 }
9660
9661 /* ?open@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAEXPBDH@Z */
9662 /* ?open@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAAXPEBDH@Z */
9663 DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_open, 12)
9664 void __thiscall basic_ofstream_wchar_open(basic_ofstream_wchar *this,
9665         const char *name, int mode)
9666 {
9667     TRACE("(%p %s %d)\n", this, name, mode);
9668
9669     if(!basic_filebuf_wchar_open(&this->filebuf, name, mode|OPENMODE_out, _SH_DENYNO)) {
9670         basic_ios_wchar *basic_ios = basic_ostream_wchar_get_basic_ios(&this->base);
9671         basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit);
9672     }
9673 }
9674
9675 /* ?open@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QAEXPBDF@Z */
9676 /* ?open@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEAAXPEBDF@Z */
9677 DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_open_old, 12)
9678 void __thiscall basic_ofstream_wchar_open_old(basic_ofstream_wchar *this,
9679         const char *name, int mode)
9680 {
9681     basic_ofstream_wchar_open(this, name, mode);
9682 }
9683
9684 /* ?rdbuf@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_filebuf@_WU?$char_traits@_W@std@@@2@XZ */
9685 /* ?rdbuf@?$basic_ofstream@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_filebuf@_WU?$char_traits@_W@std@@@2@XZ */
9686 /* ?rdbuf@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_filebuf@GU?$char_traits@G@std@@@2@XZ */
9687 /* ?rdbuf@?$basic_ofstream@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_filebuf@GU?$char_traits@G@std@@@2@XZ */
9688 DEFINE_THISCALL_WRAPPER(basic_ofstream_wchar_rdbuf, 4)
9689 basic_filebuf_wchar* __thiscall basic_ofstream_wchar_rdbuf(const basic_ofstream_wchar *this)
9690 {
9691     TRACE("(%p)\n", this);
9692     return (basic_filebuf_wchar*)&this->filebuf;
9693 }
9694
9695 static inline basic_ios_char* basic_ifstream_char_to_basic_ios(basic_ifstream_char *ptr)
9696 {
9697     return (basic_ios_char*)((char*)ptr+basic_ifstream_char_vbtable[1]);
9698 }
9699
9700 static inline basic_ifstream_char* basic_ifstream_char_from_basic_ios(basic_ios_char *ptr)
9701 {
9702     return (basic_ifstream_char*)((char*)ptr-basic_ifstream_char_vbtable[1]);
9703 }
9704
9705 /* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAE@XZ */
9706 /* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAA@XZ */
9707 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_ctor, 8)
9708 basic_ifstream_char* __thiscall basic_ifstream_char_ctor(basic_ifstream_char *this, MSVCP_bool virt_init)
9709 {
9710     basic_ios_char *basic_ios;
9711
9712     TRACE("(%p %d)\n", this, virt_init);
9713
9714     if(virt_init) {
9715         this->base.vbtable = basic_ifstream_char_vbtable;
9716         basic_ios = basic_istream_char_get_basic_ios(&this->base);
9717         basic_ios_char_ctor(basic_ios);
9718     }else {
9719         basic_ios = basic_istream_char_get_basic_ios(&this->base);
9720     }
9721
9722     basic_filebuf_char_ctor(&this->filebuf);
9723     basic_istream_char_ctor(&this->base, &this->filebuf.base, FALSE, FALSE);
9724     basic_ios->base.vtable = &MSVCP_basic_ifstream_char_vtable;
9725     return this;
9726 }
9727
9728 /* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAE@PAU_iobuf@@@Z */
9729 /* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAA@PEAU_iobuf@@@Z */
9730 static basic_ifstream_char* basic_ifstream_char_ctor_file(
9731         basic_ifstream_char *this, FILE *file, MSVCP_bool virt_init)
9732 {
9733     basic_ios_char *basic_ios;
9734
9735     TRACE("(%p %p %d)\n", this, file, virt_init);
9736
9737     if(virt_init) {
9738         this->base.vbtable = basic_ifstream_char_vbtable;
9739         basic_ios = basic_istream_char_get_basic_ios(&this->base);
9740         basic_ios_char_ctor(basic_ios);
9741     }else {
9742         basic_ios = basic_istream_char_get_basic_ios(&this->base);
9743     }
9744
9745     basic_filebuf_char_ctor_file(&this->filebuf, file);
9746     basic_istream_char_ctor(&this->base, &this->filebuf.base, FALSE, FALSE);
9747     basic_ios->base.vtable = &MSVCP_basic_ifstream_char_vtable;
9748     return this;
9749 }
9750
9751 /* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAE@ABV01@@Z */
9752 /* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAA@AEBV01@@Z */
9753 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_copy_ctor, 12)
9754 basic_ifstream_char* __thiscall basic_ifstream_char_copy_ctor(basic_ifstream_char *this,
9755         const basic_ifstream_char *copy, MSVCP_bool virt_init)
9756 {
9757     TRACE("(%p %p %d)\n", this, copy, virt_init);
9758     return basic_ifstream_char_ctor_file(this, copy->filebuf.file, virt_init);
9759 }
9760
9761 /* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAE@PBDH@Z */
9762 /* ??0?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAA@PEBDH@Z */
9763 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_ctor_name, 16)
9764 basic_ifstream_char* __thiscall basic_ifstream_char_ctor_name(basic_ifstream_char *this,
9765         const char *name, int mode, MSVCP_bool virt_init)
9766 {
9767     TRACE("(%p %s %d %d)\n", this, name, mode, virt_init);
9768
9769     basic_ifstream_char_ctor(this, virt_init);
9770
9771     if(!basic_filebuf_char_open(&this->filebuf, name, mode|OPENMODE_in, _SH_DENYNO)) {
9772         basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base);
9773         basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
9774     }
9775     return this;
9776 }
9777
9778 /* ??1?$basic_ifstream@DU?$char_traits@D@std@@@std@@UAE@XZ */
9779 /* ??1?$basic_ifstream@DU?$char_traits@D@std@@@std@@UEAA@XZ */
9780 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_dtor, 4)
9781 void __thiscall basic_ifstream_char_dtor(basic_ios_char *base)
9782 {
9783     basic_ifstream_char *this = basic_ifstream_char_from_basic_ios(base);
9784
9785     TRACE("(%p)\n", this);
9786
9787     basic_istream_char_dtor(basic_istream_char_to_basic_ios(&this->base));
9788     basic_filebuf_char_dtor(&this->filebuf);
9789 }
9790
9791 /* ??_D?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAEXXZ */
9792 /* ??_D?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
9793 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_vbase_dtor, 4)
9794 void __thiscall basic_ifstream_char_vbase_dtor(basic_ifstream_char *this)
9795 {
9796     TRACE("(%p)\n", this);
9797
9798     basic_ifstream_char_dtor(basic_ifstream_char_to_basic_ios(this));
9799     basic_ios_char_dtor(basic_istream_char_get_basic_ios(&this->base));
9800 }
9801
9802 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_vector_dtor, 8)
9803 basic_ifstream_char* __thiscall basic_ifstream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
9804 {
9805     basic_ifstream_char *this = basic_ifstream_char_from_basic_ios(base);
9806
9807     TRACE("(%p %x)\n", this, flags);
9808
9809     if(flags & 2) {
9810         /* we have an array, with the number of elements stored before the first object */
9811         INT_PTR i, *ptr = (INT_PTR *)this-1;
9812
9813         for(i=*ptr-1; i>=0; i--)
9814             basic_ifstream_char_vbase_dtor(this+i);
9815         MSVCRT_operator_delete(ptr);
9816     } else {
9817         basic_ifstream_char_vbase_dtor(this);
9818         if(flags & 1)
9819             MSVCRT_operator_delete(this);
9820     }
9821
9822     return this;
9823 }
9824
9825 /* ?close@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAEXXZ */
9826 /* ?close@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
9827 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_close, 4)
9828 void __thiscall basic_ifstream_char_close(basic_ifstream_char *this)
9829 {
9830     TRACE("(%p)\n", this);
9831
9832     if(!basic_filebuf_char_close(&this->filebuf)) {
9833         basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base);
9834         basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
9835     }
9836 }
9837
9838 /* ?is_open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QBE_NXZ */
9839 /* ?is_open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEBA_NXZ */
9840 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_is_open, 4)
9841 MSVCP_bool __thiscall basic_ifstream_char_is_open(const basic_ifstream_char *this)
9842 {
9843     TRACE("(%p)\n", this);
9844     return basic_filebuf_char_is_open(&this->filebuf);
9845 }
9846
9847 /* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAEXPBDH@Z */
9848 /* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDH@Z */
9849 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_open, 12)
9850 void __thiscall basic_ifstream_char_open(basic_ifstream_char *this,
9851         const char *name, int mode)
9852 {
9853     TRACE("(%p %s %d)\n", this, name, mode);
9854
9855     if(!basic_filebuf_char_open(&this->filebuf, name, mode|OPENMODE_in, _SH_DENYNO)) {
9856         basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base);
9857         basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
9858     }
9859 }
9860
9861 /* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QAEXPBDF@Z */
9862 /* ?open@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDF@Z */
9863 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_open_old, 12)
9864 void __thiscall basic_ifstream_char_open_old(basic_ifstream_char *this,
9865         const char *name, short mode)
9866 {
9867     basic_ifstream_char_open(this, name, mode);
9868 }
9869
9870 /* ?rdbuf@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ */
9871 /* ?rdbuf@?$basic_ifstream@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ */
9872 DEFINE_THISCALL_WRAPPER(basic_ifstream_char_rdbuf, 4)
9873 basic_filebuf_char* __thiscall basic_ifstream_char_rdbuf(const basic_ifstream_char *this)
9874 {
9875     TRACE("(%p)\n", this);
9876     return (basic_filebuf_char*)&this->filebuf;
9877 }
9878
9879 static inline basic_ios_wchar* basic_ifstream_wchar_to_basic_ios(basic_ifstream_wchar *ptr)
9880 {
9881     return (basic_ios_wchar*)((char*)ptr+basic_ifstream_wchar_vbtable[1]);
9882 }
9883
9884 static inline basic_ifstream_wchar* basic_ifstream_wchar_from_basic_ios(basic_ios_wchar *ptr)
9885 {
9886     return (basic_ifstream_wchar*)((char*)ptr-basic_ifstream_wchar_vbtable[1]);
9887 }
9888
9889 /* ??0?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QAE@XZ */
9890 /* ??0?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEAA@XZ */
9891 static basic_ifstream_wchar* basic_ifstream_wchar_ctor(basic_ifstream_wchar *this, MSVCP_bool virt_init)
9892 {
9893     basic_ios_wchar *basic_ios;
9894
9895     TRACE("(%p %d)\n", this, virt_init);
9896
9897     if(virt_init) {
9898         this->base.vbtable = basic_ifstream_wchar_vbtable;
9899         basic_ios = basic_istream_wchar_get_basic_ios(&this->base);
9900         basic_ios_wchar_ctor(basic_ios);
9901     }else {
9902         basic_ios = basic_istream_wchar_get_basic_ios(&this->base);
9903     }
9904
9905     basic_filebuf_wchar_ctor(&this->filebuf);
9906     basic_istream_wchar_ctor(&this->base, &this->filebuf.base, FALSE, FALSE);
9907     basic_ios->base.vtable = &MSVCP_basic_ifstream_wchar_vtable;
9908     return this;
9909 }
9910
9911 /* ??0?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAE@XZ */
9912 /* ??0?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAA@XZ */
9913 DEFINE_THISCALL_WRAPPER(basic_ifstream_short_ctor, 8)
9914 basic_ifstream_wchar* __thiscall basic_ifstream_short_ctor(basic_ifstream_wchar *this, MSVCP_bool virt_init)
9915 {
9916     basic_ifstream_wchar_ctor(this, virt_init);
9917     basic_istream_wchar_get_basic_ios(&this->base)->base.vtable = &MSVCP_basic_ifstream_short_vtable;
9918     return this;
9919 }
9920
9921 /* ??0?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QAE@PAU_iobuf@@@Z */
9922 /* ??0?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAU_iobuf@@@Z */
9923 static basic_ifstream_wchar* basic_ifstream_wchar_ctor_file(
9924         basic_ifstream_wchar *this, FILE *file, MSVCP_bool virt_init)
9925 {
9926     basic_ios_wchar *basic_ios;
9927
9928     TRACE("(%p %p %d)\n", this, file, virt_init);
9929
9930     if(virt_init) {
9931         this->base.vbtable = basic_ifstream_wchar_vbtable;
9932         basic_ios = basic_istream_wchar_get_basic_ios(&this->base);
9933         basic_ios_wchar_ctor(basic_ios);
9934     }else {
9935         basic_ios = basic_istream_wchar_get_basic_ios(&this->base);
9936     }
9937
9938     basic_filebuf_wchar_ctor_file(&this->filebuf, file);
9939     basic_istream_wchar_ctor(&this->base, &this->filebuf.base, FALSE, FALSE);
9940     basic_ios->base.vtable = &MSVCP_basic_ifstream_wchar_vtable;
9941     return this;
9942 }
9943
9944 /* ??0?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAE@PAU_iobuf@@@Z */
9945 /* ??0?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAA@PEAU_iobuf@@@Z */
9946 static basic_ifstream_wchar* basic_ifstream_short_ctor_file(
9947         basic_ifstream_wchar *this, FILE *file, MSVCP_bool virt_init)
9948 {
9949     basic_ifstream_wchar_ctor_file(this, file, virt_init);
9950     basic_istream_wchar_get_basic_ios(&this->base)->base.vtable = &MSVCP_basic_ifstream_short_vtable;
9951     return this;
9952 }
9953
9954 /* ??0?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAE@ABV01@@Z */
9955 /* ??0?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAA@AEBV01@@Z */
9956 DEFINE_THISCALL_WRAPPER(basic_ifstream_short_copy_ctor, 12)
9957 basic_ifstream_wchar* __thiscall basic_ifstream_short_copy_ctor(basic_ifstream_wchar *this,
9958         basic_ifstream_wchar *copy, MSVCP_bool virt_init)
9959 {
9960     TRACE("(%p %p %d)\n", this, copy, virt_init);
9961     return basic_ifstream_short_ctor_file(this, copy->filebuf.file, virt_init);
9962 }
9963
9964 /* ??0?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAE@PBDH@Z */
9965 /* ??0?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAA@PEBDH@Z */
9966 DEFINE_THISCALL_WRAPPER(basic_ifstream_short_ctor_name, 16)
9967 basic_ifstream_wchar* __thiscall basic_ifstream_short_ctor_name(basic_ifstream_wchar *this,
9968         const char *name, int mode, MSVCP_bool virt_init)
9969 {
9970     TRACE("(%p %s %d %d)\n", this, name, mode, virt_init);
9971
9972     basic_ifstream_short_ctor(this, virt_init);
9973
9974     if(!basic_filebuf_wchar_open(&this->filebuf, name, mode|OPENMODE_in, _SH_DENYNO)) {
9975         basic_ios_wchar *basic_ios = basic_istream_wchar_get_basic_ios(&this->base);
9976         basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit);
9977     }
9978     return this;
9979 }
9980
9981 /* ??1?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
9982 /* ??1?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
9983 /* ??1?$basic_ifstream@GU?$char_traits@G@std@@@std@@UAE@XZ */
9984 /* ??1?$basic_ifstream@GU?$char_traits@G@std@@@std@@UEAA@XZ */
9985 DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_dtor, 4)
9986 void __thiscall basic_ifstream_wchar_dtor(basic_ios_wchar *base)
9987 {
9988     basic_ifstream_wchar *this = basic_ifstream_wchar_from_basic_ios(base);
9989
9990     TRACE("(%p)\n", this);
9991
9992     basic_istream_wchar_dtor(basic_istream_wchar_to_basic_ios(&this->base));
9993     basic_filebuf_wchar_dtor(&this->filebuf);
9994 }
9995
9996 /* ??_D?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
9997 /* ??_D?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
9998 /* ??_D?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAEXXZ */
9999 /* ??_D?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
10000 DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_vbase_dtor, 4)
10001 void __thiscall basic_ifstream_wchar_vbase_dtor(basic_ifstream_wchar *this)
10002 {
10003     TRACE("(%p)\n", this);
10004
10005     basic_ifstream_wchar_dtor(basic_ifstream_wchar_to_basic_ios(this));
10006     basic_ios_wchar_dtor(basic_istream_wchar_get_basic_ios(&this->base));
10007 }
10008
10009 DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_vector_dtor, 8)
10010 basic_ifstream_wchar* __thiscall basic_ifstream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags)
10011 {
10012     basic_ifstream_wchar *this = basic_ifstream_wchar_from_basic_ios(base);
10013
10014     TRACE("(%p %x)\n", this, flags);
10015
10016     if(flags & 2) {
10017         /* we have an array, with the number of elements stored before the first object */
10018         INT_PTR i, *ptr = (INT_PTR *)this-1;
10019
10020         for(i=*ptr-1; i>=0; i--)
10021             basic_ifstream_wchar_vbase_dtor(this+i);
10022         MSVCRT_operator_delete(ptr);
10023     } else {
10024         basic_ifstream_wchar_vbase_dtor(this);
10025         if(flags & 1)
10026             MSVCRT_operator_delete(this);
10027     }
10028
10029     return this;
10030 }
10031
10032 /* ?close@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
10033 /* ?close@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
10034 /* ?close@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAEXXZ */
10035 /* ?close@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
10036 DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_close, 4)
10037 void __thiscall basic_ifstream_wchar_close(basic_ifstream_wchar *this)
10038 {
10039     TRACE("(%p)\n", this);
10040
10041     if(!basic_filebuf_wchar_close(&this->filebuf)) {
10042         basic_ios_wchar *basic_ios = basic_istream_wchar_get_basic_ios(&this->base);
10043         basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit);
10044     }
10045 }
10046
10047 /* ?is_open@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QBE_NXZ */
10048 /* ?is_open@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEBA_NXZ */
10049 /* ?is_open@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QBE_NXZ */
10050 /* ?is_open@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEBA_NXZ */
10051 DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_is_open, 4)
10052 MSVCP_bool __thiscall basic_ifstream_wchar_is_open(const basic_ifstream_wchar *this)
10053 {
10054     TRACE("(%p)\n", this);
10055     return basic_filebuf_wchar_is_open(&this->filebuf);
10056 }
10057
10058 /* ?open@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAEXPBDH@Z */
10059 /* ?open@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAAXPEBDH@Z */
10060 DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_open, 12)
10061 void __thiscall basic_ifstream_wchar_open(basic_ifstream_wchar *this,
10062         const char *name, int mode)
10063 {
10064     TRACE("(%p %s %d)\n", this, name, mode);
10065
10066     if(!basic_filebuf_wchar_open(&this->filebuf, name, mode|OPENMODE_in, _SH_DENYNO)) {
10067         basic_ios_wchar *basic_ios = basic_istream_wchar_get_basic_ios(&this->base);
10068         basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit);
10069     }
10070 }
10071
10072 /* ?open@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QAEXPBDF@Z */
10073 /* ?open@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEAAXPEBDF@Z */
10074 DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_open_old, 12)
10075 void __thiscall basic_ifstream_wchar_open_old(basic_ifstream_wchar *this,
10076         const char *name, short mode)
10077 {
10078     basic_ifstream_wchar_open(this, name, mode);
10079 }
10080
10081 /* ?rdbuf@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_filebuf@_WU?$char_traits@_W@std@@@2@XZ */
10082 /* ?rdbuf@?$basic_ifstream@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_filebuf@_WU?$char_traits@_W@std@@@2@XZ */
10083 /* ?rdbuf@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_filebuf@GU?$char_traits@G@std@@@2@XZ */
10084 /* ?rdbuf@?$basic_ifstream@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_filebuf@GU?$char_traits@G@std@@@2@XZ */
10085 DEFINE_THISCALL_WRAPPER(basic_ifstream_wchar_rdbuf, 4)
10086 basic_filebuf_wchar* __thiscall basic_ifstream_wchar_rdbuf(const basic_ifstream_wchar *this)
10087 {
10088     TRACE("(%p)\n", this);
10089     return (basic_filebuf_wchar*)&this->filebuf;
10090 }
10091
10092 static inline basic_ios_char* basic_fstream_char_to_basic_ios(basic_fstream_char *ptr)
10093 {
10094     return (basic_ios_char*)((char*)ptr+basic_fstream_char_vbtable1[1]);
10095 }
10096
10097 static inline basic_fstream_char* basic_fstream_char_from_basic_ios(basic_ios_char *ptr)
10098 {
10099     return (basic_fstream_char*)((char*)ptr-basic_fstream_char_vbtable1[1]);
10100 }
10101
10102 /* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@XZ */
10103 /* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@XZ */
10104 DEFINE_THISCALL_WRAPPER(basic_fstream_char_ctor, 8)
10105 basic_fstream_char* __thiscall basic_fstream_char_ctor(basic_fstream_char *this, MSVCP_bool virt_init)
10106 {
10107     basic_ios_char *basic_ios;
10108
10109     TRACE("(%p %d)\n", this, virt_init);
10110
10111     if(virt_init) {
10112         this->base.base1.vbtable = basic_fstream_char_vbtable1;
10113         this->base.base2.vbtable = basic_fstream_char_vbtable2;
10114         basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
10115         basic_ios_char_ctor(basic_ios);
10116     }else {
10117         basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
10118     }
10119
10120     basic_filebuf_char_ctor(&this->filebuf);
10121     basic_iostream_char_ctor(&this->base, &this->filebuf.base, FALSE);
10122     basic_ios->base.vtable = &MSVCP_basic_fstream_char_vtable;
10123     return this;
10124 }
10125
10126 /* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PAU_iobuf@@@Z */
10127 /* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEAU_iobuf@@@Z */
10128 static basic_fstream_char* basic_fstream_char_ctor_file(basic_fstream_char *this,
10129         FILE *file, MSVCP_bool virt_init)
10130 {
10131     basic_ios_char *basic_ios;
10132
10133     TRACE("(%p %p %d)\n", this, file, virt_init);
10134
10135     if(virt_init) {
10136         this->base.base1.vbtable = basic_fstream_char_vbtable1;
10137         this->base.base2.vbtable = basic_fstream_char_vbtable2;
10138         basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
10139         basic_ios_char_ctor(basic_ios);
10140     }else {
10141         basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
10142     }
10143
10144     basic_filebuf_char_ctor_file(&this->filebuf, file);
10145     basic_iostream_char_ctor(&this->base, &this->filebuf.base, FALSE);
10146     basic_ios->base.vtable = &MSVCP_basic_fstream_char_vtable;
10147     return this;
10148 }
10149
10150 /* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@ABV01@@Z */
10151 /* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@AEBV01@@Z */
10152 DEFINE_THISCALL_WRAPPER(basic_fstream_char_copy_ctor, 12)
10153 basic_fstream_char* __thiscall basic_fstream_char_copy_ctor(basic_fstream_char *this,
10154         basic_fstream_char *copy, MSVCP_bool virt_init)
10155 {
10156     TRACE("(%p %p %d)\n", this, copy, virt_init);
10157     return basic_fstream_char_ctor_file(this, copy->filebuf.file, virt_init);
10158 }
10159
10160 /* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PBDH@Z */
10161 /* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEBDH@Z */
10162 DEFINE_THISCALL_WRAPPER(basic_fstream_char_ctor_name, 16)
10163 basic_fstream_char* __thiscall basic_fstream_char_ctor_name(basic_fstream_char *this,
10164         const char *name, int mode, MSVCP_bool virt_init)
10165 {
10166     TRACE("(%p %s %d %d)\n", this, name, mode, virt_init);
10167
10168     basic_fstream_char_ctor(this, virt_init);
10169
10170     if(!basic_filebuf_char_open(&this->filebuf, name, mode, _SH_DENYNO)) {
10171         basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
10172         basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
10173     }
10174     return this;
10175 }
10176
10177 /* ??1?$basic_fstream@DU?$char_traits@D@std@@@std@@UAE@XZ */
10178 /* ??1?$basic_fstream@DU?$char_traits@D@std@@@std@@UEAA@XZ */
10179 DEFINE_THISCALL_WRAPPER(basic_fstream_char_dtor, 4)
10180 void __thiscall basic_fstream_char_dtor(basic_ios_char *base)
10181 {
10182     basic_fstream_char *this = basic_fstream_char_from_basic_ios(base);
10183
10184     TRACE("(%p)\n", this);
10185
10186     basic_iostream_char_dtor(basic_iostream_char_to_basic_ios(&this->base));
10187     basic_filebuf_char_dtor(&this->filebuf);
10188 }
10189
10190 /* ??_D?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXXZ */
10191 /* ??_D?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
10192 DEFINE_THISCALL_WRAPPER(basic_fstream_char_vbase_dtor, 4)
10193 void __thiscall basic_fstream_char_vbase_dtor(basic_fstream_char *this)
10194 {
10195     TRACE("(%p)\n", this);
10196
10197     basic_fstream_char_dtor(basic_fstream_char_to_basic_ios(this));
10198     basic_ios_char_dtor(basic_istream_char_get_basic_ios(&this->base.base1));
10199 }
10200
10201 DEFINE_THISCALL_WRAPPER(basic_fstream_char_vector_dtor, 8)
10202 basic_fstream_char* __thiscall basic_fstream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
10203 {
10204     basic_fstream_char *this = basic_fstream_char_from_basic_ios(base);
10205
10206     TRACE("(%p %x)\n", this, flags);
10207
10208     if(flags & 2) {
10209         /* we have an array, with the number of elements stored before the first object */
10210         INT_PTR i, *ptr = (INT_PTR *)this-1;
10211
10212         for(i=*ptr-1; i>=0; i--)
10213             basic_fstream_char_vbase_dtor(this+i);
10214         MSVCRT_operator_delete(ptr);
10215     } else {
10216         basic_fstream_char_vbase_dtor(this);
10217         if(flags & 1)
10218             MSVCRT_operator_delete(this);
10219     }
10220
10221     return this;
10222 }
10223
10224 /* ?close@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXXZ */
10225 /* ?close@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXXZ */
10226 DEFINE_THISCALL_WRAPPER(basic_fstream_char_close, 4)
10227 void __thiscall basic_fstream_char_close(basic_fstream_char *this)
10228 {
10229     TRACE("(%p)\n", this);
10230
10231     if(!basic_filebuf_char_close(&this->filebuf)) {
10232         basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
10233         basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
10234     }
10235 }
10236
10237 /* ?is_open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QBE_NXZ */
10238 /* ?is_open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEBA_NXZ */
10239 DEFINE_THISCALL_WRAPPER(basic_fstream_char_is_open, 4)
10240 MSVCP_bool __thiscall basic_fstream_char_is_open(const basic_fstream_char *this)
10241 {
10242     TRACE("(%p)\n", this);
10243     return basic_filebuf_char_is_open(&this->filebuf);
10244 }
10245
10246 /* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBDH@Z */
10247 /* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDH@Z */
10248 DEFINE_THISCALL_WRAPPER(basic_fstream_char_open, 12)
10249 void __thiscall basic_fstream_char_open(basic_fstream_char *this,
10250         const char *name, int mode)
10251 {
10252     TRACE("(%p %s %d)\n", this, name, mode);
10253
10254     if(!basic_filebuf_char_open(&this->filebuf, name, mode, _SH_DENYNO)) {
10255         basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
10256         basic_ios_char_setstate(basic_ios, IOSTATE_failbit);
10257     }
10258 }
10259
10260 /* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBDF@Z */
10261 /* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDF@Z */
10262 DEFINE_THISCALL_WRAPPER(basic_fstream_char_open_old, 12)
10263 void __thiscall basic_fstream_char_open_old(basic_fstream_char *this,
10264         const char *name, int mode)
10265 {
10266     basic_fstream_char_open(this, name, mode);
10267 }
10268
10269 /* ?rdbuf@?$basic_fstream@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ */
10270 /* ?rdbuf@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ */
10271 DEFINE_THISCALL_WRAPPER(basic_fstream_char_rdbuf, 4)
10272 basic_filebuf_char* __thiscall basic_fstream_char_rdbuf(const basic_fstream_char *this)
10273 {
10274     TRACE("(%p)\n", this);
10275     return (basic_filebuf_char*)&this->filebuf;
10276 }
10277
10278 static inline basic_ios_wchar* basic_fstream_wchar_to_basic_ios(basic_fstream_wchar *ptr)
10279 {
10280     return (basic_ios_wchar*)((char*)ptr+basic_fstream_wchar_vbtable1[1]);
10281 }
10282
10283 static inline basic_fstream_wchar* basic_fstream_wchar_from_basic_ios(basic_ios_wchar *ptr)
10284 {
10285     return (basic_fstream_wchar*)((char*)ptr-basic_fstream_wchar_vbtable1[1]);
10286 }
10287
10288 /* ??0?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QAE@XZ */
10289 /* ??0?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEAA@XZ */
10290 static basic_fstream_wchar* basic_fstream_wchar_ctor(basic_fstream_wchar *this, MSVCP_bool virt_init)
10291 {
10292     basic_ios_wchar *basic_ios;
10293
10294     TRACE("(%p %d)\n", this, virt_init);
10295
10296     if(virt_init) {
10297         this->base.base1.vbtable = basic_fstream_wchar_vbtable1;
10298         this->base.base2.vbtable = basic_fstream_wchar_vbtable2;
10299         basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1);
10300         basic_ios_wchar_ctor(basic_ios);
10301     }else {
10302         basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1);
10303     }
10304
10305     basic_filebuf_wchar_ctor(&this->filebuf);
10306     basic_iostream_wchar_ctor(&this->base, &this->filebuf.base, FALSE);
10307     basic_ios->base.vtable = &MSVCP_basic_fstream_wchar_vtable;
10308     return this;
10309 }
10310
10311 /* ??0?$basic_fstream@GU?$char_traits@G@std@@@std@@QAE@XZ */
10312 /* ??0?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAA@XZ */
10313 DEFINE_THISCALL_WRAPPER(basic_fstream_short_ctor, 8)
10314 basic_fstream_wchar* __thiscall basic_fstream_short_ctor(basic_fstream_wchar *this, MSVCP_bool virt_init)
10315 {
10316     basic_fstream_wchar_ctor(this, virt_init);
10317     basic_istream_wchar_get_basic_ios(&this->base.base1)->base.vtable = &MSVCP_basic_fstream_short_vtable;
10318     return this;
10319 }
10320
10321 /* ??0?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QAE@PAU_iobuf@@@Z */
10322 /* ??0?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEAA@PEAU_iobuf@@@Z */
10323 static basic_fstream_wchar* basic_fstream_wchar_ctor_file(basic_fstream_wchar *this,
10324         FILE *file, MSVCP_bool virt_init)
10325 {
10326     basic_ios_wchar *basic_ios;
10327
10328     TRACE("(%p %p %d)\n", this, file, virt_init);
10329
10330     if(virt_init) {
10331         this->base.base1.vbtable = basic_fstream_wchar_vbtable1;
10332         this->base.base2.vbtable = basic_fstream_wchar_vbtable2;
10333         basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1);
10334         basic_ios_wchar_ctor(basic_ios);
10335     }else {
10336         basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1);
10337     }
10338
10339     basic_filebuf_wchar_ctor_file(&this->filebuf, file);
10340     basic_iostream_wchar_ctor(&this->base, &this->filebuf.base, FALSE);
10341     basic_ios->base.vtable = &MSVCP_basic_fstream_wchar_vtable;
10342     return this;
10343 }
10344
10345 /* ??0?$basic_fstream@GU?$char_traits@G@std@@@std@@QAE@PAU_iobuf@@@Z */
10346 /* ??0?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAA@PEAU_iobuf@@@Z */
10347 static basic_fstream_wchar* basic_fstream_short_ctor_file(basic_fstream_wchar *this,
10348         FILE *file, MSVCP_bool virt_init)
10349 {
10350     basic_fstream_wchar_ctor_file(this, file, virt_init);
10351     basic_istream_wchar_get_basic_ios(&this->base.base1)->base.vtable = &MSVCP_basic_fstream_short_vtable;
10352     return this;
10353 }
10354
10355 /* ??0?$basic_fstream@GU?$char_traits@G@std@@@std@@QAE@ABV01@@Z */
10356 /* ??0?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAA@AEBV01@@Z */
10357 DEFINE_THISCALL_WRAPPER(basic_fstream_short_copy_ctor, 12)
10358 basic_fstream_wchar* __thiscall basic_fstream_short_copy_ctor(basic_fstream_wchar *this,
10359         basic_fstream_wchar *copy, MSVCP_bool virt_init)
10360 {
10361     TRACE("(%p %p %d)\n", this, copy, virt_init);
10362     return basic_fstream_short_ctor_file(this, copy->filebuf.file, virt_init);
10363 }
10364
10365 /* ??0?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QAE@PB_WHH@Z */
10366 /* ??0?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEAA@PEB_WHH@Z */
10367 DEFINE_THISCALL_WRAPPER(basic_fstream_short_ctor_name, 16)
10368 basic_fstream_wchar* __thiscall basic_fstream_short_ctor_name(basic_fstream_wchar *this,
10369         const char *name, int mode, MSVCP_bool virt_init)
10370 {
10371     TRACE("(%p %s %d %d)\n", this, name, mode, virt_init);
10372
10373     basic_fstream_short_ctor(this, virt_init);
10374
10375     if(!basic_filebuf_wchar_open(&this->filebuf, name, mode, _SH_DENYNO)) {
10376         basic_ios_wchar *basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1);
10377         basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit);
10378     }
10379     return this;
10380 }
10381
10382 /* ??1?$basic_fstream@_WU?$char_traits@_W@std@@@std@@UAE@XZ */
10383 /* ??1?$basic_fstream@_WU?$char_traits@_W@std@@@std@@UEAA@XZ */
10384 /* ??1?$basic_fstream@GU?$char_traits@G@std@@@std@@UAE@XZ */
10385 /* ??1?$basic_fstream@GU?$char_traits@G@std@@@std@@UEAA@XZ */
10386 DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_dtor, 4)
10387 void __thiscall basic_fstream_wchar_dtor(basic_ios_wchar *base)
10388 {
10389     basic_fstream_wchar *this = basic_fstream_wchar_from_basic_ios(base);
10390
10391     TRACE("(%p)\n", this);
10392
10393     basic_iostream_wchar_dtor(basic_iostream_wchar_to_basic_ios(&this->base));
10394     basic_filebuf_wchar_dtor(&this->filebuf);
10395 }
10396
10397 /* ??_D?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
10398 /* ??_D?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
10399 /* ??_D?$basic_fstream@GU?$char_traits@G@std@@@std@@QAEXXZ */
10400 /* ??_D?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
10401 DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_vbase_dtor, 4)
10402 void __thiscall basic_fstream_wchar_vbase_dtor(basic_fstream_wchar *this)
10403 {
10404     TRACE("(%p)\n", this);
10405
10406     basic_fstream_wchar_dtor(basic_fstream_wchar_to_basic_ios(this));
10407     basic_ios_wchar_dtor(basic_istream_wchar_get_basic_ios(&this->base.base1));
10408 }
10409
10410 DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_vector_dtor, 8)
10411 basic_fstream_wchar* __thiscall basic_fstream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags)
10412 {
10413     basic_fstream_wchar *this = basic_fstream_wchar_from_basic_ios(base);
10414
10415     TRACE("(%p %x)\n", this, flags);
10416
10417     if(flags & 2) {
10418         /* we have an array, with the number of elements stored before the first object */
10419         INT_PTR i, *ptr = (INT_PTR *)this-1;
10420
10421         for(i=*ptr-1; i>=0; i--)
10422             basic_fstream_wchar_vbase_dtor(this+i);
10423         MSVCRT_operator_delete(ptr);
10424     } else {
10425         basic_fstream_wchar_vbase_dtor(this);
10426         if(flags & 1)
10427             MSVCRT_operator_delete(this);
10428     }
10429
10430     return this;
10431 }
10432
10433 /* ?close@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QAEXXZ */
10434 /* ?close@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEAAXXZ */
10435 /* ?close@?$basic_fstream@GU?$char_traits@G@std@@@std@@QAEXXZ */
10436 /* ?close@?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAAXXZ */
10437 DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_close, 4)
10438 void __thiscall basic_fstream_wchar_close(basic_fstream_wchar *this)
10439 {
10440     TRACE("(%p)\n", this);
10441
10442     if(!basic_filebuf_wchar_close(&this->filebuf)) {
10443         basic_ios_wchar *basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1);
10444         basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit);
10445     }
10446 }
10447
10448 /* ?is_open@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QBE_NXZ */
10449 /* ?is_open@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEBA_NXZ */
10450 /* ?is_open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QBE_NXZ */
10451 /* ?is_open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QEBA_NXZ */
10452 DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_is_open, 4)
10453 MSVCP_bool __thiscall basic_fstream_wchar_is_open(const basic_fstream_wchar *this)
10454 {
10455     TRACE("(%p)\n", this);
10456     return basic_filebuf_wchar_is_open(&this->filebuf);
10457 }
10458
10459 /* ?open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAEPAV12@PBDH@Z */
10460 /* ?open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@PEBDH@Z */
10461 DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_open, 12)
10462 void __thiscall basic_fstream_wchar_open(basic_fstream_wchar *this,
10463         const char *name, int mode)
10464 {
10465     TRACE("(%p %s %d)\n", this, name, mode);
10466
10467     if(!basic_filebuf_wchar_open(&this->filebuf, name, mode, _SH_DENYNO)) {
10468         basic_ios_wchar *basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1);
10469         basic_ios_wchar_setstate(basic_ios, IOSTATE_failbit);
10470     }
10471 }
10472
10473 /* ?open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAEPAV12@PBDF@Z */
10474 /* ?open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@PEBDF@Z */
10475 DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_open_old, 12)
10476 void __thiscall basic_fstream_wchar_open_old(basic_fstream_wchar *this,
10477         const char *name, int mode)
10478 {
10479     basic_fstream_wchar_open(this, name, mode);
10480 }
10481
10482 /* ?rdbuf@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_filebuf@_WU?$char_traits@_W@std@@@2@XZ */
10483 /* ?rdbuf@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QEBAPEAV?$basic_filebuf@_WU?$char_traits@_W@std@@@2@XZ */
10484 /* ?rdbuf@?$basic_fstream@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_filebuf@GU?$char_traits@G@std@@@2@XZ */
10485 /* ?rdbuf@?$basic_fstream@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_filebuf@GU?$char_traits@G@std@@@2@XZ */
10486 DEFINE_THISCALL_WRAPPER(basic_fstream_wchar_rdbuf, 4)
10487 basic_filebuf_wchar* __thiscall basic_fstream_wchar_rdbuf(const basic_fstream_wchar *this)
10488 {
10489     TRACE("(%p)\n", this);
10490     return (basic_filebuf_wchar*)&this->filebuf;
10491 }
10492
10493 static inline basic_ios_char* basic_ostringstream_char_to_basic_ios(basic_ostringstream_char *ptr)
10494 {
10495     return (basic_ios_char*)((char*)ptr+basic_ostringstream_char_vbtable[1]);
10496 }
10497
10498 static inline basic_ostringstream_char* basic_ostringstream_char_from_basic_ios(basic_ios_char *ptr)
10499 {
10500     return (basic_ostringstream_char*)((char*)ptr-basic_ostringstream_char_vbtable[1]);
10501 }
10502
10503 /* ??0?$basic_ostringstream@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 */
10504 /* ??0?$basic_ostringstream@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 */
10505 DEFINE_THISCALL_WRAPPER(basic_ostringstream_char_ctor_str, 16)
10506 basic_ostringstream_char* __thiscall basic_ostringstream_char_ctor_str(basic_ostringstream_char *this,
10507         const basic_string_char *str, int mode, MSVCP_bool virt_init)
10508 {
10509     basic_ios_char *basic_ios;
10510
10511     TRACE("(%p %p %d %d)\n", this, str, mode, virt_init);
10512
10513     if(virt_init) {
10514         this->base.vbtable = basic_ostringstream_char_vbtable;
10515         basic_ios = basic_ostream_char_get_basic_ios(&this->base);
10516         basic_ios_char_ctor(basic_ios);
10517     }else {
10518         basic_ios = basic_ostream_char_get_basic_ios(&this->base);
10519     }
10520
10521     basic_stringbuf_char_ctor_str(&this->strbuf, str, mode|OPENMODE_out);
10522     basic_ostream_char_ctor(&this->base, &this->strbuf.base, FALSE, TRUE, FALSE);
10523     basic_ios->base.vtable = &MSVCP_basic_ostringstream_char_vtable;
10524     return this;
10525 }
10526
10527 /* ??0?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@H@Z */
10528 /* ??0?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@H@Z */
10529 DEFINE_THISCALL_WRAPPER(basic_ostringstream_char_ctor_mode, 12)
10530 basic_ostringstream_char* __thiscall basic_ostringstream_char_ctor_mode(
10531         basic_ostringstream_char *this, int mode, MSVCP_bool virt_init)
10532 {
10533     basic_ios_char *basic_ios;
10534
10535     TRACE("(%p %d %d)\n", this, mode, virt_init);
10536
10537     if(virt_init) {
10538         this->base.vbtable = basic_ostringstream_char_vbtable;
10539         basic_ios = basic_ostream_char_get_basic_ios(&this->base);
10540         basic_ios_char_ctor(basic_ios);
10541     }else {
10542         basic_ios = basic_ostream_char_get_basic_ios(&this->base);
10543     }
10544
10545     basic_stringbuf_char_ctor_mode(&this->strbuf, mode|OPENMODE_out);
10546     basic_ostream_char_ctor(&this->base, &this->strbuf.base, FALSE, TRUE, FALSE);
10547     basic_ios->base.vtable = &MSVCP_basic_ostringstream_char_vtable;
10548     return this;
10549 }
10550
10551 /* ??_F?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */
10552 /* ??_F?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */
10553 DEFINE_THISCALL_WRAPPER(basic_ostringstream_char_ctor, 8)
10554 basic_ostringstream_char* __thiscall basic_ostringstream_char_ctor(
10555         basic_ostringstream_char *this, MSVCP_bool virt_init)
10556 {
10557     return basic_ostringstream_char_ctor_mode(this, 0, virt_init);
10558 }
10559
10560 /* ??1?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UAE@XZ */
10561 /* ??1?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UEAA@XZ */
10562 DEFINE_THISCALL_WRAPPER(basic_ostringstream_char_dtor, 4)
10563 void __thiscall basic_ostringstream_char_dtor(basic_ios_char *base)
10564 {
10565     basic_ostringstream_char *this = basic_ostringstream_char_from_basic_ios(base);
10566
10567     TRACE("(%p)\n", this);
10568
10569     basic_stringbuf_char_dtor(&this->strbuf);
10570     basic_ostream_char_dtor(basic_ostream_char_to_basic_ios(&this->base));
10571 }
10572
10573 /* ??_D?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */
10574 /* ??_D?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */
10575 DEFINE_THISCALL_WRAPPER(basic_ostringstream_char_vbase_dtor, 4)
10576 void __thiscall basic_ostringstream_char_vbase_dtor(basic_ostringstream_char *this)
10577 {
10578     TRACE("(%p)\n", this);
10579
10580     basic_ostringstream_char_dtor(basic_ostringstream_char_to_basic_ios(this));
10581     basic_ios_char_dtor(basic_ostream_char_get_basic_ios(&this->base));
10582 }
10583
10584 DEFINE_THISCALL_WRAPPER(basic_ostringstream_char_vector_dtor, 8)
10585 basic_ostringstream_char* __thiscall basic_ostringstream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
10586 {
10587     basic_ostringstream_char *this = basic_ostringstream_char_from_basic_ios(base);
10588
10589     TRACE("(%p %x)\n", this, flags);
10590
10591     if(flags & 2) {
10592         /* we have an array, with the number of elements stored before the first object */
10593         INT_PTR i, *ptr = (INT_PTR *)this-1;
10594
10595         for(i=*ptr-1; i>=0; i--)
10596             basic_ostringstream_char_vbase_dtor(this+i);
10597         MSVCRT_operator_delete(ptr);
10598     } else {
10599         basic_ostringstream_char_vbase_dtor(this);
10600         if(flags & 1)
10601             MSVCRT_operator_delete(this);
10602     }
10603
10604     return this;
10605 }
10606
10607 /* ?rdbuf@?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPAV?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
10608 /* ?rdbuf@?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEAV?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
10609 DEFINE_THISCALL_WRAPPER(basic_ostringstream_char_rdbuf, 4)
10610 basic_stringbuf_char* __thiscall basic_ostringstream_char_rdbuf(const basic_ostringstream_char *this)
10611 {
10612     TRACE("(%p)\n", this);
10613     return (basic_stringbuf_char*)&this->strbuf;
10614 }
10615
10616 /* ?str@?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
10617 /* ?str@?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
10618 DEFINE_THISCALL_WRAPPER(basic_ostringstream_char_str_set, 8)
10619 void __thiscall basic_ostringstream_char_str_set(basic_ostringstream_char *this, const basic_string_char *str)
10620 {
10621     TRACE("(%p %p)\n", this, str);
10622     basic_stringbuf_char_str_set(&this->strbuf, str);
10623 }
10624
10625 /* ?str@?$basic_ostringstream@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 */
10626 /* ?str@?$basic_ostringstream@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 */
10627 DEFINE_THISCALL_WRAPPER(basic_ostringstream_char_str_get, 8)
10628 basic_string_char* __thiscall basic_ostringstream_char_str_get(const basic_ostringstream_char *this, basic_string_char *ret)
10629 {
10630     TRACE("(%p %p)\n", this, ret);
10631     return basic_stringbuf_char_str_get(&this->strbuf, ret);
10632 }
10633
10634 static inline basic_ios_wchar* basic_ostringstream_wchar_to_basic_ios(basic_ostringstream_wchar *ptr)
10635 {
10636     return (basic_ios_wchar*)((char*)ptr+basic_ostringstream_wchar_vbtable[1]);
10637 }
10638
10639 static inline basic_ostringstream_wchar* basic_ostringstream_wchar_from_basic_ios(basic_ios_wchar *ptr)
10640 {
10641     return (basic_ostringstream_wchar*)((char*)ptr-basic_ostringstream_wchar_vbtable[1]);
10642 }
10643
10644 /* ??0?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@1@H@Z */
10645 /* ??0?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@AEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@1@H@Z */
10646 static basic_ostringstream_wchar* basic_ostringstream_wchar_ctor_str(basic_ostringstream_wchar *this,
10647         const basic_string_wchar *str, int mode, MSVCP_bool virt_init)
10648 {
10649     basic_ios_wchar *basic_ios;
10650
10651     TRACE("(%p %p %d %d)\n", this, str, mode, virt_init);
10652
10653     if(virt_init) {
10654         this->base.vbtable = basic_ostringstream_wchar_vbtable;
10655         basic_ios = basic_ostream_wchar_get_basic_ios(&this->base);
10656         basic_ios_wchar_ctor(basic_ios);
10657     }else {
10658         basic_ios = basic_ostream_wchar_get_basic_ios(&this->base);
10659     }
10660
10661     basic_stringbuf_wchar_ctor_str(&this->strbuf, str, mode|OPENMODE_out);
10662     basic_ostream_short_ctor(&this->base, &this->strbuf.base, FALSE, TRUE, FALSE);
10663     basic_ios->base.vtable = &MSVCP_basic_ostringstream_wchar_vtable;
10664     return this;
10665 }
10666
10667 /* ??0?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@1@H@Z */
10668 /* ??0?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@1@H@Z */
10669 DEFINE_THISCALL_WRAPPER(basic_ostringstream_short_ctor_str, 16)
10670 basic_ostringstream_wchar* __thiscall basic_ostringstream_short_ctor_str(basic_ostringstream_wchar *this,
10671         const basic_string_wchar *str, int mode, MSVCP_bool virt_init)
10672 {
10673     basic_ostringstream_wchar_ctor_str(this, str, mode, virt_init);
10674     basic_ostream_wchar_get_basic_ios(&this->base)->base.vtable = &MSVCP_basic_ostringstream_short_vtable;
10675     return this;
10676 }
10677
10678 /* ??0?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@H@Z */
10679 /* ??0?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@H@Z */
10680 static basic_ostringstream_wchar* basic_ostringstream_wchar_ctor_mode(
10681         basic_ostringstream_wchar *this, int mode, MSVCP_bool virt_init)
10682 {
10683     basic_ios_wchar *basic_ios;
10684
10685     TRACE("(%p %d %d)\n", this, mode, virt_init);
10686
10687     if(virt_init) {
10688         this->base.vbtable = basic_ostringstream_wchar_vbtable;
10689         basic_ios = basic_ostream_wchar_get_basic_ios(&this->base);
10690         basic_ios_wchar_ctor(basic_ios);
10691     }else {
10692         basic_ios = basic_ostream_wchar_get_basic_ios(&this->base);
10693     }
10694
10695     basic_stringbuf_wchar_ctor_mode(&this->strbuf, mode|OPENMODE_out);
10696     basic_ostream_short_ctor(&this->base, &this->strbuf.base, FALSE, TRUE, FALSE);
10697     basic_ios->base.vtable = &MSVCP_basic_ostringstream_wchar_vtable;
10698     return this;
10699 }
10700
10701 /* ??0?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@H@Z */
10702 /* ??0?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@H@Z */
10703 DEFINE_THISCALL_WRAPPER(basic_ostringstream_short_ctor_mode, 12)
10704 basic_ostringstream_wchar* __thiscall basic_ostringstream_short_ctor_mode(
10705         basic_ostringstream_wchar *this, int mode, MSVCP_bool virt_init)
10706 {
10707     basic_ostringstream_wchar_ctor_mode(this, mode, virt_init);
10708     basic_ostream_wchar_get_basic_ios(&this->base)->base.vtable = &MSVCP_basic_ostringstream_short_vtable;
10709     return this;
10710 }
10711
10712 /* ??_F?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */
10713 /* ??_F?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */
10714 DEFINE_THISCALL_WRAPPER(basic_ostringstream_short_ctor, 8)
10715 basic_ostringstream_wchar* __thiscall basic_ostringstream_short_ctor(
10716         basic_ostringstream_wchar *this, MSVCP_bool virt_init)
10717 {
10718     return basic_ostringstream_short_ctor_mode(this, 0, virt_init);
10719 }
10720
10721 /* ??1?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@UAE@XZ */
10722 /* ??1?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@UEAA@XZ */
10723 /* ??1?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@UAE@XZ */
10724 /* ??1?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@UEAA@XZ */
10725 DEFINE_THISCALL_WRAPPER(basic_ostringstream_wchar_dtor, 4)
10726 void __thiscall basic_ostringstream_wchar_dtor(basic_ios_wchar *base)
10727 {
10728     basic_ostringstream_wchar *this = basic_ostringstream_wchar_from_basic_ios(base);
10729
10730     TRACE("(%p)\n", this);
10731
10732     basic_stringbuf_wchar_dtor(&this->strbuf);
10733     basic_ostream_wchar_dtor(basic_ostream_wchar_to_basic_ios(&this->base));
10734 }
10735
10736 /* ??_D?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXXZ */
10737 /* ??_D?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXXZ */
10738 /* ??_D?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */
10739 /* ??_D?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */
10740 DEFINE_THISCALL_WRAPPER(basic_ostringstream_wchar_vbase_dtor, 4)
10741 void __thiscall basic_ostringstream_wchar_vbase_dtor(basic_ostringstream_wchar *this)
10742 {
10743     TRACE("(%p)\n", this);
10744
10745     basic_ostringstream_wchar_dtor(basic_ostringstream_wchar_to_basic_ios(this));
10746     basic_ios_wchar_dtor(basic_ostream_wchar_get_basic_ios(&this->base));
10747 }
10748
10749 DEFINE_THISCALL_WRAPPER(basic_ostringstream_wchar_vector_dtor, 8)
10750 basic_ostringstream_wchar* __thiscall basic_ostringstream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags)
10751 {
10752     basic_ostringstream_wchar *this = basic_ostringstream_wchar_from_basic_ios(base);
10753
10754     TRACE("(%p %x)\n", this, flags);
10755
10756     if(flags & 2) {
10757         /* we have an array, with the number of elements stored before the first object */
10758         INT_PTR i, *ptr = (INT_PTR *)this-1;
10759
10760         for(i=*ptr-1; i>=0; i--)
10761             basic_ostringstream_wchar_vbase_dtor(this+i);
10762         MSVCRT_operator_delete(ptr);
10763     } else {
10764         basic_ostringstream_wchar_vbase_dtor(this);
10765         if(flags & 1)
10766             MSVCRT_operator_delete(this);
10767     }
10768
10769     return this;
10770 }
10771
10772 /* ?rdbuf@?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEPAV?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
10773 /* ?rdbuf@?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAPEAV?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
10774 /* ?rdbuf@?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPAV?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
10775 /* ?rdbuf@?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEAV?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
10776 DEFINE_THISCALL_WRAPPER(basic_ostringstream_wchar_rdbuf, 4)
10777 basic_stringbuf_wchar* __thiscall basic_ostringstream_wchar_rdbuf(const basic_ostringstream_wchar *this)
10778 {
10779     TRACE("(%p)\n", this);
10780     return (basic_stringbuf_wchar*)&this->strbuf;
10781 }
10782
10783 /* ?str@?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z */
10784 /* ?str@?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z */
10785 /* ?str@?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z */
10786 /* ?str@?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z */
10787 DEFINE_THISCALL_WRAPPER(basic_ostringstream_wchar_str_set, 8)
10788 void __thiscall basic_ostringstream_wchar_str_set(basic_ostringstream_wchar *this, const basic_string_wchar *str)
10789 {
10790     TRACE("(%p %p)\n", this, str);
10791     basic_stringbuf_wchar_str_set(&this->strbuf, str);
10792 }
10793
10794 /* ?str@?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
10795 /* ?str@?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
10796 /* ?str@?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
10797 /* ?str@?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
10798 DEFINE_THISCALL_WRAPPER(basic_ostringstream_wchar_str_get, 8)
10799 basic_string_wchar* __thiscall basic_ostringstream_wchar_str_get(const basic_ostringstream_wchar *this, basic_string_wchar *ret)
10800 {
10801     TRACE("(%p %p)\n", this, ret);
10802     return basic_stringbuf_wchar_str_get(&this->strbuf, ret);
10803 }
10804
10805 static inline basic_ios_char* basic_istringstream_char_to_basic_ios(basic_istringstream_char *ptr)
10806 {
10807     return (basic_ios_char*)((char*)ptr+basic_istringstream_char_vbtable[1]);
10808 }
10809
10810 static inline basic_istringstream_char* basic_istringstream_char_from_basic_ios(basic_ios_char *ptr)
10811 {
10812     return (basic_istringstream_char*)((char*)ptr-basic_istringstream_char_vbtable[1]);
10813 }
10814
10815 /* ??0?$basic_istringstream@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 */
10816 /* ??0?$basic_istringstream@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 */
10817 DEFINE_THISCALL_WRAPPER(basic_istringstream_char_ctor_str, 16)
10818 basic_istringstream_char* __thiscall basic_istringstream_char_ctor_str(basic_istringstream_char *this,
10819         const basic_string_char *str, int mode, MSVCP_bool virt_init)
10820 {
10821     basic_ios_char *basic_ios;
10822
10823     TRACE("(%p %p %d %d)\n", this, str, mode, virt_init);
10824
10825     if(virt_init) {
10826         this->base.vbtable = basic_istringstream_char_vbtable;
10827         basic_ios = basic_istream_char_get_basic_ios(&this->base);
10828         basic_ios_char_ctor(basic_ios);
10829     }else {
10830         basic_ios = basic_istream_char_get_basic_ios(&this->base);
10831     }
10832
10833     basic_stringbuf_char_ctor_str(&this->strbuf, str, mode|OPENMODE_in);
10834     basic_istream_char_ctor(&this->base, &this->strbuf.base, FALSE, FALSE);
10835     basic_ios->base.vtable = &MSVCP_basic_istringstream_char_vtable;
10836     return this;
10837 }
10838
10839 /* ??0?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@H@Z */
10840 /* ??0?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@H@Z */
10841 DEFINE_THISCALL_WRAPPER(basic_istringstream_char_ctor_mode, 12)
10842 basic_istringstream_char* __thiscall basic_istringstream_char_ctor_mode(
10843         basic_istringstream_char *this, int mode, MSVCP_bool virt_init)
10844 {
10845     basic_ios_char *basic_ios;
10846
10847     TRACE("(%p %d %d)\n", this, mode, virt_init);
10848
10849     if(virt_init) {
10850         this->base.vbtable = basic_istringstream_char_vbtable;
10851         basic_ios = basic_istream_char_get_basic_ios(&this->base);
10852         basic_ios_char_ctor(basic_ios);
10853     }else {
10854         basic_ios = basic_istream_char_get_basic_ios(&this->base);
10855     }
10856
10857     basic_stringbuf_char_ctor_mode(&this->strbuf, mode|OPENMODE_in);
10858     basic_istream_char_ctor(&this->base, &this->strbuf.base, FALSE, FALSE);
10859     basic_ios->base.vtable = &MSVCP_basic_istringstream_char_vtable;
10860     return this;
10861 }
10862
10863 /* ??_F?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */
10864 /* ??_F?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */
10865 DEFINE_THISCALL_WRAPPER(basic_istringstream_char_ctor, 8)
10866 basic_istringstream_char* __thiscall basic_istringstream_char_ctor(
10867         basic_istringstream_char *this, MSVCP_bool virt_init)
10868 {
10869     return basic_istringstream_char_ctor_mode(this, 0, virt_init);
10870 }
10871
10872 /* ??1?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UAE@XZ */
10873 /* ??1?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UEAA@XZ */
10874 DEFINE_THISCALL_WRAPPER(basic_istringstream_char_dtor, 4)
10875 void __thiscall basic_istringstream_char_dtor(basic_ios_char *base)
10876 {
10877     basic_istringstream_char *this = basic_istringstream_char_from_basic_ios(base);
10878
10879     TRACE("(%p)\n", this);
10880
10881     basic_stringbuf_char_dtor(&this->strbuf);
10882     basic_istream_char_dtor(basic_istream_char_to_basic_ios(&this->base));
10883 }
10884
10885 /* ??_D?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */
10886 /* ??_D?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */
10887 DEFINE_THISCALL_WRAPPER(basic_istringstream_char_vbase_dtor, 4)
10888 void __thiscall basic_istringstream_char_vbase_dtor(basic_istringstream_char *this)
10889 {
10890     TRACE("(%p)\n", this);
10891
10892     basic_istringstream_char_dtor(basic_istringstream_char_to_basic_ios(this));
10893     basic_ios_char_dtor(basic_istream_char_get_basic_ios(&this->base));
10894 }
10895
10896 DEFINE_THISCALL_WRAPPER(basic_istringstream_char_vector_dtor, 8)
10897 basic_istringstream_char* __thiscall basic_istringstream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
10898 {
10899     basic_istringstream_char *this = basic_istringstream_char_from_basic_ios(base);
10900
10901     TRACE("(%p %x)\n", this, flags);
10902
10903     if(flags & 2) {
10904         /* we have an array, with the number of elements stored before the first object */
10905         INT_PTR i, *ptr = (INT_PTR *)this-1;
10906
10907         for(i=*ptr-1; i>=0; i--)
10908             basic_istringstream_char_vbase_dtor(this+i);
10909         MSVCRT_operator_delete(ptr);
10910     } else {
10911         basic_istringstream_char_vbase_dtor(this);
10912         if(flags & 1)
10913             MSVCRT_operator_delete(this);
10914     }
10915
10916     return this;
10917 }
10918
10919 /* ?rdbuf@?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPAV?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
10920 /* ?rdbuf@?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEAV?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
10921 DEFINE_THISCALL_WRAPPER(basic_istringstream_char_rdbuf, 4)
10922 basic_stringbuf_char* __thiscall basic_istringstream_char_rdbuf(const basic_istringstream_char *this)
10923 {
10924     TRACE("(%p)\n", this);
10925     return (basic_stringbuf_char*)&this->strbuf;
10926 }
10927
10928 /* ?str@?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
10929 /* ?str@?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
10930 DEFINE_THISCALL_WRAPPER(basic_istringstream_char_str_set, 8)
10931 void __thiscall basic_istringstream_char_str_set(basic_istringstream_char *this, const basic_string_char *str)
10932 {
10933     TRACE("(%p %p)\n", this, str);
10934     basic_stringbuf_char_str_set(&this->strbuf, str);
10935 }
10936
10937 /* ?str@?$basic_istringstream@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 */
10938 /* ?str@?$basic_istringstream@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 */
10939 DEFINE_THISCALL_WRAPPER(basic_istringstream_char_str_get, 8)
10940 basic_string_char* __thiscall basic_istringstream_char_str_get(const basic_istringstream_char *this, basic_string_char *ret)
10941 {
10942     TRACE("(%p %p)\n", this, ret);
10943     return basic_stringbuf_char_str_get(&this->strbuf, ret);
10944 }
10945
10946 static inline basic_ios_wchar* basic_istringstream_wchar_to_basic_ios(basic_istringstream_wchar *ptr)
10947 {
10948     return (basic_ios_wchar*)((char*)ptr+basic_istringstream_wchar_vbtable[1]);
10949 }
10950
10951 static inline basic_istringstream_wchar* basic_istringstream_wchar_from_basic_ios(basic_ios_wchar *ptr)
10952 {
10953     return (basic_istringstream_wchar*)((char*)ptr-basic_istringstream_wchar_vbtable[1]);
10954 }
10955
10956 /* ??0?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@1@H@Z */
10957 /* ??0?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@AEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@1@H@Z */
10958 static basic_istringstream_wchar* basic_istringstream_wchar_ctor_str(basic_istringstream_wchar *this,
10959         const basic_string_wchar *str, int mode, MSVCP_bool virt_init)
10960 {
10961     basic_ios_wchar *basic_ios;
10962
10963     TRACE("(%p %p %d %d)\n", this, str, mode, virt_init);
10964
10965     if(virt_init) {
10966         this->base.vbtable = basic_istringstream_wchar_vbtable;
10967         basic_ios = basic_istream_wchar_get_basic_ios(&this->base);
10968         basic_ios_wchar_ctor(basic_ios);
10969     }else {
10970         basic_ios = basic_istream_wchar_get_basic_ios(&this->base);
10971     }
10972
10973     basic_stringbuf_wchar_ctor_str(&this->strbuf, str, mode|OPENMODE_in);
10974     basic_istream_wchar_ctor(&this->base, &this->strbuf.base, FALSE, FALSE);
10975     basic_ios->base.vtable = &MSVCP_basic_istringstream_wchar_vtable;
10976     return this;
10977 }
10978
10979 /* ??0?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@1@H@Z */
10980 /* ??0?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@1@H@Z */
10981 DEFINE_THISCALL_WRAPPER(basic_istringstream_short_ctor_str, 16)
10982 basic_istringstream_wchar* __thiscall basic_istringstream_short_ctor_str(basic_istringstream_wchar *this,
10983         const basic_string_wchar *str, int mode, MSVCP_bool virt_init)
10984 {
10985     basic_istringstream_wchar_ctor_str(this, str, mode, virt_init);
10986     basic_istream_wchar_get_basic_ios(&this->base)->base.vtable = &MSVCP_basic_istringstream_short_vtable;
10987     return this;
10988 }
10989
10990 /* ??0?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@H@Z */
10991 /* ??0?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@H@Z */
10992 static basic_istringstream_wchar* basic_istringstream_wchar_ctor_mode(
10993         basic_istringstream_wchar *this, int mode, MSVCP_bool virt_init)
10994 {
10995     basic_ios_wchar *basic_ios;
10996
10997     TRACE("(%p %d %d)\n", this, mode, virt_init);
10998
10999     if(virt_init) {
11000         this->base.vbtable = basic_istringstream_wchar_vbtable;
11001         basic_ios = basic_istream_wchar_get_basic_ios(&this->base);
11002         basic_ios_wchar_ctor(basic_ios);
11003     }else {
11004         basic_ios = basic_istream_wchar_get_basic_ios(&this->base);
11005     }
11006
11007     basic_stringbuf_wchar_ctor_mode(&this->strbuf, mode|OPENMODE_in);
11008     basic_istream_wchar_ctor(&this->base, &this->strbuf.base, FALSE, FALSE);
11009     basic_ios->base.vtable = &MSVCP_basic_istringstream_wchar_vtable;
11010     return this;
11011 }
11012
11013 /* ??0?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@H@Z */
11014 /* ??0?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@H@Z */
11015 DEFINE_THISCALL_WRAPPER(basic_istringstream_short_ctor_mode, 12)
11016 basic_istringstream_wchar* __thiscall basic_istringstream_short_ctor_mode(
11017         basic_istringstream_wchar *this, int mode, MSVCP_bool virt_init)
11018 {
11019     basic_istringstream_wchar_ctor_mode(this, mode, virt_init);
11020     basic_istream_wchar_get_basic_ios(&this->base)->base.vtable = &MSVCP_basic_istringstream_short_vtable;
11021     return this;
11022 }
11023
11024 /* ??_F?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */
11025 /* ??_F?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */
11026 DEFINE_THISCALL_WRAPPER(basic_istringstream_short_ctor, 8)
11027 basic_istringstream_wchar* __thiscall basic_istringstream_short_ctor(
11028         basic_istringstream_wchar *this, MSVCP_bool virt_init)
11029 {
11030     return basic_istringstream_short_ctor_mode(this, 0, virt_init);
11031 }
11032
11033 /* ??1?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@UAE@XZ */
11034 /* ??1?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@UEAA@XZ */
11035 /* ??1?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@UAE@XZ */
11036 /* ??1?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@UEAA@XZ */
11037 DEFINE_THISCALL_WRAPPER(basic_istringstream_wchar_dtor, 4)
11038 void __thiscall basic_istringstream_wchar_dtor(basic_ios_wchar *base)
11039 {
11040     basic_istringstream_wchar *this = basic_istringstream_wchar_from_basic_ios(base);
11041
11042     TRACE("(%p)\n", this);
11043
11044     basic_stringbuf_wchar_dtor(&this->strbuf);
11045     basic_istream_wchar_dtor(basic_istream_wchar_to_basic_ios(&this->base));
11046 }
11047
11048 /* ??_D?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXXZ */
11049 /* ??_D?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXXZ */
11050 /* ??_D?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */
11051 /* ??_D?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */
11052 DEFINE_THISCALL_WRAPPER(basic_istringstream_wchar_vbase_dtor, 4)
11053 void __thiscall basic_istringstream_wchar_vbase_dtor(basic_istringstream_wchar *this)
11054 {
11055     TRACE("(%p)\n", this);
11056
11057     basic_istringstream_wchar_dtor(basic_istringstream_wchar_to_basic_ios(this));
11058     basic_ios_wchar_dtor(basic_istream_wchar_get_basic_ios(&this->base));
11059 }
11060
11061 DEFINE_THISCALL_WRAPPER(basic_istringstream_wchar_vector_dtor, 8)
11062 basic_istringstream_wchar* __thiscall basic_istringstream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags)
11063 {
11064     basic_istringstream_wchar *this = basic_istringstream_wchar_from_basic_ios(base);
11065
11066     TRACE("(%p %x)\n", this, flags);
11067
11068     if(flags & 2) {
11069         /* we have an array, with the number of elements stored before the first object */
11070         INT_PTR i, *ptr = (INT_PTR *)this-1;
11071
11072         for(i=*ptr-1; i>=0; i--)
11073             basic_istringstream_wchar_vbase_dtor(this+i);
11074         MSVCRT_operator_delete(ptr);
11075     } else {
11076         basic_istringstream_wchar_vbase_dtor(this);
11077         if(flags & 1)
11078             MSVCRT_operator_delete(this);
11079     }
11080
11081     return this;
11082 }
11083
11084 /* ?rdbuf@?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEPAV?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
11085 /* ?rdbuf@?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAPEAV?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
11086 /* ?rdbuf@?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPAV?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
11087 /* ?rdbuf@?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEAV?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
11088 DEFINE_THISCALL_WRAPPER(basic_istringstream_wchar_rdbuf, 4)
11089 basic_stringbuf_wchar* __thiscall basic_istringstream_wchar_rdbuf(const basic_istringstream_wchar *this)
11090 {
11091     TRACE("(%p)\n", this);
11092     return (basic_stringbuf_wchar*)&this->strbuf;
11093 }
11094
11095 /* ?str@?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z */
11096 /* ?str@?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z */
11097 /* ?str@?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z */
11098 /* ?str@?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z */
11099 DEFINE_THISCALL_WRAPPER(basic_istringstream_wchar_str_set, 8)
11100 void __thiscall basic_istringstream_wchar_str_set(basic_istringstream_wchar *this, const basic_string_wchar *str)
11101 {
11102     TRACE("(%p %p)\n", this, str);
11103     basic_stringbuf_wchar_str_set(&this->strbuf, str);
11104 }
11105
11106 /* ?str@?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
11107 /* ?str@?$basic_istringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
11108 /* ?str@?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
11109 /* ?str@?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
11110 DEFINE_THISCALL_WRAPPER(basic_istringstream_wchar_str_get, 8)
11111 basic_string_wchar* __thiscall basic_istringstream_wchar_str_get(const basic_istringstream_wchar *this, basic_string_wchar *ret)
11112 {
11113     TRACE("(%p %p)\n", this, ret);
11114     return basic_stringbuf_wchar_str_get(&this->strbuf, ret);
11115 }
11116
11117 static inline basic_ios_char* basic_stringstream_char_to_basic_ios(basic_stringstream_char *ptr)
11118 {
11119     return (basic_ios_char*)((char*)ptr+basic_stringstream_char_vbtable1[1]);
11120 }
11121
11122 static inline basic_stringstream_char* basic_stringstream_char_from_basic_ios(basic_ios_char *ptr)
11123 {
11124     return (basic_stringstream_char*)((char*)ptr-basic_stringstream_char_vbtable1[1]);
11125 }
11126
11127 /* ??0?$basic_stringstream@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 */
11128 /* ??0?$basic_stringstream@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 */
11129 DEFINE_THISCALL_WRAPPER(basic_stringstream_char_ctor_str, 16)
11130 basic_stringstream_char* __thiscall basic_stringstream_char_ctor_str(basic_stringstream_char *this,
11131         const basic_string_char *str, int mode, MSVCP_bool virt_init)
11132 {
11133     basic_ios_char *basic_ios;
11134
11135     TRACE("(%p %p %d %d)\n", this, str, mode, virt_init);
11136
11137     if(virt_init) {
11138         this->base.base1.vbtable = basic_stringstream_char_vbtable1;
11139         this->base.base2.vbtable = basic_stringstream_char_vbtable2;
11140         basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
11141         basic_ios_char_ctor(basic_ios);
11142     }else {
11143         basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
11144     }
11145
11146     basic_stringbuf_char_ctor_str(&this->strbuf, str, mode);
11147     basic_iostream_char_ctor(&this->base, &this->strbuf.base, FALSE);
11148     basic_ios->base.vtable = &MSVCP_basic_stringstream_char_vtable;
11149     return this;
11150 }
11151
11152 /* ??0?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@H@Z */
11153 /* ??0?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAA@H@Z */
11154 DEFINE_THISCALL_WRAPPER(basic_stringstream_char_ctor_mode, 12)
11155 basic_stringstream_char* __thiscall basic_stringstream_char_ctor_mode(
11156         basic_stringstream_char *this, int mode, MSVCP_bool virt_init)
11157 {
11158     basic_ios_char *basic_ios;
11159
11160     TRACE("(%p %d %d)\n", this, mode, virt_init);
11161
11162     if(virt_init) {
11163         this->base.base1.vbtable = basic_stringstream_char_vbtable1;
11164         this->base.base2.vbtable = basic_stringstream_char_vbtable2;
11165         basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
11166         basic_ios_char_ctor(basic_ios);
11167     }else {
11168         basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
11169     }
11170
11171     basic_stringbuf_char_ctor_mode(&this->strbuf, mode);
11172     basic_iostream_char_ctor(&this->base, &this->strbuf.base, FALSE);
11173     basic_ios->base.vtable = &MSVCP_basic_stringstream_char_vtable;
11174     return this;
11175 }
11176
11177 /* ??_F?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */
11178 /* ??_F?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */
11179 DEFINE_THISCALL_WRAPPER(basic_stringstream_char_ctor, 8)
11180 basic_stringstream_char* __thiscall basic_stringstream_char_ctor(
11181         basic_stringstream_char *this, MSVCP_bool virt_init)
11182 {
11183     return basic_stringstream_char_ctor_mode(
11184             this, OPENMODE_out|OPENMODE_in, virt_init);
11185 }
11186
11187 /* ??1?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UAE@XZ */
11188 /* ??1?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UEAA@XZ */
11189 DEFINE_THISCALL_WRAPPER(basic_stringstream_char_dtor, 4)
11190 void __thiscall basic_stringstream_char_dtor(basic_ios_char *base)
11191 {
11192     basic_stringstream_char *this = basic_stringstream_char_from_basic_ios(base);
11193
11194     TRACE("(%p)\n", this);
11195
11196     basic_iostream_char_dtor(basic_iostream_char_to_basic_ios(&this->base));
11197     basic_stringbuf_char_dtor(&this->strbuf);
11198 }
11199
11200 /* ??_D?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXXZ */
11201 /* ??_D?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXXZ */
11202 DEFINE_THISCALL_WRAPPER(basic_stringstream_char_vbase_dtor, 4)
11203 void __thiscall basic_stringstream_char_vbase_dtor(basic_stringstream_char *this)
11204 {
11205     TRACE("(%p)\n", this);
11206
11207     basic_stringstream_char_dtor(basic_stringstream_char_to_basic_ios(this));
11208     basic_ios_char_dtor(basic_istream_char_get_basic_ios(&this->base.base1));
11209 }
11210
11211 DEFINE_THISCALL_WRAPPER(basic_stringstream_char_vector_dtor, 8)
11212 basic_stringstream_char* __thiscall basic_stringstream_char_vector_dtor(basic_ios_char *base, unsigned int flags)
11213 {
11214     basic_stringstream_char *this = basic_stringstream_char_from_basic_ios(base);
11215
11216     TRACE("(%p %x)\n", this, flags);
11217
11218     if(flags & 2) {
11219         /* we have an array, with the number of elements stored before the first object */
11220         INT_PTR i, *ptr = (INT_PTR *)this-1;
11221
11222         for(i=*ptr-1; i>=0; i--)
11223             basic_stringstream_char_vbase_dtor(this+i);
11224         MSVCRT_operator_delete(ptr);
11225     } else {
11226         basic_stringstream_char_vbase_dtor(this);
11227         if(flags & 1)
11228             MSVCRT_operator_delete(this);
11229     }
11230
11231     return this;
11232 }
11233
11234 /* ?rdbuf@?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPAV?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
11235 /* ?rdbuf@?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBAPEAV?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ */
11236 DEFINE_THISCALL_WRAPPER(basic_stringstream_char_rdbuf, 4)
11237 basic_stringbuf_char* __thiscall basic_stringstream_char_rdbuf(const basic_stringstream_char *this)
11238 {
11239     TRACE("(%p)\n", this);
11240     return (basic_stringbuf_char*)&this->strbuf;
11241 }
11242
11243 /* ?str@?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
11244 /* ?str@?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEAAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z */
11245 DEFINE_THISCALL_WRAPPER(basic_stringstream_char_str_set, 8)
11246 void __thiscall basic_stringstream_char_str_set(basic_stringstream_char *this, const basic_string_char *str)
11247 {
11248     TRACE("(%p %p)\n", this, str);
11249     basic_stringbuf_char_str_set(&this->strbuf, str);
11250 }
11251
11252 /* ?str@?$basic_stringstream@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 */
11253 /* ?str@?$basic_stringstream@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 */
11254 DEFINE_THISCALL_WRAPPER(basic_stringstream_char_str_get, 8)
11255 basic_string_char* __thiscall basic_stringstream_char_str_get(const basic_stringstream_char *this, basic_string_char *ret)
11256 {
11257     TRACE("(%p %p)\n", this, ret);
11258     return basic_stringbuf_char_str_get(&this->strbuf, ret);
11259 }
11260
11261 static inline basic_ios_wchar* basic_stringstream_wchar_to_basic_ios(basic_stringstream_wchar *ptr)
11262 {
11263     return (basic_ios_wchar*)((char*)ptr+basic_stringstream_wchar_vbtable1[1]);
11264 }
11265
11266 static inline basic_stringstream_wchar* basic_stringstream_wchar_from_basic_ios(basic_ios_wchar *ptr)
11267 {
11268     return (basic_stringstream_wchar*)((char*)ptr-basic_stringstream_wchar_vbtable1[1]);
11269 }
11270
11271 /* ??0?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@1@H@Z */
11272 /* ??0?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@AEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@1@H@Z */
11273 static basic_stringstream_wchar* basic_stringstream_wchar_ctor_str(basic_stringstream_wchar *this,
11274         const basic_string_wchar *str, int mode, MSVCP_bool virt_init)
11275 {
11276     basic_ios_wchar *basic_ios;
11277
11278     TRACE("(%p %p %d %d)\n", this, str, mode, virt_init);
11279
11280     if(virt_init) {
11281         this->base.base1.vbtable = basic_stringstream_wchar_vbtable1;
11282         this->base.base2.vbtable = basic_stringstream_wchar_vbtable2;
11283         basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1);
11284         basic_ios_wchar_ctor(basic_ios);
11285     }else {
11286         basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1);
11287     }
11288
11289     basic_stringbuf_wchar_ctor_str(&this->strbuf, str, mode);
11290     basic_iostream_wchar_ctor(&this->base, &this->strbuf.base, FALSE);
11291     basic_ios->base.vtable = &MSVCP_basic_stringstream_wchar_vtable;
11292     return this;
11293 }
11294
11295 /* ??0?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@1@H@Z */
11296 /* ??0?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@AEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@1@H@Z */
11297 DEFINE_THISCALL_WRAPPER(basic_stringstream_short_ctor_str, 16)
11298 basic_stringstream_wchar* __thiscall basic_stringstream_short_ctor_str(basic_stringstream_wchar *this,
11299         const basic_string_wchar *str, int mode, MSVCP_bool virt_init)
11300 {
11301     basic_stringstream_wchar_ctor_str(this, str, mode, virt_init);
11302     basic_istream_wchar_get_basic_ios(&this->base.base1)->base.vtable = &MSVCP_basic_stringstream_short_vtable;
11303     return this;
11304 }
11305
11306 /* ??0?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAE@H@Z */
11307 /* ??0?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA@H@Z */
11308 static basic_stringstream_wchar* basic_stringstream_wchar_ctor_mode(
11309         basic_stringstream_wchar *this, int mode, MSVCP_bool virt_init)
11310 {
11311     basic_ios_wchar *basic_ios;
11312
11313     TRACE("(%p %d %d)\n", this, mode, virt_init);
11314
11315     if(virt_init) {
11316         this->base.base1.vbtable = basic_stringstream_wchar_vbtable1;
11317         this->base.base2.vbtable = basic_stringstream_wchar_vbtable2;
11318         basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1);
11319         basic_ios_wchar_ctor(basic_ios);
11320     }else {
11321         basic_ios = basic_istream_wchar_get_basic_ios(&this->base.base1);
11322     }
11323
11324     basic_stringbuf_wchar_ctor_mode(&this->strbuf, mode);
11325     basic_iostream_wchar_ctor(&this->base, &this->strbuf.base, FALSE);
11326     basic_ios->base.vtable = &MSVCP_basic_stringstream_wchar_vtable;
11327     return this;
11328 }
11329
11330 /* ??0?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@H@Z */
11331 /* ??0?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAA@H@Z */
11332 DEFINE_THISCALL_WRAPPER(basic_stringstream_short_ctor_mode, 12)
11333 basic_stringstream_wchar* __thiscall basic_stringstream_short_ctor_mode(
11334         basic_stringstream_wchar *this, int mode, MSVCP_bool virt_init)
11335 {
11336     basic_stringstream_wchar_ctor_mode(this, mode, virt_init);
11337     basic_istream_wchar_get_basic_ios(&this->base.base1)->base.vtable = &MSVCP_basic_stringstream_short_vtable;
11338     return this;
11339 }
11340
11341 /* ??_F?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */
11342 /* ??_F?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */
11343 DEFINE_THISCALL_WRAPPER(basic_stringstream_short_ctor, 8)
11344 basic_stringstream_wchar* __thiscall basic_stringstream_short_ctor(
11345         basic_stringstream_wchar *this, MSVCP_bool virt_init)
11346 {
11347     return basic_stringstream_short_ctor_mode(
11348             this, OPENMODE_out|OPENMODE_in, virt_init);
11349 }
11350
11351 /* ??1?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@UAE@XZ */
11352 /* ??1?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@UEAA@XZ */
11353 /* ??1?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@UAE@XZ */
11354 /* ??1?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@UEAA@XZ */
11355 DEFINE_THISCALL_WRAPPER(basic_stringstream_wchar_dtor, 4)
11356 void __thiscall basic_stringstream_wchar_dtor(basic_ios_wchar *base)
11357 {
11358     basic_stringstream_wchar *this = basic_stringstream_wchar_from_basic_ios(base);
11359
11360     TRACE("(%p)\n", this);
11361
11362     basic_iostream_wchar_dtor(basic_iostream_wchar_to_basic_ios(&this->base));
11363     basic_stringbuf_wchar_dtor(&this->strbuf);
11364 }
11365
11366 /* ??_D?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXXZ */
11367 /* ??_D?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXXZ */
11368 /* ??_D?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXXZ */
11369 /* ??_D?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXXZ */
11370 DEFINE_THISCALL_WRAPPER(basic_stringstream_wchar_vbase_dtor, 4)
11371 void __thiscall basic_stringstream_wchar_vbase_dtor(basic_stringstream_wchar *this)
11372 {
11373     TRACE("(%p)\n", this);
11374
11375     basic_stringstream_wchar_dtor(basic_stringstream_wchar_to_basic_ios(this));
11376     basic_ios_wchar_dtor(basic_istream_wchar_get_basic_ios(&this->base.base1));
11377 }
11378
11379 DEFINE_THISCALL_WRAPPER(basic_stringstream_wchar_vector_dtor, 8)
11380 basic_stringstream_wchar* __thiscall basic_stringstream_wchar_vector_dtor(basic_ios_wchar *base, unsigned int flags)
11381 {
11382     basic_stringstream_wchar *this = basic_stringstream_wchar_from_basic_ios(base);
11383
11384     TRACE("(%p %x)\n", this, flags);
11385
11386     if(flags & 2) {
11387         /* we have an array, with the number of elements stored before the first object */
11388         INT_PTR i, *ptr = (INT_PTR *)this-1;
11389
11390         for(i=*ptr-1; i>=0; i--)
11391             basic_stringstream_wchar_vbase_dtor(this+i);
11392         MSVCRT_operator_delete(ptr);
11393     } else {
11394         basic_stringstream_wchar_vbase_dtor(this);
11395         if(flags & 1)
11396             MSVCRT_operator_delete(this);
11397     }
11398
11399     return this;
11400 }
11401
11402 /* ?rdbuf@?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBEPAV?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
11403 /* ?rdbuf@?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBAPEAV?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
11404 /* ?rdbuf@?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEPAV?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
11405 /* ?rdbuf@?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBAPEAV?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
11406 DEFINE_THISCALL_WRAPPER(basic_stringstream_wchar_rdbuf, 4)
11407 basic_stringbuf_wchar* __thiscall basic_stringstream_wchar_rdbuf(const basic_stringstream_wchar *this)
11408 {
11409     TRACE("(%p)\n", this);
11410     return (basic_stringbuf_wchar*)&this->strbuf;
11411 }
11412
11413 /* ?str@?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QAEXABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z */
11414 /* ?str@?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z */
11415 /* ?str@?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z */
11416 /* ?str@?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEAAXAEBV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z */
11417 DEFINE_THISCALL_WRAPPER(basic_stringstream_wchar_str_set, 8)
11418 void __thiscall basic_stringstream_wchar_str_set(basic_stringstream_wchar *this, const basic_string_wchar *str)
11419 {
11420     TRACE("(%p %p)\n", this, str);
11421     basic_stringbuf_wchar_str_set(&this->strbuf, str);
11422 }
11423
11424 /* ?str@?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
11425 /* ?str@?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ */
11426 /* ?str@?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
11427 /* ?str@?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ */
11428 DEFINE_THISCALL_WRAPPER(basic_stringstream_wchar_str_get, 8)
11429 basic_string_wchar* __thiscall basic_stringstream_wchar_str_get(const basic_stringstream_wchar *this, basic_string_wchar *ret)
11430 {
11431     TRACE("(%p %p)\n", this, ret);
11432     return basic_stringbuf_wchar_str_get(&this->strbuf, ret);
11433 }
11434
11435 /* ?_Init@strstreambuf@std@@IAEXHPAD0H@Z */
11436 /* ?_Init@strstreambuf@std@@IEAAX_JPEAD1H@Z */
11437 DEFINE_THISCALL_WRAPPER(strstreambuf__Init, 20)
11438 void __thiscall strstreambuf__Init(strstreambuf *this, streamsize len, char *g, char *p, int mode)
11439 {
11440     TRACE("(%p %ld %p %p %d)\n", this, len, g, p, mode);
11441
11442     this->minsize = 32;
11443     this->endsave = NULL;
11444     this->strmode = mode;
11445     this->palloc = NULL;
11446     this->pfree = NULL;
11447
11448     if(!g) {
11449         this->strmode |= STRSTATE_Dynamic;
11450         if(len > this->minsize)
11451             this->minsize = len;
11452         this->seekhigh = NULL;
11453         return;
11454     }
11455
11456     if(len < 0)
11457         len = INT_MAX;
11458     else if(!len)
11459         len = strlen(g);
11460
11461     this->seekhigh = g+len;
11462     basic_streambuf_char_setg(&this->base, g, g, p ? p : this->seekhigh);
11463     if(p)
11464         basic_streambuf_char_setp(&this->base, p, this->seekhigh);
11465 }
11466
11467 /* ??0strstreambuf@std@@QAE@PACH0@Z */
11468 /* ??0strstreambuf@std@@QEAA@PEAC_J0@Z */
11469 /* ??0strstreambuf@std@@QAE@PADH0@Z */
11470 /* ??0strstreambuf@std@@QEAA@PEAD_J0@Z */
11471 /* ??0strstreambuf@std@@QAE@PAEH0@Z */
11472 /* ??0strstreambuf@std@@QEAA@PEAE_J0@Z */
11473 static strstreambuf* strstreambuf_ctor_get_put(strstreambuf *this, char *g, streamsize len, char *p)
11474 {
11475     TRACE("(%p %p %ld %p)\n", this, g, len, p);
11476
11477     basic_streambuf_char_ctor(&this->base);
11478     this->base.vtable = &MSVCP_strstreambuf_vtable;
11479
11480     strstreambuf__Init(this, len, g, p, 0);
11481     return this;
11482 }
11483
11484 /* ?_Tidy@strstreambuf@std@@IAEXXZ */
11485 /* ?_Tidy@strstreambuf@std@@IEAAXXZ */
11486 DEFINE_THISCALL_WRAPPER(strstreambuf__Tidy, 4)
11487 void __thiscall strstreambuf__Tidy(strstreambuf *this)
11488 {
11489     TRACE("(%p)\n", this);
11490
11491     if((this->strmode & STRSTATE_Allocated) && !(this->strmode & STRSTATE_Frozen)) {
11492         if(this->pfree)
11493             this->pfree(basic_streambuf_char_eback(&this->base));
11494         else
11495             MSVCRT_operator_delete(basic_streambuf_char_eback(&this->base));
11496     }
11497
11498     this->endsave = NULL;
11499     this->seekhigh = NULL;
11500     this->strmode &= ~(STRSTATE_Allocated | STRSTATE_Frozen);
11501     basic_streambuf_char_setg(&this->base, NULL, NULL, NULL);
11502     basic_streambuf_char_setp(&this->base, NULL, NULL);
11503 }
11504
11505 /* ??1strstreambuf@std@@UAE@XZ */
11506 /* ??1strstreambuf@std@@UEAA@XZ */
11507 DEFINE_THISCALL_WRAPPER(strstreambuf_dtor, 4)
11508 void __thiscall strstreambuf_dtor(strstreambuf *this)
11509 {
11510     TRACE("(%p)\n", this);
11511
11512     strstreambuf__Tidy(this);
11513     basic_streambuf_char_dtor(&this->base);
11514 }
11515
11516 DEFINE_THISCALL_WRAPPER(strstreambuf_vector_dtor, 8)
11517 strstreambuf* __thiscall strstreambuf_vector_dtor(strstreambuf *this, unsigned int flags)
11518 {
11519     TRACE("(%p %x)\n", this, flags);
11520     if(flags & 2) {
11521         /* we have an array, with the number of elements stored before the first object */
11522         INT_PTR i, *ptr = (INT_PTR *)this-1;
11523
11524         for(i=*ptr-1; i>=0; i--)
11525             strstreambuf_dtor(this+i);
11526         MSVCRT_operator_delete(ptr);
11527     } else {
11528         strstreambuf_dtor(this);
11529         if(flags & 1)
11530             MSVCRT_operator_delete(this);
11531     }
11532
11533     return this;
11534 }
11535
11536 /* ?freeze@strstreambuf@std@@QAEX_N@Z */
11537 /* ?freeze@strstreambuf@std@@QEAAX_N@Z */
11538 DEFINE_THISCALL_WRAPPER(strstreambuf_freeze, 8)
11539 void __thiscall strstreambuf_freeze(strstreambuf *this, MSVCP_bool freeze)
11540 {
11541     TRACE("(%p %d)\n", this, freeze);
11542
11543     if(!freeze == !(this->strmode *STRSTATE_Frozen))
11544         return;
11545
11546     if(freeze) {
11547         this->strmode |= STRSTATE_Frozen;
11548         this->endsave = basic_streambuf_char_epptr(&this->base);
11549         basic_streambuf_char_setp_next(&this->base, basic_streambuf_char_pbase(&this->base),
11550                 basic_streambuf_char_pptr(&this->base), basic_streambuf_char_eback(&this->base));
11551     }else {
11552         this->strmode &= ~STRSTATE_Frozen;
11553         basic_streambuf_char_setp_next(&this->base, basic_streambuf_char_pbase(&this->base),
11554                 basic_streambuf_char_pptr(&this->base), this->endsave);
11555     }
11556 }
11557
11558 /* ?overflow@strstreambuf@std@@MAEHH@Z */
11559 /* ?overflow@strstreambuf@std@@MEAAHH@Z */
11560 DEFINE_THISCALL_WRAPPER(strstreambuf_overflow, 8)
11561 int __thiscall strstreambuf_overflow(strstreambuf *this, int c)
11562 {
11563     MSVCP_size_t old_size, size;
11564     char *ptr, *buf;
11565
11566     TRACE("(%p %d)\n", this, c);
11567
11568     if(c == EOF)
11569         return !EOF;
11570
11571     if(this->strmode & STRSTATE_Frozen)
11572         return EOF;
11573
11574     ptr = basic_streambuf_char_pptr(&this->base);
11575     if(ptr && ptr<basic_streambuf_char_epptr(&this->base))
11576         return (unsigned char)(*basic_streambuf_char__Pninc(&this->base) = c);
11577
11578     if(!(this->strmode & STRSTATE_Dynamic) || (this->strmode & STRSTATE_Constant))
11579         return EOF;
11580
11581     ptr = basic_streambuf_char_eback(&this->base);
11582     old_size = ptr ? basic_streambuf_char_epptr(&this->base) - ptr : 0;
11583
11584     size = old_size + old_size/2;
11585     if(size < this->minsize)
11586         size = this->minsize;
11587
11588     if(this->palloc)
11589         buf = this->palloc(size);
11590     else
11591         buf = MSVCRT_operator_new(size);
11592     if(!buf)
11593         return EOF;
11594
11595     memcpy(buf, ptr, old_size);
11596     if(this->strmode & STRSTATE_Allocated) {
11597         if(this->pfree)
11598             this->pfree(ptr);
11599         else
11600             MSVCRT_operator_delete(ptr);
11601     }
11602
11603     this->strmode |= STRSTATE_Allocated;
11604     if(!old_size) {
11605         this->seekhigh = buf;
11606         basic_streambuf_char_setp(&this->base, buf, buf+size);
11607         basic_streambuf_char_setg(&this->base, buf, buf, buf);
11608     }else {
11609         this->seekhigh = this->seekhigh-ptr+buf;
11610         basic_streambuf_char_setp_next(&this->base, basic_streambuf_char_pbase(&this->base)-ptr+buf,
11611                 basic_streambuf_char_pptr(&this->base)-ptr+buf, buf+size);
11612         basic_streambuf_char_setg(&this->base, buf, basic_streambuf_char_gptr(&this->base)-ptr+buf,
11613                 basic_streambuf_char_pptr(&this->base));
11614     }
11615
11616     return (unsigned char)(*basic_streambuf_char__Pninc(&this->base) = c);
11617 }
11618
11619 /* ?pbackfail@strstreambuf@std@@MAEHH@Z */
11620 /* ?pbackfail@strstreambuf@std@@MEAAHH@Z */
11621 DEFINE_THISCALL_WRAPPER(strstreambuf_pbackfail, 8)
11622 int __thiscall strstreambuf_pbackfail(strstreambuf *this, int c)
11623 {
11624     char *ptr = basic_streambuf_char_gptr(&this->base);
11625
11626     TRACE("(%p %d)\n", this, c);
11627
11628     if(ptr<=basic_streambuf_char_eback(&this->base)
11629             || ((this->strmode & STRSTATE_Constant) && c!=ptr[-1]))
11630         return EOF;
11631
11632     basic_streambuf_char_gbump(&this->base, -1);
11633     if(c == EOF)
11634         return !EOF;
11635     if(this->strmode & STRSTATE_Constant)
11636         return (unsigned char)c;
11637
11638     return (unsigned char)(ptr[0] = c);
11639 }
11640
11641 /* ?seekoff@strstreambuf@std@@MAE?AV?$fpos@H@2@JW4seekdir@ios_base@2@H@Z */
11642 /* ?seekoff@strstreambuf@std@@MEAA?AV?$fpos@H@2@_JW4seekdir@ios_base@2@H@Z */
11643 DEFINE_THISCALL_WRAPPER(strstreambuf_seekoff, 20)
11644 fpos_int* __thiscall strstreambuf_seekoff(strstreambuf *this, fpos_int *ret, streamoff off, int way, int mode)
11645 {
11646     char *eback = basic_streambuf_char_eback(&this->base);
11647     char *pptr = basic_streambuf_char_pptr(&this->base);
11648     char *gptr = basic_streambuf_char_gptr(&this->base);
11649
11650     TRACE("(%p %p %ld %d %d)\n", this, ret, off, way, mode);
11651
11652     ret->off = 0;
11653     ret->state = 0;
11654
11655     if(pptr > this->seekhigh)
11656         this->seekhigh = pptr;
11657
11658     if((mode & OPENMODE_in) && gptr) {
11659         if(way==SEEKDIR_cur && !(mode & OPENMODE_out))
11660             off += gptr-eback;
11661         else if(way == SEEKDIR_end)
11662             off += this->seekhigh-eback;
11663         else if(way != SEEKDIR_beg)
11664             off = -1;
11665
11666         if(off<0 || off>this->seekhigh-eback) {
11667             off = -1;
11668         }else {
11669             basic_streambuf_char_gbump(&this->base, eback-gptr+off);
11670             if((mode & OPENMODE_out) && pptr) {
11671                 basic_streambuf_char_setp_next(&this->base, eback,
11672                         gptr, basic_streambuf_char_epptr(&this->base));
11673             }
11674         }
11675     }else if((mode & OPENMODE_out) && pptr) {
11676         if(way == SEEKDIR_cur)
11677             off += pptr-eback;
11678         else if(way == SEEKDIR_end)
11679             off += this->seekhigh-eback;
11680         else if(way != SEEKDIR_beg)
11681             off = -1;
11682
11683          if(off<0 || off>this->seekhigh-eback)
11684              off = -1;
11685          else
11686              basic_streambuf_char_pbump(&this->base, eback-pptr+off);
11687     }else {
11688         off = -1;
11689     }
11690
11691     ret->pos = off;
11692     return ret;
11693 }
11694
11695 /* ?seekpos@strstreambuf@std@@MAE?AV?$fpos@H@2@V32@H@Z */
11696 /* ?seekpos@strstreambuf@std@@MEAA?AV?$fpos@H@2@V32@H@Z */
11697 DEFINE_THISCALL_WRAPPER(strstreambuf_seekpos, 36)
11698 fpos_int* __thiscall strstreambuf_seekpos(strstreambuf *this, fpos_int *ret, fpos_int pos, int mode)
11699 {
11700     TRACE("(%p %p %s %d)\n", this, ret, debugstr_fpos_int(&pos), mode);
11701
11702     if(pos.off==-1 && pos.pos==0 && pos.state==0) {
11703         *ret = pos;
11704         return ret;
11705     }
11706
11707     return strstreambuf_seekoff(this, ret, pos.off, SEEKDIR_beg, mode);
11708 }
11709
11710 /* ?underflow@strstreambuf@std@@MAEHXZ */
11711 /* ?underflow@strstreambuf@std@@MEAAHXZ */
11712 DEFINE_THISCALL_WRAPPER(strstreambuf_underflow, 4)
11713 int __thiscall strstreambuf_underflow(strstreambuf *this)
11714 {
11715     char *gptr = basic_streambuf_char_gptr(&this->base);
11716     char *pptr;
11717
11718     TRACE("(%p)\n", this);
11719
11720     if(!gptr)
11721         return EOF;
11722
11723     if(gptr < basic_streambuf_char_egptr(&this->base))
11724         return (unsigned char)(*gptr);
11725
11726     pptr = basic_streambuf_char_gptr(&this->base);
11727     if(pptr > this->seekhigh)
11728         this->seekhigh = pptr;
11729
11730     if(this->seekhigh <= gptr)
11731         return EOF;
11732
11733     basic_streambuf_char_setg(&this->base, basic_streambuf_char_eback(&this->base),
11734             gptr, this->seekhigh);
11735     return (unsigned char)(*gptr);
11736 }
11737
11738 static inline basic_ios_char* ostrstream_to_basic_ios(ostrstream *ptr)
11739 {
11740     return (basic_ios_char*)((char*)ptr+ostrstream_vbtable[1]);
11741 }
11742
11743 static inline ostrstream* ostrstream_from_basic_ios(basic_ios_char *ptr)
11744 {
11745     return (ostrstream*)((char*)ptr-ostrstream_vbtable[1]);
11746 }
11747
11748 /* ??0ostrstream@std@@QAE@PADHH@Z */
11749 DEFINE_THISCALL_WRAPPER(ostrstream_ctor, 20)
11750 ostrstream* __thiscall ostrstream_ctor(ostrstream *this, char *buf, streamsize size, int mode, MSVCP_bool virt_init)
11751 {
11752     basic_ios_char *basic_ios;
11753
11754     TRACE("(%p %p %ld %d %d)\n", this, buf, size, mode, virt_init);
11755
11756     if(virt_init) {
11757         this->base.vbtable = ostrstream_vbtable;
11758         basic_ios = basic_ostream_char_get_basic_ios(&this->base);
11759         basic_ios_char_ctor(basic_ios);
11760     }else {
11761         basic_ios = basic_ostream_char_get_basic_ios(&this->base);
11762     }
11763
11764     strstreambuf_ctor_get_put(&this->buf, buf, size,
11765             buf && (mode & OPENMODE_app) ? buf+strlen(buf) : buf);
11766     basic_ostream_char_ctor(&this->base, &this->buf.base, FALSE, TRUE, FALSE);
11767     basic_ios->base.vtable = &MSVCP_ostrstream_vtable;
11768     return this;
11769 }
11770
11771 /* ??1ostrstream@std@@UAE@XZ */
11772 /* ??1ostrstream@std@@UEAA@XZ */
11773 DEFINE_THISCALL_WRAPPER(ostrstream_dtor, 4)
11774 void __thiscall ostrstream_dtor(basic_ios_char *base)
11775 {
11776     ostrstream *this = ostrstream_from_basic_ios(base);
11777
11778     TRACE("(%p)\n", this);
11779
11780     basic_ostream_char_dtor(basic_ostream_char_to_basic_ios(&this->base));
11781     strstreambuf_dtor(&this->buf);
11782 }
11783
11784 static void ostrstream_vbase_dtor(ostrstream *this)
11785 {
11786     TRACE("(%p)\n", this);
11787
11788     ostrstream_dtor(ostrstream_to_basic_ios(this));
11789     basic_ios_char_dtor(basic_ostream_char_get_basic_ios(&this->base));
11790 }
11791
11792 DEFINE_THISCALL_WRAPPER(ostrstream_vector_dtor, 8)
11793 ostrstream* __thiscall ostrstream_vector_dtor(basic_ios_char *base, unsigned int flags)
11794 {
11795     ostrstream *this = ostrstream_from_basic_ios(base);
11796
11797     TRACE("(%p %x)\n", this, flags);
11798
11799     if(flags & 2) {
11800         /* we have an array, with the number of elements stored before the first object */
11801         INT_PTR i, *ptr = (INT_PTR *)this-1;
11802
11803         for(i=*ptr-1; i>=0; i--)
11804             ostrstream_vbase_dtor(this+i);
11805         MSVCRT_operator_delete(ptr);
11806     } else {
11807         ostrstream_vbase_dtor(this);
11808         if(flags & 1)
11809             MSVCRT_operator_delete(this);
11810     }
11811
11812     return this;
11813 }
11814
11815 static inline istrstream* istrstream_from_basic_ios(basic_ios_char *ptr)
11816 {
11817     return (istrstream*)((char*)ptr-istrstream_vbtable[1]);
11818 }
11819
11820 /* ??1istrstream@std@@UAE@XZ */
11821 /* ??1istrstream@std@@UEAA@XZ */
11822 DEFINE_THISCALL_WRAPPER(istrstream_dtor, 4)
11823 void __thiscall istrstream_dtor(basic_ios_char *base)
11824 {
11825     istrstream *this = istrstream_from_basic_ios(base);
11826
11827     TRACE("(%p)\n", this);
11828
11829     basic_istream_char_dtor(basic_istream_char_to_basic_ios(&this->base));
11830     strstreambuf_dtor(&this->buf);
11831 }
11832
11833 static inline basic_ios_char* strstream_to_basic_ios(strstream *ptr)
11834 {
11835     return (basic_ios_char*)((char*)ptr+strstream_vbtable1[1]);
11836 }
11837
11838 static inline strstream* strstream_from_basic_ios(basic_ios_char *ptr)
11839 {
11840     return (strstream*)((char*)ptr-strstream_vbtable1[1]);
11841 }
11842
11843 /* ??0strstream@std@@QAE@PADHH@Z */
11844 /* ??0strstream@std@@QEAA@PEAD_JH@Z */
11845 DEFINE_THISCALL_WRAPPER(strstream_ctor, 20)
11846 strstream* __thiscall strstream_ctor(strstream *this, char *buf, streamsize size, int mode, MSVCP_bool virt_init)
11847 {
11848     basic_ios_char *basic_ios;
11849
11850     TRACE("(%p %p %ld %d %d)\n", this, buf, size, mode, virt_init);
11851
11852     if(virt_init) {
11853         this->base.base1.vbtable = strstream_vbtable1;
11854         this->base.base2.vbtable = strstream_vbtable2;
11855         basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
11856         basic_ios_char_ctor(basic_ios);
11857     }else {
11858         basic_ios = basic_istream_char_get_basic_ios(&this->base.base1);
11859     }
11860
11861     strstreambuf_ctor_get_put(&this->buf, buf, size,
11862             buf && (mode & OPENMODE_app) ? buf+strlen(buf) : buf);
11863     basic_iostream_char_ctor(&this->base, &this->buf.base, FALSE);
11864     basic_ios->base.vtable = &MSVCP_strstream_vtable;
11865     return this;
11866 }
11867
11868 /* ??1strstream@std@@UAE@XZ */
11869 /* ??1strstream@std@@UEAA@XZ */
11870 DEFINE_THISCALL_WRAPPER(strstream_dtor, 4)
11871 void __thiscall strstream_dtor(basic_ios_char *base)
11872 {
11873     strstream *this = strstream_from_basic_ios(base);
11874
11875     TRACE("(%p)\n", this);
11876
11877     basic_iostream_char_dtor(basic_iostream_char_to_basic_ios(&this->base));
11878     strstreambuf_dtor(&this->buf);
11879 }
11880
11881 static void strstream_vbase_dtor(strstream *this)
11882 {
11883     TRACE("(%p)\n", this);
11884
11885     strstream_dtor(strstream_to_basic_ios(this));
11886     basic_ios_char_dtor(basic_istream_char_get_basic_ios(&this->base.base1));
11887 }
11888
11889 DEFINE_THISCALL_WRAPPER(strstream_vector_dtor, 8)
11890 strstream* __thiscall strstream_vector_dtor(basic_ios_char *base, unsigned int flags)
11891 {
11892     strstream *this = strstream_from_basic_ios(base);
11893
11894     TRACE("(%p %x)\n", this, flags);
11895
11896     if(flags & 2) {
11897         /* we have an array, with the number of elements stored before the first object */
11898         INT_PTR i, *ptr = (INT_PTR *)this-1;
11899
11900         for(i=*ptr-1; i>=0; i--)
11901             strstream_vbase_dtor(this+i);
11902         MSVCRT_operator_delete(ptr);
11903     } else {
11904         strstream_vbase_dtor(this);
11905         if(flags & 1)
11906             MSVCRT_operator_delete(this);
11907     }
11908
11909     return this;
11910 }
11911
11912 static void __cdecl setprecision_func(ios_base *base, streamsize prec)
11913 {
11914     ios_base_precision_set(base, prec);
11915 }
11916
11917 /* ?setprecision@std@@YA?AU?$_Smanip@H@1@H@Z */
11918 /* ?setprecision@std@@YA?AU?$_Smanip@_J@1@_J@Z */
11919 manip_streamsize* __cdecl setprecision(manip_streamsize *ret, streamsize prec)
11920 {
11921     TRACE("(%p %ld)\n", ret, prec);
11922
11923     ret->pfunc = setprecision_func;
11924     ret->arg = prec;
11925     return ret;
11926 }
11927
11928 static void __cdecl setw_func(ios_base *base, streamsize width)
11929 {
11930     ios_base_width_set(base, width);
11931 }
11932
11933 /* ?setw@std@@YA?AU?$_Smanip@H@1@H@Z */
11934 /* ?setw@std@@YA?AU?$_Smanip@_J@1@_J@Z */
11935 manip_streamsize* __cdecl setw(manip_streamsize *ret, streamsize width)
11936 {
11937     TRACE("(%p %ld)\n", ret, width);
11938
11939     ret->pfunc = setw_func;
11940     ret->arg = width;
11941     return ret;
11942 }
11943
11944 static void __cdecl resetioflags_func(ios_base *base, int mask)
11945 {
11946     ios_base_setf_mask(base, 0, mask);
11947 }
11948
11949 /* ?resetiosflags@std@@YA?AU?$_Smanip@H@1@H@Z */
11950 manip_int* __cdecl resetiosflags(manip_int *ret, int mask)
11951 {
11952     TRACE("(%p %d)\n", ret, mask);
11953
11954     ret->pfunc = resetioflags_func;
11955     ret->arg = mask;
11956     return ret;
11957 }
11958
11959 static void __cdecl setiosflags_func(ios_base *base, int mask)
11960 {
11961     ios_base_setf_mask(base, FMTFLAG_mask, mask);
11962 }
11963
11964 /* ?setiosflags@std@@YA?AU?$_Smanip@H@1@H@Z */
11965 manip_int* __cdecl setiosflags(manip_int *ret, int mask)
11966 {
11967     TRACE("(%p %d)\n", ret, mask);
11968
11969     ret->pfunc = setiosflags_func;
11970     ret->arg = mask;
11971     return ret;
11972 }
11973
11974 static void __cdecl setbase_func(ios_base *base, int set_base)
11975 {
11976     if(set_base == 10)
11977         set_base = FMTFLAG_dec;
11978     else if(set_base == 8)
11979         set_base = FMTFLAG_oct;
11980     else if(set_base == 16)
11981         set_base = FMTFLAG_hex;
11982     else
11983         set_base = 0;
11984
11985     ios_base_setf_mask(base, set_base, FMTFLAG_basefield);
11986 }
11987
11988 /* ?setbase@std@@YA?AU?$_Smanip@H@1@H@Z */
11989 manip_int* __cdecl setbase(manip_int *ret, int base)
11990 {
11991     TRACE("(%p %d)\n", ret, base);
11992
11993     ret->pfunc = setbase_func;
11994     ret->arg = base;
11995     return ret;
11996 }
11997
11998 static basic_filebuf_char filebuf_char_stdin;
11999 /* ?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A */
12000 struct {
12001     basic_istream_char obj;
12002     basic_ios_char vbase;
12003 } cin = { { 0 } };
12004 /* ?_Ptr_cin@std@@3PAV?$basic_istream@DU?$char_traits@D@std@@@1@A */
12005 /* ?_Ptr_cin@std@@3PEAV?$basic_istream@DU?$char_traits@D@std@@@1@EA */
12006 basic_istream_char *_Ptr_cin = &cin.obj;
12007
12008 static basic_filebuf_wchar filebuf_short_stdin;
12009 /* ?wcin@std@@3V?$basic_istream@GU?$char_traits@G@std@@@1@A */
12010 struct {
12011     basic_istream_wchar obj;
12012     basic_ios_wchar vbase;
12013 } ucin = { { 0 } };
12014 /* ?_Ptr_wcin@std@@3PAV?$basic_istream@GU?$char_traits@G@std@@@1@A */
12015 /* ?_Ptr_wcin@std@@3PEAV?$basic_istream@GU?$char_traits@G@std@@@1@EA */
12016 basic_istream_wchar *_Ptr_ucin = &ucin.obj;
12017
12018 static basic_filebuf_wchar filebuf_wchar_stdin;
12019 /* ?wcin@std@@3V?$basic_istream@_WU?$char_traits@_W@std@@@1@A */
12020 struct {
12021     basic_istream_wchar obj;
12022     basic_ios_wchar vbase;
12023 } wcin = { { 0 } };
12024 /* ?_Ptr_wcin@std@@3PAV?$basic_istream@_WU?$char_traits@_W@std@@@1@A */
12025 /* ?_Ptr_wcin@std@@3PEAV?$basic_istream@_WU?$char_traits@_W@std@@@1@EA */
12026 basic_istream_wchar *_Ptr_wcin = &wcin.obj;
12027
12028 static basic_filebuf_char filebuf_char_stdout;
12029 /* ?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A */
12030 struct {
12031     basic_ostream_char obj;
12032     basic_ios_char vbase;
12033 } cout = { { 0 } };
12034 /* ?_Ptr_cout@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A */
12035 /* ?_Ptr_cout@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA */
12036 basic_ostream_char *_Ptr_cout = &cout.obj;
12037
12038 static basic_filebuf_wchar filebuf_short_stdout;
12039 /* ?wcout@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A */
12040 struct {
12041     basic_ostream_wchar obj;
12042     basic_ios_wchar vbase;
12043 } ucout = { { 0 } };
12044 /* ?_Ptr_wcout@std@@3PAV?$basic_ostream@GU?$char_traits@G@std@@@1@A */
12045 /* ?_Ptr_wcout@std@@3PEAV?$basic_ostream@GU?$char_traits@G@std@@@1@EA */
12046 basic_ostream_wchar *_Ptr_ucout = &ucout.obj;
12047
12048 static basic_filebuf_wchar filebuf_wchar_stdout;
12049 /* ?wcout@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A */
12050 struct {
12051     basic_ostream_wchar obj;
12052     basic_ios_wchar vbase;
12053 } wcout = { { 0 } };
12054 /* ?_Ptr_wcout@std@@3PAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@A */
12055 /* ?_Ptr_wcout@std@@3PEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@EA */
12056 basic_ostream_wchar *_Ptr_wcout = &wcout.obj;
12057
12058 static basic_filebuf_char filebuf_char_stderr;
12059 /* ?cerr@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A */
12060 struct {
12061     basic_ostream_char obj;
12062     basic_ios_char vbase;
12063 } cerr = { { 0 } };
12064 /* ?_Ptr_cerr@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A */
12065 /* ?_Ptr_cerr@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA */
12066 basic_ostream_char *_Ptr_cerr = &cerr.obj;
12067
12068 static basic_filebuf_wchar filebuf_short_stderr;
12069 /* ?wcerr@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A */
12070 struct {
12071     basic_ostream_wchar obj;
12072     basic_ios_wchar vbase;
12073 } ucerr = { { 0 } };
12074 /* ?_Ptr_wcerr@std@@3PAV?$basic_ostream@GU?$char_traits@G@std@@@1@A */
12075 /* ?_Ptr_wcerr@std@@3PEAV?$basic_ostream@GU?$char_traits@G@std@@@1@EA */
12076 basic_ostream_wchar *_Ptr_ucerr = &ucerr.obj;
12077
12078 static basic_filebuf_wchar filebuf_wchar_stderr;
12079 /* ?wcerr@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A */
12080 struct {
12081     basic_ostream_wchar obj;
12082     basic_ios_wchar vbase;
12083 } wcerr = { { 0 } };
12084 /* ?_Ptr_wcerr@std@@3PAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@A */
12085 /* ?_Ptr_wcerr@std@@3PEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@EA */
12086 basic_ostream_wchar *_Ptr_wcerr = &wcerr.obj;
12087
12088 static basic_filebuf_char filebuf_char_log;
12089 /* ?clog@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A */
12090 struct {
12091     basic_ostream_char obj;
12092     basic_ios_char vbase;
12093 } clog = { { 0 } };
12094 /* ?_Ptr_clog@std@@3PAV?$basic_ostream@DU?$char_traits@D@std@@@1@A */
12095 /* ?_Ptr_clog@std@@3PEAV?$basic_ostream@DU?$char_traits@D@std@@@1@EA */
12096 basic_ostream_char *_Ptr_clog = &clog.obj;
12097
12098 static basic_filebuf_wchar filebuf_short_log;
12099 /* ?wclog@std@@3V?$basic_ostream@GU?$char_traits@G@std@@@1@A */
12100 struct {
12101     basic_ostream_wchar obj;
12102     basic_ios_wchar vbase;
12103 } uclog = { { 0 } };
12104 /* ?_Ptr_wclog@std@@3PAV?$basic_ostream@GU?$char_traits@G@std@@@1@A */
12105 /* ?_Ptr_wclog@std@@3PEAV?$basic_ostream@GU?$char_traits@G@std@@@1@EA */
12106 basic_ostream_wchar *_Ptr_uclog = &uclog.obj;
12107
12108 static basic_filebuf_wchar filebuf_wchar_log;
12109 /* ?wclog@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A */
12110 struct {
12111     basic_ostream_wchar obj;
12112     basic_ios_wchar vbase;
12113 } wclog = { { 0 } };
12114 /* ?_Ptr_wclog@std@@3PAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@A */
12115 /* ?_Ptr_wclog@std@@3PEAV?$basic_ostream@_WU?$char_traits@_W@std@@@1@EA */
12116 basic_ostream_wchar *_Ptr_wclog = &wclog.obj;
12117
12118 /* ?_Init_cnt@Init@ios_base@std@@0HA */
12119 int ios_base_Init__Init_cnt = -1;
12120
12121 /* ?_Init_ctor@Init@ios_base@std@@CAXPAV123@@Z */
12122 /* ?_Init_ctor@Init@ios_base@std@@CAXPEAV123@@Z */
12123 static void ios_base_Init__Init_ctor(void *this)
12124 {
12125     TRACE("(%p)\n", this);
12126
12127     if(ios_base_Init__Init_cnt < 0)
12128         ios_base_Init__Init_cnt = 1;
12129     else
12130         ios_base_Init__Init_cnt++;
12131 }
12132
12133 /* ??0Init@ios_base@std@@QAE@XZ */
12134 /* ??0Init@ios_base@std@@QEAA@XZ */
12135 DEFINE_THISCALL_WRAPPER(ios_base_Init_ctor, 4)
12136 void* __thiscall ios_base_Init_ctor(void *this)
12137 {
12138     ios_base_Init__Init_ctor(this);
12139     return this;
12140 }
12141
12142 /* ?_Init_dtor@Init@ios_base@std@@CAXPAV123@@Z */
12143 /* ?_Init_dtor@Init@ios_base@std@@CAXPEAV123@@Z */
12144 static void ios_base_Init__Init_dtor(void *this)
12145 {
12146     TRACE("(%p)\n", this);
12147
12148     ios_base_Init__Init_cnt--;
12149     if(!ios_base_Init__Init_cnt) {
12150         basic_ostream_char_flush(&cout.obj);
12151         basic_ostream_char_flush(&cerr.obj);
12152         basic_ostream_char_flush(&clog.obj);
12153     }
12154 }
12155
12156 /* ??1Init@ios_base@std@@QAE@XZ */
12157 /* ??1Init@ios_base@std@@QEAA@XZ */
12158 DEFINE_THISCALL_WRAPPER(ios_base_Init_dtor, 4)
12159 void __thiscall ios_base_Init_dtor(void *this)
12160 {
12161     ios_base_Init__Init_dtor(this);
12162 }
12163
12164 /* ??4Init@ios_base@std@@QAEAAV012@ABV012@@Z */
12165 /* ??4Init@ios_base@std@@QEAAAEAV012@AEBV012@@Z */
12166 DEFINE_THISCALL_WRAPPER(ios_base_Init_op_assign, 8)
12167 void* __thiscall ios_base_Init_op_assign(void *this, void *rhs)
12168 {
12169     TRACE("(%p %p)\n", this, rhs);
12170     return this;
12171 }
12172
12173 /* ?_Init_cnt@_Winit@std@@0HA */
12174 int _Winit__Init_cnt = -1;
12175
12176 /* ??0_Winit@std@@QAE@XZ */
12177 /* ??0_Winit@std@@QEAA@XZ */
12178 DEFINE_THISCALL_WRAPPER(_Winit_ctor, 4)
12179 void* __thiscall _Winit_ctor(void *this)
12180 {
12181     TRACE("(%p)\n", this);
12182
12183     if(_Winit__Init_cnt < 0)
12184         _Winit__Init_cnt = 1;
12185     else
12186         _Winit__Init_cnt++;
12187
12188     return this;
12189 }
12190
12191 /* ??1_Winit@std@@QAE@XZ */
12192 /* ??1_Winit@std@@QAE@XZ */
12193 DEFINE_THISCALL_WRAPPER(_Winit_dtor, 4)
12194 void __thiscall _Winit_dtor(void *this)
12195 {
12196     TRACE("(%p)\n", this);
12197
12198     _Winit__Init_cnt--;
12199     if(!_Winit__Init_cnt) {
12200         basic_ostream_wchar_flush(&wcout.obj);
12201         basic_ostream_wchar_flush(&wcerr.obj);
12202         basic_ostream_wchar_flush(&wclog.obj);
12203     }
12204 }
12205
12206 /* ??4_Winit@std@@QAEAAV01@ABV01@@Z */
12207 /* ??4_Winit@std@@QEAAAEAV01@AEBV01@@Z */
12208 DEFINE_THISCALL_WRAPPER(_Winit_op_assign, 8)
12209 void* __thiscall _Winit_op_assign(void *this, void *rhs)
12210 {
12211     TRACE("(%p %p)\n", this, rhs);
12212     return this;
12213 }
12214
12215 void init_io(void *base)
12216 {
12217 #ifdef __x86_64__
12218     init_iosb_rtti(base);
12219     init_ios_base_rtti(base);
12220     init_basic_ios_char_rtti(base);
12221     init_basic_ios_wchar_rtti(base);
12222     init_basic_ios_short_rtti(base);
12223     init_basic_streambuf_char_rtti(base);
12224     init_basic_streambuf_wchar_rtti(base);
12225     init_basic_streambuf_short_rtti(base);
12226     init_basic_filebuf_char_rtti(base);
12227     init_basic_filebuf_wchar_rtti(base);
12228     init_basic_filebuf_short_rtti(base);
12229     init_basic_stringbuf_char_rtti(base);
12230     init_basic_stringbuf_wchar_rtti(base);
12231     init_basic_stringbuf_short_rtti(base);
12232     init_basic_ostream_char_rtti(base);
12233     init_basic_ostream_wchar_rtti(base);
12234     init_basic_ostream_short_rtti(base);
12235     init_basic_istream_char_rtti(base);
12236     init_basic_istream_wchar_rtti(base);
12237     init_basic_istream_short_rtti(base);
12238     init_basic_iostream_char_rtti(base);
12239     init_basic_iostream_wchar_rtti(base);
12240     init_basic_iostream_short_rtti(base);
12241     init_basic_ofstream_char_rtti(base);
12242     init_basic_ofstream_wchar_rtti(base);
12243     init_basic_ofstream_short_rtti(base);
12244     init_basic_ifstream_char_rtti(base);
12245     init_basic_ifstream_wchar_rtti(base);
12246     init_basic_ifstream_short_rtti(base);
12247     init_basic_fstream_char_rtti(base);
12248     init_basic_fstream_wchar_rtti(base);
12249     init_basic_fstream_short_rtti(base);
12250     init_basic_ostringstream_char_rtti(base);
12251     init_basic_ostringstream_wchar_rtti(base);
12252     init_basic_ostringstream_short_rtti(base);
12253     init_basic_istringstream_char_rtti(base);
12254     init_basic_istringstream_wchar_rtti(base);
12255     init_basic_istringstream_short_rtti(base);
12256     init_basic_stringstream_char_rtti(base);
12257     init_basic_stringstream_wchar_rtti(base);
12258     init_basic_stringstream_short_rtti(base);
12259     init_strstreambuf_rtti(base);
12260     init_strstream_rtti(base);
12261     init_ostrstream_rtti(base);
12262 #endif
12263
12264     basic_filebuf_char_ctor_file(&filebuf_char_stdin, stdin);
12265     basic_istream_char_ctor(&cin.obj, &filebuf_char_stdin.base, FALSE/*FIXME*/, TRUE);
12266
12267     basic_filebuf_short_ctor_file(&filebuf_short_stdin, stdin);
12268     basic_istream_short_ctor(&ucin.obj, &filebuf_short_stdin.base, FALSE/*FIXME*/, TRUE);
12269
12270     basic_filebuf_wchar_ctor_file(&filebuf_wchar_stdin, stdin);
12271     basic_istream_wchar_ctor(&wcin.obj, &filebuf_wchar_stdin.base, FALSE/*FIXME*/, TRUE);
12272
12273     basic_filebuf_char_ctor_file(&filebuf_char_stdout, stdout);
12274     basic_ostream_char_ctor(&cout.obj, &filebuf_char_stdout.base, FALSE/*FIXME*/, TRUE, TRUE);
12275
12276     basic_filebuf_short_ctor_file(&filebuf_short_stdout, stdout);
12277     basic_ostream_short_ctor(&ucout.obj, &filebuf_short_stdout.base, FALSE/*FIXME*/, TRUE, TRUE);
12278
12279     basic_filebuf_wchar_ctor_file(&filebuf_wchar_stdout, stdout);
12280     basic_ostream_short_ctor(&wcout.obj, &filebuf_wchar_stdout.base, FALSE/*FIXME*/, TRUE, TRUE);
12281
12282     basic_filebuf_char_ctor_file(&filebuf_char_stderr, stderr);
12283     basic_ostream_char_ctor(&cerr.obj, &filebuf_char_stderr.base, FALSE/*FIXME*/, TRUE, TRUE);
12284
12285     basic_filebuf_short_ctor_file(&filebuf_short_stderr, stderr);
12286     basic_ostream_short_ctor(&ucerr.obj, &filebuf_short_stderr.base, FALSE/*FIXME*/, TRUE, TRUE);
12287
12288     basic_filebuf_wchar_ctor_file(&filebuf_wchar_stderr, stderr);
12289     basic_ostream_short_ctor(&wcerr.obj, &filebuf_wchar_stderr.base, FALSE/*FIXME*/, TRUE, TRUE);
12290
12291     basic_filebuf_char_ctor_file(&filebuf_char_log, stderr);
12292     basic_ostream_char_ctor(&clog.obj, &filebuf_char_log.base, FALSE/*FIXME*/, TRUE, TRUE);
12293
12294     basic_filebuf_short_ctor_file(&filebuf_short_log, stderr);
12295     basic_ostream_short_ctor(&uclog.obj, &filebuf_short_log.base, FALSE/*FIXME*/, TRUE, TRUE);
12296
12297     basic_filebuf_wchar_ctor_file(&filebuf_wchar_log, stderr);
12298     basic_ostream_short_ctor(&wclog.obj, &filebuf_wchar_log.base, FALSE/*FIXME*/, TRUE, TRUE);
12299 }
12300
12301 void free_io(void)
12302 {
12303     basic_istream_char_vbase_dtor(&cin.obj);
12304     basic_filebuf_char_dtor(&filebuf_char_stdin);
12305
12306     basic_istream_wchar_vbase_dtor(&ucin.obj);
12307     basic_filebuf_wchar_dtor(&filebuf_short_stdin);
12308
12309     basic_istream_wchar_vbase_dtor(&wcin.obj);
12310     basic_filebuf_wchar_dtor(&filebuf_wchar_stdin);
12311
12312     basic_ostream_char_vbase_dtor(&cout.obj);
12313     basic_filebuf_char_dtor(&filebuf_char_stdout);
12314
12315     basic_ostream_wchar_vbase_dtor(&ucout.obj);
12316     basic_filebuf_wchar_dtor(&filebuf_short_stdout);
12317
12318     basic_ostream_wchar_vbase_dtor(&wcout.obj);
12319     basic_filebuf_wchar_dtor(&filebuf_wchar_stdout);
12320
12321     basic_ostream_char_vbase_dtor(&cerr.obj);
12322     basic_filebuf_char_dtor(&filebuf_char_stderr);
12323
12324     basic_ostream_wchar_vbase_dtor(&ucerr.obj);
12325     basic_filebuf_wchar_dtor(&filebuf_short_stderr);
12326
12327     basic_ostream_wchar_vbase_dtor(&wcerr.obj);
12328     basic_filebuf_wchar_dtor(&filebuf_wchar_stderr);
12329
12330     basic_ostream_char_vbase_dtor(&clog.obj);
12331     basic_filebuf_char_dtor(&filebuf_char_log);
12332
12333     basic_ostream_wchar_vbase_dtor(&uclog.obj);
12334     basic_filebuf_wchar_dtor(&filebuf_short_log);
12335
12336     basic_ostream_wchar_vbase_dtor(&wclog.obj);
12337     basic_filebuf_wchar_dtor(&filebuf_wchar_log);
12338 }