+def aligned(left, right):
+ while len(left) < 59:
+ left += " "
+
+ return left + right
def is_enum(self):
- global predefined_enums
- global enums_by_name
-
return self.type in predefined_enums or self.type in enums_by_name
else:
string += ", "
- while len(string) < 59:
- string += " "
-
- return string + self.get_occurrence_comment() + "\n"
+ return aligned(string, self.get_occurrence_comment() + "\n")
def generate_return(self, offset = 0, end_of_line = ";"):
string += " " * offset
string += "%s%s)%s" % (self.get_type_string(True), self.name, end_of_line)
- while len(string) < 59:
- string += " "
-
- return string + self.get_occurrence_comment() + "\n"
+ return aligned(string, self.get_occurrence_comment() + "\n")
def generate_require_code(self):
def is_enum(self):
- global predefined_enums
- global enums_by_name
-
return self.type in predefined_enums or self.type in enums_by_name
else:
string = " %s%s; " % (self.get_type_string(), self.name)
- while len(string) < 59:
- string += " "
-
- return string + self.get_occurrence_comment() + "\n"
+ return aligned(string, self.get_occurrence_comment() + "\n")
def generate_free_code(self):
-class Object:
+class Base:
+ def __init__(self, kind, name):
+ self.kind = kind
+ self.name = name
+
+
+ def generate_typedef(self):
+ return "typedef %s _esxVI_%s esxVI_%s;\n" % (self.kind, self.name, self.name)
+
+
+ def generate_typeenum(self):
+ return " esxVI_Type_%s,\n" % self.name
+
+
+ def generate_typetostring(self):
+ string = " case esxVI_Type_%s:\n" % self.name
+ string += " return \"%s\";\n\n" % self.name
+
+ return string
+
+
+ def generate_typefromstring(self):
+ string = " else if (STREQ(type, \"%s\")) {\n" % self.name
+ string += " return esxVI_Type_%s;\n" % self.name
+ string += " }\n"
+
+ return string
+
+
+
+class Object(Base):
FEATURE__DYNAMIC_CAST = (1 << 1)
FEATURE__LIST = (1 << 2)
FEATURE__DEEP_COPY = (1 << 3)
def __init__(self, name, extends, properties, features = 0, extended_by = None):
- self.name = name
+ Base.__init__(self, "struct", name)
self.extends = extends
self.features = features | Object.FEATURE__SERIALIZE | Object.FEATURE__DESERIALIZE
self.properties = properties
self.extended_by = extended_by
if self.extended_by is not None:
- self.extended_by.sort();
+ self.extended_by.sort()
- def generate_struct_members(self, add_banner = False, struct_gap = False):
- global objects_by_name
+ def generate_struct_members(self, add_banner=False, struct_gap=False):
members = ""
- if self.extends is None:
- struct_gap = True
- string = " esxVI_Type _type; "
-
- while len(string) < 59:
- string += " "
-
- members += string + "/* required */\n"
-
- if struct_gap and self.extends is None:
+ if struct_gap:
members += "\n"
if self.extends is not None:
- members += objects_by_name[self.extends].generate_struct_members(add_banner = True, struct_gap = False) + "\n"
+ members += objects_by_name[self.extends].generate_struct_members(add_banner=True, struct_gap=False) + "\n"
if self.extends is not None or add_banner:
members += " /* %s */\n" % self.name
return members
- def generate_free_code(self, add_banner = False):
- global objects_by_name
+ def generate_free_code(self, add_banner=False):
source = ""
if self.extends is not None:
- source += objects_by_name[self.extends].generate_free_code(add_banner = True) + "\n"
+ source += objects_by_name[self.extends].generate_free_code(add_banner=True) + "\n"
if self.extends is not None or add_banner:
source += " /* %s */\n" % self.name
return source
- def generate_validate_code(self, add_banner = False):
- global objects_by_name
+ def generate_validate_code(self, add_banner=False):
source = ""
if self.extends is not None:
- source += objects_by_name[self.extends].generate_validate_code(add_banner = True) + "\n"
+ source += objects_by_name[self.extends].generate_validate_code(add_banner=True) + "\n"
if self.extends is not None or add_banner:
source += " /* %s */\n" % self.name
def generate_dynamic_cast_code(self, is_first = True):
- global objects_by_name
source = ""
if self.extended_by is not None:
def generate_deep_copy_code(self, add_banner = False):
- global objects_by_name
source = ""
if self.extends is not None:
def generate_serialize_code(self, add_banner = False):
- global objects_by_name
source = ""
if self.extends is not None:
def generate_deserialize_code(self, add_banner = False):
- global objects_by_name
source = ""
if self.extends is not None:
- source += objects_by_name[self.extends].generate_deserialize_code(add_banner = True) + "\n"
+ source += objects_by_name[self.extends].generate_deserialize_code(add_banner=True) + "\n"
if self.extends is not None or add_banner:
source += " /* %s */\n" % self.name
return source
- def generate_typedef(self):
- return "typedef struct _esxVI_%s esxVI_%s;\n" % (self.name, self.name)
-
-
- def generate_typeenum(self):
- return " esxVI_Type_%s,\n" % self.name
-
-
- def generate_typetostring(self):
- string = " case esxVI_Type_%s:\n" % self.name
- string += " return \"%s\";\n\n" % self.name
-
- return string
-
-
- def generate_typefromstring(self):
- string = " else if (STREQ(type, \"%s\")) {\n" % self.name
- string += " return esxVI_Type_%s;\n" % self.name
- string += " }\n"
-
- return string
-
-
def generate_header(self):
header = "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n"
header += " * VI Type: %s\n" % self.name
header += "struct _esxVI_%s {\n" % self.name
if self.features & Object.FEATURE__LIST:
- string = " esxVI_%s *_next; " % self.name
+ header += aligned(" esxVI_%s *_next; " % self.name, "/* optional */\n")
else:
- string = " esxVI_%s *_unused; " % self.name
-
- while len(string) < 59:
- string += " "
-
- header += string + "/* optional */\n"
-
- header += self.generate_struct_members(struct_gap = True)
+ header += aligned(" esxVI_%s *_unused; " % self.name, "/* optional */\n")
+ header += aligned(" esxVI_Type _type; ", "/* required */\n")
+ header += self.generate_struct_members(struct_gap=True)
header += "};\n\n"
# functions
-class Enum:
- FEATURE__ANY_TYPE = (1 << 1)
- FEATURE__SERIALIZE = (1 << 2)
- FEATURE__DESERIALIZE = (1 << 3)
- def __init__(self, name, values, features = 0):
- self.name = name
- self.values = values
- self.features = features | Enum.FEATURE__SERIALIZE | Enum.FEATURE__DESERIALIZE
- def generate_typedef(self):
- return "typedef enum _esxVI_%s esxVI_%s;\n" % (self.name, self.name)
- def generate_typeenum(self):
- return " esxVI_Type_%s,\n" % self.name
- def generate_typetostring(self):
- string = " case esxVI_Type_%s:\n" % self.name
- string += " return \"%s\";\n\n" % self.name
- return string
- def generate_typefromstring(self):
- string = " else if (STREQ(type, \"%s\")) {\n" % self.name
- string += " return esxVI_Type_%s;\n" % self.name
- string += " }\n"
- return string
+class Enum(Base):
+ FEATURE__ANY_TYPE = (1 << 1)
+ FEATURE__SERIALIZE = (1 << 2)
+ FEATURE__DESERIALIZE = (1 << 3)
+
+
+ def __init__(self, name, values, features=0):
+ Base.__init__(self, "enum", name)
+ self.values = values
+ self.features = features | Enum.FEATURE__SERIALIZE | Enum.FEATURE__DESERIALIZE
def generate_header(self):
if items[2] not in valid_occurrences:
report_error("line %d: invalid occurrence" % line[0])
- properties.append(Property(type = items[0], name = items[1],
- occurrence = items[2]))
+ properties.append(Property(type=items[0], name=items[1],
+ occurrence=items[2]))
return Object(name = name, extends = extends, properties = properties)
# expected format: <value>
values.append(line[1])
- return Enum(name = name, values = values)
+ return Enum(name=name, values=values)
if header_items[2] != "returns":
report_error("line %d: invalid block header" % (number))
else:
- returns = Parameter(type = header_items[3], name = "output",
- occurrence = header_items[4])
+ returns = Parameter(type=header_items[3], name="output",
+ occurrence=header_items[4])
parameters = []
if items[2] not in valid_occurrences:
report_error("line %d: invalid occurrence" % line[0])
- parameters.append(Parameter(type = items[0], name = items[1],
- occurrence = items[2]))
+ parameters.append(Parameter(type=items[0], name=items[1],
+ occurrence=items[2]))
- return Method(name = name, parameters = parameters, returns = returns)
+ return Method(name=name, parameters=parameters, returns=returns)