Browse Source

repackage

assira as assira.core
assira.all as assira.core8 & assira.core11
Ranides Atterwim 5 years ago
parent
commit
29ed710fdc
100 changed files with 554 additions and 613 deletions
  1. 3 18
      .gitignore
  2. 0 33
      assira.all/dependency-reduced-pom.xml
  3. 1 1
      assira.archetype/pom.xml
  4. 3 3
      assira.archetype/src/main/resources/archetype-resources/pom.xml
  5. 2 2
      assira.asm/pom.xml
  6. 3 3
      assira.benchmark/pom.xml
  7. 0 0
      assira.core/lombok.config
  8. 3 14
      assira/pom.xml
  9. 0 0
      assira.core/src/main/java/net/ranides/assira/annotations/JavaServiceProcessor.java
  10. 0 0
      assira.core/src/main/java/net/ranides/assira/annotations/Meta.java
  11. 0 0
      assira.core/src/main/java/net/ranides/assira/annotations/javac/JavaCompilation.java
  12. 0 0
      assira.core/src/main/java/net/ranides/assira/annotations/javac/JavaCompilationFM.java
  13. 0 0
      assira.core/src/main/java/net/ranides/assira/annotations/javac/JavaCompilationResult.java
  14. 0 0
      assira.core/src/main/java/net/ranides/assira/awt/AWTInvoker.java
  15. 0 0
      assira.core/src/main/java/net/ranides/assira/awt/ColorUtils.java
  16. 0 0
      assira.core/src/main/java/net/ranides/assira/awt/ImageLoader.java
  17. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/ACollection.java
  18. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/AIntCollection.java
  19. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/BlockCollection.java
  20. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/CollectionUtils.java
  21. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/FlatCollection.java
  22. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/Grid.java
  23. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/HashComparator.java
  24. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/HashFunction.java
  25. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/HashIntComparator.java
  26. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/IntCollection.java
  27. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/IntCollectionUtils.java
  28. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/IntComparator.java
  29. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/Swapper.java
  30. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/arrays/ArrayAllocator.java
  31. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/arrays/ArraySearch.java
  32. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/arrays/ArraySort.java
  33. 247 247
      assira/src/main/java/net/ranides/assira/collection/arrays/ArrayUtils.java
  34. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/arrays/IntArraySort.java
  35. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/arrays/IntArrays.java
  36. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/arrays/NativeArray.java
  37. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/arrays/NativeArrayAccess.java
  38. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/arrays/NativeArrayAllocator.java
  39. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/arrays/NativeArraySearch.java
  40. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/arrays/NativeArraySort.java
  41. 292 292
      assira/src/main/java/net/ranides/assira/collection/arrays/NativeArrayUtils.java
  42. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/iterators/AListIterator.java
  43. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/iterators/EnumerationUtils.java
  44. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/iterators/FetchIterator.java
  45. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/iterators/ForwardIterator.java
  46. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/iterators/ForwardSpliterator.java
  47. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/iterators/IntIterator.java
  48. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/iterators/IntIteratorUtils.java
  49. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/iterators/IntListIterator.java
  50. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/iterators/IteratorUtils.java
  51. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/iterators/RandomAccessIntIterator.java
  52. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/iterators/RandomAccessIterator.java
  53. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/iterators/RemoveIterator.java
  54. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lists/AIntList.java
  55. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lists/FlatList.java
  56. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lists/ImmutableList.java
  57. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lists/IntArrayList.java
  58. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lists/IntList.java
  59. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lists/IntListGenerator.java
  60. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lists/IntListUtils.java
  61. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lists/IntRTList.java
  62. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lists/IntRange.java
  63. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lists/IntVirtualList.java
  64. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lists/ListUtils.java
  65. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lists/NativeArrayList.java
  66. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lists/RTList.java
  67. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lists/ReversedList.java
  68. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lists/VirtualList.java
  69. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lookups/AHashLookup.java
  70. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lookups/ALookup.java
  71. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lookups/ALookupEntry.java
  72. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lookups/ASortedLookup.java
  73. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lookups/AVLTreeLookup.java
  74. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lookups/CustomLookup.java
  75. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lookups/HashLookup.java
  76. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lookups/IdentLookup.java
  77. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lookups/LazyLookup.java
  78. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lookups/Lookup.java
  79. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lookups/LookupUtils.java
  80. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lookups/RBTreeLookup.java
  81. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/lookups/SortedLookup.java
  82. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/maps/AAVLTreeMap.java
  83. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/maps/AEntry.java
  84. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/maps/AHashMap.java
  85. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/maps/AIntAVLTreeMap.java
  86. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/maps/AIntEntry.java
  87. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/maps/AIntHashMap.java
  88. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/maps/AIntMap.java
  89. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/maps/AIntRBTreeMap.java
  90. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/maps/AIntSortedMap.java
  91. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/maps/AMap.java
  92. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/maps/ARBTreeMap.java
  93. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/maps/ASortedMap.java
  94. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/maps/AVLTreeMap.java
  95. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/maps/AVLTreeMultiMap.java
  96. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/maps/ArrayMap.java
  97. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/maps/BlockMap.java
  98. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/maps/Cache.java
  99. 0 0
      assira.core/src/main/java/net/ranides/assira/collection/maps/CacheMap.java
  100. 0 0
      assira/src/main/java/net/ranides/assira/collection/maps/CrossEnumMap.java

+ 3 - 18
.gitignore

@@ -1,22 +1,7 @@
-/assira/target/
-/assira.asm/target/
-/assira.rules/target/
-/assira.rules.test/target/
-/assira.junit/target/
-/assira.drafts/target/
-/assira.test/target/
-/assira.archetype/target/
-/assira.benchmark/target/
-/assira.all/target/
-/assira.enterprise/target/
-/assira.lambda/target/
-/assira.jdk8/target/
-/assira.jdk11/target/
-/assira.debugger/target/
-/assira1/target/
+target/
 pom.xml.versionsBackup
 pom.xml.versionsBackup
 nbproject
 nbproject
-/.idea/
+.idea/
 *.iml
 *.iml
-assira.asm/dependency-reduced-pom.xml
+dependency-reduced-pom.xml
 
 

+ 0 - 33
assira.all/dependency-reduced-pom.xml

@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<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">
-  <parent>
-    <artifactId>assira.project</artifactId>
-    <groupId>net.ranides</groupId>
-    <version>2.5.0</version>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>assira.all</artifactId>
-  <name>assira.all</name>
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-shade-plugin</artifactId>
-        <version>2.4.3</version>
-        <executions>
-          <execution>
-            <phase>package</phase>
-            <goals>
-              <goal>shade</goal>
-            </goals>
-            <configuration>
-              <shadedArtifactAttached>false</shadedArtifactAttached>
-              <createDependencyReducedPom>true</createDependencyReducedPom>
-              <minimizeJar>false</minimizeJar>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
-

+ 1 - 1
assira.archetype/pom.xml

@@ -4,7 +4,7 @@
     <parent>
     <parent>
         <groupId>net.ranides</groupId>
         <groupId>net.ranides</groupId>
         <artifactId>assira.project</artifactId>
         <artifactId>assira.project</artifactId>
-        <version>2.5.0</version>
+        <version>2.6.0</version>
     </parent>
     </parent>
 
 
     <groupId>net.ranides</groupId>
     <groupId>net.ranides</groupId>

+ 3 - 3
assira.archetype/src/main/resources/archetype-resources/pom.xml

@@ -83,13 +83,13 @@
     <dependencies>
     <dependencies>
         <dependency>
         <dependency>
             <groupId>net.ranides</groupId>
             <groupId>net.ranides</groupId>
-            <artifactId>assira</artifactId>
-            <version>2.5.0</version>
+            <artifactId>assira.core</artifactId>
+            <version>2.6.0</version>
         </dependency>
         </dependency>
         <dependency>
         <dependency>
             <groupId>net.ranides</groupId>
             <groupId>net.ranides</groupId>
             <artifactId>assira.junit</artifactId>
             <artifactId>assira.junit</artifactId>
