Example #1
0
 /// <summary>
 /// Deletes the specified position.
 /// </summary>
 /// <param name="position">The position.</param>
 public void Delete(long position)
 {
     lock (_writeLock)
     {
         if (FreeBlocks.Any(fb => fb.Equals(position)))
         {
             return;
         }
         Write(position, Encoding.ASCII.GetString(new byte[MaxBlockSize]));
         FreeBlocks.Add(position);
         BlocksFree++;
         Save();
     }
 }
Example #2
0
        public void FreeBlock(int blockId)
        {
            VerifyValidDataBlock(blockId);
            IsChanged = true;

            var chainedBlock = _blocks[blockId];

            if (AllocatedBlocks.Contains(blockId) || InitialFreeBlocks.Contains(blockId))
            {
                foreach (var id in chainedBlock.BlockIds)
                {
                    FreeBlocks.Add(id);
                }
            }
            else
            {
                foreach (var id in chainedBlock.BlockIds)
                {
                    GarbageBlocks.Add(id);
                }
            }
            _blocks.Remove(blockId);
        }