Commit 2ef383d7 authored by peria@chromium.org's avatar peria@chromium.org

[SyncFS] Support Delete operation on LevelDBWrapper::Iterator

After running Delete() method, the iterator is expected to index
the next entry, if exists.


BUG=347425
TEST=./unit_tests --gtest_filter="LevelDBWrapper*"

Review URL: https://codereview.chromium.org/461823002

Cr-Commit-Position: refs/heads/master@{#288991}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@288991 0039d316-1c4b-4281-b951-d872f2087c98
parent ebf5edcd
...@@ -67,6 +67,20 @@ void LevelDBWrapper::Iterator::Next() { ...@@ -67,6 +67,20 @@ void LevelDBWrapper::Iterator::Next() {
AdvanceIterators(); AdvanceIterators();
} }
void LevelDBWrapper::Iterator::Delete() {
DCHECK(Valid());
const std::string key_str = key().ToString();
Transaction deletion(DELETE_OPERATION, std::string());
map_iterator_ = db_->pending_.insert(map_iterator_,
std::make_pair(key_str, deletion));
// In case that |db_->pending_| already had an entry for the key, we have to
// update the value.
map_iterator_->second = deletion;
AdvanceIterators();
}
leveldb::Slice LevelDBWrapper::Iterator::key() { leveldb::Slice LevelDBWrapper::Iterator::key() {
DCHECK(Valid()); DCHECK(Valid());
......
...@@ -56,6 +56,7 @@ class LevelDBWrapper { ...@@ -56,6 +56,7 @@ class LevelDBWrapper {
void SeekToFirst(); void SeekToFirst();
void SeekToLast(); void SeekToLast();
void Next(); void Next();
void Delete();
leveldb::Slice key(); leveldb::Slice key();
leveldb::Slice value(); leveldb::Slice value();
......
...@@ -113,6 +113,21 @@ TEST_F(LevelDBWrapperTest, IteratorTest) { ...@@ -113,6 +113,21 @@ TEST_F(LevelDBWrapperTest, IteratorTest) {
itr->Next(); itr->Next();
EXPECT_FALSE(itr->Valid()); EXPECT_FALSE(itr->Valid());
itr->SeekToFirst();
EXPECT_TRUE(itr->Valid());
EXPECT_EQ("a", itr->key().ToString());
EXPECT_EQ("1", itr->value().ToString());
itr->Delete();
EXPECT_TRUE(itr->Valid());
EXPECT_EQ("ab", itr->key().ToString());
EXPECT_EQ("0", itr->value().ToString());
itr->SeekToFirst();
EXPECT_TRUE(itr->Valid());
EXPECT_EQ("ab", itr->key().ToString());
EXPECT_EQ("0", itr->value().ToString());
} }
TEST_F(LevelDBWrapperTest, Iterator2Test) { TEST_F(LevelDBWrapperTest, Iterator2Test) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment