File Coverage

blib/lib/Ref/Store/XS.pm
Criterion Covered Total %
statement 54 70 77.1
branch 2 6 33.3
condition n/a
subroutine 20 28 71.4
pod 0 4 0.0
total 76 108 70.3


line stmt bran cond sub pod time code
1             package Ref::Store::XS::Key;
2 1     1   2095 use strict;
  1         2  
  1         37  
3 1     1   6 use warnings;
  1         1  
  1         30  
4 1     1   5 use Ref::Store::Common;
  1         2  
  1         189  
5 1     1   729 use Ref::Store::XS::cfunc;
  1         4  
  1         396  
6              
7             *new = \&HRXSK_new;
8             *kstring = \&HRXSK_kstring;
9             *prefix_len = \&HRXSK_prefix_len;
10              
11 0     0   0 sub weaken_encapsulated { }
12 19     19   49 sub unlink_value { }
13 0     0   0 sub link_value { }
14 0     0   0 sub ithread_predup {}
15 1     1   3 sub ukey {}
16              
17             *ithread_postdup = \&HRXSK_ithread_postdup;
18              
19             package Ref::Store::XS::Key::Encapsulating;
20 1     1   9 use strict;
  1         3  
  1         32  
21 1     1   6 use warnings;
  1         2  
  1         36  
22 1     1   6 use Ref::Store::XS::cfunc;
  1         3  
  1         1114  
23              
24 14     14   34 sub unlink_value { }
25              
26             *new = \&HRXSK_encap_new;
27             *weaken_encapsulated = \&HRXSK_encap_weaken;
28              
29             #NOOP:
30             #*link_value = \&HRXSK_encap_link_value;
31              
32             *kstring = \&HRXSK_encap_kstring;
33             *prefix_len = \&HRXSK_prefix_len;
34              
35             *ithread_predup = \&HRXSK_encap_ithread_predup;
36             *ithread_postdup = \&HRXSK_encap_ithread_postdup;
37              
38             *ukey = \&HRXSK_encap_getencap;
39              
40             sub dump {
41 0     0   0 my ($self,$hrd) = @_;
42 0         0 $hrd->iprint("ENCAP: %s", $hrd->fmt_ptr($self->HRXSK_encap_getencap));
43             }
44              
45              
46              
47             package Ref::Store::XS::Attribute;
48 1     1   7 use strict;
  1         2  
  1         31  
49 1     1   12 use warnings;
  1         2  
  1         39  
50 1     1   6 use Ref::Store::XS::cfunc;
  1         2  
  1         1370  
51              
52             *unlink_value = \&HRXSATTR_unlink_value;
53             *get_hash = \&HRXSATTR_get_hash;
54             *kstring = \&HRXSATTR_kstring;
55             *prefix_len = \&HRXSATTR_prefix_len;
56             *ithread_predup = \&HRXSATTR_ithread_predup;
57             *ithread_postdup= \&HRXSATTR_ithread_postdup;
58              
59 0     0   0 sub ukey { }
60              
61             package Ref::Store::XS::Attribute::Encapsulating;
62 1     1   8 use Ref::Store::XS::cfunc;
  1         2  
  1         268  
63             our @ISA = qw(Ref::Store::XS::Attribute);
64             *ukey = \&HRXSATTR_encap_ukey;
65              
66             package Ref::Store::XS;
67 1     1   5 use strict;
  1         2  
  1         58  
68 1     1   12 use warnings;
  1         2  
  1         34  
69 1     1   5 use base qw(Ref::Store);
  1         2  
  1         242  
70 1     1   7 use Ref::Store::XS::cfunc;
  1         2  
  1         198  
71 1     1   6 use Log::Fu;
  1         2  
  1         10  
72              
73             #These two lines completely override the perl store/fetch code and utilize
74             #pure C! - double the speed
75              
76             *table_init = \&HRA_table_init;
77              
78             *store = *store_sk = \&HRA_store_sk;
79             *fetch = *fetch_sk = \&HRA_fetch_sk;
80             *store_kt = \&HRA_store_kt;
81              
82             *store_a = \&HRA_store_a;
83             *fetch_a = \&HRA_fetch_a;
84             *dissoc_a = \&HRA_dissoc_a;
85             *unlink_a = \&HRA_unlink_a;
86             *attr_get = \&HRA_attr_get;
87             *ithread_store_lookup_info = \&HRA_ithread_store_lookup_info;
88              
89              
90             sub new_key {
91 0     0 0 0 my ($self,$scalar) = @_;
92 0 0       0 if(!ref $scalar) {
93 0         0 return HRXSK_new('Ref::Store::XS::Key',
94             $scalar, $self->forward, $self->scalar_lookup);
95             } else {
96 0         0 return HRXSK_encap_new('Ref::Store::XS::Key::Encapsulating',
97             $scalar, $self, $self->forward,
98             $self->scalar_lookup);
99             }
100             }
101              
102             sub dref_add_ptr {
103 0     0 0 0 my ($self,$value,$hashref) = @_;
104 0         0 HR_PL_add_action_ptr($value, $hashref);
105             }
106              
107             sub dref_add_str {
108 0     0 0 0 my ($self,$value,$hashref,$str) = @_;
109 0         0 HR_PL_add_action_str($value,$hashref,$str);
110             }
111              
112             sub dref_del_ptr {
113 29     29 0 52 my ($self,$value,$hashref,$arg) = @_;
114 29 50       87 if(@_ == 3) {
    50          
115 0         0 HR_PL_del_action_container($value, $hashref);
116             } elsif(@_ == 4) {
117 29         148 HR_PL_del_action_ptr($value, $hashref, $arg);
118             } else {
119 0           die("Need either 2 or 3 arguments, got ", (scalar @_) - 1);
120             }
121             }
122              
123              
124             1;
125              
126             __END__