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