001package com.hammurapi.extract; 002 003import java.util.concurrent.TimeUnit; 004 005 006public class LessThan<T, V extends Comparable<V>, C> extends ComparisonPredicate<T, V, C> { 007 008 public LessThan( 009 double initialCost, 010 TimeUnit costUnit, 011 Extractor<T, V, C> leftExtractor, 012 Extractor<T, V, C> rightExtractor) { 013 super(initialCost, costUnit, leftExtractor, rightExtractor); 014 } 015 016 @Override 017 public com.hammurapi.extract.ComparisonResult compareTo(Extractor<T, Boolean, C> otherPredicate) { 018 if (equals(otherPredicate)) { 019 return ComparisonResult.EQUAL_NM; 020 } 021 022 /** 023 * TODO Implement comparisons. 024 * a * b ? c * d, * - can be <, <=, ==, !=, =>, > 025 * 36 permutations. Each permutation - compare a/b, c/d 026 */ 027 028 // TODO if both parts are constants - comparison with True/False. 029 030 return super.compareTo(otherPredicate); 031 } 032 033 @Override 034 protected boolean compare(int n1, int n2) { 035 return n1<n2; 036 } 037 038 @Override 039 protected boolean compare(long n1, long n2) { 040 return n1<n2; 041 } 042 043 @Override 044 protected boolean compare(float n1, float n2) { 045 return n1<n2; 046 } 047 048 @Override 049 protected boolean compare(double n1, double n2) { 050 return n1<n2; 051 } 052 053 @SuppressWarnings({ "unchecked", "rawtypes" }) 054 @Override 055 protected boolean compare(Object o1, Object o2) { 056 if (o1 instanceof Comparable) { 057 return ((Comparable) o1).compareTo(o2)<0; 058 } 059 throw new UnsupportedOperationException("Can't compare "+getClass().getName()+" on "+o1+" and "+o2); 060 } 061 062 @Override 063 protected Extractor<T, Boolean, C> newInstance(Extractor<T, V, C> leftExtractor, Extractor<T, V, C> rightExtractor) { 064 return new LessThan<T,V,C>(initialCost, costUnit, leftExtractor, rightExtractor); 065 } 066 067}