Changes:
- Added: RandomGenerator support (Java17), though requires self compilation - Added: Optimizations for HashUtils next power of function. - Added: toArray() now returns a cached empty array if the collection is empty. - Added: toArray function for AsyncBuilder - Updated: SCG to version 1.2.2
This commit is contained in:
		
							parent
							
								
									477f3c9f40
								
							
						
					
					
						commit
						96458bd8b6
					
				@ -6,7 +6,11 @@
 | 
				
			|||||||
- Added: ToArray function into Iterable which uses ISizeProvider to reduce overhead of duplicating arrays.
 | 
					- Added: ToArray function into Iterable which uses ISizeProvider to reduce overhead of duplicating arrays.
 | 
				
			||||||
- Added: Functions that have the same type, Int2IntFunction as example, have now a identity function.
 | 
					- Added: Functions that have the same type, Int2IntFunction as example, have now a identity function.
 | 
				
			||||||
- Added: Functions of a BooleanValue have now alwaysTrue/False function.
 | 
					- Added: Functions of a BooleanValue have now alwaysTrue/False function.
 | 
				
			||||||
- Added: ForEachIndexed for Lists only for now. (Might get added to others too if necessary)
 | 
					- Added: ForEachIndexed for all Iterable implementations
 | 
				
			||||||
 | 
					- Added: RandomGenerator support (Java17), though requires self compilation
 | 
				
			||||||
 | 
					- Added: Optimizations for HashUtils next power of function.
 | 
				
			||||||
 | 
					- Added: toArray() now returns a cached empty array if the collection is empty.
 | 
				
			||||||
 | 
					- Added: toArray function for AsyncBuilder
 | 
				
			||||||
- Fixed: putIfAbsent now replaces defaultValues
 | 
					- Fixed: putIfAbsent now replaces defaultValues
 | 
				
			||||||
- Fixed: OpenHashSet/Map and their Custom Variants no longer rely on List implementations.
 | 
					- Fixed: OpenHashSet/Map and their Custom Variants no longer rely on List implementations.
 | 
				
			||||||
- Fixed: ObjectCopyOnWriteList.of did create a ObjectArrayList instead of the CopyOnWrite variant.
 | 
					- Fixed: ObjectCopyOnWriteList.of did create a ObjectArrayList instead of the CopyOnWrite variant.
 | 
				
			||||||
 | 
				
			|||||||
