#include "gn/deps_iterator.h"
#include "gn/target.h"
DepsIterator::DepsIterator() : current_index_(0) {
vect_stack_[0] = nullptr;
vect_stack_[1] = nullptr;
vect_stack_[2] = nullptr;
}
DepsIterator::DepsIterator(const LabelTargetVector* a,
const LabelTargetVector* b,
const LabelTargetVector* c)
: current_index_(0) {
vect_stack_[0] = a;
vect_stack_[1] = b;
vect_stack_[2] = c;
if (vect_stack_[0] && vect_stack_[0]->empty())
operator++();
}
DepsIterator& DepsIterator::operator++() {
DCHECK(vect_stack_[0]);
current_index_++;
if (current_index_ >= vect_stack_[0]->size()) {
vect_stack_[0] = vect_stack_[1];
vect_stack_[1] = vect_stack_[2];
vect_stack_[2] = nullptr;
current_index_ = 0;
if (vect_stack_[0] && vect_stack_[0]->empty())
operator++();
}
return *this;
}
DepsIteratorRange::DepsIteratorRange(const DepsIterator& b)
: begin_(b), end_() {}
DepsIteratorRange::~DepsIteratorRange() = default;