| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- #include "Tribool.h"
- namespace Tribool {
- Tribool::Tribool() : m_value(TriboolValue::Indeterminate)
- {
- }
- Tribool::Tribool(bool value) : m_value(value? TriboolValue::True : TriboolValue::False)
- {
- }
- Tribool::Tribool(const Tribool::IndeterminateKeywordType&) : m_value(TriboolValue::Indeterminate)
- {
- }
- Tribool::operator bool() const
- {
- return m_value == TriboolValue::True? true: false;
- }
- Tribool Tribool::operator!() const
- {
- return m_value == TriboolValue::False? Tribool(true):
- m_value == TriboolValue::True? Tribool(false):
- Tribool(Indeterminate);
- }
- Tribool Tribool::operator&&(const Tribool& other) const
- {
- return (static_cast<bool>(!*this) || static_cast<bool>(!other))?
- Tribool(false):
- ((static_cast<bool>(*this) && static_cast<bool>(other))?
- Tribool(true) : Tribool(Indeterminate));
- }
- Tribool operator&&(const Tribool& lhs, bool rhs)
- {
- return rhs? lhs: Tribool(false);
- }
- Tribool operator&&(bool lhs, const Tribool& rhs)
- {
- return lhs? rhs: Tribool(false);
- }
- Tribool operator&&(const Tribool::IndeterminateKeywordType&, const Tribool& rhs)
- {
- return !rhs? Tribool(false) : Tribool(Tribool::Indeterminate);
- }
- Tribool operator&&(const Tribool& lhs, const Tribool::IndeterminateKeywordType&)
- {
- return !lhs? Tribool(false) : Tribool(Tribool::Indeterminate);
- }
- Tribool Tribool::operator||(const Tribool& other) const
- {
- return (static_cast<bool>(!*this) && static_cast<bool>(!other))?
- Tribool(false):
- ((static_cast<bool>(*this) || static_cast<bool>(other))?
- Tribool(true): Tribool(Tribool::Indeterminate));
- }
- Tribool operator||(const Tribool& lhs, bool rhs)
- {
- return rhs? Tribool(true) : lhs;
- }
- Tribool operator||(bool lhs, const Tribool& rhs)
- {
- return lhs? Tribool(true) : rhs;
- }
- Tribool operator||(const Tribool::IndeterminateKeywordType&, const Tribool& rhs)
- {
- return rhs? Tribool(true) : Tribool(Tribool::Indeterminate);
- }
- Tribool operator||(const Tribool& lhs, const Tribool::IndeterminateKeywordType&)
- {
- return lhs? Tribool(true) : Tribool(Tribool::Indeterminate);
- }
- Tribool Tribool::operator==(const Tribool& other) const
- {
- return (Tribool::Indeterminate(*this) || Tribool::Indeterminate(other))?
- Tribool::Indeterminate: ((*this && other) || (!*this && !other));
- }
- Tribool operator==(const Tribool& lhs, bool rhs)
- {
- return lhs == Tribool(rhs);
- }
- Tribool operator==(bool lhs, const Tribool& rhs)
- {
- return Tribool(lhs) == rhs;
- }
- Tribool operator==(const Tribool::IndeterminateKeywordType&, const Tribool& rhs)
- {
- return Tribool(Tribool::Indeterminate) == rhs;
- }
- Tribool operator==(const Tribool& lhs, const Tribool::IndeterminateKeywordType&)
- {
- return Tribool(Tribool::Indeterminate) == lhs;
- }
- Tribool Tribool::operator!=(const Tribool& other) const
- {
- return (Tribool::Indeterminate(*this) || Tribool::Indeterminate(other))?
- Tribool::Indeterminate: !((*this && other) || (!*this && !other));
- }
- Tribool operator!=(const Tribool& lhs, bool rhs)
- {
- return lhs != Tribool(rhs);
- }
- Tribool operator!=(bool lhs, const Tribool& rhs)
- {
- return Tribool(lhs) != rhs;
- }
- Tribool operator!=(const Tribool::IndeterminateKeywordType&, const Tribool& rhs)
- {
- return Tribool(Tribool::Indeterminate) != rhs;
- }
- Tribool operator!=(const Tribool& lhs, const Tribool::IndeterminateKeywordType&)
- {
- return Tribool(Tribool::Indeterminate) != lhs;
- }
- } // namespace Tribool
|