14#include "arcane/utils/ArrayView.h"
15#include "arcane/utils/ScopedPtr.h"
16#include "arcane/utils/CheckedConvert.h"
18#include "arcane/ITimeHistoryCurveWriter2.h"
19#include "arcane/BasicService.h"
20#include "arcane/FactoryService.h"
21#include "arcane/IApplication.h"
22#include "arcane/IRessourceMng.h"
23#include "arcane/IXmlDocumentHolder.h"
24#include "arcane/XmlNode.h"
54 std::ofstream m_stream;
73 virtual String name()
const {
return "ArcaneCurveWriter"; }
89 Int64 offset = m_p->m_stream.tellp();
90 m_p->m_stream.write((
const char*)values.data(), values.size() *
sizeof(T));
99ArcaneCurveWriter::Impl::
100Impl(IApplication* app, ITraceMng* tm,
const String& path)
102, m_file_name(
"curves")
104 String full_path = path +
"/" + m_file_name +
".acv";
105 info() <<
"Begin write curves full_path=" << full_path;
106 m_stream.open(full_path.localstr(), std::ios::trunc);
108 warning() <<
"Can not open file '" << full_path <<
"' for writing curves";
109 m_curves_doc = app->ressourceMng()->createXmlDocument();
110 XmlNode doc = m_curves_doc->documentNode();
111 m_root_element = XmlElement(doc,
"curves");
126 if (!m_output_path.
empty())
127 m_output_path = path;
129 info() << A_FUNCNAME <<
"Begin write curves path=" << path;
130 m_p =
new Impl(subDomain()->application(),
traceMng(), path);
134 m_p->m_root_element.setAttrValue(
"times-offset", String::fromNumber(
time_offset));
135 m_p->m_root_element.setAttrValue(
"times-size", String::fromNumber(infos.
times().
size()));
136 m_p->m_root_element.setAttrValue(
"x",
"iteration");
142void ArcaneCurveWriter::
162 Int32 v = 0x01020304;
164 for (Integer i = 0; i < 4; ++i)
166 m_p->m_stream.write((
const char*)
header, 12);
176 m_p->m_curves_doc->save(bytes);
177 if (m_version == 2) {
184 else if (m_version == 1) {
192 ARCANE_FATAL(
"Invalid version {0} (valid values are '1' or '2')", m_version);
194 info(4) <<
"End writing curves";
229 XmlNode node = m_p->m_root_element.createAndAppendElement(
"curve");
233 if (infos.subDomain() != NULL_SUB_DOMAIN_ID) {
234 name =
"SD" + String::fromNumber(infos.subDomain()) +
"_" +
name;
236 if (infos.hasSupport()) {
237 name = infos.support() +
"_" +
name;
242 node.
setAttrValue(
"iterations-size", String::fromNumber(iterations.
size()));
247 if (infos.hasSupport()) {
250 if (infos.subDomain() != NULL_SUB_DOMAIN_ID) {
251 node.
setAttrValue(
"sub-domain", String::fromNumber(infos.subDomain()));
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
#define ARCANE_REGISTER_SUB_DOMAIN_FACTORY(aclass, ainterface, aname)
Enregistre un service de fabrique pour la classe aclass.
Ecriture des courbes au format spécifique Arcane.
virtual void setOutputPath(const String &path)
Répertoire de base où seront écrites les courbes.
virtual String name() const
Nom de l'écrivain.
virtual String outputPath() const
Répertoire de base où seront écrites les courbes.
virtual void endWrite()
Notifie la fin de l'écriture.
virtual void build()
Construction de niveau build du service.
virtual void beginWrite(const TimeHistoryCurveWriterInfo &infos)
Notifie un début d'écriture.
virtual void writeCurve(const TimeHistoryCurveInfo &infos)
Ecrit une courbe.
Classe de base de service lié à un sous-domaine.
Interface de l'application.
Interface d'un écrivain d'une courbe.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Structure contenant les informations pour créer un service.
Informations pour l'écriture d'une courbe.
Int32ConstArrayView iterations() const
Liste des itérations.
const String & name() const
Nom de la courbe.
RealConstArrayView values() const
Liste des valeurs de la courbe.
Integer subSize() const
Nombre de valeur par temps.
Informations sur l'écriture des courbes.
String path() const
Chemin ou écrire les données (sauf si surchargé spécifiquement par le service via ITimeHistoryCurveWr...
RealConstArrayView times() const
Liste des temps.
void setAttrValue(const String &name, const String &value)
Positionne l'attribut name à la valeur value.
Integer size() const
Nombre d'éléments du vecteur.
Int64 largeSize() const
Nombre d'éléments du vecteur (en 64 bits)
ConstArrayView< T > constView() const
Vue constante sur ce tableau.
Vue constante d'un tableau de type T.
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
Interface du gestionnaire de traces.
Chaîne de caractères unicode.
bool empty() const
Vrai si la chaîne est vide (nulle ou "")
String clone() const
Clone cette chaîne.
Classe d'accès aux traces.
ITraceMng * traceMng() const
Gestionnaire de trace.
TraceMessage warning() const
Flot pour un message d'avertissement.
TraceMessage info() const
Flot pour un message d'information.
Vecteur 1D de données avec sémantique par valeur (style STL).
Int32 toInt32(Int64 v)
Converti un Int64 en un Int32.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
unsigned char Byte
Type d'un octet.
ConstArrayView< Int64 > Int64ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.