// Path: src/aeminium/runtime/implementations/Configuration.java
// public final class Configuration {
// 	protected static final String GLOBAL_PREFIX = "global.";
// 	protected static int processorCount;
// 	protected static String implementation;
// 	protected static final Properties properties; 
// 	
// 	static {
// 		String filename = System.getenv("AEMINIUMRT_CONFIG");
// 		if ( filename == null ) {
// 			filename = "aeminiumrt.config";
// 		}
// 		File file = new File(filename);
// 		properties = new Properties();
// 		if ( file.exists()  && file.canRead()) {
// 			FileReader freader;
// 			try {
// 				freader = new FileReader(file);
// 				properties.load(freader);
// 				freader.close();
// 			}  catch (IOException e) {
// 			} 
// 		} 
// 		
// 		// processor count
// 		String processorCount = properties.getProperty(GLOBAL_PREFIX + "processorCount");
// 		if (processorCount != null ) {
// 			Configuration.processorCount = Integer.valueOf(processorCount);
// 		} else {
// 			Configuration.processorCount = Runtime.getRuntime().availableProcessors();
// 		}
// 			
// 		// implementation
// 		String implementation = properties.getProperty(GLOBAL_PREFIX + "implementation");
// 		if ( implementation != null ) {
// 			Configuration.implementation = implementation;
// 		} else {
// 			Configuration.implementation = "default";
// 		}
// 	}
// 	
// 	protected Configuration() {}
// 	
// 	public final static int getProcessorCount() {
// 		return processorCount;
// 	}
// 	
// 	public final static String getImplementation() {
// 		return implementation;
// 	}
// 
// 	public final static String getProperty(Class<?> klazz, String key, String defaultValue) {
// 		String value = properties.getProperty(klazz.getSimpleName() + "." + key);
// 		if ( value != null ) {
// 			return value.trim();
// 		} else {
// 			return defaultValue;
// 		}
// 	}
// 	
// 	public final static int getProperty(Class<?> klazz, String key, int defaultValue) {
// 		String value = properties.getProperty(klazz.getSimpleName()+ "." + key);
// 		if ( value != null ) {
// 			return Integer.valueOf(value.trim());
// 		} else {
// 			return defaultValue;
// 		}
// 	}
// 	
// 	public final static boolean getProperty(Class<?> klazz, String key, boolean defaultValue) {
// 		String value = properties.getProperty(klazz.getSimpleName()+ "." + key);
// 		if ( value != null ) {
// 			return Boolean.valueOf(value.trim());
// 		} else {
// 			return defaultValue;
// 		}
// 	}
// 
// }
// 
// Path: src/aeminium/runtime/implementations/Factory.java
// public class Factory {
// 	protected static Runtime rt;
// 
// 	/**
// 	 * Prohibit Factory instantiation.
// 	 */
// 	protected Factory() {} 
// 
// 	/**
// 	 * Returns a new 'default' runtime object.
// 	 * @return
// 	 */
// 	public final static Runtime getRuntime() {
// 		//return getRuntime(Configuration.getImplementation());
// 		if ( rt == null ) {
// 			synchronized (Factory.class) {
// 				if ( Configuration.getImplementation().equals("default")) {
// 					rt = new ImplicitWorkStealingRuntime();
// 				} else {
// 					// try to load runtime from specified class 
// 					ClassLoader cl = Factory.class.getClassLoader();
// 					try {
// 						Class<?> klazz = cl.loadClass(Configuration.getImplementation());
// 						Object obj = klazz.newInstance();
// 						rt = (Runtime)obj;
// 					} catch (ClassNotFoundException e) {
// 						throw new Error("Cannot load runtime class : " + Configuration.getImplementation(),e);
// 					} catch (InstantiationException e) {
// 						throw new Error("Cannot instantiate class : " + Configuration.getImplementation(),e);
// 					} catch (IllegalAccessException e) {
// 						throw new Error("Cannot access class : " + Configuration.getImplementation(),e);
// 					}
// 				}
// 			}
// 		}
// 		return rt;
// 	}	
// }


import aeminium.runtime.implementations.Configuration;
import aeminium.runtime.implementations.Factory;
package aeminium.runtime.implementations.implicitworkstealing.decider;


public class DeciderFactory {
	protected static ParallelizationDecider decider;

	/**
	 * Prohibit Factory instantiation.
	 */
	protected DeciderFactory() {} 

