X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=bindings%2Fjava%2Forg%2Fsigrok%2Fcore%2Fclasses%2Fclasses.i;h=7a61bfd55d2610b7bfa5b0da333b7868fbfaaeaa;hb=865de99391194e45a0e80ea534fc5e27d5287925;hp=fb8da272419ed02d0fa85286bf780d5ca450cbf2;hpb=c7855def613435e18c1424ce87ffda8a42f1c53f;p=libsigrok.git diff --git a/bindings/java/org/sigrok/core/classes/classes.i b/bindings/java/org/sigrok/core/classes/classes.i index fb8da272..7a61bfd5 100644 --- a/bindings/java/org/sigrok/core/classes/classes.i +++ b/bindings/java/org/sigrok/core/classes/classes.i @@ -54,20 +54,12 @@ namespace Glib { %typemap(jstype) std::vector< CValue > "java.util.Vector" %typemap(javain, - pre=" $javaclassname temp$javainput = $javaclassname.convertVector($javainput);", + pre=" $javaclassname temp$javainput = new $javaclassname(); + for (JValue value : $javainput) + temp$javainput.add(value);", pgcppname="temp$javainput") std::vector< CValue > "$javaclassname.getCPtr(temp$javainput)" -%typemap(javacode) std::vector< CValue > %{ - static $javaclassname convertVector(java.util.Vector in) - { - $javaclassname out = new $javaclassname(); - for (JValue value : in) - out.add(value); - return out; - } -%} - %typemap(javaout) std::vector< CValue > { return (java.util.Vector)$jnicall; } @@ -83,7 +75,7 @@ namespace Glib { jlong value; for (auto entry : $1) { - *(CValue **) &value = new CValue(entry); + value = reinterpret_cast(new CValue(entry)); jenv->CallObjectMethod($result, Vector_add, jenv->NewObject(Value, Value_init, value, true)); } @@ -102,20 +94,12 @@ VECTOR(std::shared_ptr, HardwareDevice) "java.util.Map" %typemap(javain, - pre=" $javaclassname temp$javainput = $javaclassname.convertMap($javainput);", + pre=" $javaclassname temp$javainput = new $javaclassname(); + for (java.util.Map.Entry entry : $javainput.entrySet()) + temp$javainput.set(entry.getKey(), entry.getValue());", pgcppname="temp$javainput") std::map< CKey, CValue > "$javaclassname.getCPtr(temp$javainput)" -%typemap(javacode) std::map< CKey, CValue > %{ - static $javaclassname convertMap(java.util.Map in) - { - $javaclassname out = new $javaclassname(); - for (java.util.Map.Entry entry : in.entrySet()) - out.set(entry.getKey(), entry.getValue()); - return out; - } -%} - %typemap(javaout) std::map< CKey, CValue > { return (java.util.Map)$jnicall; } @@ -165,8 +149,7 @@ MAP_COMMON(std::string, std::shared_ptr, String, ClassName) jlong value; for (auto entry : $1) { - *(std::shared_ptr< sigrok::ClassName > **)&value = - new std::shared_ptr< sigrok::ClassName>(entry.second); + value = reinterpret_cast(new std::shared_ptr< sigrok::ClassName>(entry.second)); jenv->CallObjectMethod($result, HashMap_put, jenv->NewStringUTF(entry.first.c_str()), jenv->NewObject(Value, Value_init, value, true)); @@ -201,77 +184,49 @@ MAP_COMMON(const sigrok::ConfigKey *, Glib::VariantBase, ConfigKey, Variant) jlong value; for (auto entry : $1) { - *(const sigrok::ConfigKey **) &key = entry.first; - *(Glib::VariantBase **) &value = new Glib::VariantBase(entry.second); + key = reinterpret_cast(entry.first); + value = reinterpret_cast(new Glib::VariantBase(entry.second)); jenv->CallObjectMethod($result, HashMap_put, jenv->NewObject(ConfigKey, ConfigKey_init, key, false)); jenv->NewObject(Variant, Variant_init, value, true)); } } -/* Support Driver.scan() with no arguments. */ -%ignore sigrok::Driver::scan; +/* Specialisation for ConfigKey->set maps */ -%extend sigrok::Driver { - std::vector > scan() - { - std::map options; - return $self->scan(options); - } +MAP_COMMON(const sigrok::ConfigKey *, std::set, + ConfigKey, java.util.Set) - std::vector > scan( - std::map options) - { - return $self->scan(options); - } -} - -/* Support InputFormat.create_input() with or without options. */ -%ignore sigrok::InputFormat::create_input; - -%extend sigrok::InputFormat { - std::shared_ptr create_input() - { - return $self->create_input(); - } +%typemap(jni) std::map > "jobject" +%typemap(jtype) std::map > + "java.util.Map>" - std::shared_ptr create_input( - std::map options) - { - return $self->create_input(options); - } -} - -/* Support OutputFormat.create_output() with or without options. */ -%ignore sigrok::OutputFormat::create_output; - -%extend sigrok::OutputFormat { - std::shared_ptr create_output( - std::shared_ptr device) - { - return $self->create_output(device); - } - - std::shared_ptr create_output( - std::shared_ptr device, - std::map options) - { - return $self->create_output(device, options); - } - - std::shared_ptr create_output( - std::string filename, - std::shared_ptr device) - { - return $self->create_output(filename, device); - } - - std::shared_ptr create_output( - std::string filename, - std::shared_ptr device, - std::map options) +%typemap(out) std::map > { + jclass HashMap = jenv->FindClass("java/util/HashMap"); + jmethodID HashMap_init = jenv->GetMethodID(HashMap, "", "()V"); + jmethodID HashMap_put = jenv->GetMethodID(HashMap, "put", + "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); + jclass HashSet = jenv->FindClass("java/util/HashSet"); + jmethodID HashSet_init = jenv->GetMethodID(HashSet, "", "()V"); + jmethodID HashSet_add = jenv->GetMethodID(HashSet, "add", + "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); + jclass ConfigKey = jenv->FindClass("org/sigrok/core/classes/ConfigKey"); + jmethodID ConfigKey_init = jenv->GetMethodID(ConfigKey, "", "(JZ)V"); + jclass Capability = jenv->FindClass("org/sigrok/core/classes/Capability"); + jmethodID Capability_swigToEnum = jenv->GetStaticMethodID(Capability, + "swigToEnum", "(I)Lorg/sigrok/core/classes/Capability;"); + $result = jenv->NewObject(HashMap, HashMap_init); + jlong key; + for (auto map_entry : $1) { - return $self->create_output(filename, device, options); + key = reinterpret_cast(map_entry.first); + jobject value = jenv->NewObject(HashSet, HashSet_init); + for (auto &set_entry : map_entry.second) + jenv->CallObjectMethod(value, HashSet_add, + jenv->CallStaticObjectMethod(Capability, + Capability_swigToEnum, set_entry)); + jenv->CallObjectMethod($result, HashMap_put, + jenv->NewObject(ConfigKey, ConfigKey_init, key, false), value); } } @@ -312,7 +267,7 @@ typedef jobject jlogcallback; std::string message) { jlong loglevel_addr; - *(const sigrok::LogLevel **) &loglevel_addr = loglevel; + loglevel_addr = reinterpret_cast(loglevel); jobject loglevel_obj = env->NewObject( LogLevel, LogLevel_init, loglevel_addr, false); jobject message_obj = env->NewStringUTF(message.c_str()); @@ -358,10 +313,8 @@ typedef jobject jdatafeedcallback; { jlong device_addr; jlong packet_addr; - *(std::shared_ptr **) &device_addr = - new std::shared_ptr(device); - *(std::shared_ptr **) &packet_addr = - new std::shared_ptr(packet); + device_addr = reinterpret_cast(new std::shared_ptr(device)); + packet_addr = reinterpret_cast(new std::shared_ptr(packet)); jobject device_obj = env->NewObject( Device, Device_init, device_addr, true); jobject packet_obj = env->NewObject( @@ -375,20 +328,13 @@ typedef jobject jdatafeedcallback; %include "doc.i" -%define %attributevector(Class, Type, Name, Get) -%attributeval(sigrok::Class, Type, Name, Get); -%enddef - -%define %attributemap(Class, Type, Name, Get) -%attributeval(sigrok::Class, Type, Name, Get); -%enddef - %define %enumextras(Class) %enddef /* Ignore these for now, need fixes. */ %ignore sigrok::Context::create_analog_packet; %ignore sigrok::Context::create_meta_packet; +%ignore sigrok::Meta::config; %include "bindings/swig/classes.i"