diff options
Diffstat (limited to 'src/layers.hpp')
-rw-r--r-- | src/layers.hpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/layers.hpp b/src/layers.hpp new file mode 100644 index 0000000..7b35c63 --- /dev/null +++ b/src/layers.hpp @@ -0,0 +1,59 @@ +// +// Created by m on 7/27/17. +// + +#ifndef TMCAGLWM_LAYERS_H +#define TMCAGLWM_LAYERS_H + +#include <algorithm> +#include <experimental/optional> +#include <json.hpp> +#include <set> +#include <string> + +#include "result.hpp" + +namespace wm { + +struct surface_id_to_layer { + int id_min = -1; + int id_max = -1; + std::string name = ""; + int layer_id = -1; + + explicit surface_id_to_layer(nlohmann::json const &j); + + bool operator<(struct surface_id_to_layer const &rhs) const { + return this->id_max < rhs.id_max; + } +}; + +inline bool operator<(struct surface_id_to_layer const &a, int b) { + return a.id_max < b; +} + +struct surface_id_to_layer_map { + typedef std::set<struct surface_id_to_layer> map_type; + + map_type mapping; + + std::experimental::optional<int> 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()) { + if (i->id_min <= surface_id) { + return std::experimental::optional<int>(i->layer_id); + } + } + + return std::experimental::nullopt; + } +}; + +struct result<struct surface_id_to_layer_map> to_surface_id_to_layer_map( + nlohmann::json const &j); + +} // namespace wm + +#endif // TMCAGLWM_LAYERS_H |