MCPcopy Create free account
hub / github.com/ERGO-Code/HiGHS / parse

Method parse

highs/io/HMpsFF.cpp:246–354  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

244}
245
246FreeFormatParserReturnCode HMpsFF::parse(const HighsLogOptions& log_options,
247 const std::string& filename) {
248 HMpsFF::Parsekey keyword = HMpsFF::Parsekey::kNone;
249
250 highsLogDev(log_options, HighsLogType::kInfo,
251 "readMPS: Trying to open file %s\n", filename.c_str());
252#ifdef ZLIB_FOUND
253 zstr::ifstream f;
254 try {
255 f.open(filename.c_str(), std::ios::in);
256 } catch (const strict_fstream::Exception& e) {
257 highsLogDev(log_options, HighsLogType::kInfo, e.what());
258 return FreeFormatParserReturnCode::kFileNotFound;
259 }
260#else
261 std::ifstream f;
262 f.open(filename.c_str(), std::ios::in);
263#endif
264 if (f.is_open()) {
265 start_time = getWallTime();
266 num_row = 0;
267 num_col = 0;
268 num_nz = 0;
269 cost_row_location = -1;
270 // Indicate that no duplicate rows or columns have been found
271 has_duplicate_row_name_ = false;
272 has_duplicate_col_name_ = false;
273 // parsing loop
274 while (keyword != HMpsFF::Parsekey::kFail &&
275 keyword != HMpsFF::Parsekey::kEnd &&
276 keyword != HMpsFF::Parsekey::kTimeout) {
277 if (cannotParseSection(log_options, keyword)) {
278 f.close();
279 return FreeFormatParserReturnCode::kParserError;
280 }
281 switch (keyword) {
282 case HMpsFF::Parsekey::kObjsense:
283 keyword = parseObjsense(log_options, f);
284 break;
285 case HMpsFF::Parsekey::kRows:
286 keyword = parseRows(log_options, f);
287 break;
288 case HMpsFF::Parsekey::kCols:
289 keyword = parseCols(log_options, f);
290 break;
291 case HMpsFF::Parsekey::kRhs:
292 keyword = parseRhs(log_options, f);
293 break;
294 case HMpsFF::Parsekey::kBounds:
295 keyword = parseBounds(log_options, f);
296 break;
297 case HMpsFF::Parsekey::kRanges:
298 keyword = parseRanges(log_options, f);
299 break;
300 case HMpsFF::Parsekey::kQmatrix:
301 case HMpsFF::Parsekey::kQuadobj:
302 keyword = parseHessian(log_options, f, keyword);
303 break;

Callers 1

mainFunction · 0.45

Calls 8

highsLogDevFunction · 0.85
c_strMethod · 0.80
getWallTimeFunction · 0.70
openMethod · 0.45
whatMethod · 0.45
is_openMethod · 0.45
closeMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected