github.com/acrespo/mobile@v0.0.0-20190107162257-dc0771356504/bind/java/seq_android.h (about)

     1  // Copyright 2016 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  #ifndef __GO_SEQ_ANDROID_HDR__
     6  #define __GO_SEQ_ANDROID_HDR__
     7  
     8  #include <stdint.h>
     9  #include <android/log.h>
    10  // For abort()
    11  #include <stdlib.h>
    12  #include <jni.h>
    13  
    14  #define LOG_INFO(...) __android_log_print(ANDROID_LOG_INFO, "go/Seq", __VA_ARGS__)
    15  #define LOG_FATAL(...)                                             \
    16    {                                                                \
    17      __android_log_print(ANDROID_LOG_FATAL, "go/Seq", __VA_ARGS__); \
    18      abort();                                                       \
    19    }
    20  
    21  // Platform specific types
    22  typedef struct nstring {
    23  	// UTF16 or UTF8 Encoded string. When converting from Java string to Go
    24  	// string, UTF16. When converting from Go to Java, UTF8.
    25  	void *chars;
    26  	// length in bytes, regardless of encoding
    27  	jsize len;
    28  } nstring;
    29  typedef struct nbyteslice {
    30  	void *ptr;
    31  	jsize len;
    32  } nbyteslice;
    33  typedef jlong nint;
    34  
    35  extern void go_seq_dec_ref(int32_t ref);
    36  extern void go_seq_inc_ref(int32_t ref);
    37  // go_seq_unwrap takes a reference number to a Java wrapper and returns
    38  // a reference number to its wrapped Go object.
    39  extern int32_t go_seq_unwrap(jint refnum);
    40  extern int32_t go_seq_to_refnum(JNIEnv *env, jobject o);
    41  extern int32_t go_seq_to_refnum_go(JNIEnv *env, jobject o);
    42  extern jobject go_seq_from_refnum(JNIEnv *env, int32_t refnum, jclass proxy_class, jmethodID proxy_cons);
    43  
    44  extern void go_seq_maybe_throw_exception(JNIEnv *env, jobject msg);
    45  // go_seq_get_exception returns any pending exception and clears the exception status.
    46  extern jobject go_seq_get_exception(JNIEnv *env);
    47  
    48  extern jbyteArray go_seq_to_java_bytearray(JNIEnv *env, nbyteslice s, int copy);
    49  extern nbyteslice go_seq_from_java_bytearray(JNIEnv *env, jbyteArray s, int copy);
    50  extern void go_seq_release_byte_array(JNIEnv *env, jbyteArray arr, jbyte* ptr);
    51  
    52  extern jstring go_seq_to_java_string(JNIEnv *env, nstring str);
    53  extern nstring go_seq_from_java_string(JNIEnv *env, jstring s);
    54  
    55  // push_local_frame retrieves or creates the JNIEnv* for the current thread
    56  // and pushes a JNI reference frame. Must be matched with call to pop_local_frame.
    57  extern JNIEnv *go_seq_push_local_frame(jint cap);
    58  // Pop the current local frame, releasing all JNI local references in it
    59  extern void go_seq_pop_local_frame(JNIEnv *env);
    60  
    61  // Return a global reference to the given class. Return NULL and clear exception if not found.
    62  extern jclass go_seq_find_class(const char *name);
    63  extern jmethodID go_seq_get_static_method_id(jclass clazz, const char *name, const char *sig);
    64  extern jmethodID go_seq_get_method_id(jclass clazz, const char *name, const char *sig);
    65  extern int go_seq_isinstanceof(jint refnum, jclass clazz);
    66  
    67  #endif // __GO_SEQ_ANDROID_HDR__