47template <
class ObjectClass,
68 : values (std::move (
other.values))
83 values = std::move (
other.values);
88 template <
class OtherObjectClass,
class OtherCriticalSection>
90 : values (std::move (
other.values))
95 template <
class OtherObjectClass,
class OtherCriticalSection>
100 values = std::move (
other.values);
110 values.setAllocatedSize (0);
131 return values.size();
151 return values.getValueWithDefault (index);
162 return values[index];
173 return values.getFirst();
184 return values.getLast();
193 return values.begin();
200 inline ObjectClass**
begin() noexcept
202 return values.begin();
210 return values.begin();
216 inline ObjectClass**
end() noexcept
232 inline ObjectClass**
data() noexcept
254 auto* e = values.begin();
256 for (; e != values.end(); ++e)
258 return static_cast<int> (e - values.begin());
271 auto* e = values.begin();
273 for (; e != values.end(); ++e)
464 template <
class OtherArrayType>
475 template <
typename OtherArrayType>
479 values.addArray (items);
496 template <
class OtherArrayType>
532 template <
class ElementComparator>
547 template <
typename ElementComparator>
579 if ((values.size() << 1) < values.capacity())
603 if ((values.size() << 1) < values.capacity())
622 for (
int i = 0; i < values.size(); ++i)
649 startIndex =
jlimit (0, values.size(), startIndex);
664 if ((values.size() << 1) < values.capacity())
724 template <
class OtherArrayType>
728 const typename OtherArrayType::ScopedLockType
lock2 (
otherArray.getLock());
742 values.shrinkToNoMoreThan (values.size());
783 template <
class ElementComparator>
798 [[
deprecated (
"This method has been replaced by a more flexible templated version and renamed "
799 "to swapWith to be more consistent with the names used in other classes.")]]
807 void deleteAllObjects()
809 auto i = values.size();
814 values.removeElements (i, 1);
819 template <
class OtherObjectClass,
class OtherCriticalSection>
820 friend class OwnedArray;
826template <
class ObjectClass,
class TypeOfCriticalSectionToUse>
827template <
class ElementComparator>
833 auto index = findInsertIndexInSortedArray (comparator, values.begin(),
newObject, 0, values.size());
838template <
class ObjectClass,
class TypeOfCriticalSectionToUse>
839template <
typename ElementComparator>
845 int s = 0, e = values.size();
866template <
class ObjectClass,
class TypeOfCriticalSectionToUse>
867template <
typename ElementComparator>
Holds a resizable array of primitive or copy-by-value objects.
void addArray(const Type *elementsToAdd, int numElementsToAdd)
Adds elements from an array to the end of this array.
An array designed for holding objects.
ObjectClass *const * data() const noexcept
Returns a pointer to the first element in the array.
int size() const noexcept
Returns the number of items currently in the array.
ObjectClass * getUnchecked(int index) const noexcept
Returns a pointer to the object at this index in the array, without checking whether the index is in-...
ObjectClass * set(int indexToChange, ObjectClass *newObject, bool deleteOldElement=true)
Replaces an object in the array with a different one.
ObjectClass * removeAndReturn(int indexToRemove)
Removes and returns an object from the array without deleting it.
ObjectClass * add(std::unique_ptr< ObjectClass > newObject)
Appends a new object to the end of the array.
ObjectClass * set(int indexToChange, std::unique_ptr< ObjectClass > newObject, bool deleteOldElement=true)
Replaces an object in the array with a different one.
void addCopiesOf(const OtherArrayType &arrayToAddFrom, int startIndex=0, int numElementsToAdd=-1)
Adds copies of the elements in another array to the end of this array.
void addArray(const OtherArrayType &arrayToAddFrom, int startIndex=0, int numElementsToAdd=-1)
Adds elements from another array to the end of this array.
bool isEmpty() const noexcept
Returns true if the array is empty, false otherwise.
void swapWith(OtherArrayType &otherArray) noexcept
This swaps the contents of this array with those of another array.
void remove(int indexToRemove, bool deleteObject=true)
Removes an object from the array.
typename TypeOfCriticalSectionToUse::ScopedLockType ScopedLockType
Returns the type of scoped lock to use for locking this array.
void ensureStorageAllocated(int minNumElements) noexcept
Increases the array's internal storage to hold a minimum number of elements.
ObjectClass * getFirst() const noexcept
Returns a pointer to the first object in the array.
void minimiseStorageOverheads() noexcept
Reduces the amount of storage being used by the array.
void clear(bool deleteObjects=true)
Clears the array, optionally deleting the objects inside it first.
void removeLast(int howManyToRemove=1, bool deleteObjects=true)
Removes the last n objects from the array.
int indexOf(const ObjectClass *objectToLookFor) const noexcept
Finds the index of an object which might be in the array.
ObjectClass * add(ObjectClass *newObject)
Appends a new object to the end of the array.
ObjectClass ** begin() noexcept
Returns a pointer to the first element in the array.
OwnedArray(OwnedArray< OtherObjectClass, OtherCriticalSection > &&other) noexcept
Converting move constructor.
~OwnedArray()
Deletes the array and also deletes any objects inside it.
void swap(int index1, int index2) noexcept
Swaps a pair of objects in the array.
int indexOfSorted(ElementComparator &comparator, const ObjectClass *objectToLookFor) const noexcept
Finds the index of an object in the array, assuming that the array is sorted.
ObjectClass * insert(int indexToInsertAt, std::unique_ptr< ObjectClass > newObject)
Inserts a new object into the array at the given index.
void clearQuick(bool deleteObjects)
Clears the array, optionally deleting the objects inside it first.
void removeObject(const ObjectClass *objectToRemove, bool deleteObject=true)
Removes a specified object from the array.
ObjectClass *const * begin() const noexcept
Returns a pointer to the first element in the array.
ObjectClass *const * end() const noexcept
Returns a pointer to the element which follows the last element in the array.
ObjectClass ** end() noexcept
Returns a pointer to the element which follows the last element in the array.
OwnedArray()=default
Creates an empty array.
OwnedArray & operator=(OwnedArray &&other) noexcept
Move assignment operator.
OwnedArray(OwnedArray &&other) noexcept
Move constructor.
void insertArray(int indexToInsertAt, ObjectClass *const *newObjects, int numberOfElements)
Inserts an array of values into this array at a given position.
void move(int currentIndex, int newIndex) noexcept
Moves one of the objects to a different position.
int addSorted(ElementComparator &comparator, ObjectClass *newObject) noexcept
Inserts a new object into the array assuming that the array is sorted.
const TypeOfCriticalSectionToUse & getLock() const noexcept
Returns the CriticalSection that locks this array.
void addArray(const std::initializer_list< OtherArrayType > &items)
Adds elements from another array to the end of this array.
void sort(ElementComparator &comparator, bool retainOrderOfEquivalentItems=false) noexcept
Sorts the elements in the array.
ObjectClass * insert(int indexToInsertAt, ObjectClass *newObject)
Inserts a new object into the array at the given index.
ObjectClass * operator[](int index) const noexcept
Returns a pointer to the object at this index in the array.
ObjectClass ** getRawDataPointer() noexcept
Returns a pointer to the actual array data.
ObjectClass ** data() noexcept
Returns a pointer to the first element in the array.
OwnedArray(const std::initializer_list< ObjectClass * > &items)
Creates an array from a list of objects.
void removeRange(int startIndex, int numberToRemove, bool deleteObjects=true)
Removes a range of objects from the array.
ObjectClass * getLast() const noexcept
Returns a pointer to the last object in the array.
bool contains(const ObjectClass *objectToLookFor) const noexcept
Returns true if the array contains a specified object.
Type * createCopyIfNotNull(const Type *objectToCopy)
If a pointer is non-null, this returns a new copy of the object that it points to,...
Type jlimit(Type lowerLimit, Type upperLimit, Type valueToConstrain) noexcept
Constrains a value to keep it within a given range.
Type unalignedPointerCast(void *ptr) noexcept
Casts a pointer to another type via void*, which suppresses the cast-align warning which sometimes ar...
bool isPositiveAndBelow(Type1 valueToTest, Type2 upperLimit) noexcept
Returns true if a value is at least zero, and also below a specified upper limit.
Used by container classes as an indirect way to delete an object of a particular type.