12#ifndef ARCCORE_BASE_REFDECLARATIONS_H
13#define ARCCORE_BASE_REFDECLARATIONS_H
46 static ARCCORE_EXPORT
void addReference(T* t);
47 static ARCCORE_EXPORT
void removeReference(T* t);
82constexpr int REF_TAG_SHARED_PTR = 0;
83constexpr int REF_TAG_REFERENCE_COUNTER = 1;
90template<
typename InstanceType,
class T>
93 static constexpr int TagId = REF_TAG_SHARED_PTR;
102template<
typename InstanceType>
103struct RefTraits<InstanceType,std::enable_if_t<std::is_same_v<typename InstanceType::ReferenceCounterTagType,ReferenceCounterTag>>>
105 static constexpr int TagId = REF_TAG_REFERENCE_COUNTER;
115template<
typename InstanceType,
int TagType>
124template <
typename T,
typename =
int>
136template <
typename T,
typename =
int>
162 static void addReference(T* t)
165 t->_internalAddReference();
169 static void removeReference(T* t)
172 bool need_destroy = t->_internalRemoveReference();
177 t->removeReference();
206#define ARCCORE_DECLARE_REFERENCE_COUNTED_INCLASS_METHODS() \
209 template <typename T> friend class ::Arccore::ExternalReferenceCounterAccessor; \
210 template <typename T> friend class Arcane::ReferenceCounterAccessor; \
214 using ReferenceCounterTagType = ::Arcane::ReferenceCounterTag; \
215 virtual ::Arcane::ReferenceCounterImpl* _internalReferenceCounter() = 0; \
216 virtual void _internalAddReference() =0;\
217 [[nodiscard]] virtual bool _internalRemoveReference() =0
241#define ARCCORE_DECLARE_REFERENCE_COUNTED_CLASS(class_name) \
245 struct RefTraits<class_name> \
247 static constexpr int TagId = ::Arcane::REF_TAG_REFERENCE_COUNTER; \
250class ReferenceCounterAccessor<class_name>\
251: public ExternalReferenceCounterAccessor<class_name>\
265using Arcane::ReferenceCounterTag;
Déclarations des types de la composante 'base' de Arccore.
Accesseur des méthodes de gestion de compteurs de référence.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Espace de nom de Arccore.
Caractéristiques pour gérer les compteurs de référence.
Structure servant à tagger les interfaces/classes qui utilisent un compteur de référence interne.
Classe template pour vérifier si T a la méthode _internalAddReference()
Classe template pour vérifier si T a la méthode _internalRemoveReference()