packages feed

java-bridge-0.9: src/ffijni.h

#ifndef FFIJNI_H_
#define FFIJNI_H_

#include "jni.h"
#include <stdint.h>
#include <stdbool.h>

#if defined(FFIJNI_MACOSX) && defined(FFIJNI_OSX_GUI)
#include <objc/objc-runtime.h>
#endif


struct vm {
    JNIEnv* env;
    JavaVM* vm;
    bool attached;
};
typedef struct vm vm_t;

typedef jobject (*WrappedFun) (vm_t*, jobject, jobject, jobjectArray);

/* This is taken from HsFFI.h */
typedef void (*HsFunPtr)(void);

extern void freeFunPtr(WrappedFun);

void
setLibjvmPath (char*);

char*
getLibjvmPath ();

char*
getCompiledLibjvmPath();

jboolean
registerCallbacks (vm_t*, jclass);

vm_t*
createVM ();

vm_t*
createVM2 (unsigned int argc, char** argv);

void
destroyVM (vm_t*);

void
persistVM (vm_t*);

jclass
findClass (vm_t*, const char*);

jobject
newObject (vm_t*, jclass, jmethodID, jvalue*);

jmethodID
getConstructorID (vm_t*, jclass, const char*);

jmethodID
getStaticMethodID (vm_t*, jclass, const char*, const char*);

jmethodID
getMethodID (vm_t*, jclass, const char*, const char*);

jfieldID
getStaticFieldID (vm_t*, jclass, const char*, const char*);

jfieldID
getFieldID (vm_t*, jclass, const char*, const char*);

void
callStaticVoidMethod (vm_t*, jclass, jmethodID, jvalue*);

jint
callStaticIntMethod (vm_t*, jclass, jmethodID, jvalue*);

jlong
callStaticLongMethod (vm_t*, jclass, jmethodID, jvalue*);

jshort
callStaticShortMethod (vm_t*, jclass, jmethodID, jvalue*);

jbyte
callStaticByteMethod (vm_t*, jclass, jmethodID, jvalue*);

jfloat
callStaticFloatMethod (vm_t*, jclass, jmethodID, jvalue*);

jdouble
callStaticDoubleMethod (vm_t*, jclass, jmethodID, jvalue*);

jboolean
callStaticBooleanMethod (vm_t*, jclass, jmethodID, jvalue*);

jchar
callStaticCharMethod (vm_t*, jclass, jmethodID, jvalue*);

jobject
callStaticObjectMethod (vm_t*, jclass, jmethodID, jvalue*);

const char*
callStaticStringMethod (vm_t*, jclass, jmethodID, jvalue*);

void
callVoidMethod (vm_t*, jobject, jmethodID, jvalue*);

jlong
callLongMethod (vm_t*, jobject, jmethodID, jvalue*);

jint
callIntMethod (vm_t*, jobject, jmethodID, jvalue*);

jshort
callShortMethod (vm_t*, jobject, jmethodID, jvalue*);

jbyte
callByteMethod (vm_t*, jobject, jmethodID, jvalue*);

jfloat
callFloatMethod (vm_t*, jobject, jmethodID, jvalue*);

jdouble
callDoubleMethod (vm_t*, jobject, jmethodID, jvalue*);

jboolean
callBooleanMethod (vm_t*, jobject, jmethodID, jvalue*);

jchar
callCharMethod (vm_t*, jobject, jmethodID, jvalue*);

jobject
callObjectMethod (vm_t*, jobject, jmethodID, jvalue*);

const char*
callStringMethod(vm_t*, jobject, jmethodID, jvalue*);

jlong
getStaticLongField (vm_t*, jclass, jfieldID);

jint
getStaticIntField (vm_t*, jclass, jfieldID);

jshort
getStaticShortField (vm_t*, jclass, jfieldID);

jbyte
getStaticByteField (vm_t*, jclass, jfieldID);

jfloat
getStaticFloatField (vm_t*, jclass, jfieldID);

jdouble
getStaticDoubleField (vm_t*, jclass, jfieldID);

jboolean
getStaticBooleanField (vm_t*, jclass, jfieldID);

jchar
getStaticCharField (vm_t*, jclass, jfieldID);

jobject
getStaticObjectField (vm_t*, jclass, jfieldID);

const char*
getStaticStringField (vm_t*, jclass, jfieldID);

jlong
getLongField (vm_t*, jobject, jfieldID);

