From 5ea2dc97fd300fb7ca636a97b9f0f595574d7cae Mon Sep 17 00:00:00 2001 From: frosch Date: Sat, 20 Dec 2008 17:09:44 +0000 Subject: (svn r14704) -Codechange: Add set capabilities to SmallVector. --- src/core/smallvec_type.hpp | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'src/core') diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 464274c4d..a7a0fbad4 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -80,6 +80,58 @@ public: return &this->data[this->items++]; } + /** + * Search for the first occurence of an item. + * The '!=' operator of T is used for comparison. + * @param item Item to search for + * @return The position of the item, or End() when not present + */ + FORCEINLINE const T *Find(const T &item) const + { + const T *pos = this->Begin(); + const T *end = this->End(); + while (pos != end && *pos != item) pos++; + return pos; + } + + /** + * Search for the first occurence of an item. + * The '!=' operator of T is used for comparison. + * @param item Item to search for + * @return The position of the item, or End() when not present + */ + FORCEINLINE T *Find(const T &item) + { + T *pos = this->Begin(); + const T *end = this->End(); + while (pos != end && *pos != item) pos++; + return pos; + } + + /** + * Tests whether a item is present in the vector. + * The '!=' operator of T is used for comparison. + * @param item Item to test for + * @return true iff the item is present + */ + FORCEINLINE bool Contains(const T &item) const + { + return this->Find(item) != this->End(); + } + + /** + * Tests whether a item is present in the vector, and appends it to the end if not. + * The '!=' operator of T is used for comparison. + * @param item Item to test for + * @return true iff the item is was already present + */ + FORCEINLINE bool Include(const T &item) + { + bool is_member = this->Contains(item); + if (!is_member) *this->Append() = item; + return is_member; + } + /** * Get the number of items in the list. */ -- cgit v1.2.3-54-g00ecf