You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2013/03/28 20:31:16 UTC

svn commit: r1462267 [2/2] - in /uima/uimaj/trunk: ./ PearPackagingMavenPlugin/ aggregate-uimaj-docbooks/ aggregate-uimaj-eclipse-plugins/ aggregate-uimaj/ jVinci/ src/ src/main/scripts/ uima-docbook-overview-and-setup/ uima-docbook-references/ uima-do...

Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/IntArrayRBT.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/IntArrayRBT.java?rev=1462267&r1=1462266&r2=1462267&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/IntArrayRBT.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/IntArrayRBT.java Thu Mar 28 19:31:14 2013
@@ -117,7 +117,7 @@ public class IntArrayRBT {
       if (!isValid()) {
         throw new NoSuchElementException();
       }
-      return IntArrayRBT.this.key[this.currentNode];
+      return IntArrayRBT.this.getKey(this.currentNode);
     }
 
     /**
@@ -183,8 +183,8 @@ public class IntArrayRBT {
       if (!hasNext()) {
         throw new NoSuchElementException();
       }
-      this.currentNode = nextNode(this.currentNode);
-      return IntArrayRBT.this.key[this.currentNode];
+      this.currentNode = (this.currentNode == NIL) ? getFirstNode() : nextNode(this.currentNode);
+      return IntArrayRBT.this.getKey(this.currentNode);
     }
 
     /**
@@ -201,7 +201,7 @@ public class IntArrayRBT {
       if (!hasPrevious()) {
         throw new NoSuchElementException();
       }
-      final int currentKey = IntArrayRBT.this.key[this.currentNode];
+      final int currentKey = IntArrayRBT.this.getKey(this.currentNode);
       if (this.currentNode == getFirstNode()) {
         this.currentNode = NIL;
       } else {
@@ -225,7 +225,7 @@ public class IntArrayRBT {
     }
 
     protected final int getKey(int node) {
-      return IntArrayRBT.this.key[node];
+      return IntArrayRBT.this.getKey(node);
     }
 
   }
@@ -244,24 +244,135 @@ public class IntArrayRBT {
      */
     public int compareTo(Object o) {
       ComparableIterator it = (ComparableIterator) o;
-      return this.comparator.compare(IntArrayRBT.this.key[this.currentNode], it
+      return this.comparator.compare(IntArrayRBT.this.getKey(this.currentNode), it
               .getKey(it.currentNode));
     }
 
   }
 
+  static final private boolean useklrp = true;
   // Keys.
-  protected int[] key;
+  private int[] key;
 
   // Left daughters.
-  protected int[] left;
+  private int[] left;
 
   // Right daughters.
-  protected int[] right;
+  private int[] right;
 
   // Parents.
-  protected int[] parent;
+  private int[] parent;
+  
+  // alternate layout
+  private int[] klrp;
+  // the next 3 are for the rare cases where the number of entries
+  // in this instance exceeds 512 * 1024 * 1024 - 1
+  // which is the largest index that can be stored in klrp
+  //   because it is shifted left by 2
+  private int[] klrp1;
+  private int[] klrp2;
+  private int[] klrp3;
+  private static final int MAXklrp0 = 512 * 1024 * 1024;
+  private static final int MAXklrpMask = MAXklrp0 - 1;
+
+    
+  private int getXXX(int node, int offset) {
+    if (node < MAXklrp0) {
+      return klrp[(node << 2) + offset];
+    } else {
+      final int w = node >> 29;
+      final int i = ((node & MAXklrpMask) << 2) + offset;
+      switch (w) {
+      case 1:
+        return klrp1[i];
+      case 2:
+        return klrp2[i];
+      case 3:
+        return klrp3[i];
+      default:
+        throw new RuntimeException();
+      }
+    }
+  }
+
+  private int setXXX(int node, int offset, int value) {
+    if (node < MAXklrp0) {
+//      if (((node << 2) + offset) >= klrp.length) {
+//        System.out.println("caught");
+//      }
+      return klrp[(node << 2) + offset] = value;
+    } else {
+      final int w = node >> 29;
+      final int i = ((node & MAXklrpMask) << 2) + offset;
+      switch (w) {
+      case 1:
+        return klrp1[i] = value;
+      case 2:
+        return klrp2[i] = value;
+      case 3:
+        return klrp3[i] = value;
+      default:
+        throw new RuntimeException();
+      }
+    }
+  }
+
+  protected int getKey(int node) {
+    if (useklrp) {
+      return getXXX(node, 0);
+    }
+    return key[node];
+  }
 
+  protected int setKey(int node, int value) {
+    if (useklrp) {
+      return setXXX(node, 0, value);
+    }
+    return key[node] = value;
+  }
+  
+  protected int getLeft(int node) {
+    if (useklrp) {
+      return getXXX(node, 1);
+    }
+    return left[node];
+  }
+  
+  protected int setLeft(int node, int value) {
+    if (useklrp) {
+      return setXXX(node, 1, value);
+    }
+    return left[node] = value;
+  }
+  
+  protected int getRight(int node) {
+    if (useklrp) {
+      return getXXX(node, 2);
+    }
+    return right[node];
+  }
+  
+  protected int setRight(int node, int value) {
+    if (useklrp) {
+      return setXXX(node, 2, value);
+    }
+    return right[node] = value;
+  }
+  
+  protected int getParent(int node) {
+    if (useklrp) {
+      return getXXX(node, 3);
+    }
+    return parent[node];
+  }
+  
+  protected int setParent(int node, int value) {
+    if (useklrp) {
+      return setXXX(node, 3, value);
+    }
+    return parent[node] = value;
+  }
+  
   // Colors.
   protected boolean[] color;
 
