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

#include <android/log.h>
#include <stdint.h>
#include "seq.h"
#include "_cgo_export.h"
#include "ignore.h"

jclass proxy_class_ignore_I;
jmethodID proxy_class_ignore_I_cons;
// skipped method I.Argument with unsupported parameter or return types

// skipped method I.Result with unsupported parameter or return types

jclass proxy_class_ignore_S;
jmethodID proxy_class_ignore_S_cons;

JNIEXPORT void JNICALL
Java_ignore_Ignore__1init(JNIEnv *env, jclass _unused) {
    jclass clazz;
    clazz = (*env)->FindClass(env, "ignore/S");
    proxy_class_ignore_S = (*env)->NewGlobalRef(env, clazz);
    proxy_class_ignore_S_cons = (*env)->GetMethodID(env, clazz, "<init>", "(I)V");
    clazz = (*env)->FindClass(env, "ignore/Ignore$proxyI");
    proxy_class_ignore_I = (*env)->NewGlobalRef(env, clazz);
    proxy_class_ignore_I_cons = (*env)->GetMethodID(env, clazz, "<init>", "(I)V");
    clazz = (*env)->FindClass(env, "ignore/I");
    // skipped method I.Argument with unsupported parameter or return types
    
    // skipped method I.Result with unsupported parameter or return types
    
    
}

// skipped function Argument with unsupported parameter or return types

// skipped function Result with unsupported parameter or return types

JNIEXPORT jint JNICALL
Java_ignore_S__1_1New(JNIEnv *env, jclass clazz) {
    return new_ignore_S();
}

// skipped function S.Argument with unsupported parameter or return types

// skipped function S.Result with unsupported parameter or return types

// skipped field S with unsupported type: interface{}

// skipped function I.Argument with unsupported parameter or return types

// skipped method I with unsupported parameter or return types

// skipped function I.Result with unsupported parameter or return types

// skipped method I with unsupported parameter or return types

// skipped variable C128 with unsupported type: complex128

// skipped variable C64 with unsupported type: complex64

// skipped variable Uint with unsupported type: uint

// skipped variable Uint32 with unsupported type: uint32

// skipped variable Uint64 with unsupported type: uint64

// skipped variable V with unsupported type: interface{}

// skipped variable Var with unsupported type: interface{}