-            <version>2.5.0</version>
+            <version>2.6.0</version>
             <scope>test</scope>
             <scope>test</scope>
         </dependency>
         </dependency>
     </dependencies>
     </dependencies>

+ 2 - 2
assira.asm/pom.xml

@@ -4,8 +4,8 @@
     <parent>
     <parent>
         <groupId>net.ranides</groupId>
         <groupId>net.ranides</groupId>
         <artifactId>assira.project</artifactId>
         <artifactId>assira.project</artifactId>
-        <version>2.5.0</version>
-        <relativePath>..</relativePath>
+        <version>2.6.0</version>
+        <relativePath>../pom.xml</relativePath>
     </parent>
     </parent>
     <groupId>net.ranides</groupId>
     <groupId>net.ranides</groupId>
     <artifactId>assira.asm</artifactId>
     <artifactId>assira.asm</artifactId>

+ 3 - 3
assira.benchmark/pom.xml

@@ -4,8 +4,8 @@
     <parent>
     <parent>
 		<groupId>net.ranides</groupId>
 		<groupId>net.ranides</groupId>
 		<artifactId>assira.project</artifactId>
 		<artifactId>assira.project</artifactId>
-		<version>2.5.0</version>
-        <relativePath>..</relativePath>
+		<version>2.6.0</version>
+        <relativePath>../pom.xml</relativePath>
 	</parent>
 	</parent>
     <name>assira.benchmark</name>
     <name>assira.benchmark</name>
     <groupId>net.ranides</groupId>
     <groupId>net.ranides</groupId>
@@ -37,7 +37,7 @@
         </dependency>
         </dependency>
         <dependency>
         <dependency>
             <groupId>net.ranides</groupId>
             <groupId>net.ranides</groupId>
-            <artifactId>assira</artifactId>
+            <artifactId>assira.core</artifactId>
         </dependency>
         </dependency>
         <dependency>
         <dependency>
             <groupId>net.ranides</groupId>
             <groupId>net.ranides</groupId>

assira/lombok.config → assira.core/lombok.config


+ 3 - 14
assira/pom.xml

@@ -4,12 +4,12 @@
     <parent>
     <parent>
         <groupId>net.ranides</groupId>
         <groupId>net.ranides</groupId>
         <artifactId>assira.project</artifactId>
         <artifactId>assira.project</artifactId>
-        <version>2.5.0</version>
+        <version>2.6.0</version>
         <relativePath>..</relativePath>
         <relativePath>..</relativePath>
     </parent>
     </parent>
-    <name>assira</name>
+    <name>assira.core</name>
     <groupId>net.ranides</groupId>
     <groupId>net.ranides</groupId>
-    <artifactId>assira</artifactId>
+    <artifactId>assira.core</artifactId>
     <packaging>jar</packaging>
     <packaging>jar</packaging>
 	
 	
     <properties>
     <properties>
@@ -125,16 +125,5 @@
             <artifactId>lombok</artifactId>
             <artifactId>lombok</artifactId>
             <scope>provided</scope>
             <scope>provided</scope>
         </dependency>
         </dependency>
-        <dependency>
-            <groupId>javax</groupId>
-            <artifactId>javaee-api</artifactId>
-            <version>7.0</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.jetbrains</groupId>
-            <artifactId>annotations</artifactId>
-            <version>21.0.0</version>
-        </dependency>
     </dependencies>
     </dependencies>
 </project>
 </project>

assira/src/main/java/net/ranides/assira/annotations/JavaServiceProcessor.java → assira.core/src/main/java/net/ranides/assira/annotations/JavaServiceProcessor.java


assira/src/main/java/net/ranides/assira/annotations/Meta.java → assira.core/src/main/java/net/ranides/assira/annotations/Meta.java


assira/src/main/java/net/ranides/assira/annotations/javac/JavaCompilation.java → assira.core/src/main/java/net/ranides/assira/annotations/javac/JavaCompilation.java


assira/src/main/java/net/ranides/assira/annotations/javac/JavaCompilationFM.java → assira.core/src/main/java/net/ranides/assira/annotations/javac/JavaCompilationFM.java


assira/src/main/java/net/ranides/assira/annotations/javac/JavaCompilationResult.java → assira.core/src/main/java/net/ranides/assira/annotations/javac/JavaCompilationResult.java


assira/src/main/java/net/ranides/assira/awt/AWTInvoker.java → assira.core/src/main/java/net/ranides/assira/awt/AWTInvoker.java


assira/src/main/java/net/ranides/assira/awt/ColorUtils.java → assira.core/src/main/java/net/ranides/assira/awt/ColorUtils.java


assira/src/main/java/net/ranides/assira/awt/ImageLoader.java → assira.core/src/main/java/net/ranides/assira/awt/ImageLoader.java


assira/src/main/java/net/ranides/assira/collection/ACollection.java → assira.core/src/main/java/net/ranides/assira/collection/ACollection.java


assira/src/main/java/net/ranides/assira/collection/AIntCollection.java → assira.core/src/main/java/net/ranides/assira/collection/AIntCollection.java


assira/src/main/java/net/ranides/assira/collection/BlockCollection.java → assira.core/src/main/java/net/ranides/assira/collection/BlockCollection.java


assira/src/main/java/net/ranides/assira/collection/CollectionUtils.java → assira.core/src/main/java/net/ranides/assira/collection/CollectionUtils.java


assira/src/main/java/net/ranides/assira/collection/FlatCollection.java → assira.core/src/main/java/net/ranides/assira/collection/FlatCollection.java


assira/src/main/java/net/ranides/assira/collection/Grid.java → assira.core/src/main/java/net/ranides/assira/collection/Grid.java


assira/src/main/java/net/ranides/assira/collection/HashComparator.java → assira.core/src/main/java/net/ranides/assira/collection/HashComparator.java


assira/src/main/java/net/ranides/assira/collection/HashFunction.java → assira.core/src/main/java/net/ranides/assira/collection/HashFunction.java


assira/src/main/java/net/ranides/assira/collection/HashIntComparator.java → assira.core/src/main/java/net/ranides/assira/collection/HashIntComparator.java


assira/src/main/java/net/ranides/assira/collection/IntCollection.java → assira.core/src/main/java/net/ranides/assira/collection/IntCollection.java


assira/src/main/java/net/ranides/assira/collection/IntCollectionUtils.java → assira.core/src/main/java/net/ranides/assira/collection/IntCollectionUtils.java


assira/src/main/java/net/ranides/assira/collection/IntComparator.java → assira.core/src/main/java/net/ranides/assira/collection/IntComparator.java


assira/src/main/java/net/ranides/assira/collection/Swapper.java → assira.core/src/main/java/net/ranides/assira/collection/Swapper.java


assira/src/main/java/net/ranides/assira/collection/arrays/ArrayAllocator.java → assira.core/src/main/java/net/ranides/assira/collection/arrays/ArrayAllocator.java


assira/src/main/java/net/ranides/assira/collection/arrays/ArraySearch.java → assira.core/src/main/java/net/ranides/assira/collection/arrays/ArraySearch.java


assira/src/main/java/net/ranides/assira/collection/arrays/ArraySort.java → assira.core/src/main/java/net/ranides/assira/collection/arrays/ArraySort.java


+ 247 - 247
assira/src/main/java/net/ranides/assira/collection/arrays/ArrayUtils.java

