annotate create.cpp @ 277:abfb26e08d9c audiodb-debian

Merge trunk changes -r326:386 into audiodb-debian branch. Plus new debian/changelog version. (Should have used an epoch really, but couldn't be bothered; TODO: work out a sane version numbering policy).
author mas01cr
date Tue, 01 Jul 2008 09:12:40 +0000
parents 15b8ff55ea5b
children 896679d8cc39
rev   line source
mas01cr@243 1 #include "audioDB.h"
mas01cr@243 2
mas01cr@243 3 /* Make a new database.
mas01cr@243 4
mas01cr@243 5 The database consists of:
mas01cr@243 6
mas01cr@243 7 * a header (see dbTableHeader struct definition);
mas01cr@243 8 * keyTable: list of keys of tracks;
mas01cr@243 9 * trackTable: Maps implicit feature index to a feature vector
mas01cr@243 10 matrix (sizes of tracks)
mas01cr@243 11 * featureTable: Lots of doubles;
mas01cr@243 12 * timesTable: (start,end) time points for each feature vector;
mas01cr@243 13 * powerTable: associated power for each feature vector;
mas01cr@243 14 * l2normTable: squared l2norms for each feature vector.
mas01cr@243 15 */
mas01cr@243 16
mas01cr@243 17 void audioDB::create(const char* dbName){
mas01cr@243 18 if ((dbfid = open (dbName, O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)) < 0)
mas01cr@243 19 error("Can't create database file", dbName, "open");
mas01cr@243 20 get_lock(dbfid, 1);
mas01cr@243 21
mas01cr@243 22 VERB_LOG(0, "header size: %ju\n", (intmax_t) O2_HEADERSIZE);
mas01cr@243 23
mas01cr@243 24 dbH = new dbTableHeaderT();
mas01cr@243 25 assert(dbH);
mas01cr@243 26
mas01cr@277 27 //unsigned int maxfiles = (unsigned int) rint((double) O2_MAXFILES * (double) size / (double) O2_DEFAULTDBSIZE);
mas01cr@243 28
mas01cr@243 29 // Initialize header
mas01cr@243 30 dbH->magic = O2_MAGIC;
mas01cr@243 31 dbH->version = O2_FORMAT_VERSION;
mas01cr@243 32 dbH->numFiles = 0;
mas01cr@243 33 dbH->dim = 0;
mas01cr@243 34 dbH->flags = 0;
mas01cr@243 35 dbH->headerSize = O2_HEADERSIZE;
mas01cr@243 36 dbH->length = 0;
mas01cr@243 37 dbH->fileTableOffset = ALIGN_PAGE_UP(O2_HEADERSIZE);
mas01cr@277 38 dbH->trackTableOffset = ALIGN_PAGE_UP(dbH->fileTableOffset + O2_FILETABLE_ENTRY_SIZE*ntracks);
mas01cr@277 39 dbH->dataOffset = ALIGN_PAGE_UP(dbH->trackTableOffset + O2_TRACKTABLE_ENTRY_SIZE*ntracks);
mas01cr@277 40
mas01cr@277 41 off_t databytes = ((off_t) datasize) * 1024 * 1024;
mas01cr@277 42 off_t auxbytes = databytes / datadim;
mas01cr@277 43
mas01cr@277 44 dbH->timesTableOffset = ALIGN_PAGE_UP(dbH->dataOffset + databytes);
mas01cr@277 45 dbH->powerTableOffset = ALIGN_PAGE_UP(dbH->timesTableOffset + 2*auxbytes);
mas01cr@277 46 dbH->l2normTableOffset = ALIGN_PAGE_UP(dbH->powerTableOffset + auxbytes);
mas01cr@277 47 dbH->dbSize = ALIGN_PAGE_UP(dbH->l2normTableOffset + auxbytes);
mas01cr@243 48
mas01cr@243 49 write(dbfid, dbH, O2_HEADERSIZE);
mas01cr@243 50
mas01cr@243 51 // go to the location corresponding to the last byte
mas01cr@277 52 if (lseek (dbfid, dbH->dbSize - 1, SEEK_SET) == -1)
mas01cr@243 53 error("lseek error in db file", "", "lseek");
mas01cr@243 54
mas01cr@243 55 // write a dummy byte at the last location
mas01cr@243 56 if (write (dbfid, "", 1) != 1)
mas01cr@243 57 error("write error", "", "write");
mas01cr@243 58
mas01cr@243 59 VERB_LOG(0, "%s %s\n", COM_CREATE, dbName);
mas01cr@243 60 }
mas01cr@243 61
mas01cr@243 62 void audioDB::drop(){
mas01cr@243 63 // FIXME: drop something? Should we even allow this?
mas01cr@243 64 }
mas01cr@243 65