Print

Print


Commit in GeomConverter/src/org/lcsim/detector on MAIN
IPhysicalVolumeVisitor.java+10added 1.1
IVisitor.java+6added 1.1
PhysicalVolumeNavigator.java+411.6 -> 1.7
+57
2 added + 1 modified, total 3 files
JM: Implementation of visitor pattern suggested by Tony.

GeomConverter/src/org/lcsim/detector
IPhysicalVolumeVisitor.java added at 1.1
diff -N IPhysicalVolumeVisitor.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ IPhysicalVolumeVisitor.java	7 Mar 2007 00:43:32 -0000	1.1
@@ -0,0 +1,10 @@
+package org.lcsim.detector;
+
+import org.lcsim.detector.IPhysicalVolume;
+import org.lcsim.detector.IVisitor;
+
+public interface IPhysicalVolumeVisitor 
+extends IVisitor<IPhysicalVolume>
+{
+	public void visit(IPhysicalVolume volume);
+}

GeomConverter/src/org/lcsim/detector
IVisitor.java added at 1.1
diff -N IVisitor.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ IVisitor.java	7 Mar 2007 00:43:32 -0000	1.1
@@ -0,0 +1,6 @@
+package org.lcsim.detector;
+
+public interface IVisitor<T>
+{
+	public abstract void visit(T object);
+}

GeomConverter/src/org/lcsim/detector
PhysicalVolumeNavigator.java 1.6 -> 1.7
diff -u -r1.6 -r1.7
--- PhysicalVolumeNavigator.java	6 Mar 2007 20:22:17 -0000	1.6
+++ PhysicalVolumeNavigator.java	7 Mar 2007 00:43:32 -0000	1.7
@@ -315,6 +315,47 @@
 	 */
 	public PhysicalVolumeNavigator(IPhysicalVolumePath path)
 	{
+		if ( path == null )
+		{
+			throw new IllegalArgumentException("The path is null!");
+		}
+		
 		setTopPhysicalVolume(path);
 	}	
+	
+	public void traversePreOrder(
+			IPhysicalVolumeVisitor visitor)
+	{
+		if ( visitor == null )
+		{
+			throw new IllegalArgumentException("The Visitor is null!");
+		}
+		
+		traversePreOrder(getTopPhysicalVolume(), visitor);
+	}
+	
+	/**
+	 * Visit the PhysicalVolume recursively using preorder,
+	 * calling the given IPhysicalVolumeVisitor's visit method
+	 * for each node.
+	 * 
+	 * @param physicalVolume
+	 * @param visitor
+	 */
+	protected void traversePreOrder(
+			IPhysicalVolume physicalVolume, 
+			IPhysicalVolumeVisitor visitor)
+	{
+		// Visit this node.
+		visitor.visit(physicalVolume);
+		
+		// Recursively traverse the daughters.
+		if ( physicalVolume.getLogicalVolume().getNumberOfDaughters() > 0 )
+		{
+			for ( IPhysicalVolume child : physicalVolume.getLogicalVolume().getDaughters())
+			{
+				traversePreOrder(child, visitor);
+			}
+		}		
+	}
 }
\ No newline at end of file
CVSspam 0.2.8