Scippy

GCG

Branch-and-Price & Column Generation for Everyone

reader_dec.cpp File Reference

Detailed Description

DEC file reader for structure information.

Author
Lukas Kirchhart
Martin Bergner
Gerald Gamrath
Christian Puchert
Michael Bastubbe

Definition in file reader_dec.cpp.

#include <assert.h>
#include <string.h>
#include <strings.h>
#include <ctype.h>
#include "reader_dec.h"
#include "scip_misc.h"
#include "pub_gcgvar.h"
#include "cons_decomp.h"
#include "cons_decomp.hpp"
#include "pub_decomp.h"
#include "class_partialdecomp.h"
#include "class_detprobdata.h"

Go to the source code of this file.

Data Structures

struct  DecInput
 
struct  SCIP_ReaderData
 

Macros

#define READER_NAME   "decreader"
 
#define READER_DESC   "file reader for blocks in dec format"
 
#define READER_EXTENSION   "dec"
 
#define DEC_MAX_LINELEN   65536
 
#define DEC_MAX_PUSHEDTOKENS   2
 

Typedefs

typedef enum DecSection DECSECTION
 
typedef enum DecExpType DECEXPTYPE
 
typedef struct DecInput DECINPUT
 

Enumerations

enum  DecSection {
  DEC_START,
  DEC_INCOMPLETE,
  DEC_PRESOLVED,
  DEC_NBLOCKS,
  DEC_BLOCKCONSS,
  DEC_MASTERCONSS,
  DEC_BLOCKVARS,
  DEC_MASTERVARS,
  DEC_LINKINGVARS,
  DEC_END
}
 
enum  DecExpType { DEC_EXP_NONE }
 

Functions

static void syntaxError (SCIP *scip, DECINPUT *decinput, const char *msg)
 
static SCIP_Bool hasError (DECINPUT *decinput)
 
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, DECEXPTYPE *exptype)
 
static SCIP_Bool getNextLine (DECINPUT *decinput)
 
static void swapPointers (char **pointer1, char **pointer2)
 
static SCIP_Bool getNextToken (DECINPUT *decinput)
 
static void pushToken (DECINPUT *decinput)
 
static void swapTokenBuffer (DECINPUT *decinput)
 
static SCIP_Bool isInt (SCIP *scip, DECINPUT *decinput, int *value)
 
static SCIP_Bool isNewSection (SCIP *scip, DECINPUT *decinput)
 
static SCIP_RETCODE readStart (SCIP *scip, DECINPUT *decinput)
 
static SCIP_RETCODE readIncomplete (SCIP *scip, DECINPUT *decinput)
 
static SCIP_RETCODE readPresolved (SCIP *scip, DECINPUT *decinput)
 
static SCIP_RETCODE readNBlocks (SCIP *scip, DECINPUT *decinput)
 
static SCIP_RETCODE readBlockconss (SCIP *scip, DECINPUT *decinput, SCIP_READERDATA *readerdata)
 
static SCIP_RETCODE readBlockvars (SCIP *scip, DECINPUT *decinput, SCIP_READERDATA *readerdata)
 
static SCIP_RETCODE readMasterconss (SCIP *scip, DECINPUT *decinput, SCIP_READERDATA *readerdata)
 
static SCIP_RETCODE readMastervars (SCIP *scip, DECINPUT *decinput, SCIP_READERDATA *readerdata)
 
static SCIP_RETCODE readLinkingvars (SCIP *scip, DECINPUT *decinput, SCIP_READERDATA *readerdata)
 
static SCIP_RETCODE setPresolved (SCIP *scip, DECINPUT *decinput)
 
static SCIP_RETCODE readDECFile (SCIP *scip, SCIP_READER *reader, DECINPUT *decinput, const char *filename)
 
static SCIP_RETCODE writePartialdec (SCIP *scip, FILE *file, gcg::PARTIALDECOMP *partialdec, SCIP_RESULT *result)
 write partialdec to file in dec format More...
 
SCIP_RETCODE readDec (SCIP *scip, const char *filename, SCIP_RESULT *result)
 
static SCIP_DECL_READERFREE (readerFreeDec)
 
static SCIP_DECL_READERREAD (readerReadDec)
 
static SCIP_DECL_READERWRITE (readerWriteDec)
 
SCIP_RETCODE GCGincludeReaderDec (SCIP *scip)
 

Variables

static const int NOVALUE = -1
 
static const int LINKINGVALUE = -2
 
static const char delimchars [] = " \f\n\r\t\v"
 
static const char tokenchars [] = "-+:<>="
 
static const char commentchars [] = "\\"
 

Macro Definition Documentation

◆ READER_NAME

#define READER_NAME   "decreader"

Definition at line 60 of file reader_dec.cpp.

◆ READER_DESC

