# THIS IS A WORK IN PROGRESS
# IT SHOULD BE CONSIDERED ALPHA
# BUT I EXPECT IT TO IMPROVE
# THIS IS A RE-IMPLEMENTATION OF PREVIOUS CODE THAT WAS WRITTEN
# ON-THE-FLY AS NEEDED. 

# YOU ARE ADVISED TO RUN THE TEST SCRIPT!!!

package Debug::Xray::Tie;

use strict;
use warnings;

use Carp::Assert;
use Data::Dumper;

use parent 'Tie::Scalar';

$VERSION = 0.01;

my $LogHandler;


sub TIESCALAR {
    assert ( (($#_==0) or ($#_==1)), 'Parms' );
    my $class = shift;
    my $self  = {};

    $self->{VALUE} = undef;
    $self->{VALUE} = shift if $_[0];

    my $value = $self->{VALUE} || 'undef';
    $LogHandler->("TIESCALAR $value");

    return bless $self, $class;
}


sub STORE {
    assert ( $#_==1, "Parms: found " . Dumper \@_ );
    my $self = shift;
    $self->{VALUE} = shift;

    my $value = $self->{VALUE} || 'undef';
    my $var_name = $self->{VAR_NAME} || 'undef';
    $LogHandler->("STORE $value to $var_name");
}


sub FETCH {
    assert ( $#_==0, "Parms: found " . Dumper \@_ );
    my $self = shift;

    my $value = $self->{VALUE} || 'undef';
    my $var_name = $self->{VAR_NAME} || 'undef';

    $LogHandler->("FETCH $value from $var_name");
    return $self->{VALUE};
}


sub set_var_name {
    assert ( $#_==1, 'Parms' ) if DEBUG;
    my $self = shift;
    my $var_name = shift;
    $self->{VAR_NAME} = $var_name;
}


sub set_log_handler {
    assert ( $#_==1, 'Parms' ) if DEBUG;
    my $self = shift;
    $LogHandler = shift;
}



1;
