private XmlDiffNode HTFindAndRemoveMatchingNode( Hashtable hashtable, XmlDiffNodeListHead nodeListHead, XmlDiffNode nodeToMatch) { var first = nodeListHead._first; var node = first._node; if (this.IdenticalSubtrees(node, nodeToMatch)) { if (first._next == null) { hashtable.Remove(node.HashValue); } else { nodeListHead._first = first._next; } return(node); } while (first._next != null) { if (this.IdenticalSubtrees(first._node, nodeToMatch)) { first._next = first._next._next; if (first._next == null) { nodeListHead._last = first; } return(node); } } return(null); }
private void AddNodeToHashTable(Hashtable hashtable, XmlDiffNode node) { var hashValue = node.HashValue; var diffNodeListHead = (XmlDiffNodeListHead)hashtable[hashValue]; if (diffNodeListHead == null) { hashtable[hashValue] = new XmlDiffNodeListHead(new XmlDiffNodeListMember(node, null)); } else { var diffNodeListMember = new XmlDiffNodeListMember(node, null); diffNodeListHead._last._next = diffNodeListMember; diffNodeListHead._last = diffNodeListMember; } }
private XmlDiffNode HTFindAndRemoveMatchingNode( Hashtable hashtable, XmlDiffNodeListHead nodeListHead, XmlDiffNode nodeToMatch ) { Debug.Assert( hashtable != null ); Debug.Assert( nodeListHead != null ); // find matching node in the list XmlDiffNodeListMember nodeList = nodeListHead._first; XmlDiffNode node = nodeList._node; if ( IdenticalSubtrees( node, nodeToMatch ) ) { // remove the node itself if ( nodeList._next == null ) { hashtable.Remove( node.HashValue ); } else { Debug.Assert( nodeListHead._first != nodeListHead._last ); nodeListHead._first = nodeList._next; } return node; } else { while ( nodeList._next != null ) { if ( IdenticalSubtrees( nodeList._node, nodeToMatch ) ) { nodeList._next = nodeList._next._next; if ( nodeList._next == null ) { nodeListHead._last = nodeList; } return node; } } return null; } }
private void AddNodeToHashTable( Hashtable hashtable, XmlDiffNode node ) { Debug.Assert( hashtable != null ); Debug.Assert( node != null ); Debug.Assert( node.NodeType != XmlDiffNodeType.ShrankNode ); ulong hashValue = node.HashValue; XmlDiffNodeListHead nodeListHead = (XmlDiffNodeListHead) hashtable[ hashValue ]; if ( nodeListHead == null ) { hashtable[ hashValue ] = new XmlDiffNodeListHead( new XmlDiffNodeListMember( node, null ) ); } else { XmlDiffNodeListMember newMember = new XmlDiffNodeListMember( node, null ); nodeListHead._last._next = newMember; nodeListHead._last = newMember; } }