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());
}
};