#pragma once
#include <vulkan/vulkan.h>
#include <cassert>
#include <cstdlib>
#include <cstring>
#include <functional>
#include <vector>
namespace vku {
struct PNextCopyState { … };
void* SafePnextCopy(const void* pNext, PNextCopyState* copy_state = { … };
void FreePnextChain(const void* pNext);
char* SafeStringCopy(const char* in_string);
template <typename Base, typename T>
bool AddToPnext(Base& base, const T& data) { … }
template <typename Base>
bool RemoveFromPnext(Base& base, VkStructureType t) { … }
template <typename CreateInfo>
uint32_t FindExtension(CreateInfo& ci, const char* extension_name) { … }
template <typename CreateInfo>
bool AddExtension(CreateInfo& ci, const char* extension_name) { … }
template <typename CreateInfo>
bool RemoveExtension(CreateInfo& ci, const char* extension_name) { … }
}