#pragma once
#include "UTemplate/Type.hpp"
#include <variant>
#include <functional>
using Ubpa::Name;
using Ubpa::type_name;
namespace refl {
	class UClass;
	enum FieldFlag:uint32_t {
		FIELD_NONE_FLAG = 0,
		FIELD_MEMBER_FLAG = 1 << 0,
		FIELD_ATTRIBUTE_FLAG = 1 << 1,
		FIELD_METHOD_FLAG = 1 << 2,
	};
	struct FieldPtr {
		using Data = std::variant<
			uint32_t,  // offset
			void*    // method
		>;
		Name name;
		const UClass* type;
		Data data;
		uint32_t flag;
	};
}