Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
CollectionImpl.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/* CollectionImpl.h (C) 2000-2022 */
9/* */
10/* Implémentation de la classe de base d'une collection. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_COLLECTIONIMPL_H
13#define ARCANE_UTILS_COLLECTIONIMPL_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/ObjectImpl.h"
18#include "arcane/utils/Iostream.h"
19#include "arcane/utils/Event.h"
20
21#include <algorithm>
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
26namespace Arcane
27{
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32class EnumeratorImplBase;
33
34extern "C" ARCANE_UTILS_EXPORT void throwOutOfRangeException();
35extern "C" ARCANE_UTILS_EXPORT void throwNullReference();
36
37/*---------------------------------------------------------------------------*/
38/*---------------------------------------------------------------------------*/
54{
55 public:
56
57 enum eAction
58 {
59 ClearComplete,
60 InsertComplete,
61 RemoveComplete,
62 SetComplete
63 };
64
65 public:
66
67 CollectionEventArgs(eAction aaction, void* aobject, Integer aposition)
68 : m_action(aaction)
69 , m_object(aobject)
70 , m_position(aposition)
71 {}
72
73 public:
74
75 eAction action() const { return m_action; }
76 void* object() const { return m_object; }
77 Integer position() const { return m_position; }
78
79 private:
80
81 eAction m_action;
82 void* m_object;
83 Integer m_position;
84};
85
86/*---------------------------------------------------------------------------*/
87/*---------------------------------------------------------------------------*/
93
94/*---------------------------------------------------------------------------*/
95/*---------------------------------------------------------------------------*/
120: public ObjectImpl
121{
122 public:
123
125 typedef Integer size_type;
128
129 public:
130
134 explicit CollectionImplBase(Integer acount)
135 : m_count(acount)
136 {}
140
141 public:
142
144 Integer count() const { return m_count; }
146 virtual void clear() = 0;
147
148 public:
149
151 virtual void onClear() {}
153 virtual void onClearComplete()
154 {
155 _sendEvent(CollectionEventArgs::ClearComplete, 0, 0);
156 }
158 virtual void onInsert() {}
160 virtual void onInsertComplete(void* object, Integer position)
161 {
162 _sendEvent(CollectionEventArgs::InsertComplete, object, position);
163 }
165 virtual void onRemove() {}
167 virtual void onRemoveComplete(void* object, Integer position)
168 {
169 _sendEvent(CollectionEventArgs::RemoveComplete, object, position);
170 }
171 virtual void onSet() {}
172 virtual void onSetComplete(void* object, Integer position)
173 {
174 _sendEvent(CollectionEventArgs::SetComplete, object, position);
175 }
176 virtual void onValidate() {}
177
178 public:
179
181 virtual EnumeratorImplBase* enumerator() const = 0;
182
183 public:
184
185 CollectionChangeEventHandler& change() { return m_collection_handlers; }
186
187 protected:
188
189 void _setCount(Integer acount) { m_count = acount; }
190
191 private:
192
193 Integer m_count = 0;
194 CollectionChangeEventHandler m_collection_handlers;
195
196 private:
197
198 void _sendEvent(CollectionEventArgs::eAction action, void* object, Integer position)
199 {
200 CollectionEventArgs args(action, object, position);
201 m_collection_handlers.notify(args);
202 }
203};
204
205/*---------------------------------------------------------------------------*/
206/*---------------------------------------------------------------------------*/
207
208/*---------------------------------------------------------------------------*/
209/*---------------------------------------------------------------------------*/
214template <class T>
216: public CollectionImplBase
217{
218 public:
219
220 typedef const T& ObjectRef;
221 typedef T* ObjectIterator;
222 typedef const T* ConstObjectIterator;
223
224 public:
225
228 {}
229 virtual ~CollectionImplT() {}
230
231 public:
232
233 virtual ObjectIterator begin() = 0;
234 virtual const T* begin() const = 0;
235 virtual ObjectIterator end() = 0;
236 virtual const T* end() const = 0;
237
238 virtual T* begin2() const = 0;
239 virtual T* end2() const = 0;
240
241 public:
242
244 template <class Function> Function
246 {
247 std::for_each(begin(), end(), f);
248 return f;
249 }
250
251 public:
252
253 virtual void add(ObjectRef value) = 0;
254 virtual bool remove(ObjectRef value) = 0;
255 virtual void removeAt(Integer index) = 0;
256 virtual bool contains(ObjectRef value) const = 0;
257};
258
259/*---------------------------------------------------------------------------*/
260/*---------------------------------------------------------------------------*/
261
262} // namespace Arcane
263
264/*---------------------------------------------------------------------------*/
265/*---------------------------------------------------------------------------*/
266
267#endif
Fichier contenant les mécanismes de gestion des évènements.
Arguments d'un évènement envoyé par une collection.
classe de base d'implémentation d'une collection.
virtual EnumeratorImplBase * enumerator() const =0
Retourne un énumérateur générique sur la collection.
ptrdiff_t difference_type
Type d'une distance entre itérateur éléments du tableau.
virtual void onRemove()
Evènement envoyé avant de supprimer un élément.
Integer count() const
Retourne le nombre d'éléments de la collection.
virtual void onInsert()
Evènement envoyé avant d'insérer un élément.
Integer size_type
Type indexant le tableau.
virtual void clear()=0
Supprime tous les éléments de la collection.
virtual void onClear()
Evènement envoyé avant de supprimer tous les éléments.
CollectionImplBase(const CollectionImplBase &from)=delete
Opérateur de recopie. les handlers d'évènements ne sont pas recopiés.
virtual void onRemoveComplete(void *object, Integer position)
Evènement envoyé après supression d'un élément.
CollectionImplBase()=default
Construit une collection vide.
virtual void onInsertComplete(void *object, Integer position)
Evènement envoyé après insertion d'un élément.
CollectionImplBase(Integer acount)
Construit une collection avec acount éléments.
virtual void onClearComplete()
Evènement envoyé lorsque tous les éléments ont été supprimés.
classe de base d'implémentation d'une collection typée.
Function each(Function f)
Applique le fonctor f à tous les éléments de la collection.
EventObservable< const CollectionEventArgs & > CollectionChangeEventHandler
Evènements envoyés par une Collection.
Interface d'un énumérateur.
Definition Enumerator.h:42
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Classe de base d'un objet avec compteur de référence.
Definition ObjectImpl.h:36
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-