14 class MergingIterator :
public Iterator {
16 MergingIterator(
const Comparator* comparator, Iterator** children,
int n)
22 for (
int i = 0; i < n; i++) {
27 virtual ~MergingIterator() {
31 virtual bool Valid()
const {
35 virtual void SeekToFirst() {
36 for (
int i = 0; i <
n_; i++) {
43 virtual void SeekToLast() {
44 for (
int i = 0; i <
n_; i++) {
51 virtual void Seek(
const Slice& target) {
52 for (
int i = 0; i <
n_; i++) {
68 for (
int i = 0; i <
n_; i++) {
94 for (
int i = 0; i <
n_; i++) {
114 virtual Slice key()
const {
119 virtual Slice
value()
const {
124 virtual Status status()
const {
126 for (
int i = 0; i <
n_; i++) {
155 void MergingIterator::FindSmallest() {
156 IteratorWrapper* smallest = NULL;
157 for (
int i = 0; i <
n_; i++) {
159 if (child->Valid()) {
160 if (smallest == NULL) {
170 void MergingIterator::FindLargest() {
171 IteratorWrapper* largest = NULL;
172 for (
int i = n_-1; i >= 0; i--) {
174 if (child->Valid()) {
175 if (largest == NULL) {
193 return new MergingIterator(cmp, list, n);
IteratorWrapper * current_
const Comparator * comparator_
Iterator * NewEmptyIterator()
Iterator * NewMergingIterator(const Comparator *cmp, Iterator **list, int n)
IteratorWrapper * children_
virtual int Compare(const Slice &a, const Slice &b) const =0