Ejemplo n.º 1
0
		bool write_chunk_table()
		{
			long position=outstream.Position;

			if(chunk_table_start_position!=-1) // stream is seekable
			{
				try
				{
					outstream.Seek(chunk_table_start_position, SeekOrigin.Begin);
					outstream.Write(BitConverter.GetBytes(position), 0, 8);
					outstream.Seek(position, SeekOrigin.Begin);
				}
				catch
				{
					return false;
				}
			}

			try
			{
				uint version=0;
				outstream.Write(BitConverter.GetBytes(version), 0, 4);
				outstream.Write(BitConverter.GetBytes(chunk_bytes.Count), 0, 4);
			}
			catch
			{
				return false;
			}

			if(chunk_bytes.Count>0)
			{
				enc.init(outstream);

				IntegerCompressor ic=new IntegerCompressor(enc, 32, 2);
				ic.initCompressor();

				for(int i=0; i<chunk_bytes.Count; i++)
				{
					if(chunk_size==uint.MaxValue) ic.compress((i!=0?(int)chunk_sizes[i-1]:0), (int)chunk_sizes[i], 0);
					ic.compress((i!=0?(int)chunk_bytes[i-1]:0), (int)chunk_bytes[i], 1);
				}

				enc.done();
			}

			if(chunk_table_start_position==-1) // stream is not-seekable
			{
				try
				{
					outstream.Write(BitConverter.GetBytes(position), 0, 8);
				}
				catch
				{
					return false;
				}
			}

			return true;
		}
Ejemplo n.º 2
0
        bool write_chunk_table()
        {
            long position = outstream.Position;

            if (chunk_table_start_position != -1)          // stream is seekable
            {
                try
                {
                    outstream.Seek(chunk_table_start_position, SeekOrigin.Begin);
                    outstream.Write(BitConverter.GetBytes(position), 0, 8);
                    outstream.Seek(position, SeekOrigin.Begin);
                }
                catch
                {
                    return(false);
                }
            }

            try
            {
                uint version = 0;
                outstream.Write(BitConverter.GetBytes(version), 0, 4);
                outstream.Write(BitConverter.GetBytes(chunk_bytes.Count), 0, 4);
            }
            catch
            {
                return(false);
            }

            if (chunk_bytes.Count > 0)
            {
                enc.init(outstream);

                IntegerCompressor ic = new IntegerCompressor(enc, 32, 2);
                ic.initCompressor();

                for (int i = 0; i < chunk_bytes.Count; i++)
                {
                    if (chunk_size == uint.MaxValue)
                    {
                        ic.compress((i != 0?(int)chunk_sizes[i - 1]:0), (int)chunk_sizes[i], 0);
                    }
                    ic.compress((i != 0?(int)chunk_bytes[i - 1]:0), (int)chunk_bytes[i], 1);
                }

                enc.done();
            }

            if (chunk_table_start_position == -1)          // stream is not-seekable
            {
                try
                {
                    outstream.Write(BitConverter.GetBytes(position), 0, 8);
                }
                catch
                {
                    return(false);
                }
            }

            return(true);
        }