/* version 2007.09.24, D. J. Bernstein; public domain */ #ifndef DAGBIT_H #define DAGBIT_H class dagbit { long long node; int flipped; // 0 or 1 int value; // 0 or 1 public: dagbit(); void key(long long,int); void input(long long,int); void output(long long); dagbit& operator=(int); dagbit& operator=(const dagbit&); friend dagbit op(dagbit,dagbit,dagbit,const int [2][2][2]); friend dagbit operator~(dagbit); friend dagbit operator&(dagbit,dagbit); friend dagbit operator|(dagbit,dagbit); friend dagbit operator^(dagbit,dagbit); dagbit& operator&=(const dagbit &x) { *this = *this & x; } dagbit& operator|=(const dagbit &x) { *this = *this | x; } dagbit& operator^=(const dagbit &x) { *this = *this ^ x; } friend dagbit majority(dagbit,dagbit,dagbit); friend dagbit belowsum(dagbit,dagbit,dagbit); friend dagbit xorthree(dagbit,dagbit,dagbit); } ; #endif