示例#1
0
文件: hha.c 项目: maksverver/hha
static void list_entries()
{
    size_t i;
    char path[1024];
    const char *dir_name, *file_name;

    printf( "Com   Offset       Size     Stored Size "
            " File path                    \n" );

    printf( "--- ----------- ----------- ----------- "
            "---------------------------------------\n" );

    for (i = 0; i < entries_size; ++i)
    {
        dir_name  = strat(entries[i].dir_name);
        file_name = strat(entries[i].file_name);

        assert(strlen(dir_name) + 1 + strlen(file_name) < sizeof(path));
        sprintf(path, "%s/%s", dir_name, file_name);
        printf( " %ld  %10ld  %10ld  %10ld   %s\n",
                (long)entries[i].compression, (long)entries[i].offset,
                (long)entries[i].size, (long)entries[i].stored_size, path );
    }

    printf( "--- ----------- ----------- ----------- "
            "---------------------------------------\n" );
}
示例#2
0
result_t calculateByBisectionStrategy(int sing, int lvl) {
    
    auto cs = CellNodeSpace<DIMS>();
    cs.initWithOneCell(lvl);
    buildSingularity(cs,sing);
    enforceExtendedTauRule(cs,1);
    cs.initNodes();
    
    NestedDivisionStrategy<DIMS> strat(cs);
    auto ret = strat.AbstractStrategy<DIMS>::calculateStrategy();
    
    return ret->getCost();
}
示例#3
0
result_t calculateByOptimizedPlanesStrategy(int sing, int lvl) {
    
    auto cs = CellNodeSpace<DIMS>();
    cs.initWithOneCell(lvl);
    buildSingularity(cs,sing);
    enforceExtendedTauRule(cs,1);
    cs.initNodes();
    
    MemoizingOptimizedDivisionStrategy<DIMS, PlaneDividersGenerator<DIMS> > strat(cs);
    auto ret = strat.AbstractStrategy<DIMS>::calculateStrategy();
//    MemoizingOptimizedDivisionStrategy<DIMS, HalfDividersGenerator<DIMS> > strat2(cs);
//    auto ret2 = strat2.AbstractStrategy<DIMS>::calculateStrategy();
//    std::cout << *ret << "####\n";
//    std::cout << *ret2 << "########\n";
////
//        std::cout << "Cached " << strat.getMemoizedCount() << std::endl;
    return ret->getCost();
}
示例#4
0
文件: hha.c 项目: maksverver/hha
static void extract_entries()
{
    size_t i;
    char path[1024];
    const char *dir_name, *file_name;
    FILE *fp_new;
    size_t size_new;

    for (i = 0; i < entries_size; ++i)
    {
        dir_name  = strat(entries[i].dir_name);
        file_name = strat(entries[i].file_name);

        if (entries[i].compression > 2)
        {
            printf("Skipping %s/%s (compression type %d unknown)\n",
                   dir_name, file_name, entries[i].compression);
            continue;
        }

        assert(strlen(dir_name) + 1 + strlen(file_name) < sizeof(path));
        strncpy(path, dir_name, sizeof(path));
        create_dir(path);
        strncat(path, "/", sizeof(path) - 1);
        strncat(path, file_name, sizeof(path) - 1);

        fp_new = fopen(path, "wb");
        if (fp_new == NULL)
        {
            perror("Could not open file");
            continue;
        }

        if (fseek(fp, (long)entries[i].offset, SEEK_SET) == -1)
        {
            perror("Seek failed");
            abort();
        }

        switch (entries[i].compression)
        {
        case COM_NONE:
            printf("Extracting %s/%s (uncompressed)\n", dir_name, file_name);
            size_new = copy_uncompressed(fp_new, fp, entries[i].stored_size);
            break;

        case COM_DEFLATE:
            printf("Extracting %s/%s (deflated)\n", dir_name, file_name);
            size_new = copy_deflated(fp_new, fp, entries[i].stored_size);
            break;

        case COM_LZMA:
            printf("Extracting %s/%s (LZMA compressed)\n", dir_name, file_name);
            size_new = copy_lzmad(fp_new, fp, entries[i].stored_size);
            break;

        default:
            size_new = 0;
        }

        fclose(fp_new);

        if (size_new != entries[i].size)
        {
            fprintf(stderr, "WARNING: extracted size (%ld bytes) differs from "
                            "recorded size (%ld bytes)\n",
                            size_new, (long)entries[i].size);
        }
    }
}