autofill_scanner.cc revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "components/autofill/core/browser/autofill_scanner.h"
6
7#include "base/logging.h"
8#include "components/autofill/core/browser/autofill_field.h"
9
10namespace autofill {
11
12AutofillScanner::AutofillScanner(
13    const std::vector<const AutofillField*>& fields)
14    : cursor_(fields.begin()),
15      saved_cursor_(fields.begin()),
16      begin_(fields.begin()),
17      end_(fields.end()) {
18}
19
20AutofillScanner::~AutofillScanner() {
21}
22
23void AutofillScanner::Advance() {
24  DCHECK(!IsEnd());
25  ++cursor_;
26}
27
28const AutofillField* AutofillScanner::Cursor() const {
29  if (IsEnd()) {
30    NOTREACHED();
31    return NULL;
32  }
33
34  return *cursor_;
35}
36
37bool AutofillScanner::IsEnd() const {
38  return cursor_ == end_;
39}
40
41void AutofillScanner::Rewind() {
42  DCHECK(saved_cursor_ != end_);
43  cursor_ = saved_cursor_;
44  saved_cursor_ = end_;
45}
46
47void AutofillScanner::RewindTo(size_t index) {
48  DCHECK(index < static_cast<size_t>(end_ - begin_));
49  cursor_ = begin_ + index;
50  saved_cursor_ = end_;
51}
52
53size_t AutofillScanner::SaveCursor() {
54  saved_cursor_ = cursor_;
55  return static_cast<size_t>(cursor_ - begin_);
56}
57
58}  // namespace autofill
59