Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ItemPairGroupImpl.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* ItemPairGroupImpl.cc (C) 2000-2021 */
9/* */
10/* Implémentation d'un tableau de listes d'entités. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/utils/ArcanePrecomp.h"
15
16#include "arcane/utils/Array.h"
17#include "arcane/utils/IFunctor.h"
18
19#include "arcane/ItemGroupObserver.h"
20#include "arcane/ItemPairGroupImpl.h"
21#include "arcane/ItemPairGroup.h"
22#include "arcane/IItemFamily.h"
23#include "arcane/ItemGroup.h"
24#include "arcane/IMesh.h"
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29namespace Arcane
30{
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
38: public ItemPairGroupImpl
39{
40 public:
41
44
45 public:
46 private:
47};
48
49/*---------------------------------------------------------------------------*/
50/*---------------------------------------------------------------------------*/
55{
56 public:
57
61
62 public:
63
64 inline bool null() const { return m_is_null; }
65 inline IMesh* mesh() const { return m_mesh; }
66 inline eItemKind kind() const { return m_kind; }
67 inline eItemKind subKind() const { return m_sub_kind; }
68
69 public:
70
74 ItemGroup m_item_group;
75 ItemGroup m_sub_item_group;
76 bool m_is_null;
78 eItemKind m_sub_kind;
80
81 UniqueArray<Int64> m_indexes;
82 UniqueArray<Int32> m_sub_items_local_id;
83 IFunctor* m_compute_functor;
84
85 public:
86
87 void invalidate() { m_need_recompute = true; }
88
89 private:
90
91 void _init();
92};
93
94/*---------------------------------------------------------------------------*/
95/*---------------------------------------------------------------------------*/
96
97ItemPairGroupImplPrivate::
98ItemPairGroupImplPrivate()
99: m_mesh(nullptr)
100, m_item_family(nullptr)
101, m_sub_item_family(nullptr)
102, m_is_null(true)
103, m_kind(IK_Unknown)
104, m_sub_kind(IK_Unknown)
105, m_need_recompute(false)
106, m_compute_functor(nullptr)
107{
108 _init();
109}
110
111/*---------------------------------------------------------------------------*/
112/*---------------------------------------------------------------------------*/
113
114ItemPairGroupImplPrivate::
115ItemPairGroupImplPrivate(const ItemGroup& group,const ItemGroup& sub_group)
116: m_mesh(group.mesh())
117, m_item_family(group.itemFamily())
118, m_sub_item_family(sub_group.itemFamily())
119, m_item_group(group)
120, m_sub_item_group(sub_group)
121, m_is_null(false)
122, m_kind(group.itemKind())
123, m_sub_kind(sub_group.itemKind())
124, m_need_recompute(false)
125, m_compute_functor(nullptr)
126{
127 _init();
128}
129
130/*---------------------------------------------------------------------------*/
131/*---------------------------------------------------------------------------*/
132
133ItemPairGroupImplPrivate::
134~ItemPairGroupImplPrivate()
135{
136 delete m_compute_functor;
137}
138
139/*---------------------------------------------------------------------------*/
140/*---------------------------------------------------------------------------*/
141
142void ItemPairGroupImplPrivate::
143_init()
144{
145}
146
147/*---------------------------------------------------------------------------*/
148/*---------------------------------------------------------------------------*/
149
150/*---------------------------------------------------------------------------*/
151/*---------------------------------------------------------------------------*/
152
153ItemPairGroupImpl* ItemPairGroupImpl::shared_null= 0;
154
155/*---------------------------------------------------------------------------*/
156/*---------------------------------------------------------------------------*/
157
158/*---------------------------------------------------------------------------*/
159/*---------------------------------------------------------------------------*/
160
161ItemPairGroupImpl* ItemPairGroupImpl::
162checkSharedNull()
163{
164 if (!shared_null){
165 shared_null = new ItemPairGroupImplNull();
166 shared_null->addRef();
167 }
168 return shared_null;
169}
170
171/*---------------------------------------------------------------------------*/
172/*---------------------------------------------------------------------------*/
173
174ItemPairGroupImpl::
175ItemPairGroupImpl(const ItemGroup& group,const ItemGroup& sub_group)
176: m_p (new ItemPairGroupImplPrivate(group,sub_group))
177{
178 m_p->m_item_group.internal()->attachObserver(this,newItemGroupObserverT(m_p,&ItemPairGroupImplPrivate::invalidate));
179 m_p->m_sub_item_group.internal()->attachObserver(this,newItemGroupObserverT(m_p,&ItemPairGroupImplPrivate::invalidate));
180}
181
182/*---------------------------------------------------------------------------*/
183/*---------------------------------------------------------------------------*/
184
185ItemPairGroupImpl::
186ItemPairGroupImpl()
187: m_p (new ItemPairGroupImplPrivate())
188{
189}
190
191/*---------------------------------------------------------------------------*/
192/*---------------------------------------------------------------------------*/
193
196{
197 m_p->m_item_group.internal()->detachObserver(this);
198 m_p->m_sub_item_group.internal()->detachObserver(this);
199 delete m_p;
200}
201
202/*---------------------------------------------------------------------------*/
203/*---------------------------------------------------------------------------*/
208deleteMe()
209{
210 delete this;
211}
212
213/*---------------------------------------------------------------------------*/
214/*---------------------------------------------------------------------------*/
215
221
222/*---------------------------------------------------------------------------*/
223/*---------------------------------------------------------------------------*/
224
230
231/*---------------------------------------------------------------------------*/
232/*---------------------------------------------------------------------------*/
233
235mesh() const
236{
237 return m_p->mesh();
238}
239
240/*---------------------------------------------------------------------------*/
241/*---------------------------------------------------------------------------*/
242
244itemFamily() const
245{
246 return m_p->m_item_family;
247}
248
249/*---------------------------------------------------------------------------*/
250/*---------------------------------------------------------------------------*/
251
257
258/*---------------------------------------------------------------------------*/
259/*---------------------------------------------------------------------------*/
260
262null() const
263{
264 return m_p->null();
265}
266
267/*---------------------------------------------------------------------------*/
268/*---------------------------------------------------------------------------*/
269
271itemKind() const
272{
273 return m_p->kind();
274}
275
276/*---------------------------------------------------------------------------*/
277/*---------------------------------------------------------------------------*/
278
280subItemKind() const
281{
282 return m_p->subKind();
283}
284
285/*---------------------------------------------------------------------------*/
286/*---------------------------------------------------------------------------*/
287
289itemGroup() const
290{
291 return m_p->m_item_group;
292}
293
294/*---------------------------------------------------------------------------*/
295/*---------------------------------------------------------------------------*/
296
298subItemGroup() const
299{
300 return m_p->m_sub_item_group;
301}
302
303/*---------------------------------------------------------------------------*/
304/*---------------------------------------------------------------------------*/
305
308{
309}
310
311/*---------------------------------------------------------------------------*/
312/*---------------------------------------------------------------------------*/
313
321
322/*---------------------------------------------------------------------------*/
323/*---------------------------------------------------------------------------*/
324
327{
328 if (m_p->m_need_recompute){
329 m_p->m_need_recompute = false;
330 if (m_p->m_compute_functor)
331 m_p->m_compute_functor->executeFunctor();
332 return true;
333 }
334 return false;
335}
336
337/*---------------------------------------------------------------------------*/
338/*---------------------------------------------------------------------------*/
339
341unguardedIndexes() const
342{
343 return m_p->m_indexes;
344}
345
346/*---------------------------------------------------------------------------*/
347/*---------------------------------------------------------------------------*/
348
350unguardedLocalIds() const
351{
352 return m_p->m_sub_items_local_id;
353}
354
355/*---------------------------------------------------------------------------*/
356/*---------------------------------------------------------------------------*/
357
358ArrayView<Int64> ItemPairGroupImpl::
359indexes()
360{
362 return m_p->m_indexes;
363}
364
365/*---------------------------------------------------------------------------*/
366/*---------------------------------------------------------------------------*/
367
368Span<const Int32> ItemPairGroupImpl::
369subItemsLocalId()
370{
372 return m_p->m_sub_items_local_id;
373}
374
375/*---------------------------------------------------------------------------*/
376/*---------------------------------------------------------------------------*/
377
380{
381 delete m_p->m_compute_functor;
382 m_p->m_compute_functor = functor;
383}
384
385/*---------------------------------------------------------------------------*/
386/*---------------------------------------------------------------------------*/
387
388} // End namespace Arcane
389
390/*---------------------------------------------------------------------------*/
391/*---------------------------------------------------------------------------*/
Interface d'une famille d'entités.
void detachObserver(const void *ref)
Détache un observer.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
ItemGroupImpl * internal() const
Retourne l'implémentation du groupe.
Definition ItemGroup.h:120
virtual ~ItemPairGroupImplNull()
Libère les ressources.
eItemKind m_kind
Genre de entités du groupe.
bool m_need_recompute
Vrai si le groupe doit être recalculé
IItemFamily * m_item_family
Famille associée.
IItemFamily * m_sub_item_family
Famille associée.
IMesh * m_mesh
Gestionnare de groupe associé
bool m_is_null
true si le groupe est nul
Implémentation d'un tableau de listes d'entités.
ItemPairGroupImplPrivate * m_p
Implémentation du groupe.
IMesh * mesh() const
Maillage auquel appartient le groupe (0 pour le groupe nul).
eItemKind subItemKind() const
Genre du groupe. Il s'agit du genre de ses éléments.
const ItemGroup & itemGroup() const
Groupe des entités.
bool checkNeedUpdate()
Réactualise le groupe si nécessaire.
void checkValid()
Vérifie que le groupe est valide.
eItemKind itemKind() const
Genre du groupe. Il s'agit du genre de ses éléments.
Array< Int32 > & unguardedLocalIds() const
virtual void addRef()
Incrémente le compteur de référence.
IItemFamily * subItemFamily() const
Familly à laquelle appartient le groupe (ou 0 si aucune)
IItemFamily * itemFamily() const
Familly à laquelle appartient le groupe (ou 0 si aucune)
Array< Int64 > & unguardedIndexes() const
const ItemGroup & subItemGroup() const
Groupe des sous-entités.
void invalidate(bool force_recompute)
Invalide le groupe.
virtual ~ItemPairGroupImpl()
Libère les ressources.
void setComputeFunctor(IFunctor *functor)
bool null() const
Retourne true si le groupe est nul.
virtual void removeRef()
Décrémente le compteur de référence.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
void addRef() override
Incrémente le compteur de référence.
void removeRef() override
Décrémente le compteur de référence.
virtual void executeFunctor()=0
Exécute la méthode associé
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eItemKind
Genre d'entité de maillage.
@ IK_Unknown
Entité de maillage de genre inconnu ou non initialisé
IItemGroupObserver * newItemGroupObserverT(T *object, typename IItemGroupObserver::FuncTraits< T >::FuncPtr funcptr)
Utilitaire pour création simplifié de ItemGroupObserverT.