File Coverage

blib/lib/FFI/Me.pm
Criterion Covered Total %
statement 31 31 100.0
branch 8 8 100.0
condition 4 6 66.6
subroutine 8 8 100.0
pod 1 1 100.0
total 52 54 96.3


line stmt bran cond sub pod time code
1             package FFI::Me;
2              
3 2     2   65187 use strict;
  2         6  
  2         96  
4 2     2   12 use warnings;
  2         4  
  2         68  
5 2     2   1248 use FFI::Raw ();
  2         17862  
  2         118  
6              
7             $FFI::Me::VERSION = '0.01';
8              
9             sub import {
10 3     3   28 my $caller = caller();
11 2     2   21 no strict 'refs'; ## no critic
  2         2  
  2         324  
12 3         6 *{ $caller . '::ffi' } = \&ffi;
  3         16  
13 3         2119 return;
14             }
15              
16             sub ffi {
17 3     3 1 621 my ( $name, %args ) = @_;
18              
19 3 100 66     21 $args{sym} = $name if !exists $args{sym} || !defined $args{sym};
20 3 100 66     24 $args{rv} = ffi::void() if !exists $args{rv} || !defined $args{rv};
21 3 100       10 $args{arg} = [] if !exists $args{arg};
22              
23 3         12 my $code = FFI::Raw->new( $args{lib}, $args{sym}, $args{rv}, @{ $args{arg} } );
  3         74  
24              
25 2         6 my $caller = caller();
26 2     2   13 no strict 'refs'; ## no critic
  2         3  
  2         504  
27 2 100   2   17 *{ $caller . '::' . $name } = sub { shift if $args{method}; return $code->call(@_) };
  2         11  
  2         799  
  2         19  
28              
29 2         5 return;
30             }
31              
32             *ffi::void = \&FFI::Raw::void;
33             *ffi::int = \&FFI::Raw::int;
34             *ffi::uint = \&FFI::Raw::uint;
35             *ffi::short = \&FFI::Raw::short;
36             *ffi::ushort = \&FFI::Raw::ushort;
37             *ffi::long = \&FFI::Raw::long;
38             *ffi::ulong = \&FFI::Raw::ulong;
39             *ffi::int64 = \&FFI::Raw::int64;
40             *ffi::uint64 = \&FFI::Raw::uint64;
41             *ffi::char = \&FFI::Raw::char;
42             *ffi::uchar = \&FFI::Raw::uchar;
43             *ffi::float = \&FFI::Raw::float;
44             *ffi::double = \&FFI::Raw::double;
45             *ffi::str = \&FFI::Raw::str;
46             *ffi::ptr = \&FFI::Raw::ptr;
47              
48             1;
49              
50             __END__