// Path: src/main/java/alma/fr/basecomponents/IBase.java
// public interface IBase {
// 
// 	/**
// 	 * Return the number of bit to a depth
// 	 * 
// 	 * @param depth
// 	 * @return bit number
// 	 */
// 	public Integer getSumBit(Integer depth);
// 
// 	/**
// 	 * The number of bit used at a given depth
// 	 * 
// 	 * @param depth
// 	 * @return bit number
// 	 */
// 	Integer getBitBase(Integer depth);
// 
// 	/**
// 	 * the number of bit at depth 1
// 	 * 
// 	 * @return bit number
// 	 */
// 	Integer getBaseBase();
// 
// 	/**
// 	 * Substract value to r
// 	 * 
// 	 * @param r
// 	 * @param value
// 	 * @return r-value
// 	 */
// 	BigInteger sub(BigInteger r, BigInteger value);
// 
// 	/**
// 	 * Add value to r
// 	 * 
// 	 * @param r
// 	 * @param value
// 	 * @return r+value
// 	 */
// 	BigInteger add(BigInteger r, BigInteger value);
// 
// 	/**
// 	 * Process the interval (i.e. number of id possible) between p and q, p <_id
// 	 * q.
// 	 * 
// 	 * @param p
// 	 *            previous digit
// 	 * @param q
// 	 *            next digit
// 	 * @param index
// 	 *            depth of processing
// 	 * @return the interval at given depth
// 	 */
// 	BigInteger interval(BigInteger p, BigInteger q, Integer index);
// 
// }
// 
// Path: src/main/java/alma/fr/data/Positions.java
// public class Positions implements Comparable<Positions> {
// 
// 	private final BigInteger d;
// 	private final Integer s;
// 	private final Integer c;
// 
// 	public Positions(BigInteger r, int bitSize, Replica rep) {
// 		d = r.setBit(bitSize); // set the departure bit to 1. Thus the 0 in
// 								// front won't be automatically truncated by
// 								// BigInteger
// 		s = rep.getId();
// 		c = rep.getClock();
// 	}
// 
// 	public BigInteger getD() {
// 		return d;
// 	}
// 
// 	public Integer getC() {
// 		return c;
// 	}
// 
// 	public Integer getS() {
// 		return s;
// 	}
// 
// 	public int compareTo(Positions o) {
// 		// #1 truncate
// 		int myBitLength = d.bitLength();
// 		int otBitLength = o.d.bitLength();
// 
// 		int difBitLength = myBitLength - otBitLength;
// 
// 		BigInteger other;
// 		BigInteger mine;
// 		if (difBitLength > 0) { // mine > other (in size)
// 			other = o.d;
// 			mine = d.shiftRight(difBitLength);
// 		} else {
// 			other = o.d.shiftRight(-difBitLength);
// 			mine = d;
// 		}
// 		// #2 compare digit
// 		int comp = mine.compareTo(other);
// 		if (comp != 0) {
// 			return comp;
// 		}
// 
// 		// #3 compare s and c
// 		comp = s.compareTo(o.s);
// 		if (comp != 0) { // s != o.s
// 			return comp;
// 		} else {
// 			comp = c.compareTo(o.c);
// 			if (comp != 0) { // C != o.C
// 				return comp;
// 			}
// 		}
// 
// 		// #4 compare size
// 		if (myBitLength > otBitLength) {
// 			return 1;
// 		} else if (myBitLength < otBitLength) {
// 			return -1;
// 		}
// 
// 		return 0;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "<d" + d.toString() + "; s " + s + "; c " + c.toString() + ">";
// 	}
// 
// }
// 
// Path: src/main/java/alma/fr/logootenginecomponents/Replica.java
// public class Replica {
// 
// 	private Integer id; // Id of replica
// 	private Integer clock; // clock of replica
// 
// 	public Replica() {
// 		id = 0;
// 		clock = 0;
// 	}
// 
// 	public void setClock(Integer clock) {
// 		this.clock = clock;
// 	}
// 
// 	public void setId(Integer id) {
// 		this.id = id;
// 	}
// 
// 	public Integer getClock() {
// 		return clock;
// 	}
// 
// 	public Integer getId() {
// 		return id;
// 	}
// 
// }
// 
// Path: src/main/java/alma/fr/strategiescomponents/IIdProviderStrategy.java
// public interface IIdProviderStrategy {
// 
// 	/**
// 	 * Generate N identifier between p & q
// 	 * 
// 	 * @param p
// 	 *            previous identifier
// 	 * @param q
// 	 *            next identifier
// 	 * @param N
// 	 *            number of line inserted
// 	 * @param rep
// 	 *            replica informations to store
// 	 * @return list of unique identifiers which can be used in logoot
// 	 */
// 	public Iterator<Positions> generateIdentifiers(Positions p, Positions q,
// 			Integer N, Replica rep, BigInteger interval, int index);
// }


import java.math.BigInteger;
import java.util.HashMap;
import java.util.Iterator;
import alma.fr.basecomponents.IBase;
import alma.fr.data.Positions;
import alma.fr.logootenginecomponents.Replica;
import alma.fr.strategiescomponents.IIdProviderStrategy;
import com.google.inject.Inject;
package alma.fr.strategychoicecomponents;




public class SingleStrategyChoice implements IStrategyChoice {
	private HashMap<Positions, FakeListNode> spectrum = new HashMap<Positions, FakeListNode>();

	private Integer date = 0;

	@Inject
	IIdProviderStrategy strategy;

	@Inject
	IBase base;

