From e0fa36e9427424a1e68d4c196dd5249b1cef7e2c Mon Sep 17 00:00:00 2001 From: "Luke T. Shumaker" Date: Mon, 13 Jan 2025 18:57:16 -0700 Subject: wip container types --- lib9p/idl.gen | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'lib9p/idl.gen') diff --git a/lib9p/idl.gen b/lib9p/idl.gen index e796855..3271bb4 100755 --- a/lib9p/idl.gen +++ b/lib9p/idl.gen @@ -266,6 +266,35 @@ enum {idprefix}version {{ ret += "};\n" ret += ifdef_pop(0) + ret += """ +/* container types ************************************************************/ +""" + ret += "\n" + ret += f"struct {idprefix}Tmsg {{\n" + ret += f"\tenum {idprefix}msg_type typ;\n" + ret += "\tunion {\n" + msgs = [msg for msg in typs if isinstance(msg, idl.Message) and msg.msgid % 2 == 0] + typewidth = max(len(c_typename(msg)) for msg in msgs) + for msg in msgs: + ret += ifdef_push(1, c_ver_ifdef(msg.in_versions)) + ret += f"\t\t{c_typename(msg).ljust(typewidth)} {msg.name};\n" + ret += ifdef_pop(0) + ret += "\t} body;\n" + ret += "};\n" + + ret += "\n" + ret += f"struct {idprefix}Rmsg {{\n" + ret += f"\tenum {idprefix}msg_type typ;\n" + ret += "\tunion {\n" + msgs = [msg for msg in typs if isinstance(msg, idl.Message) and msg.msgid % 2 == 1] + typewidth = max(len(c_typename(msg)) for msg in msgs) + for msg in msgs: + ret += ifdef_push(1, c_ver_ifdef(msg.in_versions)) + ret += f"\t\t{c_typename(msg).ljust(typewidth)} {msg.name};\n" + ret += ifdef_pop(0) + ret += "\t} body;\n" + ret += "};\n" + return ret -- cgit v1.2.3-2-g168b