Skip to content
This repository was archived by the owner on Dec 1, 2024. It is now read-only.

Commit d3453fb

Browse files
authored
Refactor: move CheckEndCallback to Iterator (#690)
1 parent b9513aa commit d3453fb

1 file changed

Lines changed: 14 additions & 24 deletions

File tree

binding.cc

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
*/
1818
struct Database;
1919
struct Iterator;
20-
struct EndWorker;
2120
static void iterator_end_do (napi_env env, Iterator* iterator, napi_value cb);
2221

2322
/**
@@ -575,6 +574,15 @@ struct Iterator {
575574
database_->ReleaseSnapshot(options_->snapshot);
576575
}
577576

577+
void CheckEndCallback () {
578+
nexting_ = false;
579+
580+
if (endWorker_ != NULL) {
581+
endWorker_->Queue();
582+
endWorker_ = NULL;
583+
}
584+
}
585+
578586
bool GetIterator () {
579587
if (dbIterator_ != NULL) return false;
580588

@@ -724,7 +732,7 @@ struct Iterator {
724732
bool ended_;
725733

726734
leveldb::ReadOptions* options_;
727-
EndWorker* endWorker_;
735+
BaseWorker* endWorker_;
728736

729737
private:
730738
napi_ref ref_;
@@ -1385,30 +1393,16 @@ NAPI_METHOD(iterator_end) {
13851393
NAPI_RETURN_UNDEFINED();
13861394
}
13871395

1388-
/**
1389-
* TODO Move this to Iterator. There isn't any reason
1390-
* for this function being a separate function pointer.
1391-
*/
1392-
void CheckEndCallback (Iterator* iterator) {
1393-
iterator->nexting_ = false;
1394-
if (iterator->endWorker_ != NULL) {
1395-
iterator->endWorker_->Queue();
1396-
iterator->endWorker_ = NULL;
1397-
}
1398-
}
1399-
14001396
/**
14011397
* Worker class for nexting an iterator.
14021398
*/
14031399
struct NextWorker final : public BaseWorker {
14041400
NextWorker (napi_env env,
14051401
Iterator* iterator,
1406-
napi_value callback,
1407-
void (*localCallback)(Iterator*))
1402+
napi_value callback)
14081403
: BaseWorker(env, iterator->database_, callback,
14091404
"leveldown.iterator.next"),
1410-
iterator_(iterator),
1411-
localCallback_(localCallback) {}
1405+
iterator_(iterator) {}
14121406

14131407
~NextWorker () {}
14141408

@@ -1449,8 +1443,7 @@ struct NextWorker final : public BaseWorker {
14491443
}
14501444

14511445
// clean up & handle the next/end state
1452-
// TODO this should just do iterator_->CheckEndCallback();
1453-
localCallback_(iterator_);
1446+
iterator_->CheckEndCallback();
14541447

14551448
napi_value argv[3];
14561449
napi_get_null(env_, &argv[0]);
@@ -1462,8 +1455,6 @@ struct NextWorker final : public BaseWorker {
14621455
}
14631456

14641457
Iterator* iterator_;
1465-
// TODO why do we need a function pointer for this?
1466-
void (*localCallback_)(Iterator*);
14671458
std::vector<std::pair<std::string, std::string> > result_;
14681459
bool ok_;
14691460
};
@@ -1484,8 +1475,7 @@ NAPI_METHOD(iterator_next) {
14841475
NAPI_RETURN_UNDEFINED();
14851476
}
14861477

1487-
NextWorker* worker = new NextWorker(env, iterator, callback,
1488-
CheckEndCallback);
1478+
NextWorker* worker = new NextWorker(env, iterator, callback);
14891479
iterator->nexting_ = true;
14901480
worker->Queue();
14911481

0 commit comments

Comments
 (0)