19e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project// 29e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project// � Copyright Henrik Ravn 2004 39e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project// 4381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes// Use, modification and distribution are subject to the Boost Software License, Version 1.0. 59e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 69e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project// 79e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 89e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectusing System; 99e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectusing System.IO; 109e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectusing System.Runtime.InteropServices; 119e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectusing System.Text; 129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 139e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Projectnamespace DotZLib 159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project{ 169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project #region Internal types 189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 199e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Defines constants for the various flush types used with zlib 219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 22381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes internal enum FlushTypes 239e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project { 249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project None, Partial, Sync, Full, Finish, Block 259e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 269e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 279e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project #region ZStream structure 289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project // internal mapping of the zlib zstream structure for marshalling 299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project [StructLayoutAttribute(LayoutKind.Sequential, Pack=4, Size=0, CharSet=CharSet.Ansi)] 309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project internal struct ZStream 319e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project { 329e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public IntPtr next_in; 339e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public uint avail_in; 349e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public uint total_in; 359e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 369e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public IntPtr next_out; 379e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public uint avail_out; 389e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public uint total_out; 399e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 409e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project [MarshalAs(UnmanagedType.LPStr)] 41381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes string msg; 429e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project uint state; 439e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 449e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project uint zalloc; 459e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project uint zfree; 469e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project uint opaque; 479e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 489e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project int data_type; 499e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public uint adler; 509e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project uint reserved; 519e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 529e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 539e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project #endregion 54381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes 559e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project #endregion 569e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 579e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project #region Public enums 589e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 599e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Defines constants for the available compression levels in zlib 609e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 619e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public enum CompressLevel : int 629e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project { 639e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 649e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// The default compression level with a reasonable compromise between compression and speed 659e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 66381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes Default = -1, 679e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 689e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// No compression at all. The data are passed straight through. 699e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 709e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project None = 0, 719e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 729e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// The maximum compression rate available. 739e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 74381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes Best = 9, 759e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 769e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// The fastest available compression level. 779e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 789e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project Fastest = 1 799e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 809e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project #endregion 819e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 829e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project #region Exception classes 839e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 849e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// The exception that is thrown when an error occurs on the zlib dll 859e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 869e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public class ZLibException : ApplicationException 879e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project { 889e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 89381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes /// Initializes a new instance of the <see cref="ZLibException"/> class with a specified 909e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// error message and error code 919e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 929e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <param name="errorCode">The zlib error code that caused the exception</param> 939e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <param name="msg">A message that (hopefully) describes the error</param> 949e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public ZLibException(int errorCode, string msg) : base(String.Format("ZLib error {0} {1}", errorCode, msg)) 959e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project { 969e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 979e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 989e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 99381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes /// Initializes a new instance of the <see cref="ZLibException"/> class with a specified 1009e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// error code 1019e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 1029e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <param name="errorCode">The zlib error code that caused the exception</param> 1039e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public ZLibException(int errorCode) : base(String.Format("ZLib error {0}", errorCode)) 1049e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project { 1059e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 1069e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 1079e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project #endregion 1089e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1099e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project #region Interfaces 1109e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1119e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 112381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes /// Declares methods and properties that enables a running checksum to be calculated 1139e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 1149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public interface ChecksumGenerator 1159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project { 1169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 1179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Gets the current value of the checksum 1189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 1199e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project uint Value { get; } 1209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 1229e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Clears the current checksum to 0 1239e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 1249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void Reset(); 1259e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1269e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 1279e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Updates the current checksum with an array of bytes 1289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 1299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <param name="data">The data to update the checksum with</param> 1309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void Update(byte[] data); 1319e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1329e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 1339e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Updates the current checksum with part of an array of bytes 1349e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 1359e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <param name="data">The data to update the checksum with</param> 1369e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <param name="offset">Where in <c>data</c> to start updating</param> 1379e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <param name="count">The number of bytes from <c>data</c> to use</param> 1389e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <exception cref="ArgumentException">The sum of offset and count is larger than the length of <c>data</c></exception> 1399e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <exception cref="ArgumentNullException"><c>data</c> is a null reference</exception> 1409e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <exception cref="ArgumentOutOfRangeException">Offset or count is negative.</exception> 1419e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void Update(byte[] data, int offset, int count); 1429e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1439e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 1449e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Updates the current checksum with the data from a string 1459e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 1469e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <param name="data">The string to update the checksum with</param> 1479e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <remarks>The characters in the string are converted by the UTF-8 encoding</remarks> 1489e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void Update(string data); 1499e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1509e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 1519e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Updates the current checksum with the data from a string, using a specific encoding 1529e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 1539e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <param name="data">The string to update the checksum with</param> 1549e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <param name="encoding">The encoding to use</param> 1559e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void Update(string data, Encoding encoding); 1569e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 1579e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1589e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1599e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 1609e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Represents the method that will be called from a codec when new data 1619e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// are available. 1629e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 1639e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <paramref name="data">The byte array containing the processed data</paramref> 1649e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <paramref name="startIndex">The index of the first processed byte in <c>data</c></paramref> 1659e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <paramref name="count">The number of processed bytes available</paramref> 166381716e9396b55b1adb8235b020c37344f60ab07Elliott Hughes /// <remarks>On return from this method, the data may be overwritten, so grab it while you can. 1679e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// You cannot assume that startIndex will be zero. 1689e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </remarks> 1699e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public delegate void DataAvailableHandler(byte[] data, int startIndex, int count); 1709e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1719e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 1729e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Declares methods and events for implementing compressors/decompressors 1739e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 1749e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public interface Codec 1759e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project { 1769e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 1779e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Occurs when more processed data are available. 1789e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 1799e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project event DataAvailableHandler DataAvailable; 1809e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1819e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 1829e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Adds more data to the codec to be processed. 1839e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 1849e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <param name="data">Byte array containing the data to be added to the codec</param> 1859e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks> 1869e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void Add(byte[] data); 1879e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1889e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 1899e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Adds more data to the codec to be processed. 1909e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 1919e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <param name="data">Byte array containing the data to be added to the codec</param> 1929e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <param name="offset">The index of the first byte to add from <c>data</c></param> 1939e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <param name="count">The number of bytes to add</param> 1949e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks> 1959e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void Add(byte[] data, int offset, int count); 1969e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 1979e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 1989e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Finishes up any pending data that needs to be processed and handled. 1999e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 2009e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project void Finish(); 2019e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2029e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 2039e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Gets the checksum of the data that has been added so far 2049e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 2059e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project uint Checksum { get; } 2069e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2079e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2089e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 2099e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2109e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project #endregion 2119e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2129e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project #region Classes 2139e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 2149e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Encapsulates general information about the ZLib library 2159e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 2169e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public class Info 2179e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project { 2189e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project #region DLL imports 2199e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] 2209e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private static extern uint zlibCompileFlags(); 2219e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2229e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] 2239e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private static extern string zlibVersion(); 2249e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project #endregion 2259e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2269e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project #region Private stuff 2279e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private uint _flags; 2289e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2299e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project // helper function that unpacks a bitsize mask 2309e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project private static int bitSize(uint bits) 2319e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project { 2329e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project switch (bits) 2339e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project { 2349e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project case 0: return 16; 2359e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project case 1: return 32; 2369e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project case 2: return 64; 2379e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 2389e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project return -1; 2399e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 2409e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project #endregion 2419e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2429e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 2439e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Constructs an instance of the <c>Info</c> class. 2449e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 2459e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public Info() 2469e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project { 2479e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project _flags = zlibCompileFlags(); 2489e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 2499e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2509e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 2519e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// True if the library is compiled with debug info 2529e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 2539e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public bool HasDebugInfo { get { return 0 != (_flags & 0x100); } } 2549e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2559e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 2569e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// True if the library is compiled with assembly optimizations 2579e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 2589e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public bool UsesAssemblyCode { get { return 0 != (_flags & 0x200); } } 2599e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2609e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 2619e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Gets the size of the unsigned int that was compiled into Zlib 2629e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 2639e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public int SizeOfUInt { get { return bitSize(_flags & 3); } } 2649e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2659e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 2669e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Gets the size of the unsigned long that was compiled into Zlib 2679e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 2689e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public int SizeOfULong { get { return bitSize((_flags >> 2) & 3); } } 2699e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2709e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 2719e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Gets the size of the pointers that were compiled into Zlib 2729e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 2739e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public int SizeOfPointer { get { return bitSize((_flags >> 4) & 3); } } 2749e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2759e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 2769e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Gets the size of the z_off_t type that was compiled into Zlib 2779e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 2789e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public int SizeOfOffset { get { return bitSize((_flags >> 6) & 3); } } 2799e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2809e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// <summary> 2819e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// Gets the version of ZLib as a string, e.g. "1.2.1" 2829e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project /// </summary> 2839e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project public static string Version { get { return zlibVersion(); } } 2849e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project } 2859e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2869e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project #endregion 2879e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project 2889e38dfa2f95fce609707a0941f10af9a785288deThe Android Open Source Project} 289