swig4: bump to swig 4

+ fix uint8_t conversion to jbyte
+ update JavaJNI2CJNI_Load.py to account for java inner classes

Change-Id: I9177a93611e6ef5b164586f70f20112bc8cc6f68
Reviewed-by: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
This commit is contained in:
ayounes
2020-01-22 09:25:50 -05:00
committed by Sébastien Blin
parent adf290f33e
commit c496049ff7
2 changed files with 35 additions and 26 deletions

View File

@ -49,9 +49,9 @@ def type_to_signature(itype):
return "D" return "D"
if itype == "String": if itype == "String":
return "Ljava/lang/String;" return "Ljava/lang/String;"
if itype == "Object": if itype == "Object" or itype == "java.lang.Object":
return "Ljava/lang/Object;" return "Ljava/lang/Object;"
return "Lcx/ring/daemon/%s;" % itype return "Lcx/ring/daemon/%s;" % itype.replace('.', '$')
def parse_java_file(input_stream, package, module): def parse_java_file(input_stream, package, module):
outputs = [] outputs = []

View File

@ -52,6 +52,29 @@
return $jnicall; return $jnicall;
} }
/* Convert unsigned char and thus uint8_t to jbyte */
%typemap(jni) unsigned char, const unsigned char & "jbyte"
%typemap(jtype) unsigned char, const unsigned char & "byte"
%typemap(jstype) unsigned char, const unsigned char & "byte"
%typemap(jboxtype) unsigned char, const unsigned char & "Byte"
%typemap(directorin, descriptor="B") unsigned char "$input = (jbyte) $1;"
%typemap(out) unsigned char %{ $result = (jbyte)$1; %}
%typemap(out) const unsigned char & %{ $result = (jbyte)*$1; %}
%typecheck(SWIG_TYPECHECK_INT8) /* Java byte */
jbyte,
signed char,
const signed char &,
unsigned char,
const unsigned char
""
%typecheck(SWIG_TYPECHECK_INT16) /* Java short */
jshort,
short,
const short &
""
/* Maps exceptions */ /* Maps exceptions */
%typemap(throws, throws="java.lang.IllegalArgumentException") std::invalid_argument { %typemap(throws, throws="java.lang.IllegalArgumentException") std::invalid_argument {
jclass excep = jenv->FindClass("java/lang/IllegalArgumentException"); jclass excep = jenv->FindClass("java/lang/IllegalArgumentException");
@ -79,19 +102,19 @@ namespace std {
$javaclassname n = new $javaclassname(); $javaclassname n = new $javaclassname();
for (java.util.Map.Entry<String, String> entry : in.entrySet()) { for (java.util.Map.Entry<String, String> entry : in.entrySet()) {
if (entry.getValue() != null) { if (entry.getValue() != null) {
n.set(entry.getKey(), entry.getValue()); n.put(entry.getKey(), entry.getValue());
} }
} }
return n; return n;
} }
public java.util.HashMap<String,String> toNative() { public java.util.HashMap<String,String> toNative() {
java.util.HashMap<String,String> out = new java.util.HashMap<>((int)size()); java.util.HashMap<String,String> out = new java.util.HashMap<>((int)size());
StringVect keys = keys(); for (Entry<String, String> e : entrySet())
for (String s : keys) { out.put(e.getKey(), e.getValue());
out.put(s, get(s));
}
return out; return out;
} }
public java.util.HashMap<String,String> toNativeFromUtf8() { public java.util.HashMap<String,String> toNativeFromUtf8() {
java.util.HashMap<String,String> out = new java.util.HashMap<>((int)size()); java.util.HashMap<String,String> out = new java.util.HashMap<>((int)size());
StringVect keys = keys(); StringVect keys = keys();
@ -101,6 +124,7 @@ namespace std {
return out; return out;
} }
%} %}
%extend map<string, string> { %extend map<string, string> {
std::vector<std::string> keys() const { std::vector<std::string> keys() const {
std::vector<std::string> k; std::vector<std::string> k;
@ -118,24 +142,8 @@ namespace std {
return {v.begin(), v.end()}; return {v.begin(), v.end()};
} }
} }
%template(StringMap) map<string, string>;
%typemap(javabase) vector<string> "java.util.AbstractList<String>" %template(StringMap) map<string, string>;
%typemap(javainterface) vector<string> "java.util.RandomAccess"
%extend vector<string> {
value_type set(int i, const value_type& in) throw (std::out_of_range) {
const std::string old = $self->at(i);
$self->at(i) = in;
return old;
}
bool add(const value_type& in) {
$self->push_back(in);
return true;
}
int32_t size() const {
return $self->size();
}
}
%template(StringVect) vector<string>; %template(StringVect) vector<string>;
%typemap(javacode) vector< map<string,string> > %{ %typemap(javacode) vector< map<string,string> > %{
@ -160,9 +168,10 @@ namespace std {
} catch (java.io.UnsupportedEncodingException e) { } catch (java.io.UnsupportedEncodingException e) {
dat = in.getBytes(); dat = in.getBytes();
} }
Blob n = new Blob(dat.length); Blob n = new Blob();
n.reserve(dat.length);
for (int i=0; i<dat.length; i++) { for (int i=0; i<dat.length; i++) {
n.set(i, dat[i]); n.add(dat[i]);
} }
return n; return n;
} }