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" 
   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.