5c9f3bcfd233a7a1f798efb3947f048e755753da
[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 use Scalar::Util ();
9
10 sub 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
20 sub engine { $_[0]{engine} }
21 sub offset { $_[0]{offset} }
22 sub type   { $_[0]{type} }
23
24 sub base_size {
25    my $self = shift;
26    no warnings 'once';
27    return $self->engine->SIG_SIZE + $DBM::Deep::Engine::STALE_SIZE;
28 }
29
30 sub 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
47 1;
48 __END__