+// Note: Limits are inclusive.
+int fetch_config_int(const vector<ConfigLine> &config, const string &keyword, int min_limit, int max_limit)
+{
+ bool value_found = false;
+ int value = -1;
+ for (unsigned i = 0; i < config.size(); ++i) {
+ if (config[i].keyword != keyword) {
+ continue;
+ }
+ if (config[i].parameters.size() > 0 ||
+ config[i].arguments.size() != 1) {
+ fprintf(stderr, "ERROR: '%s' takes one argument and no parameters\n", keyword.c_str());
+ exit(1);
+ }
+ value_found = true;
+ value = atoi(config[i].arguments[0].c_str()); // TODO: verify int validity.
+ }
+ if (!value_found) {
+ fprintf(stderr, "ERROR: Missing '%s' statement in config file.\n",
+ keyword.c_str());
+ exit(1);
+ }
+ if (value < min_limit || value > max_limit) {
+ fprintf(stderr, "ERROR: '%s' is set to %d, must be in [%d,%d]\n",
+ keyword.c_str(), value, min_limit, max_limit);
+ exit(1);
+ }
+ return value;
+}
+