internal string GetString(StringHandle handle, MetadataStringDecoder utf8Decoder) { byte[] prefix; if (handle.IsVirtual) { switch (handle.StringKind) { case StringKind.Virtual: return(s_virtualValues[(int)handle.GetVirtualIndex()]); case StringKind.WinRTPrefixed: prefix = MetadataReader.WinRTPrefix; break; default: Debug.Assert(false, "We should not get here"); return(null); } } else { prefix = null; } int bytesRead; char otherTerminator = handle.StringKind == StringKind.DotTerminated ? '.' : '\0'; return(this.Block.PeekUtf8NullTerminated(handle.GetHeapOffset(), prefix, utf8Decoder, out bytesRead, otherTerminator)); }
private MemoryBlock GetVirtualHandleMemoryBlock(StringHandle handle) { Debug.Assert(handle.IsVirtual); var heap = VirtualHeap.GetOrCreateVirtualHeap(ref _lazyVirtualHeap); lock (heap) { if (!heap.TryGetMemoryBlock(handle.RawValue, out var block)) { byte[] bytes; switch (handle.StringKind) { case StringKind.Virtual: bytes = Encoding.UTF8.GetBytes(GetVirtualString(handle.GetVirtualIndex())); break; case StringKind.WinRTPrefixed: bytes = GetNonVirtualStringBytes(handle, MetadataReader.WinRTPrefix); break; default: throw ExceptionUtilities.UnexpectedValue(handle.StringKind); } block = heap.AddBlob(handle.RawValue, bytes); } return(block); } }
private string GetVirtualHandleString(StringHandle handle, MetadataStringDecoder utf8Decoder) { Debug.Assert(handle.IsVirtual); return(handle.StringKind switch { StringKind.Virtual => GetVirtualString(handle.GetVirtualIndex()), StringKind.WinRTPrefixed => GetNonVirtualString(handle, utf8Decoder, MetadataReader.WinRTPrefix), _ => throw ExceptionUtilities.UnexpectedValue(handle.StringKind), });
private string GetVirtualHandleString(StringHandle handle, MetadataStringDecoder utf8Decoder) { Debug.Assert(handle.IsVirtual); switch (handle.StringKind) { case StringKind.Virtual: return(GetVirtualString(handle.GetVirtualIndex())); } throw ExceptionUtilities.UnexpectedValue(handle.StringKind); }
internal string GetString(StringHandle handle, MetadataStringDecoder utf8Decoder) { byte[] prefix; if (handle.IsVirtual) { switch (handle.StringKind) { case StringKind.Virtual: return s_virtualValues[(int)handle.GetVirtualIndex()]; case StringKind.WinRTPrefixed: prefix = MetadataReader.WinRTPrefix; break; default: Debug.Assert(false, "We should not get here"); return null; } } else { prefix = null; } int bytesRead; char otherTerminator = handle.StringKind == StringKind.DotTerminated ? '.' : '\0'; return this.Block.PeekUtf8NullTerminated(handle.GetHeapOffset(), prefix, utf8Decoder, out bytesRead, otherTerminator); }
private MemoryBlock GetVirtualHandleMemoryBlock(StringHandle handle) { Debug.Assert(handle.IsVirtual); var heap = VirtualHeap.GetOrCreateVirtualHeap(ref _lazyVirtualHeap); VirtualHeapBlob virtualBlob; lock (heap) { if (!heap.Table.TryGetValue(handle.RawValue, out virtualBlob)) { byte[] bytes; switch (handle.StringKind) { case StringKind.Virtual: bytes = Encoding.UTF8.GetBytes(GetVirtualString(handle.GetVirtualIndex())); break; case StringKind.WinRTPrefixed: bytes = GetNonVirtualStringBytes(handle, MetadataReader.WinRTPrefix); break; default: throw ExceptionUtilities.UnexpectedValue(handle.StringKind); } virtualBlob = new VirtualHeapBlob(bytes); heap.Table.Add(handle.RawValue, virtualBlob); } } return virtualBlob.GetMemoryBlock(); }
private string GetVirtualHandleString(StringHandle handle, MetadataStringDecoder utf8Decoder) { Debug.Assert(handle.IsVirtual); switch (handle.StringKind) { case StringKind.Virtual: return GetVirtualString(handle.GetVirtualIndex()); case StringKind.WinRTPrefixed: return GetNonVirtualString(handle, utf8Decoder, MetadataReader.WinRTPrefix); } throw ExceptionUtilities.UnexpectedValue(handle.StringKind); }