1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_scanner.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_field.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill {
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciAutofillScanner::AutofillScanner(std::vector<AutofillField*>& fields)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : cursor_(fields.begin()),
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      saved_cursor_(fields.begin()),
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      begin_(fields.begin()),
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      end_(fields.end()) {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AutofillScanner::~AutofillScanner() {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutofillScanner::Advance() {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(!IsEnd());
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ++cursor_;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciAutofillField* AutofillScanner::Cursor() const {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (IsEnd()) {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NOTREACHED();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return *cursor_;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool AutofillScanner::IsEnd() const {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return cursor_ == end_;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutofillScanner::Rewind() {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(saved_cursor_ != end_);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cursor_ = saved_cursor_;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  saved_cursor_ = end_;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AutofillScanner::RewindTo(size_t index) {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(index < static_cast<size_t>(end_ - begin_));
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cursor_ = begin_ + index;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  saved_cursor_ = end_;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)size_t AutofillScanner::SaveCursor() {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  saved_cursor_ = cursor_;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return static_cast<size_t>(cursor_ - begin_);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace autofill
58