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.hh" 28 29 30 /** 31 * SECTION:hb-map 32 * @title: hb-map 33 * @short_description: Object representing integer to integer mapping 34 * @include: hb.h 35 * 36 * Map objects are integer-to-integer hash-maps. Currently they are 37 * not used in the HarfBuzz public API, but are provided for client's 38 * use if desired. 39 **/ 40 41 42 /** 43 * hb_map_create: (Xconstructor) 44 * 45 * Return value: (transfer full): 46 * 47 * Since: 1.7.7 48 **/ 49 hb_map_t * 50 hb_map_create () 51 { 52 hb_map_t *map; 53 54 if (!(map = hb_object_create<hb_map_t> ())) 55 return hb_map_get_empty (); 56 57 map->init_shallow (); 58 59 return map; 60 } 61 62 /** 63 * hb_map_get_empty: 64 * 65 * Return value: (transfer full): 66 * 67 * Since: 1.7.7 68 **/ 69 hb_map_t * 70 hb_map_get_empty () 71 { 72 return const_cast<hb_map_t *> (&Null(hb_map_t)); 73 } 74 75 /** 76 * hb_map_reference: (skip) 77 * @map: a map. 78 * 79 * Return value: (transfer full): 80 * 81 * Since: 1.7.7 82 **/ 83 hb_map_t * 84 hb_map_reference (hb_map_t *map) 85 { 86 return hb_object_reference (map); 87 } 88 89 /** 90 * hb_map_destroy: (skip) 91 * @map: a map. 92 * 93 * Since: 1.7.7 94 **/ 95 void 96 hb_map_destroy (hb_map_t *map) 97 { 98 if (!hb_object_destroy (map)) return; 99 100 map->fini_shallow (); 101 102 free (map); 103 } 104 105 /** 106 * hb_map_set_user_data: (skip) 107 * @map: a map. 108 * @key: 109 * @data: 110 * @destroy: 111 * @replace: 112 * 113 * Return value: 114 * 115 * Since: 1.7.7 116 **/ 117 hb_bool_t 118 hb_map_set_user_data (hb_map_t *map, 119 hb_user_data_key_t *key, 120 void * data, 121 hb_destroy_func_t destroy, 122 hb_bool_t replace) 123 { 124 return hb_object_set_user_data (map, key, data, destroy, replace); 125 } 126 127 /** 128 * hb_map_get_user_data: (skip) 129 * @map: a map. 130 * @key: 131 * 132 * Return value: (transfer none): 133 * 134 * Since: 1.7.7 135 **/ 136 void * 137 hb_map_get_user_data (hb_map_t *map, 138 hb_user_data_key_t *key) 139 { 140 return hb_object_get_user_data (map, key); 141 } 142 143 144 /** 145 * hb_map_allocation_successful: 146 * @map: a map. 147 * 148 * 149 * 150 * Return value: 151 * 152 * Since: 1.7.7 153 **/ 154 hb_bool_t 155 hb_map_allocation_successful (const hb_map_t *map) 156 { 157 return map->successful; 158 } 159 160 161 /** 162 * hb_map_set: 163 * @map: a map. 164 * @key: 165 * @value: 166 * 167 * 168 * 169 * Since: 1.7.7 170 **/ 171 void 172 hb_map_set (hb_map_t *map, 173 hb_codepoint_t key, 174 hb_codepoint_t value) 175 { 176 map->set (key, value); 177 } 178 179 /** 180 * hb_map_get: 181 * @map: a map. 182 * @key: 183 * 184 * 185 * 186 * Since: 1.7.7 187 **/ 188 hb_codepoint_t 189 hb_map_get (const hb_map_t *map, 190 hb_codepoint_t key) 191 { 192 return map->get (key); 193 } 194 195 /** 196 * hb_map_del: 197 * @map: a map. 198 * @key: 199 * 200 * 201 * 202 * Since: 1.7.7 203 **/ 204 void 205 hb_map_del (hb_map_t *map, 206 hb_codepoint_t key) 207 { 208 map->del (key); 209 } 210 211 /** 212 * hb_map_has: 213 * @map: a map. 214 * @key: 215 * 216 * 217 * 218 * Since: 1.7.7 219 **/ 220 hb_bool_t 221 hb_map_has (const hb_map_t *map, 222 hb_codepoint_t key) 223 { 224 return map->has (key); 225 } 226 227 228 /** 229 * hb_map_clear: 230 * @map: a map. 231 * 232 * 233 * 234 * Since: 1.7.7 235 **/ 236 void 237 hb_map_clear (hb_map_t *map) 238 { 239 return map->clear (); 240 } 241 242 /** 243 * hb_map_is_empty: 244 * @map: a map. 245 * 246 * 247 * 248 * Since: 1.7.7 249 **/ 250 hb_bool_t 251 hb_map_is_empty (const hb_map_t *map) 252 { 253 return map->is_empty (); 254 } 255 256 /** 257 * hb_map_get_population: 258 * @map: a map. 259 * 260 * 261 * 262 * Since: 1.7.7 263 **/ 264 unsigned int 265 hb_map_get_population (const hb_map_t *map) 266 { 267 return map->get_population (); 268 } 269