/* * Machine.cpp * */ #include #include "GC/Program.h" #include "Secret.h" #include "ReplicatedSecret.h" #include "ThreadMaster.h" #include "Yao/YaoGarbleWire.h" #include "Yao/YaoEvalWire.h" namespace GC { template Machine::Machine(Memory& dynamic_memory) : MD(dynamic_memory) { start_timer(); } template Machine::~Machine() { for (auto it = timer.begin(); it != timer.end(); it++) cerr << T::phase_name() << " timer " << it->first << " at end: " << it->second.elapsed() << " seconds" << endl; } template void Machine::load_program(string threadname, string filename) { (void)threadname; progs.push_back({}); progs.back().parse_file(filename); reset(progs.back()); } template void Machine::load_schedule(string progname) { BaseMachine::load_schedule(progname); for (auto i : {1, 0, 0}) { int n; inpf >> n; if (n != i) throw runtime_error("old schedule format not supported"); } print_compiler(); } template void Machine::reset(const Program& program) { MS.resize_min(program.direct_mem(SBIT), "memory"); MC.resize_min(program.direct_mem(CBIT), "memory"); MI.resize_min(program.direct_mem(INT), "memory"); MD.resize_min(program.direct_mem(DYN_SBIT), "dynamic memory"); } template void Machine::run_tape(int thread_number, int tape_number, int arg) { ThreadMaster::s().run_tape(thread_number, tape_number, arg); } template void Machine::join_tape(int thread_number) { ThreadMaster::s().join_tape(thread_number); } template class Machine; template class Machine; } /* namespace GC */