Line data Source code
1 : #include <chrono> 2 : #include <sstream> 3 : #include <string> 4 : #include <thread> 5 : 6 : #include "Module/Stateful/Iterator/Iterator.hpp" 7 : 8 : using namespace spu; 9 : using namespace spu::module; 10 : 11 52 : Iterator::Iterator(const size_t limit) 12 : : Stateful() 13 52 : , limit(limit) 14 52 : , counter(0) 15 : { 16 52 : const std::string name = "Iterator"; 17 52 : this->set_name(name); 18 52 : this->set_short_name(name); 19 52 : this->set_single_wave(true); 20 : 21 52 : auto& p1 = this->create_task("iterate"); 22 52 : const auto p1s_out = this->create_socket_out(p1, "out", 1, typeid(int8_t)); 23 52 : this->create_codelet(p1, 24 61454 : [p1s_out](Module& m, runtime::Task& t, const size_t frame_id) -> int 25 : { 26 61454 : auto& ite = static_cast<Iterator&>(m); 27 61454 : ite._iterate(t[p1s_out].get_dataptr<int8_t>(), frame_id); 28 61382 : return runtime::status_t::SUCCESS; 29 : }); 30 : 31 52 : auto& p2 = this->create_task("reset"); 32 52 : this->create_codelet(p2, 33 0 : [](Module& m, runtime::Task& /*t*/, const size_t /*frame_id*/) -> int 34 : { 35 0 : auto& ite = static_cast<Iterator&>(m); 36 0 : ite.reset(); 37 0 : return runtime::status_t::SUCCESS; 38 : }); 39 52 : } 40 : 41 : Iterator* 42 1856 : Iterator::clone() const 43 : { 44 1856 : auto m = new Iterator(*this); 45 1856 : m->deep_copy(*this); 46 1856 : return m; 47 : } 48 : 49 : size_t 50 33112100 : Iterator::get_limit() const 51 : { 52 33112100 : return this->limit; 53 : } 54 : 55 : void 56 0 : Iterator::set_limit(const size_t limit) 57 : { 58 0 : this->limit = limit; 59 0 : this->counter = this->counter % (this->limit + 1); 60 0 : } 61 : 62 : void 63 1590 : Iterator::reset() 64 : { 65 1590 : this->counter = 0; 66 1590 : } 67 : 68 : void 69 0 : Iterator::iterate(int8_t* out, const int frame_id, const bool managed_memory) 70 : { 71 0 : (*this)[ite::sck::iterate::out].bind(out); 72 0 : (*this)[ite::tsk::iterate].exec(frame_id, managed_memory); 73 0 : } 74 : 75 : void 76 61374 : Iterator::_iterate(int8_t* out, const size_t /*frame_id*/) 77 : { 78 61374 : size_t is_over_path = this->counter < this->limit ? 0 : 1; 79 61374 : this->counter++; 80 61374 : this->counter = this->counter % (this->limit + 1); 81 61374 : out[0] = is_over_path; 82 61374 : }