Ranides Atterwim 10 лет назад
Родитель
Сommit
e598767f42

+ 107 - 122
assira/pom.xml

@@ -31,159 +31,144 @@
 								
                                 <!--  klasy dostatecznie przetestowane -->
 								
-                                <exclude>net/ranides/assira/collection/AIntCollection.class</exclude>
                                 <exclude>net/ranides/assira/collection/ACollection.class</exclude>
-                                <exclude>net/ranides/assira/collection/IntComparator.class</exclude>
-                                <exclude>net/ranides/assira/collection/HashIntComparator.class</exclude>
-                                <exclude>net/ranides/assira/collection/HashIntComparator$*</exclude>
-                                <exclude>net/ranides/assira/collection/HashComparator.class</exclude>
+                                <exclude>net/ranides/assira/collection/AIntCollection.class</exclude>
                                 <exclude>net/ranides/assira/collection/HashComparator$*</exclude>
+                                <exclude>net/ranides/assira/collection/HashComparator.class</exclude>
+                                <exclude>net/ranides/assira/collection/HashIntComparator$*</exclude>
+                                <exclude>net/ranides/assira/collection/HashIntComparator.class</exclude>
+                                <exclude>net/ranides/assira/collection/IntComparator.class</exclude>
                                 
-                                <exclude>net/ranides/assira/collection/maps/AMap.class</exclude>
-                                <exclude>net/ranides/assira/collection/maps/AMap$*</exclude>
-                                <exclude>net/ranides/assira/collection/maps/IntMap.class</exclude>
-                                <exclude>net/ranides/assira/collection/maps/IntMap$*</exclude>
-                                <exclude>net/ranides/assira/collection/maps/AIntMap.class</exclude>
-                                <exclude>net/ranides/assira/collection/maps/AIntMap$*</exclude>
-
-                                <exclude>net/ranides/assira/collection/maps/ASortedMap.class</exclude>
-                                <exclude>net/ranides/assira/collection/maps/ASortedMap$*</exclude>
-                                <exclude>net/ranides/assira/collection/maps/AIntSortedMap.class</exclude>
-                                <exclude>net/ranides/assira/collection/maps/AIntSortedMap$*</exclude>
-
-                                <exclude>net/ranides/assira/collection/maps/AHashMap.class</exclude>
-                                <exclude>net/ranides/assira/collection/maps/AHashMap$*</exclude>
-                                <exclude>net/ranides/assira/collection/maps/HashMap.class</exclude>
-                                <exclude>net/ranides/assira/collection/maps/HashMap$*</exclude>
-                                <exclude>net/ranides/assira/collection/maps/AIntHashMap.class</exclude>
-                                <exclude>net/ranides/assira/collection/maps/AIntHashMap$*</exclude>
-                                <exclude>net/ranides/assira/collection/maps/IntHashMap.class</exclude>
-                                <exclude>net/ranides/assira/collection/maps/IntHashMap$*</exclude>
+<!--                                <exclude>net/ranides/assira/collection/arrays/ArrayAllocator.class</exclude>-->
+                                <exclude>net/ranides/assira/collection/arrays/ArraySort.class</exclude>
+                                <exclude>net/ranides/assira/collection/arrays/IntArraySort.class</exclude>
+<!--                                <exclude>net/ranides/assira/collection/arrays/NativeArray$*</exclude>-->
+<!--                                <exclude>net/ranides/assira/collection/arrays/NativeArray.class</exclude>-->
+<!--                                <exclude>net/ranides/assira/collection/arrays/NativeArrayAllocator.class</exclude>-->
+                                <exclude>net/ranides/assira/collection/arrays/NativeArraySort$*</exclude>
+                                <exclude>net/ranides/assira/collection/arrays/NativeArraySort.class</exclude>
                                 
-                                <exclude>net/ranides/assira/collection/maps/MultiMap.class</exclude>
-                                <exclude>net/ranides/assira/collection/maps/IntMultiMap.class</exclude>
-                                <exclude>net/ranides/assira/collection/maps/HashMultiMap.class</exclude>
-                                <exclude>net/ranides/assira/collection/maps/HashMultiMap$*</exclude>
-                                <exclude>net/ranides/assira/collection/maps/IntHashMultiMap.class</exclude>
-                                <exclude>net/ranides/assira/collection/maps/IntHashMultiMap$*</exclude>
-
-                                <exclude>net/ranides/assira/collection/maps/AVLTreeMap.class</exclude>
-                                <exclude>net/ranides/assira/collection/maps/AVLTreeMap$*</exclude>
-                                <exclude>net/ranides/assira/collection/maps/IntAVLTreeMap.class</exclude>
-                                <exclude>net/ranides/assira/collection/maps/IntAVLTreeMap$*</exclude>
-
-                                <exclude>net/ranides/assira/collection/maps/RBTreeMap.class</exclude>
-                                <exclude>net/ranides/assira/collection/maps/RBTreeMap$*</exclude>
-                                <exclude>net/ranides/assira/collection/maps/IntRBTreeMap.class</exclude>
-                                <exclude>net/ranides/assira/collection/maps/IntRBTreeMap$*</exclude>
-
-                                <exclude>net/ranides/assira/collection/maps/CustomMap.class</exclude>
-                                <exclude>net/ranides/assira/collection/maps/IdentMap.class</exclude>
-
-                                <exclude>net/ranides/assira/collection/sets/ASet.class</exclude>
-                                <exclude>net/ranides/assira/collection/sets/AIntSet.class</exclude>
-
-                                <exclude>net/ranides/assira/collection/sets/ASortedSet.class</exclude>
-                                <exclude>net/ranides/assira/collection/sets/ASortedSet$*</exclude>
-                                <exclude>net/ranides/assira/collection/sets/AIntSortedSet.class</exclude>
-                                <exclude>net/ranides/assira/collection/sets/AIntSortedSet$*</exclude>
-
-                                <exclude>net/ranides/assira/collection/sets/AHashSet.class</exclude>
-                                <exclude>net/ranides/assira/collection/sets/AHashSet$*</exclude>
-                                <exclude>net/ranides/assira/collection/sets/HashSet.class</exclude>
-                                <exclude>net/ranides/assira/collection/sets/IntHashSet.class</exclude>
-                                <exclude>net/ranides/assira/collection/sets/IntHashSet$*</exclude>
-
-                                <exclude>net/ranides/assira/collection/sets/AVLTreeSet.class</exclude>
-                                <exclude>net/ranides/assira/collection/sets/AVLTreeSet$*</exclude>
-                                <exclude>net/ranides/assira/collection/sets/IntAVLTreeSet.class</exclude>
-                                <exclude>net/ranides/assira/collection/sets/IntAVLTreeSet$*</exclude>
-
-                                <exclude>net/ranides/assira/collection/sets/RBTreeSet.class</exclude>
-                                <exclude>net/ranides/assira/collection/sets/RBTreeSet$*</exclude>
-                                <exclude>net/ranides/assira/collection/sets/IntRBTreeSet.class</exclude>
-                                <exclude>net/ranides/assira/collection/sets/IntRBTreeSet$*</exclude>
-
-                                <exclude>net/ranides/assira/collection/sets/CustomSet.class</exclude>
-                                <exclude>net/ranides/assira/collection/sets/IdentSet.class</exclude>
-                                <exclude>net/ranides/assira/collection/sets/AIdentSet.class</exclude>
                                 
