12#ifndef ARCANE_UTILS_GENERICREGISTERER_H
13#define ARCANE_UTILS_GENERICREGISTERER_H
29 [[noreturn]]
void doErrorConflict();
30 [[noreturn]]
void doErrorNonZeroCount();
51template <
typename Type>
52class GenericRegisterer
59 friend GenericRegisterer<Type>;
63 Type* firstRegisterer()
const {
return m_first_registerer; }
64 Int32 nbRegisterer()
const {
return m_nb_registerer; }
68 Type* m_first_registerer =
nullptr;
69 Int32 m_nb_registerer = 0;
74 using InstanceType = Type;
78 GenericRegisterer() noexcept
102 return Type::registererInfo().nbRegisterer();
107 InstanceType* m_previous =
nullptr;
108 InstanceType* m_next =
nullptr;
112 void _init() noexcept
114 Info& reg_info = Type::registererInfo();
115 Type* current_instance =
static_cast<Type*
>(
this);
120 reg_info.m_first_registerer = current_instance;
121 m_previous =
nullptr;
127 reg_info.m_first_registerer = current_instance;
129 next->m_previous = current_instance;
131 ++reg_info.m_nb_registerer;
136 while (p && count > 0) {
137 p = p->nextRegisterer();
143 else if (count > 0) {
144 doErrorNonZeroCount();
Fichier de configuration d'Arcane.
static InstanceType * firstRegisterer()
Accès au premier élément de la chaine d'enregistreur.
static Integer nbRegisterer()
Nombre d'enregisteur de service dans la chaine.
InstanceType * nextRegisterer() const
Instance suivante (nullptr si la dernière)
InstanceType * previousRegisterer() const
Instance précédente (nullptr si la première)
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
std::int32_t Int32
Type entier signé sur 32 bits.