added proper constructors for ConveyorStorage children

This commit is contained in:
keldu.magnus 2021-09-29 17:46:02 +02:00
parent 259710afd5
commit c60157ed89
3 changed files with 16 additions and 7 deletions

View File

@ -290,7 +290,8 @@ void ConveyorSinks::add(Conveyor<void> &&sink) {
Own<SinkConveyorNode> sink_node = nullptr; Own<SinkConveyorNode> sink_node = nullptr;
try { try {
sink_node = heap<SinkConveyorNode>(std::move(nas.first), *this); sink_node =
heap<SinkConveyorNode>(nas.second, std::move(nas.first), *this);
} catch (std::bad_alloc &) { } catch (std::bad_alloc &) {
return; return;
} }

View File

@ -469,6 +469,7 @@ private:
std::queue<ErrorOr<UnfixVoid<T>>> storage; std::queue<ErrorOr<UnfixVoid<T>>> storage;
public: public:
AdaptConveyorNode();
~AdaptConveyorNode(); ~AdaptConveyorNode();
void setFeeder(AdaptConveyorFeeder<T> *feeder); void setFeeder(AdaptConveyorFeeder<T> *feeder);
@ -677,11 +678,14 @@ private:
ConveyorSinks *conveyor_sink; ConveyorSinks *conveyor_sink;
public: public:
SinkConveyorNode(Own<ConveyorNode> &&node, ConveyorSinks &conv_sink) SinkConveyorNode(ConveyorStorage *child_store, Own<ConveyorNode> node,
: child(std::move(node)), conveyor_sink{&conv_sink} {} ConveyorSinks &conv_sink)
: ConveyorEventStorage{child_store}, child{std::move(node)},
conveyor_sink{&conv_sink} {}
SinkConveyorNode(Own<ConveyorNode> &&node) SinkConveyorNode(ConveyorStorage *child_store, Own<ConveyorNode> node)
: child(std::move(node)), conveyor_sink{nullptr} {} : ConveyorEventStorage{child_store}, child{std::move(node)},
conveyor_sink{nullptr} {}
// Event only queued if a critical error occured // Event only queued if a critical error occured
void fire() override { void fire() override {
@ -788,7 +792,7 @@ private:
MergeConveyorNode *merger; MergeConveyorNode *merger;
public: public:
Appendage(ConveyorStorage *child_str, Own<ConveyorNode> n, Appendage(ConveyorStorage *child_store, Own<ConveyorNode> n,
MergeConveyorNode &m) MergeConveyorNode &m)
: ConveyorStorage{child_store}, child{std::move(n)}, merger{&m} {} : ConveyorStorage{child_store}, child{std::move(n)}, merger{&m} {}

View File

@ -84,7 +84,8 @@ std::pair<Conveyor<T>, MergeConveyor<T>> Conveyor<T>::merge() {
template <> template <>
template <typename ErrorFunc> template <typename ErrorFunc>
SinkConveyor Conveyor<void>::sink(ErrorFunc &&error_func) { SinkConveyor Conveyor<void>::sink(ErrorFunc &&error_func) {
Own<SinkConveyorNode> sink_node = heap<SinkConveyorNode>(std::move(node)); Own<SinkConveyorNode> sink_node =
heap<SinkConveyorNode>(storage, std::move(node));
ConveyorStorage *storage_ptr = ConveyorStorage *storage_ptr =
static_cast<ConveyorStorage *>(sink_node.get()); static_cast<ConveyorStorage *>(sink_node.get());
if (storage) { if (storage) {
@ -284,6 +285,9 @@ template <typename T> size_t AdaptConveyorFeeder<T>::space() const {
return 0; return 0;
} }
template <typename T>
AdaptConveyorNode<T>::AdaptConveyorNode() : ConveyorEventStorage{nullptr} {}
template <typename T> AdaptConveyorNode<T>::~AdaptConveyorNode() { template <typename T> AdaptConveyorNode<T>::~AdaptConveyorNode() {
if (feeder) { if (feeder) {
feeder->setFeedee(nullptr); feeder->setFeedee(nullptr);