Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ItemVectorView.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 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/* ItemVectorView.h (C) 2000-2024 */
9/* */
10/* Vue sur un vecteur (tableau indirect) d'entités. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_ITEMVECTORVIEW_H
13#define ARCANE_CORE_ITEMVECTORVIEW_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/core/ItemInternalVectorView.h"
18#include "arcane/core/ItemIndexArrayView.h"
19#include "arcane/core/ItemInfoListView.h"
20#include "arcane/core/ItemConnectedListView.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane
26{
27// Pour le wrapper C#
28class ItemVectorViewPOD;
29namespace mesh
30{
31class IndexedItemConnectivityAccessor;
32}
33/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
48{
49 protected:
50
51 friend class ItemVectorView;
52 template <int Extent> friend class ItemConnectedListView;
53
54 protected:
55
56 ItemVectorViewConstIterator(ItemSharedInfo* shared_info, const Int32* local_id_ptr, Int32 local_id_offset)
57 : m_shared_info(shared_info)
58 , m_local_id_ptr(local_id_ptr)
59 , m_local_id_offset(local_id_offset)
60 {}
62 : m_shared_info(shared_info)
63 , m_local_id_ptr(local_id_ptr)
64 {}
65
66 public:
67
68 // Temporaire (01/2023) pour conversion avec nouveau type ItemConnectedListView
70 : m_shared_info(v.m_shared_info)
71 , m_local_id_ptr(v.m_local_id_ptr)
72 , m_local_id_offset(v.m_local_id_offset)
73 {}
74
75 public:
76
78 typedef std::random_access_iterator_tag iterator_category;
82 typedef Integer size_type;
84 typedef std::ptrdiff_t difference_type;
85
86 public:
87
88 //TODO A supprimer avec le C++20
89 typedef const Item* pointer;
90 //TODO A supprimer avec le C++20
91 typedef const Item& reference;
92
93 public:
94
95 Item operator*() const { return Item(m_local_id_offset + (*m_local_id_ptr), m_shared_info); }
96
97 ThatClass& operator++()
98 {
99 ++m_local_id_ptr;
100 return (*this);
101 }
102 ThatClass& operator--()
103 {
104 --m_local_id_ptr;
105 return (*this);
106 }
107 void operator+=(difference_type v) { m_local_id_ptr += v; }
108 void operator-=(difference_type v) { m_local_id_ptr -= v; }
109 difference_type operator-(const ThatClass& b) const
110 {
111 return this->m_local_id_ptr - b.m_local_id_ptr;
112 }
113 friend ThatClass operator-(const ThatClass& a, difference_type v)
114 {
115 const Int32* ptr = a.m_local_id_ptr - v;
116 return ThatClass(a.m_shared_info, ptr, a.m_local_id_offset);
117 }
118 friend ThatClass operator+(const ThatClass& a, difference_type v)
119 {
120 const Int32* ptr = a.m_local_id_ptr + v;
121 return ThatClass(a.m_shared_info, ptr, a.m_local_id_offset);
122 }
123 friend bool operator<(const ThatClass& lhs, const ThatClass& rhs)
124 {
125 return lhs.m_local_id_ptr <= rhs.m_local_id_ptr;
126 }
128 friend bool operator==(const ThatClass& lhs, const ThatClass& rhs)
129 {
130 return lhs.m_local_id_ptr == rhs.m_local_id_ptr;
131 }
132 friend bool operator!=(const ThatClass& lhs, const ThatClass& rhs)
133 {
134 return !(lhs == rhs);
135 }
136
137 ARCANE_DEPRECATED_REASON("Y2022: This method returns a temporary. Use 'operator*' instead")
138 Item operator->() const { return _itemInternal(); }
139
140 protected:
141
142 ItemSharedInfo* m_shared_info;
143 const Int32* m_local_id_ptr;
144 Int32 m_local_id_offset = 0;
145
146 protected:
147
148 inline ItemInternal* _itemInternal() const
149 {
150 return m_shared_info->m_items_internal[m_local_id_offset + (*m_local_id_ptr)];
151 }
152};
153
154/*---------------------------------------------------------------------------*/
155/*---------------------------------------------------------------------------*/
156
157template<typename ItemType>
160{
161 friend class ItemVectorViewT<ItemType>;
162 friend class ItemConnectedListViewT<ItemType>;
163
164 private:
165
167 Int32 local_id_offset)
171
172 public:
173
174 // Temporaire (01/2023) pour conversion avec nouveau type ItemConnectedListView
177
178 public:
179
181 typedef ItemType value_type;
182
183 public:
184
185 //TODO A supprimer avec le C++20
186 typedef const Item* pointer;
187 //TODO A supprimer avec le C++20
188 typedef const Item& reference;
189
190 public:
191
192 ItemType operator*() const { return ItemType(m_local_id_offset + (*m_local_id_ptr), m_shared_info); }
193
194 ThatClass& operator++() { ++m_local_id_ptr; return (*this); }
195 ThatClass& operator--() { --m_local_id_ptr; return (*this); }
196 difference_type operator-(const ThatClass& b) const
197 {
198 return this->m_local_id_ptr - b.m_local_id_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, a.m_local_id_offset);
204 }
205 friend ThatClass operator+(const ThatClass& a, difference_type v)
206 {
207 const Int32* ptr = a.m_local_id_ptr + v;
208 return ThatClass(a.m_shared_info, ptr, a.m_local_id_offset);
209 }
210
211 public:
212
213 ARCANE_DEPRECATED_REASON("Y2022: This method returns a temporary. Use 'operator*' instead")
214 ItemType operator->() const { return this->_itemInternal(); }
215};
216
217/*---------------------------------------------------------------------------*/
218/*---------------------------------------------------------------------------*/
226class ARCANE_CORE_EXPORT ItemVectorView
227{
228 // NOTE: Cette classe est mappée en C# et si on change sa structure il
229 // faut mettre à jour la version C# correspondante.
230
231 friend ItemVector;
232 friend ItemEnumeratorBase;
234
235 public:
236
238 using difference_type = std::ptrdiff_t;
239 using value_type = Item;
240 using reference_type = Item&;
241 using const_reference_type = const Item&;
242 // TODO: Créér le type 'Sentinel' lorsqu'on sera en C++20
244
245 public:
246
247 ARCANE_DEPRECATED_REASON("Y2022: Use constructor with ItemInfoListView instead")
249 : m_index_view(local_ids)
250 {
251 _init(aitems);
252 }
253
254 ARCANE_DEPRECATED_REASON("Y2022: Use constructor with ItemInfoListView instead")
256 : m_index_view(indexes)
257 {
258 _init(aitems);
259 }
260
261 public:
262
263 ItemVectorView() = default;
264 // TODO Rendre obsolète (3.11+)
266 : m_index_view(view.localIds(),view.m_local_id_offset,0)
267 , m_shared_info(view.m_shared_info)
268 {}
269 // TODO A supprimer
271 : m_index_view(local_ids,0,0)
272 , m_shared_info(item_info_list_view.m_item_shared_info)
273 {}
275 : m_index_view(indexes)
276 , m_shared_info(item_info_list_view.m_item_shared_info)
277 {}
281 : m_index_view(view.constLocalIds(),view.m_local_id_offset,0)
282 , m_shared_info(view.m_shared_info)
283 {}
284
285 // Temporaire (01/2023) pour conversion avec nouveau type ItemConnectedListView
287 : m_index_view(v.m_index_view)
288 , m_shared_info(v.m_shared_info)
289 {}
290
291 protected:
292
294 : m_index_view(local_ids)
295 , m_shared_info(shared_info)
296 {}
297
299 : m_index_view(local_ids,local_id_offset,0)
300 , m_shared_info(shared_info)
301 {}
302
303 // Temporaire pour éviter un avertissement de compilation lorsqu'on utilise le
304 // constructeur obsolète de ItemVectorViewT
306 : m_index_view(local_ids)
307 {
308 _init(aitems);
309 }
310
311 // Temporaire pour éviter un avertissement de compilation lorsqu'on utilise le
312 // constructeur obsolète de ItemVectorViewT
314 : m_index_view(indexes)
315 {
316 _init(aitems);
317 }
318
319 public:
320
321 // TODO: a supprimer
322 operator ItemInternalVectorView() const
323 {
324 return ItemInternalVectorView(m_shared_info, m_index_view._localIds(), _localIdOffset());
325 }
326
328 Item operator[](Integer index) const { return Item(m_index_view[index], m_shared_info); }
329
331 Int32 size() const { return m_index_view.size(); }
332
334 ARCANE_DEPRECATED_REASON("Y2022: Do not use this method")
335 ItemInternalArrayView items() const { return m_shared_info->m_items_internal; }
336
337 // TODO Rendre obsolète (3.11+)
345 Int32ConstArrayView localIds() const { return m_index_view._localIds(); }
346
348 void fillLocalIds(Array<Int32>& ids) const;
349
351 ItemVectorView subView(Integer abegin, Integer asize) const
352 {
353 return ItemVectorView(m_shared_info, m_index_view.subView(abegin, asize)._localIds(), _localIdOffset());
354 }
355 const_iterator begin() const
356 {
357 return const_iterator(m_shared_info, m_index_view._data(), _localIdOffset());
358 }
359 SentinelType end() const
360 {
361 return endIterator();
362 }
363 const_iterator endIterator() const
364 {
365 return const_iterator(m_shared_info, (m_index_view._data() + this->size()), _localIdOffset());
366 }
368 ItemIndexArrayView indexes() const { return m_index_view; }
369
370 public:
371
372 inline ItemEnumerator enumerator() const;
373
374 protected:
375
376 ItemIndexArrayView m_index_view;
377 ItemSharedInfo* m_shared_info = ItemSharedInfo::nullInstance();
378
379 protected:
380
381 const Int32* _localIdsData() const { return m_index_view._data(); }
382 Int32 _localIdOffset() const { return m_index_view._localIdOffset(); }
383
384 private:
385
386 void _init(ItemInternalArrayView items)
387 {
388 m_shared_info = (size() > 0 && !items.empty()) ? ItemInternalCompatibility::_getSharedInfo(items[0]) : ItemSharedInfo::nullInstance();
389 }
390 void _init2(IItemFamily* family);
391
392 public:
393
394 // Pour SWIG pour positionner les valeurs l'instance POD
395 void _internalSwigSet(ItemVectorViewPOD* vpod);
396};
397
398/*---------------------------------------------------------------------------*/
399/*---------------------------------------------------------------------------*/
403template<typename ItemType>
405: public ItemVectorView
406{
407 friend class ItemVectorT<ItemType>;
408 friend class ItemConnectedListViewT<ItemType>;
409
410 public:
411
413 using difference_type = std::ptrdiff_t;
414 using value_type = ItemType;
415 //TODO a supprimer avec le C++20
416 using reference_type = ItemType&;
417 //TODO a supprimer avec le C++20
418 using const_reference_type = const ItemType&;
419 // TODO: Créér le type 'Sentinel' lorsqu'on sera en C++20
421
422 public:
423
424 ARCANE_DEPRECATED_REASON("Y2022: Use constructor with ItemInfoListView instead")
427
428 ARCANE_DEPRECATED_REASON("Y2022: Use constructor with ItemInfoListView instead")
430 : ItemVectorView(aitems,indexes,true) {}
431
432 public:
433
434 ItemVectorViewT() = default;
436 : ItemVectorView(rhs) {}
439 : ItemVectorView(rhs) {}
441 : ItemVectorView(rhs) {}
447 : ItemVectorView(family,local_ids) {}
449 : ItemVectorView(family,indexes) {}
450
451 // Temporaire (01/2023) pour conversion avec nouveau type ItemConnectedListView
453 : ItemVectorView(v){}
454
455 protected:
456
458 : ItemVectorView(shared_info,local_ids,local_id_offset) { }
459
460 public:
461
462 ItemType operator[](Integer index) const
463 {
464 return ItemType(m_index_view[index],m_shared_info);
465 }
466
467 public:
468
469 inline ItemEnumeratorT<ItemType> enumerator() const
470 {
471 return ItemEnumeratorT<ItemType>(m_shared_info,m_index_view.m_view);
472 }
473 inline const_iterator begin() const
474 {
475 return const_iterator(m_shared_info, _localIdsData(), _localIdOffset());
476 }
477 inline SentinelType end() const
478 {
479 return const_iterator(m_shared_info, _localIdsData() + this->size(), _localIdOffset());
480 }
481 inline const_iterator endIterator() const
482 {
483 return const_iterator(m_shared_info, _localIdsData() + this->size(), _localIdOffset());
484 }
485};
486
487/*---------------------------------------------------------------------------*/
488/*---------------------------------------------------------------------------*/
489
490} // End namespace Arcane
491
492/*---------------------------------------------------------------------------*/
493/*---------------------------------------------------------------------------*/
494
495#endif
Interface d'une famille d'entités.
Itérateur pour la classe ItemConnectedListView.
Vue sur une liste d'entités connectées à une autre.
Vue sur une liste d'entités connectées à une autre 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.
Vue sur une liste pour obtenir des informations sur les entités.
Vue interne sur un tableau d'entités.
Int32ConstArrayView localIds() const
Tableau des numéros locaux des entités.
Structure interne partagée d'une entité de maillage.
Vecteur typé d'entité.
Definition ItemVector.h:166
Itérateur pour la classe ItemVectorView.
friend bool operator==(const ThatClass &lhs, const ThatClass &rhs)
Compare les indices d'itération de deux instances.
Integer size_type
Type indexant le tableau.
std::ptrdiff_t difference_type
Type d'une distance entre itérateur éléments du tableau.
Item value_type
Type indexant le tableau.
Vue sur un tableau typé d'entités.
Vue sur un vecteur d'entités.
ItemVectorView subView(Integer abegin, Integer asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
Int32 size() const
Nombre d'éléments du vecteur.
ItemIndexArrayView indexes() const
Vue sur le tableau des indices.
Int32ConstArrayView localIds() const
Tableau des numéros locaux des entités.
Item operator[](Integer index) const
Accède au i-ème élément du vecteur.
Vecteur d'entités.
Definition ItemVector.h:59
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
Vue interne sur un tableau d'entités.
Vue sur le conteneur d'une liste de ItemLocalId.
Vue constante d'un tableau de type T.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-