@@ -1,247 +1,247 @@
-/*
- * @author Ranides Atterwim <ranides@gmail.com>
- * @copyright Ranides Atterwim
- * @license WTFPL
- * @url http://ranides.net/projects/assira
- */
-package net.ranides.assira.collection.arrays;
-
-import java.lang.reflect.Array;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.ListIterator;
-import java.util.Random;
-import java.util.function.BiPredicate;
-import net.ranides.assira.collection.iterators.IntIterator;
-
-@SuppressWarnings({
-    "PMD.AvoidReassigningParameters"
-})
-public final class ArrayUtils {
-
-    private ArrayUtils() {
-        // utility class
-    }
-    
-    /**
-     * Unwraps an iterator into an array starting at a given offset for a given
-     * number of elements.
-     *
-     * <P>This method iterates over the given type-specific iterator and stores
-     * the elements returned, up to a maximum of
-     * <code>length</code>, in the given array starting at
-     * <code>offset</code>. The number of actually unwrapped elements is
-     * returned (it may be less than
-     * <code>max</code> if the iterator emits less than
-     * <code>max</code> elements).
-     *
-     * @param iterator a type-specific iterator.
-     * @param target an array to contain the output of the iterator.
-     * @param begin the first element of the array to be returned.
-     * @param end the maximum number of elements to collect.
-     * @return the number of elements unwrapped.
-     */
-    public static <A,T> int collect(Iterator<? extends T> iterator, A target, int begin, int end) {
-        if($isint(target)) {
-            return $collect(IntIterator.$wrap(iterator), (int[])target, begin, end);
-        } else {
-            return NativeArrayUtils.collect(iterator, NativeArray.wrap(target), begin, end);
-        }
-    }
-
-    private static <A> boolean $isint(A array) {
-        return null!=array && int[].class.equals(array.getClass());
-    }
-    
-    /**
-     * Unwraps an iterator into an array.
-     *
-     * <P>This method iterates over the given type-specific iterator and stores
-     * the elements returned in the given array. The iteration will stop when
-     * the iterator has no more elements or when the end of the array has been
-     * reached.
-     *
-     * @param iterator a type-specific iterator.
-     * @param target an array to contain the output of the iterator.
-     * @return the number of elements unwrapped.
-     */
-    public static <A,T> int collect(Iterator<? extends T> iterator, A target) {
-        if($isint(target)) {
-            int[] array = (int[])target;
-            return $collect(IntIterator.$wrap(iterator), array, 0, array.length);
-        } else {
-            return NativeArrayUtils.collect(iterator, NativeArray.wrap(target));
-        }
-    }
-    
-    static int $collect(IntIterator iterator, int target[], int begin, int end) {
-        NativeArrayAllocator.ensureFromTo(target.length, begin, end);
-        int j = end;
-        while (j-- != 0 && iterator.hasNext()) {
-            target[begin++] = iterator.nextInt();
-        }
-        return end - j - 1;
-    }
-        
-    /**
-     * Fills the given array with the given value.
-     *
-     * <P>This method uses a backward loop. It is significantly faster than the
-     * corresponding method in {@link java.util.Arrays}.
-     *
-     * @param array an array.
-     * @param value the new value for all elements of the array.
-     */
-    public static <A,T> void fill(A array, T value) {
-        NativeArrayUtils.fill(NativeArray.wrap(array), value);
-    }
-
-    /**
-     * Fills a portion of the given array with the given value.
-     *
-     * <P>If possible (i.e.,
-     * <code>from</code> is 0) this method uses a backward loop. In this case,
-     * it is significantly faster than the corresponding method in
-     * {@link java.util.Arrays}.
-     *
-     * @param array an array.
-     * @param begin the starting index of the portion to fill (inclusive).
-     * @param end the end index of the portion to fill (exclusive).
-     * @param value the new value for all elements of the specified portion of
-     * the array.
-     */
-    public static <A,T> void fill(A array, int begin, int end, T value) {
-        NativeArrayUtils.fill(NativeArray.wrap(array), begin, end, value);
-    }
-    
-    public static <A> A reverse(A array, int begin, int end){
-        NativeArrayUtils.reverse(NativeArray.wrap(array), begin, end);
-        return array;
-    }
-
-    /**
-     * Reverses the order of the elements in the specified array.
-     *
-     * @param array the array to be reversed.
-     * @return <code>a</code>.
-     */
-    public static <A> A reverse(A array) {
-        NativeArrayUtils.reverse(NativeArray.wrap(array));
-        return array;
-    }
-    
-    /**
-     * Returns true if the two arrays are elementwise equal.
-     * @param array1 an array.
-     * @param array2 another array.
-     * @return true if the two arrays are of the same length, and their elements
-     * are equal.
-     */
-    public static <A> boolean equals(A array1, A array2) {
-        return NativeArrayUtils.equals(NativeArray.wrap(array1), NativeArray.wrap(array2));
-    }
-    
-    public static <A,T> A head(A array, int index) {
-        return NativeArrayUtils.head(NativeArray.wrap(array), index).$array();
-    }
-
-    public static <A,T> A head(A array, T value, Comparator<? super T> cmp) {
-        return NativeArrayUtils.head(NativeArray.wrap(array), value, cmp).$array();
-    }
-    
-    public static <A,T> A tail(A array, int index) {
-        return NativeArrayUtils.tail(NativeArray.wrap(array), index).$array();
-    }
-    
-    public static <A,T> A tail(A array, T value, Comparator<? super T> cmp) {
-        return NativeArrayUtils.tail(NativeArray.wrap(array), value, cmp).$array();
-    }
-   
-    public static <A,T> A slice(A values, T begin, T end, Comparator<? super T> cmp) {
-        return NativeArrayUtils.slice(NativeArray.wrap(values), begin, end, cmp).$array();
-    }
-    
-    public static <A> A slice(A array, int begin, int end) {
-        return NativeArrayUtils.slice(NativeArray.wrap(array), begin, end).$array();
-    }
-    
-    public static <A> A rotate(A array, int offset) {
-        return NativeArrayUtils.rotate(NativeArray.wrap(array), offset).$array();
-    }
-    
-    public static <A> A shuffle(Random random, A array) {
-        return NativeArrayUtils.shuffle(random, NativeArray.wrap(array)).$array();
-    }
-    
-    public static <A> int size(A array) {
-        return null == array ? 0 : Array.getLength(array);
-    }
-    
-    @SuppressWarnings("SuspiciousSystemArraycopy")
-    public static <A> A copy(A src, int srcpos, A dst, int dstpos, int size) {
-        System.arraycopy(src, srcpos, dst, dstpos, size);
-        return dst;
-    }
-    
-    public static <A> A copy(A array) {
-        if(null == array) {
-            return null;
-        }
-        int n = Array.getLength(array);
-        return copy(array, 0, ArrayAllocator.forPrototype(array, n), 0, n);
-    }
-    
-    public static <A> A concat(A a, A b) {
-        return NativeArrayUtils.concat(NativeArray.wrap(a), NativeArray.wrap(b)).$array();
-    }
-    
-    public static <A> A append(A a, Object value) {
-        return NativeArrayUtils.append(NativeArray.wrap(a), value).$array();
-    }
-
-    public static <A> A prepend(A a, Object value) {
-        return NativeArrayUtils.prepend(NativeArray.wrap(a), value).$array();
-    }
-
-    /**
-     * Removes first element from array and moves all elements to the left.
-     * Note that last element in array will be duplicated.
-     * @param a
-     * @param <A>
-     * @return
-     */
-    public static <A,T> T shift(A a) {
-        return NativeArrayUtils.shift(NativeArray.wrap(a));
-    }
-
-    /**
-     * Removes last element from array and moves all elements to the right.
-     * Note that first element in array will be duplicated.
-     * @param a
-     * @param <A>
-     * @return
-     */
-    public static <A,T> T unshift(A a) {
-        return NativeArrayUtils.unshift(NativeArray.wrap(a));
-    }
-
-    public static <A,T> ListIterator<T> iterator(A array) {
-        return NativeArrayUtils.iterator(NativeArray.wrap(array));
-    }
-
-    public static <A,T> ListIterator<T> iterator(A array, int begin, int end) {
-        return NativeArrayUtils.iterator(NativeArray.wrap(array), begin, end);
-    }
-    
-    public static <A,T> boolean equals(A a, A b, BiPredicate<T,T> predicate) {
-        return NativeArrayUtils.equals(NativeArray.wrap(a), NativeArray.wrap(b), predicate);
-    }
-    
-    public static <A,T> int compare(A a, A b) {
-        return NativeArrayUtils.compare(NativeArray.wrap(a), NativeArray.wrap(b));
-    }
-    
-    public static <A,T> int compare(A a, A b, Comparator<T> cmp) {
-        return NativeArrayUtils.compare(NativeArray.wrap(a), NativeArray.wrap(b), cmp);
-    }
-}
+/*
+ * @author Ranides Atterwim <ranides@gmail.com>
+ * @copyright Ranides Atterwim
+ * @license WTFPL
+ * @url http://ranides.net/projects/assira
+ */
+package net.ranides.assira.collection.arrays;
+
+import java.lang.reflect.Array;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.ListIterator;
+import java.util.Random;
+import java.util.function.BiPredicate;
+import net.ranides.assira.collection.iterators.IntIterator;
+
+@SuppressWarnings({
+    "PMD.AvoidReassigningParameters"
+})
+public final class ArrayUtils {
+
+    private ArrayUtils() {
+        // utility class
+    }
+    
+    /**
+     * Unwraps an iterator into an array starting at a given offset for a given
+     * number of elements.
+     *
+     * <P>This method iterates over the given type-specific iterator and stores
+     * the elements returned, up to a maximum of
+     * <code>length</code>, in the given array starting at
+     * <code>offset</code>. The number of actually unwrapped elements is
+     * returned (it may be less than
+     * <code>max</code> if the iterator emits less than
+     * <code>max</code> elements).
+     *
+     * @param iterator a type-specific iterator.
+     * @param target an array to contain the output of the iterator.
+     * @param begin the first element of the array to be returned.
+     * @param end the maximum number of elements to collect.
+     * @return the number of elements unwrapped.
+     */
+    public static <A,T> int collect(Iterator<? extends T> iterator, A target, int begin, int end) {
+        if($isint(target)) {
+            return $collect(IntIterator.$wrap(iterator), (int[])target, begin, end);
+        } else {
+            return NativeArrayUtils.collect(iterator, NativeArray.wrap(target), begin, end);
+        }
+    }
+
+    private static <A> boolean $isint(A array) {
+        return null!=array && int[].class.equals(array.getClass());
+    }
+    
+    /**
+     * Unwraps an iterator into an array.
+     *
+     * <P>This method iterates over the given type-specific iterator and stores
+     * the elements returned in the given array. The iteration will stop when
+     * the iterator has no more elements or when the end of the array has been
+     * reached.
+     *
+     * @param iterator a type-specific iterator.
+     * @param target an array to contain the output of the iterator.
+     * @return the number of elements unwrapped.
+     */
+    public static <A,T> int collect(Iterator<? extends T> iterator, A target) {
+        if($isint(target)) {
+            int[] array = (int[])target;
+            return $collect(IntIterator.$wrap(iterator), array, 0, array.length);
+        } else {
+            return NativeArrayUtils.collect(iterator, NativeArray.wrap(target));
+        }
+    }
+    
+    static int $collect(IntIterator iterator, int target[], int begin, int end) {
+        NativeArrayAllocator.ensureFromTo(target.length, begin, end);
+        int j = end;
+        while (j-- != 0 && iterator.hasNext()) {
+            target[begin++] = iterator.nextInt();
+        }
+        return end - j - 1;
+    }
+        
+    /**
+     * Fills the given array with the given value.
+     *
+     * <P>This method uses a backward loop. It is significantly faster than the
+     * corresponding method in {@link java.util.Arrays}.
+     *
+     * @param array an array.
+     * @param value the new value for all elements of the array.
+     */
+    public static <A,T> void fill(A array, T value) {
+        NativeArrayUtils.fill(NativeArray.wrap(array), value);
+    }
+
+    /**
+     * Fills a portion of the given array with the given value.
+     *
+     * <P>If possible (i.e.,
+     * <code>from</code> is 0) this method uses a backward loop. In this case,
+     * it is significantly faster than the corresponding method in
+     * {@link java.util.Arrays}.
+     *
+     * @param array an array.
+     * @param begin the starting index of the portion to fill (inclusive).
+     * @param end the end index of the portion to fill (exclusive).
+     * @param value the new value for all elements of the specified portion of
+     * the array.
+     */
+    public static <A,T> void fill(A array, int begin, int end, T value) {
+        NativeArrayUtils.fill(NativeArray.wrap(array), begin, end, value);
+    }
+    
+    public static <A> A reverse(A array, int begin, int end){
+        NativeArrayUtils.reverse(NativeArray.wrap(array), begin, end);
+        return array;
+    }
+
+    /**
+     * Reverses the order of the elements in the specified array.
+     *
+     * @param array the array to be reversed.
+     * @return <code>a</code>.
+     */
+    public static <A> A reverse(A array) {
+        NativeArrayUtils.reverse(NativeArray.wrap(array));
+        return array;
+    }
+    
+    /**
+     * Returns true if the two arrays are elementwise equal.
+     * @param array1 an array.
+     * @param array2 another array.
+     * @return true if the two arrays are of the same length, and their elements
+     * are equal.
+     */
+    public static <A> boolean equals(A array1, A array2) {
+        return NativeArrayUtils.equals(NativeArray.wrap(array1), NativeArray.wrap(array2));
+    }
+    
+    public static <A,T> A head(A array, int index) {
+        return NativeArrayUtils.head(NativeArray.wrap(array), index).$array();
+    }
+
+    public static <A,T> A head(A array, T value, Comparator<? super T> cmp) {
+        return NativeArrayUtils.head(NativeArray.wrap(array), value, cmp).$array();
+    }
+    
+    public static <A,T> A tail(A array, int index) {
+        return NativeArrayUtils.tail(NativeArray.wrap(array), index).$array();
+    }
+    
+    public static <A,T> A tail(A array, T value, Comparator<? super T> cmp) {
+        return NativeArrayUtils.tail(NativeArray.wrap(array), value, cmp).$array();
+    }
+   
+    public static <A,T> A slice(A values, T begin, T end, Comparator<? super T> cmp) {
+        return NativeArrayUtils.slice(NativeArray.wrap(values), begin, end, cmp).$array();
+    }
+    
+    public static <A> A slice(A array, int begin, int end) {
+        return NativeArrayUtils.slice(NativeArray.wrap(array), begin, end).$array();
+    }
+    
+    public static <A> A rotate(A array, int offset) {
+        return NativeArrayUtils.rotate(NativeArray.wrap(array), offset).$array();
+    }
+    
+    public static <A> A shuffle(Random random, A array) {
+        return NativeArrayUtils.shuffle(random, NativeArray.wrap(array)).$array();
+    }
+    
+    public static <A> int size(A array) {
+        return null == array ? 0 : Array.getLength(array);
+    }
+    
+    @SuppressWarnings("SuspiciousSystemArraycopy")
+    public static <A> A copy(A src, int srcpos, A dst, int dstpos, int size) {
+        System.arraycopy(src, srcpos, dst, dstpos, size);
+        return dst;
+    }
+    
+    public static <A> A copy(A array) {
+        if(null == array) {
+            return null;
+        }
+        int n = Array.getLength(array);
+        return copy(array, 0, ArrayAllocator.forPrototype(array, n), 0, n);
+    }
+    
+    public static <A> A concat(A a, A b) {
+        return NativeArrayUtils.concat(NativeArray.wrap(a), NativeArray.wrap(b)).$array();
+    }
+    
+    public static <A> A append(A a, Object value) {
+        return NativeArrayUtils.append(NativeArray.wrap(a), value).$array();
+    }
+
+    public static <A> A prepend(A a, Object value) {
+        return NativeArrayUtils.prepend(NativeArray.wrap(a), value).$array();
+    }
+
+    /**
+     * Removes first element from array and moves all elements to the left.
+     * Note that last element in array will be duplicated.
+     * @param a
+     * @param <A>
+     * @return
+     */
+    public static <A,T> T shift(A a) {
+        return NativeArrayUtils.shift(NativeArray.wrap(a));
+    }
+
+    /**
+     * Removes last element from array and moves all elements to the right.
+     * Note that first element in array will be duplicated.
+     * @param a
+     * @param <A>
+     * @return
+     */
+    public static <A,T> T unshift(A a) {
+        return NativeArrayUtils.unshift(NativeArray.wrap(a));
+    }
+
+    public static <A,T> ListIterator<T> iterator(A array) {
+        return NativeArrayUtils.iterator(NativeArray.wrap(array));
+    }
+
+    public static <A,T> ListIterator<T> iterator(A array, int begin, int end) {
+        return NativeArrayUtils.iterator(NativeArray.wrap(array), begin, end);
+    }
+    
+    public static <A,T> boolean equals(A a, A b, BiPredicate<T,T> predicate) {
+        return NativeArrayUtils.equals(NativeArray.wrap(a), NativeArray.wrap(b), predicate);
+    }
+    
+    public static <A,T> int compare(A a, A b) {
+        return NativeArrayUtils.compare(NativeArray.wrap(a), NativeArray.wrap(b));
+    }
+    
+    public static <A,T> int compare(A a, A b, Comparator<T> cmp) {
+        return NativeArrayUtils.compare(NativeArray.wrap(a), NativeArray.wrap(b), cmp);
+    }
+}

