eis/py/comlib/shm/Head.py

49 lines
1.7 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
'''
* @Author : zoufuzhou
* @Date : 2024-08-23 16:34:37
* @Description : Memory map header structure
* @LastEditTime : 2024-08-26 16:34:37
'''
import struct
class Head:
__format_string = 'III'
# 使用 __slots__ 来优化内存使用
__slots__ = ('maxsize', 'size', 'next')
def __init__(self: 'Head', maxsize: int, size: int, next: int):
self.maxsize = maxsize
self.size = size
self.next = next
def length(self) -> int:
"""返回打包后的字节长度。"""
return struct.calcsize(self.__format_string)
def pack(self) -> bytes:
"""将属性打包为字节数据。"""
return struct.pack(self.__format_string, self.maxsize, self.size, self.next)
def unpack(self, data: bytes) -> None:
"""从字节数据解包到属性中。"""
# print("|Head|unpack|self.maxsize:"+str(self.maxsize)+", self.size:"+str(self.size)+
# ", self.next:"+str(self.next)+",self.__format_string:"+self.__format_string
# +",self.length():"+str(self.length())+",datalen:"+str(len(data)))
if len(data) != self.length():
raise ValueError(
f"数据长度不匹配: 期望 {self.length()}, 实际 {len(data)}.")
self.maxsize, self.size, self.next = struct.unpack(
self.__format_string, data)
# print("|Head|unpack|self.maxsize:"+str(self.maxsize)+", self.size:"+str(self.size)+", self.next:"+str(self.next)+",self.__format_string:"+self.__format_string)
def __str__(self) -> str:
return f"maxsize: {self.maxsize}, size: {self.size}, next: {self.next}"
def __repr__(self) -> str:
return self.__str__()