PieceDescriptor[] ReadDescriptors(BinaryReader reader, int count)
        {
            ArrayList result = new ArrayList();

            for (int i = 0; i < count; i++)
            {
                PieceDescriptor descriptor = new PieceDescriptor();
                descriptor.Read(reader);
                result.Add(descriptor);
            }
            return((PieceDescriptor[])result.ToArray(typeof(PieceDescriptor)));
        }
        /// <summary>
        /// Gets bounds of the specified piece in the file.
        /// </summary>
        /// <param name="piece">The number od the piece</param>
        /// <param name="start">The start file offset</param>
        /// <param name="end">The end file offset</param>
        public bool GetPieceFileBounds(int piece, out uint start, out uint end)
        {
            start = 0xffffffff;
            end   = 0xffffffff;

            PieceDescriptor pd = _Descriptors[piece];

            uint fc        = pd.Fc;
            bool isUnicode = FileOffset.IsUnicode(fc);

            start = FileOffset.NormalizeFc(fc);

            uint length = _DescriptorOffsets[piece + 1].Value - _DescriptorOffsets[piece].Value;

            end = (uint)(start + length * FileOffset.GetFcDelta(isUnicode));

            return(isUnicode);
        }