Example #1
0
 private void write(byte[] srcData, int index, int size)
 {
     if (DataBlockPosition + size <= DataBlock.SizeOccupied)
     {
         //** overwrite data in Stream Position..
         Array.Copy(srcData, index, DataBlock.Data, DataBlockPosition, size);
         DataBlockPosition += size;
     }
     else if (DataBlock.SizeAvailable > 0)
     {
         int BytesToCopy = size;
         if (BytesToCopy <= DataBlock.SizeAvailable)
         {
             Array.Copy(srcData, index, DataBlock.Data, DataBlockPosition, BytesToCopy);
             DataBlockPosition      += BytesToCopy;
             DataBlock.SizeOccupied += BytesToCopy;
         }
         else
         {
             // Write Data spanning multiple blocks
             int BytesToWrite = DataBlock.SizeAvailable;
             Array.Copy(srcData, index, DataBlock.Data, DataBlockPosition, BytesToWrite);
             DataBlockPosition      = DataBlock.Data.Length;
             DataBlock.SizeOccupied = DataBlock.Data.Length;
             write(srcData, index + BytesToWrite, BytesToCopy - BytesToWrite);
         }
     }
     else
     {
         _dataBlock        = DataBlock.Extend();
         DataBlockPosition = 0;
         _logicalPosition += OutStream.Position;
         OutStream.SetLength(0);
         OutStream.Seek(0, SeekOrigin.Begin);
         do
         {
             if (_dataBlock.Data.Length < size)
             {
                 Array.Copy(srcData, index, _dataBlock.Data, 0, _dataBlock.Data.Length);
                 index += _dataBlock.Data.Length;
                 _dataBlock.SizeOccupied = _dataBlock.Data.Length;
                 size -= _dataBlock.Data.Length;
                 _dataBlock.Extend();
                 _dataBlock = _dataBlock.Next;
             }
             else
             {
                 Array.Copy(srcData, index, _dataBlock.Data, 0, size);
                 _dataBlock.SizeOccupied = size;
                 DataBlockPosition       = size;
                 break;
             }
         } while (size > 0);
     }
 }