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);
 }