Also write documentation
[digest-highwayhash.git] / perl_math_int64.c
1 /*
2 * perl_math_int64.c - This file is in the public domain
3 * Author: "Salvador Fandino <sfandino@yahoo.com>, Dave Rolsky <autarch@urth.org>"
4 *
5 * Generated on: 2016-01-04 10:07:18
6 * Math::Int64 version: 0.54
7 * Module::CAPIMaker version:
8 */
9
10 #include "EXTERN.h"
11 #include "perl.h"
12 #include "ppport.h"
13
14 #ifdef __MINGW32__
15 #include <stdint.h>
16 #endif
17
18 #ifdef _MSC_VER
19 #include <stdlib.h>
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 perl_math_int64_load(int required_version) {
41 dTHX;
42 SV **svp;
43 eval_pv("require Math::Int64", TRUE);
44 if (SvTRUE(ERRSV)) return 0;
45
46 math_int64_c_api_hash = get_hv("Math::Int64::C_API", 0);
47 if (!math_int64_c_api_hash) {
48 sv_setpv(ERRSV, "Unable to load Math::Int64 C API");
49 SvSETMAGIC(ERRSV);
50 return 0;
51 }
52
53 svp = hv_fetch(math_int64_c_api_hash, "min_version", 11, 0);
54 if (!svp) svp = hv_fetch(math_int64_c_api_hash, "version", 7, 1);
55 if (!svp || !*svp) {
56 sv_setpv(ERRSV, "Unable to retrieve C API version for Math::Int64");
57 SvSETMAGIC(ERRSV);
58 return 0;
59 }
60 math_int64_c_api_min_version = SvIV(*svp);
61
62 svp = hv_fetch(math_int64_c_api_hash, "max_version", 11, 0);
63 if (!svp) svp = hv_fetch(math_int64_c_api_hash, "version", 7, 1);
64 if (!svp || !*svp) {
65 sv_setpv(ERRSV, "Unable to retrieve C API version for Math::Int64");
66 SvSETMAGIC(ERRSV);
67 return 0;
68 }
69 math_int64_c_api_max_version = SvIV(*svp);
70
71 if ((required_version < math_int64_c_api_min_version) ||
72 (required_version > math_int64_c_api_max_version)) {
73 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 SvSETMAGIC(ERRSV);
80 return 0;
81 }
82
83 svp = hv_fetch(math_int64_c_api_hash, "SvI64", 5, 0);
84 if (!svp || !*svp) {
85 sv_setpv(ERRSV, "Unable to fetch pointer 'SvI64' C function from Math::Int64");
86 SvSETMAGIC(ERRSV);
87 return 0;
88 }
89 math_int64_c_api_SvI64 = INT2PTR(void *, SvIV(*svp));
90 svp = hv_fetch(math_int64_c_api_hash, "SvI64OK", 7, 0);
91 if (!svp || !*svp) {
92 sv_setpv(ERRSV, "Unable to fetch pointer 'SvI64OK' C function from Math::Int64");
93 SvSETMAGIC(ERRSV);
94 return 0;
95 }
96 math_int64_c_api_SvI64OK = INT2PTR(void *, SvIV(*svp));
97 svp = hv_fetch(math_int64_c_api_hash, "SvU64", 5, 0);
98 if (!svp || !*svp) {
99 sv_setpv(ERRSV, "Unable to fetch pointer 'SvU64' C function from Math::Int64");
100 SvSETMAGIC(ERRSV);
101 return 0;
102 }
103 math_int64_c_api_SvU64 = INT2PTR(void *, SvIV(*svp));
104 svp = hv_fetch(math_int64_c_api_hash, "SvU64OK", 7, 0);
105 if (!svp || !*svp) {
106 sv_setpv(ERRSV, "Unable to fetch pointer 'SvU64OK' C function from Math::Int64");
107 SvSETMAGIC(ERRSV);
108 return 0;
109 }
110 math_int64_c_api_SvU64OK = INT2PTR(void *, SvIV(*svp));
111 svp = hv_fetch(math_int64_c_api_hash, "newSVi64", 8, 0);
112 if (!svp || !*svp) {
113 sv_setpv(ERRSV, "Unable to fetch pointer 'newSVi64' C function from Math::Int64");
114 SvSETMAGIC(ERRSV);
115 return 0;
116 }
117 math_int64_c_api_newSVi64 = INT2PTR(void *, SvIV(*svp));
118 svp = hv_fetch(math_int64_c_api_hash, "newSVu64", 8, 0);
119 if (!svp || !*svp) {
120 sv_setpv(ERRSV, "Unable to fetch pointer 'newSVu64' C function from Math::Int64");
121 SvSETMAGIC(ERRSV);
122 return 0;
123 }
124 math_int64_c_api_newSVu64 = INT2PTR(void *, SvIV(*svp));
125 svp = hv_fetch(math_int64_c_api_hash, "randU64", 7, 0);
126 if (!svp || !*svp) {
127 sv_setpv(ERRSV, "Unable to fetch pointer 'randU64' C function from Math::Int64");
128 SvSETMAGIC(ERRSV);
129 return 0;
130 }
131 math_int64_c_api_randU64 = INT2PTR(void *, SvIV(*svp));
132
133 return 1;
134 }
This page took 0.026611 seconds and 4 git commands to generate.