-
Notifications
You must be signed in to change notification settings - Fork 39
Open
Description
Hello,
I have implemented (single header library) the logic classes bool4, bool3 and bool2:
- bool4
https://de.wikipedia.org/wiki/Belnaps_vierwertige_Logik
https://en.wikipedia.org/wiki/Four-valued_logic - bool3 (similar to tribool)
https://de.wikipedia.org/wiki/Dreiwertige_Logik
https://en.wikipedia.org/wiki/Three-valued_logic - bool2 (similar to bool)
These provide additional support:
- weak negation https://de.wikipedia.org/wiki/Dreiwertige_Logik#Starke_und_schwache_Negation
implemented as operator~ - charconv
boost::charconv::from_chars/to_chars
if available (C++17) std::from_chars/to_chars - type traits
boost::is_logic - std::numeric_limits
Differences to bool/tribool
- operator>>(stream) always returns false in the event of an error
Implementation
- If standard functions/classes are available these are used, otherwise (fallback) boost.
- I used my small (single header) library streamutil. This simplifies a few things, but is not absolutely necessary.
- For tribool I added the functions/type traits/limits/operators.
Unfortunately I can't provide bool4/3/2 in the namespace boost::logic because it conflicts with indeterminate.
todo
- Remove tribool, then the classes can be implemented in boost::logic. For compatibility reasons, "using tribool = bool3;" can be provided (temporarily).
- For bool4/bool3 there are more logical operators 1.). Perhaps it would be possible to provide these as well. However, I am not a mathematician and cannot judge whether this would make sense, as the functions/operators would have to be provided uniformly for bool4/3/2.
In principle, you should take another look at the code/tables to detect errors :-)
many thanks
Gero
Code
logic2.hpp.txt
streamutil.hpp.txt
is_integer.hpp.txt
1.)
Metadata
Metadata
Assignees
Labels
No labels