summaryrefslogtreecommitdiffstats
path: root/tools/enum_parser/parse_enum/benchmark_build/lib/gen.py
diff options
context:
space:
mode:
authorarcadia-devtools <[email protected]>2022-06-09 14:39:19 +0300
committerarcadia-devtools <[email protected]>2022-06-09 14:39:19 +0300
commitc04b663c7bb4b750deeb8f48f620497ec13da8fa (patch)
tree151ebc8bfdd2ad918caf5e6e2d8013e14272ddf8 /tools/enum_parser/parse_enum/benchmark_build/lib/gen.py
parent0d55ca22c507d18c2f35718687e0b06d9915397b (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.py60
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())