public void RemoveNodeType(LabeledNodeType type, LabeledNode node) { if (TypeNodes.ContainsKey(type)) { TypeNodes[type].Remove(node); } }
public List <TreeNode> FindNodes(TypeNodes type) { var list = new List <TreeNode>(); this.FindInTree(type, list); return(list); }
public void RemoveZeroNodeTypes() { var zeroNodeTypes = TypeNodes.Keys.Where(k => TypeNodes[k].Count == 0).ToList(); for (var i = zeroNodeTypes.Count() - 1; i >= 0; i--) { var currentType = zeroNodeTypes[i]; TypeNodes.Remove(currentType); UsedTypes.Remove(currentType.GetQuasiUniqueRepresentation()); } }
public virtual void AddNodeType(LabeledNodeType type, LabeledNode node) { if (!UsedTypes.ContainsKey(type.GetQuasiUniqueRepresentation())) { TypeNodes.Add(type, new List <LabeledNode>(10)); UsedTypes.Add(type.GetQuasiUniqueRepresentation(), type); node.Type = type; } else { node.Type = UsedTypes[type.GetQuasiUniqueRepresentation()]; } TypeNodes[node.Type].Add(node); }
private bool CheckIfIsSearchedNodeType(TreeNode nextNode, TypeNodes searchedType) { bool isCorrectTypeOfNode = false; if (searchedType == TypeNodes.Leaf) { if (nextNode.ChildNodes.Count == 0) { isCorrectTypeOfNode = true; } } else if (searchedType == TypeNodes.Middle) { if (nextNode.ChildNodes.Count > 1) { isCorrectTypeOfNode = true; } } return(isCorrectTypeOfNode); }
//1 2 3 private void FindInTree(TypeNodes type, List <TreeNode> list) { var stack = new Stack <TreeNode>(); stack.Push(this.Root); { while (stack.Count > 0) { var nextNode = stack.Pop(); for (int i = 0; i < nextNode.ChildNodes.Count; i++) { stack.Push(nextNode.ChildNodes[i]); } if (this.CheckIfIsSearchedNodeType(nextNode, type)) { list.Add(nextNode); } } } }
public override void AddNodeType(LabeledNodeType givenType, LabeledNode node) { var trueType = LabeledNode.GetType(node); if (trueType.FullFragment != givenType.FullFragment || trueType.Part1Fragment != givenType.Part1Fragment || trueType.Part2Fragment != givenType.Part2Fragment) { throw new ArgumentException("Given type does not equal true type."); } if (!UsedTypes.ContainsKey(givenType.GetQuasiUniqueRepresentation())) { TypeNodes.Add(givenType, new List <LabeledNode>(10)); UsedTypes.Add(givenType.GetQuasiUniqueRepresentation(), givenType); node.Type = givenType; } else { node.Type = UsedTypes[givenType.GetQuasiUniqueRepresentation()]; } TypeNodes[node.Type].Add(node); }