| // Copyright 2014 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. |
| |
| #include "base/logging.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "content/browser/indexed_db/leveldb/leveldb_iterator_impl.h" |
| |
| static leveldb::Slice MakeSlice(const base::StringPiece& s) { |
| return leveldb::Slice(s.begin(), s.size()); |
| } |
| |
| static base::StringPiece MakeStringPiece(const leveldb::Slice& s) { |
| return base::StringPiece(s.data(), s.size()); |
| } |
| |
| namespace content { |
| |
| LevelDBIteratorImpl::~LevelDBIteratorImpl() { |
| } |
| |
| LevelDBIteratorImpl::LevelDBIteratorImpl(scoped_ptr<leveldb::Iterator> it) |
| : iterator_(it.Pass()) { |
| } |
| |
| void LevelDBIteratorImpl::CheckStatus() { |
| const leveldb::Status& s = iterator_->status(); |
| if (!s.ok()) |
| LOG(ERROR) << "LevelDB iterator error: " << s.ToString(); |
| } |
| |
| bool LevelDBIteratorImpl::IsValid() const { |
| return iterator_->Valid(); |
| } |
| |
| leveldb::Status LevelDBIteratorImpl::SeekToLast() { |
| iterator_->SeekToLast(); |
| CheckStatus(); |
| return iterator_->status(); |
| } |
| |
| leveldb::Status LevelDBIteratorImpl::Seek(const base::StringPiece& target) { |
| iterator_->Seek(MakeSlice(target)); |
| CheckStatus(); |
| return iterator_->status(); |
| } |
| |
| leveldb::Status LevelDBIteratorImpl::Next() { |
| DCHECK(IsValid()); |
| iterator_->Next(); |
| CheckStatus(); |
| return iterator_->status(); |
| } |
| |
| leveldb::Status LevelDBIteratorImpl::Prev() { |
| DCHECK(IsValid()); |
| iterator_->Prev(); |
| CheckStatus(); |
| return iterator_->status(); |
| } |
| |
| base::StringPiece LevelDBIteratorImpl::Key() const { |
| DCHECK(IsValid()); |
| return MakeStringPiece(iterator_->key()); |
| } |
| |
| base::StringPiece LevelDBIteratorImpl::Value() const { |
| DCHECK(IsValid()); |
| return MakeStringPiece(iterator_->value()); |
| } |
| |
| } // namespace content |