mirror of
https://github.com/LSPosed/LSPlant.git
synced 2025-05-05 14:06:37 +08:00
Add is_instance_v
This commit is contained in:
parent
89f10845c3
commit
752c85a030
@ -166,7 +166,7 @@ concept HookerType = requires(T a) {
|
|||||||
template<HookerType T>
|
template<HookerType T>
|
||||||
inline static bool HookSymNoHandle(const HookHandler &handler, void *original, T &arg) {
|
inline static bool HookSymNoHandle(const HookHandler &handler, void *original, T &arg) {
|
||||||
if (original) {
|
if (original) {
|
||||||
if constexpr(is_instance<decltype(arg.backup), MemberFunction>::value) {
|
if constexpr(is_instance_v<decltype(arg.backup), MemberFunction>) {
|
||||||
void *backup = handler.inline_hooker(original, reinterpret_cast<void *>(arg.replace));
|
void *backup = handler.inline_hooker(original, reinterpret_cast<void *>(arg.replace));
|
||||||
arg.backup = reinterpret_cast<typename decltype(arg.backup)::FunType>(backup);
|
arg.backup = reinterpret_cast<typename decltype(arg.backup)::FunType>(backup);
|
||||||
} else {
|
} else {
|
||||||
|
@ -20,6 +20,9 @@ template<class...Ts, template<class, class...> class U>
|
|||||||
struct is_instance<U<Ts...>, U> : public std::true_type {
|
struct is_instance<U<Ts...>, U> : public std::true_type {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<class T, template<class, class...> class U>
|
||||||
|
inline constexpr bool is_instance_v = is_instance<T, U>::value;
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
concept JObject = std::is_base_of_v<std::remove_pointer_t<_jobject>, std::remove_pointer_t<T>>;
|
concept JObject = std::is_base_of_v<std::remove_pointer_t<_jobject>, std::remove_pointer_t<T>>;
|
||||||
|
|
||||||
@ -111,7 +114,7 @@ public:
|
|||||||
|
|
||||||
template<typename T, typename U>
|
template<typename T, typename U>
|
||||||
concept ScopeOrRaw = std::is_convertible_v<T, U> ||
|
concept ScopeOrRaw = std::is_convertible_v<T, U> ||
|
||||||
(is_instance<std::decay_t<T>, ScopedLocalRef>::value &&
|
(is_instance_v<std::decay_t<T>, ScopedLocalRef> &&
|
||||||
std::is_convertible_v<typename std::decay_t<T>::BaseType, U>);
|
std::is_convertible_v<typename std::decay_t<T>::BaseType, U>);
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
@ -138,7 +141,7 @@ template<typename T>
|
|||||||
inline auto UnwrapScope(T &&x) {
|
inline auto UnwrapScope(T &&x) {
|
||||||
if constexpr(std::is_same_v<std::decay_t<T>, std::string_view>)
|
if constexpr(std::is_same_v<std::decay_t<T>, std::string_view>)
|
||||||
return x.data();
|
return x.data();
|
||||||
else if constexpr(is_instance<std::decay_t<T>, ScopedLocalRef>::value)
|
else if constexpr(is_instance_v<std::decay_t<T>, ScopedLocalRef>)
|
||||||
return x.get();
|
return x.get();
|
||||||
else return std::forward<T>(x);
|
else return std::forward<T>(x);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user