Skip to content

Commit 628e583

Browse files
committed
Codegen for bitmask enums
1 parent 6e17e5d commit 628e583

File tree

3 files changed

+22
-13
lines changed

3 files changed

+22
-13
lines changed

codegen/templates/ServiceInterfaceTemplate.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ cog.outl(f"#define {service['interface_class_name'].upper()}_HPP")
1919
#include <xbot-service-interface/ServiceInterfaceBase.hpp>
2020
#include <xbot-service-interface/XbotServiceInterface.hpp>
2121

22+
/*[[[cog
23+
xbot_codegen.generateEnums(service)
24+
]]]*/
25+
//[[[end]]]
2226
/*[[[cog
2327
cog.outl(f"class {service['interface_class_name']} : public xbot::serviceif::ServiceInterfaceBase {{")
2428
]]]*/
@@ -31,10 +35,6 @@ class ServiceTemplateInterfaceBase : public xbot::serviceif::ServiceInterfaceBas
3135
explicit ServiceTemplateInterfaceBase(uint16_t service_id, xbot::serviceif::Context ctx) : ServiceInterfaceBase(service_id, "ServiceTemplate", 1, ctx) {}
3236
//[[[end]]]
3337

34-
/*[[[cog
35-
xbot_codegen.generateEnums(service)
36-
]]]*/
37-
//[[[end]]]
3838
/*[[[cog
3939
# Generate send functions for each input.
4040
for input in service["inputs"]:

codegen/templates/ServiceTemplate.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ cog.outl(f"#define {service['class_name'].upper()}_HPP")
1818

1919
#include <xbot-service/Service.hpp>
2020

21+
/*[[[cog
22+
xbot_codegen.generateEnums(service)
23+
]]]*/
24+
//[[[end]]]
2125
/*[[[cog
2226
cog.outl(f"class {service['class_name']} : public xbot::service::Service {{")
2327
]]]*/
@@ -99,10 +103,6 @@ class ServiceTemplateBase : public xbot::service::Service {
99103
};
100104
//[[[end]]]
101105

102-
/*[[[cog
103-
xbot_codegen.generateEnums(service)
104-
]]]*/
105-
//[[[end]]]
106106
private:
107107
uint32_t sd_sequence_ = 0;
108108
bool reboot = true;

codegen/xbot_codegen/xbot_codegen.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,8 @@ def loadService(path: str) -> dict:
115115
service["enums"].append({
116116
"id": enum["id"],
117117
"base_type": enum["base_type"],
118-
"values": enum["values"]
118+
"values": enum["values"],
119+
"bitmask": enum.get("bitmask", False),
119120
})
120121

121122
# Transform the input definitions
@@ -146,7 +147,15 @@ def loadService(path: str) -> dict:
146147

147148
def generateEnums(service):
148149
for enum in service["enums"]:
149-
cog.outl(f"enum class {enum['id']} : {enum['base_type']} {{")
150-
for id, value in enum["values"].items():
151-
cog.outl(f" {id} = {value},")
152-
cog.outl("};\n")
150+
if enum['bitmask']:
151+
cog.outl(f"namespace {enum['id']} {{")
152+
cog.outl(f" enum Value : {enum['base_type']} {{")
153+
for id, value in enum["values"].items():
154+
cog.outl(f" {id} = 1 << {value},")
155+
cog.outl(" };")
156+
cog.outl("};\n")
157+
else:
158+
cog.outl(f"enum class {enum['id']} : {enum['base_type']} {{")
159+
for id, value in enum["values"].items():
160+
cog.outl(f" {id} = {value},")
161+
cog.outl("};\n")

0 commit comments

Comments
 (0)