1717 */
1818struct Database ;
1919struct Iterator ;
20- struct EndWorker ;
2120static 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
729737private:
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 */
14031399struct 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