From 469bbcf0701e1eb8a6670c23145b0da87357e178 Mon Sep 17 00:00:00 2001 From: Mike Buland Date: Sun, 25 Mar 2012 20:00:08 +0000 Subject: Code is all reorganized. We're about ready to release. I should write up a little explenation of the arrangement. --- src/stable/trace.h | 187 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 src/stable/trace.h (limited to 'src/stable/trace.h') diff --git a/src/stable/trace.h b/src/stable/trace.h new file mode 100644 index 0000000..51dfb8e --- /dev/null +++ b/src/stable/trace.h @@ -0,0 +1,187 @@ +/* + * Copyright (C) 2007-2011 Xagasoft, All rights reserved. + * + * This file is part of the libbu++ library and is released under the + * terms of the license contained in the file LICENSE. + */ + +#ifndef BU_TRACE_H +#define BU_TRACE_H + +#include +#include +#include +#include + +#include + +namespace Bu +{ +/* template void __tracer_format( t &v ) + { + __tracer_format( *const_cast(&v) ); + } +*/ + template void __tracer_format( const t &v ) + { + Bu::sio << v; + } + + void __tracer( const char *pf ); + + #define looper( vv ) \ + for( ; *n; n++ ) \ + { \ + if( bInBracket == true ) \ + { \ + if( *n == '>' ) \ + bInBracket = false; \ + } \ + else if( *n == ',' || *n == ')' ) \ + { \ + fwrite( s, (ptrdiff_t)n-(ptrdiff_t)s, 1, stdout ); \ + fwrite("=", 1, 1, stdout); \ + __tracer_format( vv ); \ + s = n; \ + n++; \ + break; \ + } \ + else if( *n == '<' ) \ + { \ + bInBracket = true; \ + } \ + } (void)0 + + template void __tracer( const char *pf, t1 &v1 ) + { + printf("trace: "); + const char *s = pf; + const char *n = pf; + bool bInBracket = false; + looper( v1 ); + fwrite( s, (ptrdiff_t)n-(ptrdiff_t)s, strlen(s), stdout ); + fwrite( "\n", 1, 1, stdout ); + fflush( stdout ); + } + + template void __tracer( const char *pf, + t1 &v1, t2 &v2 ) + { + printf("trace: "); + const char *s = pf; + const char *n = pf; + bool bInBracket = false; + looper( v1 ); + looper( v2 ); + fwrite( s, (ptrdiff_t)n-(ptrdiff_t)s, strlen(s), stdout ); + fwrite( "\n", 1, 1, stdout ); + fflush( stdout ); + } + + template + void __tracer( const char *pf, t1 &v1, t2 &v2, t3 &v3 ) + { + printf("trace: "); + const char *s = pf; + const char *n = pf; + bool bInBracket = false; + looper( v1 ); + looper( v2 ); + looper( v3 ); + fwrite( s, (ptrdiff_t)n-(ptrdiff_t)s, strlen(s), stdout ); + fwrite( "\n", 1, 1, stdout ); + fflush( stdout ); + } + + template + void __tracer( const char *pf, t1 &v1, t2 &v2, t3 &v3, t4 &v4 ) + { + printf("trace: "); + const char *s = pf; + const char *n = pf; + bool bInBracket = false; + looper( v1 ); + looper( v2 ); + looper( v3 ); + looper( v4 ); + fwrite( s, (ptrdiff_t)n-(ptrdiff_t)s, strlen(s), stdout ); + fwrite( "\n", 1, 1, stdout ); + fflush( stdout ); + } + + template + void __tracer( const char *pf, t1 &v1, t2 &v2, t3 &v3, t4 &v4, t5 &v5 ) + { + printf("trace: "); + const char *s = pf; + const char *n = pf; + bool bInBracket = false; + looper( v1 ); + looper( v2 ); + looper( v3 ); + looper( v4 ); + looper( v5 ); + fwrite( s, (ptrdiff_t)n-(ptrdiff_t)s, strlen(s), stdout ); + fwrite( "\n", 1, 1, stdout ); + fflush( stdout ); + } + + template + void __tracer( const char *pf, t1 &v1, t2 &v2, t3 &v3, t4 &v4, t5 &v5, + t6 &v6) + { + printf("trace: "); + const char *s = pf; + const char *n = pf; + bool bInBracket = false; + looper( v1 ); + looper( v2 ); + looper( v3 ); + looper( v4 ); + looper( v5 ); + looper( v6 ); + fwrite( s, (ptrdiff_t)n-(ptrdiff_t)s, strlen(s), stdout ); + fwrite( "\n", 1, 1, stdout ); + fflush( stdout ); + } + + template + void __tracer( const char *pf, t1 &v1, t2 &v2, t3 &v3, t4 &v4, t5 &v5, + t6 &v6, t7 &v7 ) + { + printf("trace: "); + const char *s = pf; + const char *n = pf; + bool bInBracket = false; + looper( v1 ); + looper( v2 ); + looper( v3 ); + looper( v4 ); + looper( v5 ); + looper( v6 ); + looper( v7 ); + fwrite( s, (ptrdiff_t)n-(ptrdiff_t)s, strlen(s), stdout ); + fwrite( "\n", 1, 1, stdout ); + fflush( stdout ); + } +#undef looper + + template<> void __tracer_format( const float &v ); + template<> void __tracer_format( const double &v ); + template<> void __tracer_format( void * const &v ); + template<> void __tracer_format( char * const &v ); + template<> void __tracer_format( char ** const &v ); + template<> void __tracer_format( void const * const &v ); + template<> void __tracer_format( char const * const &v ); + template<> void __tracer_format( char const ** const &v ); +} + +#ifdef BU_TRACE +# define TRACE(args...) Bu::__tracer( __PRETTY_FUNCTION__, ##args ) +#else +# define TRACE(args...) (void)0 +#endif + +#endif -- cgit v1.2.3