Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
ArrayVariant.cc
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/* ArrayVariant.cc (C) 2000-2006 */
9/* */
10/* Polymorphic base type for mono-dimensional arrays (dimension 1). */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/utils/ArcanePrecomp.h"
15
16#include "arcane/utils/Array.h"
17#include "arcane/utils/String.h"
18#include "arcane/utils/Real2.h"
19#include "arcane/utils/Real3.h"
20#include "arcane/utils/Real2x2.h"
21#include "arcane/utils/Real3x3.h"
22
23#include "arcane/datatype/ArrayVariant.h"
24#include "arcane/datatype/BadVariantTypeException.h"
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29namespace Arcane
30{
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34
35ArrayVariant::
36ArrayVariant(eType type, Integer asize)
37: VariantBase(1, type)
38, m_allocated_array(0)
39{
40 switch (type) {
41 case TReal: {
42 RealArray* v = new RealUniqueArray(asize);
43 m_allocated_array = v;
44 m_real_value = *v;
45 } break;
46 case TInt64: {
47 Int64Array* v = new Int64UniqueArray(asize);
48 m_allocated_array = v;
49 m_int64_value = *v;
50 } break;
51 case TInt32: {
52 Int32Array* v = new Int32UniqueArray(asize);
53 m_allocated_array = v;
54 m_int32_value = *v;
55 } break;
56 case TBool: {
57 BoolArray* v = new BoolUniqueArray(asize);
58 m_allocated_array = v;
59 m_bool_value = *v;
60 } break;
61 case TString: {
62 StringArray* v = new StringUniqueArray(asize);
63 m_allocated_array = v;
64 m_string_value = *v;
65 } break;
66 case TReal2: {
67 Real2Array* v = new Real2UniqueArray(asize);
68 m_allocated_array = v;
69 m_real2_value = *v;
70 } break;
71 case TReal3: {
72 Real3Array* v = new Real3UniqueArray(asize);
73 m_allocated_array = v;
74 m_real3_value = *v;
75 } break;
76 case TReal2x2: {
77 Real2x2Array* v = new Real2x2UniqueArray(asize);
78 m_allocated_array = v;
79 m_real2x2_value = *v;
80 } break;
81 case TReal3x3: {
82 Real3x3Array* v = new Real3x3UniqueArray(asize);
83 m_allocated_array = v;
84 m_real3x3_value = *v;
85 } break;
86 default:
87 throw BadVariantTypeException("ArrayVariant::ArrayVariant(eType,Integer)", type);
88 }
89}
90
91/*---------------------------------------------------------------------------*/
92/*---------------------------------------------------------------------------*/
93
94ArrayVariant::
95ArrayVariant(ArrayView<Real> data)
96: VariantBase(1, TReal)
97, m_real_value(data)
98, m_allocated_array(0)
99{
100}
101
102/*---------------------------------------------------------------------------*/
103/*---------------------------------------------------------------------------*/
104
105ArrayVariant::
106ArrayVariant(ArrayView<Real2> data)
107: VariantBase(1, TReal2)
108, m_real2_value(data)
109, m_allocated_array(0)
110{
111}
112
113/*---------------------------------------------------------------------------*/
114/*---------------------------------------------------------------------------*/
115
116ArrayVariant::
117ArrayVariant(ArrayView<Real3> data)
118: VariantBase(1, TReal3)
119, m_real3_value(data)
120, m_allocated_array(0)
121{
122}
123
124/*---------------------------------------------------------------------------*/
125/*---------------------------------------------------------------------------*/
126
127ArrayVariant::
128ArrayVariant(ArrayView<Real2x2> data)
129: VariantBase(1, TReal2x2)
130, m_real2x2_value(data)
131, m_allocated_array(0)
132{
133}
134
135/*---------------------------------------------------------------------------*/
136/*---------------------------------------------------------------------------*/
137
138ArrayVariant::
139ArrayVariant(ArrayView<Real3x3> data)
140: VariantBase(1, TReal3x3)
141, m_real3x3_value(data)
142, m_allocated_array(0)
143{
144}
145
146/*---------------------------------------------------------------------------*/
147/*---------------------------------------------------------------------------*/
148
149ArrayVariant::
150ArrayVariant(ArrayView<Int32> data)
151: VariantBase(1, TInt32)
152, m_int32_value(data)
153, m_allocated_array(0)
154{
155}
156
157/*---------------------------------------------------------------------------*/
158/*---------------------------------------------------------------------------*/
159
160ArrayVariant::
161ArrayVariant(ArrayView<Int64> data)
162: VariantBase(1, TInt64)
163, m_int64_value(data)
164, m_allocated_array(0)
165{
166}
167
168/*---------------------------------------------------------------------------*/
169/*---------------------------------------------------------------------------*/
170
171ArrayVariant::
172ArrayVariant(ArrayView<bool> data)
173: VariantBase(1, TBool)
174, m_bool_value(data)
175, m_allocated_array(0)
176{
177}
178
179/*---------------------------------------------------------------------------*/
180/*---------------------------------------------------------------------------*/
181
182ArrayVariant::
183ArrayVariant(ArrayView<String> data)
184: VariantBase(1, TString)
185, m_string_value(data)
186, m_allocated_array(0)
187{
188}
189
190/*---------------------------------------------------------------------------*/
191/*---------------------------------------------------------------------------*/
192
193ArrayVariant::
194~ArrayVariant()
195{
196 _destroy();
197}
198
199/*---------------------------------------------------------------------------*/
200/*---------------------------------------------------------------------------*/
201
202void ArrayVariant::
203_destroy()
204{
205 if (!m_allocated_array)
206 return;
207 switch (m_type) {
208 case TReal:
209 delete reinterpret_cast<RealArray*>(m_allocated_array);
210 break;
211 case TReal2:
212 delete reinterpret_cast<Real2Array*>(m_allocated_array);
213 break;
214 case TReal3:
215 delete reinterpret_cast<Real3Array*>(m_allocated_array);
216 break;
217 case TReal2x2:
218 delete reinterpret_cast<Real2x2Array*>(m_allocated_array);
219 break;
220 case TReal3x3:
221 delete reinterpret_cast<Real3x3Array*>(m_allocated_array);
222 break;
223 case TInt64:
224 delete reinterpret_cast<Int64Array*>(m_allocated_array);
225 break;
226 case TInt32:
227 delete reinterpret_cast<Int32Array*>(m_allocated_array);
228 break;
229 case TBool:
230 delete reinterpret_cast<BoolArray*>(m_allocated_array);
231 break;
232 case TString:
233 delete reinterpret_cast<StringArray*>(m_allocated_array);
234 break;
235 default:
236 break;
237 }
238}
239
240/*---------------------------------------------------------------------------*/
241/*---------------------------------------------------------------------------*/
242
243Integer ArrayVariant::
244size() const
245{
246 switch (m_type) {
247 case TReal:
248 return m_real_value.size();
249 case TReal2:
250 return m_real2_value.size();
251 case TReal3:
252 return m_real3_value.size();
253 case TReal2x2:
254 return m_real2x2_value.size();
255 case TReal3x3:
256 return m_real3x3_value.size();
257 case TBool:
258 return m_bool_value.size();
259 case TString:
260 return m_string_value.size();
261 case TInt32:
262 return m_int32_value.size();
263 case TInt64:
264 return m_int64_value.size();
265 default:
266 break;
267 }
268 return 0;
269}
270
271/*---------------------------------------------------------------------------*/
272/*---------------------------------------------------------------------------*/
273
274extern "C++" ARCANE_DATATYPE_EXPORT std::ostream&
275operator<<(std::ostream& s, const ArrayVariant& x)
276{
277 s << "ArrayVariant [t="
278 << x.typeName();
279
280 s << ", adr=";
281 Integer size = 0;
282 switch (x.type()) {
283 case VariantBase::TReal:
284 s << x.asReal().data();
285 s << "], v=[ ";
286 size = x.asReal().size();
287 for (Integer i = 0; i < size; ++i)
288 s << x.asReal()[i] << " ";
289 break;
290 case VariantBase::TReal2:
291 s << x.asReal2().data();
292 s << "], v=[ ";
293 size = x.asReal2().size();
294 for (Integer i = 0; i < size; ++i)
295 s << x.asReal2()[i] << " ";
296 break;
297 case VariantBase::TReal3:
298 s << x.asReal3().data();
299 s << "], v=[ ";
300 size = x.asReal3().size();
301 for (Integer i = 0; i < size; ++i)
302 s << x.asReal3()[i] << " ";
303 break;
304 case VariantBase::TReal2x2:
305 s << x.asReal2().data();
306 s << "], v=[ ";
307 size = x.asReal2().size();
308 for (Integer i = 0; i < size; ++i)
309 s << x.asReal2x2()[i] << " ";
310 break;
311 case VariantBase::TReal3x3:
312 s << x.asReal3x3().data();
313 s << "], v=[ ";
314 size = x.asReal3x3().size();
315 for (Integer i = 0; i < size; ++i)
316 s << x.asReal3x3()[i] << " ";
317 break;
318 case VariantBase::TInt64:
319 s << x.asInt64().data();
320 s << "], v=[ ";
321 size = x.asInt64().size();
322 for (Integer i = 0; i < size; ++i)
323 s << x.asInt64()[i] << " ";
324 break;
325 case VariantBase::TInt32:
326 s << x.asInteger().data();
327 s << "], v=[ ";
328 size = x.asInteger().size();
329 for (Integer i = 0; i < size; ++i)
330 s << x.asInteger()[i] << " ";
331 break;
332 case VariantBase::TBool:
333 s << x.asBool().data();
334 s << "], v=[ ";
335 size = x.asBool().size();
336 for (Integer i = 0; i < size; ++i)
337 s << x.asBool()[i] << " ";
338 break;
339 case VariantBase::TString:
340 s << x.asString().data();
341 s << "], v=[ ";
342 size = x.asString().size();
343 for (Integer i = 0; i < size; ++i)
344 s << x.asString()[i] << " ";
345 break;
346 default:
347 break;
348 }
349 s << "]";
350
351 return s;
352}
353
354/*---------------------------------------------------------------------------*/
355/*---------------------------------------------------------------------------*/
356
357IntegerArrayView ArrayVariant::
358asInteger()
359{
360#ifdef ARCANE_64BIT
361 return m_int64_value;
362#else
363 return m_int32_value;
364#endif
365}
366
367/*---------------------------------------------------------------------------*/
368/*---------------------------------------------------------------------------*/
369
370IntegerConstArrayView ArrayVariant::
371asInteger() const
372{
373#ifdef ARCANE_64BIT
374 return m_int64_value;
375#else
376 return m_int32_value;
377#endif
378}
379
380/*---------------------------------------------------------------------------*/
381/*---------------------------------------------------------------------------*/
382
383} // namespace Arcane
384
385/*---------------------------------------------------------------------------*/
386/*---------------------------------------------------------------------------*/
Base class for polymorphic types.
Definition VariantBase.h:34
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Array< Real2 > Real2Array
Dynamic one-dimensional array of rank 2 vectors.
Definition UtilsTypes.h:147
UniqueArray< Real2x2 > Real2x2UniqueArray
Dynamic 1D array of rank 2 tensors.
Definition UtilsTypes.h:365
Array< Int64 > Int64Array
Dynamic one-dimensional array of 64-bit integers.
Definition UtilsTypes.h:125
UniqueArray< Real3x3 > Real3x3UniqueArray
Dynamic 1D array of rank 3 tensors.
Definition UtilsTypes.h:367
UniqueArray< Int64 > Int64UniqueArray
Dynamic 1D array of 64-bit integers.
Definition UtilsTypes.h:339
Array< String > StringArray
Dynamic one-dimensional array of strings.
Definition UtilsTypes.h:145
Array< bool > BoolArray
Dynamic one-dimensional array of booleans.
Definition UtilsTypes.h:143
Array< Real3x3 > Real3x3Array
Dynamic one-dimensional array of rank 3 tensors.
Definition UtilsTypes.h:153
Int32 Integer
Type representing an integer.
UniqueArray< Real3 > Real3UniqueArray
Dynamic 1D array of rank 3 vectors.
Definition UtilsTypes.h:363
UniqueArray< bool > BoolUniqueArray
Dynamic 1D array of booleans.
Definition UtilsTypes.h:357
ArrayView< Integer > IntegerArrayView
C equivalent of a 1D array of integers.
Definition UtilsTypes.h:457
UniqueArray< Int32 > Int32UniqueArray
Dynamic 1D array of 32-bit integers.
Definition UtilsTypes.h:341
UniqueArray< Real > RealUniqueArray
Dynamic 1D array of reals.
Definition UtilsTypes.h:349
Array< Real2x2 > Real2x2Array
Dynamic one-dimensional array of rank 2 tensors.
Definition UtilsTypes.h:151
Array< Int32 > Int32Array
Dynamic one-dimensional array of 32-bit integers.
Definition UtilsTypes.h:127
Array< Real > RealArray
Dynamic one-dimensional array of reals.
Definition UtilsTypes.h:135
UniqueArray< String > StringUniqueArray
Dynamic 1D array of strings.
Definition UtilsTypes.h:359
UniqueArray< Real2 > Real2UniqueArray
Dynamic 1D array of rank 2 vectors.
Definition UtilsTypes.h:361
ConstArrayView< Integer > IntegerConstArrayView
C equivalent of a 1D array of integers.
Definition UtilsTypes.h:486
Array< Real3 > Real3Array
Dynamic one-dimensional array of rank 3 vectors.
Definition UtilsTypes.h:149