Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
DataStorageFactory.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* Data container factory. */
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/core/IDataStorageFactory.h"
21#include "arcane/core/IData.h"
22#include "arcane/core/IDataFactory.h"
23#include "arcane/core/IDataFactoryMng.h"
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane
29{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33
38class ARCANE_IMPL_EXPORT AbstractDataStorageFactory
40{
41 public:
42
43 explicit AbstractDataStorageFactory(const DataStorageTypeInfo& dsti)
44 : m_storage_type_info(dsti)
45 {}
46
47 public:
48
51 {
52 return m_storage_type_info;
53 }
54
55 private:
56
57 DataStorageTypeInfo m_storage_type_info;
58};
59
60/*---------------------------------------------------------------------------*/
61/*---------------------------------------------------------------------------*/
62
67template <typename DataType> class DataStorageFactory
68: public AbstractDataStorageFactory
69{
70 public:
71
72 explicit DataStorageFactory(const DataStorageTypeInfo& dsti)
73 : AbstractDataStorageFactory(dsti)
74 {}
75
76 public:
77
80 {
81 IData* d = new DataType(dsbi);
82 return makeRef(d);
83 }
84
87 {
88 using DataContainerType = DataType;
89 ITraceMng* trace = dfm->traceMng();
90 DataStorageTypeInfo t = DataContainerType::staticStorageTypeInfo();
91 const bool print_info = false;
92 if (print_info && trace)
93 trace->info() << "TYPE=" << t.basicDataType()
94 << " nb_basic=" << t.nbBasicElement()
95 << " dimension=" << t.dimension()
96 << " multi_tag=" << t.multiTag()
97 << " full_name=" << t.fullName()
98 << "\n";
99 IDataStorageFactory* sf = new DataStorageFactory<DataContainerType>(t);
101 }
102};
103
104/*---------------------------------------------------------------------------*/
105/*---------------------------------------------------------------------------*/
106
107} // End namespace Arcane
108
109/*---------------------------------------------------------------------------*/
110/*---------------------------------------------------------------------------*/
111
112#endif
DataStorageTypeInfo storageTypeInfo() override
Information about the created container type.
Information to construct an instance of 'IData'.
static void registerDataFactory(IDataFactoryMng *dfm)
Registers a factory for the data DataType in dfm.
Ref< IData > createSimpleDataRef(const DataStorageBuildInfo &dsbi) override
Create simple data of a type.
Type information for a data container.
Interface of the data factory manager.
virtual ITraceMng * traceMng() const =0
Associated trace manager.
virtual void registerDataStorageFactory(Ref< IDataStorageFactory > factory)=0
Registers the factory factory.
Interface of a data container factory.
Interface of a data item.
Definition IData.h:34
virtual TraceMessage info()=0
Stream for an information message.
Reference to an instance.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Creates a reference on a pointer.