[Maps] Modify diposing routines
[platform/core/csapi/tizenfx.git] / src / Tizen.Maps / Tizen.Maps / PlaceList.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="Place"/> objects to be used in <see cref="MapService"/> APIs.
24     /// </summary>
25     internal class PlaceList : IDisposable
26     {
27         internal Interop.PlaceListHandle handle;
28         private List<Place> _list;
29
30         internal PlaceList(Interop.PlaceListHandle nativeHandle)
31         {
32             handle = nativeHandle;
33         }
34
35         /// <summary>
36         /// Destroy the PlaceList object.
37         /// </summary>
38         ~PlaceList()
39         {
40             Dispose(false);
41         }
42
43         /// <summary>
44         /// Gets an iterator for the addresses in this list.
45         /// </summary>
46         public IEnumerable<Place> Places
47         {
48             get
49             {
50                 if (_list == null)
51                 {
52                     _list = new List<Place>();
53                     handle.Foreach(placeHandle => _list.Add(new Place(placeHandle)));
54                 }
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 }