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) \
83ioclass::a (const t& x) \
88ioclass::get##a (std::ios& s) \
90 return (ioclass::get_pointer(s) -> a()); \
93ioclass::set##a (std::ios& s, const t& x) \
95 (ioclass::get_pointer(s) -> a(x)); \
106 std::ios& (*f) (std::ios&,
const T&);
122 std::ios& (*f) (std::ios&,
const T&);
138 std::ios& (*f) (std::ios&,
const T&);
169 static bool init =
false;
175 (*pointer_list).push_back(
p);
182 static int iobaseidx = 0;
183 static bool iobaseidx_initialized =
false;
184 if (!iobaseidx_initialized) {
185 iobaseidx = std::ios::xalloc();
186 iobaseidx_initialized =
true;
188 T*
p = (
T*)io.pword(iobaseidx);
190#ifdef _RHEOLEF_HAVE_IOS_BITALLOC
201 static long iobase_bitidx;
202 static bool iobase_bitidx_initialized =
false;
204 if (!iobase_bitidx_initialized) {
205 iobase_bitidx = std::ios::bitalloc();
206 iobase_bitidx_initialized =
true;
209 if (iobase_bitidx == 0) {
214 long io_flags = io.flags();
215 bit_init = io_flags & iobase_bitidx;
217 io.flags(io_flags | iobase_bitidx);
220 long bit_init = (
p != 0);
225 warning_macro (
"ios::pwords(int) return value not initialized (fixed)");
230 fatal_macro (
"ios::pwords(int) return null value: memory corrupted");
static T * iorheobase_alloc()
static std::list< T * > * pointer_list
static T * get_pointer(std::ios &io)
#define fatal_macro(message)
#define warning_macro(message)
This file is part of Rheolef.
std::ostream & operator<<(std::ostream &os, const catchmark &m)
std::istream & operator>>(std::istream &is, const catchmark &m)
iorheomanip1(std::ios &(*ff)(std::ios &, const T &), const T &ii)
irheomanip1(std::ios &(*ff)(std::ios &, const T &), const T &ii)
orheomanip1(std::ios &(*ff)(std::ios &, const T &), const T &ii)