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

#ifndef __Interfaces_H__
#define __Interfaces_H__

#include <jni.h>

extern jclass proxy_class_interfaces_Error;
extern jmethodID proxy_class_interfaces_Error_cons;

int32_t cproxyinterfaces_Error_Err(int32_t refnum);

extern jclass proxy_class_interfaces_I;
extern jmethodID proxy_class_interfaces_I_cons;

int32_t cproxyinterfaces_I_Rand(int32_t refnum);

extern jclass proxy_class_interfaces_I1;
extern jmethodID proxy_class_interfaces_I1_cons;

void cproxyinterfaces_I1_J(int32_t refnum);

extern jclass proxy_class_interfaces_I2;
extern jmethodID proxy_class_interfaces_I2_cons;

void cproxyinterfaces_I2_G(int32_t refnum);

extern jclass proxy_class_interfaces_I3;
extern jmethodID proxy_class_interfaces_I3_cons;

int32_t cproxyinterfaces_I3_F(int32_t refnum);

extern jclass proxy_class_interfaces_LargerI;
extern jmethodID proxy_class_interfaces_LargerI_cons;

void cproxyinterfaces_LargerI_AnotherFunc(int32_t refnum);

int32_t cproxyinterfaces_LargerI_Rand(int32_t refnum);

extern jclass proxy_class_interfaces_SameI;
extern jmethodID proxy_class_interfaces_SameI_cons;

int32_t cproxyinterfaces_SameI_Rand(int32_t refnum);

extern jclass proxy_class_interfaces_WithParam;
extern jmethodID proxy_class_interfaces_WithParam_cons;

void cproxyinterfaces_WithParam_HasParam(int32_t refnum, char p0);

#endif
