// File is generated by gobind. Do not edit.

#include <jni.h>
#include "seq.h"

extern void init_proxies();

typedef struct ret_jint {
	jint res;
	jint exc;
} ret_jint;
typedef struct ret_jboolean {
	jboolean res;
	jint exc;
} ret_jboolean;
typedef struct ret_jshort {
	jshort res;
	jint exc;
} ret_jshort;
typedef struct ret_jchar {
	jchar res;
	jint exc;
} ret_jchar;
typedef struct ret_jbyte {
	jbyte res;
	jint exc;
} ret_jbyte;
typedef struct ret_jlong {
	jlong res;
	jint exc;
} ret_jlong;
typedef struct ret_jfloat {
	jfloat res;
	jint exc;
} ret_jfloat;
typedef struct ret_jdouble {
	jdouble res;
	jint exc;
} ret_jdouble;
typedef struct ret_nstring {
	nstring res;
	jint exc;
} ret_nstring;
typedef struct ret_nbyteslice {
	nbyteslice res;
	jint exc;
} ret_nbyteslice;

// JNI function headers for the Go <=> Java bridge.
//   gobind -lang=java java
//
// File is generated by gobind. Do not edit.

#ifndef __Java_H__
#define __Java_H__

#include <jni.h>

extern jclass proxy_class_java_F;
extern jmethodID proxy_class_java_F_cons;

extern jclass proxy_class_java_O;
extern jmethodID proxy_class_java_O_cons;

// skipped method O.Super with unsupported parameter or return types

extern jclass proxy_class_java_R;
extern jmethodID proxy_class_java_R_cons;

extern jclass proxy_class_java_S;
extern jmethodID proxy_class_java_S_cons;

// skipped method S.Super with unsupported parameter or return types

#endif
