/// <summary> /// Gets a collection providing the message set that pass the specified filter. /// </summary> /// <param name="filter">Filter to apply.</param> /// <returns>The filtered message collection.</returns> public FilteredLogMessageCollection <TMessage> GetFilteredCollection(ILogMessageCollectionFilter <TMessage> filter) { var collection = new FilteredLogMessageCollection <TMessage>(this, filter); mFilteredCollections.Add(new WeakReference <FilteredLogMessageCollection <TMessage> >(collection)); return(collection); }
/// <summary> /// Unregisters the specified filtered collection, so it does not receive any further notifications /// when the unfiltered collection changes. /// </summary> /// <param name="collection">The filtered collection to unregister.</param> internal void UnregisterFilteredCollection(FilteredLogMessageCollection <TMessage> collection) { for (int i = 0; i < mFilteredCollections.Count; i++) { if (mFilteredCollections[i].TryGetTarget(out var other)) { if (ReferenceEquals(collection, other)) { mFilteredCollections.RemoveAt(i--); } } else { // the filtered collection was collected // => clean up mFilteredCollections.RemoveAt(i--); } } }