13#ifndef CLASSDESC_DUMP_BASE_H
14#define CLASSDESC_DUMP_BASE_H
29 class dump_t:
public std::ostream
32 dump_t(): std::ostream(std::cout.rdbuf()) {}
33 dump_t(std::ostream& o): std::ostream(o.rdbuf()) {}
37 template <
class T>
void dump(
dump_t& o,
const string& d,
const T& a);
40 template <
class T>
void dump(std::ostream& o,
const string& d,
const T& a)
43 inline int format(std::ostream& o,
const string& d)
45 const char* tail=d.c_str();
47 for (
const char* c=tail; *c!=
'\0'; c++)
60 void dump_basic(
dump_t& o,
const string& d,
T& a)
68 dumpp(
dump_t& o,
const string& d, B& a) {dump_basic(o,d,a);}
70 inline void dumpp(
dump_t& o,
const string& d,
const char *& a) {dump_basic(o,d,a);}
72 void dumpp(
dump_t& o,
const string& d, std::basic_string<W>& a)
76 template <
class A,
class B>
79 {o <<
"["<< a.first<<
"]="<<a.second;}
81 template <
class A,
class B>
82 typename enable_if< And<is_fundamental<A>,Not<is_fundamental<B> > >,
void>::T
83 dump(dump_t& o,
const string& d, std::pair<A,B>& a, dummy<1> dum=0)
85 o <<
"["<< a.first<<
"]=";
89 template <
class A,
class B>
93 dump(o,
string(
"[.")+d+
"]=",a.first);
99 typename std::iterator_traits<I>::value_type>,
101 dump_container(
dump_t& o,
const string& d, I begin,
104 int tab = format(o,d);
105 for (; begin!=end; begin++)
106 o << std::setw(tab) <<
"" << *begin;
112 typename std::iterator_traits<I>::value_type> >,
114 dump_container(
dump_t& o,
const string& d, I begin,
117 int tab = format(o,d);
119 for (
size_t i=0; begin!=end; i++,begin++)
121 o<<std::setw(tab+2)<<
"{"<<std::endl;
122 std::ostringstream
idx;
124 dump(o,d+
"["+
idx.str().c_str()+
"]",*begin);
125 o<<std::setw(tab+2)<<
"}"<<std::endl;
132 {dump_container(o,d,a.begin(),a.end());}
135 template <
class C,
class M>
141 {dump_basic(o,d,arg);}
146 int dims,
size_t ncopies, ...)
149 va_start(ap,ncopies);
150 for (
int i=1; i<dims; i++) ncopies*=va_arg(ap,
int);
152 if (ncopies) dump_container(o,d,&arg, &arg+ncopies);
161 void dump(dump_t& o,
const string& d, Exclude<T>&) {}
165 void dump(
dump_t& o,
const string& d, shared_ptr<T>& a)
170 dump(o,d,
string(
"null"));
181using classdesc::dumpp;
187 void dump_onbase(dump_t& x,
const string& d,T& a)
190using classdesc::dump_onbase;
Definition classdesc.h:868
Definition dump_base.h:30
Definition classdesc.h:920
Definition classdesc.h:923
Contains access_* structs, and nothing else. These structs are used to gain access to private members...
Definition classdesc_access.h:20
Contains definitions related to classdesc functionality.
std::string idx(const std::string &prefix, size_t i)
utility for generating index keys (for use with arrays)
Definition xml_common.h:14
void dump(dump_t &o, const string &d, const T &a)
forward declare generic dump operation
Definition dump_epilogue.h:55
Definition classdesc.h:405
Definition classdesc.h:299
controlled template specialisation: stolen from boost::enable_if.
Definition classdesc.h:282
Definition dump_base.h:177