#ifndef __MRW_SIMPLETRACE_HPP__ #define __MRW_SIMPLETRACE_HPP__ #include #include #include // GENERIC TRACER FOR TESTS --------------------------------------------------- // (without file/line) #ifndef __GNUG__ #define METHOD(name) mrw::FnTrace fnTrace(this, name) #define FUNCTION(name) mrw::FnTrace fnTrace(0, name) #else #define METHOD mrw::FnTrace fnTrace(this, __FUNCTION__) #define FUNCTION mrw::FnTrace fnTrace(0, __FUNCTION__) #endif #define CALL(name) fnTrace.call(name) #define TRACE(name) fnTrace.trace(name) #define TRACE_OFF mrw::FnTrace::off() #define TRACE_ON mrw::FnTrace::on() #define NO_TRACE mrw::NoTrace noTrace; namespace mrw { class FnTrace { public: FnTrace(const void* addr, const std::string& name): _addr(addr), _name(name) { if (_off==0) std::cout< "<0) --_off; } private: const void* _addr; const std::string _name; static unsigned int _level; static unsigned int _off; }; unsigned int FnTrace::_level(0); unsigned int FnTrace::_off(0); class NoTrace { public: NoTrace() {TRACE_OFF;} ~NoTrace() {TRACE_ON;} }; } #endif