wasSharp – Diff between revs 20 and 24

Subversion Repositories:
Rev:
Only display areas with differencesIgnore whitespace
Rev 20 Rev 24
1 /////////////////////////////////////////////////////////////////////////// 1 ///////////////////////////////////////////////////////////////////////////
2 // Copyright (C) Wizardry and Steamworks 2013 - License: GNU GPLv3 // 2 // Copyright (C) Wizardry and Steamworks 2013 - License: GNU GPLv3 //
3 // Please see: http://www.gnu.org/licenses/gpl.html for legal details, // 3 // Please see: http://www.gnu.org/licenses/gpl.html for legal details, //
4 // rights of fair usage, the disclaimer and warranty conditions. // 4 // rights of fair usage, the disclaimer and warranty conditions. //
5 /////////////////////////////////////////////////////////////////////////// 5 ///////////////////////////////////////////////////////////////////////////
6   6  
7 using System; 7 using System;
8 using System.Collections.Generic; 8 using System.Collections.Generic;
9 using System.Linq; 9 using System.Linq;
10 using wasSharp.Collections.Specialized; 10 using wasSharp.Collections.Specialized;
11   11  
12 namespace wasSharp.Collections.Utilities 12 namespace wasSharp.Collections.Utilities
13 { 13 {
14 public static class CollectionExtensions 14 public static class CollectionExtensions
15 { 15 {
16 /// <summary> 16 /// <summary>
17 /// Compares two dictionaries for equality. 17 /// Compares two dictionaries for equality.
18 /// </summary> 18 /// </summary>
19 /// <typeparam name="TKey">key type</typeparam> 19 /// <typeparam name="TKey">key type</typeparam>
20 /// <typeparam name="TValue">value type</typeparam> 20 /// <typeparam name="TValue">value type</typeparam>
21 /// <param name="dictionary">dictionary to compare</param> 21 /// <param name="dictionary">dictionary to compare</param>
22 /// <param name="otherDictionary">dictionary to compare to</param> 22 /// <param name="otherDictionary">dictionary to compare to</param>
23 /// <returns>true if the dictionaries contain the same elements</returns> 23 /// <returns>true if the dictionaries contain the same elements</returns>
24 public static bool ContentEquals<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, 24 public static bool ContentEquals<TKey, TValue>(this IDictionary<TKey, TValue> dictionary,
25 IDictionary<TKey, TValue> otherDictionary) 25 IDictionary<TKey, TValue> otherDictionary)
26 { 26 {
27 return 27 return
28 (dictionary ?? new Dictionary<TKey, TValue>()).Count.Equals( 28 (dictionary ?? new Dictionary<TKey, TValue>()).Count.Equals(
29 (otherDictionary ?? new Dictionary<TKey, TValue>()).Count) && 29 (otherDictionary ?? new Dictionary<TKey, TValue>()).Count) &&
30 (otherDictionary ?? new Dictionary<TKey, TValue>()) 30 (otherDictionary ?? new Dictionary<TKey, TValue>())
31 .OrderBy(kvp => kvp.Key) 31 .OrderBy(kvp => kvp.Key)
32 .SequenceEqual((dictionary ?? new Dictionary<TKey, TValue>()) 32 .SequenceEqual((dictionary ?? new Dictionary<TKey, TValue>())
33 .OrderBy(kvp => kvp.Key)); 33 .OrderBy(kvp => kvp.Key));
34 } 34 }
-   35  
-   36 public static void UnionWith<TKey, TValue>(this IDictionary<TKey, TValue> target,
-   37 IDictionary<TKey, TValue> source)
-   38 {
-   39 var LockObject = new object();
-   40 source.AsParallel().ForAll(o =>
-   41 {
-   42 bool hasElement;
-   43 lock (LockObject)
-   44 {
-   45 hasElement = target.ContainsKey(o.Key);
-   46 }
-   47 switch (hasElement)
-   48 {
-   49 case true:
-   50 lock (LockObject)
-   51 {
-   52 target[o.Key] = o.Value;
-   53 }
-   54 break;
-   55 default:
-   56 lock (LockObject)
-   57 {
-   58 target.Add(o.Key, o.Value);
-   59 }
-   60 break;
-   61 }
-   62 });
-   63 }
35   64  
36 public static void AddOrReplace<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, TValue value) 65 public static void AddOrReplace<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, TValue value)
37 { 66 {
38 switch (dictionary.ContainsKey(key)) 67 switch (dictionary.ContainsKey(key))
39 { 68 {
40 case true: 69 case true:
41 dictionary[key] = value; 70 dictionary[key] = value;
42 break; 71 break;
43 default: 72 default:
44 dictionary.Add(key, value); 73 dictionary.Add(key, value);
45 break; 74 break;
46 } 75 }
47 } 76 }
48   77  
-   78 public static void AddIfNotExists<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key,
49 public static void AddIfNotExists<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, TValue value) 79 TValue value)
50 { 80 {
51 switch (!dictionary.ContainsKey(key)) 81 switch (!dictionary.ContainsKey(key))
52 { 82 {
53 case true: 83 case true:
54 dictionary.Add(key, value); 84 dictionary.Add(key, value);
55 break; 85 break;
56 } 86 }
57 } 87 }
58   88  
-   89 public static MultiKeyDictionary<K1, K2, V> ToMultiKeyDictionary<S, K1, K2, V>(this IEnumerable<S> items,
59 public static MultiKeyDictionary<K1, K2, V> ToMultiKeyDictionary<S, K1, K2, V>(this IEnumerable<S> items, Func<S, K1> key1, Func<S, K2> key2, Func<S, V> value) 90 Func<S, K1> key1, Func<S, K2> key2, Func<S, V> value)
60 { 91 {
61 var dict = new MultiKeyDictionary<K1, K2, V>(); 92 var dict = new MultiKeyDictionary<K1, K2, V>();
62 foreach (S i in items) 93 foreach (var i in items)
63 { 94 {
64 dict.Add(key1(i), key2(i), value(i)); 95 dict.Add(key1(i), key2(i), value(i));
65 } 96 }
66 return dict; 97 return dict;
67 } 98 }
68 } 99 }
69 } 100 }
70   101  
71
Generated by GNU Enscript 1.6.5.90.
102
Generated by GNU Enscript 1.6.5.90.
72   103  
73   104  
74   105