1c7a89e2c8c35bdfaed00ee008e969a5a0f5d07c
[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         /// Gets an iterator for addresses in this list.
47         /// </summary>
48         public IEnumerable<PlaceAddress> Addresses
49         {
50             get
51             {
52                 if (_list == null)
53                 {
54                     _list = new List<PlaceAddress>();
55                     handle.Foreach(addressHandle => _list.Add(new PlaceAddress(addressHandle)));
56                 }
57                 return _list;
58             }
59         }
60
61         #region IDisposable Support
62         private bool _disposedValue = false;
63
64         /// <summary>
65         /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
66         /// </summary>
67         /// <param name="disposing">If true, managed and unmanaged resources can be disposed, otherwise only unmanaged resources can be disposed.</param>
68         protected virtual void Dispose(bool disposing)
69         {
70             if (!_disposedValue)
71             {
72                 handle.Dispose();
73                 _disposedValue = true;
74             }
75         }
76
77         /// <summary>
78         /// Releases all the resources used by this object.
79         /// </summary>
80         /// <since_tizen> 3 </since_tizen>
81         public void Dispose()
82         {
83             Dispose(true);
84             GC.SuppressFinalize(this);
85         }
86         #endregion
87     }
88 }