Arcane  v4.1.0.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-2025 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-2025 */
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#include "arccore/base/AutoRef2.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
39template <class T>
41: public PtrT<T>
42{
43 public:
44
47
49
50 public:
51
53 AutoRefT() = default;
55 explicit AutoRefT(T* t)
56 : BaseClass()
57 {
58 _changeValue(t);
59 }
60
61 AutoRefT(const AutoRefT<T>& from)
62 : BaseClass()
63 {
65 }
66
69 {
71 return (*this);
72 }
73
75 AutoRefT<T>& operator=(T* new_value)
76 {
77 _changeValue(new_value);
78 return (*this);
79 }
80
83
84 private:
85
87 void _addRef()
88 {
89 if (m_value)
90 m_value->addRef();
91 }
92
94 {
95 if (m_value)
96 m_value->removeRef();
97 }
98
99 void _changeValue(T* new_value)
100 {
101 if (m_value == new_value)
102 return;
103 _removeRef();
104 m_value = new_value;
105 _addRef();
106 }
107};
108
109/*---------------------------------------------------------------------------*/
110/*---------------------------------------------------------------------------*/
111
112} // namespace Arcane
113
114/*---------------------------------------------------------------------------*/
115/*---------------------------------------------------------------------------*/
116
117#endif
T * m_value
Pointeur sur l'objet référencé
Definition Ptr.h:127
AutoRefT()=default
Construit une instance sans référence.
PtrT< T > BaseClass
Type de la classe de base.
Definition AutoRef.h:46
~AutoRefT()
Destructeur. Décrément le compteur de référence de l'objet pointé
Definition AutoRef.h:82
void _addRef()
Ajoute une référence à l'objet encapsulé si non nul.
Definition AutoRef.h:87
AutoRefT(T *t)
Construit une instance référant t.
Definition AutoRef.h:55
AutoRefT(const AutoRefT< T > &from)
Construit une référence référant from.
Definition AutoRef.h:61
void _changeValue(T *new_value)
Change l'objet référencé en new_value.
Definition AutoRef.h:99
AutoRefT< T > & operator=(T *new_value)
Affecte à l'instance la value new_value.
Definition AutoRef.h:75
AutoRefT< T > & operator=(const AutoRefT< T > &from)
Opérateur de copie.
Definition AutoRef.h:68
void _removeRef()
Supprimer une référence à l'objet encapsulé si non nul.
Definition AutoRef.h:93
T * m_value
Pointeur sur l'objet référencé
Definition Ptr.h:127
PtrT(const PtrT< T > &from)
Construit une référence référant from.
Definition Ptr.h:70
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-