comparison audioDB.cpp @ 106:a0e422e3c553 last-magic=O2DB

More small refactoring. Mostly whitespace changes, but some improved error messages too.
author mas01cr
date Fri, 05 Oct 2007 11:37:56 +0000
parents 10feb98abebf
children bc141fd1dc41
comparison
equal deleted inserted replaced
105:10feb98abebf 106:a0e422e3c553
438 438
439 } 439 }
440 440
441 // initTables - memory map files passed as arguments 441 // initTables - memory map files passed as arguments
442 // Precondition: database has already been created 442 // Precondition: database has already been created
443 void audioDB::initTables(const char* dbName, bool forWrite, const char* inFile=0){ 443 void audioDB::initTables(const char* dbName, bool forWrite, const char* inFile = 0) {
444 if ((dbfid = open (dbName, forWrite ? O_RDWR : O_RDONLY)) < 0) 444 if ((dbfid = open(dbName, forWrite ? O_RDWR : O_RDONLY)) < 0) {
445 error("Can't open database file", dbName, "open"); 445 error("Can't open database file", dbName, "open");
446 }
446 get_lock(dbfid, forWrite); 447 get_lock(dbfid, forWrite);
447 448
448 // open the input file 449 // open the input file
449 if (inFile && (infid = open (inFile, O_RDONLY)) < 0) 450 if (inFile && (infid = open(inFile, O_RDONLY)) < 0) {
450 error("can't open input file for reading", inFile, "open"); 451 error("can't open input file for reading", inFile, "open");
451 452 }
452 // find size of input file 453 // find size of input file
453 if (inFile && fstat (infid,&statbuf) < 0) 454 if (inFile && fstat(infid, &statbuf) < 0) {
454 error("fstat error finding size of input", "", "fstat"); 455 error("fstat error finding size of input", inFile, "fstat");
455 456 }
456 // Get the database header info 457 // Get the database header info
457 dbH = new dbTableHeaderT(); 458 dbH = new dbTableHeaderT();
458 assert(dbH); 459 assert(dbH);
459 460
460 if(read(dbfid,(char*)dbH,sizeof(dbTableHeaderT))!=sizeof(dbTableHeaderT)) 461 if(read(dbfid, (char *) dbH, O2_HEADERSIZE) != O2_HEADERSIZE) {
461 error("error reading db header"); 462 error("error reading db header", dbName, "read");
463 }
462 464
463 fileTableOffset = O2_HEADERSIZE; 465 fileTableOffset = O2_HEADERSIZE;
464 trackTableOffset = fileTableOffset + O2_FILETABLESIZE*O2_MAXFILES; 466 trackTableOffset = fileTableOffset + O2_FILETABLESIZE*O2_MAXFILES;
465 dataoffset = trackTableOffset + O2_TRACKTABLESIZE*O2_MAXFILES; 467 dataoffset = trackTableOffset + O2_TRACKTABLESIZE*O2_MAXFILES;
466 l2normTableOffset = O2_DEFAULTDBSIZE - O2_MAXFILES*O2_MEANNUMVECTORS*sizeof(double); 468 l2normTableOffset = O2_DEFAULTDBSIZE - O2_MAXFILES*O2_MEANNUMVECTORS*sizeof(double);
467 timesTableOffset = l2normTableOffset - O2_MAXFILES*O2_MEANNUMVECTORS*sizeof(double); 469 timesTableOffset = l2normTableOffset - O2_MAXFILES*O2_MEANNUMVECTORS*sizeof(double);
468 470
469 if(dbH->magic!=O2_MAGIC){ 471 if(dbH->magic != O2_MAGIC) {
470 cerr << "expected: " << O2_MAGIC << ", got:" << dbH->magic << endl; 472 cerr << "expected: " << O2_MAGIC << ", got: " << dbH->magic << endl;
471 error("database file has incorrect header",dbName); 473 error("database file has incorrect header",dbName);
472 } 474 }
473 475
474 if(inFile) 476 if(inFile)
475 if(dbH->dim==0 && dbH->length==0) // empty database 477 if(dbH->dim == 0 && dbH->length == 0) // empty database
476 read(infid,&dbH->dim,sizeof(unsigned)); // initialize with input dimensionality 478 // initialize with input dimensionality
479 read(infid, &dbH->dim, sizeof(unsigned));
477 else { 480 else {
478 unsigned test; 481 unsigned test;
479 read(infid,&test,sizeof(unsigned)); 482 read(infid, &test, sizeof(unsigned));
480 if(dbH->dim!=test){ 483 if(dbH->dim != test) {
481 cerr << "error: expected dimension: " << dbH->dim << ", got :" << test <<endl; 484 cerr << "error: expected dimension: " << dbH->dim << ", got : " << test <<endl;
482 error("feature dimensions do not match database table dimensions"); 485 error("feature dimensions do not match database table dimensions");
483 } 486 }
484 } 487 }
485 488
486 // mmap the input file 489 // mmap the input file
487 if (inFile && (indata = (char*)mmap (0, statbuf.st_size, PROT_READ, MAP_SHARED, infid, 0)) 490 if (inFile && (indata = (char*)mmap (0, statbuf.st_size, PROT_READ, MAP_SHARED, infid, 0))
488 == (caddr_t) -1) 491 == (caddr_t) -1)
489 error("mmap error for input", "", "mmap"); 492 error("mmap error for input", inFile, "mmap");
490 493
491 // mmap the database file 494 // mmap the database file
492 if ((db = (char*) mmap(0, O2_DEFAULTDBSIZE, PROT_READ | (forWrite ? PROT_WRITE : 0), 495 if ((db = (char*) mmap(0, O2_DEFAULTDBSIZE, PROT_READ | (forWrite ? PROT_WRITE : 0),
493 MAP_SHARED, dbfid, 0)) == (caddr_t) -1) 496 MAP_SHARED, dbfid, 0)) == (caddr_t) -1)
494 error("mmap error for initting tables of database", "", "mmap"); 497 error("mmap error for initting tables of database", "", "mmap");
497 fileTable= (char*)(db+fileTableOffset); 500 fileTable= (char*)(db+fileTableOffset);
498 trackTable = (unsigned*)(db+trackTableOffset); 501 trackTable = (unsigned*)(db+trackTableOffset);
499 dataBuf = (double*)(db+dataoffset); 502 dataBuf = (double*)(db+dataoffset);
500 l2normTable = (double*)(db+l2normTableOffset); 503 l2normTable = (double*)(db+l2normTableOffset);
501 timesTable = (double*)(db+timesTableOffset); 504 timesTable = (double*)(db+timesTableOffset);
502
503 } 505 }
504 506
505 void audioDB::insert(const char* dbName, const char* inFile){ 507 void audioDB::insert(const char* dbName, const char* inFile){
506 508
507 initTables(dbName, 1, inFile); 509 initTables(dbName, 1, inFile);