private void Validate(BlobKind expected) { if (expected != Kind) { throw new BlobKindException( $"Unable to fetch value. Was expecting kind '{Enum.GetName(expected.GetType(), expected)}' but got '{Enum.GetName(Kind.GetType(), Kind)}'"); } }
private string Literal(Handle handle, BlobKind kind, Func <MetadataReader, Handle, string> getValue) { if (handle.IsNil) { return("nil"); } if (kind != BlobKind.None) { _blobKinds[(BlobHandle)handle] = kind; } if (_aggregator != null) { int generation; Handle generationHandle = _aggregator.GetGenerationHandle(handle, out generation); var generationReader = _readers[generation]; string value = GetValueChecked(getValue, generationReader, generationHandle); int offset = generationReader.GetHeapOffset(handle); int generationOffset = generationReader.GetHeapOffset(generationHandle); if (offset == generationOffset) { return($"{value} (#{offset:x})"); } else { return($"{value} (#{offset:x}/{generationOffset:x})"); } } if (IsDelta) { // we can't resolve the literal without aggregate reader return(string.Format("#{0:x}", _reader.GetHeapOffset(handle))); } // virtual heap handles don't have offset: int heapOffset = MetadataTokens.GetHeapOffset(handle); return($"{GetValueChecked(getValue, _reader, handle):x}" + (heapOffset >= 0 ? $" (#{heapOffset:x})" : "")); }
private string Literal(Handle handle, BlobKind kind, Func <MetadataReader, Handle, string> getValue) { if (handle.IsNil) { return("nil"); } if (kind != BlobKind.None) { BlobKinds[(BlobHandle)handle] = kind; } if (aggregator != null) { int generation; Handle generationHandle = aggregator.GetGenerationHandle(handle, out generation); var generationReader = readers[generation]; string value = GetValueChecked(getValue, generationReader, generationHandle); int offset = generationReader.GetHeapOffset(handle); int generationOffset = generationReader.GetHeapOffset(generationHandle); if (offset == generationOffset) { return($"{value} (#{offset:x})"); } else { return($"{value} (#{offset:x}/{generationOffset:x})"); } } if (IsDelta) { // we can't resolve the literal without aggregate reader return(string.Format("#{0:x}", reader.GetHeapOffset(handle))); } return($"{GetValueChecked(getValue, reader, handle):x} (#{reader.GetHeapOffset(handle):x})"); }
private string Literal(BlobHandle handle, BlobKind kind) { return(Literal(handle, kind, (r, h) => BitConverter.ToString(r.GetBlobBytes((BlobHandle)h)))); }
public void SetBlob(FoxBlob value) { Kind = BlobKind.Blob; _value = value; }
public void SetList <T>(List <T> value) { Kind = BlobKind.List; _value = value.ToArray(); }
public void SetDouble(double value) { Kind = BlobKind.Decimal; _value = value; }
public void SetNumber(long value) { Kind = BlobKind.Number; _value = value; }
public void SetBool(bool value) { Kind = BlobKind.Boolean; _value = value; }
public void SetString(string value) { Kind = BlobKind.String; _value = value; }