Arcane
v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
RefBase.h
1
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2
//-----------------------------------------------------------------------------
3
// Copyright 2000-2024 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
/* RefBase.h (C) 2000-2024 */
9
/* */
10
/* Classe de base de la gestion des références sur une instance. */
11
/*---------------------------------------------------------------------------*/
12
#ifndef ARCCORE_BASE_REFBASE_H
13
#define ARCCORE_BASE_REFBASE_H
14
/*---------------------------------------------------------------------------*/
15
/*---------------------------------------------------------------------------*/
16
17
#include "arccore/base/ExternalRef.h"
18
#include "
arccore/base/RefDeclarations.h
"
19
20
/*---------------------------------------------------------------------------*/
21
/*---------------------------------------------------------------------------*/
22
23
namespace
Arccore
24
{
25
26
/*---------------------------------------------------------------------------*/
27
/*---------------------------------------------------------------------------*/
28
/*!
29
* \brief Classe de base de gestion d'une référence.
30
*/
31
class
ARCCORE_BASE_EXPORT
RefBase
32
{
33
friend
class
ReferenceCounterImpl
;
34
template
<
typename
InstanceType>
friend
class
impl::ReferenceCounterWrapper
;
35
36
protected
:
37
38
class
ARCCORE_BASE_EXPORT
BasicDeleterBase
39
{
40
};
41
42
class
ARCCORE_BASE_EXPORT
DeleterBase
43
{
44
using
ExternalRef
=
Internal::ExternalRef
;
45
friend
class
ReferenceCounterImpl
;
46
47
public
:
48
49
bool
hasExternal()
const
{
return
m_handle.isValid(); }
50
void
setNoDestroy(
bool
x) { m_no_destroy = x; }
51
52
protected
:
53
54
bool
_destroyHandle(
const
void
* instance,
ExternalRef
& handle);
55
bool
_destroyHandle(
void
* instance,
ExternalRef
& handle);
56
57
private
:
58
59
bool
_destroyHandleTrue(
const
void
* instance,
ExternalRef
& handle);
60
61
protected
:
62
63
DeleterBase
() =
default
;
64
DeleterBase
(
ExternalRef
h)
65
: m_handle(std::move(h))
66
{}
67
DeleterBase
(
ExternalRef
h,
bool
no_destroy)
68
: m_handle(std::move(h))
69
, m_no_destroy(no_destroy)
70
{}
71
72
protected
:
73
74
//! Handle externe qui se charge de la destruction de l'instance
75
Internal::ExternalRef
m_handle
;
76
/*!
77
* \brief Indique si on doit appeler le destructeur de l'instance
78
* lorsqu'il n'y a plus de références dessus.
79
*/
80
bool
m_no_destroy =
false
;
81
};
82
};
83
84
/*---------------------------------------------------------------------------*/
85
/*---------------------------------------------------------------------------*/
86
87
}
// namespace Arccore
88
89
/*---------------------------------------------------------------------------*/
90
/*---------------------------------------------------------------------------*/
91
92
#endif
RefDeclarations.h
Arccore::Internal::ExternalRef
Definition
arccore/src/base/arccore/base/ExternalRef.h:45
Arccore::RefBase::BasicDeleterBase
Definition
RefBase.h:39
Arccore::RefBase::DeleterBase
Definition
RefBase.h:43
Arccore::RefBase::DeleterBase::m_handle
Internal::ExternalRef m_handle
Handle externe qui se charge de la destruction de l'instance.
Definition
RefBase.h:75
Arccore::RefBase
Classe de base de gestion d'une référence.
Definition
RefBase.h:32
Arccore::ReferenceCounterImpl
Implémentation thread-safe d'un compteur de référence.
Definition
ReferenceCounterImpl.h:80
Arccore::impl::ReferenceCounterWrapper
Wrapper autour d'une classe gérant son propre compteur de référence.
Definition
arccore/src/base/arccore/base/Ref.h:33
Arccore
Espace de nom de Arccore.
Definition
ArcaneTypes.h:24
arccore
base
RefBase.h
Généré le Lundi 18 Novembre 2024 02:56:56 pour Arcane par
1.9.8