Skip to content

Commit 50cb278

Browse files
committed
Rationalize ownership-related types/functions
1 parent b14b8b9 commit 50cb278

File tree

4 files changed

+39
-87
lines changed

4 files changed

+39
-87
lines changed

include/jni/array.hpp

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,6 @@ namespace jni
1111
template < class E, class Enable = void >
1212
class Array;
1313

14-
template < class E >
15-
using UniqueArray = UniquePointerlike< Array<E>, GlobalRefDeleter >;
16-
17-
template < class E >
18-
using UniqueWeakArray = UniquePointerlike< Array<E>, WeakGlobalRefDeleter >;
19-
20-
template < class E >
21-
using UniqueLocalArray = UniquePointerlike< Array<E>, LocalRefDeleter >;
22-
2314
template < class E >
2415
class Array< E, std::enable_if_t<IsPrimitive<E>::value> >
2516
{
@@ -96,9 +87,9 @@ namespace jni
9687
return Array<E>(&NewArray<E>(env, length));
9788
}
9889

99-
UniqueArray<E> NewGlobalRef(JNIEnv& env) const
90+
Global<Array<E>> NewGlobalRef(JNIEnv& env) const
10091
{
101-
return Seize(env, Array(jni::NewGlobalRef(env, array).release()));
92+
return SeizeGlobal(env, Array(jni::NewGlobalRef(env, array).release()));
10293
}
10394
};
10495

@@ -168,31 +159,12 @@ namespace jni
168159
return Array<Object<TheTag>>(&NewObjectArray(env, length, clazz, initialElement.Get()));
169160
}
170161

171-
UniqueArray<Object<TheTag>> NewGlobalRef(JNIEnv& env) const
162+
Global<Array<Object<TheTag>>> NewGlobalRef(JNIEnv& env) const
172163
{
173-
return Seize(env, Array(jni::NewGlobalRef(env, array).release()));
164+
return SeizeGlobal(env, Array(jni::NewGlobalRef(env, array).release()));
174165
}
175166
};
176167

177-
template < class E >
178-
UniqueArray<E> Seize(JNIEnv& env, Array<E>&& array)
179-
{
180-
return UniqueArray<E>(std::move(array), GlobalRefDeleter(env));
181-
}
182-
183-
template < class E >
184-
UniqueWeakArray<E> SeizeWeakRef(JNIEnv& env, Array<E>&& array)
185-
{
186-
return UniqueWeakArray<E>(std::move(array), WeakGlobalRefDeleter(env));
187-
}
188-
189-
template < class E >
190-
UniqueLocalArray<E> SeizeLocalRef(JNIEnv& env, Array<E>&& array)
191-
{
192-
return UniqueLocalArray<E>(std::move(array), LocalRefDeleter(env));
193-
}
194-
195-
196168
template < class T >
197169
std::vector<T> MakeAnything(ThingToMake<std::vector<T>>, JNIEnv& env, const Array<T>& array)
198170
{

include/jni/class.hpp

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,6 @@ namespace jni
1313
template < class TheTag, class > class Method;
1414
template < class TheTag, class > class StaticMethod;
1515

16-
template < class TheTag >
17-
class Class;
18-
19-
template < class TagType >
20-
using UniqueClass = UniquePointerlike< Class<TagType>, GlobalRefDeleter >;
21-
2216
template < class TheTag >
2317
class Class
2418
{
@@ -144,15 +138,9 @@ namespace jni
144138
return StaticMethod<TagType, T>(env, *this, name);
145139
}
146140

147-
UniqueClass<TagType> NewGlobalRef(JNIEnv& env) const
141+
Global<Class<TagType>> NewGlobalRef(JNIEnv& env) const
148142
{
149-
return Seize(env, Class(*jni::NewGlobalRef(env, clazz).release()));
143+
return SeizeGlobal(env, Class(*jni::NewGlobalRef(env, clazz).release()));
150144
}
151145
};
152-
153-
template < class TagType >
154-
UniqueClass<TagType> Seize(JNIEnv& env, Class<TagType>&& clazz)
155-
{
156-
return UniqueClass<TagType>(std::move(clazz), GlobalRefDeleter(env));
157-
}
158146
}

include/jni/object.hpp

Lines changed: 6 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,6 @@ namespace jni
1717
template < class TagType >
1818
struct UntaggedObjectType { using Type = jobject; };
1919

20-
template < class TheTag >
21-
class Object;
22-
23-
template < class TagType = ObjectTag >
24-
using UniqueObject = UniquePointerlike< Object<TagType>, GlobalRefDeleter >;
25-
26-
template < class TagType = ObjectTag >
27-
using UniqueWeakObject = UniquePointerlike< Object<TagType>, WeakGlobalRefDeleter >;
28-
29-
template < class TagType = ObjectTag >
30-
using UniqueLocalObject = UniquePointerlike< Object<TagType>, LocalRefDeleter >;
31-
3220
template < class TheTag = ObjectTag >
3321
class Object
3422
{
@@ -144,19 +132,19 @@ namespace jni
144132
CallNonvirtualMethod<void>(env, obj, clazz, method, Untag(args)...);
145133
}
146134

