MCPcopy Index your code
hub / github.com/RustPython/RustPython / setitem_by_slice

Method setitem_by_slice

crates/stdlib/src/mmap.rs:1552–1595  ·  view source on GitHub ↗
(
            &self,
            slice: &SaturatedSlice,
            value: PyObjectRef,
            vm: &VirtualMachine,
        )

Source from the content-addressed store, hash-verified

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 {

Callers 1

setitem_innerMethod · 0.45

Calls 9

bytes_from_objectFunction · 0.85
adjust_indicesMethod · 0.80
try_writableMethod · 0.80
ErrClass · 0.50
__len__Method · 0.45
lenMethod · 0.45
writeMethod · 0.45
to_pyexceptionMethod · 0.45
revMethod · 0.45

Tested by

no test coverage detected