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"
lib/Algorithm/SpatialIndex/Strategy.pm view on Meta::CPAN
package Algorithm::SpatialIndex::Strategy;
use 5.008001;
use strict;
use warnings;
use Carp qw(croak);
use Algorithm::SpatialIndex::Storage;
use Scalar::Util 'weaken';
use Class::XSAccessor {
getters => [qw(
index
storage
bucket_size
)],
};
sub new {
my $class = shift;
my %opt = @_;
my $self = bless {
bucket_size => 100,
%opt,
} => $class;
weaken($self->{index});
$self->init() if $self->can('init');
return $self;
}
sub _super_init_storage {
my $self = shift;
$self->init_storage if $self->can('init_storage');
}
sub _set_storage {
my $self = shift;
my $storage = shift;
$self->{storage} = $storage;
Scalar::Util::weaken($self->{storage});
}
sub no_of_subnodes {
croak("no_of_subnodes needs to be implemented in a subclass");
}
sub no_of_dimensions {
croak("no_of_dimensions needs to be implemented in a subclass");
}
( run in 0.278 second using v1.01-cache-2.11-cpan-65fba6d93b7 )