14FMATVEC_MSVC_DISABLEW4251_BEGIN
16class AdoptCurrentMessageStreamsUntilScopeExit;
60 osyncstream&
operator<<(std::ios_base& (*func)(std::ios_base&)) { std::ostream::operator<<(func );
return *
this; }
61 osyncstream&
operator<<(std::ostream& (*func)(std::ostream&)) { std::ostream::operator<<(func );
return *
this; }
64 std::ostream &getOStream()
const {
return str; }
72inline osyncstream&
operator<<(osyncstream& os,
signed char ch) { operator<<(static_cast<std::ostream&>(os), ch);
return os; }
73inline osyncstream&
operator<<(osyncstream& os,
unsigned char ch) { operator<<(static_cast<std::ostream&>(os), ch);
return os; }
74inline osyncstream&
operator<<(osyncstream& os,
const char* s) { operator<<(static_cast<std::ostream&>(os), s );
return os; }
75inline osyncstream&
operator<<(osyncstream& os,
const signed char* s) { operator<<(static_cast<std::ostream&>(os), s );
return os; }
76inline osyncstream&
operator<<(osyncstream& os,
const unsigned char* s) { operator<<(static_cast<std::ostream&>(os), s );
return os; }
77inline osyncstream&
operator<<(osyncstream& os,
const std::string &s) { operator<<(static_cast<std::ostream&>(os), s );
return os; }
101 #define FMATVEC_ATOM_MSGTYPE_SIZE 6
103 static_assert(SIZE==FMATVEC_ATOM_MSGTYPE_SIZE,
"The proprocessor define FMATVEC_ATOM_MSGTYPE_SIZE must be equal Atom::SIZE.");
116 Atom& operator=(const Atom &);
124 static void setCurrentMessageStream(
MsgType type,
129 void setMessageStreamActive(
MsgType type,
bool activeFlag);
132 void getMessageStream(
MsgType type,
139 void adoptMessageStreams(
const Atom *src=
nullptr);
151 return *_msgAct[type];
157 return *_msgStatic[type];
162 return *_msgActStatic[type];
172 static std::array<std::shared_ptr<bool >, SIZE> _msgActStatic;
173 static std::array<std::shared_ptr<std::ostream>, SIZE> _msgSavedStatic;
174 static std::array<std::shared_ptr<std::ostream>, SIZE> _msgStatic;
178 std::array<std::shared_ptr<bool >, SIZE> _msgAct;
179 std::array<std::shared_ptr<std::ostream>, SIZE> _msgSaved;
180 std::array<std::shared_ptr<std::ostream>, SIZE> _msg;
195 const std::function<
void(
const std::string &)> &outputFunc,
196 const std::function<
void(std::string&)> &escapingFunc=
nullptr);
199 const std::function<
void(std::string&)> &escapingFunc=
nullptr);
204 const std::function<
void(
const std::string &)> &outputFunc_,
205 const std::function<
void(std::string&)> &escapingFunc_);
207 int overflow(
int c)
override;
208 std::streamsize xsputn(
const char_type* s, std::streamsize count)
override;
213 std::function<void(
const std::string &)> outputFunc;
215 const std::string prefix;
216 const std::string postfix;
217 const std::function<void(std::string&)> escapingFunc;
243 start = std::chrono::steady_clock::now();
246 auto end = std::chrono::steady_clock::now();
247 auto delta = std::chrono::duration<double>(end - start);
252 std::chrono::time_point<std::chrono::steady_clock> start;
253 std::chrono::duration<double> ∑
261 std::cout<<
"fmatvec_measure_id,"<<
id<<
",totalsec,"<<sum.count()<<
",count,"<<count<<
",avgsec,"<<sum.count()/count<<std::endl;
265 std::chrono::duration<double> ∑
269#define FMATVEC_MEASURE_BLOCK(id) \
270 static std::chrono::duration<double> fmatvec_measure_sum_##id {}; \
271 static size_t fmatvec_measure_count_##id {}; \
272 static fmatvec::DebugMeasureAccumulatedTimeOnExit fmatvec_measure_onexit_##id(#id, fmatvec_measure_sum_##id, fmatvec_measure_count_##id); \
273 fmatvec::DebugMeasureAccumulatedTime fmatvec_measure_dummy_##id(fmatvec_measure_sum_##id, fmatvec_measure_count_##id);
275#define FMATVEC_MEASURE_BLOCKINIT(id) \
276 static std::chrono::duration<double> fmatvec_measure_sum_##id {}; \
277 static size_t fmatvec_measure_count_##id {}; \
278 static fmatvec::DebugMeasureAccumulatedTimeOnExit fmatvec_measure_onexit_##id(#id, fmatvec_measure_sum_##id, fmatvec_measure_count_##id);
280#define FMATVEC_MEASURE_BLOCKEXE(id) \
281 fmatvec::DebugMeasureAccumulatedTime fmatvec_measure_dummy_##id(fmatvec_measure_sum_##id, fmatvec_measure_count_##id);
283#define FMATVEC_MEASURE_START(id) \
284 auto fmatvec_measure_start_##id = std::chrono::steady_clock::now();
286#define FMATVEC_MEASURE_DUMP(id) \
288 auto end = std::chrono::steady_clock::now(); \
289 auto delta = std::chrono::duration<double>(end - fmatvec_measure_start_##id); \
290 std::cout<<"fmatvec_measure_start_end_id,"<<#id<<",sec,"<<delta.count()<<std::endl; \
294FMATVEC_MSVC_DISABLEW4251_END
osyncstream msg(MsgType type) const
Definition: atom.h:144
bool msgAct(MsgType type) const
Definition: atom.h:150
MsgType
Messages can be printed to different message types named here.
Definition: atom.h:92
static bool msgActStatic(MsgType type)
Definition: atom.h:161
static osyncstream msgStatic(MsgType type)
Definition: atom.h:156
PrePostfixedStream(const std::string &prefix_, const std::string &postfix_, const std::function< void(const std::string &)> &outputFunc, const std::function< void(std::string &)> &escapingFunc=nullptr)
Call f with every message of the stream, prefixed/postfixed.
PrePostfixedStream(const std::string &prefix_, const std::string &postfix_, std::ostream &outstr_, const std::function< void(std::string &)> &escapingFunc=nullptr)
Convinence function to print to outstr_.
Namespace fmatvec.
Definition: _memory.cc:28
ostream & operator<<(ostream &s, const SymbolicExpression &se)
Write a SymbolicExpression to a stream using serialization.
Definition: ast.cc:190