Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
AutoRef.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 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/* AutoRef.h (C) 2000-2024 */
9/* */
10/* Encapsulation d'un pointeur avec compteur de référence. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_AUTOREF_H
13#define ARCANE_UTILS_AUTOREF_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Ptr.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
38template <class T>
40: public PtrT<T>
41{
42 public:
43
46
48
49 public:
50
52 AutoRefT() = default;
54 explicit AutoRefT(T* t)
55 : BaseClass()
56 {
58 }
61 : BaseClass()
62 {
63 _changeValue(from.m_value);
64 }
65
68 {
69 _changeValue(from.m_value);
70 return (*this);
71 }
72
75 {
77 return (*this);
78 }
79
82
83 private:
84
86 void _addRef()
87 {
88 if (m_value)
89 m_value->addRef();
90 }
93 {
94 if (m_value)
95 m_value->removeRef();
96 }
99 {
100 if (m_value == new_value)
101 return;
102 _removeRef();
104 _addRef();
105 }
106};
107
108/*---------------------------------------------------------------------------*/
109/*---------------------------------------------------------------------------*/
121template <class T>
123{
124 public:
125
126 using ThatClass = AutoRef2<T>;
127
128 public:
129
131 AutoRef2() = default;
133 explicit AutoRef2(T* t)
134 {
136 }
139 {
140 _changeValue(from.m_value);
141 }
144 : m_value(from.m_value)
145 {
146 from.m_value = nullptr;
147 }
148
151 {
152 _changeValue(from.m_value);
153 return (*this);
154 }
157 {
158 _removeRef();
159 m_value = from.m_value;
160 from.m_value = nullptr;
161 return (*this);
162 }
163
166 {
168 return (*this);
169 }
170
173
175 T* operator->() const
176 {
177 ARCANE_CHECK_PTR(m_value);
178 return m_value;
179 }
180
182 inline T& operator*() const
183 {
184 ARCANE_CHECK_PTR(m_value);
185 return *m_value;
186 }
187
189 T* get() const { return m_value; }
190
191 bool isNull() const { return !m_value; }
192 operator bool() const { return m_value; }
193
194 friend bool operator==(const ThatClass& a, const ThatClass& b)
195 {
196 return a.get() == b.get();
197 }
198 friend bool operator!=(const ThatClass& a, const ThatClass& b)
199 {
200 return a.get() != b.get();
201 }
202
203 private:
204
206 void _addRef()
207 {
208 if (m_value)
209 m_value->addRef();
210 }
213 {
214 if (m_value)
215 m_value->removeRef();
216 }
219 {
220 if (m_value == new_value)
221 return;
222 _removeRef();
224 _addRef();
225 }
226
227 private:
228
229 T* m_value = nullptr;
230};
231
232/*---------------------------------------------------------------------------*/
233/*---------------------------------------------------------------------------*/
234
235} // namespace Arcane
236
237/*---------------------------------------------------------------------------*/
238/*---------------------------------------------------------------------------*/
239
240#endif
Encapsulation d'un pointeur avec compteur de référence.
Definition AutoRef.h:123
ThatClass & operator=(ThatClass &&from) noexcept
Opérateur de déplacement.
Definition AutoRef.h:156
AutoRef2(const ThatClass &from)
Construit une référence référant from.
Definition AutoRef.h:138
AutoRef2()=default
Construit une instance sans référence.
void _removeRef()
Supprimer une référence à l'objet encapsulé si non nul.
Definition AutoRef.h:212
void _addRef()
Ajoute une référence à l'objet encapsulé si non nul.
Definition AutoRef.h:206
AutoRef2(ThatClass &&from) noexcept
Construit une référence référant from.
Definition AutoRef.h:143
void _changeValue(T *new_value)
Change l'objet référencé en new_value.
Definition AutoRef.h:218
~AutoRef2()
Destructeur. Décrément le compteur de référence de l'objet pointé
Definition AutoRef.h:172
T * m_value
Pointeur sur l'objet référencé
Definition AutoRef.h:229
ThatClass & operator=(const ThatClass &from)
Opérateur de copie.
Definition AutoRef.h:150
T * get() const
Retourne l'objet référé par l'instance.
Definition AutoRef.h:189
T & operator*() const
Retourne l'objet référé par l'instance.
Definition AutoRef.h:182
ThatClass & operator=(T *new_value)
Affecte à l'instance la value new_value.
Definition AutoRef.h:165
T * operator->() const
Retourne l'objet référé par l'instance.
Definition AutoRef.h:175
AutoRef2(T *t)
Construit une instance référant t.
Definition AutoRef.h:133
Encapsulation d'un pointeur avec compteur de référence.
Definition AutoRef.h:41
T * m_value
Pointeur sur l'objet référencé
Definition Ptr.h:127
AutoRefT()=default
Construit une instance sans référence.
~AutoRefT()
Destructeur. Décrément le compteur de référence de l'objet pointé
Definition AutoRef.h:81
void _addRef()
Ajoute une référence à l'objet encapsulé si non nul.
Definition AutoRef.h:86
AutoRefT(T *t)
Construit une instance référant t.
Definition AutoRef.h:54
AutoRefT(const AutoRefT< T > &from)
Construit une référence référant from.
Definition AutoRef.h:60
void _changeValue(T *new_value)
Change l'objet référencé en new_value.
Definition AutoRef.h:98
AutoRefT< T > & operator=(T *new_value)
Affecte à l'instance la value new_value.
Definition AutoRef.h:74
AutoRefT< T > & operator=(const AutoRefT< T > &from)
Opérateur de copie.
Definition AutoRef.h:67
void _removeRef()
Supprimer une référence à l'objet encapsulé si non nul.
Definition AutoRef.h:92
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Encapsulation d'un pointeur.
Definition Ptr.h:45
T * m_value
Pointeur sur l'objet référencé
Definition Ptr.h:127
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-