Listing 6: Managing application-specific information
#include "plfile.h"
struct PlayEventRec { // the data base record
enum { NUM_FIELDS = 5 };
enum RecFields {
SeqNum = 0,
ID,
Status,
Len,
Name
};
enum FieldLengths {
LEN_SeqNum = sizeof( long ), // gets cast to a long
LEN_ID = 5,
LEN_Status = 5,
LEN_Length = 4,
LEN_Name = 30
};
enum FieldPositions {
START_SeqNum = 0,
START_ID = START_SeqNum + LEN_SeqNum,
START_Status = START_ID + LEN_ID,
START_Length = START_Status + LEN_Status,
START_Name = START_Length + LEN_Length
};
char seqNum[ LEN_SeqNum ];
char Id[ LEN_ID ];
char status[ LEN_Status ];
char length[ LEN_Length ];
char name[ LEN_Name ];
};
/* Allocate and initialize the field information structure. */
static ObjFieldInfo fieldInfo[PlayEventRec::NUM_FIELDS] = {
{ PlayEventRec::START_SeqNum, PlayEventRec::LEN_SeqNum,
ISAMFile::CHAR_TYPE },
{ PlayEventRec::START_ID, PlayEventRec::LEN_ID, ISAMFile::CHAR_TYPE },
{ PlayEventRec::START_Status, PlayEventRec::LEN_Status,
ISAMFile::CHAR_TYPE },
{ PlayEventRec::START_Length, PlayEventRec::LEN_Length,
ISAMFile::CHAR_TYPE },
{ PlayEventRec::START_Name, PlayEventRec::LEN_Name,
ISAMFile::CHAR_TYPE }
};
/* Allocate and initialize the primaryIndexKey
description structure. */
static ObjIndexKey primaryIndexKey = {
ISAMFile::noDuplicates,
1,
{ { PlayEvent::SeqNum, 0 } } // partial init of array of KeyFields
};
// Constructors
PlayListFile::PlayListFile()
:
ObjFile<PlayEvent>( 0, ::fieldInfo, PlayEventRec::NUM_FIELDS )
{
SetPrimaryKey( primaryIndexKey );
}
PlayListFile::PlayListFile ( const char * file_name)
:
ObjFile<PlayEvent>( file_name, ::fieldInfo, PlayEventRec::NUM_FIELDS )
{
SetPrimaryKey( primaryIndexKey );
}
PlayListFile::~PlayListFile ()
{
;
}
// Private methods
int
PlayListFile::ConvObjToRec( PlayEvent & event, char * rec, ObjIndexKey * )
{
PlayEventRec & peRec = *((PlayEventRec *) rec);
memset( (void *) &peRec, '\0', sizeof( PlayEventRec ));
event.GetFieldStr( peRec.seqNum, PlayEvent::SeqNum,
PlayEventRec::LEN_SeqNum, PlayEvent::BINARY );
event.GetFieldStr( peRec.Id, PlayEvent::ID, PlayEventRec::LEN_ID );
event.GetFieldStr( peRec.status, PlayEvent::Status,
PlayEventRec::LEN_Status, PlayEvent::ABREV );
event.GetFieldStr( peRec.length, PlayEvent::Len,
PlayEventRec::LEN_Length, PlayEvent::NO_MINS );
event.GetFieldStr( peRec.name, PlayEvent::Name, PlayEventRec::LEN_Name );
return 0;
}
int
PlayListFile::ConvRecToObj( char * rec, PlayEvent & event, ObjIndexKey * )
{
PlayEventRec & peRec = *((PlayEventRec *) rec);
event.PutFieldStr( peRec.seqNum, PlayEvent::SeqNum,
PlayEventRec::LEN_SeqNum, PlayEvent::BINARY );
event.PutFieldStr( peRec.Id, PlayEvent::ID, PlayEventRec::LEN_ID );
event.PutFieldStr( peRec.status, PlayEvent::Status,
PlayEventRec::LEN_Status, PlayEvent::ABREV );
event.PutFieldStr( peRec.length, PlayEvent::Len,
PlayEventRec::LEN_Length, PlayEvent::NO_MINS );
event.PutFieldStr( peRec.name, PlayEvent::Name, PlayEventRec::LEN_Name );
return 0;
}
boolean
PlayListFile::IsNull( const PlayEvent & event ) const
{
return event.id() == -1;
}
void
PlayListFile::MakeNull( PlayEvent & event )
{
event.id( -1 );
}
//End of File