Project
Loading...
Searching...
No Matches
DataSpecUtils.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11#ifndef FRAMEWORK_DATASPECUTILS_H
12#define FRAMEWORK_DATASPECUTILS_H
13
15#include "Framework/InputSpec.h"
16#include "Headers/DataHeader.h"
17#include "Framework/Output.h"
18
19#include <optional>
20
21namespace o2
22{
23namespace framework
24{
25
28 static bool match(InputSpec const& spec, ConcreteDataMatcher const& target);
29
31 static bool match(InputSpec const& spec, ConcreteDataTypeMatcher const& target);
32
36 static bool match(OutputSpec const& left, OutputSpec const& right);
37
39 static bool match(OutputSpec const& spec, ConcreteDataMatcher const& target);
40
42 static bool match(InputSpec const& input, OutputSpec const& output);
43
44 static bool match(const InputSpec& spec,
45 const o2::header::DataOrigin& origin,
46 const o2::header::DataDescription& description,
48
49 static bool match(const OutputSpec& spec,
50 const o2::header::DataOrigin& origin,
51 const o2::header::DataDescription& description,
53
54 static bool match(const InputSpec& spec, o2::header::DataHeader const& dh)
55 {
57 }
58
59 static bool match(const OutputSpec& spec, o2::header::DataHeader const& dh)
60 {
62 }
63
66 template <typename ContainerT>
67 static std::optional<typename ContainerT::value_type> find(ContainerT const& container,
68 const o2::header::DataOrigin& origin,
69 const o2::header::DataDescription& description,
71 {
72 for (auto const& spec : container) {
73 if (match(spec, origin, description, subSpec)) {
74 return std::make_optional<typename ContainerT::value_type>(spec);
75 }
76 }
77 return std::nullopt;
78 }
79
81 static bool partialMatch(InputSpec const& spec, o2::header::DataOrigin const& origin);
82
84 template <size_t N>
85 static bool partialMatch(InputSpec const& spec, std::array<header::DataOrigin, N> const& origins)
86 {
87 return std::find_if(origins.begin(), origins.end(), [&](auto const& o) { return DataSpecUtils::asConcreteOrigin(spec) == o; }) != origins.end();
88 }
89
91 static bool partialMatch(OutputSpec const& spec, o2::header::DataOrigin const& origin);
92
94 template <size_t N>
95 static bool partialMatch(OutputSpec const& spec, std::array<header::DataOrigin, N> const& origins)
96 {
97 auto dataType = DataSpecUtils::asConcreteDataTypeMatcher(spec);
98 return std::find_if(origins.begin(), origins.end(), [&](auto const& o) { return dataType.origin == o; }) != origins.end();
99 }
100
102 static bool partialMatch(InputSpec const& spec, o2::header::DataDescription const& description);
103
105 static bool partialMatch(OutputSpec const& spec, o2::header::DataDescription const& description);
106
107 template <typename T>
108 static bool match(const T& spec, const o2::header::DataHeader& header)
109 {
110 return DataSpecUtils::match(spec,
111 header.dataOrigin,
112 header.dataDescription,
113 header.subSpecification);
114 }
115
120 static std::string describe(InputSpec const& spec);
121
127 static std::string describe(OutputSpec const& spec);
128
131 static std::string label(InputSpec const& spec);
132
135 static std::string label(OutputSpec const& spec);
136
139 static std::string restEndpoint(InputSpec const& spec);
140
147
149 static bool validate(InputSpec const& input);
150
152 static bool validate(OutputSpec const& output);
153
155 static void describe(char* buffer, size_t size, InputSpec const& spec);
156
158 static void describe(char* buffer, size_t size, OutputSpec const& spec);
159
164
170
174 static std::optional<ConcreteDataMatcher> asOptionalConcreteDataMatcher(OutputSpec const& spec);
175
181
187
193
199
206 static OutputSpec asOutputSpec(InputSpec const& spec);
207
210 static InputSpec matchingInput(OutputSpec const& spec);
211
213 static InputSpec fromMetadataString(std::string s);
214
216 static std::optional<header::DataOrigin> getOptionalOrigin(InputSpec const& spec);
217
219 static std::optional<header::DataDescription> getOptionalDescription(InputSpec const& spec);
220
222 static std::optional<header::DataHeader::SubSpecificationType> getOptionalSubSpec(OutputSpec const& spec);
223
225 static std::optional<header::DataHeader::SubSpecificationType> getOptionalSubSpec(InputSpec const& spec);
226
229
232
235
238
241 static std::optional<framework::ConcreteDataMatcher> optionalConcreteDataMatcherFrom(data_matcher::DataDescriptorMatcher const& matcher);
242
244 static bool includes(const InputSpec& left, const InputSpec& right);
245
247 static void updateInputList(std::vector<InputSpec>& list, InputSpec&& input);
248
250 static void updateOutputList(std::vector<OutputSpec>& list, OutputSpec&& input);
251};
252
253} // namespace framework
254} // namespace o2
255#endif // FRAMEWORK_DATASPECUTILS_H
bool o
void output(const std::map< std::string, ChannelStat > &channels)
Definition rawdump.cxx:197
GLuint buffer
Definition glcorearb.h:655
GLsizeiptr size
Definition glcorearb.h:659
GLdouble GLdouble right
Definition glcorearb.h:4077
GLenum target
Definition glcorearb.h:1641
GLuint GLsizei const GLchar * label
Definition glcorearb.h:2519
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
Definition list.h:40
static std::optional< ConcreteDataMatcher > asOptionalConcreteDataMatcher(OutputSpec const &spec)
static bool partialMatch(InputSpec const &spec, o2::header::DataOrigin const &origin)
static InputSpec fromMetadataString(std::string s)
Create an InputSpec from metadata string.
static std::string describe(InputSpec const &spec)
static void updateOutputList(std::vector< OutputSpec > &list, OutputSpec &&input)
Updates list of OutputSpecs by merging metadata (or adding output).
static bool match(const T &spec, const o2::header::DataHeader &header)
static ConcreteDataTypeMatcher asConcreteDataTypeMatcher(OutputSpec const &spec)
static bool validate(InputSpec const &input)
static bool partialMatch(OutputSpec const &spec, std::array< header::DataOrigin, N > const &origins)
static std::optional< typename ContainerT::value_type > find(ContainerT const &container, const o2::header::DataOrigin &origin, const o2::header::DataDescription &description, const o2::header::DataHeader::SubSpecificationType &subSpec)
static bool match(const InputSpec &spec, o2::header::DataHeader const &dh)
static ConcreteDataMatcher asConcreteDataMatcher(InputSpec const &input)
static std::optional< header::DataHeader::SubSpecificationType > getOptionalSubSpec(OutputSpec const &spec)
Get the subspec, if available.
static InputSpec matchingInput(OutputSpec const &spec)
static data_matcher::DataDescriptorMatcher dataDescriptorMatcherFrom(ConcreteDataMatcher const &concrete)
Build a DataDescriptMatcher which does not care about the subSpec.
static std::optional< framework::ConcreteDataMatcher > optionalConcreteDataMatcherFrom(data_matcher::DataDescriptorMatcher const &matcher)
static std::string restEndpoint(InputSpec const &spec)
static bool match(const OutputSpec &spec, o2::header::DataHeader const &dh)
static std::optional< header::DataDescription > getOptionalDescription(InputSpec const &spec)
Get the description, if available.
static std::optional< header::DataOrigin > getOptionalOrigin(InputSpec const &spec)
Get the origin, if available.
static void updateMatchingSubspec(InputSpec &in, header::DataHeader::SubSpecificationType subSpec)
static bool includes(const InputSpec &left, const InputSpec &right)
Checks if left includes right (or is equal to)
static header::DataOrigin asConcreteOrigin(InputSpec const &spec)
static void updateInputList(std::vector< InputSpec > &list, InputSpec &&input)
Updates list of InputSpecs by merging metadata.
static header::DataDescription asConcreteDataDescription(InputSpec const &spec)
static bool partialMatch(InputSpec const &spec, std::array< header::DataOrigin, N > const &origins)
static OutputSpec asOutputSpec(InputSpec const &spec)
static bool match(InputSpec const &spec, ConcreteDataMatcher const &target)
the main header struct
Definition DataHeader.h:618
DataDescription dataDescription
Definition DataHeader.h:636
SubSpecificationType subSpecification
Definition DataHeader.h:656
uint32_t SubSpecificationType
Definition DataHeader.h:620