diff --git a/node-graph/libraries/core-types/src/record.rs b/node-graph/libraries/core-types/src/record.rs index 47ce402feb..d315314606 100644 --- a/node-graph/libraries/core-types/src/record.rs +++ b/node-graph/libraries/core-types/src/record.rs @@ -759,18 +759,28 @@ impl<'a, 'e, N> RecordLazyInput<'a, 'e, N> { B: crate::context::DeriveCtx, N: for<'d> DerivedRecordEdge<'d, crate::context::Derived<'d, B>>, { - inner_extent_of(self.node, ctx, self.inner_levels) + inner_extent_of(self.node, ctx, 0, self.inner_levels) + } + + /// The flat lane count of the copy at `copy`, for edges whose inner + /// extents vary per copy. + pub fn inner_extent_at(&self, ctx: &B, copy: u64) -> Result + where + B: crate::context::DeriveCtx, + N: for<'d> DerivedRecordEdge<'d, crate::context::Derived<'d, B>>, + { + inner_extent_of(self.node, ctx, copy, self.inner_levels) } } /// See [`RecordLazyInput::inner_extent`]. -fn inner_extent_of(node: &N, ctx: &B, levels: u8) -> Result +fn inner_extent_of(node: &N, ctx: &B, copy: u64, levels: u8) -> Result where B: crate::context::DeriveCtx, N: for<'d> DerivedRecordEdge<'d, crate::context::Derived<'d, B>>, { let head = ctx.index_head(); - let derived = ctx.promoted(&head, 0); + let derived = ctx.promoted(&head, copy); let mut inner: u64 = 1; for level in 0..levels { match node.extent_at_derived(&derived, level) { @@ -818,7 +828,7 @@ impl<'a, 'e, Out, N> DerivedLazyInput<'a, 'e, Out, N> { B: crate::context::DeriveCtx, N: for<'d> DerivedRecordEdge<'d, crate::context::Derived<'d, B>>, { - inner_extent_of(self.node, ctx, self.inner_levels) + inner_extent_of(self.node, ctx, 0, self.inner_levels) } pub fn eval<'d, C>(&self, ctx: &C) -> Result