📄 bitmatrix.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 + -