(root)/
xz-5.4.5/
src/
liblzma/
simple/
simple_private.h
       1  ///////////////////////////////////////////////////////////////////////////////
       2  //
       3  /// \file       simple_private.h
       4  /// \brief      Private definitions for so called simple filters
       5  //
       6  //  Author:     Lasse Collin
       7  //
       8  //  This file has been put into the public domain.
       9  //  You can do whatever you want with this file.
      10  //
      11  ///////////////////////////////////////////////////////////////////////////////
      12  
      13  #ifndef LZMA_SIMPLE_PRIVATE_H
      14  #define LZMA_SIMPLE_PRIVATE_H
      15  
      16  #include "simple_coder.h"
      17  
      18  
      19  typedef struct {
      20  	/// Next filter in the chain
      21  	lzma_next_coder next;
      22  
      23  	/// True if the next coder in the chain has returned LZMA_STREAM_END.
      24  	bool end_was_reached;
      25  
      26  	/// True if filter() should encode the data; false to decode.
      27  	/// Currently all simple filters use the same function for encoding
      28  	/// and decoding, because the difference between encoders and decoders
      29  	/// is very small.
      30  	bool is_encoder;
      31  
      32  	/// Pointer to filter-specific function, which does
      33  	/// the actual filtering.
      34  	size_t (*filter)(void *simple, uint32_t now_pos,
      35  			bool is_encoder, uint8_t *buffer, size_t size);
      36  
      37  	/// Pointer to filter-specific data, or NULL if filter doesn't need
      38  	/// any extra data.
      39  	void *simple;
      40  
      41  	/// The lowest 32 bits of the current position in the data. Most
      42  	/// filters need this to do conversions between absolute and relative
      43  	/// addresses.
      44  	uint32_t now_pos;
      45  
      46  	/// Size of the memory allocated for the buffer.
      47  	size_t allocated;
      48  
      49  	/// Flushing position in the temporary buffer. buffer[pos] is the
      50  	/// next byte to be copied to out[].
      51  	size_t pos;
      52  
      53  	/// buffer[filtered] is the first unfiltered byte. When pos is smaller
      54  	/// than filtered, there is unflushed filtered data in the buffer.
      55  	size_t filtered;
      56  
      57  	/// Total number of bytes (both filtered and unfiltered) currently
      58  	/// in the temporary buffer.
      59  	size_t size;
      60  
      61  	/// Temporary buffer
      62  	uint8_t buffer[];
      63  } lzma_simple_coder;
      64  
      65  
      66  extern lzma_ret lzma_simple_coder_init(lzma_next_coder *next,
      67  		const lzma_allocator *allocator,
      68  		const lzma_filter_info *filters,
      69  		size_t (*filter)(void *simple, uint32_t now_pos,
      70  			bool is_encoder, uint8_t *buffer, size_t size),
      71  		size_t simple_size, size_t unfiltered_max,
      72  		uint32_t alignment, bool is_encoder);
      73  
      74  #endif