File Coverage

blib/lib/DWH_File/Registry.pm
Criterion Covered Total %
statement 35 35 100.0
branch 4 4 100.0
condition 3 5 60.0
subroutine 9 9 100.0
pod 0 6 0.0
total 51 59 86.4


line stmt bran cond sub pod time code
1             package DWH_File::Registry;
2              
3 9     9   51 use warnings;
  9         17  
  9         395  
4 9     9   49 use strict;
  9         18  
  9         358  
5 9     9   46 use vars qw( @ISA $VERSION );
  9         15  
  9         6807  
6              
7             @ISA = qw( );
8             $VERSION = 0.01;
9              
10             sub new {
11 26     26 0 196 my ( $this, $kernel, $property ) = @_;
12 26   33     397 my $class = ref $this || $this;
13 26         272 my $id = $kernel->fetch_property( $property . ':id' );
14 26 100       116 unless ( defined $id ) {
15 8         58 $id = $kernel->next_id;
16 8         88 $kernel->store_property( $property . ':id', $id );
17             }
18 26         640 my $self = { id => $id,
19             id_mill => DWH_File::ID_Mill->new( $kernel,
20             $property . ':id_mill' ),
21             kernel => $kernel,
22             };
23 26   100     218 $self->{ id_mill }{ current } ||= 0;
24 26         129 bless $self, $class;
25 26         119 return $self;
26             }
27              
28             sub save {
29 26     26 0 165 $_[ 0 ]->{ id_mill }->save;
30             }
31              
32             sub fetch {
33 68     68 0 456 $_[ 0 ]->{ kernel }->fetch( pack "LaS", $_[ 0 ]->{ id }, '>', $_[ 1 ] );
34             }
35              
36             sub fetch_key_pack {
37 58     58 0 985 $_[ 0 ]->{ kernel }->fetch( pack "Laa*", $_[ 0 ]->{ id }, '<', $_[ 1 ] );
38             }
39              
40             sub store {
41 22     22 0 45 my ( $self, $subscript, $value ) = @_;
42 22         46 my $id_p = pack "L", $self->{ id };
43 22         91 $self->{ kernel }->store( "$id_p>$subscript", $value );
44 22         156 $self->{ kernel }->store( "$id_p<$value", $subscript );
45             }
46              
47             sub get_key {
48 58     58 0 111 my ( $self, $value ) = @_;
49 58         173 my $key_p = $self->fetch_key_pack( $value );
50 58         81 my $key;
51 58 100       112 if ( defined $key_p ) { $key = unpack "S", $key_p }
  36         83  
52             else {
53 22         122 $key = $self->{ id_mill }->next;
54 22         62 $key_p = pack "S", $key;
55 22         96 $self->store( $key_p, $value );
56             }
57 58         361 return $key;
58             }
59              
60             1;
61              
62             __END__