Home | History | Annotate | Download | only in Antlr.Runtime.JavaExtensions
      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]
     45         public static bool containsKey(IDictionary map, object key) {
     46             return map.Contains(key);
     47         }
     48 
     49         [Obsolete]
     50         public static object get(IDictionary map, object key) {
     51             return map[key];
     52         }
     53 #endif
     54 
     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
     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 
     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]
     91         public static void put(IDictionary map, object key, object value) {
     92             map[key] = value;
     93         }
     94 
     95         [Obsolete]
     96         public static void put<TKey, TValue>(IDictionary<TKey, TValue> map, TKey key, TValue value) {
     97             map[key] = value;
     98         }
     99 
    100         [Obsolete]
    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]
    106         public static HashSet<object> keySet(IDictionary map) {
    107             return new HashSet<object>(map.Keys.Cast<object>());
    108         }
    109 
    110         [Obsolete]
    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]
    117         public static HashSet<TKey> keySet<TKey, TValue>(Dictionary<TKey, TValue> map) {
    118             return new HashSet<TKey>(map.Keys);
    119         }
    120 
    121         [Obsolete]
    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