10b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod/*
20b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod * Copyright © 2012  Google, Inc.
30b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod *
40b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod *  This is part of HarfBuzz, a text shaping library.
50b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod *
60b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod * Permission is hereby granted, without written agreement and without
70b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod * license or royalty fees, to use, copy, modify, and distribute this
80b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod * software and its documentation for any purpose, provided that the
90b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod * above copyright notice and the following two paragraphs appear in
100b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod * all copies of this software.
110b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod *
120b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
130b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
140b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
150b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
160b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod * DAMAGE.
170b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod *
180b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
190b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
200b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
210b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
220b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
230b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod *
240b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod * Google Author(s): Behdad Esfahbod
250b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod */
260b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
270b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod#ifndef HB_H_IN
280b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod#error "Include <hb.h> instead."
290b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod#endif
300b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
310b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod#ifndef HB_SET_H
320b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod#define HB_SET_H
330b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
340b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod#include "hb-common.h"
350b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
360b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad EsfahbodHB_BEGIN_DECLS
370b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
380b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
391bc1cb3603167f5da309336f7018c8b0608ac104Behdad Esfahbodtypedef struct hb_set_t hb_set_t;
400b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
410b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
420b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbodhb_set_t *
430b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbodhb_set_create (void);
440b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
450b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbodhb_set_t *
460b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbodhb_set_get_empty (void);
470b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
480b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbodhb_set_t *
490b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbodhb_set_reference (hb_set_t *set);
500b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
510b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbodvoid
520b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbodhb_set_destroy (hb_set_t *set);
530b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
540b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbodhb_bool_t
556c6ccaf575392f6e6bb9a15534026e4ea462705bBehdad Esfahbodhb_set_set_user_data (hb_set_t           *set,
560b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod		      hb_user_data_key_t *key,
570b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod		      void *              data,
580b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod		      hb_destroy_func_t   destroy,
590b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod		      hb_bool_t           replace);
600b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
610b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbodvoid *
626c6ccaf575392f6e6bb9a15534026e4ea462705bBehdad Esfahbodhb_set_get_user_data (hb_set_t           *set,
630b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod		      hb_user_data_key_t *key);
640b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
650b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
660594a2448440208efa0acac9a5d8d52d43108289Behdad Esfahbod/* Returns false if allocation has failed before */
670b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbodhb_bool_t
68aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbodhb_set_allocation_successful (const hb_set_t *set);
690b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
700b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbodvoid
710b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbodhb_set_clear (hb_set_t *set);
720b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
730b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbodhb_bool_t
74aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbodhb_set_is_empty (const hb_set_t *set);
756c6ccaf575392f6e6bb9a15534026e4ea462705bBehdad Esfahbod
766c6ccaf575392f6e6bb9a15534026e4ea462705bBehdad Esfahbodhb_bool_t
77aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbodhb_set_has (const hb_set_t *set,
780b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod	    hb_codepoint_t  codepoint);
790b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
8029ce446d3161b7ea5874352e5f8eb33cd59338c3Behdad Esfahbod/* Right now limited to 16-bit integers.  Eventually will do full codepoint range, sans -1
8129ce446d3161b7ea5874352e5f8eb33cd59338c3Behdad Esfahbod * which we will use as a sentinel. */
820b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbodvoid
830b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbodhb_set_add (hb_set_t       *set,
840b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod	    hb_codepoint_t  codepoint);
850b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
860b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbodvoid
87aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbodhb_set_add_range (hb_set_t       *set,
88aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbod		  hb_codepoint_t  first,
89aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbod		  hb_codepoint_t  last);
90aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbod
91aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbodvoid
920b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbodhb_set_del (hb_set_t       *set,
930b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod	    hb_codepoint_t  codepoint);
940b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
95aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbodvoid
96aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbodhb_set_del_range (hb_set_t       *set,
97aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbod		  hb_codepoint_t  first,
98aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbod		  hb_codepoint_t  last);
99aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbod
1006c6ccaf575392f6e6bb9a15534026e4ea462705bBehdad Esfahbodhb_bool_t
101aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbodhb_set_is_equal (const hb_set_t *set,
102aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbod		 const hb_set_t *other);
1036c6ccaf575392f6e6bb9a15534026e4ea462705bBehdad Esfahbod
1046c6ccaf575392f6e6bb9a15534026e4ea462705bBehdad Esfahbodvoid
105aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbodhb_set_set (hb_set_t       *set,
106aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbod	    const hb_set_t *other);
1076c6ccaf575392f6e6bb9a15534026e4ea462705bBehdad Esfahbod
1086c6ccaf575392f6e6bb9a15534026e4ea462705bBehdad Esfahbodvoid
109aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbodhb_set_union (hb_set_t       *set,
110aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbod	      const hb_set_t *other);
1116c6ccaf575392f6e6bb9a15534026e4ea462705bBehdad Esfahbod
1126c6ccaf575392f6e6bb9a15534026e4ea462705bBehdad Esfahbodvoid
113aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbodhb_set_intersect (hb_set_t       *set,
114aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbod		  const hb_set_t *other);
1156c6ccaf575392f6e6bb9a15534026e4ea462705bBehdad Esfahbod
1166c6ccaf575392f6e6bb9a15534026e4ea462705bBehdad Esfahbodvoid
117aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbodhb_set_subtract (hb_set_t       *set,
118aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbod		 const hb_set_t *other);
1196c6ccaf575392f6e6bb9a15534026e4ea462705bBehdad Esfahbod
12062c3e111fce0ad34960871134c2eb6da572df303Behdad Esfahbodvoid
121aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbodhb_set_symmetric_difference (hb_set_t       *set,
122aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbod			     const hb_set_t *other);
123aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbod
1248165f2765b93e99577ecc79b7956ae38c614bc78Behdad Esfahbodvoid
1258165f2765b93e99577ecc79b7956ae38c614bc78Behdad Esfahbodhb_set_invert (hb_set_t *set);
1268165f2765b93e99577ecc79b7956ae38c614bc78Behdad Esfahbod
127aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbodunsigned int
128ac064a2db2b7a010d99527e183145286215aea81Behdad Esfahbodhb_set_get_population (const hb_set_t *set);
12962c3e111fce0ad34960871134c2eb6da572df303Behdad Esfahbod
13029ce446d3161b7ea5874352e5f8eb33cd59338c3Behdad Esfahbod/* Returns -1 if set empty. */
1316c6ccaf575392f6e6bb9a15534026e4ea462705bBehdad Esfahbodhb_codepoint_t
132aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbodhb_set_get_min (const hb_set_t *set);
1336c6ccaf575392f6e6bb9a15534026e4ea462705bBehdad Esfahbod
13429ce446d3161b7ea5874352e5f8eb33cd59338c3Behdad Esfahbod/* Returns -1 if set empty. */
1356c6ccaf575392f6e6bb9a15534026e4ea462705bBehdad Esfahbodhb_codepoint_t
136aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbodhb_set_get_max (const hb_set_t *set);
1370b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
13829ce446d3161b7ea5874352e5f8eb33cd59338c3Behdad Esfahbod/* Pass -1 in to get started. */
13929ce446d3161b7ea5874352e5f8eb33cd59338c3Behdad Esfahbodhb_bool_t
140aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbodhb_set_next (const hb_set_t *set,
14129ce446d3161b7ea5874352e5f8eb33cd59338c3Behdad Esfahbod	     hb_codepoint_t *codepoint);
14229ce446d3161b7ea5874352e5f8eb33cd59338c3Behdad Esfahbod
143aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbod/* Pass -1 for first and last to get started. */
144aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbodhb_bool_t
145aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbodhb_set_next_range (const hb_set_t *set,
146aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbod		   hb_codepoint_t *first,
147aec89de5641fbe1c3031d63dd5f40ec99bf2a538Behdad Esfahbod		   hb_codepoint_t *last);
1480b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
1490b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
1500b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad EsfahbodHB_END_DECLS
1510b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod
1520b08adb3539f2ec29682456b89c69e89ff5e9c03Behdad Esfahbod#endif /* HB_SET_H */
153