urbackup_backend/common/bitmap.h
2016-09-15 01:20:52 +02:00

89 lines
1.2 KiB
C++

#pragma once
#include <string>
#include <memory.h>
class Bitmap
{
public:
Bitmap(size_t n)
{
resize(n);
}
Bitmap()
{
bitmap_size = 0;
bitmap=NULL;
}
~Bitmap()
{
delete[] bitmap;
}
void resize(size_t n)
{
if(bitmap!=NULL)
{
delete[] bitmap;
bitmap = NULL;
}
bitmap_size = n/8 + (n%8==0 ? 0 : 1);
if (bitmap_size > 0)
{
bitmap = new char[bitmap_size];
memset(bitmap, 0, bitmap_size);
}
}
void set(size_t i, bool v)
{
size_t bitmap_byte=(size_t)(i/8);
size_t bitmap_bit=i%8;
unsigned char b=bitmap[bitmap_byte];
if(v==true)
b=b|(1<<(7-bitmap_bit));
else
b=b&(~(1<<(7-bitmap_bit)));
bitmap[bitmap_byte]=b;
}
bool get(size_t i)
{
size_t bitmap_byte=(size_t)(i/8);
size_t bitmap_bit=i%8;
unsigned char b=bitmap[bitmap_byte];
bool has_bit=((b & (1<<(7-bitmap_bit)))>0);
return has_bit;
}
char* raw()
{
return bitmap;
}
size_t rawSize()
{
return bitmap_size;
}
void setRaw(char* raw)
{
memcpy(bitmap, raw, bitmap_size);
}
bool empty()
{
return bitmap == NULL;
}
private:
char* bitmap;
size_t bitmap_size;
};