package org.mapdb.tuple; import org.mapdb.Serializer; import java.util.Comparator; /** * Utility methods for tuples */ public final class Tuple { //TODO make btreemap.prefixMap() work /** returns true if all elements are equal, works with nulls*/ static boolean eq(Object a, Object b) { return a==b || (a!=null && a.equals(b)); } /** compare method which respects 'null' as negative infinity and 'HI' as positive inf */ static <E> int compare2(Comparator<E> comparator, E a, E b) { if(a==b) return 0; if(a==null||b==HI) return -1; if(b==null||a==HI) return 1; return comparator.compare(a,b); } static final Comparator<Tuple2> TUPLE2_COMPARATOR = new Tuple2Serializer(Serializer.ELSA,Serializer.ELSA); static final Comparator<Tuple3> TUPLE3_COMPARATOR = new Tuple3Serializer(Serializer.ELSA,Serializer.ELSA,Serializer.ELSA); static final Comparator<Tuple4> TUPLE4_COMPARATOR = new Tuple4Serializer(Serializer.ELSA,Serializer.ELSA,Serializer.ELSA,Serializer.ELSA); static final Comparator<Tuple5> TUPLE5_COMPARATOR = new Tuple5Serializer(Serializer.ELSA,Serializer.ELSA,Serializer.ELSA,Serializer.ELSA,Serializer.ELSA); static final Comparator<Tuple6> TUPLE6_COMPARATOR = new Tuple6Serializer(Serializer.ELSA,Serializer.ELSA,Serializer.ELSA,Serializer.ELSA,Serializer.ELSA,Serializer.ELSA); /** positive infinity object. Is larger than anything else. Used in tuple comparators. * Negative infinity is represented by 'null' */ public static final Object HI = new Comparable(){ @Override public String toString() { return "HI"; } @Override public int compareTo(final Object o) { return o==HI?0:1; //always greater than anything else } }; /** autocast version of `HI`*/ public static <A> A HI(){ return (A) HI; } static <E> E hiIfNull(E e){ return e==null ? HI() : e; } public static <A,B> Tuple2<A,B> t2(A a, B b) { return new Tuple2<>(a, b); } public static <A,B,C> Tuple3<A,B,C> t3(A a, B b, C c) { return new Tuple3<>(a, b, c); } public static <A,B,C,D> Tuple4<A,B,C,D> t4(A a, B b, C c, D d) { return new Tuple4<>(a, b, c, d); } public static <A,B,C,D,E> Tuple5<A,B,C,D,E> t5(A a, B b, C c, D d, E e) { return new Tuple5<>(a, b, c, d, e); } public static <A,B,C,D,E,F> Tuple6<A,B,C,D,E,F> t6(A a, B b, C c, D d, E e, F f) { return new Tuple6<>(a, b, c, d, e, f); } // // /** // * Tuple2 Serializer which uses Default Serializer from DB and expect values to implement {@code Comparable} interface. // */ // public static final Tuple2Serializer TUPLE2 = new Tuple2Serializer(null, null, null); // // /** // * Tuple3 Serializer which uses Default Serializer from DB and expect values to implement {@code Comparable} interface. // */ // public static final Tuple3Serializer TUPLE3 = new Tuple3Serializer(null, null, null, null, null); // /** // * Tuple4 Serializer which uses Default Serializer from DB and expect values to implement {@code Comparable} interface. // */ // public static final Tuple4Serializer TUPLE4 = new Tuple4Serializer(null, null, null, null, null, null, null); }