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().