Исходники и презентации
This commit is contained in:
53
lessons/strings/string_builder_implementation/main.go
Normal file
53
lessons/strings/string_builder_implementation/main.go
Normal file
@ -0,0 +1,53 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
type Builder struct {
|
||||
buffer []byte
|
||||
}
|
||||
|
||||
func NewBuilder() Builder {
|
||||
return Builder{}
|
||||
}
|
||||
|
||||
func (b *Builder) Grow(capacity int) {
|
||||
if capacity < 0 {
|
||||
return
|
||||
}
|
||||
|
||||
if capacity < len(b.buffer) {
|
||||
b.buffer = b.buffer[:capacity]
|
||||
return
|
||||
}
|
||||
|
||||
buffer := make([]byte, len(b.buffer), capacity)
|
||||
copy(buffer, b.buffer)
|
||||
b.buffer = buffer
|
||||
}
|
||||
|
||||
func (b *Builder) Write(symbol byte) {
|
||||
b.buffer = append(b.buffer, symbol)
|
||||
}
|
||||
|
||||
func (b *Builder) At(index int) *byte {
|
||||
if index < 0 || index >= len(b.buffer) {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &b.buffer[index]
|
||||
}
|
||||
|
||||
func (b *Builder) String() string {
|
||||
return string(b.buffer)
|
||||
}
|
||||
|
||||
func main() {
|
||||
builder := NewBuilder()
|
||||
builder.Grow(3)
|
||||
|
||||
builder.Write('a')
|
||||
builder.Write('b')
|
||||
builder.Write('c')
|
||||
|
||||
fmt.Println(builder.String())
|
||||
}
|
||||
Reference in New Issue
Block a user