1*2d1272b8SAndroid Build Coastguard Worker #ifndef OT_GLYF_COMPOSITE_ITER_HH 2*2d1272b8SAndroid Build Coastguard Worker #define OT_GLYF_COMPOSITE_ITER_HH 3*2d1272b8SAndroid Build Coastguard Worker 4*2d1272b8SAndroid Build Coastguard Worker 5*2d1272b8SAndroid Build Coastguard Worker #include "../../hb.hh" 6*2d1272b8SAndroid Build Coastguard Worker 7*2d1272b8SAndroid Build Coastguard Worker 8*2d1272b8SAndroid Build Coastguard Worker namespace OT { 9*2d1272b8SAndroid Build Coastguard Worker namespace glyf_impl { 10*2d1272b8SAndroid Build Coastguard Worker 11*2d1272b8SAndroid Build Coastguard Worker 12*2d1272b8SAndroid Build Coastguard Worker template <typename CompositeGlyphRecord> 13*2d1272b8SAndroid Build Coastguard Worker struct composite_iter_tmpl : hb_iter_with_fallback_t<composite_iter_tmpl<CompositeGlyphRecord>, 14*2d1272b8SAndroid Build Coastguard Worker const CompositeGlyphRecord &> 15*2d1272b8SAndroid Build Coastguard Worker { 16*2d1272b8SAndroid Build Coastguard Worker typedef const CompositeGlyphRecord *__item_t__; composite_iter_tmplOT::glyf_impl::composite_iter_tmpl17*2d1272b8SAndroid Build Coastguard Worker composite_iter_tmpl (hb_bytes_t glyph_, __item_t__ current_) : 18*2d1272b8SAndroid Build Coastguard Worker glyph (glyph_), current (nullptr), current_size (0) 19*2d1272b8SAndroid Build Coastguard Worker { 20*2d1272b8SAndroid Build Coastguard Worker set_current (current_); 21*2d1272b8SAndroid Build Coastguard Worker } 22*2d1272b8SAndroid Build Coastguard Worker composite_iter_tmplOT::glyf_impl::composite_iter_tmpl23*2d1272b8SAndroid Build Coastguard Worker composite_iter_tmpl () : glyph (hb_bytes_t ()), current (nullptr), current_size (0) {} 24*2d1272b8SAndroid Build Coastguard Worker __item__OT::glyf_impl::composite_iter_tmpl25*2d1272b8SAndroid Build Coastguard Worker const CompositeGlyphRecord & __item__ () const { return *current; } __more__OT::glyf_impl::composite_iter_tmpl26*2d1272b8SAndroid Build Coastguard Worker bool __more__ () const { return current; } __next__OT::glyf_impl::composite_iter_tmpl27*2d1272b8SAndroid Build Coastguard Worker void __next__ () 28*2d1272b8SAndroid Build Coastguard Worker { 29*2d1272b8SAndroid Build Coastguard Worker if (!current->has_more ()) { current = nullptr; return; } 30*2d1272b8SAndroid Build Coastguard Worker 31*2d1272b8SAndroid Build Coastguard Worker set_current (&StructAtOffset<CompositeGlyphRecord> (current, current_size)); 32*2d1272b8SAndroid Build Coastguard Worker } __end__OT::glyf_impl::composite_iter_tmpl33*2d1272b8SAndroid Build Coastguard Worker composite_iter_tmpl __end__ () const { return composite_iter_tmpl (); } operator !=OT::glyf_impl::composite_iter_tmpl34*2d1272b8SAndroid Build Coastguard Worker bool operator != (const composite_iter_tmpl& o) const 35*2d1272b8SAndroid Build Coastguard Worker { return current != o.current; } 36*2d1272b8SAndroid Build Coastguard Worker 37*2d1272b8SAndroid Build Coastguard Worker set_currentOT::glyf_impl::composite_iter_tmpl38*2d1272b8SAndroid Build Coastguard Worker void set_current (__item_t__ current_) 39*2d1272b8SAndroid Build Coastguard Worker { 40*2d1272b8SAndroid Build Coastguard Worker if (!glyph.check_range (current_, CompositeGlyphRecord::min_size)) 41*2d1272b8SAndroid Build Coastguard Worker { 42*2d1272b8SAndroid Build Coastguard Worker current = nullptr; 43*2d1272b8SAndroid Build Coastguard Worker current_size = 0; 44*2d1272b8SAndroid Build Coastguard Worker return; 45*2d1272b8SAndroid Build Coastguard Worker } 46*2d1272b8SAndroid Build Coastguard Worker unsigned size = current_->get_size (); 47*2d1272b8SAndroid Build Coastguard Worker if (!glyph.check_range (current_, size)) 48*2d1272b8SAndroid Build Coastguard Worker { 49*2d1272b8SAndroid Build Coastguard Worker current = nullptr; 50*2d1272b8SAndroid Build Coastguard Worker current_size = 0; 51*2d1272b8SAndroid Build Coastguard Worker return; 52*2d1272b8SAndroid Build Coastguard Worker } 53*2d1272b8SAndroid Build Coastguard Worker 54*2d1272b8SAndroid Build Coastguard Worker current = current_; 55*2d1272b8SAndroid Build Coastguard Worker current_size = size; 56*2d1272b8SAndroid Build Coastguard Worker } 57*2d1272b8SAndroid Build Coastguard Worker 58*2d1272b8SAndroid Build Coastguard Worker private: 59*2d1272b8SAndroid Build Coastguard Worker hb_bytes_t glyph; 60*2d1272b8SAndroid Build Coastguard Worker __item_t__ current; 61*2d1272b8SAndroid Build Coastguard Worker unsigned current_size; 62*2d1272b8SAndroid Build Coastguard Worker }; 63*2d1272b8SAndroid Build Coastguard Worker 64*2d1272b8SAndroid Build Coastguard Worker 65*2d1272b8SAndroid Build Coastguard Worker } /* namespace glyf_impl */ 66*2d1272b8SAndroid Build Coastguard Worker } /* namespace OT */ 67*2d1272b8SAndroid Build Coastguard Worker 68*2d1272b8SAndroid Build Coastguard Worker #endif /* OT_GLYF_COMPOSITE_ITER_HH */ 69