#ifndef jB1MwurMlfU1OJE1w1IE29RFf9I #define jB1MwurMlfU1OJE1w1IE29RFf9I #include "event.hpp" #include "index.hpp" #include "pointers.hpp" #include "quant_types.hpp" #include "rng.hpp" #include "time.hpp" namespace TrainerImpl { struct TrainerT; template struct Update; struct TrainerT { explicit TrainerT(RNG::seed_t seed = RNG::seed_t(0)); template TrainerT update(PC &pc, MI &indices, MQ &queues, Time t) const { return Update::eval(*this, pc, indices, queues, t); } RNG::seed_t rng; Time::type delay; double reward, performance; uint64_t generation, input, output; uint32_t state, resetCounter; }; } // NS using TrainerImpl::TrainerT; namespace std { ostream& operator<< (ostream &os, TrainerT val) { return os << "Trainer(" << val.generation << ", " << val.state << ", " << val.input << ", " << val.output << ")"; } } #endif // jB1MwurMlfU1OJE1w1IE29RFf9I