Example #1
0
        public static RecursiveDictionary <TSource> WhereRecursive <TSource>(this RecursiveDictionary <TSource> dictionary,
                                                                             Func <TSource, bool> predicate)
        {
            if (dictionary.IsDefault())
            {
                return(default(RecursiveDictionary <TSource>));
            }
            return(dictionary
                   .Select(
                       kvp =>
            {
                var next = kvp.Value.WhereRecursive(predicate);

                // Said more clearly, if the predicate is false, AND no children were returned
                // just return an empty or null set (written backwards so the predicate is not called
                // if child values DO EXIST since that would orphan them in the tree).
                var childValuesDoNotExists = next.IsDefault() || (!next.Any());
                if (childValuesDoNotExists && (!predicate(kvp.Key)))
                {
                    return default(KeyValuePair <TSource, RecursiveDictionary <TSource> >?);
                }

                return kvp.Key.PairWithValue(next);
            })
                   .SelectWhereHasValue()
                   .AsRecursive());
        }
Example #2
0
        public static void Execute()
        {
            Stopwatch timer = new Stopwatch();

            timer.Start();
            RestClient client = new RestClient("https://psychonautwiki.org");

            timer.Stop();
            Console.WriteLine("Request \t\t: " + timer.ElapsedMilliseconds.ToString());
            timer.Restart();
            string effectIndex = client.Execute(new RestRequest("/wiki/Subjective_effect_index", Method.GET)).Content;
            int    indexTemp   = effectIndex.IndexOf(">contributors</a>.");

            effectIndex = effectIndex.Substring(indexTemp, effectIndex.IndexOf(">See also<") - indexTemp);
            timer.Stop();
            Console.WriteLine("Setup \t\t: " + timer.ElapsedMilliseconds.ToString());
            timer.Restart();

            RecursiveDictionary <RecursiveDictionaryValue> headers = new RecursiveDictionary <RecursiveDictionaryValue>(effectIndex, HTMLContent.ListElements);

            timer.Stop();
            Console.WriteLine("Initialization\t: " + timer.ElapsedMilliseconds.ToString());
            timer.Restart();
            File.WriteAllText(
                @"E:\Nootropics\Psychonauts\EffectsCategories.txt",
                "{" + (headers.Count == 1 ? headers.Single().Value.Serialize() : headers.Serialize()) + "}"
                );
            Console.WriteLine("Serialization\t: " + timer.ElapsedMilliseconds.ToString());
        }
Example #3
0
 public static RecursiveDictionary <TKey, TValue> AddIfMissing <TKey, TValue>(this RecursiveDictionary <TKey, TValue> dictionary, TKey key, TValue value)
 {
     if (dictionary.ContainsKey(key))
     {
         return(dictionary);
     }
     return(dictionary.Add(key, value));
 }
Example #4
0
        public static RecursiveDictionary <TKey, TValue> Add <TKey, TValue>(this RecursiveDictionary <TKey, TValue> dictionary, TKey key, TValue value)
        {
            var next = new RecursiveDictionary <TKey, TValue>();

            next.Value = value;
            dictionary.Add(key, next);
            return(dictionary);
        }
Example #5
0
 public static IEnumerable <T> Bottom <T>(this RecursiveDictionary <T> dictionary)
 {
     return(dictionary
            .SelectMany(n =>
                        n.Value.IsDefault()?
                        n.Key.AsEnumerable()
             :
                        n.Value.Bottom()));
 }
Example #6
0
        public static RecursiveDictionary <T> AsRecursive <T>(this IEnumerable <KeyValuePair <T, RecursiveDictionary <T> > > kvps)
        {
            var recursive = new RecursiveDictionary <T>();

            foreach (var kvp in kvps)
            {
                recursive.Add(kvp.Key, kvp.Value);
            }
            return(recursive);
        }
Example #7
0
        public static RecursiveDictionary <T> AsRecursive <T>(this IDictionary <T, RecursiveDictionary <T> > dictionary)
        {
            var recursive = new RecursiveDictionary <T>();

            foreach (var kvp in dictionary)
            {
                recursive.Add(kvp.Key, kvp.Value);
            }
            return(recursive);
        }
