14#include "arcane/utils/ArcanePrecomp.h"
16#include "arcane/utils/PlatformUtils.h"
17#include "arcane/utils/NotImplementedException.h"
18#include "arcane/utils/FatalErrorException.h"
19#include "arcane/utils/ArgumentException.h"
20#include "arcane/utils/Array.h"
21#include "arcane/utils/TraceInfo.h"
23#include "arcane/FactoryService.h"
24#include "arcane/AbstractService.h"
25#include "arcane/IPhysicalUnitSystemService.h"
26#include "arcane/IPhysicalUnitSystem.h"
27#include "arcane/IPhysicalUnitConverter.h"
28#include "arcane/IPhysicalUnit.h"
37class UdunitsPhysicalUnitConverter;
38class UdunitsPhysicalUnit;
39class UdunitsPhysicalUnitSystem;
58 m_name = String::fromUtf8(name.utf8());
96 m_is_to_owned(
true), m_converter(
converter)
122 throw ArgumentException(A_FUNCINFO,
"input and ouput arrays do not have the same number of elements");
141 bool m_is_from_owned;
143 ::cv_converter* m_converter;
169 _checkCreateUnitSystem();
179 info() <<
"Create unit converter from='" <<
from <<
"' to='" <<
to <<
"'";
180 _checkCreateUnitSystem();
194 String::format(
"Can not convert from '{0}' to '{1}' because units are not convertible",
200 void _checkCreateUnitSystem()
204 m_unit_system = ut_read_xml(0);
206 throw FatalErrorException(A_FUNCINFO,
"Can not load unit system");
209 UdunitsPhysicalUnit* _createUnit(
const String& name)
211 ::ut_unit* unit = ut_parse(m_unit_system,(
const char*)name.utf8().data(),UT_UTF8);
213 throw FatalErrorException(A_FUNCINFO,String::format(
"Can not create unit from string '{0}'",name));
214 return new UdunitsPhysicalUnit(
this,unit,name);
222 ::ut_system* m_unit_system;
241 virtual void build();
264UdunitsUnitSystemService::
265UdunitsUnitSystemService(
const ServiceBuildInfo& sbi)
266: AbstractService(sbi)
#define ARCANE_REGISTER_APPLICATION_FACTORY(aclass, ainterface, aname)
Enregistre un service de fabrique pour la classe aclass.
Classe de base d'un service.
Interface d'un convertisseur d'unité.
Interface d'un service gérant un système d'unité.
Interface d'un système d'unité.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Structure contenant les informations pour créer un service.
virtual IPhysicalUnit * fromUnit()
Unité de départ.
virtual void convert(RealConstArrayView input_values, RealArrayView output_values)
Retourne dans output_values les valeurs converties de input_values.
virtual Real convert(Real value)
Retourne la valeur convertie de value.
virtual IPhysicalUnit * toUnit()
Unité d'arrivée.
virtual IPhysicalUnitConverter * createConverter(const String &from, const String &to)
Créé un convertisseur entre deux unités. L'appelant doit détruire le convertisseur retourné.
virtual IPhysicalUnitConverter * createConverter(IPhysicalUnit *from, IPhysicalUnit *to)
Créé un convertisseur entre deux unités. L'appelant doit détruire le convertisseur retourné....
virtual const String & name() const
Nom de l'unité
Service de gestion de système d'unité physique utilisant 'udunits2'.
virtual void build()
Construction de niveau build du service.
virtual IPhysicalUnitSystem * createStandardUnitSystem()
Crée un système d'unité pour le Système International SI.
Exception lorsqu'un argument est invalide.
Vue modifiable d'un tableau d'un type T.
Vue constante d'un tableau de type T.
Exception lorsqu'une erreur fatale est survenue.
Interface du gestionnaire de traces.
Chaîne de caractères unicode.
Classe d'accès aux traces.