void WriteLine(BinaryWriter writer, Line line) { writer.Write(line.Id); writer.Write((uint)line.Type); if (line.Type == LineType.spanning) { WriteList <int>(writer, (line as SpanningLine).Blocks, delegate(BinaryWriter w, int u) { w.Write(u); }); } else { BasicLine basicLine = line as BasicLine; writer.Write(basicLine.Priority); if (basicLine is RelativeLine) { writer.Write((basicLine as RelativeLine).RelativeTo); } writer.Write(basicLine.Shape); writer.Write(basicLine.Spacing); writer.Write(basicLine.Crescent_Y_Offset); writer.Write(basicLine.X); writer.Write(basicLine.Y); writer.Write(basicLine.MinThreshold); writer.Write(basicLine.MaxThreshold); WriteList(writer, basicLine.PriorityClassPairs, WritePriorityClassPair); } }
Line ReadLine(BinaryReader reader) { Line line; int id = reader.ReadInt32(); LineType lineType = (LineType)reader.ReadUInt32(); //Console.WriteLine("reading line type {0} at {1}", lineType, reader.BaseStream.Position); if (lineType == LineType.spanning) { line = new SpanningLine { Blocks = ReadList <int>(reader, delegate(BinaryReader r) { return(r.ReadInt32()); }) }; } else if (lineType == LineType.absolute || lineType == LineType.relative) { BasicLine basicLine = (lineType == LineType.absolute) ? new BasicLine() : new RelativeLine(); basicLine.Priority = reader.ReadSingle(); if (lineType == LineType.relative) { (basicLine as RelativeLine).RelativeTo = reader.ReadUInt32(); } basicLine.Shape = reader.ReadInt32(); basicLine.Spacing = reader.ReadSingle(); basicLine.Crescent_Y_Offset = reader.ReadSingle(); basicLine.X = reader.ReadSingle(); basicLine.Y = reader.ReadSingle(); basicLine.MinThreshold = reader.ReadInt32(); basicLine.MaxThreshold = reader.ReadInt32(); basicLine.PriorityClassPairs = ReadList <PriorityClassPair>(reader, ReadPriorityClassPair); line = basicLine; } else { throw new InvalidDataException("unknown line type " + lineType); } line.Id = id; return(line); }