Coverage Report

Created: 2025-07-18 07:01

/src/harfbuzz/src/OT/glyf/composite-iter.hh
Line
Count
Source (jump to first uncovered line)
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
0
      glyph (glyph_), current (nullptr), current_size (0)
19
0
  {
20
0
    set_current (current_);
21
0
  }
22
23
0
  composite_iter_tmpl () : glyph (hb_bytes_t ()), current (nullptr), current_size (0) {}
24
25
0
  const CompositeGlyphRecord & __item__ () const { return *current; }
26
0
  bool __more__ () const { return current; }
27
  void __next__ ()
28
0
  {
29
0
    if (!current->has_more ()) { current = nullptr; return; }
30
31
0
    set_current (&StructAtOffset<CompositeGlyphRecord> (current, current_size));
32
0
  }
33
0
  composite_iter_tmpl __end__ () const { return composite_iter_tmpl (); }
34
  bool operator != (const composite_iter_tmpl& o) const
35
0
  { return current != o.current; }
36
37
38
  void set_current (__item_t__ current_)
39
0
  {
40
0
    if (!glyph.check_range (current_, CompositeGlyphRecord::min_size))
41
0
    {
42
0
      current = nullptr;
43
0
      current_size = 0;
44
0
      return;
45
0
    }
46
0
    unsigned size = current_->get_size ();
47
0
    if (!glyph.check_range (current_, size))
48
0
    {
49
0
      current = nullptr;
50
0
      current_size = 0;
51
0
      return;
52
0
    }
53
54
0
    current = current_;
55
0
    current_size = size;
56
0
  }
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 */