diff options
| author | arcadia-devtools <[email protected]> | 2022-06-09 14:39:19 +0300 |
|---|---|---|
| committer | arcadia-devtools <[email protected]> | 2022-06-09 14:39:19 +0300 |
| commit | c04b663c7bb4b750deeb8f48f620497ec13da8fa (patch) | |
| tree | 151ebc8bfdd2ad918caf5e6e2d8013e14272ddf8 /tools/enum_parser/parse_enum/benchmark_build/lib/gen.py | |
| parent | 0d55ca22c507d18c2f35718687e0b06d9915397b (diff) | |
intermediate changes
ref:2d4f292087954c9344efdabb7b2a67f466263c65
Diffstat (limited to 'tools/enum_parser/parse_enum/benchmark_build/lib/gen.py')
| -rw-r--r-- | tools/enum_parser/parse_enum/benchmark_build/lib/gen.py | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/tools/enum_parser/parse_enum/benchmark_build/lib/gen.py b/tools/enum_parser/parse_enum/benchmark_build/lib/gen.py new file mode 100644 index 00000000000..783ab9f1813 --- /dev/null +++ b/tools/enum_parser/parse_enum/benchmark_build/lib/gen.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +# - * - encoding: UTF-8 - * - + +from argparse import ArgumentParser +import random +import sys +import math + + +def parse_args(): + parser = ArgumentParser(description="") + parser.add_argument('--range', type=int) + parser.add_argument('--enum', nargs=2, action="append", metavar=("NAME", "SIZE")) + parser.add_argument('--namespace', type=str) + args = parser.parse_args() + return args + + +def gen_enum(name, n): + rg = random.Random(n) + h1 = list(range(n)) + h2 = list(range(n)) + rg.shuffle(h1) + rg.shuffle(h2) + + print("enum class %s {" % name) + for k, v in zip(h1, h2): + print(" V%x = 0x%04x," % (k, v)) + print("};") + print() + + +def main(): + args = parse_args() + + print("#pragma once\n\n") + + gr = {} + for name, size in args.enum or []: + assert name not in gr + gr[name] = int(size) + if args.range: + step = max(int(math.sqrt(args.range)), 1) + for s in range(args.range, -1, -step): + gr["EDenseEnum%04d" % s] = s + + if args.namespace: + print(f"namespace {args.namespace} {{") + + for name, size in sorted(gr.items(), key=lambda kv: -kv[1]): + gen_enum(name, size) + + if args.namespace: + print(f"}} // namespace {args.namespace}") + + return 0 + + +if __name__ == '__main__': + sys.exit(main()) |
