Checking in breakout of the various packages in DBM::Deep::Engine and documentation...
[dbsrgits/DBM-Deep.git] / lib / DBM / Deep / Engine / Sector.pm
CommitLineData
f0276afb 1package DBM::Deep::Engine::Sector;
2
3use 5.006_000;
4
5use strict;
6use warnings FATAL => 'all';
7
8sub 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
18sub engine { $_[0]{engine} }
19sub offset { $_[0]{offset} }
20sub type { $_[0]{type} }
21
22sub base_size {
23 my $self = shift;
24 return $self->engine->SIG_SIZE + $STALE_SIZE;
25}
26
27sub 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
441;
45__END__