Esempio n. 1
0
int br_iterate_utemplates_file(FILE *file, br_utemplate_callback callback, br_callback_context context, bool parallel)
{
    int count = 0;
    QFutureSynchronizer<void> futures;
    while (true) {
        br_utemplate t = (br_utemplate) malloc(sizeof(br_universal_template));

        if (!read_buffer(file, (char*) t, sizeof(br_universal_template))) {
            free(t);
            break;
        }

        t = (br_utemplate) realloc(t, sizeof(br_universal_template) + t->mdSize + t->fvSize);
        if (!read_buffer(file, (char*) &t->data, t->mdSize + t->fvSize)) {
            free(t);

            // Try to rewind header read
            if (fseek(file, -sizeof(br_universal_template), SEEK_CUR))
                qFatal("Unable to recover from partial template read!");

            break;
        }

        if (parallel) futures.addFuture(QtConcurrent::run(callAndFree, callback, t, context));
        else          callAndFree(callback, t, context);
        count++;
    }
    return count;
}
Esempio n. 2
0
void br_iterate_utemplates_file(FILE *file, br_utemplate_callback callback, br_callback_context context, bool parallel)
{
    QFutureSynchronizer<void> futures;
    while (true) {
        br_utemplate t = (br_utemplate) malloc(sizeof(br_universal_template));

        if (!read_buffer(file, (char*) t, sizeof(br_universal_template), true)) {
            free(t);
            return;
        }

        t = (br_utemplate) realloc(t, sizeof(br_universal_template) + t->size);
        read_buffer(file, (char*) &t->data, t->size, false);

        if (parallel) futures.addFuture(QtConcurrent::run(callAndFree, callback, t, context));
        else          callAndFree(callback, t, context);
    }
    futures.waitForFinished();
}