Browse Source

Continue refactoring Log_Entry.

tags/non-daw-v1.1.0
Jonathan Moore Liles 17 years ago
parent
commit
f370219f17
4 changed files with 64 additions and 75 deletions
  1. +47
    -3
      Timeline/Log_Entry.C
  2. +3
    -0
      Timeline/Log_Entry.H
  3. +10
    -69
      Timeline/Loggable.C
  4. +4
    -3
      Timeline/Loggable.H

+ 47
- 3
Timeline/Log_Entry.C View File

@@ -163,6 +163,46 @@ Log_Entry::parse_alist( const char *s )
return r; return r;
} }


/** compare elements of dumps s1 and s2, removing those elements
of dst which are not changed from src */
bool
Log_Entry::log_diff ( char **sa1, char **sa2 )
{
if ( ! sa1 )
return true;

int w = 0;
for ( int i = 0; sa1[ i ]; ++i )
{
const char *v1 = sa1[ i ] + strlen( sa1[ i ] ) + 1;
const char *v2 = sa2[ i ] + strlen( sa2[ i ] ) + 1;

if ( ! strcmp( sa1[ i ], sa2[ i ] ) && ! strcmp( v1, v2 ) )
{
free( sa2[ i ] );
free( sa1[ i ] );
}
else
{
sa2[ w ] = sa2[ i ];
sa1[ w ] = sa1[ i ];

w++;
}
}

sa1[ w ] = NULL;
sa2[ w ] = NULL;

return w == 0 ? false : true;
}

bool
Log_Entry::operator!= ( const Log_Entry &rhs ) const
{
return log_diff( this->_sa, rhs._sa );
}

void void
Log_Entry::grow ( ) Log_Entry::grow ( )
{ {
@@ -187,9 +227,13 @@ Log_Entry::get ( int n, const char **name, const char **value )
char ** char **
Log_Entry::sa ( void ) Log_Entry::sa ( void )
{ {
char **sa = _sa;
return _sa;

/* char **sa = _sa; */

/* // _sa = NULL; */


_sa = NULL;
/* return sa; */
/* } */


return sa;
} }

+ 3
- 0
Timeline/Log_Entry.H View File

@@ -33,6 +33,7 @@ class Log_Entry
Log_Entry & operator= ( const Log_Entry &rhs ); Log_Entry & operator= ( const Log_Entry &rhs );


static char ** parse_alist ( const char *s ); static char ** parse_alist ( const char *s );
static bool log_diff ( char **sa1, char **sa2 );


public: public:


@@ -59,6 +60,8 @@ public:
/* Examination */ /* Examination */
/***************/ /***************/


bool operator!= ( const Log_Entry &rhs ) const;

int size ( void ) const; int size ( void ) const;


void get ( int n, const char **name, const char **value ); void get ( int n, const char **name, const char **value );


+ 10
- 69
Timeline/Loggable.C View File

@@ -158,19 +158,6 @@ Loggable::escape ( const char *s )
return r; return r;
} }





static
void free_sa ( char **sa )
{
char **a = sa;
for ( ; *a; a++ )
free( *a );

free( sa );
}

/** 'do' a message like "Audio_Region 0xF1 set :r 123" */ /** 'do' a message like "Audio_Region 0xF1 set :r 123" */
bool bool
Loggable::do_this ( const char *s, bool reverse ) Loggable::do_this ( const char *s, bool reverse )
@@ -491,51 +478,15 @@ Loggable::log_print( char **o, char **n ) const
log( "\n" ); log( "\n" );
} }


/** compare elements of dumps s1 and s2, removing those elements
of dst which are not changed from src */
static
bool
log_diff ( char **sa1, char **sa2 )
{
if ( ! sa1 )
return true;

int w = 0;
for ( int i = 0; sa1[ i ]; ++i )
{
const char *v1 = sa1[ i ] + strlen( sa1[ i ] ) + 1;
const char *v2 = sa2[ i ] + strlen( sa2[ i ] ) + 1;

if ( ! strcmp( sa1[ i ], sa2[ i ] ) && ! strcmp( v1, v2 ) )
{
free( sa2[ i ] );
free( sa1[ i ] );
}
else
{
sa2[ w ] = sa2[ i ];
sa1[ w ] = sa1[ i ];

w++;
}
}

sa1[ w ] = NULL;
sa2[ w ] = NULL;

return w == 0 ? false : true;
}


void void
Loggable::log_start ( void ) Loggable::log_start ( void )
{ {
if ( ! _old_state ) if ( ! _old_state )
{ {
Log_Entry e;
_old_state = new Log_Entry;


get( e );

_old_state = e.sa();
get( *_old_state );
} }
++_nest; ++_nest;
} }
@@ -547,29 +498,27 @@ Loggable::log_end ( void )
if ( --_nest > 0 ) if ( --_nest > 0 )
return; return;


char **_new_state;
Log_Entry *_new_state;


{ {
Log_Entry e;

get( e );
_new_state = new Log_Entry;


_new_state = e.sa();
get( *_new_state );
} }


if ( log_diff( _old_state, _new_state ) )
if ( *_old_state != *_new_state )
{ {
// indent(); // indent();
log( "%s 0x%X set ", class_name(), _id ); log( "%s 0x%X set ", class_name(), _id );


log_print( _old_state, _new_state );
log_print( _old_state->sa(), _new_state->sa() );
} }


if ( _new_state ) if ( _new_state )
free_sa( _new_state );
delete _new_state;


if ( _old_state ) if ( _old_state )
free_sa( _old_state );
delete _old_state;


_old_state = NULL; _old_state = NULL;


@@ -603,7 +552,6 @@ Loggable::log_create ( void ) const
if ( sa ) if ( sa )
{ {
log_print( NULL, sa ); log_print( NULL, sa );
free_sa( sa );
} }
else else
log( "\n" ); log( "\n" );
@@ -621,18 +569,11 @@ Loggable::log_destroy ( void ) const


log( "%s 0x%X destroy << ", class_name(), _id ); log( "%s 0x%X destroy << ", class_name(), _id );


char **sa;

Log_Entry e; Log_Entry e;


get( e ); get( e );


sa = e.sa();

// log_print( sa, NULL );
log_print( NULL, sa );

free_sa( sa );
log_print( NULL, e.sa() );


if ( Loggable::_level == 0 ) if ( Loggable::_level == 0 )
Loggable::flush(); Loggable::flush();


+ 4
- 3
Timeline/Loggable.H View File

@@ -79,8 +79,8 @@ private:


int _id; int _id;


char **_old_state;
char **_new_state;
Log_Entry *_old_state;
// Log_Entry *_new_state;


int _nest; int _nest;


@@ -117,7 +117,8 @@ private:


void init ( bool loggable=true ) void init ( bool loggable=true )
{ {
_new_state = _old_state = NULL;
// _new_state
_old_state = NULL;
_nest = 0; _nest = 0;


if ( loggable ) if ( loggable )


Loading…
Cancel
Save