コード例 #1
0
 public void InsertObservedNode(
     Dictionary <string, U> observedNodes, string name, U node,
     UriTreeNode <U> .UriTreeNodeDelegate onNodeAdded, bool disallowDuplicates = true)
 {
     InsertObservedNode <U>(
         observedNodes, new Queue <string>(UriUtilities.GetParts(name)),
         node, onNodeAdded, disallowDuplicates);
 }
コード例 #2
0
        public void AddObservedNode(
            Dictionary <string, U> observedNodes, Queue <string> nameParts, U node,
            UriTreeNode <U> .UriTreeNodeDelegate onNodeAdded, bool disallowDuplicates = true)
        {
            var first = nameParts.Dequeue();

            if (nameParts.Count > 0)
            {
                if (!observedNodes.ContainsKey(first))
                {
                    throw new UriTreeException(
                              String.Format(
                                  "Could not add node with unqualified name '{0}' to UriTreeObserver. " +
                                  "Missing intermediate node with name '{1}'. Consider using InsertObservedNode instead.",
                                  String.Join(UriUtilities.URI_SEPARATOR.ToString(), nameParts), first
                                  )
                              );
                }
                observedNodes[first].AddSubnode(nameParts, node, disallowDuplicates);
            }
            else
            {
                if (observedNodes.ContainsKey(first))
                {
                    if (disallowDuplicates)
                    {
                        throw new UriTreeException(
                                  String.Format(
                                      "Could not add node with full name '{0}' to UriTreeObserver. " +
                                      "A node with that name already exists.", first
                                      )
                                  );
                    }
                    observedNodes[first] = node;
                }
                else
                {
                    observedNodes.Add(first, node);
                }
                if (onNodeAdded != null)
                {
                    onNodeAdded(node);
                }
            }
        }
コード例 #3
0
        public void InsertObservedNode <NodeType>(
            Dictionary <string, U> observedNodes, Queue <string> nameParts, U node,
            UriTreeNode <U> .UriTreeNodeDelegate onNodeAdded, bool disallowDuplicates = true)
            where NodeType : U
        {
            var first = nameParts.Dequeue();

            if (nameParts.Count > 0)
            {
                if (!observedNodes.ContainsKey(first))
                {
                    observedNodes.Add(first, (U)Activator.CreateInstance(typeof(NodeType), first));
                }
                observedNodes[first].InsertSubnode <NodeType>(nameParts, node, disallowDuplicates);
            }
            else
            {
                if (observedNodes.ContainsKey(first))
                {
                    if (disallowDuplicates)
                    {
                        throw new UriTreeException(
                                  String.Format(
                                      "Could not insert node with full name '{0}' to UriTreeObserver. " +
                                      "A node with that name already exists.", first
                                      )
                                  );
                    }
                    observedNodes[first] = node;
                }
                else
                {
                    observedNodes.Add(first, node);
                }
                if (onNodeAdded != null)
                {
                    onNodeAdded(node);
                }
            }
        }