1 package prefuse.util.collections; 2 3 import java.util.Comparator ; 4 5 11 public class CompositeComparator implements Comparator { 12 13 private static final int INCREMENT = 2; 14 private Comparator [] m_cmp; 15 private int m_rev = 1; 16 private int m_size = 0; 17 18 22 public CompositeComparator(int size) { 23 this(size, false); 24 } 25 26 32 public CompositeComparator(int size, boolean reverse) { 33 m_cmp = new Comparator [size]; 34 m_rev = reverse ? -1 : 1; 35 } 36 37 41 public CompositeComparator(Comparator [] cmp) { 42 this(cmp, false); 43 } 44 45 51 public CompositeComparator(Comparator [] cmp, boolean reverse) { 52 this(cmp.length, reverse); 53 System.arraycopy(cmp, 0, m_cmp, 0, cmp.length); 54 m_size = cmp.length; 55 } 56 57 61 public void add(Comparator c) { 62 if ( c == null ) return; 63 if ( m_cmp.length == m_size ) { 64 Comparator [] cmp = new Comparator [m_size+INCREMENT]; 65 System.arraycopy(m_cmp, 0, cmp, 0, m_size); 66 m_cmp = cmp; 67 } 68 m_cmp[m_size++] = c; 69 } 70 71 77 public boolean remove(Comparator c) { 78 for ( int i=0; i<m_size; ++i ) { 79 if ( m_cmp[i].equals(c) ) { 80 System.arraycopy(m_cmp, i+1, m_cmp, i, m_size-i); 81 --m_size; 82 return true; 83 } 84 } 85 return false; 86 } 87 88 90 93 public int compare(Object o1, Object o2) { 94 for ( int i=0; i<m_cmp.length; ++i ) { 95 int c = m_cmp[i].compare(o1, o2); 96 if ( c != 0 ) { 97 return m_rev*c; 98 } 99 } 100 return 0; 101 } 102 103 } | Popular Tags |