/* 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(); } }