	@Inject
// Path: src/main/java/alma/fr/basecomponents/IBase.java
// public interface IBase {
// 
// 	/**
// 	 * Return the number of bit to a depth
// 	 * 
// 	 * @param depth
// 	 * @return bit number
// 	 */
// 	public Integer getSumBit(Integer depth);
// 
// 	/**
// 	 * The number of bit used at a given depth
// 	 * 
// 	 * @param depth
// 	 * @return bit number
// 	 */
// 	Integer getBitBase(Integer depth);
// 
// 	/**
// 	 * the number of bit at depth 1
// 	 * 
// 	 * @return bit number
// 	 */
// 	Integer getBaseBase();
// 
// 	/**
// 	 * Substract value to r
// 	 * 
// 	 * @param r
// 	 * @param value
// 	 * @return r-value
// 	 */
// 	BigInteger sub(BigInteger r, BigInteger value);
// 
// 	/**
// 	 * Add value to r
// 	 * 
// 	 * @param r
// 	 * @param value
// 	 * @return r+value
// 	 */
// 	BigInteger add(BigInteger r, BigInteger value);
// 
// 	/**
// 	 * Process the interval (i.e. number of id possible) between p and q, p <_id
// 	 * q.
// 	 * 
// 	 * @param p
// 	 *            previous digit
// 	 * @param q
// 	 *            next digit
// 	 * @param index
// 	 *            depth of processing
// 	 * @return the interval at given depth
// 	 */
// 	BigInteger interval(BigInteger p, BigInteger q, Integer index);
// 
// }
// 
// Path: src/main/java/alma/fr/data/Positions.java
// public class Positions implements Comparable<Positions> {
// 
// 	private final BigInteger d;
// 	private final Integer s;
// 	private final Integer c;
// 
// 	public Positions(BigInteger r, int bitSize, Replica rep) {
// 		d = r.setBit(bitSize); // set the departure bit to 1. Thus the 0 in
// 								// front won't be automatically truncated by
// 								// BigInteger
// 		s = rep.getId();
// 		c = rep.getClock();
// 	}
// 
// 	public BigInteger getD() {
// 		return d;
// 	}
// 
// 	public Integer getC() {
// 		return c;
// 	}
// 
// 	public Integer getS() {
// 		return s;
// 	}
// 
// 	public int compareTo(Positions o) {
// 		// #1 truncate
// 		int myBitLength = d.bitLength();
// 		int otBitLength = o.d.bitLength();
// 
// 		int difBitLength = myBitLength - otBitLength;
// 
// 		BigInteger other;
// 		BigInteger mine;
// 		if (difBitLength > 0) { // mine > other (in size)
// 			other = o.d;
// 			mine = d.shiftRight(difBitLength);
// 		} else {
// 			other = o.d.shiftRight(-difBitLength);
// 			mine = d;
// 		}
// 		// #2 compare digit
// 		int comp = mine.compareTo(other);
// 		if (comp != 0) {
// 			return comp;
// 		}
// 
// 		// #3 compare s and c
// 		comp = s.compareTo(o.s);
// 		if (comp != 0) { // s != o.s
// 			return comp;
// 		} else {
// 			comp = c.compareTo(o.c);
// 			if (comp != 0) { // C != o.C
// 				return comp;
// 			}
// 		}
// 
// 		// #4 compare size
// 		if (myBitLength > otBitLength) {
// 			return 1;
// 		} else if (myBitLength < otBitLength) {
// 			return -1;
// 		}
// 
// 		return 0;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "<d" + d.toString() + "; s " + s + "; c " + c.toString() + ">";
// 	}
// 
// }
// 
// Path: src/main/java/alma/fr/logootenginecomponents/Replica.java
// public class Replica {
// 
// 	private Integer id; // Id of replica
// 	private Integer clock; // clock of replica
// 
// 	public Replica() {
// 		id = 0;
// 		clock = 0;
// 	}
// 
// 	public void setClock(Integer clock) {
// 		this.clock = clock;
// 	}
// 
// 	public void setId(Integer id) {
// 		this.id = id;
// 	}
// 
// 	public Integer getClock() {
// 		return clock;
// 	}
// 
// 	public Integer getId() {
// 		return id;
// 	}
// 
// }
// 
// Path: src/main/java/alma/fr/strategiescomponents/IIdProviderStrategy.java
// public interface IIdProviderStrategy {
// 
// 	/**
// 	 * Generate N identifier between p & q
// 	 * 
// 	 * @param p
// 	 *            previous identifier
// 	 * @param q
// 	 *            next identifier
// 	 * @param N
// 	 *            number of line inserted
// 	 * @param rep
// 	 *            replica informations to store
// 	 * @return list of unique identifiers which can be used in logoot
// 	 */
// 	public Iterator<Positions> generateIdentifiers(Positions p, Positions q,
// 			Integer N, Replica rep, BigInteger interval, int index);
// }


// Path: src/main/java/alma/fr/strategychoicecomponents/SingleStrategyChoice.java
import java.math.BigInteger;
import java.util.HashMap;
import java.util.Iterator;
import alma.fr.basecomponents.IBase;
import alma.fr.data.Positions;
import alma.fr.logootenginecomponents.Replica;
import alma.fr.strategiescomponents.IIdProviderStrategy;
import com.google.inject.Inject;

package alma.fr.strategychoicecomponents;




public class SingleStrategyChoice implements IStrategyChoice {
	private HashMap<Positions, FakeListNode> spectrum = new HashMap<Positions, FakeListNode>();

	private Integer date = 0;

	@Inject
	IIdProviderStrategy strategy;

	@Inject
	IBase base;

	@Inject
	public SingleStrategyChoice(IIdProviderStrategy strategy, IBase base) {