1 /* 2 * Copyright © 2018 Google, Inc. 3 * 4 * This is part of HarfBuzz, a text shaping library. 5 * 6 * Permission is hereby granted, without written agreement and without 7 * license or royalty fees, to use, copy, modify, and distribute this 8 * software and its documentation for any purpose, provided that the 9 * above copyright notice and the following two paragraphs appear in 10 * all copies of this software. 11 * 12 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 13 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 14 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 15 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 16 * DAMAGE. 17 * 18 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 19 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 21 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 22 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 23 * 24 * Google Author(s): Behdad Esfahbod 25 */ 26 27 #include "hb-map-private.hh" 28 29 30 /* Public API */ 31 32 33 /** 34 * hb_map_create: (Xconstructor) 35 * 36 * Return value: (transfer full): 37 * 38 * Since: 1.7.7 39 **/ 40 hb_map_t * 41 hb_map_create (void) 42 { 43 hb_map_t *map; 44 45 if (!(map = hb_object_create<hb_map_t> ())) 46 return hb_map_get_empty (); 47 48 map->init_shallow (); 49 50 return map; 51 } 52 53 /** 54 * hb_map_get_empty: 55 * 56 * Return value: (transfer full): 57 * 58 * Since: 1.7.7 59 **/ 60 hb_map_t * 61 hb_map_get_empty (void) 62 { 63 return const_cast<hb_map_t *> (&Null(hb_map_t)); 64 } 65 66 /** 67 * hb_map_reference: (skip) 68 * @map: a map. 69 * 70 * Return value: (transfer full): 71 * 72 * Since: 1.7.7 73 **/ 74 hb_map_t * 75 hb_map_reference (hb_map_t *map) 76 { 77 return hb_object_reference (map); 78 } 79 80 /** 81 * hb_map_destroy: (skip) 82 * @map: a map. 83 * 84 * Since: 1.7.7 85 **/ 86 void 87 hb_map_destroy (hb_map_t *map) 88 { 89 if (!hb_object_destroy (map)) return; 90 91 map->fini_shallow (); 92 93 free (map); 94 } 95 96 /** 97 * hb_map_set_user_data: (skip) 98 * @map: a map. 99 * @key: 100 * @data: 101 * @destroy: 102 * @replace: 103 * 104 * Return value: 105 * 106 * Since: 1.7.7 107 **/ 108 hb_bool_t 109 hb_map_set_user_data (hb_map_t *map, 110 hb_user_data_key_t *key, 111 void * data, 112 hb_destroy_func_t destroy, 113 hb_bool_t replace) 114 { 115 return hb_object_set_user_data (map, key, data, destroy, replace); 116 } 117 118 /** 119 * hb_map_get_user_data: (skip) 120 * @map: a map. 121 * @key: 122 * 123 * Return value: (transfer none): 124 * 125 * Since: 1.7.7 126 **/ 127 void * 128 hb_map_get_user_data (hb_map_t *map, 129 hb_user_data_key_t *key) 130 { 131 return hb_object_get_user_data (map, key); 132 } 133 134 135 /** 136 * hb_map_allocation_successful: 137 * @map: a map. 138 * 139 * 140 * 141 * Return value: 142 * 143 * Since: 1.7.7 144 **/ 145 hb_bool_t 146 hb_map_allocation_successful (const hb_map_t *map) 147 { 148 return map->successful; 149 } 150 151 152 /** 153 * hb_map_set: 154 * @map: a map. 155 * @key: 156 * @value: 157 * 158 * 159 * 160 * Return value: 161 * 162 * Since: 1.7.7 163 **/ 164 void 165 hb_map_set (hb_map_t *map, 166 hb_codepoint_t key, 167 hb_codepoint_t value) 168 { 169 map->set (key, value); 170 } 171 172 /** 173 * hb_map_get: 174 * @map: a map. 175 * @key: 176 * 177 * 178 * 179 * Since: 1.7.7 180 **/ 181 hb_codepoint_t 182 hb_map_get (const hb_map_t *map, 183 hb_codepoint_t key) 184 { 185 return map->get (key); 186 } 187 188 /** 189 * hb_map_del: 190 * @map: a map. 191 * @codepoint: 192 * 193 * 194 * 195 * Since: 1.7.7 196 **/ 197 void 198 hb_map_del (hb_map_t *map, 199 hb_codepoint_t key) 200 { 201 map->del (key); 202 } 203 204 /** 205 * hb_map_has: 206 * @map: a map. 207 * @codepoint: 208 * 209 * 210 * 211 * Since: 1.7.7 212 **/ 213 hb_bool_t 214 hb_map_has (const hb_map_t *map, 215 hb_codepoint_t key) 216 { 217 return map->has (key); 218 } 219 220 221 /** 222 * hb_map_clear: 223 * @map: a map. 224 * 225 * 226 * 227 * Since: 1.7.7 228 **/ 229 void 230 hb_map_clear (hb_map_t *map) 231 { 232 return map->clear (); 233 } 234 235 /** 236 * hb_map_is_empty: 237 * @map: a map. 238 * 239 * 240 * 241 * Since: 1.7.7 242 **/ 243 hb_bool_t 244 hb_map_is_empty (const hb_map_t *map) 245 { 246 return map->is_empty (); 247 } 248 249 /** 250 * hb_map_get_population: 251 * @map: a map. 252 * 253 * 254 * 255 * Since: 1.7.7 256 **/ 257 unsigned int 258 hb_map_get_population (const hb_map_t *map) 259 { 260 return map->get_population (); 261 }