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)>0) && (compare(y, - * z)>0))</tt> implies <tt>compare(x, z)>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 "equal to" 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()>0 && (from<0 || from>to || - * to>=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 < 0 || index > 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()>0 && (from<0 || from>to || - * to>=other.size())</tt>). - * @throws IndexOutOfBoundsException index is out of range (<tt>index < 0 || index > 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 < 0 || index > 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 >= 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 >= 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 < 0 || index >= 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 >= 0 && index < 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()>0 && (from<0 || from>to || - * to>=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()>0 && (from<0 || from>to || - * to>=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()>0 && (from<0 || from>to || - * to>=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 > toIndex</tt> - * @throws ArrayIndexOutOfBoundsException if <tt>fromIndex < 0</tt> or <tt>toIndex > a.length</tt> - * @throws IndexOutOfBoundsException index is out of range (<tt>size()>0 && (from<0 || from>to || - * to>=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()>0 && (from<0 || from>to || - * to>=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()>0 && (from<0 || from>to || - * to>=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 > toIndex</tt> - * @throws ArrayIndexOutOfBoundsException if <tt>fromIndex < 0</tt> or <tt>toIndex > a.length</tt> - * @throws IndexOutOfBoundsException index is out of range (<tt>size()>0 && (from<0 || from>to || - * to>=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()>0 && (from<0 || from>to || - * to>=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 > 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 < 0 || index >= 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 >= 0 && index < 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()); - } -}
