From 59a3f50c00655803e518caf8b894d9a2eae92c13 Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Sat, 24 Jun 2023 00:56:00 +0200 Subject: [PATCH] Valve container fixups * Fix missing "HasElement" method in CUtlRBTree. * Change iterator types to "unsigned short" to avoid compiler warnings (default template argument for the index type is unsigned short). --- r5dev/public/tier1/utlmap.h | 4 ++-- r5dev/public/tier1/utlrbtree.h | 13 +++++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/r5dev/public/tier1/utlmap.h b/r5dev/public/tier1/utlmap.h index 1a769137..522d926f 100644 --- a/r5dev/public/tier1/utlmap.h +++ b/r5dev/public/tier1/utlmap.h @@ -24,11 +24,11 @@ // This is a useful macro to iterate from start to end in order in a map #define FOR_EACH_MAP( mapName, iteratorName ) \ - for ( int iteratorName = (mapName).FirstInorder(); (mapName).IsUtlMap && iteratorName != (mapName).InvalidIndex(); iteratorName = (mapName).NextInorder( iteratorName ) ) + for ( unsigned short iteratorName = (mapName).FirstInorder(); (mapName).IsUtlMap && iteratorName != (mapName).InvalidIndex(); iteratorName = (mapName).NextInorder( iteratorName ) ) // faster iteration, but in an unspecified order #define FOR_EACH_MAP_FAST( mapName, iteratorName ) \ - for ( int iteratorName = 0; (mapName).IsUtlMap && iteratorName < (mapName).MaxElement(); ++iteratorName ) if ( !(mapName).IsValidIndex( iteratorName ) ) continue; else + for ( unsigned short iteratorName = 0; (mapName).IsUtlMap && iteratorName < (mapName).MaxElement(); ++iteratorName ) if ( !(mapName).IsValidIndex( iteratorName ) ) continue; else struct base_utlmap_t diff --git a/r5dev/public/tier1/utlrbtree.h b/r5dev/public/tier1/utlrbtree.h index 6e592b88..1c82442c 100644 --- a/r5dev/public/tier1/utlrbtree.h +++ b/r5dev/public/tier1/utlrbtree.h @@ -15,8 +15,8 @@ // This is a useful macro to iterate from start to end in order in a map -#define FOR_EACH_UTLRBTREE( treeName, iteratorName ) \ - for ( int iteratorName = treeName.FirstInorder(); iteratorName != treeName.InvalidIndex(); iteratorName = treeName.NextInorder( iteratorName ) ) +#define FOR_EACH_RBTREE( treeName, iteratorName ) \ + for ( unsigned short iteratorName = treeName.FirstInorder(); iteratorName != treeName.InvalidIndex(); iteratorName = treeName.NextInorder( iteratorName ) ) //----------------------------------------------------------------------------- @@ -219,6 +219,7 @@ public: I InsertIfNotFound(T const& insert); // Find method + bool HasElement(T const& search) const; I Find(T const& search) const; // Remove methods @@ -1549,6 +1550,14 @@ I CUtlRBTree::InsertIfNotFound(T const& insert) } +template < class T, class I, typename L, class M > +bool CUtlRBTree::HasElement(T const& search) const +{ + I i = Find(search); + return i != InvalidIndex(); +} + + //----------------------------------------------------------------------------- // finds a node in the tree //-----------------------------------------------------------------------------