Arcane  v3.16.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
DataStorageFactory.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/* DataStorageFactory.h (C) 2000-2021 */
9/* */
10/* Fabrique de conteneur d'une donnée. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_IMPL_DATASTORAGEFACTORY_H
13#define ARCANE_IMPL_DATASTORAGEFACTORY_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Ref.h"
18#include "arcane/utils/ITraceMng.h"
19
20#include "arcane/IDataStorageFactory.h"
21#include "arcane/IData.h"
22#include "arcane/IDataFactory.h"
23#include "arcane/IDataFactoryMng.h"
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane
29{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
37class ARCANE_IMPL_EXPORT AbstractDataStorageFactory
39{
40 public:
41 explicit AbstractDataStorageFactory(const DataStorageTypeInfo& dsti)
42 : m_storage_type_info(dsti){}
43 public:
46 {
47 return m_storage_type_info;
48 }
49 private:
50 DataStorageTypeInfo m_storage_type_info;
51};
52
53/*---------------------------------------------------------------------------*/
54/*---------------------------------------------------------------------------*/
59template<typename DataType> class DataStorageFactory
60: public AbstractDataStorageFactory
61{
62 public:
63
64 explicit DataStorageFactory(const DataStorageTypeInfo& dsti)
65 : AbstractDataStorageFactory(dsti){}
66
67 public:
68
71 {
72 IData* d = new DataType(dsbi);
73 return makeRef(d);
74 }
75
78 {
79 using DataContainerType = DataType;
80 ITraceMng* trace = dfm->traceMng();
81 DataStorageTypeInfo t = DataContainerType::staticStorageTypeInfo();
82 const bool print_info = false;
83 if (print_info && trace)
84 trace->info() << "TYPE=" << t.basicDataType()
85 << " nb_basic=" << t.nbBasicElement()
86 << " dimension=" << t.dimension()
87 << " multi_tag=" << t.multiTag()
88 << " full_name=" << t.fullName()
89 << "\n";
90 IDataStorageFactory* sf = new DataStorageFactory<DataContainerType>(t);
92 }
93};
94
95/*---------------------------------------------------------------------------*/
96/*---------------------------------------------------------------------------*/
97
98} // End namespace Arcane
99
100/*---------------------------------------------------------------------------*/
101/*---------------------------------------------------------------------------*/
102
103#endif
DataStorageTypeInfo storageTypeInfo() override
Informations sur le type de conteneur créé
Informations pour construire une instance de 'IData'.
static void registerDataFactory(IDataFactoryMng *dfm)
Enregistre dans dfm une fabrique pour la donnée DataType.
Ref< IData > createSimpleDataRef(const DataStorageBuildInfo &dsbi) override
Créé une donnée d'un type simple.
Informations de type pour un conteneur de données.
Interface du gestionnaire de fabrique d'une donnée.
virtual ITraceMng * traceMng() const =0
Gestionnaire de trace associé
virtual void registerDataStorageFactory(Ref< IDataStorageFactory > factory)=0
Enregistre la fabrique factory.
Interface d'une fabrique de conteneur d'une donnée.
Interface d'une donnée.
Definition IData.h:33
Interface du gestionnaire de traces.
virtual TraceMessage info()=0
Flot pour un message d'information.
Référence à une instance.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.