#define READER_DESC   "file reader for blocks in dec format"

Definition at line 61 of file reader_dec.cpp.

◆ READER_EXTENSION

#define READER_EXTENSION   "dec"

Definition at line 62 of file reader_dec.cpp.

◆ DEC_MAX_LINELEN

#define DEC_MAX_LINELEN   65536

Definition at line 68 of file reader_dec.cpp.

◆ DEC_MAX_PUSHEDTOKENS

#define DEC_MAX_PUSHEDTOKENS   2

Definition at line 69 of file reader_dec.cpp.

Typedef Documentation

◆ DECSECTION

typedef enum DecSection DECSECTION

Definition at line 76 of file reader_dec.cpp.

◆ DECEXPTYPE

typedef enum DecExpType DECEXPTYPE

Definition at line 83 of file reader_dec.cpp.

◆ DECINPUT

typedef struct DecInput DECINPUT

Definition at line 105 of file reader_dec.cpp.

Enumeration Type Documentation

◆ DecSection

enum DecSection

section in DEC File

Enumerator
DEC_START 
DEC_INCOMPLETE 
DEC_PRESOLVED 
DEC_NBLOCKS 
DEC_BLOCKCONSS 
DEC_MASTERCONSS 
DEC_BLOCKVARS 
DEC_MASTERVARS 
DEC_LINKINGVARS 
DEC_END 

Definition at line 72 of file reader_dec.cpp.

◆ DecExpType

enum DecExpType

exponent indicator of the a value

Enumerator
DEC_EXP_NONE 

Definition at line 79 of file reader_dec.cpp.

Function Documentation

◆ syntaxError()

static void syntaxError ( SCIP *  scip,
DECINPUT decinput,
const char *  msg 
)
static

issues an error message and marks the DEC data to have errors

Parameters
scipSCIP data structure
decinputDEC reading data
msgerror message

Definition at line 124 of file reader_dec.cpp.

References DEC_END, DecInput::haserror, DecInput::linebuf, DecInput::linenumber, DecInput::linepos, DecInput::section, and DecInput::token.

Referenced by isNewSection(), readBlockconss(), readBlockvars(), readIncomplete(), readLinkingvars(), readMasterconss(), readMastervars(), readNBlocks(), and readPresolved().

◆ hasError()

static SCIP_Bool hasError ( DECINPUT decinput)
static

returns whether a syntax error was detected

Parameters
decinputDEC reading data

Definition at line 152 of file reader_dec.cpp.

References DecInput::haserror.

Referenced by readDECFile().

◆ isDelimChar()

static SCIP_Bool isDelimChar ( char  c)
static

returns whether the given character is a token delimiter

Parameters
cinput character

Definition at line 162 of file reader_dec.cpp.

References delimchars.

Referenced by getNextToken().

◆ isTokenChar()

static SCIP_Bool isTokenChar ( char  c)
static

returns whether the given character is a single token

Parameters
cinput character

Definition at line 171 of file reader_dec.cpp.

References tokenchars.

Referenced by getNextToken().

◆ isValueChar()

static SCIP_Bool isValueChar ( char  c,
char  nextc,
SCIP_Bool  firstchar,
SCIP_Bool *  hasdot,
DECEXPTYPE exptype 
)
static

returns whether the current character is member of a value string

Parameters
cinput character
nextcnext input character
firstcharis the given character the first char of the token?
hasdotpointer to update the dot flag
exptypepointer to update the exponent type

Definition at line 180 of file reader_dec.cpp.

Referenced by getNextToken().

◆ getNextLine()

static SCIP_Bool getNextLine ( DECINPUT decinput)
static

reads the next line from the input file into the line buffer; skips comments; returns whether a line could be read

Parameters
decinputDEC reading data

Definition at line 201 of file reader_dec.cpp.

References commentchars, DEC_MAX_LINELEN, DecInput::file, DecInput::haserror, DecInput::linebuf, DecInput::linenumber, and DecInput::linepos.

Referenced by getNextToken().

◆ swapPointers()

static void swapPointers ( char **  pointer1,
char **  pointer2 
)
static

swaps the addresses of two pointers

Parameters
pointer1first pointer
pointer2second pointer

Definition at line 245 of file reader_dec.cpp.

Referenced by getNextToken(), pushToken(), and swapTokenBuffer().

◆ getNextToken()

static SCIP_Bool getNextToken ( DECINPUT decinput)
static

◆ pushToken()

static void pushToken ( DECINPUT decinput)
static

puts the current token on the token stack, such that it is read at the next call to getNextToken()

Parameters
decinputDEC reading data

Definition at line 358 of file reader_dec.cpp.

References DEC_MAX_PUSHEDTOKENS, DecInput::npushedtokens, DecInput::pushedtokens, swapPointers(), and DecInput::token.

