Checking in breakout of the various packages in DBM::Deep::Engine and documentation...
[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 sub new {
9     my $self = bless $_[1], $_[0];
10     Scalar::Util::weaken( $self->{engine} );
11     $self->_init;
12     return $self;
13 }
14
15 #sub _init {}
16 #sub clone { DBM::Deep->_throw_error( "Must be implemented in the child class" ); }
17
18 sub engine { $_[0]{engine} }
19 sub offset { $_[0]{offset} }
20 sub type   { $_[0]{type} }
21
22 sub base_size {
23    my $self = shift;
24    return $self->engine->SIG_SIZE + $STALE_SIZE;
25 }
26
27 sub free {
28     my $self = shift;
29
30     my $e = $self->engine;
31
32     $e->storage->print_at( $self->offset, $e->SIG_FREE );
33     # Skip staleness counter
34     $e->storage->print_at( $self->offset + $self->base_size,
35         chr(0) x ($self->size - $self->base_size),
36     );
37
38     my $free_meth = $self->free_meth;
39     $e->$free_meth( $self->offset, $self->size );
40
41     return;
42 }
43
44 1;
45 __END__