#ifndef _MIDISEQ_PUREEVENT_HPP_ #define _MIDISEQ_PUREEVENT_HPP_ #ifndef _COMMON_WINDOWS_HPP_ #include #endif #ifndef _COMMON_STRING_HPP_ #include #endif #ifndef _MIDISEQ_MIDICHANNELMESSAGE_HPP_ #include #endif class PureEvent { public: PureEvent(void); PureEvent(const PureEvent &somePureEvent); PureEvent(BYTE eventType,DWORD deltaTime,BYTE channel,BYTE firstData,BYTE secondData,DWORD tempo=0); virtual ~PureEvent(); BYTE eventType(void)const; void eventType(BYTE eventType); DWORD deltaTime(void)const; void deltaTime(DWORD deltaTime); DWORD playTime(void)const; void playTime(DWORD playTime); BYTE channel(void)const; void channel(BYTE channel); BYTE firstData(void)const; void firstData(BYTE firstData); BYTE secondData(void)const; void secondData(BYTE secondData); DWORD tempo(void)const; void tempo(DWORD tempo); WORD operator==(const PureEvent &somePureEvent)const; WORD operator<(const PureEvent &somePureEvent)const; WORD operator>(const PureEvent &somePureEvent)const; String toString(void)const; PureEvent &operator=(const PureEvent &somePureEvent); private: BYTE mEventType; DWORD mDeltaTime; BYTE mChannel; BYTE mFirstData; BYTE mSecondData; DWORD mPlayTime; DWORD mTempo; }; inline PureEvent::PureEvent(void) : mEventType(0), mDeltaTime(0L), mChannel(0), mFirstData(0), mSecondData(0), mPlayTime(0L), mTempo(0) { } inline PureEvent::PureEvent(const PureEvent &somePureEvent) : mEventType(somePureEvent.mEventType), mDeltaTime(somePureEvent.mDeltaTime), mPlayTime(somePureEvent.mPlayTime), mChannel(somePureEvent.mChannel), mFirstData(somePureEvent.mFirstData), mSecondData(somePureEvent.mSecondData), mTempo(somePureEvent.mTempo) { } inline PureEvent::PureEvent(BYTE eventType,DWORD deltaTime,BYTE channel,BYTE firstData,BYTE secondData,DWORD tempo) : mEventType(eventType), mDeltaTime(deltaTime), mChannel(channel), mFirstData(firstData), mSecondData(secondData), mPlayTime(0L), mTempo(0) { } inline PureEvent::~PureEvent() { } inline BYTE PureEvent::eventType(void)const { return mEventType; } inline void PureEvent::eventType(BYTE eventType) { mEventType=eventType; } inline DWORD PureEvent::deltaTime(void)const { return mDeltaTime; } inline void PureEvent::deltaTime(DWORD deltaTime) { mDeltaTime=deltaTime; } inline DWORD PureEvent::playTime(void)const { return mPlayTime; } inline void PureEvent::playTime(DWORD playTime) { mPlayTime=playTime; } inline BYTE PureEvent::channel(void)const { return mChannel; } inline void PureEvent::channel(BYTE channel) { mChannel=channel; } inline BYTE PureEvent::firstData(void)const { return mFirstData; } inline void PureEvent::firstData(BYTE firstData) { mFirstData=firstData; } inline BYTE PureEvent::secondData(void)const { return mSecondData; } inline void PureEvent::secondData(BYTE secondData) { mSecondData=secondData; } inline DWORD PureEvent::tempo(void)const { return mTempo; } inline void PureEvent::tempo(DWORD tempo) { mTempo=tempo; } // comparators inline WORD PureEvent::operator==(const PureEvent &somePureEvent)const { return mPlayTime==somePureEvent.mPlayTime&&eventType()==somePureEvent.eventType(); } inline PureEvent &PureEvent::operator=(const PureEvent &somePureEvent) { eventType(somePureEvent.eventType()); deltaTime(somePureEvent.deltaTime()); playTime(somePureEvent.playTime()); channel(somePureEvent.channel()); firstData(somePureEvent.firstData()); secondData(somePureEvent.secondData()); tempo(somePureEvent.tempo()); return *this; } inline WORD PureEvent::operator<(const PureEvent &somePureEvent)const { if(mPlayTime==somePureEvent.mPlayTime&&eventType()==somePureEvent.eventType())return false; if(mPlayTime==somePureEvent.mPlayTime&&eventType()==MIDINoteOff)return true; else if(mPlayTime==somePureEvent.mPlayTime)return false; return (mPlayTime(const PureEvent &somePureEvent)const { if(mPlayTime==somePureEvent.mPlayTime&&eventType()==somePureEvent.eventType())return false; if(mPlayTime==somePureEvent.mPlayTime&&eventType()==MIDINoteOn)return true; else if(mPlayTime==somePureEvent.mPlayTime)return false; return (mPlayTime>somePureEvent.mPlayTime); } #endif