Warning, file /include/JANA/Services/JWiringService.h was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002
0003
0004
0005 #pragma once
0006 #include <JANA/JService.h>
0007 #include <toml.hpp>
0008 #include <string>
0009 #include <map>
0010 #include <vector>
0011 #include <memory>
0012
0013 namespace jana::services {
0014
0015
0016 class JWiringService : public JService {
0017
0018 public:
0019 enum class Action { Add, Update, Remove };
0020 struct Wiring {
0021 Action action = Action::Update;
0022 std::string plugin_name;
0023 std::string type_name;
0024 std::string prefix;
0025 JEventLevel level = JEventLevel::None;
0026 std::vector<std::string> input_names;
0027 std::vector<JEventLevel> input_levels;
0028 std::vector<std::vector<std::string>> variadic_input_names;
0029 std::vector<JEventLevel> variadic_input_levels;
0030 std::vector<std::string> output_names;
0031 std::vector<JEventLevel> output_levels;
0032 std::vector<std::vector<std::string>> variadic_output_names;
0033 std::map<std::string, std::string> configs;
0034 bool is_used = false;
0035 };
0036
0037 struct WiringSet {
0038 std::vector<std::string> include_file_names;
0039 std::vector<std::string> plugin_names;
0040 std::map<std::string,std::string> shared_parameters;
0041 std::map<std::string, std::unique_ptr<Wiring>> wirings;
0042 bool use_short_names=false;
0043 };
0044
0045 private:
0046 Parameter<std::string> m_wirings_input_file {this, "wiring_file", "",
0047 "Path to TOML file containing wiring definitions"};
0048
0049 WiringSet m_wiring_set;
0050 std::map<std::pair<std::string,std::string>, std::vector<std::string>> m_added_prefixes;
0051 std::vector<std::string> m_no_added_prefixes;
0052
0053 public:
0054 JWiringService();
0055 void Init() override;
0056
0057 static WiringSet ParseWiringSet(const toml::table& toml);
0058 static WiringSet ParseWiringSetFromFilename(const std::string& filename);
0059
0060 static void Overlay(Wiring& above, const Wiring& below);
0061 static void OverlayWiringSet(WiringSet& above, const WiringSet& below);
0062 static void OverlayAllIncludes(WiringSet& wiring_set);
0063
0064 void ApplyWiringSet(WiringSet&& wiring_set);
0065
0066 const std::map<std::string, std::string>& GetSharedParameters() const;
0067 const std::vector<std::string>& GetPluginNames() const { return m_wiring_set.plugin_names; }
0068 bool AreShortNamesUsed() const { return m_wiring_set.use_short_names; }
0069
0070 Wiring* GetWiring(const std::string& prefix) const;
0071
0072 const std::vector<std::string>& GetPrefixesForAddedInstances(const std::string& plugin_name, const std::string& type_name) const;
0073
0074 const std::map<std::string, std::unique_ptr<Wiring>>& GetAllWirings() const { return m_wiring_set.wirings; }
0075
0076 void CheckAllWiringsAreUsed();
0077
0078 };
0079
0080 }
0081