blob: b53cdaa8d2fa91e81d0f16050ce20de3a62d967d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#import <Foundation/Foundation.h>
#import <mbgl/util/geometry.hpp>
/**
Recursively transforms a C++ type into the corresponding Foundation type.
*/
class ValueEvaluator {
public:
id operator()(const mbgl::NullValue &) const {
return [NSNull null];
}
id operator()(const bool &value) const {
return value ? @YES : @NO;
}
id operator()(const uint64_t &value) const {
return @(value);
}
id operator()(const int64_t &value) const {
return @(value);
}
id operator()(const double &value) const {
return @(value);
}
id operator()(const std::string &value) const {
return @(value.c_str());
}
id operator()(const std::vector<mbgl::Value> &values) const {
NSMutableArray *objects = [NSMutableArray arrayWithCapacity:values.size()];
for (const auto &v : values) {
[objects addObject:mbgl::Value::visit(v, *this)];
}
return objects;
}
id operator()(const std::unordered_map<std::string, mbgl::Value> &items) const {
NSMutableDictionary *attributes = [NSMutableDictionary dictionaryWithCapacity:items.size()];
for (auto &item : items) {
attributes[@(item.first.c_str())] = mbgl::Value::visit(item.second, *this);
}
return attributes;
}
};
|