1/*
2 * Copyright © 2012 Google, Inc.
3 *
4 * This is part of HarfBuzz, a text shaping library.
5 *
6 * Permission is hereby granted, without written agreement and without
7 * license or royalty fees, to use, copy, modify, and distribute this
8 * software and its documentation for any purpose, provided that the
9 * above copyright notice and the following two paragraphs appear in
10 * all copies of this software.
11 *
12 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
13 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
14 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
15 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
16 * DAMAGE.
17 *
18 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
19 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
21 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
22 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
23 *
24 * Google Author(s): Behdad Esfahbod
25 */
26
27#include "hb-set-private.hh"
28
29
30/* Public API */
31
32
33/**
34 * hb_set_create: (Xconstructor)
35 *
36 * Return value: (transfer full):
37 *
38 * Since: 0.9.2
39 **/
40hb_set_t *
41hb_set_create (void)
42{
43 hb_set_t *set;
44
45 if (!(set = hb_object_create<hb_set_t> ()))
46 return hb_set_get_empty ();
47
48 set->init ();
49
50 return set;
51}
52
53/**
54 * hb_set_get_empty:
55 *
56 * Return value: (transfer full):
57 *
58 * Since: 0.9.2
59 **/
60hb_set_t *
61hb_set_get_empty (void)
62{
63 static const hb_set_t _hb_set_nil = {
64 HB_OBJECT_HEADER_STATIC,
65 .in_error: true, /* in_error */
66
67 .page_map: {.len: 0} /* elts */
68 };
69
70 return const_cast<hb_set_t *> (&_hb_set_nil);
71}
72
73/**
74 * hb_set_reference: (skip)
75 * @set: a set.
76 *
77 * Return value: (transfer full):
78 *
79 * Since: 0.9.2
80 **/
81hb_set_t *
82hb_set_reference (hb_set_t *set)
83{
84 return hb_object_reference (obj: set);
85}
86
87/**
88 * hb_set_destroy: (skip)
89 * @set: a set.
90 *
91 * Since: 0.9.2
92 **/
93void
94hb_set_destroy (hb_set_t *set)
95{
96 if (!hb_object_destroy (obj: set)) return;
97
98 set->finish ();
99
100 free (ptr: set);
101}
102
103/**
104 * hb_set_set_user_data: (skip)
105 * @set: a set.
106 * @key:
107 * @data:
108 * @destroy:
109 * @replace:
110 *
111 * Return value:
112 *
113 * Since: 0.9.2
114 **/
115hb_bool_t
116hb_set_set_user_data (hb_set_t *set,
117 hb_user_data_key_t *key,
118 void * data,
119 hb_destroy_func_t destroy,
120 hb_bool_t replace)
121{
122 return hb_object_set_user_data (obj: set, key, data, destroy, replace);
123}
124
125/**
126 * hb_set_get_user_data: (skip)
127 * @set: a set.
128 * @key:
129 *
130 * Return value: (transfer none):
131 *
132 * Since: 0.9.2
133 **/
134void *
135hb_set_get_user_data (hb_set_t *set,
136 hb_user_data_key_t *key)
137{
138 return hb_object_get_user_data (obj: set, key);
139}
140
141
142/**
143 * hb_set_allocation_successful:
144 * @set: a set.
145 *
146 *
147 *
148 * Return value:
149 *
150 * Since: 0.9.2
151 **/
152hb_bool_t
153hb_set_allocation_successful (const hb_set_t *set HB_UNUSED)
154{
155 return !set->in_error;
156}
157
158/**
159 * hb_set_clear:
160 * @set: a set.
161 *
162 *
163 *
164 * Since: 0.9.2
165 **/
166void
167hb_set_clear (hb_set_t *set)
168{
169 set->clear ();
170}
171
172/**
173 * hb_set_is_empty:
174 * @set: a set.
175 *
176 *
177 *
178 * Return value:
179 *
180 * Since: 0.9.7
181 **/
182hb_bool_t
183hb_set_is_empty (const hb_set_t *set)
184{
185 return set->is_empty ();
186}
187
188/**
189 * hb_set_has:
190 * @set: a set.
191 * @codepoint:
192 *
193 *
194 *
195 * Return value:
196 *
197 * Since: 0.9.2
198 **/
199hb_bool_t
200hb_set_has (const hb_set_t *set,
201 hb_codepoint_t codepoint)
202{
203 return set->has (g: codepoint);
204}
205
206/**
207 * hb_set_add:
208 * @set: a set.
209 * @codepoint:
210 *
211 *
212 *
213 * Since: 0.9.2
214 **/
215void
216hb_set_add (hb_set_t *set,
217 hb_codepoint_t codepoint)
218{
219 set->add (g: codepoint);
220}
221
222/**
223 * hb_set_add_range:
224 * @set: a set.
225 * @first:
226 * @last:
227 *
228 *
229 *
230 * Since: 0.9.7
231 **/
232void
233hb_set_add_range (hb_set_t *set,
234 hb_codepoint_t first,
235 hb_codepoint_t last)
236{
237 set->add_range (a: first, b: last);
238}
239
240/**
241 * hb_set_del:
242 * @set: a set.
243 * @codepoint:
244 *
245 *
246 *
247 * Since: 0.9.2
248 **/
249void
250hb_set_del (hb_set_t *set,
251 hb_codepoint_t codepoint)
252{
253 set->del (g: codepoint);
254}
255
256/**
257 * hb_set_del_range:
258 * @set: a set.
259 * @first:
260 * @last:
261 *
262 *
263 *
264 * Since: 0.9.7
265 **/
266void
267hb_set_del_range (hb_set_t *set,
268 hb_codepoint_t first,
269 hb_codepoint_t last)
270{
271 set->del_range (a: first, b: last);
272}
273
274/**
275 * hb_set_is_equal:
276 * @set: a set.
277 * @other:
278 *
279 *
280 *
281 * Return value:
282 *
283 * Since: 0.9.7
284 **/
285hb_bool_t
286hb_set_is_equal (const hb_set_t *set,
287 const hb_set_t *other)
288{
289 return set->is_equal (other);
290}
291
292/**
293 * hb_set_set:
294 * @set: a set.
295 * @other:
296 *
297 *
298 *
299 * Since: 0.9.2
300 **/
301void
302hb_set_set (hb_set_t *set,
303 const hb_set_t *other)
304{
305 set->set (other);
306}
307
308/**
309 * hb_set_union:
310 * @set: a set.
311 * @other:
312 *
313 *
314 *
315 * Since: 0.9.2
316 **/
317void
318hb_set_union (hb_set_t *set,
319 const hb_set_t *other)
320{
321 set->union_ (other);
322}
323
324/**
325 * hb_set_intersect:
326 * @set: a set.
327 * @other:
328 *
329 *
330 *
331 * Since: 0.9.2
332 **/
333void
334hb_set_intersect (hb_set_t *set,
335 const hb_set_t *other)
336{
337 set->intersect (other);
338}
339
340/**
341 * hb_set_subtract:
342 * @set: a set.
343 * @other:
344 *
345 *
346 *
347 * Since: 0.9.2
348 **/
349void
350hb_set_subtract (hb_set_t *set,
351 const hb_set_t *other)
352{
353 set->subtract (other);
354}
355
356/**
357 * hb_set_symmetric_difference:
358 * @set: a set.
359 * @other:
360 *
361 *
362 *
363 * Since: 0.9.2
364 **/
365void
366hb_set_symmetric_difference (hb_set_t *set,
367 const hb_set_t *other)
368{
369 set->symmetric_difference (other);
370}
371
372/**
373 * hb_set_invert:
374 * @set: a set.
375 *
376 *
377 *
378 * Since: 0.9.10
379 *
380 * Deprecated: 1.6.1
381 **/
382void
383hb_set_invert (hb_set_t *set)
384{
385}
386
387/**
388 * hb_set_get_population:
389 * @set: a set.
390 *
391 * Returns the number of numbers in the set.
392 *
393 * Return value: set population.
394 *
395 * Since: 0.9.7
396 **/
397unsigned int
398hb_set_get_population (const hb_set_t *set)
399{
400 return set->get_population ();
401}
402
403/**
404 * hb_set_get_min:
405 * @set: a set.
406 *
407 * Finds the minimum number in the set.
408 *
409 * Return value: minimum of the set, or %HB_SET_VALUE_INVALID if set is empty.
410 *
411 * Since: 0.9.7
412 **/
413hb_codepoint_t
414hb_set_get_min (const hb_set_t *set)
415{
416 return set->get_min ();
417}
418
419/**
420 * hb_set_get_max:
421 * @set: a set.
422 *
423 * Finds the maximum number in the set.
424 *
425 * Return value: minimum of the set, or %HB_SET_VALUE_INVALID if set is empty.
426 *
427 * Since: 0.9.7
428 **/
429hb_codepoint_t
430hb_set_get_max (const hb_set_t *set)
431{
432 return set->get_max ();
433}
434
435/**
436 * hb_set_next:
437 * @set: a set.
438 * @codepoint: (inout):
439 *
440 *
441 *
442 * Return value: whether there was a next value.
443 *
444 * Since: 0.9.2
445 **/
446hb_bool_t
447hb_set_next (const hb_set_t *set,
448 hb_codepoint_t *codepoint)
449{
450 return set->next (codepoint);
451}
452
453/**
454 * hb_set_next_range:
455 * @set: a set.
456 * @first: (out): output first codepoint in the range.
457 * @last: (inout): input current last and output last codepoint in the range.
458 *
459 * Gets the next consecutive range of numbers in @set that
460 * are greater than current value of @last.
461 *
462 * Return value: whether there was a next range.
463 *
464 * Since: 0.9.7
465 **/
466hb_bool_t
467hb_set_next_range (const hb_set_t *set,
468 hb_codepoint_t *first,
469 hb_codepoint_t *last)
470{
471 return set->next_range (first, last);
472}
473

source code of qtbase/src/3rdparty/harfbuzz-ng/src/hb-set.cc