Mercurial > hgrepos > Python2 > PyMuPDF
comparison mupdf-source/thirdparty/harfbuzz/src/OT/Layout/GPOS/AnchorMatrix.hh @ 2:b50eed0cc0ef upstream
ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4.
The directory name has changed: no version number in the expanded directory now.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 15 Sep 2025 11:43:07 +0200 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1:1d09e1dec1d9 | 2:b50eed0cc0ef |
|---|---|
| 1 #ifndef OT_LAYOUT_GPOS_ANCHORMATRIX_HH | |
| 2 #define OT_LAYOUT_GPOS_ANCHORMATRIX_HH | |
| 3 | |
| 4 namespace OT { | |
| 5 namespace Layout { | |
| 6 namespace GPOS_impl { | |
| 7 | |
| 8 struct AnchorMatrix | |
| 9 { | |
| 10 HBUINT16 rows; /* Number of rows */ | |
| 11 UnsizedArrayOf<Offset16To<Anchor>> | |
| 12 matrixZ; /* Matrix of offsets to Anchor tables-- | |
| 13 * from beginning of AnchorMatrix table */ | |
| 14 public: | |
| 15 DEFINE_SIZE_ARRAY (2, matrixZ); | |
| 16 | |
| 17 bool sanitize (hb_sanitize_context_t *c, unsigned int cols) const | |
| 18 { | |
| 19 TRACE_SANITIZE (this); | |
| 20 if (!c->check_struct (this)) return_trace (false); | |
| 21 if (unlikely (hb_unsigned_mul_overflows (rows, cols))) return_trace (false); | |
| 22 unsigned int count = rows * cols; | |
| 23 if (!c->check_array (matrixZ.arrayZ, count)) return_trace (false); | |
| 24 for (unsigned int i = 0; i < count; i++) | |
| 25 if (!matrixZ[i].sanitize (c, this)) return_trace (false); | |
| 26 return_trace (true); | |
| 27 } | |
| 28 | |
| 29 const Anchor& get_anchor (unsigned int row, unsigned int col, | |
| 30 unsigned int cols, bool *found) const | |
| 31 { | |
| 32 *found = false; | |
| 33 if (unlikely (row >= rows || col >= cols)) return Null (Anchor); | |
| 34 *found = !matrixZ[row * cols + col].is_null (); | |
| 35 return this+matrixZ[row * cols + col]; | |
| 36 } | |
| 37 | |
| 38 template <typename Iterator, | |
| 39 hb_requires (hb_is_iterator (Iterator))> | |
| 40 void collect_variation_indices (hb_collect_variation_indices_context_t *c, | |
| 41 Iterator index_iter) const | |
| 42 { | |
| 43 for (unsigned i : index_iter) | |
| 44 (this+matrixZ[i]).collect_variation_indices (c); | |
| 45 } | |
| 46 | |
| 47 template <typename Iterator, | |
| 48 hb_requires (hb_is_iterator (Iterator))> | |
| 49 bool subset (hb_subset_context_t *c, | |
| 50 unsigned num_rows, | |
| 51 Iterator index_iter) const | |
| 52 { | |
| 53 TRACE_SUBSET (this); | |
| 54 | |
| 55 auto *out = c->serializer->start_embed (this); | |
| 56 | |
| 57 if (!index_iter) return_trace (false); | |
| 58 if (unlikely (!c->serializer->extend_min (out))) return_trace (false); | |
| 59 | |
| 60 out->rows = num_rows; | |
| 61 for (const unsigned i : index_iter) | |
| 62 { | |
| 63 auto *offset = c->serializer->embed (matrixZ[i]); | |
| 64 if (!offset) return_trace (false); | |
| 65 offset->serialize_subset (c, matrixZ[i], this); | |
| 66 } | |
| 67 | |
| 68 return_trace (true); | |
| 69 } | |
| 70 }; | |
| 71 | |
| 72 | |
| 73 } | |
| 74 } | |
| 75 } | |
| 76 | |
| 77 #endif /* OT_LAYOUT_GPOS_ANCHORMATRIX_HH */ |
