-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathwrappers.h
70 lines (57 loc) · 1.41 KB
/
wrappers.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#pragma once
#include "jni_types.h"
namespace jnipp::java {
template<typename T>
struct type_wrapper
{
type_wrapper(T)
{
}
operator java::value()
{
return java::value();
}
};
template<>
struct type_wrapper<std::string>
{
type_wrapper(std::string const& value)
: value(value)
{
}
operator jvalue() const
{
jvalue out;
jstring val = GetJNI()->NewStringUTF(value.c_str());
out.l = val;
return out;
}
std::string value;
};
#define TYPE_WRAPPER(JTYPE, JV_MEMBER) \
template<> \
struct type_wrapper<JTYPE> \
{ \
type_wrapper(JTYPE value) \
: value(value) \
{ \
} \
operator jvalue() const \
{ \
jvalue v = {}; \
JV_MEMBER = value; \
return v; \
} \
JTYPE value; \
};
TYPE_WRAPPER(jobject, v.l)
TYPE_WRAPPER(jboolean, v.z)
TYPE_WRAPPER(jbyte, v.b)
TYPE_WRAPPER(jchar, v.c)
TYPE_WRAPPER(jshort, v.s)
TYPE_WRAPPER(jint, v.i)
TYPE_WRAPPER(jlong, v.j)
TYPE_WRAPPER(jfloat, v.f)
TYPE_WRAPPER(jdouble, v.d)
#undef TYPE_WRAPPER
} // namespace jnipp::java