/* * Copyright 2001-2010, Haiku Inc. All rights reserved. * This file may be used under the terms of the MIT License. * * Authors: * Janito V. Ferreira Filho */ #ifndef BLOCKALLOCATOR_H #define BLOCKALLOCATOR_H #include #include "ext2.h" #include "Transaction.h" class AllocationBlockGroup; class Inode; class Volume; class BlockAllocator { public: BlockAllocator(Volume* volume); ~BlockAllocator(); status_t Initialize(); status_t AllocateBlocks(Transaction& transaction, uint32 minimum, uint32 maximum, uint32& blockGroup, fsblock_t& start, uint32& length); status_t Allocate(Transaction& transaction, Inode* inode, off_t numBlocks, uint32 minimum, fsblock_t& start, uint32& length); status_t Free(Transaction& transaction, fsblock_t start, uint32 length); uint32 FreeBlocks(); protected: static status_t _Initialize(BlockAllocator* allocator); Volume* fVolume; mutex fLock; AllocationBlockGroup* fGroups; uint32 fBlocksPerGroup; fsblock_t fNumBlocks; uint32 fNumGroups; fsblock_t fFirstBlock; }; #endif // BLOCKALLOCATOR_H