public static AttributedTypesTrieNode Read(BinaryReader reader, IPersistentIndexManager persistentIndexManager) { var root = new AttributedTypesTrieNode(); if (!root.ReadThis(reader, persistentIndexManager)) { return(null); } return(root); }
private AttributedTypesTrieNode EnsureNode(string attributeName) { AttributedTypesTrieNode node; if (!Roots.TryGetValue(attributeName, out node)) { node = new AttributedTypesTrieNode(); Roots.Add(attributeName, node); } return(node); }
private void UpdateIndex(AttributedTypesTrieNode node, OneToSetMap <IPsiSourceFile, AttributedTypesTrieNode> sourceFileToNodes) { foreach (var annotationData in node.Annotations) { sourceFileToNodes.Add(annotationData.SourceFile, node); } foreach (var childNode in node.Children.Values) { UpdateIndex(childNode, sourceFileToNodes); } }
public static IEnumerable <AttributedTypesTrieNode> Explore(this AttributedTypesTrieNode node, string[] names) { foreach (var name in names) { node = node.GetChild(name); if (node == null) { yield break; } yield return(node); } }
public static IEnumerable <AttributedTypesTrieNode> Enumerate(this AttributedTypesTrieNode node) { yield return(node); foreach (var child in node.Children) { foreach (var ret in Enumerate(child.Value)) { yield return(ret); } } }
public void Read(BinaryReader reader, IPersistentIndexManager persistentIndexManager) { var num = reader.ReadInt32(); for (int i = 0; i < num; i++) { var name = reader.ReadString(); var trie = AttributedTypesTrieNode.Read(reader, persistentIndexManager) ?? new AttributedTypesTrieNode(); // direct add to roots here... no collisions by name is guaranted Roots.Add(name, trie); } }
private AttributedTypesTrieNode AddNamespaceNode(string namespaceShortName) { AttributedTypesTrieNode ret; if (Children.TryGetValue(namespaceShortName, out ret)) { return(ret); } ret = new AttributedTypesTrieNode(); Children.Add(namespaceShortName, ret); return(ret); }
private void UpdateIndexAfterLoad(AttributedTypesTrieNode trieNode) { foreach (var annotationData in trieNode.Annotations) { mySourceFileToNodes.Add(annotationData.SourceFile, trieNode); } foreach (var childNode in trieNode.Children.Values) { UpdateIndexAfterLoad(childNode); } }
/// <summary> /// return true when some data was added /// </summary> public bool Merge(AttributedTypesTrieNode builtPart, OneToSetMap <IPsiSourceFile, AttributedTypesTrieNode> sourceFileToNodes) { var ret = false; if (builtPart.myAnnotations != null && builtPart.myAnnotations.Count > 0) { ret = true; foreach (var data in builtPart.myAnnotations) { sourceFileToNodes.Add(data.SourceFile, this); } } if (myAnnotations == null && builtPart.myAnnotations != null) { myAnnotations = builtPart.myAnnotations; } else if (myAnnotations != null && builtPart.myAnnotations != null) { myAnnotations = myAnnotations.Concat(builtPart.myAnnotations).ToList(); } if (builtPart.myChildren != null) { foreach (var child in builtPart.myChildren) { AttributedTypesTrieNode ownChild; var childTrie = child.Value; if (Children.TryGetValue(child.Key, out ownChild)) { ret = ownChild.Merge(childTrie, sourceFileToNodes) || ret; } else { Children[child.Key] = childTrie; ret = true; UpdateIndex(childTrie, sourceFileToNodes); } } } return(ret); }