1// ICoder.h
2
3using System;
4
5namespace 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	{
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	{
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>
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>
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	{
145		void SetCoderProperties(CoderPropID[] propIDs, object[] properties);
146	};
147
148	public interface IWriteCoderProperties
149	{
150		void WriteCoderProperties(System.IO.Stream outStream);
151	}
152
153	public interface ISetDecoderProperties
154	{
155		void SetDecoderProperties(byte[] properties);
156	}
157}
158