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

org.snapscript.core.constraint.transform.LocalTransform Maven / Gradle / Ivy

package org.snapscript.core.constraint.transform;

import static java.util.Collections.EMPTY_MAP;

import org.snapscript.core.attribute.Attribute;
import org.snapscript.core.constraint.Constraint;
import org.snapscript.core.scope.Scope;

public class LocalTransform implements ConstraintTransform {
   
   private final ConstraintSource source;
   private final ConstraintIndex index;
   private final Attribute attribute;
   
   public LocalTransform(Attribute attribute){
      this.source = new EmptySource();
      this.index = new PositionIndex(source, EMPTY_MAP);
      this.attribute = attribute;
   }
   
   @Override
   public ConstraintRule apply(Constraint left){
      ConstraintRule rule = new LocalRule(index, attribute, left);
      return new AttributeRule(rule, attribute);
   }
   
   private static class LocalRule extends ConstraintRule {
      
      private final ConstraintIndex index;
      private final Constraint left;
      
      public LocalRule(ConstraintIndex index, Attribute attribute, Constraint left) {
         this.index = index;
         this.left = left;
      }

      @Override
      public Constraint getResult(Scope scope, Constraint returns) {
         return index.update(scope, left, returns);
      }

      @Override
      public Constraint getSource() {
         return null;
      }      
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy