#ifndef _MIDISEQ_PUREHEADER_HPP_ #define _MIDISEQ_PUREHEADER_HPP_ #include #ifndef _COMMON_WINDOWS_HPP_ #include #endif #ifndef _COMMON_FILEIO_HPP_ #include #endif class PureHeader { public: enum Method{TimeCode,DeltaTime,Unset}; enum MIDIFormat{SingleMultiChannel,SimultaneousTracks,SequentialTracks}; PureHeader(void); PureHeader(const PureHeader &somePureHeader); virtual ~PureHeader(); PureHeader &operator=(const PureHeader &somePureHeader); WORD operator==(const PureHeader &somePureHeader); DWORD lengthData(void)const; MIDIFormat smfType(void)const; USHORT tracks(void)const; USHORT method(void)const; Method timingMethod(void)const; String toString(void)const; protected: WORD readHeader(FileIO &midiFile); private: enum {MaxHeaderIDLength=4}; void method(USHORT method); void lengthData(DWORD lengthData); void smfType(USHORT smfType); void tracks(USHORT smfType); char mHeader[MaxHeaderIDLength]; DWORD mLengthData; USHORT mSMFType; USHORT mTracks; USHORT mMethod; }; inline PureHeader::PureHeader(void) : mLengthData(0L), mSMFType(0), mTracks(0), mMethod(0) { ::memset(mHeader,0,sizeof(mHeader)); } inline PureHeader::PureHeader(const PureHeader &somePureHeader) { *this=somePureHeader; } inline PureHeader::~PureHeader() { } inline PureHeader &PureHeader::operator=(const PureHeader &somePureHeader) { lengthData(somePureHeader.lengthData()); smfType(somePureHeader.smfType()); tracks(somePureHeader.tracks()); method(somePureHeader.method()); ::memcpy(mHeader,somePureHeader.mHeader,sizeof(mHeader)); return *this; } inline WORD PureHeader::operator==(const PureHeader &somePureHeader) { return (lengthData()==somePureHeader.lengthData()&& smfType()==somePureHeader.smfType()&& tracks()==somePureHeader.tracks()&& method()==somePureHeader.method()&& (0==::memcmp(mHeader,somePureHeader.mHeader,sizeof(mHeader)))); } inline DWORD PureHeader::lengthData(void)const { return mLengthData; } inline void PureHeader::lengthData(DWORD lengthData) { mLengthData=lengthData; } inline PureHeader::MIDIFormat PureHeader::smfType(void)const { return (MIDIFormat)mSMFType; } inline void PureHeader::smfType(USHORT smfType) { mSMFType=smfType; } inline USHORT PureHeader::tracks(void)const { return mTracks; } inline void PureHeader::tracks(USHORT tracks) { mTracks=tracks; } inline USHORT PureHeader::method(void)const { return mMethod; } inline void PureHeader::method(USHORT method) { mMethod=method; } inline PureHeader::Method PureHeader::timingMethod(void)const { return ((mMethod>>15)?TimeCode:DeltaTime); } #endif