summaryrefslogtreecommitdiff
path: root/lib/std/strreplace.myr
blob: 589bac5bc808a4ce1b8e5260b25f7e2e4c343640 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
}