首页 > 其他 > 详细

Golang rsync

时间:2015-09-04 02:20:10      阅读:601      评论:0      收藏:0      [点我收藏+]

?

//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
}

Golang rsync

原文:http://my.oschina.net/u/612750/blog/501015

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!