Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
CheckedPointer.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* CheckedPointer.h (C) 2000-2023 */
9/* */
10/* Classes encapsulant un pointeur permettant de vérifier l'utilisation. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCCORE_BASE_CHECKEDPOINTER_H
13#define ARCCORE_BASE_CHECKEDPOINTER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arccore/base/ArccoreGlobal.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arccore
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27/*!
28 * \brief Encapsulation d'un pointeur.
29 *
30 * Cette classe ne fait rien de particulier si ce n'est encapsulé un
31 * pointeur d'un type quelconque. Elle sert de classe de base à d'autres
32 * classes qui fournissent des fonctionnalités plus évoluées comme AutoRefT.
33 *
34 * Afin d'éviter des copies malencontreuses, le constructeur de copie et
35 * les opérateurs de copie sont protégés.
36 *
37 * En mode débug, vérifie qu'on accède pas à un pointeur nul.
38 *
39 * Le paramètre template n'a pas besoin d'être défini. Cette classe peut donc
40 * être instanciée pour un type opaque.
41 */
42template<class T>
44{
45 protected:
46
47 //! Opérateur de copie
49 {
50 m_value = from.m_value;
51 return (*this);
52 }
53
54 template <typename T2>
56 {
57 m_value = from.get();
58 return (*this);
59 }
60
61
62 //! Affecte à l'instance la value \a new_value
63 const CheckedPointer<T>& operator=(T* new_value)
64 {
65 m_value = new_value; return (*this);
66 }
67
68 //! Construit une référence référant \a from
70
71 //! Construit une référence référant \a from
72 template <typename T2>
74
75 public:
76
77 //! Construit une instance sans référence
78 CheckedPointer() : m_value(nullptr) {}
79
80 //! Construit une instance référant \a t
81 explicit CheckedPointer(T* t) : m_value(t) {}
82
83 public:
84 explicit operator bool() const { return get()!=nullptr; }
85 public:
86
87 //! Retourne l'objet référé par l'instance
88 inline T* operator->() const
89 {
90#ifdef ARCCORE_CHECK
91 if (!m_value)
93#endif
94 return m_value;
95 }
96
97 //! Retourne l'objet référé par l'instance
98 inline T& operator*() const
99 {
100#ifdef ARCCORE_CHECK
101 if (!m_value)
103#endif
104 return *m_value;
105 }
106
107 /*!
108 * \brief Retourne l'objet référé par l'instance
109 *
110 * \warning En général, il faut être prudent lorsqu'on utilise cette
111 * fonction et ne pas conservé le pointeur retourné.
112 */
113 inline T* get() const
114 {
115 return m_value;
116 }
117
118 inline bool isNull() const
119 {
120 return (!m_value);
121 }
122
123
124 /*!
125 * \brief Compare les objets référencés par \a v1 et \a v2
126 * La comparaison se fait pointeur par pointeur.
127 * \retval true s'ils sont égaux
128 * \retval false sinon
129 */
130 template<typename T2> friend bool
132 {
133 return v1.get() == v2.get();
134 }
135
136 /*!
137 * \brief Compare les objets référencés par \a v1 et \a v2
138 * La comparaison se fait pointeur par pointeur.
139 * \retval false s'ils sont égaux
140 * \retval true sinon
141 */
142 template<typename T2> friend bool
144 {
145 return v1.get() != v2.get();
146 }
147
148 protected:
149
150 T* m_value; //!< Pointeur sur l'objet référencé
151};
152
153/*---------------------------------------------------------------------------*/
154/*---------------------------------------------------------------------------*/
155
156} // End namespace Arccore
157
158/*---------------------------------------------------------------------------*/
159/*---------------------------------------------------------------------------*/
160
161#endif
162
Encapsulation d'un pointeur.
const CheckedPointer< T > & operator=(T *new_value)
Affecte à l'instance la value new_value.
T * m_value
Pointeur sur l'objet référencé
CheckedPointer()
Construit une instance sans référence.
T & operator*() const
Retourne l'objet référé par l'instance.
const CheckedPointer< T > & operator=(const CheckedPointer< T > &from)
Opérateur de copie.
T * get() const
Retourne l'objet référé par l'instance.
friend bool operator==(const CheckedPointer< T > &v1, const CheckedPointer< T2 > &v2)
Compare les objets référencés par v1 et v2 La comparaison se fait pointeur par pointeur.
friend bool operator!=(const CheckedPointer< T > &v1, const CheckedPointer< T2 > &v2)
Compare les objets référencés par v1 et v2 La comparaison se fait pointeur par pointeur.
CheckedPointer(const CheckedPointer< T2 > &from)
Construit une référence référant from.
CheckedPointer(T *t)
Construit une instance référant t.
T * operator->() const
Retourne l'objet référé par l'instance.
CheckedPointer(const CheckedPointer< T > &from)
Construit une référence référant from.
Espace de nom de Arccore.
Definition ArcaneTypes.h:24
ARCCORE_BASE_EXPORT void arccoreNullPointerError()
Signalue l'utilisation d'un pointeur nul.