@@ -543,7 +543,6 @@ struct Iterator {
543543 highWaterMark_(highWaterMark),
544544 dbIterator_(NULL ),
545545 count_(0 ),
546- target_(NULL ),
547546 seeking_(false ),
548547 landed_(false ),
549548 nexting_(false ),
@@ -558,7 +557,6 @@ struct Iterator {
558557
559558 ~Iterator () {
560559 assert (ended_);
561- ReleaseTarget ();
562560
563561 if (start_ != NULL ) delete start_;
564562 if (end_ != NULL ) delete end_;
@@ -570,16 +568,6 @@ struct Iterator {
570568 delete options_;
571569 }
572570
573- void ReleaseTarget () {
574- if (target_ != NULL ) {
575- if (!target_->empty ()) {
576- delete [] target_->data ();
577- }
578- delete target_;
579- target_ = NULL ;
580- }
581- }
582-
583571 void Attach (napi_ref ref) {
584572 ref_ = ref;
585573 database_->AttachIterator (id_, this );
@@ -684,21 +672,21 @@ struct Iterator {
684672 return false ;
685673 }
686674
687- bool OutOfRange (leveldb::Slice* target) {
688- if ((lt_ != NULL && target-> compare (*lt_) >= 0 ) ||
689- (lte_ != NULL && target-> compare (*lte_) > 0 ) ||
690- (start_ != NULL && reverse_ && target-> compare (*start_) > 0 )) {
675+ bool OutOfRange (leveldb::Slice& target) {
676+ if ((lt_ != NULL && target. compare (*lt_) >= 0 ) ||
677+ (lte_ != NULL && target. compare (*lte_) > 0 ) ||
678+ (start_ != NULL && reverse_ && target. compare (*start_) > 0 )) {
691679 return true ;
692680 }
693681
694682 if (end_ != NULL ) {
695- int d = target-> compare (*end_);
683+ int d = target. compare (*end_);
696684 if (reverse_ ? d < 0 : d > 0 ) return true ;
697685 }
698686
699- return ((gt_ != NULL && target-> compare (*gt_) <= 0 ) ||
700- (gte_ != NULL && target-> compare (*gte_) < 0 ) ||
701- (start_ != NULL && !reverse_ && target-> compare (*start_) < 0 ));
687+ return ((gt_ != NULL && target. compare (*gt_) <= 0 ) ||
688+ (gte_ != NULL && target. compare (*gte_) < 0 ) ||
689+ (start_ != NULL && !reverse_ && target. compare (*start_) < 0 ));
702690 }
703691
704692 bool IteratorNext (std::vector<std::pair<std::string, std::string> >& result) {
@@ -746,7 +734,6 @@ struct Iterator {
746734 uint32_t highWaterMark_;
747735 leveldb::Iterator* dbIterator_;
748736 int count_;
749- leveldb::Slice* target_;
750737 bool seeking_;
751738 bool landed_;
752739 bool nexting_;
@@ -1364,17 +1351,16 @@ NAPI_METHOD(iterator_seek) {
13641351 napi_throw_error (env, NULL , " iterator has ended" );
13651352 }
13661353
1367- iterator->ReleaseTarget ();
1368- iterator->target_ = new leveldb::Slice (ToSlice (env, argv[1 ]));
1354+ leveldb::Slice target = ToSlice (env, argv[1 ]);
13691355 iterator->GetIterator ();
13701356
13711357 leveldb::Iterator* dbIterator = iterator->dbIterator_ ;
1372- dbIterator->Seek (*iterator-> target_ );
1358+ dbIterator->Seek (target );
13731359
13741360 iterator->seeking_ = true ;
13751361 iterator->landed_ = false ;
13761362
1377- if (iterator->OutOfRange (iterator-> target_ )) {
1363+ if (iterator->OutOfRange (target )) {
13781364 if (iterator->reverse_ ) {
13791365 dbIterator->SeekToFirst ();
13801366 dbIterator->Prev ();
@@ -1384,7 +1370,7 @@ NAPI_METHOD(iterator_seek) {
13841370 }
13851371 }
13861372 else if (dbIterator->Valid ()) {
1387- int cmp = dbIterator->key ().compare (*iterator-> target_ );
1373+ int cmp = dbIterator->key ().compare (target );
13881374 if (cmp > 0 && iterator->reverse_ ) {
13891375 dbIterator->Prev ();
13901376 } else if (cmp < 0 && !iterator->reverse_ ) {
@@ -1397,7 +1383,7 @@ NAPI_METHOD(iterator_seek) {
13971383 dbIterator->SeekToFirst ();
13981384 }
13991385 if (dbIterator->Valid ()) {
1400- int cmp = dbIterator->key ().compare (*iterator-> target_ );
1386+ int cmp = dbIterator->key ().compare (target );
14011387 if (cmp > 0 && iterator->reverse_ ) {
14021388 dbIterator->SeekToFirst ();
14031389 dbIterator->Prev ();
@@ -1408,6 +1394,7 @@ NAPI_METHOD(iterator_seek) {
14081394 }
14091395 }
14101396
1397+ DisposeSliceBuffer (target);
14111398 NAPI_RETURN_UNDEFINED ();
14121399}
14131400
@@ -1469,7 +1456,6 @@ NAPI_METHOD(iterator_end) {
14691456 * for this function being a separate function pointer.
14701457 */
14711458void CheckEndCallback (Iterator* iterator) {
1472- iterator->ReleaseTarget ();
14731459 iterator->nexting_ = false ;
14741460 if (iterator->endWorker_ != NULL ) {
14751461 iterator->endWorker_ ->Queue ();
0 commit comments