From f6576b18f7e11363df2a11e076009ce1193dd008 Mon Sep 17 00:00:00 2001 From: Peter Johnson Date: Wed, 29 Jul 2015 20:33:13 -0700 Subject: [PATCH] Storage: Add more Dispatcher accessors. --- src/Storage.cpp | 19 ++++++++++++++++--- src/Storage.h | 8 +++++--- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/Storage.cpp b/src/Storage.cpp index b516c866b0..6a943b0530 100644 --- a/src/Storage.cpp +++ b/src/Storage.cpp @@ -23,9 +23,8 @@ Storage::Storage() { Storage::~Storage() {} -std::shared_ptr Storage::CreateEntry(StringRef name, - std::shared_ptr value, - unsigned int flags) { +std::shared_ptr Storage::DispatchCreateEntry( + StringRef name, std::shared_ptr value, unsigned int flags) { std::lock_guard lock(m_mutex); auto& entry = m_entries[name]; if (!entry) entry = std::make_shared(name); @@ -34,6 +33,20 @@ std::shared_ptr Storage::CreateEntry(StringRef name, return entry; } +void Storage::DispatchDeleteEntry(StringRef name) { + std::lock_guard lock(m_mutex); + auto i = m_entries.find(name); + if (i == m_entries.end()) return; + auto entry = i->getValue(); + m_entries.erase(i); // erase from map +} + +void Storage::DispatchDeleteAllEntries() { + std::lock_guard lock(m_mutex); + if (m_entries.empty()) return; + m_entries.clear(); +} + void Storage::GetUpdates(UpdateMap* updates, bool* delete_all) { std::lock_guard lock(m_mutex); m_updates.swap(*updates); diff --git a/src/Storage.h b/src/Storage.h index 4878779e45..452dac09c8 100644 --- a/src/Storage.h +++ b/src/Storage.h @@ -60,6 +60,7 @@ class StorageEntry { SequenceNumber seq_num() const { return m_seq_num; } void set_seq_num(SequenceNumber seq_num) { m_seq_num = seq_num; } + SequenceNumber seq_num_inc() { return ++m_seq_num; } private: // These variables are accessed by both Dispatcher and user, so must use @@ -109,9 +110,10 @@ class Storage { std::shared_ptr FindEntry(StringRef name) const; // Accessors required by Dispatcher. - std::shared_ptr CreateEntry(StringRef name, - std::shared_ptr value, - unsigned int flags); + std::shared_ptr DispatchCreateEntry( + StringRef name, std::shared_ptr value, unsigned int flags); + void DispatchDeleteEntry(StringRef name); + void DispatchDeleteAllEntries(); void GetUpdates(UpdateMap* updates, bool* delete_all); std::mutex& mutex() { return m_mutex; }