| /////////////////////////////////////////////////////////////////////////////// | |
| // | |
| /// \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, | |
| 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 |