tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

split-helpers.hh (2109B)


      1 /*
      2 * Copyright © 2022  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): Garret Rieger
     25 */
     26 
     27 #ifndef GRAPH_SPLIT_HELPERS_HH
     28 #define GRAPH_SPLIT_HELPERS_HH
     29 
     30 namespace graph {
     31 
     32 template<typename Context>
     33 HB_INTERNAL
     34 hb_vector_t<unsigned> actuate_subtable_split (Context& split_context,
     35                                              const hb_vector_t<unsigned>& split_points)
     36 {
     37  hb_vector_t<unsigned> new_objects;
     38  if (!split_points)
     39    return new_objects;
     40 
     41  for (unsigned i = 0; i < split_points.length; i++)
     42  {
     43    unsigned start = split_points[i];
     44    unsigned end = (i < split_points.length - 1)
     45                   ? split_points[i + 1]
     46                   : split_context.original_count ();
     47    unsigned id = split_context.clone_range (start, end);
     48 
     49    if (id == (unsigned) -1)
     50    {
     51      new_objects.reset ();
     52      new_objects.ensure_error ();
     53      return new_objects;
     54    }
     55    new_objects.push (id);
     56  }
     57 
     58  if (!split_context.shrink (split_points[0]))
     59  {
     60    new_objects.reset ();
     61    new_objects.ensure_error ();
     62  }
     63 
     64  return new_objects;
     65 }
     66 
     67 }
     68 
     69 #endif  // GRAPH_SPLIT_HELPERS_HH