Files
Work/midiseq/safe/PUREHDR.HPP
2024-08-07 09:16:27 -04:00

136 lines
2.6 KiB
C++

#ifndef _MIDISEQ_PUREHEADER_HPP_
#define _MIDISEQ_PUREHEADER_HPP_
#include <string.h>
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_FILEIO_HPP_
#include <common/fileio.hpp>
#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