@@ -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" |