divmod -> bit stuff

This commit is contained in:
Casey 2024-07-09 21:24:37 +03:00
parent e01fd368fa
commit 3ab4a24a14
Signed by: hkc
GPG Key ID: F0F6CFE11CDB0960
1 changed files with 8 additions and 8 deletions

View File

@ -243,10 +243,10 @@ class Manager:
self.bits_toggled_off = len(bits_off) self.bits_toggled_off = len(bits_off)
for ndx in bits_on: for ndx in bits_on:
byte, bit = divmod(ndx, 8) byte, bit = ndx >> 3, ndx & 7
self.shmem.buf[OFFSET_STATE + byte] |= 0x80 >> bit self.shmem.buf[OFFSET_STATE + byte] |= 0x80 >> bit
for ndx in bits_off: for ndx in bits_off:
byte, bit = divmod(ndx, 8) byte, bit = ndx >> 3, ndx & 7
self.shmem.buf[OFFSET_STATE + byte] &= 0xFF ^ (0x80 >> bit) self.shmem.buf[OFFSET_STATE + byte] &= 0xFF ^ (0x80 >> bit)
since_last_printout = time.time() - self.last_printout since_last_printout = time.time() - self.last_printout
@ -268,7 +268,7 @@ class Manager:
with Image.new("RGB", (1000, 1000), 0) as im: with Image.new("RGB", (1000, 1000), 0) as im:
for i in range(1000000): for i in range(1000000):
y, x = divmod(i, 1000) y, x = divmod(i, 1000)
byte, bit = divmod(i, 8) byte, bit = i >> 3, i & 7
im.putpixel( im.putpixel(
(x, y), (x, y),
( (
@ -285,7 +285,7 @@ class Manager:
with Image.new("L", (1000, 1000), 0) as im: with Image.new("L", (1000, 1000), 0) as im:
for i in range(1000000): for i in range(1000000):
y, x = divmod(i, 1000) y, x = divmod(i, 1000)
byte, bit = divmod(i, 8) byte, bit = i >> 3, i & 7
im.putpixel( im.putpixel(
(x, y), (x, y),
255 if (buf[OFFSET_AVOID + byte] << bit) & 0x80 else 0, 255 if (buf[OFFSET_AVOID + byte] << bit) & 0x80 else 0,
@ -313,7 +313,7 @@ class Manager:
def add_avoid_range(self, rng: range): def add_avoid_range(self, rng: range):
assert self.shmem is not None assert self.shmem is not None
for ndx in rng: for ndx in rng:
byte, bit = divmod(ndx, 8) byte, bit = ndx >> 3, ndx & 7
self.shmem.buf[OFFSET_AVOID + byte] |= 0x80 >> bit self.shmem.buf[OFFSET_AVOID + byte] |= 0x80 >> bit
def add_avoid_rect(self, sx: int, sy: int, w: int, h: int): def add_avoid_rect(self, sx: int, sy: int, w: int, h: int):
@ -324,7 +324,7 @@ class Manager:
def add_avoid_index(self, index: int): def add_avoid_index(self, index: int):
assert self.shmem is not None assert self.shmem is not None
assert 0 <= index < 1000000 assert 0 <= index < 1000000
byte, bit = divmod(index, 8) byte, bit = index >> 3, index & 7
self.shmem.buf[OFFSET_AVOID + byte] |= 0x80 >> bit self.shmem.buf[OFFSET_AVOID + byte] |= 0x80 >> bit
def add_avoid_image(self, im: Image.Image): def add_avoid_image(self, im: Image.Image):
@ -342,7 +342,7 @@ class Manager:
def set_index(self, index: int, value: bool): def set_index(self, index: int, value: bool):
assert 0 <= index <= 1000000 assert 0 <= index <= 1000000
assert self.shmem is not None assert self.shmem is not None
byte, bit = divmod(index, 8) byte, bit = index >> 3, index & 7
self.shmem.buf[OFFSET_MASK + byte] |= 0x80 >> bit self.shmem.buf[OFFSET_MASK + byte] |= 0x80 >> bit
if value: if value:
self.shmem.buf[OFFSET_CANVAS + byte] |= 0x80 >> bit self.shmem.buf[OFFSET_CANVAS + byte] |= 0x80 >> bit
@ -352,7 +352,7 @@ class Manager:
def clear_index(self, index: int): def clear_index(self, index: int):
assert 0 <= index <= 1000000 assert 0 <= index <= 1000000
assert self.shmem is not None assert self.shmem is not None
byte, bit = divmod(index, 8) byte, bit = index >> 3, index & 7
self.shmem.buf[OFFSET_MASK + byte] &= 0xFF ^ (0x80 >> bit) self.shmem.buf[OFFSET_MASK + byte] &= 0xFF ^ (0x80 >> bit)
self.shmem.buf[OFFSET_CANVAS + byte] &= 0xFF ^ (0x80 >> bit) self.shmem.buf[OFFSET_CANVAS + byte] &= 0xFF ^ (0x80 >> bit)