Summary: Slice Manipulation
pkg std =
generic sleq : (a : @a[:], b : @a[:] -> bool)
generic slcp : (dst : @a[:], src : @a[:] -> void)
generic slput : (sl : @a[:], idx : size, elt : @a -> @a[:])
generic slpush : (sl : @a[:], elt : @a -> @a[:])
generic slpop : (sl : @a[:] -> (@a, @a[:]))
generic sldup : (sl : @a[:] -> @a[:])
generic slfill : (sl : @a[:], v : @a -> @a[:])
generic sljoin : (dst : @a[:]#, src : @a[:] -> @a[:])
;;
Functions
generic sleq : (a : @a[:], b : @a[:] -> bool)
Compares if two slices are equal, elementwise. Uses the '==' operator for each value. Returns true if they are equal, false otherwise.
generic slcp : (dst : @a[:], src : @a[:] -> void)
Copies all the elements from src
to dst
. The copy made is shallow,
and done using the =
operator. The two slices must be equal size. If they
are not equal, this will cause the program to abort.
generic slput : (sl : @a[:], idx : size, elt : @a -> @a[:])
Inserts a value elt
into the slice sl
at index idx
, moving all values
from sl[idx:len]
to sl[idx+1:len+1]
. This assumes that the slice is either
empty, or is allocated on the heap using slalloc
.
This may move the slice, invalidating the original input argument.
generic slpush : (sl : @a[:], elt : @a -> @a[:])
Inserts a value elt
into the slice sl
at index the end of the slice.
This may move the slice, invalidating the original input argument.
generic slpop : (sl : @a[:] -> (@a, @a[:]))
Removes an element from the end of the slice, returning the element and the new, truncated slice.
This may move the slice, invalidating the original input argument.
generic sldup : (sl : @a[:] -> @a[:])
Duplicates a slice. This function is equivalent to calling slalloc() followed by slcp().
generic slfill : (sl : @a[:], v : @a -> @a[:])
Fills a slice with a value.
generic sljoin : (dst : @a[:]#, src : @a[:] -> @a[:])
Concatenates src
onto the end of dst#
. Equivalent to iterating through
every element of src
and slpush()
ing it onto dst
.