]> gerrit.simantics Code Review - simantics/python.git/blob - org.simantics.pythonlink.win32.x86_64/src/sclpy.h
Several updates to Pyhthon-link behaviour.
[simantics/python.git] / org.simantics.pythonlink.win32.x86_64 / src / sclpy.h
1 #ifndef __MAIN_H__
2 #define __MAIN_H__
3
4 // Avoid use of the PyRun_StringFlags API to maintain compatibility with python3.dll
5 #define Py_LIMITED_API 0x03050000
6
7 #define PyTuple_GET_ITEM PyTuple_Get_Item
8 #define PyTuple_GET_SIZE PyTuple_Get_Size
9 #define PyTuple_SET_ITEM PyTuple_Set_Item
10
11 #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
12 #ifdef _DEBUG
13         #undef _DEBUG
14         #include <Python.h>  //header for system python import; add include paths
15         #include <numpy/arrayobject.h>
16         #define _DEBUG 1
17 #else
18         #include <Python.h>  //header for system python import; add include paths
19         #include <numpy/arrayobject.h>
20 #endif
21
22 #include <jni.h> //java connection header
23
24 /*  To use this exported function of dll, include this header
25  *  in your project.
26  */
27
28 #ifdef BUILD_DLL
29     #define DLL_EXPORT __declspec(dllexport)
30 #else
31     #define DLL_EXPORT __declspec(dllimport)
32 #endif
33
34
35 #define JAVA_MAXINT (0x7fffffff)
36
37 #define PYTHON_EXCEPTION "org/simantics/pythonlink/PythonException"
38 #define ILLEGAL_ARGUMENT_EXCEPTION "java/lang/IllegalArgumentException"
39 #define OBJECT_CLASS "java/lang/Object"
40 #define STRING_CLASS "java/lang/String"
41 #define MAP_CLASS "java/util/Map"
42 #define SET_CLASS "java/util/Set"
43
44 #define WRITER_CLASS "java/io/Writer"
45
46 #define PACKAGE_PREFIX "org/simantics/pythonlink/"
47
48 #define NDARRAY_CLASS (PACKAGE_PREFIX "NDArray")
49
50 #define VARIANT_CLASS "org/simantics/databoard/binding/mutable/Variant"
51 #define BINDINGS_CLASS "org/simantics/databoard/Bindings"
52 #define BINDING_CLASS "org/simantics/databoard/binding/Binding"
53 #define DATATYPE_CLASS "org/simantics/databoard/type/Datatype"
54
55 #define BOOLEANTYPE_CLASS "org/simantics/databoard/type/BooleanType"
56 #define BYTETYPE_CLASS "org/simantics/databoard/type/ByteType"
57 #define INTEGERTYPE_CLASS "org/simantics/databoard/type/IntegerType"
58 #define LONGTYPE_CLASS "org/simantics/databoard/type/LongType"
59 #define FLOATTYPE_CLASS "org/simantics/databoard/type/FloatType"
60 #define DOUBLETYPE_CLASS "org/simantics/databoard/type/DoubleType"
61 #define STRINGTYPE_CLASS "org/simantics/databoard/type/StringType"
62 #define RECORDTYPE_CLASS "org/simantics/databoard/type/RecordType"
63 #define ARRAYTYPE_CLASS "org/simantics/databoard/type/ArrayType"
64 #define MAPTYPE_CLASS "org/simantics/databoard/type/MapType"
65 #define OPTIONALTYPE_CLASS "org/simantics/databoard/type/OptionalType"
66 #define UNIONTYPE_CLASS "org/simantics/databoard/type/UnionType"
67 #define VARIANTTYPE_CLASS "org/simantics/databoard/type/VariantType"
68
69 #define BOOLEANBINDING_CLASS "org/simantics/databoard/binding/BooleanBinding"
70 #define BYTEBINDING_CLASS "org/simantics/databoard/binding/ByteBinding"
71 #define INTEGERBINDING_CLASS "org/simantics/databoard/binding/IntegerBinding"
72 #define LONGBINDING_CLASS "org/simantics/databoard/binding/LongBinding"
73 #define FLOATBINDING_CLASS "org/simantics/databoard/binding/FloatBinding"
74 #define DOUBLEBINDING_CLASS "org/simantics/databoard/binding/DoubleBinding"
75 #define STRINGBINDING_CLASS "org/simantics/databoard/binding/StringBinding"
76 #define RECORDBINDING_CLASS "org/simantics/databoard/binding/RecordBinding"
77 #define ARRAYBINDING_CLASS "org/simantics/databoard/binding/ArrayBinding"
78 #define MAPBINDING_CLASS "org/simantics/databoard/binding/MapBinding"
79 #define OPTIONALBINDING_CLASS "org/simantics/databoard/binding/OptionalBinding"
80 #define UNIONBINDING_CLASS "org/simantics/databoard/binding/UnionBinding"
81 #define VARIANTBINDING_CLASS "org/simantics/databoard/binding/VariantBinding"
82
83 #define COMPONENT_CLASS "org/simantics/databoard/type/Component"
84 #define TAGGEDOBJECT_CLASS "org/simantics/databoard/binding/mutable/TaggedObject"
85
86 PyObject *getPythonBooleanList(JNIEnv *env, jbooleanArray value);
87 PyObject *getPythonByteArray(JNIEnv *env, jbyteArray value);
88 PyObject *getPythonIntegerList(JNIEnv *env, jintArray value);
89 PyObject *getPythonLongList(JNIEnv *env, jlongArray value);
90 PyObject *getPythonFloatList(JNIEnv *env, jfloatArray value);
91 PyObject *getPythonDoubleList(JNIEnv *env, jdoubleArray value);
92
93 PyObject *getPythonObject(JNIEnv *env, jobject object, jobject binding);
94
95 PyObject *getPythonBooleanObject(JNIEnv *env, jobject object, jobject binding);
96 PyObject *getPythonByteObject(JNIEnv *env, jobject object, jobject binding);
97 PyObject *getPythonIntegerObject(JNIEnv *env, jobject object, jobject binding);
98 PyObject *getPythonLongObject(JNIEnv *env, jobject object, jobject binding);
99 PyObject *getPythonFloatObject(JNIEnv *env, jobject object, jobject binding);
100 PyObject *getPythonDoubleObject(JNIEnv *env, jobject object, jobject binding);
101 PyObject *getPythonRecordObject(JNIEnv *env, jobjectArray object, jobject binding);
102 PyObject *getPythonArrayObject(JNIEnv *env, jobject object, jobject binding);
103 PyObject *getPythonMapObject(JNIEnv *env, jobject object, jobject binding);
104 PyObject *getPythonOptionalObject(JNIEnv *env, jobject object, jobject binding);
105 PyObject *getPythonUnionObject(JNIEnv *env, jobject object, jobject binding);
106 PyObject *getPythonVariantObject(JNIEnv *env, jobject object, jobject binding);
107
108 void setPythonVariable(PyObject *module, PyObject *name, PyObject *value);
109
110 jobject pythonBoolAsBooleanObject(JNIEnv *env, PyObject *value);
111 jobject pythonLongAsLongObject(JNIEnv *env, PyObject *value);
112 jobject pythonFloatAsDoubleObject(JNIEnv *env, PyObject *value);
113 jobject pythonByteArrayAsByteArray(JNIEnv *env, PyObject *value);
114 jstring pythonStringAsJavaString(JNIEnv *env, PyObject *string);
115 jobjectArray pythonSequenceAsObjectArray(JNIEnv *env, PyObject *seq);
116 jobjectArray pythonSequenceAsStringArray(JNIEnv *env, PyObject *list);
117 jintArray pythonSequenceAsIntegerArray(JNIEnv *env, PyObject *list);
118 jlongArray pythonSequenceAsLongArray(JNIEnv *env, PyObject *list);
119 jdoubleArray pythonSequenceAsDoubleArray(JNIEnv *env, PyObject *list);
120 jobject pythonDictionaryAsMap(JNIEnv *env, PyObject *dict);
121 jobject pythonArrayAsNDArray(JNIEnv *env, PyArrayObject *array);
122 jobject pythonObjectAsObject(JNIEnv *env, PyObject *value);
123
124 #endif // __MAIN_H__