@@ -149,22 +149,23 @@ Napi::Value read_double(const Napi::CallbackInfo &args) {
149149
150150Napi::Value scan_sync (const Napi::CallbackInfo &args) {
151151 Napi::Env env = args.Env ();
152- if (args.Length () < 3 ) {
152+ if (args.Length () < 4 ) {
153153 Napi::TypeError::New (env, " Wrong number of arguments" ).ThrowAsJavaScriptException ();
154154 return env.Null ();
155155 }
156156
157157 auto handle = reinterpret_cast <void *>(args[0 ].As <Napi::Number>().Int64Value ());
158158 auto signature_buffer = args[1 ].As <Napi::Uint8Array>();
159159 auto mask_buffer = args[2 ].As <Napi::Uint8Array>();
160+ auto non_zero_mask = args[3 ].As <Napi::Boolean>().Value ();
160161
161162 auto signature = std::vector<uint8_t >(signature_buffer.ByteLength ());
162163 memcpy (signature.data (), signature_buffer.Data (), signature_buffer.ByteLength ());
163164
164165 auto mask = std::vector<uint8_t >(mask_buffer.ByteLength ());
165166 memcpy (mask.data (), mask_buffer.Data (), mask_buffer.ByteLength ());
166167
167- auto result = memory::find_pattern (handle, signature, mask);
168+ auto result = memory::find_pattern (handle, signature, mask, non_zero_mask );
168169
169170 if (!result) {
170171 Napi::TypeError::New (env, " Couldn't find signature" ).ThrowAsJavaScriptException ();
@@ -193,10 +194,12 @@ Napi::Value batch_scan(const Napi::CallbackInfo &args) {
193194 auto iter_obj = pattern_array.Get (i).As <Napi::Object>();
194195 auto signature = iter_obj.Get (" signature" ).As <Napi::Uint8Array>();
195196 auto mask = iter_obj.Get (" mask" ).As <Napi::Uint8Array>();
197+ auto non_zero_mask = iter_obj.Get (" nonZeroMask" ).As <Napi::Boolean>().Value ();
196198
197199 pattern.index = i;
198200 pattern.signature = std::span<uint8_t >(reinterpret_cast <uint8_t *>(signature.Data ()), signature.ByteLength ());
199201 pattern.mask = std::span<uint8_t >(reinterpret_cast <uint8_t *>(mask.Data ()), mask.ByteLength ());
202+ pattern.non_zero_mask = non_zero_mask;
200203 pattern.found = false ;
201204
202205 patterns.push_back (pattern);
@@ -249,7 +252,7 @@ static bool scanning = false;
249252
250253Napi::Value scan (const Napi::CallbackInfo &args) {
251254 Napi::Env env = args.Env ();
252- if (args.Length () < 4 ) {
255+ if (args.Length () < 5 ) {
253256 Napi::TypeError::New (env, " Wrong number of arguments" ).ThrowAsJavaScriptException ();
254257 return env.Null ();
255258 }
@@ -258,6 +261,8 @@ Napi::Value scan(const Napi::CallbackInfo &args) {
258261 auto signature = args[1 ].As <Napi::Uint8Array>();
259262 auto mask = args[2 ].As <Napi::Uint8Array>();
260263 auto callback = Napi::ThreadSafeFunction::New (args.Env (), args[3 ].As <Napi::Function>(), " tsfn" , 0 , 1 );
264+ auto non_zero_mask = args[4 ].As <Napi::Boolean>().Value ();
265+
261266 auto signature_data = signature.Data ();
262267 auto signature_length = signature.ByteLength ();
263268 auto mask_data = mask.Data ();
@@ -267,14 +272,14 @@ Napi::Value scan(const Napi::CallbackInfo &args) {
267272 scanning = true ;
268273
269274 std::thread (
270- [handle, signature_data, signature_length, mask_data, mask_length](Napi::ThreadSafeFunction tsfn) {
275+ [handle, signature_data, signature_length, mask_data, mask_length, non_zero_mask ](Napi::ThreadSafeFunction tsfn) {
271276 auto signature = std::vector<uint8_t >(signature_length);
272277 memcpy (signature.data (), signature_data, signature_length);
273278
274279 auto mask = std::vector<uint8_t >(mask_length);
275280 memcpy (mask.data (), mask_data, mask_length);
276281
277- const auto result = memory::find_pattern (handle, signature, mask);
282+ const auto result = memory::find_pattern (handle, signature, mask, non_zero_mask );
278283 scanning = false ;
279284 tsfn.BlockingCall ([result, tsfn](Napi::Env env, Napi::Function jsCallback) {
280285 jsCallback.Call ({Napi::Number::From (env, result)});
0 commit comments