12#ifndef ARCCORE_BASE_REFDECLARATIONS_H
13#define ARCCORE_BASE_REFDECLARATIONS_H
63constexpr int REF_TAG_SHARED_PTR = 0;
64constexpr int REF_TAG_REFERENCE_COUNTER = 1;
71template<
typename InstanceType,
class T>
74 static constexpr int TagId = REF_TAG_SHARED_PTR;
83template<
typename InstanceType>
84struct RefTraits<InstanceType,std::enable_if_t<std::is_same_v<typename InstanceType::ReferenceCounterTagType,ReferenceCounterTag>>>
86 static constexpr int TagId = REF_TAG_REFERENCE_COUNTER;
96template<
typename InstanceType,
int TagType>
105template <
typename T,
typename =
int>
117template <
typename T,
typename =
int>
143 static void addReference(T* t)
146 t->_internalAddReference();
150 static void removeReference(T* t)
153 bool need_destroy = t->_internalRemoveReference();
158 t->removeReference();
169 static ARCCORE_EXPORT
void addReference(T* t);
170 static ARCCORE_EXPORT
void removeReference(T* t);
198#define ARCCORE_DECLARE_REFERENCE_COUNTED_INCLASS_METHODS() \
200 template<typename T> friend class Arccore::ExternalReferenceCounterAccessor; \
201 template<typename T> friend class Arccore::ReferenceCounterAccessor;\
203 using ReferenceCounterTagType = Arccore::ReferenceCounterTag ; \
204 virtual ::Arccore::ReferenceCounterImpl* _internalReferenceCounter() =0; \
205 virtual void _internalAddReference() =0;\
206 [[nodiscard]] virtual bool _internalRemoveReference() =0
230#define ARCCORE_DECLARE_REFERENCE_COUNTED_CLASS(class_name) \
233struct RefTraits<class_name> \
235 static constexpr int TagId = Arccore::REF_TAG_REFERENCE_COUNTER;\
238class ReferenceCounterAccessor<class_name>\
239: public ExternalReferenceCounterAccessor<class_name>\
Déclarations des types de la composante 'base' de Arccore.
Accesseur des méthodes de gestion de compteurs de référence.
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()