save version string with session for informational purposes
[ardour.git] / libs / ardour / ardour / region_sorters.h
index 0e3203ef2057cc2092fc4941359c41d7a6ffce03..3afd66bf3ca9613ef61a639d120e9c0e2fb411b4 100644 (file)
 
 namespace ARDOUR {
 
-struct RegionSortByPosition {
+struct LIBARDOUR_API RegionSortByPosition {
        bool operator() (boost::shared_ptr<Region> a, boost::shared_ptr<Region> b) {
                return a->position() < b->position();
        }
 };
 
-struct RegionSortByLayer {
+struct LIBARDOUR_API RegionSortByLayer {
        bool operator() (boost::shared_ptr<Region> a, boost::shared_ptr<Region> b) {
                return a->layer() < b->layer();
        }
 };
 
-struct RegionSortByAdd {
+/* sort by RegionSortByLayerAndPosition()
+ * is equivalent to
+ * stable_sort by RegionSortByPosition();
+ * stable_sort by RegionSortByLayer();
+ */
+struct LIBARDOUR_API RegionSortByLayerAndPosition {
        bool operator() (boost::shared_ptr<Region> a, boost::shared_ptr<Region> b) {
-               return (
-                       (a->last_layer_op (LayerOpAdd) < b->last_layer_op (LayerOpAdd))
-                       );
-       }
-};
-
-struct RegionSortByAddOrBounds {
-       bool operator() (boost::shared_ptr<Region> a, boost::shared_ptr<Region> b) {
-               uint64_t const p = std::max (a->last_layer_op (LayerOpAdd), a->last_layer_op (LayerOpBoundsChange));
-               uint64_t const q = std::max (b->last_layer_op (LayerOpAdd), b->last_layer_op (LayerOpBoundsChange));
-               return p < q;
+               return
+                          (a->layer() < b->layer()  && a->position() < b->position())
+                       || (a->layer() == b->layer() && a->position() < b->position());
        }
 };