15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright © 2012 Google, Inc. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This is part of HarfBuzz, a text shaping library. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Permission is hereby granted, without written agreement and without 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * license or royalty fees, to use, copy, modify, and distribute this 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * software and its documentation for any purpose, provided that the 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * above copyright notice and the following two paragraphs appear in 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * all copies of this software. 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DAMAGE. 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Google Author(s): Behdad Esfahbod 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "hb-set-private.hh" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Public API */ 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_create: (Xconstructor) 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: (transfer full): 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_set_t * 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_set_create (void) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_set_t *set; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!(set = hb_object_create<hb_set_t> ())) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hb_set_get_empty (); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->clear (); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return set; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_get_empty: 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: (transfer full): 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_set_t * 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_set_get_empty (void) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const hb_set_t _hb_set_nil = { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HB_OBJECT_HEADER_STATIC, 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true, /* in_error */ 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {0} /* elts */ 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return const_cast<hb_set_t *> (&_hb_set_nil); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_reference: (skip) 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: (transfer full): 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_set_t * 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_set_reference (hb_set_t *set) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hb_object_reference (set); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_destroy: (skip) 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_set_destroy (hb_set_t *set) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!hb_object_destroy (set)) return; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->fini (); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) free (set); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_set_user_data: (skip) 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @key: 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @data: 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @destroy (closure data): 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @replace: 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_bool_t 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_set_set_user_data (hb_set_t *set, 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) hb_user_data_key_t *key, 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void * data, 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) hb_destroy_func_t destroy, 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) hb_bool_t replace) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hb_object_set_user_data (set, key, data, destroy, replace); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_get_user_data: (skip) 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @key: 129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: (transfer none): 131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void * 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_set_get_user_data (hb_set_t *set, 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) hb_user_data_key_t *key) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return hb_object_get_user_data (set, key); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_allocation_successful: 144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: 149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_bool_t 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_set_allocation_successful (const hb_set_t *set HB_UNUSED) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return !set->in_error; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_clear: 160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_set_clear (hb_set_t *set) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->clear (); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_is_empty: 174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: 179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_bool_t 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_set_is_empty (const hb_set_t *set) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return set->is_empty (); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_has: 190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @codepoint: 192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: 196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_bool_t 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_set_has (const hb_set_t *set, 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t codepoint) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return set->has (codepoint); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_add: 208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @codepoint: 210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_set_add (hb_set_t *set, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t codepoint) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->add (codepoint); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_add_range: 224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @first: 226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @last: 227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_set_add_range (hb_set_t *set, 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) hb_codepoint_t first, 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) hb_codepoint_t last) 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set->add_range (first, last); 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 240f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 241f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_del: 242f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 243f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @codepoint: 244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 247f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 248f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_set_del (hb_set_t *set, 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t codepoint) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->del (codepoint); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_del_range: 258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @first: 260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @last: 261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_set_del_range (hb_set_t *set, 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) hb_codepoint_t first, 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) hb_codepoint_t last) 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set->del_range (first, last); 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 274f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 275f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_is_equal: 276f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 277f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @other: 278f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 279f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: 282f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 283f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_bool_t 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_set_is_equal (const hb_set_t *set, 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const hb_set_t *other) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return set->is_equal (other); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 292f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 293f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_set: 294f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 295f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @other: 296f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 297f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 298f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 299f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 300f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_set_set (hb_set_t *set, 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const hb_set_t *other) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->set (other); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 308f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_union: 310f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 311f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @other: 312f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 313f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 314f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 315f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 316f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_set_union (hb_set_t *set, 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const hb_set_t *other) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->union_ (other); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 324f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 325f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_intersect: 326f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 327f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @other: 328f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 329f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 330f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 331f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 332f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_set_intersect (hb_set_t *set, 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const hb_set_t *other) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->intersect (other); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 340f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 341f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_subtract: 342f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 343f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @other: 344f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 345f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 346f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 347f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 348f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_set_subtract (hb_set_t *set, 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const hb_set_t *other) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->subtract (other); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 356f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 357f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_symmetric_difference: 358f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 359f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @other: 360f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 361f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 362f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 363f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 364f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_set_symmetric_difference (hb_set_t *set, 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const hb_set_t *other) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->symmetric_difference (other); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 372f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 373f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_invert: 374f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 375f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 376f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 377f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 378f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 379f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_set_invert (hb_set_t *set) 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set->invert (); 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 386f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 387f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_get_population: 388f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 389f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 390f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Returns the number of numbers in the set. 391f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 392f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: set population. 393f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 394f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 395f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)unsigned int 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_set_get_population (const hb_set_t *set) 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return set->get_population (); 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 402f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 403f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_get_min: 404f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 405f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 406f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Finds the minimum number in the set. 407f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 408f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: minimum of the set, or %HB_SET_VALUE_INVALID if set is empty. 409f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 410f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 411f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_codepoint_t 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_set_get_min (const hb_set_t *set) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return set->get_min (); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 418f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 419f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_get_max: 420f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 421f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 422f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Finds the maximum number in the set. 423f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 424f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: minimum of the set, or %HB_SET_VALUE_INVALID if set is empty. 425f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 426f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 427f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_codepoint_t 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_set_get_max (const hb_set_t *set) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return set->get_max (); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 434f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 435f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_next: 436f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 437f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @codepoint: (inout): 438f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 439f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 440f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 441f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: whether there was a next value. 442f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 443f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 444f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)hb_bool_t 4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_set_next (const hb_set_t *set, 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hb_codepoint_t *codepoint) 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return set->next (codepoint); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/** 453f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * hb_set_next_range: 454f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @set: a set. 455f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @first: (out): output first codepoint in the range. 456f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * @last: (inout): input current last and output last codepoint in the range. 457f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 458f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Gets the next consecutive range of numbers in @set that 459f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * are greater than current value of @last. 460f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 461f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Return value: whether there was a next range. 462f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * 463f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Since: 1.0 464f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) **/ 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_bool_t 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)hb_set_next_range (const hb_set_t *set, 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) hb_codepoint_t *first, 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) hb_codepoint_t *last) 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return set->next_range (first, last); 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 472