diff options
Diffstat (limited to 'src/layers.cpp')
-rw-r--r-- | src/layers.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/layers.cpp b/src/layers.cpp index 8bd9b8f..07586ad 100644 --- a/src/layers.cpp +++ b/src/layers.cpp @@ -2,8 +2,10 @@ // Created by m on 7/27/17. // -#include "layers.hpp" +#include <algorithm> + #include "json_helper.hpp" +#include "layers.hpp" #include "util.hpp" namespace wm { @@ -45,4 +47,25 @@ struct result<struct surface_id_to_layer_map> to_surface_id_to_layer_map( } } +// Helper to allow std::lower_bound with a int key only +inline bool + operator<(struct surface_id_to_layer const &a, int b) { + return a.id_max < b; +} + +optional<int> surface_id_to_layer_map::get_layer_for_surface(int surface_id) { + auto i = std::lower_bound(std::cbegin(this->mapping), + std::cend(this->mapping), surface_id); + + if (i != this->mapping.end()) { + // std::less only checks for surface_id_to_layer::id_max, so check + // that we are actually inside of an interval here. + if (i->id_min <= surface_id) { + return optional<int>(i->layer_id); + } + } + + return nullopt; +} + } // namespace wm |