Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
core/ItemGroupObserver.h
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/* ItemGroupObserver.h (C) 2000-2016 */
9/* */
10/* Interface et implémentation basique des observeurs de groupe. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ITEMGROUPOBSERVER_H
13#define ARCANE_ITEMGROUPOBSERVER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/ItemTypes.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22ARCANE_BEGIN_NAMESPACE
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
28{
29 public:
30
31 template<typename T>
33 {
34 //! Type du pointeur sur la méthode avec Infos
35 typedef void (T::*FuncPtrWithInfo)(const Int32ConstArrayView * info);
36
37 //! Type du pointeur sur la méthode sans Infos
38 typedef void (T::*FuncPtr)();
39 };
40
41 public:
42
43 //! Destructeur
44 virtual ~IItemGroupObserver() { }
45
46 //! Execute l'action associée à l'extension
47 /*! \param info liste des localIds ajoutés
48 * Suppose qu'il n'y a pas de changement d'ordre ou de renumérotation
49 *
50 * Cette méthode ne peut pas être parallèle.
51 */
52 virtual void executeExtend(const Int32ConstArrayView * info) =0;
53
54 //! Execute l'action associée à l'extension
55 /*! \param info liste des positions supprimées dans l'ancien groupe
56 * Suppose qu'il n'y a pas de changement d'ordre ou de renumérotation
57 * Cette approche par rapport à la liste des localIds est motivée par
58 * la contrainte dans PartialVariable qui n'a pas connaissance des localIds
59 * qu'il héberge.
60 * \param info2 liste des localIds des éléments supprimés. Potentiellement redondant
61 * avec \a info, mais inévitable pour certaines structures changeant l'ordre par rapport
62 * au groupe de référence (ex: ItemGroupDynamicMeshObserver) (DEPRECATED)
63 *
64 * Cette méthode ne peut pas être parallèle.
65 */
66 virtual void executeReduce(const Int32ConstArrayView * info) =0;
67 // virtual void executeReduce(const Int32ConstArrayView * info, const Int32ConstArrayView * info2) = 0;
68
69 //! Execute l'action associée au compactage
70 /*! \param info liste des permutations dans le sens old->new
71 * Suppose qu'il n'y a pas de changement de taille
72 */
73 virtual void executeCompact(const Int32ConstArrayView * info) =0;
74
75 //! Execute l'action associée à l'invalidation
76 /*! Aucune information de transition disponible */
77 virtual void executeInvalidate() =0;
78
79 //! Indique si l'observer aura besoin d'information de transition
80 /*! Cette information ne doit pas changer après le premier appel à cet fonction */
81 virtual bool needInfo() const =0;
82};
83
84/*---------------------------------------------------------------------------*/
85/*---------------------------------------------------------------------------*/
86
87template<typename T>
89: public IItemGroupObserver
90{
91 public:
92
94 typename FuncTraits<T>::FuncPtrWithInfo extend_funcptr,
95 typename FuncTraits<T>::FuncPtrWithInfo reduce_funcptr,
96 typename FuncTraits<T>::FuncPtrWithInfo compact_funcptr,
97 typename FuncTraits<T>::FuncPtr invalidate_funcptr)
98 : m_object(object)
99 , m_extend_function(extend_funcptr)
100 , m_reduce_function(reduce_funcptr)
101 , m_compact_function(compact_funcptr)
102 , m_invalidate_function(invalidate_funcptr) { }
103
104 public:
105
107 {
108 (m_object->*m_extend_function)(info);
109 }
110
112 {
113 (m_object->*m_reduce_function)(info);
114 }
115
117 {
118 (m_object->*m_compact_function)(info);
119 }
120
122 {
123 (m_object->*m_invalidate_function)();
124 }
125
126 bool needInfo() const
127 {
128 return true;
129 }
130
131 private:
132
133 T* m_object; //!< Objet associé.
134 typename FuncTraits<T>::FuncPtrWithInfo m_extend_function; //!< Pointeur vers la méthode associée.
135 typename FuncTraits<T>::FuncPtrWithInfo m_reduce_function; //!< Pointeur vers la méthode associée.
136 typename FuncTraits<T>::FuncPtrWithInfo m_compact_function; //!< Pointeur vers la méthode associée.
137 typename FuncTraits<T>::FuncPtr m_invalidate_function; //!< Pointeur vers la méthode associée.
138};
139
140/*---------------------------------------------------------------------------*/
141/*---------------------------------------------------------------------------*/
142
143template<typename T>
145: public IItemGroupObserver
146{
147 public:
148
149 //! Constructeur à partir d'une unique fonction sans argument
151 typename FuncTraits<T>::FuncPtr funcptr)
152 : m_object(object),
153 m_function(funcptr) { }
154
155 public:
156
158 {
159 (m_object->*m_function)();
160 }
161
163 {
164 (m_object->*m_function)();
165 }
166
168 {
169 (m_object->*m_function)();
170 }
171
173 {
174 (m_object->*m_function)();
175 }
176
177 bool needInfo() const
178 {
179 return false;
180 }
181
182 private:
183
184 T* m_object; //!< Objet associé.
185 typename FuncTraits<T>::FuncPtr m_function; //!< Pointeur vers la méthode associée.
186};
187
188/*---------------------------------------------------------------------------*/
189/*---------------------------------------------------------------------------*/
190
191//! Utilitaire pour création simplifié de ItemGroupObserverT
192template<typename T>
195{
196 return new ItemGroupObserverWithoutInfoT<T>(object,funcptr);
197}
198
199/*---------------------------------------------------------------------------*/
200/*---------------------------------------------------------------------------*/
201
202//! Utilitaire pour création simplifié de ItemGroupObserverT
203template<typename T>
208 typename IItemGroupObserver::FuncTraits<T>::FuncPtr invalidate_funcptr)
209{
210 return new ItemGroupObserverWithInfoT<T>(object,extend_funcptr,reduce_funcptr,compact_funcptr,invalidate_funcptr);
211}
212
213/*---------------------------------------------------------------------------*/
214/*---------------------------------------------------------------------------*/
215
216
217ARCANE_END_NAMESPACE
218
219/*---------------------------------------------------------------------------*/
220/*---------------------------------------------------------------------------*/
221
222#endif
223
virtual bool needInfo() const =0
Indique si l'observer aura besoin d'information de transition.
virtual void executeExtend(const Int32ConstArrayView *info)=0
Execute l'action associée à l'extension.
virtual void executeInvalidate()=0
Execute l'action associée à l'invalidation.
virtual void executeCompact(const Int32ConstArrayView *info)=0
Execute l'action associée au compactage.
virtual ~IItemGroupObserver()
Destructeur.
virtual void executeReduce(const Int32ConstArrayView *info)=0
Execute l'action associée à l'extension.
bool needInfo() const
Indique si l'observer aura besoin d'information de transition.
void executeCompact(const Int32ConstArrayView *info)
Execute l'action associée au compactage.
void executeReduce(const Int32ConstArrayView *info)
Execute l'action associée à l'extension.
void executeExtend(const Int32ConstArrayView *info)
Execute l'action associée à l'extension.
void executeInvalidate()
Execute l'action associée à l'invalidation.
ItemGroupObserverWithoutInfoT(T *object, typename FuncTraits< T >::FuncPtr funcptr)
Constructeur à partir d'une unique fonction sans argument.
bool needInfo() const
Indique si l'observer aura besoin d'information de transition.
void executeReduce(const Int32ConstArrayView *)
Execute l'action associée à l'extension.
void executeInvalidate()
Execute l'action associée à l'invalidation.
void executeExtend(const Int32ConstArrayView *)
Execute l'action associée à l'extension.
void executeCompact(const Int32ConstArrayView *)
Execute l'action associée au compactage.
Vue constante d'un tableau de type T.
IItemGroupObserver * newItemGroupObserverT(T *object, typename IItemGroupObserver::FuncTraits< T >::FuncPtr funcptr)
Utilitaire pour création simplifié de ItemGroupObserverT.