Skip to content

Commit d075193

Browse files
committed
new LZF files added
1 parent 2e77c2e commit d075193

File tree

4 files changed

+704
-0
lines changed

4 files changed

+704
-0
lines changed

lzf.h

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/*
2+
* Copyright (c) 2000-2008 Marc Alexander Lehmann <[email protected]>
3+
*
4+
* Redistribution and use in source and binary forms, with or without modifica-
5+
* tion, are permitted provided that the following conditions are met:
6+
*
7+
* 1. Redistributions of source code must retain the above copyright notice,
8+
* this list of conditions and the following disclaimer.
9+
*
10+
* 2. Redistributions in binary form must reproduce the above copyright
11+
* notice, this list of conditions and the following disclaimer in the
12+
* documentation and/or other materials provided with the distribution.
13+
*
14+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
15+
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-
16+
* CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
17+
* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-
18+
* CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19+
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
20+
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
21+
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH-
22+
* ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
23+
* OF THE POSSIBILITY OF SUCH DAMAGE.
24+
*
25+
* Alternatively, the contents of this file may be used under the terms of
26+
* the GNU General Public License ("GPL") version 2 or any later version,
27+
* in which case the provisions of the GPL are applicable instead of
28+
* the above. If you wish to allow the use of your version of this file
29+
* only under the terms of the GPL and not to allow others to use your
30+
* version of this file under the BSD license, indicate your decision
31+
* by deleting the provisions above and replace them with the notice
32+
* and other provisions required by the GPL. If you do not delete the
33+
* provisions above, a recipient may use your version of this file under
34+
* either the BSD or the GPL.
35+
*/
36+
37+
#ifndef LZF_H
38+
#define LZF_H
39+
40+
/***********************************************************************
41+
**
42+
** lzf -- an extremely fast/free compression/decompression-method
43+
** http://liblzf.plan9.de/
44+
**
45+
** This algorithm is believed to be patent-free.
46+
**
47+
***********************************************************************/
48+
49+
#define LZF_VERSION 0x0105 /* 1.5, API version */
50+
51+
/*
52+
* Compress in_len bytes stored at the memory block starting at
53+
* in_data and write the result to out_data, up to a maximum length
54+
* of out_len bytes.
55+
*
56+
* If the output buffer is not large enough or any error occurs return 0,
57+
* otherwise return the number of bytes used, which might be considerably
58+
* more than in_len (but less than 104% of the original size), so it
59+
* makes sense to always use out_len == in_len - 1), to ensure _some_
60+
* compression, and store the data uncompressed otherwise (with a flag, of
61+
* course.
62+
*
63+
* lzf_compress might use different algorithms on different systems and
64+
* even different runs, thus might result in different compressed strings
65+
* depending on the phase of the moon or similar factors. However, all
66+
* these strings are architecture-independent and will result in the
67+
* original data when decompressed using lzf_decompress.
68+
*
69+
* The buffers must not be overlapping.
70+
*
71+
* If the option LZF_STATE_ARG is enabled, an extra argument must be
72+
* supplied which is not reflected in this header file. Refer to lzfP.h
73+
* and lzf_c.c.
74+
*
75+
*/
76+
unsigned int
77+
lzf_compress (const void *const in_data, unsigned int in_len,
78+
void *out_data, unsigned int out_len);
79+
80+
/*
81+
* Decompress data compressed with some version of the lzf_compress
82+
* function and stored at location in_data and length in_len. The result
83+
* will be stored at out_data up to a maximum of out_len characters.
84+
*
85+
* If the output buffer is not large enough to hold the decompressed
86+
* data, a 0 is returned and errno is set to E2BIG. Otherwise the number
87+
* of decompressed bytes (i.e. the original length of the data) is
88+
* returned.
89+
*
90+
* If an error in the compressed data is detected, a zero is returned and
91+
* errno is set to EINVAL.
92+
*
93+
* This function is very fast, about as fast as a copying loop.
94+
*/
95+
unsigned int
96+
lzf_decompress (const void *const in_data, unsigned int in_len,
97+
void *out_data, unsigned int out_len);
98+
99+
#endif
100+

