Skip to content

Commit

Permalink
Use templates to eliminate extra classes
Browse files Browse the repository at this point in the history
  • Loading branch information
jgowdy committed May 11, 2024
1 parent 1dfe47f commit bd11e97
Showing 1 changed file with 12 additions and 37 deletions.
49 changes: 12 additions & 37 deletions src/asherah.cc
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
#ifdef USE_SCOPED_ALLOCATE_BUFFER
#include "scoped_allocate.h"
#endif
#include <napi.h>
#include <atomic>
#include <napi.h>

#ifndef NAPI_CPP_EXCEPTIONS
#error Support for C++ exceptions is required
Expand Down Expand Up @@ -294,8 +294,8 @@ class Asherah : public Napi::Addon<Asherah> {
CobhanBufferNapi input(env, input_value);

CobhanBufferNapi output(input.get_data_len_bytes());
auto worker = new DecryptFromJsonToBufferWorker(env, this, partition_id,
input, output);
auto worker = new DecryptFromJsonWorker<Napi::Buffer<unsigned char>>(
env, this, partition_id, input, output);
worker->Queue();
return worker->Promise();
} catch (const std::exception &e) {
Expand Down Expand Up @@ -375,8 +375,8 @@ class Asherah : public Napi::Addon<Asherah> {

CobhanBufferNapi output(input.get_data_len_bytes());

auto worker = new DecryptFromJsonToStringWorker(env, this, partition_id,
input, output);
auto worker = new DecryptFromJsonWorker<Napi::String>(
env, this, partition_id, input, output);
worker->Queue();

return worker->Promise();
Expand Down Expand Up @@ -573,6 +573,7 @@ class Asherah : public Napi::Addon<Asherah> {
CobhanBufferNapi output;
};

template <typename T>
class DecryptFromJsonWorker : public AsherahAsyncWorker<GoInt32> {
public:
DecryptFromJsonWorker(const Napi::Env &env, Asherah *instance,
Expand All @@ -582,48 +583,22 @@ class Asherah : public Napi::Addon<Asherah> {
partition_id(std::move(partition_id)), input(std::move(input)),
output(std::move(output)) {}

// extern GoInt32 DecryptFromJson(void* partitionIdPtr, void* jsonPtr,
// void* dataPtr);
GoInt32 ExecuteTask() override {
return DecryptFromJson(partition_id, input, output);
}

Napi::Value OnOKTask(Napi::Env &env) override {
T output_result;
asherah->EndDecryptFromJson(env, output, result, output_result);
return output_result;
}

protected:
CobhanBufferNapi partition_id;
CobhanBufferNapi input;
CobhanBufferNapi output;
};

class DecryptFromJsonToBufferWorker : public DecryptFromJsonWorker {
public:
DecryptFromJsonToBufferWorker(const Napi::Env &env, Asherah *instance,
CobhanBufferNapi &partition_id,
CobhanBufferNapi &input,
CobhanBufferNapi &output)
: DecryptFromJsonWorker(env, instance, partition_id, input, output) {}

Napi::Value OnOKTask(Napi::Env &env) override {
Napi::Buffer<unsigned char> output_buffer;
asherah->EndDecryptFromJson(env, output, result, output_buffer);
return output_buffer;
}
};

class DecryptFromJsonToStringWorker : public DecryptFromJsonWorker {
public:
DecryptFromJsonToStringWorker(const Napi::Env &env, Asherah *instance,
CobhanBufferNapi &partition_id,
CobhanBufferNapi &input,
CobhanBufferNapi &output)
: DecryptFromJsonWorker(env, instance, partition_id, input, output) {}

Napi::Value OnOKTask(Napi::Env &env) override {
Napi::String output_string;
asherah->EndDecryptFromJson(env, output, result, output_string);
return output_string;
}
};

class ShutdownAsherahWorker : public AsherahAsyncWorker<GoInt32> {
public:
using AsherahAsyncWorker::AsherahAsyncWorker;
Expand Down

0 comments on commit bd11e97

Please sign in to comment.