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;
315 ItemIndexArrayView indexes()
const
323 return m_index_view._localIds();
328 ItemIndexArrayView m_index_view;
329 ItemSharedInfo* m_shared_info = ItemSharedInfo::nullInstance();
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.
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.
const_iterator begin() const
Itérateur sur la première entité connectée.
Item operator[](Integer index) const
index-ème entité connectée
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::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.