Example #1
0
        /// <exception cref="System.IO.IOException"></exception>
        protected internal override bool OnAppendBase(int typeCode, byte[] data, PackedObjectInfo
                                                      info)
        {
            info.SetOffset(packEnd);
            byte[] buf = Buffer();
            int    sz  = data.Length;
            int    len = 0;

            buf[len++] = unchecked ((byte)((typeCode << 4) | sz & 15));
            sz         = (int)(((uint)sz) >> 4);
            while (sz > 0)
            {
                buf[len - 1] |= unchecked ((int)(0x80));
                buf[len++]    = unchecked ((byte)(sz & unchecked ((int)(0x7f))));
                sz            = (int)(((uint)sz) >> 7);
            }
            tailDigest.Update(buf, 0, len);
            crc.Reset();
            crc.Update(buf, 0, len);
            @out.Seek(packEnd);
            @out.Write(buf, 0, len);
            packEnd += len;
            if (def == null)
            {
                def = new Deflater(Deflater.DEFAULT_COMPRESSION, false);
            }
            else
            {
                def.Reset();
            }
            def.SetInput(data);
            def.Finish();
            while (!def.IsFinished)
            {
                len = def.Deflate(buf);
                tailDigest.Update(buf, 0, len);
                crc.Update(buf, 0, len);
                @out.Write(buf, 0, len);
                packEnd += len;
            }
            info.SetCRC((int)crc.GetValue());
            return(true);
        }
Example #2
0
 /// <exception cref="System.IO.IOException"></exception>
 protected internal override void OnEndWholeObject(PackedObjectInfo info)
 {
     info.SetCRC((int)crc.GetValue());
 }