private void AddSizeBasedDeltas()

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);
                }
            }
        }
    }