/*
Copyright (C) 2014-2019 de4dot@gmail.com
This file is part of dnSpy
dnSpy is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
dnSpy is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with dnSpy. If not, see .
*/
using System.Collections.ObjectModel;
using dnSpy.Contracts.Hex.Text;
namespace dnSpy.Contracts.Hex.Files {
///
/// Formats fields and values
///
public abstract class HexFieldFormatter : HexTextWriter {
///
/// Constructor
///
protected HexFieldFormatter() { }
///
/// Writes an equals sign and optional spaces
///
public abstract void WriteEquals();
///
/// Writes an array name
///
/// Name
public void WriteArray(string name) => Write(name, PredefinedClassifiedTextTags.ArrayName);
///
/// Writes a structure name
///
/// Name
public void WriteStructure(string name) => Write(name, PredefinedClassifiedTextTags.StructureName);
///
/// Writes a field name
///
/// Name
public abstract void WriteField(string name);
///
/// Writes an array field
///
/// Index
public abstract void WriteArrayField(uint index);
///
/// Writes the field at
///
/// Owner structure
/// Position of field within
public abstract void WriteField(ComplexData structure, HexPosition position);
///
/// Writes the field value
///
/// Owner structure
/// Position of field within
public abstract void WriteValue(ComplexData structure, HexPosition position);
///
/// Writes the field and value
///
/// Owner structure
/// Position of field within
public virtual void WriteFieldAndValue(ComplexData structure, HexPosition position) {
WriteField(structure, position);
WriteEquals();
WriteValue(structure, position);
}
///
/// Writes a .NET metadata token
///
/// Token
public abstract void WriteToken(uint token);
///
/// Writes a value
///
/// Value
public abstract void WriteBoolean(bool value);
///
/// Writes a value
///
/// Value
public abstract void WriteChar(char value);
///
/// Writes a value
///
/// Value
public abstract void WriteByte(byte value);
///
/// Writes a value
///
/// Value
public abstract void WriteUInt16(ushort value);
///
/// Writes a 24-bit value
///
/// Value
public abstract void WriteUInt24(uint value);
///
/// Writes a value
///
/// Value
public abstract void WriteUInt32(uint value);
///
/// Writes a value
///
/// Value
public abstract void WriteUInt64(ulong value);
///
/// Writes a value
///
/// Value
public abstract void WriteSByte(sbyte value);
///
/// Writes a value
///
/// Value
public abstract void WriteInt16(short value);
///
/// Writes a value
///
/// Value
public abstract void WriteInt32(int value);
///
/// Writes a value
///
/// Value
public abstract void WriteInt64(long value);
///
/// Writes a value
///
/// Value
public abstract void WriteSingle(float value);
///
/// Writes a value
///
/// Value
public abstract void WriteDouble(double value);
///
/// Writes a value
///
/// Value
public abstract void WriteDecimal(decimal value);
///
/// Writes a value
///
/// Value
public abstract void WriteString(string value);
///
/// Writes flags
///
/// Value
/// Flag infos
public abstract void WriteFlags(ulong value, ReadOnlyCollection infos);
///
/// Writes an enum value
///
/// Value
/// Enum field infos
public abstract void WriteEnum(ulong value, ReadOnlyCollection infos);
///
/// Writes a filename which could contain path separators
///
/// Filename with or without path separators
public abstract void WriteFilename(string filename);
///
/// Writes an unknown value, eg. "???"
///
public abstract void WriteUnknownValue();
}
}