Algorithm-SpatialIndex

 view release on metacpan or  search on metacpan

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");
}

sub coord_types {
  croak("coord_types needs to be implemented in a subclass");
}

sub item_coord_types {
  croak("item_coord_types needs to be implemented in a subclass");
}

sub insert {
  croak("insert needs to be implemented in a subclass");
}

sub find_node_for {
  croak("find_node_for needs to be implemented in a subclass");
}

sub find_nodes_for {
  croak("find_nodes_for needs to be implemented in a subclass");
}

sub filter_items_in_rect {
  croak("filter_items_in_rect needs to be implemented in a subclass");
}

1;
__END__

=head1 NAME



( run in 1.988 second using v1.01-cache-2.11-cpan-5837b0d9d2c )