[Maps] Modify diposing routines
[platform/core/csapi/tizenfx.git] / src / Tizen.Maps / Tizen.Maps / PlaceAddressList.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="PlaceAddress"/> objects to be used in <see cref="MapService"/> APIs.
24     /// </summary>
25     internal class PlaceAddressList : IDisposable
26     {
27         internal Interop.AddressListHandle handle;
28         private List<PlaceAddress> _list;
29
30         /// <summary>
31         /// Constructs a map address list object.
32         /// </summary>
33         /// <exception cref="System.NotSupportedException">Thrown when the required feature is not supported.</exception>
34         /// <exception cref="System.InvalidOperationException">Thrown when native operation failed to allocate memory.</exception>
35         public PlaceAddressList()
36         {
37             handle = new Interop.AddressListHandle();
38         }
39
40         internal PlaceAddressList(Interop.AddressListHandle nativeHandle)
41         {
42             handle = nativeHandle;
43         }
44
45         /// <summary>
46         /// Destroy the PlaceAddressList object.
47         /// </summary>
48         ~PlaceAddressList()
49         {
50             Dispose(false);
51         }
52
53         /// <summary>
54         /// Gets an iterator for addresses in this list.
55         /// </summary>
56         public IEnumerable<PlaceAddress> Addresses
57         {
58             get
59             {
60                 if (_list == null)
61                 {
62                     _list = new List<PlaceAddress>();
63                     handle.Foreach(addressHandle => _list.Add(new PlaceAddress(addressHandle)));
64                 }
65                 return _list;
66             }
67         }
68
69         #region IDisposable Support
70         private bool _disposedValue = false;
71
72         /// <summary>
73         /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
74         /// </summary>
75         /// <param name="disposing">If true, managed and unmanaged resources can be disposed, otherwise only unmanaged resources can be disposed.</param>
76         protected virtual void Dispose(bool disposing)
77         {
78             if (!_disposedValue)
79             {
80                 if (disposing)
81                 {
82                     _list?.Clear();
83                 }
84                 handle?.Dispose();
85                 _disposedValue = true;
86             }
87         }
88
89         /// <summary>
90         /// Releases all the resources used by this object.
91         /// </summary>
92         /// <since_tizen> 3 </since_tizen>
93         public void Dispose()
94         {
95             Dispose(true);
96             GC.SuppressFinalize(this);
97         }
98         #endregion
99     }
100 }