25 #include <RAJA/RAJA.hpp> 30 #ifdef LVARRAY_BOUNDS_CHECK 37 #define ARRAYOFARRAYS_CHECK_BOUNDS( i ) \ 38 LVARRAY_ERROR_IF( !arrayManipulation::isPositive( i ) || i >= this->size(), \ 39 "Bounds Check Failed: i=" << i << " size()=" << this->size() ) 47 #define ARRAYOFARRAYS_CHECK_BOUNDS2( i, j ) \ 48 LVARRAY_ERROR_IF( !arrayManipulation::isPositive( i ) || i >= this->size() || \ 49 !arrayManipulation::isPositive( j ) || j >= this->m_sizes[ i ], \ 50 "Bounds Check Failed: i=" << i << " size()=" << this->size() << \ 51 " j=" << j << " m_sizes[ i ]=" << this->m_sizes[ i ] ) 58 #define ARRAYOFARRAYS_CHECK_INSERT_BOUNDS( i ) \ 59 LVARRAY_ERROR_IF( !arrayManipulation::isPositive( i ) || i > this->size(), \ 60 "Insert Bounds Check Failed: i=" << i << " size()=" << this->size() ) 68 #define ARRAYOFARRAYS_CHECK_INSERT_BOUNDS2( i, j ) \ 69 LVARRAY_ERROR_IF( !arrayManipulation::isPositive( i ) || i >= this->size() || \ 70 !arrayManipulation::isPositive( j ) || j > this->sizeOfArray( i ), \ 71 "Insert Bounds Check Failed: i=" << i << " size()=" << this->size() << \ 72 " j=" << j << " sizeOfArray( i )=" << this->sizeOfArray( i ) ) 80 #define ARRAYOFARRAYS_CAPACITY_CHECK( i, increase ) \ 81 LVARRAY_ERROR_IF( this->sizeOfArray( i ) + increase > this->capacityOfArray( i ), \ 82 "Capacity Check Failed: i=" << i << " increase=" << increase << \ 83 " sizeOfArray( i )=" << this->sizeOfArray( i ) << " capacityOfArray( i )=" << \ 84 this->capacityOfArray( i ) ) 93 #define ARRAYOFARRAYS_ATOMIC_CAPACITY_CHECK( i, previousSize, increase ) \ 94 LVARRAY_ERROR_IF( previousSize + increase > this->capacityOfArray( i ), \ 95 "Capacity Check Failed: i=" << i << " increase=" << increase << \ 96 " sizeOfArray( i )=" << previousSize << " capacityOfArray( i )=" << \ 97 this->capacityOfArray( i ) ) 99 #else // LVARRAY_BOUNDS_CHECK 106 #define ARRAYOFARRAYS_CHECK_BOUNDS( i ) 114 #define ARRAYOFARRAYS_CHECK_BOUNDS2( i, j ) 121 #define ARRAYOFARRAYS_CHECK_INSERT_BOUNDS( i ) 129 #define ARRAYOFARRAYS_CHECK_INSERT_BOUNDS2( i, j ) 137 #define ARRAYOFARRAYS_CAPACITY_CHECK( i, increase ) 146 #define ARRAYOFARRAYS_ATOMIC_CAPACITY_CHECK( i, previousSize, increase ) 148 #endif // LVARRAY_BOUNDS_CHECK 166 template<
typename T,
169 template<
typename >
class BUFFER_TYPE >
177 using SIZE_TYPE = std::conditional_t< CONST_SIZES, INDEX_TYPE const, INDEX_TYPE_NC >;
180 static_assert( !std::is_const< T >::value || (std::is_const< INDEX_TYPE >::value && CONST_SIZES),
181 "When T is const INDEX_TYPE must also be const and CONST_SIZES must be true" );
182 static_assert( std::is_integral< INDEX_TYPE >::value,
"INDEX_TYPE must be integral." );
223 { src.m_numArrays = 0; }
234 BUFFER_TYPE< INDEX_TYPE >
const & offsets,
235 BUFFER_TYPE< SIZE_TYPE >
const & sizes,
236 BUFFER_TYPE< T >
const & values ):
262 m_sizes = std::move( src.m_sizes );
263 m_values = std::move( src.m_values );
421 T &
operator()( INDEX_TYPE
const i, INDEX_TYPE
const j )
const 442 template<
typename ... ARGS >
463 template<
typename POLICY,
typename ... ARGS >
470 INDEX_TYPE
const previousSize = RAJA::atomicInc< POLICY >( &
m_sizes[ i ] );
485 template<
typename ITER >
487 void appendToArray( INDEX_TYPE
const i, ITER
const first, ITER
const last )
const 506 template<
typename ... ARGS >
508 void emplace( INDEX_TYPE
const i, INDEX_TYPE
const j, ARGS && ... args )
const 528 template<
typename ITER >
533 ITER
const last )
const 551 void eraseFromArray( INDEX_TYPE
const i, INDEX_TYPE
const j, INDEX_TYPE
const n=1 )
const 574 m_sizes.registerTouch( space );
589 #if defined(LVARRAY_USE_CUDA) 590 if( space == MemorySpace::cuda ) touch =
false;
592 #if defined(LVARRAY_USE_HIP) 593 if( space == MemorySpace::hip ) touch =
false;
607 template<
typename U >
608 using PairOfBuffers = std::pair< BUFFER_TYPE< U > &, BUFFER_TYPE< U >
const & >;
631 void resize( INDEX_TYPE
const newSize, INDEX_TYPE
const defaultArrayCapacity=0 )
632 {
return resizeImpl( newSize, defaultArrayCapacity ); }
651 template<
class ... BUFFERS >
652 void reserveValues( INDEX_TYPE
const newValueCapacity, BUFFERS & ... buffers )
668 template<
class ... BUFFERS >
675 INDEX_TYPE
const nextOffset =
m_offsets[ i + 1 ];
677 INDEX_TYPE
const sizeOfNextArray =
sizeOfArray( i + 1 );
681 [sizeOfNextArray, nextOffset, shiftAmount] (
auto & buffer )
701 template<
typename ... BUFFERS >
703 INDEX_TYPE
const *
const offsets,
704 BUFFERS & ... buffers )
706 auto const fillOffsets = [&]()
709 offsets + numSubArrays + 1,
724 template<
typename POLICY,
typename ... BUFFERS >
726 INDEX_TYPE
const *
const capacities,
727 BUFFERS & ... buffers )
729 auto const fillOffsets = [&]()
732 RAJA::inclusive_scan< POLICY >( RAJA::make_span< INDEX_TYPE const * >( capacities, numSubArrays ),
733 RAJA::make_span< INDEX_TYPE * >(
m_offsets.data()+1, numSubArrays ) );
750 { *
this = std::move( src ); }
758 template<
typename ... BUFFERS >
759 void resizeImpl( INDEX_TYPE
const newSize, INDEX_TYPE
const defaultArrayCapacity, BUFFERS & ... buffers )
779 if( defaultArrayCapacity > 0 )
781 for( INDEX_TYPE i = 1; i < newSize + 1 -
m_numArrays; ++i )
783 m_offsets[ m_numArrays + i ] = originalOffset + i * defaultArrayCapacity;
786 INDEX_TYPE
const totalSize =
m_offsets[ newSize ];
805 template<
class ... BUFFERS >
806 void free( BUFFERS & ... buffers )
829 template<
class ... PAIRS_OF_BUFFERS >
831 INDEX_TYPE
const srcMaxOffset,
832 BUFFER_TYPE< INDEX_TYPE >
const & srcOffsets,
833 BUFFER_TYPE< INDEX_TYPE >
const & srcSizes,
834 BUFFER_TYPE< T >
const & srcValues,
835 PAIRS_OF_BUFFERS && ... pairs )
854 auto & dstBuffer = pair.first;
855 auto const & srcBuffer = pair.second;
859 INDEX_TYPE
const offset =
m_offsets[ i ];
862 &srcBuffer[ offset ] + arraySize,
863 &dstBuffer[ offset ] );
876 template<
class ... BUFFERS >
883 INDEX_TYPE
const capacityIncrease = newCapacity - arrayCapacity;
884 if( capacityIncrease == 0 )
return;
886 if( capacityIncrease > 0 )
890 [
this, i, maxOffset, capacityIncrease](
auto & buffer )
896 for( INDEX_TYPE array =
m_numArrays - 1; array > i; --array )
898 INDEX_TYPE
const curArraySize =
sizeOfArray( array );
899 INDEX_TYPE
const curArrayOffset =
m_offsets[ array ];
908 INDEX_TYPE
const arrayOffset =
m_offsets[ i ];
909 INDEX_TYPE
const capacityDecrease = -capacityIncrease;
912 INDEX_TYPE
const newArraySize =
math::min( prevArraySize, newCapacity );
916 [
this, i, capacityDecrease, arrayOffset, newArraySize, prevArraySize] (
auto & buffer )
922 for( INDEX_TYPE array = i + 1; array <
m_numArrays; ++array )
924 INDEX_TYPE
const curArraySize =
sizeOfArray( array );
925 INDEX_TYPE
const curArrayOffset =
m_offsets[array];
934 for( INDEX_TYPE array = i + 1; array <
m_numArrays + 1; ++array )
942 m_offsets.registerTouch( MemorySpace::host );
950 template<
typename U >
953 m_offsets.template setName< U >( name +
"/m_offsets" );
954 m_sizes.template setName< U >( name +
"/m_sizes" );
955 m_values.template setName< U >( name +
"/m_values" );
986 template<
class ... BUFFERS >
987 void destroyValues( INDEX_TYPE
const begin, INDEX_TYPE
const end, BUFFERS & ... buffers )
995 std::is_trivially_destructible< typename BUFFERS::value_type > ... >::value )
996 {
move( MemorySpace::host,
true ); }
1000 if( !std::is_trivially_destructible< std::remove_reference_t< decltype( buffer[ 0 ] ) > >::value )
1002 buffer.move( MemorySpace::host,
true );
1003 for( INDEX_TYPE i = begin; i < end; ++i )
1005 INDEX_TYPE
const offset = m_offsets[ i ];
1020 template<
typename FUNC,
typename ... BUFFERS >
1022 FUNC && fillOffsets,
1023 BUFFERS & ... buffers )
1030 umpireInterface::memset( m_sizes.data(), 0, m_sizes.capacity() *
sizeof( INDEX_TYPE ) );
1032 INDEX_TYPE
const offsetsSize = ( m_numArrays == 0 ) ? 0 : m_numArrays + 1;
1039 m_numArrays = numSubArrays;
1040 INDEX_TYPE
const maxOffset = m_offsets[
m_numArrays ];
#define ARRAYOFARRAYS_ATOMIC_CAPACITY_CHECK(i, previousSize, increase)
Check that the capacity of array i isn't exceeded when the size is increased by increase.
Definition: ArrayOfArraysView.hpp:146
LVARRAY_HOST_DEVICE void resize(BUFFER &buf, std::ptrdiff_t const size, std::ptrdiff_t const newSize, ARGS &&... args)
Resize the buffer to the given size.
Definition: bufferManipulation.hpp:272
#define LVARRAY_ASSERT(EXP)
Assert EXP is true with no message.
Definition: Macros.hpp:223
LVARRAY_HOST_DEVICE constexpr ArrayOfArraysView< T, INDEX_TYPE const, CONST_SIZES, BUFFER_TYPE > toView() const
Definition: ArrayOfArraysView.hpp:279
DISABLE_HD_WARNING LVARRAY_HOST_DEVICE std::ptrdiff_t append(T *const LVARRAY_RESTRICT ptr, std::ptrdiff_t const size, ITER first, ITER const last)
Append the given values to the array.
Definition: arrayManipulation.hpp:447
LVARRAY_HOST_DEVICE CONSTEXPR_WITHOUT_BOUNDS_CHECK ArraySlice< T, 1, 0, INDEX_TYPE_NC > operator[](INDEX_TYPE const i) const
Definition: ArrayOfArraysView.hpp:409
#define ARRAYOFARRAYS_CHECK_BOUNDS(i)
Check that i is a valid array index.
Definition: ArrayOfArraysView.hpp:106
DISABLE_HD_WARNING LVARRAY_HOST_DEVICE void emplaceBack(T *const LVARRAY_RESTRICT ptr, std::ptrdiff_t const size, ARGS &&... args)
Append the to the array constructing the new value in place.
Definition: arrayManipulation.hpp:425
INDEX_TYPE size_type
The integer type used for indexing, here for stl compatability.
Definition: ArrayOfArraysView.hpp:194
void destroyValues(INDEX_TYPE const begin, INDEX_TYPE const end, BUFFERS &... buffers)
Destroy the values in arrays in the range [begin, end).
Definition: ArrayOfArraysView.hpp:987
void reserve(INDEX_TYPE const newCapacity)
Reserve space for the given number of arrays.
Definition: ArrayOfArraysView.hpp:638
This class serves to provide a sliced multidimensional interface to the family of LvArray classes...
Definition: ArraySlice.hpp:89
INDEX_TYPE IndexType
The integer type used for indexing.
Definition: ArrayOfArraysView.hpp:188
DISABLE_HD_WARNING LVARRAY_HOST_DEVICE void insert(T *const LVARRAY_RESTRICT ptr, std::ptrdiff_t const size, std::ptrdiff_t const index, ITERATOR first, std::ptrdiff_t const n)
Insert the given values into the array at the given position.
Definition: arrayManipulation.hpp:505
BUFFER_TYPE< INDEX_TYPE > m_offsets
Definition: ArrayOfArraysView.hpp:965
LVARRAY_HOST_DEVICE ArrayOfArraysView & operator=(ArrayOfArraysView &&src)
Move assignment operator..
Definition: ArrayOfArraysView.hpp:257
ArrayOfArraysView()=default
A constructor to create an uninitialized ArrayOfArraysView.
LVARRAY_HOST_DEVICE CONSTEXPR_WITH_NDEBUG INDEX_TYPE_NC capacity() const
Definition: ArrayOfArraysView.hpp:373
void dynamicReserve(BUFFER &buf, std::ptrdiff_t const size, std::ptrdiff_t const newCapacity)
If the buffer's capacity is greater than newCapacity this is a no-op. Otherwise the buffer's capacity...
Definition: bufferManipulation.hpp:251
BUFFER_TYPE< T > m_values
Definition: ArrayOfArraysView.hpp:972
void move(MemorySpace const space, bool touch=true) const
Move this ArrayOfArrays to the given memory space.
Definition: ArrayOfArraysView.hpp:584
LVARRAY_HOST_DEVICE LVARRAY_FORCE_INLINE constexpr std::enable_if_t< std::is_arithmetic< T >::value, T > min(T const a, T const b)
Definition: math.hpp:362
LVARRAY_HOST_DEVICE void emplaceBack(INDEX_TYPE const i, ARGS &&... args) const
Append a value to an array.
Definition: ArrayOfArraysView.hpp:444
Contains templates useful for type manipulation.
LVARRAY_HOST_DEVICE constexpr ArrayOfArraysView(INDEX_TYPE const numArrays, BUFFER_TYPE< INDEX_TYPE > const &offsets, BUFFER_TYPE< SIZE_TYPE > const &sizes, BUFFER_TYPE< T > const &values)
Construct a new ArrayOfArraysView from the given buffers.
Definition: ArrayOfArraysView.hpp:233
BUFFER_TYPE< SIZE_TYPE > m_sizes
Holds the size of each array.
Definition: ArrayOfArraysView.hpp:968
LVARRAY_HOST_DEVICE void appendToArray(INDEX_TYPE const i, ITER const first, ITER const last) const
Append values to an array.
Definition: ArrayOfArraysView.hpp:487
LVARRAY_HOST_DEVICE constexpr T const * getValues() const
Definition: ArrayOfArraysView.hpp:362
#define ARRAYOFARRAYS_CHECK_BOUNDS2(i, j)
Check that i is a valid array index and that j is a valid index into that array.
Definition: ArrayOfArraysView.hpp:114
LVARRAY_HOST_DEVICE constexpr bool isSorted(Description const desc)
Definition: sortedArrayManipulation.hpp:55
COL_TYPE value_type
An alias for the type contained in the inner arrays, here for stl compatability.
Definition: ArrayOfArraysView.hpp:191
Contains the LvArray umpire interface. This is only used to keep umpire/ResourceManager.hpp out of the includes for most headers.
void compress(BUFFERS &... buffers)
Compress the arrays so that the values of each array are contiguous with no extra capacity in between...
Definition: ArrayOfArraysView.hpp:669
LVARRAY_HOST_DEVICE void emplace(INDEX_TYPE const i, INDEX_TYPE const j, ARGS &&... args) const
Insert a value into an array.
Definition: ArrayOfArraysView.hpp:508
#define CONSTEXPR_WITHOUT_BOUNDS_CHECK
Expands to constexpr when array bound checking is disabled.
Definition: Macros.hpp:662
LVARRAY_HOST_DEVICE constexpr std::enable_if< std::is_signed< INDEX_TYPE >::value, bool >::type isPositive(INDEX_TYPE const i)
Definition: arrayManipulation.hpp:82
ArrayOfArraysView & operator=(ArrayOfArraysView const &)=default
Default copy assignment operator.
void resize(INDEX_TYPE const newSize, INDEX_TYPE const defaultArrayCapacity=0)
Set the number of arrays.
Definition: ArrayOfArraysView.hpp:631
DISABLE_HD_WARNING LVARRAY_HOST_DEVICE void erase(T *const LVARRAY_RESTRICT ptr, std::ptrdiff_t const size, std::ptrdiff_t const index, std::ptrdiff_t const n=1)
Shift the values in the array at or above the given position down by the given amount overwriting the...
Definition: arrayManipulation.hpp:396
Contains the implementation of LvArray::ArraySlice.
void setName(std::string const &name)
Set the name to be displayed whenever the underlying Buffer's user call back is called.
Definition: ArrayOfArraysView.hpp:951
LVARRAY_HOST_DEVICE CONSTEXPR_WITHOUT_BOUNDS_CHECK T & operator()(INDEX_TYPE const i, INDEX_TYPE const j) const
Definition: ArrayOfArraysView.hpp:421
This class provides a view into an array of arrays like object.
Definition: ArrayOfArraysView.hpp:170
#define ARRAYOFARRAYS_CAPACITY_CHECK(i, increase)
Check that the capacity of array i isn't exceeded when the size is increased by increase.
Definition: ArrayOfArraysView.hpp:137
DISABLE_HD_WARNING constexpr LVARRAY_HOST_DEVICE void forEachArg(F &&f)
The recursive base case where no argument is provided.
Definition: typeManipulation.hpp:129
LVARRAY_HOST_DEVICE constexpr INDEX_TYPE_NC valueCapacity() const
Definition: ArrayOfArraysView.hpp:394
Contains functions for manipulating buffers.
LVARRAY_HOST_DEVICE CONSTEXPR_WITHOUT_BOUNDS_CHECK INDEX_TYPE_NC sizeOfArray(INDEX_TYPE const i) const
Definition: ArrayOfArraysView.hpp:332
Contains some portable math functions.
void resizeImpl(INDEX_TYPE const newSize, INDEX_TYPE const defaultArrayCapacity, BUFFERS &... buffers)
Set the number of arrays.
Definition: ArrayOfArraysView.hpp:759
DISABLE_HD_WARNING LVARRAY_HOST_DEVICE void uninitializedCopy(ITER first, ITER const &last, T *LVARRAY_RESTRICT dst)
Copy construct values from the source to the destination.
Definition: arrayManipulation.hpp:177
#define ARRAYOFARRAYS_CHECK_INSERT_BOUNDS(i)
Check that i is a valid index to insert an array at.
Definition: ArrayOfArraysView.hpp:121
camp::resources::Platform MemorySpace
an alias for camp::resources::Platform.
Definition: bufferManipulation.hpp:31
Contains functions for manipulating a contiguous array of values.
LVARRAY_HOST_DEVICE constexpr ArrayOfArraysView< T, INDEX_TYPE const, true, BUFFER_TYPE > toViewConstSizes() const
Definition: ArrayOfArraysView.hpp:292
LVARRAY_HOST_DEVICE void emplaceBackAtomic(INDEX_TYPE const i, ARGS &&... args) const
Append a value to an array in a thread safe manner.
Definition: ArrayOfArraysView.hpp:465
The top level namespace.
Definition: Array.hpp:24
void resizeFromOffsetsImpl(INDEX_TYPE const numSubArrays, FUNC &&fillOffsets, BUFFERS &... buffers)
Clears the array and creates a new array with the given number of sub-arrays.
Definition: ArrayOfArraysView.hpp:1021
LVARRAY_HOST_DEVICE void reserve(BUFFER &buf, std::ptrdiff_t const size, MemorySpace const space, std::ptrdiff_t const newCapacity)
Reserve space in the buffer for at least the given capacity.
Definition: bufferManipulation.hpp:230
This file contains common sorted array manipulation routines. Aside from the functions that take a ca...
void resizeFromCapacities(INDEX_TYPE const numSubArrays, INDEX_TYPE const *const capacities, BUFFERS &... buffers)
Clears the array and creates a new array with the given number of sub-arrays.
Definition: ArrayOfArraysView.hpp:725
void setEqualTo(INDEX_TYPE const srcNumArrays, INDEX_TYPE const srcMaxOffset, BUFFER_TYPE< INDEX_TYPE > const &srcOffsets, BUFFER_TYPE< INDEX_TYPE > const &srcSizes, BUFFER_TYPE< T > const &srcValues, PAIRS_OF_BUFFERS &&... pairs)
Set this ArrayOfArraysView equal to the provided arrays.
Definition: ArrayOfArraysView.hpp:830
INDEX_TYPE_NC m_numArrays
The number of arrays contained.
Definition: ArrayOfArraysView.hpp:961
ArrayOfArraysView(bool)
Protected constructor to be used by parent classes.
Definition: ArrayOfArraysView.hpp:614
void free(BUFFERS &... buffers)
Destroy all the objects held by this array and free all associated memory.
Definition: ArrayOfArraysView.hpp:806
DISABLE_HD_WARNING LVARRAY_HOST_DEVICE void destroy(T *const LVARRAY_RESTRICT ptr, std::ptrdiff_t const size)
Destory the values in the array.
Definition: arrayManipulation.hpp:152
LVARRAY_HOST_DEVICE CONSTEXPR_WITHOUT_BOUNDS_CHECK INDEX_TYPE_NC capacityOfArray(INDEX_TYPE const i) const
Definition: ArrayOfArraysView.hpp:384
std::remove_const_t< INDEX_TYPE > INDEX_TYPE_NC
Since INDEX_TYPE should always be const we need an alias for the non const version.
Definition: ArrayOfArraysView.hpp:174
LVARRAY_HOST_DEVICE void insertIntoArray(INDEX_TYPE const i, INDEX_TYPE const j, ITER const first, ITER const last) const
Insert values into an array.
Definition: ArrayOfArraysView.hpp:530
LVARRAY_HOST_DEVICE void eraseFromArray(INDEX_TYPE const i, INDEX_TYPE const j, INDEX_TYPE const n=1) const
Erase values from an array.
Definition: ArrayOfArraysView.hpp:551
void setCapacityOfArray(INDEX_TYPE const i, INDEX_TYPE const newCapacity, BUFFERS &... buffers)
Set the capacity of the given array.
Definition: ArrayOfArraysView.hpp:877
#define ARRAYOFARRAYS_CHECK_INSERT_BOUNDS2(i, j)
Check that i is a valid array index and that j is a valid insertion index into that array...
Definition: ArrayOfArraysView.hpp:129
void assimilate(ArrayOfArraysView< T, INDEX_TYPE, CONST_SIZES, BUFFER_TYPE > &&src)
Steal the resources of src, clearing it in the process.
Definition: ArrayOfArraysView.hpp:749
DISABLE_HD_WARNING LVARRAY_HOST_DEVICE void uninitializedShiftDown(T *const LVARRAY_RESTRICT ptr, std::ptrdiff_t const size, std::ptrdiff_t const amount)
Shift values down into uninitialized memory.
Definition: arrayManipulation.hpp:225
DISABLE_HD_WARNING LVARRAY_HOST_DEVICE void copyInto(DST_BUFFER &dst, std::ptrdiff_t const dstSize, SRC_BUFFER const &src, std::ptrdiff_t const srcSize)
Copy values from the source buffer into the destination buffer.
Definition: bufferManipulation.hpp:393
LVARRAY_HOST_DEVICE constexpr INDEX_TYPE const * getOffsets() const
Definition: ArrayOfArraysView.hpp:353
std::conditional_t< CONST_SIZES, INDEX_TYPE const, INDEX_TYPE_NC > SIZE_TYPE
The type contained by the m_sizes buffer.
Definition: ArrayOfArraysView.hpp:177
std::pair< BUFFER_TYPE< U > &, BUFFER_TYPE< U > const & > PairOfBuffers
Alias for a std::pair of buffers.
Definition: ArrayOfArraysView.hpp:608
camp::concepts::metalib::all_of_t< TYPES ... > all_of_t
A struct that contains a static constexpr bool value that is true if all of TYPES::value are true...
Definition: typeManipulation.hpp:164
LVARRAY_HOST_DEVICE constexpr INDEX_TYPE_NC size() const
Definition: ArrayOfArraysView.hpp:324
LVARRAY_HOST_DEVICE constexpr SIZE_TYPE const * getSizes() const
Definition: ArrayOfArraysView.hpp:342
LVARRAY_HOST_DEVICE constexpr ArrayOfArraysView< T const, INDEX_TYPE const, true, BUFFER_TYPE > toViewConst() const
Definition: ArrayOfArraysView.hpp:305
DISABLE_HD_WARNING constexpr LVARRAY_HOST_DEVICE std::iterator_traits< ITER >::difference_type iterDistance(ITER first, ITER const last, std::input_iterator_tag)
Definition: arrayManipulation.hpp:105
DISABLE_HD_WARNING LVARRAY_HOST_DEVICE void uninitializedShiftUp(T *const LVARRAY_RESTRICT ptr, std::ptrdiff_t const size, std::ptrdiff_t const amount)
Shift values up into uninitialized memory.
Definition: arrayManipulation.hpp:253
void reserveValues(INDEX_TYPE const newValueCapacity, BUFFERS &... buffers)
Reserve space for the given number of values.
Definition: ArrayOfArraysView.hpp:652
LVARRAY_HOST_DEVICE constexpr ArrayOfArraysView(ArrayOfArraysView &&src)
Default move constructor.
Definition: ArrayOfArraysView.hpp:218
#define CONSTEXPR_WITH_NDEBUG
Expands to constexpr in release builds (when NDEBUG is defined).
Definition: Macros.hpp:679
void registerTouch(MemorySpace const space) const
Touch the memory in space.
Definition: ArrayOfArraysView.hpp:571
DISABLE_HD_WARNING LVARRAY_HOST_DEVICE void emplace(T *const LVARRAY_RESTRICT ptr, std::ptrdiff_t const size, std::ptrdiff_t const index, ARGS &&... args)
Insert into the array constructing the new value in place.
Definition: arrayManipulation.hpp:478
#define LVARRAY_ASSERT_EQ(lhs, rhs)
Assert that two values compare equal in debug builds.
Definition: Macros.hpp:524
#define LVARRAY_HOST_DEVICE
Mark a function for both host and device usage.
Definition: Macros.hpp:600
COL_TYPE ValueType
An alias for the type contained in the inner arrays.
Definition: ArrayOfArraysView.hpp:185
void resizeFromOffsets(INDEX_TYPE const numSubArrays, INDEX_TYPE const *const offsets, BUFFERS &... buffers)
Clears the array and creates a new array with the given number of sub-arrays.
Definition: ArrayOfArraysView.hpp:702