Ejemplo n.º 1
0
 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)}'");
     }
 }
Ejemplo n.º 2
0
        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})" : ""));
        }
Ejemplo n.º 3
0
        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})");
        }
Ejemplo n.º 4
0
 private string Literal(BlobHandle handle, BlobKind kind)
 {
     return(Literal(handle, kind, (r, h) => BitConverter.ToString(r.GetBlobBytes((BlobHandle)h))));
 }
Ejemplo n.º 5
0
 public void SetBlob(FoxBlob value)
 {
     Kind   = BlobKind.Blob;
     _value = value;
 }
Ejemplo n.º 6
0
 public void SetList <T>(List <T> value)
 {
     Kind   = BlobKind.List;
     _value = value.ToArray();
 }
Ejemplo n.º 7
0
 public void SetDouble(double value)
 {
     Kind   = BlobKind.Decimal;
     _value = value;
 }
Ejemplo n.º 8
0
 public void SetNumber(long value)
 {
     Kind   = BlobKind.Number;
     _value = value;
 }
Ejemplo n.º 9
0
 public void SetBool(bool value)
 {
     Kind   = BlobKind.Boolean;
     _value = value;
 }
Ejemplo n.º 10
0
 public void SetString(string value)
 {
     Kind   = BlobKind.String;
     _value = value;
 }