jint
getIntField (vm_t*, jobject, jfieldID);

jshort
getShortField (vm_t*, jobject, jfieldID);

jbyte
getByteField (vm_t*, jobject, jfieldID);

jfloat
getFloatField (vm_t*, jobject, jfieldID);

jdouble
getDoubleField (vm_t*, jobject, jfieldID);

jboolean
getBooleanField (vm_t*, jobject, jfieldID);

jchar
getCharField (vm_t*, jobject, jfieldID);

jobject
getObjectField (vm_t*, jobject, jfieldID);

const char*
getStringField (vm_t*, jobject, jfieldID);

void
setStaticLongField (vm_t*, jclass, jfieldID, jlong);

void
setStaticIntField (vm_t*, jclass, jfieldID, jint);

void
setStaticShortField (vm_t*, jclass, jfieldID, jshort);

void
setStaticByteField (vm_t*, jclass, jfieldID, jbyte);

void
setStaticFloatField (vm_t*, jclass, jfieldID, jfloat);

void
setStaticDoubleField (vm_t*, jclass, jfieldID, jdouble);

void
setStaticBooleanField (vm_t*, jclass, jfieldID, jboolean);

void
setStaticCharField (vm_t*, jclass, jfieldID, jchar);

void
setStaticObjectField (vm_t*, jclass, jfieldID, jobject);

void
setStaticStringField (vm_t*, jclass, jfieldID, const char*);

void
setLongField (vm_t*, jobject, jfieldID, jlong);

void
setIntField (vm_t*, jobject, jfieldID, jint);

void
setShortField (vm_t*, jobject, jfieldID, jshort);

void
setByteField (vm_t*, jobject, jfieldID, jbyte);

void
setFloatField (vm_t*, jobject, jfieldID, jfloat);

void
setDoubleField (vm_t*, jobject, jfieldID, jdouble);

void
setBooleanField (vm_t*, jobject, jfieldID, jboolean);

void
setCharField (vm_t*, jobject, jfieldID, jchar);

void
setObjectField (vm_t*, jobject, jfieldID, jobject);

void
setStringField (vm_t*, jclass, jfieldID, const char*);

jvalue*
newJValues (int);

void
setJValueBoolean (jvalue*, int, jboolean);

void
setJValueLong (jvalue*, int, jlong);

void
setJValueInt (jvalue*, int, jint);

void
setJValueShort (jvalue*, int, jshort);

void
setJValueByte (jvalue*, int, jbyte);

void
setJValueFloat (jvalue*, int, jfloat);

void
setJValueDouble (jvalue*, int, jdouble);

void
setJValueChar (jvalue*, int, jchar);

void
setJValueString (vm_t*, jvalue*, int, const char*);

void
setJValueObject (jvalue*, int, jobject);

jarray
newBooleanArray (vm_t*, jsize);

jarray
newLongArray (vm_t*, jsize);

jarray
newIntArray (vm_t*, jsize);

jarray
newShortArray (vm_t*, jsize);

jarray
newByteArray (vm_t*, jsize);

jarray
newFloatArray (vm_t*, jsize);

jarray
newDoubleArray (vm_t*, jsize);

jarray
newCharArray (vm_t*, jsize);

jarray
newObjectArray (vm_t*, jsize, jclass);

jobject
newJString (vm_t*, const char*);

const jchar*
charsFromJString (vm_t*, jobject);

jint
getArrayLength(vm_t*, jobject);

jclass
getObjectClass(vm_t*, jobject);

jboolean
isInstanceOf(vm_t*, jobject, jclass);

const char*
bytesFromJString (vm_t*, jobject);

void
releaseJChars (vm_t*, jobject, const jchar*);

void
releaseJBytes (vm_t*, jobject, const char*);

const char*
jStringToCString (vm_t*, jobject);

jboolean
exceptionCheck (vm_t*);

void
exceptionClear (vm_t*);

void
exceptionDescribe (vm_t*);

jthrowable
exceptionOccurred (vm_t*);

jthrowable
exceptionOccurredClear (vm_t*);

void
releaseJObjectRef (vm_t*, jobject);

void
releaseJClassRef (vm_t*, jclass);

void
releaseJThrowableRef (vm_t*, jthrowable);

void
release (jobject);

void
runCocoaMain ();

#include "hfunction.h"

#endif /* FFIJNI_H_ */