$treeview $search $mathjax $extrastylesheet
artdaq_core
v3_06_01
$projectbrief
|
$projectbrief
|
$searchbox |
00001 #ifndef _artdaq_core_Data_FragmentNameHelper_hh_ 00002 #define _artdaq_core_Data_FragmentNameHelper_hh_ 00003 00004 #include <set> 00005 #include <string> 00006 #include <vector> 00007 00008 #include <cetlib/BasicPluginFactory.h> 00009 #include <cetlib/compiler_macros.h> 00010 00011 #include "artdaq-core/Data/Fragment.hh" 00012 00013 #ifndef EXTERN_C_FUNC_DECLARE_START 00014 #define EXTERN_C_FUNC_DECLARE_START \ 00015 extern "C" { 00016 #endif 00017 00022 #define DEFINE_ARTDAQ_FRAGMENT_NAME_HELPER(klass) \ 00023 EXTERN_C_FUNC_DECLARE_START \ 00024 std::shared_ptr<artdaq::FragmentNameHelper> make(std::string unidentified, std::vector<std::pair<artdaq::Fragment::type_t, std::string>> types) \ 00025 { \ 00026 return std::shared_ptr<artdaq::FragmentNameHelper>(new klass(unidentified, types)); \ 00027 } \ 00028 } 00029 00030 namespace artdaq { 00031 class FragmentNameHelper 00032 { 00033 public: 00037 virtual ~FragmentNameHelper() = default; 00038 00047 FragmentNameHelper(std::string unidentified_instance_name, std::vector<std::pair<artdaq::Fragment::type_t, std::string>> extraTypes) 00048 : type_map_() 00049 , unidentified_instance_name_(unidentified_instance_name) 00050 { 00051 SetBasicTypes(artdaq::Fragment::MakeSystemTypeMap()); 00052 for (auto it = extraTypes.begin(); it != extraTypes.end(); ++it) 00053 { 00054 AddExtraType(it->first, it->second); 00055 } 00056 } 00057 00061 void SetBasicTypes(std::map<artdaq::Fragment::type_t, std::string> const& type_map) 00062 { 00063 for (auto& type_pair : type_map) 00064 { 00065 type_map_[type_pair.first] = type_pair.second; 00066 } 00067 } 00068 00072 void AddExtraType(artdaq::Fragment::type_t type_id, std::string const& type_name) 00073 { 00074 type_map_[type_id] = type_name; 00075 } 00076 00081 std::string GetUnidentifiedInstanceName() const { return unidentified_instance_name_; } 00082 00086 virtual std::string GetInstanceNameForType(artdaq::Fragment::type_t type_id) const = 0; 00087 00094 virtual std::set<std::string> GetAllProductInstanceNames() const = 0; 00095 00103 virtual std::pair<bool, std::string> 00104 GetInstanceNameForFragment(artdaq::Fragment const& fragment) const = 0; 00105 00106 protected: 00107 std::map<artdaq::Fragment::type_t, std::string> type_map_; 00108 std::string unidentified_instance_name_; 00109 private: 00110 FragmentNameHelper(FragmentNameHelper const&) = default; 00111 FragmentNameHelper(FragmentNameHelper&&) = default; 00112 FragmentNameHelper& operator=(FragmentNameHelper const&) = default; 00113 FragmentNameHelper& operator=(FragmentNameHelper&&) = default; 00114 }; 00115 00116 00117 inline std::shared_ptr<FragmentNameHelper> 00118 makeNameHelper(std::string const& plugin_name, std::string const& unidentified_instance_name, std::vector<std::pair<artdaq::Fragment::type_t, std::string>> extraTypes) 00119 { 00120 static cet::BasicPluginFactory bpf("fragmentNameHelper", "make"); 00121 00122 return bpf.makePlugin<std::shared_ptr<FragmentNameHelper>>(plugin_name, unidentified_instance_name, extraTypes); 00123 } 00124 00125 class ArtdaqFragmentNameHelper : public FragmentNameHelper 00126 { 00127 public: 00131 virtual ~ArtdaqFragmentNameHelper(); 00132 00137 ArtdaqFragmentNameHelper(std::string unidentified_instance_name, std::vector<std::pair<artdaq::Fragment::type_t, std::string>> extraTypes); 00138 00143 virtual std::string GetInstanceNameForType(artdaq::Fragment::type_t type_id) const; 00144 00150 virtual std::set<std::string> GetAllProductInstanceNames() const; 00151 00158 virtual std::pair<bool, std::string> 00159 GetInstanceNameForFragment(artdaq::Fragment const& fragment) const; 00160 00161 private: 00162 ArtdaqFragmentNameHelper(ArtdaqFragmentNameHelper const&) = delete; 00163 ArtdaqFragmentNameHelper(ArtdaqFragmentNameHelper&&) = delete; 00164 ArtdaqFragmentNameHelper& operator=(ArtdaqFragmentNameHelper const&) = delete; 00165 ArtdaqFragmentNameHelper& operator=(ArtdaqFragmentNameHelper&&) = delete; 00166 }; 00167 } // namespace artdaq 00168 00169 #endif //_artdaq_core_Data_FragmentNameHelper_hh_