Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
AnyItemGroup.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/* AnyItemGroup.h (C) 2000-2023 */
9/* */
10/* Groupe aggrégée de types quelconques. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ANYITEM_ANYITEMGROUP_H
13#define ARCANE_ANYITEM_ANYITEMGROUP_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include <map>
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22#include "arcane/ItemGroup.h"
23#include "arcane/ItemInfoListView.h"
24#include "arcane/anyitem/AnyItemGlobal.h"
25#include "arcane/anyitem/AnyItemPrivate.h"
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30namespace Arcane::AnyItem
31{
32
33/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
35
36/*
37 * NB: Il faut savoir très tôt si on va itérer pour une variable ou une variable partielle
38 *
39 */
40
45{
46public:
48 : m_group(g)
49 , m_is_partial(false) {}
50 ItemGroup group() const { return m_group; }
51 bool isPartial() const { return m_is_partial; }
52protected:
53 ItemGroup m_group;
54 bool m_is_partial;
55};
56
61 : public GroupBuilder
62{
63public:
65 this->m_is_partial = true;
66 }
67};
68
69/*---------------------------------------------------------------------------*/
70/*---------------------------------------------------------------------------*/
71
77class Group
78{
79 static ItemInternal* _toInternal(const Item& v)
80 {
81 return ItemCompatibility::_itemInternal(v);
82 }
83
84public:
85
93 {
94 private:
96
97 public:
99 : m_info(info)
100 , m_items(m_info.group->itemInfoListView()), m_local_ids(m_info.group->itemsLocalId().data())
101 , m_index(0), m_count(m_info.group->size()), m_is_partial(info.is_partial) { }
102
104 : m_info(e.m_info)
105 , m_items(e.m_items), m_local_ids(e.m_local_ids)
106 , m_index(e.m_index), m_count(e.m_count), m_is_partial(e.m_is_partial) {}
107
109 Item operator*() const { return m_items[ m_local_ids[m_index] ]; }
110 // TODO: retourner un 'Item*' de manière similaire à ItemEnumerator.
112 ItemInternal* operator->() const { return Group::_toInternal(m_items[ m_local_ids[m_index] ]); }
114 inline void operator++() { ++m_index; }
116 inline bool hasNext() { return m_index<m_count; }
118 inline Integer count() const { return m_count; }
119
121 inline Integer varIndex() const { return (m_is_partial)?m_index:m_local_ids[m_index]; }
122
124 inline Integer localId() const { return m_info.local_id_offset+m_index; }
125
127 inline Integer groupIndex() const { return m_info.group_index; }
128
130 inline ItemGroup group() const { return ItemGroup(m_info.group); }
131
132 private:
133 const Private::GroupIndexInfo & m_info;
134
135 ItemInfoListView m_items;
136 const Int32* ARCANE_RESTRICT m_local_ids;
137 Integer m_index;
138 Integer m_count;
139 bool m_is_partial;
140 };
141
146 {
147 public:
149 : m_current(std::begin(groups))
150 , m_end(std::end(groups)) {}
151 Enumerator(const Enumerator& e)
152 : m_current(e.m_current)
153 , m_end(e.m_end) {}
154 inline bool hasNext() const { return m_current != m_end; }
155 inline void operator++() { m_current++; }
158 return BlockItemEnumerator(*m_current);
159 }
160 inline Integer groupIndex() const { return m_current->group_index; }
161 ItemGroup group() const { return ItemGroup(m_current->group); }
162 private:
165 };
166
167public:
168
171 : m_groups(groups) {}
172
174 inline Enumerator enumerator() const {
175 return Enumerator(m_groups);
176 }
177
179 inline Integer size() const {
180 return m_groups.size();
181 }
182
183 //private:
184public:
185
188};
189
190/*---------------------------------------------------------------------------*/
191/*---------------------------------------------------------------------------*/
192
193}
194
195/*---------------------------------------------------------------------------*/
196/*---------------------------------------------------------------------------*/
197
198#endif /* ARCANE_ANYITEM_ANYITEMGROUP_H */
Outil pour construire un groupe.
Enumérateur d'un bloc d'items.
Integer count() const
Nombre d'éléments de l'énumérateur.
ItemGroup group() const
Groupe sous-jacent courant.
Integer localId() const
localId() de l'entité courante.
Integer varIndex() const
localId() de l'entité courante.
Item operator*() const
Déréférencement vers l'item Arcane associé
Integer groupIndex() const
Index dans la AnyItem::Family du groupe en cours.
ItemInternal * operator->() const
Déréférencement indirect vers l'item Arcane associé
bool hasNext()
Test de fin de l'énumérateur.
void operator++()
Avancement de l'énumérateur.
Enumérateur des blocs d'items.
BlockItemEnumerator enumerator()
Enumérateur d'un bloc d'items.
Groupe AnyItem Agglomération de groupe Arcane + informations {partiel ou non} pour les variables Cons...
Group(const Private::GroupIndexMapping &groups)
Construction à partir d'une table Groupe - offset (issue de la famille)
Integer size() const
Nombre de groupes aggrégés.
Enumerator enumerator() const
Enumérateur du groupe.
const Private::GroupIndexMapping & m_groups
Table Groupe - offset.
Outil pour construire un groupe pour une variable partielle.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Vue sur une liste pour obtenir des informations sur les entités.
Structure interne d'une entité de maillage.
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
Integer size() const
Nombre d'éléments du vecteur.
Itérateur sur les classes tableau de Arccore.