summaryrefslogtreecommitdiff
path: root/Runtime/Utilities/delayed_set.h
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-08-14 22:50:43 +0800
committerchai <chaifix@163.com>2019-08-14 22:50:43 +0800
commit15740faf9fe9fe4be08965098bbf2947e096aeeb (patch)
treea730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Utilities/delayed_set.h
+Unity Runtime codeHEADmaster
Diffstat (limited to 'Runtime/Utilities/delayed_set.h')
-rw-r--r--Runtime/Utilities/delayed_set.h45
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