btrfs: [] on the end of a struct field is a variable length array.
[haiku.git] / src / add-ons / kernel / file_systems / ext2 / DataStream.h
blobc2c769001fc2537805257f6fd0e1fdd4b627b289
1 /*
2 * Copyright 2001-2010, Haiku Inc. All rights reserved.
3 * This file may be used under the terms of the MIT License.
5 * Authors:
6 * Janito V. Ferreira Filho
7 */
8 #ifndef DATASTREAM_H
9 #define DATASTREAM_H
12 #include "ext2.h"
13 #include "Transaction.h"
16 class Volume;
19 class DataStream
21 public:
22 DataStream(Volume* volume, ext2_data_stream* stream,
23 off_t size);
24 ~DataStream();
26 status_t FindBlock(off_t offset, fsblock_t& block,
27 uint32 *_count = NULL);
28 status_t Enlarge(Transaction& transaction, off_t& numBlocks);
29 status_t Shrink(Transaction& transaction, off_t& numBlocks);
31 private:
32 uint32 _BlocksNeeded(off_t end);
34 status_t _GetBlock(Transaction& transaction, uint32& block);
35 status_t _PrepareBlock(Transaction& transaction, uint32* pos,
36 uint32& blockNum, bool& clear);
38 status_t _AddBlocks(Transaction& transaction, uint32* block,
39 off_t count);
40 status_t _AddBlocks(Transaction& transaction, uint32* block,
41 off_t start, off_t end, int recursion);
43 status_t _AddForDirectBlocks(Transaction& transaction,
44 uint32 numBlocks);
45 status_t _AddForIndirectBlock(Transaction& transaction,
46 uint32 numBlocks);
47 status_t _AddForDoubleIndirectBlock(Transaction& transaction,
48 uint32 numBlocks);
49 status_t _AddForTripleIndirectBlock(Transaction& transaction,
50 uint32 numBlocks);
52 status_t _PerformFree(Transaction& transaction);
53 status_t _MarkBlockForRemoval(Transaction& transaction,
54 uint32* block);
56 status_t _FreeBlocks(Transaction& transaction, uint32* block,
57 uint32 count);
58 status_t _FreeBlocks(Transaction& transaction, uint32* block,
59 off_t start, off_t end, bool freeParent,
60 int recursion);
62 status_t _RemoveFromDirectBlocks(Transaction& transaction,
63 uint32 numBlocks);
64 status_t _RemoveFromIndirectBlock(Transaction& transaction,
65 uint32 numBlocks);
66 status_t _RemoveFromDoubleIndirectBlock(Transaction& transaction,
67 uint32 numBlocks);
68 status_t _RemoveFromTripleIndirectBlock(Transaction& transaction,
69 uint32 numBlocks);
72 const uint32 kBlockSize;
73 const uint32 kIndirectsPerBlock;
74 const uint32 kIndirectsPerBlock2;
75 const uint32 kIndirectsPerBlock3;
77 const uint32 kMaxDirect;
78 const uint32 kMaxIndirect;
79 const uint32 kMaxDoubleIndirect;
81 Volume* fVolume;
82 ext2_data_stream* fStream;
83 uint32 fFirstBlock;
85 uint32 fAllocated;
86 fsblock_t fAllocatedPos;
87 uint32 fWaiting;
89 uint32 fFreeStart;
90 uint32 fFreeCount;
92 off_t fNumBlocks;
93 uint32 fRemovedBlocks;
94 off_t fSize;
97 #endif // DATASTREAM_H