File Coverage

perl_math_int64.c
Criterion Covered Total %
statement 37 70 52.8
branch 47 218 21.5
condition n/a
subroutine n/a
pod n/a
total 84 288 29.1


line stmt bran cond sub pod time code
1             /*
2             * perl_math_int64.c - This file is in the public domain
3             * Author: Salvador Fandino , Dave Rolsky
4             *
5             * Generated on: 2015-03-03 23:01:47
6             * Math::Int64 version: 0.49_01
7             * Module::CAPIMaker version:
8             */
9              
10             #include "EXTERN.h"
11             #include "perl.h"
12             #include "ppport.h"
13              
14             #ifdef __MINGW32__
15             #include
16             #endif
17              
18             #ifdef _MSC_VER
19             #include
20             typedef __int64 int64_t;
21             typedef unsigned __int64 uint64_t;
22             #endif
23              
24             /* you may need to add a typemap for int64_t here if it is not defined
25             by default in your C header files */
26              
27             HV *math_int64_c_api_hash;
28             int math_int64_c_api_min_version;
29             int math_int64_c_api_max_version;
30              
31             int64_t (*math_int64_c_api_SvI64)(pTHX_ SV*);
32             int (*math_int64_c_api_SvI64OK)(pTHX_ SV*);
33             uint64_t (*math_int64_c_api_SvU64)(pTHX_ SV*);
34             int (*math_int64_c_api_SvU64OK)(pTHX_ SV*);
35             SV * (*math_int64_c_api_newSVi64)(pTHX_ int64_t);
36             SV * (*math_int64_c_api_newSVu64)(pTHX_ uint64_t);
37             uint64_t (*math_int64_c_api_randU64)(pTHX);
38              
39             int
40 32           perl_math_int64_load(int required_version) {
41             dTHX;
42             SV **svp;
43 32           eval_pv("require Math::Int64", TRUE);
44 32 50         if (SvTRUE(ERRSV)) return 0;
    50          
    50          
    50          
    0          
    50          
    50          
    0          
    0          
    0          
    0          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    50          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    50          
45              
46 32           math_int64_c_api_hash = get_hv("Math::Int64::C_API", 0);
47 32 50         if (!math_int64_c_api_hash) {
48 0 0         sv_setpv(ERRSV, "Unable to load Math::Int64 C API");
49 0 0         SvSETMAGIC(ERRSV);
    0          
    0          
50 0           return 0;
51             }
52              
53 32           svp = hv_fetch(math_int64_c_api_hash, "min_version", 11, 0);
54 32 50         if (!svp) svp = hv_fetch(math_int64_c_api_hash, "version", 7, 1);
55 32 50         if (!svp || !*svp) {
    50          
56 0 0         sv_setpv(ERRSV, "Unable to retrieve C API version for Math::Int64");
57 0 0         SvSETMAGIC(ERRSV);
    0          
    0          
58 0           return 0;
59             }
60 32 50         math_int64_c_api_min_version = SvIV(*svp);
61              
62 32           svp = hv_fetch(math_int64_c_api_hash, "max_version", 11, 0);
63 32 50         if (!svp) svp = hv_fetch(math_int64_c_api_hash, "version", 7, 1);
64 32 50         if (!svp || !*svp) {
    50          
65 0 0         sv_setpv(ERRSV, "Unable to retrieve C API version for Math::Int64");
66 0 0         SvSETMAGIC(ERRSV);
    0          
    0          
67 0           return 0;
68             }
69 32 50         math_int64_c_api_max_version = SvIV(*svp);
70              
71 32 50         if ((required_version < math_int64_c_api_min_version) ||
    50          
72 32           (required_version > math_int64_c_api_max_version)) {
73 0 0         sv_setpvf(ERRSV,
74             "Math::Int64 C API version mismatch. "
75             "The installed module supports versions %d to %d but %d is required",
76             math_int64_c_api_min_version,
77             math_int64_c_api_max_version,
78             required_version);
79 0 0         SvSETMAGIC(ERRSV);
    0          
    0          
80 0           return 0;
81             }
82              
83 32           svp = hv_fetch(math_int64_c_api_hash, "SvI64", 5, 0);
84 32 50         if (!svp || !*svp) {
    50          
85 0 0         sv_setpv(ERRSV, "Unable to fetch pointer 'SvI64' C function from Math::Int64");
86 0 0         SvSETMAGIC(ERRSV);
    0          
    0          
87 0           return 0;
88             }
89 32 50         math_int64_c_api_SvI64 = INT2PTR(void *, SvIV(*svp));
90 32           svp = hv_fetch(math_int64_c_api_hash, "SvI64OK", 7, 0);
91 32 50         if (!svp || !*svp) {
    50          
92 0 0         sv_setpv(ERRSV, "Unable to fetch pointer 'SvI64OK' C function from Math::Int64");
93 0 0         SvSETMAGIC(ERRSV);
    0          
    0          
94 0           return 0;
95             }
96 32 50         math_int64_c_api_SvI64OK = INT2PTR(void *, SvIV(*svp));
97 32           svp = hv_fetch(math_int64_c_api_hash, "SvU64", 5, 0);
98 32 50         if (!svp || !*svp) {
    50          
99 0 0         sv_setpv(ERRSV, "Unable to fetch pointer 'SvU64' C function from Math::Int64");
100 0 0         SvSETMAGIC(ERRSV);
    0          
    0          
101 0           return 0;
102             }
103 32 50         math_int64_c_api_SvU64 = INT2PTR(void *, SvIV(*svp));
104 32           svp = hv_fetch(math_int64_c_api_hash, "SvU64OK", 7, 0);
105 32 50         if (!svp || !*svp) {
    50          
106 0 0         sv_setpv(ERRSV, "Unable to fetch pointer 'SvU64OK' C function from Math::Int64");
107 0 0         SvSETMAGIC(ERRSV);
    0          
    0          
108 0           return 0;
109             }
110 32 50         math_int64_c_api_SvU64OK = INT2PTR(void *, SvIV(*svp));
111 32           svp = hv_fetch(math_int64_c_api_hash, "newSVi64", 8, 0);
112 32 50         if (!svp || !*svp) {
    50          
113 0 0         sv_setpv(ERRSV, "Unable to fetch pointer 'newSVi64' C function from Math::Int64");
114 0 0         SvSETMAGIC(ERRSV);
    0          
    0          
115 0           return 0;
116             }
117 32 50         math_int64_c_api_newSVi64 = INT2PTR(void *, SvIV(*svp));
118 32           svp = hv_fetch(math_int64_c_api_hash, "newSVu64", 8, 0);
119 32 50         if (!svp || !*svp) {
    50          
120 0 0         sv_setpv(ERRSV, "Unable to fetch pointer 'newSVu64' C function from Math::Int64");
121 0 0         SvSETMAGIC(ERRSV);
    0          
    0          
122 0           return 0;
123             }
124 32 50         math_int64_c_api_newSVu64 = INT2PTR(void *, SvIV(*svp));
125 32           svp = hv_fetch(math_int64_c_api_hash, "randU64", 7, 0);
126 32 50         if (!svp || !*svp) {
    50          
127 0 0         sv_setpv(ERRSV, "Unable to fetch pointer 'randU64' C function from Math::Int64");
128 0 0         SvSETMAGIC(ERRSV);
    0          
    0          
129 0           return 0;
130             }
131 32 50         math_int64_c_api_randU64 = INT2PTR(void *, SvIV(*svp));
132              
133 32           return 1;
134             }