]> git.decadent.org.uk Git - dak.git/blobdiff - tools/dsync-0.0/libdsync/rsync-algo.h
Added another tool used in dak (and placed nowhere else), dsync
[dak.git] / tools / dsync-0.0 / libdsync / rsync-algo.h
diff --git a/tools/dsync-0.0/libdsync/rsync-algo.h b/tools/dsync-0.0/libdsync/rsync-algo.h
new file mode 100644 (file)
index 0000000..1a9711d
--- /dev/null
@@ -0,0 +1,59 @@
+// -*- mode: cpp; mode: fold -*-
+// Description                                                         /*{{{*/
+// $Id: rsync-algo.h,v 1.3 1999/12/26 06:59:01 jgg Exp $
+/* ######################################################################
+   
+   RSync Algorithrim
+   
+   The RSync algorithim is attributed to Andrew Tridgell and is a means
+   for matching blocks between two streams.  The algorithrim implemented 
+   here differs slightly in its structure and is carefully optimized to be 
+   able to operate on very large files effectively.
+
+   We rely on the RSync rolling weak checksum routine and the MD4 strong 
+   checksum routine. This implementation requires a uniform block size 
+   for each run.
+   
+   ##################################################################### */
+                                                                       /*}}}*/
+#ifndef DSYNC_RSYNC_ALGO_H
+#define DSYNC_RSYNC_ALGO_H
+
+#ifdef __GNUG__
+#pragma interface "dsync/rsync-algo.h"
+#endif 
+
+#include <dsync/fileutl.h>
+#include <dsync/filelist.h>
+#include <dsync/bitmap.h>
+
+#include <inttypes.h>
+
+class RSyncMatch
+{
+   uint32_t **Indexes;
+   uint32_t **IndexesEnd;
+   uint32_t **Hashes[257];
+   BitmapVector Fast;
+   dsFList::RSyncChecksum const &Ck;
+
+   static int Sort(const void *L,const void *R);
+   
+   protected:
+   
+   virtual bool Hit(unsigned long Block,off_t SrcOff,
+                   const unsigned char *Data) {return true;};
+   
+   public:
+
+   bool Scan(FileFd &Fd);
+      
+   RSyncMatch(dsFList::RSyncChecksum const &Ck);
+   virtual ~RSyncMatch();
+};
+
+bool GenerateRSync(FileFd &Fd,dsFList::RSyncChecksum &Ck,
+                  unsigned char MD5[16],
+                  unsigned long BlockSize = 8*1024);
+
+#endif