Arcane  v3.16.4.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ItemIndexArrayView.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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/* ItemIndexArrayView.h (C) 2000-2025 */
9/* */
10/* Vue sur un tableau d'index (localIds()) d'entités. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_ITEMINDEXARRAYVIEW_H
13#define ARCANE_CORE_ITEMINDEXARRAYVIEW_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/ArrayView.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28/*!
29 * \internal
30 * \brief Vue sur un tableau d'index (localIds()) d'entités.
31 *
32 * \warning La vue n'est valide que tant que le tableau associé n'est
33 * pas modifié. Les instances de cette classe sont en général temporaires
34 * et ne doivent pas être conservées.
35 *
36 * En plus de la liste des entités, cette classe permet d'avoir des
37 * informations supplémentaires, comme par exemple si la liste est contigüe.
38 */
39class ARCANE_CORE_EXPORT ItemIndexArrayView
40{
41 // NOTE: Cette classe est mappée en C# et si on change sa structure il
42 // faut mettre à jour la version C# correspondante.
43 friend ItemVectorView;
44 friend ItemGroup;
45 template <int Extent> friend class ItemConnectedListView;
46 template <typename ItemType, int Extent> friend class ItemConnectedListViewT;
47 template <typename ItemType> friend class ItemVectorViewT;
48
49 public:
50
51 // NOTE: Si on ajoute des valeurs ici, il faut vérifier s'il faut les
52 // propager dans les méthodes telles que subView().
53 enum
54 {
55 F_Contiguous = 1 << 1, //!< Les numéros locaux sont contigüs.
56 F_Contigous = F_Contiguous
57 };
58
59 public:
60
61 //! Construit une vue vide
62 ItemIndexArrayView() = default;
63
64 // TODO: A supprimer
65 //! Construit une vue à partir des numéros locaux \a local_ids
66 explicit ItemIndexArrayView(const Int32ConstArrayView local_ids)
67 : m_view(local_ids, 0)
68 {}
69
71 : m_view(view)
72 {
73 }
74
75 public:
76
77 //! Accède au \a i-ème élément du vecteur
78 inline Int32 operator[](Integer index) const
79 {
80 return m_view.localId(index);
81 }
82
83 //! Nombre d'éléments du vecteur
84 Int32 size() const
85 {
86 return m_view.size();
87 }
88
89 //! Ajoute à \a ids la liste des localIds() du vecteur.
90 void fillLocalIds(Array<Int32>& ids) const;
91
92 //! Sous-vue à partir de l'élément \a abegin et contenant \a asize éléments
93 inline ItemIndexArrayView subView(Integer abegin, Integer asize) const
94 {
95 // On propage le flag F_Contigous sur la sous-vue.
96 // Pour les autres flags, il faudra vérifier s'il faut les propager.
97 return ItemIndexArrayView(m_view._idsWithoutOffset().subView(abegin, asize), m_view.m_local_id_offset, m_flags);
98 }
99
100 Int32 flags() const
101 {
102 return m_flags;
103 }
104
105 bool isContigous() const { return isContiguous(); }
106
107 //! Vrai si les localIds() sont contigüs
108 bool isContiguous() const
109 {
110 return m_flags & F_Contigous;
111 }
112
113 friend std::ostream& operator<<(std::ostream& o, const ItemIndexArrayView& a)
114 {
115 o << a.m_view;
116 return o;
117 }
118
119 public:
120
121 // TODO Rendre obsolète (3.11+)
122 //! Tableau des numéros locaux des entités
124 {
125 return m_view._idsWithoutOffset();
126 }
127
128 ARCANE_DEPRECATED_REASON("Y2023: This method is internal to Arcane. Do not use it")
129 operator Int32ConstArrayView() const
130 {
131 return _localIds();
132 }
133
134 private:
135
136 ARCANE_DEPRECATED_REASON("Y2023: This method is internal to Arcane. Do not use it")
137 const Int32* unguardedBasePointer() const
138 {
139 return _data();
140 }
141
142 ARCANE_DEPRECATED_REASON("Y2023: This method is internal to Arcane. Do not use it")
143 const Int32* data() const
144 {
145 return _data();
146 }
147
148 protected:
149
150 impl::ItemLocalIdListContainerView m_view;
151 Int32 m_flags = 0;
152
153 private:
154
155 ItemIndexArrayView(SmallSpan<const Int32> local_ids, Int32 local_id_offset, Int32 aflags)
156 : m_view(local_ids, local_id_offset)
157 , m_flags(aflags)
158 {}
159
160 const Int32* _data() const
161 {
162 return m_view.m_local_ids;
163 }
164
165 Int32ConstArrayView _localIds() const
166 {
167 return m_view._idsWithoutOffset();
168 }
169 Int32 _localIdOffset() const
170 {
171 return m_view.m_local_id_offset;
172 }
173};
174
175/*---------------------------------------------------------------------------*/
176/*---------------------------------------------------------------------------*/
177
178} // End namespace Arcane
179
180/*---------------------------------------------------------------------------*/
181/*---------------------------------------------------------------------------*/
182
183#endif
Déclarations des types utilisés dans Arcane.
Classe de base des vecteurs 1D de données.
bool isContiguous() const
Vrai si les localIds() sont contigüs.
ItemIndexArrayView(const Int32ConstArrayView local_ids)
Construit une vue à partir des numéros locaux local_ids.
ItemIndexArrayView subView(Integer abegin, Integer asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
Int32 size() const
Nombre d'éléments du vecteur.
ItemIndexArrayView()=default
Construit une vue vide.
Int32ConstArrayView localIds() const
Tableau des numéros locaux des entités.
Int32 operator[](Integer index) const
Accède au i-ème élément du vecteur.
@ F_Contiguous
Les numéros locaux sont contigüs.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:569
std::ostream & operator<<(std::ostream &ostr, eItemKind item_kind)
Opérateur de sortie sur un flot.
std::int32_t Int32
Type entier signé sur 32 bits.