-                                <exclude>net/ranides/assira/collection/lookups/Lookup.class</exclude>
-                                <exclude>net/ranides/assira/collection/lookups/Lookup$*</exclude>
-                                <exclude>net/ranides/assira/collection/lookups/ALookup.class</exclude>
-                                <exclude>net/ranides/assira/collection/lookups/ALookup$*</exclude>
-                                <exclude>net/ranides/assira/collection/lookups/ASortedLookup.class</exclude>
-                                <exclude>net/ranides/assira/collection/lookups/ASortedLookup$*</exclude>
+                                <exclude>net/ranides/assira/collection/lists/AIntList$*</exclude>
+                                <exclude>net/ranides/assira/collection/lists/AIntList.class</exclude>
+                                <exclude>net/ranides/assira/collection/lists/IntArrayList$*</exclude>
+                                <exclude>net/ranides/assira/collection/lists/IntArrayList.class</exclude>
+<!--                                <exclude>net/ranides/assira/collection/lists/IntRange$*</exclude>-->
+<!--                                <exclude>net/ranides/assira/collection/lists/IntRange.class</exclude>-->
+                                <exclude>net/ranides/assira/collection/lists/NativeArrayList$*</exclude>
+                                <exclude>net/ranides/assira/collection/lists/NativeArrayList.class</exclude>
                                 
-                                <exclude>net/ranides/assira/collection/lookups/AHashLookup.class</exclude>
                                 <exclude>net/ranides/assira/collection/lookups/AHashLookup$*</exclude>
-                                
-                                <exclude>net/ranides/assira/collection/lookups/AVLTreeLookup.class</exclude>
+                                <exclude>net/ranides/assira/collection/lookups/AHashLookup$*</exclude>
+                                <exclude>net/ranides/assira/collection/lookups/AHashLookup.class</exclude>
+                                <exclude>net/ranides/assira/collection/lookups/AHashLookup.class</exclude>
+                                <exclude>net/ranides/assira/collection/lookups/ALookup$*</exclude>
+                                <exclude>net/ranides/assira/collection/lookups/ALookup.class</exclude>
+                                <exclude>net/ranides/assira/collection/lookups/ASortedLookup$*</exclude>
+                                <exclude>net/ranides/assira/collection/lookups/ASortedLookup.class</exclude>
                                 <exclude>net/ranides/assira/collection/lookups/AVLTreeLookup$*</exclude>
-                                <exclude>net/ranides/assira/collection/lookups/RBTreeLookup.class</exclude>
-                                <exclude>net/ranides/assira/collection/lookups/RBTreeLookup$*</exclude>
-                                
+                                <exclude>net/ranides/assira/collection/lookups/AVLTreeLookup.class</exclude>
                                 <exclude>net/ranides/assira/collection/lookups/CustomLookup.class</exclude>
                                 <exclude>net/ranides/assira/collection/lookups/HashLookup.class</exclude>
                                 <exclude>net/ranides/assira/collection/lookups/IdentLookup.class</exclude>
+                                <exclude>net/ranides/assira/collection/lookups/Lookup$*</exclude>
+                                <exclude>net/ranides/assira/collection/lookups/Lookup.class</exclude>
+                                <exclude>net/ranides/assira/collection/lookups/RBTreeLookup$*</exclude>
+                                <exclude>net/ranides/assira/collection/lookups/RBTreeLookup.class</exclude>
                                 
-                                <exclude>net/ranides/assira/collection/lookups/AHashLookup.class</exclude>
-                                <exclude>net/ranides/assira/collection/lookups/AHashLookup$*</exclude>
-                                
-                                <exclude>net/ranides/assira/collection/arrays/NativeArray.class</exclude>
-                                <exclude>net/ranides/assira/collection/arrays/NativeArray$*</exclude>
+                                <exclude>net/ranides/assira/collection/maps/AHashMap$*</exclude>
+                                <exclude>net/ranides/assira/collection/maps/AHashMap.class</exclude>
+                                <exclude>net/ranides/assira/collection/maps/AIntHashMap$*</exclude>
+                                <exclude>net/ranides/assira/collection/maps/AIntHashMap.class</exclude>
+                                <exclude>net/ranides/assira/collection/maps/AIntMap$*</exclude>
+                                <exclude>net/ranides/assira/collection/maps/AIntMap.class</exclude>
+                                <exclude>net/ranides/assira/collection/maps/AIntSortedMap$*</exclude>
+                                <exclude>net/ranides/assira/collection/maps/AIntSortedMap.class</exclude>
+                                <exclude>net/ranides/assira/collection/maps/AMap$*</exclude>
+                                <exclude>net/ranides/assira/collection/maps/AMap.class</exclude>
+                                <exclude>net/ranides/assira/collection/maps/ASortedMap$*</exclude>
+                                <exclude>net/ranides/assira/collection/maps/ASortedMap.class</exclude>
+                                <exclude>net/ranides/assira/collection/maps/AVLTreeMap$*</exclude>
+                                <exclude>net/ranides/assira/collection/maps/AVLTreeMap.class</exclude>
+                                <exclude>net/ranides/assira/collection/maps/CustomMap.class</exclude>
+                                <exclude>net/ranides/assira/collection/maps/HashMap$*</exclude>
+                                <exclude>net/ranides/assira/collection/maps/HashMap.class</exclude>
+                                <exclude>net/ranides/assira/collection/maps/HashMultiMap$*</exclude>
+                                <exclude>net/ranides/assira/collection/maps/HashMultiMap.class</exclude>
+                                <exclude>net/ranides/assira/collection/maps/IdentMap.class</exclude>
+                                <exclude>net/ranides/assira/collection/maps/IntAVLTreeMap$*</exclude>
+                                <exclude>net/ranides/assira/collection/maps/IntAVLTreeMap.class</exclude>
+                                <exclude>net/ranides/assira/collection/maps/IntHashMap$*</exclude>
+                                <exclude>net/ranides/assira/collection/maps/IntHashMap.class</exclude>
+                                <exclude>net/ranides/assira/collection/maps/IntHashMultiMap$*</exclude>
+                                <exclude>net/ranides/assira/collection/maps/IntHashMultiMap.class</exclude>
+                                <exclude>net/ranides/assira/collection/maps/IntMap$*</exclude>
+                                <exclude>net/ranides/assira/collection/maps/IntMap.class</exclude>
+                                <exclude>net/ranides/assira/collection/maps/IntMultiMap.class</exclude>
+                                <exclude>net/ranides/assira/collection/maps/IntRBTreeMap$*</exclude>
+                                <exclude>net/ranides/assira/collection/maps/IntRBTreeMap.class</exclude>
+                                <exclude>net/ranides/assira/collection/maps/MultiMap.class</exclude>
+                                <exclude>net/ranides/assira/collection/maps/RBTreeMap$*</exclude>
+                                <exclude>net/ranides/assira/collection/maps/RBTreeMap.class</exclude>
                                 
