summaryrefslogtreecommitdiff
path: root/platform/darwin/src/MGLConversion.h
diff options
context:
space:
mode:
Diffstat (limited to 'platform/darwin/src/MGLConversion.h')
-rw-r--r--platform/darwin/src/MGLConversion.h159
1 files changed, 0 insertions, 159 deletions
diff --git a/platform/darwin/src/MGLConversion.h b/platform/darwin/src/MGLConversion.h
deleted file mode 100644
index 3f7ffdd0c1..0000000000
--- a/platform/darwin/src/MGLConversion.h
+++ /dev/null
@@ -1,159 +0,0 @@
-#include <mbgl/style/conversion_impl.hpp>
-
-NS_ASSUME_NONNULL_BEGIN
-
-namespace mbgl {
-namespace style {
-namespace conversion {
-
-// A wrapper class for `id`, so as not to confuse ARC.
-class Holder {
-public:
- Holder(const id v) : value(v) {}
- const id value;
-};
-
-template <>
-class ConversionTraits<Holder> {
-public:
- static bool isUndefined(const Holder& holder) {
- const id value = holder.value;
- return !value || value == [NSNull null];
- }
-
- static bool isArray(const Holder& holder) {
- const id value = holder.value;
- return [value isKindOfClass:[NSArray class]];
- }
-
- static bool isObject(const Holder& holder) {
- const id value = holder.value;
- return [value isKindOfClass:[NSDictionary class]];
- }
-
- static std::size_t arrayLength(const Holder& holder) {
- const id value = holder.value;
- NSCAssert([value isKindOfClass:[NSArray class]], @"Value must be an NSArray for getLength().");
- NSArray *array = value;
- auto length = [array count];
- NSCAssert(length <= std::numeric_limits<size_t>::max(), @"Array length out of bounds.");
- return length;
- }
-
- static Holder arrayMember(const Holder& holder, std::size_t i) {
- const id value = holder.value;
- NSCAssert([value isKindOfClass:[NSArray class]], @"Value must be an NSArray for get(int).");
- NSCAssert(i < NSUIntegerMax, @"Index must be less than NSUIntegerMax");
- return {[value objectAtIndex: i]};
- }
-
- static optional<Holder> objectMember(const Holder& holder, const char *key) {
- const id value = holder.value;
- NSCAssert([value isKindOfClass:[NSDictionary class]], @"Value must be an NSDictionary for get(string).");
- NSObject *member = [value objectForKey: @(key)];
- if (member && member != [NSNull null]) {
- return {member};
- } else {
- return {};
- }
- }
-
-// Compiler is wrong about `Fn` parameter missing a nullability specifier.
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wnullability-completeness"
- template <class Fn>
- static optional<Error> eachMember(const Holder& holder, Fn&& visit) {
-#pragma clang diagnostic pop
- [holder.value enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
- auto result = visit(std::string(static_cast<const char *>([key UTF8String])), obj);
- if (result) {
- *stop = YES;
- }
- }];
- return {};
- }
-
- static optional<bool> toBool(const Holder& holder) {
- const id value = holder.value;
- if (_isBool(value)) {
- return ((NSNumber *)value).boolValue;
- } else {
- return {};
- }
- }
-
- static optional<float> toNumber(const Holder& holder) {
- const id value = holder.value;
- if (_isNumber(value)) {
- return ((NSNumber *)value).floatValue;
- } else {
- return {};
- }
- }
-
- static optional<double> toDouble(const Holder& holder) {
- const id value = holder.value;
- if (_isNumber(value)) {
- return ((NSNumber *)value).doubleValue;
- } else {
- return {};
- }
- }
-
- static optional<std::string> toString(const Holder& holder) {
- const id value = holder.value;
- if (_isString(value)) {
- return std::string(static_cast<const char *>([value UTF8String]));
- } else {
- return {};
- }
- }
-
- static optional<mbgl::Value> toValue(const Holder& holder) {
- const id value = holder.value;
- if (isUndefined(value)) {
- return {};
- } else if (_isBool(value)) {
- return { *toBool(holder) };
- } else if ( _isString(value)) {
- return { *toString(holder) };
- } else if (_isNumber(value)) {
- return { *toDouble(holder) };
- } else {
- return {};
- }
- }
-
- static optional<GeoJSON> toGeoJSON(const Holder&, Error& error) {
- error = { "toGeoJSON not implemented" };
- return {};
- }
-
-private:
- static bool _isBool(const id value) {
- if (![value isKindOfClass:[NSNumber class]]) return false;
- // char: 32-bit boolean
- // BOOL: 64-bit boolean
- NSNumber *number = value;
- return ((strcmp([number objCType], @encode(char)) == 0) ||
- (strcmp([number objCType], @encode(BOOL)) == 0));
- }
-
- static bool _isNumber(const id value) {
- return [value isKindOfClass:[NSNumber class]] && !_isBool(value);
- }
-
- static bool _isString(const id value) {
- return [value isKindOfClass:[NSString class]];
- }
-};
-
-inline Convertible makeConvertible(const id value) {
- return Convertible(Holder(value));
-}
-
-} // namespace conversion
-} // namespace style
-} // namespace mbgl
-
-NS_ASSUME_NONNULL_END