Arcane  v3.15.3.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ItemLocalId.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/* ItemLocalId.h (C) 2000-2025 */
9/* */
10/* Numéro local d'une entité du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_ITEMLOCALID_H
13#define ARCANE_CORE_ITEMLOCALID_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/ArrayView.h"
18
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26class ItemSharedInfo;
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31// TODO: rendre obsolète les constructeurs qui prennent un argument
32// un ItemEnumerator
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36/*!
37 * \ingroup Mesh
38 * \brief Index d'un Item dans une variable.
39 */
40class ARCANE_CORE_EXPORT ItemLocalId
41{
42 public:
43
44 ItemLocalId() = default;
45 constexpr ARCCORE_HOST_DEVICE explicit ItemLocalId(Int32 id)
46 : m_local_id(id)
47 {}
48 // La définition de ce constructeur est dans ItemInternal.h
49 inline ItemLocalId(ItemInternal* item);
50 inline ItemLocalId(ItemConnectedEnumerator enumerator);
51 template <typename ItemType> inline ItemLocalId(ItemEnumeratorT<ItemType> enumerator);
52 template <typename ItemType> inline ItemLocalId(ItemConnectedEnumeratorT<ItemType> enumerator);
53 inline ItemLocalId(Item item);
54 constexpr ARCCORE_HOST_DEVICE operator Int32() const { return m_local_id; }
55 constexpr ARCCORE_HOST_DEVICE Int32 asInt32() const { return m_local_id; }
56 constexpr ARCCORE_HOST_DEVICE Int32 asInteger() const { return m_local_id; }
57
58 public:
59
60 constexpr ARCCORE_HOST_DEVICE Int32 localId() const { return m_local_id; }
61 constexpr ARCCORE_HOST_DEVICE bool isNull() const { return m_local_id == NULL_ITEM_LOCAL_ID; }
62
63 public:
64
66 {
67 auto* ptr = reinterpret_cast<const ItemLocalId*>(v.data());
68 return { ptr, v.size() };
69 }
71 {
72 auto* ptr = reinterpret_cast<const Int32*>(v.data());
73 return { ptr, v.size() };
74 }
75
76 private:
77
78 Int32 m_local_id = NULL_ITEM_LOCAL_ID;
79};
80
81/*---------------------------------------------------------------------------*/
82/*---------------------------------------------------------------------------*/
83/*!
84 * \ingroup Mesh
85 * \brief Index d'une entité \a ItemType dans une variable.
86 */
87template <typename ItemType_>
89: public ItemLocalId
90{
91 public:
92
93 using ItemType = ItemType_;
95
96 public:
97
98 ItemLocalIdT() = default;
99 constexpr ARCCORE_HOST_DEVICE explicit ItemLocalIdT(Int32 id)
100 : ItemLocalId(id)
101 {}
102 inline ItemLocalIdT(ItemInternal* item);
104 inline ItemLocalIdT(ItemType item);
105
106 public:
107
109 {
110 auto* ptr = reinterpret_cast<const ThatClass*>(v.data());
111 return { ptr, v.size() };
112 }
113
115 {
116 auto* ptr = reinterpret_cast<const Int32*>(v.data());
117 return { ptr, v.size() };
118 }
119
120 public:
121
122 ARCANE_DEPRECATED_REASON("Y2022: Use strongly typed 'ItemEnumeratorT<ItemType>' or 'ItemType'")
123 inline ItemLocalIdT(ItemEnumerator enumerator);
124};
125
126/*---------------------------------------------------------------------------*/
127/*---------------------------------------------------------------------------*/
128/*!
129 * \brief Classe pour convertir un ItemLocalId vers une entité (Item).
130 *
131 * Les instances de cette classe restent valides durant toute la durée
132 * de vie de la famille associée.
133 */
134class ARCANE_CORE_EXPORT ItemLocalIdToItemConverter
135{
136 template <typename ItemType_> friend class ItemLocalIdToItemConverterT;
137
138 public:
139
140 explicit ItemLocalIdToItemConverter(IItemFamily* family);
141
142 public:
143
144 //! Entité de numéro local \a local_id
145 inline constexpr ARCCORE_HOST_DEVICE Item operator[](ItemLocalId local_id) const;
146 //! Entité de numéro local \a local_id
147 inline constexpr ARCCORE_HOST_DEVICE Item operator[](Int32 local_id) const;
148
149 private:
150
151 ItemSharedInfo* m_item_shared_info = nullptr;
152};
153
154/*---------------------------------------------------------------------------*/
155/*---------------------------------------------------------------------------*/
156/*!
157 * \brief Classe pour convertir un ItemLocalId vers une entité (Item).
158 *
159 * Les instances de cette classe restent valides durant toute la durée
160 * de vie de la famille associée.
161 */
162template <typename ItemType_> class ItemLocalIdToItemConverterT
164{
165 public:
166
167 using ItemType = ItemType_;
169
170 public:
171
172 using ItemLocalIdToItemConverter::ItemLocalIdToItemConverter;
173
174 public:
175
176 //! Entité de numéro local \a local_id
177 inline constexpr ARCCORE_HOST_DEVICE ItemType operator[](ItemLocalIdType local_id) const;
178 //! Entité de numéro local \a local_id
179 inline constexpr ARCCORE_HOST_DEVICE ItemType operator[](Int32 local_id) const;
180};
181
182/*---------------------------------------------------------------------------*/
183/*---------------------------------------------------------------------------*/
184
185//! Classe pour convertir un NodeLocalId vers une arête.
187: public ItemLocalIdToItemConverterT<Node>
188{
189 public:
190
191 using ItemLocalIdToItemConverterT<Node>::ItemLocalIdToItemConverterT;
192};
193
194//! Classe pour convertir un EdgeLocalId vers une arête.
196: public ItemLocalIdToItemConverterT<Edge>
197{
198 public:
199
200 using ItemLocalIdToItemConverterT<Edge>::ItemLocalIdToItemConverterT;
201};
202
203//! Classe pour convertir un FaceLocalId vers une face.
205: public ItemLocalIdToItemConverterT<Face>
206{
207 public:
208
209 using ItemLocalIdToItemConverterT<Face>::ItemLocalIdToItemConverterT;
210};
211
212//! Classe pour convertir un CellLocalId vers une maille.
214: public ItemLocalIdToItemConverterT<Cell>
215{
216 public:
217
218 using ItemLocalIdToItemConverterT<Cell>::ItemLocalIdToItemConverterT;
219};
220
221//! Classe pour convertir un ParticleLocalId vers une particule.
223: public ItemLocalIdToItemConverterT<Particle>
224{
225 public:
226
227 using ItemLocalIdToItemConverterT<Particle>::ItemLocalIdToItemConverterT;
228};
229
230//! Classe pour convertir un DoFLocalId vers un degré de liberté.
232: public ItemLocalIdToItemConverterT<DoF>
233{
234 public:
235
236 using ItemLocalIdToItemConverterT<DoF>::ItemLocalIdToItemConverterT;
237};
238
239/*---------------------------------------------------------------------------*/
240/*---------------------------------------------------------------------------*/
241
242} // namespace Arcane
243
244/*---------------------------------------------------------------------------*/
245/*---------------------------------------------------------------------------*/
246
247#endif
Déclarations de types sur les entités.
Classe pour convertir un CellLocalId vers une maille.
Maille d'un maillage.
Definition Item.h:1191
Classe pour convertir un DoFLocalId vers un degré de liberté.
classe degré de liberté.
Definition Item.h:1503
Classe pour convertir un EdgeLocalId vers une arête.
Arête d'une maille.
Definition Item.h:809
Classe pour convertir un FaceLocalId vers une face.
Face d'une maille.
Definition Item.h:944
Interface d'une famille d'entités.
Enumérateur sur une liste d'entités connectées à une autre.
Enumérateur sur une liste d'entités.
Index d'une entité ItemType dans une variable.
Definition ItemLocalId.h:90
Classe pour convertir un ItemLocalId vers une entité (Item).
constexpr __host__ __device__ ItemType operator[](ItemLocalIdType local_id) const
Entité de numéro local local_id.
Definition Item.h:1764
Classe pour convertir un ItemLocalId vers une entité (Item).
Index d'un Item dans une variable.
Definition ItemLocalId.h:41
Classe de base d'un élément de maillage.
Definition Item.h:83
Classe pour convertir un NodeLocalId vers une arête.
Noeud d'un maillage.
Definition Item.h:573
Classe pour convertir un ParticleLocalId vers une particule.
Particule.
Definition Item.h:1397
Référence à une instance.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-