bool threadpool_spec::init(configuration_ptr& config, __out_param std::vector<threadpool_spec>& specs) { /* [threadpool.default] worker_count = 4 worker_priority = THREAD_xPRIORITY_NORMAL max_input_queue_length = 10000 partitioned = false queue_aspects = xxx worker_aspects = xxx admission_controller_factory_name = xxx admission_controller_arguments = xxx [threadpool.THREAD_POOL_REPLICATION] name = Thr.replication run = true worker_count = 4 worker_priority = THREAD_xPRIORITY_NORMAL max_input_queue_length = 10000 partitioned = false queue_aspects = xxx worker_aspects = xxx admission_controller_factory_name = xxx admission_controller_arguments = xxx */ threadpool_spec default_spec("placeholder"); if (false == read_config(config, "threadpool.default", default_spec, nullptr)) return false; specs.clear(); for (int code = 0; code <= threadpool_code::max_value(); code++) { std::string section_name = std::string("threadpool.") + std::string(threadpool_code::to_string(code)); threadpool_spec spec(default_spec); if (false == read_config(config, section_name.c_str(), spec, &default_spec)) return false; spec.pool_code.reset(threadpool_code::from_string(threadpool_code::to_string(code), THREAD_POOL_INVALID)); if ("" == spec.name) spec.name = std::string(threadpool_code::to_string(code)); if (false == spec.worker_share_core && 0 == spec.worker_affinity_mask) { spec.worker_affinity_mask = (1 << std::thread::hardware_concurrency()) - 1; } specs.push_back(spec); } return true; }
void Parser::decl() { if (lookahead[2] == ':') { match("ID"); match("INT"); default_spec(); return; } if (lookahead == "PRIMARY") { match("PRIMARY"); match("KEY"); match("("); column_list(); match(")"); } }
Parser &decl(map<string, int> &defaults, vector<string> &keys) { if (lookahead == ID) { // decl -> id INT default_spec string name = id(); match(INT); int num = default_spec(defaults); defaults[name] = num; } else if (lookahead == PRIMARY) { // decl -> PRIMARY KEY L_PAREN column_list R_PAREN match(PRIMARY); match(KEY); match(L_PAREN); column_list(keys); match(R_PAREN); } else { throw ParseError("Syntax error"); } }