summaryrefslogtreecommitdiffstats
path: root/src/bindings/swig
diff options
context:
space:
mode:
authorStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2014-07-05 22:53:49 (GMT)
committerStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2014-07-05 22:53:49 (GMT)
commitf50dabccaae935457ea6f09a349d54855d60e7d5 (patch)
tree133f714be2b946b240d34c7cf3e6c1f5b5963f30 /src/bindings/swig
parentdec6466d01757ab8e93d867e5a6d214bcafaf428 (diff)
downloaduscxml-f50dabccaae935457ea6f09a349d54855d60e7d5.zip
uscxml-f50dabccaae935457ea6f09a349d54855d60e7d5.tar.gz
uscxml-f50dabccaae935457ea6f09a349d54855d60e7d5.tar.bz2
Binary data in bindings
Diffstat (limited to 'src/bindings/swig')
-rw-r--r--src/bindings/swig/csharp/uscxml.i35
-rw-r--r--src/bindings/swig/java/uscxml.i26
-rw-r--r--src/bindings/swig/uscxml_ignores.i8
3 files changed, 69 insertions, 0 deletions
diff --git a/src/bindings/swig/csharp/uscxml.i b/src/bindings/swig/csharp/uscxml.i
index 2a1ac07..bd8c669 100644
--- a/src/bindings/swig/csharp/uscxml.i
+++ b/src/bindings/swig/csharp/uscxml.i
@@ -157,6 +157,41 @@ WRAP_TO_STRING(uscxml::InvokeRequest);
// Beautify important classes
//***********************************************
+
+// byte[] signature for Blob get/setData
+// see http://permalink.gmane.org/gmane.comp.programming.swig/5804
+
+%csmethodmodifiers uscxml::Blob::Blob(const char* data, size_t size, const std::string& mimeType) "private";
+%typemap(cscode) uscxml::Blob %{
+ public Blob(byte[] data, string mimeType) : this(uscxmlNativeCSharpPINVOKE.new_Blob(data, (uint)data.Length, mimeType), true) {
+ if (uscxmlNativeCSharpPINVOKE.SWIGPendingException.Pending) throw uscxmlNativeCSharpPINVOKE.SWIGPendingException.Retrieve();
+ }
+%}
+
+%typemap(imtype, out="System.IntPtr") const char *data "byte[]"
+%typemap(cstype) const char *data "byte[]"
+%typemap(in) const char *data %{ $1 = ($1_ltype)$input; %}
+%typemap(csin) const char *data "$csinput"
+
+%typemap(imtype, out="System.IntPtr") char* getData "byte[]"
+%typemap(cstype) char* getData "byte[]"
+
+%typemap(csout) char* getData %{
+ {
+ byte[] ret = new byte[this.getSize()];
+ System.IntPtr data = $imcall;
+ System.Runtime.InteropServices.Marshal.Copy(data, ret, 0, (int)this.getSize());
+ return ret;
+ }
+%}
+
+// make sure we do not get the default with SWIG_csharp_string_callback
+%typemap(out) char* getData {
+ $result = (char *)result;
+}
+
+
+
%csmethodmodifiers uscxml::Event::getParamMap() "private";
%csmethodmodifiers uscxml::Event::getParamMapKeys() "private";
%csmethodmodifiers uscxml::Event::setParamMap(const std::map<std::string, std::list<uscxml::Data> >&) "private";
diff --git a/src/bindings/swig/java/uscxml.i b/src/bindings/swig/java/uscxml.i
index ee95eb0..9610e77 100644
--- a/src/bindings/swig/java/uscxml.i
+++ b/src/bindings/swig/java/uscxml.i
@@ -112,6 +112,7 @@ WRAP_TO_STRING(uscxml::InvokeRequest);
%include "../uscxml_ignores.i"
+#if 0
// see http://swig.org/Doc2.0/Java.html#Java_date_marshalling
%define BEAUTIFY_NATIVE( MATCH, WRAPPER, NATIVE )
@@ -164,6 +165,24 @@ BEAUTIFY_NATIVE(uscxml::Event, Event, EventNative);
BEAUTIFY_NATIVE(uscxml::SendRequest, SendRequest, SendRequestNative);
BEAUTIFY_NATIVE(uscxml::InvokeRequest, InvokeRequest, InvokeRequestNative);
*/
+#endif
+
+// bytearray for Blob::data
+// see: http://stackoverflow.com/questions/9934059/swig-technique-to-wrap-unsigned-binary-data
+
+%apply (char *STRING, size_t LENGTH) { (const char* data, size_t size) };
+
+%typemap(jni) char* getData "jbyteArray"
+%typemap(jtype) char* getData "byte[]"
+%typemap(jstype) char* getData "byte[]"
+%typemap(javaout) char* getData {
+ return $jnicall;
+}
+
+%typemap(out) char* getData {
+ $result = JCALL1(NewByteArray, jenv, ((uscxml::Blob const *)arg1)->getSize());
+ JCALL4(SetByteArrayRegion, jenv, $result, 0, ((uscxml::Blob const *)arg1)->getSize(), (jbyte *)$1);
+}
//***********************************************
@@ -180,6 +199,9 @@ BEAUTIFY_NATIVE(uscxml::InvokeRequest, InvokeRequest, InvokeRequestNative);
%javamethodmodifiers uscxml::Interpreter::getIOProcessors() "private";
%javamethodmodifiers uscxml::Data::getCompoundKeys() "private";
+%javamethodmodifiers uscxml::Blob::setData(const char* data, size_t length) "private";
+%javamethodmodifiers uscxml::Blob::setMimeType(const std::string& mimeType) "private";
+
%include "../uscxml_beautify.i"
@@ -231,6 +253,10 @@ import java.util.LinkedList;
%}
%typemap(javacode) uscxml::Data %{
+ public Data(byte[] data, String mimeType) {
+
+ }
+
public Data(Map<String, Data> compound) {
this(uscxmlNativeJavaJNI.new_Data__SWIG_0(), true);
setCompound(compound);
diff --git a/src/bindings/swig/uscxml_ignores.i b/src/bindings/swig/uscxml_ignores.i
index d54dae2..5e99416 100644
--- a/src/bindings/swig/uscxml_ignores.i
+++ b/src/bindings/swig/uscxml_ignores.i
@@ -189,6 +189,14 @@
%ignore uscxml::Data::toDocument;
%ignore uscxml::Data::Data(const Arabica::DOM::Node<std::string>&);
+%ignore uscxml::Data::Data(const char* data, size_t size, const std::string& mimeType, bool adopt);
+%ignore uscxml::Data::Data(const char* data, size_t size, const std::string& mimeType);
+
+// Blob
+
+%ignore uscxml::Blob::Blob(size_t size);
+%ignore uscxml::Blob::Blob(const char* data, size_t size, const std::string& mimeType, bool adopt);
+
%ignore operator!=;
%ignore operator<;