Golang rsync

shengjuntu · · 3800 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。


//ref:
//http://www.ieyebrain.com:8080/pts/src/rsync/
type Rollsum struct {
	a, b  uint16
	Xk byte 
	count int
}

func New(count int) *Rollsum {
	return &Rollsum{
		a:0,
		b:0,
		count: count}
}

func (r *Rollsum) Init(a uint16, b uint16, xk uint8) {
	r.a = a
	r.b = b
	r.Xk = xk
}

func (r *Rollsum) InitByBuf(buf []byte) {
	r.a,r.b = calc_weaksum(buf)
	r.Xk = buf[0]
}

func (r *Rollsum) Update(Xk_1 byte, Xl_one byte) {
	var a,b  int

	a , b = int(r.a),int(r.b)
	a = a - int(r.Xk) + int(Xl_one)
	b = a + b  - r.count * int(r.Xk)
	r.Xk = Xk_1

	r.a = uint16(a)
	r.b = uint16(b)
}

func (r *Rollsum) GetValues() (uint16,uint16) {
	return r.a,r.b
}

type Weaksum struct {
	a,b uint16
}

func  calc_weaksum(buf []byte) (uint16, uint16)  {
	var a,b,c int;

	i := 0
	len := len(buf)

	a,b = 0,0
	
	for len > 0  {
		c = int(buf[i])
		a = a + c 
		b = b + (len * c) 
		len--
		i++
	}
	//return Weaksum{a:uint16(a),b:uint16(b)}
	return uint16(a), uint16(b)
}

func calc_strongsum(buf []byte) ([]byte) {
	ctx := md4.New()
	ctx.Write(buf)
	return ctx.Sum(nil)
}
package rsync 


type Rollsum struct {
	a, b  uint16
	Xk byte 
	count int
}

func New(count int) *Rollsum {
	return &Rollsum{
		a:0,
		b:0,
		count: count}
}

func (r *Rollsum) Init(a uint16, b uint16, xk uint8) {
	r.a = a
	r.b = b
	r.Xk = xk
}

func (r *Rollsum) InitByBuf(buf []byte) {
	r.a,r.b = calc_weaksum(buf)
	r.Xk = buf[0]
}

func (r *Rollsum) Update(Xk_1 byte, Xl_one byte) {
	var a,b  int

	a , b = int(r.a),int(r.b)
	a = a - int(r.Xk) + int(Xl_one)
	b = a + b  - r.count * int(r.Xk)
	r.Xk = Xk_1

	r.a = uint16(a)
	r.b = uint16(b)
}

func (r *Rollsum) GetValues() (uint16,uint16) {
	return r.a,r.b
}

有疑问加站长微信联系(非本文作者)

本文来自:开源中国博客

感谢作者:shengjuntu

查看原文:Golang rsync

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3800 次点击  
加入收藏 微博
0 回复
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传