From affe641a1f78083ef45e7f34dc5e5914a0d7285e Mon Sep 17 00:00:00 2001 From: Eduardo Bart Date: Fri, 17 Aug 2012 18:19:51 -0300 Subject: [PATCH] Add remove function to stdext storages --- src/framework/stdext/dynamic_storage.h | 17 ++++++++++++++++- src/framework/stdext/packed_storage.h | 16 ++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/framework/stdext/dynamic_storage.h b/src/framework/stdext/dynamic_storage.h index d2a283a1..0eb38009 100644 --- a/src/framework/stdext/dynamic_storage.h +++ b/src/framework/stdext/dynamic_storage.h @@ -37,10 +37,25 @@ public: m_data.resize(k+1); m_data[k] = value; } + bool remove(const Key& k) { + if(m_data.size() < k) + return false; + if(m_data[k].empty()) + return false; + m_data[k] = any(); + return true; + } template T get(const Key& k) const { return has(k) ? any_cast(m_data[k]) : T(); } bool has(const Key& k) const { return k < m_data.size() && !m_data[k].empty(); } - std::size_t size() const { return m_data.size(); } + std::size_t size() const { + std::size_t count = 0; + for(std::size_t i=0;i bool { return pair.id == id; } ); + if(it == end) + return false; + int pos = it - begin; + auto tmp = new value_pair[m_size-1]; + std::copy(begin, begin + pos, tmp); + std::copy(begin + pos + 1, end, tmp + pos); + delete[] m_values; + m_values = tmp; + m_size--; + return true; + } + template T get(Key id) const { for(SizeType i=0;i