my $read_loc = $entry
+ $self->hash_size
+ $self->byte_size
- + $self->trans_id * ( 2 * $self->byte_size );
+ + $self->trans_id * ( $self->byte_size + 4 );
my $data_loc = $self->storage->read_at( $read_loc, $self->byte_size );
$data_loc = unpack( $StP{$self->byte_size}, $data_loc );
my $head_loc = $self->storage->read_at( $base, $self->byte_size );
$head_loc = unpack( $StP{$self->byte_size}, $head_loc );
my $trans_loc = $self->storage->read_at(
- $base + $self->trans_id * ( 2 * $self->byte_size ), $self->byte_size,
+ $base + $self->trans_id * ( $self->byte_size + 4 ), $self->byte_size,
);
$self->storage->print_at( $base, $trans_loc );
$self->storage->print_at(
- $base + $self->trans_id * ( 2 * $self->byte_size ),
+ $base + $self->trans_id * ( $self->byte_size + 4 ),
pack( $StP{$self->byte_size} . ' N', (0) x 2 ),
);
#XXX Think this through!
my $loc = $sector->get_data_location_for({
idx => $idx,
+ allow_head => 1,
});
unless ( $loc ) {
$crumbs->[-1][1]++;
unless ( $self->{bucket_size} ) {
my $e = $self->engine;
# Key + head (location) + transactions (location + staleness-counter)
- my $location_size = $e->byte_size + $e->num_txns * ( 2 * $e->byte_size );
+ my $location_size = $e->byte_size + $e->num_txns * ( $e->byte_size + 4 );
$self->{bucket_size} = $e->hash_size + $location_size;
}
return $self->{bucket_size};
my $loc = $spot
+ $engine->hash_size
+ $engine->byte_size
- + $args->{trans_id} * ( 2 * $engine->byte_size );
+ + $args->{trans_id} * ( $engine->byte_size + 4 );
$engine->storage->print_at( $loc,
pack( $StP{$engine->byte_size}, $args->{value}->offset ),
my $loc = $spot
+ $engine->hash_size
+ $engine->byte_size
- + $args->{trans_id} * ( 2 * $engine->byte_size );
+ + $args->{trans_id} * ( $engine->byte_size + 4 );
$engine->storage->print_at( $loc,
pack( $StP{$engine->byte_size}, 1 ), # 1 is the marker for deleted
+ $args->{idx} * $self->bucket_size
+ $e->hash_size
+ $e->byte_size
- + $args->{trans_id} * ( 2 * $e->byte_size );
+ + $args->{trans_id} * ( $e->byte_size + 4 );
my $buffer = $e->storage->read_at(
$spot,
- 2 * $e->byte_size,
+ $e->byte_size + 4,
);
my ($loc, $staleness) = unpack( $StP{$e->byte_size} . ' N', $buffer );
return $self->get_data_location_for({
trans_id => 0,
allow_head => 1,
+ idx => $args->{idx},
});
}
return $loc <= 1 ? 0 : $loc;