![JAR search and dependency download from the Maven repository](/logo.png)
org.ggp.base.util.gdl.transforms.ImmutableConstantChecker Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of alloy-ggp-base Show documentation
Show all versions of alloy-ggp-base Show documentation
A modified version of the GGP-Base library for Alloy.
The newest version!
package org.ggp.base.util.gdl.transforms;
import org.ggp.base.util.gdl.grammar.GdlSentence;
import org.ggp.base.util.gdl.model.ImmutableSentenceFormModel;
import org.ggp.base.util.gdl.model.SentenceForm;
import org.ggp.base.util.gdl.model.SentenceFormModel;
import com.google.common.base.Preconditions;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSetMultimap;
import com.google.common.collect.Multimap;
import com.google.common.collect.SetMultimap;
public class ImmutableConstantChecker implements ConstantChecker {
private final ImmutableSentenceFormModel sentenceModel;
private final ImmutableSetMultimap sentencesByForm;
private final ImmutableSet allSentences;
private ImmutableConstantChecker(ImmutableSentenceFormModel sentenceModel,
ImmutableSetMultimap sentencesByForm) {
Preconditions.checkArgument(sentenceModel.getConstantSentenceForms().containsAll(sentencesByForm.keySet()));
this.sentenceModel = sentenceModel;
this.sentencesByForm = sentencesByForm;
ImmutableSet.Builder allSentencesBuilder = ImmutableSet.builder();
for (GdlSentence sentence : sentencesByForm.values()) {
allSentencesBuilder.add(sentence);
}
this.allSentences = allSentencesBuilder.build();
}
/**
* Returns an ImmutableConstantChecker with contents identical to the
* given ConstantChecker.
*
* May not actually make a copy if the input is immutable.
*/
public static ImmutableConstantChecker copyOf(ConstantChecker other) {
if (other instanceof ImmutableConstantChecker) {
return (ImmutableConstantChecker) other;
}
SentenceFormModel model = other.getSentenceFormModel();
SetMultimap sentencesByForm = HashMultimap.create();
for (SentenceForm form : other.getConstantSentenceForms()) {
sentencesByForm.putAll(form, other.getTrueSentences(form));
}
return new ImmutableConstantChecker(ImmutableSentenceFormModel.copyOf(model),
ImmutableSetMultimap.copyOf(sentencesByForm));
}
public static ImmutableConstantChecker create(SentenceFormModel sentenceModel,
Multimap sentencesByForm) {
return new ImmutableConstantChecker(ImmutableSentenceFormModel.copyOf(sentenceModel),
ImmutableSetMultimap.copyOf(sentencesByForm));
}
@Override
public boolean hasConstantForm(GdlSentence sentence) {
for (SentenceForm form : getConstantSentenceForms()) {
if (form.matches(sentence)) {
return true;
}
}
return false;
}
@Override
public boolean isConstantForm(SentenceForm form) {
return sentenceModel.getConstantSentenceForms().contains(form);
}
@Override
public ImmutableSet getTrueSentences(SentenceForm form) {
return sentencesByForm.get(form);
}
@Override
public ImmutableSet getConstantSentenceForms() {
return sentenceModel.getConstantSentenceForms();
}
@Override
public boolean isTrueConstant(GdlSentence sentence) {
return allSentences.contains(sentence);
}
@Override
public SentenceFormModel getSentenceFormModel() {
return sentenceModel;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy