/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ using System; using System.Collections; using System.Collections.Generic; #if SILVERLIGHT using System.Runtime.Serialization; #endif namespace Thrift.Collections { #if SILVERLIGHT [DataContract] #else [Serializable] #endif public class THashSet : ICollection { #if NET_2_0 || SILVERLIGHT #if SILVERLIGHT [DataMember] #endif TDictSet set = new TDictSet(); #else HashSet set = new HashSet(); #endif public int Count { get { return set.Count; } } public bool IsReadOnly { get { return false; } } public void Add(T item) { set.Add(item); } public void Clear() { set.Clear(); } public bool Contains(T item) { return set.Contains(item); } public void CopyTo(T[] array, int arrayIndex) { set.CopyTo(array, arrayIndex); } public IEnumerator GetEnumerator() { return set.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)set).GetEnumerator(); } public bool Remove(T item) { return set.Remove(item); } #if NET_2_0 || SILVERLIGHT #if SILVERLIGHT [DataContract] #endif private class TDictSet : ICollection { #if SILVERLIGHT [DataMember] #endif Dictionary> dict = new Dictionary>(); public int Count { get { return dict.Count; } } public bool IsReadOnly { get { return false; } } public IEnumerator GetEnumerator() { return ((IEnumerable)dict.Keys).GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return dict.Keys.GetEnumerator(); } public bool Add(V item) { if (!dict.ContainsKey(item)) { dict[item] = this; return true; } return false; } void ICollection.Add(V item) { Add(item); } public void Clear() { dict.Clear(); } public bool Contains(V item) { return dict.ContainsKey(item); } public void CopyTo(V[] array, int arrayIndex) { dict.Keys.CopyTo(array, arrayIndex); } public bool Remove(V item) { return dict.Remove(item); } } #endif } }