Skip to content

Commit d6437b4

Browse files
authored
Refactor some pointer usage (#25)
1 parent 20f4a34 commit d6437b4

File tree

1 file changed

+29
-33
lines changed

1 file changed

+29
-33
lines changed

binding.cc

Lines changed: 29 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -271,20 +271,20 @@ static std::string* RangeOption (napi_env env, napi_value opts, const char* name
271271
/**
272272
* Converts an array containing Buffer or string keys to a vector.
273273
*/
274-
static std::vector<std::string>* KeyArray (napi_env env, napi_value arr) {
274+
static std::vector<std::string> KeyArray (napi_env env, napi_value arr) {
275275
uint32_t length;
276-
std::vector<std::string>* result = new std::vector<std::string>();
276+
std::vector<std::string> result;
277277

278278
if (napi_get_array_length(env, arr, &length) == napi_ok) {
279-
result->reserve(length);
279+
result.reserve(length);
280280

281281
for (uint32_t i = 0; i < length; i++) {
282282
napi_value element;
283283

284284
if (napi_get_element(env, arr, i, &element) == napi_ok &&
285285
StringOrBufferLength(env, element) >= 0) {
286286
LD_STRING_OR_BUFFER_TO_COPY(env, element, to);
287-
result->emplace_back(toCh_, toSz_);
287+
result.emplace_back(toCh_, toSz_);
288288
delete [] toCh_;
289289
}
290290
}
@@ -318,36 +318,36 @@ enum Mode {
318318
* Helper struct for caching and converting a key-value pair to napi_values.
319319
*/
320320
struct Entry {
321-
Entry (const leveldb::Slice* key, const leveldb::Slice* value)
322-
: key_(key->data(), key->size()),
323-
value_(value->data(), value->size()) {}
321+
Entry (const leveldb::Slice& key, const leveldb::Slice& value)
322+
: key_(key.data(), key.size()),
323+
value_(value.data(), value.size()) {}
324324

325-
void ConvertByMode (napi_env env, Mode mode, const bool keyAsBuffer, const bool valueAsBuffer, napi_value* result) {
325+
void ConvertByMode (napi_env env, Mode mode, const bool keyAsBuffer, const bool valueAsBuffer, napi_value& result) {
326326
if (mode == Mode::entries) {
327-
napi_create_array_with_length(env, 2, result);
327+
napi_create_array_with_length(env, 2, &result);
328328

329329
napi_value keyElement;
330330
napi_value valueElement;
331331

332-
Convert(env, &key_, keyAsBuffer, &keyElement);
333-
Convert(env, &value_, valueAsBuffer, &valueElement);
332+
Convert(env, &key_, keyAsBuffer, keyElement);
333+
Convert(env, &value_, valueAsBuffer, valueElement);
334334

335-
napi_set_element(env, *result, 0, keyElement);
336-
napi_set_element(env, *result, 1, valueElement);
335+
napi_set_element(env, result, 0, keyElement);
336+
napi_set_element(env, result, 1, valueElement);
337337
} else if (mode == Mode::keys) {
338338
Convert(env, &key_, keyAsBuffer, result);
339339
} else {
340340
Convert(env, &value_, valueAsBuffer, result);
341341
}
342342
}
343343

344-
static void Convert (napi_env env, const std::string* s, const bool asBuffer, napi_value* result) {
344+
static void Convert (napi_env env, const std::string* s, const bool asBuffer, napi_value& result) {
345345
if (s == NULL) {
346-
napi_get_undefined(env, result);
346+
napi_get_undefined(env, &result);
347347
} else if (asBuffer) {
348-
napi_create_buffer_copy(env, s->size(), s->data(), NULL, result);
348+
napi_create_buffer_copy(env, s->size(), s->data(), NULL, &result);
349349
} else {
350-
napi_create_string_utf8(env, s->data(), s->size(), result);
350+
napi_create_string_utf8(env, s->data(), s->size(), &result);
351351
}
352352
}
353353

@@ -874,15 +874,15 @@ struct Iterator final : public BaseIterator {
874874
if (keys_ && values_) {
875875
leveldb::Slice k = CurrentKey();
876876
leveldb::Slice v = CurrentValue();
877-
cache_.emplace_back(&k, &v);
877+
cache_.emplace_back(k, v);
878878
bytesRead += k.size() + v.size();
879879
} else if (keys_) {
880880
leveldb::Slice k = CurrentKey();
881-
cache_.emplace_back(&k, &empty);
881+
cache_.emplace_back(k, empty);
882882
bytesRead += k.size();
883883
} else if (values_) {
884884
leveldb::Slice v = CurrentValue();
885-
cache_.emplace_back(&empty, &v);
885+
cache_.emplace_back(empty, v);
886886
bytesRead += v.size();
887887
}
888888

@@ -1170,7 +1170,7 @@ struct GetWorker final : public PriorityWorker {
11701170
void HandleOKCallback (napi_env env, napi_value callback) override {
11711171
napi_value argv[2];
11721172
napi_get_null(env, &argv[0]);
1173-
Entry::Convert(env, &value_, asBuffer_, &argv[1]);
1173+
Entry::Convert(env, &value_, asBuffer_, argv[1]);
11741174
CallFunction(env, callback, 2, argv);
11751175
}
11761176

@@ -1207,24 +1207,20 @@ NAPI_METHOD(db_get) {
12071207
struct GetManyWorker final : public PriorityWorker {
12081208
GetManyWorker (napi_env env,
12091209
Database* database,
1210-
const std::vector<std::string>* keys,
1210+
std::vector<std::string> keys,
12111211
napi_value callback,
12121212
const bool valueAsBuffer,
12131213
const bool fillCache)
12141214
: PriorityWorker(env, database, callback, "classic_level.get.many"),
1215-
keys_(keys), valueAsBuffer_(valueAsBuffer) {
1215+
keys_(std::move(keys)), valueAsBuffer_(valueAsBuffer) {
12161216
options_.fill_cache = fillCache;
12171217
options_.snapshot = database->NewSnapshot();
12181218
}
12191219

1220-
~GetManyWorker() {
1221-
delete keys_;
1222-
}
1223-
12241220
void DoExecute () override {
1225-
cache_.reserve(keys_->size());
1221+
cache_.reserve(keys_.size());
12261222

1227-
for (const std::string& key: *keys_) {
1223+
for (const std::string& key: keys_) {
12281224
std::string* value = new std::string();
12291225
leveldb::Status status = database_->Get(options_, key, *value);
12301226

@@ -1254,7 +1250,7 @@ struct GetManyWorker final : public PriorityWorker {
12541250
for (size_t idx = 0; idx < size; idx++) {
12551251
std::string* value = cache_[idx];
12561252
napi_value element;
1257-
Entry::Convert(env, value, valueAsBuffer_, &element);
1253+
Entry::Convert(env, value, valueAsBuffer_, element);
12581254
napi_set_element(env, array, static_cast<uint32_t>(idx), element);
12591255
if (value != NULL) delete value;
12601256
}
@@ -1267,7 +1263,7 @@ struct GetManyWorker final : public PriorityWorker {
12671263

12681264
private:
12691265
leveldb::ReadOptions options_;
1270-
const std::vector<std::string>* keys_;
1266+
const std::vector<std::string> keys_;
12711267
const bool valueAsBuffer_;
12721268
std::vector<std::string*> cache_;
12731269
};
@@ -1279,7 +1275,7 @@ NAPI_METHOD(db_get_many) {
12791275
NAPI_ARGV(4);
12801276
NAPI_DB_CONTEXT();
12811277

1282-
const std::vector<std::string>* keys = KeyArray(env, argv[1]);
1278+
const auto keys = KeyArray(env, argv[1]);
12831279
napi_value options = argv[2];
12841280
const bool asBuffer = EncodingIsBuffer(env, options, "valueEncoding");
12851281
const bool fillCache = BooleanProperty(env, options, "fillCache", true);
@@ -1766,7 +1762,7 @@ struct NextWorker final : public BaseWorker {
17661762

17671763
for (uint32_t idx = 0; idx < size; idx++) {
17681764
napi_value element;
1769-
iterator_->cache_[idx].ConvertByMode(env, Mode::entries, kab, vab, &element);
1765+
iterator_->cache_[idx].ConvertByMode(env, Mode::entries, kab, vab, element);
17701766
napi_set_element(env, jsArray, idx, element);
17711767
}
17721768

0 commit comments

Comments
 (0)