xref: /netbsd-src/external/bsd/liblzf/dist/lzfP.h (revision ea6af427bd91f69ffa99be74763d24964ca3ea67)
1 /*
2  * Copyright (c) 2000-2007 Marc Alexander Lehmann <schmorp@schmorp.de>
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 #if !defined(_KERNEL) && !defined(_STANDALONE)
41 #include <sys/types.h>
42 #include <inttypes.h>
43 #endif
44 
45 /*
46  * Size of hashtable is (1 << LZF_HLOG) * sizeof (char *)
47  * decompression is independent of the hash table size
48  * the difference between 15 and 14 is very small
49  * for small blocks (and 14 is usually a bit faster).
50  * For a low-memory/faster configuration, use LZF_HLOG == 13;
51  * For best compression, use 15 or 16 (or more, up to 23).
52  */
53 #ifndef LZF_HLOG
54 # define LZF_HLOG 16
55 #endif
56 
57 /*
58  * Sacrifice very little compression quality in favour of compression speed.
59  * This gives almost the same compression as the default code, and is
60  * (very roughly) 15% faster. This is the preferred mode of operation.
61  */
62 #ifndef VERY_FAST
63 # define VERY_FAST 1
64 #endif
65 
66 /*
67  * Sacrifice some more compression quality in favour of compression speed.
68  * (roughly 1-2% worse compression for large blocks and
69  * 9-10% for small, redundant, blocks and >>20% better speed in both cases)
70  * In short: when in need for speed, enable this for binary data,
71  * possibly disable this for text data.
72  */
73 #ifndef ULTRA_FAST
74 # define ULTRA_FAST 0
75 #endif
76 
77 /*
78  * Unconditionally aligning does not cost very much, so do it if unsure
79  *
80  * In fact, on modern x86 processors, strict alignment is faster whether
81  * in 32 or 64 bit mode.
82  */
83 #ifndef STRICT_ALIGN
84 # define STRICT_ALIGN 1 /* !(defined(__i386) || defined (__amd64)) */
85 #endif
86 
87 /*
88  * You may choose to pre-set the hash table (might be faster on some
89  * modern cpus and large (>>64k) blocks, and also makes compression
90  * deterministic/repeatable when the configuration otherwise is the same).
91  */
92 #ifndef INIT_HTAB
93 # define INIT_HTAB 0
94 #endif
95 
96 /*
97  * Avoid assigning values to errno variable? for some embedding purposes
98  * (linux kernel for example), this is neccessary. NOTE: this breaks
99  * the documentation in lzf.h.
100  */
101 #ifndef AVOID_ERRNO
102 # define AVOID_ERRNO 0
103 #endif
104 
105 /*
106  * Wether to pass the LZF_STATE variable as argument, or allocate it
107  * on the stack. For small-stack environments, define this to 1.
108  * NOTE: this breaks the prototype in lzf.h.
109  */
110 #ifndef LZF_STATE_ARG
111 # define LZF_STATE_ARG 0
112 #endif
113 
114 /*
115  * Wether to add extra checks for input validity in lzf_decompress
116  * and return EINVAL if the input stream has been corrupted. This
117  * only shields against overflowing the input buffer and will not
118  * detect most corrupted streams.
119  * This check is not normally noticable on modern hardware
120  * (<1% slowdown), but might slow down older cpus considerably.
121  */
122 #ifndef CHECK_INPUT
123 # define CHECK_INPUT 1
124 #endif
125 
126 /*****************************************************************************/
127 /* nothing should be changed below */
128 
129 typedef uint8_t u8;
130 typedef uint16_t u16;
131 
132 #if !defined(_KERNEL) && !defined(STANDALONE)
133 typedef const u8 *LZF_STATE[1 << (LZF_HLOG)];
134 #endif
135 
136 #if ULTRA_FAST
137 # if defined(VERY_FAST)
138 #  undef VERY_FAST
139 # endif
140 #endif
141 
142 #if INIT_HTAB
143 # ifdef __cplusplus
144 #  include <cstring>
145 # else
146 #  include <string.h>
147 # endif
148 #endif
149 
150 #endif
151 
152