blob: 857a7b8987fb87c41fab1471e9de0a52708406bb [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/autofill/core/browser/autofill_scanner.h"
#include "base/logging.h"
#include "components/autofill/core/browser/autofill_field.h"
namespace autofill {
AutofillScanner::AutofillScanner(const std::vector<AutofillField*>& fields) {
Init(fields);
}
AutofillScanner::AutofillScanner(
const std::vector<std::unique_ptr<AutofillField>>& fields) {
for (const auto& field : fields)
non_owning_.push_back(field.get());
Init(non_owning_);
}
AutofillScanner::~AutofillScanner() {
}
void AutofillScanner::Advance() {
DCHECK(!IsEnd());
++cursor_;
}
AutofillField* AutofillScanner::Cursor() const {
if (IsEnd()) {
NOTREACHED();
return nullptr;
}
return *cursor_;
}
bool AutofillScanner::IsEnd() const {
return cursor_ == end_;
}
void AutofillScanner::Rewind() {
DCHECK(saved_cursor_ != end_);
cursor_ = saved_cursor_;
saved_cursor_ = end_;
}
void AutofillScanner::RewindTo(size_t index) {
DCHECK(index < static_cast<size_t>(end_ - begin_));
cursor_ = begin_ + index;
saved_cursor_ = end_;
}
size_t AutofillScanner::SaveCursor() {
saved_cursor_ = cursor_;
return static_cast<size_t>(cursor_ - begin_);
}
void AutofillScanner::Init(const std::vector<AutofillField*>& fields) {
cursor_ = fields.begin();
saved_cursor_ = fields.begin();
begin_ = fields.begin();
end_ = fields.end();
}
} // namespace autofill