// (c) J. Dean Brock, 1998, 1999, 2002, 2003 // Written for UNCA CSCI 343 // Main user-level routine for creating huge B+-tree // Call as // bfill [-n size] btree-file #include // What is this used for -- I've forgotten #include #include #include #include #include #include using namespace std ; #include "btree.hxx" #define DEFAULTSIZE 1000000 #define MAXSIZE 100000000 #define DOTPRINT 2000 main(int argc, char *argv[]) { int rc, numrec ; int errflg = 0 ; char *filArg = NULL ; char *numArg = NULL ; int numRes ; char usage[] = "Usage: bfill [-n size] btree-file" ; char *atoiHack = NULL ; bTree bigBT ; int value ; char name[KEYSIZE] ; optarg = NULL ; while ((rc = getopt(argc, argv, "n:")) != -1) switch (rc) { case 'n': numArg = optarg ; break ; default: errflg = 1 ; } if (optind == argc) { cerr << usage << endl ; return 1 ; } else if (optind == argc-1) filArg = argv[optind] ; else errflg = 1 ; errno = 0 ; if (numArg == NULL) numRes = DEFAULTSIZE ; else { istringstream inbuff(numArg) ; if (! (inbuff >> numRes && inbuff.eof())) { cerr << "Bad option for -n: " << numArg << endl ; errflg = 1 ; errno = 0 ; } } if (errflg) { cerr << usage << endl ; return 1 ; } if (numRes < 0 || numRes > MAXSIZE) { cerr << "Unable to create file with " << numRes << " records" << endl ; return 1 ; } cout << "Writing " << numRes << " records to " << filArg << endl ; bigBT.create(filArg) ; if (! bigBT.io_ok()) { cerr << "Unable to open " << filArg << endl ; return 1 ; } ostringstream outbuff ; outbuff.fill('0') ; numrec = 0 ; rand() ; while (numrec < numRes) { value = random() % 1000000000 ; outbuff << "RC" ; outbuff << setw(9) << value ; bigBT.update(outbuff.str().c_str(), value) ; outbuff.seekp(0, ios_base::beg) ; if (bigBT.io_ok()) { ++numrec ; if (numrec % DOTPRINT == 0) { cout << '.' ; if (numrec % (50*DOTPRINT) == 0) cout << endl ; cout << flush ; } } } }