Exemple #1
0
        // #############################################################################################
        /// Function:<summary>
        ///
        ///          </summary>
        ///
        /// In:		<param name="_block"></param>
        /// Out:	<returns>
        ///
        ///			</returns>
        // #############################################################################################
        public int CheckDuplicate(int _block)
        {
            block_info info     = BlockInfo[_block];   // get the block
            bool       NotSpace = false;

            for (int i = 0; i < 6; i++)
            {
                if (info[i] != -1)
                {
                    NotSpace = true;
                    break;;
                }
            }
            if (!NotSpace)
            {
                FreeBlock(_block);
                return(1);
            }

            // Now check the CRC lookup....
            BlockCRCLookup.Remove(info.CRC);

            // if its NOT a space, compare with all orther blocks
            uint crc      = info.UpdateCRC();
            int  newblock = -1;

            if (BlockCRCLookup.TryGetValue(crc, out newblock))
            {
                FreeBlock(_block);
                BlockInfo[newblock].Ref++;
                return(newblock);
            }
            BlockCRCLookup.Add(crc, _block);
            return(_block);
        }