Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
FixedArray.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* FixedArray.h (C) 2000-2024 */
9/* */
10/* Tableau 1D de taille fixe. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_FIXEDARRAY_H
13#define ARCANE_UTILS_FIXEDARRAY_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/ArrayView.h"
18
19#include <array>
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29/*!
30 * \ingroup Collection
31 *
32 * \brief Tableau 1D de taille fixe.
33 *
34 * Cette classe est similaire à std::array avec les différences suivantes:
35 *
36 * - le nombre d'élément est un 'Int32'.
37 * - les éléments sont initialisés avec le constructeur par défaut
38 * - en mode 'Check', vérifie les débordements de tableau
39 *
40 * Cette classe propose aussi des conversions vers ArrayView, ConstArrayView
41 * et SmallSpan.
42 */
43template <typename T, Int32 NbElement>
44class FixedArray final
45{
46 static_assert(NbElement >= 0, "NbElement has to positive");
47
48 public:
49
50 using value_type = T;
51 using size_type = Int32;
52 using difference_type = std::ptrdiff_t;
53 using reference = value_type&;
54 using const_reference = const value_type&;
55 using pointer = value_type*;
56 using const_pointer = const value_type*;
57
58 using iterator = typename std::array<T, NbElement>::iterator;
59 using const_iterator = typename std::array<T, NbElement>::const_iterator;
60
61 public:
62
63 //! Créé un tableau en initialisant les éléments avec le constructeur par défaut de \a T
65 : m_value({})
66 {}
67 //! Créé un tableau en initialisant les éléments de \a x
68 FixedArray(const std::array<T, NbElement>& x)
69 : m_value(x)
70 {}
71
72 public:
73
74 //! Valeur du \a i-ème élément
75 ARCCORE_HOST_DEVICE T& operator[](Int32 index)
76 {
77 ARCANE_CHECK_AT(index, NbElement);
78 return m_value[index];
79 }
80 //! Valeur du \a i-ème élément
81 ARCCORE_HOST_DEVICE const T& operator[](Int32 index) const
82 {
83 ARCANE_CHECK_AT(index, NbElement);
84 return m_value[index];
85 }
86 //! Vue modifiable sur le tableau
87 ARCCORE_HOST_DEVICE SmallSpan<T, NbElement> span() { return { m_value.data(), NbElement }; }
88 //! Vue non modifiable sur le tableau
89 ARCCORE_HOST_DEVICE SmallSpan<const T, NbElement> span() const { return { m_value.data(), NbElement }; }
90 //! Vue modifiable sur le tableau
91 ARCCORE_HOST_DEVICE ArrayView<T> view() { return { NbElement, m_value.data() }; }
92 //! Vue non modifiable sur le tableau
93 ARCCORE_HOST_DEVICE ConstArrayView<T> view() const { return { NbElement, m_value.data() }; }
94 ARCCORE_HOST_DEVICE const T* data() const { return m_value.data(); }
95 ARCCORE_HOST_DEVICE T* data() { return m_value.data(); }
96
97 //! Nombre d'éléments tu tableau
98 static constexpr Int32 size() { return NbElement; }
99
100 public:
101
102 //! Itérateur sur le début du tableau
103 iterator begin() { return m_value.begin(); }
104 //! Itérateur sur la fin du tableau
105 iterator end() { return m_value.end(); }
106 //! Itérateur constant sur le début du tableau
107 const_iterator begin() const { return m_value.begin(); }
108 //! Itérateur constant la fin du tableau
109 const_iterator end() const { return m_value.end(); }
110
111 private:
112
113 std::array<T, NbElement> m_value;
114};
115
116/*---------------------------------------------------------------------------*/
117/*---------------------------------------------------------------------------*/
118
119} // namespace Arcane
120
121/*---------------------------------------------------------------------------*/
122/*---------------------------------------------------------------------------*/
123
124#endif
Tableau 1D de taille fixe.
Definition FixedArray.h:45
__host__ __device__ ArrayView< T > view()
Vue modifiable sur le tableau.
Definition FixedArray.h:91
iterator begin()
Itérateur sur le début du tableau.
Definition FixedArray.h:103
__host__ __device__ const T & operator[](Int32 index) const
Valeur du i-ème élément.
Definition FixedArray.h:81
__host__ __device__ SmallSpan< T, NbElement > span()
Vue modifiable sur le tableau.
Definition FixedArray.h:87
const_iterator end() const
Itérateur constant la fin du tableau.
Definition FixedArray.h:109
FixedArray()
Créé un tableau en initialisant les éléments avec le constructeur par défaut de T.
Definition FixedArray.h:64
static constexpr Int32 size()
Nombre d'éléments tu tableau.
Definition FixedArray.h:98
FixedArray(const std::array< T, NbElement > &x)
Créé un tableau en initialisant les éléments de x.
Definition FixedArray.h:68
const_iterator begin() const
Itérateur constant sur le début du tableau.
Definition FixedArray.h:107
__host__ __device__ T & operator[](Int32 index)
Valeur du i-ème élément.
Definition FixedArray.h:75
__host__ __device__ SmallSpan< const T, NbElement > span() const
Vue non modifiable sur le tableau.
Definition FixedArray.h:89
iterator end()
Itérateur sur la fin du tableau.
Definition FixedArray.h:105
__host__ __device__ ConstArrayView< T > view() const
Vue non modifiable sur le tableau.
Definition FixedArray.h:93
Vue modifiable d'un tableau d'un type T.
Vue constante d'un tableau de type T.
Vue d'un tableau d'éléments de type T.
Definition Span.h:670
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-