mirror of
https://github.com/impact-eintr/netstack.git
synced 2025-10-05 12:56:55 +08:00
34 lines
660 B
Go
34 lines
660 B
Go
package buffer
|
|
|
|
// prependable 可预先考虑分配的
|
|
type Prependable struct {
|
|
buf View
|
|
|
|
usedIdx int
|
|
}
|
|
|
|
func NewPrependable(size int) Prependable {
|
|
return Prependable{buf: NewView(size), usedIdx: size}
|
|
}
|
|
|
|
func NewPrependableFromView(v View) Prependable {
|
|
return Prependable{buf: v, usedIdx: 0}
|
|
}
|
|
|
|
func (p Prependable) View() View {
|
|
return p.buf[p.usedIdx:]
|
|
}
|
|
|
|
func (p Prependable) UsedLength() int {
|
|
return len(p.buf) - p.usedIdx
|
|
}
|
|
|
|
// 从内到外取出报文头的协议
|
|
func (p *Prependable) Prepend(size int) []byte {
|
|
if size > p.usedIdx {
|
|
return nil
|
|
}
|
|
p.usedIdx -= size
|
|
return p.View()[:size:size] // p.buf[p.usedIdx:p.usedIdx+size:size]
|
|
}
|