示例#1
0
        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);
                }
            }
        }
示例#2
0
        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);
                }
            }
        }