Algorithm-SpatialIndex
view release on metacpan or search on metacpan
lib/Algorithm/SpatialIndex/Storage.pm view on Meta::CPAN
package Algorithm::SpatialIndex::Storage;
use 5.008001;
use strict;
use warnings;
use Carp qw(croak);
require Algorithm::SpatialIndex::Strategy;
use Scalar::Util 'weaken';
use Class::XSAccessor {
getters => [qw(
index
no_of_subnodes
bucket_class
)],
};
sub new {
my $class = shift;
my %opt = @_;
my $ext_opt = $opt{opt}||{};
my $self = bless {
bucket_class => defined($ext_opt->{bucket_class}) ? $ext_opt->{bucket_class} : 'Algorithm::SpatialIndex::Bucket',
%opt,
} => $class;
weaken($self->{index});
my $bucket_class = $self->bucket_class;
if (not $bucket_class =~ /::/) {
$bucket_class = "Algorithm::SpatialIndex::Bucket::$bucket_class";
$self->{bucket_class} = $bucket_class;
}
eval "require $bucket_class; 1;" or do {
my $err = $@ || "Zombie error";
die "Could not load bucket implementation '$bucket_class': $err"
};
my $strategy = $self->index->strategy;
$self->{no_of_subnodes} = $strategy->no_of_subnodes;
$self->init() if $self->can('init');
return $self;
}
sub fetch_node {
croak("Not implemented in base class");
}
sub store_node {
croak("Not implemented in base class");
}
sub fetch_bucket {
croak("Not implemented in base class");
}
sub delete_bucket {
croak("Not implemented in base class");
}
sub store_bucket {
croak("Not implemented in base class");
}
sub get_option {
croak("Not implemented in base class");
}
sub set_option {
croak("Not implemented in base class");
}
1;
__END__
=head1 NAME
Algorithm::SpatialIndex::Storage - Base class for storage backends
=head1 SYNOPSIS
use Algorithm::SpatialIndex;
my $idx = Algorithm::SpatialIndex->new(
storage => 'Memory', # or others
);
=head1 DESCRIPTION
=head1 METHODS
=head2 new
Constructor. Called by the L<Algorithm::SpatialIndex>
( run in 1.131 second using v1.01-cache-2.11-cpan-119454b85a5 )