Example #1
0
        /// <summary>
        /// Add an element to the tree respecting a size limit
        /// </summary>
        /// <param name="results"> the tree to add in </param>
        /// <param name="result"> the result we try to add </param>
        /// <param name="num"> size limit </param>
        private static void BoundedTreeAdd(JCG.SortedSet <Lookup.LookupResult> results, Lookup.LookupResult result, int num)
        {
            if (results.Count >= num)
            {
                if (results.Min.Value < result.Value)
                {
                    lock (syncLock)
                    {
                        if (results.Min.Value < result.Value)
                        {
                            // Code similar to the java TreeMap class
                            var entry = results.FirstOrDefault();
                            if (entry != null)
                            {
                                results.Remove(entry);
                            }
                        }
                        else
                        {
                            return;
                        }
                    }
                }
                else
                {
                    return;
                }
            }

            results.Add(result);
        }
Example #2
0
        /// <summary>
        /// Add an element to the tree respecting a size limit
        /// </summary>
        /// <param name="results"> the tree to add in </param>
        /// <param name="result"> the result we try to add </param>
        /// <param name="num"> size limit </param>
        private static void BoundedTreeAdd(JCG.SortedSet <Lookup.LookupResult> results, Lookup.LookupResult result, int num)
        {
            if (results.Count >= num)
            {
                var first = results.Min; // "get" our first object so we don't cross threads
                if (first.Value < result.Value)
                {
                    // Code similar to the java TreeMap class
                    results.Remove(first);
                }
                else
                {
                    return;
                }
            }

            results.Add(result);
        }