24 #include "rheolef/compiler.h"
31 #define iorheobase_def_boolean_accessor_macro(ioclass,stream,name) \
32 static bool get##name (stream& s) \
34 return ioclass::flags(s) [name]; \
36 #define iorheobase_manip_boolean_accessor_macro(ioclass,stream,name) \
37 inline stream& name (stream& s) \
39 ioclass::setf (s, ioclass::name); \
42 inline stream& no##name (stream& s) \
44 ioclass::unsetf (s, ioclass::name); \
48 #define iorheobase_def_member_macro(ioclass,stream,name,groupe) \
49 iorheobase_def_boolean_accessor_macro(ioclass,stream,name)
51 #define iorheobase_manip_member_macro(ioclass,stream,name,groupe) \
52 inline stream& name (stream& s) \
54 ioclass::setf(s, ioclass::name, ioclass::groupe##_field); \
58 #define iorheobase_def_scalar_macro(ioclass,t, a) \
61 const t& a () const; \
62 void a (const t& x); \
64 static const t& get##a (std::ios& s); \
65 static std::ios& set##a (std::ios& s, const t& x);
67 #define iorheobase_manip_scalar_macro(ioclass,t, a, io) \
68 inline io##rheomanip1<t> set##a (const t& x) \
70 return io##rheomanip1<t>(&(ioclass::set##a), x); \
76 # define iorheobase_io_scalar_body_macro(ioclass,t,a) \
83 ioclass::a (const t& x) \
88 ioclass::get##a (std::ios& s) \
90 return (ioclass::get_pointer(s) -> a()); \
93 ioclass::set##a (std::ios& s, const t& x) \
95 (ioclass::get_pointer(s) -> a(x)); \
104 std::ios& (*f) (std::ios&,
const T&);
110 {
m.f (is,
m.i);
return is; }
115 std::ios& (*f) (std::ios&,
const T&);
121 {
m.f (os,
m.i);
return os; }
126 std::ios& (*f) (std::ios&,
const T&);
132 {
m.f (is,
m.i);
return is; }
134 {
m.f (os,
m.i);
return os; }
148 static bool init =
false;
154 (*pointer_list).push_back(
p);
161 static int iobaseidx = 0;
162 static bool iobaseidx_initialized =
false;
163 if (!iobaseidx_initialized) {
164 iobaseidx = std::ios::xalloc();
165 iobaseidx_initialized =
true;
167 T*
p = (
T*)io.pword(iobaseidx);
169 #ifdef _RHEOLEF_HAVE_IOS_BITALLOC
180 static long iobase_bitidx;
181 static bool iobase_bitidx_initialized =
false;
183 if (!iobase_bitidx_initialized) {
184 iobase_bitidx = std::ios::bitalloc();
185 iobase_bitidx_initialized =
true;
188 if (iobase_bitidx == 0) {
193 long io_flags = io.flags();
194 bit_init = io_flags & iobase_bitidx;
196 io.flags(io_flags | iobase_bitidx);
199 long bit_init = (
p != 0);
204 warning_macro (
"ios::pwords(int) return value not initialized (fixed)");
209 fatal_macro (
"ios::pwords(int) return null value: memory corrupted");
static T * get_pointer(std::ios &io)
static std::list< T * > * pointer_list
static T * iorheobase_alloc()
friend std::ostream & operator<<(std::ostream &os, const iorheomanip1 &m)
friend std::istream & operator>>(std::istream &is, const iorheomanip1 &m)
iorheomanip1(std::ios &(*ff)(std::ios &, const T &), const T &ii)
friend std::istream & operator>>(std::istream &is, const irheomanip1 &m)
irheomanip1(std::ios &(*ff)(std::ios &, const T &), const T &ii)
friend std::ostream & operator<<(std::ostream &os, const orheomanip1 &m)
orheomanip1(std::ios &(*ff)(std::ios &, const T &), const T &ii)
#define fatal_macro(message)
#define warning_macro(message)
This file is part of Rheolef.