pw_kvs: Move KeyDescriptor from iterator to Item
- Use a KeyDescriptor* instead of an index for consistency with other
KeyDescriptor uses.
- Move KeyDescriptor to the Item class, since Item is more closely
associated with the KeyDescriptor.
Change-Id: I0677bb7a5d6ef36708b93da5e02ff5de09ece686
diff --git a/pw_kvs/key_value_store.cc b/pw_kvs/key_value_store.cc
index 91b80d9..0282380 100644
--- a/pw_kvs/key_value_store.cc
+++ b/pw_kvs/key_value_store.cc
@@ -393,32 +393,30 @@
key_descriptor, KeyDescriptor::kDeleted, key, {});
}
+void KeyValueStore::Item::ReadKey() {
+ key_buffer_.fill('\0');
+
+ Entry entry;
+ if (Entry::Read(kvs_.partition_, descriptor_->address(), &entry).ok()) {
+ entry.ReadKey(key_buffer_);
+ }
+}
+
KeyValueStore::iterator& KeyValueStore::iterator::operator++() {
// Skip to the next entry that is valid (not deleted).
- while (++index_ < item_.kvs_.key_descriptors_.size() &&
- descriptor().deleted()) {
+ while (++item_.descriptor_ != item_.kvs_.key_descriptors_.end() &&
+ item_.descriptor_->deleted()) {
}
return *this;
}
-const KeyValueStore::Item& KeyValueStore::iterator::operator*() {
- std::memset(item_.key_buffer_.data(), 0, item_.key_buffer_.size());
-
- Entry entry;
- if (Entry::Read(item_.kvs_.partition_, descriptor().address(), &entry).ok()) {
- entry.ReadKey(item_.key_buffer_);
- }
-
- return item_;
-}
-
KeyValueStore::iterator KeyValueStore::begin() const {
- size_t i = 0;
+ const KeyDescriptor* descriptor = key_descriptors_.begin();
// Skip over any deleted entries at the start of the descriptor list.
- while (i < key_descriptors_.size() && key_descriptors_[i].deleted()) {
- i += 1;
+ while (descriptor != key_descriptors_.end() && descriptor->deleted()) {
+ ++descriptor;
}
- return iterator(*this, i);
+ return iterator(*this, descriptor);
}
// TODO(hepler): The valid entry count could be tracked in the KVS to avoid the