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;
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 &) {
return;
}

View File

@ -469,6 +469,7 @@ private:
std::queue<ErrorOr<UnfixVoid<T>>> storage;
public:
AdaptConveyorNode();
~AdaptConveyorNode();
void setFeeder(AdaptConveyorFeeder<T> *feeder);
@ -677,11 +678,14 @@ private:
ConveyorSinks *conveyor_sink;
public:
SinkConveyorNode(Own<ConveyorNode> &&node, ConveyorSinks &conv_sink)
: child(std::move(node)), conveyor_sink{&conv_sink} {}
SinkConveyorNode(ConveyorStorage *child_store, Own<ConveyorNode> node,
ConveyorSinks &conv_sink)
: ConveyorEventStorage{child_store}, child{std::move(node)},
conveyor_sink{&conv_sink} {}
SinkConveyorNode(Own<ConveyorNode> &&node)
: child(std::move(node)), conveyor_sink{nullptr} {}
SinkConveyorNode(ConveyorStorage *child_store, Own<ConveyorNode> node)
: ConveyorEventStorage{child_store}, child{std::move(node)},
conveyor_sink{nullptr} {}
// Event only queued if a critical error occured
void fire() override {
@ -788,7 +792,7 @@ private:
MergeConveyorNode *merger;
public:
Appendage(ConveyorStorage *child_str, Own<ConveyorNode> n,
Appendage(ConveyorStorage *child_store, Own<ConveyorNode> n,
MergeConveyorNode &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 <typename ErrorFunc>
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 =
static_cast<ConveyorStorage *>(sink_node.get());
if (storage) {
@ -284,6 +285,9 @@ template <typename T> size_t AdaptConveyorFeeder<T>::space() const {
return 0;
}
template <typename T>
AdaptConveyorNode<T>::AdaptConveyorNode() : ConveyorEventStorage{nullptr} {}
template <typename T> AdaptConveyorNode<T>::~AdaptConveyorNode() {
if (feeder) {
feeder->setFeedee(nullptr);