mirror of
https://github.com/AssetRipper/AssetRipper.git
synced 2025-12-11 20:15:29 +01:00
63 lines
2.0 KiB
C#
63 lines
2.0 KiB
C#
using AssetRipper.IO.Files.SerializedFiles;
|
|
|
|
namespace AssetRipper.AssemblyDumper;
|
|
|
|
internal class UniversalNodeComparer
|
|
{
|
|
private const TransferMetaFlags MetaMask = TransferMetaFlags.TreatIntegerValueAsBoolean
|
|
| TransferMetaFlags.AlignBytes
|
|
| TransferMetaFlags.TransferUsingFlowMappingStyle;
|
|
|
|
public static bool Equals(UniversalNode? left, UniversalNode? right, bool root)
|
|
{
|
|
if (left is null || right is null)
|
|
{
|
|
return left is null && right is null;
|
|
}
|
|
if (!root && left.OriginalName != right.OriginalName) //The root nodes will most likely not have the same name
|
|
{
|
|
//Console.WriteLine($"\tInequal because original name {left.OriginalName} doesn't match {right.OriginalName}");
|
|
return false;
|
|
}
|
|
if (!root && left.Name != right.Name) //The root nodes will most likely not have the same name
|
|
{
|
|
//Console.WriteLine($"\tInequal because name {left.Name} doesn't match {right.Name}");
|
|
return false;
|
|
}
|
|
if (left.OriginalTypeName != right.OriginalTypeName)
|
|
{
|
|
//Console.WriteLine($"\tInequal because original type name {left.OriginalTypeName} doesn't match {right.OriginalTypeName}");
|
|
return false;
|
|
}
|
|
if (left.TypeName != right.TypeName)
|
|
{
|
|
//Console.WriteLine($"\tInequal because type name {left.TypeName} doesn't match {right.TypeName}");
|
|
return false;
|
|
}
|
|
if (left.Version != right.Version)
|
|
{
|
|
//Console.WriteLine($"\tInequal because version {left.Version} doesn't match {right.Version}");
|
|
return false;
|
|
}
|
|
if (!root && (left.MetaFlag & MetaMask) != (right.MetaFlag & MetaMask))
|
|
//if (!root && left.MetaFlag != right.MetaFlag)
|
|
{
|
|
//Console.WriteLine($"\tInequal because meta flag {left.MetaFlag} doesn't match {right.MetaFlag}");
|
|
return false;
|
|
}
|
|
if (left.SubNodes!.Count != right.SubNodes!.Count)
|
|
{
|
|
//Console.WriteLine($"\tInequal because subnode count {left.SubNodes.Count} doesn't match {right.SubNodes.Count}");
|
|
return false;
|
|
}
|
|
for (int i = 0; i < left.SubNodes.Count; i++)
|
|
{
|
|
if (!Equals(left.SubNodes[i], right.SubNodes[i], false))
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
}
|