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 namespace Antlr.Runtime.JavaExtensions 34 { 35 using System.Collections.Generic; 36 using System.Linq; 37 38 using IDictionary = System.Collections.IDictionary; 39 using ObsoleteAttribute = System.ObsoleteAttribute; 40 41 public static class DictionaryExtensions 42 { 43 [Obsolete] 44 public static bool containsKey( this IDictionary map, object key ) 45 { 46 return map.Contains( key ); 47 } 48 49 [Obsolete] 50 public static object get( this IDictionary map, object key ) 51 { 52 return map[key]; 53 } 54 55 public static TValue get<TKey, TValue>( this IDictionary<TKey, TValue> map, TKey key ) 56 { 57 TValue value; 58 if ( map.TryGetValue( key, out value ) ) 59 return value; 60 61 if ( typeof( TValue ).IsValueType ) 62 throw new KeyNotFoundException(); 63 64 return default( TValue ); 65 } 66 67 // disambiguates 68 public static TValue get<TKey, TValue>( this Dictionary<TKey, TValue> map, TKey key ) 69 { 70 TValue value; 71 if ( map.TryGetValue( key, out value ) ) 72 return value; 73 74 if ( typeof( TValue ).IsValueType ) 75 throw new KeyNotFoundException(); 76 77 return default( TValue ); 78 } 79 80 public static TValue get<TKey, TValue>( this SortedList<TKey, TValue> map, TKey key ) 81 { 82 TValue value; 83 if ( map.TryGetValue( key, out value ) ) 84 return value; 85 86 if ( typeof( TValue ).IsValueType ) 87 throw new KeyNotFoundException(); 88 89 return default( TValue ); 90 } 91 92 [Obsolete] 93 public static void put( this IDictionary map, object key, object value ) 94 { 95 map[key] = value; 96 } 97 98 [Obsolete] 99 public static void put<TKey, TValue>( this IDictionary<TKey, TValue> map, TKey key, TValue value ) 100 { 101 map[key] = value; 102 } 103 104 [Obsolete] 105 public static void put<TKey, TValue>( this Dictionary<TKey, TValue> map, TKey key, TValue value ) 106 { 107 map[key] = value; 108 } 109 110 [Obsolete] 111 public static HashSet<object> keySet( this IDictionary map ) 112 { 113 return new HashSet<object>( map.Keys.Cast<object>() ); 114 } 115 116 [Obsolete] 117 public static HashSet<TKey> keySet<TKey, TValue>( this IDictionary<TKey, TValue> map ) 118 { 119 return new HashSet<TKey>( map.Keys ); 120 } 121 122 // disambiguates for Dictionary, which implements both IDictionary<T,K> and IDictionary 123 [Obsolete] 124 public static HashSet<TKey> keySet<TKey, TValue>( this Dictionary<TKey, TValue> map ) 125 { 126 return new HashSet<TKey>( map.Keys ); 127 } 128 129 [Obsolete] 130 public static HashSet<object> keySet<TKey, TValue>( this SortedList<TKey, TValue> map ) 131 { 132 return new HashSet<object>( map.Keys.Cast<object>() ); 133 } 134 } 135 } 136