Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ItemConnectedListView.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/* ItemConnectedListView.h (C) 2000-2023 */
9/* */
10/* Vue sur une liste d'entités connectés à une autre entité. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ITEMCONNECTEDLISTVIEW_H
13#define ARCANE_ITEMCONNECTEDLISTVIEW_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/ItemInternalVectorView.h"
18#include "arcane/ItemIndexArrayView.h"
19#include "arcane/ItemInfoListView.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
42{
43 protected:
44
45 template <int Extent> friend class ItemConnectedListView;
46 friend class ItemVectorViewConstIterator;
47
48 protected:
49
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)
55 {}
56
57 public:
58
60 typedef std::random_access_iterator_tag iterator_category;
64 typedef Integer size_type;
66 typedef std::ptrdiff_t difference_type;
67
68 public:
69
70 //TODO A supprimer avec le C++20
71 typedef const Item* pointer;
72 //TODO A supprimer avec le C++20
73 typedef const Item& reference;
74
75 public:
76
77 Item operator*() const
78 {
79 return Item(*m_local_id_ptr, m_shared_info);
80 }
81 ThatClass& operator++()
82 {
83 ++m_local_id_ptr;
84 return (*this);
85 }
86 ThatClass& operator--()
87 {
88 --m_local_id_ptr;
89 return (*this);
90 }
91 void operator+=(difference_type v)
92 {
93 m_local_id_ptr += v;
94 }
95 void operator-=(difference_type v)
96 {
97 m_local_id_ptr -= v;
98 }
99 difference_type operator-(const ThatClass& b) const
100 {
101 return this->m_local_id_ptr - b.m_local_id_ptr;
102 }
103 friend ThatClass operator-(const ThatClass& a, difference_type v)
104 {
105 const Int32* ptr = a.m_local_id_ptr - v;
106 return ThatClass(a.m_shared_info, ptr, a.m_local_id_offset);
107 }
108 friend ThatClass operator+(const ThatClass& a, difference_type v)
109 {
110 const Int32* ptr = a.m_local_id_ptr + v;
111 return ThatClass(a.m_shared_info, ptr, a.m_local_id_offset);
112 }
113 friend bool operator<(const ThatClass& lhs, const ThatClass& rhs)
114 {
115 return lhs.m_local_id_ptr <= rhs.m_local_id_ptr;
116 }
118 friend bool operator==(const ThatClass& lhs, const ThatClass& rhs)
119 {
120 return lhs.m_local_id_ptr == rhs.m_local_id_ptr;
121 }
122 friend bool operator!=(const ThatClass& lhs, const ThatClass& rhs)
123 {
124 return !(lhs == rhs);
125 }
126
127 ARCANE_DEPRECATED_REASON("Y2022: This method returns a temporary. Use 'operator*' instead")
128 Item operator->() const
129 {
130 return _itemInternal();
131 }
132
133 protected:
134
135 ItemSharedInfo* m_shared_info;
136 const Int32* m_local_id_ptr;
137 Int32 m_local_id_offset = 0;
138
139 protected:
140
141 inline ItemInternal* _itemInternal() const
142 {
143 return m_shared_info->m_items_internal[m_local_id_offset + (*m_local_id_ptr)];
144 }
145};
146
147/*---------------------------------------------------------------------------*/
148/*---------------------------------------------------------------------------*/
149
150template <typename ItemType>
153{
154 friend class ItemConnectedListViewT<ItemType>;
155
156 private:
157
159 Int32 local_id_offset)
161 {}
162
163 public:
164
166 typedef ItemType value_type;
167
168 public:
169
170 //TODO A supprimer avec le C++20
171 typedef const Item* pointer;
172 //TODO A supprimer avec le C++20
173 typedef const Item& reference;
174
175 public:
176
177 ItemType operator*() const
178 {
179 return ItemType(*m_local_id_ptr, m_shared_info);
180 }
181 ThatClass& operator++()
182 {
183 ++m_local_id_ptr;
184 return (*this);
185 }
186 ThatClass& operator--()
187 {
188 --m_local_id_ptr;
189 return (*this);
190 }
191 difference_type operator-(const ThatClass& b) const
192 {
193 return this->m_local_id_ptr - b.m_local_id_ptr;
194 }
195 friend ThatClass operator-(const ThatClass& a, difference_type v)
196 {
197 const Int32* ptr = a.m_local_id_ptr - v;
198 return ThatClass(a.m_shared_info, ptr);
199 }
200 friend ThatClass operator+(const ThatClass& a, difference_type v)
201 {
202 const Int32* ptr = a.m_local_id_ptr + v;
203 return ThatClass(a.m_shared_info, ptr);
204 }
205
206 public:
207
208 ARCANE_DEPRECATED_REASON("Y2022: This method returns a temporary. Use 'operator*' instead")
209 ItemType operator->() const
210 {
211 return this->_itemInternal();
212 }
213};
214
215/*---------------------------------------------------------------------------*/
216/*---------------------------------------------------------------------------*/
224template <int Extent>
226{
227 friend ItemVector;
228 friend class ItemEnumeratorBase;
229 friend class ItemVectorView;
230 friend class ItemConnectedEnumeratorBase;
231 template <typename ItemType> friend class ItemEnumeratorBaseT;
232
233 public:
234
236 using difference_type = std::ptrdiff_t;
237 using value_type = Item;
238 using reference_type = Item&;
239 using const_reference_type = const Item&;
240 // TODO: Créér le type 'Sentinel' lorsqu'on sera en C++20
242
243 public:
244
245 ItemConnectedListView() = default;
246
247 protected:
248
250 : m_index_view(view.m_local_ids,view.m_local_id_offset,0)
251 , m_shared_info(view.m_shared_info)
252 {}
254 : m_index_view(local_ids,local_id_offset,0)
255 , m_shared_info(shared_info)
256 {}
257
258 public:
259
261 Item operator[](Integer index) const
262 {
263 return Item(m_index_view[index], m_shared_info);
264 }
265
267 Int32 size() const { return m_index_view.size(); }
268
271 {
272 return const_iterator(m_shared_info, m_index_view._data(), _localIdOffset());
273 }
274
277 {
278 return endIterator();
279 }
280
283 {
284 return const_iterator(m_shared_info, (m_index_view._data() + this->size()), _localIdOffset());
285 }
286
287 friend std::ostream& operator<<(std::ostream& o, const ItemConnectedListView<Extent>& a)
288 {
289 o << a.m_index_view;
290 return o;
291 }
292
293 ARCANE_DEPRECATED_REASON("Y2023: Use iterator to get values or use operator[]")
294 Int32ConstArrayView localIds() const { return m_index_view._localIds(); }
295
296#ifdef ARCANE_HIDE_ITEM_CONNECTIVITY_STRUCTURE
297 private:
298
299#else
300 public:
301#endif
302
303 // Temporaire pour rendre les sources compatibles
304 operator ItemInternalVectorView() const
305 {
306 return ItemInternalVectorView(m_shared_info, m_index_view._localIds(), _localIdOffset());
307 }
308
309 // TODO: rendre obsolète
310 inline ItemEnumerator enumerator() const;
311
312 private:
313
316 {
317 return m_index_view;
318 }
319
322 {
323 return m_index_view._localIds();
324 }
325
326 protected:
327
328 ItemIndexArrayView m_index_view;
329 ItemSharedInfo* m_shared_info = ItemSharedInfo::nullInstance();
330
331 protected:
332
333 const Int32* _localIdsData() const { return m_index_view._data(); }
334 Int32 _localIdOffset() const { return m_index_view._localIdOffset(); }
335};
336
337/*---------------------------------------------------------------------------*/
338/*---------------------------------------------------------------------------*/
342template <typename ItemType, int Extent>
344: public ItemConnectedListView<Extent>
345{
346 friend class ItemVectorT<ItemType>;
347 friend class ItemEnumeratorBaseT<ItemType>;
348 friend class ItemEnumerator;
349 friend class Item;
350 friend class ItemWithNodes;
351 friend class Node;
352 friend class Edge;
353 friend class Face;
354 friend class Cell;
355 friend class Particle;
356 friend class DoF;
357 template <typename T> friend class ItemConnectedEnumeratorBaseT;
358
360 using BaseClass::m_index_view;
361 using BaseClass::m_shared_info;
362
363 public:
364
366 using difference_type = std::ptrdiff_t;
367 using value_type = ItemType;
368 // TODO: Créér le type 'Sentinel' lorsqu'on sera en C++20
370
371 private:
372
373 ItemConnectedListViewT() = default;
375 : BaseClass(rhs)
376 {}
378 : BaseClass(rhs)
379 {}
380
381 protected:
382
384 : BaseClass(shared_info, local_ids, local_id_offset)
385 {}
386
387 public:
388
390 ItemType operator[](Integer index) const
391 {
392 return ItemType(m_index_view[index], m_shared_info);
393 }
394
395 public:
396
398 inline const_iterator begin() const
399 {
400 return const_iterator(m_shared_info, this->_localIdsData(), this->_localIdOffset());
401 }
403 inline SentinelType end() const
404 {
405 return endIterator();
406 }
409 {
410 return const_iterator(m_shared_info, (this->_localIdsData() + this->size()), this->_localIdOffset());
411 }
412
413#ifdef ARCANE_HIDE_ITEM_CONNECTIVITY_STRUCTURE
414 private:
415
416#else
417 public:
418#endif
419
420 // TODO: rendre obsolète
421 inline ItemEnumeratorT<ItemType> enumerator() const
422 {
423 return ItemEnumeratorT<ItemType>(m_shared_info, m_index_view.m_view);
424 }
425};
426
427/*---------------------------------------------------------------------------*/
428/*---------------------------------------------------------------------------*/
429
430} // End namespace Arcane
431
432/*---------------------------------------------------------------------------*/
433/*---------------------------------------------------------------------------*/
434
435#endif
Maille d'un maillage.
Definition Item.h:1178
classe degré de liberté.
Definition Item.h:1488
Arête d'une maille.
Definition Item.h:798
Face d'une maille.
Definition Item.h:932
Classe de base typeé des énumérateurs sur une liste d'entité connectées.
Classe de base des énumérateurs sur une liste d'entité connectées.
Itérateur pour la classe ItemConnectedListView.
Integer size_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
Classe de base des énumérateurs sur une liste d'entité.
Classe de base des énumérateurs sur une liste d'entité.
Enumérateur sur une liste d'entités.
Vue sur un tableau d'index (localIds()) d'entités.
Int32 size() const
Nombre d'éléments du vecteur.
Structure interne partagée d'une entité de maillage.
Vecteur typé d'entité.
Definition ItemVector.h:166
Itérateur pour la classe ItemVectorView.
Vue sur un vecteur d'entités.
Vecteur d'entités.
Definition ItemVector.h:59
Elément de maillage s'appuyant sur des noeuds (Edge,Face,Cell).
Definition Item.h:714
Classe de base d'un élément de maillage.
Definition Item.h:83
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Noeud d'un maillage.
Definition Dom.h:204
Particule.
Definition Item.h:1383
Vue interne sur un tableau d'entités.
Vue constante d'un tableau de type T.
-*- 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:640