From 9b787b749b7f50494f7dfb0af032e8fb45fac0b3 Mon Sep 17 00:00:00 2001 From: Gregory Eremin Date: Wed, 18 Feb 2015 20:26:13 +0700 Subject: [PATCH] Simpla data buffer --- buffer/data.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 buffer/data.go diff --git a/buffer/data.go b/buffer/data.go new file mode 100644 index 0000000..d408b75 --- /dev/null +++ b/buffer/data.go @@ -0,0 +1,34 @@ +package buffer + +import ( + "bytes" + "unicode/utf8" +) + +type ( + DataBuffer struct { + input []byte + size uint64 + pos uint64 + } +) + +func NewDataBuffer(input []byte) *DataBuffer { + return &DataBuffer{ + input: input, + size: uint64(len(input)), + } +} + +func (b *DataBuffer) Next() rune { + var buf bytes.Buffer + for b.pos < b.size-1 { + buf.WriteByte(b.input[b.pos]) + b.pos++ + if ok := utf8.FullRune(buf.Bytes()); ok { + r, _ := utf8.DecodeRune(buf.Bytes()) + return r + } + } + return 0 +}