Commit | Line | Data |
---|---|---|
5d7e8359 PP |
1 | /* |
2 | * SPDX-License-Identifier: GPL-2.0-only | |
3 | * | |
4 | * Copyright (C) 2020 Philippe Proulx <pproulx@efficios.com> | |
5 | */ | |
6 | ||
5d7e57e8 SM |
7 | #include <utility> |
8 | ||
5d7e8359 PP |
9 | #include <babeltrace2/babeltrace.h> |
10 | ||
5d7e57e8 | 11 | #include "cpp-common/bt2/graph.hpp" |
4ad43657 | 12 | #include "cpp-common/bt2c/c-string-view.hpp" |
c458c630 | 13 | #include "cpp-common/bt2c/make-span.hpp" |
25fe6ea5 | 14 | #include "cpp-common/bt2s/make-unique.hpp" |
5d7e57e8 | 15 | |
c3211f0a | 16 | #include "clk-cls-compat-postconds-triggers.hpp" |
053db960 | 17 | #include "utils.hpp" |
5d7e8359 | 18 | |
7809b6dd SM |
19 | namespace { |
20 | ||
5d7e57e8 SM |
21 | /* |
22 | * Creates a simple condition trigger, calling `func`. | |
23 | */ | |
24 | template <typename FuncT> | |
25fe6ea5 SM |
25 | CondTrigger::UP makeSimpleTrigger(FuncT&& func, const CondTrigger::Type type, |
26 | const std::string& condId, | |
27 | const bt2c::CStringView nameSuffix = {}) | |
cc09350f | 28 | { |
25fe6ea5 SM |
29 | return bt2s::make_unique<SimpleCondTrigger>(std::forward<FuncT>(func), type, condId, |
30 | nameSuffix); | |
cc09350f SM |
31 | } |
32 | ||
5d7e57e8 | 33 | using OnCompInitFunc = std::function<void(bt2::SelfComponent)>; |
5d7e8359 | 34 | |
5d7e57e8 SM |
35 | /* |
36 | * A "run in" class that delegates the execution to stored callables. | |
37 | * | |
38 | * Use the makeRunIn*Trigger() helpers below. | |
39 | */ | |
40 | class RunInDelegator final : public RunIn | |
5d7e8359 | 41 | { |
5d7e57e8 SM |
42 | public: |
43 | static RunInDelegator makeOnCompInit(OnCompInitFunc func) | |
44 | { | |
45 | return RunInDelegator {std::move(func)}; | |
46 | } | |
5d7e8359 | 47 | |
5d7e57e8 SM |
48 | void onCompInit(const bt2::SelfComponent self) override |
49 | { | |
50 | if (_mOnCompInitFunc) { | |
51 | _mOnCompInitFunc(self); | |
52 | } | |
53 | } | |
54 | ||
55 | private: | |
56 | explicit RunInDelegator(OnCompInitFunc onCompInitFunc) : | |
57 | _mOnCompInitFunc {std::move(onCompInitFunc)} | |
58 | { | |
59 | } | |
60 | ||
61 | OnCompInitFunc _mOnCompInitFunc; | |
62 | }; | |
63 | ||
64 | /* | |
65 | * Creates a condition trigger, calling `func` in a component | |
66 | * initialization context. | |
67 | */ | |
25fe6ea5 SM |
68 | CondTrigger::UP makeRunInCompInitTrigger(OnCompInitFunc func, const CondTrigger::Type type, |
69 | const std::string& condId, | |
70 | const bt2c::CStringView nameSuffix = {}) | |
5d7e8359 | 71 | { |
25fe6ea5 SM |
72 | return bt2s::make_unique<RunInCondTrigger<RunInDelegator>>( |
73 | RunInDelegator::makeOnCompInit(std::move(func)), type, condId, nameSuffix); | |
5d7e8359 PP |
74 | } |
75 | ||
5d7e57e8 | 76 | bt2::IntegerFieldClass::Shared createUIntFc(const bt2::SelfComponent self) |
5d7e8359 | 77 | { |
5d7e57e8 | 78 | return self.createTraceClass()->createUnsignedIntegerFieldClass(); |
5d7e8359 PP |
79 | } |
80 | ||
25fe6ea5 SM |
81 | } /* namespace */ |
82 | ||
83 | int main(const int argc, const char ** const argv) | |
84 | { | |
85 | CondTriggers triggers; | |
86 | ||
87 | triggers.emplace_back(makeSimpleTrigger( | |
5d7e57e8 SM |
88 | [] { |
89 | bt2::Graph::create(292); | |
90 | }, | |
1c5ea5eb | 91 | CondTrigger::Type::Pre, "graph-create:valid-mip-version")); |
5d7e57e8 | 92 | |
25fe6ea5 | 93 | triggers.emplace_back(makeRunInCompInitTrigger( |
5d7e57e8 SM |
94 | [](const bt2::SelfComponent self) { |
95 | createUIntFc(self)->fieldValueRange(0); | |
96 | }, | |
1c5ea5eb | 97 | CondTrigger::Type::Pre, "field-class-integer-set-field-value-range:valid-n", "0")); |
5d7e57e8 | 98 | |
25fe6ea5 | 99 | triggers.emplace_back(makeRunInCompInitTrigger( |
5d7e57e8 SM |
100 | [](const bt2::SelfComponent self) { |
101 | createUIntFc(self)->fieldValueRange(65); | |
102 | }, | |
1c5ea5eb | 103 | CondTrigger::Type::Pre, "field-class-integer-set-field-value-range:valid-n", "gt-64")); |
5d7e57e8 | 104 | |
25fe6ea5 | 105 | triggers.emplace_back(makeSimpleTrigger( |
5d7e57e8 SM |
106 | [] { |
107 | bt_field_class_integer_set_field_value_range(nullptr, 23); | |
108 | }, | |
1c5ea5eb | 109 | CondTrigger::Type::Pre, "field-class-integer-set-field-value-range:not-null:field-class")); |
7809b6dd | 110 | |
c3211f0a | 111 | addClkClsCompatTriggers(triggers); |
fb472529 | 112 | condMain(bt2c::makeSpan(argv, argc), triggers); |
5d7e8359 | 113 | } |