Mi aiutereste con questo pezzo di codice?
Devo modificare ciò (scusate la lunghezza del pezzo):
//=================================================================================================
// DIMACS Parser:
#define CHUNK_LIMIT 1048576
class StreamBuffer {
gzFile in;
char buf[CHUNK_LIMIT];
int pos;
int size;
void assureLookahead() {
if (pos >= size) {
pos = 0;
size = gzread(in, buf, sizeof(buf)); } }
public:
StreamBuffer(gzFile i) : in(i), pos(0), size(0) {
assureLookahead(); }
int operator * () { return (pos >= size) ? EOF : buf[pos]; }
void operator ++ () { pos++; assureLookahead(); }
};
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
...
...
...
template
static void parse_DIMACS_main(B& in, Solver& S) {
vec lits;
for (;;){
skipWhitespace(in);
if (*in == EOF)
break;
/*else if (match(in, "c START PROPERTIES")) {
while (!match(in, "c END PROPERTIES")) {
if (match(in, "c")) {
int v = parseInt(in);
reportf("Variabile Funzionalmente Dipendente: X%-12d \n", v);
//S.setDecisionVar(v, false);
skipLine(in);
}
}
}*/
else if (*in == 'p'){
if (match(in, "p cnf")){
int vars = parseInt(in);
int clauses = parseInt(in);
reportf("| Number of variables: %-12d |\n", vars);
reportf("| Number of clauses: %-12d |\n", clauses);
}else{
reportf("PARSE ERROR! Unexpected char: %c\n", *in), exit(3);
}
} else if (*in == 'c' || *in == 'p')
skipLine(in);
else
readClause(in, S, lits),
S.addClause(lits);
}
}
// Inserts problem into solver.
//
static void parse_DIMACS(gzFile input_stream, Solver& S) {
StreamBuffer in(input_stream);
parse_DIMACS_main(in, S); }
//=================================================================================================
In pratica dopo aver chiamato "parse_DIMACS_main(in, S);", dovrei chiamare un secondo metodo sempre sui "in" che effettua un secondo passaggio di parsing con operazioni diverse.
Ho provato una soluzione, che compila, ma non funziona come dovrebbe. Temo, anzi sono sicuro, che quando chiamo il secondo metodo lo StreamBuffer si trova alla fine del file e quindi non legge nulla.
Purtoppo con il c/c++ non sono un fenomeno e non riesco a capire dove devo agire.
Chiedo umilmente il vostro aiuto.. (b2b)
StreamBuffer
-
barone_birra
- Prode Principiante
- Messaggi: 91
- Iscrizione: venerdì 12 maggio 2006, 11:26
-
barone_birra
- Prode Principiante
- Messaggi: 91
- Iscrizione: venerdì 12 maggio 2006, 11:26
Re: StreamBuffer
nada? :'(
-
barone_birra
- Prode Principiante
- Messaggi: 91
- Iscrizione: venerdì 12 maggio 2006, 11:26
[Risolto] Re: StreamBuffer
Ok, ho risolto..
Usare il metodo gzrewind(stream buffer) (z)
Usare il metodo gzrewind(stream buffer) (z)
Chi c’è in linea
Visualizzano questa sezione: Bing [Bot] e 2 ospiti