Arcane  v4.1.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
AutoRef2.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/* AutoRef2.h (C) 2000-2025 */
9/* */
10/* Encapsulation d'un pointeur avec compteur de référence. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCCORE_BASE_AUTOREF2_H
13#define ARCCORE_BASE_AUTOREF2_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arccore/base/ArccoreGlobal.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
38template <class T>
40{
41 public:
42
43 using ThatClass = AutoRef2<T>;
44
45 public:
46
48 AutoRef2() = default;
50 explicit AutoRef2(T* t)
51 {
52 _changeValue(t);
53 }
54
55 AutoRef2(const ThatClass& from)
56 {
58 }
59
60 AutoRef2(ThatClass&& from) noexcept
61 : m_value(from.m_value)
62 {
63 from.m_value = nullptr;
64 }
65
67 ThatClass& operator=(const ThatClass& from)
68 {
70 return (*this);
71 }
72
73 ThatClass& operator=(ThatClass&& from) noexcept
74 {
75 _removeRef();
76 m_value = from.m_value;
77 from.m_value = nullptr;
78 return (*this);
79 }
80
82 ThatClass& operator=(T* new_value)
83 {
84 _changeValue(new_value);
85 return (*this);
86 }
87
90
92 T* operator->() const
93 {
94 ARCCORE_CHECK_PTR(m_value);
95 return m_value;
96 }
97
99 inline T& operator*() const
100 {
101 ARCCORE_CHECK_PTR(m_value);
102 return *m_value;
103 }
104
106 T* get() const { return m_value; }
107
108 bool isNull() const { return !m_value; }
109 operator bool() const { return m_value; }
110
111 friend bool operator==(const ThatClass& a, const ThatClass& b)
112 {
113 return a.get() == b.get();
114 }
115 friend bool operator!=(const ThatClass& a, const ThatClass& b)
116 {
117 return a.get() != b.get();
118 }
119
120 private:
121
123 void _addRef()
124 {
125 if (m_value)
126 m_value->addRef();
127 }
128
130 {
131 if (m_value)
132 m_value->removeRef();
133 }
134
135 void _changeValue(T* new_value)
136 {
137 if (m_value == new_value)
138 return;
139 _removeRef();
140 m_value = new_value;
141 _addRef();
142 }
143
144 private:
145
146 T* m_value = nullptr;
147};
148
149/*---------------------------------------------------------------------------*/
150/*---------------------------------------------------------------------------*/
151
152} // namespace Arcane
153
154/*---------------------------------------------------------------------------*/
155/*---------------------------------------------------------------------------*/
156
157#endif
ThatClass & operator=(ThatClass &&from) noexcept
Opérateur de déplacement.
Definition AutoRef2.h:73
AutoRef2(const ThatClass &from)
Construit une référence référant from.
Definition AutoRef2.h:55
AutoRef2()=default
Construit une instance sans référence.
void _removeRef()
Supprimer une référence à l'objet encapsulé si non nul.
Definition AutoRef2.h:129
void _addRef()
Ajoute une référence à l'objet encapsulé si non nul.
Definition AutoRef2.h:123
AutoRef2(ThatClass &&from) noexcept
Construit une référence référant from.
Definition AutoRef2.h:60
void _changeValue(T *new_value)
Change l'objet référencé en new_value.
Definition AutoRef2.h:135
~AutoRef2()
Destructeur. Décrément le compteur de référence de l'objet pointé
Definition AutoRef2.h:89
T * m_value
Pointeur sur l'objet référencé
Definition AutoRef2.h:146
ThatClass & operator=(const ThatClass &from)
Opérateur de copie.
Definition AutoRef2.h:67
T * get() const
Retourne l'objet référé par l'instance.
Definition AutoRef2.h:106
T & operator*() const
Retourne l'objet référé par l'instance.
Definition AutoRef2.h:99
ThatClass & operator=(T *new_value)
Affecte à l'instance la value new_value.
Definition AutoRef2.h:82
T * operator->() const
Retourne l'objet référé par l'instance.
Definition AutoRef2.h:92
AutoRef2(T *t)
Construit une instance référant t.
Definition AutoRef2.h:50
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-