XBitField 一个01标志类

来源:互联网 发布:js公式编辑器 编辑:程序博客网 时间:2024/05/22 13:26
#ifndef XBITFIELD_H#define XBITFIELD_Hclass XBitField{public:    /** Default constructor */    XBitField(int bc);    /** Default destructor */    virtual ~XBitField();    // 指定bit位为1    int set (int bit);    // 返回bit位值    int get (int bit);    // 指定bit位为0    int reset (int bit);protected:private:    unsigned int *pField_; //!< Member variable "*pField_"    unsigned int uBitCount_; //!< Member variable "uBitCount_"};#endif // XBITFIELD_H


#include "XBitField.h"#include <cstdio>#include <windows.h>#define SZ_UINT sizeof(unsigned int)XBitField::XBitField(int bc){    //ctor    uBitCount_ = bc;    pField_ = new unsigned int[bc/(SZ_UINT*8)];    //memset(pField_, 0, bc);    printf("SZ_UINT: %d\nnumber: %d\n", SZ_UINT, bc/(SZ_UINT*8));}XBitField::~XBitField(){    //dtor    if (pField_)        delete [] pField_;}int XBitField::set (int bit){    if (bit >= uBitCount_ || !pField_)        return -1;    pField_[bit/(SZ_UINT*8)] |= (0x00000001 << (bit%(SZ_UINT*8)-1));    return 0;}int XBitField::reset (int bit){    if (bit >= uBitCount_ || !pField_)        return -1;    pField_[bit/(SZ_UINT*8)] &= ~(0x00000001 << (bit%(SZ_UINT*8)-1));    return 0;}int XBitField::get (int bit){    if (bit >= uBitCount_ || !pField_)        return -1;    return (pField_[bit/(SZ_UINT*8)] & (0x00000001 << (bit%(SZ_UINT*8)-1)) ? 1 : 0);}


0 0
原创粉丝点击