#include #include #include #include #include #include #include #include namespace mbgl { std::string layoutKey(const RenderLayer& layer) { using namespace style::conversion; rapidjson::StringBuffer s; rapidjson::Writer writer(s); writer.StartArray(); writer.Uint(static_cast(layer.type)); writer.String(layer.baseImpl->source); writer.String(layer.baseImpl->sourceLayer); writer.Double(layer.baseImpl->minZoom); writer.Double(layer.baseImpl->maxZoom); writer.Uint(static_cast(layer.baseImpl->visibility)); stringify(writer, layer.baseImpl->filter); layer.baseImpl->stringifyLayout(writer); writer.EndArray(); return s.GetString(); } std::vector> groupByLayout(const std::vector>& layers) { std::unordered_map> map; for (auto& layer : layers) { map[layoutKey(*layer)].push_back(layer.get()); } std::vector> result; for (auto& pair : map) { result.push_back(pair.second); } return result; } } // namespace mbgl