64 Star 391 Fork 127

admpub/nging

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
writer.go 1.33 KB
一键复制 编辑 原始数据 按行查看 历史
admpub 提交于 2017-04-08 14:25 . 完善计划任务。
package cron
import "bytes"
var dot6bytes = []byte("\n" + `......` + "\n")
func NewCmdRec(max uint64) *cmdRec {
return &cmdRec{
buf: new(bytes.Buffer),
max: max / 2,
last: []byte{},
}
}
type cmdRec struct {
buf *bytes.Buffer
max uint64
start uint64
end uint64
last []byte
}
func (c *cmdRec) Write(p []byte) (n int, err error) {
if c.start < c.max {
n, err = c.buf.Write(p)
c.start += uint64(n)
return
}
n = len(p)
size := uint64(n)
if c.end > c.max {
if c.max > size {
c.last = append(c.last[0:c.max-size], p...)
} else if c.max == size {
c.last = p
} else {
start := size - c.max
c.last = p[start:]
}
c.end = uint64(len(c.last))
return
}
c.end += size
c.last = append(c.last, p...)
return
}
// String returns the contents of the unread portion of the buffer
// as a string. If the Buffer is a nil pointer, it returns "<nil>".
func (c *cmdRec) String() string {
if c.buf == nil {
// Special case, useful in debugging.
return string(c.last)
}
s := c.buf.String()
if len(s) > 0 && len(c.last) > 0 {
s += "\n" + `......` + "\n" + string(c.last)
}
return s
}
func (c *cmdRec) Bytes() []byte {
if c.buf == nil {
// Special case, useful in debugging.
return c.last
}
b := c.buf.Bytes()
if len(b) > 0 && len(c.last) > 0 {
b = append(b, dot6bytes...)
}
return append(b, c.last...)
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/admpub/nging.git
git@gitee.com:admpub/nging.git
admpub
nging
nging
v1.3.0

搜索帮助