Advanced types
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
import struct
|
||||
|
||||
def pwp_number(fmt):
|
||||
size = struct.calcsize(fmt)
|
||||
|
||||
def decorator(cls):
|
||||
def __init__(self, value):
|
||||
self.value = value
|
||||
|
||||
def to_com(self):
|
||||
return struct.pack(fmt, self.value)
|
||||
|
||||
@classmethod
|
||||
def from_com(cls, data, offset=0):
|
||||
value = struct.unpack_from(fmt, data, offset)[0]
|
||||
return cls(value), offset + size
|
||||
|
||||
cls.__init__ = __init__
|
||||
cls.to_com = to_com
|
||||
cls.from_com = from_com
|
||||
|
||||
return cls
|
||||
|
||||
return decorator
|
||||
|
||||
# Unsigned integers
|
||||
@pwp_number("<B")
|
||||
class u8: pass
|
||||
|
||||
@pwp_number("<H")
|
||||
class u16: pass
|
||||
|
||||
@pwp_number("<I")
|
||||
class u32: pass
|
||||
|
||||
@pwp_number("<Q")
|
||||
class u64: pass
|
||||
|
||||
# Signed integers
|
||||
@pwp_number("<b")
|
||||
class i8: pass
|
||||
|
||||
@pwp_number("<h")
|
||||
class i16: pass
|
||||
|
||||
@pwp_number("<i")
|
||||
class i32: pass
|
||||
|
||||
@pwp_number("<q")
|
||||
class i64: pass
|
||||
|
||||
# Floating point
|
||||
@pwp_number("<f")
|
||||
class f32: pass
|
||||
|
||||
@pwp_number("<d")
|
||||
class f64: pass
|
||||
Reference in New Issue
Block a user