#include #include #include #include #include #include #include #include "namedplaces.h" #include "base28.h" using namespace std; bool inorder(namedplace * a, namedplace * b) { if (a->name != b->name) return a->name < b->name; return a->state < b->state; } struct binaryplace { char name[22]; char state[2]; int unique, population; short int intersection; float area, latitude, longitude, distance; binaryplace(namedplace * n) { unique = n->unique; area = n->area; population = n->population; latitude = n->latitude; longitude = n->longitude; distance = n->distance; intersection = n->intersection; state[0] = n->state[0]; state[1] = n->state[1]; string s = n->name; set_string_length(s, 35); big b(s); b.to_bytes((char *)name, 22); cout << "'" << s << "' -> "; b.print_digits(); } }; int main() { namedplaces ht; string fname = "/home/www/class/een318/named-places.txt"; ifstream fin(fname); if (fin.fail()) { cerr << "Can't open " << fname << "\n"; exit(1); } string line; for (int i = 0; true; i += 1) { getline(fin, line); if (fin.fail()) break; if (line.length() < 8) continue; ht.add(new namedplace(line)); } fin.close(); // irrelevant part removed else if (q == "process") { vector all; bool appears[256]; bzero(appears, 256); ht.start_scan(); while (true) { namedplace * np = ht.next(); if (np == NULL) break; all.push_back(np); } sort(all.begin(), all.end(), inorder); ofstream out("binaryplaces.dat", ios::out | ios::binary | ios::trunc); if (out.fail()) { cerr << "can't create\n"; exit(1); } for (int i = 0; i < all.size(); i += 1) { binaryplace bp(all[i]); out.write((char *) & bp, sizeof(bp)); } out.close(); }