Imported Upstream version 8.2.2
[platform/upstream/harfbuzz.git] / src / OT / Layout / GPOS / MarkLigPos.hh
1 #ifndef OT_LAYOUT_GPOS_MARKLIGPOS_HH
2 #define OT_LAYOUT_GPOS_MARKLIGPOS_HH
3
4 #include "MarkLigPosFormat1.hh"
5
6 namespace OT {
7 namespace Layout {
8 namespace GPOS_impl {
9
10 struct MarkLigPos
11 {
12   protected:
13   union {
14   HBUINT16                              format;         /* Format identifier */
15   MarkLigPosFormat1_2<SmallTypes>       format1;
16 #ifndef HB_NO_BEYOND_64K
17   MarkLigPosFormat1_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_MARKLIGPOS_HH */