Example #8
0
 public static IEnumerable <T> Flatten <T>(this RecursiveDictionary <T> dictionary)
 {
     return(dictionary
            .SelectMany(
                kvp =>
     {
         if (kvp.Value.IsDefault())
         {
             return new T[] { kvp.Key }
         }
         ;
         return kvp.Value.Flatten().Append(kvp.Key);
     }));
 }
Example #9
0
        public static RecursiveDictionary <TKey> AddWithRecursion <TKey>(this RecursiveDictionary <TKey> dictionary,
                                                                         TKey key,
                                                                         Action <TKey, Action <TKey> > callback)
        {
            if (dictionary.ContainsKey(key))
            {
                return(dictionary);
            }
            dictionary.Add(key, new RecursiveDictionary <TKey>());
            var x = dictionary[key];

            x.WithRecursion(key, callback);
            return(dictionary);
        }
Example #10
0
 private static void WithRecursion <TKey, TValue>(this RecursiveDictionary <TKey, TValue> dictionary,
                                                  Action <RecursiveDictionary <TKey, TValue>, Action <TKey, TValue> > callback)
 {
     callback(dictionary,
              (key, value) => dictionary.AddWithRecursion(key, value, callback));
 }
Example #11
0
        public static RecursiveDictionary <TKey, TValue> AddWithRecursion <TKey, TValue>(this RecursiveDictionary <TKey, TValue> dictionary,
                                                                                         TKey key, TValue value,
                                                                                         Action <RecursiveDictionary <TKey, TValue>, Action <TKey, TValue> > callback)
        {
            if (dictionary.ContainsKey(key))
            {
                return(dictionary);
            }
            dictionary.Add(key, value);
            var x = dictionary[key];

            x.WithRecursion(callback);
            return(dictionary);
        }
Example #12
0
 private static void WithRecursion <TKey>(this RecursiveDictionary <TKey> dictionary, TKey added,
                                          Action <TKey, Action <TKey> > callback)
 {
     callback(added,
              (key) => dictionary.AddWithRecursion(key, callback));
 }
Example #13
0
        private static RecursiveDictionary <TResult> SelectRecursive_ <TSource, TResult>(int depth,
                                                                                         TSource parent, TResult parentResult,
                                                                                         RecursiveDictionary <TSource> dictionary,
                                                                                         SelectRecursiveDelegate <TSource, TResult> selector)
        {
            var parentKvp = parent.PairWithValue(parentResult);
            var value     = dictionary
                            .Aggregate(
                new KeyValuePair <
                    KeyValuePair <TResult, RecursiveDictionary <TResult> >,
                    KeyValuePair <TSource, TResult> >[] { },
                (left, v) =>
            {
                var result = selector(depth, parentKvp,
                                      left.SelectValues().ToArray(),
                                      v.Key);
                var subset    = SelectRecursive_(depth + 1, v.Key, result, v.Value, selector);
                var resultSet = result.PairWithValue(subset);
                return(left.Append(resultSet.PairWithValue(v.Key.PairWithValue(result))).ToArray());
            })
                            .SelectKeys()
                            .AsRecursive();

            return(value);
        }
Example #14
0
 public static RecursiveDictionary <TResult> SelectRecursive <TSource, TResult>(this RecursiveDictionary <TSource> dictionary,
                                                                                SelectRecursiveDelegate <TSource, TResult> selector)
 {
     if (dictionary.IsDefault())
     {
         return(default(RecursiveDictionary <TResult>));
     }
     return(SelectRecursive_(0,
                             default(TSource), default(TResult),
                             dictionary,
                             selector));
 }
Example #15
0
 public static RecursiveDictionary <TResult> SelectRecursive <TSource, TResult>(this RecursiveDictionary <TSource> dictionary,
                                                                                Func <TSource, TResult> selector)
 {
     if (dictionary.IsDefault())
     {
         return(default(RecursiveDictionary <TResult>));
     }
     return(dictionary
            .Select(
                kvp =>
     {
         return selector(kvp.Key)
         .PairWithValue(
             //kvp.Value.IsDefault()?
             //    default(RecursiveDictionary<TResult>)
             //:
             kvp.Value.SelectRecursive(selector));
     })
            .AsRecursive());
 }