// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.


// This file is autogenerated by
//     base/android/jni_generator/jni_generator.py
// For
//     org/chromium/example/jni_generator/SampleForAnnotationProcessor

#ifndef org_chromium_example_jni_generator_SampleForAnnotationProcessor_JNI
#define org_chromium_example_jni_generator_SampleForAnnotationProcessor_JNI

#include <jni.h>

#include "base/android/jni_generator/jni_generator_helper.h"


// Step 1: Forward declarations.


// Step 2: Constants (optional).


// Step 3: Method stubs.
static void JNI_SampleForAnnotationProcessor_Foo(JNIEnv* env, const
    base::android::JavaParamRef<jclass>& jcaller);

JNI_GENERATOR_EXPORT void Java_org_chromium_base_natives_GEN_1JNI_MygCV2jQ(
    JNIEnv* env,
    jclass jcaller) {
  return JNI_SampleForAnnotationProcessor_Foo(env, base::android::JavaParamRef<jclass>(env,
      jcaller));
}

static base::android::ScopedJavaLocalRef<jobject> JNI_SampleForAnnotationProcessor_Bar(JNIEnv* env,
    const base::android::JavaParamRef<jclass>& jcaller,
    const base::android::JavaParamRef<jobject>& sample);

JNI_GENERATOR_EXPORT jobject Java_org_chromium_base_natives_GEN_1JNI_MHuqnmXT(
    JNIEnv* env,
    jclass jcaller,
    jobject sample) {
  return JNI_SampleForAnnotationProcessor_Bar(env, base::android::JavaParamRef<jclass>(env,
      jcaller), base::android::JavaParamRef<jobject>(env, sample)).Release();
}

static base::android::ScopedJavaLocalRef<jstring> JNI_SampleForAnnotationProcessor_RevString(JNIEnv*
    env, const base::android::JavaParamRef<jclass>& jcaller,
    const base::android::JavaParamRef<jstring>& stringToReverse);

JNI_GENERATOR_EXPORT jstring Java_org_chromium_base_natives_GEN_1JNI_MM5Xkwyy(
    JNIEnv* env,
    jclass jcaller,
    jstring stringToReverse) {
  return JNI_SampleForAnnotationProcessor_RevString(env, base::android::JavaParamRef<jclass>(env,
      jcaller), base::android::JavaParamRef<jstring>(env, stringToReverse)).Release();
}

static base::android::ScopedJavaLocalRef<jobjectArray>
    JNI_SampleForAnnotationProcessor_SendToNative(JNIEnv* env, const
    base::android::JavaParamRef<jclass>& jcaller,
    const base::android::JavaParamRef<jobjectArray>& strs);

JNI_GENERATOR_EXPORT jobjectArray Java_org_chromium_base_natives_GEN_1JNI_MAC2QhR9(
    JNIEnv* env,
    jclass jcaller,
    jobjectArray strs) {
  return JNI_SampleForAnnotationProcessor_SendToNative(env, base::android::JavaParamRef<jclass>(env,
      jcaller), base::android::JavaParamRef<jobjectArray>(env, strs)).Release();
}

static base::android::ScopedJavaLocalRef<jobjectArray>
    JNI_SampleForAnnotationProcessor_SendSamplesToNative(JNIEnv* env, const
    base::android::JavaParamRef<jclass>& jcaller,
    const base::android::JavaParamRef<jobjectArray>& strs);

JNI_GENERATOR_EXPORT jobjectArray Java_org_chromium_base_natives_GEN_1JNI_MGhRh4Nd(
    JNIEnv* env,
    jclass jcaller,
    jobjectArray strs) {
  return JNI_SampleForAnnotationProcessor_SendSamplesToNative(env,
      base::android::JavaParamRef<jclass>(env, jcaller),
      base::android::JavaParamRef<jobjectArray>(env, strs)).Release();
}

static jboolean JNI_SampleForAnnotationProcessor_HasPhalange(JNIEnv* env, const
    base::android::JavaParamRef<jclass>& jcaller);

JNI_GENERATOR_EXPORT jboolean Java_org_chromium_base_natives_GEN_1JNI_MW0aEs4h(
    JNIEnv* env,
    jclass jcaller) {
  return JNI_SampleForAnnotationProcessor_HasPhalange(env, base::android::JavaParamRef<jclass>(env,
      jcaller));
}


#endif  // org_chromium_example_jni_generator_SampleForAnnotationProcessor_JNI
