10 template <
class TheTag >
class Class;
11 template <
class TheTag,
class >
class Field;
12 template <
class TheTag,
class >
class Method;
31 explicit operator bool()
const {
return ptr; }
36 template <
class OtherTag >
43 template <
class TheTag = ObjectTag >
52 explicit Object(std::nullptr_t =
nullptr)
68 -> std::enable_if_t< IsPrimitive<T>::value, T >
70 return GetField<T>(env,
get(), field);
75 -> std::enable_if_t< !IsPrimitive<T>::value,
Local<T> >
82 -> std::enable_if_t< IsPrimitive<T>::value >
84 SetField<T>(env,
get(), field, value);
87 template <
class Expected,
class Actual >
89 -> std::enable_if_t< !IsPrimitive<Expected>::value
90 && std::is_convertible<const Actual&, const Expected&>::value >
92 SetField<jobject*>(env,
get(), field, value.get());
95 template <
class R,
class... ExpectedArgs,
class... ActualArgs >
96 auto Call(JNIEnv& env,
const Method<
TagType, R (ExpectedArgs...)>& method,
const ActualArgs&... args)
const 97 -> std::enable_if_t< IsPrimitive<R>::value
100 return CallMethod<R>(env,
get(), method,
Untag(args)...);
103 template <
class R,
class... ExpectedArgs,
class... ActualArgs >
104 auto Call(JNIEnv& env,
const Method<
TagType, R (ExpectedArgs...)>& method,
const ActualArgs&... args)
const 105 -> std::enable_if_t< !IsPrimitive<R>::value
106 && !std::is_void<R>::value
112 template <
class... ExpectedArgs,
class... ActualArgs >
113 auto Call(JNIEnv& env,
const Method<
TagType,
void (ExpectedArgs...)>& method,
const ActualArgs&... args)
const 114 -> std::enable_if_t< Conjunction<std::is_convertible<const ActualArgs&, const ExpectedArgs&>...>::value >
116 CallMethod<void>(env,
get(), method,
Untag(args)...);
119 template <
class R,
class... ExpectedArgs,
class... ActualArgs >
121 -> std::enable_if_t< IsPrimitive<R>::value
124 return CallNonvirtualMethod<R>(env,
get(), clazz, method,
Untag(args)...);
127 template <
class R,
class... ExpectedArgs,
class... ActualArgs >
129 -> std::enable_if_t< !IsPrimitive<R>::value
130 && !std::is_void<R>::value
133 return Local<R>(env,
reinterpret_cast<typename
R::UntaggedType*
>(CallNonvirtualMethod<jobject*>(env,
get(), clazz, method,
Untag(args)...)));
136 template <
class... ExpectedArgs,
class... ActualArgs >
138 -> std::enable_if_t< Conjunction<std::is_convertible<const ActualArgs&, const ExpectedArgs&>...>::value >
140 CallNonvirtualMethod<void>(env,
get(), clazz, method,
Untag(args)...);
144 template <
class OutTagType,
class T >
decltype(Untag(std::declval< T >())) UntaggedType
Definition: tagging.hpp:130
auto Set(JNIEnv &env, const Field< TagType, Expected > &field, const Actual &value) const -> std::enable_if_t< !IsPrimitive< Expected >::value &&std::is_convertible< const Actual &, const Expected &>::value >
Definition: object.hpp:88
auto Call(JNIEnv &env, const Method< TagType, R(ExpectedArgs...)> &method, const ActualArgs &... args) const -> std::enable_if_t< IsPrimitive< R >::value &&Conjunction< std::is_convertible< const ActualArgs &, const ExpectedArgs &>... >::value, R >
Definition: object.hpp:96
bool IsInstanceOf(JNIEnv &env, const Class< OtherTag > &clazz) const
Definition: object.hpp:37
ObjectBase(jobject *p)
Definition: object.hpp:22
void ThrowNew(JNIEnv &env, jclass &clazz, const char *msg=nullptr)
Definition: functions.hpp:84
ObjectBase(std::nullptr_t=nullptr)
Definition: object.hpp:19
jobject * ptr
Definition: object.hpp:17
void reset(jobject *p)
Definition: object.hpp:28
Definition: object.hpp:44
Definition: object.hpp:14
Definition: tagging.hpp:51
Definition: advanced_ownership.hpp:5
bool IsInstanceOf(JNIEnv &env, jobject *obj, jclass &clazz)
Definition: functions.hpp:253
auto Get(JNIEnv &env, const Field< TagType, T > &field) const -> std::enable_if_t< IsPrimitive< T >::value, T >
Definition: object.hpp:67
auto CallNonvirtual(JNIEnv &env, const Class< TagType > &clazz, const Method< TagType, void(ExpectedArgs...)> &method, const ActualArgs &... args) const -> std::enable_if_t< Conjunction< std::is_convertible< const ActualArgs &, const ExpectedArgs &>... >::value >
Definition: object.hpp:137
Object(std::nullptr_t=nullptr)
Definition: object.hpp:52
friend bool operator!=(const ObjectBase &a, const ObjectBase &b)
Definition: object.hpp:34
Local< Object< OutTagType > > Cast(JNIEnv &env, const Class< OutTagType > &clazz, const T &object)
Definition: object.hpp:145
UntaggedType & operator*() const
Definition: object.hpp:64
auto Untag(T primitive) -> std::enable_if_t< IsPrimitive< T >::value, T >
Definition: tagging.hpp:116
Definition: unique.hpp:38
auto Set(JNIEnv &env, const Field< TagType, T > &field, T value) const -> std::enable_if_t< IsPrimitive< T >::value >
Definition: object.hpp:81
auto Call(JNIEnv &env, const Method< TagType, R(ExpectedArgs...)> &method, const ActualArgs &... args) const -> std::enable_if_t< !IsPrimitive< R >::value &&!std::is_void< R >::value &&Conjunction< std::is_convertible< const ActualArgs &, const ExpectedArgs &>... >::value, Local< R > >
Definition: object.hpp:104
auto CallNonvirtual(JNIEnv &env, const Class< TagType > &clazz, const Method< TagType, R(ExpectedArgs...)> &method, const ActualArgs &... args) const -> std::enable_if_t< !IsPrimitive< R >::value &&!std::is_void< R >::value &&Conjunction< std::is_convertible< const ActualArgs &, const ExpectedArgs &>... >::value, Local< R > >
Definition: object.hpp:128
jclass & FindClass(JNIEnv &env, const char *name)
Definition: functions.hpp:34
auto NewLocal(JNIEnv &env, const T &t)
Definition: unique.hpp:202
TheTag TagType
Definition: object.hpp:47
typename TagTraits< TheTag >::SuperType SuperType
Definition: object.hpp:48
auto Get(JNIEnv &env, const Field< TagType, T > &field) const -> std::enable_if_t< !IsPrimitive< T >::value, Local< T > >
Definition: object.hpp:74
auto CallNonvirtual(JNIEnv &env, const Class< TagType > &clazz, const Method< TagType, R(ExpectedArgs...)> &method, const ActualArgs &... args) const -> std::enable_if_t< IsPrimitive< R >::value &&Conjunction< std::is_convertible< const ActualArgs &, const ExpectedArgs &>... >::value, R >
Definition: object.hpp:120
typename TagTraits< TheTag >::UntaggedType UntaggedType
Definition: object.hpp:49
Definition: traits.hpp:28
Object(UntaggedType *p)
Definition: object.hpp:55
friend bool operator==(const ObjectBase &a, const ObjectBase &b)
Definition: object.hpp:33
auto Call(JNIEnv &env, const Method< TagType, void(ExpectedArgs...)> &method, const ActualArgs &... args) const -> std::enable_if_t< Conjunction< std::is_convertible< const ActualArgs &, const ExpectedArgs &>... >::value >
Definition: object.hpp:113