-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathStruct.h
More file actions
63 lines (48 loc) · 1.79 KB
/
Struct.h
File metadata and controls
63 lines (48 loc) · 1.79 KB
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
#ifndef STRUCT_H
#define STRUCT_H
#include <stdint.h>
#include "MetadataReader.h"
#include "TypeConv.h"
#include "js_native_api.h"
namespace nativescript {
napi_value JS_structGetter(napi_env env, napi_callback_info info);
napi_value JS_unionGetter(napi_env env, napi_callback_info info);
typedef struct StructFieldInfo {
char* name;
uint16_t offset;
std::shared_ptr<TypeConv> type;
} StructFieldInfo;
typedef struct StructInfo {
char* name;
uint16_t size;
std::vector<StructFieldInfo> fields;
napi_ref jsClass;
} StructInfo;
StructInfo* getStructInfoFromMetadata(napi_env env, MDMetadataReader* metadata,
MDSectionOffset offset);
StructInfo* getStructInfoFromUnionMetadata(napi_env env,
MDMetadataReader* metadata,
MDSectionOffset offset);
class StructObject {
public:
void* data;
StructInfo* info;
bool owned;
napi_env env = nullptr;
napi_ref backingRef = nullptr;
StructObject(StructInfo* info, void* data = nullptr, napi_env env = nullptr,
napi_value backingValue = nullptr);
StructObject(napi_env env, StructInfo* info, napi_value object,
void* memory = nullptr);
napi_value get(napi_env env, StructFieldInfo* field);
void set(napi_env env, StructFieldInfo* field, napi_value value);
static StructObject* unwrap(napi_env env, napi_value object);
static napi_value defineJSClass(napi_env env, StructInfo* info);
static napi_value getJSClass(napi_env env, StructInfo* info);
static napi_value fromNative(napi_env env, StructInfo* info, void* data,
bool owned);
static bool isInstance(napi_env env, napi_value object);
~StructObject();
};
} // namespace nativescript
#endif /* STRUCT_H */