tor-browser

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

composite-iter.hh (1648B)


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