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