File indexing completed on 2026-09-09 09:18:18
0001 #ifndef PODIO_UTILITIES_DATAMODELREGISTRYIOHELPERS_H
0002 #define PODIO_UTILITIES_DATAMODELREGISTRYIOHELPERS_H
0003
0004 #include "podio/CollectionBase.h"
0005 #include "podio/DatamodelRegistry.h"
0006
0007 #include <set>
0008 #include <string>
0009 #include <string_view>
0010 #include <tuple>
0011 #include <vector>
0012
0013 namespace podio {
0014
0015
0016
0017 class DatamodelDefinitionCollector {
0018 public:
0019
0020
0021
0022
0023
0024 void registerDatamodelDefinition(const podio::CollectionBase* coll, const std::string& name);
0025
0026
0027 std::vector<std::tuple<std::string, std::string>> getDatamodelDefinitionsToWrite() const;
0028
0029 private:
0030 std::set<size_t> m_edmDefRegistryIdcs{};
0031 };
0032
0033
0034
0035 class DatamodelDefinitionHolder {
0036 public:
0037
0038 using MapType = std::vector<std::tuple<std::string, std::string>>;
0039
0040 using VersionList = std::vector<std::tuple<std::string, podio::version::Version>>;
0041
0042
0043 DatamodelDefinitionHolder(MapType&& definitions, VersionList&& versions) :
0044 m_availEDMDefs(std::move(definitions)), m_edmVersions(std::move(versions)) {
0045 }
0046
0047 DatamodelDefinitionHolder() = default;
0048 ~DatamodelDefinitionHolder() = default;
0049 DatamodelDefinitionHolder(const DatamodelDefinitionHolder&) = delete;
0050 DatamodelDefinitionHolder& operator=(const DatamodelDefinitionHolder&) = delete;
0051 DatamodelDefinitionHolder(DatamodelDefinitionHolder&&) = default;
0052 DatamodelDefinitionHolder& operator=(DatamodelDefinitionHolder&&) = default;
0053
0054
0055
0056
0057
0058
0059
0060 const std::string_view getDatamodelDefinition(std::string_view name) const;
0061
0062
0063 std::vector<std::string> getAvailableDatamodels() const;
0064
0065 std::optional<podio::version::Version> getDatamodelVersion(std::string_view name) const;
0066
0067 protected:
0068 MapType m_availEDMDefs{};
0069 VersionList m_edmVersions{};
0070 };
0071
0072 }
0073
0074 #endif