Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ReferenceCounter.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 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/* ReferenceCounter.h (C) 2000-2023 */
9/* */
10/* Encapsulation d'un pointeur avec compteur de référence. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCCORE_BASE_REFERENCECOUNTER_H
13#define ARCCORE_BASE_REFERENCECOUNTER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arccore/base/CheckedPointer.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arccore
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
42template<class T>
44: public CheckedPointer<T>
45{
46 public:
47
50
52
53 public:
54
58 explicit ReferenceCounter(T* t) : BaseClass(nullptr) { _changeValue(t); }
61 : BaseClass(nullptr) { _changeValue(from.m_value); }
62
65 {
67 return (*this);
68 }
69
72 {
73 _changeValue(new_value);
74 return (*this);
75 }
76
79
80 private:
81
89 void _changeValue(T* new_value)
90 {
91 if (m_value==new_value)
92 return;
93 // Toujours ajouter avant pour le cas où la nouvelle valeur
94 // et l'ancienne seraient issues de la même instance.
95 if (new_value)
97 _removeRef();
98 m_value = new_value;
99 }
100};
101
102/*---------------------------------------------------------------------------*/
103/*---------------------------------------------------------------------------*/
104
105} // End namespace Arccore
106
107/*---------------------------------------------------------------------------*/
108/*---------------------------------------------------------------------------*/
109
110#endif
111
Encapsulation d'un pointeur.
T * m_value
Pointeur sur l'objet référencé
Accesseur des méthodes de gestion de compteurs de référence.
Encapsulation d'un pointeur avec compteur de référence.
CheckedPointer< T > BaseClass
Type de la classe de base.
void _removeRef()
Supprimer une référence à l'objet encapsulé si non nul.
~ReferenceCounter()
Destructeur. Décrément le compteur de référence de l'objet pointé
T * m_value
Pointeur sur l'objet référencé
ReferenceCounter()
Construit une instance sans référence.
void _changeValue(T *new_value)
Change l'objet référencé en new_value.
ReferenceCounter(const ReferenceCounter< T > &from)
Construit une référence référant from.
ReferenceCounter< T > & operator=(const ReferenceCounter< T > &from)
Opérateur de copie.
ReferenceCounter(T *t)
Construit une instance référant t.
ReferenceCounter< T > & operator=(T *new_value)
Affecte à l'instance la value new_value.
Espace de nom de Arccore.
Definition ArcaneTypes.h:24