Skip to content

Commit

Permalink
Write plain text in chunks
Browse files Browse the repository at this point in the history
Instead of writing each byte alone to the console, always write the
full plain text up to the next escape sequence or until the write
is finished.
Doing so means more copying around of bytes, but improves write
performance significantly.
  • Loading branch information
secDre4mer committed Jan 26, 2021
1 parent f6c0098 commit ab7ccd9
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 6 deletions.
7 changes: 4 additions & 3 deletions colorable_windows.go
Expand Up @@ -452,18 +452,19 @@ func (w *Writer) Write(data []byte) (n int, err error) {
} else {
er = bytes.NewReader(data)
}
var bw [1]byte
var plaintext bytes.Buffer
loop:
for {
c1, err := er.ReadByte()
if err != nil {
plaintext.WriteTo(w.out)
break loop
}
if c1 != 0x1b {
bw[0] = c1
w.out.Write(bw[:])
plaintext.WriteByte(c1)
continue
}
plaintext.WriteTo(w.out)
c2, err := er.ReadByte()
if err != nil {
break loop
Expand Down
7 changes: 4 additions & 3 deletions noncolorable.go
Expand Up @@ -18,18 +18,19 @@ func NewNonColorable(w io.Writer) io.Writer {
// Write writes data on console
func (w *NonColorable) Write(data []byte) (n int, err error) {
er := bytes.NewReader(data)
var bw [1]byte
var plaintext bytes.Buffer
loop:
for {
c1, err := er.ReadByte()
if err != nil {
plaintext.WriteTo(w.out)
break loop
}
if c1 != 0x1b {
bw[0] = c1
w.out.Write(bw[:])
plaintext.WriteByte(c1)
continue
}
plaintext.WriteTo(w.out)
c2, err := er.ReadByte()
if err != nil {
break loop
Expand Down

0 comments on commit ab7ccd9

Please sign in to comment.