class CField(Field):
- def __init__(
- self,
- field_name,
- field_type,
- array_len=None,
- nelem_field=None):
- super(CField, self).__init__(
- field_name, field_type, array_len, nelem_field)
-
def get_c_def(self):
if self.len is not None:
return "%s %s[%d]" % (self.type.get_c_name(), self.name, self.len)
class CStruct(Struct):
- def __init__(self, name, fields):
- super(CStruct, self).__init__(name, fields)
+ def duplicate_barrier(func):
+ def func_wrapper(self):
+ name = self.get_c_name()
+ return "#ifndef defined_{}\n#define defined_{}\n{}\n#endif".format(name, name, func(self))
+ return func_wrapper
+ @duplicate_barrier
def get_c_def(self):
return "\n".join([
"typedef struct __attribute__((__packed__)) {",
'i64': 'be64toh', 'u64': 'be64toh',
}
- def __init__(self, name):
- super(CSimpleType, self).__init__(name)
-
def get_c_name(self):
return self.name
class CStructType (StructType, CStruct):
- def __init__(self, definition, typedict, field_class):
- super(CStructType, self).__init__(definition, typedict, field_class)
-
def get_c_name(self):
return "vapi_type_%s" % self.name
"}",
])
+ def duplicate_barrier(func):
+ def func_wrapper(self):
+ name = self.get_payload_struct_name()
+ return "#ifndef defined_{}\n#define defined_{}\n{}\n#endif".format(name, name, func(self))
+ return func_wrapper
+
+ @duplicate_barrier
def get_c_def(self):
if self.has_payload():
return "\n".join([
]))
print("")
print("")
- for t in parser.types_by_json[j].values():
+ for t in parser.types_by_json[j]:
try:
print("%s" % t.get_c_def())
print("")
print("")
function_attrs = "static inline "
- for t in parser.types_by_json[j].values():
+ for t in parser.types_by_json[j]:
+ print("#ifndef defined_inline_%s" % t.get_c_name())
+ print("#define defined_inline_%s" % t.get_c_name())
print("%s%s" % (function_attrs, t.get_swap_to_be_func_def()))
print("")
print("%s%s" % (function_attrs, t.get_swap_to_host_func_def()))
+ print("#endif")
print("")
for m in parser.messages_by_json[j].values():
if m.has_payload():