12#ifndef ARCANE_ITEMCONNECTEDLISTVIEW_H
13#define ARCANE_ITEMCONNECTEDLISTVIEW_H
17#include "arcane/ItemInternalVectorView.h"
18#include "arcane/ItemIndexArrayView.h"
19#include "arcane/ItemInfoListView.h"
41class ItemConnectedListViewConstIterator
45 template <
int Extent>
friend class ItemConnectedListView;
46 friend class ItemVectorViewConstIterator;
51 Int32 local_id_offset)
52 : m_shared_info(shared_info)
53 , m_local_id_ptr(local_id_ptr)
54 , m_local_id_offset(local_id_offset)
59 typedef ItemConnectedListViewConstIterator ThatClass;
60 typedef std::random_access_iterator_tag iterator_category;
71 typedef const Item* pointer;
73 typedef const Item& reference;
77 Item operator*()
const
79 return Item(*m_local_id_ptr, m_shared_info);
81 ThatClass& operator++()
86 ThatClass& operator--()
101 return this->m_local_id_ptr - b.m_local_id_ptr;
105 const Int32* ptr = a.m_local_id_ptr - v;
106 return ThatClass(a.m_shared_info, ptr, a.m_local_id_offset);
110 const Int32* ptr = a.m_local_id_ptr + v;
111 return ThatClass(a.m_shared_info, ptr, a.m_local_id_offset);
113 friend bool operator<(
const ThatClass& lhs,
const ThatClass& rhs)
115 return lhs.m_local_id_ptr <= rhs.m_local_id_ptr;
118 friend bool operator==(
const ThatClass& lhs,
const ThatClass& rhs)
120 return lhs.m_local_id_ptr == rhs.m_local_id_ptr;
122 friend bool operator!=(
const ThatClass& lhs,
const ThatClass& rhs)
124 return !(lhs == rhs);
127 ARCANE_DEPRECATED_REASON(
"Y2022: This method returns a temporary. Use 'operator*' instead")
128 Item operator->()
const
130 return _itemInternal();
135 ItemSharedInfo* m_shared_info;
136 const Int32* m_local_id_ptr;
137 Int32 m_local_id_offset = 0;
141 inline ItemInternal* _itemInternal()
const
143 return m_shared_info->m_items_internal[m_local_id_offset + (*m_local_id_ptr)];
150template <
typename ItemType>
151class ItemConnectedListViewConstIteratorT
152:
public ItemConnectedListViewConstIterator
158 ItemConnectedListViewConstIteratorT(
ItemSharedInfo* shared_info,
const Int32* ARCANE_RESTRICT local_id_ptr,
159 Int32 local_id_offset)
160 : ItemConnectedListViewConstIterator(shared_info, local_id_ptr, local_id_offset)
165 typedef ItemConnectedListViewConstIteratorT<ItemType> ThatClass;
166 typedef ItemType value_type;
171 typedef const Item* pointer;
173 typedef const Item& reference;
177 ItemType operator*()
const
179 return ItemType(*m_local_id_ptr, m_shared_info);
181 ThatClass& operator++()
186 ThatClass& operator--()
193 return this->m_local_id_ptr - b.m_local_id_ptr;
197 const Int32* ptr = a.m_local_id_ptr - v;
198 return ThatClass(a.m_shared_info, ptr);
202 const Int32* ptr = a.m_local_id_ptr + v;
203 return ThatClass(a.m_shared_info, ptr);
208 ARCANE_DEPRECATED_REASON(
"Y2022: This method returns a temporary. Use 'operator*' instead")
209 ItemType operator->()
const
211 return this->_itemInternal();
225class ItemConnectedListView
228 friend class ItemEnumeratorBase;
229 friend class ItemVectorView;
230 friend class ItemConnectedEnumeratorBase;
231 template <
typename ItemType>
friend class ItemEnumeratorBaseT;
236 using difference_type = std::ptrdiff_t;
237 using value_type =
Item;
238 using reference_type =
Item&;
239 using const_reference_type =
const Item&;
241 using SentinelType = const_iterator;
245 ItemConnectedListView() =
default;
250 : m_index_view(view.m_local_ids,view.m_local_id_offset,0)
251 , m_shared_info(view.m_shared_info)
254 : m_index_view(local_ids,local_id_offset,0)
255 , m_shared_info(shared_info)
263 return Item(m_index_view[index], m_shared_info);
272 return const_iterator(m_shared_info, m_index_view._data(), _localIdOffset());
284 return const_iterator(m_shared_info, (m_index_view._data() + this->size()), _localIdOffset());
293 ARCANE_DEPRECATED_REASON(
"Y2023: Use iterator to get values or use operator[]")
296#ifdef ARCANE_HIDE_ITEM_CONNECTIVITY_STRUCTURE
304 operator ItemInternalVectorView()
const
306 return ItemInternalVectorView(m_shared_info, m_index_view._localIds(), _localIdOffset());
310 inline ItemEnumerator enumerator()
const;
323 return m_index_view._localIds();
333 const Int32* _localIdsData()
const {
return m_index_view._data(); }
334 Int32 _localIdOffset()
const {
return m_index_view._localIdOffset(); }
342template <
typename ItemType,
int Extent>
343class ItemConnectedListViewT
344:
public ItemConnectedListView<Extent>
347 friend class ItemEnumeratorBaseT<ItemType>;
348 friend class ItemEnumerator;
350 friend class ItemWithNodes;
355 friend class Particle;
357 template <
typename T>
friend class ItemConnectedEnumeratorBaseT;
359 using BaseClass = ItemConnectedListView<Extent>;
360 using BaseClass::m_index_view;
361 using BaseClass::m_shared_info;
366 using difference_type = std::ptrdiff_t;
367 using value_type = ItemType;
369 using SentinelType = const_iterator;
373 ItemConnectedListViewT() =
default;
374 ItemConnectedListViewT(
const ItemConnectedListView<Extent>& rhs)
384 : BaseClass(shared_info, local_ids, local_id_offset)
392 return ItemType(m_index_view[index], m_shared_info);
400 return const_iterator(m_shared_info, this->_localIdsData(), this->_localIdOffset());
403 inline SentinelType
end()
const
410 return const_iterator(m_shared_info, (this->_localIdsData() + this->
size()), this->_localIdOffset());
413#ifdef ARCANE_HIDE_ITEM_CONNECTIVITY_STRUCTURE
Vue constante d'un tableau de type T.
Itérateur pour la classe ItemConnectedListView.
Integer size_type
Type indexant le tableau.
Item value_type
Type indexant le tableau.
std::ptrdiff_t difference_type
Type d'une distance entre itérateur éléments du tableau.
friend bool operator==(const ThatClass &lhs, const ThatClass &rhs)
Compare les indices d'itération de deux instances.
Vue sur une liste d'entités connectées à une autre.
SentinelType end() const
Itérateur sur après la dernière entité connectée.
const_iterator endIterator() const
Itérateur sur après la dernière entité connectée.
ItemType operator[](Integer index) const
index-ème entité connectée
const_iterator begin() const
Itérateur sur la première entité connectée.
Vue sur une liste d'entités connectées à une autre entité.
SentinelType end() const
Itérateur sur après la dernière entité connectée.
const_iterator endIterator() const
Itérateur sur après la dernière entité connectée.
Int32 size() const
Nombre d'éléments du vecteur.
ItemIndexArrayView indexes() const
Vue sur le tableau des indices.
const_iterator begin() const
Itérateur sur la première entité connectée.
Int32ConstArrayView _localIds() const
Vue sur le tableau des indices.
Item operator[](Integer index) const
index-ème entité connectée
Vue sur un tableau d'index (localIds()) d'entités.
Structure interne partagée d'une entité de maillage.
Classe de base d'un élément de maillage.
Vue interne sur un tableau d'entités.
std::ostream & operator<<(std::ostream &o, eExecutionPolicy exec_policy)
Affiche le nom de la politique d'exécution.
-*- 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.