summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAnand Thakker <github@anandthakker.net>2017-07-06 09:37:46 -0400
committerAnand Thakker <github@anandthakker.net>2017-07-06 17:01:50 -0400
commit9db5832d362fb7f1930d4b182a3fe37af492a9a0 (patch)
tree9965b1b077e7487b3be406e25efa1d222c494169 /src
parente032c15fbe1647803599d3031b9da471aa77a616 (diff)
downloadqtlocation-mapboxgl-9db5832d362fb7f1930d4b182a3fe37af492a9a0.tar.gz
Add base Expression model
Diffstat (limited to 'src')
-rw-r--r--src/mbgl/style/function/expression.cpp49
-rw-r--r--src/mbgl/style/function/type.cpp26
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