Arcane  v3.16.0.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ItemConnectedEnumeratorBase.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* ItemConnectedEnumeratorBase.h (C) 2000-2023 */
9/* */
10/* Classe de base des énumérateurs sur les entités connectées du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ITEMCONNECTEDENUMERATORBASE_H
13#define ARCANE_ITEMCONNECTEDENUMERATORBASE_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/ItemInternalEnumerator.h"
18#include "arcane/Item.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29/*!
30 * \brief Classe de base des énumérateurs sur une liste d'entité connectées.
31 *
32 * Les instances de cette classes sont créées soit via ItemConnectedEnumerator,
33 * soit via ItemConnectedEnumeratorT.
34 *
35 * \code
36 * for( ItemConnectedEnumeratorBase iter(...); iter.hasNext(); ++iter )
37 * ;
38 * \endcode
39 */
40class ItemConnectedEnumeratorBase
41{
42 // Seule ces classes ont le droit de construire des instances de cette classe
43 template <typename T> friend class ItemConnectedEnumeratorBaseT;
44
45 private:
46
47 ItemConnectedEnumeratorBase() = default;
48 explicit ItemConnectedEnumeratorBase(const ConstArrayView<Int32> local_ids)
49 : m_local_ids(local_ids.data())
50 , m_count(local_ids.size())
51 {}
52 template <int E> explicit ItemConnectedEnumeratorBase(const ItemConnectedListView<E>& rhs)
53 : m_local_ids(rhs._localIds().data())
54 , m_count(rhs._localIds().size())
55 , m_local_id_offset(rhs._localIdOffset())
56 {}
57 ItemConnectedEnumeratorBase(const Int32* local_ids, Int32 index, Int32 n)
58 : m_local_ids(local_ids)
59 , m_index(index)
60 , m_count(n)
61 {
62 }
63
64 public:
65
66 //! Incrémente l'index de l'énumérateur
67 constexpr void operator++()
68 {
69 ++m_index;
70 }
71
72 //! Vrai si on n'a pas atteint la fin de l'énumérateur (index()<count())
73 constexpr bool operator()() const
74 {
75 return m_index < m_count;
76 }
77
78 //! Vrai si on n'a pas atteint la fin de l'énumérateur (index()<count())
79 constexpr bool hasNext() const { return m_index < m_count; }
80
81 //! Nombre d'éléments de l'énumérateur
82 constexpr Int32 count() const { return m_count; }
83
84 //! Indice courant de l'énumérateur
85 constexpr Int32 index() const { return m_index; }
86
87 //! localId() de l'entité courante.
88 constexpr ItemLocalId itemLocalId() const { return ItemLocalId(m_local_id_offset + m_local_ids[m_index]); }
89
90 //! localId() de l'entité courante.
91 constexpr Int32 localId() const { return m_local_id_offset + m_local_ids[m_index]; }
92
93 protected:
94
95 const Int32* ARCANE_RESTRICT m_local_ids = nullptr;
96 Int32 m_index = 0;
97 Int32 m_count = 0;
98 Int32 m_local_id_offset = 0;
99};
100
101/*---------------------------------------------------------------------------*/
102/*---------------------------------------------------------------------------*/
103/*!
104 * \brief Classe de base typeé des énumérateurs sur une liste d'entité connectées.
105 *
106 * Les instances de cette classes sont créées soit via ItemConnectedEnumerator, soit
107 * via ItemConnectedEnumeratorT.
108 */
109template <typename ItemType>
110class ItemConnectedEnumeratorBaseT
111: public ItemConnectedEnumeratorBase
112{
113 friend class ItemConnectedEnumerator;
114 friend class ItemConnectedEnumeratorT<ItemType>;
115
116 private:
117
118 using LocalIdType = typename ItemType::LocalIdType;
119 using BaseClass = ItemConnectedEnumeratorBase;
120
121 private:
122
123 ItemConnectedEnumeratorBaseT()
124 : BaseClass()
125 , m_item(NULL_ITEM_LOCAL_ID, ItemSharedInfo::nullInstance())
126 {}
127
128 ItemConnectedEnumeratorBaseT(ItemSharedInfo* shared_info, const Int32ConstArrayView& local_ids)
129 : BaseClass(local_ids)
130 , m_item(NULL_ITEM_LOCAL_ID, shared_info)
131 {}
132
133 ItemConnectedEnumeratorBaseT(const impl::ItemIndexedListView<DynExtent>& view)
134 : ItemConnectedEnumeratorBaseT(view.m_shared_info, view.constLocalIds())
135 {}
136
137 ItemConnectedEnumeratorBaseT(const ItemConnectedListViewT<ItemType>& rhs)
138 : BaseClass(rhs)
139 , m_item(NULL_ITEM_LOCAL_ID, rhs.m_shared_info)
140 {}
141
142 ItemConnectedEnumeratorBaseT(const Int32* local_ids, Int32 index, Int32 n, Item item_base)
143 : ItemConnectedEnumeratorBase(local_ids, index, n)
144 , m_item(item_base)
145 {
146 }
147
148 public:
149
150 constexpr ItemType operator*() const
151 {
152 m_item.m_local_id = m_local_id_offset + m_local_ids[m_index];
153 return m_item;
154 }
155 constexpr const ItemType* operator->() const
156 {
157 m_item.m_local_id = m_local_id_offset + m_local_ids[m_index];
158 return &m_item;
159 }
160
161 constexpr LocalIdType asItemLocalId() const
162 {
163 return LocalIdType{ m_local_id_offset + m_local_ids[m_index] };
164 }
165
166 protected:
167
168 mutable ItemType m_item = ItemType(NULL_ITEM_LOCAL_ID, nullptr);
169};
170
171/*---------------------------------------------------------------------------*/
172/*---------------------------------------------------------------------------*/
173
174} // End namespace Arcane
175
176/*---------------------------------------------------------------------------*/
177/*---------------------------------------------------------------------------*/
178
179#endif
Vue constante d'un tableau de type T.
constexpr const_pointer data() const noexcept
Pointeur sur la mémoire allouée.
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
constexpr void operator++()
Incrémente l'index de l'énumérateur.
constexpr Int32 count() const
Nombre d'éléments de l'énumérateur.
constexpr bool operator()() const
Vrai si on n'a pas atteint la fin de l'énumérateur (index()<count())
constexpr ItemLocalId itemLocalId() const
localId() de l'entité courante.
constexpr Int32 localId() const
localId() de l'entité courante.
constexpr Int32 index() const
Indice courant de l'énumérateur.
constexpr bool hasNext() const
Vrai si on n'a pas atteint la fin de l'énumérateur (index()<count())
Enumérateur sur une liste typée d'entités connectées de type ItemType.
Vue sur une liste d'entités connectées à une autre.
Vue sur une liste d'entités connectées à une autre entité.
Index d'un Item dans une variable.
Definition ItemLocalId.h:41
Classe de base d'un élément de maillage.
Definition Item.h:83
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:569
std::int32_t Int32
Type entier signé sur 32 bits.