15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*  LzmaEnc.h -- LZMA Encoder
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)2009-02-07 : Igor Pavlov : Public domain */
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef __LZMA_ENC_H
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define __LZMA_ENC_H
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "Types.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LZMA_PROPS_SIZE 5
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct _CLzmaEncProps
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int level;       /*  0 <= level <= 9 */
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UInt32 dictSize; /* (1 << 12) <= dictSize <= (1 << 27) for 32-bit version
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      (1 << 12) <= dictSize <= (1 << 30) for 64-bit version
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       default = (1 << 24) */
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int lc;          /* 0 <= lc <= 8, default = 3 */
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int lp;          /* 0 <= lp <= 4, default = 0 */
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int pb;          /* 0 <= pb <= 4, default = 2 */
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int algo;        /* 0 - fast, 1 - normal, default = 1 */
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int fb;          /* 5 <= fb <= 273, default = 32 */
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int btMode;      /* 0 - hashChain Mode, 1 - binTree mode - normal, default = 1 */
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int numHashBytes; /* 2, 3 or 4, default = 4 */
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UInt32 mc;        /* 1 <= mc <= (1 << 30), default = 32 */
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  unsigned writeEndMark;  /* 0 - do not write EOPM, 1 - write EOPM, default = 0 */
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int numThreads;  /* 1 or 2, default = 2 */
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} CLzmaEncProps;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LzmaEncProps_Init(CLzmaEncProps *p);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LzmaEncProps_Normalize(CLzmaEncProps *p);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UInt32 LzmaEncProps_GetDictSize(const CLzmaEncProps *props2);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* ---------- CLzmaEncHandle Interface ---------- */
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* LzmaEnc_* functions can return the following exit codes:
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Returns:
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SZ_OK           - OK
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SZ_ERROR_MEM    - Memory allocation error
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SZ_ERROR_PARAM  - Incorrect paramater in props
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SZ_ERROR_WRITE  - Write callback error.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SZ_ERROR_PROGRESS - some break from progress callback
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void * CLzmaEncHandle;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CLzmaEncHandle LzmaEnc_Create(ISzAlloc *alloc);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LzmaEnc_Destroy(CLzmaEncHandle p, ISzAlloc *alloc, ISzAlloc *allocBig);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SRes LzmaEnc_SetProps(CLzmaEncHandle p, const CLzmaEncProps *props);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SRes LzmaEnc_WriteProperties(CLzmaEncHandle p, Byte *properties, SizeT *size);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SRes LzmaEnc_Encode(CLzmaEncHandle p, ISeqOutStream *outStream, ISeqInStream *inStream,
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SRes LzmaEnc_MemEncode(CLzmaEncHandle p, Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen,
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int writeEndMark, ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* ---------- One Call Interface ---------- */
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* LzmaEncode
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Return code:
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SZ_OK               - OK
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SZ_ERROR_MEM        - Memory allocation error
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SZ_ERROR_PARAM      - Incorrect paramater
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SZ_ERROR_OUTPUT_EOF - output buffer overflow
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SZ_ERROR_THREAD     - errors in multithreading functions (only for Mt version)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen,
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark,
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
81