#include #include #include #include "aisa/aisa.h" #include "git-tag.h" int main(int argc, const char *argv[]) { std::cout << "Version " << GIT_TAG << "\n"; aisa::Step step; const_cast> &>(step.predicate) = std::optional(std::make_pair(123, 456)); const_cast &>(step.source_regs).emplace_back(12); const_cast &>(step.source_regs).emplace_back(34); const_cast &>(step.source_regs).emplace_back(56); struct State : public aisa::EvalState { std::map regs; std::optional load_reg(aisa::regnum_t rn) { std::cout << "state.load_reg(" << rn << ") = "; if (auto x = regs.find(rn); x != regs.end()) { std::cout << x->second << "\n"; return x->second; } std::cout << "(not available)\n"; return {}; } } state; auto t = state.async_load_reg(999); t(); t(); t(); std::cout << "set regs[999] = 54321\n"; state.regs[999] = 54321; std::optional result; while (!result.has_value()) result = t(); std::cout << "result = " << *result << "\n"; std::cout << "\n\n\n"; auto w = step.evaluate(state); w(); w(); w(); std::cout << "set predicate (valid)\n"; state.regs[step.predicate->first] = step.predicate->second; w(); w(); w(); std::cout << "set regs (all)\n"; for (int i = 10; i < 100; ++i) state.regs[i] = 1000 + i; for (bool done = false; !done; done = w()) ; std::cout << "huzzah!\n"; return 0; }