49template <
class ObjectClass,
class TypeOfCriticalSectionToUse = DummyCriticalSection>
65 values.addArray (other.begin(), other.size());
69 o->incReferenceCount();
74 :
values (std::move (other.values))
79 template <
class OtherObjectClass,
class OtherCriticalSection>
83 values.addArray (other.begin(), other.size());
87 o->incReferenceCount();
96 auto otherCopy = other;
104 template <
class OtherObjectClass>
107 auto otherCopy = other;
116 values = std::move (other.values);
136 values.setAllocatedSize (0);
196 return values.getValueWithDefault (index);
294 int indexOf (
const ObjectClass* objectToLookFor)
const noexcept
298 auto* endPointer =
values.end();
300 while (
e != endPointer)
302 if (objectToLookFor == *
e)
303 return static_cast<int> (
e -
values.begin());
323 bool contains (
const ObjectClass* objectToLookFor)
const noexcept
327 auto* endPointer =
values.end();
329 while (
e != endPointer)
331 if (objectToLookFor == *
e)
354 ObjectClass*
add (ObjectClass* newObject)
359 if (newObject !=
nullptr)
360 newObject->incReferenceCount();
387 ObjectClass*
insert (
int indexToInsertAt, ObjectClass* newObject)
389 values.insert (indexToInsertAt, newObject, 1);
391 if (newObject !=
nullptr)
392 newObject->incReferenceCount();
453 void set (
int indexToChange, ObjectClass* newObject)
455 if (indexToChange >= 0)
459 if (newObject !=
nullptr)
460 newObject->incReferenceCount();
462 if (indexToChange <
values.size())
464 auto*
e =
values[indexToChange];
465 values[indexToChange] = newObject;
507 auto numElementsAdded =
values.addArray (arrayToAddFrom.
values, startIndex, numElementsToAdd);
510 for (
int i = 0;
i < numElementsAdded; ++
i)
511 (*(--
e))->incReferenceCount();
527 template <
class ElementComparator>
528 int addSorted (ElementComparator& comparator, ObjectClass* newObject)
noexcept
532 insert (index, newObject);
541 template <
class ElementComparator>
547 if (index > 0 && comparator.compareElements (newObject,
values[index - 1]) == 0)
548 set (index - 1, newObject);
550 insert (index, newObject);
565 template <
class ElementComparator>
567 const ObjectClass* objectToLookFor)
const noexcept
575 if (comparator.compareElements (objectToLookFor,
values[
s]) == 0)
578 auto halfway = (
s +
e) / 2;
583 if (comparator.compareElements (objectToLookFor,
values[halfway]) >= 0)
612 auto*
e = *(
values.begin() + indexToRemove);
613 values.removeElements (indexToRemove, 1);
637 auto*
e = *(
values.begin() + indexToRemove);
639 values.removeElements (indexToRemove, 1);
693 auto endIndex =
jlimit (0,
values.size(), startIndex + numberToRemove);
694 numberToRemove = endIndex - startIndex;
696 if (numberToRemove > 0)
699 objectsToRemove.
addArray (
values.begin() + startIndex, numberToRemove);
701 values.removeElements (startIndex, numberToRemove);
703 for (
auto& o : objectsToRemove)
723 if (howManyToRemove >
values.size())
724 howManyToRemove =
values.size();
726 while (--howManyToRemove >= 0)
735 void swap (
int index1,
int index2)
noexcept
759 void move (
int currentIndex,
int newIndex)
noexcept
761 if (currentIndex != newIndex)
764 values.move (currentIndex, newIndex);
774 template <
class OtherArrayType>
775 void swapWith (OtherArrayType& otherArray)
noexcept
778 const typename OtherArrayType::ScopedLockType lock2 (otherArray.getLock());
779 values.swapWith (otherArray.values);
791 return values == other.values;
800 return ! operator== (other);
830 template <
class ElementComparator>
831 void sort (ElementComparator& comparator,
832 bool retainOrderOfEquivalentItems =
false)
noexcept
864 values.ensureAllocatedSize (minNumElements);
879 [[deprecated (
"This method has been replaced by a more flexible templated version and renamed "
880 "to swapWith to be more consistent with the names used in other classes.")]]
902 if (o !=
nullptr && o->decReferenceCountWithoutDeleting())
#define noexcept
Definition DistrhoDefines.h:72
Definition juce_ArrayBase.h:41
Definition juce_Array.h:56
void addArray(const Type *elementsToAdd, int numElementsToAdd)
Definition juce_Array.h:583
ReferenceCountedArray(ReferenceCountedArray &&other) noexcept
Definition juce_ReferenceCountedArray.h:73
ObjectClass * add(const ObjectClassPtr &newObject)
Definition juce_ReferenceCountedArray.h:372
bool isEmpty() const noexcept
Definition juce_ReferenceCountedArray.h:156
int indexOf(const ObjectClass *objectToLookFor) const noexcept
Definition juce_ReferenceCountedArray.h:294
ReferenceCountedArray(const ReferenceCountedArray &other) noexcept
Definition juce_ReferenceCountedArray.h:62
int size() const noexcept
Definition juce_ReferenceCountedArray.h:150
void removeLast(int howManyToRemove=1)
Definition juce_ReferenceCountedArray.h:719
ObjectClass *const * end() const noexcept
Definition juce_ReferenceCountedArray.h:267
void minimiseStorageOverheads() noexcept
Definition juce_ReferenceCountedArray.h:849
void set(int indexToChange, ObjectClass *newObject)
Definition juce_ReferenceCountedArray.h:453
ObjectClass *const * begin() const noexcept
Definition juce_ReferenceCountedArray.h:251
ObjectClass * insert(int indexToInsertAt, const ObjectClassPtr &newObject)
Definition juce_ReferenceCountedArray.h:410
ReferenceCountedArray()=default
int indexOfSorted(ElementComparator &comparator, const ObjectClass *objectToLookFor) const noexcept
Definition juce_ReferenceCountedArray.h:566
typename TypeOfCriticalSectionToUse::ScopedLockType ScopedLockType
Definition juce_ReferenceCountedArray.h:875
bool addIfNotAlreadyThere(ObjectClass *newObject)
Definition juce_ReferenceCountedArray.h:420
void remove(int indexToRemove)
Definition juce_ReferenceCountedArray.h:606
void sort(ElementComparator &comparator, bool retainOrderOfEquivalentItems=false) noexcept
Definition juce_ReferenceCountedArray.h:831
ReferenceCountedArray(const ReferenceCountedArray< OtherObjectClass, OtherCriticalSection > &other) noexcept
Definition juce_ReferenceCountedArray.h:80
void removeObject(ObjectClass *objectToRemove)
Definition juce_ReferenceCountedArray.h:657
ObjectClass * getObjectPointer(int index) const noexcept
Definition juce_ReferenceCountedArray.h:193
void swap(int index1, int index2) noexcept
Definition juce_ReferenceCountedArray.h:735
ObjectClassPtr getFirst() const noexcept
Definition juce_ReferenceCountedArray.h:213
void ensureStorageAllocated(const int minNumElements)
Definition juce_ReferenceCountedArray.h:861
~ReferenceCountedArray()
Definition juce_ReferenceCountedArray.h:123
void clearQuick()
Definition juce_ReferenceCountedArray.h:143
void set(int indexToChange, const ObjectClassPtr &newObject)
Definition juce_ReferenceCountedArray.h:487
ObjectClass *const * data() const noexcept
Definition juce_ReferenceCountedArray.h:283
ReferenceCountedObjectPtr< ObjectClass > ObjectClassPtr
Definition juce_ReferenceCountedArray.h:53
const TypeOfCriticalSectionToUse & getLock() const noexcept
Definition juce_ReferenceCountedArray.h:872
ObjectClassPtr getUnchecked(int index) const noexcept
Definition juce_ReferenceCountedArray.h:180
static void releaseObject(ObjectClass *o)
Definition juce_ReferenceCountedArray.h:900
void releaseAllObjects()
Definition juce_ReferenceCountedArray.h:888
ObjectClass ** begin() noexcept
Definition juce_ReferenceCountedArray.h:243
void addOrReplaceSorted(ElementComparator &comparator, ObjectClass *newObject) noexcept
Definition juce_ReferenceCountedArray.h:542
bool contains(const ObjectClass *objectToLookFor) const noexcept
Definition juce_ReferenceCountedArray.h:323
void removeRange(int startIndex, int numberToRemove)
Definition juce_ReferenceCountedArray.h:688
ObjectClass * getObjectPointerUnchecked(int index) const noexcept
Definition juce_ReferenceCountedArray.h:202
void move(int currentIndex, int newIndex) noexcept
Definition juce_ReferenceCountedArray.h:759
ObjectClassPtr removeAndReturn(int indexToRemove)
Definition juce_ReferenceCountedArray.h:630
ObjectClass ** end() noexcept
Definition juce_ReferenceCountedArray.h:259
void clear()
Definition juce_ReferenceCountedArray.h:132
ObjectClass ** getRawDataPointer() const noexcept
Definition juce_ReferenceCountedArray.h:234
bool contains(const ObjectClassPtr &objectToLookFor) const noexcept
Definition juce_ReferenceCountedArray.h:345
void swapWithArray(ReferenceCountedArray &other) noexcept
Definition juce_ReferenceCountedArray.h:881
ObjectClass ** data() noexcept
Definition juce_ReferenceCountedArray.h:275
void swapWith(OtherArrayType &otherArray) noexcept
Definition juce_ReferenceCountedArray.h:775
bool addIfNotAlreadyThere(const ObjectClassPtr &newObject)
Definition juce_ReferenceCountedArray.h:439
int addSorted(ElementComparator &comparator, ObjectClass *newObject) noexcept
Definition juce_ReferenceCountedArray.h:528
int indexOf(const ObjectClassPtr &objectToLookFor) const noexcept
Definition juce_ReferenceCountedArray.h:316
ObjectClassPtr getLast() const noexcept
Definition juce_ReferenceCountedArray.h:224
void addArray(const ReferenceCountedArray &arrayToAddFrom, int startIndex=0, int numElementsToAdd=-1) noexcept
Definition juce_ReferenceCountedArray.h:498
ObjectClass * insert(int indexToInsertAt, ObjectClass *newObject)
Definition juce_ReferenceCountedArray.h:387
ArrayBase< ObjectClass *, TypeOfCriticalSectionToUse > values
Definition juce_ReferenceCountedArray.h:886
ObjectClass * add(ObjectClass *newObject)
Definition juce_ReferenceCountedArray.h:354
void removeObject(const ObjectClassPtr &objectToRemove)
Definition juce_ReferenceCountedArray.h:671
Definition juce_ReferenceCountedObject.h:247
ReferencedType * get() const noexcept
Definition juce_ReferenceCountedObject.h:381
* e
Definition inflate.c:1404
register unsigned i
Definition inflate.c:1575
unsigned s
Definition inflate.c:1555
Definition carla_juce.cpp:31
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