internal void Dump() { Stream input = null; try { if (0 == ResidentHeader.Header.Nonresident) { ResidentHeader.AssertResident(); ResidentHeader.Dump(); input = ResidentHeader.OpenDataStream(); } else { NonResidentHeader.AssertNonResident(); NonResidentHeader.Dump(); input = NonResidentHeader.OpenDataStream(); } int @byte; int bytesOnLine = 0; while (-1 != (@byte = input.ReadByte())) { if (16 <= bytesOnLine++) { Console.WriteLine(); bytesOnLine = 1; } if (1 == bytesOnLine) { Console.Write(Helpers.Indent(1)); } Console.Write("{0:X2} ", @byte); } Console.WriteLine(); } finally { if (null != input) { input.Close(); } } return; }
public virtual void Save(byte[] buffer, int offset) { throw new NotImplementedException(); // Debug.Assert(buffer.Length - offset >= GetSaveLength()); // Debug.Assert(offset >= 0); LittleEndianConverter.GetBytes(buffer, offset, (uint)Type); if (Type == AttributeType.EndOfAttributes) { return; } LittleEndianConverter.GetBytes(buffer, offset + 4, TotalLength); LittleEndianConverter.GetBytes(buffer, offset + 8, (byte)NonResidentFlag); LittleEndianConverter.GetBytes(buffer, offset + 9, NameLength); LittleEndianConverter.GetBytes(buffer, offset + 10, OffsetToName); LittleEndianConverter.GetBytes(buffer, offset + 12, (ushort)Flags); LittleEndianConverter.GetBytes(buffer, offset + 14, Id); if (NameLength != 0) { byte[] stringData = Encoding.Unicode.GetBytes(AttributeName); // Debug.Assert(NameLength * 2 == stringData.Length); Array.Copy(stringData, 0, buffer, offset + OffsetToName, stringData.Length); } // Header if (NonResidentFlag == ResidentFlag.NonResident) { NonResidentHeader.Save(buffer, offset + 16); } else if (NonResidentFlag == ResidentFlag.Resident) { ResidentHeader.Save(buffer, offset + 16); } }
public virtual int GetSaveLength() { throw new NotImplementedException(); if (Type == AttributeType.EndOfAttributes) { return(4); } int length = 16 + NameLength * 2; if (NonResidentFlag == ResidentFlag.NonResident) { length += NonResidentHeader.GetSaveLength(); } else if (NonResidentFlag == ResidentFlag.Resident) { length += ResidentHeader.GetSaveLength(); } return(length); }