in src/managed/DiffGen/DiffGeneration/Workers/SelectItemsForDelta.cs [142:202]
private void AddSizeBasedDeltas(HashSet<ItemDefinition> neededItems)
{
Dictionary<ulong, HashSet<ItemDefinition>> sourceItemsBySize = new();
// build index of items with recipes by size from source
foreach (var recipe in SourceTokens.Recipes)
{
var result = recipe.Result;
if (!sourceItemsBySize.ContainsKey(result.Length))
{
sourceItemsBySize.Add(result.Length, new());
}
sourceItemsBySize[result.Length].Add(result);
}
foreach (var needed in neededItems)
{
if (needed.Length < 256)
{
continue;
}
if (DeltaPlans.HasPlan(needed))
{
continue;
}
if (sourceItemsBySize.ContainsKey(needed.Length))
{
bool matched = false;
foreach (var sourceItem in sourceItemsBySize[needed.Length])
{
if (AnyMatchingNames(needed, sourceItem))
{
matched = true;
var plan = new DeltaPlan(sourceItem, needed, string.Empty, false);
DeltaPlans.AddDeltaPlan(needed, plan);
TargetItemsNeeded.Add(needed);
SourceItemsNeeded.Add(sourceItem);
break;
}
}
if (matched)
{
continue;
}
foreach (var sourceItem in sourceItemsBySize[needed.Length])
{
var plan = new DeltaPlan(sourceItem, needed, string.Empty, false);
DeltaPlans.AddDeltaPlan(needed, plan);
TargetItemsNeeded.Add(needed);
SourceItemsNeeded.Add(sourceItem);
}
}
}
}