⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bitmatrix.h

📁 A File Comparer with visual output
💻 H
字号:
// BitMatrix.h: interface for the CBitMatrix class.
//
//////////////////////////////////////////////////////////////////////
#include <string>
#include <vector>
#include <algorithm>
#include <fstream.h>
#include <iostream>

typedef bool bitcolumn;
typedef std::vector<bitcolumn> vbitRow;
typedef std::vector<vbitRow> vbitMatrix;
typedef unsigned char BYTE;

typedef struct sbyte
{	
	BYTE bit0 : 1;
	BYTE bit1 : 1;
	BYTE bit2 : 1;
	BYTE bit3 : 1;

	BYTE bit4 : 1;
	BYTE bit5 : 1;
	BYTE bit6 : 1;
	BYTE bit7 : 1;
} SByte;

typedef SByte datatype;

class CBitMatrix {
 public:
   CBitMatrix(unsigned int rows, unsigned int cols);
   bool get(unsigned int row, unsigned int col);   
   bool put(unsigned int row, unsigned int col,bool val);
   //bool& operator() (unsigned int row, unsigned int col); // another way to get
   //bool  operator() (unsigned int row, unsigned int col) const;
   bool  resizeTo(unsigned int row, unsigned int col);
   // ...
  ~CBitMatrix();                              // Destructor
   CBitMatrix(const CBitMatrix& m);               // Copy constructor
   //CBitMatrix& operator= (const CBitMatrix& m);   // Assignment operator
   // ...
 private:
   unsigned rows_, cols_;
   unsigned row_, col_;
   datatype* data_;
 };
 

inline CBitMatrix::CBitMatrix(unsigned int rows, unsigned int cols)
   : rows_ (rows),
     cols_ (cols),
     data_ (new datatype[rows * cols])
{
         if (rows == 0 || cols == 0) 
         throw; //BadIndex("Matrix constructor has 0 size");
         else
				resizeTo(rows,cols);
                //for (int i=0;i<(rows * cols);i++) data_[i] = -1;
}
 
inline CBitMatrix::~CBitMatrix()
{
   delete[] data_;
}

inline bool CBitMatrix::resizeTo(unsigned int rows, unsigned int cols)
{
   delete[] data_;      
   rows_ = rows;
   cols_ = cols;  
   //unsigned int bytes = ((rows_ * cols_)/8)+1;
   //data_ =  new SByte[bytes];
   data_ =  new datatype[rows_ * cols_];
   return true;
}
 
inline bool CBitMatrix::get(unsigned int row, unsigned int col)
{
   if (row >= rows_ || col >= cols_)
     throw; //BadIndex("Matrix subscript out of bounds");
   unsigned int bitpos = (cols_*row + col)/8;
   bool retval;   
   switch (col%8)
   {
	case 0 :retval = data_[bitpos].bit0;break;
	case 1 :retval = data_[bitpos].bit1;break;
	case 2 :retval = data_[bitpos].bit2;break;
	case 3 :retval = data_[bitpos].bit3;break;

	case 4 :retval = data_[bitpos].bit4;break;
	case 5 :retval = data_[bitpos].bit5;break;
	case 6 :retval = data_[bitpos].bit6;break;
	case 7 :retval = data_[bitpos].bit7;break;
	default : break;
   }
   return retval;
}

inline bool CBitMatrix::put(unsigned int row, unsigned int col, bool val)
{
   if (row >= rows_ || col >= cols_)
     throw; //BadIndex("Matrix subscript out of bounds");
   unsigned int bitpos = (cols_*row + col)/8;
   bool retval=true;   
   switch (col%8)
   {
	case 0 :data_[bitpos].bit0 = val;break;
	case 1 :data_[bitpos].bit1 = val;break;
	case 2 :data_[bitpos].bit2 = val;break;
	case 3 :data_[bitpos].bit3 = val;break;

	case 4 :data_[bitpos].bit4 = val;break;
	case 5 :data_[bitpos].bit5 = val;break;
	case 6 :data_[bitpos].bit6 = val;break;
	case 7 :data_[bitpos].bit7 = val;break;
	default : break;
   }
   return retval;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -