summaryrefslogtreecommitdiff
path: root/platform/darwin/src/MGLCluster.h
diff options
context:
space:
mode:
Diffstat (limited to 'platform/darwin/src/MGLCluster.h')
-rw-r--r--platform/darwin/src/MGLCluster.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/platform/darwin/src/MGLCluster.h b/platform/darwin/src/MGLCluster.h
new file mode 100644
index 0000000000..2b99119b26
--- /dev/null
+++ b/platform/darwin/src/MGLCluster.h
@@ -0,0 +1,53 @@
+#import "MGLFoundation.h"
+
+@protocol MGLFeature;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ An `NSUInteger` constant used to indicate an invalid cluster identifier.
+ This indicates a missing cluster feature.
+ */
+FOUNDATION_EXTERN MGL_EXPORT const NSUInteger MGLClusterIdentifierInvalid;
+
+/**
+ A protocol that feature subclasses (i.e. those already conforming to
+ the `MGLFeature` protocol) conform to if they represent clusters.
+
+ Currently the only class that conforms to `MGLCluster` is
+ `MGLPointFeatureCluster` (a subclass of `MGLPointFeature`).
+
+ To check if a feature is a cluster, check conformity to `MGLCluster`, for
+ example:
+
+ ```swift
+ let shape = try! MGLShape(data: clusterShapeData, encoding: String.Encoding.utf8.rawValue)
+
+ guard let pointFeature = shape as? MGLPointFeature else {
+ throw ExampleError.unexpectedFeatureType
+ }
+
+ // Check for cluster conformance
+ guard let cluster = pointFeature as? MGLCluster else {
+ throw ExampleError.featureIsNotACluster
+ }
+
+ // Currently the only supported class that conforms to `MGLCluster` is
+ // `MGLPointFeatureCluster`
+ guard cluster is MGLPointFeatureCluster else {
+ throw ExampleError.unexpectedFeatureType
+ }
+ ```
+ */
+MGL_EXPORT
+@protocol MGLCluster <MGLFeature>
+
+/** The identifier for the cluster. */
+@property (nonatomic, readonly) NSUInteger clusterIdentifier;
+
+/** The number of points within this cluster */
+@property (nonatomic, readonly) NSUInteger clusterPointCount;
+
+@end
+
+NS_ASSUME_NONNULL_END