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" ); }
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(); }
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(); }
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); } } }