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