2 package org.forester.evoinference.distance;
4 import java.util.ArrayList;
6 import java.util.Map.Entry;
8 import java.util.SortedMap;
9 import java.util.SortedSet;
10 import java.util.TreeMap;
11 import java.util.TreeSet;
13 import org.forester.evoinference.matrix.distance.BasicSymmetricalDistanceMatrix;
17 private final List<SortedMap<Double, SortedSet<Integer>>> _data;
20 _data = new ArrayList<SortedMap<Double, SortedSet<Integer>>>();
23 void addPairing( final double key, final int value, final int j ) {
24 final SortedMap<Double, SortedSet<Integer>> m = _data.get( j );
25 addPairing( key, value, m );
28 SortedMap<Double, SortedSet<Integer>> getS( final int j ) {
29 return _data.get( j );
32 Set<Entry<Double, SortedSet<Integer>>> getSentrySet( final int j ) {
33 return _data.get( j ).entrySet();
36 void initialize( final BasicSymmetricalDistanceMatrix d ) {
37 for( int j = 0; j < d.getSize(); ++j ) {
38 final TreeMap<Double, SortedSet<Integer>> map = new TreeMap<Double, SortedSet<Integer>>();
40 for( int i = 0; i < j; ++i ) {
41 addPairing( d.getValues()[ i ][ j ], i, map );
46 void removePairing( final double key, final int value, final int j ) {
47 final SortedMap<Double, SortedSet<Integer>> m = _data.get( j );
48 final SortedSet<Integer> x = m.get( key );
49 if ( x.size() == 1 ) {
50 if ( !x.contains( value ) ) {
51 //TODO remove me later
52 throw new IllegalStateException( "!x.contains( value )" );
56 else if ( x.size() > 1 ) {
57 final boolean removed = x.remove( value );
59 //TODO remove me later
60 throw new IllegalStateException( value + " not found" );
64 //TODO remove me later
65 throw new IllegalStateException( "empty" );
69 private static void addPairing( final double key, final int value, final SortedMap<Double, SortedSet<Integer>> m ) {
70 if ( !m.containsKey( key ) ) {
71 final TreeSet<Integer> x = new TreeSet<Integer>();
76 if ( m.get( key ).contains( value ) ) {
77 //TODO remove me later
78 throw new IllegalStateException( "pairing " + key + " -> " + value + " already exists" );
80 m.get( key ).add( value );