view src/main/java/suikwasha/distributedalgorithm/simulator/SyncMachineBuilder.java @ 0:38a110b13db1

added SimpleDistributedAlgorithmFramework. added NaiveAlgorithm added ChangRobertsAlgorithm added PertersonAlgorithm
author suikwasha
date Fri, 19 Oct 2012 00:05:41 +0900
parents
children
line wrap: on
line source

package suikwasha.distributedalgorithm.simulator;

import suikwasha.distributedalgorithm.framework.Algorithm;
import suikwasha.distributedalgorithm.framework.Machine;
import suikwasha.distributedalgorithm.framework.MachineBuilder;
import suikwasha.distributedalgorithm.framework.Port;

public class SyncMachineBuilder implements MachineBuilder
{
	private final MachineBuilder builder;
	private final Synchronizer synchronizer;
	
	public SyncMachineBuilder(MachineBuilder _builder)
	{
		builder = _builder;
		synchronizer = new Synchronizer();
	}

	public Machine createMachine(Algorithm _algo)
	{
		Machine newMachine = builder.createMachine(_algo);
		synchronizer.countup();
		return new SyncMachine(synchronizer,newMachine);
	}
	
	public Synchronizer getSynchronizer()
	{
		return synchronizer;
	}

	private static class SyncMachine extends Machine
	{
		private final Synchronizer synchronizer;
		private final Machine machine;
		
		public SyncMachine(Synchronizer _synchronizer,Machine _machine)
		{
			synchronizer = _synchronizer;
			machine = _machine;
		}

		public void addPort(Port _p)
		{
			machine.addPort(_p);
		}
		
		public void run()
		{
			machine.run();
			synchronizer.countdown();
		}
	}
}