diff options
author | Anand Thakker <github@anandthakker.net> | 2017-07-06 09:37:46 -0400 |
---|---|---|
committer | Anand Thakker <github@anandthakker.net> | 2017-07-06 17:01:50 -0400 |
commit | 9db5832d362fb7f1930d4b182a3fe37af492a9a0 (patch) | |
tree | 9965b1b077e7487b3be406e25efa1d222c494169 /src | |
parent | e032c15fbe1647803599d3031b9da471aa77a616 (diff) | |
download | qtlocation-mapboxgl-9db5832d362fb7f1930d4b182a3fe37af492a9a0.tar.gz |
Add base Expression model
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/style/function/expression.cpp | 49 | ||||
-rw-r--r-- | src/mbgl/style/function/type.cpp | 26 |
2 files changed, 75 insertions, 0 deletions
diff --git a/src/mbgl/style/function/expression.cpp b/src/mbgl/style/function/expression.cpp new file mode 100644 index 0000000000..c620b0bb22 --- /dev/null +++ b/src/mbgl/style/function/expression.cpp @@ -0,0 +1,49 @@ +#include <mbgl/style/function/expression.hpp> +#include <mbgl/tile/geometry_tile_data.hpp> + +namespace mbgl { +namespace style { +namespace expression { + +class GeoJSONFeature : public GeometryTileFeature { +public: + const Feature& feature; + + GeoJSONFeature(const Feature& feature_) + : feature(feature_) { + } + + FeatureType getType() const override { + return apply_visitor(ToFeatureType(), feature.geometry); + } + + PropertyMap getProperties() const override { + return feature.properties; + } + + optional<FeatureIdentifier> getID() const override { + return feature.id; + } + + GeometryCollection getGeometries() const override { + return {}; + } + + optional<Value> getValue(const std::string& key) const override { + auto it = feature.properties.find(key); + if (it != feature.properties.end()) { + return optional<Value>(it->second); + } + return optional<Value>(); + } +}; + +optional<OutputValue> Expression::evaluate(float z, const Feature& feature, Error& error) const { + std::unique_ptr<const GeometryTileFeature> f = std::make_unique<const GeoJSONFeature>(feature); + return this->evaluate(z, *f, error); +} + + +} // namespace expression +} // namespace style +} // namespace mbgl diff --git a/src/mbgl/style/function/type.cpp b/src/mbgl/style/function/type.cpp new file mode 100644 index 0000000000..fbfe6efbc3 --- /dev/null +++ b/src/mbgl/style/function/type.cpp @@ -0,0 +1,26 @@ +#include <mbgl/style/function/type.hpp> + +namespace mbgl { +namespace style { +namespace expression { +namespace type { + +Primitive Primitive::Null = {"Null"}; +Primitive Primitive::String = {"String"}; +Primitive Primitive::Number = {"Number"}; +Primitive Primitive::Color = {"Color"}; +Primitive Primitive::Object = {"Object"}; + +// Need to add Array(Types::Value) to the member list somehow... +Type Primitive::Value = Variant({ + Primitive::Null, + Primitive::String, + Primitive::Number, + Primitive::Color, + Primitive::Object +}); + +} // namespace type +} // namespace expression +} // namespace style +} // namespace mbgl |