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 10 namespace autofill { 11 12 AutofillScanner::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 20 AutofillScanner::~AutofillScanner() { 21 } 22 23 void AutofillScanner::Advance() { 24 DCHECK(!IsEnd()); 25 ++cursor_; 26 } 27 28 const AutofillField* AutofillScanner::Cursor() const { 29 if (IsEnd()) { 30 NOTREACHED(); 31 return NULL; 32 } 33 34 return *cursor_; 35 } 36 37 bool AutofillScanner::IsEnd() const { 38 return cursor_ == end_; 39 } 40 41 void AutofillScanner::Rewind() { 42 DCHECK(saved_cursor_ != end_); 43 cursor_ = saved_cursor_; 44 saved_cursor_ = end_; 45 } 46 47 void AutofillScanner::RewindTo(size_t index) { 48 DCHECK(index < static_cast<size_t>(end_ - begin_)); 49 cursor_ = begin_ + index; 50 saved_cursor_ = end_; 51 } 52 53 size_t AutofillScanner::SaveCursor() { 54 saved_cursor_ = cursor_; 55 return static_cast<size_t>(cursor_ - begin_); 56 } 57 58 } // namespace autofill 59