Referenced by isNewSection().

◆ swapTokenBuffer()

static void swapTokenBuffer ( DECINPUT decinput)
static

swaps the current token with the token buffer

Parameters
decinputDEC reading data

Definition at line 371 of file reader_dec.cpp.

References swapPointers(), DecInput::token, and DecInput::tokenbuf.

Referenced by isNewSection().

◆ isInt()

static SCIP_Bool isInt ( SCIP *  scip,
DECINPUT decinput,
int *  value 
)
static

returns whether the current token is a value

Parameters
scipSCIP data structure
decinputDEC reading data
valuepointer to store the value (unchanged, if token is no value)

Definition at line 382 of file reader_dec.cpp.

References DecInput::token.

Referenced by isNewSection(), readIncomplete(), readNBlocks(), and readPresolved().

◆ isNewSection()

static SCIP_Bool isNewSection ( SCIP *  scip,
DECINPUT decinput 
)
static

checks whether the current token is a section identifier, and if yes, switches to the corresponding section

Parameters
scipSCIP data structure
decinputDEC reading data

Definition at line 410 of file reader_dec.cpp.

References DecInput::blocknr, DEC_BLOCKCONSS, DEC_BLOCKVARS, DEC_INCOMPLETE, DEC_LINKINGVARS, DEC_MASTERCONSS, DEC_MASTERVARS, DEC_NBLOCKS, DEC_PRESOLVED, getNextToken(), isInt(), DecInput::linenumber, pushToken(), DecInput::section, swapTokenBuffer(), syntaxError(), and DecInput::token.

Referenced by readBlockconss(), readBlockvars(), readDECFile(), readIncomplete(), readLinkingvars(), readMasterconss(), readMastervars(), readNBlocks(), readPresolved(), readStart(), and setPresolved().

◆ readStart()

static SCIP_RETCODE readStart ( SCIP *  scip,
DECINPUT decinput 
)
static

reads the header of the file

Parameters
scipSCIP data structure
decinputDEC reading data

Definition at line 540 of file reader_dec.cpp.

References getNextToken(), and isNewSection().

Referenced by readDECFile().

◆ readIncomplete()

static SCIP_RETCODE readIncomplete ( SCIP *  scip,
DECINPUT decinput 
)
static

reads the incomplete section

Parameters
scipSCIP data structure
decinputDEC reading data

Definition at line 561 of file reader_dec.cpp.

References getNextToken(), DecInput::incomplete, isInt(), isNewSection(), and syntaxError().

Referenced by readDECFile().

◆ readPresolved()

static SCIP_RETCODE readPresolved ( SCIP *  scip,
DECINPUT decinput 
)
static

reads the presolved section

Parameters
scipSCIP data structure
decinputDEC reading data

Definition at line 598 of file reader_dec.cpp.

References getNextToken(), DecInput::haspresolvesection, isInt(), isNewSection(), DecInput::presolved, and syntaxError().

Referenced by setPresolved().

◆ readNBlocks()

static SCIP_RETCODE readNBlocks ( SCIP *  scip,
DECINPUT decinput 
)
static

reads the nblocks section

Parameters
scipSCIP data structure
decinputDEC reading data

Definition at line 638 of file reader_dec.cpp.

References getNextToken(), isInt(), isNewSection(), DecInput::nblocks, NOVALUE, DecInput::partialdec, gcg::PARTIALDECOMP::setNBlocks(), and syntaxError().

Referenced by readDECFile().

◆ readBlockconss()

static SCIP_RETCODE readBlockconss ( SCIP *  scip,
DECINPUT decinput,
SCIP_READERDATA *  readerdata 
)
static

◆ readBlockvars()

static SCIP_RETCODE readBlockvars ( SCIP *  scip,
DECINPUT decinput,
SCIP_READERDATA *  readerdata 
)
static

reads the block vars section

Parameters
scipSCIP data structure
decinputDEC reading data
readerdatareader data

Definition at line 781 of file reader_dec.cpp.

References DecInput::blocknr, gcg::PARTIALDECOMP::fixVarToBlockByName(), getNextToken(), isNewSection(), DecInput::partialdec, syntaxError(), and DecInput::token.

Referenced by readDECFile().

◆ readMasterconss()

static SCIP_RETCODE readMasterconss ( SCIP *  scip,
DECINPUT decinput,
SCIP_READERDATA *  readerdata 
)
static

reads the masterconss section

Parameters
scipSCIP data structure
decinputDEC reading data
readerdatareader data

Definition at line 824 of file reader_dec.cpp.

References gcg::PARTIALDECOMP::fixConsToMaster(), gcg::PARTIALDECOMP::getDetprobdata(), gcg::DETPROBDATA::getIndexForCons(), getNextToken(), isNewSection(), DecInput::partialdec, syntaxError(), and DecInput::token.

