void RegisterArray::reset_state() { // we build a new vector of registers, then swap, to avoid holding the lock // for too long std::vector<Register> registers_new; size_t s = size(); // TODO(antonin): is this actually better than // std::vector<Register> registers_new(size, Register(bitwidth)); ? registers_new.reserve(s); for (size_t i = 0; i < s; i++) registers_new.emplace_back(bitwidth, this); auto lock = UniqueLock(); registers.swap(registers_new); }
void LoadBehavior(void* arg, const char* fileName) { MaterialMonitorSim* materialMonitorSim = (MaterialMonitorSim*)arg; UniqueLock(materialMonitorSim->GetMutex()); string path(SIMULATOR_FOLDER); path.append(1, PATH_SEPARATOR); path.append(BEHAVIORS_FOLDER); path.append(1, PATH_SEPARATOR); path.append(fileName); Behavior* behavior = BehaviorParser::ParseBehavior(path.c_str()); materialMonitorSim->SetBehavior(behavior); if (behavior != NULL) { LOG_EXT(LEVEL_INFO, "Behavior '" << fileName << "' was loaded."); } else { LOG_EXT(LEVEL_WARN, "Error loading behavior '" << fileName << "': invalid file."); } }