package com.plectix.simulator.stories.weakcompression.util;
import java.util.LinkedHashSet;
import java.util.Set;
import com.plectix.simulator.staticanalysis.stories.MarkOfEvent;
public class GreyCode {
public static Set<MarkOfEvent[]> generateGreyLists(int n) {
Set<MarkOfEvent[]> set = new LinkedHashSet<MarkOfEvent[]>();
MarkOfEvent marks[] = new MarkOfEvent[n];
for (int i = 0; i < marks.length; i++) {
marks[i] = MarkOfEvent.DELETED;
}
int tmp;
for (int i = 0; i < Math.pow(2, n) - 2; i++) {
tmp = getIndex(i + 1);
marks[tmp] = inverse(marks[tmp]);
MarkOfEvent m[] = new MarkOfEvent[n];
m = marks.clone();
if (isGood(m))
set.add(m);
}
return set;
}
private static boolean isGood(MarkOfEvent[] m) {
for (MarkOfEvent markOfEvent : m) {
if (markOfEvent.equals(MarkOfEvent.DELETED))
return true;
}
return false;
}
private static MarkOfEvent inverse(MarkOfEvent markOfEvent) {
if (markOfEvent.equals(MarkOfEvent.DELETED))
return MarkOfEvent.KEPT;
else
return MarkOfEvent.DELETED;
}
private static int getIndex(int i) {
int index = 0;
while (i % 2 == 0) {
i = i / 2;
index++;
}
// System.out.println("index = " + index);
return index;
}
public static void main(String[] args) {
System.out.println("hello");
Set<MarkOfEvent[]> mymarks = generateGreyLists(3);
for (MarkOfEvent[] markOfEvents : mymarks) {
for (int i = 0; i < markOfEvents.length; i++) {
System.out.print(markOfEvents[i] + "\t");
}
System.out.println();
}
}
}