#ifndef hTrackTable #define hTrackTable #include "PackedTable.h" #define kTitleFieldSize 63 struct _track { private: long _track_id; char _title[kTitleFieldSize]; long _album_id; long _artist_id; long _master_id; public: long track_id() { return _track_id; } char* title() { return _title; } long album_id() { return _album_id; } long artist_id() { return _artist_id; } long master_id() { return _master_id; } friend class TrackTable; }; class TrackTable : public PackedTableFlat { public: struct _track* getIndexedData(const long index) { return (struct _track*)this->_getIndexedData(index); } protected: static const int kFieldTrackID = 0; static const int kFieldTitle = 1; static const int kFieldAlbumID = 2; static const int kFieldArtistID = 3; static const int kFieldMasterID = 4; PackedTable::SharedMemoryHandler _dataFileHandler; virtual DataFileHandler* _getDataFileHandler() { return &_dataFileHandler; } virtual long _dataFlatElementSize() { return sizeof(struct _track); } virtual const char* _maxIDQueryString() { return "SELECT MAX(track_id) FROM track"; } virtual const char* _dataQueryString() { return "SELECT track_id,title,album_id,artist_id,master_id FROM track ORDER BY track_id"; } virtual void _readDataRow(MYSQL_ROW row) { // cast the data block to an array of the right type. // struct _track *array = (struct _track *)this->_dataFlatRAM; // First we need to determine the id, which will give us // the correct index into the array to store everything. // long trackID; PackedTable::_ParseLong(row[kFieldTrackID], &trackID); long i = trackID; array[i]._track_id = trackID; PackedTable::_ParseString(row[kFieldTitle], (char*)&(array[i]._title), kTitleFieldSize); PackedTable::_ParseLong(row[kFieldAlbumID], &(array[i]._album_id)); PackedTable::_ParseLong(row[kFieldArtistID], &(array[i]._artist_id)); PackedTable::_ParseLong(row[kFieldMasterID], &(array[i]._master_id)); } }; #endif