#include #include "logic.h" #include "error.h" enum BINARY logic_not(enum BINARY input) { switch (input) { case LOGIC_HIGH: return LOGIC_LOW; case LOGIC_LOW: return LOGIC_HIGH; default: emit_error("Severe: Invalid logic value found\n"); /* FIXME Don't abort */ abort(); } } enum BINARY logic_and(enum BINARY a, enum BINARY b) { if (a == LOGIC_HIGH && b == LOGIC_HIGH) return LOGIC_HIGH; else return LOGIC_LOW; } enum BINARY logic_or(enum BINARY a, enum BINARY b) { if (a == LOGIC_HIGH || b == LOGIC_HIGH) return LOGIC_HIGH; else return LOGIC_LOW; } enum BINARY logic_xor(enum BINARY a, enum BINARY b) { if ( (a == LOGIC_HIGH && b == LOGIC_LOW) || (a == LOGIC_LOW && b == LOGIC_HIGH)) return LOGIC_HIGH; else return LOGIC_LOW; } enum BINARY logic_nand(enum BINARY a, enum BINARY b) { return logic_not(logic_and(a, b)); } enum BINARY logic_nor(enum BINARY a, enum BINARY b) { return logic_not(logic_or(a, b)); }