| 2684 | raise IndexError("index out of range") |
| 2685 | |
| 2686 | def __setitem__(self, i, value): |
| 2687 | if isinstance(i, slice): |
| 2688 | if i.step is not None: |
| 2689 | raise IndexError("step not supported on assignment") |
| 2690 | i = i.indices(self.end) |
| 2691 | start = i[0] |
| 2692 | stop = i[1] |
| 2693 | if stop < start: |
| 2694 | stop = start |
| 2695 | if len(value) != (stop - start): |
| 2696 | self.remove(start, stop - start) |
| 2697 | self.insert(start, value) |
| 2698 | else: |
| 2699 | self.write(start, value) |
| 2700 | elif i < 0: |
| 2701 | if i >= -self.length: |
| 2702 | if len(value) != 1: |
| 2703 | raise ValueError("expected single byte for assignment") |
| 2704 | if self.write(self.start + int(self.length + i), value) != 1: |
| 2705 | raise IndexError("index not writable") |
| 2706 | else: |
| 2707 | raise IndexError("index out of range") |
| 2708 | elif (i >= self.start) and (i < self.end): |
| 2709 | if len(value) != 1: |
| 2710 | raise ValueError("expected single byte for assignment") |
| 2711 | if self.write(int(i), value) != 1: |
| 2712 | raise IndexError("index not writable") |
| 2713 | else: |
| 2714 | raise IndexError("index out of range") |
| 2715 | |
| 2716 | def __contains__(self, i: int): |
| 2717 | for s in self.segments: |