Example #1
0
        protected override void DoDecompress()
        {
            lock ( iCodeSyncRoot )
            {
                if (iCode == null)
                {
                    TSymbianCompressionType type = this.CompressionType;
                    switch (type)
                    {
                    default:
                    case TSymbianCompressionType.ENone:
                        // NB: This has not yet been observed in reality
                        DecompressNone();
                        break;

                    case TSymbianCompressionType.EDeflate:
                    case TSymbianCompressionType.EBytePair:
                    {
                        using (SymbianDecompressor decompressor = SymbianDecompressor.NewByType(type))
                        {
                            //
                            switch (type)
                            {
                            case TSymbianCompressionType.EBytePair:
                                DecompressBytePair(decompressor);
                                break;

                            case TSymbianCompressionType.EDeflate:
                                DecompressDeflate(decompressor);
                                break;
                            }
                        }
                        break;
                    }
                    }

                    if (iCode != null)
                    {
                        if (iStream != null)
                        {
                            iStream.Dispose();
                            iStream = null;
                        }
                        //
                        iStream = new MemoryStream(iCode);
                    }
                }
            }
        }
        public static SymbianDecompressor NewByType(TSymbianCompressionType aType)
        {
            SymbianDecompressor ret = null;

            //
            switch (aType)
            {
            case TSymbianCompressionType.EBytePair:
                ret = new SymbianDecompressorBytePair();
                break;

            case TSymbianCompressionType.EDeflate:
                ret = new SymbianDecompressorInflate();
                break;
            }
            //
            return(ret);
        }
        private static TSymbianCompressionType ReadCompressionType(SymbianStreamReaderLE aReader)
        {
            TSymbianCompressionType ret = TSymbianCompressionType.ENone;
            //
            uint type = aReader.ReadUInt32();

            if (type == (uint)TSymbianCompressionType.EBytePair)
            {
                ret = TSymbianCompressionType.EBytePair;
            }
            else if (type == (uint)TSymbianCompressionType.EDeflate)
            {
                ret = TSymbianCompressionType.EDeflate;
            }
            else
            {
                throw new E32ImageNotSupportedException("Unsupported compression type");
            }
            //
            return(ret);
        }