17 : comparator_(comparator),
21 direction_(kForward) {
22 for (
int i = 0; i < n; i++) {
23 children_[i].Set(children[i]);
32 return (current_ != NULL);
36 for (
int i = 0; i < n_; i++) {
37 children_[i].SeekToFirst();
40 direction_ = kForward;
44 for (
int i = 0; i < n_; i++) {
45 children_[i].SeekToLast();
48 direction_ = kReverse;
52 for (
int i = 0; i < n_; i++) {
53 children_[i].Seek(target);
56 direction_ = kForward;
67 if (direction_ != kForward) {
68 for (
int i = 0; i < n_; i++) {
70 if (child != current_) {
73 comparator_->Compare(key(), child->
key()) == 0) {
78 direction_ = kForward;
93 if (direction_ != kReverse) {
94 for (
int i = 0; i < n_; i++) {
96 if (child != current_) {
107 direction_ = kReverse;
116 return current_->key();
121 return current_->value();
126 for (
int i = 0; i < n_; i++) {
127 status = children_[i].status();
155 void MergingIterator::FindSmallest() {
157 for (
int i = 0; i < n_; i++) {
159 if (child->
Valid()) {
160 if (smallest == NULL) {
162 }
else if (comparator_->Compare(child->
key(), smallest->
key()) < 0) {
170 void MergingIterator::FindLargest() {
172 for (
int i = n_-1; i >= 0; i--) {
174 if (child->
Valid()) {
175 if (largest == NULL) {
177 }
else if (comparator_->Compare(child->
key(), largest->
key()) > 0) {
193 return new MergingIterator(cmp, list, n);
MergingIterator(const Comparator *comparator, Iterator **children, int n)
virtual void SeekToLast()
void Seek(const Slice &k)
virtual Status status() const
virtual void Seek(const Slice &target)
virtual ~MergingIterator()
const Comparator * comparator_
virtual bool Valid() const
virtual Slice key() const
Iterator * NewEmptyIterator()
IteratorWrapper * current_
Iterator * NewMergingIterator(const Comparator *cmp, Iterator **list, int n)
IteratorWrapper * children_
virtual void SeekToFirst()
virtual Slice value() const