Add constexpr to TriStateBool class

This commit is contained in:
Chocobo1 2018-05-16 01:16:58 +08:00
parent b38925413d
commit 9631a9c2ad
No known key found for this signature in database
GPG Key ID: 210D9C873253A68C
2 changed files with 21 additions and 32 deletions

View File

@ -31,28 +31,3 @@
const TriStateBool TriStateBool::Undefined(-1);
const TriStateBool TriStateBool::False(0);
const TriStateBool TriStateBool::True(1);
TriStateBool::operator int() const
{
return m_value;
}
TriStateBool::TriStateBool(int value)
{
if (value < 0)
m_value = -1;
else if (value > 0)
m_value = 1;
else
m_value = 0;
}
bool TriStateBool::operator==(const TriStateBool &other) const
{
return (m_value == other.m_value);
}
bool TriStateBool::operator!=(const TriStateBool &other) const
{
return !operator==(other);
}

View File

@ -36,15 +36,29 @@ public:
static const TriStateBool False;
static const TriStateBool True;
TriStateBool() = default;
TriStateBool(const TriStateBool &other) = default;
constexpr TriStateBool() = default;
constexpr TriStateBool(const TriStateBool &other) = default;
explicit constexpr TriStateBool(int value)
: m_value(value < 0 ? -1 : (value > 0 ? 1 : 0))
{
}
explicit TriStateBool(int value);
explicit operator int() const;
explicit constexpr operator int() const
{
return m_value;
}
TriStateBool &operator=(const TriStateBool &other) = default;
bool operator==(const TriStateBool &other) const;
bool operator!=(const TriStateBool &other) const;
TriStateBool &operator=(const TriStateBool &other) = default; // add constexpr when using C++14
constexpr bool operator==(const TriStateBool &other) const
{
return (m_value == other.m_value);
}
constexpr bool operator!=(const TriStateBool &other) const
{
return !operator==(other);
}
private:
signed char m_value = -1; // Undefined by default