Squared.Data.Mangler.Internal.StreamRef.AccessRangeUncached C# (CSharp) Method

AccessRangeUncached() public method

Accesses a range of bytes within the stream, bypassing the stream cache.
public AccessRangeUncached ( long offset, uint size, MemoryMappedFileAccess access = MemoryMappedFileAccess.ReadWrite ) : StreamRange
offset long The offset within the stream, relative to the end of the stream header.
size uint The size of the range to access, in bytes.
access MemoryMappedFileAccess
return StreamRange
        public StreamRange AccessRangeUncached(long offset, uint size, MemoryMappedFileAccess access = MemoryMappedFileAccess.ReadWrite)
        {
            unchecked {
                long relativeOffset = offset + HeaderSize;

                EnsureCapacity(relativeOffset + size);

                long actualOffset;
                uint actualSize;
                var view = Cache.CreateViewUncached(relativeOffset, size, access, out actualOffset, out actualSize);

                return new StreamRange(
                    this, view, relativeOffset, size, actualOffset, actualSize
                );
            }
        }

Usage Example

Ejemplo n.º 1
0
        private void EnsureFreelistExists()
        {
            var pHeader = (BTreeHeader *)_HeaderRange.Pointer;

            if (EnableFreelist)
            {
                long oldOffset = 0;

                if (pHeader->FreelistIndexOffset == 0)
                {
                    uint size   = FreelistIndex.Size;
                    long?offset = AllocateDataSpace(ref size);
                    if (!offset.HasValue)
                    {
                        throw new OutOfMemoryException("Unable to allocate space for freelist index in data stream.");
                    }

                    oldOffset = Interlocked.Exchange(ref pHeader->FreelistIndexOffset, offset.Value);
                }

                _FreelistIndexRange = DataStream.AccessRangeUncached(pHeader->FreelistIndexOffset, FreelistIndex.Size, MemoryMappedFileAccess.ReadWrite);
                Native.memset(_FreelistIndexRange.Pointer, 0, new UIntPtr(FreelistIndex.Size / 4));

                if (oldOffset != 0)
                {
                    FreelistPut(oldOffset, FreelistIndex.Size);
                }
            }
            else
            {
                pHeader->FreelistIndexOffset = 0;
            }
        }
All Usage Examples Of Squared.Data.Mangler.Internal.StreamRef::AccessRangeUncached