class Bar(Buffer): def _do_something(self): assert self.f_bar_j == 5 self.f_bar_i = 10 return self.f_bar_i f_bar_i = int_field(where=bytes_ref[0:4], set_before_pack=_do_something) f_bar_j = int_field(where=bytes_ref[4:8])
class Foo(Buffer): f_int = int_field(where=bytes_ref[0:4]) f_str = str_field(where=bytes_ref[4:]) def __init__(self, f_int, f_str): self.f_int = f_int self.f_str = f_str
class Foo(Buffer): f_int = int_field( sign='unsigned', where=(bytes_ref[7].bits[0:4] + bytes_ref[6].bits[0:4] + bytes_ref[5].bits[0:4] + bytes_ref[4].bits[0:4] + bytes_ref[3].bits[0:4] + bytes_ref[2].bits[0:4] + bytes_ref[1].bits[0:4] + bytes_ref[0].bits[0:4]))
class Bar(Buffer): f_a = int_field(where=bytes_ref[0:4]) def __init__(self, f_a=0): self.f_a = f_a def __eq__(self, other): return self.f_a == other.f_a
class Foo(Buffer): f_str_len = int_field(where=bytes_ref[0:4], set_before_pack=lambda self: len(self.f_str)) f_str = str_field(where=bytes_ref[4:4 + f_str_len]) def __init__(self, f_str): self.f_str_len = 0 self.f_str = f_str
class Foo(Buffer): def _choose_bar(self, buffer, **kwargs): return Bar if self.f_select == 0 else Bar2 f_select = int_field(where=bytes_ref[0:4]) f_list = list_field(where=bytes_ref[4:], type=Bar, unpack_selector=_choose_bar, unpack_after=f_select)
class Bar2(Bar): f_b = int_field(where=bytes_ref[4:8]) def __init__(self, f_a=0, f_b=0): super(Bar2, self).__init__(f_a) self.f_b = f_b def __eq__(self, other): return self.f_a == other.f_a and self.f_b == other.f_b
class CoolingElementInfo(Buffer): byte_size = 3 # for real fan speed the fan speed value should be multiplied by a factor of 10 fan_speed = int_field(where=(bytes_ref[0].bits[0:3] + bytes_ref[1])) ident = be_int_field(where=bytes_ref[0].bits[7]) speed_code = be_int_field(where=bytes_ref[2].bits[0:3]) off = be_int_field(where=bytes_ref[2].bits[4]) reqstd_on = be_int_field(where=bytes_ref[2].bits[5]) fail = be_int_field(where=bytes_ref[2].bits[6]) hot_swap = be_int_field(where=bytes_ref[2].bits[7])
class Foo(Buffer): f_a = int_field(where=bytes_ref[0:4])
class Foo2(Buffer): f_int = int_field(where=(bytes_ref[1].bits[0:4] + bytes_ref[0]))
class Foo(Buffer): f_int = int_field(where=bytes_ref[0:4], set_before_pack=len_ref(self_ref.f_str) * 2) f_str = str_field(where=bytes_ref[4:4 + f_int // 2])
class Foo(Buffer): f_int = int_field(where=bytes_ref[0:4], set_before_pack=total_size) f_str = str_field(where=bytes_ref[4:f_int])
class Foo(Buffer): f_foo_i = int_field(where=bytes_ref[0:4]) f_bar = buffer_field(where=bytes_ref[4:4 + Bar.byte_size], type=Bar)
class Bar(Buffer): f_bar_i = int_field(where=bytes_ref[0:4]) f_bar_j = int_field(where=bytes_ref[4:8])
class Foo(Buffer): f_a = int_field(where=bytes_ref[0:4], default=42)
class Foo(Buffer): f_int = int_field(where=bytes_ref[0:4], set_before_pack=total_size - 4) f_str = str_field(where_when_pack=bytes_ref[4:], where_when_unpack=bytes_ref[4:4 + f_int])
class Foo(Buffer): f_a = int_field(where=bytes_ref[0].bits[0:4]) f_b = int_field(where=bytes_ref[0].bits[4:8])
class Bar2(Bar): f_b = int_field(where=bytes_ref[4:8])
class Foo(Buffer): f_int = int_field( sign='unsigned', where=(bytes_ref[0:2].bits[4:12] + bytes_ref[2:4].bits[4:12] + bytes_ref[4:6].bits[4:12] + bytes_ref[6:8].bits[4:12]))