4 * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
7 * Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
26 #include "location/location-poi-info.h"
27 #include "location/location-log.h"
30 location_poiinfo_get_type (void)
32 static volatile gsize type_volatile = 0;
33 if(g_once_init_enter(&type_volatile)) {
34 GType type = g_boxed_type_register_static (
35 g_intern_static_string ("LocationPOIInfo"),
36 (GBoxedCopyFunc) location_poiinfo_copy,
37 (GBoxedFreeFunc) location_poiinfo_free);
38 g_once_init_leave(&type_volatile, type);
44 location_poiinfo_detail_properties_new (void)
46 return g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
50 location_poiinfo_detail_properties_free (GHashTable* properties)
52 g_return_if_fail(properties);
53 g_hash_table_destroy(properties);
57 location_poiinfo_detail_properties_insert (GHashTable* properties,
61 g_return_val_if_fail(properties, FALSE);
62 g_hash_table_insert (properties, g_strdup(key), g_strdup(value));
67 copy_poiinfo_detail_properties (gchar *key,
69 GHashTable *properties)
71 location_poiinfo_detail_properties_insert(properties, key, value);
75 location_poiinfo_detail_properties_copy (const GHashTable *properties)
77 g_return_val_if_fail(properties, NULL);
79 GHashTable *dup = location_poiinfo_detail_properties_new ();
80 g_hash_table_foreach (properties,
81 (GHFunc)copy_poiinfo_detail_properties,
87 location_poiinfo_new (int num_of_poi)
89 LocationPOIInfo* poi_info = g_slice_new0(LocationPOIInfo);
90 poi_info->num_of_poi = num_of_poi;
91 poi_info->poi_detail = g_new0(LocationPOIDetail, poi_info->num_of_poi);
96 location_poiinfo_free (LocationPOIInfo* poi_info)
98 g_return_if_fail(poi_info);
99 if(poi_info->poi_detail){
101 for (i = 0 ; i < poi_info->num_of_poi ; i++) {
102 g_free(poi_info->poi_detail[i].name);
103 g_free(poi_info->poi_detail[i].type);
104 location_address_free(poi_info->poi_detail[i].address);
105 location_position_free(poi_info->poi_detail[i].position);
106 g_free(poi_info->poi_detail[i].phone_number);
107 location_poiinfo_detail_properties_free(poi_info->poi_detail[i].properties);
110 g_free(poi_info->poi_detail);
111 g_slice_free(LocationPOIInfo, poi_info);
115 location_poiinfo_copy (const LocationPOIInfo* poi_info)
117 LocationPOIInfo* poi_info_dup = location_poiinfo_new(poi_info->num_of_poi);
119 for (i = 0 ; i < poi_info_dup->num_of_poi ; i++)
120 location_poiinfo_set_poi_detail (poi_info_dup, i,
121 poi_info->poi_detail[i].name,
122 poi_info->poi_detail[i].type,
123 poi_info->poi_detail[i].address,
124 poi_info->poi_detail[i].position,
125 poi_info->poi_detail[i].phone_number,
126 poi_info->poi_detail[i].properties);
132 location_poiinfo_get_poi_detail (LocationPOIInfo *poi_info,
136 LocationAddress** address,
137 LocationPosition** position,
138 gchar** phone_number,
139 GHashTable** properties)
141 LOCATION_LOGD("location_poiinfo_get_poi_detail");
142 g_return_val_if_fail(name, FALSE);
143 g_return_val_if_fail(type, FALSE);
144 g_return_val_if_fail(address, FALSE);
145 g_return_val_if_fail(position, FALSE);
146 g_return_val_if_fail(phone_number, FALSE);
147 g_return_val_if_fail(properties, FALSE);
148 g_return_val_if_fail(index < poi_info->num_of_poi, FALSE);
150 *name = g_strdup(poi_info->poi_detail[index].name);
151 *type = g_strdup(poi_info->poi_detail[index].type);
152 *address = location_address_copy(poi_info->poi_detail[index].address);
153 *position = location_position_copy(poi_info->poi_detail[index].position);
154 *phone_number = g_strdup(poi_info->poi_detail[index].phone_number);
155 *properties = location_poiinfo_detail_properties_copy(poi_info->poi_detail[index].properties);
161 location_poiinfo_set_poi_detail (LocationPOIInfo *poi_info,
165 const LocationAddress* address,
166 const LocationPosition* position,
167 const gchar* phone_number,
168 const GHashTable* properties)
170 LOCATION_LOGD("location_poiinfo_set_poi_detail");
171 g_return_val_if_fail(name, FALSE);
172 g_return_val_if_fail(type, FALSE);
173 g_return_val_if_fail(address, FALSE);
174 g_return_val_if_fail(position, FALSE);
175 g_return_val_if_fail(phone_number, FALSE);
176 g_return_val_if_fail( index < poi_info->num_of_poi, FALSE);
178 g_free(poi_info->poi_detail[index].name);
179 g_free(poi_info->poi_detail[index].type);
180 location_address_free(poi_info->poi_detail[index].address);
181 location_position_free(poi_info->poi_detail[index].position);
182 g_free(poi_info->poi_detail[index].phone_number);
183 location_poiinfo_detail_properties_free(poi_info->poi_detail[index].properties);
185 poi_info->poi_detail[index].name = g_strdup(name);
186 poi_info->poi_detail[index].type = g_strdup(type);
187 poi_info->poi_detail[index].address = location_address_copy(address);
188 poi_info->poi_detail[index].position = location_position_copy(position);
189 poi_info->poi_detail[index].phone_number = g_strdup(phone_number);
190 poi_info->poi_detail[index].properties = location_poiinfo_detail_properties_copy(properties);