public void TestAddRemove() { Assert.IsNull(_eventTypeIndex.Get(_typeOne)); Assert.IsNull(_eventTypeIndex.Get(_typeTwo)); var entryOne = _indexBuilder.Add(_valueSetOne, _callbackOne, _lockFactory); _indexBuilder.Add(_valueSetTwo, _callbackTwo, _lockFactory); Assert.IsTrue(_eventTypeIndex.Get(_typeOne) != null); Assert.IsTrue(_eventTypeIndex.Get(_typeTwo) != null); _indexBuilder.Remove(_callbackOne, entryOne); _indexBuilder.Add(_valueSetOne, _callbackOne, _lockFactory); _indexBuilder.Remove(_callbackOne, entryOne); }
/// <summary> /// Add a filter to the event type index structure, and to the filter subtree. /// Throws an IllegalStateException exception if the callback is already registered. /// </summary> /// <param name="filterValueSet">is the filter information</param> /// <param name="filterCallback">is the callback</param> /// <param name="lockFactory">The lock factory.</param> /// <returns></returns> /// <exception cref="IllegalStateException">Callback for filter specification already exists in collection</exception> public FilterServiceEntry Add(FilterValueSet filterValueSet, FilterHandle filterCallback, FilterServiceGranularLockFactory lockFactory) { using (Instrument.With( i => i.QFilterAdd(filterValueSet, filterCallback), i => i.AFilterAdd())) { var eventType = filterValueSet.EventType; // Check if a filter tree exists for this event type var rootNode = _eventTypeIndex.Get(eventType); // Make sure we have a root node if (rootNode == null) { using (_callbacksLock.Acquire()) { rootNode = _eventTypeIndex.Get(eventType); if (rootNode == null) { rootNode = new FilterHandleSetNode(lockFactory.ObtainNew()); _eventTypeIndex.Add(eventType, rootNode); } } } // GetInstance add to tree var path = IndexTreeBuilder.Add(filterValueSet, filterCallback, rootNode, lockFactory); var pathArray = path.Select(p => p.ToArray()).ToArray(); var pair = new EventTypeIndexBuilderValueIndexesPair(filterValueSet, pathArray); // for non-isolatable callbacks the consumer keeps track of tree location if (_isolatableCallbacks == null) { return(pair); } // for isolatable callbacks this class is keeping track of tree location using (_callbacksLock.Acquire()) { _isolatableCallbacks.Put(filterCallback, pair); } return(null); } }
public void TestGet() { Assert.AreEqual(_handleSetNode, _testIndex.Get(_testEventType)); }