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