	/**
	 * Returns a new 'default' runtime object.
	 * @return
	 */
	public final static ParallelizationDecider getDecider() {
		String deciderConf = Configuration.getProperty(DeciderFactory.class, "implementation", "default");
		
// Path: src/aeminium/runtime/implementations/Configuration.java
// public final class Configuration {
// 	protected static final String GLOBAL_PREFIX = "global.";
// 	protected static int processorCount;
// 	protected static String implementation;
// 	protected static final Properties properties; 
// 	
// 	static {
// 		String filename = System.getenv("AEMINIUMRT_CONFIG");
// 		if ( filename == null ) {
// 			filename = "aeminiumrt.config";
// 		}
// 		File file = new File(filename);
// 		properties = new Properties();
// 		if ( file.exists()  && file.canRead()) {
// 			FileReader freader;
// 			try {
// 				freader = new FileReader(file);
// 				properties.load(freader);
// 				freader.close();
// 			}  catch (IOException e) {
// 			} 
// 		} 
// 		
// 		// processor count
// 		String processorCount = properties.getProperty(GLOBAL_PREFIX + "processorCount");
// 		if (processorCount != null ) {
// 			Configuration.processorCount = Integer.valueOf(processorCount);
// 		} else {
// 			Configuration.processorCount = Runtime.getRuntime().availableProcessors();
// 		}
// 			
// 		// implementation
// 		String implementation = properties.getProperty(GLOBAL_PREFIX + "implementation");
// 		if ( implementation != null ) {
// 			Configuration.implementation = implementation;
// 		} else {
// 			Configuration.implementation = "default";
// 		}
// 	}
// 	
// 	protected Configuration() {}
// 	
// 	public final static int getProcessorCount() {
// 		return processorCount;
// 	}
// 	
// 	public final static String getImplementation() {
// 		return implementation;
// 	}
// 
// 	public final static String getProperty(Class<?> klazz, String key, String defaultValue) {
// 		String value = properties.getProperty(klazz.getSimpleName() + "." + key);
// 		if ( value != null ) {
// 			return value.trim();
// 		} else {
// 			return defaultValue;
// 		}
// 	}
// 	
// 	public final static int getProperty(Class<?> klazz, String key, int defaultValue) {
// 		String value = properties.getProperty(klazz.getSimpleName()+ "." + key);
// 		if ( value != null ) {
// 			return Integer.valueOf(value.trim());
// 		} else {
// 			return defaultValue;
// 		}
// 	}
// 	
// 	public final static boolean getProperty(Class<?> klazz, String key, boolean defaultValue) {
// 		String value = properties.getProperty(klazz.getSimpleName()+ "." + key);
// 		if ( value != null ) {
// 			return Boolean.valueOf(value.trim());
// 		} else {
// 			return defaultValue;
// 		}
// 	}
// 
// }
// 
// Path: src/aeminium/runtime/implementations/Factory.java
// public class Factory {
// 	protected static Runtime rt;
// 
// 	/**
// 	 * Prohibit Factory instantiation.
// 	 */
// 	protected Factory() {} 
// 
// 	/**
// 	 * Returns a new 'default' runtime object.
// 	 * @return
// 	 */
// 	public final static Runtime getRuntime() {
// 		//return getRuntime(Configuration.getImplementation());
// 		if ( rt == null ) {
// 			synchronized (Factory.class) {
// 				if ( Configuration.getImplementation().equals("default")) {
// 					rt = new ImplicitWorkStealingRuntime();
// 				} else {
// 					// try to load runtime from specified class 
// 					ClassLoader cl = Factory.class.getClassLoader();
// 					try {
// 						Class<?> klazz = cl.loadClass(Configuration.getImplementation());
// 						Object obj = klazz.newInstance();
// 						rt = (Runtime)obj;
// 					} catch (ClassNotFoundException e) {
// 						throw new Error("Cannot load runtime class : " + Configuration.getImplementation(),e);
// 					} catch (InstantiationException e) {
// 						throw new Error("Cannot instantiate class : " + Configuration.getImplementation(),e);
// 					} catch (IllegalAccessException e) {
// 						throw new Error("Cannot access class : " + Configuration.getImplementation(),e);
// 					}
// 				}
// 			}
// 		}
// 		return rt;
// 	}	
// }


// Path: src/aeminium/runtime/implementations/implicitworkstealing/decider/DeciderFactory.java
import aeminium.runtime.implementations.Configuration;
import aeminium.runtime.implementations.Factory;

package aeminium.runtime.implementations.implicitworkstealing.decider;


public class DeciderFactory {
	protected static ParallelizationDecider decider;

	/**
	 * Prohibit Factory instantiation.
	 */
	protected DeciderFactory() {} 

	/**
	 * Returns a new 'default' runtime object.
	 * @return
	 */
	public final static ParallelizationDecider getDecider() {
		String deciderConf = Configuration.getProperty(DeciderFactory.class, "implementation", "default");
		
		if ( decider == null ) {