-                                <exclude>net/ranides/assira/collection/arrays/NativeArraySort.class</exclude>
-                                <exclude>net/ranides/assira/collection/arrays/NativeArraySort$*</exclude>
-                                <exclude>net/ranides/assira/collection/arrays/ArraySort.class</exclude>
-                                <exclude>net/ranides/assira/collection/arrays/IntArraySort.class</exclude>
-<!--                                
-                                <exclude>net/ranides/assira/collection/arrays/NativeArrayAllocator.class</exclude>
-                                <exclude>net/ranides/assira/collection/arrays/ArrayAllocator.class</exclude>
--->
-                                <exclude>net/ranides/assira/collection/lists/AIntList.class</exclude>
-                                <exclude>net/ranides/assira/collection/lists/AIntList$*</exclude>
-                                <exclude>net/ranides/assira/collection/lists/IntArrayList.class</exclude>
-                                <exclude>net/ranides/assira/collection/lists/IntArrayList$*</exclude>
-                                <exclude>net/ranides/assira/collection/lists/IntRange.class</exclude>
-                                <exclude>net/ranides/assira/collection/lists/IntRange$*</exclude>
-                                <exclude>net/ranides/assira/collection/lists/NativeArrayList.class</exclude>
-                                <exclude>net/ranides/assira/collection/lists/NativeArrayList$*</exclude>
-								
                                 <exclude>net/ranides/assira/collection/rmq/AIntRMQList.class</exclude>
                                 <exclude>net/ranides/assira/collection/rmq/ARMQList.class</exclude>
                                 <exclude>net/ranides/assira/collection/rmq/IntRMQTable.class</exclude>
-                                <exclude>net/ranides/assira/collection/rmq/IntRMQTree.class</exclude>
                                 <exclude>net/ranides/assira/collection/rmq/IntRMQTree$*</exclude>
+                                <exclude>net/ranides/assira/collection/rmq/IntRMQTree.class</exclude>
                                 <exclude>net/ranides/assira/collection/rmq/RMQTable.class</exclude>
-                                <exclude>net/ranides/assira/collection/rmq/RMQTree.class</exclude>
                                 <exclude>net/ranides/assira/collection/rmq/RMQTree$*</exclude>
+                                <exclude>net/ranides/assira/collection/rmq/RMQTree.class</exclude>
+                                
+                                <exclude>net/ranides/assira/collection/sets/AHashSet$*</exclude>
+                                <exclude>net/ranides/assira/collection/sets/AHashSet.class</exclude>
+                                <exclude>net/ranides/assira/collection/sets/AIdentSet.class</exclude>
+                                <exclude>net/ranides/assira/collection/sets/AIntSet.class</exclude>
+                                <exclude>net/ranides/assira/collection/sets/AIntSortedSet$*</exclude>
+                                <exclude>net/ranides/assira/collection/sets/AIntSortedSet.class</exclude>
+                                <exclude>net/ranides/assira/collection/sets/ASet.class</exclude>
+                                <exclude>net/ranides/assira/collection/sets/ASortedSet$*</exclude>
+                                <exclude>net/ranides/assira/collection/sets/ASortedSet.class</exclude>
+                                <exclude>net/ranides/assira/collection/sets/AVLTreeSet$*</exclude>
+                                <exclude>net/ranides/assira/collection/sets/AVLTreeSet.class</exclude>
+                                <exclude>net/ranides/assira/collection/sets/CustomSet.class</exclude>
+                                <exclude>net/ranides/assira/collection/sets/HashSet.class</exclude>
+                                <exclude>net/ranides/assira/collection/sets/IdentSet.class</exclude>
+                                <exclude>net/ranides/assira/collection/sets/IntAVLTreeSet$*</exclude>
+                                <exclude>net/ranides/assira/collection/sets/IntAVLTreeSet.class</exclude>
+                                <exclude>net/ranides/assira/collection/sets/IntHashSet$*</exclude>
+                                <exclude>net/ranides/assira/collection/sets/IntHashSet.class</exclude>
+                                <exclude>net/ranides/assira/collection/sets/IntRBTreeSet$*</exclude>
+                                <exclude>net/ranides/assira/collection/sets/IntRBTreeSet.class</exclude>
+                                <exclude>net/ranides/assira/collection/sets/RBTreeSet$*</exclude>
+                                <exclude>net/ranides/assira/collection/sets/RBTreeSet.class</exclude>
                                 
-                                <exclude>net/ranides/assira/events/CoreEvent.class</exclude>
                                 <exclude>net/ranides/assira/events/CoreEvent$*</exclude>
-                                <exclude>net/ranides/assira/events/EventBinding.class</exclude>
+                                <exclude>net/ranides/assira/events/CoreEvent.class</exclude>
                                 <exclude>net/ranides/assira/events/EventBinding$*</exclude>
+                                <exclude>net/ranides/assira/events/EventBinding.class</exclude>
                                 <exclude>net/ranides/assira/events/EventDispatcher.class</exclude>
-                                <exclude>net/ranides/assira/events/EventLock.class</exclude>
                                 <exclude>net/ranides/assira/events/EventLock$*</exclude>
-                                <exclude>net/ranides/assira/events/EventProactor.class</exclude>
+                                <exclude>net/ranides/assira/events/EventLock.class</exclude>
                                 <exclude>net/ranides/assira/events/EventProactor$*</exclude>
