Arcane  v3.14.10.0
Documentation utilisateur
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/*---------------------------------------------------------------------------*/
33/*!
34 * \internal
35 * \brief Classe d'un groupe nul.
36 */
38: public ItemPairGroupImpl
39{
40 public:
41
43 virtual ~ItemPairGroupImplNull() {} //!< Libère les ressources
44
45 public:
46 private:
47};
48
49/*---------------------------------------------------------------------------*/
50/*---------------------------------------------------------------------------*/
51/*!
52 * \internal
53 */
55{
56 public:
57
59 ItemPairGroupImplPrivate(const ItemGroup& group,const ItemGroup& sub_group);
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
71 IMesh* m_mesh; //!< Gestionnare de groupe associé
72 IItemFamily* m_item_family; //!< Famille associée
73 IItemFamily* m_sub_item_family; //!< Famille associée
74 ItemGroup m_item_group;
75 ItemGroup m_sub_item_group;
76 bool m_is_null; //!< \a true si le groupe est nul
77 eItemKind m_kind; //!< Genre de entités du groupe
78 eItemKind m_sub_kind;
79 bool m_need_recompute; //!< Vrai si le groupe doit être recalculé
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/*---------------------------------------------------------------------------*/
204/*!
205 * \todo a supprimer...
206 */
207void ItemPairGroupImpl::
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
253subItemFamily() const
254{
255 return m_p->m_sub_item_family;
256}
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
315invalidate(bool force_recompute)
316{
317 m_p->m_need_recompute = true;
318 if (force_recompute)
320}
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
340Array<Int64>& ItemPairGroupImpl::
341unguardedIndexes() const
342{
343 return m_p->m_indexes;
344}
345
346/*---------------------------------------------------------------------------*/
347/*---------------------------------------------------------------------------*/
348
349Array<Int32>& ItemPairGroupImpl::
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
378void ItemPairGroupImpl::
379setComputeFunctor(IFunctor* functor)
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
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
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.
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)
const ItemGroup & subItemGroup() const
Groupe des sous-entités.
void invalidate(bool force_recompute)
Invalide le groupe.
virtual ~ItemPairGroupImpl()
Libère les ressources.
bool null() const
Retourne true si le groupe est nul.
virtual void removeRef()
Décrémente le compteur de référence.
void addRef() override
Incrémente le compteur de référence.
void removeRef() override
Décrémente le compteur de référence.
Classe de base des vecteurs 1D de données.
virtual void executeFunctor()=0
Exécute la méthode associé
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- 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.