| Index: chrome/browser/sync/util/row_iterator.h
|
| diff --git a/chrome/browser/sync/util/row_iterator.h b/chrome/browser/sync/util/row_iterator.h
|
| deleted file mode 100644
|
| index 73748ee4b071e3ed9c61dc6b6d2abec534a0fe8b..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/sync/util/row_iterator.h
|
| +++ /dev/null
|
| @@ -1,122 +0,0 @@
|
| -// Copyright (c) 2009 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.
|
| -
|
| -// A handy type for iterating through query results.
|
| -//
|
| -// Just define your Traits type with
|
| -//
|
| -// RowType
|
| -// Extract(statement*, RowType);
|
| -//
|
| -// and then pass an sqlite3_stmt into the constructor for begin,
|
| -// and use the no-arg constructor for an end iterator. Ex:
|
| -//
|
| -// for (RowIterator<SomeTraits> i(statement), end; i != end; ++i)
|
| -// ...
|
| -
|
| -#ifndef CHROME_BROWSER_SYNC_UTIL_ROW_ITERATOR_H_
|
| -#define CHROME_BROWSER_SYNC_UTIL_ROW_ITERATOR_H_
|
| -
|
| -#include "base/logging.h"
|
| -#include "third_party/sqlite/preprocessed/sqlite3.h"
|
| -
|
| -template <typename ColumnType, int index = 0>
|
| -struct SingleColumnTraits {
|
| - typedef ColumnType RowType;
|
| - inline void Extract(sqlite3_stmt* statement, ColumnType* x) const {
|
| - GetColumn(statement, index, x);
|
| - }
|
| -};
|
| -
|
| -template <typename RowTraits>
|
| -class RowIterator : public std::iterator<std::input_iterator_tag,
|
| - const typename RowTraits::RowType> {
|
| - public:
|
| - typedef typename RowTraits::RowType RowType;
|
| - // Statement must have been prepared, but not yet stepped:
|
| - RowIterator(sqlite3_stmt* statement, RowTraits traits = RowTraits()) {
|
| - kernel_ = new Kernel;
|
| - kernel_->done = false;
|
| - kernel_->refcount = 1;
|
| - kernel_->statement = statement;
|
| - kernel_->row_traits = traits;
|
| - ++(*this);
|
| - }
|
| - RowIterator() : kernel_(NULL) { } // creates end iterator
|
| -
|
| - RowIterator(const RowIterator& i)
|
| - : kernel_(NULL) {
|
| - *this = i;
|
| - }
|
| -
|
| - ~RowIterator() {
|
| - if (kernel_ && 0 == --(kernel_->refcount)) {
|
| - sqlite3_finalize(kernel_->statement);
|
| - delete kernel_;
|
| - }
|
| - }
|
| -
|
| - RowIterator& operator = (const RowIterator& i) {
|
| - if (kernel_ && (0 == --(kernel_->refcount))) {
|
| - sqlite3_finalize(kernel_->statement);
|
| - delete kernel_;
|
| - }
|
| - kernel_ = i.kernel_;
|
| - if (kernel_)
|
| - kernel_->refcount += 1;
|
| - return *this;
|
| - }
|
| -
|
| - RowIterator operator ++(int) {
|
| - RowIterator i(*this);
|
| - return ++i;
|
| - }
|
| -
|
| - RowIterator& operator ++() {
|
| - DCHECK(NULL != kernel_);
|
| - if (SQLITE_ROW == sqlite3_step(kernel_->statement)) {
|
| - kernel_->row_traits.Extract(kernel_->statement, &kernel_->row);
|
| - } else {
|
| - kernel_->done = true;
|
| - }
|
| - return *this;
|
| - }
|
| -
|
| - const RowType& operator *() const {
|
| - return *(operator -> ());
|
| - }
|
| -
|
| - const RowType* operator ->() const {
|
| - DCHECK(NULL != kernel_);
|
| - DCHECK(!kernel_->done);
|
| - return &(kernel_->row);
|
| - }
|
| -
|
| - bool operator == (const RowIterator& i) const {
|
| - if (kernel_ == i.kernel_)
|
| - return true;
|
| - if (NULL == kernel_ && i.kernel_->done)
|
| - return true;
|
| - if (NULL == i.kernel_ && kernel_->done)
|
| - return true;
|
| - return false;
|
| - }
|
| -
|
| - bool operator != (const RowIterator& i) const {
|
| - return !(*this == i);
|
| - }
|
| -
|
| - protected:
|
| - struct Kernel {
|
| - int refcount;
|
| - bool done;
|
| - RowType row;
|
| - sqlite3_stmt* statement;
|
| - RowTraits row_traits;
|
| - };
|
| -
|
| - Kernel* kernel_;
|
| -};
|
| -
|
| -#endif // CHROME_BROWSER_SYNC_UTIL_ROW_ITERATOR_H_
|
|
|