diff options
Diffstat (limited to 'src/core/Support/GeneralKeyedCollection.cs')
-rw-r--r-- | src/core/Support/GeneralKeyedCollection.cs | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/src/core/Support/GeneralKeyedCollection.cs b/src/core/Support/GeneralKeyedCollection.cs new file mode 100644 index 0000000..1b2e29b --- /dev/null +++ b/src/core/Support/GeneralKeyedCollection.cs @@ -0,0 +1,96 @@ +/* + * + * 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.Diagnostics; + +namespace Lucene.Net.Support +{ + /// <summary>A collection of <typeparamref name="TItem"/> which can be + /// looked up by instances of <typeparamref name="TKey"/>.</summary> + /// <typeparam name="TItem">The type of the items contains in this + /// collection.</typeparam> + /// <typeparam name="TKey">The type of the keys that can be used to look + /// up the items.</typeparam> + internal class GeneralKeyedCollection<TKey, TItem> : System.Collections.ObjectModel.KeyedCollection<TKey, TItem> + { + /// <summary>Creates a new instance of the + /// <see cref="GeneralKeyedCollection{TKey, TItem}"/> class.</summary> + /// <param name="converter">The <see cref="Converter{TInput, TOutput}"/> which will convert + /// instances of <typeparamref name="TItem"/> to <typeparamref name="TKey"/> + /// when the override of <see cref="GetKeyForItem(TItem)"/> is called.</param> + internal GeneralKeyedCollection(Converter<TItem, TKey> converter) + : base() + { + // If the converter is null, throw an exception. + if (converter == null) throw new ArgumentNullException("converter"); + + // Store the converter. + this.converter = converter; + + // That's all folks. + return; + } + + /// <summary>The <see cref="Converter{TInput, TOutput}"/> which will convert + /// instances of <typeparamref name="TItem"/> to <typeparamref name="TKey"/> + /// when the override of <see cref="GetKeyForItem(TItem)"/> is called.</summary> + private readonly Converter<TItem, TKey> converter; + + /// <summary>Converts an item that is added to the collection to + /// a key.</summary> + /// <param name="item">The instance of <typeparamref name="TItem"/> + /// to convert into an instance of <typeparamref name="TKey"/>.</param> + /// <returns>The instance of <typeparamref name="TKey"/> which is the + /// key for this item.</returns> + protected override TKey GetKeyForItem(TItem item) + { + // The converter is not null. + Debug.Assert(converter != null); + + // Call the converter. + return converter(item); + } + + /// <summary>Determines if a key for an item exists in this + /// collection.</summary> + /// <param name="key">The instance of <typeparamref name="TKey"/> + /// to see if it exists in this collection.</param> + /// <returns>True if the key exists in the collection, false otherwise.</returns> + public bool ContainsKey(TKey key) + { + // Call the dictionary - it is lazily created when the first item is added + if (Dictionary != null) + { + return Dictionary.ContainsKey(key); + } + else + { + return false; + } + } + + public System.Collections.Generic.IList<TItem> Values() + { + return base.Items; + } + } +} |