| 111 | self.block_size = block_size |
| 112 | |
| 113 | def sort(self, filename, sort_key=None): |
| 114 | num_blocks = self.get_number_blocks(filename, self.block_size) |
| 115 | splitter = FileSplitter(filename) |
| 116 | splitter.split(self.block_size, sort_key) |
| 117 | |
| 118 | merger = FileMerger(NWayMerge()) |
| 119 | buffer_size = self.block_size / (num_blocks + 1) |
| 120 | merger.merge(splitter.get_block_filenames(), filename + ".out", buffer_size) |
| 121 | |
| 122 | splitter.cleanup() |
| 123 | |
| 124 | def get_number_blocks(self, filename, block_size): |
| 125 | return (os.stat(filename).st_size / block_size) + 1 |