2009-11-21 01:45:08 +00:00
|
|
|
#ifndef __BITMAP_H__
|
|
|
|
#define __BITMAP_H__
|
|
|
|
|
|
|
|
#include <stdint.h>
|
2009-11-24 04:57:41 +00:00
|
|
|
|
|
|
|
|
2009-11-21 01:45:08 +00:00
|
|
|
|
2010-06-26 03:39:14 +00:00
|
|
|
namespace ProDOS {
|
2009-11-21 01:45:08 +00:00
|
|
|
|
2009-11-24 04:57:41 +00:00
|
|
|
class BlockDevice;
|
|
|
|
|
|
|
|
|
2009-11-21 01:45:08 +00:00
|
|
|
class Bitmap {
|
|
|
|
public:
|
|
|
|
|
|
|
|
Bitmap(unsigned blocks);
|
2009-11-24 04:57:41 +00:00
|
|
|
Bitmap(BlockDevice *device, unsigned keyPointer, unsigned blocks);
|
2010-06-26 03:39:14 +00:00
|
|
|
//todo -- constructor by loading from, block device...
|
2009-11-21 01:45:08 +00:00
|
|
|
~Bitmap();
|
|
|
|
|
|
|
|
int allocBlock();
|
|
|
|
int allocBlock(unsigned block);
|
|
|
|
|
|
|
|
void freeBlock(unsigned block);
|
|
|
|
|
|
|
|
|
|
|
|
unsigned freeBlocks() const { return _freeBlocks; }
|
|
|
|
unsigned blocks() const { return _blocks; }
|
|
|
|
unsigned bitmapBlocks() const { return _bitmapBlocks; }
|
|
|
|
unsigned bitmapSize() const { return _bitmapBlocks * 512; }
|
|
|
|
const void *bitmap() const { return _bitmap; }
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
unsigned _freeIndex;
|
|
|
|
unsigned _freeBlocks;
|
|
|
|
|
|
|
|
unsigned _blocks;
|
|
|
|
unsigned _bitmapBlocks;
|
|
|
|
|
|
|
|
uint8_t *_bitmap;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|