@@ -33,54 +33,57 @@ template <class PortType, class ReactorType> class ResizeMultiportToBank : publi
3333 std::size_t new_size_ = 0 ;
3434
3535public:
36- ResizeMultiportToBank (ModifableMultiport<Output<PortType>>* multiport,
36+ ResizeMultiportToBank (Reaction* reaction, ModifableMultiport<Output<PortType>>* multiport,
3737 std::vector<std::unique_ptr<ReactorType>>* bank,
3838 std::function<Input<PortType>*(const std::unique_ptr<ReactorType>&)> get_input_port,
3939 std::function<std::unique_ptr<ReactorType>(Environment* env, std::size_t index)> create_lambda,
4040 std::size_t new_size)
41- : multiport_(multiport)
41+ : Mutation(reaction)
42+ , multiport_(multiport)
4243 , bank_(bank)
4344 , get_input_port_(get_input_port)
4445 , create_lambda_(create_lambda)
4546 , new_size_(new_size) {}
4647
4748 ~ResizeMultiportToBank () = default ;
48- auto run () -> MutationResult {
49+ auto run () -> MutationResult override {
4950 if (multiport_->size () != bank_->size ()) {
5051 return NotMatchingBankSize;
5152 }
5253 auto old_size = multiport_->size ();
5354
5455 if (new_size_ > old_size) {
55- auto change_multiport_size = std::make_shared<MutationChangeOutputMultiportSize<unsigned >>(multiport_, new_size_);
56+ auto change_multiport_size =
57+ std::make_shared<MutationChangeOutputMultiportSize<unsigned >>(reaction_, multiport_, new_size_);
5658
5759 change_multiport_size->run ();
5860
5961 auto change_bank_size = std::make_shared<MutationChangeBankSize<std::unique_ptr<ReactorType>>>(
60- bank_, (* bank_)[ 0 ]-> environment () , new_size_, create_lambda_);
62+ reaction_, bank_, new_size_, create_lambda_);
6163
6264 change_bank_size->run ();
6365
6466 for (auto i = old_size; i < new_size_; i++) {
6567 auto add_conn = std::make_shared<MutationAddConnection<Output<PortType>, Input<PortType>>>(
66- &(*multiport_)[i], get_input_port_ ((*bank_)[i]), (*bank_)[ 0 ]-> environment ( ), true );
68+ reaction_, &(*multiport_)[i], get_input_port_ ((*bank_)[i]), true );
6769
6870 add_conn->run ();
6971 }
7072 } else if (new_size_ < old_size) {
7173 for (auto i = old_size - 1 ; i >= new_size_; i--) {
7274 auto add_conn = std::make_shared<MutationAddConnection<Output<PortType>, Input<PortType>>>(
73- &(*multiport_)[i], get_input_port_ ((*bank_)[i]), (*bank_)[ 0 ]-> environment ( ), false );
75+ reaction_, &(*multiport_)[i], get_input_port_ ((*bank_)[i]), false );
7476
7577 add_conn->run ();
7678 }
7779
78- auto change_multiport_size = std::make_shared<MutationChangeOutputMultiportSize<unsigned >>(multiport_, new_size_);
80+ auto change_multiport_size =
81+ std::make_shared<MutationChangeOutputMultiportSize<unsigned >>(reaction_, multiport_, new_size_);
7982
8083 change_multiport_size->run ();
8184
8285 auto change_bank_size = std::make_shared<MutationChangeBankSize<std::unique_ptr<ReactorType>>>(
83- bank_, (* bank_)[ 0 ]-> environment () , new_size_, create_lambda_);
86+ reaction_, bank_, new_size_, create_lambda_);
8487
8588 change_bank_size->run ();
8689 }
0 commit comments