1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
# (c) Sound Object Logic 2000-2001
use strict;
package Tangram::AbstractHash;
use Tangram::Coll;
use base qw( Tangram::Coll );
use Carp;
sub content
{
shift;
@{shift()};
}
sub demand
{
my ($self, $def, $storage, $obj, $member, $class) = @_;
print $Tangram::TRACE "loading $member\n" if $Tangram::TRACE;
my %coll;
if (my $prefetch = $storage->{PREFETCH}{$class}{$member}{$storage->id($obj)})
{
%coll = %$prefetch;
}
else
{
my $cursor = $self->cursor($def, $storage, $obj, $member);
for (my $item = $cursor->select; $item; $item = $cursor->next)
{
my $slot = shift @{ $cursor->{-residue} };
$coll{$slot} = $item;
}
}
$storage->{scratch}{ref($self)}{$storage->id($obj)}{$member} = {
map { $_ => ($coll{$_} && $storage->id( $coll{$_} ) ) } keys %coll };
return \%coll;
}
1;
|