-                                <exclude>net/ranides/assira/events/EventReactor.class</exclude>
+                                <exclude>net/ranides/assira/events/EventProactor.class</exclude>
                                 <exclude>net/ranides/assira/events/EventReactor$*</exclude>
+                                <exclude>net/ranides/assira/events/EventReactor.class</exclude>
                                 
                                 <exclude>net/ranides/assira/text/Charsets.class</exclude>
-                                <exclude>net/ranides/assira/text/MazoviaCharset.class</exclude>
-                                <exclude>net/ranides/assira/text/MazoviaCharset$*</exclude>
                                 <exclude>net/ranides/assira/text/FormatHex.class</exclude>
-                                <exclude>net/ranides/assira/text/FormatNumber.class</exclude>
                                 <exclude>net/ranides/assira/text/FormatNumber$*</exclude>
-								
-								<exclude>net/ranides/assira/trace/ThreadInspector.class</exclude>
-								<exclude>net/ranides/assira/trace/ThreadInspector$*</exclude>
-								<exclude>net/ranides/assira/trace/StackInspector.class</exclude>
-								<exclude>net/ranides/assira/trace/StackInspector$*</exclude>
-								<exclude>net/ranides/assira/trace/ExceptionInspector.class</exclude>
+                                <exclude>net/ranides/assira/text/FormatNumber.class</exclude>
+                                <exclude>net/ranides/assira/text/MazoviaCharset$*</exclude>
+                                <exclude>net/ranides/assira/text/MazoviaCharset.class</exclude>
+                                
 								<exclude>net/ranides/assira/trace/ExceptionInspector$*</exclude>
+								<exclude>net/ranides/assira/trace/ExceptionInspector.class</exclude>
+								<exclude>net/ranides/assira/trace/StackInspector$*</exclude>
+								<exclude>net/ranides/assira/trace/StackInspector.class</exclude>
+								<exclude>net/ranides/assira/trace/ThreadInspector$*</exclude>
+								<exclude>net/ranides/assira/trace/ThreadInspector.class</exclude>
+                                
                             </excludes>
                         </configuration>
                     </plugin>

+ 0 - 1
assira/src/main/java/net/ranides/assira/collection/AIntCollection.java

@@ -9,7 +9,6 @@ package net.ranides.assira.collection;
 import java.util.Collection;
 import java.util.Iterator;
 
-import net.ranides.assira.collection.arrays.ArrayUtils;
 import net.ranides.assira.collection.arrays.ArrayAllocator;
 import net.ranides.assira.collection.arrays.ArrayUtils;
 import net.ranides.assira.collection.iterators.IntIterator;

+ 2 - 5
assira/src/main/java/net/ranides/assira/collection/CollectionUtils.java

@@ -12,11 +12,7 @@ import java.util.Collection;
 import java.util.Iterator;
 import java.util.Set;
 import java.util.function.Function;
-import java.util.function.IntUnaryOperator;
 import java.util.function.Predicate;
