2D Graphics Android

// Created by plusminus on 13:24:05 - 21.09.2008
//package org.andnav2.osm.util;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
class Util {
  public static final String DEBUGTAG = "OPENSTREETMAP";
  public static final String BASEPATH_ON_EXTERNAL_MEDIA = "andnav2/";
  public static final String SDCARD_SAVEDROUTES_PATH = "routes/";
  public static final String SDCARD_SAVEDTRACES_PATH = "traces/";
  public static final String SDCARD_SKYHOOKCACHE_PATH = "skyhookcache/";
  public static final String SDCARD_TILE_PATH = "tiles/";
  public static final int NOT_SET = Integer.MIN_VALUE;
  public static final int Y = 0;
  public static final int X = 1;
  /**
   * 
   * @param pOrderedPoints Ordered means that the points are placed as if they are a line.
   */
  public static void smoothLine(final Set pPointsInLineorder){
    ValuePair prev = null;
    ValuePair cur;
    /* We want only uniqe new values. */
    final Set newPoints = new TreeSet(new Comparator(){
      @Override
      public int compare(final ValuePair a, final ValuePair b) {
        return a.compareTo(b);
      }
    });
    for(final Iterator lineIterator = pPointsInLineorder.iterator(); lineIterator.hasNext(); ) {
      cur = lineIterator.next();
      if(prev != null){
        final int difA = cur.a - prev.a;
        final int difB = cur.b - prev.b;
        /* Check if we have a diagonal jump, like: (See X's)
         * 
         *      X----
         * ----X
         * 
         * */
        if(Math.abs(difA) == 1 && Math.abs(difB) == 1){
          /* Add two new points (See O's)
           * 
           *     0X----
           * ----X0
           * 
           */
          newPoints.add(new ValuePair(cur.a, prev.b));
          newPoints.add(new ValuePair(prev.a, cur.b));
        }
      }
      prev = cur;
    }
    pPointsInLineorder.addAll(newPoints);
  }}
class ValuePair implements Comparable{
  //          
  // Constants
  //          
  //          
  // Fields
  //          
  final int a,b;
  //          
  // Constructors
  //          
  public ValuePair(final int[] reuse) {
    this.a = reuse[0];
    this.b = reuse[1];
  }
  public ValuePair(final int pA, final int pB) {
    this.a = pA;
    this.b = pB;
  }
  //          
  // Getter & Setter
  //          
  public int[] toArray() {
    return new int[]{this.a,this.b};
  }
  public int getValueA() {
    return this.a;
  }
  public int getValueB() {
    return this.b;
  }
  //          
  // Methods from SuperClass/Interfaces
  //          
  @Override
  public boolean equals(final Object o) {
    return o instanceof ValuePair
    && this.a == ((ValuePair)o).a
    && this.b == ((ValuePair)o).b;
  }
  @Override
  public int compareTo(final ValuePair another) {
    if(this.a != another.a) {
      return this.a - another.a;
    } else if(this.b != another.b) {
      return this.b - another.b;
    } else {
      return 0;
    }
  }
  //          
  // Methods
  //          
}