blob: 089928ab78c6ebd65354bff34ecd7e7e3a2c218f [file] [log] [blame]
// Copyright 2016 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 "components/leveldb/public/cpp/remote_iterator.h"
#include "components/leveldb/public/cpp/util.h"
namespace leveldb {
RemoteIterator::RemoteIterator(mojom::LevelDBDatabase* database,
const base::UnguessableToken& iterator)
: database_(database),
iterator_(iterator),
valid_(false),
status_(mojom::DatabaseError::OK) {}
RemoteIterator::~RemoteIterator() {
database_->ReleaseIterator(iterator_);
}
bool RemoteIterator::Valid() const {
return valid_;
}
void RemoteIterator::SeekToFirst() {
database_->IteratorSeekToFirst(iterator_, &valid_, &status_, &key_, &value_);
}
void RemoteIterator::SeekToLast() {
database_->IteratorSeekToLast(iterator_, &valid_, &status_, &key_, &value_);
}
void RemoteIterator::Seek(const Slice& target) {
database_->IteratorSeek(iterator_, GetVectorFor(target), &valid_, &status_,
&key_, &value_);
}
void RemoteIterator::Next() {
database_->IteratorNext(iterator_, &valid_, &status_, &key_, &value_);
}
void RemoteIterator::Prev() {
database_->IteratorPrev(iterator_, &valid_, &status_, &key_, &value_);
}
Slice RemoteIterator::key() const {
if (!key_)
return leveldb::Slice();
return GetSliceFor(*key_);
}
Slice RemoteIterator::value() const {
if (!value_)
return leveldb::Slice();
return GetSliceFor(*value_);
}
Status RemoteIterator::status() const {
return DatabaseErrorToStatus(status_, key(), value());
}
} // namespace leveldb