def genStruct(self, typeinfo, typeName, alias): OutputGenerator.genStruct(self, typeinfo, typeName, alias) typeElem = typeinfo.elem if alias: body = 'typedef ' + alias + ' ' + typeName + ';\n' else: body = '' (protect_begin, protect_end) = self.genProtectString(typeElem.get('protect')) if protect_begin: body += protect_begin body += 'typedef ' + typeElem.get('category') # This is an OpenXR-specific alternative where aliasing refers # to an inheritance hierarchy of types rather than C-level type # aliases. if self.genOpts.genAliasMacro and self.typeMayAlias(typeName): body += ' ' + self.genOpts.aliasMacro body += ' ' + typeName + ' {\n' targetLen = 0 for member in typeElem.findall('.//member'): targetLen = max(targetLen, self.getCParamTypeLength(member)) for member in typeElem.findall('.//member'): body += self.makeCParamDecl(member, targetLen + 4) body += ';\n' body += '} ' + typeName + ';\n' if protect_end: body += protect_end self.appendSection('struct', body)
def genStruct(self, typeinfo, typeName, alias): OutputGenerator.genStruct(self, typeinfo, typeName, alias) if alias: return structTypeName = None members = [] for member in typeinfo.getMembers(): memberName = getElemName(member) memberType = getElemType(member) if self.conventions.is_structure_type_member(memberType, memberName): structTypeName = member.get("values") members.append(memberName) protect = set() if self.featureExtraProtect: protect.update(self.featureExtraProtect.split(',')) localProtect = typeinfo.elem.get('protect') if localProtect: protect.update(localProtect.split(',')) if protect: protect = tuple(protect) else: protect = None self.structs.append(CStruct(typeName, structTypeName, members, protect)) if protect: self.protects.add(protect)
def genStruct(self, typeinfo, typename, alias): OutputGenerator.genStruct(self, typeinfo, typename, alias) # For structs, we ignore the alias because it is a typedef. Not ignoring the alias # would produce multiple definition errors for functions with struct parameters. if self.processStructs: if not alias: self.featureStructMembers[typename] = self.makeValueInfo( typeinfo.elem.findall('.//member')) else: self.featureStructAliases[typename] = alias
def genStruct(self, typeinfo, typeName): OutputGenerator.genStruct(self, typeinfo, typeName) s = 'typedef ' + typeinfo.elem.get('category') + ' ' + typeName + ' {\n' # paramdecl = self.makeCParamDecl(typeinfo.elem, self.genOpts.alignFuncParam) targetLen = 0 for member in typeinfo.elem.findall('.//member'): targetLen = max(targetLen, self.getCParamTypeLength(member)) for member in typeinfo.elem.findall('.//member'): s += self.makeCParamDecl(member, targetLen + 4) s += ';\n' s += '} ' + typeName + ';' self.writeInclude('structs', typeName, s)
def genStruct(self, typeinfo, typeName, alias): OutputGenerator.genStruct(self, typeinfo, typeName, alias) if alias: # Add name -> alias mapping self.addName(self.alias, typeName, alias) else: # May want to only emit definition on this branch True members = [member.text for member in typeinfo.elem.findall('.//member/name')] self.structs[typeName] = members memberTypes = [member.text for member in typeinfo.elem.findall('.//member/type')] for member_type in memberTypes: self.addMapping(typeName, member_type)
def genStruct(self, typeinfo, typeName, alias): """Generate struct (e.g. C "struct" type). This is a special case of the <type> tag where the contents are interpreted as a set of <member> tags instead of freeform C C type declarations. The <member> tags are just like <param> tags - they are a declaration of a struct or union member. Only simple member declarations are supported (no nested structs etc.) If alias is not None, then this struct aliases another; just generate a typedef of that alias.""" OutputGenerator.genStruct(self, typeinfo, typeName, alias) typeElem = typeinfo.elem if alias: body = 'typedef ' + alias + ' ' + typeName + ';\n' else: body = '' (protect_begin, protect_end) = self.genProtectString(typeElem.get('protect')) if protect_begin: body += protect_begin structextends = typeElem.get('structextends') body += '// ' + typeName + ' extends ' + structextends + '\n' if structextends else '' body += 'typedef ' + typeElem.get('category') # This is an OpenXR-specific alternative where aliasing refers # to an inheritance hierarchy of types rather than C-level type # aliases. if self.genOpts and self.genOpts.genAliasMacro and self.typeMayAlias( typeName): body += ' ' + self.genOpts.aliasMacro body += ' ' + typeName + ' {\n' targetLen = self.getMaxCParamTypeLength(typeinfo) for member in typeElem.findall('.//member'): body += self.makeCParamDecl(member, targetLen + 4) body += ';\n' body += '} ' + typeName + ';\n' if protect_end: body += protect_end self.appendSection('struct', body)
def genStruct(self, typeinfo, typeName, alias): """Generate struct.""" OutputGenerator.genStruct(self, typeinfo, typeName, alias) if alias: body = '' if self.conventions.duplicate_aliased_structs: # TODO maybe move this outside the conditional? This would be a visual change. body += '// {} is an alias for {}\n'.format(typeName, alias) alias_info = self.registry.typedict[alias] body += self.genStructBody(alias_info, alias) body += '\n\n' body += 'typedef ' + alias + ' ' + typeName + ';\n' else: body = self.genStructBody(typeinfo, typeName) self.writeInclude('structs', typeName, body)
def genStruct(self, typeinfo, typeName, alias): """Generate struct.""" OutputGenerator.genStruct(self, typeinfo, typeName, alias) typeElem = typeinfo.elem if alias: body = 'typedef ' + alias + ' ' + typeName + ';\n' else: body = 'typedef ' + typeElem.get('category') + ' ' + typeName + ' {\n' targetLen = self.getMaxCParamTypeLength(typeinfo) for member in typeElem.findall('.//member'): body += self.makeCParamDecl(member, targetLen + 4) body += ';\n' body += '} ' + typeName + ';' self.writeInclude('structs', typeName, body)
def genStruct(self, typeinfo, typeName, alias): OutputGenerator.genStruct(self, typeinfo, typeName, alias) typeElem = typeinfo.elem if alias: return structTypeName = None members = [] for member in typeinfo.getMembers(): memberName = getElemName(member) memberType = getElemType(member) if self.conventions.is_structure_type_member(memberType, memberName): structTypeName = member.get("values") members.append(memberName) self.structs.append(CStruct(typeName, structTypeName, members, typeinfo.elem.get('protect')))
def genStruct(self, typeinfo, typeName, alias): OutputGenerator.genStruct(self, typeinfo, typeName, alias) if alias: # Add name -> alias mapping self.addName(self.alias, typeName, alias) else: # May want to only emit definition on this branch True members = [ member.text for member in typeinfo.elem.findall('.//member/name') ] self.structs[typeName] = members memberTypes = [ member.text for member in typeinfo.elem.findall('.//member/type') ] for member_type in memberTypes: self.addMapping(typeName, member_type)
def genStruct(self, typeinfo, typeName, alias): """Generate struct (e.g. C "struct" type). Add the struct name to the 'structs' dictionary, with the value being an ordered list of the struct member names.""" OutputGenerator.genStruct(self, typeinfo, typeName, alias) if alias: # Add name -> alias mapping self.addName(self.alias, typeName, alias) else: # May want to only emit definition on this branch True members = [member.text for member in typeinfo.elem.findall('.//member/name')] self.structs[typeName] = members memberTypes = [member.text for member in typeinfo.elem.findall('.//member/type')] for member_type in memberTypes: self.addMapping(typeName, member_type)
def genStruct(self, typeinfo, typeName, alias): OutputGenerator.genStruct(self, typeinfo, typeName, alias) typeElem = typeinfo.elem if alias: body = 'typedef ' + alias + ' ' + typeName + ';\n' else: body = 'typedef ' + typeElem.get('category') + ' ' + typeName + ' {\n' targetLen = 0 for member in typeElem.findall('.//member'): targetLen = max(targetLen, self.getCParamTypeLength(member)) for member in typeElem.findall('.//member'): body += self.makeCParamDecl(member, targetLen + 4) body += ';\n' body += '} ' + typeName + ';' self.writeInclude('structs', typeName, body)