/* * Generic graph library * Copyright (C) 2004, University of Maryland * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package edu.umd.cs.findbugs.graph; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; /** * A search tree callback implementation that builds a * list of SearchTrees recording a graph search. * * @see SearchTreeCallback * @author David Hovemeyer */ public class SearchTreeBuilder <VertexType extends GraphVertex<VertexType>> implements SearchTreeCallback<VertexType> { private HashMap<VertexType, SearchTree<VertexType>> searchTreeMap = new HashMap<VertexType, SearchTree<VertexType>>(); private LinkedList<SearchTree<VertexType>> searchTreeList = new LinkedList<SearchTree<VertexType>>(); public void startSearchTree(VertexType vertex) { searchTreeList.add(createSearchTree(vertex)); } public void addToSearchTree(VertexType parent, VertexType child) { SearchTree<VertexType> parentTree = searchTreeMap.get(parent); if (parentTree == null) throw new IllegalStateException(); SearchTree<VertexType> childTree = createSearchTree(child); parentTree.addChild(childTree); } /** * Get an Iterator over the recorded SearchTrees. */ public Iterator<SearchTree<VertexType>> searchTreeIterator() { return searchTreeList.iterator(); } private SearchTree<VertexType> createSearchTree(VertexType vertex) { SearchTree<VertexType> searchTree = new SearchTree<VertexType>(vertex); searchTreeMap.put(vertex, searchTree); return searchTree; } } // vim:ts=4