]> mj.ucw.cz Git - libucw.git/blobdiff - lib/lizard.h
added adler32 functions
[libucw.git] / lib / lizard.h
index 656aab8dac3ec864a9ab022073430b0eb7ab6c6f..838d683f7849f30de68f797a467a676fc491f672 100644 (file)
@@ -1,16 +1,43 @@
 /*
- *     LiZzaRd -- Fast compression method based on Lempel-Ziv 77
+ *     LiZaRd -- Fast compression method based on Lempel-Ziv 77
  *
  *     (c) 2004, Robert Spalek <robert@ucw.cz>
  *
- *     The file format is based on LZO1X and 
- *     the compression method is based on zlib.
+ *     This software may be freely distributed and used according to the terms
+ *     of the GNU Lesser General Public License.
  */
 
-#define        LIZZARD_MAX_PROLONG_FACTOR      129/128
-  /* Incompressible string of length 256 has a 2-byte header.
-   * Hence the scheme the file length get multiplied by 129/128 in the worst
-   * case + at most 4 bytes are added for header and EOF.  */
+#ifndef _SHERLOCK_LIZARD_H
+#define _SHERLOCK_LIZARD_H
 
-int lizzard_compress(byte *in, uns in_len, byte *out);
-int lizzard_decompress(byte *in, byte *out);
+#define        LIZARD_NEEDS_CHARS      8
+  /* The compression routine needs input buffer 8 characters longer, because it
+   * does not check the input bounds all the time.  */
+#define        LIZARD_MAX_MULTIPLY     23./22
+#define        LIZARD_MAX_ADD          4
+  /* In the worst case, the compressed file will not be longer than its
+   * original length * 23/22 + 4.
+   *
+   * The additive constant is for EOF and the header of the file.
+   *
+   * The multiplicative constant comes from 19-byte incompressible string
+   * followed by a 3-sequence that can be compressed into 2-byte link.  This
+   * breaks the copy-mode and it needs to be restarted with a new header.  The
+   * total length is 2(header) + 19(string) + 2(link) = 23.
+   */
+
+/* lizard.c */
+int lizard_compress(byte *in, uns in_len, byte *out);
+int lizard_decompress(byte *in, byte *out);
+
+/* lizard-safe.c */
+struct lizard_buffer;
+
+struct lizard_buffer *lizard_alloc(void);
+void lizard_free(struct lizard_buffer *buf);
+byte *lizard_decompress_safe(byte *in, struct lizard_buffer *buf, uns expected_length);
+
+uns update_adler32(uns adler, byte *ptr, uns len);
+uns adler32(byte *ptr, uns len);
+
+#endif