Low-Level Abstraction of Memory Access
ArrayExtents.hpp File Reference
#include "Array.hpp"
#include "Meta.hpp"
#include <limits>
#include <type_traits>
+ Include dependency graph for ArrayExtents.hpp:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  llama::ArrayIndex< T, Dim >
 
struct  llama::internal::IndexTypeFromArgs< Default, Ints >
 
struct  llama::internal::IndexTypeFromArgs< Default, FirstInt, Ints... >
 
struct  std::tuple_size< llama::ArrayIndex< V, N > >
 
struct  std::tuple_element< I, llama::ArrayIndex< V, N > >
 
struct  llama::internal::Dyn
 
struct  llama::ArrayExtents< T, Sizes >
 
struct  llama::ArrayExtents< T >
 
struct  std::tuple_size< llama::ArrayExtents< SizeType, Sizes... > >
 
struct  std::tuple_element< I, llama::ArrayExtents< SizeType, Sizes... > >
 

Namespaces

 llama
 
 llama::internal
 

Typedefs

template<typename SizeType , std::size_t N, SizeType Extent>
using llama::ArrayExtentsNCube = decltype(internal::makeArrayExtents< SizeType, Extent >(std::make_index_sequence< N >{}))
 N-dimensional ArrayExtents where all N extents are Extent. More...
 
template<typename SizeType , std::size_t N>
using llama::ArrayExtentsDynamic = ArrayExtentsNCube< SizeType, N, dyn >
 N-dimensional ArrayExtents where all values are dynamic. More...
 

Functions

template<std::size_t Dim, typename TA , typename TB >
constexpr auto llama::operator== (ArrayIndex< TA, Dim > a, ArrayIndex< TB, Dim > b) -> bool
 
template<std::size_t Dim, typename TA , typename TB >
constexpr auto llama::operator!= (ArrayIndex< TA, Dim > a, ArrayIndex< TB, Dim > b) -> bool
 
template<typename... Args>
 llama::ArrayIndex (Args...) -> ArrayIndex< typename internal::IndexTypeFromArgs< std::size_t, Args... >::type, sizeof...(Args)>
 
template<typename... Args>
 llama::ArrayExtents (Args...) -> ArrayExtents< typename internal::IndexTypeFromArgs< std::size_t, Args... >::type,(Args{}, dyn)... >
 
template<typename SizeTypeA , SizeTypeA... SizesA, typename SizeTypeB , SizeTypeB... SizesB>
constexpr auto llama::operator== (ArrayExtents< SizeTypeA, SizesA... > a, ArrayExtents< SizeTypeB, SizesB... > b) -> bool
 
template<typename SizeTypeA , SizeTypeA... SizesA, typename SizeTypeB , SizeTypeB... SizesB>
constexpr auto llama::operator!= (ArrayExtents< SizeTypeA, SizesA... > a, ArrayExtents< SizeTypeB, SizesB... > b) -> bool
 
template<typename SizeType , SizeType... Sizes>
constexpr auto llama::product (ArrayExtents< SizeType, Sizes... > e) -> SizeType
 
template<typename SizeType , SizeType Extent, std::size_t... Is>
constexpr auto llama::internal::makeArrayExtents (std::index_sequence< Is... >)
 
template<typename SizeType , std::size_t Dim, typename Func , typename... OuterIndices>
void llama::forEachArrayIndex ([[maybe_unused]] const ArrayIndex< SizeType, Dim > &extents, Func &&func, OuterIndices... outerIndices)
 
template<typename SizeType , SizeType... Sizes, typename Func >
void llama::forEachArrayIndex (ArrayExtents< SizeType, Sizes... > extents, Func &&func)
 

Variables

constexpr auto llama::dyn = internal::Dyn{}
 Used as a template argument to ArrayExtents to mark a dynamic extent. More...