@ -46,7 +46,7 @@ configurations {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
dependencies {
 | 
					dependencies {
 | 
				
			||||||
	builderImplementation 'com.google.code.gson:gson:2.10'
 | 
						builderImplementation 'com.google.code.gson:gson:2.10'
 | 
				
			||||||
	builderImplementation 'de.speiger:Simple-Code-Generator:1.2.1'
 | 
						builderImplementation 'de.speiger:Simple-Code-Generator:1.2.2'
 | 
				
			||||||
    testImplementation 'junit:junit:4.12'
 | 
					    testImplementation 'junit:junit:4.12'
 | 
				
			||||||
    testImplementation 'com.google.guava:guava-testlib:31.0.1-jre'
 | 
					    testImplementation 'com.google.guava:guava-testlib:31.0.1-jre'
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
				
			|||||||
@ -32,6 +32,7 @@ public class ModulePackage
 | 
				
			|||||||
	List<IMapper> mappers = new ArrayList<>();
 | 
						List<IMapper> mappers = new ArrayList<>();
 | 
				
			||||||
	Set<String> flags = new LinkedHashSet<>();
 | 
						Set<String> flags = new LinkedHashSet<>();
 | 
				
			||||||
	Set<String> globalFlags;
 | 
						Set<String> globalFlags;
 | 
				
			||||||
 | 
						Map<String, Integer> flaggedValues = new HashMap<>();
 | 
				
			||||||
	BiConsumer<String, RequiredType> requirements = VOID;
 | 
						BiConsumer<String, RequiredType> requirements = VOID;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	public ModulePackage(Set<String> globalFlags, ClassType keyType, ClassType valueType) {
 | 
						public ModulePackage(Set<String> globalFlags, ClassType keyType, ClassType valueType) {
 | 
				
			||||||
@ -74,6 +75,10 @@ public class ModulePackage
 | 
				
			|||||||
		globalFlags.add(flag);
 | 
							globalFlags.add(flag);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						public void addValue(String key, int value) {
 | 
				
			||||||
 | 
							flaggedValues.put(key, value);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	public void addRequirement(String fileName, RequiredType type) {
 | 
						public void addRequirement(String fileName, RequiredType type) {
 | 
				
			||||||
		requirements.accept(fileName, type);
 | 
							requirements.accept(fileName, type);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -107,6 +112,7 @@ public class ModulePackage
 | 
				
			|||||||
		process.addFlags(flags);
 | 
							process.addFlags(flags);
 | 
				
			||||||
		process.addFlags(globalFlags);
 | 
							process.addFlags(globalFlags);
 | 
				
			||||||
		process.addMappers(mappers);
 | 
							process.addMappers(mappers);
 | 
				
			||||||
 | 
							process.addValues(flaggedValues);
 | 
				
			||||||
		result.accept(process);
 | 
							result.accept(process);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
				
			|||||||
@ -83,6 +83,10 @@ public abstract class BaseModule
 | 
				
			|||||||
		entry.addFlag(name);
 | 
							entry.addFlag(name);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						protected void addValue(String name, int value) {
 | 
				
			||||||
 | 
							entry.addValue(name, value);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	protected void addKeyFlag(String name) {
 | 
						protected void addKeyFlag(String name) {
 | 
				
			||||||
		entry.addFlag(name);
 | 
							entry.addFlag(name);
 | 
				
			||||||
		entry.addGlobalFlag(keyType.getCapType()+"_"+name);
 | 
							entry.addGlobalFlag(keyType.getCapType()+"_"+name);
 | 
				
			||||||
 | 
				
			|||||||
@ -22,6 +22,7 @@ public class JavaModule extends BaseModule
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		addFlag("TYPE_"+keyType.getCapType());
 | 
							addFlag("TYPE_"+keyType.getCapType());
 | 
				
			||||||
		addFlag("VALUE_"+valueType.getCapType());
 | 
							addFlag("VALUE_"+valueType.getCapType());
 | 
				
			||||||
 | 
							addValue("JAVA_VERSION", getVersion());
 | 
				
			||||||
		if(keyType == valueType) addFlag("SAME_TYPE");
 | 
							if(keyType == valueType) addFlag("SAME_TYPE");
 | 
				
			||||||
		if(keyType.hasFunction(valueType)) addFlag("JDK_FUNCTION");
 | 
							if(keyType.hasFunction(valueType)) addFlag("JDK_FUNCTION");
 | 
				
			||||||
		if(!keyType.needsCustomJDKType()) addFlag("JDK_TYPE");
 | 
							if(!keyType.needsCustomJDKType()) addFlag("JDK_TYPE");
 | 
				
			||||||
@ -30,6 +31,13 @@ public class JavaModule extends BaseModule
 | 
				
			|||||||
		if(!valueType.needsCustomJDKType()) addFlag("JDK_VALUE");
 | 
							if(!valueType.needsCustomJDKType()) addFlag("JDK_VALUE");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						private int getVersion()  {
 | 
				
			||||||
 | 
							String version = System.getProperty("java.version");
 | 
				
			||||||
 | 
							if(version.startsWith("1.")) return Integer.parseInt(version.substring(2, 3));
 | 
				
			||||||
 | 
							int dot = version.indexOf(".");
 | 
				
			||||||
 | 
							return Integer.parseInt(dot != -1 ? version.substring(0, dot) : version);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	protected void loadRemappers() {}
 | 
						protected void loadRemappers() {}
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
@ -52,6 +60,8 @@ public class JavaModule extends BaseModule
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	protected void loadClasses()
 | 
						protected void loadClasses()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
							if(getVersion() >= 17) addSimpleMapper("RANDOM", "RandomGenerator");
 | 
				
			||||||
 | 
							else addSimpleMapper("RANDOM", "Random");
 | 
				
			||||||
		addSimpleMapper("JAVA_PREDICATE", keyType.isPrimitiveBlocking() ? "" : keyType.getCustomJDKType().getFileType()+"Predicate");
 | 
							addSimpleMapper("JAVA_PREDICATE", keyType.isPrimitiveBlocking() ? "" : keyType.getCustomJDKType().getFileType()+"Predicate");
 | 
				
			||||||
		addSimpleMapper("JAVA_CONSUMER", keyType.isPrimitiveBlocking() ? "" : "java.util.function."+keyType.getCustomJDKType().getFileType()+"Consumer");
 | 
							addSimpleMapper("JAVA_CONSUMER", keyType.isPrimitiveBlocking() ? "" : "java.util.function."+keyType.getCustomJDKType().getFileType()+"Consumer");
 | 
				
			||||||
		addSimpleMapper("JAVA_SUPPLIER", keyType.isPrimitiveBlocking() ? "" : "java.util.function."+keyType.getCustomJDKType().getFileType()+"Supplier");
 | 
							addSimpleMapper("JAVA_SUPPLIER", keyType.isPrimitiveBlocking() ? "" : "java.util.function."+keyType.getCustomJDKType().getFileType()+"Supplier");
 | 
				
			||||||
 | 
				
			|||||||
@ -11,6 +11,7 @@ import java.util.function.Consumer;
 | 
				
			|||||||
import speiger.src.collections.PACKAGE.functions.CONSUMER;
 | 
					import speiger.src.collections.PACKAGE.functions.CONSUMER;
 | 
				
			||||||
import speiger.src.collections.PACKAGE.utils.ITERATORS;
 | 
					import speiger.src.collections.PACKAGE.utils.ITERATORS;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					import speiger.src.collections.PACKAGE.utils.ARRAYS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Abstract Type Specific Collection that reduces boxing/unboxing
 | 
					 * Abstract Type Specific Collection that reduces boxing/unboxing
 | 
				
			||||||
@ -245,6 +246,7 @@ public abstract class ABSTRACT_COLLECTION KEY_GENERIC_TYPE extends AbstractColle
 | 
				
			|||||||
	 */
 | 
						 */
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public KEY_TYPE[] TO_ARRAY() {
 | 
						public KEY_TYPE[] TO_ARRAY() {
 | 
				
			||||||
 | 
							if(isEmpty()) return ARRAYS.EMPTY_ARRAY;
 | 
				
			||||||
		return TO_ARRAY(new KEY_TYPE[size()]);
 | 
							return TO_ARRAY(new KEY_TYPE[size()]);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
				
			|||||||
@ -42,11 +42,10 @@ import speiger.src.collections.PACKAGE.functions.function.PREDICATE;
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
import speiger.src.collections.PACKAGE.functions.function.UNARY_OPERATOR;
 | 
					import speiger.src.collections.PACKAGE.functions.function.UNARY_OPERATOR;
 | 
				
			||||||
import speiger.src.collections.PACKAGE.utils.ARRAYS;
 | 
					import speiger.src.collections.PACKAGE.utils.ARRAYS;
 | 
				
			||||||
 | 
					import speiger.src.collections.objects.utils.ObjectArrays;
 | 
				
			||||||
import speiger.src.collections.PACKAGE.utils.ITERATORS;
 | 
					import speiger.src.collections.PACKAGE.utils.ITERATORS;
 | 
				
			||||||
#if TYPE_OBJECT
 | 
					#if TYPE_OBJECT
 | 
				
			||||||
import speiger.src.collections.utils.Stack;
 | 
					import speiger.src.collections.utils.Stack;
 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
import speiger.src.collections.objects.utils.ObjectArrays;
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if PRIMITIVES && SPLIT_ITERATOR_FEATURE && STREAM_FEATURE
 | 
					#if PRIMITIVES && SPLIT_ITERATOR_FEATURE && STREAM_FEATURE
 | 
				
			||||||
import java.util.stream.JAVA_STREAM;
 | 
					import java.util.stream.JAVA_STREAM;
 | 
				
			||||||
@ -1043,6 +1042,7 @@ public class ARRAY_LIST KEY_GENERIC_TYPE extends ABSTRACT_LIST KEY_GENERIC_TYPE
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	@Primitive
 | 
						@Primitive
 | 
				
			||||||
	public Object[] toArray() {
 | 
						public Object[] toArray() {
 | 
				
			||||||
 | 
							if(size == 0) return ObjectArrays.EMPTY_ARRAY;
 | 
				
			||||||
		Object[] obj = new Object[size];
 | 
							Object[] obj = new Object[size];
 | 
				
			||||||
		for(int i = 0;i<size;i++)
 | 
							for(int i = 0;i<size;i++)
 | 
				
			||||||
			obj[i] = KEY_TO_OBJ(data[i]);
 | 
								obj[i] = KEY_TO_OBJ(data[i]);
 | 
				
			||||||
 | 
				
			|||||||
@ -42,11 +42,10 @@ import speiger.src.collections.PACKAGE.functions.function.PREDICATE;
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
import speiger.src.collections.PACKAGE.functions.function.UNARY_OPERATOR;
 | 
					import speiger.src.collections.PACKAGE.functions.function.UNARY_OPERATOR;
 | 
				
			||||||
import speiger.src.collections.PACKAGE.utils.ARRAYS;
 | 
					import speiger.src.collections.PACKAGE.utils.ARRAYS;
 | 
				
			||||||
 | 
					import speiger.src.collections.objects.utils.ObjectArrays;
 | 
				
			||||||
import speiger.src.collections.PACKAGE.utils.ITERATORS;
 | 
					import speiger.src.collections.PACKAGE.utils.ITERATORS;
 | 
				
			||||||
#if TYPE_OBJECT
 | 
					#if TYPE_OBJECT
 | 
				
			||||||
import speiger.src.collections.utils.Stack;
 | 
					import speiger.src.collections.utils.Stack;
 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
import speiger.src.collections.objects.utils.ObjectArrays;
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if PRIMITIVES && STREAM_FEATURE && SPLIT_ITERATOR_FEATURE
 | 
					#if PRIMITIVES && STREAM_FEATURE && SPLIT_ITERATOR_FEATURE
 | 
				
			||||||
import java.util.stream.JAVA_STREAM;
 | 
					import java.util.stream.JAVA_STREAM;
 | 
				
			||||||
@ -1291,6 +1290,7 @@ public class COPY_ON_WRITE_LIST KEY_GENERIC_TYPE extends ABSTRACT_LIST KEY_GENER
 | 
				
			|||||||
	public Object[] toArray() {
 | 
						public Object[] toArray() {
 | 
				
			||||||
		KEY_TYPE[] data = this.data;
 | 
							KEY_TYPE[] data = this.data;
 | 
				
			||||||
		int size = data.length;
 | 
							int size = data.length;
 | 
				
			||||||
 | 
							if(size == 0) return ObjectArrays.EMPTY_ARRAY;
 | 
				
			||||||
		Object[] obj = new Object[size];
 | 
							Object[] obj = new Object[size];
 | 
				
			||||||
		for(int i = 0;i<size;i++)
 | 
							for(int i = 0;i<size;i++)
 | 
				
			||||||
			obj[i] = KEY_TO_OBJ(data[i]);
 | 
								obj[i] = KEY_TO_OBJ(data[i]);
 | 
				
			||||||
 | 
				
			|||||||
@ -446,6 +446,7 @@ public class IMMUTABLE_LIST KEY_GENERIC_TYPE extends ABSTRACT_LIST KEY_GENERIC_T
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	@Primitive
 | 
						@Primitive
 | 
				
			||||||
	public Object[] toArray() {
 | 
						public Object[] toArray() {
 | 
				
			||||||
 | 
							if(data.length == 0) return ObjectArrays.EMPTY_ARRAY;
 | 
				
			||||||
		Object[] obj = new Object[data.length];
 | 
							Object[] obj = new Object[data.length];
 | 
				
			||||||
		for(int i = 0,m=data.length;i<m;i++)
 | 
							for(int i = 0,m=data.length;i<m;i++)
 | 
				
			||||||
			obj[i] = KEY_TO_OBJ(data[i]);
 | 
								obj[i] = KEY_TO_OBJ(data[i]);
 | 
				
			||||||
 | 
				
			|||||||
@ -54,10 +54,9 @@ import speiger.src.collections.PACKAGE.functions.COMPARATOR;
 | 
				
			|||||||
import speiger.src.collections.PACKAGE.functions.CONSUMER;
 | 
					import speiger.src.collections.PACKAGE.functions.CONSUMER;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
import speiger.src.collections.PACKAGE.utils.ARRAYS;
 | 
					import speiger.src.collections.PACKAGE.utils.ARRAYS;
 | 
				
			||||||
 | 
					import speiger.src.collections.objects.utils.ObjectArrays;
 | 
				
			||||||
#if TYPE_OBJECT
 | 
					#if TYPE_OBJECT
 | 
				
			||||||
import speiger.src.collections.utils.Stack;
 | 
					import speiger.src.collections.utils.Stack;
 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
import speiger.src.collections.objects.utils.ObjectArrays;
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if PRIMITIVES
 | 
					#if PRIMITIVES
 | 
				
			||||||
import java.util.stream.JAVA_STREAM;
 | 
					import java.util.stream.JAVA_STREAM;
 | 
				
			||||||
@ -967,6 +966,7 @@ public class LINKED_LIST KEY_GENERIC_TYPE extends ABSTRACT_LIST KEY_GENERIC_TYPE
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public Object[] toArray() {
 | 
						public Object[] toArray() {
 | 
				
			||||||
 | 
							if(size == 0) return ObjectArrays.EMPTY_ARRAY;
 | 
				
			||||||
		Object[] obj = new Object[size];
 | 
							Object[] obj = new Object[size];
 | 
				
			||||||
		int i = 0;
 | 
							int i = 0;
 | 
				
			||||||
		for(Entry KEY_GENERIC_TYPE entry = first;entry != null;entry = entry.next) {
 | 
							for(Entry KEY_GENERIC_TYPE entry = first;entry != null;entry = entry.next) {
 | 
				
			||||||
 | 
				
			|||||||
@ -551,6 +551,7 @@ public class ARRAY_SET KEY_GENERIC_TYPE extends ABSTRACT_SET KEY_GENERIC_TYPE im
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	@Deprecated
 | 
						@Deprecated
 | 
				
			||||||
	public Object[] toArray() {
 | 
						public Object[] toArray() {
 | 
				
			||||||
 | 
							if(isEmpty()) return ObjectArrays.EMPTY_ARRAY;
 | 
				
			||||||
		Object[] obj = new Object[size()];
 | 
							Object[] obj = new Object[size()];
 | 
				
			||||||
		for(int i = 0;i<size();i++)
 | 
							for(int i = 0;i<size();i++)
 | 
				
			||||||
			obj[i] = KEY_TO_OBJ(data[i]);
 | 
								obj[i] = KEY_TO_OBJ(data[i]);
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,11 @@
 | 
				
			|||||||
package speiger.src.collections.PACKAGE.utils;
 | 
					package speiger.src.collections.PACKAGE.utils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.Arrays;
 | 
					import java.util.Arrays;
 | 
				
			||||||
import java.util.Random;
 | 
					#if JAVA_VERSION>=17
 | 
				
			||||||
 | 
					import java.util.random.RANDOM;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					import java.util.RANDOM;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
import java.util.concurrent.RecursiveAction;
 | 
					import java.util.concurrent.RecursiveAction;
 | 
				
			||||||
#if !TYPE_OBJECT
 | 
					#if !TYPE_OBJECT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -292,7 +296,7 @@ public class ARRAYS
 | 
				
			|||||||
	 * @ArrayType(T)
 | 
						 * @ArrayType(T)
 | 
				
			||||||
	 * @return the provided sorted array
 | 
						 * @return the provided sorted array
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public static GENERIC_KEY_BRACES KEY_TYPE[] shuffle(KEY_TYPE[] array, Random random) {
 | 
						public static GENERIC_KEY_BRACES KEY_TYPE[] shuffle(KEY_TYPE[] array, RANDOM random) {
 | 
				
			||||||
		for(int i = array.length-1; i>=0;i--) {
 | 
							for(int i = array.length-1; i>=0;i--) {
 | 
				
			||||||
			int p = random.nextInt(i + 1);
 | 
								int p = random.nextInt(i + 1);
 | 
				
			||||||
			KEY_TYPE t = array[i];
 | 
								KEY_TYPE t = array[i];
 | 
				
			||||||
@ -310,7 +314,7 @@ public class ARRAYS
 | 
				
			|||||||
	 * @ArrayType(T)
 | 
						 * @ArrayType(T)
 | 
				
			||||||
	 * @return the provided sorted array
 | 
						 * @return the provided sorted array
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public static GENERIC_KEY_BRACES KEY_TYPE[] shuffle(KEY_TYPE[] array, int length, Random random) {
 | 
						public static GENERIC_KEY_BRACES KEY_TYPE[] shuffle(KEY_TYPE[] array, int length, RANDOM random) {
 | 
				
			||||||
		return shuffle(array, 0, length, random);
 | 
							return shuffle(array, 0, length, random);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
@ -323,7 +327,7 @@ public class ARRAYS
 | 
				
			|||||||
	 * @ArrayType(T)
 | 
						 * @ArrayType(T)
 | 
				
			||||||
	 * @return the provided sorted array
 | 
						 * @return the provided sorted array
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public static GENERIC_KEY_BRACES KEY_TYPE[] shuffle(KEY_TYPE[] array, int offset, int length, Random random) {
 | 
						public static GENERIC_KEY_BRACES KEY_TYPE[] shuffle(KEY_TYPE[] array, int offset, int length, RANDOM random) {
 | 
				
			||||||
		for(int i = length-1; i>=0;i--) {
 | 
							for(int i = length-1; i>=0;i--) {
 | 
				
			||||||
			int p = offset + random.nextInt(i + 1);
 | 
								int p = offset + random.nextInt(i + 1);
 | 
				
			||||||
			KEY_TYPE t = array[offset+i];
 | 
								KEY_TYPE t = array[offset+i];
 | 
				
			||||||
 | 
				
			|||||||
@ -12,6 +12,7 @@ import java.util.function.Consumer;
 | 
				
			|||||||
import speiger.src.collections.PACKAGE.functions.CONSUMER;
 | 
					import speiger.src.collections.PACKAGE.functions.CONSUMER;
 | 
				
			||||||
import speiger.src.collections.PACKAGE.functions.COMPARATOR;
 | 
					import speiger.src.collections.PACKAGE.functions.COMPARATOR;
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
 | 
					import java.util.function.IntFunction;
 | 
				
			||||||
import java.util.function.BiFunction;
 | 
					import java.util.function.BiFunction;
 | 
				
			||||||
import java.util.Comparator;
 | 
					import java.util.Comparator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -69,6 +70,7 @@ import speiger.src.collections.objects.utils.ObjectAsyncBuilder.BaseObjectTask;
 | 
				
			|||||||
import speiger.src.collections.ints.utils.IntAsyncBuilder;
 | 
					import speiger.src.collections.ints.utils.IntAsyncBuilder;
 | 
				
			||||||
import speiger.src.collections.ints.utils.IntAsyncBuilder.BaseIntTask;
 | 
					import speiger.src.collections.ints.utils.IntAsyncBuilder.BaseIntTask;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					import speiger.src.collections.utils.ISizeProvider;
 | 
				
			||||||
import speiger.src.collections.utils.SanityChecks;
 | 
					import speiger.src.collections.utils.SanityChecks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@ -292,6 +294,26 @@ public class ASYNC_BUILDER KEY_GENERIC_TYPE
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if OBJECT_ASYNC_MODULE
 | 
					#if OBJECT_ASYNC_MODULE
 | 
				
			||||||
 | 
					#if TYPE_OBJECT
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Pours all elements of the Iterable down into a Array.
 | 
				
			||||||
 | 
						 * @param action creates the final array that should be copied into.
 | 
				
			||||||
 | 
						 * @return a new Builder with the ToArray function applied
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public ObjectAsyncBuilder<KEY_TYPE[]> TO_ARRAY(IntFunction<KEY_TYPE[]> action) {
 | 
				
			||||||
 | 
							return new ObjectAsyncBuilder<>(new ArrayTaskBRACES(iterable, action));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Pours all elements of the Iterable down into a Array.
 | 
				
			||||||
 | 
						 * @return a new Builder with the ToArray function applied
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public ObjectAsyncBuilder<KEY_TYPE[]> TO_ARRAY() {
 | 
				
			||||||
 | 
							return new ObjectAsyncBuilder<>(new ArrayTaskBRACES(iterable));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
#if ARRAY_LIST_FEATURE || LINKED_LIST_FEATURE
 | 
					#if ARRAY_LIST_FEATURE || LINKED_LIST_FEATURE
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Pours all elements into a List that can be later
 | 
						 * Pours all elements into a List that can be later
 | 
				
			||||||
@ -729,6 +751,51 @@ public class ASYNC_BUILDER KEY_GENERIC_TYPE
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						private static class ArrayTask KEY_GENERIC_TYPE extends BaseObjectTask<KEY_TYPE[]>
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							ITERATOR KEY_GENERIC_TYPE iter;
 | 
				
			||||||
 | 
							COLLECTIONS.CollectionWrapper KEY_GENERIC_TYPE wrapper;
 | 
				
			||||||
 | 
					#if TYPE_OBJECT
 | 
				
			||||||
 | 
							IntFunction<KEY_TYPE[]> builder;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							public ArrayTask(ITERABLE KEY_GENERIC_TYPE iterable, IntFunction<KEY_TYPE[]> builder) {
 | 
				
			||||||
 | 
								this.builder = builder;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
							public ArrayTask(ITERABLE KEY_GENERIC_TYPE iterable) {
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
								iter = iterable.iterator();
 | 
				
			||||||
 | 
								ISizeProvider prov = ISizeProvider.of(iterable);
 | 
				
			||||||
 | 
								int size = prov == null ? -1 : prov.size();
 | 
				
			||||||
 | 
								wrapper = size < 0 ? COLLECTIONS.wrapper() : COLLECTIONS.wrapper(size);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							@Override
 | 
				
			||||||
 | 
							protected boolean execute() throws Exception {
 | 
				
			||||||
 | 
								while(shouldRun() && iter.hasNext()) {
 | 
				
			||||||
 | 
									wrapper.add(iter.NEXT());
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if(!iter.hasNext()) {
 | 
				
			||||||
 | 
					#if TYPE_OBJECT
 | 
				
			||||||
 | 
									setResult(wrapper.TO_ARRAY(builder));
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
									setResult(wrapper.TO_ARRAY());
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
									wrapper = null;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return false;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							@Override
 | 
				
			||||||
 | 
							protected void onCompletion() {
 | 
				
			||||||
 | 
								super.onCompletion();
 | 
				
			||||||
 | 
								iter = null;
 | 
				
			||||||
 | 
					#if TYPE_OBJECT
 | 
				
			||||||
 | 
								builder = null;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	private static class ForEachTask<T> extends BaseObjectTask<Void>
 | 
						private static class ForEachTask<T> extends BaseObjectTask<Void>
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		ITERATOR KEY_GENERIC_TYPE iter;
 | 
							ITERATOR KEY_GENERIC_TYPE iter;
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,11 @@ import java.util.List;
 | 
				
			|||||||
#if IARRAY_FEATURE
 | 
					#if IARRAY_FEATURE
 | 
				
			||||||
import java.util.Objects;
 | 
					import java.util.Objects;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
import java.util.Random;
 | 
					#if JAVA_VERSION>=17
 | 
				
			||||||
 | 
					import java.util.random.RANDOM;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					import java.util.RANDOM;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
import java.util.RandomAccess;
 | 
					import java.util.RandomAccess;
 | 
				
			||||||
#if IARRAY_FEATURE || TYPE_OBJECT
 | 
					#if IARRAY_FEATURE || TYPE_OBJECT
 | 
				
			||||||
import java.util.function.Consumer;
 | 
					import java.util.function.Consumer;
 | 
				
			||||||
@ -157,7 +161,7 @@ public class LISTS
 | 
				
			|||||||
	 * @Type(T)
 | 
						 * @Type(T)
 | 
				
			||||||
	 * @return the input list
 | 
						 * @return the input list
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public static GENERIC_KEY_BRACES LIST KEY_GENERIC_TYPE shuffle(LIST KEY_GENERIC_TYPE list, Random random) {
 | 
						public static GENERIC_KEY_BRACES LIST KEY_GENERIC_TYPE shuffle(LIST KEY_GENERIC_TYPE list, RANDOM random) {
 | 
				
			||||||
		int size = list.size();
 | 
							int size = list.size();
 | 
				
			||||||
#if IARRAY_FEATURE
 | 
					#if IARRAY_FEATURE
 | 
				
			||||||
		if(list instanceof IARRAY) {
 | 
							if(list instanceof IARRAY) {
 | 
				
			||||||
 | 
				
			|||||||
@ -51,15 +51,7 @@ public class HashUtil
 | 
				
			|||||||
	 * @return the input number rounded up to the next power of two
 | 
						 * @return the input number rounded up to the next power of two
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public static int nextPowerOfTwo(int x) {
 | 
						public static int nextPowerOfTwo(int x) {
 | 
				
			||||||
		if(x != 0) {
 | 
							return 1 << (32 - Integer.numberOfLeadingZeros(x - 1));
 | 
				
			||||||
			x--;
 | 
					 | 
				
			||||||
			x |= x >> 1;
 | 
					 | 
				
			||||||
			x |= x >> 2;
 | 
					 | 
				
			||||||
			x |= x >> 4;
 | 
					 | 
				
			||||||
			x |= x >> 8;
 | 
					 | 
				
			||||||
			x |= x >> 16;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return x + 1;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
@ -69,16 +61,7 @@ public class HashUtil
 | 
				
			|||||||
	 * @return the input number rounded up to the next power of two
 | 
						 * @return the input number rounded up to the next power of two
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public static long nextPowerOfTwo(long x) {
 | 
						public static long nextPowerOfTwo(long x) {
 | 
				
			||||||
		if(x != 0) {
 | 
							return 1L << (64 - Long.numberOfLeadingZeros(x - 1));
 | 
				
			||||||
			x--;
 | 
					 | 
				
			||||||
			x |= x >> 1;
 | 
					 | 
				
			||||||
			x |= x >> 2;
 | 
					 | 
				
			||||||
			x |= x >> 4;
 | 
					 | 
				
			||||||
			x |= x >> 8;
 | 
					 | 
				
			||||||
			x |= x >> 16;
 | 
					 | 
				
			||||||
			x |= x >> 32;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return x + 1L;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user