Converted DBM::Deep::Engine::Sector::Scalar to using a string in _init()
[dbsrgits/DBM-Deep.git] / lib / DBM / Deep / Engine / Sector.pm
CommitLineData
065b45be 1package DBM::Deep::Engine::Sector;
2
3use 5.006;
4
5use strict;
6use warnings FATAL => 'all';
7
8use Scalar::Util ();
9
10sub new {
11 my $self = bless $_[1], $_[0];
12 Scalar::Util::weaken( $self->{engine} );
13 $self->_init;
14 return $self;
15}
16
17#sub _init {}
18#sub clone { DBM::Deep->_throw_error( "Must be implemented in the child class" ); }
19
20sub engine { $_[0]{engine} }
21sub offset { $_[0]{offset} }
22sub type { $_[0]{type} }
23
24sub base_size {
25 my $self = shift;
26 no warnings 'once';
27 return $self->engine->SIG_SIZE + $DBM::Deep::Engine::STALE_SIZE;
28}
29
30sub free {
31 my $self = shift;
32
33 my $e = $self->engine;
34
35 $e->storage->print_at( $self->offset, $e->SIG_FREE );
36 # Skip staleness counter
37 $e->storage->print_at( $self->offset + $self->base_size,
38 chr(0) x ($self->size - $self->base_size),
39 );
40
41 my $free_meth = $self->free_meth;
42 $e->$free_meth( $self->offset, $self->size );
43
44 return;
45}
46
471;
48__END__