package org.infinispan.objectfilter.impl.predicateindex;

import org.infinispan.objectfilter.impl.util.Interval;

/**
 * A predicate attached to an attribute. It comes in two flavors: condition predicate or interval predicate. An interval
 * predicate represents a range of values (possibly infinite at one end but not both). It requires that the attribute
 * domain is Comparable, otherwise the notion of interval is meaningless. A condition predicate on the other hand can
 * have any arbitrary condition and does not require the attribute value to be Comparable.
 *
 * @author anistor@redhat.com
 * @since 7.0
 */
public final class IntervalPredicate<AttributeDomain extends Comparable<AttributeDomain>> extends Predicate<AttributeDomain> {

   /**
    * The interval.
    */
   private final Interval<AttributeDomain> interval;

   public IntervalPredicate(boolean isRepeated, Interval<AttributeDomain> interval) {
      super(isRepeated, new IntervalCondition<>(interval));
      this.interval = interval;
   }

   public Interval<AttributeDomain> getInterval() {
      return interval;
   }
}