147-
UniqueObject<TagType> NewGlobalRef(JNIEnv& env) const
135+
Global<Object<TagType>> NewGlobalRef(JNIEnv& env) const
148136
{
149-
return Seize(env, Object(jni::NewGlobalRef(env, obj).release()));
137+
return SeizeGlobal(env, Object(jni::NewGlobalRef(env, obj).release()));
150138
}
151139

152-
UniqueWeakObject<TagType> NewWeakGlobalRef(JNIEnv& env) const
140+
Weak<Object<TagType>> NewWeakGlobalRef(JNIEnv& env) const
153141
{
154-
return SeizeWeakRef(env, Object(jni::NewWeakGlobalRef(env, obj).release()));
142+
return SeizeWeak(env, Object(jni::NewWeakGlobalRef(env, obj).release()));
155143
}
156144

157-
UniqueLocalObject<TagType> NewLocalRef(JNIEnv& env) const
145+
Local<Object<TagType>> NewLocalRef(JNIEnv& env) const
158146
{
159-
return SeizeLocalRef(env, Object(jni::NewLocalRef(env, obj).release()));
147+
return SeizeLocal(env, Object(jni::NewLocalRef(env, obj).release()));
160148
}
161149

162150
template < class OtherTag >
@@ -166,25 +154,6 @@ namespace jni
166154
}
167155
};
168156

169-
template < class TagType >
170-
UniqueObject<TagType> Seize(JNIEnv& env, Object<TagType>&& object)
171-
{
172-
return UniqueObject<TagType>(std::move(object), GlobalRefDeleter(env));
173-
}
174-
175-
template < class TagType >
176-
UniqueWeakObject<TagType> SeizeWeakRef(JNIEnv& env, Object<TagType>&& object)
177-
{
178-
return UniqueWeakObject<TagType>(std::move(object), WeakGlobalRefDeleter(env));
179-
}
180-
181-
template < class TagType >
182-
UniqueLocalObject<TagType> SeizeLocalRef(JNIEnv& env, Object<TagType>&& object)
183-
{
184-
return UniqueLocalObject<TagType>(std::move(object), LocalRefDeleter(env));
185-
}
186-
187-
188157
template < class OutTagType, class InTagType >
189158
Object<OutTagType> Cast(JNIEnv& env, const Object<InTagType>& object, const Class<OutTagType>& clazz)
190159
{

include/jni/unique_pointerlike.hpp

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55
not D::pointer; and deletion is performed via get_deleter()(current.Get()). These are
66
the semantics needed by:
77
8-
* UniqueObject, a.k.a. UniquePointerlike<Object<TagType>, GlobalRefDeleter>,
9-
* UniqueWeakObject, a.k.a. UniquePointerlike<Object<TagType>, WeakGlobalRefDeleter>,
10-
* UniqueLocalObject, a.k.a. UniquePointerlike<Object<TagType>, LocalRefDeleter>,
11-
* and similar typedefs for Array<E>.
8+
* Global<P>, a.k.a. UniquePointerlike<T, GlobalRefDeleter>,
9+
* Weak<P>, a.k.a. UniquePointerlike<T, WeakGlobalRefDeleter>,
10+
* Local<P>, a.k.a. UniquePointerlike<T, LocalRefDeleter>,
11+
12+
where P is Object<>, Class<>, or Array<>.
1213
*/
1314

1415
namespace jni
@@ -80,4 +81,26 @@ namespace jni
8081
D& get_deleter() { return deleter; }
8182
const D& get_deleter() const { return deleter; }
8283
};
84+
85+
template < class T > using Global = UniquePointerlike< T, GlobalRefDeleter >;
86+
template < class T > using Weak = UniquePointerlike< T, WeakGlobalRefDeleter >;
87+
template < class T > using Local = UniquePointerlike< T, LocalRefDeleter >;
88+
89+
template < class T >
90+
Global<T> SeizeGlobal(JNIEnv& env, T&& t)
91+
{
92+
return Global<T>(std::move(t), GlobalRefDeleter(env));
93+
}
94+
95+
template < class T >
96+
Weak<T> SeizeWeak(JNIEnv& env, T&& t)
97+
{
98+
return Weak<T>(std::move(t), WeakGlobalRefDeleter(env));
99+
}
100+
101+
template < class T >
102+
Local<T> SeizeLocal(JNIEnv& env, T&& t)
103+
{
104+
return Local<T>(std::move(t), LocalRefDeleter(env));
105+
}
83106
}

0 commit comments

Comments
 (0)