File Coverage

blib/lib/Algorithm/SpatialIndex/Storage.pm
Criterion Covered Total %
statement 30 41 73.1
branch 4 8 50.0
condition 1 4 25.0
subroutine 7 14 50.0
pod 8 8 100.0
total 50 75 66.6


line stmt bran cond sub pod time code
1             package Algorithm::SpatialIndex::Storage;
2 9     9   157 use 5.008001;
  9         31  
  9         357  
3 9     9   49 use strict;
  9         17  
  9         950  
4 9     9   47 use warnings;
  9         26  
  9         306  
5 9     9   60 use Carp qw(croak);
  9         35  
  9         571  
6              
7             require Algorithm::SpatialIndex::Strategy;
8 9     9   74 use Scalar::Util 'weaken';
  9         16  
  9         1084  
9              
10             use Class::XSAccessor {
11 9         117 getters => [qw(
12             index
13             no_of_subnodes
14             bucket_class
15             )],
16 9     9   58 };
  9         20  
17              
18             sub new {
19 3     3 1 8 my $class = shift;
20 3         11 my %opt = @_;
21 3   50     15 my $ext_opt = $opt{opt}||{};
22              
23 3 50       26 my $self = bless {
24             bucket_class => defined($ext_opt->{bucket_class}) ? $ext_opt->{bucket_class} : 'Algorithm::SpatialIndex::Bucket',
25             %opt,
26             } => $class;
27              
28 3         34 weaken($self->{index});
29              
30 3         24 my $bucket_class = $self->bucket_class;
31 3 50       14 if (not $bucket_class =~ /::/) {
32 0         0 $bucket_class = "Algorithm::SpatialIndex::Bucket::$bucket_class";
33 0         0 $self->{bucket_class} = $bucket_class;
34             }
35              
36 3 50       180 eval "require $bucket_class; 1;" or do {
37 0   0     0 my $err = $@ || "Zombie error";
38 0         0 die "Could not load bucket implementation '$bucket_class': $err"
39             };
40              
41 3         33 my $strategy = $self->index->strategy;
42 3         33 $self->{no_of_subnodes} = $strategy->no_of_subnodes;
43              
44 3 50       42 $self->init() if $self->can('init');
45              
46 3         16 return $self;
47             }
48              
49             sub fetch_node {
50 0     0 1   croak("Not implemented in base class");
51             }
52              
53             sub store_node {
54 0     0 1   croak("Not implemented in base class");
55             }
56              
57             sub fetch_bucket {
58 0     0 1   croak("Not implemented in base class");
59             }
60              
61             sub delete_bucket {
62 0     0 1   croak("Not implemented in base class");
63             }
64              
65             sub store_bucket {
66 0     0 1   croak("Not implemented in base class");
67             }
68              
69             sub get_option {
70 0     0 1   croak("Not implemented in base class");
71             }
72              
73             sub set_option {
74 0     0 1   croak("Not implemented in base class");
75             }
76              
77             1;
78             __END__