private static void SubtractTokens(TokenPredictorDatabase accumulator, TokenPredictorDatabase subtractive) { var expired = default(List <int>); foreach (var pair in subtractive) { var info = accumulator.GetValue(pair.Key); if (0 < accumulator.DecrementCount(info, pair.Value.Count)) { var subtractiveChlidren = pair.Value.TryGetChildren(); if (subtractiveChlidren != null) { SubtractTokens(info.GetChildren(), subtractiveChlidren); } } else { Debug.Assert(info.Count == 0); if (expired == null) { expired = new List <int>(); } expired.Add(pair.Key); } } if (expired != null) { foreach (var token in expired) { accumulator.Remove(token); } } }
private static void AddTokens(TokenPredictorDatabase accumulator, TokenPredictorDatabase additive) { foreach (var pair in additive) { var info = accumulator.GetValue(pair.Key); accumulator.IncrementCount(info, pair.Value.Count); var additiveChlidren = pair.Value.TryGetChildren(); if (additiveChlidren != null) { AddTokens(info.GetChildren(), additiveChlidren); } } }