@value
struct Column[T: CollectionElement]:
var getter: fn (v: Vector, length: Int, offset: Int) capturing -> List[T]
fn __init__[ChildType: CollectionElement](inout self: Column[List[ChildType]], child: Column[ChildType]):
"""Initialize a list column from a child column."""
fn list_getter(v: Vector, length: Int, offset: Int) capturing -> List[List[ChildType]]:
var l = List[List[ChildType]](capacity=length)
for idx in range(length):
l.append(child.get(v, length, offset + idx))
return l
self.getter = list_getter
# ...
fn get(self, v: Vector, length: Int, offset: Int) -> List[T]:
return self.getter(v, length, offset)
@value
struct Column[T: CollectionElement]:
var getter: fn (v: Vector, length: Int, offset: Int) capturing -> List[T]
fn __init__[ChildType: CollectionElement](inout self: Column[List[ChildType]], child: Column[ChildType]):
"""Initialize a list column from a child column."""
fn list_getter(v: Vector, length: Int, offset: Int) capturing -> List[List[ChildType]]:
var l = List[List[ChildType]](capacity=length)
for idx in range(length):
l.append(child.get(v, length, offset + idx))
return l
self.getter = list_getter
# ...
fn get(self, v: Vector, length: Int, offset: Int) -> List[T]:
return self.getter(v, length, offset)