1 /* 2 * [The "BSD licence"] 3 * Copyright (c) 2005-2008 Terence Parr 4 * All rights reserved. 5 * 6 * Conversion to C#: 7 * Copyright (c) 2008 Sam Harwell, Pixel Mine, Inc. 8 * All rights reserved. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 3. The name of the author may not be used to endorse or promote products 19 * derived from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 22 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 23 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 24 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 25 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 26 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 30 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 using System; 34 using System.Collections.Generic; 35 //#if DEBUG 36 //using System.Linq; 37 //#endif 38 39 using IDictionary = System.Collections.IDictionary; 40 41 namespace Antlr.Runtime.JavaExtensions { 42 public static class DictionaryExtensions { 43 #if DEBUG 44 [Obsolete] containsKey(IDictionary map, object key)45 public static bool containsKey(IDictionary map, object key) { 46 return map.Contains(key); 47 } 48 49 [Obsolete] get(IDictionary map, object key)50 public static object get(IDictionary map, object key) { 51 return map[key]; 52 } 53 #endif 54 get(IDictionary<TKey, TValue> map, TKey key)55 public static TValue get<TKey, TValue>(IDictionary<TKey, TValue> map, TKey key) { 56 TValue value; 57 if (map.TryGetValue(key, out value)) 58 return value; 59 60 if (typeof(TValue).IsValueType) 61 throw new KeyNotFoundException(); 62 63 return default(TValue); 64 } 65 66 // disambiguates get(Dictionary<TKey, TValue> map, TKey key)67 public static TValue get<TKey, TValue>(Dictionary<TKey, TValue> map, TKey key) { 68 TValue value; 69 if (map.TryGetValue(key, out value)) 70 return value; 71 72 if (typeof(TValue).IsValueType) 73 throw new KeyNotFoundException(); 74 75 return default(TValue); 76 } 77 get(SortedList<TKey, TValue> map, TKey key)78 public static TValue get<TKey, TValue>(SortedList<TKey, TValue> map, TKey key) { 79 TValue value; 80 if (map.TryGetValue(key, out value)) 81 return value; 82 83 if (typeof(TValue).IsValueType) 84 throw new KeyNotFoundException(); 85 86 return default(TValue); 87 } 88 89 #if DEBUG 90 [Obsolete] put(IDictionary map, object key, object value)91 public static void put(IDictionary map, object key, object value) { 92 map[key] = value; 93 } 94 95 [Obsolete] put(IDictionary<TKey, TValue> map, TKey key, TValue value)96 public static void put<TKey, TValue>(IDictionary<TKey, TValue> map, TKey key, TValue value) { 97 map[key] = value; 98 } 99 100 [Obsolete] put(Dictionary<TKey, TValue> map, TKey key, TValue value)101 public static void put<TKey, TValue>(Dictionary<TKey, TValue> map, TKey key, TValue value) { 102 map[key] = value; 103 } 104 #if FALSE 105 [Obsolete] keySet(IDictionary map)106 public static HashSet<object> keySet(IDictionary map) { 107 return new HashSet<object>(map.Keys.Cast<object>()); 108 } 109 110 [Obsolete] keySet(IDictionary<TKey, TValue> map)111 public static HashSet<TKey> keySet<TKey, TValue>(IDictionary<TKey, TValue> map) { 112 return new HashSet<TKey>(map.Keys); 113 } 114 115 // disambiguates for Dictionary, which implements both IDictionary<T,K> and IDictionary 116 [Obsolete] keySet(Dictionary<TKey, TValue> map)117 public static HashSet<TKey> keySet<TKey, TValue>(Dictionary<TKey, TValue> map) { 118 return new HashSet<TKey>(map.Keys); 119 } 120 121 [Obsolete] keySet(SortedList<TKey, TValue> map)122 public static HashSet<object> keySet<TKey, TValue>(SortedList<TKey, TValue> map) { 123 return new HashSet<object>(map.Keys.Cast<object>()); 124 } 125 #endif 126 #endif 127 } 128 } 129