fixing storage merge nodes
This commit is contained in:
parent
622e6c4a7a
commit
23982922d4
|
@ -811,6 +811,8 @@ private:
|
|||
return false;
|
||||
}
|
||||
|
||||
void getAppendageResult(ErrorOrValue &eov);
|
||||
|
||||
size_t space() const override;
|
||||
|
||||
size_t queued() const override;
|
||||
|
@ -826,6 +828,7 @@ private:
|
|||
friend class Appendage;
|
||||
|
||||
Our<MergeConveyorNodeData<T>> data;
|
||||
size_t next_appendage = 0;
|
||||
|
||||
public:
|
||||
MergeConveyorNode(Our<MergeConveyorNodeData<T>> data);
|
||||
|
@ -848,8 +851,6 @@ template <typename T> class MergeConveyorNodeData {
|
|||
public:
|
||||
std::vector<Own<typename MergeConveyorNode<T>::Appendage>> appendages;
|
||||
|
||||
size_t next_appendage = 0;
|
||||
|
||||
MergeConveyorNode<T> *merger = nullptr;
|
||||
|
||||
public:
|
||||
|
|
|
@ -270,20 +270,20 @@ MergeConveyorNode<T>::MergeConveyorNode(Our<MergeConveyorNodeData<T>> d)
|
|||
template <typename T> MergeConveyorNode<T>::~MergeConveyorNode() {}
|
||||
|
||||
template <typename T> void MergeConveyorNode<T>::getResult(ErrorOrValue &eov) {
|
||||
ErrorOr<T> &err_or_val = eov.as<T>();
|
||||
ErrorOr<FixVoid<T>> &err_or_val = eov.as<FixVoid<T>>();
|
||||
|
||||
if (error_or_value.has_value()) {
|
||||
err_or_val = std::move(error_or_value.value());
|
||||
error_or_value = std::nullopt;
|
||||
} else {
|
||||
error_or_value = criticalError("No value in MergeConveyorNode");
|
||||
}
|
||||
GIN_ASSERT(data) { return; }
|
||||
|
||||
GIN_ASSERT(data){
|
||||
return;
|
||||
}
|
||||
|
||||
/// @todo search appendages for result
|
||||
|
||||
auto &appendages = data->appendages;
|
||||
next_appendage = std::min(appendages.size(), next_appendage);
|
||||
|
||||
for (size_t i = next_appendage; i < appendages.size(); ++i) {
|
||||
if (appendages[i]->queued()) {
|
||||
err_or_val = std::move(appendages
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T> void MergeConveyorNode<T>::fire() {
|
||||
|
@ -342,6 +342,19 @@ template <typename T> size_t MergeConveyorNode<T>::Appendage::queued() const {
|
|||
return 0;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void MergeConveyorNode<T>::Appendage::getAppendageResult(ErrorOrValue &eov) {
|
||||
ErrorOr<FixVoid<T>> &eov = eov.as<FixVoid<T>>();
|
||||
|
||||
GIN_ASSERT(queued() > 0) {
|
||||
eov = criticalError("No element queued in Merge Appendage Node");
|
||||
return;
|
||||
}
|
||||
|
||||
eov = std::move(error_or_value.value());
|
||||
error_or_value = std::nullopt;
|
||||
}
|
||||
|
||||
template <typename T> void MergeConveyorNode<T>::Appendage::childHasFired() {
|
||||
GIN_ASSERT(!error_or_value.has_value()) { return; }
|
||||
ErrorOr<FixVoid<T>> eov;
|
||||
|
|
Loading…
Reference in New Issue