blob: 5bbc5700f9d3b6ac5babd432df5c9937f820e992 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef JNI_ZERO_COMMON_APIS_H_
#define JNI_ZERO_COMMON_APIS_H_
#include <jni.h>
#include <stdint.h>
#include "third_party/jni_zero/java_refs.h"
#include "third_party/jni_zero/jni_export.h"
#include "third_party/jni_zero/type_conversions.h"
namespace jni_zero {
// Wraps Collection.toArray().
JNI_ZERO_COMPONENT_BUILD_EXPORT ScopedJavaLocalRef<jobjectArray>
CollectionToArray(JNIEnv* env, const JavaRef<jobject>& collection);
// Wraps Arrays.asList().
JNI_ZERO_COMPONENT_BUILD_EXPORT ScopedJavaLocalRef<jobject> ArrayToList(
JNIEnv* env,
const JavaRef<jobjectArray>& array);
// Serializes a Map to an array of key/values.
JNI_ZERO_COMPONENT_BUILD_EXPORT ScopedJavaLocalRef<jobjectArray> MapToArray(
JNIEnv* env,
const JavaRef<jobject>& map);
JNI_ZERO_COMPONENT_BUILD_EXPORT ScopedJavaLocalRef<jobject> ArrayToMap(
JNIEnv* env,
const JavaRef<jobjectArray>& array);
JNI_ZERO_COMPONENT_BUILD_EXPORT ScopedJavaLocalRef<jobject>
ListGet(JNIEnv* env, const JavaRef<jobject>& list, jint idx);
JNI_ZERO_COMPONENT_BUILD_EXPORT ScopedJavaLocalRef<jobject> ListSet(
JNIEnv* env,
const JavaRef<jobject>& list,
jint idx,
const JavaRef<jobject>& value);
// Use ToJniType on the value.
template <typename V>
requires(!internal::IsJavaRef<V>)
inline ScopedJavaLocalRef<jobject> ListSet(JNIEnv* env,
const JavaRef<jobject>& list,
jint idx,
const V& value) {
return ListSet(env, list, idx, ToJniType(env, value));
}
JNI_ZERO_COMPONENT_BUILD_EXPORT void ListAdd(JNIEnv* env,
const JavaRef<jobject>& list,
const JavaRef<jobject>& value);
// Use ToJniType on the value.
template <typename V>
requires(!internal::IsJavaRef<V>)
inline ScopedJavaLocalRef<jobject> ListAdd(JNIEnv* env,
const JavaRef<jobject>& list,
const V& value) {
return ListAdd(env, list, ToJniType(env, value));
}
JNI_ZERO_COMPONENT_BUILD_EXPORT ScopedJavaLocalRef<jobject>
MapGet(JNIEnv* env, const JavaRef<jobject>& map, const JavaRef<jobject>& key);
JNI_ZERO_COMPONENT_BUILD_EXPORT ScopedJavaLocalRef<jobject> MapPut(
JNIEnv* env,
const JavaRef<jobject>& map,
const JavaRef<jobject>& key,
const JavaRef<jobject>& value);
// Use ToJniType on the key/value.
template <typename K, typename V>
requires(!internal::IsJavaRef<K> && !internal::IsJavaRef<V>)
inline ScopedJavaLocalRef<jobject> MapPut(JNIEnv* env,
const JavaRef<jobject>& map,
const K& key,
const V& value) {
return MapPut(env, map, ToJniType(env, key), ToJniType(env, value));
}
JNI_ZERO_COMPONENT_BUILD_EXPORT jint
CollectionSize(JNIEnv* env, const JavaRef<jobject>& collection);
JNI_ZERO_COMPONENT_BUILD_EXPORT jint MapSize(JNIEnv* env,
const JavaRef<jobject>& map);
JNI_ZERO_COMPONENT_BUILD_EXPORT bool FromJavaBoolean(
JNIEnv* env,
const JavaRef<jobject>& j_bool);
JNI_ZERO_COMPONENT_BUILD_EXPORT ScopedJavaLocalRef<jobject> ToJavaBoolean(
JNIEnv* env,
bool val);
JNI_ZERO_COMPONENT_BUILD_EXPORT int32_t
FromJavaInteger(JNIEnv* env, const JavaRef<jobject>& j_int);
JNI_ZERO_COMPONENT_BUILD_EXPORT ScopedJavaLocalRef<jobject> ToJavaInteger(
JNIEnv* env,
int32_t val);
JNI_ZERO_COMPONENT_BUILD_EXPORT int64_t
FromJavaLong(JNIEnv* env, const JavaRef<jobject>& j_long);
JNI_ZERO_COMPONENT_BUILD_EXPORT ScopedJavaLocalRef<jobject> ToJavaLong(
JNIEnv* env,
int64_t val);
} // namespace jni_zero
#endif // JNI_ZERO_COMMON_APIS_H_