12#ifndef ARCANE_UTILS_ARRAYLAYOUT_H
13#define ARCANE_UTILS_ARRAYLAYOUT_H
17#include "arcane/utils/ArrayBoundsIndex.h"
18#include "arcane/utils/ArrayExtentsValue.h"
19#include "arcane/utils/MDDim.h"
38template<Int32 I,Int32 J>
43 static constexpr Int64 LastExtent = J;
45 static ARCCORE_HOST_DEVICE
constexpr Int64
46 offset(ArrayIndex<2> idx,
Int64 extent1)
48 return (extent1 * idx[I]) +
Int64(idx[J]);
51 static constexpr std::array<Int32,2> layoutInfo() {
return { I, J }; }
52 static constexpr ARCCORE_HOST_DEVICE
Int32 layout0() {
return I; }
53 static constexpr ARCCORE_HOST_DEVICE
Int32 layout1() {
return J; }
59template<Int32 I,Int32 J,Int32 K>
64 static constexpr Int64 LastExtent = K;
66 static ARCCORE_HOST_DEVICE
constexpr Int64
67 offset(ArrayIndex<3> idx,
Int64 extent1,
Int64 extent2)
69 return (extent2 * idx[I]) + (extent1*idx[J]) + idx.asInt64(K);
72 template<
typename ExtentType>
static ARCCORE_HOST_DEVICE
constexpr Int64
73 computeOffsetIndexes(
const ExtentType& extents)
75 return extents.template constLargeExtent<J>() * extents.template constLargeExtent<K>();
78 static constexpr std::array<Int32,3> layoutInfo() {
return { I, J, K }; }
80 static constexpr ARCCORE_HOST_DEVICE
Int32 layout0() {
return I; }
81 static constexpr ARCCORE_HOST_DEVICE
Int32 layout1() {
return J; }
82 static constexpr ARCCORE_HOST_DEVICE
Int32 layout2() {
return K; }
107 using Layout1Type = LayoutType<1>;
108 using Layout2Type = LayoutType<2>;
109 using Layout3Type = LayoutType<3>;
110 using Layout4Type = LayoutType<4>;
Le layout par défaut est toujours RightLayout.
RightLayoutN< Rank > LayoutType
Implémentation pour le rang N.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int64_t Int64
Type entier signé sur 64 bits.
std::int32_t Int32
Type entier signé sur 32 bits.