private static bool Equal <T>(TableSnapshot <T> x, TableSnapshot <T> y) where T : struct { return(ProjectTester.EqualCount(x, y) && x.Zip(y, (RowId xr, RowId yr) => { T xd, yd; x.GetData(xr, out xd); y.GetData(yr, out yd); foreach (IField <T> field in x.Fields) { if (field.Compare(ref xd, ref yd) != 0) { return false; } } return true; }).All(r => r)); }
// Saves the table private static void SaveRecords <TRecord>(XmlWriter writer, TableSnapshot <TRecord> table) where TRecord : struct { foreach (RowId rowId in table.Rows) { TRecord data; table.GetData(rowId, out data); writer.WriteStartElement(table.Name, CircuitProject.PersistenceNamespace); foreach (IField <TRecord> field in table.Fields) { if (field is IFieldSerializer <TRecord> serializer && serializer.NeedToSave(ref data)) { writer.WriteStartElement(field.Name, CircuitProject.PersistenceNamespace); writer.WriteString(serializer.GetTextValue(ref data)); writer.WriteEndElement(); } } writer.WriteEndElement(); } }