Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
VariableFactoryRegisterer.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* VariableFactoryRegisterer.h (C) 2000-2020 */
9/* */
10/* Singleton permettant d'enregister une fabrique de variable. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_VARIABLEFACTORYREGISTERER_H
13#define ARCANE_VARIABLEFACTORYREGISTERER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/VariableTypeInfo.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27/*!
28 * \internal
29 * \brief Enregistreur d'une fabrique de variables.
30 *
31 Chaque instance de ce type doit être une variable globale qui référence
32 une fonction de création de variable d'un type donnée. Chaque instance
33 étant globale, sa création a lieu avant de rentrer dans le main(). Il ne
34 faut donc faire aucune opération utilisant des objets externes ou même
35 des allocations dynamiques car on ne connait pas les objets déjà créés
36
37 La classe est concu pour que toutes ses instances soient liées par une
38 liste chaînée. Le premier maillon étant récupérable par firstVariableFactory();
39*/
40class ARCANE_CORE_EXPORT VariableFactoryRegisterer
41{
42 public:
43
44 using VariableFactoryFunc = VariableFactoryVariableRefCreateFunc;
45
46 public:
47
48 //! Crée un enregistreur pour une VariableFactory pour le type \a var_type_info et pour fonction de création \a func
49 VariableFactoryRegisterer(VariableFactoryFunc func,const VariableTypeInfo& var_type_info);
50
51 public:
52
53 /*!
54 * \brief Créé une fabrique pour ce type de variable.
55 *
56 * La fabrique doit être détruite par l'opérateur delete lorsqu'elle n'est
57 * plus utilisée.
58 */
59 IVariableFactory* createFactory();
60
61 //! VariableFactory précédent (0 si le premier)
62 VariableFactoryRegisterer* previousVariableFactory() const { return m_previous; }
63
64 //! VariableFactory suivant (0 si le dernier)
66
67 //! Genre des variables de données de la variable créée par cette fabrique
68 eItemKind itemKind() const { return m_variable_type_info.itemKind(); }
69
70 //! Type de données de la variable créée par cette fabrique
71 eDataType dataType() const { return m_variable_type_info.dataType(); }
72
73 //! Dimension de la variable créée par cette fabrique
74 Integer dimension() const { return m_variable_type_info.dimension(); }
75
76 //! Tag indiquant le type multiple (0 si non multiple, 1 si multiple, 2 si multiple deprecated)
77 Integer multiTag() const { return m_variable_type_info.multiTag(); }
78
79 //! indique si la fabrique est pour une variable partielle.
80 bool isPartial() const { return m_variable_type_info.isPartial(); }
81
82 //! Informations sur le type de la variable
83 const VariableTypeInfo& variableTypeInfo() const { return m_variable_type_info; }
84
85 /*!
86 * \brief Positionne le VariableFactory précédent.
87 *
88 * Cette méthode est automatiquement appelée par IVariableFactoryRegistry.
89 */
91
92 /*!
93 * \brief Positionne le VariableFactory suivant
94 *
95 * Cette méthode est automatiquement appelée par IVariableFactoryRegistry.
96 */
98
99 public:
100
101 static VariableFactoryRegisterer* firstVariableFactory();
102
103 private:
104
105 //! Fonction de création du IVariableFactoryFactory
106 VariableFactoryFunc m_function;
107
108 //! Informations sur le type de la variable
109 VariableTypeInfo m_variable_type_info;
110
111 //! VariableFactory précédent
112 VariableFactoryRegisterer* m_previous;
113
114 //! VariableFactory suivant
116};
117
118/*---------------------------------------------------------------------------*/
119/*---------------------------------------------------------------------------*/
120
121} // End namespace Arcane
122
123/*---------------------------------------------------------------------------*/
124/*---------------------------------------------------------------------------*/
125
126#endif
127
Integer dimension() const
Dimension de la variable créée par cette fabrique.
VariableFactoryRegisterer * previousVariableFactory() const
VariableFactory précédent (0 si le premier)
void setNextVariableFactory(VariableFactoryRegisterer *s)
Positionne le VariableFactory suivant.
Integer multiTag() const
Tag indiquant le type multiple (0 si non multiple, 1 si multiple, 2 si multiple deprecated)
eDataType dataType() const
Type de données de la variable créée par cette fabrique.
bool isPartial() const
indique si la fabrique est pour une variable partielle.
eItemKind itemKind() const
Genre des variables de données de la variable créée par cette fabrique.
const VariableTypeInfo & variableTypeInfo() const
Informations sur le type de la variable.
void setPreviousVariableFactory(VariableFactoryRegisterer *s)
Positionne le VariableFactory précédent.
VariableFactoryRegisterer * nextVariableFactory() const
VariableFactory suivant (0 si le dernier)
Informations caractérisant le type d'une variable.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eItemKind
Genre d'entité de maillage.
eDataType
Type d'une donnée.
Definition DataTypes.h:39