Created
November 13, 2017 22:47
-
-
Save mjs/bc3219a79d4e4a1d7848c5aaa12b3c40 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package b | |
import ( | |
"bytes" | |
"testing" | |
) | |
var needsEscape = []byte(`foo\ bar\"sne`) | |
func BenchmarkOrig(b *testing.B) { | |
for i := 0; i < b.N; i++ { | |
_ = Unescape(needsEscape) | |
} | |
} | |
func BenchmarkNew(b *testing.B) { | |
for i := 0; i < b.N; i++ { | |
_ = UnescapeNew(needsEscape) | |
} | |
} | |
func Unescape(in []byte) []byte { | |
if len(in) == 0 { | |
return nil | |
} | |
if bytes.IndexByte(in, '\\') == -1 { | |
return in | |
} | |
i := 0 | |
inLen := len(in) | |
var out []byte | |
for { | |
if i >= inLen { | |
break | |
} | |
if in[i] == '\\' && i+1 < inLen { | |
switch in[i+1] { | |
case ',': | |
out = append(out, ',') | |
i += 2 | |
continue | |
case '"': | |
out = append(out, '"') | |
i += 2 | |
continue | |
case ' ': | |
out = append(out, ' ') | |
i += 2 | |
continue | |
case '=': | |
out = append(out, '=') | |
i += 2 | |
continue | |
} | |
} | |
out = append(out, in[i]) | |
i += 1 | |
} | |
return out | |
} | |
func UnescapeNew(in []byte) []byte { | |
if len(in) == 0 { | |
return nil | |
} | |
if bytes.IndexByte(in, '\\') == -1 { | |
return in | |
} | |
i := 0 | |
inLen := len(in) | |
out := make([]byte, 0, inLen) | |
for { | |
if i >= inLen { | |
break | |
} | |
if in[i] == '\\' && i+1 < inLen { | |
switch in[i+1] { | |
case ',': | |
out = append(out, ',') | |
i += 2 | |
continue | |
case '"': | |
out = append(out, '"') | |
i += 2 | |
continue | |
case ' ': | |
out = append(out, ' ') | |
i += 2 | |
continue | |
case '=': | |
out = append(out, '=') | |
i += 2 | |
continue | |
} | |
} | |
out = append(out, in[i]) | |
i += 1 | |
} | |
return out | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment