Home | History | Annotate | Line # | Download | only in dist
      1 /*
      2  * Copyright (c) 2000-2007 Marc Alexander Lehmann <schmorp (at) 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