(
&self,
slice: &SaturatedSlice,
value: PyObjectRef,
vm: &VirtualMachine,
)
| 1550 | } |
| 1551 | |
| 1552 | fn setitem_by_slice( |
| 1553 | &self, |
| 1554 | slice: &SaturatedSlice, |
| 1555 | value: PyObjectRef, |
| 1556 | vm: &VirtualMachine, |
| 1557 | ) -> PyResult<()> { |
| 1558 | let (range, step, slice_len) = slice.adjust_indices(self.__len__()); |
| 1559 | |
| 1560 | let bytes = bytes_from_object(vm, &value)?; |
| 1561 | |
| 1562 | if bytes.len() != slice_len { |
| 1563 | return Err(vm.new_index_error("mmap slice assignment is wrong size")); |
| 1564 | } |
| 1565 | |
| 1566 | if slice_len == 0 { |
| 1567 | // do nothing |
| 1568 | Ok(()) |
| 1569 | } else if step == 1 { |
| 1570 | self.try_writable(vm, |mmap| { |
| 1571 | (&mut mmap[range]) |
| 1572 | .write(&bytes) |
| 1573 | .map_err(|err| err.to_pyexception(vm))?; |
| 1574 | Ok(()) |
| 1575 | })? |
| 1576 | } else { |
| 1577 | let mut bi = 0; // bytes index |
| 1578 | if step.is_negative() { |
| 1579 | for i in range.rev().step_by(step.unsigned_abs()) { |
| 1580 | self.try_writable(vm, |mmap| { |
| 1581 | mmap[i] = bytes[bi]; |
| 1582 | })?; |
| 1583 | bi += 1; |
| 1584 | } |
| 1585 | } else { |
| 1586 | for i in range.step_by(step.unsigned_abs()) { |
| 1587 | self.try_writable(vm, |mmap| { |
| 1588 | mmap[i] = bytes[bi]; |
| 1589 | })?; |
| 1590 | bi += 1; |
| 1591 | } |
| 1592 | } |
| 1593 | Ok(()) |
| 1594 | } |
| 1595 | } |
| 1596 | } |
| 1597 | |
| 1598 | impl Representable for PyMmap { |
no test coverage detected