File Coverage

blib/lib/Tie/IxHash/FixedSize.pm
Criterion Covered Total %
statement 26 26 100.0
branch 4 6 66.6
condition 1 2 50.0
subroutine 7 7 100.0
pod n/a
total 38 41 92.6


line stmt bran cond sub pod time code
1             #
2             # This file is part of Tie-IxHash-FixedSize
3             #
4             # This software is copyright (c) 2018 by Michael Schout.
5             #
6             # This is free software; you can redistribute it and/or modify it under
7             # the same terms as the Perl 5 programming language system itself.
8             #
9              
10             package Tie::IxHash::FixedSize;
11             $Tie::IxHash::FixedSize::VERSION = '1.02';
12             # ABSTRACT: Tie::IxHash with a fixed maximum size
13              
14 1     1   573 use 5.008;
  1         3  
15 1     1   4 use strict;
  1         1  
  1         14  
16 1     1   4 use warnings;
  1         1  
  1         19  
17 1     1   322 use parent 'Tie::IxHash';
  1         219  
  1         5  
18              
19             # location of size field in @$self. Tie::IxHash uses 0-3
20 1     1   3481 use constant SIZE_IX => 4;
  1         1  
  1         168  
21              
22             sub TIEHASH {
23 1     1   426 my $class = shift;
24 1 50       4 my $conf = shift if ref $_[0] eq 'HASH';
25              
26 1   50     2 $conf ||= {};
27              
28 1         5 my $self = $class->SUPER::TIEHASH(@_);
29              
30 1 50       6 if ($conf->{size}) {
31 1         2 $self->[SIZE_IX] = $conf->{size};
32             }
33              
34 1         3 return $self;
35             }
36              
37             sub STORE {
38 7     7   1780 my $self = shift;
39              
40 7         18 $self->SUPER::STORE(@_);
41              
42 7 100       73 if (my $max_size = $self->[SIZE_IX]) {
43 4         10 while ($self->Keys > $max_size) {
44 4         60 $self->Shift;
45             }
46             }
47             }
48              
49             1;
50              
51             __END__