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]))