OLD | NEW |
| (Empty) |
1 /* | |
2 LzmaStateDecode.h | |
3 LZMA Decoder interface (State version) | |
4 | |
5 LZMA SDK 4.40 Copyright (c) 1999-2006 Igor Pavlov (2006-05-01) | |
6 http://www.7-zip.org/ | |
7 | |
8 LZMA SDK is licensed under two licenses: | |
9 1) GNU Lesser General Public License (GNU LGPL) | |
10 2) Common Public License (CPL) | |
11 It means that you can select one of these two licenses and | |
12 follow rules of that license. | |
13 | |
14 SPECIAL EXCEPTION: | |
15 Igor Pavlov, as the author of this code, expressly permits you to | |
16 statically or dynamically link your code (or bind by name) to the | |
17 interfaces of this file without subjecting your linked code to the | |
18 terms of the CPL or GNU LGPL. Any modifications or additions | |
19 to this file, however, are subject to the LGPL or CPL terms. | |
20 */ | |
21 | |
22 #ifndef __LZMASTATEDECODE_H | |
23 #define __LZMASTATEDECODE_H | |
24 | |
25 #include "LzmaTypes.h" | |
26 | |
27 /* #define _LZMA_PROB32 */ | |
28 /* It can increase speed on some 32-bit CPUs, | |
29 but memory usage will be doubled in that case */ | |
30 | |
31 #ifdef _LZMA_PROB32 | |
32 #define CProb UInt32 | |
33 #else | |
34 #define CProb UInt16 | |
35 #endif | |
36 | |
37 #define LZMA_RESULT_OK 0 | |
38 #define LZMA_RESULT_DATA_ERROR 1 | |
39 | |
40 #define LZMA_BASE_SIZE 1846 | |
41 #define LZMA_LIT_SIZE 768 | |
42 | |
43 #define LZMA_PROPERTIES_SIZE 5 | |
44 | |
45 typedef struct _CLzmaProperties | |
46 { | |
47 int lc; | |
48 int lp; | |
49 int pb; | |
50 UInt32 DictionarySize; | |
51 }CLzmaProperties; | |
52 | |
53 int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsDa
ta, int size); | |
54 | |
55 #define LzmaGetNumProbs(lzmaProps) (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << ((lzmaPro
ps)->lc + (lzmaProps)->lp))) | |
56 | |
57 #define kLzmaInBufferSize 64 /* don't change it. it must be larger than kRequi
redInBufferSize */ | |
58 | |
59 #define kLzmaNeedInitId (-2) | |
60 | |
61 typedef struct _CLzmaDecoderState | |
62 { | |
63 CLzmaProperties Properties; | |
64 CProb *Probs; | |
65 unsigned char *Dictionary; | |
66 | |
67 unsigned char Buffer[kLzmaInBufferSize]; | |
68 int BufferSize; | |
69 | |
70 UInt32 Range; | |
71 UInt32 Code; | |
72 UInt32 DictionaryPos; | |
73 UInt32 GlobalPos; | |
74 UInt32 DistanceLimit; | |
75 UInt32 Reps[4]; | |
76 int State; | |
77 int RemainLen; /* -2: decoder needs internal initialization | |
78 -1: stream was finished, | |
79 0: ok | |
80 > 0: need to write RemainLen bytes as match Reps[0], | |
81 */ | |
82 unsigned char TempDictionary[4]; /* it's required when DictionarySize = 0 */ | |
83 } CLzmaDecoderState; | |
84 | |
85 #define LzmaDecoderInit(vs) { (vs)->RemainLen = kLzmaNeedInitId; (vs)->BufferSiz
e = 0; } | |
86 | |
87 /* LzmaDecode: decoding from input stream to output stream. | |
88 If finishDecoding != 0, then there are no more bytes in input stream | |
89 after inStream[inSize - 1]. */ | |
90 | |
91 int LzmaDecode(CLzmaDecoderState *vs, | |
92 const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed, | |
93 unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed, | |
94 int finishDecoding); | |
95 | |
96 #endif | |
OLD | NEW |