Home | History | Annotate | Download | only in src
      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