lzfP.h

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
/*
2+
* Copyright (c) 2000-2007 Marc Alexander Lehmann <[email protected]>
3+
*
4+
* Redistribution and use in source and binary forms, with or without modifica-
5+
* tion, are permitted provided that the following conditions are met:
6+
*
7+
* 1. Redistributions of source code must retain the above copyright notice,
8+
* this list of conditions and the following disclaimer.
9+
*
10+
* 2. Redistributions in binary form must reproduce the above copyright
11+
* notice, this list of conditions and the following disclaimer in the
12+
* documentation and/or other materials provided with the distribution.
13+
*
14+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
15+
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-
16+
* CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
17+
* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-
18+
* CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19+
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
20+
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
21+
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH-
22+
* ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
23+
* OF THE POSSIBILITY OF SUCH DAMAGE.
24+
*
25+
* Alternatively, the contents of this file may be used under the terms of
26+
* the GNU General Public License ("GPL") version 2 or any later version,
27+
* in which case the provisions of the GPL are applicable instead of
28+
* the above. If you wish to allow the use of your version of this file
29+
* only under the terms of the GPL and not to allow others to use your
30+
* version of this file under the BSD license, indicate your decision
31+
* by deleting the provisions above and replace them with the notice
32+
* and other provisions required by the GPL. If you do not delete the
33+
* provisions above, a recipient may use your version of this file under
34+
* either the BSD or the GPL.
35+
*/
36+
37+
#ifndef LZFP_h
38+
#define LZFP_h
39+
40+
#define STANDALONE 1 /* at the moment, this is ok. */
41+
42+
#ifndef STANDALONE
43+
# include "lzf.h"
44+
#endif
45+
46+
/*
47+
* Size of hashtable is (1 << HLOG) * sizeof (char *)
48+
* decompression is independent of the hash table size
49+
* the difference between 15 and 14 is very small
50+
* for small blocks (and 14 is usually a bit faster).
51+
* For a low-memory/faster configuration, use HLOG == 13;
52+
* For best compression, use 15 or 16 (or more, up to 23).
53+
*/
54+
#ifndef HLOG
55+
# define HLOG 16
56+
#endif
57+
58+
/*
59+
* Sacrifice very little compression quality in favour of compression speed.
60+
* This gives almost the same compression as the default code, and is
61+
* (very roughly) 15% faster. This is the preferred mode of operation.
62+
*/
63+
#ifndef VERY_FAST
64+
# define VERY_FAST 1
65+
#endif
66+
67+
/*
68+
* Sacrifice some more compression quality in favour of compression speed.
69+
* (roughly 1-2% worse compression for large blocks and
70+
* 9-10% for small, redundant, blocks and >>20% better speed in both cases)
71+
* In short: when in need for speed, enable this for binary data,
72+
* possibly disable this for text data.
73+
*/
74+
#ifndef ULTRA_FAST
75+
# define ULTRA_FAST 0
76+
#endif
77+
78+
/*
79+
* Unconditionally aligning does not cost very much, so do it if unsure
80+
*/
81+
#ifndef STRICT_ALIGN
82+
# define STRICT_ALIGN !(defined(__i386) || defined (__amd64))
83+
#endif
84+
85+
/*
86+
* You may choose to pre-set the hash table (might be faster on some
87+
* modern cpus and large (>>64k) blocks, and also makes compression
88+
* deterministic/repeatable when the configuration otherwise is the same).
89+
*/
90+
#ifndef INIT_HTAB
91+
# define INIT_HTAB 0
92+
#endif
93+
94+
/*
95+
* Avoid assigning values to errno variable? for some embedding purposes
96+
* (linux kernel for example), this is neccessary. NOTE: this breaks
97+
* the documentation in lzf.h.
98+
*/
99+
#ifndef AVOID_ERRNO
100+
# define AVOID_ERRNO 0
101+
#endif
102+
103+
/*
104+
* Wether to pass the LZF_STATE variable as argument, or allocate it
105+
* on the stack. For small-stack environments, define this to 1.
106+
* NOTE: this breaks the prototype in lzf.h.
107+
*/
108+
#ifndef LZF_STATE_ARG
109+
# define LZF_STATE_ARG 0
110+
#endif
111+
112+
/*
113+
* Wether to add extra checks for input validity in lzf_decompress
114+
* and return EINVAL if the input stream has been corrupted. This
115+
* only shields against overflowing the input buffer and will not
116+
* detect most corrupted streams.
117+
* This check is not normally noticable on modern hardware
118+
* (<1% slowdown), but might slow down older cpus considerably.
119+
*/
120+
#ifndef CHECK_INPUT
121+
# define CHECK_INPUT 1
122+
#endif
123+
124+
/*****************************************************************************/
125+
/* nothing should be changed below */
126+
127+
typedef unsigned char u8;
128+
129+
typedef const u8 *LZF_STATE[1 << (HLOG)];
130+
131+
#if !STRICT_ALIGN
132+
/* for unaligned accesses we need a 16 bit datatype. */
133+
# include <limits.h>
134+
# if USHRT_MAX == 65535
135+
typedef unsigned short u16;
136+
# elif UINT_MAX == 65535
137+
typedef unsigned int u16;
138+
# else
139+
# undef STRICT_ALIGN
140+
# define STRICT_ALIGN 1
141+
# endif
142+
#endif
143+
144+
#if ULTRA_FAST
145+
# if defined(VERY_FAST)
146+
# undef VERY_FAST
147+
# endif
148+
#endif
149+
150+
#if INIT_HTAB
151+
# ifdef __cplusplus
152+
# include <cstring>
153+
# else
154+
# include <string.h>
155+
# endif
156+
#endif
157+
158+
#endif
159+

0 commit comments

Comments
 (0)