difftreelog
fix SliceArray implementation was dumb
in: master
1 file changed
crates/jrsonnet-evaluator/src/arr/spec.rsdiffbeforeafterboth31}31}323233impl SliceArray {33impl SliceArray {34 fn iter(&self) -> impl Iterator<Item = Result<Val>> + '_ {34 fn map_idx(&self, index: usize) -> usize {35 self.inner36 .iter()37 .skip(self.from as usize)38 .take((self.to - self.from) as usize)39 .step_by(self.step as usize)40 }4142 fn iter_lazy(&self) -> impl Iterator<Item = Thunk<Val>> + '_ {43 self.inner44 .iter_lazy()45 .skip(self.from as usize)35 self.from as usize + self.step as usize * index46 .take((self.to - self.from) as usize)47 .step_by(self.step as usize)48 }36 }4950 fn iter_cheap(&self) -> Option<impl crate::arr::ArrayLikeIter<Val> + '_> {51 Some(52 self.inner53 .iter_cheap()?54 .skip(self.from as usize)55 .take((self.to - self.from) as usize)56 .step_by(self.step as usize),57 )58 }59}37}60impl ArrayLike for SliceArray {38impl ArrayLike for SliceArray {61 fn len(&self) -> usize {39 fn len(&self) -> usize {62 iter::repeat(())63 .take((self.to - self.from) as usize)40 ((self.to - self.from + self.step - 1) / self.step) as usize64 .step_by(self.step as usize)65 .count()66 }41 }674268 fn get(&self, index: usize) -> Result<Option<Val>> {43 fn get(&self, index: usize) -> Result<Option<Val>> {69 self.iter().nth(index).transpose()44 self.inner.get(self.map_idx(index))70 }45 }714672 fn get_lazy(&self, index: usize) -> Option<Thunk<Val>> {47 fn get_lazy(&self, index: usize) -> Option<Thunk<Val>> {73 self.iter_lazy().nth(index)48 self.inner.get_lazy(self.map_idx(index))74 }49 }755076 fn get_cheap(&self, index: usize) -> Option<Val> {51 fn get_cheap(&self, index: usize) -> Option<Val> {77 self.iter_cheap()?.nth(index)52 self.inner.get_cheap(self.map_idx(index))78 }53 }79 fn is_cheap(&self) -> bool {54 fn is_cheap(&self) -> bool {80 self.inner.is_cheap()55 self.inner.is_cheap()