public static Sharpen.Util.ISet BuildHierarchy(ClassMetadataRepository repository ) { ClassMetadataIterator classIter = repository.Iterator(); IDictionary nodes = new Hashtable(); Sharpen.Util.ISet roots = new HashSet(); while (classIter.MoveNext()) { Db4objects.Db4o.Internal.ClassMetadata clazz = classIter.CurrentClass(); Db4objects.Db4o.Filestats.ClassNode node = new Db4objects.Db4o.Filestats.ClassNode (clazz); nodes[clazz.GetName()] = node; if (clazz.GetAncestor() == null) { roots.Add(node); } } for (IEnumerator nodeIter = nodes.Values.GetEnumerator(); nodeIter.MoveNext();) { Db4objects.Db4o.Filestats.ClassNode node = ((Db4objects.Db4o.Filestats.ClassNode) nodeIter.Current); Db4objects.Db4o.Internal.ClassMetadata ancestor = node.ClassMetadata().GetAncestor (); if (ancestor != null) { ((Db4objects.Db4o.Filestats.ClassNode)nodes[ancestor.GetName()]).AddSubClass(node ); } } return(roots); }
internal virtual void Process(ClassMetadata newClassMetadata) { if (_pending.Contains(newClassMetadata)) { return; } ClassMetadata ancestor = newClassMetadata.GetAncestor(); if (ancestor != null) { Process(ancestor); } _pending.Add(newClassMetadata); _members.Add(newClassMetadata); if (_running) { return; } _running = true; try { CheckInits(); _pending = new Collection4(); } finally { _running = false; } }
private static bool ParentHasIndex(ClassMetadata curClass) { ClassMetadata parentClass = curClass.GetAncestor(); while (parentClass != null) { if (parentClass.HasClassIndex()) { return true; } parentClass = parentClass.GetAncestor(); } return false; }