4#ifndef _Stroika_Foundation_Containers_DataStructures_Array_h_
5#define _Stroika_Foundation_Containers_DataStructures_Array_h_
7#include "Stroika/Foundation/StroikaPreComp.h"
11#include "Stroika/Foundation/Common/Common.h"
13#include "Stroika/Foundation/Containers/Common.h"
15#include "Stroika/Foundation/Execution/Common.h"
103 nonvirtual
Array& operator= (
const Array& rhs);
110 nonvirtual T
GetAt (
size_t i)
const;
120 nonvirtual T*
PeekAt (
size_t i);
121 nonvirtual
const T*
PeekAt (
size_t i)
const;
128 nonvirtual
void SetAt (
size_t i, ArgByValueType<T> item);
143 nonvirtual
size_t size ()
const;
150 nonvirtual
bool empty ()
const;
158 nonvirtual
void SetLength (
size_t newLength, ArgByValueType<T> fillValue);
168 nonvirtual
void InsertAt (
size_t index, ArgByValueType<T> item);
180 nonvirtual
void push_back (ArgByValueType<T> item);
188 nonvirtual
void RemoveAt (
size_t index);
203 template <
typename EQUALS_COMPARER = equal_to<T>>
204 nonvirtual
bool Contains (ArgByValueType<T> item, EQUALS_COMPARER&& equalsComparer)
const;
211 template <invocable<T> FUNCTION>
244 template <predicate<T> FUNCTION>
252 nonvirtual
size_t capacity ()
const;
255 nonvirtual
void reserve (
size_t slotsAlloced);
258 nonvirtual
void shrink_to_fit ();
269 nonvirtual
void MoveIteratorHereAfterClone (
IteratorBase* pi,
const Array* movedFrom)
const;
294 nonvirtual
void AddBefore (
const ForwardIterator& i, ArgByValueType<T> item);
295 nonvirtual
void AddBefore (
const BackwardIterator& i, ArgByValueType<T> item);
298 nonvirtual
void AddAfter (
const ForwardIterator& i, ArgByValueType<T> item);
299 nonvirtual
void AddAfter (
const BackwardIterator& i, ArgByValueType<T> item);
302 nonvirtual
void Invariant () const noexcept;
304#if qStroika_Foundation_Debug_AssertionsChecked
306 nonvirtual
void Invariant_ () const noexcept;
311 static constexpr bool kUseMalloc_{is_trivially_copyable_v<T>};
315 size_t fSlotsAllocated_{0};
328 template <
typename T>
332 using iterator_category = forward_iterator_tag;
333 using value_type = Array::value_type;
334 using difference_type = ptrdiff_t;
335 using pointer =
const value_type*;
336 using reference =
const value_type&;
343#if qStroika_Foundation_Debug_AssertionsChecked
348 nonvirtual
const T& operator* ()
const;
351 nonvirtual
const T* operator->()
const;
357 nonvirtual
void SetIndex (
size_t i);
360 nonvirtual
bool operator== (
const IteratorBase& rhs)
const;
375 nonvirtual
void Invariant ()
const noexcept;
377#if qStroika_Foundation_Debug_AssertionsChecked
379 nonvirtual
void Invariant_ ()
const noexcept;
383 const Array* _fData{
nullptr};
384 size_t _fCurrentIdx{0};
395 template <
typename T>
418 explicit operator
bool () const;
421 nonvirtual
bool Done () const noexcept;
435 template <typename T>
445 nonvirtual
bool Done ()
const noexcept;
451 static_assert (ranges::input_range<Array<int>>);
constexpr ForwardIterator() noexcept=default
nonvirtual void Apply(FUNCTION &&doToElement, Execution::SequencePolicy seq=Execution::SequencePolicy::eDEFAULT) const
nonvirtual ForwardIterator Find(FUNCTION &&firstThat) const
nonvirtual T GetAt(size_t i) const
nonvirtual T * PeekAt(size_t i)
nonvirtual void RemoveAll()
nonvirtual void Remove(const ForwardIterator &i)
nonvirtual void push_back(ArgByValueType< T > item)
STL-ish alias for Insert (size(), item)
nonvirtual bool Contains(ArgByValueType< T > item, EQUALS_COMPARER &&equalsComparer) const
nonvirtual bool empty() const
nonvirtual void InsertAt(size_t index, ArgByValueType< T > item)
nonvirtual void RemoveAt(size_t index)
nonvirtual void SetAt(size_t i, ArgByValueType< T > item)
nonvirtual T & operator[](size_t i)
size_t UnderlyingIteratorRep
nonvirtual void SetLength(size_t newLength, ArgByValueType< T > fillValue)
nonvirtual ForwardIterator erase(const ForwardIterator &i)
remove the element at i, and return valid iterator to the element that was following it (which can be...
nonvirtual size_t size() const
NOT a real mutex - just a debugging infrastructure support tool so in debug builds can be assured thr...
conditional_t<(sizeof(CHECK_T)<=2 *sizeof(void *)) and is_trivially_copyable_v< CHECK_T >, CHECK_T, const CHECK_T & > ArgByValueType
This is an alias for 'T' - but how we want to pass it on stack as formal parameter.
constexpr void AssertDataMatches(const DoublyLinkedList *data) const
nonvirtual ForwardIterator & operator++() noexcept
nonvirtual size_t CurrentIndex(const DoublyLinkedList *data) const
SequencePolicy
equivalent which of 4 types being used std::execution::sequenced_policy, parallel_policy,...