assira/src/main/java/net/ranides/assira/collection/arrays/IntArraySort.java → assira.core/src/main/java/net/ranides/assira/collection/arrays/IntArraySort.java


assira/src/main/java/net/ranides/assira/collection/arrays/IntArrays.java → assira.core/src/main/java/net/ranides/assira/collection/arrays/IntArrays.java


assira/src/main/java/net/ranides/assira/collection/arrays/NativeArray.java → assira.core/src/main/java/net/ranides/assira/collection/arrays/NativeArray.java


assira/src/main/java/net/ranides/assira/collection/arrays/NativeArrayAccess.java → assira.core/src/main/java/net/ranides/assira/collection/arrays/NativeArrayAccess.java


assira/src/main/java/net/ranides/assira/collection/arrays/NativeArrayAllocator.java → assira.core/src/main/java/net/ranides/assira/collection/arrays/NativeArrayAllocator.java


assira/src/main/java/net/ranides/assira/collection/arrays/NativeArraySearch.java → assira.core/src/main/java/net/ranides/assira/collection/arrays/NativeArraySearch.java


assira/src/main/java/net/ranides/assira/collection/arrays/NativeArraySort.java → assira.core/src/main/java/net/ranides/assira/collection/arrays/NativeArraySort.java


+ 292 - 292
assira/src/main/java/net/ranides/assira/collection/arrays/NativeArrayUtils.java

