DIFF file reader.
Definition in file reader_diff.c.
#include <stdlib.h>#include <assert.h>#include <string.h>#include <strings.h>#include <ctype.h>#include "scip/reader_diff.h"Go to the source code of this file.
Macros | |
| #define | READER_NAME "diffreader" |
| #define | READER_DESC "file reader for changes in the LP file" |
| #define | READER_EXTENSION "diff" |
| #define | LP_MAX_LINELEN 65536 |
| #define | LP_MAX_PUSHEDTOKENS 2 |
| #define | LP_INIT_COEFSSIZE 8192 |
Typedefs | |
| typedef enum LpSection | LPSECTION |
| typedef enum LpExpType | LPEXPTYPE |
| typedef enum LpSense | LPSENSE |
| typedef struct LpInput | LPINPUT |
Enumerations | |
| enum | LpSection { LP_START, LP_OBJECTIVE, LP_END, LP_START, LP_OBJECTIVE, LP_CONSTRAINTS, LP_BOUNDS, LP_GENERALS, LP_BINARIES, LP_SEMICONTINUOUS, LP_SOS, LP_END } |
| enum | LpExpType { LP_EXP_NONE, LP_EXP_UNSIGNED, LP_EXP_SIGNED, LP_EXP_NONE, LP_EXP_UNSIGNED, LP_EXP_SIGNED } |
| enum | LpSense { LP_SENSE_LE, LP_SENSE_GE, LP_SENSE_EQ, LP_SENSE_NOTHING, LP_SENSE_LE, LP_SENSE_GE, LP_SENSE_EQ } |
Functions | |
| static void | syntaxError (SCIP *scip, LPINPUT *lpinput, const char *msg) |
| static SCIP_Bool | hasError (LPINPUT *lpinput) |
| static SCIP_Bool | isDelimChar (char c) |
| static SCIP_Bool | isTokenChar (char c) |
| static SCIP_Bool | isValueChar (char c, char nextc, SCIP_Bool firstchar, SCIP_Bool *hasdot, LPEXPTYPE *exptype) |
| static SCIP_Bool | getNextLine (SCIP *scip, LPINPUT *lpinput) |
| static void | swapPointers (char **pointer1, char **pointer2) |
| static SCIP_Bool | getNextToken (SCIP *scip, LPINPUT *lpinput) |
| static void | pushToken (LPINPUT *lpinput) |
| static void | pushBufferToken (LPINPUT *lpinput) |
| static void | swapTokenBuffer (LPINPUT *lpinput) |
| static SCIP_Bool | isNewSection (SCIP *scip, LPINPUT *lpinput) |
| static SCIP_Bool | isSign (LPINPUT *lpinput, int *sign) |
| static SCIP_Bool | isValue (SCIP *scip, LPINPUT *lpinput, SCIP_Real *value) |
| static SCIP_Bool | isSense (LPINPUT *lpinput, LPSENSE *sense) |
| static SCIP_RETCODE | getVariable (SCIP *scip, char *name, SCIP_VAR **var) |
| static SCIP_RETCODE | readStart (SCIP *scip, LPINPUT *lpinput) |
| static SCIP_RETCODE | readCoefficients (SCIP *scip, LPINPUT *lpinput, SCIP_Bool isobjective, char *name, int *coefssize, SCIP_VAR ***vars, SCIP_Real **coefs, int *ncoefs, SCIP_Bool *newsection) |
| static SCIP_RETCODE | readObjective (SCIP *scip, LPINPUT *lpinput) |
| static SCIP_RETCODE | readDiffFile (SCIP *scip, LPINPUT *lpinput, const char *filename) |
| static | SCIP_DECL_READERCOPY (readerCopyDiff) |
| static | SCIP_DECL_READERFREE (readerFreeDiff) |
| static | SCIP_DECL_READERREAD (readerReadDiff) |
| SCIP_RETCODE | SCIPincludeReaderDiff (SCIP *scip) |
| SCIP_RETCODE | SCIPreadDiff (SCIP *scip, SCIP_READER *reader, const char *filename, SCIP_RESULT *result) |
Variables | |
| static const char | commentchars [] = "\\" |
| #define READER_NAME "diffreader" |
Definition at line 34 of file reader_diff.c.
Referenced by SCIP_DECL_READERCOPY(), and SCIPincludeReaderDiff().
| #define READER_DESC "file reader for changes in the LP file" |
Definition at line 35 of file reader_diff.c.
Referenced by SCIPincludeReaderDiff().
| #define READER_EXTENSION "diff" |
Definition at line 36 of file reader_diff.c.
Referenced by SCIPincludeReaderDiff().
| #define LP_MAX_LINELEN 65536 |
Definition at line 41 of file reader_diff.c.
Referenced by getNextLine(), getNextToken(), isNewSection(), readCoefficients(), readObjective(), and SCIPreadDiff().
| #define LP_MAX_PUSHEDTOKENS 2 |
Definition at line 42 of file reader_diff.c.
Referenced by pushBufferToken(), pushToken(), and SCIPreadDiff().
| #define LP_INIT_COEFSSIZE 8192 |
Definition at line 43 of file reader_diff.c.
Referenced by readCoefficients().
Definition at line 50 of file reader_diff.c.
Definition at line 56 of file reader_diff.c.
Definition at line 62 of file reader_diff.c.
| typedef struct LpInput LPINPUT |
Definition at line 83 of file reader_diff.c.
| enum LpSection |
Section in LP File
| Enumerator | |
|---|---|
| LP_START | |
| LP_OBJECTIVE | |
| LP_END | |
| LP_START | |
| LP_OBJECTIVE | |
| LP_CONSTRAINTS | |
| LP_BOUNDS | |
| LP_GENERALS | |
| LP_BINARIES | |
| LP_SEMICONTINUOUS | |
| LP_SOS | |
| LP_END | |
Definition at line 46 of file reader_diff.c.
| enum LpExpType |
| Enumerator | |
|---|---|
| LP_EXP_NONE | |
| LP_EXP_UNSIGNED | |
| LP_EXP_SIGNED | |
| LP_EXP_NONE | |
| LP_EXP_UNSIGNED | |
| LP_EXP_SIGNED | |
Definition at line 52 of file reader_diff.c.
| enum LpSense |
| Enumerator | |
|---|---|
| LP_SENSE_LE | |
| LP_SENSE_GE | |
| LP_SENSE_EQ | |
| LP_SENSE_NOTHING | |
| LP_SENSE_LE | |
| LP_SENSE_GE | |
| LP_SENSE_EQ | |
Definition at line 58 of file reader_diff.c.
issues an error message and marks the LP data to have errors
| scip | SCIP data structure |
| lpinput | LP reading data |
| msg | error message |
Definition at line 94 of file reader_diff.c.
References LP_END, SCIP_VERBLEVEL_MINIMAL, SCIPerrorMessage, SCIPsnprintf(), SCIPverbMessage(), and TRUE.
Referenced by readCoefficients().
returns whether a syntax error was detected
| lpinput | LP reading data |
Definition at line 121 of file reader_diff.c.
Referenced by readDiffFile().
|
static |
returns whether the given character is a token delimiter
| c | input character |
Definition at line 132 of file reader_diff.c.
Referenced by getNextToken().
|
static |
returns whether the given character is a single token
| c | input character |
Definition at line 153 of file reader_diff.c.
Referenced by getNextToken().
|
static |
returns whether the current character is member of a value string
| c | input character |
| nextc | next input character |
| firstchar | is the given character the first char of the token? |
| hasdot | pointer to update the dot flag |
| exptype | pointer to update the exponent type |
Definition at line 177 of file reader_diff.c.
References FALSE, LP_EXP_NONE, LP_EXP_SIGNED, LP_EXP_UNSIGNED, and TRUE.
Referenced by getNextToken().
reads the next line from the input file into the line buffer; skips comments; returns whether a line could be read
| scip | SCIP data structure |
| lpinput | LP reading data |
Definition at line 221 of file reader_diff.c.
References BMSclearMemoryArray, commentchars, FALSE, LP_MAX_LINELEN, SCIPdebugMsg, SCIPfgets(), SCIPfseek(), SCIPwarningMessage(), and TRUE.
Referenced by getNextToken().
|
static |
swaps the addresses of two pointers
| pointer1 | first pointer |
| pointer2 | second pointer |
Definition at line 312 of file reader_diff.c.
Referenced by getNextToken(), pushBufferToken(), pushToken(), and swapTokenBuffer().
reads the next token from the input file into the token buffer; returns whether a token was read
| scip | SCIP data structure |
| lpinput | LP reading data |
Definition at line 326 of file reader_diff.c.
References FALSE, getNextLine(), isDelimChar(), isTokenChar(), isValueChar(), LP_END, LP_EXP_NONE, LP_MAX_LINELEN, SCIP_Bool, SCIPdebugMsg, swapPointers(), and TRUE.
Referenced by isNewSection(), readCoefficients(), and readStart().
|
static |
puts the current token on the token stack, such that it is read at the next call to getNextToken()
| lpinput | LP reading data |
Definition at line 431 of file reader_diff.c.
References LP_MAX_PUSHEDTOKENS, and swapPointers().
Referenced by isNewSection(), and readCoefficients().
|
static |
puts the buffered token on the token stack, such that it is read at the next call to getNextToken()
| lpinput | LP reading data |
Definition at line 444 of file reader_diff.c.
References LP_MAX_PUSHEDTOKENS, and swapPointers().
Referenced by readCoefficients().
|
static |
swaps the current token with the token buffer
| lpinput | LP reading data |
Definition at line 457 of file reader_diff.c.
References swapPointers().
Referenced by isNewSection(), and readCoefficients().
checks whether the current token is a section identifier, and if yes, switches to the corresponding section
| scip | SCIP data structure |
| lpinput | LP reading data |
Definition at line 468 of file reader_diff.c.
References FALSE, getNextToken(), LP_END, LP_MAX_LINELEN, LP_OBJECTIVE, pushToken(), SCIP_Bool, SCIP_OBJSENSE_MAXIMIZE, SCIP_OBJSENSE_MINIMIZE, SCIPdebugMsg, swapTokenBuffer(), and TRUE.
Referenced by readCoefficients(), and readStart().
returns whether the current token is a sign
| lpinput | LP reading data |
| sign | pointer to update the sign |
Definition at line 546 of file reader_diff.c.
Referenced by readCoefficients().
returns whether the current token is a value
| scip | SCIP data structure |
| lpinput | LP reading data |
| value | pointer to store the value (unchanged, if token is no value) |
Definition at line 571 of file reader_diff.c.
References FALSE, SCIPinfinity(), and TRUE.
Referenced by readCoefficients().
returns whether the current token is an equation sense
| lpinput | LP reading data |
| sense | pointer to store the equation sense, or NULL |
Definition at line 603 of file reader_diff.c.
References FALSE, LP_SENSE_EQ, LP_SENSE_GE, LP_SENSE_LE, and TRUE.
Referenced by readCoefficients().
|
static |
returns the variable with the given name, or creates a new variable if it does not exist
| scip | SCIP data structure |
| name | name of the variable |
| var | pointer to store the variable |
Definition at line 634 of file reader_diff.c.
References SCIP_OKAY, SCIP_READERROR, and SCIPfindVar().
Referenced by readCoefficients().
|
static |
reads the header of the file
| scip | SCIP data structure |
| lpinput | LP reading data |
Definition at line 653 of file reader_diff.c.
References getNextToken(), isNewSection(), and SCIP_OKAY.
Referenced by readDiffFile().
|
static |
reads an objective or constraint with name and coefficients
| scip | SCIP data structure |
| lpinput | LP reading data |
| isobjective | indicates whether we are currently reading the coefficients of the objective |
| name | pointer to store the name of the line; must be at least of size LP_MAX_LINELEN |
| coefssize | size of vars and coefs arrays |
| vars | pointer to store the array with variables (must be freed by caller) |
| coefs | pointer to store the array with coefficients (must be freed by caller) |
| ncoefs | pointer to store the number of coefficients |
| newsection | pointer to store whether a new section was encountered |
Definition at line 674 of file reader_diff.c.
References FALSE, getNextToken(), getVariable(), isNewSection(), isSense(), isSign(), isValue(), LP_INIT_COEFSSIZE, LP_MAX_LINELEN, MAX, pushBufferToken(), pushToken(), SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_READERROR, SCIP_Real, SCIPallocBlockMemoryArray, SCIPdebugMsg, SCIPisZero(), SCIPmemccpy(), SCIPreallocBlockMemoryArray, SCIPvarGetName(), SCIPwarningMessage(), swapTokenBuffer(), syntaxError(), and TRUE.
Referenced by readObjective().
|
static |
reads the objective section
| scip | SCIP data structure |
| lpinput | LP reading data |
Definition at line 874 of file reader_diff.c.
References LP_MAX_LINELEN, readCoefficients(), SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPchgReoptObjective(), SCIPfreeBlockMemoryArrayNull, and TRUE.
Referenced by readDiffFile().
|
static |
reads a diff file
| scip | SCIP data structure |
| lpinput | LP reading data |
| filename | name of the input file |
Definition at line 903 of file reader_diff.c.
References hasError(), LP_END, LP_OBJECTIVE, LP_START, readObjective(), readStart(), SCIP_CALL, SCIP_INVALIDDATA, SCIP_NOFILE, SCIP_OKAY, SCIP_STAGE_PROBLEM, SCIPerrorMessage, SCIPfclose(), SCIPfopen(), SCIPfreeReoptSolve(), SCIPfreeTransform(), SCIPgetStage(), SCIPisReoptEnabled(), and SCIPprintSysError().
Referenced by SCIPreadDiff().
|
static |
copy method for reader plugins (called when SCIP copies plugins)
Definition at line 963 of file reader_diff.c.
References READER_NAME, SCIP_CALL, SCIP_OKAY, SCIPincludeReaderDiff(), and SCIPreaderGetName().
|
static |
destructor of reader to free user data (called when SCIP is exiting)
Definition at line 977 of file reader_diff.c.
References SCIP_OKAY.
|
static |
problem reading method of reader
Definition at line 984 of file reader_diff.c.
References SCIP_CALL, SCIP_OKAY, and SCIPreadDiff().
|
static |
Definition at line 85 of file reader_diff.c.
Referenced by getNextLine().