File Coverage

blib/lib/P5NCI.pm
Criterion Covered Total %
statement 26 32 81.2
branch 1 6 16.6
condition n/a
subroutine 9 11 81.8
pod 1 4 25.0
total 37 53 69.8


line stmt bran cond sub pod time code
1             package P5NCI;
2              
3 4     4   1129 use strict;
  4         7  
  4         139  
4 4     4   19 use warnings;
  4         9  
  4         106  
5              
6 4     4   33 use vars '$VERSION';
  4         7  
  4         212  
7             $VERSION = 0.31;
8              
9 4     4   20 use Carp 'croak';
  4         13  
  4         270  
10              
11 4     4   22 use DynaLoader ();
  4         10  
  4         1797  
12             DynaLoader::bootstrap( 'P5NCI', $VERSION );
13              
14             my $nci_lib = $DynaLoader::dl_librefs[-1];
15              
16 4     4 0 1018 sub dl_load_flags { 0x01 }
17              
18             sub add_path
19             {
20 3     3 0 559 my $path = shift;
21 3         15 unshift @DynaLoader::dl_library_path, $path;
22             }
23              
24             sub load_func
25             {
26 5     5 1 463 my ($lib, $name, $signature) = @_;
27 5         12 my $thunk_name = "nci_$signature";
28 5         75 my $func = DynaLoader::dl_find_symbol( $lib, $name );
29 5         37 my $xs_thunk_name = "XS_P5NCI_$thunk_name";
30 5         251 my $thunk_pointer = DynaLoader::dl_find_symbol( $nci_lib,
31             $xs_thunk_name );
32              
33 5 50       2398 croak( "Don't understand NCI signature '$signature'\n" )
34             unless $thunk_pointer;
35              
36 0 0         DynaLoader::dl_install_xsub( $thunk_name, $thunk_pointer )
37             unless defined &$thunk_name;
38              
39 0           my $thunk_func = __PACKAGE__->can( $thunk_name );
40 0 0         return build_thunk( $thunk_func, $func ) if $thunk_func;
41             }
42              
43             sub build_thunk
44             {
45 0     0 0   my ($thunk, $func) = @_;
46 0     0     return sub { return $thunk->( $func, @_ ); };
  0            
47             }
48              
49             BEGIN
50             {
51 4     4   15 *find_lib = \&DynaLoader::dl_findfile;
52 4         182 *load_lib = \&DynaLoader::dl_load_file;
53             }
54              
55             1;
56             __END__