Arcane  v3.14.10.0
Documentation développeur
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/*---------------------------------------------------------------------------*/
42template<class T>
44{
45 protected:
46
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
63 const CheckedPointer<T>& operator=(T* new_value)
64 {
65 m_value = new_value; return (*this);
66 }
67
70
72 template <typename T2>
74
75 public:
76
78 CheckedPointer() : m_value(nullptr) {}
79
81 explicit CheckedPointer(T* t) : m_value(t) {}
82
83 public:
84 explicit operator bool() const { return get()!=nullptr; }
85 public:
86
88 inline T* operator->() const
89 {
90#ifdef ARCCORE_CHECK
91 if (!m_value)
92 arccoreNullPointerError();
93#endif
94 return m_value;
95 }
96
98 inline T& operator*() const
99 {
100#ifdef ARCCORE_CHECK
101 if (!m_value)
102 arccoreNullPointerError();
103#endif
104 return *m_value;
105 }
106
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
130 template<typename T2> friend bool
132 {
133 return v1.get() == v2.get();
134 }
135
142 template<typename T2> friend bool
144 {
145 return v1.get() != v2.get();
146 }
147
148 protected:
149
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