52template <
typename ElementType,
53 typename TypeOfCriticalSectionToUse = DummyCriticalSection,
54 int minimumAllocatedSize = 0>
58 using ParameterType =
typename TypeHelpers::ParameterType<ElementType>::type;
75 : values (std::move (
other.values))
82 template <
typename TypeToCreateFrom>
93 template <
typename TypeToCreateFrom>
125 template <
typename TypeToCreateFrom>
126 Array (
const std::initializer_list<TypeToCreateFrom>& items)
151 values = std::move (
other.values);
161 template <
class OtherArrayType>
166 return values ==
other;
174 template <
class OtherArrayType>
192 values.setAllocatedSize (0);
205 void fill (
const ParameterType& newValue)
noexcept
209 for (
auto&
e : *
this)
218 return values.size();
240 return values.getValueWithDefault (index);
255 return values[index];
270 return values[index];
284 return values[index];
293 return values.getFirst();
303 return values.getLast();
312 return values.
begin();
321 return values.
begin();
330 return values.
begin();
338 return values.
begin();
390 return static_cast<int> (
e - values.
begin());
551 values.add (newValue);
582 template <
typename Type>
591 template <
typename TypeToCreateFrom>
592 void addArray (
const std::initializer_list<TypeToCreateFrom>& items)
595 values.addArray (items);
604 template <
typename Type>
620 template <
class OtherArrayType>
633 template <
class OtherArrayType>
651 template <
class OtherArrayType>
652 typename std::enable_if<! std::is_pointer<OtherArrayType>::value,
void>::type
693 template <
class ElementComparator>
697 auto index = findInsertIndexInSortedArray (comparator, values.
begin(),
newElement, 0, values.
size());
729 template <
typename ElementComparator,
typename TargetValueType>
732 ignoreUnused (comparator);
737 for (
int s = 0,
e = values.
size();;)
796 return ElementType();
814 jassert (values.begin() !=
nullptr);
839 for (
int i = 0; i < values.size(); ++i)
863 for (
int i = values.size(); --i >= 0;)
886 template <
typename PredicateType>
892 for (
int i = values.size(); --i >= 0;)
920 auto endIndex = jlimit (0, values.size(), startIndex +
numberToRemove);
921 startIndex = jlimit (0, values.size(), startIndex);
927 minimiseStorageAfterRemoval();
948 minimiseStorageAfterRemoval();
957 template <
class OtherArrayType>
971 for (
int i = values.size(); --i >= 0;)
985 template <
class OtherArrayType>
999 for (
int i = values.size(); --i >= 0;)
1053 values.shrinkToNoMoreThan (values.size());
1105 template <
class ElementComparator>
1110 ignoreUnused (comparator);
1135 ArrayBase<ElementType, TypeOfCriticalSectionToUse> values;
1140 minimiseStorageAfterRemoval();
1143 void minimiseStorageAfterRemoval()
1146 values.shrinkToNoMoreThan (jmax (values.size(), jmax (
minimumAllocatedSize, 64 / (
int)
sizeof (ElementType))));
int removeIf(PredicateType &&predicate)
Array(ElementType &&firstNewElement, OtherElements... otherElements)
bool operator==(const OtherArrayType &other) const
void swapWith(OtherArrayType &otherArray) noexcept
void add(ElementType &&newElement)
void setUnchecked(int indexToChange, ParameterType newValue)
bool operator!=(const OtherArrayType &other) const
typename TypeOfCriticalSectionToUse::ScopedLockType ScopedLockType
void addNullTerminatedArray(const Type *const *elementsToAdd)
ElementType getUnchecked(int index) const
void insertArray(int indexToInsertAt, const ElementType *newElements, int numberOfElements)
bool isEmpty() const noexcept
void removeLast(int howManyToRemove=1)
void ensureStorageAllocated(int minNumElements)
void remove(const ElementType *elementToRemove)
const TypeOfCriticalSectionToUse & getLock() const noexcept
void addArray(const Type *elementsToAdd, int numElementsToAdd)
Array(const TypeToCreateFrom *data)
int removeAllInstancesOf(ParameterType valueToRemove)
Array(const TypeToCreateFrom *data, int numValues)
int size() const noexcept
void removeFirstMatchingValue(ParameterType valueToRemove)
void fill(const ParameterType &newValue) noexcept
void removeRange(int startIndex, int numberToRemove)
void removeValuesIn(const OtherArrayType &otherArray)
const ElementType * end() const noexcept
void add(const ElementType &firstNewElement, OtherElements... otherElements)
void remove(int indexToRemove)
void insert(int indexToInsertAt, ParameterType newElement)
int indexOfSorted(ElementComparator &comparator, TargetValueType elementToLookFor) const
ElementType getFirst() const noexcept
ElementType * begin() noexcept
ElementType * end() noexcept
ElementType * getRawDataPointer() noexcept
Array(ElementType &&singleElementToAdd)
void addUsingDefaultSort(ParameterType newElement)
int indexOf(ParameterType elementToLookFor) const
void add(const ElementType &newElement)
ElementType removeAndReturn(int indexToRemove)
Array(const ElementType &firstNewElement, OtherElements... otherElements)
ElementType operator[](int index) const
Array(const ElementType &singleElementToAdd)
void set(int indexToChange, ParameterType newValue)
int addSorted(ElementComparator &comparator, ParameterType newElement)
bool contains(ParameterType elementToLookFor) const
void insertMultiple(int indexToInsertAt, ParameterType newElement, int numberOfTimesToInsertIt)
void sort(ElementComparator &comparator, bool retainOrderOfEquivalentItems=false)
const ElementType * data() const noexcept
void resize(int targetNumItems)
void move(int currentIndex, int newIndex) noexcept
void swap(int index1, int index2)
ElementType * data() noexcept
void removeValuesNotIn(const OtherArrayType &otherArray)
std::enable_if<!std::is_pointer< OtherArrayType >::value, void >::type addArray(const OtherArrayType &arrayToAddFrom, int startIndex, int numElementsToAdd=-1)
const ElementType * begin() const noexcept
const ElementType & getReference(int index) const noexcept
bool addIfNotAlreadyThere(ParameterType newElement)
Array(const Array &other)
void minimiseStorageOverheads()
void addArray(const OtherArrayType &arrayToAddFrom)
Array & operator=(const Array &other)
ElementType & getReference(int index) noexcept
ElementType getLast() const noexcept
void add(ElementType &&firstNewElement, OtherElements... otherElements)
const ElementType * getRawDataPointer() const noexcept