All the tests now pass with the broken out classes
[dbsrgits/DBM-Deep.git] / lib / DBM / Deep / Engine / Sector.pm
1 package DBM::Deep::Engine::Sector;
2
3 use 5.006_000;
4
5 use strict;
6 use warnings FATAL => 'all';
7
8 my $STALE_SIZE = 2;
9
10 # Please refer to the pack() documentation for further information
11 my %StP = (
12     1 => 'C', # Unsigned char value (no order needed as it's just one byte)
13     2 => 'n', # Unsigned short in "network" (big-endian) order
14     4 => 'N', # Unsigned long in "network" (big-endian) order
15     8 => 'Q', # Usigned quad (no order specified, presumably machine-dependent)
16 );
17
18 sub new {
19     my $self = bless $_[1], $_[0];
20     Scalar::Util::weaken( $self->{engine} );
21     $self->_init;
22     return $self;
23 }
24
25 #sub _init {}
26 #sub clone { DBM::Deep->_throw_error( "Must be implemented in the child class" ); }
27
28 sub engine { $_[0]{engine} }
29 sub offset { $_[0]{offset} }
30 sub type   { $_[0]{type} }
31
32 sub base_size {
33    my $self = shift;
34    return $self->engine->SIG_SIZE + $STALE_SIZE;
35 }
36
37 sub free {
38     my $self = shift;
39
40     my $e = $self->engine;
41
42     $e->storage->print_at( $self->offset, $e->SIG_FREE );
43     # Skip staleness counter
44     $e->storage->print_at( $self->offset + $self->base_size,
45         chr(0) x ($self->size - $self->base_size),
46     );
47
48     my $free_meth = $self->free_meth;
49     $e->$free_meth( $self->offset, $self->size );
50
51     return;
52 }
53
54 1;
55 __END__