shithub: mc

ref: e686640da8441d0cae0e45d5d6ef9f96c45a8e24
dir: /libstd/strsplit.myr/

View raw version
use "alloc.use"
use "die.use"
use "extremum.use"
use "fmt.use"
use "option.use"
use "slpush.use"
use "strfind.use"
use "types.use"

pkg std =
	const strsplit	: (s : byte[:], delim : byte[:] -> byte[:][:])
;;

const strsplit = {s, delim
	var last
	var sp

	sp = [][:]
	if s.len == 0
		-> sp
	;;
	last = 0
	while true
		match strfind(s, delim)
		| `Some i:
			sp = slpush(sp, s[:i])
			s = s[i + delim.len:]
		| `None:
			goto donesplit
		;;
	;;
:donesplit
	sp = slpush(sp, s[:])
	-> sp
}