12#ifndef ARCANE_CORE_ITEMCONNECTEDLISTVIEW_H
13#define ARCANE_CORE_ITEMCONNECTEDLISTVIEW_H
17#include "arcane/core/ItemInternalVectorView.h"
18#include "arcane/core/ItemIndexArrayView.h"
19#include "arcane/core/ItemInfoListView.h"
42class ItemConnectedListViewConstIterator
46 template <
int Extent>
friend class ItemConnectedListView;
47 friend class ItemVectorViewConstIterator;
52 Int32 local_id_offset)
53 : m_shared_info(shared_info)
54 , m_local_id_ptr(local_id_ptr)
55 , m_local_id_offset(local_id_offset)
60 typedef ItemConnectedListViewConstIterator ThatClass;
61 typedef std::random_access_iterator_tag iterator_category;
72 typedef const Item* pointer;
74 typedef const Item& reference;
78 Item operator*()
const
80 return Item(*m_local_id_ptr, m_shared_info);
82 ThatClass& operator++()
87 ThatClass& operator--()
102 return this->m_local_id_ptr - b.m_local_id_ptr;
106 const Int32* ptr = a.m_local_id_ptr - v;
107 return ThatClass(a.m_shared_info, ptr, a.m_local_id_offset);
111 const Int32* ptr = a.m_local_id_ptr + v;
112 return ThatClass(a.m_shared_info, ptr, a.m_local_id_offset);
114 friend bool operator<(
const ThatClass& lhs,
const ThatClass& rhs)
116 return lhs.m_local_id_ptr <= rhs.m_local_id_ptr;
119 friend bool operator==(
const ThatClass& lhs,
const ThatClass& rhs)
121 return lhs.m_local_id_ptr == rhs.m_local_id_ptr;
123 friend bool operator!=(
const ThatClass& lhs,
const ThatClass& rhs)
125 return !(lhs == rhs);
128 ARCANE_DEPRECATED_REASON(
"Y2022: This method returns a temporary. Use 'operator*' instead")
129 Item operator->()
const
131 return _itemInternal();
136 ItemSharedInfo* m_shared_info;
137 const Int32* m_local_id_ptr;
138 Int32 m_local_id_offset = 0;
142 inline ItemInternal* _itemInternal()
const
144 return m_shared_info->m_items_internal[m_local_id_offset + (*m_local_id_ptr)];
151template <
typename ItemType>
152class ItemConnectedListViewConstIteratorT
153:
public ItemConnectedListViewConstIterator
159 ItemConnectedListViewConstIteratorT(
ItemSharedInfo* shared_info,
const Int32* ARCANE_RESTRICT local_id_ptr,
160 Int32 local_id_offset)
161 : ItemConnectedListViewConstIterator(shared_info, local_id_ptr, local_id_offset)
166 typedef ItemConnectedListViewConstIteratorT<ItemType> ThatClass;
167 typedef ItemType value_type;
172 typedef const Item* pointer;
174 typedef const Item& reference;
178 ItemType operator*()
const
180 return ItemType(*m_local_id_ptr, m_shared_info);
182 ThatClass& operator++()
187 ThatClass& operator--()
194 return this->m_local_id_ptr - b.m_local_id_ptr;
198 const Int32* ptr = a.m_local_id_ptr - v;
199 return ThatClass(a.m_shared_info, ptr);
203 const Int32* ptr = a.m_local_id_ptr + v;
204 return ThatClass(a.m_shared_info, ptr);
209 ARCANE_DEPRECATED_REASON(
"Y2022: This method returns a temporary. Use 'operator*' instead")
210 ItemType operator->()
const
212 return this->_itemInternal();
227class ItemConnectedListView
230 friend class ItemEnumeratorBase;
231 friend class ItemVectorView;
232 friend class ItemConnectedEnumeratorBase;
233 template <
typename ItemType>
friend class ItemEnumeratorBaseT;
238 using difference_type = std::ptrdiff_t;
239 using value_type =
Item;
240 using reference_type =
Item&;
241 using const_reference_type =
const Item&;
243 using SentinelType = const_iterator;
247 ItemConnectedListView() =
default;
252 : m_index_view(view.m_local_ids, view.m_local_id_offset, 0)
253 , m_shared_info(view.m_shared_info)
256 : m_index_view(local_ids, local_id_offset, 0)
257 , m_shared_info(shared_info)
265 return Item(m_index_view[index], m_shared_info);
274 return const_iterator(m_shared_info, m_index_view._data(), _localIdOffset());
286 return const_iterator(m_shared_info, (m_index_view._data() + this->size()), _localIdOffset());
295 ARCANE_DEPRECATED_REASON(
"Y2023: Use iterator to get values or use operator[]")
298#ifdef ARCANE_HIDE_ITEM_CONNECTIVITY_STRUCTURE
306 operator ItemInternalVectorView()
const
308 return ItemInternalVectorView(m_shared_info, m_index_view._localIds(), _localIdOffset());
312 inline ItemEnumerator enumerator()
const;
317 ItemIndexArrayView indexes()
const
325 return m_index_view._localIds();
330 ItemIndexArrayView m_index_view;
331 ItemSharedInfo* m_shared_info = ItemSharedInfo::nullInstance();
335 const Int32* _localIdsData()
const {
return m_index_view._data(); }
336 Int32 _localIdOffset()
const {
return m_index_view._localIdOffset(); }
345template <
typename ItemType,
int Extent>
346class ItemConnectedListViewT
347:
public ItemConnectedListView<Extent>
350 friend class ItemEnumeratorBaseT<ItemType>;
351 friend class ItemEnumerator;
353 friend class ItemWithNodes;
358 friend class Particle;
360 template <
typename T>
friend class ItemConnectedEnumeratorBaseT;
362 using BaseClass = ItemConnectedListView<Extent>;
363 using BaseClass::m_index_view;
364 using BaseClass::m_shared_info;
369 using difference_type = std::ptrdiff_t;
370 using value_type = ItemType;
372 using SentinelType = const_iterator;
376 ItemConnectedListViewT() =
default;
377 ItemConnectedListViewT(
const ItemConnectedListView<Extent>& rhs)
387 : BaseClass(shared_info, local_ids, local_id_offset)
395 return ItemType(m_index_view[index], m_shared_info);
403 return const_iterator(m_shared_info, this->_localIdsData(), this->_localIdOffset());
406 inline SentinelType
end()
const
413 return const_iterator(m_shared_info, (this->_localIdsData() + this->
size()), this->_localIdOffset());
416#ifdef ARCANE_HIDE_ITEM_CONNECTIVITY_STRUCTURE
Constant view of an array of type T.
Integer size_type
Type indexing the array.
Item value_type
Type indexing the array.
std::ptrdiff_t difference_type
Type of a distance between iterator elements of the array.
friend bool operator==(const ThatClass &lhs, const ThatClass &rhs)
Compare the iteration indices of two instances.
View of a list of entities connected to another.
SentinelType end() const
Iterator after the last connected entity.
const_iterator endIterator() const
Iterator after the last connected entity.
ItemType operator[](Integer index) const
index-th connected entity
const_iterator begin() const
Iterator over the first connected entity.
View of a list of entities connected to another entity.
SentinelType end() const
Iterator after the last connected entity.
const_iterator endIterator() const
Iterator after the last connected entity.
Int32 size() const
Number of elements in the vector.
const_iterator begin() const
Iterator over the first connected entity.
Item operator[](Integer index) const
index-th connected entity
Base class for a mesh element.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Int32 Integer
Type representing an integer.
ConstArrayView< Int32 > Int32ConstArrayView
C equivalent of a 1D array of 32-bit integers.
std::ostream & operator<<(std::ostream &ostr, eItemKind item_kind)
Output operator for a stream.
std::int32_t Int32
Signed integer type of 32 bits.