16#include "arcane/utils/NotSupportedException.h"
17#include "arcane/utils/ArgumentException.h"
18#include "arcane/utils/TraceInfo.h"
19#include "arcane/utils/IHashAlgorithm.h"
20#include "arcane/utils/NotImplementedException.h"
21#include "arcane/utils/Real2.h"
22#include "arcane/utils/Real3.h"
23#include "arcane/utils/Real2x2.h"
24#include "arcane/utils/Real3x3.h"
25#include "arcane/utils/ArrayShape.h"
26#include "arcane/utils/Array.h"
27#include "arcane/utils/String.h"
28#include "arcane/utils/Ref.h"
30#include "arcane/core/IDataFactory.h"
31#include "arcane/core/IData.h"
32#include "arcane/core/IDataVisitor.h"
34#include "arcane/core/datatype/DataAllocationInfo.h"
35#include "arcane/core/datatype/DataStorageTypeInfo.h"
36#include "arcane/core/datatype/DataStorageBuildInfo.h"
37#include "arcane/core/datatype/DataTypeTraits.h"
39#include "arcane/impl/ScalarData.h"
40#include "arcane/impl/SerializedData.h"
41#include "arcane/impl/DataStorageFactory.h"
43#include "arcane/core/ISerializer.h"
44#include "arcane/core/internal/IDataInternal.h"
57template <
class DataType>
62 ARCCORE_DEFINE_REFERENCE_COUNTED_INCLASS_METHODS();
66 typedef ScalarDataT<DataType> ThatClass;
76 explicit Internal(ScalarDataT<DataType>* p) : m_p(p){}
82 m_p->computeHash(hash_info);
87 ScalarDataT<DataType>* m_p =
nullptr;
97 explicit ScalarDataT(
const DataStorageBuildInfo& dsbi);
98 ScalarDataT(
const ScalarDataT<DataType>& rhs)
100 , m_trace(rhs.m_trace)
102 , m_allocation_info(rhs.m_allocation_info)
120 DataInterfaceType*
cloneTrue()
override {
return _cloneTrue(); }
139 visitor->applyVisitor(
this);
143 visitor->applyDataVisitor(
this);
164 DataInterfaceType* _cloneTrue()
const {
return new ThatClass(*
this); }
165 DataInterfaceType* _cloneTrueEmpty()
const {
return new ThatClass(m_trace); }
174, m_trace(dsbi.traceMng())
182template <
typename DataType>
188 Int32 nb_basic_type = TraitsType::nbBasicType();
197template<
typename DataType>
201 return staticStorageTypeInfo();
207template <
typename DataType>
215 Integer type_size =
sizeof(DataType);
217 if (use_basic_type) {
220 type_size =
sizeof(BasicType);
224 Integer nb_base_element = nb_element * nb_count;
225 Integer full_size = nb_base_element * type_size;
228 dimensions.
add(nb_element);
230 nb_base_element,
false, dimensions);
231 sd->setConstBytes(base_values);
238template <
typename DataType>
247 if (data_type !=
dataType() && data_type != base_data_type)
257template <
typename DataType>
267template <
typename DataType>
279 if (mode == ISerializer::ModeReserve)
290template <
typename DataType>
300template <
typename DataType>
310template <
typename DataType>
319template <
typename DataType>
323 Integer type_size =
sizeof(DataType);
332template <
typename DataType>
336 hash_info.setVersion(2);
344template <
typename DataType>
348 const DataInterfaceType* true_data =
dynamic_cast<const DataInterfaceType*
>(data);
357template <
typename DataType>
361 DataInterfaceType* true_data =
dynamic_cast<DataInterfaceType*
>(data);
370template <
typename DataType>
374 visitor->applyVisitor(
this);
380template <
typename DataType>
390template <
typename DataType>
400template <
typename DataType>
410template <
typename DataType>
440ARCANE_INTERNAL_INSTANTIATE_TEMPLATE_FOR_NUMERIC_DATATYPE(ScalarDataT);
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
Exception lorsqu'un argument est invalide.
Vue modifiable d'un tableau d'un type T.
constexpr Integer size() const noexcept
Retourne la taille du tableau.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
Informations sur l'allocation d'une donnée.
Informations pour le calcul du hash d'une donnée.
Informations pour construire une instance de 'IData'.
Fabrique de conteneur d'une donnée.
Informations de type pour un conteneur de données.
Interface du pattern visitor pour une donnée tableau 2D.
Interface du pattern visitor pour une donnée tableau.
Interface du gestionnaire de fabrique d'une donnée.
Interface d'une opération sur une donnée.
Interface du pattern visitor pour une donnée.
virtual void updateHash(Span< const std::byte > input)=0
Ajoute le tableau input au hash calculé
Interface d'un algorithme de hashage.
virtual void computeHash64(Span< const Byte > input, ByteArray &output)
Calcule la valeur du hash pour le tableau input.
Interface d'une donnée scalaire d'un type T.
virtual DataType & value()=0
Valeur de la donnée.
Interface du pattern visitor pour une donnée scalaire.
Interface d'une donnée sérialisée.
virtual eDataType baseDataType() const =0
Type de la donnée.
virtual Int64 memorySize() const =0
Indique le nombre d'octets qu'il faut allouer pour stocker ou lire les données.
virtual void setWritableBytes(Span< Byte > bytes)=0
Positionne les valeurs de sérialisation.
Interface d'un sérialiseur.
eMode
Mode de fonctionnement du sérialiseur.
@ ModePut
Le sérialiseur attend des reserve()
@ ModeGet
Le sérialiseur attend des get()
virtual void putSpan(Span< const Real > values)
Ajoute le tableau values.
virtual eMode mode() const =0
Mode de fonctionnement actuel.
virtual void getSpan(Span< Real > values)
Récupère le tableau values.
virtual void reserveSpan(eBasicDataType dt, Int64 n)=0
Réserve de la mémoire pour n valeurs de dt.
Interface du gestionnaire de traces.
Exception lorsqu'une opération n'est pas supportée.
Référence à une instance.
Implémentation thread-safe d'un compteur de référence.
void computeHash(DataHashInfo &hash_info) override
Calcule le hash de la donnée.
Donnée scalaire d'un type T.
DataType & value() override
Valeur de la donnée.
void assignSerializedData(const ISerializedData *sdata) override
Assigne à la donnée les valeurs sérialisées sdata.
ArrayShape shape() const override
Forme du tableau pour une donnée 1D ou 2D.
void setShape(const ArrayShape &) override
Positionne la forme du tableau.
DataInterfaceType * cloneTrueEmpty() override
Clone la donnée mais sans éléments.
void setAllocationInfo(const DataAllocationInfo &v) override
Positionne les informations sur l'allocation.
Ref< IData > cloneEmptyRef() override
Clone la donnée mais sans éléments.
void copy(const IData *data) override
Copie la donnée data dans l'instance courante.
void resize(Integer) override
Redimensionne la donnée.
IDataInternal * _commonInternal() override
void setName(const String &name) override
Positionne le nom de la donnée (interne)
DataInterfaceType * cloneTrue() override
Clone la donnée.
void visit(IDataVisitor *visitor) override
Applique le visiteur à la donnée.
void visitArray2(IArray2DataVisitor *visitor) override
Applique le visiteur à la donnée.
void fillDefault() override
Remplit la donnée avec sa valeur par défaut.
IData * cloneEmpty() override
Clone la donnée mais sans éléments. L'instance créée doit être détruite par l'opérateur 'delete'.
const DataType & value() const override
Valeur de la donnée.
Integer multiTag() const override
Tag multiple. 0 si non multiple, 1 si multiple, 2 si multiple pour les variable MultiArray (obsolète)
DataAllocationInfo allocationInfo() const override
Informations sur l'allocation.
void swapValues(IData *data) override
Échange les valeurs de data avec celles de l'instance.
Integer dimension() const override
Dimension. 0 pour un scalaire, 1 pour un tableau mono-dim, 2 pour un tableau bi-dim.
void serialize(ISerializer *sbuf, IDataOperation *operation) override
Sérialise la donnée en appliquant l'opération operation.
void computeHash(IHashAlgorithm *algo, ByteArray &output) const override
Calcul une clé de hashage sur cette donnée.
void visitArray(IArrayDataVisitor *visitor) override
Applique le visiteur à la donnée.
Ref< DataInterfaceType > cloneTrueRef() override
Clone la donnée.
Ref< DataInterfaceType > cloneTrueEmptyRef() override
Clone la donnée mais sans éléments.
IData * clone() override
Clone la donnée. L'instance créée doit être détruite par l'opérateur 'delete'.
Ref< ISerializedData > createSerializedDataRef(bool use_basic_type) const override
Sérialise la donnée.
eDataType dataType() const override
Type de la donnée.
Ref< IData > cloneRef() override
Clone la donnée.
DataStorageTypeInfo storageTypeInfo() const override
Informations sur le type de conteneur de la donnée.
void visit(IScalarDataVisitor *visitor) override
Applique le visiteur à la donnée.
void allocateBufferForSerializedData(ISerializedData *sdata) override
Alloue la mémoire pour lire les valeurs sérialisées sdata.
void visitScalar(IScalarDataVisitor *visitor) override
Applique le visiteur à la donnée.
Vue d'un tableau d'éléments de type T.
Chaîne de caractères unicode.
Vecteur 1D de données avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Ref< ISerializedData > arcaneCreateSerializedDataRef(eDataType data_type, Int64 memory_size, Integer nb_dim, Int64 nb_element, Int64 nb_base_element, bool is_multi_size, Int64ConstArrayView dimensions)
Créé des données sérialisées.
Int32 Integer
Type représentant un entier.
Array< Byte > ByteArray
Tableau dynamique à une dimension de caractères.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
eBasicDataType
Type d'une donnée de base.
impl::SpanTypeFromSize< conststd::byte, SizeType >::SpanType asBytes(const SpanImpl< DataType, SizeType, Extent > &s)
Converti la vue en un tableau d'octets non modifiables.
ConstArrayView< Byte > ByteConstArrayView
Equivalent C d'un tableau à une dimension de caractères.
unsigned char Byte
Type d'un octet.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.
eDataType
Type d'une donnée.
std::int32_t Int32
Type entier signé sur 32 bits.