/** problem reading method of reader */ static SCIP_DECL_READERREAD(readerReadFix) { /*lint --e{715}*/ assert(reader != NULL); assert(strcmp(SCIPreaderGetName(reader), READER_NAME) == 0); assert(result != NULL); *result = SCIP_DIDNOTRUN; if( SCIPgetStage(scip) < SCIP_STAGE_PROBLEM ) { SCIPerrorMessage("reading of fixing file is only possible after a problem was created\n"); return SCIP_READERROR; } /* free transformed problem, s.t. fixings are applied to the original problem */ SCIP_CALL( SCIPfreeTransform(scip) ); /* read (partial) solution from fixing file */ SCIP_CALL( readSol(scip, filename) ); *result = SCIP_SUCCESS; return SCIP_OKAY; }
/** reads a diff file */ static SCIP_RETCODE readDiffFile( SCIP* scip, /**< SCIP data structure */ LPINPUT* lpinput, /**< LP reading data */ const char* filename /**< name of the input file */ ) { assert(lpinput != NULL); /* open file */ lpinput->file = SCIPfopen(filename, "r"); if( lpinput->file == NULL ) { SCIPerrorMessage("cannot open file <%s> for reading\n", filename); SCIPprintSysError(filename); return SCIP_NOFILE; } /* free transformed problem */ if( SCIPgetStage(scip) >= SCIP_STAGE_PROBLEM ) { SCIP_CALL( SCIPfreeTransform(scip) ); } /* parse the file */ lpinput->section = LP_START; while( lpinput->section != LP_END && !hasError(lpinput) ) { switch( lpinput->section ) { case LP_START: SCIP_CALL( readStart(scip, lpinput) ); break; case LP_OBJECTIVE: SCIP_CALL( readObjective(scip, lpinput) ); break; case LP_END: /* this is already handled in the while() loop */ default: SCIPerrorMessage("invalid Diff file section <%d>\n", lpinput->section); return SCIP_INVALIDDATA; } } /* close file */ SCIPfclose(lpinput->file); return SCIP_OKAY; }