/* * Copyright 2013 (c) Anna Schumaker. */ #ifndef OCARINA_QUEUE_H #define OCARINA_QUEUE_H #include #include #include #include enum queue_flags { Q_ENABLED = (1 << 0), Q_RANDOM = (1 << 1), Q_REPEAT = (1 << 2), Q_NO_SORT = (1 << 3), Q_DISABLE_CHANGED_SIZE = (1 << 31), }; static const unsigned int Q_FLAG_MASK = Q_ENABLED | Q_RANDOM | Q_REPEAT | Q_NO_SORT | Q_DISABLE_CHANGED_SIZE; struct sort_info { sort_t field; bool ascending; }; class Queue { protected: std :: vector _tracks; std :: vector _sort_order; unsigned int _cur; unsigned int _flags; unsigned int _length; unsigned int find_sorted_id(Track *); unsigned int _add_at(Track *, unsigned int); void _del_at(Track *, unsigned int); public: Queue(); Queue(unsigned int); ~Queue(); void write(File &); void read(File &); virtual void set_flag(queue_flags); virtual void unset_flag(queue_flags); bool has_flag(queue_flags); virtual unsigned int add(Track *); virtual void del(Track *); virtual void del(unsigned int); void updated(Track *); Track *next(); unsigned int size(); const std::string size_str(); const std::string length_str(); virtual void sort(sort_t, bool); Track *operator[](unsigned int); void track_selected(unsigned int); }; #endif /* OCARINA_QUEUE_H */