Assembly.Metro.Controls.PageTemplates.Games.Components.MetaData.MetaReader.VisitDataRef C# (CSharp) Method

VisitDataRef() public method

public VisitDataRef ( Assembly.Metro.Controls.PageTemplates.Games.Components.MetaData.DataRef field ) : void
field Assembly.Metro.Controls.PageTemplates.Games.Components.MetaData.DataRef
return void
        public void VisitDataRef(DataRef field)
        {
            SeekToOffset(field.Offset);
            StructureValueCollection values = StructureReader.ReadStructure(_reader, _dataRefLayout);

            var length = (int) values.GetInteger("size");
            uint pointer = values.GetInteger("pointer");

            if (length > 0 && _cache.MetaArea.ContainsBlockPointer(pointer, length))
            {
                field.DataAddress = pointer;
                field.Length = length;

                // Go to position
                if (_type == LoadType.Memory)
                    _reader.SeekTo(pointer);
                else
                    _reader.SeekTo(_cache.MetaArea.PointerToOffset(pointer));

                switch (field.Format)
                {
                    default:
                        byte[] data = _reader.ReadBlock(field.Length);
                        field.Value = FunctionHelpers.BytesToHexString(data);
                        break;
                    case "unicode":
                        field.Value = _reader.ReadUTF16(field.Length);
                        break;
                    case "asciiz":
                        field.Value = _reader.ReadAscii(field.Length);
                        break;
                }
            }
            else
            {
                field.DataAddress = 0;
                field.Length = 0;
                field.Value = "";
            }
        }