31 #pragma warning (push)
32 #pragma warning (disable: 4512)
59template <
class ElementType,
class TypeOfCriticalSectionToUse = DummyCriticalSection>
87 bool operator== (const
SortedSet<ElementType>& other) const noexcept
89 return data == other.data;
125 inline int size() const noexcept
147 inline ElementType
operator[] (
const int index)
const noexcept
162 return data.getUnchecked (index);
175 return data.getReference (index);
182 inline const ElementType&
getReference (
const int index)
const noexcept
184 return data.getReference (index);
192 return data.getFirst();
200 return data.getLast();
207 inline const ElementType*
begin() const noexcept
215 inline const ElementType*
end() const noexcept
229 int indexOf (
const ElementType& elementToLookFor)
const noexcept
241 if (elementToLookFor == data.getReference (s))
244 auto halfway = (s + e) / 2;
249 if (elementToLookFor < data.getReference (halfway))
261 bool contains (
const ElementType& elementToLookFor)
const noexcept
263 return indexOf (elementToLookFor) >= 0;
278 bool add (
const ElementType& newElement)
noexcept
287 auto& elem = data.getReference (s);
289 if (newElement == elem)
295 auto halfway = (s + e) / 2;
296 bool isBeforeHalfway = (newElement < data.getReference (halfway));
300 if (! isBeforeHalfway)
312 data.insert (s, newElement);
323 int numElementsToAdd)
noexcept
327 while (--numElementsToAdd >= 0)
328 add (*elementsToAdd++);
340 template <
class OtherSetType>
341 void addSet (
const OtherSetType& setToAddFrom,
343 int numElementsToAdd = -1) noexcept
345 const typename OtherSetType::ScopedLockType lock1 (setToAddFrom.getLock());
347 jassert (
this != &setToAddFrom);
349 if (
this != &setToAddFrom)
357 if (numElementsToAdd < 0 || startIndex + numElementsToAdd > setToAddFrom.size())
358 numElementsToAdd = setToAddFrom.size() - startIndex;
360 if (numElementsToAdd > 0)
361 addArray (&setToAddFrom.data.getReference (startIndex), numElementsToAdd);
375 ElementType
remove (
const int indexToRemove)
noexcept
377 return data.removeAndReturn (indexToRemove);
390 data.remove (
indexOf (valueToRemove));
398 template <
class OtherSetType>
401 const typename OtherSetType::ScopedLockType lock1 (otherSet.getLock());
404 if (
this == &otherSet)
408 else if (! otherSet.isEmpty())
410 for (
int i = data.size(); --i >= 0;)
411 if (otherSet.contains (data.getReference (i)))
423 template <
class OtherSetType>
426 const typename OtherSetType::ScopedLockType lock1 (otherSet.getLock());
429 if (
this != &otherSet)
431 if (otherSet.isEmpty())
437 for (
int i = data.size(); --i >= 0;)
438 if (! otherSet.contains (data.getReference (i)))
449 template <
class OtherSetType>
452 data.swapWith (otherSet.data);
464 data.minimiseStorageOverheads();
475 data.ensureStorageAllocated (minNumElements);
483 inline const TypeOfCriticalSectionToUse&
getLock() const noexcept {
return data.getLock(); }
495 #pragma warning (pop)
Holds a resizable array of primitive or copy-by-value objects.
Holds a set of unique primitive objects, such as ints or doubles.
int size() const noexcept
Returns the current number of elements in the set.
ElementType remove(const int indexToRemove) noexcept
Removes an element from the set.
bool isEmpty() const noexcept
Returns true if the set is empty, false otherwise.
int indexOf(const ElementType &elementToLookFor) const noexcept
Finds the index of the first element which matches the value passed in.
ElementType operator[](const int index) const noexcept
Returns one of the elements in the set.
void removeValue(const ElementType valueToRemove) noexcept
Removes an item from the set.
void addSet(const OtherSetType &setToAddFrom, int startIndex=0, int numElementsToAdd=-1) noexcept
Adds elements from another set to this one.
SortedSet()=default
Creates an empty set.
void addArray(const ElementType *elementsToAdd, int numElementsToAdd) noexcept
Adds elements from an array to this set.
const ElementType & getReference(const int index) const noexcept
Returns a direct reference to one of the elements in the set, without checking the index passed in.
ElementType getFirst() const noexcept
Returns the first element in the set, or 0 if the set is empty.
void removeValuesIn(const OtherSetType &otherSet) noexcept
Removes any elements which are also in another set.
bool add(const ElementType &newElement) noexcept
Adds a new element to the set, (as long as it's not already in there).
void clearQuick() noexcept
Removes all elements from the set without freeing the array's allocated storage.
ElementType getUnchecked(const int index) const noexcept
Returns one of the elements in the set, without checking the index passed in.
const TypeOfCriticalSectionToUse & getLock() const noexcept
Returns the CriticalSection that locks this array.
SortedSet(SortedSet &&) noexcept=default
Creates a copy of another set.
SortedSet(const SortedSet &)=default
Creates a copy of another set.
bool operator!=(const SortedSet< ElementType > &other) const noexcept
Compares this set to another one.
void swapWith(OtherSetType &otherSet) noexcept
This swaps the contents of this array with those of another array.
void minimiseStorageOverheads() noexcept
Reduces the amount of storage being used by the set.
ElementType getLast() const noexcept
Returns the last element in the set, or 0 if the set is empty.
void ensureStorageAllocated(const int minNumElements)
Increases the set's internal storage to hold a minimum number of elements.
ElementType & getReference(const int index) noexcept
Returns a direct reference to one of the elements in the set, without checking the index passed in.
const ElementType * end() const noexcept
Returns a pointer to the element which follows the last element in the set.
bool operator==(const SortedSet< ElementType > &other) const noexcept
Compares this set to another one.
void clear() noexcept
Removes all elements from the set.
bool contains(const ElementType &elementToLookFor) const noexcept
Returns true if the set contains at least one occurrence of an object.
const ElementType * begin() const noexcept
Returns a pointer to the first element in the set.
void removeValuesNotIn(const OtherSetType &otherSet) noexcept
Removes any elements which are not found in another set.
typename TypeOfCriticalSectionToUse::ScopedLockType ScopedLockType
Returns the type of scoped lock to use for locking this array.