From 666f87e2c6ee5152219a90fb4d37e96719c3bcb5 Mon Sep 17 00:00:00 2001 From: Asheem Mamoowala Date: Mon, 16 Apr 2018 14:00:11 -0700 Subject: [ios, macos] Don't use union for MGLMatrix4 --- platform/darwin/src/MGLGeometry.h | 18 +++++++----------- platform/darwin/src/MGLGeometry.mm | 11 +++++++---- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/platform/darwin/src/MGLGeometry.h b/platform/darwin/src/MGLGeometry.h index d971f895bb..a8d3759106 100644 --- a/platform/darwin/src/MGLGeometry.h +++ b/platform/darwin/src/MGLGeometry.h @@ -24,17 +24,13 @@ typedef struct __attribute__((objc_boxable)) MGLMapPoint { CGFloat zoomLevel; } MGLMapPoint; -union __attribute__((aligned(16))) _MGLMatrix4 { - struct - { - double m00, m01, m02, m03; - double m10, m11, m12, m13; - double m20, m21, m22, m23; - double m30, m31, m32, m33; - }; - double m[16]; -}; -typedef union _MGLMatrix4 MGLMatrix4; +/* Defines a 4x4 matrix. */ +typedef struct MGLMatrix4 { + double m00, m01, m02, m03; + double m10, m11, m12, m13; + double m20, m21, m22, m23; + double m30, m31, m32, m33; +} MGLMatrix4; /** Creates a new `MGLCoordinateSpan` from the given latitudinal and longitudinal diff --git a/platform/darwin/src/MGLGeometry.mm b/platform/darwin/src/MGLGeometry.mm index e43c7b7b05..6785779570 100644 --- a/platform/darwin/src/MGLGeometry.mm +++ b/platform/darwin/src/MGLGeometry.mm @@ -113,9 +113,12 @@ MGLMapPoint MGLMapPointForCoordinate(CLLocationCoordinate2D coordinate, double z } MGLMatrix4 MGLMatrix4Make(std::array array) { - MGLMatrix4 mat4; - for(uint8_t i = 0; i< 16; i++) { - mat4.m[i] = array[i]; - } + MGLMatrix4 mat4 = { + .m00 = array[0], .m01 = array[1], .m02 = array[2], .m03 = array[3], + .m10 = array[4], .m11 = array[5], .m12 = array[6], .m13 = array[7], + .m20 = array[8], .m21 = array[9], .m22 = array[10], .m23 = array[11], + .m30 = array[12], .m31 = array[13], .m32 = array[14], .m33 = array[15] + }; return mat4; } + -- cgit v1.2.1