util/MultiEnum: repurpose third parameter for shift
This commit is contained in:
parent
c823b0fc41
commit
49f3db1435
|
@ -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__,
|
||||
|
|
Loading…
Reference in New Issue