@@ -1,292 +1,292 @@
-/*
- * @author Ranides Atterwim <ranides@gmail.com>
- * @copyright Ranides Atterwim
- * @license WTFPL
- * @url http://ranides.net/projects/assira
- */
-package net.ranides.assira.collection.arrays;
-
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.ListIterator;
-import java.util.Random;
-import java.util.function.BiPredicate;
-import net.ranides.assira.collection.IntComparator;
-import net.ranides.assira.collection.Swapper;
-import net.ranides.assira.collection.arrays.NativeArray.NativeComparator;
-import net.ranides.assira.collection.iterators.RandomAccessIterator;
-import net.ranides.assira.generic.CompareUtils;
-
-@SuppressWarnings({
-    "PMD.AvoidReassigningParameters"
-})
-public final class NativeArrayUtils {
-
-    private NativeArrayUtils() {
-        // utility class
-    }
-    
-    public static <T> int collect(Iterator<? extends T> iterator, NativeArray target, int begin, int end) {
-        NativeArrayAllocator.ensureFromTo(target, begin, end);
-        int j = end;
-        while (j-- != 0 && iterator.hasNext()) {
-            target.set(begin++, iterator.next());
-        }
-        return end - j - 1;
-    }
-
-    public static <T> int collect(Iterator<? extends T> iterator, NativeArray target) {
-        return collect(iterator, target, 0, target.size());
-    }
-
-    /**
-     * Fills the given array with the given value.
-     *
-     * <P>This method uses a backward loop. It is significantly faster than the
-     * corresponding method in {@link java.util.Arrays}.
-     *
-     * @param array an array.
-     * @param value the new value for all elements of the array.
-     */
-    public static <T> void fill(NativeArray array, T value) {
-        array.set(0, array.size(), value);
-    }
-
-    public static <T> void fill(NativeArray array, int begin, int end, T value) {
-        NativeArrayAllocator.ensureFromTo(array, begin, end);
-        array.set(begin, end, value);
-    }
-    
-    public static <S extends Swapper> S reverse(S swapper, int begin, int end){
-        while(begin < --end){
-            swapper.swap(begin++, end);
-        }
-        return swapper;
-    }
-
-    public static <S extends Swapper> S reverse(S swapper, int size) {
-        return reverse(swapper, 0, size);
-    }
-    
-    public static NativeArray reverse(NativeArray array) {
-        reverse(array, array.size());
-        return array;
-    }
-    
-    public static boolean equals(NativeArray array1, NativeArray array2) {
-        return array1.equals(array2);
-    }
-    
-    public static <T> NativeArray head(NativeArray values, int index) {
-        return slice(values, 0, index);
-    }
-
-    public static <T> NativeArray head(NativeArray values, T value, Comparator<? super T> cmp) {
-        return slice(values, 0, ifind(values, value, 0, cmp));
-    }
-    
-    public static <T> NativeArray tail(NativeArray values, int index) {
-        return slice(values, index, values.size());
-    }
-    
-    public static <T> NativeArray tail(NativeArray values, T value, Comparator<? super T> cmp) {
-        return slice(values, ifind(values, value, 0, cmp), values.size());
-    }
-    
-    public static <T> NativeArray slice(NativeArray values, T begin, T end, Comparator<? super T> cmp) {
-        int bi = ifind(values, begin, 0, cmp);
-        int ei = ifind(values, end, bi, cmp);
-        return slice(values, bi, ei);
-    }
-
-    public static NativeArray slice(NativeArray values, int begin, int end) {
-        int size = end - begin;
-        NativeArray result = values.allocate(size);
-        NativeArrayUtils.copy(values, begin, result, 0, size);
-        return result;
-    }
-    
-    public static NativeArray rotate(NativeArray array, int offset) {
-        int n = array.size();
-        offset = offset % n;
-        if( offset > 0) {
-            int a = n - offset; 
-            reverse(array, 0, a);
-            reverse(array, a, n);
-            reverse(array, 0, n);
-        } 
-        else if( offset < 0) {
-            rotate(array, offset+n);
-        }
-        return array;
-    }
-    
-    private static <T> int ifind(NativeArray values, T value, int begin, Comparator<? super T> cmp) {
-        NativeComparator icmp = values.rcmp(value, cmp);
-        int i = begin, n = values.size();
-        while(i<n && icmp.compare(i) < 0) {
-            i++;
-        }
-        return i;
-    }
-    
-    public static NativeArray shuffle(Random random, NativeArray array) {
-        shuffle(random, array.size(), array);
-        return array;
-    }
-    
-    public static void shuffle(Random random, int size, Swapper swapper) {
-        for(int i=size; i>1; i--) {
-            swapper.swap(i-1, random.nextInt(i));
-        }
-    }
-
-    public static int size(NativeArray array) {
-        return array.size();
-    }
-    
-    @SuppressWarnings("SuspiciousSystemArraycopy")
-    public static <T> NativeArray copy(NativeArray src, int srcpos, NativeArray dst, int dstpos, int size) {
-        System.arraycopy(src.array(), srcpos, dst.array(), dstpos, size);
-        return dst;
-    }
-    
-    public static NativeArray copy(NativeArray array) {
-        int n = array.size();
-        return copy(array, 0, NativeArrayAllocator.forPrototype(array, n), 0, n);
-    }
-    
-    public static NativeArray concat(NativeArray a, NativeArray b) {
-        int as = a.size();
-        int bs = b.size();
-        NativeArray result = a.allocate(as+bs);
-        copy(a, 0, result, 0, as);
-        copy(b, 0, result, as, bs);
-        return result;
-    }
-    
-    public static NativeArray append(NativeArray a, Object value) {
-        int as = a.size();
-        NativeArray result = a.allocate(as + 1);
-        copy(a, 0, result, 0, as);
-        result.set(as, value);
-        return result;
-    }
-    
-    public static NativeArray prepend(NativeArray a, Object value) {
-        int as = a.size();
-        NativeArray result = a.allocate(as + 1);
-        copy(a, 0, result, 1, as);
-        result.set(0, value);
-        return result;
-    }
-
-    /**
-     * Removes first element from array and moves all elements to the left.
-     * Note that last element in array will be duplicated.
-     * @param a
-     * @return removed value
-     */
-    @SuppressWarnings("unchecked")
-    public static <T> T shift(NativeArray a) {
-        int n = a.size();
-        if(n == 0) {
-            return null;
-        }
-        Object value = a.get(0);
-        for(int i=1; i<n; i++) {
-            a.move(i-1, i);
-        }
-        return (T)value;
-    }
-
-    /**
-     * Removes last element from array and moves all elements to the right.
-     * Note that first element in array will be duplicated.
-     * @param a
-     * @return
-     */
-    @SuppressWarnings("unchecked")
-    public static <T> T unshift(NativeArray a) {
-        int n = a.size();
-        if(n == 0) {
-            return null;
-        }
-        Object value = a.get(n-1);
-        for(int i=n-1; i>0; i--) {
-            a.move(i, i-1);
-        }
-        return (T)value;
-    }
-    
-    public static <T> ListIterator<T> iterator(NativeArray array) {
-        return iterator(array, 0, array.size());
-    }
-
-    @SuppressWarnings("unchecked")
-    public static <T> ListIterator<T> iterator(NativeArray array, int begin, int end) {
-        return new RandomAccessIterator<T>() {
-            @Override
-            protected int size() {
-                return end-begin;
-            }
-
-            @Override
-            protected T get(int index) {
-                return (T)array.get(begin+index);
-            }
-
-            @Override
-            protected void set(int index, T value) {
-                array.set(begin+index, value);
-            }
-            
-        };
-    }
-    
-    public static <T> boolean equals(NativeArray a, NativeArray b, Comparator<? super T> cmp) {
-        if(a.size() != b.size()) {
-            return false;
-        }
-        IntComparator icmp = a.comparator(b, cmp);
-        for(int i=0, n=a.size(); i<n; i++) {
-            if( 0 != icmp.compare(i,i)) {
-                return false;
-            }
-        }
-        return true;
-    }
-    
-    public static <T> boolean equals(NativeArray a, NativeArray b, BiPredicate<? super T,? super T> predicate) {
-        if(a.size() != b.size()) {
-            return false;
-        }
-        Comparator<T> vcmp = (av,bv) -> predicate.test(av, bv) ? 0 : -1;
-        IntComparator icmp = a.comparator(b, vcmp);
-        for(int i=0, n=a.size(); i<n; i++) {
-            if( 0 != icmp.compare(i,i)) {
-                return false;
-            }
-        }
-        return true;
-    }
-    
-    public static <T> int compare(NativeArray a, NativeArray b) {
-        return icompare(a.size(), b.size(), a.comparator(b));
-    }
-    
-    public static <T> int compare(NativeArray a, NativeArray b, Comparator<? super T> cmp) {
-        return icompare(a.size(), b.size(), a.comparator(b, cmp));
-    }
-    
-    private static <T> int icompare(int a, int b, IntComparator cmp) {
-        for(int i=0, n=Math.min(a,b); i<n; i++) {
-            int ic = cmp.compare(i,i);
-            if(ic != 0) {
-                return ic;
-            }
-        }
-        return CompareUtils.cmp(a,b);
-    }
-    
-}
+/*
+ * @author Ranides Atterwim <ranides@gmail.com>
+ * @copyright Ranides Atterwim
+ * @license WTFPL
+ * @url http://ranides.net/projects/assira
+ */
+package net.ranides.assira.collection.arrays;
+
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.ListIterator;
+import java.util.Random;
+import java.util.function.BiPredicate;
+import net.ranides.assira.collection.IntComparator;
+import net.ranides.assira.collection.Swapper;
+import net.ranides.assira.collection.arrays.NativeArray.NativeComparator;
+import net.ranides.assira.collection.iterators.RandomAccessIterator;
+import net.ranides.assira.generic.CompareUtils;
+
+@SuppressWarnings({
+    "PMD.AvoidReassigningParameters"
+})
+public final class NativeArrayUtils {
+
+    private NativeArrayUtils() {
+        // utility class
+    }
+    
+    public static <T> int collect(Iterator<? extends T> iterator, NativeArray target, int begin, int end) {
+        NativeArrayAllocator.ensureFromTo(target, begin, end);
+        int j = end;
+        while (j-- != 0 && iterator.hasNext()) {
+            target.set(begin++, iterator.next());
+        }
+        return end - j - 1;
+    }
+
+    public static <T> int collect(Iterator<? extends T> iterator, NativeArray target) {
+        return collect(iterator, target, 0, target.size());
+    }
+
+    /**
+     * Fills the given array with the given value.
+     *
+     * <P>This method uses a backward loop. It is significantly faster than the
+     * corresponding method in {@link java.util.Arrays}.
+     *
+     * @param array an array.
+     * @param value the new value for all elements of the array.
+     */
+    public static <T> void fill(NativeArray array, T value) {
+        array.set(0, array.size(), value);
+    }
+
+    public static <T> void fill(NativeArray array, int begin, int end, T value) {
+        NativeArrayAllocator.ensureFromTo(array, begin, end);
+        array.set(begin, end, value);
+    }
+    
+    public static <S extends Swapper> S reverse(S swapper, int begin, int end){
+        while(begin < --end){
+            swapper.swap(begin++, end);
+        }
+        return swapper;
+    }
+
+    public static <S extends Swapper> S reverse(S swapper, int size) {
+        return reverse(swapper, 0, size);
+    }
+    
+    public static NativeArray reverse(NativeArray array) {
+        reverse(array, array.size());
+        return array;
+    }
+    
+    public static boolean equals(NativeArray array1, NativeArray array2) {
+        return array1.equals(array2);
+    }
+    
+    public static <T> NativeArray head(NativeArray values, int index) {
+        return slice(values, 0, index);
+    }
+
+    public static <T> NativeArray head(NativeArray values, T value, Comparator<? super T> cmp) {
+        return slice(values, 0, ifind(values, value, 0, cmp));
+    }
+    
+    public static <T> NativeArray tail(NativeArray values, int index) {
+        return slice(values, index, values.size());
+    }
+    
+    public static <T> NativeArray tail(NativeArray values, T value, Comparator<? super T> cmp) {
+        return slice(values, ifind(values, value, 0, cmp), values.size());
+    }
+    
+    public static <T> NativeArray slice(NativeArray values, T begin, T end, Comparator<? super T> cmp) {
+        int bi = ifind(values, begin, 0, cmp);
+        int ei = ifind(values, end, bi, cmp);
+        return slice(values, bi, ei);
+    }
+
+    public static NativeArray slice(NativeArray values, int begin, int end) {
+        int size = end - begin;
+        NativeArray result = values.allocate(size);
+        NativeArrayUtils.copy(values, begin, result, 0, size);
+        return result;
+    }
+    
+    public static NativeArray rotate(NativeArray array, int offset) {
+        int n = array.size();
+        offset = offset % n;
+        if( offset > 0) {
+            int a = n - offset; 
+            reverse(array, 0, a);
+            reverse(array, a, n);
+            reverse(array, 0, n);
+        } 
+        else if( offset < 0) {
+            rotate(array, offset+n);
+        }
+        return array;
+    }
+    
+    private static <T> int ifind(NativeArray values, T value, int begin, Comparator<? super T> cmp) {
+        NativeComparator icmp = values.rcmp(value, cmp);
+        int i = begin, n = values.size();
+        while(i<n && icmp.compare(i) < 0) {
+            i++;
+        }
+        return i;
+    }
+    
+    public static NativeArray shuffle(Random random, NativeArray array) {
+        shuffle(random, array.size(), array);
+        return array;
+    }
+    
+    public static void shuffle(Random random, int size, Swapper swapper) {
+        for(int i=size; i>1; i--) {
+            swapper.swap(i-1, random.nextInt(i));
+        }
+    }
+
+    public static int size(NativeArray array) {
+        return array.size();
+    }
+    
+    @SuppressWarnings("SuspiciousSystemArraycopy")
+    public static <T> NativeArray copy(NativeArray src, int srcpos, NativeArray dst, int dstpos, int size) {
+        System.arraycopy(src.array(), srcpos, dst.array(), dstpos, size);
+        return dst;
+    }
+    
+    public static NativeArray copy(NativeArray array) {
+        int n = array.size();
+        return copy(array, 0, NativeArrayAllocator.forPrototype(array, n), 0, n);
+    }
+    
+    public static NativeArray concat(NativeArray a, NativeArray b) {
+        int as = a.size();
+        int bs = b.size();
+        NativeArray result = a.allocate(as+bs);
+        copy(a, 0, result, 0, as);
+        copy(b, 0, result, as, bs);
+        return result;
+    }
+    
+    public static NativeArray append(NativeArray a, Object value) {
+        int as = a.size();
+        NativeArray result = a.allocate(as + 1);
+        copy(a, 0, result, 0, as);
+        result.set(as, value);
+        return result;
+    }
+    
+    public static NativeArray prepend(NativeArray a, Object value) {
+        int as = a.size();
+        NativeArray result = a.allocate(as + 1);
+        copy(a, 0, result, 1, as);
+        result.set(0, value);
+        return result;
+    }
+
+    /**
+     * Removes first element from array and moves all elements to the left.
+     * Note that last element in array will be duplicated.
+     * @param a
+     * @return removed value
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T shift(NativeArray a) {
+        int n = a.size();
+        if(n == 0) {
+            return null;
+        }
+        Object value = a.get(0);
+        for(int i=1; i<n; i++) {
+            a.move(i-1, i);
+        }
+        return (T)value;
+    }
+
+    /**
+     * Removes last element from array and moves all elements to the right.
+     * Note that first element in array will be duplicated.
+     * @param a
+     * @return
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T unshift(NativeArray a) {
+        int n = a.size();
+        if(n == 0) {
+            return null;
+        }
+        Object value = a.get(n-1);
+        for(int i=n-1; i>0; i--) {
+            a.move(i, i-1);
+        }
+        return (T)value;
+    }
+    
+    public static <T> ListIterator<T> iterator(NativeArray array) {
+        return iterator(array, 0, array.size());
+    }
+
+    @SuppressWarnings("unchecked")
+    public static <T> ListIterator<T> iterator(NativeArray array, int begin, int end) {
+        return new RandomAccessIterator<T>() {
+            @Override
+            protected int size() {
+                return end-begin;
+            }
+
+            @Override
+            protected T get(int index) {
+                return (T)array.get(begin+index);
+            }
+
+            @Override
+            protected void set(int index, T value) {
+                array.set(begin+index, value);
+            }
+            
+        };
+    }
+    
+    public static <T> boolean equals(NativeArray a, NativeArray b, Comparator<? super T> cmp) {
+        if(a.size() != b.size()) {
+            return false;
+        }
+        IntComparator icmp = a.comparator(b, cmp);
+        for(int i=0, n=a.size(); i<n; i++) {
+            if( 0 != icmp.compare(i,i)) {
+                return false;
+            }
+        }
+        return true;
+    }
+    
+    public static <T> boolean equals(NativeArray a, NativeArray b, BiPredicate<? super T,? super T> predicate) {
+        if(a.size() != b.size()) {
+            return false;
+        }
+        Comparator<T> vcmp = (av,bv) -> predicate.test(av, bv) ? 0 : -1;
+        IntComparator icmp = a.comparator(b, vcmp);
+        for(int i=0, n=a.size(); i<n; i++) {
+            if( 0 != icmp.compare(i,i)) {
+                return false;
+            }
+        }
+        return true;
+    }
+    
+    public static <T> int compare(NativeArray a, NativeArray b) {
+        return icompare(a.size(), b.size(), a.comparator(b));
+    }
+    
+    public static <T> int compare(NativeArray a, NativeArray b, Comparator<? super T> cmp) {
+        return icompare(a.size(), b.size(), a.comparator(b, cmp));
+    }
+    
+    private static <T> int icompare(int a, int b, IntComparator cmp) {
+        for(int i=0, n=Math.min(a,b); i<n; i++) {
+            int ic = cmp.compare(i,i);
+            if(ic != 0) {
+                return ic;
+            }
+        }
+        return CompareUtils.cmp(a,b);
+    }
+    
+}

assira/src/main/java/net/ranides/assira/collection/iterators/AListIterator.java → assira.core/src/main/java/net/ranides/assira/collection/iterators/AListIterator.java


assira/src/main/java/net/ranides/assira/collection/iterators/EnumerationUtils.java → assira.core/src/main/java/net/ranides/assira/collection/iterators/EnumerationUtils.java


assira/src/main/java/net/ranides/assira/collection/iterators/FetchIterator.java → assira.core/src/main/java/net/ranides/assira/collection/iterators/FetchIterator.java


assira/src/main/java/net/ranides/assira/collection/iterators/ForwardIterator.java → assira.core/src/main/java/net/ranides/assira/collection/iterators/ForwardIterator.java


assira/src/main/java/net/ranides/assira/collection/iterators/ForwardSpliterator.java → assira.core/src/main/java/net/ranides/assira/collection/iterators/ForwardSpliterator.java


assira/src/main/java/net/ranides/assira/collection/iterators/IntIterator.java → assira.core/src/main/java/net/ranides/assira/collection/iterators/IntIterator.java


assira/src/main/java/net/ranides/assira/collection/iterators/IntIteratorUtils.java → assira.core/src/main/java/net/ranides/assira/collection/iterators/IntIteratorUtils.java


assira/src/main/java/net/ranides/assira/collection/iterators/IntListIterator.java → assira.core/src/main/java/net/ranides/assira/collection/iterators/IntListIterator.java


assira/src/main/java/net/ranides/assira/collection/iterators/IteratorUtils.java → assira.core/src/main/java/net/ranides/assira/collection/iterators/IteratorUtils.java


assira/src/main/java/net/ranides/assira/collection/iterators/RandomAccessIntIterator.java → assira.core/src/main/java/net/ranides/assira/collection/iterators/RandomAccessIntIterator.java


assira/src/main/java/net/ranides/assira/collection/iterators/RandomAccessIterator.java → assira.core/src/main/java/net/ranides/assira/collection/iterators/RandomAccessIterator.java


assira/src/main/java/net/ranides/assira/collection/iterators/RemoveIterator.java → assira.core/src/main/java/net/ranides/assira/collection/iterators/RemoveIterator.java


assira/src/main/java/net/ranides/assira/collection/lists/AIntList.java → assira.core/src/main/java/net/ranides/assira/collection/lists/AIntList.java


assira/src/main/java/net/ranides/assira/collection/lists/FlatList.java → assira.core/src/main/java/net/ranides/assira/collection/lists/FlatList.java


assira/src/main/java/net/ranides/assira/collection/lists/ImmutableList.java → assira.core/src/main/java/net/ranides/assira/collection/lists/ImmutableList.java


assira/src/main/java/net/ranides/assira/collection/lists/IntArrayList.java → assira.core/src/main/java/net/ranides/assira/collection/lists/IntArrayList.java


assira/src/main/java/net/ranides/assira/collection/lists/IntList.java → assira.core/src/main/java/net/ranides/assira/collection/lists/IntList.java


assira/src/main/java/net/ranides/assira/collection/lists/IntListGenerator.java → assira.core/src/main/java/net/ranides/assira/collection/lists/IntListGenerator.java


assira/src/main/java/net/ranides/assira/collection/lists/IntListUtils.java → assira.core/src/main/java/net/ranides/assira/collection/lists/IntListUtils.java


assira/src/main/java/net/ranides/assira/collection/lists/IntRTList.java → assira.core/src/main/java/net/ranides/assira/collection/lists/IntRTList.java


assira/src/main/java/net/ranides/assira/collection/lists/IntRange.java → assira.core/src/main/java/net/ranides/assira/collection/lists/IntRange.java


assira/src/main/java/net/ranides/assira/collection/lists/IntVirtualList.java → assira.core/src/main/java/net/ranides/assira/collection/lists/IntVirtualList.java


assira/src/main/java/net/ranides/assira/collection/lists/ListUtils.java → assira.core/src/main/java/net/ranides/assira/collection/lists/ListUtils.java


assira/src/main/java/net/ranides/assira/collection/lists/NativeArrayList.java → assira.core/src/main/java/net/ranides/assira/collection/lists/NativeArrayList.java


assira/src/main/java/net/ranides/assira/collection/lists/RTList.java → assira.core/src/main/java/net/ranides/assira/collection/lists/RTList.java


assira/src/main/java/net/ranides/assira/collection/lists/ReversedList.java → assira.core/src/main/java/net/ranides/assira/collection/lists/ReversedList.java


assira/src/main/java/net/ranides/assira/collection/lists/VirtualList.java → assira.core/src/main/java/net/ranides/assira/collection/lists/VirtualList.java


assira/src/main/java/net/ranides/assira/collection/lookups/AHashLookup.java → assira.core/src/main/java/net/ranides/assira/collection/lookups/AHashLookup.java


assira/src/main/java/net/ranides/assira/collection/lookups/ALookup.java → assira.core/src/main/java/net/ranides/assira/collection/lookups/ALookup.java


assira/src/main/java/net/ranides/assira/collection/lookups/ALookupEntry.java → assira.core/src/main/java/net/ranides/assira/collection/lookups/ALookupEntry.java


assira/src/main/java/net/ranides/assira/collection/lookups/ASortedLookup.java → assira.core/src/main/java/net/ranides/assira/collection/lookups/ASortedLookup.java


assira/src/main/java/net/ranides/assira/collection/lookups/AVLTreeLookup.java → assira.core/src/main/java/net/ranides/assira/collection/lookups/AVLTreeLookup.java


assira/src/main/java/net/ranides/assira/collection/lookups/CustomLookup.java → assira.core/src/main/java/net/ranides/assira/collection/lookups/CustomLookup.java


assira/src/main/java/net/ranides/assira/collection/lookups/HashLookup.java → assira.core/src/main/java/net/ranides/assira/collection/lookups/HashLookup.java


assira/src/main/java/net/ranides/assira/collection/lookups/IdentLookup.java → assira.core/src/main/java/net/ranides/assira/collection/lookups/IdentLookup.java


assira/src/main/java/net/ranides/assira/collection/lookups/LazyLookup.java → assira.core/src/main/java/net/ranides/assira/collection/lookups/LazyLookup.java


assira/src/main/java/net/ranides/assira/collection/lookups/Lookup.java → assira.core/src/main/java/net/ranides/assira/collection/lookups/Lookup.java


assira/src/main/java/net/ranides/assira/collection/lookups/LookupUtils.java → assira.core/src/main/java/net/ranides/assira/collection/lookups/LookupUtils.java


assira/src/main/java/net/ranides/assira/collection/lookups/RBTreeLookup.java → assira.core/src/main/java/net/ranides/assira/collection/lookups/RBTreeLookup.java


assira/src/main/java/net/ranides/assira/collection/lookups/SortedLookup.java → assira.core/src/main/java/net/ranides/assira/collection/lookups/SortedLookup.java


assira/src/main/java/net/ranides/assira/collection/maps/AAVLTreeMap.java → assira.core/src/main/java/net/ranides/assira/collection/maps/AAVLTreeMap.java


assira/src/main/java/net/ranides/assira/collection/maps/AEntry.java → assira.core/src/main/java/net/ranides/assira/collection/maps/AEntry.java


assira/src/main/java/net/ranides/assira/collection/maps/AHashMap.java → assira.core/src/main/java/net/ranides/assira/collection/maps/AHashMap.java


assira/src/main/java/net/ranides/assira/collection/maps/AIntAVLTreeMap.java → assira.core/src/main/java/net/ranides/assira/collection/maps/AIntAVLTreeMap.java


assira/src/main/java/net/ranides/assira/collection/maps/AIntEntry.java → assira.core/src/main/java/net/ranides/assira/collection/maps/AIntEntry.java


assira/src/main/java/net/ranides/assira/collection/maps/AIntHashMap.java → assira.core/src/main/java/net/ranides/assira/collection/maps/AIntHashMap.java


assira/src/main/java/net/ranides/assira/collection/maps/AIntMap.java → assira.core/src/main/java/net/ranides/assira/collection/maps/AIntMap.java


assira/src/main/java/net/ranides/assira/collection/maps/AIntRBTreeMap.java → assira.core/src/main/java/net/ranides/assira/collection/maps/AIntRBTreeMap.java


assira/src/main/java/net/ranides/assira/collection/maps/AIntSortedMap.java → assira.core/src/main/java/net/ranides/assira/collection/maps/AIntSortedMap.java


assira/src/main/java/net/ranides/assira/collection/maps/AMap.java → assira.core/src/main/java/net/ranides/assira/collection/maps/AMap.java


assira/src/main/java/net/ranides/assira/collection/maps/ARBTreeMap.java → assira.core/src/main/java/net/ranides/assira/collection/maps/ARBTreeMap.java


assira/src/main/java/net/ranides/assira/collection/maps/ASortedMap.java → assira.core/src/main/java/net/ranides/assira/collection/maps/ASortedMap.java


assira/src/main/java/net/ranides/assira/collection/maps/AVLTreeMap.java → assira.core/src/main/java/net/ranides/assira/collection/maps/AVLTreeMap.java


assira/src/main/java/net/ranides/assira/collection/maps/AVLTreeMultiMap.java → assira.core/src/main/java/net/ranides/assira/collection/maps/AVLTreeMultiMap.java


assira/src/main/java/net/ranides/assira/collection/maps/ArrayMap.java → assira.core/src/main/java/net/ranides/assira/collection/maps/ArrayMap.java


assira/src/main/java/net/ranides/assira/collection/maps/BlockMap.java → assira.core/src/main/java/net/ranides/assira/collection/maps/BlockMap.java


assira/src/main/java/net/ranides/assira/collection/maps/Cache.java → assira.core/src/main/java/net/ranides/assira/collection/maps/Cache.java


assira/src/main/java/net/ranides/assira/collection/maps/CacheMap.java → assira.core/src/main/java/net/ranides/assira/collection/maps/CacheMap.java


+ 0 - 0
assira/src/main/java/net/ranides/assira/collection/maps/CrossEnumMap.java


Some files were not shown because too many files changed in this diff