INNER CODE UNIT · C++
bin_and_sort_data
fbreitwieser/krakenuniq · src/db_sort.cpp:80
static void bin_and_sort_data(KrakenDB &kdb, char *data, KrakenDBIndex &idx) {
uint8_t nt = idx.indexed_nt();
uint64_t *offsets = idx.get_array();
uint64_t entries = 1ull << (nt * 2);
uint64_t key_len = kdb.get_key_len();
uint64_t val_len = kdb.get_val_len();
uint64_t pair_size = key_len + val_len;
char pair[pair_size];
ifstream input_file(Input_DB_filename.c_str(), std::ifstream::binary);
input_file.seekg(kdb.header_size(), ios_base::beg);
// Create a copy of the offsets array for use as insertion positions
vector<uint64_t> pos(offsets, offsets + entries);
for (uint64_t i = 0; i < kdb.get_key_ct(); i++) {
input_file.read(pair, pair_size);
uint64_t kmer = 0;
memcpy(&kmer, pair, key_len);