Skip to content

Commit 1357972

Browse files
committed
fixing
1 parent 933e3b3 commit 1357972

File tree

4 files changed

+31
-13
lines changed

4 files changed

+31
-13
lines changed

examples/power_train/main.cc

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ class Engine : public Reactor {
140140
public:
141141
// ports
142142
Input<void> torque{"torque", this}; // NOLINT
143-
143+
Multiport<int> control_input;
144144
private:
145145
// reactions_
146146
Reaction r1{"1", 1, this, [this]() { reaction_1(); }};
@@ -180,3 +180,12 @@ auto main() -> int {
180180

181181
return 0;
182182
}
183+
184+
class ReactionScope : public MutableScope<Engine> {
185+
void reaction_0() {
186+
MutationChangeMultiportSize<int> change_multiport_width{&this->self_->control_input, 6};
187+
this->add_to_transaction(&change_multiport_width);
188+
189+
this->commit_transaction();
190+
}
191+
};

include/reactor-cpp/scops.hh

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,8 @@ public:
4343
explicit MutableScope(reactor::Reactor* reactor) : Scope(reactor), self_(reactor), env_(reactor->environment()) {}
4444
~MutableScope() = default;
4545

46-
void begin_transaction();
47-
void end_transaction();
48-
void mutate(const std::unique_ptr<Mutation>&& mutation);
46+
void commit_transaction();
47+
void add_to_transaction(Mutation* mutation);
4948

5049
};
5150

include/reactor-cpp/transaction.hh

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,24 @@ enum MutationResult {
2424

2525
class Mutation {
2626
public:
27+
virtual ~Mutation() = default;
2728
virtual auto run() -> MutationResult = 0 ;
28-
29+
virtual auto rollback() -> MutationResult = 0;
2930
};
3031

3132
template<class T>
3233
class MutationChangeMultiportSize : public Mutation {
3334
private:
3435
Multiport<T>* multiport_ = nullptr;
3536
std::size_t desired_size_ = 0;
37+
std::size_t size_before_application_ = 0;
3638
public:
3739
MutationChangeMultiportSize(Multiport<T>* multiport, std::size_t size);
38-
~MutationChangeMultiportSize() = default;
39-
void run() override;
40-
};
40+
~MutationChangeMultiportSize() override = default;
4141

42+
auto run() -> MutationResult override;
43+
auto rollback() -> MutationResult override;
44+
};
4245

4346
class Transaction {
4447
private:
@@ -47,9 +50,8 @@ private:
4750
std::vector<Mutation*> mutations_{};
4851

4952
public:
50-
void reset();
53+
void push_back(Mutation* mutation);
5154
auto execute() -> MutationResult;
52-
5355
};
5456
}
5557
#endif // REACTOR_CPP_TRANSACTION_HH

lib/transaction.cc

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,18 @@ reactor::MutationChangeMultiportSize<T>::MutationChangeMultiportSize(Multiport<T
88
}
99

1010
template<class T>
11-
void reactor::MutationChangeMultiportSize<T>::run() {
11+
auto reactor::MutationChangeMultiportSize<T>::run() -> MutationResult {
1212
multiport_->ports_.resize(desired_size_);
13+
14+
return Success;
15+
}
16+
17+
template <class T>
18+
auto reactor::MutationChangeMultiportSize<T>::rollback() -> MutationResult {
19+
return Success;
1320
}
1421

22+
1523
auto reactor::Transaction::execute() -> MutationResult {
1624
for (auto *mutation : mutations_) {
1725
mutation->run();
@@ -20,6 +28,6 @@ auto reactor::Transaction::execute() -> MutationResult {
2028
return Success;
2129
}
2230

23-
void reactor::Transaction::reset() {
24-
mutations_.clear();
31+
void reactor::Transaction::push_back(reactor::Mutation* mutation) {
32+
mutations_.push_back(mutation);
2533
}

0 commit comments

Comments
 (0)