}
# Need to load the new sector so we can read from it.
- my $new_sector = $self->engine->storage->read_at( $loc, $size );
+ my $new_sector = $self->engine->get_data( $loc, $size );
# Read the new head after the signature and the staleness counter
- my $new_head = substr( $new_sector, $e->SIG_SIZE + $DBM::Deep::Engine::STALE_SIZE, $e->byte_size );
+ my $new_head = substr( $$new_sector, $e->SIG_SIZE + $DBM::Deep::Engine::STALE_SIZE, $e->byte_size );
$self->write( $e->chains_loc + $chains_offset, $new_head );
return $loc;
}
+sub read_txn_slots {
+ my $self = shift;
+ my $e = $self->engine;
+ my $bl = $e->txn_bitfield_len;
+ my $num_bits = $bl * 8;
+ my @x = split '', unpack( 'b'.$num_bits, $self->read( $e->trans_loc, $bl ) );
+ return @x;
+}
+
+sub write_txn_slots {
+ my $self = shift;
+ my $e = $self->engine;
+ my $num_bits = $e->txn_bitfield_len * 8;
+ $self->write( $e->trans_loc,
+ pack( 'b'.$num_bits, join('', @_) ),
+ );
+}
+
+sub get_txn_staleness_counter {
+ my $self = shift;
+ my ($trans_id) = @_;
+
+ # Hardcode staleness of 0 for the HEAD
+ return 0 unless $trans_id;
+
+ my $e = $self->engine;
+ return unpack( $e->StP($DBM::Deep::Engine::STALE_SIZE),
+ $self->read(
+ $e->trans_loc + $e->txn_bitfield_len + $DBM::Deep::Engine::STALE_SIZE * ($trans_id - 1),
+ $DBM::Deep::Engine::STALE_SIZE,
+ )
+ );
+}
+
+sub inc_txn_staleness_counter {
+ my $self = shift;
+ my ($trans_id) = @_;
+
+ # Hardcode staleness of 0 for the HEAD
+ return 0 unless $trans_id;
+
+ my $e = $self->engine;
+ $self->write(
+ $e->trans_loc + $e->txn_bitfield_len + $DBM::Deep::Engine::STALE_SIZE * ($trans_id - 1),
+ pack( $e->StP($DBM::Deep::Engine::STALE_SIZE), $self->get_txn_staleness_counter( $trans_id ) + 1 ),
+ );
+}
+
1;
__END__