Coverage Report

Created: 2025-11-11 06:05

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/harfbuzz/src/OT/glyf/composite-iter.hh
Line
Count
Source
1
#ifndef OT_GLYF_COMPOSITE_ITER_HH
2
#define OT_GLYF_COMPOSITE_ITER_HH
3
4
5
#include "../../hb.hh"
6
7
8
namespace OT {
9
namespace glyf_impl {
10
11
12
template <typename CompositeGlyphRecord>
13
struct composite_iter_tmpl : hb_iter_with_fallback_t<composite_iter_tmpl<CompositeGlyphRecord>,
14
                 const CompositeGlyphRecord &>
15
{
16
  typedef const CompositeGlyphRecord *__item_t__;
17
  composite_iter_tmpl (hb_bytes_t glyph_, __item_t__ current_) :
18
118k
      glyph (glyph_), current (nullptr), current_size (0)
19
118k
  {
20
118k
    set_current (current_);
21
118k
  }
22
23
118k
  composite_iter_tmpl () : glyph (hb_bytes_t ()), current (nullptr), current_size (0) {}
24
25
654k
  const CompositeGlyphRecord & __item__ () const { return *current; }
26
0
  bool __more__ () const { return current; }
27
  void __next__ ()
28
619k
  {
29
619k
    if (!current->has_more ()) { current = nullptr; return; }
30
31
551k
    set_current (&StructAtOffset<CompositeGlyphRecord> (current, current_size));
32
551k
  }
33
118k
  composite_iter_tmpl __end__ () const { return composite_iter_tmpl (); }
34
  bool operator != (const composite_iter_tmpl& o) const
35
737k
  { return current != o.current; }
36
37
38
  void set_current (__item_t__ current_)
39
670k
  {
40
670k
    if (!glyph.check_range (current_, CompositeGlyphRecord::min_size))
41
8.57k
    {
42
8.57k
      current = nullptr;
43
8.57k
      current_size = 0;
44
8.57k
      return;
45
8.57k
    }
46
662k
    unsigned size = current_->get_size ();
47
662k
    if (!glyph.check_range (current_, size))
48
8.09k
    {
49
8.09k
      current = nullptr;
50
8.09k
      current_size = 0;
51
8.09k
      return;
52
8.09k
    }
53
54
654k
    current = current_;
55
654k
    current_size = size;
56
654k
  }
57
58
  private:
59
  hb_bytes_t glyph;
60
  __item_t__ current;
61
  unsigned current_size;
62
};
63
64
65
} /* namespace glyf_impl */
66
} /* namespace OT */
67
68
#endif /* OT_GLYF_COMPOSITE_ITER_HH */