util/MultiEnum: repurpose third parameter for shift

This commit is contained in:
Shiz 2020-06-02 04:37:10 +02:00
parent c823b0fc41
commit 49f3db1435
1 changed files with 5 additions and 5 deletions

View File

@ -19,13 +19,13 @@ class MultiEnumMeta(type):
if isinstance(value, tuple):
if len(value) == 2:
child, mask = value
shift = 0
elif len(value) == 3:
child, offset, size = value
mask = ((1 << size) - 1) << offset
child, mask, shift = value
if inspect.isclass(child):
if mask is None:
mask = ~used
parsers[key] = (child, mask)
parsers[key] = (child, mask, shift)
used |= mask
del attrs[key]
@ -34,8 +34,8 @@ class MultiEnumMeta(type):
class MultiEnum(metaclass=MultiEnumMeta):
def __init__(self, value: int):
for field, (child, mask) in self._parsers_.items():
setattr(self, field, child(value & mask))
for field, (child, mask, shift) in self._parsers_.items():
setattr(self, field, child((value & mask) >> shift))
def __str__(self):
return '{}({})'.format(self.__class__.__name__,