diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-04-28 09:11:55 +0200 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-04-28 09:11:55 +0200 |
commit | 5b4c1d02ce9108be74e60e9993254a71c5fa9318 (patch) | |
tree | 770772eebb7e3c6f80adfbd9e5e2b0a57a38fd08 /gen | |
parent | 4ea2dd117e656f950c41f9954bd593c313e34ee2 (diff) |
Move out functions into lib.py
Diffstat (limited to 'gen')
-rwxr-xr-x | gen/prop/bool-props.py | 53 | ||||
-rw-r--r-- | gen/prop/lib.py | 47 |
2 files changed, 51 insertions, 49 deletions
diff --git a/gen/prop/bool-props.py b/gen/prop/bool-props.py index a913904..32a293e 100755 --- a/gen/prop/bool-props.py +++ b/gen/prop/bool-props.py @@ -1,55 +1,10 @@ #!/usr/bin/python3 -import functools import math import sys -from typing import Generator - - -def chunks[T](xs: list[T], n: int) -> Generator[list[T], None, None]: - for i in range(0, len(xs), n): - yield xs[i:i + n] - -def powers_of_2() -> Generator[int, None, None]: - i = 0 - while True: - yield 2 ** i - i += 1 - -def bytes_per_col(n: int) -> int: - xs = list(set(functools.reduce(list.__add__, ( - [i, n // i] for i in range(1, int(n ** 0.5) + 1) if n % i == 0) - ))) - for x in sorted(xs, reverse=True): - y = 5 - y += x * 5 - y += x - 1 - if y <= 80: - return x - - raise ValueError - -def isize(x: int) -> int: - if x < 256: - return 1 - if x < 65535: - return 2 - if x < 4294967295: - return 3 - if x < 18446744073709551615: - return 4 - raise ValueError - -def typename(x: int) -> str: - if x < 256: - return "uint8_t" - if x < 65535: - return "uint16_t" - if x < 4294967295: - return "uint32_t" - if x < 18446744073709551615: - return "uint64_t" - raise ValueError + +from lib import * + def parse(file: str) -> list[bool]: xs = [False] * 0x110000 @@ -89,7 +44,7 @@ def genfile(cs: list[tuple[bool, ...]], blksize: int) -> None: print() bcnt = blksize // 8 - bpc = bytes_per_col(bcnt) + bpc = columns(bcnt) print(f'static constexpr unsigned char stage2[][{bcnt}] = {{') for c in cs: x = sum(map(lambda x: x[1] << x[0], enumerate(c))) diff --git a/gen/prop/lib.py b/gen/prop/lib.py new file mode 100644 index 0000000..b4c7e1e --- /dev/null +++ b/gen/prop/lib.py @@ -0,0 +1,47 @@ +import functools +from typing import Generator + +def chunks[T](xs: list[T], n: int) -> Generator[list[T], None, None]: + for i in range(0, len(xs), n): + yield xs[i:i + n] + +def powers_of_2() -> Generator[int, None, None]: + i = 0 + while True: + yield 2 ** i + i += 1 + +def columns(n: int) -> int: + xs = list(set(functools.reduce(list.__add__, ( + [i, n // i] for i in range(1, int(n ** 0.5) + 1) if n % i == 0) + ))) + for x in sorted(xs, reverse=True): + y = 5 + y += x * 5 + y += x - 1 + if y <= 80: + return x + + raise ValueError + +def isize(x: int) -> int: + if x < 256: + return 1 + if x < 65535: + return 2 + if x < 4294967295: + return 3 + if x < 18446744073709551615: + return 4 + raise ValueError + +def typename(x: int) -> str: + if x < 256: + return "uint8_t" + if x < 65535: + return "uint16_t" + if x < 4294967295: + return "uint32_t" + if x < 18446744073709551615: + return "uint64_t" + raise ValueError |