// (C) 2018 University of Bristol. See License.txt /* * Machine.h * */ #ifndef MACHINE_H_ #define MACHINE_H_ #include "Processor/Memory.h" #include "Processor/Program.h" #include "Processor/Online-Thread.h" #include "Processor/Data_Files.h" #include "Math/gfp.h" #include "Tools/time-func.h" #include #include using namespace std; class BaseMachine { protected: std::map timer; void print_timers(); public: void time(); void start(int n); void stop(int n); }; class Machine : public BaseMachine { /* The mutex's lock the C-threads and then only release * then we an MPC thread is ready to run on the C-thread. * Control is passed back to the main loop when the * MPC thread releases the mutex */ vector tinfo; vector threads; int my_number; Names& N; gfp alphapi; gf2n alpha2i; int nthreads; ifstream inpf; // Keep record of used offline data DataPositions pos; int tn,numt; bool usage_unknown; public: vector t_mutex; vector client_ready; vector server_ready; vector progs; Memory M2; Memory Mp; Memory Mi; vector join_timer; Timer finish_timer; string prep_dir_prefix; string progname; bool direct; int opening_sum; bool parallel; bool receive_threads; int max_broadcast; Machine(int my_number, Names& playerNames, string progname, string memtype, int lgp, int lg2, bool direct, int opening_sum, bool parallel, bool receive_threads, int max_broadcast); DataPositions run_tape(int thread_number, int tape_number, int arg, int line_number); void join_tape(int thread_number); void run(); }; #endif /* MACHINE_H_ */