Mercurial > hg > audiodb
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); |