#pragma once #include #include #include #include "MessageList.h" namespace midi { class BeatSequence : public std::vector { typedef std::vector parent; public: typedef unsigned int BeatIndex; typedef void (*ReducationConflictCallback)(BeatSequence& sequence, BeatIndex factor, BeatIndex beatIndex, void* data); BeatSequence(); BeatSequence(BeatIndex size); void expand(BeatIndex factor); void reduce(BeatIndex factor); void reduce(BeatIndex factor, ReducationConflictCallback conflictCallback, void* conflictCallbackData); void print(std::ostream& stream) const; }; class UnresolvedBeatSequenceReducationConflict : public std::runtime_error { typedef std::runtime_error parent; BeatSequence::BeatIndex beatIndex; public: UnresolvedBeatSequenceReducationConflict(BeatSequence::BeatIndex beatIndex); virtual const char* what() const throw(); BeatSequence::BeatIndex getBeatIndex() const; }; } // namespace