Skip to content

Commit 7642035

Browse files
authored
DPL: add helper for matcher creation (#5446)
Will be useful to move the output spec to use matchers.
1 parent 167e91b commit 7642035

File tree

3 files changed

+33
-0
lines changed

3 files changed

+33
-0
lines changed

Framework/Core/include/Framework/DataSpecUtils.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,9 @@ struct DataSpecUtils {
180180
/// Get the subspec, if available
181181
static std::optional<header::DataHeader::SubSpecificationType> getOptionalSubSpec(InputSpec const& spec);
182182

183+
/// Build a DataDescriptMatcher which does not care about the subSpec.
184+
static data_matcher::DataDescriptorMatcher dataDescriptorMatcherFrom(ConcreteDataMatcher const& concrete);
185+
183186
/// Build a DataDescriptMatcher which does not care about the subSpec.
184187
static data_matcher::DataDescriptorMatcher dataDescriptorMatcherFrom(ConcreteDataTypeMatcher const& dataType);
185188

Framework/Core/src/DataSpecUtils.cxx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,22 @@ OutputSpec DataSpecUtils::asOutputSpec(InputSpec const& spec)
470470
spec.matcher);
471471
}
472472

473+
DataDescriptorMatcher DataSpecUtils::dataDescriptorMatcherFrom(ConcreteDataMatcher const& concrete)
474+
{
475+
DataDescriptorMatcher matchEverything{
476+
DataDescriptorMatcher::Op::And,
477+
OriginValueMatcher{concrete.origin.as<std::string>()},
478+
std::make_unique<DataDescriptorMatcher>(
479+
DataDescriptorMatcher::Op::And,
480+
DescriptionValueMatcher{concrete.description.as<std::string>()},
481+
std::make_unique<DataDescriptorMatcher>(
482+
DataDescriptorMatcher::Op::And,
483+
SubSpecificationTypeValueMatcher{concrete.subSpec},
484+
std::make_unique<DataDescriptorMatcher>(DataDescriptorMatcher::Op::Just,
485+
StartTimeValueMatcher{ContextRef{0}})))};
486+
return std::move(matchEverything);
487+
}
488+
473489
DataDescriptorMatcher DataSpecUtils::dataDescriptorMatcherFrom(ConcreteDataTypeMatcher const& dataType)
474490
{
475491
auto timeDescriptionMatcher = std::make_unique<DataDescriptorMatcher>(

Framework/Core/test/unittest_DataSpecUtils.cxx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,20 @@ BOOST_AUTO_TEST_CASE(TestMatcherFromDescription)
256256
BOOST_CHECK_EQUAL(DataSpecUtils::asConcreteDataDescription(ddSpec).as<std::string>(), "TSET");
257257
}
258258

259+
BOOST_AUTO_TEST_CASE(TestMatcherFromConcrete)
260+
{
261+
auto fromQueryInputSpec = DataSpecUtils::dataDescriptorMatcherFrom(ConcreteDataMatcher{"TSET", "FOO", 1});
262+
InputSpec ddSpec{
263+
"binding",
264+
std::move(fromQueryInputSpec)};
265+
266+
auto concrete = DataSpecUtils::asConcreteDataMatcher(ddSpec);
267+
268+
BOOST_CHECK_EQUAL(concrete.origin.as<std::string>(), "TSET");
269+
BOOST_CHECK_EQUAL(concrete.description.as<std::string>(), "FOO");
270+
BOOST_CHECK_EQUAL(concrete.subSpec, 1);
271+
}
272+
259273
BOOST_AUTO_TEST_CASE(FindOutputSpec)
260274
{
261275
std::vector<OutputSpec> specs = {

0 commit comments

Comments
 (0)