15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Lzma2Dec.h -- LZMA2 Decoder
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)2009-05-03 : Igor Pavlov : Public domain */
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef __LZMA2_DEC_H
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define __LZMA2_DEC_H
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "LzmaDec.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* ---------- State Interface ---------- */
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CLzmaDec decoder;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UInt32 packSize;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UInt32 unpackSize;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int state;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Byte control;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Bool needInitDic;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Bool needInitState;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Bool needInitProp;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} CLzma2Dec;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define Lzma2Dec_Construct(p) LzmaDec_Construct(&(p)->decoder)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define Lzma2Dec_FreeProbs(p, alloc) LzmaDec_FreeProbs(&(p)->decoder, alloc);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define Lzma2Dec_Free(p, alloc) LzmaDec_Free(&(p)->decoder, alloc);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SRes Lzma2Dec_AllocateProbs(CLzma2Dec *p, Byte prop, ISzAlloc *alloc);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SRes Lzma2Dec_Allocate(CLzma2Dec *p, Byte prop, ISzAlloc *alloc);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Lzma2Dec_Init(CLzma2Dec *p);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)finishMode:
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  It has meaning only if the decoding reaches output limit (*destLen or dicLimit).
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LZMA_FINISH_ANY - use smallest number of input bytes
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LZMA_FINISH_END - read EndOfStream marker after decoding
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Returns:
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SZ_OK
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    status:
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      LZMA_STATUS_FINISHED_WITH_MARK
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      LZMA_STATUS_NOT_FINISHED
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      LZMA_STATUS_NEEDS_MORE_INPUT
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SZ_ERROR_DATA - Data error
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SRes Lzma2Dec_DecodeToDic(CLzma2Dec *p, SizeT dicLimit,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SRes Lzma2Dec_DecodeToBuf(CLzma2Dec *p, Byte *dest, SizeT *destLen,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* ---------- One Call Interface ---------- */
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)finishMode:
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  It has meaning only if the decoding reaches output limit (*destLen).
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LZMA_FINISH_ANY - use smallest number of input bytes
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LZMA_FINISH_END - read EndOfStream marker after decoding
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Returns:
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SZ_OK
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    status:
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      LZMA_STATUS_FINISHED_WITH_MARK
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      LZMA_STATUS_NOT_FINISHED
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SZ_ERROR_DATA - Data error
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SZ_ERROR_MEM  - Memory allocation error
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SZ_ERROR_UNSUPPORTED - Unsupported properties
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SZ_ERROR_INPUT_EOF - It needs more bytes in input buffer (src).
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SRes Lzma2Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen,
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Byte prop, ELzmaFinishMode finishMode, ELzmaStatus *status, ISzAlloc *alloc);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
85