#pragma once #include #include #include #include #include "infra/port.h" #include "infra/sim.h" namespace infra { template struct queue : public sim { port input; port *output = nullptr; std::deque elements; void clock() { if (input.can_read() && elements.size() < size) { auto x = input.read(); elements.emplace_back(std::move(x)); } if (output->can_write() && !elements.empty()) { auto &x = elements.front(); output->write(std::move(x)); elements.pop_front(); } } }; }