Coverage Report

Created: 2024-05-18 02:12

/src/harfbuzz/src/hb-face.hh
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright © 2009  Red Hat, Inc.
3
 * Copyright © 2011  Google, Inc.
4
 *
5
 *  This is part of HarfBuzz, a text shaping library.
6
 *
7
 * Permission is hereby granted, without written agreement and without
8
 * license or royalty fees, to use, copy, modify, and distribute this
9
 * software and its documentation for any purpose, provided that the
10
 * above copyright notice and the following two paragraphs appear in
11
 * all copies of this software.
12
 *
13
 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
14
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
15
 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
16
 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
17
 * DAMAGE.
18
 *
19
 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
20
 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
21
 * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
22
 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
23
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
24
 *
25
 * Red Hat Author(s): Behdad Esfahbod
26
 * Google Author(s): Behdad Esfahbod
27
 */
28
29
#ifndef HB_FACE_HH
30
#define HB_FACE_HH
31
32
#include "hb.hh"
33
34
#include "hb-shaper.hh"
35
#include "hb-shape-plan.hh"
36
#include "hb-ot-face.hh"
37
38
39
/*
40
 * hb_face_t
41
 */
42
43
#define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INSTANTIATE_SHAPERS(shaper, face);
44
#include "hb-shaper-list.hh"
45
#undef HB_SHAPER_IMPLEMENT
46
47
struct hb_face_t
48
{
49
  hb_object_header_t header;
50
51
  hb_reference_table_func_t  reference_table_func;
52
  void                      *user_data;
53
  hb_destroy_func_t          destroy;
54
55
  unsigned int index;     /* Face index in a collection, zero-based. */
56
  mutable hb_atomic_int_t upem;   /* Units-per-EM. */
57
  mutable hb_atomic_int_t num_glyphs; /* Number of glyphs. */
58
59
  hb_shaper_object_dataset_t<hb_face_t> data;/* Various shaper data. */
60
  hb_ot_face_t table;     /* All the face's tables. */
61
62
  /* Cache */
63
  struct plan_node_t
64
  {
65
    hb_shape_plan_t *shape_plan;
66
    plan_node_t *next;
67
  };
68
  hb_atomic_ptr_t<plan_node_t> shape_plans;
69
70
  hb_blob_t *reference_table (hb_tag_t tag) const
71
224M
  {
72
224M
    hb_blob_t *blob;
73
74
224M
    if (unlikely (!reference_table_func))
75
0
      return hb_blob_get_empty ();
76
77
224M
    blob = reference_table_func (/*XXX*/const_cast<hb_face_t *> (this), tag, user_data);
78
224M
    if (unlikely (!blob))
79
0
      return hb_blob_get_empty ();
80
81
224M
    return blob;
82
224M
  }
83
84
  unsigned int get_upem () const
85
35.0M
  {
86
35.0M
    unsigned int ret = upem.get_relaxed ();
87
35.0M
    if (unlikely (!ret))
88
5.77M
    {
89
5.77M
      return load_upem ();
90
5.77M
    }
91
29.2M
    return ret;
92
35.0M
  }
93
94
  unsigned int get_num_glyphs () const
95
236M
  {
96
236M
    unsigned int ret = num_glyphs.get_relaxed ();
97
236M
    if (unlikely (ret == UINT_MAX))
98
5.77M
      return load_num_glyphs ();
99
231M
    return ret;
100
236M
  }
101
102
  private:
103
  HB_INTERNAL unsigned int load_upem () const;
104
  HB_INTERNAL unsigned int load_num_glyphs () const;
105
};
106
DECLARE_NULL_INSTANCE (hb_face_t);
107
108
109
#endif /* HB_FACE_HH */