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

Go to download

JAGAL provides implementations for directed graphs (weighted and unweighted) and various types of transition systems as well as utils for graph traversal and modification.

The newest version!
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 final Set> statePairs = new HashSet<>();

        public StatePairContainer() {
        }

        public static , O> StatePairContainer newInstance(StatePair... statePairs) {
                StatePairContainer container = new StatePairContainer<>();
                for (StatePair statePair : statePairs) {
                        container.addStatePair(statePair);
                }
                return container;
        }

        public static , O> StatePairContainer newInstance(Collection> statePairs) {
                StatePairContainer container = new StatePairContainer<>();
                for (StatePair statePair : statePairs) {
                        container.addStatePair(statePair);
                }
                return container;
        }

        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;
        }
}