[otConverters] Use array read/write in VarIdxMapValue

This commit is contained in:
Behdad Esfahbod 2021-04-30 16:29:18 -06:00
parent db6171df14
commit bd648ea14d

View File

@ -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):