| 56 | |
| 57 | |
| 58 | class FilesArray(object): |
| 59 | def __init__(self, files): |
| 60 | self.files = files |
| 61 | self.empty = set() |
| 62 | self.num_buffers = len(files) |
| 63 | self.buffers = {i: None for i in range(self.num_buffers)} |
| 64 | |
| 65 | def get_dict(self): |
| 66 | return {i: self.buffers[i] for i in range(self.num_buffers) if i not in self.empty} |
| 67 | |
| 68 | def refresh(self): |
| 69 | for i in range(self.num_buffers): |
| 70 | if self.buffers[i] is None and i not in self.empty: |
| 71 | self.buffers[i] = self.files[i].readline() |
| 72 | |
| 73 | if self.buffers[i] == '': |
| 74 | self.empty.add(i) |
| 75 | self.files[i].close() |
| 76 | |
| 77 | if len(self.empty) == self.num_buffers: |
| 78 | return False |
| 79 | |
| 80 | return True |
| 81 | |
| 82 | def unshift(self, index): |
| 83 | value = self.buffers[index] |
| 84 | self.buffers[index] = None |
| 85 | |
| 86 | return value |
| 87 | |
| 88 | |
| 89 | class FileMerger(object): |