int da_build_dump(da_build_t* builder, char* tmpfile, FILE* lexfile) { Hash::iterator i, last; Hash* entries = builder->entries; char** keys = new char*[entries->size()]; size_t* lens = new size_t[entries->size()]; long* vals = new long[entries->size()]; int size = 0; std::vector<long> lex_indices; std::cerr << entries->size() << " entries" << std::endl; i = entries->begin(); while (i != entries->end()) { const std::string& key = i->first; last = entries->upper_bound(key); lex_indices.clear(); for (; i != last; i++) { lex_indices.push_back(i->second); } lens[size] = key.size(); keys[size] = (char*) key.data(); vals[size] = redump_lex(lens[size], lex_indices, tmpfile, lexfile); if (vals[size] < 0) { std::cerr << "Unexpected error at " << key << std::endl; cha_exit_perror((char*)"build darts file"); } size++; } std::cerr << size << " keys" << std::endl; DoubleArrayL da; da.build(size, (const char**) keys, lens, vals); da.save(builder->path->c_str(), "wb"); return builder->entries->size(); }