wasSharp – Blame information for rev 54

Subversion Repositories:
Rev:
Rev Author Line No. Line
18 office 1 ///////////////////////////////////////////////////////////////////////////
2 // Copyright (C) Wizardry and Steamworks 2013 - License: GNU GPLv3 //
3 // Please see: http://www.gnu.org/licenses/gpl.html for legal details, //
4 // rights of fair usage, the disclaimer and warranty conditions. //
5 ///////////////////////////////////////////////////////////////////////////
6  
20 office 7 using System;
18 office 8 using System.Collections.Generic;
9 using System.Linq;
45 office 10 using System.Threading;
20 office 11 using wasSharp.Collections.Specialized;
18 office 12  
13 namespace wasSharp.Collections.Utilities
14 {
15 public static class CollectionExtensions
16 {
17 /// <summary>
18 /// Compares two dictionaries for equality.
19 /// </summary>
20 /// <typeparam name="TKey">key type</typeparam>
21 /// <typeparam name="TValue">value type</typeparam>
22 /// <param name="dictionary">dictionary to compare</param>
23 /// <param name="otherDictionary">dictionary to compare to</param>
24 /// <returns>true if the dictionaries contain the same elements</returns>
25 public static bool ContentEquals<TKey, TValue>(this IDictionary<TKey, TValue> dictionary,
26 IDictionary<TKey, TValue> otherDictionary)
27 {
28 return
54 office 29 (dictionary ?? new Dictionary<TKey, TValue>()).Count().Equals(
30 (otherDictionary ?? new Dictionary<TKey, TValue>()).Count()) &&
18 office 31 (otherDictionary ?? new Dictionary<TKey, TValue>())
32 .OrderBy(kvp => kvp.Key)
33 .SequenceEqual((dictionary ?? new Dictionary<TKey, TValue>())
34 .OrderBy(kvp => kvp.Key));
35 }
36  
37 public static void AddOrReplace<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, TValue value)
38 {
39 switch (dictionary.ContainsKey(key))
40 {
41 case true:
42 dictionary[key] = value;
43 break;
27 office 44  
18 office 45 default:
46 dictionary.Add(key, value);
47 break;
48 }
49 }
50  
24 office 51 public static void AddIfNotExists<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key,
52 TValue value)
18 office 53 {
54 switch (!dictionary.ContainsKey(key))
55 {
56 case true:
57 dictionary.Add(key, value);
58 break;
59 }
60 }
20 office 61  
54 office 62 public static ConcurrentMultiKeyDictionary<K1, K2, V> ToMultiKeyDictionary<S, K1, K2, V>(this IEnumerable<S> items,
24 office 63 Func<S, K1> key1, Func<S, K2> key2, Func<S, V> value)
20 office 64 {
54 office 65 var dict = new ConcurrentMultiKeyDictionary<K1, K2, V>();
24 office 66 foreach (var i in items)
20 office 67 {
68 dict.Add(key1(i), key2(i), value(i));
69 }
70 return dict;
71 }
18 office 72 }
27 office 73 }