jdk/src/java.desktop/share/native/libfontmanager/harfbuzz/hb-set.cc
changeset 34414 e496a8d8fc8a
child 43232 8e39ad39979f
equal deleted inserted replaced
34413:bbed9966db6e 34414:e496a8d8fc8a
       
     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  **/
       
    40 hb_set_t *
       
    41 hb_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->clear ();
       
    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  **/
       
    60 hb_set_t *
       
    61 hb_set_get_empty (void)
       
    62 {
       
    63   static const hb_set_t _hb_set_nil = {
       
    64     HB_OBJECT_HEADER_STATIC,
       
    65     true, /* in_error */
       
    66 
       
    67     {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  **/
       
    81 hb_set_t *
       
    82 hb_set_reference (hb_set_t *set)
       
    83 {
       
    84   return hb_object_reference (set);
       
    85 }
       
    86 
       
    87 /**
       
    88  * hb_set_destroy: (skip)
       
    89  * @set: a set.
       
    90  *
       
    91  * Since: 0.9.2
       
    92  **/
       
    93 void
       
    94 hb_set_destroy (hb_set_t *set)
       
    95 {
       
    96   if (!hb_object_destroy (set)) return;
       
    97 
       
    98   set->fini ();
       
    99 
       
   100   free (set);
       
   101 }
       
   102 
       
   103 /**
       
   104  * hb_set_set_user_data: (skip)
       
   105  * @set: a set.
       
   106  * @key:
       
   107  * @data:
       
   108  * @destroy (closure data):
       
   109  * @replace:
       
   110  *
       
   111  * Return value:
       
   112  *
       
   113  * Since: 0.9.2
       
   114  **/
       
   115 hb_bool_t
       
   116 hb_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 (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  **/
       
   134 void *
       
   135 hb_set_get_user_data (hb_set_t           *set,
       
   136                       hb_user_data_key_t *key)
       
   137 {
       
   138   return hb_object_get_user_data (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  **/
       
   152 hb_bool_t
       
   153 hb_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  **/
       
   166 void
       
   167 hb_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  **/
       
   182 hb_bool_t
       
   183 hb_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  **/
       
   199 hb_bool_t
       
   200 hb_set_has (const hb_set_t *set,
       
   201             hb_codepoint_t  codepoint)
       
   202 {
       
   203   return set->has (codepoint);
       
   204 }
       
   205 
       
   206 /**
       
   207  * hb_set_add:
       
   208  * @set: a set.
       
   209  * @codepoint:
       
   210  *
       
   211  *
       
   212  *
       
   213  * Since: 0.9.2
       
   214  **/
       
   215 void
       
   216 hb_set_add (hb_set_t       *set,
       
   217             hb_codepoint_t  codepoint)
       
   218 {
       
   219   set->add (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  **/
       
   232 void
       
   233 hb_set_add_range (hb_set_t       *set,
       
   234                   hb_codepoint_t  first,
       
   235                   hb_codepoint_t  last)
       
   236 {
       
   237   set->add_range (first, last);
       
   238 }
       
   239 
       
   240 /**
       
   241  * hb_set_del:
       
   242  * @set: a set.
       
   243  * @codepoint:
       
   244  *
       
   245  *
       
   246  *
       
   247  * Since: 0.9.2
       
   248  **/
       
   249 void
       
   250 hb_set_del (hb_set_t       *set,
       
   251             hb_codepoint_t  codepoint)
       
   252 {
       
   253   set->del (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  **/
       
   266 void
       
   267 hb_set_del_range (hb_set_t       *set,
       
   268                   hb_codepoint_t  first,
       
   269                   hb_codepoint_t  last)
       
   270 {
       
   271   set->del_range (first, 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  **/
       
   285 hb_bool_t
       
   286 hb_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  **/
       
   301 void
       
   302 hb_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  **/
       
   317 void
       
   318 hb_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  **/
       
   333 void
       
   334 hb_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  **/
       
   349 void
       
   350 hb_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  **/
       
   365 void
       
   366 hb_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 void
       
   381 hb_set_invert (hb_set_t *set)
       
   382 {
       
   383   set->invert ();
       
   384 }
       
   385 
       
   386 /**
       
   387  * hb_set_get_population:
       
   388  * @set: a set.
       
   389  *
       
   390  * Returns the number of numbers in the set.
       
   391  *
       
   392  * Return value: set population.
       
   393  *
       
   394  * Since: 0.9.7
       
   395  **/
       
   396 unsigned int
       
   397 hb_set_get_population (const hb_set_t *set)
       
   398 {
       
   399   return set->get_population ();
       
   400 }
       
   401 
       
   402 /**
       
   403  * hb_set_get_min:
       
   404  * @set: a set.
       
   405  *
       
   406  * Finds the minimum number in the set.
       
   407  *
       
   408  * Return value: minimum of the set, or %HB_SET_VALUE_INVALID if set is empty.
       
   409  *
       
   410  * Since: 0.9.7
       
   411  **/
       
   412 hb_codepoint_t
       
   413 hb_set_get_min (const hb_set_t *set)
       
   414 {
       
   415   return set->get_min ();
       
   416 }
       
   417 
       
   418 /**
       
   419  * hb_set_get_max:
       
   420  * @set: a set.
       
   421  *
       
   422  * Finds the maximum number in the set.
       
   423  *
       
   424  * Return value: minimum of the set, or %HB_SET_VALUE_INVALID if set is empty.
       
   425  *
       
   426  * Since: 0.9.7
       
   427  **/
       
   428 hb_codepoint_t
       
   429 hb_set_get_max (const hb_set_t *set)
       
   430 {
       
   431   return set->get_max ();
       
   432 }
       
   433 
       
   434 /**
       
   435  * hb_set_next:
       
   436  * @set: a set.
       
   437  * @codepoint: (inout):
       
   438  *
       
   439  *
       
   440  *
       
   441  * Return value: whether there was a next value.
       
   442  *
       
   443  * Since: 0.9.2
       
   444  **/
       
   445 hb_bool_t
       
   446 hb_set_next (const hb_set_t *set,
       
   447              hb_codepoint_t *codepoint)
       
   448 {
       
   449   return set->next (codepoint);
       
   450 }
       
   451 
       
   452 /**
       
   453  * hb_set_next_range:
       
   454  * @set: a set.
       
   455  * @first: (out): output first codepoint in the range.
       
   456  * @last: (inout): input current last and output last codepoint in the range.
       
   457  *
       
   458  * Gets the next consecutive range of numbers in @set that
       
   459  * are greater than current value of @last.
       
   460  *
       
   461  * Return value: whether there was a next range.
       
   462  *
       
   463  * Since: 0.9.7
       
   464  **/
       
   465 hb_bool_t
       
   466 hb_set_next_range (const hb_set_t *set,
       
   467                    hb_codepoint_t *first,
       
   468                    hb_codepoint_t *last)
       
   469 {
       
   470   return set->next_range (first, last);
       
   471 }