|  | // 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. | 
|  |  | 
|  | #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_SCANNER_H_ | 
|  | #define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_SCANNER_H_ | 
|  |  | 
|  | #include <vector> | 
|  |  | 
|  | #include "base/basictypes.h" | 
|  | #include "base/strings/string16.h" | 
|  |  | 
|  | namespace autofill { | 
|  |  | 
|  | class AutofillField; | 
|  |  | 
|  | // A helper class for parsing a stream of |AutofillField|'s with lookahead. | 
|  | class AutofillScanner { | 
|  | public: | 
|  | explicit AutofillScanner(const std::vector<const AutofillField*>& fields); | 
|  | ~AutofillScanner(); | 
|  |  | 
|  | // Advances the cursor by one step, if possible. | 
|  | void Advance(); | 
|  |  | 
|  | // Returns the current field in the stream, or |NULL| if there are no more | 
|  | // fields in the stream. | 
|  | const AutofillField* Cursor() const; | 
|  |  | 
|  | // Returns |true| if the cursor has reached the end of the stream. | 
|  | bool IsEnd() const; | 
|  |  | 
|  | // Restores the most recently saved cursor. See also |SaveCursor()|. | 
|  | void Rewind(); | 
|  |  | 
|  | // Repositions the cursor to the specified |index|. See also |SaveCursor()|. | 
|  | void RewindTo(size_t index); | 
|  |  | 
|  | // Saves and returns the current cursor position. See also |Rewind()| and | 
|  | // |RewindTo()|. | 
|  | size_t SaveCursor(); | 
|  |  | 
|  | private: | 
|  | // Indicates the current position in the stream, represented as a vector. | 
|  | std::vector<const AutofillField*>::const_iterator cursor_; | 
|  |  | 
|  | // The most recently saved cursor. | 
|  | std::vector<const AutofillField*>::const_iterator saved_cursor_; | 
|  |  | 
|  | // The beginning pointer for the stream. | 
|  | const std::vector<const AutofillField*>::const_iterator begin_; | 
|  |  | 
|  | // The past-the-end pointer for the stream. | 
|  | const std::vector<const AutofillField*>::const_iterator end_; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(AutofillScanner); | 
|  | }; | 
|  |  | 
|  | }  // namespace autofill | 
|  |  | 
|  | #endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_SCANNER_H_ |