| File: Collections\RetrievableEntryHashSet\IRetrievableEntryHashSet.cs | Web Access |
| Project: src\msbuild\src\Build\Microsoft.Build.csproj (Microsoft.Build) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.Generic; using System.Runtime.Serialization; #nullable disable namespace Microsoft.Build.Collections { /// <summary> /// Represents a hash set mapping string to <typeparamref name="T"/>, with the specialization that /// value lookup supports using substrings of a provided key without requiring instantiating the substring /// (in order to avoid the memory usage of string allocation). /// </summary> /// <typeparam name="T">The type of data the hash set contains (which must be <see cref="IKeyed"/>).</typeparam> internal interface IRetrievableEntryHashSet<T> : ICollection<T>, ISerializable, IDeserializationCallback, IDictionary<string, T> where T : class, IKeyed { /// <summary> /// Gets the item with the given name. /// </summary> /// <param name="key">key to check for containment.</param> /// <returns>The item (if contained).</returns> /// <exception cref="KeyNotFoundException">Thrown if no item with the given name is present in the collection.</exception> T Get(string key); /// <summary> /// Gets the item if any with the given name. /// </summary> /// <param name="key">key to check for containment.</param> /// <param name="index">The position of the substring within <paramref name="key"/>.</param> /// <param name="length">The maximum number of characters in the <paramref name="key"/> to lookup.</param> /// <returns>The item (if contained).</returns> /// <exception cref="KeyNotFoundException">Thrown if no item with the given name is present in the collection.</exception> T Get(string key, int index, int length); /// <summary> /// Copies the contents of this HashSet into the provided array. /// </summary> /// <param name="array">The array into which the contents of this HashSet will be copied.</param> void CopyTo(T[] array); /// <summary> /// Copies the contents of this HashSet into the provided array. /// </summary> /// <param name="array">The array into which the contents of this HashSet will be copied.</param> /// <param name="arrayIndex">The index within <paramref name="array"/> where the first item will be placed.</param> /// <param name="count">The number of items from HashSet to copy into <paramref name="array"/>.</param> void CopyTo(T[] array, int arrayIndex, int count); /// <summary> /// Take the union of this HashSet with other. Modifies this set. /// /// Implementation note: GetSuggestedCapacity (to increase capacity in advance avoiding /// multiple resizes ended up not being useful in practice; quickly gets to the /// point where it's a wasteful check. /// </summary> /// <param name="other">enumerable with items to add</param> void UnionWith(IEnumerable<T> other); /// <summary> /// Sets the capacity of this list to the size of the list (rounded up to nearest prime), /// unless count is 0, in which case we release references. /// /// This method can be used to minimize a list's memory overhead once it is known that no /// new elements will be added to the list. To completely clear a list and release all /// memory referenced by the list, execute the following statements: /// /// list.Clear(); /// list.TrimExcess(); /// </summary> void TrimExcess(); } }