@@ -320,14 +431,18 @@ public class IntArrayRBT {
     this.growth_factor = default_growth_factor;
     this.multiplication_limit = default_multiplication_limit;
     // Init the arrays.
-    this.key = new int[initialSize];
-    this.left = new int[initialSize];
-    this.right = new int[initialSize];
-    this.parent = new int[initialSize];
+    if (useklrp) {
+      klrp = new int[initialSize << 2];
+    } else {
+      this.key = new int[initialSize];
+      this.left = new int[initialSize];
+      this.right = new int[initialSize];
+      this.parent = new int[initialSize];
+    }
     this.color = new boolean[initialSize];
-    this.left[NIL] = NIL;
-    this.right[NIL] = NIL;
-    this.parent[NIL] = NIL;
+    setLeft(NIL, NIL);
+    setRight(NIL, NIL);
+    setParent(NIL, NIL);
     this.color[NIL] = black;
   }
 
@@ -347,132 +462,189 @@ public class IntArrayRBT {
     return this.size;
   }
 
-  private void grow(int initialSize) {
-    this.key = grow(this.key, initialSize);
-    this.left = grow(this.left, initialSize);
-    this.right = grow(this.right, initialSize);
-    this.parent = grow(this.parent, initialSize);
-    this.color = grow(this.color, initialSize);
+  private void grow(int requiredSize) {
+    if (useklrp) {
+      final int w = requiredSize >> 29;  // w is 0-3
+      switch (w) {
+      case 0:
+        if (klrp == null) {
+          klrp = new int[requiredSize << 2];
+        } else {
+          klrp = grow(klrp, requiredSize << 2);
+        }
+        break;
+      case 1:
+        if (klrp1 == null) {
+          klrp1 = new int[(requiredSize & MAXklrpMask) << 2];
+        } else {
+          klrp1 = grow(klrp1, (requiredSize & MAXklrpMask) << 2);
+        }
+        break;
+      case 2:
+        if (klrp2 == null) {
+          klrp2 = new int[(requiredSize & MAXklrpMask) << 2];
+        } else {
+          klrp2 = grow(klrp2, (requiredSize & MAXklrpMask) << 2);
+        }
+        break;
+      case 3:
+        if (klrp3 == null) {
+          klrp3 = new int[(requiredSize & MAXklrpMask) << 2];
+        } else {
+          klrp3 = grow(klrp3, (requiredSize & MAXklrpMask) << 2);
+        }
+        break;
+      default:
+        throw new RuntimeException();
+      }
+    } else {
+      this.key = grow(this.key, requiredSize);
+      this.left = grow(this.left, requiredSize);
+      this.right = grow(this.right, requiredSize);
+      this.parent = grow(this.parent, requiredSize);
+    }
+    this.color = grow(this.color, requiredSize);
   }
   
   public int getKeyForNode(final int node) {
-    return this.key[node];
+    return getKey(node);
   }
 
-  protected int treeInsert(int k) {
-    int x = this.root;
-    int y, z;
-    if ((this.greatestNode != NIL) && (this.key[this.greatestNode] < k)) {
-      y = this.greatestNode;
-      z = newNode(k);
+  protected int treeInsert(final int k) {
+    if ((this.greatestNode != NIL) && (getKey(this.greatestNode) < k)) {
+      final int y = this.greatestNode;
+      final int z = newNode(k);
       this.greatestNode = z;
-    } else {
-      y = NIL;
-      int xKey;
-      while (x != NIL) {
-        y = x;
-        xKey = this.key[x];
-        if (k < xKey) {
-          x = this.left[x];
-        } else if (k == xKey) {
-          return -x;
-        } else { // k == key[x]
-          x = this.right[x];
-        }
-      }
-      // The key was not found, so we create a new node, inserting the
-      // key.
-      z = newNode(k);
+      setRight(y, z);
+      setParent(z, y);
+      return z;
+    } 
+    int y = NIL;
+    int x = this.root;
+    y = NIL;
+    while (x != NIL) {
+      y = x;
+      final int xKey = getKey(x);
+      if (k == xKey) {
+        return -x;
+      }
+      x = (k < xKey) ? getLeft(x) : getRight(x);
     }
+    // The key was not found, so we create a new node, inserting the
+    // key.
+    final int z = newNode(k);
     if (y == NIL) {
       setAsRoot(z);
       this.greatestNode = z;
-      this.parent[z] = NIL;
+      setParent(z, NIL);
     } else {
-      this.parent[z] = y;
-      if (k < this.key[y]) {
-        this.left[y] = z;
+      setParent(z, y);
+      if (k < getKey(y)) {
+        setLeft(y, z);
       } else {
-        this.right[y] = z;
+        setRight(y, z);
       }
     }
     return z;
   }
 
-  protected int treeInsertWithDups(int k) {
-    int x = this.root;
-    int y, z;
-    if ((this.greatestNode != NIL) && (this.key[this.greatestNode] <= k)) {
-      y = this.greatestNode;
-      z = newNode(k);
+  protected int treeInsertWithDups(final int k) {
+    if ((this.greatestNode != NIL) && (getKey(this.greatestNode) <= k)) {
+      final int y = this.greatestNode;
+      final int z = newNode(k);
       this.greatestNode = z;
-      this.right[y] = z;
-      this.parent[z] = y;
+      setRight(y, z);
+      setParent(z, y);
       return z;
     }
-    y = NIL;
-    int xKey;
+    int y = NIL;
+    int x = this.root;
     while (x != NIL) {
       y = x;
-      xKey = this.key[x];
-      if (k < xKey) {
-        x = this.left[x];
-      } else if (k > xKey) {
-        x = this.right[x];
-      } else { // k == key[x]
-        // Randomly search to the left or right.
-        if (this.rand.nextBoolean()) {
-          x = this.left[x];
-        } else {
-          x = this.right[x];
-        }
-      }
+      final int xKey = getKey(x);
+      x = (k < xKey) ? getLeft(x) :
+          (k > xKey) ? getRight(x) :
+        //(k == xKey)
+          (this.rand.nextBoolean()) ?  getLeft(x) : getRight(x);
     }
-    z = newNode(k);
+    final int z = newNode(k);
     if (y == NIL) {
       setAsRoot(z);
       this.greatestNode = z;
-      this.parent[z] = NIL;
+      setParent(z, NIL);
     } else {
-      this.parent[z] = y;
-      if (k < this.key[y]) {
-        this.left[y] = z;
-      } else if (k > this.key[y]) {
-        this.right[y] = z;
+      setParent(z, y);
+      if (k < getKey(y)) {
+        setLeft(y, z);
+      } else if (k > getKey(y)) {
+        setRight(y, z);
       } else { // k == key[y]
         // Randomly insert node to the left or right.
         if (this.rand.nextBoolean()) {
-          this.left[y] = z;
+          setLeft(y, z);
         } else {
-          this.right[y] = z;
+          setRight(y, z);
         }
       }
     }
     return z;
   }
 
-  protected int newNode(int k) {
+  protected int newNode(final int k) {
     // Make sure the tree is big enough to accomodate a new node.
-    if (this.next >= this.key.length) {
-      grow(this.next + 1);
+
+    if (useklrp) {
+      final int lenKlrp = (klrp.length >> 2) +
+                    ((klrp1 != null) ? (klrp1.length >> 2) : 0) +
+                    ((klrp2 != null) ? (klrp2.length >> 2) : 0) +
+                    ((klrp3 != null) ? (klrp3.length >> 2) : 0);
+      if (this.next >= lenKlrp) {
+        grow(this.next + 1);
+      }
+    } else {
+      if (this.next >= this.key.length) {
+        grow(this.next + 1);
+      }
     }
     // assert(key.length > next);
     final int z = this.next;
     ++this.next;
     ++this.size;
-    this.key[z] = k;
-    this.left[z] = NIL;
-    this.right[z] = NIL;
+    setKey(z, k);
+    setLeft(z, NIL);
+    setRight(z, NIL);
     this.color[z] = red;
     return z;
   }
 
   private final void setAsRoot(int x) {
     this.root = x;
-    this.parent[this.root] = NIL;
+    setParent(this.root, NIL);
   }
 
   private final int[] grow(int[] array, int newSize) {
+    if (useklrp) {
+      if (newSize < MAXklrp0) {
+        return IntArrayUtils.ensure_size(array, newSize, this.growth_factor, this.multiplication_limit);
+      }
+      final int w = newSize >> 29;
+      switch (w) {
+      case 1:
+        if (klrp1 == null) {
+          klrp1 = new int[newSize + 1];
+        } else {
+          
+        }
+        break;
+      case 2:
+        break;
+      case 3:
+        break;
+      default:
+        throw new RuntimeException();
+      }
+      
+    }
     return IntArrayUtils.ensure_size(array, newSize, this.growth_factor, this.multiplication_limit);
   }
 
@@ -480,106 +652,139 @@ public class IntArrayRBT {
     return IntArrayUtils.ensure_size(array, newSize, this.growth_factor, this.multiplication_limit);
   }
 
-  private final void leftRotate(int x) {
-    final int y = this.right[x];
-    this.right[x] = this.left[y];
-    if (this.left[y] != NIL) {
-      this.parent[this.left[y]] = x;
+  private final void leftRotate(final int x) {
+    final int y = getRight(x);
+    final int left_of_y = getLeft(y);
+    setRight(x, left_of_y );
+    if (left_of_y  != NIL) {
+      setParent(left_of_y , x);
     }
-    this.parent[y] = this.parent[x];
+    setParent(y, getParent(x));
     if (this.root == x) {
       setAsRoot(y);
     } else {
-      if (x == this.left[this.parent[x]]) {
-        this.left[this.parent[x]] = y;
+      final int parent_x = getParent(x);
+      if (x == getLeft(parent_x)) {
+        setLeft(parent_x, y);
       } else {
-        this.right[this.parent[x]] = y;
+        setRight(parent_x, y);
       }
     }
-    this.left[y] = x;
-    this.parent[x] = y;
+    setLeft(y, x);
+    setParent(x, y);
   }
 
-  private final void rightRotate(int x) {
-    final int y = this.left[x];
-    this.left[x] = this.right[y];
-    if (this.right[y] != NIL) {
-      this.parent[this.right[y]] = x;
+  private final void rightRotate(final int x) {
+    final int y = getLeft(x);
+    final int right_y = getRight(y);
+    setLeft(x, right_y);
+    if (right_y != NIL) {
+      setParent(right_y, x);
     }
-    this.parent[y] = this.parent[x];
+    final int parent_x = getParent(x);
+    setParent(y, parent_x);
     if (this.root == x) {
       setAsRoot(y);
     } else {
-      if (x == this.right[this.parent[x]]) {
-        this.right[this.parent[x]] = y;
+      if (x == getRight(parent_x)) {
+        setRight(parent_x, y);
       } else {
-        this.left[this.parent[x]] = y;
+        setLeft(parent_x, y);
       }
     }
-    this.right[y] = x;
-    this.parent[x] = y;
+    setRight(y, x);
+    setParent(x, y);
   }
 
   public int insertKey(int k) {
     return insertKey(k, false);
   }
+  
+  public int add(int k) {
+    return insertKey(k, false);
+  }
+  
+  /**
+   * like add, but returns boolean flag true if not present before
+   * @param k 
+   * @return true if added (not present before)
+   */
+  public boolean addAdded(int k) {
+    if (this.root == NIL) {
+      final int x = newNode(k);
+      setAsRoot(x);
+      this.color[this.root] = black;
+      this.greatestNode = x;
+      return true;
+    }
+    final int x = treeInsert(k);
+    if (x < NIL) {
+      return false;  // negative if found
+    }
+    commonInsertKey(x);
+    return true;
+  }
 
   public int insertKeyWithDups(int k) {
     return insertKey(k, true);
   }
 
-  private int insertKey(int k, boolean withDups) {
-    int x;
+  private int insertKey(final int k, final boolean withDups) {
     if (this.root == NIL) {
-      x = newNode(k);
+      final int x = newNode(k);
       setAsRoot(x);
       this.color[this.root] = black;
       this.greatestNode = x;
       return x;
     }
-    if (withDups) {
-      x = treeInsertWithDups(k);
-    } else {
-      x = treeInsert(k);
-      if (x < NIL) {
-        return -x;
-      }
+    final int x = withDups ? treeInsertWithDups(k) : treeInsert(k);
+    if (x < NIL) {
+      return -x;
     }
+    return commonInsertKey(x);
+  }
+  
+  private int commonInsertKey(int x) {
     this.color[x] = red;
-    int y;
     final int node = x;
-    while ((x != this.root) && (this.color[this.parent[x]] == red)) {
-      if (this.parent[x] == this.left[this.parent[this.parent[x]]]) {
-        y = this.right[this.parent[this.parent[x]]];
+    while ((x != this.root) && (this.color[getParent(x)] == red)) {
+      final int parent_x = getParent(x);
+      final int parent_parent_x = getParent(parent_x);
+      if (parent_x == getLeft(parent_parent_x)) {
+        final int y = getRight(parent_parent_x);
         if (this.color[y] == red) {
-          this.color[this.parent[x]] = black;
+          this.color[parent_x] = black;
           this.color[y] = black;
-          this.color[this.parent[this.parent[x]]] = red;
-          x = this.parent[this.parent[x]];
+          this.color[parent_parent_x] = red;
+          x = parent_parent_x;
         } else {
-          if (x == this.right[this.parent[x]]) {
-            x = this.parent[x];
+          if (x == getRight(parent_x)) {
+            x = parent_x;
             leftRotate(x);
           }
-          this.color[this.parent[x]] = black;
-          this.color[this.parent[this.parent[x]]] = red;
-          rightRotate(this.parent[this.parent[x]]);
+          final int parent2_x = getParent(x);
+          this.color[parent2_x] = black;
+          final int parent2_parent2_x = getParent(parent2_x);
+          this.color[parent2_parent2_x] = red;
+          rightRotate(parent2_parent2_x);
         }
       } else {
-        y = this.left[this.parent[this.parent[x]]];
+        final int y = getLeft(parent_parent_x);
         if (this.color[y] == red) {
-          this.color[this.parent[x]] = black;
+          this.color[parent_x] = black;
           this.color[y] = black;
-          this.color[this.parent[this.parent[x]]] = red;
-          x = this.parent[this.parent[x]];
+          this.color[parent_parent_x] = red;
+          x = parent_parent_x;
         } else {
-          if (x == this.left[this.parent[x]]) {
-            x = this.parent[x];
+          if (x == getLeft(parent_x)) {
+            x = parent_x;
             rightRotate(x);
           }
-          this.color[this.parent[x]] = black;
-          this.color[this.parent[this.parent[x]]] = red;
-          leftRotate(this.parent[this.parent[x]]);
+          final int parent2_x = getParent(x);
+          this.color[parent2_x] = black;
+          final int parent2_parent2_x = getParent(parent2_x);
+          this.color[parent2_parent2_x] = red;
+          leftRotate(parent2_parent2_x);
         }
       }
     }
@@ -594,15 +799,16 @@ public class IntArrayRBT {
   /**
    * Find the first node such that k &lt;= key[node].
    */
-  public int findKey(int k) {
+  public int findKey(final int k) {
     int node = this.root;
     while (node != NIL) {
-      if (k < this.key[node]) {
-        node = this.left[node];
-      } else if (k == this.key[node]) {
+      final int keyNode = getKey(node);
+      if (k < keyNode) {
+        node = getLeft(node);
+      } else if (k == keyNode) {
         return node;
       } else {
-        node = this.right[node];
+        node = getRight(node);
       }
     }
     // node == NIL
@@ -612,23 +818,32 @@ public class IntArrayRBT {
   /**
    * Find the node such that key[node] >= k and key[previous(node)] < k.
    */
-  public int findInsertionPoint(int k) {
+  public int findInsertionPoint(final int k) {
     int node = this.root;
     int found = node;
     while (node != NIL) {
       found = node;
-      if (k < this.key[node]) {
-        node = this.left[node];
-      } else if (k == this.key[node]) {
+      final int keyNode = getKey(node);
+      if (k < keyNode) {
+        node = getLeft(node);
+      } else if (k == keyNode) {
         // In the presence of duplicates, we have to check if there are
         // identical
         // keys to the left of us.
-        while ((this.left[node] != NIL) && (this.key[this.left[node]] == this.key[node])) {
-          node = this.left[node];
+        while (true) {
+          final int left_node = getLeft(node);
+          if ((left_node == NIL) ||
+              (getKey(left_node) != keyNode)) {
+            break;
+          }
+          node = left_node;
         }
+//        while ((getLeft(node) != NIL) && (getKey(getLeft(node)) == keyNode)) {
+//          node = getLeft(node);
+//        }
         return node;
       } else {
-        node = this.right[node];
+        node = getRight(node);
       }
     }
     // node == NIL
@@ -638,17 +853,18 @@ public class IntArrayRBT {
   /**
    * Find the node such that key[node] >= k and key[previous(node)] < k.
    */
-  public int findInsertionPointNoDups(int k) {
+  public int findInsertionPointNoDups(final int k) {
     int node = this.root;
     int found = node;
     while (node != NIL) {
       found = node;
-      if (k < this.key[node]) {
-        node = this.left[node];
-      } else if (k == this.key[node]) {
+      final int keyNode = getKey(node);
+      if (k < keyNode) {
+        node = getLeft(node);
+      } else if (k == keyNode) {
         return node;
       } else {
-        node = this.right[node];
+        node = getRight(node);
       }
     }
     // node == NIL
@@ -658,11 +874,15 @@ public class IntArrayRBT {
   public final boolean containsKey(int k) {
     return (findKey(k) != NIL);
   }
-
-  private final boolean isLeftDtr(int node) {
-    return ((node != this.root) && (node == this.left[this.parent[node]]));
+  
+  public final boolean contains(int k) {
+    return (findKey(k) != NIL);
   }
 
+//  private final boolean isLeftDtr(int node) {
+//    return ((node != this.root) && (node == getLeft(getParent(node))));
+//  }
+
   // private final boolean isRightDtr(int node) {
   // return ((node != root) && (node == right[parent[node]]));
   // }
@@ -672,9 +892,16 @@ public class IntArrayRBT {
       return NIL;
     }
     int node = this.root;
-    while (this.left[node] != NIL) {
-      node = this.left[node];
-    }
+    while (true) {
+      final int left_node = getLeft(node);
+      if (left_node == NIL) {
+        break;
+      }
+      node = left_node;
+    }
+//    while (getLeft(node) != NIL) {
+//      node = getLeft(node);
+//    }
     return node;
   }
 
@@ -699,16 +926,24 @@ public class IntArrayRBT {
 
   protected final int nextNode(int node) {
     int y;
-    if (this.right[node] != NIL) {
-      node = this.right[node];
-      while (this.left[node] != NIL) {
-        node = this.left[node];
+    final int rightNode = getRight(node);
+    if (rightNode != NIL) {
+      node = rightNode;
+      while (true) {
+        final int leftNode = getLeft(node);
+        if (leftNode == NIL) {
+          break;
+        }
+        node = leftNode;
       }
+//      while (getLeft(node) != NIL) {
+//        node = getLeft(node);
+//      }
     } else {
-      y = this.parent[node];
-      while ((y != NIL) && (node == this.right[y])) {
+      y = getParent(node);
+      while ((y != NIL) && (node == getRight(y))) {
         node = y;
-        y = this.parent[y];
+        y = getParent(y);
       }
       node = y;
     }
@@ -716,26 +951,43 @@ public class IntArrayRBT {
   }
 
   private final int previousNode(int node) {
-    if (this.left[node] != NIL) {
-      node = this.left[node];
-      while (this.right[node] != NIL) {
-        node = this.right[node];
+    final int leftNode = getLeft(node);
+    if (leftNode != NIL) {
+      node = leftNode;
+      while (true) {
+        final int rightNode = getRight(node);
+        if (rightNode == NIL) {
+          break;
+        }
+        node = rightNode;
       }
+//      while (getRight(node) != NIL) {
+//        node = getRight(node);
+//      }
     } else {
-      while (isLeftDtr(node)) {
-        node = this.parent[node];
+      while (true) {
+        final int parentNode = getParent(node);
+        if (node == this.root || (node != getLeft(parentNode))) {
+          break;
+        }
+        node = parentNode;
       }
+      
+//      (node != this.root) && (node == getLeft(getParent(node))))
+//      while (node != this.root && (node == getLeft(parentNode))) {
+//        node = getParent(node);
+//      }
       if (node == this.root) {
         return NIL;
       }
       // node is now a left dtr, so we can go one up.
-      node = this.parent[node];
+      node = getParent(node);
     }
     return node;
   }
 
   public boolean deleteKey(int aKey) {
-    int node = findKey(aKey);
+    final int node = findKey(aKey);
     if (node == NIL) {
       return false;
     }
@@ -744,30 +996,33 @@ public class IntArrayRBT {
     return true;
   }
 
-  private void deleteNode(int z) {
-    int x, y;
-    if ((this.left[z] == NIL) || (this.right[z] == NIL)) {
-      y = z;
-    } else {
-      y = nextNode(z);
-    }
-    if (this.left[y] != NIL) {
-      x = this.left[y];
-    } else {
-      x = this.right[y];
-    }
-    this.parent[x] = this.parent[y];
-    if (this.parent[y] == NIL) {
+  private void deleteNode(final int z) {
+    final int y = ((getLeft(z) == NIL) || (getRight(z) == NIL)) ?  z : nextNode(z);
+//    if ((getLeft(z) == NIL) || (getRight(z) == NIL)) {
+//      y = z;
+//    } else {
+//      y = nextNode(z);
+//    }
+    final int left_y = getLeft(y);
+    final int x = (left_y != NIL) ? left_y : getRight(y);
+//    if (left_y != NIL) {
+//      x = left_y;
+//    } else {
+//      x = getRight(y);
+//    }
+    final int parent_y = getParent(y);
+    setParent(x, parent_y);
+    if (parent_y == NIL) {
       setAsRoot(x);
     } else {
-      if (y == this.left[this.parent[y]]) {
-        this.left[this.parent[y]] = x;
+      if (y == getLeft(parent_y)) {
+        setLeft(parent_y, x);
       } else {
-        this.right[this.parent[y]] = x;
+        setRight(parent_y, x);
       }
     }
     if (y != z) {
-      this.key[z] = this.key[y];
+      setKey(z, y);
     }
     if (this.color[y] == black) {
       deleteFixup(x);
@@ -777,52 +1032,53 @@ public class IntArrayRBT {
   private void deleteFixup(int x) {
     int w;
     while ((x != this.root) && (this.color[x] == black)) {
-      if (x == this.left[this.parent[x]]) {
-        w = this.right[this.parent[x]];
+      final int parent_x = getParent(x);
+      if (x == getLeft(parent_x)) {
+        w = getRight(parent_x);
         if (this.color[w] == red) {
           this.color[w] = black;
-          this.color[this.parent[x]] = red;
-          leftRotate(this.parent[x]);
-          w = this.right[this.parent[x]];
+          this.color[parent_x] = red;
+          leftRotate(parent_x);
+          w = getRight(parent_x);
         }
-        if ((this.color[this.left[w]] == black) && (this.color[this.right[w]] == black)) {
+        if ((this.color[getLeft(w)] == black) && (this.color[getRight(w)] == black)) {
           this.color[w] = red;
-          x = this.parent[x];
+          x = parent_x;
         } else {
-          if (this.color[this.right[w]] == black) {
-            this.color[this.left[w]] = black;
+          if (this.color[getRight(w)] == black) {
+            this.color[getLeft(w)] = black;
             this.color[w] = red;
             rightRotate(w);
-            w = this.right[this.parent[x]];
+            w = getRight(parent_x);
           }
-          this.color[w] = this.color[this.parent[x]];
-          this.color[this.parent[x]] = black;
-          this.color[this.right[w]] = black;
-          leftRotate(this.parent[x]);
+          this.color[w] = this.color[parent_x];
+          this.color[parent_x] = black;
+          this.color[getRight(w)] = black;
+          leftRotate(parent_x);
           x = this.root;
         }
       } else {
-        w = this.left[this.parent[x]];
+        w = getLeft(parent_x);
         if (this.color[w] == red) {
           this.color[w] = black;
-          this.color[this.parent[x]] = red;
-          rightRotate(this.parent[x]);
-          w = this.left[this.parent[x]];
+          this.color[parent_x] = red;
+          rightRotate(parent_x);
+          w = getLeft(parent_x);
         }
-        if ((this.color[this.left[w]] == black) && (this.color[this.right[w]] == black)) {
+        if ((this.color[getLeft(w)] == black) && (this.color[getRight(w)] == black)) {
           this.color[w] = red;
-          x = this.parent[x];
+          x = getParent(x);
         } else {
-          if (this.color[this.left[w]] == black) {
-            this.color[this.right[w]] = black;
+          if (this.color[getLeft(w)] == black) {
+            this.color[getRight(w)] = black;
             this.color[w] = red;
             leftRotate(w);
-            w = this.left[this.parent[x]];
+            w = getLeft(getParent(x));
           }
-          this.color[w] = this.color[this.parent[x]];
-          this.color[this.parent[x]] = black;
-          this.color[this.left[w]] = black;
-          rightRotate(this.parent[x]);
+          this.color[w] = this.color[parent_x];
+          this.color[parent_x] = black;
+          this.color[getLeft(w)] = black;
+          rightRotate(parent_x);
           x = this.root;
         }
       }
@@ -874,7 +1130,7 @@ public class IntArrayRBT {
       if (this.color[node] == black) {
         ++blackDepth;
       }
-      node = this.left[node];
+      node = getLeft(node);
     }
     return satisfiesRBProps(this.root, blackDepth, 0);
   }
@@ -884,14 +1140,14 @@ public class IntArrayRBT {
       return (currentBlack == blackDepth);
     }
     if (this.color[node] == red) {
-      if (this.color[this.left[node]] == red || this.color[this.right[node]] == red) {
+      if (this.color[getLeft(node)] == red || this.color[getRight(node)] == red) {
         return false;
       }
     } else {
       ++currentBlack;
     }
-    return (satisfiesRBProps(this.left[node], blackDepth, currentBlack) && satisfiesRBProps(
-            this.right[node], blackDepth, currentBlack));
+    return (satisfiesRBProps(getLeft(node), blackDepth, currentBlack) && satisfiesRBProps(
+            getRight(node), blackDepth, currentBlack));
   }
 
   public int maxDepth() {
@@ -910,12 +1166,12 @@ public class IntArrayRBT {
     if (node == NIL) {
       return -1;
     }
-    if (k == this.key[node]) {
+    if (k == getKey(node)) {
       return depth;
-    } else if (k < this.key[node]) {
-      return nodeDepth(this.left[node], depth + 1, k);
+    } else if (k < getKey(node)) {
+      return nodeDepth(getLeft(node), depth + 1, k);
     } else {
-      return nodeDepth(this.right[node], depth + 1, k);
+      return nodeDepth(getRight(node), depth + 1, k);
     }
   }
 
@@ -923,8 +1179,8 @@ public class IntArrayRBT {
     if (node == NIL) {
       return depth;
     }
-    int depth1 = maxDepth(this.left[node], depth + 1);
-    int depth2 = maxDepth(this.right[node], depth + 1);
+    int depth1 = maxDepth(getLeft(node), depth + 1);
+    int depth2 = maxDepth(getRight(node), depth + 1);
     return (depth1 > depth2) ? depth1 : depth2;
   }
 
@@ -932,8 +1188,8 @@ public class IntArrayRBT {
     if (node == NIL) {
       return depth;
     }
-    int depth1 = maxDepth(this.left[node], depth + 1);
-    int depth2 = maxDepth(this.right[node], depth + 1);
+    int depth1 = maxDepth(getLeft(node), depth + 1);
+    int depth2 = maxDepth(getRight(node), depth + 1);
     return (depth1 > depth2) ? depth2 : depth1;
   }
 
@@ -954,13 +1210,13 @@ public class IntArrayRBT {
       return;
     }
     StringUtils.printSpaces(offset, buf);
-    buf.append(Integer.toString(this.key[node]));
+    buf.append(Integer.toString(getKey(node)));
     if (this.color[node] == black) {
       buf.append(" BLACK");
     }
     buf.append("\n");
-    printKeys(this.left[node], offset + 2, buf);
-    printKeys(this.right[node], offset + 2, buf);
+    printKeys(getLeft(node), offset + 2, buf);
+    printKeys(getRight(node), offset + 2, buf);
   }
 
   public static void main(String[] args) {

Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/IntRBTNode.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/IntRBTNode.java?rev=1462267&r1=1462266&r2=1462267&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/IntRBTNode.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/IntRBTNode.java Thu Mar 28 19:31:14 2013
@@ -596,5 +596,18 @@ class IntRBTNode {
     }
     return;
   }
-
+  
+  IntRBTNode copyNode(IntRBTNode parent) {
+    IntRBTNode copyOfNode = new IntRBTNode(key, color, parent, null, null, element);
+    copyOfNode.left = copyNode(copyOfNode, left);
+    copyOfNode.right = copyNode(copyOfNode, right);
+    return copyOfNode;
+  }
+  
+  static IntRBTNode copyNode(IntRBTNode parent, IntRBTNode n) {
+    if (null == n) {
+      return null;
+    }
+    return n.copyNode(parent);
+  }
 }

Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/IntRedBlackTree.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/IntRedBlackTree.java?rev=1462267&r1=1462266&r2=1462267&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/IntRedBlackTree.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/rb_trees/IntRedBlackTree.java Thu Mar 28 19:31:14 2013
@@ -19,6 +19,7 @@
 
 package org.apache.uima.internal.util.rb_trees;
 
+
 /**
  * See the {@link org.apache.uima.internal.util.rb_trees.RedBlackTree RedBlackTree} class. This is a
  * specialized instance with ints as elements.
@@ -212,4 +213,12 @@ public class IntRedBlackTree {
     return this.root.toArray(offset);
   }
 
+  public IntRedBlackTree copy() {
+    IntRedBlackTree c = new IntRedBlackTree();
+    c.root = (null == root) ? null : root.copyNode(null);
+    c.size = size;
+    return c;
+  }
+
+  
 }

Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/impl/SerializationMeasures.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/impl/SerializationMeasures.java?rev=1462267&r1=1462266&r2=1462267&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/impl/SerializationMeasures.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/impl/SerializationMeasures.java Thu Mar 28 19:31:14 2013
@@ -18,27 +18,27 @@
  */
 package org.apache.uima.util.impl;
 
-import static org.apache.uima.cas.impl.BinaryCasSerDes4.CAN_BE_NEGATIVE;
-import static org.apache.uima.cas.impl.BinaryCasSerDes4.IN_MAIN_HEAP;
-import static org.apache.uima.cas.impl.BinaryCasSerDes4.SlotKind.Slot_ArrayLength;
-import static org.apache.uima.cas.impl.BinaryCasSerDes4.SlotKind.Slot_Byte;
-import static org.apache.uima.cas.impl.BinaryCasSerDes4.SlotKind.Slot_Double_Exponent;
-import static org.apache.uima.cas.impl.BinaryCasSerDes4.SlotKind.Slot_Double_Mantissa_Sign;
-import static org.apache.uima.cas.impl.BinaryCasSerDes4.SlotKind.Slot_Float_Exponent;
-import static org.apache.uima.cas.impl.BinaryCasSerDes4.SlotKind.Slot_Float_Mantissa_Sign;
-import static org.apache.uima.cas.impl.BinaryCasSerDes4.SlotKind.Slot_FsIndexes;
-import static org.apache.uima.cas.impl.BinaryCasSerDes4.SlotKind.Slot_HeapRef;
-import static org.apache.uima.cas.impl.BinaryCasSerDes4.SlotKind.Slot_Int;
-import static org.apache.uima.cas.impl.BinaryCasSerDes4.SlotKind.Slot_Long_High;
-import static org.apache.uima.cas.impl.BinaryCasSerDes4.SlotKind.Slot_Long_Low;
-import static org.apache.uima.cas.impl.BinaryCasSerDes4.SlotKind.Slot_MainHeap;
-import static org.apache.uima.cas.impl.BinaryCasSerDes4.SlotKind.Slot_Short;
-import static org.apache.uima.cas.impl.BinaryCasSerDes4.SlotKind.Slot_StrChars;
-import static org.apache.uima.cas.impl.BinaryCasSerDes4.SlotKind.Slot_StrLength;
-import static org.apache.uima.cas.impl.BinaryCasSerDes4.SlotKind.Slot_StrOffset;
-import static org.apache.uima.cas.impl.BinaryCasSerDes4.SlotKind.Slot_TypeCode;
+import static org.apache.uima.cas.impl.SlotKinds.CAN_BE_NEGATIVE;
+import static org.apache.uima.cas.impl.SlotKinds.IN_MAIN_HEAP;
+import static org.apache.uima.cas.impl.SlotKinds.SlotKind.Slot_ArrayLength;
+import static org.apache.uima.cas.impl.SlotKinds.SlotKind.Slot_Byte;
+import static org.apache.uima.cas.impl.SlotKinds.SlotKind.Slot_Double_Exponent;
+import static org.apache.uima.cas.impl.SlotKinds.SlotKind.Slot_Double_Mantissa_Sign;
+import static org.apache.uima.cas.impl.SlotKinds.SlotKind.Slot_Float_Exponent;
+import static org.apache.uima.cas.impl.SlotKinds.SlotKind.Slot_Float_Mantissa_Sign;
+import static org.apache.uima.cas.impl.SlotKinds.SlotKind.Slot_FsIndexes;
+import static org.apache.uima.cas.impl.SlotKinds.SlotKind.Slot_HeapRef;
+import static org.apache.uima.cas.impl.SlotKinds.SlotKind.Slot_Int;
+import static org.apache.uima.cas.impl.SlotKinds.SlotKind.Slot_Long_High;
+import static org.apache.uima.cas.impl.SlotKinds.SlotKind.Slot_Long_Low;
+import static org.apache.uima.cas.impl.SlotKinds.SlotKind.Slot_MainHeap;
+import static org.apache.uima.cas.impl.SlotKinds.SlotKind.Slot_Short;
+import static org.apache.uima.cas.impl.SlotKinds.SlotKind.Slot_StrChars;
+import static org.apache.uima.cas.impl.SlotKinds.SlotKind.Slot_StrLength;
+import static org.apache.uima.cas.impl.SlotKinds.SlotKind.Slot_StrOffset;
+import static org.apache.uima.cas.impl.SlotKinds.SlotKind.Slot_TypeCode;
 
-import org.apache.uima.cas.impl.BinaryCasSerDes4.SlotKind;
+import org.apache.uima.cas.impl.SlotKinds.SlotKind;
 
 
 /**
@@ -294,7 +294,7 @@ public class SerializationMeasures {
   public final StatDetail[] statDetails = new StatDetail[SlotKind.values().length];
   {
     for (SlotKind kind : SlotKind.values()) {
-      statDetails[kind.i] = new StatDetail(kind.toString(), 
+      statDetails[kind.ordinal()] = new StatDetail(kind.toString(), 
                                            kind.canBeNegative,
                                            kind.inMainHeap,
                                            kind.elementSize);
@@ -337,7 +337,7 @@ public class SerializationMeasures {
     StatDetail[] sds= new StatDetail[kinds.length];
     int i = 0;
     for(SlotKind k : kinds) {
-      sds[i++] = statDetails[k.i];
+      sds[i++] = statDetails[k.ordinal()];
     }
     return sds;
   }
@@ -366,8 +366,8 @@ public class SerializationMeasures {
   public String toString() {
     // Strings
     
-    long origStringChars = statDetails[Slot_StrChars.i].getOriginal();
-    long origStringObjs = statDetails[Slot_StrLength.i].getOriginal() * 2;
+    long origStringChars = statDetails[Slot_StrChars.ordinal()].getOriginal();
+    long origStringObjs = statDetails[Slot_StrLength.ordinal()].getOriginal() * 2;
     long origStringsTot = origStringChars +   // space for the chars 
             origStringObjs +                  // space for the offset and length
             (origStringObjs / 2);             // space for the refs to the string heap 
@@ -376,7 +376,7 @@ public class SerializationMeasures {
     allSlots.aggregate();
     strSlots.aggregate();
     
-    long allOrig = statDetails[Slot_MainHeap.i].original +
+    long allOrig = statDetails[Slot_MainHeap.ordinal()].original +
                    origStringChars + origStringObjs +
                    origAuxBytes + 
                    origAuxShorts +
@@ -402,7 +402,7 @@ public class SerializationMeasures {
        strTotZ, percent(strTotZ, origStringsTot),
        strB4Z,  percent(strB4Z,  origStringsTot),
             
-       mainHeapFSs, stringsCommonChars, percent(stringsCommonChars, statDetails[Slot_StrChars.i].original),
+       mainHeapFSs, stringsCommonChars, percent(stringsCommonChars, statDetails[Slot_StrChars.ordinal()].original),
        stringsSavedExact, stringsSavedSubstr,
        allSlots.toString()
     );

Modified: uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/impl/SerDesTest4.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/impl/SerDesTest4.java?rev=1462267&r1=1462266&r2=1462267&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/impl/SerDesTest4.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/impl/SerDesTest4.java Thu Mar 28 19:31:14 2013
@@ -1094,7 +1094,8 @@ public class SerDesTest4 extends TestCas
     }      
   }
 
-  static public void main(String[] args) throws IOException {
-    (new SerDesTest4()).captureGenerated();
-  }
+  // disable to avoid accidentally overwriting test data
+//  static public void main(String[] args) throws IOException {
+//    (new SerDesTest4()).captureGenerated();
+//  }
 }

Propchange: uima/uimaj/trunk/uimaj-cpe/
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-cpe:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-document-annotation/
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-document-annotation:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-eclipse-feature-runtime/
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-eclipse-feature-runtime:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-eclipse-feature-tools/
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-eclipse-feature-tools:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-eclipse-update-site/
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-eclipse-update-site:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-ep-cas-editor/
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-ep-cas-editor:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-ep-cas-editor-ide/icons/svgicons/document.png
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-ep-cas-editor-ide/icons/svgicons/document.png:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-ep-cas-editor-ide/icons/svgicons/explorer.png
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-ep-cas-editor-ide/icons/svgicons/explorer.png:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-ep-cas-editor-ide/icons/svgicons/fsview.png
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-ep-cas-editor-ide/icons/svgicons/fsview.png:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-ep-cas-editor-ide/plugin.xml
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-ep-cas-editor-ide/plugin.xml:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-ep-cas-editor-ide/pom.xml
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-ep-cas-editor-ide/pom.xml:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-ep-cas-editor-ide/src/main/java/org/apache/uima/caseditor/ide/CasEditorIdePlugin.java
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-ep-cas-editor-ide/src/main/java/org/apache/uima/caseditor/ide/CasEditorIdePlugin.java:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-ep-cas-editor-ide/src/main/java/org/apache/uima/caseditor/ide/DefaultCasDocumentProvider.java
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-ep-cas-editor-ide/src/main/java/org/apache/uima/caseditor/ide/DefaultCasDocumentProvider.java:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-ep-cas-editor-ide/src/main/java/org/apache/uima/caseditor/ide/NlpProject.java
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-ep-cas-editor-ide/src/main/java/org/apache/uima/caseditor/ide/NlpProject.java:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-ep-cas-editor-ide/src/main/java/org/apache/uima/caseditor/ide/TypeSystemLocationPropertyPage.java
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-ep-cas-editor-ide/src/main/java/org/apache/uima/caseditor/ide/TypeSystemLocationPropertyPage.java:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-ep-cas-editor-ide/src/main/java/org/apache/uima/caseditor/ide/WorkspaceResourceDialog.java
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-ep-cas-editor-ide/src/main/java/org/apache/uima/caseditor/ide/WorkspaceResourceDialog.java:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-ep-cas-editor-ide/src/main/java/org/apache/uima/caseditor/ide/wizards/
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-ep-cas-editor-ide/src/main/java/org/apache/uima/caseditor/ide/wizards:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-ep-cas-editor-ide/src/main/resources/org/apache/uima/caseditor/ide/wizards/ts.xml
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-ep-cas-editor-ide/src/main/resources/org/apache/uima/caseditor/ide/wizards/ts.xml:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-ep-configurator/
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-ep-configurator:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-ep-debug/
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-ep-debug:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-ep-jcasgen/
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-ep-jcasgen:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-ep-pear-packager/
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-ep-pear-packager:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-ep-runtime/
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-ep-runtime:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-examples/
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-examples:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-internal-tools/
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-internal-tools:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-test-util/
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-test-util:r1436573-1462257

Propchange: uima/uimaj/trunk/uimaj-tools/
------------------------------------------------------------------------------
  Merged /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-tools:r1436573-1462257