def writeFuncPtrInterfaceImpl(api, filename, functionTypes, className):

    def makeFuncPtrInterfaceImpl():
        for function in api.functions:
            if ((function.getType() in functionTypes) and (not function.isAlias)):
                (yield '')
                (yield ('%s %s::%s (%s) const' % (function.returnType, className, getInterfaceName(function), argListToStr(function.arguments))))
                (yield '{')
                if (function.name == 'vkEnumerateInstanceVersion'):
                    (yield '\tif (m_vk.enumerateInstanceVersion)')
                    (yield '\t\treturn m_vk.enumerateInstanceVersion(pApiVersion);')
                    (yield '')
                    (yield '\t*pApiVersion = VK_API_VERSION_1_0;')
                    (yield '\treturn VK_SUCCESS;')
                elif ((function.getType() == Function.TYPE_INSTANCE) and (function.arguments[0].getType() == 'VkPhysicalDevice') and (function.alias != None)):
                    (yield '\tvk::VkPhysicalDeviceProperties props;')
                    (yield '\tm_vk.getPhysicalDeviceProperties(physicalDevice, &props);')
                    (yield '\tif (props.apiVersion >= VK_API_VERSION_1_1)')
                    (yield ('\t\t%sm_vk.%s(%s);' % (('return ' if (function.returnType != 'void') else ''), getInterfaceName(function), ', '.join((a.name for a in function.arguments)))))
                    (yield '\telse')
                    (yield ('\t\t%sm_vk.%s(%s);' % (('return ' if (function.returnType != 'void') else ''), getInterfaceName(function.alias), ', '.join((a.name for a in function.arguments)))))
                else:
                    (yield ('\t%sm_vk.%s(%s);' % (('return ' if (function.returnType != 'void') else ''), getInterfaceName(function), ', '.join((a.name for a in function.arguments)))))
                (yield '}')
    writeInlFile(filename, INL_HEADER, makeFuncPtrInterfaceImpl())
def writeFuncPtrInterfaceImpl(api, filename, functionTypes, className):

    def makeFuncPtrInterfaceImpl():
        for function in api.functions:
            if ((function.getType() in functionTypes) and (not function.isAlias)):
                (yield )
                (yield ('%s %s::%s (%s) const' % (function.returnType, className, getInterfaceName(function), argListToStr(function.arguments))))
                (yield '{')
                if (function.name == 'vkEnumerateInstanceVersion'):
                    (yield '\tif (m_vk.enumerateInstanceVersion)')
                    (yield '\t\treturn m_vk.enumerateInstanceVersion(pApiVersion);')
                    (yield )
                    (yield '\t*pApiVersion = VK_API_VERSION_1_0;')
                    (yield '\treturn VK_SUCCESS;')
                elif ((function.getType() == Function.TYPE_INSTANCE) and (function.arguments[0].getType() == 'VkPhysicalDevice') and (function.alias != None)):
                    (yield '\tvk::VkPhysicalDeviceProperties props;')
                    (yield '\tm_vk.getPhysicalDeviceProperties(physicalDevice, &props);')
                    (yield '\tif (props.apiVersion >= VK_API_VERSION_1_1)')
                    (yield ('\t\t%sm_vk.%s(%s);' % (('return ' if (function.returnType != 'void') else ), getInterfaceName(function), ', '.join((a.name for a in function.arguments)))))
                    (yield '\telse')
                    (yield ('\t\t%sm_vk.%s(%s);' % (('return ' if (function.returnType != 'void') else ), getInterfaceName(function.alias), ', '.join((a.name for a in function.arguments)))))
                else:
                    (yield ('\t%sm_vk.%s(%s);' % (('return ' if (function.returnType != 'void') else ), getInterfaceName(function), ', '.join((a.name for a in function.arguments)))))
                (yield '}')
    writeInlFile(filename, INL_HEADER, makeFuncPtrInterfaceImpl())