[Maps] Modify diposing routines
[platform/core/csapi/tizenfx.git] / src / Tizen.Maps / Tizen.Maps / GeocoordinatesList.cs
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 using System;
18 using System.Collections.Generic;
19
20 namespace Tizen.Maps
21 {
22     /// <summary>
23     /// List of <see cref="Geocoordinates"/> objects to be used in <see cref="MapService"/> APIs.
24     /// </summary>
25     internal class GeocoordinatesList : IDisposable
26     {
27         internal Interop.CoordinatesListHandle handle;
28
29         internal GeocoordinatesList(IEnumerable<Geocoordinates> coordinateList, bool ownerShip = false)
30         {
31             handle = new Interop.CoordinatesListHandle(ownerShip);
32             foreach (var coordinates in coordinateList)
33             {
34                 handle.Add(coordinates.handle);
35             }
36         }
37
38         /// <summary>
39         /// Destroy the GeocoordinatesList object.
40         /// </summary>
41         ~GeocoordinatesList()
42         {
43             Dispose(false);
44         }
45
46         /// <summary>
47         /// The iterator for coordinates in this list.
48         /// </summary>
49         internal IEnumerable<Geocoordinates> Coordinates
50         {
51             get
52             {
53                 List<Geocoordinates> list = new List<Geocoordinates>();
54                 handle.ForEach(coordinateHandle => list.Add(new Geocoordinates(coordinateHandle)));
55                 return list;
56             }
57         }
58
59         #region IDisposable Support
60         private bool _disposedValue = false;
61
62         /// <summary>
63         /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
64         /// </summary>
65         /// <param name="disposing">If true, managed and unmanaged resources can be disposed, otherwise only unmanaged resources can be disposed.</param>
66         protected virtual void Dispose(bool disposing)
67         {
68             if (!_disposedValue)
69             {
70                 handle?.Dispose();
71                 _disposedValue = true;
72             }
73         }
74
75         /// <summary>
76         /// Releases all the resources used by this object.
77         /// </summary>
78         /// <since_tizen> 3 </since_tizen>
79         public void Dispose()
80         {
81             Dispose(true);
82             GC.SuppressFinalize(this);
83         }
84         #endregion
85     }
86 }