From a47c6e599dd83462ad903f56424927e09a93371a Mon Sep 17 00:00:00 2001 From: Kp Date: Fri, 9 Oct 2015 02:46:11 +0000 Subject: [PATCH] Shrink menu_bit_wrapper_t when B is empty --- common/main/newmenu.h | 33 ++++++++++++++++++++++++++------- similar/main/gamecntl.cpp | 4 ++-- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/common/main/newmenu.h b/common/main/newmenu.h index a9cc8988f..4048ec482 100644 --- a/common/main/newmenu.h +++ b/common/main/newmenu.h @@ -31,6 +31,8 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include #include #include +#include +#include #include "varutil.h" #include "dxxsconf.h" #include "fmtcheck.h" @@ -446,23 +448,40 @@ static inline void nm_set_item_slider(newmenu_item &ni, const char *text, unsign template class menu_bit_wrapper_t { - T &m_mask; - B m_bit; + using M = decltype(std::declval() & std::declval()); + std::tuple m_data; + enum + { + m_mask = 0, + m_bit = 1, + }; + T &get_mask() + { + return std::get(m_data); + } + const T &get_mask() const + { + return std::get(m_data); + } + B get_bit() const + { + return std::get(m_data); + } public: constexpr menu_bit_wrapper_t(T &t, B bit) : - m_mask(t), m_bit(bit) + m_data(t, bit) { } - constexpr operator T() const + constexpr operator M() const { - return m_mask & m_bit; + return get_mask() & get_bit(); } menu_bit_wrapper_t &operator=(bool n) { if (n) - m_mask |= m_bit; + get_mask() |= get_bit(); else - m_mask &= ~m_bit; + get_mask() &= ~get_bit(); return *this; } }; diff --git a/similar/main/gamecntl.cpp b/similar/main/gamecntl.cpp index 8114136ac..f359f610b 100644 --- a/similar/main/gamecntl.cpp +++ b/similar/main/gamecntl.cpp @@ -1738,7 +1738,7 @@ public: } }; -class cheat_menu_bit_invulnerability : public menu_bit_wrapper_t +class cheat_menu_bit_invulnerability : public menu_bit_wrapper_t { player &m_player; public: @@ -1758,7 +1758,7 @@ public: } }; -class cheat_menu_bit_cloak : public menu_bit_wrapper_t +class cheat_menu_bit_cloak : public menu_bit_wrapper_t { player &m_player; public: