| 2654 | yield from self.functions |
| 2655 | |
| 2656 | def __getitem__(self, i) -> bytes: |
| 2657 | if isinstance(i, tuple): |
| 2658 | result = bytes() |
| 2659 | for s in i: |
| 2660 | result += self.__getitem__(s) |
| 2661 | return result |
| 2662 | elif isinstance(i, slice): |
| 2663 | if i.step is not None: |
| 2664 | raise IndexError("step not implemented") |
| 2665 | i = i.indices(self.end) |
| 2666 | start = i[0] |
| 2667 | stop = i[1] |
| 2668 | if stop <= start: |
| 2669 | return b"" |
| 2670 | return self.read(start, stop - start) |
| 2671 | elif i < 0: |
| 2672 | if i >= -self.length: |
| 2673 | value = self.read(self.start + int(self.length + i), 1) |
| 2674 | if len(value) == 0: |
| 2675 | raise IndexError("index not readable") |
| 2676 | return value |
| 2677 | raise IndexError("index out of range") |
| 2678 | elif (i >= self.start) and (i < self.end): |
| 2679 | value = self.read(int(i), 1) |
| 2680 | if len(value) == 0: |
| 2681 | raise IndexError("index not readable") |
| 2682 | return value |
| 2683 | else: |
| 2684 | raise IndexError("index out of range") |
| 2685 | |
| 2686 | def __setitem__(self, i, value): |
| 2687 | if isinstance(i, slice): |