StreamBuffer

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
barone_birra
Prode Principiante
Messaggi: 91
Iscrizione: venerdì 12 maggio 2006, 11:26

StreamBuffer

Messaggio da barone_birra »

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)
barone_birra
Prode Principiante
Messaggi: 91
Iscrizione: venerdì 12 maggio 2006, 11:26

Re: StreamBuffer

Messaggio da barone_birra »

nada?  :'(
barone_birra
Prode Principiante
Messaggi: 91
Iscrizione: venerdì 12 maggio 2006, 11:26

[Risolto] Re: StreamBuffer

Messaggio da barone_birra »

Ok, ho risolto..

Usare il metodo gzrewind(stream buffer)  (z)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: Bing [Bot] e 2 ospiti