Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ArrayConverter.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 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/* ArrayConverter.h (C) 2000-2023 */
9/* */
10/* Conversion d'un tableau d'un type vers un autre type. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_ARRAYCONVERTER_H
13#define ARCANE_UTILS_ARRAYCONVERTER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Array.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28template<typename TypeA,typename TypeB>
30{
31 public:
32 void convertFromAToB(ConstArrayView<TypeA> input,ArrayView<TypeB> output)
33 {
34 for( Integer i=0, is=input.size(); i<is; ++i )
35 output[i] = (TypeB)input[i];
36 }
37 void convertFromBToA(ConstArrayView<TypeB> input,ArrayView<TypeA> output)
38 {
39 for( Integer i=0, is=input.size(); i<is; ++i )
40 output[i] = (TypeA)input[i];
41 }
42};
43
44/*---------------------------------------------------------------------------*/
45/*---------------------------------------------------------------------------*/
49template<typename InputType,typename OutputType,
52{
53 public:
55 typedef typename OutputArrayType::iterator iterator;
57 typedef typename OutputArrayType::pointer pointer;
58 typedef typename OutputArrayType::const_pointer const_pointer;
59 public:
60
63 : m_converter(conv)
64 {
65 }
66
67 ArrayConverter(Integer nb,InputType* values)
68 {
69 m_input_array = ArrayView<InputType>(nb,values);
70 _init();
71 }
73 {
74 m_input_array = values;
75 _init();
76 }
78 :m_converter(conv)
79 {
80 m_input_array = values;
81 _init();
82 }
83 ~ArrayConverter() noexcept(false)
84
85 {
86 m_converter.convertFromBToA(m_output_array,m_input_array);
87 }
88 void operator=(ArrayView<InputType> values)
89 {
90 m_input_array = values;
91 _init();
92 }
93 void notifyOutputChanged()
94 {
95 m_converter.convertFromBToA(m_output_array,m_input_array);
96 }
97 void notifyInputChanged()
98 {
99 m_converter.convertFromAToB(m_input_array,m_output_array);
100 }
101 public:
102
106 ARCANE_DEPRECATED_280 iterator begin() { return m_output_array.begin(); }
110 ARCANE_DEPRECATED_280 const_iterator begin() const { return m_output_array.begin(); }
111 OutputArrayType& array() { return m_output_array; }
112 OutputArrayType& array() const { return m_output_array; }
113 pointer data() { return m_output_array.data(); }
114 const_pointer data() const { return m_output_array.data(); }
115
116 private:
117
118 void _init()
119 {
120 m_output_array.resize(m_input_array.size());
121 m_converter.convertFromAToB(m_input_array,m_output_array);
122 }
123
124 ArrayView<InputType> m_input_array;
125 OutputArrayType m_output_array;
126 Converter m_converter;
127};
128
129/*---------------------------------------------------------------------------*/
130/*---------------------------------------------------------------------------*/
137template<typename InputType>
138class ArrayConverter<InputType,InputType,DefaultConverter<InputType,InputType> >
139{
140 public:
142 typedef typename OutputArrayType::iterator iterator;
144 typedef typename OutputArrayType::pointer pointer;
145 typedef typename OutputArrayType::const_pointer const_pointer;
146 public:
147
149 {
150 }
151 ArrayConverter(Integer nb,InputType* values)
152 {
153 m_input_array = ArrayView<InputType>(nb,values);
154 }
156 {
157 m_input_array = values;
158 }
160 void operator=(ArrayView<InputType> values)
161 {
162 m_input_array = values;
163 }
164
165 public:
166
170 ARCANE_DEPRECATED_280 iterator begin() { return m_input_array.begin(); }
174 ARCANE_DEPRECATED_280 const_iterator begin() const { return m_input_array.begin(); }
175 OutputArrayType& array() { return m_input_array; }
176 OutputArrayType& array() const { return m_input_array; }
177 void notifyOutputChanged() {}
178 void notifyInputChanged() {}
179 pointer data() { return m_input_array.data(); }
180 const_pointer data() const { return m_input_array.data(); }
181
182 private:
183
184 ArrayView<InputType> m_input_array;
185};
186
187/*---------------------------------------------------------------------------*/
188/*---------------------------------------------------------------------------*/
192template<typename InputType,typename OutputType,
193 typename Converter = DefaultConverter<InputType,OutputType> >
195{
196 public:
198 typedef typename OutputArrayType::const_iterator const_iterator;
199 typedef typename OutputArrayType::const_pointer const_pointer;
200 public:
201
203 {
204 }
205
207 : m_converter(conv)
208 {
209 }
210
211 ConstArrayConverter(Integer nb,const InputType* values)
212 {
213 m_input_array = ConstArrayView<InputType>(nb,values);
214 _init();
215 }
217 {
218 m_input_array = values;
219 _init();
220 }
222 :m_converter(conv)
223 {
224 m_input_array = values;
225 _init();
226 }
227
229
230 public:
231
235 ARCANE_DEPRECATED_280 const_iterator begin() const { return m_output_array.begin(); }
236 OutputArrayType& array() const { return m_output_array; }
237 const_pointer data() const { return m_output_array.data(); }
238
239 private:
240
241 void _init()
242 {
243 m_output_array.resize(m_input_array.size());
244 m_converter.convertFromAToB(m_input_array,m_output_array);
245 }
246
247 ConstArrayView<InputType> m_input_array;
248 UniqueArray<OutputType> m_output_array;
249 Converter m_converter;
250};
251
252/*---------------------------------------------------------------------------*/
253/*---------------------------------------------------------------------------*/
260template<typename InputType>
261class ConstArrayConverter<InputType,InputType,DefaultConverter<InputType,InputType> >
262{
263 public:
266 typedef typename OutputArrayType::const_pointer const_pointer;
267 public:
268
270 {
271 }
272 ConstArrayConverter(Integer nb,const InputType* values)
273 {
274 m_input_array = ConstArrayView<InputType>(nb,values);
275 }
276
278 {
279 m_input_array = values;
280 }
282 {
283 }
284
285 public:
286
290 ARCANE_DEPRECATED_280 const_iterator begin() const { return m_input_array.begin(); }
291 OutputArrayType& array() const { return m_input_array; }
292 const_pointer data() const { return m_input_array.data(); }
293
294 private:
295
296 ConstArrayView<InputType> m_input_array;
297};
298
299/*---------------------------------------------------------------------------*/
300/*---------------------------------------------------------------------------*/
301
302}
303
304/*---------------------------------------------------------------------------*/
305/*---------------------------------------------------------------------------*/
306
307#endif
308
Conversion d'un tableau d'un type vers un autre type.
ARCANE_DEPRECATED_280 iterator begin()
ARCANE_DEPRECATED_280 const_iterator begin() const
Conversion d'un tableau d'un type vers un autre type.
ARCANE_DEPRECATED_280 const_iterator begin() const
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
const value_type * const_pointer
Type pointeur constant d'un élément du tableau.
value_type * pointer
Type pointeur d'un élément du tableau.
Itérateur sur les classes tableau de Arccore.
Vue modifiable d'un tableau d'un type T.
value_type * pointer
Type pointeur d'un élément du tableau.
constexpr Integer size() const noexcept
Retourne la taille du tableau.
const value_type * const_pointer
Type pointeur constant d'un élément du tableau.
constexpr const_pointer data() const noexcept
Pointeur sur le début de la vue.
constexpr iterator begin() noexcept
Itérateur sur le premier élément du tableau.
const T * data() const
Accès à la racine du tableau hors toute protection.
iterator begin()
Itérateur sur le premier élément du tableau.
void resize(Int64 s)
Change le nombre d'éléments du tableau à s.
Vue constante d'un tableau de type T.
constexpr const_iterator begin() const noexcept
Itérateur sur le premier élément du tableau.
const value_type * const_pointer
Type pointeur constant d'un élément du tableau.
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
constexpr const_pointer data() const noexcept
Pointeur sur la mémoire allouée.
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-