| /////////////////////////////////////////////////////////////////////////////// |
| // |
| /// \file simple_private.h |
| /// \brief Private definitions for so called simple filters |
| // |
| // Author: Lasse Collin |
| // |
| // This file has been put into the public domain. |
| // You can do whatever you want with this file. |
| // |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| #ifndef LZMA_SIMPLE_PRIVATE_H |
| #define LZMA_SIMPLE_PRIVATE_H |
| |
| #include "simple_coder.h" |
| |
| |
| typedef struct lzma_simple_s lzma_simple; |
| |
| struct lzma_coder_s { |
| /// Next filter in the chain |
| lzma_next_coder next; |
| |
| /// True if the next coder in the chain has returned LZMA_STREAM_END. |
| bool end_was_reached; |
| |
| /// True if filter() should encode the data; false to decode. |
| /// Currently all simple filters use the same function for encoding |
| /// and decoding, because the difference between encoders and decoders |
| /// is very small. |
| bool is_encoder; |
| |
| /// Pointer to filter-specific function, which does |
| /// the actual filtering. |
| size_t (*filter)(lzma_simple *simple, uint32_t now_pos, |
| bool is_encoder, uint8_t *buffer, size_t size); |
| |
| /// Pointer to filter-specific data, or NULL if filter doesn't need |
| /// any extra data. |
| lzma_simple *simple; |
| |
| /// The lowest 32 bits of the current position in the data. Most |
| /// filters need this to do conversions between absolute and relative |
| /// addresses. |
| uint32_t now_pos; |
| |
| /// Size of the memory allocated for the buffer. |
| size_t allocated; |
| |
| /// Flushing position in the temporary buffer. buffer[pos] is the |
| /// next byte to be copied to out[]. |
| size_t pos; |
| |
| /// buffer[filtered] is the first unfiltered byte. When pos is smaller |
| /// than filtered, there is unflushed filtered data in the buffer. |
| size_t filtered; |
| |
| /// Total number of bytes (both filtered and unfiltered) currently |
| /// in the temporary buffer. |
| size_t size; |
| |
| /// Temporary buffer |
| uint8_t buffer[]; |
| }; |
| |
| |
| extern lzma_ret lzma_simple_coder_init(lzma_next_coder *next, |
| const lzma_allocator *allocator, |
| const lzma_filter_info *filters, |
| size_t (*filter)(lzma_simple *simple, uint32_t now_pos, |
| bool is_encoder, uint8_t *buffer, size_t size), |
| size_t simple_size, size_t unfiltered_max, |
| uint32_t alignment, bool is_encoder); |
| |
| #endif |