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)
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.
Référence à une instance.
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()