Revert "[VARC] Store axisIndices and axisValues as HBUINT16" This reverts commit b76d88b3b4e977747a4fb7f4b82963d9f0a4e63f.
diff --git a/src/OT/Var/VARC/VARC.cc b/src/OT/Var/VARC/VARC.cc index 899b2f1..1afb571 100644 --- a/src/OT/Var/VARC/VARC.cc +++ b/src/OT/Var/VARC/VARC.cc
@@ -192,22 +192,17 @@ // Axis values - hb_array_t<const HBINT16> axisIndices; + hb_vector_t<unsigned> axisIndices; hb_vector_t<float> axisValues; if (flags & (unsigned) flags_t::HAVE_AXES) { unsigned axisIndicesIndex; READ_UINT32VAR (axisIndicesIndex); axisIndices = (&VARC+VARC.axisIndicesList)[axisIndicesIndex]; - if (axisValues.resize (axisIndices.length)) - { - if (unlikely (unsigned (end - record) < axisIndices.length * sizeof (HBINT16))) - return hb_ubytes_t (); - const HBINT16 *base = (const HBINT16 *) record; - for (unsigned i = 0; i < axisIndices.length; i++) - axisValues.arrayZ[i] = base[i]; - } - record += axisIndices.length * sizeof (HBINT16); + axisValues.resize (axisIndices.length); + const HBUINT8 *p = (const HBUINT8 *) record; + TupleValues::decompile (p, axisValues, (const HBUINT8 *) end); + record += (const unsigned char *) p - record; } // Apply variations if any
diff --git a/src/OT/Var/VARC/VARC.hh b/src/OT/Var/VARC/VARC.hh index d91e975..d60f7b0 100644 --- a/src/OT/Var/VARC/VARC.hh +++ b/src/OT/Var/VARC/VARC.hh
@@ -178,7 +178,7 @@ Offset32To<Coverage> coverage; Offset32To<MultiItemVariationStore> varStore; Offset32To<ConditionList> conditionList; - Offset32To<Int16TupleList> axisIndicesList; + Offset32To<TupleList> axisIndicesList; Offset32To<CFF2Index/*Of<VarCompositeGlyph>*/> glyphRecords; public: DEFINE_SIZE_STATIC (24);
diff --git a/src/hb-open-type.hh b/src/hb-open-type.hh index 8480a04..a52b65b 100644 --- a/src/hb-open-type.hh +++ b/src/hb-open-type.hh
@@ -1879,20 +1879,16 @@ } }; -template <typename Type> -struct TypedTupleList : CFF2Index +struct FloatTupleList : CFF2Index { - hb_array_t<const Type> operator [] (unsigned i) const + hb_array_t<const float> operator [] (unsigned i) const { auto bytes = CFF2Index::operator [] (i); - return hb_array (&StructAtOffsetUnaligned<Type>(bytes.arrayZ, 0), - bytes.length / hb_static_size (Type)); + return hb_array (&StructAtOffsetUnaligned<float>(bytes.arrayZ, 0), + bytes.length / sizeof (float)); } }; -using Int16TupleList = TypedTupleList<HBINT16>; -using FloatTupleList = TypedTupleList<float>; - } /* namespace OT */