shithub: mc

ref: e65d5c4019e76430398e4ebc1cb734f1efea3b14
dir: /lib/std/strreplace.myr/

View raw version
use "alloc"
use "die"
use "slcp"
use "strfind"
use "sljoin"
use "types"
use "option"

pkg std =
	const strreplace	: (haystack : byte[:], needle : byte[:], repl : byte[:] -> byte[:])
;;

const strreplace = {haystack, needle, repl
	var ret

	iassert(needle.len > 0, "missing needle")
	ret = ""
	while true
		match std.strfind(haystack, needle)
		| `None:	break
		| `Some idx:
			std.sljoin(&ret, haystack[:idx])
			std.sljoin(&ret, repl)
			haystack = haystack[idx + needle.len:]
		;;
	;;
	std.sljoin(&ret, haystack)
	-> ret
}