-import net.ranides.assira.collection.arrays.NativeArray;
-import net.ranides.assira.collection.arrays.NativeArraySearch;
-import net.ranides.assira.collection.iterators.IntIterator;
 import net.ranides.assira.collection.iterators.IteratorUtils;
 
 /**
@@ -45,6 +41,7 @@ public final class CollectionUtils {
 		return IteratorUtils.last(values.iterator(), predicate);
 	}
 	
+    @SuppressWarnings("unchecked")
 	public static <T> Collection<T> filter(Collection<T> values, Predicate<T> predicate) {
 		return new ACollection<T>() {
 			@Override
@@ -86,7 +83,7 @@ public final class CollectionUtils {
 			return a.containsAll(b);
 		}
 		if(b instanceof Set<?>) {
-			return b.containsAll(b);
+			return b.containsAll(a);
 		}
 		
         // najpierw spróbujmy tak sprawdzić - takie porównanie powinno być względnie tanie

+ 0 - 7
assira/src/main/java/net/ranides/assira/collection/IntCollectionUtils.java

@@ -8,19 +8,12 @@
 package net.ranides.assira.collection;
 
 import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
 import java.util.Set;
-import java.util.function.Function;
 import java.util.function.IntPredicate;
 import java.util.function.IntUnaryOperator;
-import java.util.function.Predicate;
-import net.ranides.assira.collection.arrays.NativeArray;
-import net.ranides.assira.collection.arrays.NativeArraySearch;
 import net.ranides.assira.collection.iterators.IntIterator;
 import net.ranides.assira.collection.iterators.IntIteratorUtils;
 import net.ranides.assira.collection.iterators.IteratorUtils;
-import net.ranides.assira.collection.sets.IntSet;
 
 /**
  *

+ 0 - 4
assira/src/main/java/net/ranides/assira/collection/arrays/ArraySearch.java

@@ -9,10 +9,6 @@ package net.ranides.assira.collection.arrays;
 import java.util.Comparator;
 import java.util.function.Predicate;
 import net.ranides.assira.collection.IntComparator;
-import static net.ranides.assira.collection.arrays.NativeArraySearch.indexOf;
-import static net.ranides.assira.collection.arrays.NativeArraySearch.indexOf;
-import static net.ranides.assira.collection.arrays.NativeArraySearch.indexOf;
-import static net.ranides.assira.collection.arrays.NativeArraySearch.indexOf;
 
 @SuppressWarnings({
     "PMD.AvoidReassigningParameters"

+ 2 - 0
assira/src/main/java/net/ranides/assira/collection/arrays/NativeArraySearch.java

@@ -24,6 +24,7 @@ public final class NativeArraySearch {
         return first(array, 0, array.size(), predicate);
     }
     
+    @SuppressWarnings("unchecked")
     public static <T> T first(NativeArray array, int begin, int end, Predicate<T> predicate) {
         for (int i=begin; i<end; i++) {
             T v = (T)array.get(i);
@@ -38,6 +39,7 @@ public final class NativeArraySearch {
         return last(array, 0, array.size(), predicate);
     }
     
+    @SuppressWarnings("unchecked")
     public static <T> T last(NativeArray array, int begin, int end, Predicate<T> predicate) {
         for (int i=end-1; i>=begin; i--) {
             T v = (T)array.get(i);

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

@@ -160,6 +160,7 @@ public final class NativeArrayUtils {
         return iterator(array, 0, array.size());
     }
 
+    @SuppressWarnings("unchecked")
     public static <T> Iterator<T> iterator(NativeArray array, int begin, int end) {
         return new RandomAccessIterator<T>() {
             @Override

+ 0 - 7
assira/src/main/java/net/ranides/assira/collection/lists/IntListUtils.java

@@ -8,18 +8,11 @@
 package net.ranides.assira.collection.lists;
 
 import java.util.AbstractList;
-import java.util.Collection;
 import java.util.List;
-import java.util.ListIterator;
 import java.util.NoSuchElementException;
-import java.util.function.Function;
-import java.util.function.IntBinaryOperator;
 import java.util.function.IntFunction;
 import java.util.function.IntPredicate;
 import java.util.function.IntUnaryOperator;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
-import net.ranides.assira.collection.CollectionUtils;
 import net.ranides.assira.collection.IntCollectionUtils;
 import net.ranides.assira.collection.iterators.IntListIterator;
 

+ 171 - 170
assira/src/main/java/net/ranides/assira/collection/lists/NativeArrayList.java

@@ -1,170 +1,171 @@
-/*
- *  @author Ranides Atterwim <ranides@gmail.com>
- *  @copyright Ranides Atterwim
- *  @license WTFPL
- *  @url http://ranides.net/projects/assira
- */
-package net.ranides.assira.collection.lists;
-
-import java.util.AbstractList;
-import java.util.List;
-import net.ranides.assira.collection.arrays.NativeArrayAllocator;
-import net.ranides.assira.collection.arrays.NativeArray;
-
-/**
- *
- * @author msieron
- */
-public final class NativeArrayList {
-    
-    private static final int[] EMPTY = new int[0];
-	
-	private NativeArrayList() { }
-
-	public static IntList wrap(int[] array) {
-        if(null == array) {
-            array = EMPTY;
-        }
-        return new IntegerList(array, 0, array.length);
-	}
-
-	public static IntList wrap(int[] array, int offset, int length) {
-		return new IntegerList(array, offset, offset+length);
-		
-    }
-	
-	public static List<?> wrap(Object array) {
-        NativeArray na = NativeArray.wrap(array);
-        return new NativeList(na, 0, na.size());
-	}
-	
-	public static List<?> wrap(Object array, int offset, int length) {
-        return new NativeList(NativeArray.wrap(array), offset, offset+length);
-    }
-	
-    @SuppressWarnings("unchecked")
-	public static <Auto> List<Auto> $wrap(Object array) {
-		return (List)wrap(array);
-	}
-	
-    @SuppressWarnings("unchecked")
-	public static <Auto> List<Auto> $wrap(Object array, int offset, int length) {
-		return (List)wrap(array, offset, length);
-	}
-	
-    
-    private static final class NativeList extends AbstractList {
-		
-		private final int begin;
-		private final int end;
-		private final NativeArray array;
-
-        public NativeList(NativeArray array, int begin, int end) {
-			this.begin = begin;
-			this.end = end;
-            this.array = array;
-			NativeArrayAllocator.ensureFromTo(array, begin, end);
-        }
-
-        @Override
-        public Object set(int index, Object element) {
-            Object prev = array.get(begin+index);
-            array.set(begin+index, element);
-            return prev;
-        }
-
-        @Override
-        public Object get(int index) {
-            return array.get(begin+index);
-        }
-
-		@Override
-		public int size() {
-			return end - begin;
-		}
-
-		@Override
-		public boolean equals(Object object) {
-			if(object instanceof NativeList) {
-				NativeList list = (NativeList)object;
-                int asize = end-begin;
-                int bsize = list.end - list.begin;
-                if(asize != bsize) {
-                    return false;
-                }
-                return array.equals(list.array, begin, list.begin, asize);
-			}
-			return super.equals(object);
-		}
-		
-		@Override
-		public int hashCode() {
-            return array.hashCode(begin, end);
-		}
-		
-    }
-
-	private static final class IntegerList extends AIntList {
-		
-		private final int begin;
-		private final int end;
-		private final int[] array;
-
-        public IntegerList(int[] array, int begin, int end) {
-			this.begin = begin;
-			this.end = end;
-            this.array = array;
-			NativeArrayAllocator.ensureFromTo(NativeArray.wrap(array), begin, end);
-        }
-
-        @Override
-        public int set(int index, int element) {
-            int prev = array[begin+index];
-            array[begin+index] = element;
-            return prev;
-        }
-
-        @Override
-        public int getInt(int index) {
-            return array[begin+index];
-        }
-
-		@Override
-		public int size() {
-			return end - begin;
-		}
-
-		@Override
-		public boolean equals(Object object) {
-			if(object instanceof IntegerList) {
-				IntegerList list = (IntegerList)object;
-                int asize = end-begin;
-                int bsize = list.end - list.begin;
-                if(asize != bsize) {
-                    return false;
-                }
-                return NativeArray.wrap(array).equals(NativeArray.wrap(list.array), begin, list.begin, asize);
-			}
-			return super.equals(object);
-		}
-		
-		@Override
-		public int hashCode() {
-            return NativeArray.wrap(array).hashCode(begin, end);
-		}
-
-        @Override
-        public void add(int index, int k) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public int removeInt(int index) {
-            throw new UnsupportedOperationException();
-        }
-        
-        
-        
-    }
-	
-}
+/*
+ *  @author Ranides Atterwim <ranides@gmail.com>
+ *  @copyright Ranides Atterwim
+ *  @license WTFPL
+ *  @url http://ranides.net/projects/assira
+ */
+package net.ranides.assira.collection.lists;
+
+import java.util.AbstractList;
+import java.util.List;
+import net.ranides.assira.collection.arrays.NativeArrayAllocator;
+import net.ranides.assira.collection.arrays.NativeArray;
+
+/**
+ *
+ * @author msieron
+ */
+public final class NativeArrayList {
+    
+    private static final int[] EMPTY = new int[0];
+	
+	private NativeArrayList() { }
+
+	public static IntList wrap(int[] array) {
+        if(null == array) {
+            array = EMPTY;
+        }
+        return new IntegerList(array, 0, array.length);
+	}
+
+	public static IntList wrap(int[] array, int offset, int length) {
+		return new IntegerList(array, offset, offset+length);
+		
+    }
+	
+	public static List<?> wrap(Object array) {
+        NativeArray na = NativeArray.wrap(array);
+        return new NativeList(na, 0, na.size());
+	}
+	
+	public static List<?> wrap(Object array, int offset, int length) {
+        return new NativeList(NativeArray.wrap(array), offset, offset+length);
+    }
+	
+    @SuppressWarnings("unchecked")
+	public static <Auto> List<Auto> $wrap(Object array) {
+		return (List)wrap(array);
+	}
+	
+    @SuppressWarnings("unchecked")
+	public static <Auto> List<Auto> $wrap(Object array, int offset, int length) {
+		return (List)wrap(array, offset, length);
+	}
+	
+    
+    private static final class NativeList extends AbstractList {
+		
+		private final int begin;
+		private final int end;
+		private final NativeArray array;
+
+        public NativeList(NativeArray array, int begin, int end) {
+			this.begin = begin;
+			this.end = end;
+            this.array = array;
+			NativeArrayAllocator.ensureFromTo(array, begin, end);
+        }
+
+        @Override
+        public Object set(int index, Object element) {
+            Object prev = array.get(begin+index);
+            array.set(begin+index, element);
+            return prev;
+        }
+
+        @Override
+        public Object get(int index) {
+            return array.get(begin+index);
+        }
+
+		@Override
+		public int size() {
+			return end - begin;
+		}
+
+		@Override
+		public boolean equals(Object object) {
+			if(object instanceof NativeList) {
+				NativeList list = (NativeList)object;
+                int asize = end-begin;
+                int bsize = list.end - list.begin;
+                if(asize != bsize) {
+                    return false;
+                }
+                return array.equals(list.array, begin, list.begin, asize);
+			}
+			return super.equals(object);
+		}
+		
+		@Override
+		public int hashCode() {
+            return array.hashCode(begin, end);
+		}
+		
+    }
+
+	private static final class IntegerList extends AIntList {
+		
+		private final int begin;
+		private final int end;
+		private final int[] array;
+
+        @SuppressWarnings("PMD.ArrayIsStoredDirectly")
+        public IntegerList(int[] array, int begin, int end) {
+			this.begin = begin;
+			this.end = end;
+            this.array = array;
+			NativeArrayAllocator.ensureFromTo(NativeArray.wrap(array), begin, end);
+        }
+
+        @Override
+        public int set(int index, int element) {
+            int prev = array[begin+index];
+            array[begin+index] = element;
+            return prev;
+        }
+
+        @Override
+        public int getInt(int index) {
+            return array[begin+index];
+        }
+
+		@Override
+		public int size() {
+			return end - begin;
+		}
+
+		@Override
+		public boolean equals(Object object) {
+			if(object instanceof IntegerList) {
+				IntegerList list = (IntegerList)object;
+                int asize = end-begin;
+                int bsize = list.end - list.begin;
+                if(asize != bsize) {
+                    return false;
+                }
+                return NativeArray.wrap(array).equals(NativeArray.wrap(list.array), begin, list.begin, asize);
+			}
+			return super.equals(object);
+		}
+		
+		@Override
+		public int hashCode() {
+            return NativeArray.wrap(array).hashCode(begin, end);
+		}
+
+        @Override
+        public void add(int index, int k) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public int removeInt(int index) {
+            throw new UnsupportedOperationException();
+        }
+        
+        
+        
+    }
+	
+}

