summaryrefslogtreecommitdiffstats
path: root/private/crt32/h/iomanip.h
blob: 43d8980b34414b4ee83f61b75d055552a6bcd20f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/***
*iomanip.h - definitions/declarations for iostream's parameterized manipulators
*
*	Copyright (c) 1991-1993, Microsoft Corporation.  All rights reserved.
*
*Purpose:
*	This file defines the classes, values, macros, and functions
*	used by the iostream classes' paramterized manipulators.
*	[AT&T C++]
*
*Revision History:
*	01-23-92  KRS	Ported from 16-bit version.
*	02-23-93  SKS	Update copyright to 1993
*	06-08-93  SKS	Add "const" keyword in declaration operator >> & <<
*
****/

#ifndef _INC_IOMANIP
#define _INC_IOMANIP
#include <iostream.h>

// Force word packing to avoid possible -Zp override
#pragma pack(4)

#pragma warning(disable:4505)		// disable unwanted /W4 warning
// #pragma warning(default:4505)	// use this to reenable, if necessary

// CONSIDER: use macro to define these
// #define __MKMANIP(X) \#define X##(T) __##X##_ \#\# T
// __MKMANIP(SMANIP);
// __MKMANIP(SAPP);
// __MKMANIP(IMANIP);
// __MKMANIP(IAPP);
// __MKMANIP(OMANIP);
// __MKMANIP(OAPP);
// __MKMANIP(IOMANIP);
// __MKMANIP(IOAPP);

#define SMANIP(T) __SMANIP_##T
#define SAPP(T) __SAPP_##T
#define IMANIP(T) __IMANIP_##T
#define IAPP(T) __IAPP_##T
#define OMANIP(T) __OMANIP_##T
#define OAPP(T) __OAPP_##T
#define IOMANIP(T) __IOMANIP_##T
#define IOAPP(T) __IOAPP_##T

#define IOMANIPdeclare(T)  \
class SMANIP(T) { \
public:	\
	SMANIP(T)(ios& (*f)(ios&,T), T t) { _fp = f; _tp = t; } \
	friend istream& operator>>(istream& s, const SMANIP(T) & sm) { (*(sm._fp))(s,sm._tp); return s; } \
	friend ostream& operator<<(ostream& s, const SMANIP(T) & sm) { (*(sm._fp))(s,sm._tp); return s; } \
private:	\
	ios& (* _fp)(ios&,T); \
	T _tp; \
};	\
class SAPP(T) {	\
public:	\
	SAPP(T)( ios& (*f)(ios&,T)) { _fp = f; }	\
	SMANIP(T) operator()(T t) { return SMANIP(T)(_fp,t); } 	\
private:	\
	ios& (* _fp)(ios&,T); \
};	\
class IMANIP(T) { \
public:	\
	IMANIP(T)(istream& (*f)(istream&,T), T t) { _fp = f; _tp = t; } \
	friend istream& operator>>(istream& s, IMANIP(T) & sm) { (*sm._fp)(s,sm._tp); return s; } \
private:	\
	istream& (* _fp)(istream&,T); \
	T _tp;	\
};	\
class IAPP(T) {	\
public:	\
	IAPP(T)( istream& (*f)(istream&,T)) { _fp = f; }	\
	IMANIP(T) operator()(T t) { return IMANIP(T)(_fp,t); } 	\
private:	\
	istream& (* _fp)(istream&,T); \
};	\
class OMANIP(T) { \
public:	\
	OMANIP(T)(ostream& (*f)(ostream&,T), T t) { _fp = f; _tp = t; } \
	friend ostream& operator<<(ostream& s, OMANIP(T) & sm) { (*sm._fp)(s,sm._tp); return s; } \
private:	\
	ostream& (* _fp)(ostream&,T); \
	T _tp; \
};	\
class OAPP(T) {	\
public:	\
	OAPP(T)(ostream& (*f)(ostream&,T)) { _fp = f; }	\
	OMANIP(T) operator()(T t) { return OMANIP(T)(_fp,t); } \
private:	\
	ostream& (* _fp)(ostream&,T); \
};	\
\
class IOMANIP(T) { \
public:	\
	IOMANIP(T)(iostream& (*f)(iostream&,T), T t) { _fp = f; _tp = t; } \
	friend istream& operator>>(iostream& s, IOMANIP(T) & sm) { (*sm._fp)(s,sm._tp); return s; } \
	friend ostream& operator<<(iostream& s, IOMANIP(T) & sm) { (*sm._fp)(s,sm._tp); return s; } \
private:	\
	iostream& (* _fp)(iostream&,T); \
	T _tp; \
};	\
class IOAPP(T) {	\
public:	\
	IOAPP(T)( iostream& (*f)(iostream&,T)) { _fp = f; }	\
	IOMANIP(T) operator()(T t) { return IOMANIP(T)(_fp,t); } 	\
private:	\
	iostream& (* _fp)(iostream&,T); \
}; \

	
IOMANIPdeclare(int)

IOMANIPdeclare(long)

inline ios& __resetiosflags(ios& s, long _flg) { s.setf(0,_flg); return s; }
inline ios& __setfill(ios& s, int _fc) { s.fill((char)_fc); return s; }
inline ios& __setiosflags(ios& s, long _flg) { s.setf(_flg); return s; }
inline ios& __setprecision(ios& s, int _pre) { s.precision(_pre); return s; }
inline ios& __setw(ios& s, int _wid) { s.width(_wid); return s; }

inline SMANIP(long)	resetiosflags(long _l) { return SMANIP(long)(__resetiosflags, _l); }
inline SMANIP(int)	setfill(int _m) {return SMANIP(int)(__setfill, _m); }
inline SMANIP(long)	setiosflags(long _l) {return SMANIP(long)(__setiosflags, _l); }
inline SMANIP(int)	setprecision(int _p) {return SMANIP(int)(__setprecision, _p); }
inline SMANIP(int)	setw(int _w) { return SMANIP(int)(__setw, _w); }

// Restore default packing
#pragma pack()

#endif		// !_INC_IOMANIP