From fec94379752170d5810f3e3c9f18a9fa17af929c Mon Sep 17 00:00:00 2001 From: Mark Lobodzinski Date: Tue, 3 Jan 2017 13:22:10 -0700 Subject: scripts: Complete safe_struct header generation Change-Id: I87de80173ff414202f6e876db3da688466f3598d --- scripts/helper_file_generator.py | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) (limited to 'scripts') diff --git a/scripts/helper_file_generator.py b/scripts/helper_file_generator.py index 6b271038..f4b230e0 100644 --- a/scripts/helper_file_generator.py +++ b/scripts/helper_file_generator.py @@ -447,19 +447,38 @@ class HelperFileOutputGenerator(OutputGenerator): # safe_struct header: build function prototypes for header file def GenerateSafeStructHeader(self): safe_struct_header = '' - safe_struct_header += 'size_t get_struct_chain_size(const void* struct_ptr);\n' for item in self.structMembers: - lower_case_name = item.name.lower() - if item.ifdef_protect != None: - safe_struct_header += '#ifdef %s\n' % item.ifdef_protect - safe_struct_header += 'size_t vk_size_%s(const %s* struct_ptr);\n' % (item.name.lower(), item.name) - if item.ifdef_protect != None: - safe_struct_header += '#endif // %s\n' % item.ifdef_protect - safe_struct_header += '#ifdef __cplusplus\n' - safe_struct_header += '}\n' - safe_struct_header += '#endif' + if self.GenSafeStruct(item) == True: + safe_struct_header += '\n' + if item.ifdef_protect != None: + safe_struct_header += '#ifdef %s\n' % item.ifdef_protect + safe_struct_header += 'struct safe_%s {\n' % (item.name) + for member in item.members: + safe_struct_header += '%s;\n' % member.cdecl + # Boilerplate + safe_struct_header += ' safe_%s(const %s* in_struct);\n' % (item.name, item.name) + safe_struct_header += ' safe_%s(const safe_%s& src);\n' % (item.name, item.name) + safe_struct_header += ' safe_%s();\n' % item.name + safe_struct_header += ' ~safe_%s();\n' % item.name + safe_struct_header += ' void initialize(const %s* in_struct);\n' % item.name + safe_struct_header += ' void initialize(const safe_%s* src);\n' % item.name + safe_struct_header += ' %s *ptr() { return reinterpret_cast<%s *>(this); }\n' % (item.name, item.name) + safe_struct_header += ' %s const *ptr() const { return reinterpret_cast<%s const *>(this); }\n' % (item.name, item.name) + safe_struct_header += '};\n' + if item.ifdef_protect != None: + safe_struct_header += '#endif // %s\n' % item.ifdef_protect return safe_struct_header # + # Determine if a structure needs a safe_struct helper function + # That is, it has an sType or one of its members is a pointer + def GenSafeStruct(self, structure): + if 'sType' == structure.name: + return True + for member in structure.members: + if member.ispointer == True: + return True + return False + # # Combine safe struct helper source file preamble with body text and return def GenerateSafeStructHelperSource(self): safe_struct_helper_source = '\n' @@ -474,7 +493,6 @@ class HelperFileOutputGenerator(OutputGenerator): safe_struct_body = '' for item in self.structMembers: safe_struct_body += '\n' - lower_case_name = item.name.lower() if item.ifdef_protect != None: safe_struct_body += '#ifdef %s\n' % item.ifdef_protect safe_struct_body += 'size_t vk_size_%s(const %s* struct_ptr) {\n' % (item.name.lower(), item.name) -- cgit v1.2.3