mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-14 06:10:40 +01:00

This is needed in order to use jint and make the header self contained. Bug: b/251890128 Change-Id: Ie6c323113370a1d49f68c783137292e1c0be07d2 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/278780 Commit-Queue: Xavier Lepaul <xalep@webrtc.org> Reviewed-by: Xavier Lepaul <xalep@webrtc.org> Cr-Commit-Position: refs/heads/main@{#38351}
63 lines
1.9 KiB
C++
63 lines
1.9 KiB
C++
/*
|
|
* Copyright 2018 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
// Originally this class is from Chromium.
|
|
// https://cs.chromium.org/chromium/src/base/android/jni_int_wrapper.h.
|
|
|
|
#ifndef SDK_ANDROID_NATIVE_API_JNI_JNI_INT_WRAPPER_H_
|
|
#define SDK_ANDROID_NATIVE_API_JNI_JNI_INT_WRAPPER_H_
|
|
|
|
#include <jni.h>
|
|
|
|
#include <cstdint>
|
|
|
|
// Wrapper used to receive int when calling Java from native. The wrapper
|
|
// disallows automatic conversion of anything besides int32_t to a jint.
|
|
// Checking is only done in debugging builds.
|
|
|
|
#ifdef NDEBUG
|
|
|
|
typedef jint JniIntWrapper;
|
|
|
|
// This inline is sufficiently trivial that it does not change the
|
|
// final code generated by g++.
|
|
inline jint as_jint(JniIntWrapper wrapper) {
|
|
return wrapper;
|
|
}
|
|
|
|
#else
|
|
|
|
class JniIntWrapper {
|
|
public:
|
|
JniIntWrapper() : i_(0) {}
|
|
JniIntWrapper(int32_t i) : i_(i) {} // NOLINT(runtime/explicit)
|
|
explicit JniIntWrapper(const JniIntWrapper& ji) : i_(ji.i_) {}
|
|
|
|
jint as_jint() const { return i_; }
|
|
|
|
// If you get an "invokes a deleted function" error at the lines below it is
|
|
// because you used an implicit conversion to convert e.g. a long to an
|
|
// int32_t when calling Java. We disallow this. If you want a lossy
|
|
// conversion, please use an explicit conversion in your C++ code.
|
|
JniIntWrapper(uint32_t) = delete; // NOLINT(runtime/explicit)
|
|
JniIntWrapper(uint64_t) = delete; // NOLINT(runtime/explicit)
|
|
JniIntWrapper(int64_t) = delete; // NOLINT(runtime/explicit)
|
|
|
|
private:
|
|
const jint i_;
|
|
};
|
|
|
|
inline jint as_jint(const JniIntWrapper& wrapper) {
|
|
return wrapper.as_jint();
|
|
}
|
|
|
|
#endif // NDEBUG
|
|
|
|
#endif // SDK_ANDROID_NATIVE_API_JNI_JNI_INT_WRAPPER_H_
|