diff --git a/Examples/p01basic/p01basic.vcxproj b/Examples/p01basic/p01basic.vcxproj index 856d061..8ff402f 100644 --- a/Examples/p01basic/p01basic.vcxproj +++ b/Examples/p01basic/p01basic.vcxproj @@ -63,7 +63,7 @@ true true true - $(ProjectDir)..\p01basic;$(ProjectDir)..\..\src;C:\Program Files (x86)\Arduino\libraries;$(ProjectDir)..\..\..\..\libraries;C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries;C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino;C:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard;C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include\;C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include\avr\;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.8.1\include;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.9.2\include;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.9.3\include;%(AdditionalIncludeDirectories) + $(ProjectDir)..\p01basic;$(ProjectDir)..\..\src;$(ProjectDir)..\..\..\AltSoftSerial;C:\Program Files (x86)\Arduino\libraries;$(ProjectDir)..\..\..\..\libraries;C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries;C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino;C:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard;C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include;C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include\avr;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.8.1\include;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.9.2\include;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.9.3\include;%(AdditionalIncludeDirectories) $(ProjectDir)__vm\.p01basic.vsarduino.h;%(ForcedIncludeFiles) false __AVR_ATmega328p__;__AVR_ATmega328P__;F_CPU=16000000L;ARDUINO=10805;ARDUINO_AVR_UNO;ARDUINO_ARCH_AVR;__cplusplus=201103L;_VMICRO_INTELLISENSE;%(PreprocessorDefinitions) diff --git a/Examples/p02cStyle/p02cStyle.vcxproj b/Examples/p02cStyle/p02cStyle.vcxproj index 0605d1c..404ed75 100644 --- a/Examples/p02cStyle/p02cStyle.vcxproj +++ b/Examples/p02cStyle/p02cStyle.vcxproj @@ -63,7 +63,7 @@ true true true - $(ProjectDir)..\p02cStyle;$(ProjectDir)..\..\src;$(ProjectDir)..\..\..\AltSoftSerial;C:\Program Files (x86)\Arduino\libraries;$(ProjectDir)..\..\..\..\libraries;C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries;C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino;C:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard;C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include\;C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include\avr\;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.8.1\include;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.9.2\include;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.9.3\include;%(AdditionalIncludeDirectories) + $(ProjectDir)..\p02cStyle;$(ProjectDir)..\..\src;$(ProjectDir)..\..\..\AltSoftSerial;C:\Program Files (x86)\Arduino\libraries;$(ProjectDir)..\..\..\..\libraries;C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries;C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino;C:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard;C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include;C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include\avr;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.8.1\include;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.9.2\include;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.9.3\include;%(AdditionalIncludeDirectories) $(ProjectDir)__vm\.p02cStyle.vsarduino.h;%(ForcedIncludeFiles) false __AVR_ATmega328p__;__AVR_ATmega328P__;F_CPU=16000000L;ARDUINO=10805;ARDUINO_AVR_UNO;ARDUINO_ARCH_AVR;__cplusplus=201103L;_VMICRO_INTELLISENSE;%(PreprocessorDefinitions) diff --git a/Examples/p03cppStyle/p03cppStyle.vcxproj b/Examples/p03cppStyle/p03cppStyle.vcxproj index c7f5bba..60d43a5 100644 --- a/Examples/p03cppStyle/p03cppStyle.vcxproj +++ b/Examples/p03cppStyle/p03cppStyle.vcxproj @@ -63,7 +63,7 @@ true true true - $(ProjectDir)..\p03cppStyle;$(ProjectDir)..\..\src;$(ProjectDir)..\..\..\AltSoftSerial;C:\Program Files (x86)\Arduino\libraries;$(ProjectDir)..\..\..\..\libraries;C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries;C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino;C:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard;C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include\;C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include\avr\;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.8.1\include;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.9.2\include;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.9.3\include;%(AdditionalIncludeDirectories) + $(ProjectDir)..\p03cppStyle;$(ProjectDir)..\..\src;$(ProjectDir)..\..\..\AltSoftSerial;C:\Program Files (x86)\Arduino\libraries;$(ProjectDir)..\..\..\..\libraries;C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries;C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino;C:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard;C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include;C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include\avr;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.8.1\include;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.9.2\include;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.9.3\include;%(AdditionalIncludeDirectories) $(ProjectDir)__vm\.p03cppStyle.vsarduino.h;%(ForcedIncludeFiles) false __AVR_ATmega328p__;__AVR_ATmega328P__;F_CPU=16000000L;ARDUINO=10805;ARDUINO_AVR_UNO;ARDUINO_ARCH_AVR;__cplusplus=201103L;_VMICRO_INTELLISENSE;%(PreprocessorDefinitions) diff --git a/Examples/p04usingPmsx/p04usingPmsx.vcxproj b/Examples/p04usingPmsx/p04usingPmsx.vcxproj index f90ec37..7105f8f 100644 --- a/Examples/p04usingPmsx/p04usingPmsx.vcxproj +++ b/Examples/p04usingPmsx/p04usingPmsx.vcxproj @@ -63,7 +63,7 @@ true true true - $(ProjectDir)..\p04usingPmsx;$(ProjectDir)..\..\src;$(ProjectDir)..\..\..\AltSoftSerial;C:\Program Files (x86)\Arduino\libraries;$(ProjectDir)..\..\..\..\libraries;C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries;C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino;C:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard;C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include\;C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include\avr\;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.8.1\include;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.9.2\include;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.9.3\include;%(AdditionalIncludeDirectories) + $(ProjectDir)..\p04usingPmsx;$(ProjectDir)..\..\src;$(ProjectDir)..\..\..\AltSoftSerial;C:\Program Files (x86)\Arduino\libraries;$(ProjectDir)..\..\..\..\libraries;C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries;C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino;C:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard;C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include;C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include\avr;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.8.1\include;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.9.2\include;C:\Program Files (x86)\Arduino\hardware\tools\avr\lib\gcc\avr\4.9.3\include;%(AdditionalIncludeDirectories) $(ProjectDir)__vm\.p04usingPmsx.vsarduino.h;%(ForcedIncludeFiles) false __AVR_ATmega328p__;__AVR_ATmega328P__;F_CPU=16000000L;ARDUINO=10805;ARDUINO_AVR_UNO;ARDUINO_ARCH_AVR;__cplusplus=201103L;_VMICRO_INTELLISENSE;%(PreprocessorDefinitions) diff --git a/src/tribool.h b/src/tribool.h index 7206e71..c1b850b 100644 --- a/src/tribool.h +++ b/src/tribool.h @@ -2,10 +2,8 @@ #include -class tribool; - // Class contains Arduino port of Boost.Tribool -// http://www.boost.org/doc/libs/1_63_0/doc/html/tribool.html +// http://www.boost.org/doc/libs/1_67_0/doc/html/tribool.html // // Changes // indeterminate state is named unknown @@ -15,7 +13,9 @@ class tribool; // Ported by https://github.com/jbanaszczyk struct unknown_t {}; -constexpr inline bool unknown(tribool arg, unknown_t dummy = unknown_t()); + +class tribool; +constexpr bool unknown(tribool arg, unknown_t dummy = unknown_t()); typedef bool(*unknown_keyword_t)(tribool, unknown_t); class tribool { @@ -24,11 +24,11 @@ class tribool { constexpr tribool() : value(unknown_v) {} constexpr tribool(bool v) : value(v ? true_v : false_v) {}; constexpr tribool(unknown_keyword_t) : value(unknown_v) {} - constexpr inline operator bool() const { + constexpr operator bool() const { return value == tribool::true_v ? true : false; }; - constexpr inline tribool operator!() const { + constexpr tribool operator!() const { return value == false_v ? tribool(true) : value == true_v ? tribool(false) : tribool(unknown); @@ -37,50 +37,50 @@ class tribool { bool isBool() const { return value == false_v || value == true_v; } }; -constexpr inline tribool operator&&(tribool lhs, tribool rhs) { +constexpr tribool operator&&(tribool lhs, tribool rhs) { return (static_cast(!lhs) || static_cast(!rhs)) ? tribool(false) : ((static_cast(lhs) && static_cast(rhs)) ? tribool(true) : unknown) ; } -constexpr inline tribool operator&&(tribool lhs, bool rhs) { return rhs ? lhs : tribool(false); } -constexpr inline tribool operator&&(bool lhs, tribool rhs) { return lhs ? rhs : tribool(false); } -constexpr inline tribool operator&&(unknown_keyword_t, tribool lhs) { return !lhs ? tribool(false) : tribool(unknown); } -constexpr inline tribool operator&&(tribool lhs, unknown_keyword_t) { return !lhs ? tribool(false) : tribool(unknown); } +constexpr tribool operator&&(tribool lhs, bool rhs) { return rhs ? lhs : tribool(false); } +constexpr tribool operator&&(bool lhs, tribool rhs) { return lhs ? rhs : tribool(false); } +constexpr tribool operator&&(unknown_keyword_t, tribool lhs) { return !lhs ? tribool(false) : tribool(unknown); } +constexpr tribool operator&&(tribool lhs, unknown_keyword_t) { return !lhs ? tribool(false) : tribool(unknown); } -constexpr inline tribool operator||(tribool lhs, tribool rhs) { +constexpr tribool operator||(tribool lhs, tribool rhs) { return (static_cast(!lhs) && static_cast(!rhs)) ? tribool(false) : ((static_cast(lhs) || static_cast(rhs)) ? tribool(true) : tribool(unknown)) ; } -constexpr inline tribool operator||(tribool lhs, bool rhs) { return rhs ? tribool(true) : lhs; } -constexpr inline tribool operator||(bool lhs, tribool rhs) { return lhs ? tribool(true) : rhs; } -constexpr inline tribool operator||(unknown_keyword_t, tribool lhs) { return lhs ? tribool(true) : tribool(unknown); } -constexpr inline tribool operator||(tribool lhs, unknown_keyword_t) { return lhs ? tribool(true) : tribool(unknown); } +constexpr tribool operator||(tribool lhs, bool rhs) { return rhs ? tribool(true) : lhs; } +constexpr tribool operator||(bool lhs, tribool rhs) { return lhs ? tribool(true) : rhs; } +constexpr tribool operator||(unknown_keyword_t, tribool lhs) { return lhs ? tribool(true) : tribool(unknown); } +constexpr tribool operator||(tribool lhs, unknown_keyword_t) { return lhs ? tribool(true) : tribool(unknown); } -constexpr inline tribool operator==(tribool lhs, tribool rhs) { +constexpr tribool operator==(tribool lhs, tribool rhs) { return (unknown(lhs) || unknown(rhs)) ? unknown : ((lhs && rhs) || (!lhs && !rhs)) ; } -constexpr inline tribool operator==(tribool lhs, bool rhs) { return lhs == tribool(rhs); } -constexpr inline tribool operator==(bool lhs, tribool rhs) { return tribool(lhs) == rhs; } -constexpr inline tribool operator==(unknown_keyword_t, tribool lhs) { return tribool(unknown) == lhs; } -constexpr inline tribool operator==(tribool lhs, unknown_keyword_t) { return tribool(unknown) == lhs; } +constexpr tribool operator==(tribool lhs, bool rhs) { return lhs == tribool(rhs); } +constexpr tribool operator==(bool lhs, tribool rhs) { return tribool(lhs) == rhs; } +constexpr tribool operator==(unknown_keyword_t, tribool lhs) { return tribool(unknown) == lhs; } +constexpr tribool operator==(tribool lhs, unknown_keyword_t) { return tribool(unknown) == lhs; } -constexpr inline tribool operator!=(tribool lhs, tribool rhs) { +constexpr tribool operator!=(tribool lhs, tribool rhs) { return (unknown(lhs) || unknown(rhs)) ? unknown : !((lhs && rhs) || (!lhs && !rhs)) ; } -constexpr inline tribool operator!=(tribool lhs, bool rhs) { return lhs != tribool(rhs); } -constexpr inline tribool operator!=(bool lhs, tribool rhs) { return tribool(lhs) != rhs; } -constexpr inline tribool operator!=(unknown_keyword_t, tribool lhs) { return tribool(unknown) != lhs; } -constexpr inline tribool operator!=(tribool lhs, unknown_keyword_t) { return lhs != tribool(unknown); } +constexpr tribool operator!=(tribool lhs, bool rhs) { return lhs != tribool(rhs); } +constexpr tribool operator!=(bool lhs, tribool rhs) { return tribool(lhs) != rhs; } +constexpr tribool operator!=(unknown_keyword_t, tribool lhs) { return tribool(unknown) != lhs; } +constexpr tribool operator!=(tribool lhs, unknown_keyword_t) { return lhs != tribool(unknown); } -constexpr inline bool unknown(tribool arg, unknown_t dummy) { return false; }; +constexpr bool unknown(tribool arg, unknown_t dummy) { return arg.value == tribool::unknown_v; };