Created
September 25, 2022 14:34
-
-
Save karuna/de787fe576cdf45d0081b50b5704bf8f to your computer and use it in GitHub Desktop.
debugging parser.go
This file contains hidden or 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 main | |
import ( | |
"fmt" | |
"io" | |
"strings" | |
"time" | |
) | |
const ( | |
defaultBufSize = 32 | |
) | |
type parser struct { | |
//buffer is a slice of bigBuffer | |
bigBuffer, buffer []byte | |
reader io.Reader | |
lastRead time.Time | |
} | |
func newParser(reader io.Reader) *parser { | |
return &parser{reader: reader} | |
} | |
func (p *parser) readMore() (int, error) { | |
if len(p.buffer) == cap(p.buffer) { | |
var newBuffer []byte | |
switch { | |
//initialize the parser | |
case len(p.bigBuffer) == 0: | |
fmt.Println("------------------------ 0") | |
fmt.Println(p.bigBuffer) | |
fmt.Println(p.buffer) | |
p.bigBuffer = make([]byte, defaultBufSize) | |
newBuffer = p.bigBuffer[0:0] | |
//shift buffer back to the start of bigBuffer | |
case 2*len(p.buffer) <= len(p.bigBuffer): | |
fmt.Println("------------------------ 1") | |
fmt.Println(p.bigBuffer) | |
fmt.Println(p.buffer) | |
newBuffer = p.bigBuffer[0:len(p.buffer)] | |
//reallocate big buffer with enough space to shift buffer | |
default: | |
fmt.Println("------------------------ 3") | |
fmt.Println(p.bigBuffer) | |
fmt.Println(p.buffer) | |
p.bigBuffer = make([]byte, 2*len(p.buffer)) | |
newBuffer = p.bigBuffer[0:len(p.buffer)] | |
} | |
copy(newBuffer, p.buffer) | |
fmt.Println("------------------------ 4") | |
fmt.Println(p.bigBuffer) | |
fmt.Println(p.buffer) | |
p.buffer = newBuffer | |
fmt.Println("------------------------ 5") | |
fmt.Println(p.bigBuffer) | |
fmt.Println(p.buffer) | |
} | |
n, e := p.reader.Read(p.buffer[len(p.buffer):cap(p.buffer)]) | |
p.lastRead = time.Now() | |
p.buffer = p.buffer[:len(p.buffer)+n] | |
return n, e | |
} | |
func main() { | |
reader := strings.NewReader("Hello, Reader! 123456789abcdefghijklmnopqrstuABCDEFGHIJKLMNOPQRSTUVWXYZ") | |
parser := newParser(reader) | |
var newBuffer []byte | |
parser.bigBuffer = make([]byte, defaultBufSize) | |
newBuffer = parser.bigBuffer[0:0] | |
fmt.Println("------------------------ 0") | |
fmt.Println(parser.bigBuffer) | |
fmt.Println(parser.buffer) | |
fmt.Println(string(parser.bigBuffer)) | |
fmt.Println(string(parser.buffer)) | |
copy(newBuffer, parser.buffer) | |
fmt.Println("------------------------ 1") | |
fmt.Println(parser.bigBuffer) | |
fmt.Println(parser.buffer) | |
fmt.Println(string(parser.bigBuffer)) | |
fmt.Println(string(parser.buffer)) | |
parser.buffer = newBuffer | |
fmt.Println("------------------------ 2") | |
fmt.Println(parser.bigBuffer) | |
fmt.Println(parser.buffer) | |
fmt.Println(string(parser.bigBuffer)) | |
fmt.Println(string(parser.buffer)) | |
n, _ := parser.reader.Read(parser.buffer[len(parser.buffer):cap(parser.buffer)]) | |
fmt.Println("------------------------ 3") | |
fmt.Println(n) | |
fmt.Println(parser.bigBuffer) | |
fmt.Println(parser.buffer) | |
fmt.Println(string(parser.bigBuffer)) | |
fmt.Println(string(parser.buffer)) | |
parser.lastRead = time.Now() | |
parser.buffer = parser.buffer[:len(parser.buffer)+n] | |
// ------------------------------------------------------------------- | |
newBuffer = parser.bigBuffer[0:len(parser.buffer)] | |
fmt.Println("------------------------ 4") | |
fmt.Println(parser.bigBuffer) | |
fmt.Println(parser.buffer) | |
fmt.Println(string(parser.bigBuffer)) | |
fmt.Println(string(parser.buffer)) | |
copy(newBuffer, parser.buffer) | |
fmt.Println("------------------------ 5") | |
fmt.Println(parser.bigBuffer) | |
fmt.Println(parser.buffer) | |
fmt.Println(string(parser.bigBuffer)) | |
fmt.Println(string(parser.buffer)) | |
parser.buffer = newBuffer | |
fmt.Println("------------------------ 6") | |
fmt.Println(parser.bigBuffer) | |
fmt.Println(parser.buffer) | |
fmt.Println(string(parser.bigBuffer)) | |
fmt.Println(string(parser.buffer)) | |
n, _ = parser.reader.Read(parser.buffer[len(parser.buffer):cap(parser.buffer)]) | |
fmt.Println("------------------------ 7") | |
fmt.Println(n) | |
fmt.Println(parser.bigBuffer) | |
fmt.Println(parser.buffer) | |
fmt.Println(string(parser.bigBuffer)) | |
fmt.Println(string(parser.buffer)) | |
parser.lastRead = time.Now() | |
parser.buffer = parser.buffer[:len(parser.buffer)+n] | |
// ------------------------------------------------------------------- | |
parser.bigBuffer = make([]byte, 2*len(parser.buffer)) | |
newBuffer = parser.bigBuffer[0:len(parser.buffer)] | |
fmt.Println("------------------------ 8") | |
fmt.Println(parser.bigBuffer) | |
fmt.Println(parser.buffer) | |
fmt.Println(string(parser.bigBuffer)) | |
fmt.Println(string(parser.buffer)) | |
copy(newBuffer, parser.buffer) | |
fmt.Println("------------------------ 9") | |
fmt.Println(parser.bigBuffer) | |
fmt.Println(parser.buffer) | |
fmt.Println(string(parser.bigBuffer)) | |
fmt.Println(string(parser.buffer)) | |
parser.buffer = newBuffer | |
fmt.Println("------------------------ 10") | |
fmt.Println(parser.bigBuffer) | |
fmt.Println(parser.buffer) | |
fmt.Println(string(parser.bigBuffer)) | |
fmt.Println(string(parser.buffer)) | |
n, _ = parser.reader.Read(parser.buffer[len(parser.buffer):cap(parser.buffer)]) | |
fmt.Println("------------------------ 11") | |
fmt.Println(n) | |
fmt.Println(parser.bigBuffer) | |
fmt.Println(parser.buffer) | |
fmt.Println(string(parser.bigBuffer)) | |
fmt.Println(string(parser.buffer)) | |
parser.lastRead = time.Now() | |
parser.buffer = parser.buffer[:len(parser.buffer)+n] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment