文档章节

Golang rsync

shengjuntu
 shengjuntu
发布于 2015/09/04 00:56
字数 289
阅读 371
收藏 3


//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 export symbol
下一篇: Golang http ABC
shengjuntu
粉丝 14
博文 87
码字总数 17069
作品 0
上海
程序员
私信 提问
goimport错误解决

错误信息: imports golang.org/x/tools/go/vcs: unrecognized import path "golang.org/x/tools/go/vcs" 原因: 国内无法访问到golang.org/x/tools/go/vcs这个地址 解决办法一: 将https:/......

tantexian
2016/08/06
73
0
Go在酷狗数据库中间件的应用

作者:刘延允 本次分享主要围绕Go在数据库中间件应用这方面展开;首先会聊一下程序开发的需求,具体会参考Go的特性是否满足这些需求;接下来会介绍一下近期采用Go语言开发的mysql中间件这个项...

小数点
2017/12/08
0
0
Ngrok内网穿透服务搭建

> 第一次发个博客好激动啊,总之(@¥%#¥%¥#@……#¥……%@#%¥&%……&¥%……!#¥#%%¥@……%¥&%……*@#%@!#¥@!¥#!¥#!……此处省略99999字)对你们深深的思念。好了,废话不多说...

chen松灿
2017/12/25
0
0
CentOS6.8使用Rsync+Inotify-tools实现数据实时同步

说明: 操作系统:CentOS release 6.8 (Final) x86_64 服务器IP:rsync_server(数据源) 10.15.43.100 rsync_client (目标端)10.15.43.228 同步目录: rsyncserver /app/rsyncserver rsy......

justin_peng
2017/07/27
0
0
rsync安装部署

一、rsync服务端配置 1、vi /etc/rsyncd.conf 加入配置文件 #Rsync server #created by argen 9:49 2017-6-5 ##rsyncd.conf start## uid = rsync gid = rsync use chroot = no max connecti......

argen2020
2017/09/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

编程作业20190210900169

1编写一个程序,提示用户输入名和姓,然后以“名,姓”的格式打印出来。 #include <stdio.h>#include <stdlib.h> int main(){ char firstName[20]; char lastName[20]; print......

1李嘉焘1
21分钟前
4
0
补码的优点及原理分析

只讨论整数 1.计算机内部为什么没有减法器? 减法运算本身其实就是加法,如x - y即x +(-y),所以只需要将负数成功表示出来并可以参加加法运算,那加法器就可同时实现“+”和“-”的运算。这...

清自以敬
37分钟前
63
0
Docker 可视化管理 portainer

官网安装指南: https://portainer.readthedocs.io/en/latest/deployment.html docker-compose.yml 位置,下载地址:https://downloads.portainer.io/docker-compose.yml...

Moks角木
今天
5
0
Spring Security 实战干货:必须掌握的一些内置 Filter

1. 前言 上一文我们使用 Spring Security 实现了各种登录聚合的场面。其中我们是通过在 UsernamePasswordAuthenticationFilter 之前一个自定义的过滤器实现的。我怎么知道自定义过滤器要加在...

码农小胖哥
今天
8
0
常见分布式事务解决方案

1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务,这样可以降低开发难度、增强扩展性、便于敏捷开发。当前被越来越多的开发者推崇,很多互联网行业巨头、开源...

asdf08442a
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部