Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ItemPairEnumerator.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/* ItemPairEnumerator.h (C) 2000-2023 */
9/* */
10/* Enumérateur sur un tableau de tableau d'entités du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ITEMPAIRENUMERATOR_H
13#define ARCANE_ITEMPAIRENUMERATOR_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/Item.h"
18#include "arcane/ItemEnumerator.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29class ItemInternal;
30class ItemItemArray;
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34/*!
35 * \brief Enumérateur sur un tableau de tableaux d'entités du maillage.
36 */
37class ARCANE_CORE_EXPORT ItemPairEnumerator
38{
39 public:
40
42
43 public:
44
46 ItemPairEnumerator() = default;
47
48 public:
49
50 inline void operator++()
51 {
52 ++m_current;
53 }
54 inline bool hasNext() const
55 {
56 return m_current < m_end;
57 }
58 inline Int32 itemLocalId() const
59 {
60 return m_items_local_id[m_current];
61 }
62 inline Int32 index() const
63 {
64 return m_current;
65 }
66 inline ItemEnumerator subItems() const
67 {
68 return { m_sub_items_shared_info, _ids() };
69 }
70 inline Item operator*() const
71 {
72 return Item(m_items_local_id[m_current], m_items_shared_info);
73 }
74 inline Integer nbSubItem() const
75 {
76 return static_cast<Int32>(m_indexes[m_current + 1] - m_indexes[m_current]);
77 }
78
79 //! Conversion vers un ItemLocalIdT<ItemType>
80 operator ItemLocalId() const { return ItemLocalId{ itemLocalId() }; }
81
82 protected:
83
84 Int32 m_current = 0;
85 Int32 m_end = 0;
86 Int64ConstArrayView m_indexes;
87 Int32ConstArrayView m_items_local_id;
88 Span<const Int32> m_sub_items_local_id;
89 ItemSharedInfo* m_items_shared_info = ItemSharedInfo::nullInstance();
90 ItemSharedInfo* m_sub_items_shared_info = ItemSharedInfo::nullInstance();
91
92 protected:
93
94 Item _currentItem() const
95 {
96 return Item(m_items_local_id[m_current], m_items_shared_info);
97 }
98 ConstArrayView<Int32> _ids() const
99 {
100 return ConstArrayView<Int32>(nbSubItem(), m_sub_items_local_id.data() + m_indexes[m_current]);
101 }
102};
103
104/*---------------------------------------------------------------------------*/
105/*---------------------------------------------------------------------------*/
106/*!
107 * \brief Enumérateur sur un tableau de tableaux d'entités
108 * du maillage de genre \a ItemType et \a SubItemType.
109 */
110template <typename ItemType>
112: public ItemPairEnumerator
113{
114 public:
115
117 : ItemPairEnumerator(array)
118 {
119 }
120
121 public:
122
123 inline ItemType operator*() const
124 {
125 return ItemType(this->_currentItem());
126 }
127 //! Conversion vers un ItemLocalIdT<ItemType>
128 operator ItemLocalIdT<ItemType>() const { return ItemLocalIdT<ItemType>{ this->itemLocalId() }; }
129};
130
131/*---------------------------------------------------------------------------*/
132/*---------------------------------------------------------------------------*/
133/*!
134 * \brief Enumérateur sur un tableau de tableaux d'entités
135 * du maillage de genre \a ItemType et \a SubItemType.
136 */
137template <typename ItemType, typename SubItemType>
139: public ItemPairEnumeratorSubT<ItemType>
140{
141 using BaseClass = ItemPairEnumeratorSubT<ItemType>;
142
143 public:
144
147 {
148 }
149
150 ItemEnumeratorT<SubItemType> subItems() const
151 {
152 return { this->m_sub_items_shared_info, this->_ids() };
153 }
154};
155
156/*---------------------------------------------------------------------------*/
157/*---------------------------------------------------------------------------*/
158
159} // End namespace Arcane
160
161/*---------------------------------------------------------------------------*/
162/*---------------------------------------------------------------------------*/
163
164#endif
Enumérateur sur une liste typée d'entités de type ItemType.
Enumérateur sur une liste d'entités.
Index d'une entité ItemType dans une variable.
Definition ItemLocalId.h:89
Index d'un Item dans une variable.
Definition ItemLocalId.h:40
Enumérateur sur un tableau de tableaux d'entités du maillage de genre ItemType et SubItemType.
Enumérateur sur un tableau de tableaux d'entités du maillage de genre ItemType et SubItemType.
Enumérateur sur un tableau de tableaux d'entités du maillage.
Référence à un groupe d'un genre donné.
Tableau de listes d'entités.
Classe de base d'un élément de maillage.
Definition Item.h:83
Vue constante d'un tableau de type T.
constexpr __host__ __device__ pointer data() const noexcept
Pointeur sur le début de la vue.
Definition Span.h:419
Vue d'un tableau d'éléments de type T.
Definition Span.h:510
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Real2 operator*(Real sca, const Real2Proxy &vec)
Multiplication par un scalaire.
Definition Real2Proxy.h:241