| @@ -0,0 +1,81 @@ | |||
| /*******************************************************************************/ | |||
| /* Copyright (C) 2008 Jonathan Moore Liles */ | |||
| /* */ | |||
| /* This program is free software; you can redistribute it and/or modify it */ | |||
| /* under the terms of the GNU General Public License as published by the */ | |||
| /* Free Software Foundation; either version 2 of the License, or (at your */ | |||
| /* option) any later version. */ | |||
| /* */ | |||
| /* This program is distributed in the hope that it will be useful, but WITHOUT */ | |||
| /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */ | |||
| /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for */ | |||
| /* more details. */ | |||
| /* */ | |||
| /* You should have received a copy of the GNU General Public License along */ | |||
| /* with This program; see the file COPYING. If not,write to the Free Software */ | |||
| /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||
| /*******************************************************************************/ | |||
| #include "Log_Entry.H" | |||
| Log_Entry::Log_Entry ( ) | |||
| { | |||
| _sa = (char**)malloc( sizeof( char * ) ); | |||
| *_sa = NULL; | |||
| _i = 0; | |||
| } | |||
| Log_Entry::Log_Entry ( char **sa ) | |||
| { | |||
| _sa = sa; | |||
| _i = 0; | |||
| if ( _sa ) | |||
| while ( _sa[ _i ] ) ++_i; | |||
| } | |||
| Log_Entry::~Log_Entry ( ) | |||
| { | |||
| if ( ! _sa ) | |||
| return; | |||
| for ( _i = 0; _sa[ _i ]; ++_i ) | |||
| { | |||
| free( _sa[ _i ] ); | |||
| } | |||
| free( _sa ); | |||
| } | |||
| void | |||
| Log_Entry::grow ( ) | |||
| { | |||
| _sa = (char**)realloc( _sa, sizeof( char * ) * (_i + 2) ); | |||
| _sa[ _i + 1 ] = NULL; | |||
| } | |||
| \ | |||
| int | |||
| Log_Entry::size ( void ) const | |||
| { | |||
| return _i; | |||
| } | |||
| void | |||
| Log_Entry::get ( int n, const char **name, const char **value ) | |||
| { | |||
| *name = _sa[ n ]; | |||
| *value = *name + strlen( *name ) + 1; | |||
| } | |||
| char ** | |||
| Log_Entry::sa ( void ) | |||
| { | |||
| char **sa = _sa; | |||
| _sa = NULL; | |||
| return sa; | |||
| } | |||
| @@ -0,0 +1,85 @@ | |||
| /*******************************************************************************/ | |||
| /* Copyright (C) 2008 Jonathan Moore Liles */ | |||
| /* */ | |||
| /* This program is free software; you can redistribute it and/or modify it */ | |||
| /* under the terms of the GNU General Public License as published by the */ | |||
| /* Free Software Foundation; either version 2 of the License, or (at your */ | |||
| /* option) any later version. */ | |||
| /* */ | |||
| /* This program is distributed in the hope that it will be useful, but WITHOUT */ | |||
| /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */ | |||
| /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for */ | |||
| /* more details. */ | |||
| /* */ | |||
| /* You should have received a copy of the GNU General Public License along */ | |||
| /* with This program; see the file COPYING. If not,write to the Free Software */ | |||
| /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||
| /*******************************************************************************/ | |||
| #pragma once | |||
| #include "Loggable.H" | |||
| #include "types.h" | |||
| class Log_Entry | |||
| { | |||
| // vector <Pair> _sa; | |||
| char **_sa; | |||
| int _i; | |||
| /* not permitted */ | |||
| Log_Entry ( const Log_Entry &rhs ); | |||
| Log_Entry & operator= ( const Log_Entry &rhs ); | |||
| public: | |||
| Log_Entry ( ); | |||
| Log_Entry ( char **sa ); | |||
| ~Log_Entry ( ); | |||
| /****************/ | |||
| /* Construction */ | |||
| /****************/ | |||
| void grow ( ); | |||
| #define ADD( type, format, exp ) \ | |||
| void add ( const char *name, type v ) \ | |||
| { \ | |||
| grow(); \ | |||
| asprintf( &_sa[ _i ], "%s " format, name, (exp) ); \ | |||
| strtok( _sa[ _i++ ], " " ); \ | |||
| } \ | |||
| /***************/ | |||
| /* Examination */ | |||
| /***************/ | |||
| int size ( void ) const; | |||
| void get ( int n, const char **name, const char **value ); | |||
| char **sa ( void ); | |||
| /* #define ADD ( type, format, exp ) \ */ | |||
| /* void add ( const char *name, type v ) \ */ | |||
| /* { \ */ | |||
| /* char pat[ 256 ]; \ */ | |||
| /* Pair p; \ */ | |||
| /* p.name = strdup( name ); \ */ | |||
| /* snprintf( pat, sizeof( pat ), format, exp ); \ */ | |||
| /* p.value = strdup( pat ); \ */ | |||
| /* _sa.push( p ); \ */ | |||
| /* } \ */ | |||
| ADD( int, "%d", v ); | |||
| ADD( nframes_t, "%lu", (unsigned long)v ); | |||
| ADD( unsigned long, "%lu", v ); | |||
| ADD( const char *, "\"%s\"", v ? Loggable::escape( v ) : "" ); | |||
| ADD( Loggable * , "0x%X", v ? v->id() : 0 ); | |||
| ADD( float, "%f", v ); | |||
| ADD( double, "%f", v ); | |||
| #undef ADD | |||
| }; | |||
| @@ -270,116 +270,4 @@ public: | |||
| class Log_Entry | |||
| { | |||
| // vector <Pair> _sa; | |||
| char **_sa; | |||
| int _i; | |||
| /* not permitted */ | |||
| Log_Entry ( const Log_Entry &rhs ); | |||
| Log_Entry & operator= ( const Log_Entry &rhs ); | |||
| public: | |||
| struct Pair | |||
| { | |||
| const char *name; | |||
| const char *value; | |||
| }; | |||
| Log_Entry ( ) | |||
| { | |||
| _sa = (char**)malloc( sizeof( char * ) ); | |||
| *_sa = NULL; | |||
| _i = 0; | |||
| } | |||
| Log_Entry ( char **sa ) | |||
| { | |||
| _sa = sa; | |||
| _i = 0; | |||
| if ( _sa ) | |||
| while ( _sa[ _i ] ) ++_i; | |||
| } | |||
| ~Log_Entry ( ) | |||
| { | |||
| if ( ! _sa ) | |||
| return; | |||
| for ( _i = 0; _sa[ _i ]; ++_i ) | |||
| { | |||
| free( _sa[ _i ] ); | |||
| } | |||
| free( _sa ); | |||
| } | |||
| /****************/ | |||
| /* Construction */ | |||
| /****************/ | |||
| void grow ( ) | |||
| { | |||
| _sa = (char**)realloc( _sa, sizeof( char * ) * (_i + 2) ); | |||
| _sa[ _i + 1 ] = NULL; | |||
| } | |||
| #define ADD( type, format, exp ) \ | |||
| void add ( const char *name, type v ) \ | |||
| { \ | |||
| grow(); \ | |||
| asprintf( &_sa[ _i ], "%s " format, name, (exp) ); \ | |||
| strtok( _sa[ _i++ ], " " ); \ | |||
| } \ | |||
| /***************/ | |||
| /* Examination */ | |||
| /***************/ | |||
| int size ( void ) const | |||
| { | |||
| return _i; | |||
| } | |||
| void get ( int n, const char **name, const char **value ) | |||
| { | |||
| *name = _sa[ n ]; | |||
| *value = *name + strlen( *name ) + 1; | |||
| } | |||
| char **sa ( void ) | |||
| { | |||
| char **sa = _sa; | |||
| _sa = NULL; | |||
| return sa; | |||
| } | |||
| /* #define ADD ( type, format, exp ) \ */ | |||
| /* void add ( const char *name, type v ) \ */ | |||
| /* { \ */ | |||
| /* char pat[ 256 ]; \ */ | |||
| /* Pair p; \ */ | |||
| /* p.name = strdup( name ); \ */ | |||
| /* snprintf( pat, sizeof( pat ), format, exp ); \ */ | |||
| /* p.value = strdup( pat ); \ */ | |||
| /* _sa.push( p ); \ */ | |||
| /* } \ */ | |||
| ADD( int, "%d", v ); | |||
| ADD( nframes_t, "%lu", (unsigned long)v ); | |||
| ADD( unsigned long, "%lu", v ); | |||
| ADD( const char *, "\"%s\"", v ? Loggable::escape( v ) : "" ); | |||
| ADD( Loggable * , "0x%X", v ? v->id() : 0 ); | |||
| ADD( float, "%f", v ); | |||
| ADD( double, "%f", v ); | |||
| #undef ADD | |||
| }; | |||
| #include "Log_Entry.H" | |||