Home | History | Annotate | Download | only in Antlr3.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 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