Shrink menu_bit_wrapper_t when B is empty
This commit is contained in:
parent
927618e650
commit
a47c6e599d
|
@ -31,6 +31,8 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <tuple>
|
||||||
|
#include <utility>
|
||||||
#include "varutil.h"
|
#include "varutil.h"
|
||||||
#include "dxxsconf.h"
|
#include "dxxsconf.h"
|
||||||
#include "fmtcheck.h"
|
#include "fmtcheck.h"
|
||||||
|
@ -446,23 +448,40 @@ static inline void nm_set_item_slider(newmenu_item &ni, const char *text, unsign
|
||||||
template <typename T, typename B>
|
template <typename T, typename B>
|
||||||
class menu_bit_wrapper_t
|
class menu_bit_wrapper_t
|
||||||
{
|
{
|
||||||
T &m_mask;
|
using M = decltype(std::declval<const T &>() & std::declval<B>());
|
||||||
B m_bit;
|
std::tuple<T &, B> m_data;
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
m_mask = 0,
|
||||||
|
m_bit = 1,
|
||||||
|
};
|
||||||
|
T &get_mask()
|
||||||
|
{
|
||||||
|
return std::get<m_mask>(m_data);
|
||||||
|
}
|
||||||
|
const T &get_mask() const
|
||||||
|
{
|
||||||
|
return std::get<m_mask>(m_data);
|
||||||
|
}
|
||||||
|
B get_bit() const
|
||||||
|
{
|
||||||
|
return std::get<m_bit>(m_data);
|
||||||
|
}
|
||||||
public:
|
public:
|
||||||
constexpr menu_bit_wrapper_t(T &t, B bit) :
|
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)
|
menu_bit_wrapper_t &operator=(bool n)
|
||||||
{
|
{
|
||||||
if (n)
|
if (n)
|
||||||
m_mask |= m_bit;
|
get_mask() |= get_bit();
|
||||||
else
|
else
|
||||||
m_mask &= ~m_bit;
|
get_mask() &= ~get_bit();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1738,7 +1738,7 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class cheat_menu_bit_invulnerability : public menu_bit_wrapper_t<uint32_t, uint32_t>
|
class cheat_menu_bit_invulnerability : public menu_bit_wrapper_t<uint32_t, decltype(PLAYER_FLAGS_INVULNERABLE)>
|
||||||
{
|
{
|
||||||
player &m_player;
|
player &m_player;
|
||||||
public:
|
public:
|
||||||
|
@ -1758,7 +1758,7 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class cheat_menu_bit_cloak : public menu_bit_wrapper_t<uint32_t, uint32_t>
|
class cheat_menu_bit_cloak : public menu_bit_wrapper_t<uint32_t, decltype(PLAYER_FLAGS_CLOAKED)>
|
||||||
{
|
{
|
||||||
player &m_player;
|
player &m_player;
|
||||||
public:
|
public:
|
||||||
|
|
Loading…
Reference in a new issue