From 8a890cf945cfbd72f6e4b64f8c7b52d2c6ca099e Mon Sep 17 00:00:00 2001 From: peterbell10 Date: Mon, 22 May 2017 21:27:55 +0100 Subject: Store cChunk::m_BlockEntities in a map (#3717) * Store block entities in a map from block index * Cleanup ForEachBlockEntity * Cleanup DoWithBlockEntityAt --- src/BlockID.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/BlockID.h') diff --git a/src/BlockID.h b/src/BlockID.h index 8ce7a040b..bd24f9312 100644 --- a/src/BlockID.h +++ b/src/BlockID.h @@ -1212,3 +1212,31 @@ extern cItem GetIniItemSet(cIniFile & a_IniFile, const char * a_Section, const c +/** Base case for IsOneOf to handle empty template aguments. */ +template +bool IsOneOf(BLOCKTYPE a_BlockType) +{ + return false; +} + + +/** Returns true if a_BlockType is equal to any of the variadic template arguments. +Some example usage: +\code + IsOneOf<>(E_BLOCK_AIR) == false + IsOneOf(E_BLOCK_DIRT) == false + IsOneOf(E_BLOCK_DIRT) == true +\endcode +The implementation is ugly but it is equivalent to this C++17 fold expression: +\code + ((a_BlockType == Types) || ...) +\endcode +Just written to be valid without fold expressions or SFINAE. */ +template +bool IsOneOf(BLOCKTYPE a_BlockType) +{ + return ((a_BlockType == Head) || (IsOneOf(a_BlockType))); +} + + + -- cgit v1.2.3