@ohos-ports/lmdb 2.5.3 → 2.8.5-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +72 -28
  3. package/SECURITY.md +12 -12
  4. package/bin/download-prebuilds.js +15 -0
  5. package/binding.gyp +115 -111
  6. package/build/Release/lmdb.node +0 -0
  7. package/caching.js +212 -156
  8. package/dependencies/lmdb/libraries/liblmdb/COPYRIGHT +20 -20
  9. package/dependencies/lmdb/libraries/liblmdb/Doxyfile +1631 -1631
  10. package/dependencies/lmdb/libraries/liblmdb/LICENSE +47 -47
  11. package/dependencies/lmdb/libraries/liblmdb/Makefile +136 -136
  12. package/dependencies/lmdb/libraries/liblmdb/chacha8.c +183 -183
  13. package/dependencies/lmdb/libraries/liblmdb/chacha8.h +14 -14
  14. package/dependencies/lmdb/libraries/liblmdb/crypto.c +121 -121
  15. package/dependencies/lmdb/libraries/liblmdb/intro.doc +192 -192
  16. package/dependencies/lmdb/libraries/liblmdb/lmdb.h +28 -3
  17. package/dependencies/lmdb/libraries/liblmdb/mdb.c +157 -31
  18. package/dependencies/lmdb/libraries/liblmdb/mdb_copy.1 +74 -74
  19. package/dependencies/lmdb/libraries/liblmdb/mdb_copy.c +106 -106
  20. package/dependencies/lmdb/libraries/liblmdb/mdb_drop.1 +53 -53
  21. package/dependencies/lmdb/libraries/liblmdb/mdb_drop.c +154 -154
  22. package/dependencies/lmdb/libraries/liblmdb/mdb_dump.1 +94 -94
  23. package/dependencies/lmdb/libraries/liblmdb/mdb_dump.c +333 -333
  24. package/dependencies/lmdb/libraries/liblmdb/mdb_load.1 +97 -97
  25. package/dependencies/lmdb/libraries/liblmdb/mdb_load.c +530 -530
  26. package/dependencies/lmdb/libraries/liblmdb/mdb_stat.1 +83 -83
  27. package/dependencies/lmdb/libraries/liblmdb/mdb_stat.c +276 -276
  28. package/dependencies/lmdb/libraries/liblmdb/midl-sparse.c +452 -0
  29. package/dependencies/lmdb/libraries/liblmdb/midl.c +452 -452
  30. package/dependencies/lmdb/libraries/liblmdb/midl.h +208 -208
  31. package/dependencies/lmdb/libraries/liblmdb/module.c +101 -101
  32. package/dependencies/lmdb/libraries/liblmdb/module.h +16 -16
  33. package/dependencies/lmdb/libraries/liblmdb/mtest.c +178 -178
  34. package/dependencies/lmdb/libraries/liblmdb/mtest2.c +124 -124
  35. package/dependencies/lmdb/libraries/liblmdb/mtest3.c +133 -133
  36. package/dependencies/lmdb/libraries/liblmdb/mtest4.c +168 -168
  37. package/dependencies/lmdb/libraries/liblmdb/mtest5.c +135 -135
  38. package/dependencies/lmdb/libraries/liblmdb/mtest6.c +141 -141
  39. package/dependencies/lmdb/libraries/liblmdb/mtest_enc.c +190 -190
  40. package/dependencies/lmdb/libraries/liblmdb/mtest_enc2.c +189 -189
  41. package/dependencies/lmdb/libraries/liblmdb/mtest_remap.c +177 -177
  42. package/dependencies/lmdb/libraries/liblmdb/sample-bdb.txt +73 -73
  43. package/dependencies/lmdb/libraries/liblmdb/sample-mdb.txt +62 -62
  44. package/dependencies/lmdb/libraries/liblmdb/tooltag +27 -27
  45. package/dependencies/lmdb-data-v1/libraries/liblmdb/CHANGES +266 -0
  46. package/dependencies/lmdb-data-v1/libraries/liblmdb/COPYRIGHT +20 -20
  47. package/dependencies/lmdb-data-v1/libraries/liblmdb/Doxyfile +1631 -1631
  48. package/dependencies/lmdb-data-v1/libraries/liblmdb/LICENSE +47 -47
  49. package/dependencies/lmdb-data-v1/libraries/liblmdb/intro.doc +192 -192
  50. package/dependencies/lmdb-data-v1/libraries/liblmdb/lmdb.h +1608 -1653
  51. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb.c +10320 -11359
  52. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_copy.1 +55 -61
  53. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_copy.c +82 -84
  54. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_dump.1 +75 -81
  55. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_dump.c +319 -319
  56. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_load.1 +84 -84
  57. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_load.c +496 -492
  58. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_stat.1 +64 -70
  59. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_stat.c +263 -264
  60. package/dependencies/lmdb-data-v1/libraries/liblmdb/midl.c +359 -421
  61. package/dependencies/lmdb-data-v1/libraries/liblmdb/midl.h +186 -200
  62. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest.c +177 -177
  63. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest2.c +124 -124
  64. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest3.c +133 -133
  65. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest4.c +168 -168
  66. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest5.c +135 -135
  67. package/dependencies/lmdb-data-v1/libraries/liblmdb/mtest6.c +141 -141
  68. package/dependencies/lmdb-data-v1/libraries/liblmdb/sample-bdb.txt +73 -73
  69. package/dependencies/lmdb-data-v1/libraries/liblmdb/sample-mdb.txt +62 -62
  70. package/dependencies/lmdb-data-v1/libraries/liblmdb/tooltag +22 -27
  71. package/dependencies/lz4/LICENSE +11 -11
  72. package/dependencies/lz4/lib/LICENSE +24 -24
  73. package/dependencies/lz4/lib/Makefile +225 -0
  74. package/dependencies/lz4/lib/README.md +169 -137
  75. package/dependencies/lz4/lib/dll/example/Makefile +63 -0
  76. package/dependencies/lz4/lib/dll/example/README.md +69 -69
  77. package/dependencies/lz4/lib/dll/liblz4.def +62 -62
  78. package/dependencies/lz4/lib/liblz4-dll.rc.in +35 -35
  79. package/dependencies/lz4/lib/liblz4.pc.in +14 -14
  80. package/dependencies/lz4/lib/lz4.c +2722 -2495
  81. package/dependencies/lz4/lib/lz4.h +842 -774
  82. package/dependencies/lz4/lib/lz4file.c +311 -0
  83. package/dependencies/lz4/lib/lz4file.h +93 -0
  84. package/dependencies/lz4/lib/lz4frame.c +2078 -1899
  85. package/dependencies/lz4/lib/lz4frame.h +692 -623
  86. package/dependencies/lz4/lib/lz4frame_static.h +47 -47
  87. package/dependencies/lz4/lib/lz4hc.c +1631 -1615
  88. package/dependencies/lz4/lib/lz4hc.h +413 -413
  89. package/dependencies/lz4/lib/xxhash.c +1030 -1030
  90. package/dependencies/lz4/lib/xxhash.h +328 -328
  91. package/dependencies/v8/v8-fast-api-calls-v16.h +790 -790
  92. package/dependencies/v8/v8-fast-api-calls.h +784 -888
  93. package/dist/index.cjs +1050 -584
  94. package/dist/index.cjs.map +1 -1
  95. package/index.d.cts +420 -0
  96. package/index.d.ts +450 -385
  97. package/index.js +38 -37
  98. package/keys.js +116 -102
  99. package/level.js +26 -26
  100. package/native.js +8 -5
  101. package/node-index.js +21 -17
  102. package/open.js +51 -17
  103. package/package.json +63 -21
  104. package/read.js +338 -95
  105. package/src/compression.cpp +12 -9
  106. package/src/cursor.cpp +82 -31
  107. package/src/dbi.cpp +78 -40
  108. package/src/env.cpp +336 -68
  109. package/src/lmdb-js.cpp +64 -64
  110. package/src/lmdb-js.h +83 -49
  111. package/src/misc.cpp +297 -28
  112. package/src/ordered-binary.cpp +46 -46
  113. package/src/txn.cpp +210 -257
  114. package/src/v8-functions.cpp +170 -166
  115. package/src/windows.c +34 -34
  116. package/src/writer.cpp +169 -84
  117. package/util/RangeIterable.js +112 -17
  118. package/util/set-optional-deps.cjs +14 -10
  119. package/util/when.js +8 -8
  120. package/write.js +145 -121
  121. package/dependencies/lmdb-data-v1/libraries/liblmdb/Makefile +0 -118
  122. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_drop.1 +0 -40
  123. package/dependencies/lmdb-data-v1/libraries/liblmdb/mdb_drop.c +0 -135
  124. package/rollup.config.js +0 -12
