1#ifndef OT_LAYOUT_GPOS_MARKBASEPOS_HH
2#define OT_LAYOUT_GPOS_MARKBASEPOS_HH
3
4#include "MarkBasePosFormat1.hh"
5
6namespace OT {
7namespace Layout {
8namespace GPOS_impl {
9
10struct MarkBasePos
11{
12 protected:
13 union {
14 HBUINT16 format; /* Format identifier */
15 MarkBasePosFormat1_2<SmallTypes> format1;
16#ifndef HB_NO_BEYOND_64K
17 MarkBasePosFormat1_2<MediumTypes> format2;
18#endif
19 } u;
20
21 public:
22 template <typename context_t, typename ...Ts>
23 typename context_t::return_t dispatch (context_t *c, Ts&&... ds) const
24 {
25 if (unlikely (!c->may_dispatch (this, &u.format))) return c->no_dispatch_return_value ();
26 TRACE_DISPATCH (this, u.format);
27 switch (u.format) {
28 case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
29#ifndef HB_NO_BEYOND_64K
30 case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
31#endif
32 default:return_trace (c->default_return_value ());
33 }
34 }
35};
36
37}
38}
39}
40
41#endif /* OT_LAYOUT_GPOS_MARKBASEPOS_HH */
42