X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fregion_sorters.h;h=3afd66bf3ca9613ef61a639d120e9c0e2fb411b4;hb=f371ac1beb035716ef2e1def831a61bd4b5020c2;hp=ee34dcaafecefd62d6d8e2fdb4bba3a19adfb452;hpb=a473d630eb165272992e90f8d854b1d66ec0be63;p=ardour.git diff --git a/libs/ardour/ardour/region_sorters.h b/libs/ardour/ardour/region_sorters.h index ee34dcaafe..3afd66bf3c 100644 --- a/libs/ardour/ardour/region_sorters.h +++ b/libs/ardour/ardour/region_sorters.h @@ -24,38 +24,28 @@ namespace ARDOUR { -struct RegionSortByPosition { +struct LIBARDOUR_API RegionSortByPosition { bool operator() (boost::shared_ptr a, boost::shared_ptr b) { return a->position() < b->position(); } }; -struct RegionSortByLastLayerOp { - bool operator() (boost::shared_ptr a, boost::shared_ptr b) { - return a->last_layer_op() < b->last_layer_op(); - } -}; - -struct RegionSortByLayer { +struct LIBARDOUR_API RegionSortByLayer { bool operator() (boost::shared_ptr a, boost::shared_ptr b) { return a->layer() < b->layer(); } }; -struct RegionSortByLayerWithPending { - bool operator () (boost::shared_ptr a, boost::shared_ptr b) { - - double p = a->layer (); - if (a->pending_explicit_relayer()) { - p += 0.5; - } - - double q = b->layer (); - if (b->pending_explicit_relayer()) { - q += 0.5; - } - - return p < q; +/* sort by RegionSortByLayerAndPosition() + * is equivalent to + * stable_sort by RegionSortByPosition(); + * stable_sort by RegionSortByLayer(); + */ +struct LIBARDOUR_API RegionSortByLayerAndPosition { + bool operator() (boost::shared_ptr a, boost::shared_ptr b) { + return + (a->layer() < b->layer() && a->position() < b->position()) + || (a->layer() == b->layer() && a->position() < b->position()); } };