Advanced types

This commit is contained in:
2026-07-28 05:43:29 +02:00
parent 5f2ff55d35
commit e884b7982f
4 changed files with 73 additions and 19 deletions
+57
View File
@@ -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