Browse Source

Improve journaling... Add transactions.

tags/non-daw-v1.1.0
Jonathan Moore Liles 17 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;

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

vector <Loggable *> Loggable::_loggables;

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

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

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

return w == 0 ? false : true;
}


@@ -126,8 +129,12 @@ log_diff ( char **sa1, char **sa2 )
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
@@ -137,11 +144,13 @@ Loggable::log_end ( void )

// 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 );
if ( _new_state )
@@ -153,6 +162,7 @@ Loggable::log_end ( void )
void
Loggable::log_create ( void )
{
indent();
printf( "%s 0x%X new ", class_name(), _id );

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

char **sa = log_dump();


+ 28
- 1
Loggable.H View File

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

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

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

static vector <Loggable *> _loggables;

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


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

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

public:

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
Loggable *


+ 7
- 0
Region.C View File

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

Region *copy = new Region( *this );

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

_track->add( copy );

log_end();

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


Loading…
Cancel
Save