in AdlsDotNetSDK/FileTransfer/RandomDataStream.cs [126:159]
public override long Seek(long offset, SeekOrigin origin)
{
long newCursor = cursor;
if (origin == SeekOrigin.Begin)
{
newCursor = offset % size;
if (newCursor > streamLength - 1) newCursor = streamLength - 1;
Interlocked.Exchange(ref cursor, newCursor);
}
if (origin == SeekOrigin.Current)
{
//Do this: cursor = cursor+offset;
long tCursor;
do
{
tCursor = Interlocked.Read(ref cursor);
long tOffset = offset;
if (tCursor + tOffset >= streamLength) tOffset = (streamLength - 1) - tCursor;
newCursor = tCursor + tOffset;
} while (Interlocked.CompareExchange(ref cursor, newCursor, tCursor) != tCursor);
}
if (origin == SeekOrigin.End)
{
if (offset <= 0 && streamLength != -1 && (-offset < streamLength))
{
newCursor = streamLength + offset;
Interlocked.Exchange(ref cursor, newCursor);
}
}
return newCursor;
}