zbytes.go 1.21 KB
Newer Older
Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
1
2
3
4
package zbytes

import (
	"bytes"
Vladimir Barsukov's avatar
Vladimir Barsukov committed
5
	"fmt"
Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
6
7
8
	"sync"
)

Vladimir Barsukov's avatar
fix    
Vladimir Barsukov committed
9
type Buffer struct {
Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
10
11
12
13
	Buff *bytes.Buffer
	Mu   *sync.Mutex
}

Vladimir Barsukov's avatar
fix    
Vladimir Barsukov committed
14
15
func NewBuffer() *Buffer {
	return &Buffer{
Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
16
17
18
19
20
		Buff: bytes.NewBuffer(nil),
		Mu:   new(sync.Mutex),
	}
}

Vladimir Barsukov's avatar
fix    
Vladimir Barsukov committed
21
func (z *Buffer) Write(p []byte) (n int, err error) {
Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
22
23
	z.Mu.Lock()
	defer z.Mu.Unlock()
Vladimir Barsukov's avatar
fix    
Vladimir Barsukov committed
24

Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
25
26
	return z.Buff.Write(p)
}
Vladimir Barsukov's avatar
fix    
Vladimir Barsukov committed
27
func (z *Buffer) WriteRune(r rune) (n int, err error) {
Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
28
29
	z.Mu.Lock()
	defer z.Mu.Unlock()
Vladimir Barsukov's avatar
fix    
Vladimir Barsukov committed
30

Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
31
32
	return z.Buff.WriteRune(r)
}
Vladimir Barsukov's avatar
fix    
Vladimir Barsukov committed
33
func (z *Buffer) WriteByte(c byte) error {
Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
34
	z.Mu.Lock()
Vladimir Barsukov's avatar
fix    
Vladimir Barsukov committed
35
36
	defer z.Mu.Unlock()

Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
37
38
	return z.Buff.WriteByte(c)
}
Vladimir Barsukov's avatar
fix    
Vladimir Barsukov committed
39
func (z *Buffer) WriteString(s string) (n int, err error) {
Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
40
41
	z.Mu.Lock()
	defer z.Mu.Unlock()
Vladimir Barsukov's avatar
fix    
Vladimir Barsukov committed
42

Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
43
44
	return z.Buff.WriteString(s)
}
Vladimir Barsukov's avatar
Vladimir Barsukov committed
45
46
47
func (z *Buffer) WriteAny(a any) (n int, err error) {
	return z.WriteString(fmt.Sprintf("%v", a))
}
Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
48

Vladimir Barsukov's avatar
fix    
Vladimir Barsukov committed
49
func (z *Buffer) Bytes() []byte {
Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
50
51
	z.Mu.Lock()
	defer z.Mu.Unlock()
Vladimir Barsukov's avatar
fix    
Vladimir Barsukov committed
52

Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
53
54
	return z.Buff.Bytes()
}
Vladimir Barsukov's avatar
fix    
Vladimir Barsukov committed
55
func (z *Buffer) String() string {
Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
56
57
	z.Mu.Lock()
	defer z.Mu.Unlock()
Vladimir Barsukov's avatar
fix    
Vladimir Barsukov committed
58

Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
59
60
	return z.Buff.String()
}
Vladimir Barsukov's avatar
fix    
Vladimir Barsukov committed
61
func (z *Buffer) Reset() {
Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
62
63
	z.Mu.Lock()
	defer z.Mu.Unlock()
Vladimir Barsukov's avatar
fix    
Vladimir Barsukov committed
64

Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
65
66
	z.Buff.Reset()
}
Vladimir Barsukov's avatar
fix    
Vladimir Barsukov committed
67
func (z *Buffer) Len() int {
Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
68
69
	z.Mu.Lock()
	defer z.Mu.Unlock()
Vladimir Barsukov's avatar
fix    
Vladimir Barsukov committed
70

Vladimir Barsukov's avatar
zbytes  
Vladimir Barsukov committed
71
72
	return z.Buff.Len()
}
Vladimir Barsukov's avatar
Vladimir Barsukov committed
73
74
75
76
77
78
79

func (z *Buffer) Lock() {
	z.Mu.Lock()
}
func (z *Buffer) Unlock() {
	z.Mu.Unlock()
}