shithub: mc

Download patch

ref: b583c0bdc775e71a87b60f54ea6b1c19a32d2eae
parent: efc139e255850d6300d5ef750cfe92d593efc4e8
parent: 9a778738a652738ed3877477a37359d7d490c853
author: Ori Bernstein <[email protected]>
date: Tue Jan 28 16:23:53 EST 2014

Merge https://github.com/oridb/libbio

--- a/bio.myr
+++ b/bio.myr
@@ -391,7 +391,7 @@
 			if f.rbuf[i] == delim[0]
 				for j = 0; j < delim.len; j++
 					if f.rbuf[i + j] != delim[j]
-						goto nextiter
+						goto nextiterread
 					;;
 				;;
 				if !drop
@@ -400,7 +400,7 @@
 				f.rstart += delim.len
 				-> `std.Some ret
 			;;
-:nextiter
+:nextiterread
 		;;
 		if !drop
 			ret = readinto(f, ret, f.rend - f.rstart)
@@ -413,6 +413,32 @@
 const readln = {f
 	-> readto(f, "\n")
 }
+
+const skipto = {f, delim
+	var ret : byte[:]
+	var i, j
+
+	ret = [][:]
+	while true
+		if !ensureread(f, delim.len)
+			-> ret.len > 0
+		;;
+		for i = f.rstart; i < f.rend; i++
+			if f.rbuf[i] == delim[0]
+				for j = 0; j < delim.len; j++
+					if f.rbuf[i + j] != delim[j]
+						goto nextiterskip
+					;;
+				;;
+				f.rstart += delim.len
+				-> true
+			;;
+:nextiterskip
+		;;
+	;;
+	std.die("unreachable")
+}
+
 
 /*
 Same as std.put, but buffered. Returns the number of bytes written.