summaryrefslogtreecommitdiff
path: root/Tizen.Maps/Interop/Interop.Coordinates.cs
blob: 6a06431c0e9af40333756e5ce4d8af358d99c9ad (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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*
 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
 *
 * Licensed under the Apache License, Version 2.0 (the License);
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an AS IS BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

using System;
using System.Runtime.InteropServices;

internal static partial class Interop
{
    [DllImport(Libraries.MapService, EntryPoint = "maps_coordinates_get_latitude")]
    internal static extern ErrorCode GetLatitude(this CoordinatesHandle /* maps_coordinates_h */ coordinates, out double latitude);

    [DllImport(Libraries.MapService, EntryPoint = "maps_coordinates_get_longitude")]
    internal static extern ErrorCode GetLongitude(this CoordinatesHandle /* maps_coordinates_h */ coordinates, out double longitude);

    internal class CoordinatesHandle : SafeMapsHandle
    {
        [DllImport(Libraries.MapService, EntryPoint = "maps_coordinates_create")]
        internal static extern ErrorCode Create(double latitude, double longitude, out IntPtr /* maps_coordinates_h */ coordinates);

        [DllImport(Libraries.MapService, EntryPoint = "maps_coordinates_destroy")]
        internal static extern ErrorCode Destroy(IntPtr /* maps_coordinates_h */ coordinates);

        [DllImport(Libraries.MapService, EntryPoint = "maps_coordinates_clone")]
        internal static extern ErrorCode Clone(IntPtr /* maps_coordinates_h */ origin, out IntPtr /* maps_coordinates_h */ cloned);

        internal double Latitude
        {
            get { return NativeGet<double>(this.GetLatitude); }
        }

        internal double Longitude
        {
            get { return NativeGet<double>(this.GetLongitude); }
        }

        internal CoordinatesHandle(IntPtr handle, bool needToRelease) : base(handle, needToRelease, Destroy)
        {
        }

        internal CoordinatesHandle(double latitude, double longitude) : this(IntPtr.Zero, true)
        {
            Create(latitude, longitude, out handle).ThrowIfFailed("Failed to create native handle");
        }

        internal static CoordinatesHandle CloneFrom(IntPtr nativeHandle)
        {
            IntPtr handle;
            Clone(nativeHandle, out handle).ThrowIfFailed("Failed to clone native handle");
            return new CoordinatesHandle(handle, true);
        }

        internal static CoordinatesHandle Create(IntPtr nativeHandle)
        {
            return new CoordinatesHandle(nativeHandle, true);
        }

        public override string ToString()
        {
            return $"[{Latitude}, {Longitude}]";
        }
    }
}