//============================================================================= // MuseScore // Music Composition & Notation // // Copyright (C) 2011 Werner Schweer // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 // as published by the Free Software Foundation and appearing in // the file LICENCE.GPL //============================================================================= #ifndef __SPANNERMAP_H__ #define __SPANNERMAP_H__ #include "thirdparty/intervaltree/IntervalTree.h" namespace Ms { class Spanner; //--------------------------------------------------------- // SpannerMap //--------------------------------------------------------- class SpannerMap : std::multimap { mutable bool dirty; mutable IntervalTree tree; std::vector< ::Interval > results; public: SpannerMap(); const std::vector< ::Interval >& findContained(int start, int stop); const std::vector< ::Interval >& findOverlapping(int start, int stop); const std::multimap& map() const { return *this; } std::multimap::const_reverse_iterator crbegin() const { return std::multimap::crbegin(); } std::multimap::const_reverse_iterator crend() const { return std::multimap::crend(); } std::multimap::const_iterator cbegin() const { return std::multimap::cbegin(); } std::multimap::const_iterator cend() const { return std::multimap::cend(); } void addSpanner(Spanner* s); bool removeSpanner(Spanner* s); void clear() { std::multimap::clear(); dirty = true; } void update() const; void setDirty() const { dirty = true; } // must be called if a spanner changes start/length #ifndef NDEBUG void dump() const; #endif }; } // namespace Ms #endif