@@ -1,166 +1,170 @@
1
- #include "lmdb-js.h"
2
- #if ENABLE_V8_API
3
- #include <string.h>
4
- #include <stdio.h>
5
- #include <v8.h>
6
- #include <node.h>
7
-
8
- #if NODE_VERSION_AT_LEAST(16,6,0)
9
- #if NODE_VERSION_AT_LEAST(17,0,0)
10
- #include "../dependencies/v8/v8-fast-api-calls.h"
11
- #else
12
- #include "../dependencies/v8/v8-fast-api-calls-v16.h"
13
- #endif
14
- #endif
15
-
16
- using namespace v8;
17
- int32_t getByBinaryFast(Local<v8::Object> instance, double dwPointer, uint32_t keySize) {
18
- DbiWrap* dw = (DbiWrap*) (size_t) dwPointer;
19
- return dw->doGetByBinary(keySize);
20
- }
21
-
22
- //class NanWrap : public Nan::ObjectWrap {};
23
- void getByBinaryV8(const FunctionCallbackInfo<v8::Value>& info) {
24
- Isolate* isolate = Isolate::GetCurrent();
25
- DbiWrap* dw = (DbiWrap*) (size_t) info[0]->NumberValue(isolate->GetCurrentContext()).FromJust();
26
- info.GetReturnValue().Set(v8::Number::New(isolate, dw->doGetByBinary(info[1]->Uint32Value(isolate->GetCurrentContext()).FromJust())));
27
- }
28
- int32_t positionFast(Local<v8::Object> instance, double cwPointer, uint32_t flags, uint32_t offset, uint32_t keySize, uint64_t endKeyAddress) {
29
- CursorWrap* cw = (CursorWrap*) (size_t) cwPointer;
30
- DbiWrap* dw = cw->dw;
31
- dw->getFast = true;
32
- cw->flags = flags;
33
- return cw->doPosition(offset, keySize, endKeyAddress);
34
- }
35
- void positionV8(const FunctionCallbackInfo<v8::Value>& info) {
36
- Isolate* isolate = Isolate::GetCurrent();
37
- CursorWrap* cw = (CursorWrap*) (size_t) info[0]->NumberValue(isolate->GetCurrentContext()).FromJust();
38
- cw->flags = info[1]->Uint32Value(isolate->GetCurrentContext()).FromJust();
39
- uint32_t offset = info[2]->Uint32Value(isolate->GetCurrentContext()).FromJust();
40
- uint32_t keySize = info[3]->Uint32Value(isolate->GetCurrentContext()).FromJust();
41
- uint64_t endKeyAddress = info[4]->IntegerValue(isolate->GetCurrentContext()).FromJust();
42
- info.GetReturnValue().Set(v8::Number::New(isolate, cw->doPosition(offset, keySize, endKeyAddress)));
43
- }
44
-
45
- int32_t iterateFast(Local<v8::Object> instance, double cwPointer) {
46
- CursorWrap* cw = (CursorWrap*) (size_t) cwPointer;
47
- DbiWrap* dw = cw->dw;
48
- dw->getFast = true;
49
- MDB_val key, data;
50
- int rc = mdb_cursor_get(cw->cursor, &key, &data, cw->iteratingOp);
51
- return cw->returnEntry(rc, key, data);
52
- }
53
- void iterateV8(const FunctionCallbackInfo<v8::Value>& info) {
54
- Isolate* isolate = Isolate::GetCurrent();
55
- CursorWrap* cw = (CursorWrap*) (size_t) info[0]->NumberValue(isolate->GetCurrentContext()).FromJust();
56
- DbiWrap* dw = cw->dw;
57
- dw->getFast = true;
58
- MDB_val key, data;
59
- int rc = mdb_cursor_get(cw->cursor, &key, &data, cw->iteratingOp);
60
- info.GetReturnValue().Set(v8::Number::New(isolate, cw->returnEntry(rc, key, data)));
61
- }
62
-
63
- int32_t writeFast(Local<v8::Object> instance, double ewPointer, uint64_t instructionAddress) {
64
- EnvWrap* ew = (EnvWrap*) (size_t) ewPointer;
65
- int rc;
66
- if (instructionAddress)
67
- rc = WriteWorker::DoWrites(ew->writeTxn->txn, ew, (uint32_t*)instructionAddress, nullptr);
68
- else {
69
- pthread_cond_signal(ew->writingCond);
70
- rc = 0;
71
- }
72
- return rc;
73
- // if (rc && !(rc == MDB_KEYEXIST || rc == MDB_NOTFOUND))
74
- // options.fallback = true;
75
- }
76
- void writeV8(const v8::FunctionCallbackInfo<v8::Value>& info) {
77
- Isolate* isolate = Isolate::GetCurrent();
78
- EnvWrap* ew = (EnvWrap*) (size_t) info[0]->NumberValue(isolate->GetCurrentContext()).FromJust();
79
- uint64_t instructionAddress = info[1]->IntegerValue(isolate->GetCurrentContext()).FromJust();
80
- int rc;
81
- if (instructionAddress)
82
- rc = WriteWorker::DoWrites(ew->writeTxn->txn, ew, (uint32_t*)instructionAddress, nullptr);
83
- else {
84
- pthread_cond_signal(ew->writingCond);
85
- rc = 0;
86
- }
87
- info.GetReturnValue().Set(v8::Number::New(isolate, rc));
88
- }
89
-
90
- void resetTxnFast(Local<v8::Object> instance, double twPointer) {
91
- TxnWrap* tw = (TxnWrap*) (size_t) twPointer;
92
- tw->reset();
93
- }
94
-
95
- void resetTxnV8(const FunctionCallbackInfo<v8::Value>& info) {
96
- Isolate* isolate = Isolate::GetCurrent();
97
- TxnWrap* tw = (TxnWrap*) (size_t) info[0]->NumberValue(isolate->GetCurrentContext()).FromJust();
98
- tw->reset();
99
- }
100
-
101
- void noopFast(Local<v8::Object> instance) {
102
- }
103
-
104
- void noopV8(const FunctionCallbackInfo<v8::Value>& info) {
105
- }
106
-
107
-
108
- void clearKeptObjects(const FunctionCallbackInfo<v8::Value>& info) {
109
- #if NODE_VERSION_AT_LEAST(14,0,0)
110
- v8::Isolate::GetCurrent()->ClearKeptObjects();
111
- #endif
112
- }
113
- void detachBuffer(const FunctionCallbackInfo<v8::Value>& info) {
114
- #if NODE_VERSION_AT_LEAST(12,0,0)
115
- v8::Local<v8::ArrayBuffer> v8Buffer = Local<v8::ArrayBuffer>::Cast(info[0]);
116
- v8Buffer->Detach();
117
- #endif
118
- }
119
-
120
- #endif
121
-
122
-
123
- #define EXPORT_FAST(exportName, slowName, fastName) {\
124
- auto fast = CFunction::Make(fastName);\
125
- exports->Set(isolate->GetCurrentContext(), v8::String::NewFromUtf8(isolate, exportName, NewStringType::kInternalized).ToLocalChecked(), FunctionTemplate::New(\
126
- isolate, slowName, Local<v8::Value>(),\
127
- Local<Signature>(), 0, ConstructorBehavior::kThrow,\
128
- SideEffectType::kHasNoSideEffect, &fast)->GetFunction(isolate->GetCurrentContext()).ToLocalChecked());\
129
- }
130
- #define EXPORT_FUNCTION(exportName, funcName) \
131
- exports->Set(isolate->GetCurrentContext(), v8::String::NewFromUtf8(isolate, exportName, NewStringType::kInternalized).ToLocalChecked(), FunctionTemplate::New(\
132
- isolate, funcName, Local<v8::Value>(),\
133
- Local<Signature>(), 0, ConstructorBehavior::kThrow,\
134
- SideEffectType::kHasNoSideEffect)->GetFunction(isolate->GetCurrentContext()).ToLocalChecked());
135
-
136
- Napi::Value enableDirectV8(const Napi::CallbackInfo& info) {
137
- #if ENABLE_V8_API
138
- Isolate* isolate = Isolate::GetCurrent();
139
- napi_value exportsValue = info[0];
140
- Local<v8::Object> exports;
141
- memcpy((void*) &exports, (void*) &exportsValue, sizeof(exportsValue));
142
- #if NODE_VERSION_AT_LEAST(16,6,1)
143
- bool useFastApi;
144
- napi_get_value_bool(info.Env(), info[1], &useFastApi);
145
- if (useFastApi) {
146
- EXPORT_FAST("getByBinary", getByBinaryV8, getByBinaryFast);
147
- EXPORT_FAST("position", positionV8, positionFast);
148
- EXPORT_FAST("iterate", iterateV8, iterateFast);
149
- EXPORT_FAST("write", writeV8, writeFast);
150
- EXPORT_FAST("resetTxn", resetTxnV8, resetTxnFast);
151
- EXPORT_FAST("noop", noopV8, noopFast);
152
- } else {
153
- #endif
154
- EXPORT_FUNCTION("getByBinary", getByBinaryV8);
155
- EXPORT_FUNCTION("position", positionV8);
156
- EXPORT_FUNCTION("iterate", iterateV8);
157
- EXPORT_FUNCTION("write", writeV8);
158
- EXPORT_FUNCTION("noop", noopV8);
159
- #if NODE_VERSION_AT_LEAST(16,6,1)
160
- }
161
- #endif
162
- EXPORT_FUNCTION("clearKeptObjects", clearKeptObjects);
163
- EXPORT_FUNCTION("detachBuffer", detachBuffer);
164
- #endif
165
- return info.Env().Undefined();
166
- }
1
+ #include "lmdb-js.h"
2
+ #if ENABLE_V8_API
3
+ #include <string.h>
4
+ #include <stdio.h>
5
+ #include <v8.h>
6
+ #include <node.h>
7
+
8
+ #if NODE_VERSION_AT_LEAST(16,6,0)
9
+ #if NODE_VERSION_AT_LEAST(17,0,0)
10
+ #include "../dependencies/v8/v8-fast-api-calls.h"
11
+ #else
12
+ #include "../dependencies/v8/v8-fast-api-calls-v16.h"
13
+ #endif
14
+ #endif
15
+
16
+ using namespace v8;
17
+ int32_t getByBinaryFast(Local<v8::Object> instance, double dwPointer, uint32_t keySize, uint32_t ifNotTxnId, int64_t txnAddress) {
18
+ DbiWrap* dw = (DbiWrap*) (size_t) dwPointer;
19
+ return dw->doGetByBinary(keySize, ifNotTxnId, txnAddress);
20
+ }
21
+
22
+ //class NanWrap : public Nan::ObjectWrap {};
23
+ void getByBinaryV8(const FunctionCallbackInfo<v8::Value>& info) {
24
+ Isolate* isolate = Isolate::GetCurrent();
25
+ auto context = isolate->GetCurrentContext();
26
+ DbiWrap* dw = (DbiWrap*) (size_t) info[0]->NumberValue(context).FromJust();
27
+ info.GetReturnValue().Set(v8::Number::New(isolate, dw->doGetByBinary(
28
+ info[1]->Uint32Value(context).FromJust(),
29
+ info[2]->Uint32Value(context).FromJust(),
30
+ info[3]->NumberValue(context).FromJust())));
31
+ }
32
+ int32_t positionFast(Local<v8::Object> instance, double cwPointer, uint32_t flags, uint32_t offset, uint32_t keySize, uint64_t endKeyAddress) {
33
+ CursorWrap* cw = (CursorWrap*) (size_t) cwPointer;
34
+ DbiWrap* dw = cw->dw;
35
+ dw->getFast = true;
36
+ cw->flags = flags;
37
+ return cw->doPosition(offset, keySize, endKeyAddress);
38
+ }
39
+ void positionV8(const FunctionCallbackInfo<v8::Value>& info) {
40
+ Isolate* isolate = Isolate::GetCurrent();
41
+ CursorWrap* cw = (CursorWrap*) (size_t) info[0]->NumberValue(isolate->GetCurrentContext()).FromJust();
42
+ cw->flags = info[1]->Uint32Value(isolate->GetCurrentContext()).FromJust();
43
+ uint32_t offset = info[2]->Uint32Value(isolate->GetCurrentContext()).FromJust();
44
+ uint32_t keySize = info[3]->Uint32Value(isolate->GetCurrentContext()).FromJust();
45
+ uint64_t endKeyAddress = info[4]->IntegerValue(isolate->GetCurrentContext()).FromJust();
46
+ info.GetReturnValue().Set(v8::Number::New(isolate, cw->doPosition(offset, keySize, endKeyAddress)));
47
+ }
48
+
49
+ int32_t iterateFast(Local<v8::Object> instance, double cwPointer) {
50
+ CursorWrap* cw = (CursorWrap*) (size_t) cwPointer;
51
+ DbiWrap* dw = cw->dw;
52
+ dw->getFast = true;
53
+ MDB_val key, data;
54
+ int rc = mdb_cursor_get(cw->cursor, &key, &data, cw->iteratingOp);
55
+ return cw->returnEntry(rc, key, data);
56
+ }
57
+ void iterateV8(const FunctionCallbackInfo<v8::Value>& info) {
58
+ Isolate* isolate = Isolate::GetCurrent();
59
+ CursorWrap* cw = (CursorWrap*) (size_t) info[0]->NumberValue(isolate->GetCurrentContext()).FromJust();
60
+ DbiWrap* dw = cw->dw;
61
+ dw->getFast = true;
62
+ MDB_val key, data;
63
+ int rc = mdb_cursor_get(cw->cursor, &key, &data, cw->iteratingOp);
64
+ info.GetReturnValue().Set(v8::Number::New(isolate, cw->returnEntry(rc, key, data)));
65
+ }
66
+
67
+ int32_t writeFast(Local<v8::Object> instance, double ewPointer, uint64_t instructionAddress) {
68
+ EnvWrap* ew = (EnvWrap*) (size_t) ewPointer;
69
+ int rc;
70
+ if (instructionAddress)
71
+ rc = WriteWorker::DoWrites(ew->writeTxn->txn, ew, (uint32_t*)instructionAddress, nullptr);
72
+ else {
73
+ pthread_cond_signal(ew->writingCond);
74
+ rc = 0;
75
+ }
76
+ return rc;
77
+ // if (rc && !(rc == MDB_KEYEXIST || rc == MDB_NOTFOUND))
78
+ // options.fallback = true;
79
+ }
80
+ void writeV8(const v8::FunctionCallbackInfo<v8::Value>& info) {
81
+ Isolate* isolate = Isolate::GetCurrent();
82
+ EnvWrap* ew = (EnvWrap*) (size_t) info[0]->NumberValue(isolate->GetCurrentContext()).FromJust();
83
+ uint64_t instructionAddress = info[1]->IntegerValue(isolate->GetCurrentContext()).FromJust();
84
+ int rc;
85
+ if (instructionAddress)
86
+ rc = WriteWorker::DoWrites(ew->writeTxn->txn, ew, (uint32_t*)instructionAddress, nullptr);
87
+ else {
88
+ pthread_cond_signal(ew->writingCond);
89
+ rc = 0;
90
+ }
91
+ info.GetReturnValue().Set(v8::Number::New(isolate, rc));
92
+ }
93
+
94
+ void resetTxnFast(Local<v8::Object> instance, double twPointer) {
95
+ TxnWrap* tw = (TxnWrap*) (size_t) twPointer;
96
+ tw->reset();
97
+ }
98
+
99
+ void resetTxnV8(const FunctionCallbackInfo<v8::Value>& info) {
100
+ Isolate* isolate = Isolate::GetCurrent();
101
+ TxnWrap* tw = (TxnWrap*) (size_t) info[0]->NumberValue(isolate->GetCurrentContext()).FromJust();
102
+ tw->reset();
103
+ }
104
+
105
+ void noopFast(Local<v8::Object> instance) {
106
+ }
107
+
108
+ void noopV8(const FunctionCallbackInfo<v8::Value>& info) {
109
+ }
110
+
111
+
112
+ void clearKeptObjects(const FunctionCallbackInfo<v8::Value>& info) {
113
+ #if NODE_VERSION_AT_LEAST(14,0,0)
114
+ v8::Isolate::GetCurrent()->ClearKeptObjects();
115
+ #endif
116
+ }
117
+ void detachBuffer(const FunctionCallbackInfo<v8::Value>& info) {
118
+ #if NODE_VERSION_AT_LEAST(12,0,0)
119
+ v8::Local<v8::ArrayBuffer> v8Buffer = Local<v8::ArrayBuffer>::Cast(info[0]);
120
+ v8Buffer->Detach();
121
+ #endif
122
+ }
123
+
124
+ #endif
125
+
126
+
127
+ #define EXPORT_FAST(exportName, slowName, fastName) {\
128
+ auto fast = CFunction::Make(fastName);\
129
+ exports->Set(isolate->GetCurrentContext(), v8::String::NewFromUtf8(isolate, exportName, NewStringType::kInternalized).ToLocalChecked(), FunctionTemplate::New(\
130
+ isolate, slowName, Local<v8::Value>(),\
131
+ Local<Signature>(), 0, ConstructorBehavior::kThrow,\
132
+ SideEffectType::kHasNoSideEffect, &fast)->GetFunction(isolate->GetCurrentContext()).ToLocalChecked());\
133
+ }
134
+ #define EXPORT_FUNCTION(exportName, funcName) \
135
+ exports->Set(isolate->GetCurrentContext(), v8::String::NewFromUtf8(isolate, exportName, NewStringType::kInternalized).ToLocalChecked(), FunctionTemplate::New(\
136
+ isolate, funcName, Local<v8::Value>(),\
137
+ Local<Signature>(), 0, ConstructorBehavior::kThrow,\
138
+ SideEffectType::kHasNoSideEffect)->GetFunction(isolate->GetCurrentContext()).ToLocalChecked());
139
+ NAPI_FUNCTION(enableDirectV8) {
140
+ ARGS(2)
141
+ #if ENABLE_V8_API
142
+ Isolate* isolate = Isolate::GetCurrent();
143
+ napi_value exportsValue = args[0];
144
+ Local<v8::Object> exports;
145
+ memcpy((void*) &exports, (void*) &exportsValue, sizeof(exportsValue));
146
+ #if NODE_VERSION_AT_LEAST(16,6,1)
147
+ bool useFastApi;
148
+ napi_get_value_bool(env, args[1], &useFastApi);
149
+ if (useFastApi) {
150
+ EXPORT_FAST("getByBinary", getByBinaryV8, getByBinaryFast);
151
+ EXPORT_FAST("position", positionV8, positionFast);
152
+ EXPORT_FAST("iterate", iterateV8, iterateFast);
153
+ EXPORT_FAST("write", writeV8, writeFast);
154
+ EXPORT_FAST("resetTxn", resetTxnV8, resetTxnFast);
155
+ EXPORT_FAST("noop", noopV8, noopFast);
156
+ } else {
157
+ #endif
158
+ EXPORT_FUNCTION("getByBinary", getByBinaryV8);
159
+ EXPORT_FUNCTION("position", positionV8);
160
+ EXPORT_FUNCTION("iterate", iterateV8);
161
+ EXPORT_FUNCTION("write", writeV8);
162
+ EXPORT_FUNCTION("noop", noopV8);
163
+ #if NODE_VERSION_AT_LEAST(16,6,1)
164
+ }
165
+ #endif
166
+ EXPORT_FUNCTION("clearKeptObjects", clearKeptObjects);
167
+ EXPORT_FUNCTION("detachBuffer", detachBuffer);
168
+ #endif
169
+ RETURN_UNDEFINED
170
+ }
package/src/windows.c CHANGED
@@ -1,35 +1,35 @@
1
- #ifdef _WIN32
2
- #include <windows.h>
3
- #include <synchapi.h>
4
- static int initializeMemoryPriority = 1;
5
- static MEMORY_PRIORITY_INFORMATION lowMemPriority;
6
- static MEMORY_PRIORITY_INFORMATION normalMemPriority;
7
- int lowerMemoryPriority(int priority) {
8
- if (initializeMemoryPriority) {
9
- GetThreadInformation(GetCurrentThread(), ThreadMemoryPriority, &normalMemPriority, sizeof(normalMemPriority));
10
- // fprintf(stderr, "initialized memory %u setting to %u\n", normalMemPriority.MemoryPriority, priority);
11
- ZeroMemory(&lowMemPriority, sizeof(lowMemPriority));
12
- lowMemPriority.MemoryPriority = priority;
13
- initializeMemoryPriority = 0;
14
- }
15
- void* instruction;
16
- void* pointer;
17
- WaitOnAddress(instruction, pointer, 8, INFINITE);
18
-
19
- return SetThreadInformation(GetCurrentThread(), ThreadMemoryPriority, &lowMemPriority, sizeof(lowMemPriority));
20
- }
21
- int setProcessMemoryPriority(int priority) {
22
- if (initializeMemoryPriority) {
23
- GetThreadInformation(GetCurrentThread(), ThreadMemoryPriority, &normalMemPriority, sizeof(normalMemPriority));
24
- // fprintf(stderr, "initialized memory %u setting to %u\n", normalMemPriority.MemoryPriority, priority);
25
- ZeroMemory(&lowMemPriority, sizeof(lowMemPriority));
26
- lowMemPriority.MemoryPriority = priority;
27
- initializeMemoryPriority = 0;
28
- }
29
- return SetProcessInformation(GetCurrentProcess(), ProcessMemoryPriority, &lowMemPriority, sizeof(lowMemPriority));
30
- }
31
-
32
- int restoreMemoryPriority() {
33
- return SetThreadInformation(GetCurrentThread(), ThreadMemoryPriority, &normalMemPriority, sizeof(normalMemPriority));
34
- }
1
+ #ifdef _WIN32
2
+ #include <windows.h>
3
+ #include <synchapi.h>
4
+ static int initializeMemoryPriority = 1;
5
+ static MEMORY_PRIORITY_INFORMATION lowMemPriority;
6
+ static MEMORY_PRIORITY_INFORMATION normalMemPriority;
7
+ int lowerMemoryPriority(int priority) {
8
+ if (initializeMemoryPriority) {
9
+ GetThreadInformation(GetCurrentThread(), ThreadMemoryPriority, &normalMemPriority, sizeof(normalMemPriority));
10
+ // fprintf(stderr, "initialized memory %u setting to %u\n", normalMemPriority.MemoryPriority, priority);
11
+ ZeroMemory(&lowMemPriority, sizeof(lowMemPriority));
12
+ lowMemPriority.MemoryPriority = priority;
13
+ initializeMemoryPriority = 0;
14
+ }
15
+ void* instruction;
16
+ void* pointer;
17
+ WaitOnAddress(instruction, pointer, 8, INFINITE);
18
+
19
+ return SetThreadInformation(GetCurrentThread(), ThreadMemoryPriority, &lowMemPriority, sizeof(lowMemPriority));
20
+ }
21
+ int setProcessMemoryPriority(int priority) {
22
+ if (initializeMemoryPriority) {
23
+ GetThreadInformation(GetCurrentThread(), ThreadMemoryPriority, &normalMemPriority, sizeof(normalMemPriority));
24
+ // fprintf(stderr, "initialized memory %u setting to %u\n", normalMemPriority.MemoryPriority, priority);
25
+ ZeroMemory(&lowMemPriority, sizeof(lowMemPriority));
26
+ lowMemPriority.MemoryPriority = priority;
27
+ initializeMemoryPriority = 0;
28
+ }
29
+ return SetProcessInformation(GetCurrentProcess(), ProcessMemoryPriority, &lowMemPriority, sizeof(lowMemPriority));
30
+ }
31
+
32
+ int restoreMemoryPriority() {
33
+ return SetThreadInformation(GetCurrentThread(), ThreadMemoryPriority, &normalMemPriority, sizeof(normalMemPriority));
34
+ }
35
35
  #endif