From eb0e0dbde8a94615022e25b7a310dc64f185bfc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20=E2=80=98Touky=E2=80=99=20Huet?= Date: Wed, 19 Feb 2014 02:35:08 +0000 Subject: [PATCH] Added "Item" operation on arrays --- src/lol/base/array.h | 61 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/src/lol/base/array.h b/src/lol/base/array.h index 3029c883..9ea64634 100644 --- a/src/lol/base/array.h +++ b/src/lol/base/array.h @@ -26,6 +26,8 @@ namespace lol { +#define INDEX_NONE -1 + /* * The base array type. * @@ -167,11 +169,70 @@ public: return *this; } + inline ArrayBase& operator>>(T const &x) + { + RemoveItem(x); + return *this; + } + inline void Push(T const &x) { *this << x; } + inline bool PushUnique(T const &x) + { + int idx = Find(x); + if (idx == INDEX_NONE) + { + Push(x); + return true; + } + return false; + } + + inline int Find(T const &x) + { + for (int i = 0; i < m_count; ++i) + if (x == m_data[i]) + return i; + return INDEX_NONE; + } + + bool RemoveItem(T const &x) + { + int idx = Find(x); + if (idx != INDEX_NONE) + { + Remove(idx); + return true; + } + return false; + } + + bool RemoveSwapItem(T const &x) + { + int idx = Find(x); + if (idx != INDEX_NONE) + { + RemoveSwap(idx); + return true; + } + return false; + } + + bool SwapItem(T const &x1, T const &x2) + { + int idx1 = Find(x1); + int idx2 = Find(x2); + if (idx1 != INDEX_NONE && idx2 != INDEX_NONE) + { + Swap(idx1, idx2); + return true; + } + return false; + } + inline T Pop() { ASSERT(m_count > 0);