1 // ICoder.h
2 
3 using System;
4 
5 namespace SevenZip
6 {
7 	/// <summary>
8 	/// The exception that is thrown when an error in input stream occurs during decoding.
9 	/// </summary>
10 	class DataErrorException : ApplicationException
11 	{
DataErrorException()12 		public DataErrorException(): base("Data Error") { }
13 	}
14 
15 	/// <summary>
16 	/// The exception that is thrown when the value of an argument is outside the allowable range.
17 	/// </summary>
18 	class InvalidParamException : ApplicationException
19 	{
InvalidParamException()20 		public InvalidParamException(): base("Invalid Parameter") { }
21 	}
22 
23 	public interface ICodeProgress
24 	{
25 		/// <summary>
26 		/// Callback progress.
27 		/// </summary>
28 		/// <param name="inSize">
29 		/// input size. -1 if unknown.
30 		/// </param>
31 		/// <param name="outSize">
32 		/// output size. -1 if unknown.
33 		/// </param>
SetProgress(Int64 inSize, Int64 outSize)34 		void SetProgress(Int64 inSize, Int64 outSize);
35 	};
36 
37 	public interface ICoder
38 	{
39 		/// <summary>
40 		/// Codes streams.
41 		/// </summary>
42 		/// <param name="inStream">
43 		/// input Stream.
44 		/// </param>
45 		/// <param name="outStream">
46 		/// output Stream.
47 		/// </param>
48 		/// <param name="inSize">
49 		/// input Size. -1 if unknown.
50 		/// </param>
51 		/// <param name="outSize">
52 		/// output Size. -1 if unknown.
53 		/// </param>
54 		/// <param name="progress">
55 		/// callback progress reference.
56 		/// </param>
57 		/// <exception cref="SevenZip.DataErrorException">
58 		/// if input stream is not valid
59 		/// </exception>
Code(System.IO.Stream inStream, System.IO.Stream outStream, Int64 inSize, Int64 outSize, ICodeProgress progress)60 		void Code(System.IO.Stream inStream, System.IO.Stream outStream,
61 			Int64 inSize, Int64 outSize, ICodeProgress progress);
62 	};
63 
64 	/*
65 	public interface ICoder2
66 	{
67 		 void Code(ISequentialInStream []inStreams,
68 				const UInt64 []inSizes,
69 				ISequentialOutStream []outStreams,
70 				UInt64 []outSizes,
71 				ICodeProgress progress);
72 	};
73   */
74 
75 	/// <summary>
76 	/// Provides the fields that represent properties idenitifiers for compressing.
77 	/// </summary>
78 	public enum CoderPropID
79 	{
80 		/// <summary>
81 		/// Specifies default property.
82 		/// </summary>
83 		DefaultProp = 0,
84 		/// <summary>
85 		/// Specifies size of dictionary.
86 		/// </summary>
87 		DictionarySize,
88 		/// <summary>
89 		/// Specifies size of memory for PPM*.
90 		/// </summary>
91 		UsedMemorySize,
92 		/// <summary>
93 		/// Specifies order for PPM methods.
94 		/// </summary>
95 		Order,
96 		/// <summary>
97 		/// Specifies Block Size.
98 		/// </summary>
99 		BlockSize,
100 		/// <summary>
101 		/// Specifies number of postion state bits for LZMA (0 <= x <= 4).
102 		/// </summary>
103 		PosStateBits,
104 		/// <summary>
105 		/// Specifies number of literal context bits for LZMA (0 <= x <= 8).
106 		/// </summary>
107 		LitContextBits,
108 		/// <summary>
109 		/// Specifies number of literal position bits for LZMA (0 <= x <= 4).
110 		/// </summary>
111 		LitPosBits,
112 		/// <summary>
113 		/// Specifies number of fast bytes for LZ*.
114 		/// </summary>
115 		NumFastBytes,
116 		/// <summary>
117 		/// Specifies match finder. LZMA: "BT2", "BT4" or "BT4B".
118 		/// </summary>
119 		MatchFinder,
120 		/// <summary>
121 		/// Specifies the number of match finder cyckes.
122 		/// </summary>
123 		MatchFinderCycles,
124 		/// <summary>
125 		/// Specifies number of passes.
126 		/// </summary>
127 		NumPasses,
128 		/// <summary>
129 		/// Specifies number of algorithm.
130 		/// </summary>
131 		Algorithm,
132 		/// <summary>
133 		/// Specifies the number of threads.
134 		/// </summary>
135 		NumThreads,
136 		/// <summary>
137 		/// Specifies mode with end marker.
138 		/// </summary>
139 		EndMarker
140 	};
141 
142 
143 	public interface ISetCoderProperties
144 	{
SetCoderProperties(CoderPropID[] propIDs, object[] properties)145 		void SetCoderProperties(CoderPropID[] propIDs, object[] properties);
146 	};
147 
148 	public interface IWriteCoderProperties
149 	{
WriteCoderProperties(System.IO.Stream outStream)150 		void WriteCoderProperties(System.IO.Stream outStream);
151 	}
152 
153 	public interface ISetDecoderProperties
154 	{
SetDecoderProperties(byte[] properties)155 		void SetDecoderProperties(byte[] properties);
156 	}
157 }
158