00001 /*---------------------------------------------------------------------------* 00002 * IT++ * 00003 *---------------------------------------------------------------------------* 00004 * Copyright (c) 1995-2001 by Tony Ottosson, Thomas Eriksson, Pål Frenger, * 00005 * Tobias Ringström, and Jonas Samuelsson. * 00006 * * 00007 * Permission to use, copy, modify, and distribute this software and its * 00008 * documentation under the terms of the GNU General Public License is hereby * 00009 * granted. No representations are made about the suitability of this * 00010 * software for any purpose. It is provided "as is" without expressed or * 00011 * implied warranty. See the GNU General Public License for more details. * 00012 *---------------------------------------------------------------------------*/ 00013 // 00014 // SPUC - Signal processing using C++ - A DSP library 00025 #ifndef __bitary_h 00026 #define __bitary_h 00027 00028 #include <iostream> 00029 #include <cassert> 00030 using namespace std; 00031 //#include "spucassert.h" 00032 namespace SPUC { 00051 class bit { 00052 public: 00054 bit() { b=0; } 00055 00057 bit(const short value) { 00058 // it_assert0(value==0 || value==1, "bin(value): value must be 0 or 1"); 00059 b = (char)value; 00060 } 00061 00062 // Copy constructor 00063 bit(const bit &inbin) { b=inbin.b; } 00064 00066 void operator=(const short &value) { 00067 // it_assert0(value==0 || value==1, "bin(value): value must be 0 or 1"); 00068 b = (char)value; 00069 } 00070 00072 void operator=(const bit &inbin) { b=inbin.b; } 00073 00075 void operator/=(const bit &inbin) { b=b|inbin.b; } 00076 00078 void operator|=(const bit &inbin) { b=b|inbin.b; } 00080 bit operator/(const bit &inbin) const { return bit(b|inbin.b); } 00082 bit operator|(const bit &inbin) const { return bit(b|inbin.b); } 00083 00085 void operator+=(const bit &inbin) { b=b^inbin.b; } 00087 void operator^=(const bit &inbin) { b=b^inbin.b; } 00089 bit operator+(const bit &inbin) const { return bit(b^inbin.b); } 00091 bit operator^(const bit &inbin) const { return bit(b^inbin.b); } 00093 void operator-=(const bit &inbin) { b=b^inbin.b; } 00095 bit operator-(const bit &inbin) const {return bit(b^inbin.b); } 00097 bit operator-() const { return bit(b); } 00098 00100 void operator*=(const bit &inbin) { b=b&inbin.b; } 00102 void operator&=(const bit &inbin) { b=b&inbin.b; } 00104 bit operator*(const bit &inbin) const { return bit(b&inbin.b); } 00106 bit operator&(const bit &inbin) const { return bit(b&inbin.b); } 00107 00109 bit operator!(void) const { return bit(b^1); } 00111 bit operator~(void) const { return bit(b^1); } 00112 00114 bool operator==(const bit &inbin) const { return b == inbin.b; } 00116 bool operator==(const int &inbin) const { return b == inbin; } 00117 00119 bool operator!=(const bit &inbin) const { return b != inbin.b; } 00121 bool operator!=(const int &inbin) const { return b != inbin; } 00122 00124 bool operator<(const bit &inbin) const { return b < inbin.b; } 00126 bool operator<=(const bit &inbin) const { return b <= inbin.b; } 00127 00129 bool operator>(const bit &inbin) const { return b > inbin.b; } 00131 bool operator>=(const bit &inbin) const { return b >= inbin.b; } 00132 00134 operator short() const { return short(b); } 00136 operator int() const { return int(b); } 00138 operator bool() const { return b!=0; } 00140 operator float() const { return float(b); } 00142 operator double() const { return double(b); } 00143 00145 char value() const { return b; } 00146 00147 protected: 00148 00149 private: 00150 char b; 00151 }; 00152 00158 ostream &operator<<(ostream &output, const bit &inbin); 00159 00164 istream &operator>>(istream &input, bit &outbin); 00165 } //namespace SPUC 00166 00167 #endif // __bitary_h