diff options
author | chai <chaifix@163.com> | 2019-08-14 22:50:43 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-08-14 22:50:43 +0800 |
commit | 15740faf9fe9fe4be08965098bbf2947e096aeeb (patch) | |
tree | a730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Utilities/delayed_set.h |
Diffstat (limited to 'Runtime/Utilities/delayed_set.h')
-rw-r--r-- | Runtime/Utilities/delayed_set.h | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/Runtime/Utilities/delayed_set.h b/Runtime/Utilities/delayed_set.h new file mode 100644 index 0000000..cdb8fd1 --- /dev/null +++ b/Runtime/Utilities/delayed_set.h @@ -0,0 +1,45 @@ +#ifndef DELAYED_SET_H +#define DELAYED_SET_H + +#include <set> +#include <vector> +#include "MemoryPool.h" + +template <class T, class SetType = std::set<T, std::less<T> , memory_pool<T> > > +class delayed_set : public SetType { + typedef typename std::vector<std::pair<bool, T> > delay_container; + delay_container m_Delayed; + + public: + + bool is_inserted (const T& object) + { + typename delay_container::reverse_iterator i; + for (i = m_Delayed.rbegin ();i != m_Delayed.rend ();i++) + { + if (i->second == object) + return i->first; + } + return this->find (object) != this->end (); + } + + void remove_delayed (const T& obj) { + m_Delayed.push_back (std::pair<bool, T> (false, obj)); + } + void add_delayed (const T& obj) { + m_Delayed.push_back (std::pair<bool, T> (true, obj)); + } + int apply_delayed_size () const { return m_Delayed.size (); } + void apply_delayed () { + typename delay_container::iterator iter; + for (iter = m_Delayed.begin(); iter != m_Delayed.end(); iter++) { + if (iter->first) + SetType::insert (iter->second); + else + SetType::erase (iter->second); + } + m_Delayed.clear (); + } +}; + +#endif |