Refactor node_cast_value to use large if/elif instead of dict lookup

This commit is contained in:
jaseg 2017-12-25 13:16:58 +01:00
parent 092707259b
commit 62add955f9

37
mpv.py
View file

@ -196,18 +196,31 @@ class MpvNode(Structure):
@staticmethod @staticmethod
def node_cast_value(v, fmt=MpvFormat.NODE, decoder=identity_decoder): def node_cast_value(v, fmt=MpvFormat.NODE, decoder=identity_decoder):
return { if fmt == MpvFormat.NONE:
MpvFormat.NONE: lambda v: None, return None
MpvFormat.STRING: lambda v: decoder(v.string), elif fmt == MpvFormat.STRING:
MpvFormat.OSD_STRING: lambda v: v.string.decode('utf-8'), return decoder(v.string)
MpvFormat.FLAG: lambda v: bool(v.flag), elif fmt == MpvFormat.OSD_STRING:
MpvFormat.INT64: lambda v: v.int64, return v.string.decode('utf-8')
MpvFormat.DOUBLE: lambda v: v.double, elif fmt == MpvFormat.FLAG:
MpvFormat.NODE: lambda v: v.node.contents.node_value(decoder) if v.node else None, return bool(v.flag)
MpvFormat.NODE_ARRAY: lambda v: v.list.contents.array_value(decoder) if v.list else None, elif fmt == MpvFormat.INT64:
MpvFormat.NODE_MAP: lambda v: v.map.contents.dict_value(decoder) if v.map else None, return v.int64
MpvFormat.BYTE_ARRAY: lambda v: v.byte_array.contents.bytes_value() if v.byte_array else None, elif fmt == MpvFormat.DOUBLE:
}[fmt](v) return v.double
else:
if not v.node: # Check for null pointer
return None
if fmt == MpvFormat.NODE:
return v.node.contents.node_value(decoder)
elif fmt == MpvFormat.NODE_ARRAY:
return v.list.contents.array_value(decoder)
elif fmt == MpvFormat.NODE_MAP:
return v.map.contents.dict_value(decoder)
elif fmt == MpvFormat.BYTE_ARRAY:
return v.byte_array.contents.bytes_value()
else:
raise TypeError('Unknown MPV node format {}. Please submit a bug report.'.format(fmt))
class MpvNodeUnion(Union): class MpvNodeUnion(Union):
_fields_ = [('string', c_char_p), _fields_ = [('string', c_char_p),