Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
Enumerator.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/* Enumerator.h (C) 2000-2022 */
9/* */
10/* Enumérateurs. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ENUMERATOR_H
13#define ARCANE_ENUMERATOR_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/ObjectImpl.h"
18#include "arcane/utils/AutoRef.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
40class ARCANE_UTILS_EXPORT EnumeratorImplBase
41: public ObjectImpl
42{
43 public:
44
50 virtual void reset() = 0;
59 virtual bool moveNext() = 0;
61 virtual void* current() = 0;
63 virtual const void* current() const = 0;
64
65 private:
66};
67
68/*---------------------------------------------------------------------------*/
69/*---------------------------------------------------------------------------*/
86class ARCANE_UTILS_EXPORT EnumeratorBase
87{
88 public:
89
91 EnumeratorBase() = default;
92
100 : m_impl(impl)
101 {}
102
103 public:
104
105 void reset() { m_impl->reset(); }
106 bool moveNext() { return m_impl->moveNext(); }
107 void* current() { return m_impl->current(); }
108 const void* current() const { return m_impl->current(); }
109
110 public:
111
113 bool operator++() { return moveNext(); }
114
115 protected:
116
117 EnumeratorImplBase* _impl() { return m_impl.get(); }
118 const EnumeratorImplBase* _impl() const { return m_impl.get(); }
119
120 private:
121
123};
124
125/*---------------------------------------------------------------------------*/
126/*---------------------------------------------------------------------------*/
133template <class T>
135: public EnumeratorBase
136{
137 public:
138
139 EnumeratorT() = default;
141 explicit EnumeratorT(EnumeratorImplBase* impl)
142 : EnumeratorBase(impl)
143 {}
144
145 public:
146
147 const T& current() const { return *_currentPtr(); }
148 T& current() { return *_currentPtr(); }
149
150 public:
151
152 const T& operator*() const { return current(); }
153 T& operator*() { return current(); }
154 const T* operator->() const { return _currentPtr(); }
155 T* operator->() { return _currentPtr(); }
156
157 private:
158
159 T* _currentPtr()
160 {
161 return reinterpret_cast<T*>(_impl()->current());
162 }
163 const T* _currentPtr() const
164 {
165 return reinterpret_cast<const T*>(_impl()->current());
166 }
167};
168
169/*---------------------------------------------------------------------------*/
170/*---------------------------------------------------------------------------*/
171
172template <class T> inline EnumeratorT<T>::
174: EnumeratorBase(collection.enumerator())
175{
176}
177
178/*---------------------------------------------------------------------------*/
179/*---------------------------------------------------------------------------*/
180
181} // namespace Arcane
182
183/*---------------------------------------------------------------------------*/
184/*---------------------------------------------------------------------------*/
185
186#endif
Enumérateur générique.
Definition Enumerator.h:87
EnumeratorBase()=default
Contruit un énumérateur nul.
AutoRefT< EnumeratorImplBase > m_impl
Implémentation.
Definition Enumerator.h:122
bool operator++()
Avance l'énumérateur sur l'élément suivant.
Definition Enumerator.h:113
EnumeratorBase(EnumeratorImplBase *impl)
Contruit un énumérateur associé à l'implémentation impl.
Definition Enumerator.h:99
Interface d'un énumérateur.
Definition Enumerator.h:42
virtual const void * current() const =0
Objet courant de l'énumérateur.
virtual void * current()=0
Objet courant de l'énumérateur.
virtual bool moveNext()=0
Avance l'énumérateur sur l'élément suivant de la collection.
virtual void reset()=0
Remet à zéro l'énumérateur.
Enumérateur typé.
Definition Enumerator.h:136
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 -*-