public void Goto(DeferedStreamLabel label) { if (label < 0) { throw new ArgumentOutOfRangeException(nameof(label)); } // see if we can just change the offset Debug.Assert((long)label <= int.MaxValue); int absoluteOffset = (int)label; if (absoluteOffset >= _viewOffset && absoluteOffset < _viewOffset + _capacity) { _offset = (int)(absoluteOffset - _viewOffset); return; } // Have to move the view _view.Dispose(); long availableInFile = _fileLength - absoluteOffset; long viewOffset = absoluteOffset & ~0xFFFF; long offset = absoluteOffset - viewOffset; long viewLength = Math.Min(BlockCopyCapacity, availableInFile + offset); _view = _file.CreateViewAccessor(viewOffset, viewLength, MemoryMappedFileAccess.Read); _viewAddress = _view.SafeMemoryMappedViewHandle.DangerousGetHandle(); _viewOffset = viewOffset; _capacity = viewLength; _offset = offset; }
public void WriteSuffixLabel(DeferedStreamLabel value) { // This is guaranteed to be uncompressed, but since we are not compressing anything, we can // simply write the value. Write(value); }
public void Write(DeferedStreamLabel value) { Write((int)value); }