http://git-wip-us.apache.org/repos/asf/mahout/blob/99a5358f/math-scala/src/test/scala/org/apache/mahout/math/scalabindings/VectorOpsSuite.scala
----------------------------------------------------------------------
diff --git 
a/math-scala/src/test/scala/org/apache/mahout/math/scalabindings/VectorOpsSuite.scala
 
b/math-scala/src/test/scala/org/apache/mahout/math/scalabindings/VectorOpsSuite.scala
deleted file mode 100644
index fe272df..0000000
--- 
a/math-scala/src/test/scala/org/apache/mahout/math/scalabindings/VectorOpsSuite.scala
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.mahout.math.scalabindings
-
-import org.scalatest.FunSuite
-import org.apache.mahout.math.{SequentialAccessSparseVector, 
RandomAccessSparseVector, Vector}
-import RLikeOps._
-import org.apache.mahout.test.MahoutSuite
-
-import scala.util.Random
-
-/** VectorOps Suite */
-class VectorOpsSuite extends FunSuite with MahoutSuite {
-
-  test("inline create") {
-
-    val sparseVec = svec((5 -> 1) :: (10 -> 2.0) :: Nil)
-    println(sparseVec)
-
-    assert(sparseVec.size() == 11)
-
-    val sparseVec2: Vector = (5 -> 1.0) :: (10 -> 2.0) :: Nil
-    println(sparseVec2)
-
-    val sparseVec3: Vector = new RandomAccessSparseVector(100) := (5 -> 1.0) 
:: Nil
-    println(sparseVec3)
-
-    val sparseVec4 = svec((5 -> 1) :: (10 -> 2.0) :: Nil, 100)
-    println(sparseVec4)
-
-    assert(sparseVec4.size() == 100)
-
-    intercept[IllegalArgumentException] {
-      val sparseVec5 = svec((5 -> 1) :: (10 -> 2.0) :: Nil, 10)  
-    }
-
-    val denseVec1: Vector = (1.0, 1.1, 1.2)
-    println(denseVec1)
-
-    val denseVec2 = dvec(1, 0, 1.1, 1.2)
-    println(denseVec2)
-  }
-
-  test("plus minus") {
-
-    val a: Vector = (1, 2, 3)
-    val b: Vector = (0 -> 3) :: (1 -> 4) :: (2 -> 5) :: Nil
-
-    val c = a + b
-    val d = b - a
-    val e = -b - a
-
-    assert(c ===(4, 6, 8))
-    assert(d ===(2, 2, 2))
-    assert(e ===(-4, -6, -8))
-
-  }
-
-  test("dot") {
-
-    val a: Vector = (1, 2, 3)
-    val b = (3, 4, 5)
-
-    val c = a dot b
-    println(c)
-    assert(c == 26)
-
-  }
-
-  test ("scalarOps") {
-    val a = dvec(1 to 5):Vector
-
-    10 * a shouldBe 10 *: a
-    10 + a shouldBe 10 +: a
-    10 - a shouldBe 10 -: a
-    10 / a shouldBe 10 /: a
-
-  }
-
-  test("sparse assignment") {
-
-    val svec = new SequentialAccessSparseVector(30)
-    svec(1) = -0.5
-    svec(3) = 0.5
-    println(svec)
-
-    svec(1 until svec.length) ::= ( _ => 0)
-    println(svec)
-
-    svec.sum shouldBe 0
-
-
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/mahout/blob/99a5358f/math-scala/src/test/scala/org/apache/mahout/nlp/tfidf/TFIDFtestBase.scala
----------------------------------------------------------------------
diff --git 
a/math-scala/src/test/scala/org/apache/mahout/nlp/tfidf/TFIDFtestBase.scala 
b/math-scala/src/test/scala/org/apache/mahout/nlp/tfidf/TFIDFtestBase.scala
deleted file mode 100644
index 4635e95..0000000
--- a/math-scala/src/test/scala/org/apache/mahout/nlp/tfidf/TFIDFtestBase.scala
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.mahout.nlp.tfidf
-
-import org.apache.mahout.math._
-import org.apache.mahout.math.scalabindings._
-import org.apache.mahout.test.DistributedMahoutSuite
-import org.scalatest.{FunSuite, Matchers}
-import scala.collection._
-import RLikeOps._
-import scala.math._
-
-
-trait TFIDFtestBase extends DistributedMahoutSuite with Matchers {
-  this: FunSuite =>
-
-  val epsilon = 1E-6
-
-  val documents: List[(Int, String)] = List(
-    (1, "the first document contains 5 terms"),
-    (2, "document two document contains 4 terms"),
-    (3, "document three three terms"),
-    (4, "each document including this document contain the term document"))
-
-  def createDictionaryAndDfMaps(documents: List[(Int, String)]): (Map[String, 
Int], Map[Int, Int]) = {
-
-    // get a tf count for the entire dictionary
-    val dictMap = documents.unzip._2.mkString(" ").toLowerCase.split(" 
").groupBy(identity).mapValues(_.length)
-
-    // create a dictionary with an index for each term
-    val dictIndex = dictMap.zipWithIndex.map(x => x._1._1 -> x._2)
-
-    val docFrequencyCount = new Array[Int](dictMap.size)
-
-    for (token <- dictMap) {
-      for (doc <- documents) {
-        // parse the string and get a word then increment the df count for 
that word
-        if (doc._2.toLowerCase.split(" ").contains(token._1)) {
-          docFrequencyCount(dictIndex(token._1)) += 1
-        }
-      }
-    }
-
-    val docFrequencyMap = docFrequencyCount.zipWithIndex.map(x => x._2 -> 
x._1).toMap
-
-    (dictIndex, docFrequencyMap)
-  }
-
-  def vectorizeDocument(document: String,
-                        dictionaryMap: Map[String, Int],
-                        dfMap: Map[Int, Int], weight: TermWeight = new TFIDF): 
Vector = {
-
-    val wordCounts = document.toLowerCase.split(" 
").groupBy(identity).mapValues(_.length)
-
-    val vec = new RandomAccessSparseVector(dictionaryMap.size)
-
-    val totalDFSize = dictionaryMap.size
-    val docSize = wordCounts.size
-
-    for (word <- wordCounts) {
-      val term = word._1
-      if (dictionaryMap.contains(term)) {
-        val termFreq = word._2
-        val dictIndex = dictionaryMap(term)
-        val docFreq = dfMap(dictIndex)
-        val currentWeight = weight.calculate(termFreq, docFreq.toInt, docSize, 
totalDFSize.toInt)
-        vec(dictIndex)= currentWeight
-      }
-    }
-    vec
-  }
-
-  test("TF test") {
-
-    val (dictionary, dfMap) = createDictionaryAndDfMaps(documents)
-
-    val tf: TermWeight = new TF()
-
-    val vectorizedDocuments: Matrix = new SparseMatrix(documents.size, 
dictionary.size)
-
-    for (doc <- documents) {
-      vectorizedDocuments(doc._1 - 1, ::) := vectorizeDocument(doc._2, 
dictionary, dfMap, tf)
-    }
-
-    // corpus:
-    //  (1, "the first document contains 5 terms"),
-    //  (2, "document two document contains 4 terms"),
-    //  (3, "document three three terms"),
-    //  (4, "each document including this document contain the term document")
-
-    // dictonary:
-    //  (this -> 0, 4 -> 1, three -> 2, document -> 3, two -> 4, term -> 5, 5 
-> 6, contain -> 7,
-    //   each -> 8, first -> 9, terms -> 10, contains -> 11, including -> 12, 
the -> 13)
-
-    // dfMap:
-    //  (0 -> 1, 5 -> 1, 10 -> 3, 1 -> 1, 6 -> 1, 9 -> 1, 13 -> 2, 2 -> 1, 12 
-> 1, 7 -> 1, 3 -> 4,
-    //   11 -> 2, 8 -> 1, 4 -> 1)
-
-    vectorizedDocuments(0, 0).toInt should be (0)
-    vectorizedDocuments(0, 13).toInt should be (1)
-    vectorizedDocuments(1, 3).toInt should be (2)
-    vectorizedDocuments(3, 3).toInt should be (3)
-
-  }
-
-
-  test("TFIDF test") {
-    val (dictionary, dfMap) = createDictionaryAndDfMaps(documents)
-
-    val tfidf: TermWeight = new TFIDF()
-
-    val vectorizedDocuments: Matrix = new SparseMatrix(documents.size, 
dictionary.size)
-
-    for (doc <- documents) {
-      vectorizedDocuments(doc._1 - 1, ::) := vectorizeDocument(doc._2, 
dictionary, dfMap, tfidf)
-    }
-
-    // corpus:
-    //  (1, "the first document contains 5 terms"),
-    //  (2, "document two document contains 4 terms"),
-    //  (3, "document three three terms"),
-    //  (4, "each document including this document contain the term document")
-
-    // dictonary:
-    //  (this -> 0, 4 -> 1, three -> 2, document -> 3, two -> 4, term -> 5, 5 
-> 6, contain -> 7,
-    //   each -> 8, first -> 9, terms -> 10, contains -> 11, including -> 12, 
the -> 13)
-
-    // dfMap:
-    //  (0 -> 1, 5 -> 1, 10 -> 3, 1 -> 1, 6 -> 1, 9 -> 1, 13 -> 2, 2 -> 1, 12 
-> 1, 7 -> 1, 3 -> 4,
-    //   11 -> 2, 8 -> 1, 4 -> 1)
-
-    abs(vectorizedDocuments(0, 0) -  0.0) should be < epsilon
-    abs(vectorizedDocuments(0, 13) - 2.540445) should be < epsilon
-    abs(vectorizedDocuments(1, 3) - 2.870315) should be < epsilon
-    abs(vectorizedDocuments(3, 3) - 3.515403) should be < epsilon
-  }
-
-  test("MLlib TFIDF test") {
-    val (dictionary, dfMap) = createDictionaryAndDfMaps(documents)
-
-    val tfidf: TermWeight = new MLlibTFIDF()
-
-    val vectorizedDocuments: Matrix = new SparseMatrix(documents.size, 
dictionary.size)
-
-    for (doc <- documents) {
-      vectorizedDocuments(doc._1 - 1, ::) := vectorizeDocument(doc._2, 
dictionary, dfMap, tfidf)
-    }
-
-    // corpus:
-    //  (1, "the first document contains 5 terms"),
-    //  (2, "document two document contains 4 terms"),
-    //  (3, "document three three terms"),
-    //  (4, "each document including this document contain the term document")
-
-    // dictonary:
-    //  (this -> 0, 4 -> 1, three -> 2, document -> 3, two -> 4, term -> 5, 5 
-> 6, contain -> 7,
-    //   each -> 8, first -> 9, terms -> 10, contains -> 11, including -> 12, 
the -> 13)
-
-    // dfMap:
-    //  (0 -> 1, 5 -> 1, 10 -> 3, 1 -> 1, 6 -> 1, 9 -> 1, 13 -> 2, 2 -> 1, 12 
-> 1, 7 -> 1, 3 -> 4,
-    //   11 -> 2, 8 -> 1, 4 -> 1)
-
-    abs(vectorizedDocuments(0, 0) -  0.0) should be < epsilon
-    abs(vectorizedDocuments(0, 13) - 1.609437) should be < epsilon
-    abs(vectorizedDocuments(1, 3) - 2.197224) should be < epsilon
-    abs(vectorizedDocuments(3, 3) - 3.295836) should be < epsilon
-  }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/mahout/blob/99a5358f/math-scala/src/test/scala/org/apache/mahout/test/DistributedMahoutSuite.scala
----------------------------------------------------------------------
diff --git 
a/math-scala/src/test/scala/org/apache/mahout/test/DistributedMahoutSuite.scala 
b/math-scala/src/test/scala/org/apache/mahout/test/DistributedMahoutSuite.scala
deleted file mode 100644
index 3538991..0000000
--- 
a/math-scala/src/test/scala/org/apache/mahout/test/DistributedMahoutSuite.scala
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.mahout.test
-
-import org.apache.mahout.math.drm.DistributedContext
-import org.scalatest.{Suite, FunSuite, Matchers}
-
-/**
- * Unit tests that use a distributed context to run
- */
-trait DistributedMahoutSuite extends MahoutSuite  { this: Suite =>
-  protected implicit var mahoutCtx: DistributedContext
-}

http://git-wip-us.apache.org/repos/asf/mahout/blob/99a5358f/math-scala/src/test/scala/org/apache/mahout/test/LoggerConfiguration.scala
----------------------------------------------------------------------
diff --git 
a/math-scala/src/test/scala/org/apache/mahout/test/LoggerConfiguration.scala 
b/math-scala/src/test/scala/org/apache/mahout/test/LoggerConfiguration.scala
deleted file mode 100644
index 7a34aa2..0000000
--- a/math-scala/src/test/scala/org/apache/mahout/test/LoggerConfiguration.scala
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.apache.mahout.test
-
-import org.scalatest._
-import org.apache.log4j.{Level, Logger, BasicConfigurator}
-
-trait LoggerConfiguration extends BeforeAndAfterAllConfigMap {
-  this: Suite =>
-
-  override protected def beforeAll(configMap: ConfigMap): Unit = {
-    super.beforeAll(configMap)
-    BasicConfigurator.resetConfiguration()
-    BasicConfigurator.configure()
-    Logger.getRootLogger.setLevel(Level.ERROR)
-    
Logger.getLogger("org.apache.mahout.math.scalabindings").setLevel(Level.DEBUG)
-  }
-}

http://git-wip-us.apache.org/repos/asf/mahout/blob/99a5358f/math-scala/src/test/scala/org/apache/mahout/test/MahoutSuite.scala
----------------------------------------------------------------------
diff --git a/math-scala/src/test/scala/org/apache/mahout/test/MahoutSuite.scala 
b/math-scala/src/test/scala/org/apache/mahout/test/MahoutSuite.scala
deleted file mode 100644
index d3b8a38..0000000
--- a/math-scala/src/test/scala/org/apache/mahout/test/MahoutSuite.scala
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.mahout.test
-
-import java.io.File
-import org.scalatest._
-import org.apache.mahout.common.RandomUtils
-
-trait MahoutSuite extends BeforeAndAfterEach with LoggerConfiguration with 
Matchers {
-  this: Suite =>
-
-  final val TmpDir = "tmp/"
-
-  override protected def beforeEach() {
-    super.beforeEach()
-    RandomUtils.useTestSeed()
-  }
-
-  override protected def beforeAll(configMap: ConfigMap) {
-    super.beforeAll(configMap)
-
-    // just in case there is an existing tmp dir clean it before every suite
-    deleteDirectory(new File(TmpDir))
-  }
-
-  override protected def afterEach() {
-
-    // clean the tmp dir after every test
-    deleteDirectory(new File(TmpDir))
-
-    super.afterEach()
-  }
-
-  /** Delete directory no symlink checking and exceptions are not caught */
-  private def deleteDirectory(path: File): Unit = {
-    if (path.isDirectory)
-      for (files <- path.listFiles) deleteDirectory(files)
-    path.delete
-  }
-}

http://git-wip-us.apache.org/repos/asf/mahout/blob/99a5358f/math/pom.xml
----------------------------------------------------------------------
diff --git a/math/pom.xml b/math/pom.xml
deleted file mode 100644
index 9f437fc..0000000
--- a/math/pom.xml
+++ /dev/null
@@ -1,256 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements.  See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License.  You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.apache.mahout</groupId>
-    <artifactId>mahout</artifactId>
-    <version>0.13.1-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-
-  <artifactId>mahout-math</artifactId>
-  <name>Mahout Math</name>
-  <description>High performance scientific and technical computing data 
structures and methods,
-    mostly based on CERN's
-    Colt Java API
-  </description>
-
-  <packaging>jar</packaging>
-
-  <build>
-    <plugins>
-      <!-- copy jars to top directory, which is MAHOUT_HOME -->
-      <plugin>
-        <artifactId>maven-antrun-plugin</artifactId>
-        <version>1.4</version>
-        <executions>
-          <execution>
-            <id>copy</id>
-            <phase>package</phase>
-            <configuration>
-              <tasks>
-                <copy file="target/mahout-math-${version}.jar" 
tofile="../mahout-math-${version}.jar" />
-              </tasks>
-            </configuration>
-            <goals>
-              <goal>run</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.mahout</groupId>
-        <artifactId>mahout-collection-codegen-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>generate-sources</phase>
-            <goals>
-              <goal>generate</goal>
-            </goals>
-            <configuration>
-              <!--<mainExcludes>-->
-              <!--<mainExclude>**/AbstractBooleanList.java</mainExclude>-->
-              <!--<mainExclude>**/BooleanArrayList.java</mainExclude>-->
-              <!--<mainExclude>**/BooleanBufferConsumer.java</mainExclude>-->
-              <!--</mainExcludes>-->
-              <!--<testExcludes>-->
-              <!--<testExclude>**/BooleanArrayListTest.java</testExclude>-->
-              <!--</testExcludes>-->
-              
<outputDirectory>${project.build.directory}/generated-sources/mahout</outputDirectory>
-              
<testOutputDirectory>${project.build.directory}/generated-test-sources/mahout</testOutputDirectory>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>build-helper-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>add-source</id>
-            <phase>generate-sources</phase>
-            <goals>
-              <goal>add-source</goal>
-            </goals>
-            <configuration>
-              <sources>
-                
<source>${project.build.directory}/generated-sources/mahout</source>
-              </sources>
-            </configuration>
-          </execution>
-          <execution>
-            <id>add-test-source</id>
-            <phase>generate-sources</phase>
-            <goals>
-              <goal>add-test-source</goal>
-            </goals>
-            <configuration>
-              <sources>
-                
<source>${project.build.directory}/generated-test-sources/mahout</source>
-              </sources>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-
-      <!-- create test jar so other modules can reuse the math test utility 
classes. -->
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-            <phase>package</phase>
-          </execution>
-        </executions>
-      </plugin>
-
-      <plugin>
-        <artifactId>maven-javadoc-plugin</artifactId>
-      </plugin>
-
-      <plugin>
-        <artifactId>maven-source-plugin</artifactId>
-      </plugin>
-
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-remote-resources-plugin</artifactId>
-        <configuration>
-          
<appendedResourcesDirectory>../src/main/appended-resources</appendedResourcesDirectory>
-          <resourceBundles>
-            
<resourceBundle>org.apache:apache-jar-resource-bundle:1.4</resourceBundle>
-          </resourceBundles>
-          <supplementalModels>
-            <supplementalModel>supplemental-models.xml</supplementalModel>
-          </supplementalModels>
-        </configuration>
-      </plugin>
-
-      <!--<plugin>-->
-        <!--<groupId>org.apache.maven.plugins</groupId>-->
-        <!--<artifactId>maven-shade-plugin</artifactId>-->
-        <!--<version>3.0.0</version>-->
-        <!--<executions>-->
-          <!--<execution>-->
-            <!--<phase>package</phase>-->
-            <!--<goals>-->
-              <!--<goal>shade</goal>-->
-            <!--</goals>-->
-            <!--<configuration>-->
-              <!--<artifactSet>-->
-                <!--<includes>-->
-                  <!--<include>it.unimi.dsi:fastutil</include>-->
-                <!--</includes>-->
-              <!--</artifactSet>-->
-              <!--<relocations>-->
-                <!--<relocation>-->
-                  <!--<pattern>it.unimi.dsi.fastutil</pattern>-->
-                  
<!--<shadedPattern>shaded.it.unimi.dsi.fastutil</shadedPattern>-->
-                <!--</relocation>-->
-              <!--</relocations>-->
-            <!--</configuration>-->
-          <!--</execution>-->
-        <!--</executions>-->
-      <!--</plugin>-->
-      <!-- remove jars from top directory on clean -->
-      <plugin>
-        <artifactId>maven-clean-plugin</artifactId>
-        <version>3.0.0</version>
-        <configuration>
-          <filesets>
-            <fileset>
-              <directory>../</directory>
-              <includes>
-                <include>mahout-math*.jar</include>
-              </includes>
-              <followSymlinks>false</followSymlinks>
-            </fileset>
-          </filesets>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
-  <dependencies>
-
-    <!--  3rd-party -->
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-math3</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-    </dependency>
-
-    <dependency>
-       <groupId>it.unimi.dsi</groupId>
-       <artifactId>fastutil</artifactId>
-       <version>7.0.12</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-jcl</artifactId>
-      <scope>test</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>org.apache.lucene</groupId>
-      <artifactId>lucene-test-framework</artifactId>
-      <scope>test</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>com.carrotsearch.randomizedtesting</groupId>
-      <artifactId>randomizedtesting-runner</artifactId>
-    </dependency>
-
-      <dependency>
-          <groupId>com.tdunning</groupId>
-          <artifactId>t-digest</artifactId>
-          <version>3.1</version>
-      </dependency>
-
-    <dependency>
-      <groupId>org.easymock</groupId>
-      <artifactId>easymock</artifactId>
-      <scope>test</scope>
-    </dependency>
-
-  </dependencies>
-</project>

http://git-wip-us.apache.org/repos/asf/mahout/blob/99a5358f/math/src/main/java-templates/org/apache/mahout/math/buffer/ValueTypeBufferConsumer.java.t
----------------------------------------------------------------------
diff --git 
a/math/src/main/java-templates/org/apache/mahout/math/buffer/ValueTypeBufferConsumer.java.t
 
b/math/src/main/java-templates/org/apache/mahout/math/buffer/ValueTypeBufferConsumer.java.t
deleted file mode 100644
index 3077dfd..0000000
--- 
a/math/src/main/java-templates/org/apache/mahout/math/buffer/ValueTypeBufferConsumer.java.t
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-/*
-Copyright 1999 CERN - European Organization for Nuclear Research.
-Permission to use, copy, modify, distribute and sell this software and its 
documentation for any purpose 
-is hereby granted without fee, provided that the above copyright notice appear 
in all copies and 
-that both that copyright notice and this permission notice appear in 
supporting documentation. 
-CERN makes no representations about the suitability of this software for any 
purpose. 
-It is provided "as is" without expressed or implied warranty.
-*/
-package org.apache.mahout.math.buffer;
-
-import org.apache.mahout.math.list.${valueTypeCap}ArrayList;
-/**
-  * Object that can accept a primitive array list of 
-  * ${valueType} items.
- **/
-public interface ${valueTypeCap}BufferConsumer {
-
-  /**
-   * Adds all elements of the specified list to the receiver.
-   *
-   * @param list the list of which all elements shall be added.
-   */
-  void addAllOf(${valueTypeCap}ArrayList list);
-}

http://git-wip-us.apache.org/repos/asf/mahout/blob/99a5358f/math/src/main/java-templates/org/apache/mahout/math/function/KeyTypeObjectProcedure.java.t
----------------------------------------------------------------------
diff --git 
a/math/src/main/java-templates/org/apache/mahout/math/function/KeyTypeObjectProcedure.java.t
 
b/math/src/main/java-templates/org/apache/mahout/math/function/KeyTypeObjectProcedure.java.t
deleted file mode 100644
index 4ecf714..0000000
--- 
a/math/src/main/java-templates/org/apache/mahout/math/function/KeyTypeObjectProcedure.java.t
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.mahout.math.function;
-
-/*
-Copyright 1999 CERN - European Organization for Nuclear Research.
-Permission to use, copy, modify, distribute and sell this software and its 
documentation for any purpose 
-is hereby granted without fee, provided that the above copyright notice appear 
in all copies and 
-that both that copyright notice and this permission notice appear in 
supporting documentation. 
-CERN makes no representations about the suitability of this software for any 
purpose. 
-It is provided "as is" without expressed or implied warranty.
-*/
-
-/**
- * Interface that represents a procedure object: a procedure that takes two 
arguments and does not return a value.
- *
-*/
-public interface ${keyTypeCap}ObjectProcedure<T> {
-
-  /**
-   * Applies a procedure to two arguments. Optionally can return a boolean 
flag to inform the object calling the
-   * procedure.
-   *
-   * <p>Example: forEach() methods often use procedure objects. To signal to a 
forEach() method whether iteration should
-   * continue normally or terminate (because for example a matching element 
has been found), a procedure can return
-   * <tt>false</tt> to indicate termination and <tt>true</tt> to indicate 
continuation.
-   *
-   * @param first  first argument passed to the procedure.
-   * @param second second argument passed to the procedure.
-   * @return a flag  to inform the object calling the procedure.
-   */
-  boolean apply(${keyType} first, T second);
-}

http://git-wip-us.apache.org/repos/asf/mahout/blob/99a5358f/math/src/main/java-templates/org/apache/mahout/math/function/KeyTypeProcedure.java.t
----------------------------------------------------------------------
diff --git 
a/math/src/main/java-templates/org/apache/mahout/math/function/KeyTypeProcedure.java.t
 
b/math/src/main/java-templates/org/apache/mahout/math/function/KeyTypeProcedure.java.t
deleted file mode 100644
index c198353..0000000
--- 
a/math/src/main/java-templates/org/apache/mahout/math/function/KeyTypeProcedure.java.t
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.mahout.math.function;
-
-/*
-Copyright 1999 CERN - European Organization for Nuclear Research.
-Permission to use, copy, modify, distribute and sell this software and its 
documentation for any purpose 
-is hereby granted without fee, provided that the above copyright notice appear 
in all copies and 
-that both that copyright notice and this permission notice appear in 
supporting documentation. 
-CERN makes no representations about the suitability of this software for any 
purpose. 
-It is provided "as is" without expressed or implied warranty.
-*/
-
-/**
- * Interface that represents a procedure object: a procedure that takes a 
single argument and does not return a value.
- *
- */
-public interface ${keyTypeCap}Procedure {
-
-  /**
-   * Applies a procedure to an argument. Optionally can return a boolean flag 
to inform the object calling the
-   * procedure.
-   *
-   * <p>Example: forEach() methods often use procedure objects. To signal to a 
forEach() method whether iteration should
-   * continue normally or terminate (because for example a matching element 
has been found), a procedure can return
-   * <tt>false</tt> to indicate termination and <tt>true</tt> to indicate 
continuation.
-   *
-   * @param element element passed to the procedure.
-   * @return a flag  to inform the object calling the procedure.
-   */
-  boolean apply(${keyType} element);
-}

http://git-wip-us.apache.org/repos/asf/mahout/blob/99a5358f/math/src/main/java-templates/org/apache/mahout/math/function/KeyTypeValueTypeProcedure.java.t
----------------------------------------------------------------------
diff --git 
a/math/src/main/java-templates/org/apache/mahout/math/function/KeyTypeValueTypeProcedure.java.t
 
b/math/src/main/java-templates/org/apache/mahout/math/function/KeyTypeValueTypeProcedure.java.t
deleted file mode 100644
index cf7ac22..0000000
--- 
a/math/src/main/java-templates/org/apache/mahout/math/function/KeyTypeValueTypeProcedure.java.t
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.mahout.math.function;
-
-/*
-Copyright 1999 CERN - European Organization for Nuclear Research.
-Permission to use, copy, modify, distribute and sell this software and its 
documentation for any purpose 
-is hereby granted without fee, provided that the above copyright notice appear 
in all copies and 
-that both that copyright notice and this permission notice appear in 
supporting documentation. 
-CERN makes no representations about the suitability of this software for any 
purpose. 
-It is provided "as is" without expressed or implied warranty.
-*/
-
-/**
- * Interface that represents a procedure object: a procedure that takes two 
arguments and does not return a value.
- *
- */
-public interface ${keyTypeCap}${valueTypeCap}Procedure {
-
-  /**
-   * Applies a procedure to two arguments. Optionally can return a boolean 
flag to inform the object calling the
-   * procedure.
-   *
-   * <p>Example: forEach() methods often use procedure objects. To signal to a 
forEach() method whether iteration should
-   * continue normally or terminate (because for example a matching element 
has been found), a procedure can return
-   * <tt>false</tt> to indicate termination and <tt>true</tt> to indicate 
continuation.
-   *
-   * @param first  first argument passed to the procedure.
-   * @param second second argument passed to the procedure.
-   * @return a flag  to inform the object calling the procedure.
-   */
-  boolean apply(${keyType} first, ${valueType} second);
-}

http://git-wip-us.apache.org/repos/asf/mahout/blob/99a5358f/math/src/main/java-templates/org/apache/mahout/math/function/ObjectValueTypeProcedure.java.t
----------------------------------------------------------------------
diff --git 
a/math/src/main/java-templates/org/apache/mahout/math/function/ObjectValueTypeProcedure.java.t
 
b/math/src/main/java-templates/org/apache/mahout/math/function/ObjectValueTypeProcedure.java.t
deleted file mode 100644
index e3576a8..0000000
--- 
a/math/src/main/java-templates/org/apache/mahout/math/function/ObjectValueTypeProcedure.java.t
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.mahout.math.function;
-
-/*
-Copyright 1999 CERN - European Organization for Nuclear Research.
-Permission to use, copy, modify, distribute and sell this software and its 
documentation for any purpose 
-is hereby granted without fee, provided that the above copyright notice appear 
in all copies and 
-that both that copyright notice and this permission notice appear in 
supporting documentation. 
-CERN makes no representations about the suitability of this software for any 
purpose. 
-It is provided "as is" without expressed or implied warranty.
-*/
-
-/**
- * Interface that represents a procedure object: a procedure that takes two 
arguments and does not return a value.
- *
- */
-public interface Object${valueTypeCap}Procedure<T> {
-
-  /**
-   * Applies a procedure to two arguments. Optionally can return a boolean 
flag to inform the object calling the
-   * procedure.
-   *
-   * <p>Example: forEach() methods often use procedure objects. To signal to a 
forEach() method whether iteration should
-   * continue normally or terminate (because for example a matching element 
has been found), a procedure can return
-   * <tt>false</tt> to indicate termination and <tt>true</tt> to indicate 
continuation.
-   *
-   * @param first  first argument passed to the procedure.
-   * @param second second argument passed to the procedure.
-   * @return a flag  to inform the object calling the procedure.
-   */
-  boolean apply(T first, ${valueType} second);
-}

http://git-wip-us.apache.org/repos/asf/mahout/blob/99a5358f/math/src/main/java-templates/org/apache/mahout/math/function/ValueTypeComparator.java.t
----------------------------------------------------------------------
diff --git 
a/math/src/main/java-templates/org/apache/mahout/math/function/ValueTypeComparator.java.t
 
b/math/src/main/java-templates/org/apache/mahout/math/function/ValueTypeComparator.java.t
deleted file mode 100644
index 9f27905..0000000
--- 
a/math/src/main/java-templates/org/apache/mahout/math/function/ValueTypeComparator.java.t
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
- 
-package org.apache.mahout.math.function;
-
-/*
-Copyright 1999 CERN - European Organization for Nuclear Research.
-Permission to use, copy, modify, distribute and sell this software and its 
documentation for any purpose 
-is hereby granted without fee, provided that the above copyright notice appear 
in all copies and 
-that both that copyright notice and this permission notice appear in 
supporting documentation. 
-CERN makes no representations about the suitability of this software for any 
purpose. 
-It is provided "as is" without expressed or implied warranty.
-*/
-
-/**
- * A comparison function which imposes a <i>total ordering</i> on some 
collection of elements.  Comparators can be
- * passed to a sort method (such as 
<tt>org.apache.mahout.math.Sorting.quickSort</tt>) to allow precise control over
- * the sort order.<p>
- *
- * Note: It is generally a good idea for comparators to implement 
<tt>java.io.Serializable</tt>, as they may be used as
- * ordering methods in serializable data structures.  In order for the data 
structure to serialize successfully, the
- * comparator (if provided) must implement <tt>Serializable</tt>.<p>
- *
- * @see java.util.Comparator
- * @see org.apache.mahout.math.Sorting
- */
-public interface ${valueTypeCap}Comparator {
-
-  /**
-   * Compares its two arguments for order.  Returns a negative integer, zero, 
or a positive integer as the first
-   * argument is less than, equal to, or greater than the second.<p>
-   *
-   * The implementor must ensure that <tt>sgn(compare(x, y)) == 
-sgn(compare(y, x))</tt> for all <tt>x</tt> and
-   * <tt>y</tt>.  (This implies that <tt>compare(x, y)</tt> must throw an 
exception if and only if <tt>compare(y,
-   * x)</tt> throws an exception.)<p>
-   *
-   * The implementor must also ensure that the relation is transitive: 
<tt>((compare(x, y)&gt;0) &amp;&amp; (compare(y,
-   * z)&gt;0))</tt> implies <tt>compare(x, z)&gt;0</tt>.<p>
-   *
-   * Finally, the implementer must ensure that <tt>compare(x, y)==0</tt> 
implies that <tt>sgn(compare(x,
-   * z))==sgn(compare(y, z))</tt> for all <tt>z</tt>.<p>
-   *
-   * @return a negative integer, zero, or a positive integer as the first 
argument is less than, equal to, or greater
-   *         than the second.
-   */
-  int compare(${valueType} o1, ${valueType} o2);
-
-  /**
-   * Indicates whether some other object is &quot;equal to&quot; this 
Comparator.  This method must obey the general
-   * contract of <tt>Object.equals(Object)</tt>.  Additionally, this method 
can return <tt>true</tt> <i>only</i> if the
-   * specified Object is also a comparator and it imposes the same ordering as 
this comparator.  Thus,
-   * <code>comp1.equals(comp2)</code> implies that <tt>sgn(comp1.compare(o1, 
o2))==sgn(comp2.compare(o1, o2))</tt> for
-   * every element <tt>o1</tt> and <tt>o2</tt>.<p>
-   *
-   * Note that it is <i>always</i> safe <i>not</i> to override 
<tt>Object.equals(Object)</tt>.  However, overriding this
-   * method may, in some cases, improve performance by allowing programs to 
determine that two distinct Comparators
-   * impose the same order.
-   *
-   * @param obj the reference object with which to compare.
-   * @return <code>true</code> only if the specified object is also a 
comparator and it imposes the same ordering as
-   *         this comparator.
-   * @see Object#hashCode()
-   */
-  boolean equals(Object obj);
-}

http://git-wip-us.apache.org/repos/asf/mahout/blob/99a5358f/math/src/main/java-templates/org/apache/mahout/math/list/AbstractValueTypeList.java.t
----------------------------------------------------------------------
diff --git 
a/math/src/main/java-templates/org/apache/mahout/math/list/AbstractValueTypeList.java.t
 
b/math/src/main/java-templates/org/apache/mahout/math/list/AbstractValueTypeList.java.t
deleted file mode 100644
index 343472a..0000000
--- 
a/math/src/main/java-templates/org/apache/mahout/math/list/AbstractValueTypeList.java.t
+++ /dev/null
@@ -1,851 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
- 
- /*
-Copyright � 1999 CERN - European Organization for Nuclear Research.
-Permission to use, copy, modify, distribute and sell this software and its 
documentation for any purpose 
-is hereby granted without fee, provided that the above copyright notice appear 
in all copies and 
-that both that copyright notice and this permission notice appear in 
supporting documentation. 
-CERN makes no representations about the suitability of this software for any 
purpose. 
-It is provided "as is" without expressed or implied warranty.
-*/
-package org.apache.mahout.math.list;
-//CHECKSTYLE:OFF
-import org.apache.mahout.math.Sorting;
-import org.apache.mahout.math.buffer.${valueTypeCap}BufferConsumer;
-import org.apache.mahout.math.function.${valueTypeCap}Comparator;
-import org.apache.mahout.math.function.${valueTypeCap}Procedure;
-//CHECKSTYLE:ON
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- Abstract base class for resizable lists holding <code>${valueType}</code> 
elements; abstract.
-*/
-public abstract class Abstract${valueTypeCap}List extends AbstractList 
implements ${valueTypeCap}BufferConsumer {
-
-  /**
-   * The size of the list. This is a READ_ONLY variable for all methods but 
setSizeRaw(int newSize) !!! If you violate
-   * this principle in subclasses, you should exactly know what you are doing.
-   */
-  protected int size;
-
-  /**
-   * Appends the specified element to the end of this list.
-   *
-   * @param element element to be appended to this list.
-   */
-  public void add(${valueType} element) {
-    beforeInsert(size, element);
-  }
-
-  /**
-   * Appends all elements of the specified list to the receiver.
-   *
-   * @param other the list of which all elements shall be appended.
-   */
-  public void addAllOf(Abstract${valueTypeCap}List other) {
-    addAllOfFromTo(other, 0, other.size() - 1);
-  }
-
-  /**
-   * Appends the part of the specified list between <code>from</code> 
(inclusive) and <code>to</code> (inclusive) to the
-   * receiver.
-   *
-   * @param other the list to be added to the receiver.
-   * @param from  the index of the first element to be appended (inclusive).
-   * @param to    the index of the last element to be appended (inclusive).
-   * @throws IndexOutOfBoundsException index is out of range 
(<tt>other.size()&gt;0 && (from&lt;0 || from&gt;to ||
-   *                                   to&gt;=other.size())</tt>).
-   */
-  public void addAllOfFromTo(Abstract${valueTypeCap}List other, int from, int 
to) {
-    beforeInsertAllOfFromTo(size, other, from, to);
-  }
-  
-  /**
-   * Appends the specified list to the end of this list.
-   * @param other the list to be appended. 
-   **/
-  @Override
-  public void addAllOf(${valueTypeCap}ArrayList other) {
-    addAllOfFromTo(other, 0, other.size() - 1);
-  }
-
-  /**
-   * Inserts the specified element before the specified position into the 
receiver. Shifts the element currently at that
-   * position (if any) and any subsequent elements to the right.
-   *
-   * @param index   index before which the specified element is to be inserted 
(must be in [0,size]).
-   * @param element element to be inserted.
-   * @throws IndexOutOfBoundsException index is out of range (<tt>index &lt; 0 
|| index &gt; size()</tt>).
-   */
-  public void beforeInsert(int index, ${valueType} element) {
-    beforeInsertDummies(index, 1);
-    set(index, element);
-  }
-
-  /**
-   * Inserts the part of the specified list between <code>otherFrom</code> 
(inclusive) and <code>otherTo</code>
-   * (inclusive) before the specified position into the receiver. Shifts the 
element currently at that position (if any)
-   * and any subsequent elements to the right.
-   *
-   * @param index index before which to insert first element from the 
specified list (must be in [0,size])..
-   * @param other list of which a part is to be inserted into the receiver.
-   * @param from  the index of the first element to be inserted (inclusive).
-   * @param to    the index of the last element to be inserted (inclusive).
-   * @throws IndexOutOfBoundsException index is out of range 
(<tt>other.size()&gt;0 && (from&lt;0 || from&gt;to ||
-   *                                   to&gt;=other.size())</tt>).
-   * @throws IndexOutOfBoundsException index is out of range (<tt>index &lt; 0 
|| index &gt; size()</tt>).
-   */
-  public void beforeInsertAllOfFromTo(int index, Abstract${valueTypeCap}List 
other, int from, int to) {
-    int length = to - from + 1;
-    this.beforeInsertDummies(index, length);
-    this.replaceFromToWithFrom(index, index + length - 1, other, from);
-  }
-
-  /**
-   * Inserts <tt>length</tt> dummy elements before the specified position into 
the receiver. Shifts the element
-   * currently at that position (if any) and any subsequent elements to the 
right. <b>This method must set the new size
-   * to be <tt>size()+length</tt>.
-   *
-   * @param index  index before which to insert dummy elements (must be in 
[0,size])..
-   * @param length number of dummy elements to be inserted.
-   * @throws IndexOutOfBoundsException if <tt>index &lt; 0 || index &gt; 
size()</tt>.
-   */
-  @Override
-  protected void beforeInsertDummies(int index, int length) {
-    if (index > size || index < 0) {
-      throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + 
size);
-    }
-    if (length > 0) {
-      ensureCapacity(size + length);
-      setSizeRaw(size + length);
-      replaceFromToWithFrom(index + length, size - 1, this, index);
-    }
-  }
-
-  /**
-   * Searches the receiver for the specified value using the binary search 
algorithm.  The receiver must
-   * <strong>must</strong> be sorted (as by the sort method) prior to making 
this call.  If it is not sorted, the
-   * results are undefined: in particular, the call may enter an infinite 
loop.  If the receiver contains multiple
-   * elements equal to the specified object, there is no guarantee which 
instance will be found.
-   *
-   * @param key the value to be searched for.
-   * @return index of the search key, if it is contained in the receiver; 
otherwise, <tt>(-(<i>insertion point</i>) -
-   *         1)</tt>.  The <i>insertion point</i> is defined as the the point 
at which the value would be inserted into
-   *         the receiver: the index of the first element greater than the 
key, or <tt>receiver.size()</tt>, if all
-   *         elements in the receiver are less than the specified key.  Note 
that this guarantees that the return value
-   *         will be &gt;= 0 if and only if the key is found.
-   * @see java.util.Arrays
-   */
-  public int binarySearch(${valueType} key) {
-    return this.binarySearchFromTo(key, 0, size - 1);
-  }
-
-  /**
-   * Searches the receiver for the specified value using the binary search 
algorithm.  The receiver must
-   * <strong>must</strong> be sorted (as by the sort method) prior to making 
this call.  If it is not sorted, the
-   * results are undefined: in particular, the call may enter an infinite 
loop.  If the receiver contains multiple
-   * elements equal to the specified object, there is no guarantee which 
instance will be found.
-   *
-   * @param key  the value to be searched for.
-   * @param from the leftmost search position, inclusive.
-   * @param to   the rightmost search position, inclusive.
-   * @return index of the search key, if it is contained in the receiver; 
otherwise, <tt>(-(<i>insertion point</i>) -
-   *         1)</tt>.  The <i>insertion point</i> is defined as the the point 
at which the value would be inserted into
-   *         the receiver: the index of the first element greater than the 
key, or <tt>receiver.size()</tt>, if all
-   *         elements in the receiver are less than the specified key.  Note 
that this guarantees that the return value
-   *         will be &gt;= 0 if and only if the key is found.
-   * @see java.util.Arrays
-   */
-  public int binarySearchFromTo(${valueType} key, int from, int to) {
-    int low = from;
-    int high = to;
-    while (low <= high) {
-      int mid = (low + high) / 2;
-      ${valueType} midVal = get(mid);
-
-      if (midVal < key) {
-        low = mid + 1;
-      } else if (midVal > key) {
-        high = mid - 1;
-      } else {
-        return mid;
-      } // key found
-    }
-    return -(low + 1);  // key not found.
-  }
-
-  /**
-   * Returns a deep copy of the receiver.
-   *
-   * @return a deep copy of the receiver.
-   */
-  @Override
-  public Object clone() {
-    return partFromTo(0, size - 1);
-  }
-
-  /**
-   * Returns true if the receiver contains the specified element.
-   *
-   * @param elem element whose presence in the receiver is to be tested.
-   */
-  public boolean contains(${valueType} elem) {
-    return indexOfFromTo(elem, 0, size - 1) >= 0;
-  }
-
-  /**
-   * Deletes the first element from the receiver that is identical to the 
specified element. Does nothing, if no such
-   * matching element is contained.
-   *
-   * @param element the element to be deleted.
-   */
-  public void delete(${valueType} element) {
-    int index = indexOfFromTo(element, 0, size - 1);
-    if (index >= 0) {
-      remove(index);
-    }
-  }
-
-  /**
-   * Returns the elements currently stored, possibly including invalid 
elements between size and capacity.
-   *
-   * <b>WARNING:</b> For efficiency reasons and to keep memory usage low, this 
method may decide <b>not to copy the
-   * array</b>. So if subsequently you modify the returned array directly via 
the [] operator, be sure you know what
-   * you're doing.
-   *
-   * @return the elements currently stored.
-   */
-  public ${valueType}[] elements() {
-    ${valueType}[] myElements = new ${valueType}[size];
-    for (int i = size; --i >= 0;) {
-      myElements[i] = getQuick(i);
-    }
-    return myElements;
-  }
-
-  /**
-   * Sets the receiver's elements to be the specified array. The size and 
capacity of the list is the length of the
-   * array. <b>WARNING:</b> For efficiency reasons and to keep memory usage 
low, this method may decide <b>not to copy
-   * the array</b>. So if subsequently you modify the returned array directly 
via the [] operator, be sure you know what
-   * you're doing.
-   *
-   * @param elements the new elements to be stored.
-   * @return the receiver itself.
-   */
-  public Abstract${valueTypeCap}List elements(${valueType}[] elements) {
-    clear();
-    addAllOfFromTo(new ${valueTypeCap}ArrayList(elements), 0, elements.length 
- 1);
-    return this;
-  }
-
-  /**
-   * Ensures that the receiver can hold at least the specified number of 
elements without needing to allocate new
-   * internal memory. If necessary, allocates new internal memory and 
increases the capacity of the receiver.
-   *
-   * @param minCapacity the desired minimum capacity.
-   */
-  public abstract void ensureCapacity(int minCapacity);
-
-  /**
-   * Compares the specified Object with the receiver. Returns true if and only 
if the specified Object is also an
-   * ArrayList of the same type, both Lists have the same size, and all 
corresponding pairs of elements in the two Lists
-   * are identical. In other words, two Lists are defined to be equal if they 
contain the same elements in the same
-   * order.
-   *
-   * @param otherObj the Object to be compared for equality with the receiver.
-   * @return true if the specified Object is equal to the receiver.
-   */
-  public boolean equals(Object otherObj) { //delta
-    if (otherObj == null) {
-      return false;
-    }
-    if (!(otherObj instanceof Abstract${valueTypeCap}List)) {
-      return false;
-    }
-    if (this == otherObj) {
-      return true;
-    }
-    Abstract${valueTypeCap}List other = (Abstract${valueTypeCap}List) otherObj;
-    if (size() != other.size()) {
-      return false;
-    }
-
-    for (int i = size(); --i >= 0;) {
-      if (getQuick(i) != other.getQuick(i)) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  /**
-   * Sets the specified range of elements in the specified array to the 
specified value.
-   *
-   * @param from the index of the first element (inclusive) to be filled with 
the specified value.
-   * @param to   the index of the last element (inclusive) to be filled with 
the specified value.
-   * @param val  the value to be stored in the specified elements of the 
receiver.
-   */
-  public void fillFromToWith(int from, int to, ${valueType} val) {
-    checkRangeFromTo(from, to, this.size);
-    for (int i = from; i <= to;) {
-      setQuick(i++, val);
-    }
-  }
-
-  /**
-   * Applies a procedure to each element of the receiver, if any. Starts at 
index 0, moving rightwards.
-   *
-   * @param procedure the procedure to be applied. Stops iteration if the 
procedure returns <tt>false</tt>, otherwise
-   *                  continues.
-   * @return <tt>false</tt> if the procedure stopped before all elements where 
iterated over, <tt>true</tt> otherwise.
-   */
-  public boolean forEach(${valueTypeCap}Procedure procedure) {
-    for (int i = 0; i < size;) {
-      if (!procedure.apply(get(i++))) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  /**
-   * Returns the element at the specified position in the receiver.
-   *
-   * @param index index of element to return.
-   * @throws IndexOutOfBoundsException index is out of range (index &lt; 0 || 
index &gt;= size()).
-   */
-  public ${valueType} get(int index) {
-    if (index >= size || index < 0) {
-      throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + 
size);
-    }
-    return getQuick(index);
-  }
-
-  /**
-   * Returns the element at the specified position in the receiver; 
<b>WARNING:</b> Does not check preconditions.
-   * Provided with invalid parameters this method may return invalid elements 
without throwing any exception! <b>You
-   * should only use this method when you are absolutely sure that the index 
is within bounds.</b> Precondition
-   * (unchecked): <tt>index &gt;= 0 && index &lt; size()</tt>.
-   *
-   * This method is normally only used internally in large loops where bounds 
are explicitly checked before the loop and
-   * need no be rechecked within the loop. However, when desperately, you can 
give this method <tt>public</tt>
-   * visibility in subclasses.
-   *
-   * @param index index of element to return.
-   */
-  protected abstract ${valueType} getQuick(int index);
-
-  /**
-   * Returns the index of the first occurrence of the specified element. 
Returns <code>-1</code> if the receiver does
-   * not contain this element.
-   *
-   * @param element the element to be searched for.
-   * @return the index of the first occurrence of the element in the receiver; 
returns <code>-1</code> if the element is
-   *         not found.
-   */
-  public int indexOf(${valueType} element) { //delta
-    return indexOfFromTo(element, 0, size - 1);
-  }
-
-  /**
-   * Returns the index of the first occurrence of the specified element. 
Returns <code>-1</code> if the receiver does
-   * not contain this element. Searches between <code>from</code>, inclusive 
and <code>to</code>, inclusive. Tests for
-   * identity.
-   *
-   * @param element element to search for.
-   * @param from    the leftmost search position, inclusive.
-   * @param to      the rightmost search position, inclusive.
-   * @return the index of the first occurrence of the element in the receiver; 
returns <code>-1</code> if the element is
-   *         not found.
-   * @throws IndexOutOfBoundsException index is out of range (<tt>size()&gt;0 
&& (from&lt;0 || from&gt;to ||
-   *                                   to&gt;=size())</tt>).
-   */
-  public int indexOfFromTo(${valueType} element, int from, int to) {
-    checkRangeFromTo(from, to, size);
-
-    for (int i = from; i <= to; i++) {
-      if (element == getQuick(i)) {
-        return i;
-      } //found
-    }
-    return -1; //not found
-  }
-
-  /**
-   * Returns the index of the last occurrence of the specified element. 
Returns <code>-1</code> if the receiver does not
-   * contain this element.
-   *
-   * @param element the element to be searched for.
-   * @return the index of the last occurrence of the element in the receiver; 
returns <code>-1</code> if the element is
-   *         not found.
-   */
-  public int lastIndexOf(${valueType} element) {
-    return lastIndexOfFromTo(element, 0, size - 1);
-  }
-
-  /**
-   * Returns the index of the last occurrence of the specified element. 
Returns <code>-1</code> if the receiver does not
-   * contain this element. Searches beginning at <code>to</code>, inclusive 
until <code>from</code>, inclusive. Tests
-   * for identity.
-   *
-   * @param element element to search for.
-   * @param from    the leftmost search position, inclusive.
-   * @param to      the rightmost search position, inclusive.
-   * @return the index of the last occurrence of the element in the receiver; 
returns <code>-1</code> if the element is
-   *         not found.
-   * @throws IndexOutOfBoundsException index is out of range (<tt>size()&gt;0 
&& (from&lt;0 || from&gt;to ||
-   *                                   to&gt;=size())</tt>).
-   */
-  public int lastIndexOfFromTo(${valueType} element, int from, int to) {
-    checkRangeFromTo(from, to, size());
-
-    for (int i = to; i >= from; i--) {
-      if (element == getQuick(i)) {
-        return i;
-      } //found
-    }
-    return -1; //not found
-  }
-
-  /**
-   * Sorts the specified range of the receiver into ascending order.
-   *
-   * The sorting algorithm is a modified mergesort (in which the merge is 
omitted if the highest element in the low
-   * sublist is less than the lowest element in the high sublist).  This 
algorithm offers guaranteed n*log(n)
-   * performance, and can approach linear performance on nearly sorted lists.
-   *
-   * <p><b>You should never call this method unless you are sure that this 
particular sorting algorithm is the right one
-   * for your data set.</b> It is generally better to call <tt>sort()</tt> or 
<tt>sortFromTo(...)</tt> instead, because
-   * those methods automatically choose the best sorting algorithm.
-   *
-   * @param from the index of the first element (inclusive) to be sorted.
-   * @param to   the index of the last element (inclusive) to be sorted.
-   * @throws IndexOutOfBoundsException index is out of range (<tt>size()&gt;0 
&& (from&lt;0 || from&gt;to ||
-   *                                   to&gt;=size())</tt>).
-   */
-  @Override
-  public void mergeSortFromTo(int from, int to) {
-    int mySize = size();
-    checkRangeFromTo(from, to, mySize);
-
-    ${valueType}[] myElements = elements();
-    Sorting.mergeSort(myElements, from, to + 1);
-    elements(myElements);
-    setSizeRaw(mySize);
-  }
-
-  /**
-   * Sorts the receiver according to the order induced by the specified 
comparator.  All elements in the range must be
-   * <i>mutually comparable</i> by the specified comparator (that is, 
<tt>c.compare(e1, e2)</tt> must not throw a
-   * <tt>ClassCastException</tt> for any elements <tt>e1</tt> and <tt>e2</tt> 
in the range).<p>
-   *
-   * This sort is guaranteed to be <i>stable</i>:  equal elements will not be 
reordered as a result of the sort.<p>
-   *
-   * The sorting algorithm is a modified mergesort (in which the merge is 
omitted if the highest element in the low
-   * sublist is less than the lowest element in the high sublist).  This 
algorithm offers guaranteed n*log(n)
-   * performance, and can approach linear performance on nearly sorted lists.
-   *
-   * @param from the index of the first element (inclusive) to be sorted.
-   * @param to   the index of the last element (inclusive) to be sorted.
-   * @param c    the comparator to determine the order of the receiver.
-   * @throws ClassCastException             if the array contains elements 
that are not <i>mutually comparable</i> using
-   *                                        the specified comparator.
-   * @throws IllegalArgumentException       if <tt>fromIndex &gt; toIndex</tt>
-   * @throws ArrayIndexOutOfBoundsException if <tt>fromIndex &lt; 0</tt> or 
<tt>toIndex &gt; a.length</tt>
-   * @throws IndexOutOfBoundsException      index is out of range 
(<tt>size()&gt;0 && (from&lt;0 || from&gt;to ||
-   *                                        to&gt;=size())</tt>).
-   */
-  public void mergeSortFromTo(int from, int to, ${valueTypeCap}Comparator c) {
-    int mySize = size();
-    checkRangeFromTo(from, to, mySize);
-
-    ${valueType}[] myElements = elements();
-    Sorting.mergeSort(myElements, from, to + 1, c);
-    elements(myElements);
-    setSizeRaw(mySize);
-  }
-
-  /**
-   * Returns a new list of the part of the receiver between <code>from</code>, 
inclusive, and <code>to</code>,
-   * inclusive.
-   *
-   * @param from the index of the first element (inclusive).
-   * @param to   the index of the last element (inclusive).
-   * @return a new list
-   * @throws IndexOutOfBoundsException index is out of range (<tt>size()&gt;0 
&& (from&lt;0 || from&gt;to ||
-   *                                   to&gt;=size())</tt>).
-   */
-  public Abstract${valueTypeCap}List partFromTo(int from, int to) {
-    checkRangeFromTo(from, to, size);
-
-    int length = to - from + 1;
-    ${valueTypeCap}ArrayList part = new ${valueTypeCap}ArrayList(length);
-    part.addAllOfFromTo(this, from, to);
-    return part;
-  }
-  
-  /**
-   * Sorts the specified range of the receiver into ascending numerical order. 
 The sorting algorithm is a tuned
-   * quicksort, adapted from Jon L. Bentley and M. Douglas McIlroy's 
"Engineering a Sort Function", Software-Practice
-   * and Experience, Vol. 23(11) P. 1249-1265 (November 1993).  This algorithm 
offers n*log(n) performance on many data
-   * sets that cause other quicksorts to degrade to quadratic performance.
-   *
-   * <p><b>You should never call this method unless you are sure that this 
particular sorting algorithm is the right one
-   * for your data set.</b> It is generally better to call <tt>sort()</tt> or 
<tt>sortFromTo(...)</tt> instead, because
-   * those methods automatically choose the best sorting algorithm.
-   *
-   * @param from the index of the first element (inclusive) to be sorted.
-   * @param to   the index of the last element (inclusive) to be sorted.
-   * @throws IndexOutOfBoundsException index is out of range (<tt>size()&gt;0 
&& (from&lt;0 || from&gt;to ||
-   *                                   to&gt;=size())</tt>).
-   */
-  @Override
-  public void quickSortFromTo(int from, int to) {
-    int mySize = size();
-    checkRangeFromTo(from, to, mySize);
-
-    ${valueType}[] myElements = elements();
-    java.util.Arrays.sort(myElements, from, to + 1);
-    elements(myElements);
-    setSizeRaw(mySize);
-  }
-
-  /**
-   * Sorts the receiver according to the order induced by the specified 
comparator.  All elements in the range must be
-   * <i>mutually comparable</i> by the specified comparator (that is, 
<tt>c.compare(e1, e2)</tt> must not throw a
-   * <tt>ClassCastException</tt> for any elements <tt>e1</tt> and <tt>e2</tt> 
in the range).<p>
-   *
-   * The sorting algorithm is a tuned quicksort, adapted from Jon L. Bentley 
and M. Douglas McIlroy's "Engineering a
-   * Sort Function", Software-Practice and Experience, Vol. 23(11) P. 
1249-1265 (November 1993).  This algorithm offers
-   * n*log(n) performance on many data sets that cause other quicksorts to 
degrade to quadratic performance.
-   *
-   * @param from the index of the first element (inclusive) to be sorted.
-   * @param to   the index of the last element (inclusive) to be sorted.
-   * @param c    the comparator to determine the order of the receiver.
-   * @throws ClassCastException             if the array contains elements 
that are not <i>mutually comparable</i> using
-   *                                        the specified comparator.
-   * @throws IllegalArgumentException       if <tt>fromIndex &gt; toIndex</tt>
-   * @throws ArrayIndexOutOfBoundsException if <tt>fromIndex &lt; 0</tt> or 
<tt>toIndex &gt; a.length</tt>
-   * @throws IndexOutOfBoundsException      index is out of range 
(<tt>size()&gt;0 && (from&lt;0 || from&gt;to ||
-   *                                        to&gt;=size())</tt>).
-   */
-  public void quickSortFromTo(int from, int to, ${valueTypeCap}Comparator c) {
-    int mySize = size();
-    checkRangeFromTo(from, to, mySize);
-
-    ${valueType}[] myElements = elements();
-    Sorting.quickSort(myElements, from, to + 1, c);
-    elements(myElements);
-    setSizeRaw(mySize);
-  }
-
-  /**
-   * Removes from the receiver all elements that are contained in the 
specified list. Tests for identity.
-   *
-   * @param other the other list.
-   * @return <code>true</code> if the receiver changed as a result of the call.
-   */
-  public boolean removeAll(Abstract${valueTypeCap}List other) {
-    if (other.isEmpty()) {
-      return false;
-    } //nothing to do
-    int limit = other.size() - 1;
-    int j = 0;
-
-    for (int i = 0; i < size; i++) {
-      if (other.indexOfFromTo(getQuick(i), 0, limit) < 0) {
-        setQuick(j++, getQuick(i));
-      }
-    }
-
-    boolean modified = (j != size);
-    setSize(j);
-    return modified;
-  }
-
-  /**
-   * Removes from the receiver all elements whose index is between 
<code>from</code>, inclusive and <code>to</code>,
-   * inclusive.  Shifts any succeeding elements to the left (reduces their 
index). This call shortens the list by
-   * <tt>(to - from + 1)</tt> elements.
-   *
-   * @param from index of first element to be removed.
-   * @param to   index of last element to be removed.
-   * @throws IndexOutOfBoundsException index is out of range (<tt>size()&gt;0 
&& (from&lt;0 || from&gt;to ||
-   *                                   to&gt;=size())</tt>).
-   */
-  @Override
-  public void removeFromTo(int from, int to) {
-    checkRangeFromTo(from, to, size);
-    int numMoved = size - to - 1;
-    if (numMoved > 0) {
-      replaceFromToWithFrom(from, from - 1 + numMoved, this, to + 1);
-      //fillFromToWith(from+numMoved, size-1, 0.0f); //delta
-    }
-    int width = to - from + 1;
-    if (width > 0) {
-      setSizeRaw(size - width);
-    }
-  }
-
-  /**
-   * Replaces a number of elements in the receiver with the same number of 
elements of another list. Replaces elements
-   * in the receiver, between <code>from</code> (inclusive) and 
<code>to</code> (inclusive), with elements of
-   * <code>other</code>, starting from <code>otherFrom</code> (inclusive).
-   *
-   * @param from      the position of the first element to be replaced in the 
receiver
-   * @param to        the position of the last element to be replaced in the 
receiver
-   * @param other     list holding elements to be copied into the receiver.
-   * @param otherFrom position of first element within other list to be copied.
-   */
-  public void replaceFromToWithFrom(int from, int to, 
Abstract${valueTypeCap}List other, int otherFrom) {
-    int length = to - from + 1;
-    if (length > 0) {
-      checkRangeFromTo(from, to, size());
-      checkRangeFromTo(otherFrom, otherFrom + length - 1, other.size());
-
-      // unambiguous copy (it may hold other==this)
-      if (from <= otherFrom) {
-        while (--length >= 0) {
-          setQuick(from++, other.getQuick(otherFrom++));
-        }
-      } else {
-        int otherTo = otherFrom + length - 1;
-        while (--length >= 0) {
-          setQuick(to--, other.getQuick(otherTo--));
-        }
-      }
-    }
-  }
-
-  /**
-   * Replaces the part between <code>from</code> (inclusive) and 
<code>to</code> (inclusive) with the other list's part
-   * between <code>otherFrom</code> and <code>otherTo</code>. Powerful (and 
tricky) method! Both parts need not be of
-   * the same size (part A can both be smaller or larger than part B). Parts 
may overlap. Receiver and other list may
-   * (but most not) be identical. If <code>from &gt; to</code>, then inserts 
other part before <code>from</code>.
-   *
-   * @param from      the first element of the receiver (inclusive)
-   * @param to        the last element of the receiver (inclusive)
-   * @param other     the other list (may be identical with receiver)
-   * @param otherFrom the first element of the other list (inclusive)
-   * @param otherTo   the last element of the other list (inclusive)
-   *
-   *                  <p><b>Examples:</b><pre>
-   *                                                                     a=[0, 
1, 2, 3, 4, 5, 6, 7]
-   *                                                                     
b=[50, 60, 70, 80, 90]
-   *                                                                     
a.R(...)=a.replaceFromToWithFromTo(...)
-   *
-   *                                                                     
a.R(3,5,b,0,4)-->[0, 1, 2, 50, 60, 70, 80, 90,
-   *                  6, 7]
-   *                                                                     
a.R(1,6,b,0,4)-->[0, 50, 60, 70, 80, 90, 7]
-   *                                                                     
a.R(0,6,b,0,4)-->[50, 60, 70, 80, 90, 7]
-   *                                                                     
a.R(3,5,b,1,2)-->[0, 1, 2, 60, 70, 6, 7]
-   *                                                                     
a.R(1,6,b,1,2)-->[0, 60, 70, 7]
-   *                                                                     
a.R(0,6,b,1,2)-->[60, 70, 7]
-   *                                                                     
a.R(5,3,b,0,4)-->[0, 1, 2, 3, 4, 50, 60, 70,
-   *                  80, 90, 5, 6, 7]
-   *                                                                     
a.R(5,0,b,0,4)-->[0, 1, 2, 3, 4, 50, 60, 70,
-   *                  80, 90, 5, 6, 7]
-   *                                                                     
a.R(5,3,b,1,2)-->[0, 1, 2, 3, 4, 60, 70, 5, 6,
-   *                  7]
-   *                                                                     
a.R(5,0,b,1,2)-->[0, 1, 2, 3, 4, 60, 70, 5, 6,
-   *                  7]
-   *
-   *                                                                     
Extreme cases:
-   *                                                                     
a.R(5,3,b,0,0)-->[0, 1, 2, 3, 4, 50, 5, 6, 7]
-   *                                                                     
a.R(5,3,b,4,4)-->[0, 1, 2, 3, 4, 90, 5, 6, 7]
-   *                                                                     
a.R(3,5,a,0,1)-->[0, 1, 2, 0, 1, 6, 7]
-   *                                                                     
a.R(3,5,a,3,5)-->[0, 1, 2, 3, 4, 5, 6, 7]
-   *                                                                     
a.R(3,5,a,4,4)-->[0, 1, 2, 4, 6, 7]
-   *                                                                     
a.R(5,3,a,0,4)-->[0, 1, 2, 3, 4, 0, 1, 2, 3, 4,
-   *                  5, 6, 7]
-   *                                                                     
a.R(0,-1,b,0,4)-->[50, 60, 70, 80, 90, 0, 1, 2,
-   *                  3, 4, 5, 6, 7]
-   *                                                                     
a.R(0,-1,a,0,4)-->[0, 1, 2, 3, 4, 0, 1, 2, 3,
-   *                  4, 5, 6, 7]
-   *                                                                     
a.R(8,0,a,0,4)-->[0, 1, 2, 3, 4, 5, 6, 7, 0, 1,
-   *                  2, 3, 4]
-   *                                                                     </pre>
-   */
-  public void replaceFromToWithFromTo(int from, int to, 
Abstract${valueTypeCap}List other, int otherFrom, int otherTo) {
-    if (otherFrom > otherTo) {
-      throw new IndexOutOfBoundsException("otherFrom: " + otherFrom + ", 
otherTo: " + otherTo);
-    }
-
-    if (this == other && to - from != otherTo - otherFrom) { // avoid 
stumbling over my own feet
-      replaceFromToWithFromTo(from, to, partFromTo(otherFrom, otherTo), 0, 
otherTo - otherFrom);
-      return;
-    }
-
-    int length = otherTo - otherFrom + 1;
-    int diff = length;
-    int theLast = from - 1;
-
-    if (to >= from) {
-      diff -= (to - from + 1);
-      theLast = to;
-    }
-
-    if (diff > 0) {
-      beforeInsertDummies(theLast + 1, diff);
-    } else {
-      if (diff < 0) {
-        removeFromTo(theLast + diff, theLast - 1);
-      }
-    }
-
-    if (length > 0) {
-      replaceFromToWithFrom(from, from + length - 1, other, otherFrom);
-    }
-  }
-  
-  /**
-   * Retains (keeps) only the elements in the receiver that are contained in 
the specified other list. In other words,
-   * removes from the receiver all of its elements that are not contained in 
the specified other list.
-   *
-   * @param other the other list to test against.
-   * @return <code>true</code> if the receiver changed as a result of the call.
-   */
-  public boolean retainAll(Abstract${valueTypeCap}List other) {
-    if (other.isEmpty()) {
-      if (size == 0) {
-        return false;
-      }
-      setSize(0);
-      return true;
-    }
-
-    int limit = other.size() - 1;
-    int j = 0;
-    for (int i = 0; i < size; i++) {
-      if (other.indexOfFromTo(getQuick(i), 0, limit) >= 0) {
-        setQuick(j++, getQuick(i));
-      }
-    }
-
-    boolean modified = (j != size);
-    setSize(j);
-    return modified;
-  }
-  
-  /** Reverses the elements of the receiver. Last becomes first, second last 
becomes second first, and so on. */
-  @Override
-  public void reverse() {
-    int limit = size() / 2;
-    int j = size() - 1;
-
-    for (int i = 0; i < limit;) { //swap
-      ${valueType} tmp = getQuick(i);
-      setQuick(i++, getQuick(j));
-      setQuick(j--, tmp);
-    }
-  }
-
-  /**
-   * Replaces the element at the specified position in the receiver with the 
specified element.
-   *
-   * @param index   index of element to replace.
-   * @param element element to be stored at the specified position.
-   * @throws IndexOutOfBoundsException if <tt>index &lt; 0 || index &gt;= 
size()</tt>.
-   */
-  public void set(int index, ${valueType} element) {
-    if (index >= size || index < 0) {
-      throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + 
size);
-    }
-    setQuick(index, element);
-  }
-
-  /**
-   * Replaces the element at the specified position in the receiver with the 
specified element; <b>WARNING:</b> Does not
-   * check preconditions. Provided with invalid parameters this method may 
access invalid indexes without throwing any
-   * exception! <b>You should only use this method when you are absolutely 
sure that the index is within bounds.</b>
-   * Precondition (unchecked): <tt>index &gt;= 0 && index &lt; size()</tt>.
-   *
-   * This method is normally only used internally in large loops where bounds 
are explicitly checked before the loop and
-   * need no be rechecked within the loop. However, when desperately, you can 
give this method <tt>public</tt>
-   * visibility in subclasses.
-   *
-   * @param index   index of element to replace.
-   * @param element element to be stored at the specified position.
-   */
-  protected abstract void setQuick(int index, ${valueType} element);
-
-  /**
-   * Sets the size of the receiver without modifying it otherwise. This method 
should not release or allocate new memory
-   * but simply set some instance variable like <tt>size</tt>.
-   *
-   * If your subclass overrides and delegates size changing methods to some 
other object, you must make sure that those
-   * overriding methods not only update the size of the delegate but also of 
this class. For example: public
-   * DatabaseList extends Abstract${valueTypeCap}List { ... public void 
removeFromTo(int from,int to) {
-   * myDatabase.removeFromTo(from,to); this.setSizeRaw(size-(to-from+1)); } }
-   */
-  protected void setSizeRaw(int newSize) {
-    size = newSize;
-  }
-
-  /** Returns the number of elements contained in the receiver. */
-  @Override
-  public int size() {
-    return size;
-  }
-
-  /**
-   * Returns a list which is a concatenation of <code>times</code> times the 
receiver.
-   *
-   * @param times the number of times the receiver shall be copied.
-   */
-  public Abstract${valueTypeCap}List times(int times) {
-    Abstract${valueTypeCap}List newList = new ${valueTypeCap}ArrayList(times * 
size());
-    for (int i = times; --i >= 0;) {
-      newList.addAllOfFromTo(this, 0, size() - 1);
-    }
-    return newList;
-  }
-
-  /** Returns a <code>ArrayList</code> containing all the elements in the 
receiver. */
-  public List<${valueObjectType}> toList() {
-    int mySize = size();
-    List<${valueObjectType}> list = new ArrayList<${valueObjectType}>(mySize);
-    for (int i = 0; i < mySize; i++) {
-      list.add(get(i));
-    }
-    return list;
-  }
-  
-  public ${valueType}[] toArray(${valueType}[] values) {
-   int mySize = size();
-   ${valueType}[] myElements;
-   if (values.length >= mySize) {
-     myElements = values;
-   } else {
-     myElements = new ${valueType}[mySize];
-   }
-   for (int i = size; --i >= 0;) {
-      myElements[i] = getQuick(i);
-    }
-    return myElements;
-  }
-
-  /** Returns a string representation of the receiver, containing the String 
representation of each element. */
-  public String toString() {
-    return org.apache.mahout.math.Arrays.toString(partFromTo(0, size() - 
1).elements());
-  }
-}

Reply via email to