Also write documentation
[digest-highwayhash.git] / perl_math_int64.c
CommitLineData
096619f2
MG
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>
20typedef __int64 int64_t;
21typedef 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
27HV *math_int64_c_api_hash;
28int math_int64_c_api_min_version;
29int math_int64_c_api_max_version;
30
31int64_t (*math_int64_c_api_SvI64)(pTHX_ SV*);
32int (*math_int64_c_api_SvI64OK)(pTHX_ SV*);
33uint64_t (*math_int64_c_api_SvU64)(pTHX_ SV*);
34int (*math_int64_c_api_SvU64OK)(pTHX_ SV*);
35SV * (*math_int64_c_api_newSVi64)(pTHX_ int64_t);
36SV * (*math_int64_c_api_newSVu64)(pTHX_ uint64_t);
37uint64_t (*math_int64_c_api_randU64)(pTHX);
38
39int
40perl_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.015526 seconds and 4 git commands to generate.