int main(int argc, char **argv) { if (argc != 3) { printf("Usage: %s mmap_directory revision_input_file\n", argv[0]); exit(1); } struct revision_stats stats; get_file_stats(argv[2], &stats); printf("%d max user, %d max page, %"PRId64" max revision, %"PRId64" total revisions\n", stats.max_user_id, stats.max_page_id, stats.max_revision_id, stats.total_revisions); char *user_index_mmap_name = full_path(argv[1], USER_INDEX_MMAP_NAME); char *page_index_mmap_name = full_path(argv[1], PAGE_INDEX_MMAP_NAME); char *revisions_mmap_name = full_path(argv[1], REVISIONS_MMAP_NAME); char *user_index_mmap = create_mmap(user_index_mmap_name, user_index_mmap_size(&stats)); char *page_index_mmap = create_mmap(page_index_mmap_name, page_index_mmap_size(&stats)); char *revisions_mmap = create_mmap(revisions_mmap_name, revision_mmap_size(&stats)); ((struct user_header*)user_index_mmap)->count_users = stats.max_user_id + 1; ((struct page_header*)page_index_mmap)->count_pages = stats.max_page_id + 1; ((struct revision_header*)revisions_mmap)->count_revisions = stats.max_revision_id + 1; fill_mmaps(argv[2], &stats, user_index_mmap, page_index_mmap, revisions_mmap); free(user_index_mmap_name); free(page_index_mmap_name); free(revisions_mmap_name); return 0; }
void NotifyingXMLParser::parse_files(const std::vector<std::pair<std::string, std::string> > &files) { int progress = 0; for(size_t i = 0; i < files.size(); ++i) { int tags; scoped_ptr<mrt::BaseFile> f(Finder->get_file(files[i].second, "rt")); get_file_stats(tags, *f); progress += tags; } reset_progress.emit(progress); for(size_t i = 0; i < files.size(); ++i) { scoped_ptr<mrt::BaseFile> f(Finder->get_file(files[i].second, "rt")); onFile(files[i].first, files[i].second); mrt::XMLParser::parse_file(*f); } }
void NotifyingXMLParser::parse_file(const mrt::BaseFile &file) { int tags; get_file_stats(tags, file); reset_progress.emit(tags); mrt::XMLParser::parse_file(file); }