+ 0 - 1
assira/src/main/java/net/ranides/assira/collection/lists/VirtualList.java

@@ -15,7 +15,6 @@ import java.util.List;
 import java.util.ListIterator;
 import java.util.RandomAccess;
 import java.util.Set;
-import java.util.function.IntFunction;
 import net.ranides.assira.collection.iterators.RandomAccessIterator;
 import net.ranides.assira.collection.sets.HashSet;
 

+ 119 - 119
assira/src/main/java/net/ranides/assira/events/EventProactor.java

@@ -1,119 +1,119 @@
-/*
- *  @author Ranides Atterwim <ranides@gmail.com>
- *  @copyright Ranides Atterwim
- *  @license WTFPL
- *  @url http://ranides.net/projects/assira
- */
-
-package net.ranides.assira.events;
-
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicInteger;
-import net.ranides.assira.trace.LoggerUtils;
-import org.slf4j.Logger;
-
-/**
- * EventProactor, obsługuje każdego listenera i każde zdarzenie asynchronicznie.
- * Korzysta z puli wątków, żeby nie powodować eksplozji wątków.
- *
- * Standardowy ThreadPoolExecutor ma w sumie głupią tę strategię zarządzania pulą,
- * napisać *kiedyś* własną wersję, albo przemyśleć konfigurację.
- *
- * <div class="message-note">thread-safe method</div>
- * @author ranides
- */
-public class EventProactor extends EventDispatcher {
-
-    private static final Logger LOGGER = LoggerUtils.getLogger();
-
-    private final Object lock = new Object();
-    private final ThreadPoolExecutor executor;
-    private final String name;
-    private final AtomicInteger threads = new AtomicInteger(0);
-    private final BlockingQueue<Runnable> queue = new LinkedBlockingQueue<>();
-
-    public static EventProactor newInstance(String name, int size) {
-        return new EventProactor(name, size);
-    }
-
-    protected EventProactor(final String name, final int size) {
-        this.name = name;
-        this.executor = new ThreadPoolExecutor(
-            size, size, 
-            0L, TimeUnit.MILLISECONDS, 
-            queue, 
-            this::newThread, 
-            this::rejectedExecution
-        );
-    }
-    
-    public EventProactor stop() {
-        // read updated, signal update, in atomic
-        synchronized(lock) {
-            if( executor.isShutdown()) {
-                return this;
-            }
-            signalEvent(CoreEvent.stop(this));
-            executor.shutdown();
-        }
-        this.join();
-        dispatchEvent(CoreEvent.shutdown(EventProactor.this), true);
-        dispose(true);
-        return this;
-    }
-
-    public EventProactor join() {
-        try { executor.awaitTermination(Integer.MAX_VALUE, TimeUnit.MILLISECONDS); }
-        catch (InterruptedException _e) { /* do nothing */ }
-        return this;
-    }
-
-    public String name() {
-        return name;
-    }
-
-    @Override
-    protected <T extends Event> void dispatchEvent(final EventListener<? super T> listener, final T event) {
-        executor.execute(()->listener.handleEvent(event));
-    }
-
-    @Override
-    public void dispose() {
-        // read updated, signal update, in atomic
-        synchronized(lock) {
-            if( executor.isShutdown()) {
-                return;
-            }
-            signalEvent(CoreEvent.stop(this));
-            executor.shutdown();
-        }
-
-        new Thread(){
-            @Override
-            public void run() {
-                EventProactor.this.join();
-                dispatchEvent(CoreEvent.shutdown(EventProactor.this), true);
-                dispose(true);
-            }
-        }.start();
-    }
-
-    @Override
-    public String toString() {
-        return "EventProactor<" + name + ":" + threads.get() + ">";
-    }
-    
-    private Thread newThread(Runnable runnable) {
-        String tid = name + "-" + threads.getAndIncrement();
-        LOGGER.debug("new thread: {}", tid);
-        return new Thread(runnable, tid);
-    }
-    
-    private void rejectedExecution(Runnable task, ThreadPoolExecutor _executor) {
-        LOGGER.warn("ignored task: {}", task);
-    }
-
-}
+/*
+ *  @author Ranides Atterwim <ranides@gmail.com>
+ *  @copyright Ranides Atterwim
+ *  @license WTFPL
+ *  @url http://ranides.net/projects/assira
+ */
+
+package net.ranides.assira.events;
+
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+import net.ranides.assira.trace.LoggerUtils;
+import org.slf4j.Logger;
+
+/**
+ * EventProactor, obsługuje każdego listenera i każde zdarzenie asynchronicznie.
+ * Korzysta z puli wątków, żeby nie powodować eksplozji wątków.
+ *
+ * Standardowy ThreadPoolExecutor ma w sumie głupią tę strategię zarządzania pulą,
+ * napisać *kiedyś* własną wersję, albo przemyśleć konfigurację.
+ *
+ * <div class="message-note">thread-safe method</div>
+ * @author ranides
+ */
+public class EventProactor extends EventDispatcher {
+
+    private static final Logger LOGGER = LoggerUtils.getLogger();
+
+    private final Object lock = new Object();
+    private final ThreadPoolExecutor executor;
+    private final String name;
+    private final AtomicInteger threads = new AtomicInteger(0);
+    private final BlockingQueue<Runnable> queue = new LinkedBlockingQueue<>();
+
+    public static EventProactor newInstance(String name, int size) {
+        return new EventProactor(name, size);
+    }
+
+    protected EventProactor(final String name, final int size) {
+        this.name = name;
+        this.executor = new ThreadPoolExecutor(
+            size, size, 
+            0L, TimeUnit.MILLISECONDS, 
+            queue, 
+            this::newThread, 
+            this::rejectedExecution
+        );
+    }
+    
+    public EventProactor stop() {
+        // read updated, signal update, in atomic
+        synchronized(lock) {
+            if( executor.isShutdown()) {
+                return this;
+            }
+            signalEvent(CoreEvent.stop(this));
+            executor.shutdown();
+        }
+        this.join();
+        dispatchEvent(CoreEvent.shutdown(EventProactor.this), true);
+        dispose(true);
+        return this;
+    }
+
+    public EventProactor join() {
+        try { executor.awaitTermination(Integer.MAX_VALUE, TimeUnit.MILLISECONDS); }
+        catch (InterruptedException _e) { /* do nothing */ }
+        return this;
+    }
+
+    public String name() {
+        return name;
+    }
+
+    @Override
+    protected <T extends Event> void dispatchEvent(final EventListener<? super T> listener, final T event) {
+        executor.execute(()->listener.handleEvent(event));
+    }
+
+    @Override
+    public void dispose() {
+        // read updated, signal update, in atomic
+        synchronized(lock) {
+            if( executor.isShutdown()) {
+                return;
+            }
+            signalEvent(CoreEvent.stop(this));
+            executor.shutdown();
+        }
+
+        new Thread(){
+            @Override
+            public void run() {
+                EventProactor.this.join();
+                dispatchEvent(CoreEvent.shutdown(EventProactor.this), true);
+                dispose(true);
+            }
+        }.start();
+    }
+
+    @Override
+    public String toString() {
+        return "EventProactor<" + name + ":" + threads.get() + ">";
+    }
+    
+    private Thread newThread(Runnable runnable) {
+        String tid = name + "-" + threads.getAndIncrement();
+        LOGGER.debug("new thread: {}", tid);
+        return new Thread(runnable, tid);
+    }
+    
+    private void rejectedExecution(Runnable task, ThreadPoolExecutor _executor) { // NOPMD
+        LOGGER.warn("ignored task: {}", task);
+    }
+
+}

