All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.uni.freiburg.iig.telematik.jagal.ts.StatePairContainer Maven / Gradle / Ivy

package de.uni.freiburg.iig.telematik.jagal.ts;

import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import de.invation.code.toval.misc.SetUtils;
import de.uni.freiburg.iig.telematik.jagal.ts.abstr.AbstractState;



public class StatePairContainer, O> {
	
	protected Set> statePairs = new HashSet>();
	
	public StatePairContainer(){}
	
	public StatePairContainer(StatePair... statePairs){
		for(StatePair statePair: statePairs){
			addStatePair(statePair);
		}
	}
	
	public StatePairContainer(Collection> statePairs){
		for(StatePair statePair: statePairs){
			addStatePair(statePair);
		}
	}
	
	public Set> getStatePairs(){
		return Collections.unmodifiableSet(statePairs);
	}
	
	public boolean addStatePair(S state1, S state2){
		return addStatePair(StatePair.createStatePair(state1, state2));
	}
	
	public boolean addStatePair(StatePair statePair){
		return statePairs.add(statePair);
	}
	
	public boolean containsStatePair(S state1, S state2){
		return getStatePair(state1, state1) != null;
	}

	public StatePair getStatePair(S state1, S state2){
		return getEqualStatePair(new StatePair(state1, state2));
	}
	
	protected StatePair getEqualStatePair(StatePair statePair){
		for(StatePair pair: statePairs){
			if(statePair.equals(pair)){
				return pair;
			}
		}
		return null;
	}
	
	public static , O> Set> getStatePairsFrom(Collection states){
		Set stateSet = new HashSet(states);
		Set> result = new HashSet>(); 
		for(List statePair: SetUtils.getKElementarySets(stateSet, 2)){
			result.add(new StatePair(statePair.get(0), statePair.get(1)));
		}
		return result;
	}
	
}