Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ItemEnumerator.h
Aller à la documentation de ce fichier.
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/* ItemEnumerator.h (C) 2000-2024 */
9/* */
10/* Enumérateur sur des groupes d'entités du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_ITEMENUMERATOR_H
13#define ARCANE_CORE_ITEMENUMERATOR_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/core/ItemInternalEnumerator.h"
18#include "arcane/core/Item.h"
19#include "arcane/core/EnumeratorTraceWrapper.h"
20#include "arcane/core/IItemEnumeratorTracer.h"
21#include "arcane/core/ItemEnumeratorBase.h"
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36
37namespace Arcane
38{
39
40/*---------------------------------------------------------------------------*/
41/*---------------------------------------------------------------------------*/
42
43class ItemEnumeratorCS;
44class ItemGroupImpl;
45class ItemEnumeratorPOD;
46
47// Cette méthode est réservée pour SWIG
48extern "C++" ARCANE_CORE_EXPORT
49void _arcaneInternalItemEnumeratorSwigSet(const ItemEnumerator* ie, ItemEnumeratorPOD* vpod);
50
51/*---------------------------------------------------------------------------*/
52/*---------------------------------------------------------------------------*/
57: public ItemEnumeratorBaseT<Item>
58{
59 friend class ItemEnumeratorCS;
60 friend class ItemGroup;
61 friend class ItemVector;
62 friend class ItemVectorView;
63 friend class ItemPairEnumerator;
64 template<int Extent> friend class ItemConnectedListView;
65 // NOTE: Normalement il suffirait de faire cela:
66 // template<class T> friend class ItemEnumeratorBase;
67 // mais cela ne fonctionne pas avec GCC 8. On fait donc la spécialisation
68 // à la main
69 //template<class T> friend class ItemEnumeratorBaseT;
70 friend class ItemEnumeratorBaseT<Item>;
71 friend class ItemEnumeratorBaseT<Node>;
73 friend class ItemEnumeratorBaseT<Edge>;
74 friend class ItemEnumeratorBaseT<Face>;
75 friend class ItemEnumeratorBaseT<Cell>;
76 friend class ItemEnumeratorBaseT<Particle>;
77 friend class ItemEnumeratorBaseT<DoF>;
78 friend void _arcaneInternalItemEnumeratorSwigSet(const ItemEnumerator* ie, ItemEnumeratorPOD* vpod);
79
80 public:
81
84
85 public:
86
87 ItemEnumerator() = default;
88
90 : BaseClass(view, nullptr)
91 {}
92
94 : BaseClass(rhs, true)
95 {}
96
98 : BaseClass(rhs)
99 {}
100
101 public:
102
103 // Pour test
104 template<int E> ItemEnumerator(const ItemConnectedListView<E>& rhs)
106
107 private:
108
109 // Constructeur réservé pour ItemGroup
111 : BaseClass(items, local_ids, agroup)
112 {}
113
114 public:
115
116 ARCANE_DEPRECATED_REASON("Y2022: Internal to Arcane. Use other constructor")
117 ItemEnumerator(const ItemInternalPtr* items, const Int32* local_ids, Integer n, const ItemGroupImpl* agroup = nullptr)
118 : BaseClass(items, local_ids, n, agroup)
119 {}
120
121 ARCANE_DEPRECATED_REASON("Y2022: Internal to Arcane. Use other constructor")
123 : BaseClass(items, local_ids, agroup)
124 {}
125
126 ARCANE_DEPRECATED_REASON("Y2022: Internal to Arcane. Use other constructor")
128 : BaseClass(view, agroup)
129 {}
130
131 protected:
132
133 // TODO A supprimer
135 : BaseClass(s, local_ids)
136 {}
137
139 : BaseClass(s, view)
140 {}
141
142 public:
143
144 static ItemEnumerator fromItemEnumerator(const ItemEnumerator& rhs)
145 {
146 return ItemEnumerator(rhs);
147 }
148
149 private:
150
154 {}
155 ItemSharedInfo* _sharedInfo() const { return _internalItemBase().m_shared_info; }
156};
157
158/*---------------------------------------------------------------------------*/
159/*---------------------------------------------------------------------------*/
160
161/*---------------------------------------------------------------------------*/
162/*---------------------------------------------------------------------------*/
163
165inline ItemEnumeratorBase::
166ItemEnumeratorBase(const ItemEnumerator& rhs, bool)
167: m_view(rhs.m_view)
168, m_index(rhs.index())
169, m_group_impl(rhs.group())
170{
171}
172
173/*---------------------------------------------------------------------------*/
174/*---------------------------------------------------------------------------*/
175
177template<typename ItemType> inline ItemEnumeratorBaseT<ItemType>::
180, m_item(rhs._internalItemBase())
181{
182}
183
184/*---------------------------------------------------------------------------*/
185/*---------------------------------------------------------------------------*/
186
187inline ItemEnumeratorBase::
188ItemEnumeratorBase(const ItemEnumerator& rhs)
189: m_view(rhs.m_view)
190, m_index(rhs.index())
191, m_group_impl(rhs.group())
192{
193}
194
195/*---------------------------------------------------------------------------*/
196/*---------------------------------------------------------------------------*/
197
198template<typename ItemType> inline ItemEnumeratorBaseT<ItemType>::
199ItemEnumeratorBaseT(const ItemEnumerator& rhs)
200: ItemEnumeratorBase(rhs)
201, m_item(rhs._internalItemBase())
202{
203}
204
205/*---------------------------------------------------------------------------*/
206/*---------------------------------------------------------------------------*/
207
208template<typename ItemType> inline ItemEnumeratorBaseT<ItemType>::
209ItemEnumeratorBaseT(const ItemInternalEnumerator& rhs)
210: ItemEnumeratorBaseT(ItemEnumerator(rhs))
211{
212}
213
214/*---------------------------------------------------------------------------*/
215/*---------------------------------------------------------------------------*/
216
217template<typename ItemType> inline ItemEnumerator ItemEnumeratorBaseT<ItemType>::
218toItemEnumerator() const
219{
220 return ItemEnumerator(m_view,m_index,m_group_impl,m_item);
221}
222
223/*---------------------------------------------------------------------------*/
224/*---------------------------------------------------------------------------*/
225
226/*---------------------------------------------------------------------------*/
227/*---------------------------------------------------------------------------*/
231template<typename ItemType>
233: public ItemEnumeratorBaseT<ItemType>
234{
235 private:
236
238 using LocalIdType = typename ItemType::LocalIdType;
240 friend class ItemVectorT<ItemType>;
241 friend class ItemVectorViewT<ItemType>;
242 friend class ItemConnectedListViewT<ItemType>;
243 friend class SimdItemEnumeratorT<ItemType>;
244 template <typename I1, typename I2> friend class ItemPairEnumeratorT;
245
246 public:
247
248 ItemEnumeratorT() = default;
251
252 public:
253
254 [[deprecated("Y2021: Use strongly typed enumerator (Node, Face, Cell, ...) instead of generic (Item) enumerator")]]
256 : BaseClass(rhs){}
257
258 [[deprecated("Y2021: Use strongly typed enumerator (Node, Face, Cell, ...) instead of generic (Item) enumerator")]]
260 : BaseClass(rhs){}
261
262 public:
263
264 ARCANE_DEPRECATED_REASON("Y2022: Internal to Arcane. Use other constructor")
265 ItemEnumeratorT(const ItemInternalPtr* items,const Int32* local_ids,Integer n, const ItemGroupImpl* agroup = nullptr)
266 : BaseClass(items,local_ids,n,agroup){}
267
268 ARCANE_DEPRECATED_REASON("Y2022: Internal to Arcane. Use other constructor")
270 : BaseClass(items,local_ids,agroup){}
271
272 ARCANE_DEPRECATED_REASON("Y2022: Internal to Arcane. Use other constructor")
273 ItemEnumeratorT(const ItemInternalVectorView& view, const ItemGroupImpl* agroup = nullptr)
274 : BaseClass(view,agroup){}
275
276 public:
277
278 // Pour test
280
281 private:
282
283 // Constructeur réservé pour ItemGroup
285 : BaseClass(items, local_ids, agroup)
286 {}
287
288 private:
289
290 // TODO: a supprimer
292 : BaseClass(s,local_ids){}
293
295 : BaseClass(s,view){}
296
297 public:
298
300 operator ItemEnumerator() const { return this->toItemEnumerator(); }
301
302 public:
303
304 static ItemEnumeratorT<ItemType> fromItemEnumerator(const ItemEnumerator& rhs)
305 {
306 return ItemEnumeratorT<ItemType>(rhs,true);
307 }
308
309 private:
310
313};
314
315/*---------------------------------------------------------------------------*/
316/*---------------------------------------------------------------------------*/
317
318inline ItemEnumerator ItemVectorView::
319enumerator() const
320{
321 return ItemEnumerator(m_shared_info,m_index_view._localIds());
322}
323
324/*---------------------------------------------------------------------------*/
325/*---------------------------------------------------------------------------*/
326
327template<int Extent>
329enumerator() const
330{
331 return ItemEnumerator(m_shared_info,m_index_view._localIds());
332}
333
334/*---------------------------------------------------------------------------*/
335/*---------------------------------------------------------------------------*/
336
337template<typename ItemType> inline ItemLocalId::
338ItemLocalId(ItemEnumeratorT<ItemType> enumerator)
339: m_local_id(enumerator.asItemLocalId())
340{
341}
342
343/*---------------------------------------------------------------------------*/
344/*---------------------------------------------------------------------------*/
345
346inline ItemLocalId::
347ItemLocalId(ItemConnectedEnumerator enumerator)
348: m_local_id(enumerator.asItemLocalId())
349{
350}
351
352/*---------------------------------------------------------------------------*/
353/*---------------------------------------------------------------------------*/
354
355template<typename ItemType> inline ItemLocalId::
356ItemLocalId(ItemConnectedEnumeratorT<ItemType> enumerator)
357: m_local_id(enumerator.asItemLocalId())
358{
359}
360
361/*---------------------------------------------------------------------------*/
362/*---------------------------------------------------------------------------*/
363
364// TODO: ajouter vérification du bon type
365template<typename ItemType> inline ItemLocalIdT<ItemType>::
366ItemLocalIdT(ItemEnumerator enumerator)
367: ItemLocalId(enumerator.asItemLocalId())
368{
369}
370
371/*---------------------------------------------------------------------------*/
372/*---------------------------------------------------------------------------*/
373
374template<typename ItemType> inline ItemLocalIdT<ItemType>::
375ItemLocalIdT(ItemConnectedEnumeratorT<ItemType> enumerator)
376: ItemLocalId(enumerator.asItemLocalId())
377{
378}
379
380/*---------------------------------------------------------------------------*/
381/*---------------------------------------------------------------------------*/
382
383} // End namespace
384
385/*---------------------------------------------------------------------------*/
386/*---------------------------------------------------------------------------*/
387
388#define ARCANE_CHECK_ENUMERATOR(enumerator,testgroup) \
389 ARCANE_ASSERT(((enumerator).group()==(testgroup).internal()),("Invalid access on partial data using enumerator not associated to underlying group %s",testgroup.name().localstr()))
390
391/*---------------------------------------------------------------------------*/
392/*---------------------------------------------------------------------------*/
393
394#define A_ENUMERATE_ITEM(_EnumeratorClassName,iname,view) \
395 for( A_TRACE_ITEM_ENUMERATOR(_EnumeratorClassName) iname(_EnumeratorClassName :: fromItemEnumerator((view).enumerator()) A_TRACE_ENUMERATOR_WHERE); iname.hasNext(); ++iname )
396
397#define A_ENUMERATE_ITEM_NO_TRACE(_EnumeratorClassName,iname,view) \
398 for( _EnumeratorClassName iname(_EnumeratorClassName :: fromItemEnumerator((view).enumerator())); iname.hasNext(); ++iname )
399
400/*---------------------------------------------------------------------------*/
401/*---------------------------------------------------------------------------*/
402
404#define ENUMERATE_NO_TRACE_(type,name,group) A_ENUMERATE_ITEM_NO_TRACE(::Arcane::ItemEnumeratorT< type >,name,group)
405
407#define ENUMERATE_(type,name,group) A_ENUMERATE_ITEM(::Arcane::ItemEnumeratorT< type >,name,group)
408
410#define ENUMERATE_GENERIC(type,name,group) A_ENUMERATE_ITEM(::Arcane::ItemEnumeratorT< type >,name,group)
411
413#define ENUMERATE_ITEM(name,group) A_ENUMERATE_ITEM(::Arcane::ItemEnumerator,name,group)
414
415#define ENUMERATE_ITEMWITHNODES(name,group) ENUMERATE_(::Arcane::ItemWithNodes,name,group)
416
418#define ENUMERATE_NODE(name,group) ENUMERATE_(::Arcane::Node,name,group)
419
421#define ENUMERATE_EDGE(name,group) ENUMERATE_(::Arcane::Edge,name,group)
422
424#define ENUMERATE_FACE(name,group) ENUMERATE_(::Arcane::Face,name,group)
425
427#define ENUMERATE_CELL(name,group) ENUMERATE_(::Arcane::Cell,name,group)
428
430#define ENUMERATE_PARTICLE(name,group) ENUMERATE_(::Arcane::Particle,name,group)
431
433#define ENUMERATE_DOF(name,group) ENUMERATE_(::Arcane::DoF,name,group)
434
435/*---------------------------------------------------------------------------*/
436/*---------------------------------------------------------------------------*/
437
445#define ENUMERATE_ITEMPAIR(_item_type1,_item_type2,_name,_array) \
446for( ::Arcane::ItemPairEnumeratorT< _item_type1, _item_type2 > _name(_array); _name.hasNext(); ++_name )
447
452#define ENUMERATE_ITEMPAIR_DIRECT(_name,_array) \
453for( ::Arcane::ItemPairEnumerator _name(_array); _name.hasNext(); ++_name )
454
455/*---------------------------------------------------------------------------*/
456/*---------------------------------------------------------------------------*/
457
465#define ENUMERATE_SUB_ITEM(_item_type,_name,_parent_item) \
466for( ::Arcane::ItemEnumeratorT< _item_type > _name(_parent_item.subItems()); _name.hasNext(); ++_name )
467
472#define ENUMERATE_SUB_ITEM_DIRECT(_name,_parent_item) \
473for( ::Arcane::ItemInternalEnumerator _name(_parent_item.subItems()); _name.hasNext(); ++_name )
474
475/*---------------------------------------------------------------------------*/
476/*---------------------------------------------------------------------------*/
477
478#endif
Types et macros pour itérer sur les entités du maillage connectées à une autre entité.
Maille d'un maillage.
Definition Item.h:1178
classe degré de liberté.
Definition Item.h:1488
Arête d'une maille.
Definition Item.h:798
Face d'une maille.
Definition Item.h:932
ItemSharedInfo * m_shared_info
Infos partagées entre toutes les entités ayant les mêmes caractéristiques.
Vue sur une liste d'entités connectées à une autre.
Vue sur une liste d'entités connectées à une autre entité.
Classe de base des énumérateurs sur une liste d'entité.
Classe de base des énumérateurs sur une liste d'entité.
constexpr Integer index() const
Indice courant de l'énumérateur.
Enumérateur sur une liste typée d'entités de type ItemType.
ItemEnumeratorT(const ItemEnumerator &rhs, bool v)
Constructeur seulement utilisé par fromItemEnumerator()
Enumérateur sur une liste d'entités.
Implémentation d'un groupe d'entités de maillage.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Vue sur une liste pour obtenir des informations sur les entités.
Enumérateur sur une liste d'entités.
Vue interne sur un tableau d'entités.
Structure interne d'une entité de maillage.
Enumérateur sur un tableau de tableaux d'entités du maillage de genre ItemType et SubItemType.
Enumérateur sur un tableau de tableaux d'entités du maillage.
Structure interne partagée d'une entité de maillage.
Vecteur typé d'entité.
Definition ItemVector.h:166
Vue sur un tableau typé d'entités.
Vue sur un vecteur d'entités.
Vecteur d'entités.
Definition ItemVector.h:59
Elément de maillage s'appuyant sur des noeuds (Edge,Face,Cell).
Definition Item.h:714
Classe de base d'un élément de maillage.
Definition Item.h:83
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Noeud d'un maillage.
Definition Dom.h:204
Particule.
Definition Item.h:1383
Enumérateur sur une liste d'entités.
Definition SimdItem.h:429
Vue interne sur un tableau d'entités.
Vue sur le conteneur d'une liste de ItemLocalId.
Vue constante d'un tableau de type T.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-