mirror of
https://github.com/kovidgoyal/kitty
synced 2026-06-08 14:18:26 +02:00
Switch file input to use new SIMD parser to search for \n and \r in parallel
This commit is contained in:
@@ -13,6 +13,8 @@ import (
|
|||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
|
|
||||||
|
"kitty/tools/simdstring"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ = fmt.Print
|
var _ = fmt.Print
|
||||||
@@ -68,13 +70,16 @@ func read_input(input_file *os.File, input_file_name string, input_channel chan<
|
|||||||
|
|
||||||
if count_carriage_returns {
|
if count_carriage_returns {
|
||||||
process_chunk = func(chunk []byte) {
|
process_chunk = func(chunk []byte) {
|
||||||
for _, ch := range chunk {
|
for len(chunk) > 0 {
|
||||||
switch ch {
|
idx := simdstring.UnsafeIndexByte2(chunk, '\n', '\r')
|
||||||
|
if idx == -1 {
|
||||||
|
_, _ = output_buf.Write(chunk)
|
||||||
|
chunk = nil
|
||||||
|
}
|
||||||
|
switch chunk[idx] {
|
||||||
case '\r':
|
case '\r':
|
||||||
num_carriage_returns += 1
|
num_carriage_returns += 1
|
||||||
default:
|
default:
|
||||||
_ = output_buf.WriteByte(ch)
|
|
||||||
case '\n':
|
|
||||||
input_channel <- input_line_struct{line: output_buf.String(), num_carriage_returns: num_carriage_returns, is_a_complete_line: true}
|
input_channel <- input_line_struct{line: output_buf.String(), num_carriage_returns: num_carriage_returns, is_a_complete_line: true}
|
||||||
num_carriage_returns = 0
|
num_carriage_returns = 0
|
||||||
output_buf.Reset()
|
output_buf.Reset()
|
||||||
|
|||||||
Reference in New Issue
Block a user