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

hydra.coders.LanguageConstraints Maven / Gradle / Ivy

package hydra.coders;

/**
 * A set of constraints on valid type and term expressions, characterizing a language
 */
public class LanguageConstraints {
  public static final hydra.core.Name NAME = new hydra.core.Name("hydra/coders.LanguageConstraints");
  
  /**
   * All supported elimination variants
   */
  public final java.util.Set eliminationVariants;
  
  /**
   * All supported literal variants
   */
  public final java.util.Set literalVariants;
  
  /**
   * All supported float types
   */
  public final java.util.Set floatTypes;
  
  /**
   * All supported function variants
   */
  public final java.util.Set functionVariants;
  
  /**
   * All supported integer types
   */
  public final java.util.Set integerTypes;
  
  /**
   * All supported term variants
   */
  public final java.util.Set termVariants;
  
  /**
   * All supported type variants
   */
  public final java.util.Set typeVariants;
  
  /**
   * A logical set of types, as a predicate which tests a type for inclusion
   */
  public final java.util.function.Function, Boolean> types;
  
  public LanguageConstraints (java.util.Set eliminationVariants, java.util.Set literalVariants, java.util.Set floatTypes, java.util.Set functionVariants, java.util.Set integerTypes, java.util.Set termVariants, java.util.Set typeVariants, java.util.function.Function, Boolean> types) {
    this.eliminationVariants = eliminationVariants;
    this.literalVariants = literalVariants;
    this.floatTypes = floatTypes;
    this.functionVariants = functionVariants;
    this.integerTypes = integerTypes;
    this.termVariants = termVariants;
    this.typeVariants = typeVariants;
    this.types = types;
  }
  
  @Override
  public boolean equals(Object other) {
    if (!(other instanceof LanguageConstraints)) {
      return false;
    }
    LanguageConstraints o = (LanguageConstraints) (other);
    return eliminationVariants.equals(o.eliminationVariants) && literalVariants.equals(o.literalVariants) && floatTypes.equals(o.floatTypes) && functionVariants.equals(o.functionVariants) && integerTypes.equals(o.integerTypes) && termVariants.equals(o.termVariants) && typeVariants.equals(o.typeVariants) && types.equals(o.types);
  }
  
  @Override
  public int hashCode() {
    return 2 * eliminationVariants.hashCode() + 3 * literalVariants.hashCode() + 5 * floatTypes.hashCode() + 7 * functionVariants.hashCode() + 11 * integerTypes.hashCode() + 13 * termVariants.hashCode() + 17 * typeVariants.hashCode() + 19 * types.hashCode();
  }
  
  public LanguageConstraints withEliminationVariants(java.util.Set eliminationVariants) {
    return new LanguageConstraints(eliminationVariants, literalVariants, floatTypes, functionVariants, integerTypes, termVariants, typeVariants, types);
  }
  
  public LanguageConstraints withLiteralVariants(java.util.Set literalVariants) {
    return new LanguageConstraints(eliminationVariants, literalVariants, floatTypes, functionVariants, integerTypes, termVariants, typeVariants, types);
  }
  
  public LanguageConstraints withFloatTypes(java.util.Set floatTypes) {
    return new LanguageConstraints(eliminationVariants, literalVariants, floatTypes, functionVariants, integerTypes, termVariants, typeVariants, types);
  }
  
  public LanguageConstraints withFunctionVariants(java.util.Set functionVariants) {
    return new LanguageConstraints(eliminationVariants, literalVariants, floatTypes, functionVariants, integerTypes, termVariants, typeVariants, types);
  }
  
  public LanguageConstraints withIntegerTypes(java.util.Set integerTypes) {
    return new LanguageConstraints(eliminationVariants, literalVariants, floatTypes, functionVariants, integerTypes, termVariants, typeVariants, types);
  }
  
  public LanguageConstraints withTermVariants(java.util.Set termVariants) {
    return new LanguageConstraints(eliminationVariants, literalVariants, floatTypes, functionVariants, integerTypes, termVariants, typeVariants, types);
  }
  
  public LanguageConstraints withTypeVariants(java.util.Set typeVariants) {
    return new LanguageConstraints(eliminationVariants, literalVariants, floatTypes, functionVariants, integerTypes, termVariants, typeVariants, types);
  }
  
  public LanguageConstraints withTypes(java.util.function.Function, Boolean> types) {
    return new LanguageConstraints(eliminationVariants, literalVariants, floatTypes, functionVariants, integerTypes, termVariants, typeVariants, types);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy