if.hpp #1

  • //
  • guest/
  • ququlala/
  • libsprawl/
  • mainline/
  • if/
  • if.hpp
  • View
  • Commits
  • Open Download .zip Download (1 KB)
#pragma once

#include "../common/compat.hpp"

namespace sprawl
{
	namespace detail
	{

		template<bool t_Val, typename t_IfTrueType>
		struct IfHelper
		{
			template<template <bool t_IsError> class t_ErrorType>
			using type = t_IfTrueType;

			typedef t_IfTrueType if_you_see_an_error_here_nothing_matched_your_if_sequence___consider_adding_an_else;

			template<bool, typename t_ElseIfType>
			using ElseIf = IfHelper<true, t_IfTrueType>;

			template<typename t_ElseType>
			using Else = IfHelper<true, t_IfTrueType>;
		};

		template<typename t_IfTrueType>
		struct IfHelper<false, t_IfTrueType>
		{
			template<template <bool t_IsError> class t_ErrorType>
			using type = t_ErrorType<false>;

			template<bool t_Val, typename t_ElseType>
			using ElseIf = IfHelper<t_Val, t_ElseType>;

			template<typename t_ElseType>
			using Else = IfHelper<true, t_ElseType>;
		};
	}

	template<bool t_Val, typename t_IfTryeType>
	using If = detail::IfHelper<t_Val, t_IfTryeType>;

	SPRAWL_DEFINE_COMPILE_ERROR(UnmatchedIfSequence, "If you see an error here, nothing matched your 'if' sequence, and no custom error message was installed. Consider adding an 'Else' or correct your invocation.");
}

#define IF(val, IfTrue) typename sprawl::If<(val), IfTrue>
#define ELSEIF(val, IfTrue) ::template ElseIf<(val), IfTrue>
#define ELSE(T) ::template Else< T >
#define ENDIF_ERR(ErrorType) ::template type<ErrorType>
#define ENDIF ::template type<::sprawl::UnmatchedIfSequence>
# Change User Description Committed
#1 23398 ququlala "Forking branch Mainline of shadauxcat-libsprawl to ququlala-libsprawl."
//guest/ShadauxCat/Sprawl/Mainline/if/if.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