From bd648ea14d6e747bfb15cb1d3041466ce151fcac Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 30 Apr 2021 16:29:18 -0600 Subject: [PATCH] [otConverters] Use array read/write in VarIdxMapValue --- Lib/fontTools/ttLib/tables/otConverters.py | 34 +++++++++------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/Lib/fontTools/ttLib/tables/otConverters.py b/Lib/fontTools/ttLib/tables/otConverters.py index c5a44a5eb..855871051 100644 --- a/Lib/fontTools/ttLib/tables/otConverters.py +++ b/Lib/fontTools/ttLib/tables/otConverters.py @@ -1575,20 +1575,15 @@ class VarIdxMapValue(BaseConverter): outerShift = 16 - innerBits entrySize = 1 + ((fmt & 0x0030) >> 4) - read = { - 1: reader.readUInt8, - 2: reader.readUShort, - 3: reader.readUInt24, - 4: reader.readULong, + readArray = { + 1: reader.readUInt8Array, + 2: reader.readUShortArray, + 3: reader.readUInt24Array, + 4: reader.readULongArray, }[entrySize] - mapping = [] - for i in range(nItems): - raw = read() - idx = ((raw & outerMask) << outerShift) | (raw & innerMask) - mapping.append(idx) - - return mapping + return [(((raw & outerMask) << outerShift) | (raw & innerMask)) + for raw in readArray(nItems)] def write(self, writer, font, tableDict, value, repeatIndex=None): fmt = tableDict['EntryFormat'] @@ -1600,16 +1595,15 @@ class VarIdxMapValue(BaseConverter): outerShift = 16 - innerBits entrySize = 1 + ((fmt & 0x0030) >> 4) - write = { - 1: writer.writeUInt8, - 2: writer.writeUShort, - 3: writer.writeUInt24, - 4: writer.writeULong, + writeArray = { + 1: writer.writeUInt8Array, + 2: writer.writeUShortArray, + 3: writer.writeUInt24Array, + 4: writer.writeULongArray, }[entrySize] - for idx in mapping: - raw = ((idx & 0xFFFF0000) >> outerShift) | (idx & innerMask) - write(raw) + writeArray([(((idx & 0xFFFF0000) >> outerShift) | (idx & innerMask)) + for idx in mapping]) class VarDataValue(BaseConverter):