From 15740faf9fe9fe4be08965098bbf2947e096aeeb Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 14 Aug 2019 22:50:43 +0800 Subject: +Unity Runtime code --- Runtime/Utilities/delayed_set.h | 45 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Runtime/Utilities/delayed_set.h (limited to 'Runtime/Utilities/delayed_set.h') 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 +#include +#include "MemoryPool.h" + +template , memory_pool > > +class delayed_set : public SetType { + typedef typename std::vector > 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 (false, obj)); + } + void add_delayed (const T& obj) { + m_Delayed.push_back (std::pair (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 -- cgit v1.1-26-g67d0