Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ArrayShape.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 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/* ArrayShape.h (C) 2000-2023 */
9/* */
10/* Représente la forme d'un tableau. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_ARRAYSHAPE_H
13#define ARCANE_UTILS_ARRAYSHAPE_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18#include "arcane/utils/ArrayView.h"
19
20#include <array>
21
22/*
23 * ATTENTION:
24 *
25 * Toutes les classes de ce fichier sont expérimentales et l'API n'est pas
26 * figée. A NE PAS UTILISER EN DEHORS DE ARCANE.
27 */
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31namespace Arcane
32{
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
39class ARCANE_UTILS_EXPORT ArrayShape
40{
41 public:
42
43 static constexpr int MAX_NB_DIMENSION = 8;
44
45 ArrayShape() = default;
46 explicit ArrayShape(Span<const Int32> v);
47
48 public:
49
51 Int32 nbDimension() const { return m_nb_dim; }
52
54 SmallSpan<const Int32> dimensions() const { return { m_dims.data(), m_nb_dim }; }
55
57 Int32 dimension(Int32 index) const { return m_dims[index]; }
58
60 Int64 totalNbElement() const
61 {
62 Int64 v = 1;
63 for (Int32 i = 0, n = m_nb_dim; i < n; ++i)
64 v *= (Int64)m_dims[i];
65 return v;
66 }
67
69 void setNbDimension(Int32 nb_value);
70
72 void setDimension(Int32 index, Int32 value) { m_dims[index] = value; }
73
75 void setDimensions(Span<const Int32> dims);
76
77 friend std::ostream& operator<<(std::ostream& o, const ArrayShape& s)
78 {
79 s._print(o);
80 return o;
81 }
82 friend bool operator==(const ArrayShape& s1, const ArrayShape& s2)
83 {
84 return _isEqual(s1, s2);
85 }
86 friend bool operator!=(const ArrayShape& s1, const ArrayShape& s2)
87 {
88 return !_isEqual(s1, s2);
89 }
90
91 private:
92
93 Int32 m_nb_dim = 0;
94 std::array<Int32, MAX_NB_DIMENSION> m_dims = {};
95
96 private:
97
98 void _set(SmallSpan<const Int32> v);
99 static bool _isEqual(const ArrayShape& s1, const ArrayShape& s2);
100 void _print(std::ostream& o) const;
101};
102
103/*---------------------------------------------------------------------------*/
104/*---------------------------------------------------------------------------*/
105
106} // End namespace Arcane
107
108/*---------------------------------------------------------------------------*/
109/*---------------------------------------------------------------------------*/
110
111#endif
Fichier de configuration d'Arcane.
Forme d'un tableau.
Definition ArrayShape.h:40
Int32 dimension(Int32 index) const
Nombre d'élements de la index-ème dimension.
Definition ArrayShape.h:57
void setDimension(Int32 index, Int32 value)
Positionne la valeur de la index-ème dimension à value.
Definition ArrayShape.h:72
Int32 nbDimension() const
Rang de la forme.
Definition ArrayShape.h:51
SmallSpan< const Int32 > dimensions() const
Valeurs de chaque dimension.
Definition ArrayShape.h:54
Int64 totalNbElement() const
Nombre total d'élements.
Definition ArrayShape.h:60
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
constexpr ARCCORE_HOST_DEVICE pointer data() const noexcept
Pointeur sur le début de la vue.
Definition Span.h:419
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-