/// <summary> /// Track purchases to generate set-generation information. /// </summary> private void TrackPurchases(List <ItemPurchaseInformation> purchases) { purchases.ForEach(purchase => { if (purchase.EventType != EventType.ItemPurchased) { return; } // Update the tracker ItemPurchases.AddOrUpdate(purchase.ItemId, id => { var tracker = new ItemPurchaseTracker(id); tracker.Increment(purchase); return(tracker); }, (id, tracker) => { tracker.Increment(purchase); return(tracker); } ); }); }
public ItemPurchaseTracker Clone() { ItemPurchaseTracker tracker = new ItemPurchaseTracker(ItemId); PerMatchCounts.AsParallel().ForAll(kvp => tracker.PerMatchCounts.TryAdd(kvp.Key, kvp.Value.Clone())); return(tracker); }
public static ItemPurchaseTracker Combine(ItemPurchaseTracker a, ItemPurchaseTracker b) { ItemPurchaseTracker tracker = new ItemPurchaseTracker(a.ItemId); lock (a.PerMatchCounts) { lock (b.PerMatchCounts) { a.PerMatchCounts.AsParallel().ForAll(kvp => tracker.PerMatchCounts.TryAdd(kvp.Key, kvp.Value.Clone())); b.PerMatchCounts.AsParallel().ForAll(kvp => tracker.PerMatchCounts.AddOrUpdate(kvp.Key, key => kvp.Value.Clone(), (key, value) => { value.Combine(kvp.Value); return value; } ) ); } } return tracker; }
public static ItemPurchaseTracker Combine(ItemPurchaseTracker a, ItemPurchaseTracker b) { ItemPurchaseTracker tracker = new ItemPurchaseTracker(a.ItemId); lock (a.PerMatchCounts) { lock (b.PerMatchCounts) { a.PerMatchCounts.AsParallel().ForAll(kvp => tracker.PerMatchCounts.TryAdd(kvp.Key, kvp.Value.Clone())); b.PerMatchCounts.AsParallel().ForAll(kvp => tracker.PerMatchCounts.AddOrUpdate(kvp.Key, key => kvp.Value.Clone(), (key, value) => { value.Combine(kvp.Value); return(value); } ) ); } } return(tracker); }
public ItemPurchaseTracker Combine(ItemPurchaseTracker other) { return ItemPurchaseTracker.Combine(this, other); }
public ItemPurchaseTracker Clone() { ItemPurchaseTracker tracker = new ItemPurchaseTracker(ItemId); PerMatchCounts.AsParallel().ForAll(kvp => tracker.PerMatchCounts.TryAdd(kvp.Key, kvp.Value.Clone())); return tracker; }
public ItemPurchaseTracker Combine(ItemPurchaseTracker other) { return(ItemPurchaseTracker.Combine(this, other)); }