From 5538107b7fad806db4d203b72952392b8d470e5e Mon Sep 17 00:00:00 2001 From: Gilles Grospellier Date: Wed, 27 Nov 2024 19:42:20 +0100 Subject: [PATCH] =?UTF-8?q?[arcane,utils+launcher]=20Dans=20les=20propri?= =?UTF-8?q?=C3=A9t=C3=A9s,=20d=C3=A9couple=20la=20classe=20positionnant=20?= =?UTF-8?q?la=20propri=C3=A9t=C3=A9=20de=20l'instance=20modifi=C3=A9e.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Utilise cela pour 'ParallelLoopOPtions' et 'ApplicationInfo'. --- arcane/src/arcane/launcher/ArcaneLauncher.cc | 14 +++--- arcane/src/arcane/utils/ApplicationInfo.cc | 12 +++-- arcane/src/arcane/utils/ApplicationInfo.h | 6 +-- arcane/src/arcane/utils/JSONPropertyReader.h | 10 ++--- .../src/arcane/utils/ParallelLoopOptions.cc | 9 ++-- arcane/src/arcane/utils/ParallelLoopOptions.h | 7 +-- .../utils/ParameterListPropertyReader.h | 12 ++--- .../src/arcane/utils/PropertyDeclarations.h | 11 ++--- .../internal/ApplicationInfoProperties.h | 45 +++++++++++++++++++ .../internal/ParallelLoopOptionsProperties.h | 45 +++++++++++++++++++ arcane/src/arcane/utils/srcs.cmake | 2 + 11 files changed, 135 insertions(+), 38 deletions(-) create mode 100644 arcane/src/arcane/utils/internal/ApplicationInfoProperties.h create mode 100644 arcane/src/arcane/utils/internal/ParallelLoopOptionsProperties.h diff --git a/arcane/src/arcane/launcher/ArcaneLauncher.cc b/arcane/src/arcane/launcher/ArcaneLauncher.cc index 4527056632..e0a540f7ee 100644 --- a/arcane/src/arcane/launcher/ArcaneLauncher.cc +++ b/arcane/src/arcane/launcher/ArcaneLauncher.cc @@ -1,11 +1,11 @@ // -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*- //----------------------------------------------------------------------------- -// Copyright 2000-2023 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com) +// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com) // See the top-level COPYRIGHT file for details. // SPDX-License-Identifier: Apache-2.0 //----------------------------------------------------------------------------- /*---------------------------------------------------------------------------*/ -/* ArcaneLauncher.cc (C) 2000-2023 */ +/* ArcaneLauncher.cc (C) 2000-2024 */ /* */ /* Classe gérant le lancement de l'exécution. */ /*---------------------------------------------------------------------------*/ @@ -26,6 +26,8 @@ #include "arcane/utils/ParameterList.h" #include "arcane/utils/Ref.h" #include "arcane/utils/ConcurrencyUtils.h" +#include "arcane/utils/internal/ParallelLoopOptionsProperties.h" +#include "arcane/utils/internal/ApplicationInfoProperties.h" #include "arcane/impl/ArcaneMain.h" #include "arcane/impl/ArcaneSimpleExecutor.h" @@ -102,7 +104,7 @@ _checkReadConfigFile(StringView config_file_name) if (config.null()) return; std::cout << "READING CONFIG\n"; - properties::readFromJSON(config,app_info); + properties::readFromJSON(config,app_info); } /*---------------------------------------------------------------------------*/ @@ -322,7 +324,8 @@ init(const CommandLineArguments& args) if (global_has_init_done) ARCANE_FATAL("ArcaneLauncher::init() has already been called"); global_has_init_done = true; - applicationInfo().setCommandLineArguments(args); + auto& application_info = applicationInfo(); + application_info.setCommandLineArguments(args); bool do_list = false; if (do_list) _listPropertySettings(); @@ -330,12 +333,13 @@ init(const CommandLineArguments& args) String runtime_config_file_name = cargs.getParameter("RuntimeConfigFile"); if (!runtime_config_file_name.empty()) _checkReadConfigFile(runtime_config_file_name); + properties::readFromParameterList(args.parameters(),application_info); auto& dotnet_info = ArcaneLauncher::dotNetRuntimeInitialisationInfo(); properties::readFromParameterList(args.parameters(),dotnet_info); auto& accelerator_info = ArcaneLauncher::acceleratorRuntimeInitialisationInfo(); properties::readFromParameterList(args.parameters(),accelerator_info); ParallelLoopOptions loop_options; - properties::readFromParameterList(args.parameters(),loop_options); + properties::readFromParameterList(args.parameters(),loop_options); TaskFactory::setDefaultParallelLoopOptions(loop_options); } catch(const Exception& ex){ diff --git a/arcane/src/arcane/utils/ApplicationInfo.cc b/arcane/src/arcane/utils/ApplicationInfo.cc index 4fef70ad34..e40c2b5c56 100644 --- a/arcane/src/arcane/utils/ApplicationInfo.cc +++ b/arcane/src/arcane/utils/ApplicationInfo.cc @@ -1,11 +1,11 @@ // -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*- //----------------------------------------------------------------------------- -// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com) +// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com) // See the top-level COPYRIGHT file for details. // SPDX-License-Identifier: Apache-2.0 //----------------------------------------------------------------------------- /*---------------------------------------------------------------------------*/ -/* ApplicationInfo.cc (C) 2000-2020 */ +/* ApplicationInfo.cc (C) 2000-2024 */ /* */ /* Informations sur une application. */ /*---------------------------------------------------------------------------*/ @@ -17,6 +17,7 @@ #include "arcane/utils/PlatformUtils.h" #include "arcane/utils/List.h" #include "arcane/utils/Property.h" +#include "arcane/utils/internal/ApplicationInfoProperties.h" /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ @@ -443,7 +444,10 @@ addParameterLine(const String& line) /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ -template void ApplicationInfo:: +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ + +template void ApplicationInfoProperties:: _applyPropertyVisitor(V& p) { auto b = p.builder(); @@ -486,7 +490,7 @@ _applyPropertyVisitor(V& p) /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ -ARCANE_REGISTER_PROPERTY_CLASS(ApplicationInfo,()); +ARCANE_REGISTER_PROPERTY_CLASS(ApplicationInfoProperties,()); /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ diff --git a/arcane/src/arcane/utils/ApplicationInfo.h b/arcane/src/arcane/utils/ApplicationInfo.h index 1c303a9fec..34236b96aa 100644 --- a/arcane/src/arcane/utils/ApplicationInfo.h +++ b/arcane/src/arcane/utils/ApplicationInfo.h @@ -1,11 +1,11 @@ // -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*- //----------------------------------------------------------------------------- -// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com) +// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com) // See the top-level COPYRIGHT file for details. // SPDX-License-Identifier: Apache-2.0 //----------------------------------------------------------------------------- /*---------------------------------------------------------------------------*/ -/* ApplicationInfo.h (C) 2000-2020 */ +/* ApplicationInfo.h (C) 2000-2024 */ /* */ /* Informations sur une application. */ /*---------------------------------------------------------------------------*/ @@ -17,7 +17,6 @@ #include "arcane/utils/VersionInfo.h" #include "arcane/utils/String.h" #include "arcane/utils/UtilsTypes.h" -#include "arcane/utils/PropertyDeclarations.h" /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ @@ -38,7 +37,6 @@ class CommandLineArguments; */ class ARCANE_UTILS_EXPORT ApplicationInfo { - ARCANE_DECLARE_PROPERTY_CLASS(ApplicationInfo); public: ApplicationInfo(); diff --git a/arcane/src/arcane/utils/JSONPropertyReader.h b/arcane/src/arcane/utils/JSONPropertyReader.h index 0eff863a08..ea012e3d75 100644 --- a/arcane/src/arcane/utils/JSONPropertyReader.h +++ b/arcane/src/arcane/utils/JSONPropertyReader.h @@ -1,11 +1,11 @@ // -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*- //----------------------------------------------------------------------------- -// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com) +// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com) // See the top-level COPYRIGHT file for details. // SPDX-License-Identifier: Apache-2.0 //----------------------------------------------------------------------------- /*---------------------------------------------------------------------------*/ -/* JSONPropertyReader.h (C) 2000-2020 */ +/* JSONPropertyReader.h (C) 2000-2024 */ /* */ /* Lecture de propriétés au format JSON. */ /*---------------------------------------------------------------------------*/ @@ -59,15 +59,15 @@ class JSONPropertyReader * Les valeurs de la propriété doivent être dans un élément fils de \a jv * dont le nom est celui de la classe \a T. */ -template inline void +template inline void readFromJSON(JSONValue jv,T& instance) { - const char* instance_property_name = T :: propertyClassName(); + const char* instance_property_name = PropertyType :: propertyClassName(); JSONValue child_value = jv.child(instance_property_name); if (child_value.null()) return; JSONPropertyReader reader(child_value,instance); - T :: applyPropertyVisitor(reader); + PropertyType :: applyPropertyVisitor(reader); } /*---------------------------------------------------------------------------*/ diff --git a/arcane/src/arcane/utils/ParallelLoopOptions.cc b/arcane/src/arcane/utils/ParallelLoopOptions.cc index 3bc5de4f50..ffa3e53f48 100644 --- a/arcane/src/arcane/utils/ParallelLoopOptions.cc +++ b/arcane/src/arcane/utils/ParallelLoopOptions.cc @@ -1,11 +1,11 @@ // -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*- //----------------------------------------------------------------------------- -// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com) +// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com) // See the top-level COPYRIGHT file for details. // SPDX-License-Identifier: Apache-2.0 //----------------------------------------------------------------------------- /*---------------------------------------------------------------------------*/ -/* ParallelLoopOptions.cc (C) 2000-2022 */ +/* ParallelLoopOptions.cc (C) 2000-2024 */ /* */ /* Options de configuration pour les boucles parallèles en multi-thread. */ /*---------------------------------------------------------------------------*/ @@ -15,6 +15,7 @@ #include "arcane/utils/Property.h" #include "arcane/utils/FatalErrorException.h" +#include "arcane/utils/internal/ParallelLoopOptionsProperties.h" /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ @@ -57,7 +58,7 @@ namespace /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ -template void ParallelLoopOptions:: +template void ParallelLoopOptionsProperties:: _applyPropertyVisitor(V& p) { auto b = p.builder(); @@ -77,7 +78,7 @@ _applyPropertyVisitor(V& p) /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ -ARCANE_REGISTER_PROPERTY_CLASS(ParallelLoopOptions, ()); +ARCANE_REGISTER_PROPERTY_CLASS(ParallelLoopOptionsProperties, ()); /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ diff --git a/arcane/src/arcane/utils/ParallelLoopOptions.h b/arcane/src/arcane/utils/ParallelLoopOptions.h index f1574fe82b..e69065d07a 100644 --- a/arcane/src/arcane/utils/ParallelLoopOptions.h +++ b/arcane/src/arcane/utils/ParallelLoopOptions.h @@ -1,11 +1,11 @@ // -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*- //----------------------------------------------------------------------------- -// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com) +// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com) // See the top-level COPYRIGHT file for details. // SPDX-License-Identifier: Apache-2.0 //----------------------------------------------------------------------------- /*---------------------------------------------------------------------------*/ -/* ParallelLoopOptions.h (C) 2000-2022 */ +/* ParallelLoopOptions.h (C) 2000-2024 */ /* */ /* Options de configuration pour les boucles parallèles en multi-thread. */ /*---------------------------------------------------------------------------*/ @@ -15,7 +15,6 @@ /*---------------------------------------------------------------------------*/ #include "arcane/utils/UtilsTypes.h" -#include "arcane/utils/PropertyDeclarations.h" /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ @@ -34,8 +33,6 @@ namespace Arcane */ class ARCANE_UTILS_EXPORT ParallelLoopOptions { - ARCANE_DECLARE_PROPERTY_CLASS(ParallelLoopOptions); - private: //! Drapeau pour indiquer quels champs ont été positionnés. diff --git a/arcane/src/arcane/utils/ParameterListPropertyReader.h b/arcane/src/arcane/utils/ParameterListPropertyReader.h index dec093dc6e..7bd517c4fb 100644 --- a/arcane/src/arcane/utils/ParameterListPropertyReader.h +++ b/arcane/src/arcane/utils/ParameterListPropertyReader.h @@ -1,11 +1,11 @@ // -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*- //----------------------------------------------------------------------------- -// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com) +// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com) // See the top-level COPYRIGHT file for details. // SPDX-License-Identifier: Apache-2.0 //----------------------------------------------------------------------------- /*---------------------------------------------------------------------------*/ -/* ParameterListPropertyReader.h (C) 2000-2021 */ +/* ParameterListPropertyReader.h (C) 2000-2024 */ /* */ /* Lecture de propriétés au format JSON. */ /*---------------------------------------------------------------------------*/ @@ -30,7 +30,7 @@ namespace Arcane::properties /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ //! \internal -template +template class ParameterListPropertyVisitor : public properties::PropertyVisitor { @@ -61,11 +61,11 @@ class ParameterListPropertyVisitor /*! * \brief Remplit les valeurs de \a instance à partir des paramètres \a args. */ -template inline void +template inline void readFromParameterList(const ParameterList& args,T& instance) { - ParameterListPropertyVisitor reader(args,instance); - T :: applyPropertyVisitor(reader); + ParameterListPropertyVisitor reader(args,instance); + PropertyType :: applyPropertyVisitor(reader); } /*---------------------------------------------------------------------------*/ diff --git a/arcane/src/arcane/utils/PropertyDeclarations.h b/arcane/src/arcane/utils/PropertyDeclarations.h index ead40b64d4..965c47fff3 100644 --- a/arcane/src/arcane/utils/PropertyDeclarations.h +++ b/arcane/src/arcane/utils/PropertyDeclarations.h @@ -1,11 +1,11 @@ // -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*- //----------------------------------------------------------------------------- -// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com) +// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com) // See the top-level COPYRIGHT file for details. // SPDX-License-Identifier: Apache-2.0 //----------------------------------------------------------------------------- /*---------------------------------------------------------------------------*/ -/* PropertyDeclarations.h (C) 2000-2020 */ +/* PropertyDeclarations.h (C) 2000-2024 */ /* */ /* Déclaration des types et macros pour la gestion des propriétés. */ /*---------------------------------------------------------------------------*/ @@ -57,12 +57,13 @@ class PropertyDeclaration * class MyClass * { * public: - * ARCANE_DECLARE_PROPERTY_CLASS(MyClass); + * ARCANE_DECLARE_PROPERTY_CLASS(MyClass,InstanceType); * }; * \endcode */ -#define ARCANE_DECLARE_PROPERTY_CLASS(class_name)\ +#define ARCANE_DECLARE_PROPERTY_CLASS(class_name) \ public:\ + using PropertyInstanceType = class_name; \ static const char* propertyClassName() { return #class_name; }\ template static void _applyPropertyVisitor(V& visitor);\ static void applyPropertyVisitor(Arcane::properties::PropertyVisitor& p); \ @@ -109,7 +110,7 @@ namespace\ }\ }\ void aclass :: \ -applyPropertyVisitor(Arcane::properties::PropertyVisitor& p)\ + applyPropertyVisitor(Arcane::properties::PropertyVisitor& p) \ {\ aclass :: _applyPropertyVisitor(p);\ }\ diff --git a/arcane/src/arcane/utils/internal/ApplicationInfoProperties.h b/arcane/src/arcane/utils/internal/ApplicationInfoProperties.h new file mode 100644 index 0000000000..9b7780e69d --- /dev/null +++ b/arcane/src/arcane/utils/internal/ApplicationInfoProperties.h @@ -0,0 +1,45 @@ +// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*- +//----------------------------------------------------------------------------- +// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com) +// See the top-level COPYRIGHT file for details. +// SPDX-License-Identifier: Apache-2.0 +//----------------------------------------------------------------------------- +/*---------------------------------------------------------------------------*/ +/* ApplicationInfoProperties.h (C) 2000-2024 */ +/* */ +/* Informations sur une application. */ +/*---------------------------------------------------------------------------*/ +#ifndef ARCANE_UTILS_INTERNAL_APPLICATIONINFOPROPERTIES_H +#define ARCANE_UTILS_INTERNAL_APPLICATIONINFOPROPERTIES_H +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ + +#include "arcane/utils/ApplicationInfo.h" +#include "arcane/utils/PropertyDeclarations.h" + +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ + +namespace Arcane +{ + +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ +/*! + * \brief Informations sur une application. + */ +class ARCANE_UTILS_EXPORT ApplicationInfoProperties +: public ApplicationInfo +{ + ARCANE_DECLARE_PROPERTY_CLASS(ApplicationInfo); +}; + +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ + +} // namespace Arcane + +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ + +#endif diff --git a/arcane/src/arcane/utils/internal/ParallelLoopOptionsProperties.h b/arcane/src/arcane/utils/internal/ParallelLoopOptionsProperties.h new file mode 100644 index 0000000000..3f1ae2952d --- /dev/null +++ b/arcane/src/arcane/utils/internal/ParallelLoopOptionsProperties.h @@ -0,0 +1,45 @@ +// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*- +//----------------------------------------------------------------------------- +// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com) +// See the top-level COPYRIGHT file for details. +// SPDX-License-Identifier: Apache-2.0 +//----------------------------------------------------------------------------- +/*---------------------------------------------------------------------------*/ +/* ParallelLoopOptionsProperties.h (C) 2000-2024 */ +/* */ +/* Options de configuration pour les boucles parallèles en multi-thread. */ +/*---------------------------------------------------------------------------*/ +#ifndef ARCANE_UTILS_INTERNAL_PARALLELLOOPOPTIONSPROPERTIES_H +#define ARCANE_UTILS_INTERANL_PARALLELLOOPOPTIONSPROPERTIES_H +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ + +#include "arcane/utils/ParallelLoopOptions.h" +#include "arcane/utils/PropertyDeclarations.h" + +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ + +namespace Arcane +{ + +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ +/*! + * \brief Classe pour fixer les valeurs de ParallelLoopOptions via des propriétés. + */ +class ARCANE_UTILS_EXPORT ParallelLoopOptionsProperties +: public ParallelLoopOptions +{ + ARCANE_DECLARE_PROPERTY_CLASS(ParallelLoopOptions); +}; + +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ + +} // End namespace Arcane + +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ + +#endif diff --git a/arcane/src/arcane/utils/srcs.cmake b/arcane/src/arcane/utils/srcs.cmake index 297ff20bfa..1b7aee06fb 100644 --- a/arcane/src/arcane/utils/srcs.cmake +++ b/arcane/src/arcane/utils/srcs.cmake @@ -333,6 +333,7 @@ set(ARCANE_SOURCES GraphBaseT.h DirectedGraphT.h DirectedAcyclicGraphT.h + internal/ApplicationInfoProperties.h internal/MemoryRessourceMng.h internal/IMemoryRessourceMngInternal.h internal/IMemoryCopier.h @@ -341,6 +342,7 @@ set(ARCANE_SOURCES internal/SpecificMemoryCopyList.h internal/MemoryBuffer.h internal/MemoryPool.h + internal/ParallelLoopOptionsProperties.h ) if (ARCANE_HAS_CXX20)