private void LoadChanged(SCBlockAccessor s1, SCBlockAccessor s2, IEnumerable <uint> shared) { foreach (var k in shared) { var x1 = s1.GetBlock(k); var x2 = s2.GetBlock(k); var name = GetKeyName(x1.Key); if (x1.Type != x2.Type) { TypesChanged.Add($"{name} - {x1.Type} => {x2.Type}"); continue; } if (x1.Data.Length != x2.Data.Length) { ValueChanged.Add($"{name} - Length: {x1.Data.Length} => {x2.Data.Length}"); continue; } if (x1.Data.Length == 0) { continue; } if (x1.Type == SCTypeCode.Object || x1.Type == SCTypeCode.Array) { if (!x1.Data.SequenceEqual(x2.Data)) { ValueChanged.Add($"{name} - Bytes Changed"); } continue; } var val1 = x1.GetValue(); var val2 = x2.GetValue(); if (Equals(val1, val2)) { continue; } if (val1 is ulong u1 && val2 is ulong u2) { ValueChanged.Add($"{name} - {u1:X8} => {u2:x8}"); }
private void LoadAddRemove(SCBlockAccessor s1, SCBlockAccessor s2, ICollection <uint> hs1, IEnumerable <uint> hs2) { var unique = new HashSet <uint>(hs1); unique.SymmetricExceptWith(hs2); foreach (var k in unique) { var name = GetKeyName(k); if (hs1.Contains(k)) { var b = s1.GetBlock(k); RemovedKeys.Add($"{name} - {b.Type}"); } else { var b = s2.GetBlock(k); AddedKeys.Add($"{name} - {b.Type}"); } } }
public SCBlockCompare(SCBlockAccessor s1, SCBlockAccessor s2) { var b1 = s1.BlockInfo; var b2 = s2.BlockInfo; var names = GetKeyNames(s1, b1, b2); string GetKeyName(uint key) => names.TryGetValue(key, out var val) ? val : $"{key:X8}"; var hs1 = new HashSet <uint>(b1.Select(z => z.Key)); var hs2 = new HashSet <uint>(b2.Select(z => z.Key)); var unique = new HashSet <uint>(hs1); unique.SymmetricExceptWith(hs2); foreach (var k in unique) { var name = GetKeyName(k); if (hs1.Contains(k)) { var b = s1.GetBlock(k); RemovedKeys.Add($"{name} - {b.Type}"); } else { var b = s2.GetBlock(k); AddedKeys.Add($"{name} - {b.Type}"); } } hs1.IntersectWith(hs2); foreach (var k in hs1) { var x1 = s1.GetBlock(k); var x2 = s2.GetBlock(k); var name = GetKeyName(x1.Key); if (x1.Type != x2.Type) { TypesChanged.Add($"{name} - {x1.Type} => {x2.Type}"); continue; } if (x1.Data.Length != x2.Data.Length) { ValueChanged.Add($"{name} - Length: {x1.Data.Length} => {x2.Data.Length}"); continue; } if (x1.Data.Length == 0) { continue; } if (x1.Type == SCTypeCode.Object || x1.Type == SCTypeCode.Array) { if (!x1.Data.SequenceEqual(x2.Data)) { ValueChanged.Add($"{name} - Bytes Changed"); } continue; } var val1 = x1.GetValue(); var val2 = x2.GetValue(); if (Equals(val1, val2)) { continue; } if (val1 is ulong u1 && val2 is ulong u2) { ValueChanged.Add($"{name} - {u1:X8} => {u2:x8}"); }