|
using System;
using System.Collections.Generic;
namespace Switch.Internal
{
///////////////////////////////////////////////////////////////////////////
//
// Node class
//
/// <summary>
/// This class represents a single node in the subscription tree.
/// </summary>
internal class Node
{
public event Handler Notify;
private readonly Dictionary<Rule, Node> _children = new Dictionary<Rule,Node>();
private readonly Rule _rule;
public Node(Rule rule)
{
_rule = rule;
}
public void Find(Message message, ref Handler handlers)
{
if (_rule.Test(message))
{
handlers += Notify;
foreach (Node child in _children.Values)
child.Find(message, ref handlers);
}
}
public void Add(Handler handler, IEnumerator<Rule> chain)
{
if (chain.MoveNext())
{
Rule rule = chain.Current;
Node child;
if (!_children.TryGetValue(rule, out child))
{
child = new Node(rule);
_children[rule] = child;
}
child.Add(handler, chain);
}
else
{
Notify += handler;
}
}
public void Remove(Handler handler, IEnumerator<Rule> chain)
{
if (chain.MoveNext())
{
Rule rule = chain.Current;
Node child;
if (_children.TryGetValue(rule, out child))
{
child.Remove(handler, chain);
if (child.Notify == null)
_children.Remove(rule);
}
}
else
{
Notify -= handler;
}
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Hello, I'm Fred. I've been working with software since I was a kid, and the foreseeable future looks to hold more of the same.
When I was in 4th grade, I had a homework assignment where I was supposed to write out a list of prime numbers less than 100. Instead of writing it out by hand, I spent a couple of minutes writing a simple C program, and turned in a list of prime numbers less than 1,000,000.
Since then, I have enjoyed wasting countless hours (years) playing with various technologies, patterns, and code constructs, and occasionally learn something useful.