Arcane  v4.1.0.0
Documentation utilisateur
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/*---------------------------------------------------------------------------*/
28/*!
29 * \brief Encapsulation d'un pointeur avec compteur de référence.
30 *
31 * Cette classe renferme un pointeur d'un type qui implémente les méthodes
32 * de la classe abstraite ISharedReference (le paramètre template n'a pas
33 * besoin de dériver de cette classe) et incrémente (_addRef()) ou décrémente
34 * (_removeRef()) le compteur de référence de l'élément pointé lors des
35 * affectations succéssives. Cette classe n'effectue aucune action basée
36 * sur la valeur de compteur de référence; la destruction éventuelle de l'objet
37 * lorsque le compteur de référence arrive à zéro est gérée par l'objet lui même.
38 */
39template <class T>
41: public PtrT<T>
42{
43 public:
44
45 //! Type de la classe de base
47
49
50 public:
51
52 //! Construit une instance sans référence
53 AutoRefT() = default;
54 //! Construit une instance référant \a t
55 explicit AutoRefT(T* t)
56 : BaseClass()
57 {
58 _changeValue(t);
59 }
60 //! Construit une référence référant \a from
61 AutoRefT(const AutoRefT<T>& from)
62 : BaseClass()
63 {
64 _changeValue(from.m_value);
65 }
66
67 //! Opérateur de copie
69 {
70 _changeValue(from.m_value);
71 return (*this);
72 }
73
74 //! Affecte à l'instance la value \a new_value
75 AutoRefT<T>& operator=(T* new_value)
76 {
77 _changeValue(new_value);
78 return (*this);
79 }
80
81 //! Destructeur. Décrément le compteur de référence de l'objet pointé
82 ~AutoRefT() { _removeRef(); }
83
84 private:
85
86 //! Ajoute une référence à l'objet encapsulé si non nul
87 void _addRef()
88 {
89 if (m_value)
90 m_value->addRef();
91 }
92 //! Supprimer une référence à l'objet encapsulé si non nul
93 void _removeRef()
94 {
95 if (m_value)
96 m_value->removeRef();
97 }
98 //! Change l'objet référencé en \a new_value
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
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
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
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 -*-