Browse Source

Improve journaling... Add transactions.

tags/non-daw-v1.1.0
Jonathan Moore Liles 18 years ago
parent
commit
49628da177
3 changed files with 54 additions and 9 deletions
  1. +19
    -8
      Loggable.C
  2. +28
    -1
      Loggable.H
  3. +7
    -0
      Region.C

+ 19
- 8
Loggable.C View File

@@ -27,6 +27,7 @@
FILE *Loggable::_fp; FILE *Loggable::_fp;


int Loggable::_log_id = 0; int Loggable::_log_id = 0;
int Loggable::_level = 0;


vector <Loggable *> Loggable::_loggables; vector <Loggable *> Loggable::_loggables;


@@ -92,11 +93,11 @@ log_print( char **o, char **n )
/** compare elements of dumps s1 and s2, removing those elements /** compare elements of dumps s1 and s2, removing those elements
of dst which are not changed from src */ of dst which are not changed from src */
static static
void
bool
log_diff ( char **sa1, char **sa2 ) log_diff ( char **sa1, char **sa2 )
{ {
if ( ! sa1 ) if ( ! sa1 )
return;
return true;


int w = 0; int w = 0;
for ( int i = 0; sa1[ i ]; ++i ) for ( int i = 0; sa1[ i ]; ++i )
@@ -117,6 +118,8 @@ log_diff ( char **sa1, char **sa2 )


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

return w == 0 ? false : true;
} }




@@ -126,8 +129,12 @@ log_diff ( char **sa1, char **sa2 )
void void
Loggable::log_start ( void ) Loggable::log_start ( void )
{ {
if ( ! _old_state )
_old_state = log_dump();
// if ( _old_state )
// log_end();
if ( _old_state )
return;

_old_state = log_dump();
} }


void void
@@ -137,11 +144,13 @@ Loggable::log_end ( void )


// if ( _old_state ) // if ( _old_state )


log_diff( _old_state, _new_state );

printf( "%s 0x%X set ", class_name(), _id );
if ( log_diff( _old_state, _new_state ) )
{
indent();
printf( "%s 0x%X set ", class_name(), _id );


log_print( _old_state, _new_state );
log_print( _old_state, _new_state );
}


free_sa( _old_state ); free_sa( _old_state );
if ( _new_state ) if ( _new_state )
@@ -153,6 +162,7 @@ Loggable::log_end ( void )
void void
Loggable::log_create ( void ) Loggable::log_create ( void )
{ {
indent();
printf( "%s 0x%X new ", class_name(), _id ); printf( "%s 0x%X new ", class_name(), _id );


char **sa = log_dump(); char **sa = log_dump();
@@ -165,6 +175,7 @@ Loggable::log_create ( void )
void void
Loggable::log_destroy ( void ) Loggable::log_destroy ( void )
{ {
indent();
printf( "%s 0x%X destroy ", class_name(), _id ); printf( "%s 0x%X destroy ", class_name(), _id );


char **sa = log_dump(); char **sa = log_dump();


+ 28
- 1
Loggable.H View File

@@ -24,7 +24,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <assert.h>


#include <vector> #include <vector>
using std::vector; using std::vector;
@@ -34,6 +34,7 @@ class Loggable


static FILE *_fp; static FILE *_fp;
static int _log_id; static int _log_id;
static int _level;


static vector <Loggable *> _loggables; static vector <Loggable *> _loggables;


@@ -43,10 +44,36 @@ private:
char **_old_state; char **_old_state;
char **_new_state; char **_new_state;



static
void indent ( void )
{
int n = Loggable::_level;

while ( n-- )
printf( "\t" );
}

public: public:


static bool open ( const char *filename ); static bool open ( const char *filename );


static
void
block_start ( void )
{
indent();
printf( "{\n" );
++Loggable::_level;
}
static
void
block_end ( void )
{
assert( --Loggable::_level >= 0 );
indent();
printf( "}\n" );
}


static static
Loggable * Loggable *


+ 7
- 0
Region.C View File

@@ -184,12 +184,19 @@ Region::handle ( int m )
/* split */ /* split */
if ( ! copied ) if ( ! copied )
{ {
Loggable::block_start();

Region *copy = new Region( *this ); Region *copy = new Region( *this );


trim( RIGHT, X ); trim( RIGHT, X );
copy->trim( LEFT, X ); copy->trim( LEFT, X );


_track->add( copy ); _track->add( copy );

log_end();

Loggable::block_end();
return 1;
} }
} }
default: default:


Loading…
Cancel
Save