[Bprocessor-commit] model/src/net/sourceforge/bprocessor/model SpaceAnalysis.java, 1.4, 1.5
Status: Pre-Alpha
Brought to you by:
henryml
From: Michael L. <he...@us...> - 2007-09-27 10:44:12
|
Update of /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv12633/src/net/sourceforge/bprocessor/model Modified Files: SpaceAnalysis.java Log Message: Improved space propagation Index: SpaceAnalysis.java =================================================================== RCS file: /cvsroot/bprocessor/model/src/net/sourceforge/bprocessor/model/SpaceAnalysis.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** SpaceAnalysis.java 27 Sep 2007 08:33:13 -0000 1.4 --- SpaceAnalysis.java 27 Sep 2007 10:44:14 -0000 1.5 *************** *** 9,15 **** --- 9,18 ---- import java.util.HashMap; + import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; + import java.util.Queue; + import java.util.Set; /** *************** *** 22,25 **** --- 25,32 ---- private static final int BACKWARD = -1; + private Map<Edge, List<Surface>> edgemap; + private Queue<Element> queue; + private Set<Surface> mark; + private static int travel(Surface surface, Edge edge) { Vertex vertex = surface.getFirstVertex(); *************** *** 37,40 **** --- 44,66 ---- } + + private class Element { + private Surface surface; + private int side; + + public Element(Surface surface, int side) { + this.surface = surface; + this.side = side; + } + + public Surface surface() { + return surface; + } + + public int side() { + return side; + } + } + /** * Progates space assignment in specified direction *************** *** 45,49 **** public void propagate(Surface surface, int side) { Space space = surface.getOwner(); ! Map<Edge, List<Surface>> edgemap = new HashMap(); for (Edge current : space.getEdges()) { edgemap.put(current, new LinkedList()); --- 71,75 ---- public void propagate(Surface surface, int side) { Space space = surface.getOwner(); ! edgemap = new HashMap(); for (Edge current : space.getEdges()) { edgemap.put(current, new LinkedList()); *************** *** 55,73 **** } for (Edge current : surface.getEdges()) { List<Surface> surfaces = edgemap.get(current); if (surfaces.size() > 1) { Surface selected = select(current, surfaces, surface, side); ! if (travel(surface, current) == travel(selected, current)) { ! if (side == 1) { ! selected.setBackDomain(surface.getFrontDomain()); ! } else { ! selected.setFrontDomain(surface.getBackDomain()); ! } ! } else { ! if (side == 1) { ! selected.setFrontDomain(surface.getFrontDomain()); } else { ! selected.setBackDomain(surface.getBackDomain()); } } --- 81,116 ---- } + mark = new HashSet(); + queue = new LinkedList(); + queue.offer(new Element(surface, side)); + while (!queue.isEmpty()) { + Element element = queue.remove(); + process(element); + } + } + + private void process(Element element) { + Surface surface = element.surface(); + int side = element.side; + mark.add(surface); for (Edge current : surface.getEdges()) { List<Surface> surfaces = edgemap.get(current); if (surfaces.size() > 1) { Surface selected = select(current, surfaces, surface, side); ! if (!mark.contains(selected)) { ! if (travel(surface, current) == travel(selected, current)) { ! if (side == 1) { ! selected.setBackDomain(surface.getFrontDomain()); ! } else { ! selected.setFrontDomain(surface.getBackDomain()); ! } ! queue.offer(new Element(selected, -side)); } else { ! if (side == 1) { ! selected.setFrontDomain(surface.getFrontDomain()); ! } else { ! selected.setBackDomain(surface.getBackDomain()); ! } ! queue.offer(new Element(selected, side)); } } |