text: // Tencent is pleased to support the open source community by making Mars available.
  // Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved.
  
  // Licensed under the MIT License (the "License"); you may not use this file except in 
  // compliance with the License. You may obtain a copy of the License at
  // http://opensource.org/licenses/MIT
  
  // Unless required by applicable law or agreed to in writing, software distributed under the License is
  // distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
  // either express or implied. See the License for the specific language governing permissions and
  // limitations under the License.
  
  
  /**
   * created on : 2012-07-16
   * author    : yanguoyue
   */
  
  #ifndef _COMM_FUNCTION_H_
  #define _COMM_FUNCTION_H_
  
  #include <jni.h>
  #include <string>
  #include <map>
  
  struct JniMethodInfo;
  
  class AutoBuffer;
  
  jvalue JNU_CallMethodByName(JNIEnv* _env, jobject obj, const char* _name, const char* descriptor, ...);
  
  jvalue JNU_CallStaticMethodByName(JNIEnv* _env, jclass clazz, const char* _name, const char* descriptor, ...);
  
  jvalue
  JNU_CallStaticMethodByName(JNIEnv* _env, const char* _class_name, const char* _name, const char* descriptor, ...);
  
  jvalue JNU_CallStaticMethodByMethodInfo(JNIEnv* _env, JniMethodInfo _method_info, ...);
  
  jvalue JNU_GetStaticField(JNIEnv* _env, jclass clazz, const char* _name, const char* sig);
  
  jvalue JNU_GetField(JNIEnv* _env, jobject obj, const char* _name, const char* sig);
  
  jvalue JNU_CallMethodByMethodInfo(JNIEnv* _env, jobject _obj, JniMethodInfo _method_info, ...);
  
  jbyteArray JNU_Buffer2JbyteArray(JNIEnv* _env, const AutoBuffer& ab);
  
  jbyteArray JNU_Buffer2JbyteArray(JNIEnv* _env, const void* _buffer, size_t _length);
  
  void JNU_FreeJbyteArray(JNIEnv* _env, jbyteArray bytes);
  
  bool JNU_JbyteArray2Buffer(JNIEnv* _env, const jbyteArray bytes, AutoBuffer& ab);
  
  // bool JNU_Jstring2Wstring( JNIEnv* _env, const jstring jstr, std::wstring& wstr); //in linux sizeof(wchar_t)==4 but sizeof(jchar)==2
  wchar_t* JNU_Jstring2Wchar(JNIEnv* _env, const jstring jstr);
  
  void JNU_FreeWchar(JNIEnv* _env, jstring str, wchar_t* wchar);
  
  jstring JNU_Wstring2Jstring(JNIEnv* _env, const std::wstring& wstr);
  
  jstring JNU_Wchar2JString(JNIEnv* _env, wchar_t* wchar);
  
  // char* to jstring
  jstring JNU_Chars2Jstring(JNIEnv* _env, const char* pat);
  
  void JNU_FreeJstring(JNIEnv* _env, jstring str);
  
  std::map<std::string, std::string> JNU_JObject2Map(JNIEnv* _env, const jobject _obj);
  
  #endif
  