Referenced by readDECFile().

◆ readMastervars()

static SCIP_RETCODE readMastervars ( SCIP *  scip,
DECINPUT decinput,
SCIP_READERDATA *  readerdata 
)
static

reads the mastervars section

Parameters
scipSCIP data structure
decinputDEC reading data
readerdatareader data

Definition at line 863 of file reader_dec.cpp.

References gcg::PARTIALDECOMP::fixVarToMasterByName(), getNextToken(), isNewSection(), DecInput::partialdec, syntaxError(), and DecInput::token.

Referenced by readDECFile().

◆ readLinkingvars()

static SCIP_RETCODE readLinkingvars ( SCIP *  scip,
DECINPUT decinput,
SCIP_READERDATA *  readerdata 
)
static

reads the linkingvars section

Parameters
scipSCIP data structure
decinputDEC reading data
readerdatareader data

Definition at line 908 of file reader_dec.cpp.

References gcg::PARTIALDECOMP::fixVarToLinkingByName(), getNextToken(), isNewSection(), DecInput::partialdec, syntaxError(), and DecInput::token.

Referenced by readDECFile().

◆ setPresolved()

static SCIP_RETCODE setPresolved ( SCIP *  scip,
DECINPUT decinput 
)
static

Reads the file and sets the decinput->presolved flag. Resets the file stream afterward.

Parameters
scipSCIP data structure
decinputDEC reading data

Definition at line 953 of file reader_dec.cpp.

References DEC_PRESOLVED, DEC_START, DecInput::file, getNextToken(), isNewSection(), readPresolved(), and DecInput::section.

Referenced by readDECFile().

◆ readDECFile()

◆ writePartialdec()

static SCIP_RETCODE writePartialdec ( SCIP *  scip,
FILE *  file,
gcg::PARTIALDECOMP partialdec,
SCIP_RESULT *  result 
)
static

◆ readDec()

SCIP_RETCODE readDec ( SCIP *  scip,
const char *  filename,
SCIP_RESULT *  result 
)
Parameters
scipSCIP data structure
filenamefull path and name of file to read, or NULL if stdin should be used
resultpointer to store the result of the file reading call

Definition at line 1222 of file reader_dec.cpp.

References DecInput::blocknr, DEC_MAX_LINELEN, DEC_MAX_PUSHEDTOKENS, DEC_START, DecInput::file, DecInput::haserror, DecInput::haspresolvesection, DecInput::incomplete, DecInput::linebuf, DecInput::linenumber, DecInput::linepos, DecInput::nblocks, NOVALUE, DecInput::npushedtokens, DecInput::presolved, DecInput::pushedtokens, readDECFile(), READER_NAME, DecInput::section, DecInput::token, and DecInput::tokenbuf.

Referenced by SCIP_DECL_READERREAD().

◆ SCIP_DECL_READERFREE()

static SCIP_DECL_READERFREE ( readerFreeDec  )
static

destructor of reader to free user data (called when SCIP is exiting)

Definition at line 1288 of file reader_dec.cpp.

◆ SCIP_DECL_READERREAD()

static SCIP_DECL_READERREAD ( readerReadDec  )
static

problem reading method of reader

Definition at line 1302 of file reader_dec.cpp.

References readDec().

◆ SCIP_DECL_READERWRITE()

static SCIP_DECL_READERWRITE ( readerWriteDec  )
static

problem writing method of reader

Definition at line 1318 of file reader_dec.cpp.

References DECgetPartialdecToWrite(), and writePartialdec().

◆ GCGincludeReaderDec()

SCIP_RETCODE GCGincludeReaderDec ( SCIP *  scip)

includes the dec file reader in SCIP

Parameters
scipSCIP data structure

Definition at line 1340 of file reader_dec.cpp.

References READER_DESC, READER_EXTENSION, and READER_NAME.

Referenced by SCIPincludeGcgPlugins().

Variable Documentation

◆ NOVALUE

const int NOVALUE = -1
static

Definition at line 112 of file reader_dec.cpp.

Referenced by readDec(), and readNBlocks().

◆ LINKINGVALUE

const int LINKINGVALUE = -2
static

Definition at line 113 of file reader_dec.cpp.

◆ delimchars

const char delimchars[] = " \f\n\r\t\v"
static

Definition at line 114 of file reader_dec.cpp.

Referenced by isDelimChar().

◆ tokenchars

const char tokenchars[] = "-+:<>="
static

Definition at line 115 of file reader_dec.cpp.

Referenced by isTokenChar().

◆ commentchars

const char commentchars[] = "\\"
static

Definition at line 116 of file reader_dec.cpp.

Referenced by getNextLine(), and writePartialdec().