type_list.hpp #1

  • //
  • guest/
  • ququlala/
  • libsprawl/
  • mainline/
  • tag/
  • type_list.hpp
  • View
  • Commits
  • Open Download .zip Download (2 KB)
#pragma once

#include "tag_list_info.hpp"

namespace sprawl
{

	template<typename... t_Types>
	struct TypeList
	{
	private:
		template<ssize_t t_GetIdx, ssize_t t_CurIdx, typename... t_CheckTypes>
		struct getType_
		{
			typedef std::false_type type;
			static_assert(t_CurIdx < 0, "TypeList::Get - out of bounds");
		};

		template<ssize_t t_GetIdx, ssize_t t_CurIdx, typename t_FirstType, typename... t_MoreTypes>
		struct getType_<t_GetIdx, t_CurIdx, t_FirstType, t_MoreTypes...>
		{
			typedef typename getType_<t_GetIdx, t_CurIdx + 1, t_MoreTypes...>::type type;
		};

		template<ssize_t t_GetIdx, typename t_FirstType, typename... t_MoreTypes>
		struct getType_<t_GetIdx, t_GetIdx, t_FirstType, t_MoreTypes...>
		{
			typedef t_FirstType type;
		};

		template<typename... t_AppendTypes>
		struct append_
		{
			typedef TypeList<t_Types..., t_AppendTypes...> type;
		};

		template<typename t_ExtendType>
		struct extend_;

		template<typename... t_ExtendTypes>
		struct extend_<TypeList<t_ExtendTypes...>>
		{
			typedef TypeList<t_Types..., t_ExtendTypes...> type;
		};

	public:
		static constexpr size_t size = sizeof...(t_Types);

		template<size_t t_Idx>
		using Get = typename getType_<t_Idx, 0, t_Types...>::type;

		template<typename... t_AppendTypes>
		using Append = typename append_<t_AppendTypes...>::type;

		template<typename t_ExtendListType>
		using Extend = typename extend_<t_ExtendListType>::type;
	};

	template<typename... t_Types>
	struct TagListInfo<TypeList<t_Types...>>
	{
		static constexpr size_t numElements = TypeList<t_Types...>::size;

		template<size_t t_Idx>
		using Element = typename TypeList<t_Types...>::template Get<t_Idx>;
	};
}
# Change User Description Committed
#1 23398 ququlala "Forking branch Mainline of shadauxcat-libsprawl to ququlala-libsprawl."
//guest/ShadauxCat/Sprawl/Mainline/tag/type_list.hpp
#1 19906 ShadauxCat - Added tag, compile time string type
- Since tag requires visual studio 2015, removed compatibility code for earlier versions of visual studio
- Improved compiler detection
- Added endianness detection
- Added template if/else helper
- Fixed bug with murmur3 64 bit
- Added seed argument for murmur3

#review-19907