text: #include "FunctionFlags.hpp"
  
  #include <vector>
  #include <sstream>
  #include <iterator>
  
  std::string StringifyFlags(const UEFunctionFlags flags)
  {
  	std::vector<const char*> buffer;
  
  	if (flags & UEFunctionFlags::Final) { buffer.push_back("Final"); }
  	if (flags & UEFunctionFlags::Defined) { buffer.push_back("Defined"); }
  	if (flags & UEFunctionFlags::Iterator) { buffer.push_back("Iterator"); }
  	if (flags & UEFunctionFlags::Latent) { buffer.push_back("Latent"); }
  	if (flags & UEFunctionFlags::PreOperator) { buffer.push_back("PreOperator"); }
  	if (flags & UEFunctionFlags::Singular) { buffer.push_back("Singular"); }
  	if (flags & UEFunctionFlags::Net) { buffer.push_back("Net"); }
  	if (flags & UEFunctionFlags::NetReliable) { buffer.push_back("NetReliable"); }
  	if (flags & UEFunctionFlags::Simulated) { buffer.push_back("Simulated"); }
  	if (flags & UEFunctionFlags::Exec) { buffer.push_back("Exec"); }
  	if (flags & UEFunctionFlags::Native) { buffer.push_back("Native"); }
  	if (flags & UEFunctionFlags::Event) { buffer.push_back("Event"); }
  	if (flags & UEFunctionFlags::Operator) { buffer.push_back("Operator"); }
  	if (flags & UEFunctionFlags::Static) { buffer.push_back("Static"); }
  	if (flags & UEFunctionFlags::HasOptionalParms) { buffer.push_back("HasOptionalParms"); }
  	if (flags & UEFunctionFlags::Const) { buffer.push_back("Const"); }
  	if (flags & UEFunctionFlags::Public) { buffer.push_back("Public"); }
  	if (flags & UEFunctionFlags::Private) { buffer.push_back("Private"); }
  	if (flags & UEFunctionFlags::Protected) { buffer.push_back("Protected"); }
  	if (flags & UEFunctionFlags::Delegate) { buffer.push_back("Delegate"); }
  	if (flags & UEFunctionFlags::NetServer) { buffer.push_back("NetServer"); }
  	if (flags & UEFunctionFlags::HasOutParms) { buffer.push_back("HasOutParms"); }
  	if (flags & UEFunctionFlags::HasDefaults) { buffer.push_back("HasDefaults"); }
  	if (flags & UEFunctionFlags::NetClient) { buffer.push_back("NetClient"); }
  	if (flags & UEFunctionFlags::DLLImport) { buffer.push_back("DLLImport"); }
  	if (flags & UEFunctionFlags::K2Call) { buffer.push_back("K2Call"); }
  	if (flags & UEFunctionFlags::K2Override) { buffer.push_back("K2Override"); }
  	if (flags & UEFunctionFlags::K2Pure) { buffer.push_back("K2Pure"); }
  
  	switch (buffer.size())
  	{
  	case 0:
  		return std::string();
  	case 1:
  		return std::string(buffer[0]);
  	default:
  		std::ostringstream os;
  		std::copy(buffer.begin(), buffer.end() - 1, std::ostream_iterator<const char*>(os, ", "));
  		os << *buffer.rbegin();
  		return os.str();
  	}
  }