00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef PERMUTEBLOCKS_H
00025 #define PERMUTEBLOCKS_H
00026
00027 #include "FileBlockQueue.h"
00028 #include "FileIO.h"
00029 #include "BlockStats.h"
00030
00049 class PermuteBlocks {
00050 public:
00051
00053 PermuteBlocks(FileBlockQueue *scatterQueue, BlockStats *blockSize);
00054 ~PermuteBlocks(void);
00055
00057 void permute(void);
00058
00060 void fillEmpties(void);
00061 private:
00062 void buildList(FileBlockQueue *scatterQueue);
00063 void copyBlock(long dest, long source);
00064 void readToMemory(long source);
00065 void writeFromMemory(long dest);
00066
00067 int *_blockTable;
00068 FILE_POS_TYPE *_blockOrder;
00069 int _blockCount;
00070 FILE_POS_TYPE _fileCount;
00071 char *_buffer;
00072 char *_memory;
00073 FileIO *_file;
00074 const int _blockSize;
00075 };
00076
00077 #endif