-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathJavaTypes.i
More file actions
150 lines (127 loc) · 4.87 KB
/
JavaTypes.i
File metadata and controls
150 lines (127 loc) · 4.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/* *********************************************************************
* This Original Work is copyright of 51 Degrees Mobile Experts Limited.
* Copyright 2026 51 Degrees Mobile Experts Limited, Davidson House,
* Forbury Square, Reading, Berkshire, United Kingdom RG1 3EU.
*
* This Original Work is licensed under the European Union Public Licence
* (EUPL) v.1.2 and is subject to its terms as set out below.
*
* If a copy of the EUPL was not distributed with this file, You can obtain
* one at https://opensource.org/licenses/EUPL-1.2.
*
* The 'Compatible Licences' set out in the Appendix to the EUPL (as may be
* amended by the European Commission) shall be deemed incompatible for
* the purposes of the Work and the provisions of the compatibility
* clause in Article 5 of the EUPL shall not apply.
*
* If using the Work as, or as part of, a network application, by
* including the attribution notice(s) required under Article 5 of the EUPL
* in the end user terms of the application under an appropriate heading,
* such notice(s) shall fulfill the requirements of that article.
* ********************************************************************* */
%include std_vector.i
%include std_string.i
%include various.i
%define JAVA_UBYTE_ARR_TYPEMAP_BODY
long arrSize = 0;
if ($input != NULL) {
// Get the number of bytes in the byte array.
arrSize = jenv->GetArrayLength($input);
// Allocate memory for the destination byte array used internally by
// the data set. This memory is required for the lifetime of the data
// set.
$1 = (unsigned char*)malloc(arrSize);
if ($1 == NULL) {
SWIG_JavaThrowException(
jenv,
SWIG_JavaRuntimeException,
"Failed to allocate memory to copy the input byte array.");
return $null;
}
// Attempt to get a pointer to the data within the jbyteArray.
jbyte* data = jenv->GetByteArrayElements($input, NULL);
if (data == NULL) {
SWIG_JavaThrowException(
jenv,
SWIG_JavaRuntimeException,
"Failed to obtain pointer to the input byte array.");
return $null;
}
// Copy the input byte array to the destination and release the
// reference to source pointer.
memcpy($1, data, arrSize);
jenv->ReleaseByteArrayElements($input, data, JNI_ABORT);
}
else {
// Let the underlying C implementation throw the null pointer exception.
$1 = (unsigned char*)NULL;
}
%enddef
%typemap(jni) (unsigned char *UCHAR) "jbyteArray"
%typemap(jtype) (unsigned char *UCHAR) "byte[]"
%typemap(jstype) (unsigned char *UCHAR) "byte[]"
%typemap(in) (unsigned char *UCHAR) {
JAVA_UBYTE_ARR_TYPEMAP_BODY
}
%typemap(javain) (unsigned char *UCHAR) "$javainput"
/* Prevent default freearg typemap from being used */
%typemap(freearg) (unsigned char *UCHAR) ""
%apply (unsigned char *UCHAR) { (unsigned char data[]) };
%apply (unsigned char *UCHAR) { (unsigned char ipAddress[]) };
%define JAVA_UBYTE_ARR_DECL(CTYPE, CTYPEVAR)
%typemap(jni) (unsigned char *UCHAR, CTYPE CTYPEVAR) "jbyteArray"
%typemap(jtype) (unsigned char *UCHAR, CTYPE CTYPEVAR) "byte[]"
%typemap(jstype) (unsigned char *UCHAR, CTYPE CTYPEVAR) "byte[]"
%typemap(in) (unsigned char *UCHAR, CTYPE CTYPEVAR) {
JAVA_UBYTE_ARR_TYPEMAP_BODY
$2 = arrSize;
}
%typemap(javain) (unsigned char *UCHAR, CTYPE CTYPEVAR) "$javainput"
/* Prevent default freearg typemap from being used */
%typemap(freearg) (unsigned char *UCHAR, CTYPE CTYPEVAR) ""
%apply (unsigned char *UCHAR, CTYPE CTYPEVAR) { (unsigned char data[], CTYPE length) };
%apply (unsigned char *UCHAR, CTYPE CTYPEVAR) { (unsigned char ipAddress[], CTYPE length) };
%enddef
JAVA_UBYTE_ARR_DECL(long, LONG)
JAVA_UBYTE_ARR_DECL(uint32_t, UINT32)
/* Use byte correctly where methods would otherwise not take a proper type. */
%typemap(jni) (unsigned char UCHAR) "int"
%typemap(jtype) (unsigned char UCHAR) "int"
%typemap(jstype) (unsigned char UCHAR) "byte"
%typemap(javain) (unsigned char UCHAR) "(int)$javainput"
%typemap(in) (unsigned char UCHAR) {
$1 = (byte)$input;
}
%typemap(out) (unsigned char UCHAR) "$result = (int)$1;"
%typemap(javaout) (unsigned char UCHAR) {
return (byte)$jnicall;
}
/* Prevent default freearg typemap from being used */
%typemap(freearg) (unsigned char UCHAR) ""
%apply (unsigned char UCHAR) { (byte) };
%define autocloseable(name)
%typemap(javainterfaces) name "AutoCloseable";
%typemap(javacode) name %{
@Override
public void close() {
this.delete();
}
%}
%enddef
%define nofinalize(name)
%typemap(javafinalize) name %{%}
%enddef
autocloseable(EvidenceBase);
autocloseable(Value);
autocloseable(std::map);
autocloseable(std::vector);
%extend std::vector {
%typemap(javainterfaces) std::vector "AutoCloseable, java.util.RandomAccess";
};
autocloseable(ResultsBase);
autocloseable(EngineBase);
nofinalize(ResultsBase)
nofinalize(EvidenceBase);
nofinalize(Value);
nofinalize(std::map);
nofinalize(std::vector);