@@ -24,6 +24,7 @@ func NewBuffer(size int) *Buffer {
2424 if size < 0 {
2525 size = 0
2626 }
27+
2728 return & Buffer {
2829 buf : make ([]byte , 0 , size ),
2930 pos : 0 ,
@@ -33,12 +34,12 @@ func NewBuffer(size int) *Buffer {
3334const maxSize = 100000
3435
3536func (v * Buffer ) Reset () {
36- l := len (v .buf )
37- if l > maxSize {
37+ if len (v .buf ) > maxSize {
3838 v .buf = v .buf [:0 :maxSize ]
3939 } else {
4040 v .buf = v .buf [:0 ]
4141 }
42+
4243 v .pos = 0
4344}
4445
@@ -62,6 +63,7 @@ func (v *Buffer) Truncate(c int) {
6263 if c <= 0 {
6364 return
6465 }
66+
6567 n := v .Size () - c
6668 if n <= 0 {
6769 v .Reset ()
@@ -89,6 +91,7 @@ func (v *Buffer) Truncate(c int) {
8991
9092func (v * Buffer ) Write (p []byte ) (int , error ) {
9193 v .buf = append (v .buf , p ... )
94+
9295 return len (p ), nil
9396}
9497
@@ -98,13 +101,15 @@ func (v *Buffer) WriteString(s string) (int, error) {
98101
99102func (v * Buffer ) WriteByte (b byte ) error {
100103 v .buf = append (v .buf , b )
104+
101105 return nil
102106}
103107
104108func (v * Buffer ) WriteRune (r rune ) (n int , err error ) {
105109 n = v .Size ()
106110 v .buf = utf8 .AppendRune (v .buf , r )
107111 n = v .Size () - n
112+
108113 return
109114}
110115
@@ -114,7 +119,7 @@ func (v *Buffer) WriteTo(w io.Writer) (n int64, err error) {
114119
115120func (v * Buffer ) WriteToN (w io.Writer , size int ) (n int64 , err error ) {
116121 if v .Len () <= 0 {
117- return 0 , io . EOF
122+ return 0 , nil
118123 }
119124
120125 b := make ([]byte , size )
@@ -128,17 +133,21 @@ func (v *Buffer) WriteToN(w io.Writer, size int) (n int64, err error) {
128133 err = fmt .Errorf ("invalid write result" )
129134 break
130135 }
136+
131137 if wn != rn {
132138 v .Seek (int64 (- rn + wn ), SeekCurr ) //nolint: errcheck
133139 }
140+
134141 n += int64 (wn )
142+
135143 if we != nil {
136144 if ! errors .Is (we , io .EOF ) {
137145 err = we
138146 }
139147 break
140148 }
141149 }
150+
142151 if re != nil {
143152 if ! errors .Is (re , io .EOF ) {
144153 err = re
@@ -171,104 +180,125 @@ func (v *Buffer) ReadFrom(r io.Reader) (int64, error) {
171180func (v * Buffer ) ReadFromN (r io.Reader , size int ) (int64 , error ) {
172181 n := 0
173182 b := make ([]byte , size )
183+
174184 for {
175185 m , err := r .Read (b )
176186 if m < 0 {
177187 return 0 , fmt .Errorf ("negative read bytes" )
178188 }
189+
179190 if err != nil && ! errors .Is (err , io .EOF ) {
180191 return 0 , err
181192 }
193+
182194 n += m
195+
183196 v .buf = append (v .buf , b [:m ]... )
184197 if m < size || errors .Is (err , io .EOF ) {
185198 break
186199 }
187200 }
201+
188202 return int64 (n ), nil
189203}
190204
191205func (v * Buffer ) Read (p []byte ) (int , error ) {
192206 if len (p ) == 0 {
193- return 0 , fmt .Errorf ("got zero buffer arg " )
207+ return 0 , fmt .Errorf ("got zero buffer" )
194208 }
209+
195210 if v .Len () == 0 {
196211 return 0 , io .EOF
197212 }
213+
198214 n := copy (p [:], v .buf [v .pos :])
199215 v .pos += n
200216 return n , nil
201217}
202218
203219func (v * Buffer ) ReadAt (p []byte , off int64 ) (int , error ) {
204220 if len (p ) == 0 {
205- return 0 , fmt .Errorf ("got zero buffer arg " )
221+ return 0 , fmt .Errorf ("got zero buffer" )
206222 }
223+
207224 if off < 0 || int (off ) >= v .Size () {
208225 return 0 , io .EOF
209226 }
227+
210228 n := copy (p [:], v .buf [int (off ):])
229+
211230 return n , nil
212231}
213232
214233func (v * Buffer ) Discard (n int ) int {
215234 if n <= 0 {
216235 return 0
217236 }
237+
218238 np , _ := v .Seek (int64 (n ), SeekCurr ) //nolint: errcheck
239+
219240 return int (np )
220241}
221242
222243func (v * Buffer ) Resume (n int ) int {
223244 if n <= 0 {
224245 return 0
225246 }
247+
226248 np , _ := v .Seek (- int64 (n ), SeekCurr ) //nolint: errcheck
249+
227250 return int (np )
228251}
229252
230253func (v * Buffer ) Next (n int ) []byte {
231254 if n <= 0 {
232255 return nil
233256 }
257+
234258 m := v .Len ()
235259 if m == 0 {
236260 return nil
237261 }
262+
238263 if n > m {
239264 n = m
240265 }
266+
241267 b := make ([]byte , n )
242268 v .pos += copy (b [:], v .buf [v .pos :])
269+
243270 return b
244271}
245272
246273func (v * Buffer ) ReadByte () (byte , error ) {
247- m := v .Len ()
248- if m == 0 {
274+ if v .Len () == 0 {
249275 return 0 , io .EOF
250276 }
277+
251278 b := v .buf [v .pos ]
252279 v .pos ++
280+
253281 return b , nil
254282}
255283
256284func (v * Buffer ) UnreadByte () error {
257285 if v .pos <= 0 {
258286 return fmt .Errorf ("at beginning" )
259287 }
288+
260289 v .pos --
290+
261291 return nil
262292}
263293
264294func (v * Buffer ) ReadRune () (rune , int , error ) {
265- m := v .Len ()
266- if m == 0 {
295+ if v .Len () == 0 {
267296 return 0 , 0 , io .EOF
268297 }
269298
270299 r , n := utf8 .DecodeRune (v .buf [v .pos :])
271300 v .pos += n
301+
272302 return r , n , nil
273303}
274304
@@ -293,31 +323,37 @@ func (v *Buffer) UnreadRune() error {
293323}
294324
295325func (v * Buffer ) ReadBytes (delim byte ) ([]byte , error ) {
296- m := v .Len ()
297- if m == 0 {
326+ if v .Len () == 0 {
298327 return nil , io .EOF
299328 }
329+
300330 i := bytes .IndexByte (v .buf [v .pos :], delim )
301331 end := v .pos + i + 1
302332 if i < 0 {
303333 end = v .Size ()
304334 }
335+
305336 b := v .buf [v .pos :end ]
306337 v .pos = end
338+
307339 return b , nil
308340}
309341
310342func (v * Buffer ) ReadNextBytes (delim []byte ) ([]byte , error ) {
311343 if v .Len () == 0 {
312344 return nil , io .EOF
313345 }
346+
314347 i := bytes .Index (v .buf [v .pos :], delim )
315348 end := v .pos + i + len (delim )
349+
316350 if i < 0 {
317351 end = v .Size ()
318352 }
353+
319354 b := v .buf [v .pos :end ]
320355 v .pos = end
356+
321357 return b , nil
322358}
323359
@@ -367,6 +403,7 @@ func (v *Buffer) ReadString(delim byte) (string, error) {
367403 if err != nil {
368404 return "" , err
369405 }
406+
370407 return string (b ), nil
371408}
372409
@@ -375,6 +412,7 @@ func (v *Buffer) ReadNextString(delim string) (string, error) {
375412 if err != nil {
376413 return "" , err
377414 }
415+
378416 return string (b ), nil
379417}
380418
@@ -395,10 +433,12 @@ func (v *Buffer) Seek(offset int64, whence int) (int64, error) {
395433 default :
396434 return 0 , fmt .Errorf ("invalid whence" )
397435 }
436+
398437 if v .pos < 0 {
399438 v .pos = 0
400439 } else if v .pos > v .Size () {
401440 v .pos = v .Size ()
402441 }
442+
403443 return int64 (v .pos ), nil
404444}
0 commit comments