47template <
class ObjectClass,
48 class TypeOfCriticalSectionToUse = DummyCriticalSection>
69 :
values (std::move (other.values))
74 OwnedArray (
const std::initializer_list<ObjectClass*>& items)
84 values = std::move (other.values);
89 template <
class OtherObjectClass,
class OtherCriticalSection>
91 :
values (std::move (other.values))
96 template <
class OtherObjectClass,
class OtherCriticalSection>
101 values = std::move (other.values);
107 void clear (
bool deleteObjects =
true)
111 values.setAllocatedSize (0);
149 inline ObjectClass* operator[] (
int index)
const noexcept
152 return values.getValueWithDefault (index);
252 int indexOf (
const ObjectClass* objectToLookFor)
const noexcept
258 if (objectToLookFor == *
e)
259 return static_cast<int> (
e -
values.begin());
269 bool contains (
const ObjectClass* objectToLookFor)
const noexcept
275 if (objectToLookFor == *
e)
294 ObjectClass*
add (ObjectClass* newObject)
313 ObjectClass*
add (std::unique_ptr<ObjectClass> newObject)
315 return add (newObject.release());
336 ObjectClass*
insert (
int indexToInsertAt, ObjectClass* newObject)
339 values.insert (indexToInsertAt, newObject, 1);
361 ObjectClass*
insert (
int indexToInsertAt, std::unique_ptr<ObjectClass> newObject)
363 return insert (indexToInsertAt, newObject.release());
379 ObjectClass*
const* newObjects,
380 int numberOfElements)
382 if (numberOfElements > 0)
385 values.insertArray (indexToInsertAt, newObjects, numberOfElements);
402 ObjectClass*
set (
int indexToChange, ObjectClass* newObject,
bool deleteOldElement =
true)
404 if (indexToChange >= 0)
406 std::unique_ptr<ObjectClass> toDelete;
411 if (indexToChange <
values.size())
413 if (deleteOldElement)
415 toDelete.reset (
values[indexToChange]);
417 if (toDelete.get() == newObject)
421 values[indexToChange] = newObject;
451 ObjectClass*
set (
int indexToChange, std::unique_ptr<ObjectClass> newObject,
bool deleteOldElement =
true)
453 return set (indexToChange, newObject.release(), deleteOldElement);
465 template <
class OtherArrayType>
466 void addArray (
const OtherArrayType& arrayToAddFrom,
468 int numElementsToAdd = -1)
470 const typename OtherArrayType::ScopedLockType lock1 (arrayToAddFrom.getLock());
472 values.addArray (arrayToAddFrom, startIndex, numElementsToAdd);
476 template <
typename OtherArrayType>
477 void addArray (
const std::initializer_list<OtherArrayType>& items)
497 template <
class OtherArrayType>
500 int numElementsToAdd = -1)
502 const typename OtherArrayType::ScopedLockType lock1 (arrayToAddFrom.getLock());
511 if (numElementsToAdd < 0 || startIndex + numElementsToAdd > arrayToAddFrom.size())
512 numElementsToAdd = arrayToAddFrom.size() - startIndex;
514 jassert (numElementsToAdd >= 0);
515 values.ensureAllocatedSize (
values.size() + numElementsToAdd);
517 while (--numElementsToAdd >= 0)
533 template <
class ElementComparator>
534 int addSorted (ElementComparator& comparator, ObjectClass* newObject)
noexcept
542 insert (index, newObject);
558 template <
typename ElementComparator>
559 int indexOfSorted (ElementComparator& comparator,
const ObjectClass* objectToLookFor)
const noexcept
570 if (comparator.compareElements (objectToLookFor,
values[
s]) == 0)
573 auto halfway = (
s +
e) / 2;
578 if (comparator.compareElements (objectToLookFor,
values[halfway]) >= 0)
598 void remove (
int indexToRemove,
bool deleteObject =
true)
600 std::unique_ptr<ObjectClass> toDelete;
607 auto**
e =
values.begin() + indexToRemove;
612 values.removeElements (indexToRemove, 1);
631 ObjectClass* removedItem =
nullptr;
636 removedItem =
values[indexToRemove];
638 values.removeElements (indexToRemove, 1);
655 void removeObject (
const ObjectClass* objectToRemove,
bool deleteObject =
true)
661 if (objectToRemove ==
values[
i])
682 void removeRange (
int startIndex,
int numberToRemove,
bool deleteObjects =
true)
685 auto endIndex =
jlimit (0,
values.size(), startIndex + numberToRemove);
687 numberToRemove = endIndex - startIndex;
689 if (numberToRemove > 0)
694 objectsToDelete.
addArray (
values.begin() + startIndex, numberToRemove);
696 values.removeElements (startIndex, numberToRemove);
698 for (
auto& o : objectsToDelete)
713 bool deleteObjects =
true)
717 if (howManyToRemove >=
values.size())
718 clear (deleteObjects);
728 void swap (
int index1,
int index2)
noexcept
731 values.swap (index1, index2);
747 void move (
int currentIndex,
int newIndex)
noexcept
749 if (currentIndex != newIndex)
752 values.move (currentIndex, newIndex);
761 template <
class OtherArrayType>
762 void swapWith (OtherArrayType& otherArray)
noexcept
765 const typename OtherArrayType::ScopedLockType lock2 (otherArray.getLock());
766 values.swapWith (otherArray.values);
791 values.ensureAllocatedSize (minNumElements);
820 template <
class ElementComparator>
821 void sort (ElementComparator& comparator,
822 bool retainOrderOfEquivalentItems =
false)
noexcept
846 [[deprecated (
"This method has been replaced by a more flexible templated version and renamed "
847 "to swapWith to be more consistent with the names used in other classes.")]]
853 ArrayBase <ObjectClass*, TypeOfCriticalSectionToUse>
values;
867 template <
class OtherObjectClass,
class OtherCriticalSection>
#define noexcept
Definition DistrhoDefines.h:72
Definition juce_Array.h:56
void addArray(const Type *elementsToAdd, int numElementsToAdd)
Definition juce_Array.h:583
ObjectClass *const * data() const noexcept
Definition juce_OwnedArray.h:241
int size() const noexcept
Definition juce_OwnedArray.h:130
ObjectClass * getUnchecked(int index) const noexcept
Definition juce_OwnedArray.h:160
ObjectClass * set(int indexToChange, ObjectClass *newObject, bool deleteOldElement=true)
Definition juce_OwnedArray.h:402
ObjectClass * removeAndReturn(int indexToRemove)
Definition juce_OwnedArray.h:629
ArrayBase< ObjectClass *, TypeOfCriticalSectionToUse > values
Definition juce_OwnedArray.h:853
ObjectClass * add(std::unique_ptr< ObjectClass > newObject)
Definition juce_OwnedArray.h:313
ObjectClass * set(int indexToChange, std::unique_ptr< ObjectClass > newObject, bool deleteOldElement=true)
Definition juce_OwnedArray.h:451
void addCopiesOf(const OtherArrayType &arrayToAddFrom, int startIndex=0, int numElementsToAdd=-1)
Definition juce_OwnedArray.h:498
void addArray(const OtherArrayType &arrayToAddFrom, int startIndex=0, int numElementsToAdd=-1)
Definition juce_OwnedArray.h:466
bool isEmpty() const noexcept
Definition juce_OwnedArray.h:136
void swapWith(OtherArrayType &otherArray) noexcept
Definition juce_OwnedArray.h:762
void remove(int indexToRemove, bool deleteObject=true)
Definition juce_OwnedArray.h:598
typename TypeOfCriticalSectionToUse::ScopedLockType ScopedLockType
Definition juce_OwnedArray.h:842
void ensureStorageAllocated(int minNumElements) noexcept
Definition juce_OwnedArray.h:788
ObjectClass * getFirst() const noexcept
Definition juce_OwnedArray.h:171
void minimiseStorageOverheads() noexcept
Definition juce_OwnedArray.h:776
void clear(bool deleteObjects=true)
Definition juce_OwnedArray.h:107
void removeLast(int howManyToRemove=1, bool deleteObjects=true)
Definition juce_OwnedArray.h:712
int indexOf(const ObjectClass *objectToLookFor) const noexcept
Definition juce_OwnedArray.h:252
ObjectClass * add(ObjectClass *newObject)
Definition juce_OwnedArray.h:294
ObjectClass ** begin() noexcept
Definition juce_OwnedArray.h:201
OwnedArray(OwnedArray< OtherObjectClass, OtherCriticalSection > &&other) noexcept
Definition juce_OwnedArray.h:90
~OwnedArray()
Definition juce_OwnedArray.h:62
void swap(int index1, int index2) noexcept
Definition juce_OwnedArray.h:728
int indexOfSorted(ElementComparator &comparator, const ObjectClass *objectToLookFor) const noexcept
Definition juce_OwnedArray.h:559
ObjectClass * insert(int indexToInsertAt, std::unique_ptr< ObjectClass > newObject)
Definition juce_OwnedArray.h:361
void clearQuick(bool deleteObjects)
Definition juce_OwnedArray.h:116
void removeObject(const ObjectClass *objectToRemove, bool deleteObject=true)
Definition juce_OwnedArray.h:655
ObjectClass *const * begin() const noexcept
Definition juce_OwnedArray.h:209
ObjectClass *const * end() const noexcept
Definition juce_OwnedArray.h:225
ObjectClass ** end() noexcept
Definition juce_OwnedArray.h:217
void swapWithArray(OwnedArray &other) noexcept
Definition juce_OwnedArray.h:848
OwnedArray(OwnedArray &&other) noexcept
Definition juce_OwnedArray.h:68
void insertArray(int indexToInsertAt, ObjectClass *const *newObjects, int numberOfElements)
Definition juce_OwnedArray.h:378
void move(int currentIndex, int newIndex) noexcept
Definition juce_OwnedArray.h:747
int addSorted(ElementComparator &comparator, ObjectClass *newObject) noexcept
Definition juce_OwnedArray.h:534
const TypeOfCriticalSectionToUse & getLock() const noexcept
Definition juce_OwnedArray.h:839
void addArray(const std::initializer_list< OtherArrayType > &items)
Definition juce_OwnedArray.h:477
void sort(ElementComparator &comparator, bool retainOrderOfEquivalentItems=false) noexcept
Definition juce_OwnedArray.h:821
ObjectClass * insert(int indexToInsertAt, ObjectClass *newObject)
Definition juce_OwnedArray.h:336
void deleteAllObjects()
Definition juce_OwnedArray.h:855
ObjectClass ** getRawDataPointer() noexcept
Definition juce_OwnedArray.h:192
friend class OwnedArray
Definition juce_OwnedArray.h:868
ObjectClass ** data() noexcept
Definition juce_OwnedArray.h:233
OwnedArray(const std::initializer_list< ObjectClass * > &items)
Definition juce_OwnedArray.h:74
void removeRange(int startIndex, int numberToRemove, bool deleteObjects=true)
Definition juce_OwnedArray.h:682
ObjectClass * getLast() const noexcept
Definition juce_OwnedArray.h:182
bool contains(const ObjectClass *objectToLookFor) const noexcept
Definition juce_OwnedArray.h:269
* e
Definition inflate.c:1404
register unsigned i
Definition inflate.c:1575
unsigned s
Definition inflate.c:1555
Definition carla_juce.cpp:31
Type * createCopyIfNotNull(const Type *objectToCopy)
Definition juce_Memory.h:60
static int findInsertIndexInSortedArray(ElementComparator &comparator, ElementType *const array, const ElementType newElement, int firstElement, int lastElement)
Definition juce_ElementComparator.h:126
Type jlimit(Type lowerLimit, Type upperLimit, Type valueToConstrain) noexcept
Definition juce_MathsFunctions.h:262
static void sortArray(ElementComparator &comparator, ElementType *const array, int firstElement, int lastElement, const bool retainOrderOfEquivalentItems)
Definition juce_ElementComparator.h:81
void ignoreUnused(Types &&...) noexcept
Definition juce_MathsFunctions.h:333
bool isPositiveAndBelow(Type1 valueToTest, Type2 upperLimit) noexcept
Definition juce_MathsFunctions.h:279
static void destroy(ObjectType *object)
Definition juce_ContainerDeletePolicy.h:42
#define const
Definition zconf.h:137