+ 141 - 142
assira/src/main/java/net/ranides/assira/generic/HashUtils.java

@@ -1,143 +1,142 @@
-/*
- * @author Ranides Atterwim <ranides@gmail.com>
- * @copyright Ranides Atterwim
- * @license WTFPL
- * @url http://ranides.net/projects/assira
- */
-package net.ranides.assira.generic;
-
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.Arrays;
-import net.ranides.assira.collection.arrays.NativeArrayUtils;
-import net.ranides.assira.collection.lists.NativeArrayList;
-import net.ranides.assira.text.Charsets;
-
-@SuppressWarnings({
-    "PMD.AvoidReassigningParameters"
-})
-public final class HashUtils {
-
-    private HashUtils() {
-        // utility class
-    }
-    
-    /**
-     * Avalanches the bits of an integer by applying the finalisation step of
-     * MurmurHash3.
-     *
-     * <p>This function implements the finalisation step of Austin Appleby's <a
-     * href="http://sites.google.com/site/murmurhash/">MurmurHash3</a>. Its
-     * purpose is to avalanche the bits of the argument to within 0.25% bias. It
-     * is used, among other things, to scramble quickly (but deeply) the hash
-     * values returned by {@link Object#hashCode()}.
-     *
-     * @param x an integer.
-     * @return a hash value with good avalanching properties.
-     */
-    public static int murmurHash3(int x) {
-        x ^= x >>> 16;
-        x *= 0x85ebca6b;
-        x ^= x >>> 13;
-        x *= 0xc2b2ae35;
-        x ^= x >>> 16;
-        
-        return x;
-    }
-
-    /**
-     * Avalanches the bits of a long integer by applying the finalisation step
-     * of MurmurHash3.
-     *
-     * <p>This function implements the finalisation step of Austin Appleby's <a
-     * href="http://sites.google.com/site/murmurhash/">MurmurHash3</a>. Its
-     * purpose is to avalanche the bits of the argument to within 0.25% bias. It
-     * is used, among other things, to scramble quickly (but deeply) the hash
-     * values returned by {@link Object#hashCode()}.
-     *
-     * @param x a long integer.
-     * @return a hash value with good avalanching properties.
-     */
-    public static long murmurHash3(long x) {
-        x ^= x >>> 33;
-        x *= 0xff51afd7ed558ccdL;
-        x ^= x >>> 33;
-        x *= 0xc4ceb9fe1a85ec53L;
-        x ^= x >>> 33;
-
-        return x;
-    }
-
-    public static int hash(Object value) {
-        return null == value ? 0 : value.hashCode();
-    }
-    
-    /**
-     * Calculates hash value compatible with code automatically generated by NetBeans IDE.
-     * @param initial 
-     * @param multiplier
-     * @param values
-     * @return 
-     */
-    public static int hashValues(int initial, int multiplier, Object... values) {
-        return hashIterable(initial, multiplier, Arrays.asList(values));
-    }
-    
-    public static int hashPair(Object value1, Object value2) {
-        return (value1 == null ? 0 : value1.hashCode()) ^ (value2 == null ? 0 : value2.hashCode());
-    }
-    
-    /**
-     * Calculates hash value compatible with code automatically generated by NetBeans IDE.
-     * @param initial 
-     * @param multiplier
-     * @param values
-     * @return 
-     */
-    public static int hashIterable(int initial, int multiplier, Iterable<?> values) {
-        int hash = initial;
-        for(Object value: values) {
-            hash *= multiplier;
-            if(null == value) {
-                continue;
-            }
-            if( value.getClass().isArray() ) {
-                hash += NativeArrayList.wrap(value).hashCode();
-            } else {
-                hash += value.hashCode();
-            }
-        }
-        return hash;
-    }
-    
-    /**
-     * Calculates hash value of text using SHA-512
-     * @param value
-     * @return
-     */
-    public static String digest(String value) {
-        return digest(value, "SHA-512");
-    }
-    
-    /**
-     * Calculates hash value of text using specified JRE built-in algorithm.
-     * {@see MessageDigest}.
-     * @param value
-     * @param method
-     * @return
-     */
-    public static String digest(String value, String method) {
-        if( (null== value) || value.isEmpty() ) { 
-            return null; 
-        }
-        try {
-            MessageDigest mdt = MessageDigest.getInstance(method);
-            byte[] digest = mdt.digest(value.getBytes(Charsets.UTF8) );
-            BigInteger number = new BigInteger(1, digest);
-            return number.toString(16);
-        } catch (NoSuchAlgorithmException cause) {
-            throw new UnsupportedOperationException(cause);
-        }
-    }
+/*
+ * @author Ranides Atterwim <ranides@gmail.com>
+ * @copyright Ranides Atterwim
+ * @license WTFPL
+ * @url http://ranides.net/projects/assira
+ */
+package net.ranides.assira.generic;
+
+import java.math.BigInteger;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.Arrays;
+import net.ranides.assira.collection.lists.NativeArrayList;
+import net.ranides.assira.text.Charsets;
+
+@SuppressWarnings({
+    "PMD.AvoidReassigningParameters"
+})
+public final class HashUtils {
+
+    private HashUtils() {
+        // utility class
+    }
+    
+    /**
+     * Avalanches the bits of an integer by applying the finalisation step of
+     * MurmurHash3.
+     *
+     * <p>This function implements the finalisation step of Austin Appleby's <a
+     * href="http://sites.google.com/site/murmurhash/">MurmurHash3</a>. Its
+     * purpose is to avalanche the bits of the argument to within 0.25% bias. It
+     * is used, among other things, to scramble quickly (but deeply) the hash
+     * values returned by {@link Object#hashCode()}.
+     *
+     * @param x an integer.
+     * @return a hash value with good avalanching properties.
+     */
+    public static int murmurHash3(int x) {
+        x ^= x >>> 16;
+        x *= 0x85ebca6b;
+        x ^= x >>> 13;
+        x *= 0xc2b2ae35;
+        x ^= x >>> 16;
+        
+        return x;
+    }
+
+    /**
+     * Avalanches the bits of a long integer by applying the finalisation step
+     * of MurmurHash3.
+     *
+     * <p>This function implements the finalisation step of Austin Appleby's <a
+     * href="http://sites.google.com/site/murmurhash/">MurmurHash3</a>. Its
+     * purpose is to avalanche the bits of the argument to within 0.25% bias. It
+     * is used, among other things, to scramble quickly (but deeply) the hash
+     * values returned by {@link Object#hashCode()}.
+     *
+     * @param x a long integer.
+     * @return a hash value with good avalanching properties.
+     */
+    public static long murmurHash3(long x) {
+        x ^= x >>> 33;
+        x *= 0xff51afd7ed558ccdL;
+        x ^= x >>> 33;
+        x *= 0xc4ceb9fe1a85ec53L;
+        x ^= x >>> 33;
+
+        return x;
+    }
+
+    public static int hash(Object value) {
+        return null == value ? 0 : value.hashCode();
+    }
+    
+    /**
+     * Calculates hash value compatible with code automatically generated by NetBeans IDE.
+     * @param initial 
+     * @param multiplier
+     * @param values
+     * @return 
+     */
+    public static int hashValues(int initial, int multiplier, Object... values) {
+        return hashIterable(initial, multiplier, Arrays.asList(values));
+    }
+    
+    public static int hashPair(Object value1, Object value2) {
+        return (value1 == null ? 0 : value1.hashCode()) ^ (value2 == null ? 0 : value2.hashCode());
+    }
+    
+    /**
+     * Calculates hash value compatible with code automatically generated by NetBeans IDE.
+     * @param initial 
+     * @param multiplier
+     * @param values
+     * @return 
+     */
+    public static int hashIterable(int initial, int multiplier, Iterable<?> values) {
+        int hash = initial;
+        for(Object value: values) {
+            hash *= multiplier;
+            if(null == value) {
+                continue;
+            }
+            if( value.getClass().isArray() ) {
+                hash += NativeArrayList.wrap(value).hashCode();
+            } else {
+                hash += value.hashCode();
+            }
+        }
+        return hash;
+    }
+    
+    /**
+     * Calculates hash value of text using SHA-512
+     * @param value
+     * @return
+     */
+    public static String digest(String value) {
+        return digest(value, "SHA-512");
+    }
+    
+    /**
+     * Calculates hash value of text using specified JRE built-in algorithm.
+     * {@see MessageDigest}.
+     * @param value
+     * @param method
+     * @return
+     */
+    public static String digest(String value, String method) {
+        if( (null== value) || value.isEmpty() ) { 
+            return null; 
+        }
+        try {
+            MessageDigest mdt = MessageDigest.getInstance(method);
+            byte[] digest = mdt.digest(value.getBytes(Charsets.UTF8) );
+            BigInteger number = new BigInteger(1, digest);
+            return number.toString(16);
+        } catch (NoSuchAlgorithmException cause) {
+            throw new UnsupportedOperationException(cause);
+        }
+    }
 }