Skip to content

Commit 29a0f6d

Browse files
author
Mihail Slavchev
committed
inline JniLocalRef
1 parent 91be80c commit 29a0f6d

3 files changed

Lines changed: 132 additions & 185 deletions

File tree

src/jni/Android.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ LOCAL_SRC_FILES := com_tns_AssetExtractor.cpp AssetExtractor.cpp\
6969
JsDebugger.cpp SimpleAllocator.cpp \
7070
NativeScriptRuntime.cpp MetadataNode.cpp MetadataTreeNode.cpp MetadataReader.cpp \
7171
MethodCache.cpp JavaObjectArrayCache.cpp \
72-
JniLocalRef.cpp JniSignatureParser.cpp \
72+
JniSignatureParser.cpp \
7373
ArgConverter.cpp JsArgToArrayConverter.cpp JsArgConverter.cpp V8GlobalHelpers.cpp V8StringConstants.cpp \
7474
FieldAccessor.cpp ArrayElementAccessor.cpp \
7575
Util.cpp Logger.cpp Profiler.cpp \

src/jni/JniLocalRef.cpp

Lines changed: 0 additions & 137 deletions
This file was deleted.

src/jni/JniLocalRef.h

Lines changed: 131 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -2,60 +2,144 @@
22
#define JNILOCALREF_H_
33

44
#include "JEnv.h"
5+
#include "JType.h"
56
#include "v8.h"
67

78
namespace tns
89
{
910
class JniLocalRef
1011
{
1112
public:
12-
JniLocalRef();
13-
14-
JniLocalRef(jobject obj, bool isGlobal = false);
15-
16-
JniLocalRef(jclass obj);
17-
18-
JniLocalRef(JniLocalRef&& rhs);
19-
20-
~JniLocalRef();
21-
22-
bool IsNull() const;
23-
24-
bool IsGlobal() const;
25-
26-
jobject Move();
27-
28-
JniLocalRef& operator=(JniLocalRef&& rhs);
29-
30-
operator jobject() const;
31-
32-
operator jboolean() const;
33-
34-
operator jclass() const;
35-
36-
operator jstring() const;
37-
38-
operator jthrowable() const;
39-
40-
operator jarray() const;
41-
42-
operator jbyteArray() const;
43-
44-
operator jshortArray() const;
45-
46-
operator jintArray() const;
47-
48-
operator jlongArray() const;
49-
50-
operator jfloatArray() const;
51-
52-
operator jdoubleArray() const;
53-
54-
operator jbooleanArray() const;
55-
56-
operator jcharArray() const;
57-
58-
operator jobjectArray() const;
13+
JniLocalRef()
14+
: m_obj(nullptr), m_isGlobal(false)
15+
{
16+
}
17+
18+
JniLocalRef(jobject obj, bool isGlobal = false)
19+
: m_obj(obj), m_isGlobal(isGlobal)
20+
{
21+
}
22+
23+
JniLocalRef(jclass obj)
24+
: m_obj(obj), m_isGlobal(false)
25+
{
26+
}
27+
28+
JniLocalRef(JniLocalRef&& rhs)
29+
: m_obj(rhs.m_obj), m_isGlobal(rhs.m_isGlobal)
30+
{
31+
rhs.m_obj = nullptr;
32+
}
33+
34+
bool IsNull() const
35+
{
36+
return m_obj == nullptr;
37+
}
38+
39+
bool IsGlobal() const
40+
{
41+
return m_isGlobal;
42+
}
43+
44+
jobject Move()
45+
{
46+
auto value = m_obj;
47+
m_obj = nullptr;
48+
return value;
49+
}
50+
51+
JniLocalRef& operator=(JniLocalRef&& rhs)
52+
{
53+
m_obj = rhs.m_obj;
54+
m_isGlobal = rhs.m_isGlobal;
55+
rhs.m_obj = nullptr;
56+
return *this;
57+
}
58+
59+
operator jobject() const
60+
{
61+
return m_obj;
62+
}
63+
64+
operator jstring() const
65+
{
66+
return reinterpret_cast<jstring>(m_obj);
67+
}
68+
69+
operator jclass() const
70+
{
71+
return reinterpret_cast<jclass>(m_obj);
72+
}
73+
74+
operator jboolean() const
75+
{
76+
JEnv env;
77+
return JType::BooleanValue(env, m_obj);
78+
}
79+
80+
operator jthrowable() const
81+
{
82+
return reinterpret_cast<jthrowable>(m_obj);
83+
}
84+
85+
operator jarray()const
86+
{
87+
return reinterpret_cast<jarray>(m_obj);
88+
}
89+
90+
operator jbyteArray() const
91+
{
92+
return reinterpret_cast<jbyteArray>(m_obj);
93+
}
94+
95+
operator jshortArray() const
96+
{
97+
return reinterpret_cast<jshortArray>(m_obj);
98+
}
99+
100+
operator jintArray() const
101+
{
102+
return reinterpret_cast<jintArray>(m_obj);
103+
}
104+
105+
operator jlongArray() const
106+
{
107+
return reinterpret_cast<jlongArray>(m_obj);
108+
}
109+
110+
operator jfloatArray() const
111+
{
112+
return reinterpret_cast<jfloatArray>(m_obj);
113+
}
114+
115+
operator jdoubleArray() const
116+
{
117+
return reinterpret_cast<jdoubleArray>(m_obj);
118+
}
119+
120+
operator jbooleanArray() const
121+
{
122+
return reinterpret_cast<jbooleanArray>(m_obj);
123+
}
124+
125+
operator jcharArray() const
126+
{
127+
return reinterpret_cast<jcharArray>(m_obj);
128+
}
129+
130+
operator jobjectArray() const
131+
{
132+
return reinterpret_cast<jobjectArray>(m_obj);
133+
}
134+
135+
~JniLocalRef()
136+
{
137+
if ((m_obj != nullptr) && !m_isGlobal)
138+
{
139+
JEnv env;
140+
env.DeleteLocalRef(m_obj);
141+
}
142+
}
59143

60144
private:
61145
jobject m_obj;

0 commit comments

Comments
 (0)