/*
 *  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_

// 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_
