📄 bitfield.h
字号:
#ifndef BITFIELD_H
#define BITFIELD_H
#include <sys/types.h>
class BitField
{
private:
static size_t nbits; //piece总数
static size_t nbytes; //位图区域b的大小。若共有65个piece,则nbytes = 9。即b占9个字节,但是只有前65位有意义。
unsigned char *b; //位图所在的内存区域,以字符串形式表示。
size_t nset; //已经获得的piece数,也就是b中被置位的位数。当nset =nbits时,文件的所有piece全部获得。
inline void _recalc();
inline void _setall(unsigned char* buf);
inline void _set(size_t idx);
public:
BitField();
BitField(size_t n_bits);
BitField(const BitField &bf);
~BitField(){ if(b) delete []b; }
void operator=(const BitField &bf);
void SetAll();
void SetReferBuffer(char *buf);
void Set(size_t idx);
void UnSet(size_t idx);
int IsSet(size_t idx) const;
int IsFull() const { return (nset >= nbits) ? 1 : 0; }
int IsEmpty() const { return (nset == 0) ? 1 : 0; }
size_t Count() const { return nset;}
size_t NBytes() const { return nbytes; }
size_t NBits() const { return nbits; }
size_t Random() const;
void Comb(const BitField &bf);
void Except(const BitField &bf);
void Invert();
void And(const BitField &bf);
int WriteToFile(const char *fname);
int SetReferFile(const char *fname);
void WriteToBuffer(char *buf);
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -