Skip to main content

read_section

Function read_section 

Source
pub fn read_section<T, F>(
    reader: &mut PsdReader<'_>,
    round: usize,
    func: F,
    skip_empty: bool,
    eight_bytes: bool,
) -> ReadResult<Option<T>>
where F: FnOnce(&mut PsdReader<'_>, &dyn Fn(&PsdReader<'_>) -> usize) -> ReadResult<T>,
Expand description

Зеркало readSection<T>(reader, round, func, skipEmpty = true, eightBytes = false).

Читает length-prefixed секцию, вызывает func с замыканием left() (сколько байт осталось до конца секции), затем выравнивает курсор на конец секции, округлённый так, чтобы length стал кратен round.

Логика округления воспроизведена ровно: while (length % round) { length++; end++; }.

func принимает &mut PsdReader и &dyn Fn(&PsdReader) -> usize (вычисление left()). Поскольку Rust не даёт замыканию захватить reader, который одновременно передаётся мутабельно в func, left принимает текущий ридер явным аргументом — это эквивалент upstream’а, где left читает reader.offset.