#include "pipeline.hpp" #include #include "stream_info.hpp" namespace audio { Pipeline::Pipeline(IAudioElement* output) : root_(output), subtrees_() { assert(output != nullptr); } Pipeline::~Pipeline() {} auto Pipeline::AddInput(IAudioElement* input) -> Pipeline* { subtrees_.push_back(std::make_unique(input)); return subtrees_.back().get(); } auto Pipeline::OutputElement() const -> IAudioElement* { return root_; } auto Pipeline::NumInputs() const -> std::size_t { return subtrees_.size(); } auto Pipeline::InStreams( std::vector>* regions, std::vector* out) -> void { for (int i = 0; i < subtrees_.size(); i++) { RawStream s = subtrees_[i]->OutStream(®ions->at(i)); out->push_back(s); } } auto Pipeline::OutStream(MappableRegion* region) -> RawStream { return {&output_info_, region->Map(output_buffer_)}; } auto Pipeline::GetIterationOrder() -> std::vector { std::vector to_search{this}; std::vector found; while (!to_search.empty()) { Pipeline* current = to_search.back(); to_search.pop_back(); found.push_back(current); for (const auto& i : current->subtrees_) { to_search.push_back(i.get()); } } return found; } } // namespace audio