12#ifndef ARCANE_CORE_ITEMENUMERATOR_H
13#define ARCANE_CORE_ITEMENUMERATOR_H
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"
43class ItemEnumeratorCS;
48extern "C++" ARCANE_CORE_EXPORT
57:
public ItemEnumeratorBaseT<Item>
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;
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 ARCANE_CORE_EXPORT
void _arcaneInternalItemEnumeratorSwigSet(
const ItemEnumerator* ie,
ItemEnumeratorPOD* vpod);
83 using BaseClass = ItemEnumeratorBaseT<Item>;
87 ItemEnumerator() =
default;
90 : BaseClass(view,
nullptr)
94 : BaseClass(rhs,
true)
104 template<
int E> ItemEnumerator(
const ItemConnectedListView<E>& rhs)
111 : BaseClass(items, local_ids, agroup)
116 ARCANE_DEPRECATED_REASON(
"Y2022: Internal to Arcane. Use other constructor")
118 : BaseClass(items, local_ids, n, agroup)
121 ARCANE_DEPRECATED_REASON(
"Y2022: Internal to Arcane. Use other constructor")
123 : BaseClass(items, local_ids, agroup)
126 ARCANE_DEPRECATED_REASON(
"Y2022: Internal to Arcane. Use other constructor")
128 : BaseClass(view, agroup)
135 : BaseClass(s, local_ids)
144 static ItemEnumerator fromItemEnumerator(
const ItemEnumerator& rhs)
146 return ItemEnumerator(rhs);
153 : BaseClass(view,
index, agroup, item_base)
155 ItemSharedInfo* _sharedInfo()
const {
return _internalItemBase().m_shared_info; }
165inline ItemEnumeratorBase::
168, m_index(rhs.
index())
169, m_group_impl(rhs.
group())
177template<
typename ItemType>
inline ItemEnumeratorBaseT<ItemType>::
179: ItemEnumeratorBase(rhs,v)
180, m_item(rhs._internalItemBase())
187inline ItemEnumeratorBase::
190, m_index(rhs.index())
191, m_group_impl(rhs.group())
198template<
typename ItemType>
inline ItemEnumeratorBaseT<ItemType>::
199ItemEnumeratorBaseT(
const ItemEnumerator& rhs)
200: ItemEnumeratorBase(rhs)
201, m_item(rhs._internalItemBase())
231template<
typename ItemType>
233:
public ItemEnumeratorBaseT<ItemType>
238 using LocalIdType =
typename ItemType::LocalIdType;
239 using BaseClass = ItemEnumeratorBaseT<ItemType>;
244 template <
typename I1,
typename I2>
friend class ItemPairEnumeratorT;
248 ItemEnumeratorT() =
default;
254 [[deprecated(
"Y2021: Use strongly typed enumerator (Node, Face, Cell, ...) instead of generic (Item) enumerator")]]
258 [[deprecated(
"Y2021: Use strongly typed enumerator (Node, Face, Cell, ...) instead of generic (Item) enumerator")]]
264 ARCANE_DEPRECATED_REASON(
"Y2022: Internal to Arcane. Use other constructor")
266 : BaseClass(items,local_ids,n,agroup){}
268 ARCANE_DEPRECATED_REASON(
"Y2022: Internal to Arcane. Use other constructor")
270 : BaseClass(items,local_ids,agroup){}
272 ARCANE_DEPRECATED_REASON(
"Y2022: Internal to Arcane. Use other constructor")
274 : BaseClass(view,agroup){}
285 : BaseClass(items, local_ids, agroup)
292 : BaseClass(s,local_ids){}
295 : BaseClass(s,view){}
312 ItemEnumeratorT(
const ItemEnumerator& rhs,
bool v) : BaseClass(rhs,v){}
337template<
typename ItemType>
inline ItemLocalId::
338ItemLocalId(ItemEnumeratorT<ItemType> enumerator)
339: m_local_id(enumerator.asItemLocalId())
348: m_local_id(enumerator.asItemLocalId())
355template<
typename ItemType>
inline ItemLocalId::
357: m_local_id(enumerator.asItemLocalId())
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()))
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 )
397#define A_ENUMERATE_ITEM_NO_TRACE(_EnumeratorClassName,iname,view) \
398 for( _EnumeratorClassName iname(_EnumeratorClassName :: fromItemEnumerator((view).enumerator())); iname.hasNext(); ++iname )
404#define ENUMERATE_NO_TRACE_(type,name,group) A_ENUMERATE_ITEM_NO_TRACE(::Arcane::ItemEnumeratorT< type >,name,group)
407#define ENUMERATE_(type,name,group) A_ENUMERATE_ITEM(::Arcane::ItemEnumeratorT< type >,name,group)
410#define ENUMERATE_GENERIC(type,name,group) A_ENUMERATE_ITEM(::Arcane::ItemEnumeratorT< type >,name,group)
413#define ENUMERATE_ITEM(name,group) A_ENUMERATE_ITEM(::Arcane::ItemEnumerator,name,group)
415#define ENUMERATE_ITEMWITHNODES(name,group) ENUMERATE_(::Arcane::ItemWithNodes,name,group)
418#define ENUMERATE_NODE(name,group) ENUMERATE_(::Arcane::Node,name,group)
421#define ENUMERATE_EDGE(name,group) ENUMERATE_(::Arcane::Edge,name,group)
424#define ENUMERATE_FACE(name,group) ENUMERATE_(::Arcane::Face,name,group)
427#define ENUMERATE_CELL(name,group) ENUMERATE_(::Arcane::Cell,name,group)
430#define ENUMERATE_PARTICLE(name,group) ENUMERATE_(::Arcane::Particle,name,group)
433#define ENUMERATE_DOF(name,group) ENUMERATE_(::Arcane::DoF,name,group)
445#define ENUMERATE_ITEMPAIR(_item_type1,_item_type2,_name,_array) \
446for( ::Arcane::ItemPairEnumeratorT< _item_type1, _item_type2 > _name(_array); _name.hasNext(); ++_name )
452#define ENUMERATE_ITEMPAIR_DIRECT(_name,_array) \
453for( ::Arcane::ItemPairEnumerator _name(_array); _name.hasNext(); ++_name )
465#define ENUMERATE_SUB_ITEM(_item_type,_name,_parent_item) \
466for( ::Arcane::ItemEnumeratorT< _item_type > _name(_parent_item.subItems()); _name.hasNext(); ++_name )
472#define ENUMERATE_SUB_ITEM_DIRECT(_name,_parent_item) \
473for( ::Arcane::ItemInternalEnumerator _name(_parent_item.subItems()); _name.hasNext(); ++_name )
Types et macros pour itérer sur les entités du maillage connectées à une autre entité.
Enumérateur sur une liste typée d'entités connectées de type ItemType.
Enumérateur sur une liste d'entités connectées à une autre.
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 vues spécialisées des informations sur les entités.
Vue sur une liste pour obtenir des informations sur les entités.
Index d'une entité ItemType dans une variable.
Index d'un Item dans une variable.
Vue sur un tableau typé d'entités.
Vue sur un vecteur d'entités.
Elément de maillage s'appuyant sur des noeuds (Edge,Face,Cell).
Classe de base d'un élément de maillage.
-*- 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.
std::int32_t Int32
Type entier signé sur 32 bits.