Compare commits
3 Commits
afdd27648e
...
20927a97eb
Author | SHA1 | Date | |
---|---|---|---|
20927a97eb | |||
ebe75b0fea | |||
a6be24c59d |
@ -30,10 +30,13 @@ There is 3 layers of control inside of the ModuleSettings.
|
|||||||
|
|
||||||
Allowing for greater control without having to edit hundreds of lines of code.
|
Allowing for greater control without having to edit hundreds of lines of code.
|
||||||
On top of that:
|
On top of that:
|
||||||
Any Setting that isn't "Present" is counted as "Enabled".
|
Any Setting that isn't "Present" can be defined as "Enabled" or "Disabled" using the "Default" argument.
|
||||||
|
If "Default" is missing, then it will just default to "Enabled".
|
||||||
So if you want to disable just 1 thing you can keep that 1 thing and delete the rest of the Setting.
|
So if you want to disable just 1 thing you can keep that 1 thing and delete the rest of the Setting.
|
||||||
It will still work as the same.
|
It will still work as the same.
|
||||||
The default settings just come with everything so you can see what is controllable.
|
The default settings just come with everything so you can see what is controllable.
|
||||||
|
Note: If a global Module setting is disabled but a dependency needs said Module, it will enable only the required classes.
|
||||||
|
If a Module type (Float-Collection as example) is specifically disabled, the Dependency Resolver will throw errors telling you whats wrong.
|
||||||
|
|
||||||
How to compile the Code with the ModuleSettings enabled:
|
How to compile the Code with the ModuleSettings enabled:
|
||||||
```
|
```
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"Default": true,
|
||||||
"Async": true,
|
"Async": true,
|
||||||
"Base": true,
|
"Base": true,
|
||||||
"Collection": true,
|
"Collection": true,
|
||||||
|
@ -128,6 +128,7 @@ public class PrimitiveCollectionsBuilder extends TemplateProcessor
|
|||||||
for(int i = 0,m=modules.size();i<m;i++) {
|
for(int i = 0,m=modules.size();i<m;i++) {
|
||||||
modules.get(i).setManager(manager);
|
modules.get(i).setManager(manager);
|
||||||
}
|
}
|
||||||
|
manager.resolve();
|
||||||
for(int i = 0,m=modules.size();i<m;i++) {
|
for(int i = 0,m=modules.size();i<m;i++) {
|
||||||
biPackages.forEach(modules.get(i)::init);
|
biPackages.forEach(modules.get(i)::init);
|
||||||
}
|
}
|
||||||
|
@ -1,54 +1,100 @@
|
|||||||
package speiger.src.builder;
|
package speiger.src.builder;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStreamWriter;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.TreeMap;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParser;
|
||||||
import com.google.gson.internal.Streams;
|
import com.google.gson.internal.Streams;
|
||||||
import com.google.gson.stream.JsonWriter;
|
import com.google.gson.stream.JsonWriter;
|
||||||
|
|
||||||
|
import speiger.src.builder.dependencies.IDependency;
|
||||||
|
import speiger.src.builder.dependencies.IDependency.LoadingState;
|
||||||
import speiger.src.builder.modules.BaseModule;
|
import speiger.src.builder.modules.BaseModule;
|
||||||
|
|
||||||
@SuppressWarnings("javadoc")
|
@SuppressWarnings("javadoc")
|
||||||
public class SettingsManager
|
public class SettingsManager
|
||||||
{
|
{
|
||||||
boolean loaded;
|
boolean loaded;
|
||||||
|
Map<String, LoadingState> parsedData = new TreeMap<>();
|
||||||
JsonObject data = new JsonObject();
|
JsonObject data = new JsonObject();
|
||||||
Set<String> moduleNames = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
|
Set<String> moduleNames = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
|
||||||
|
Set<IDependency> allDependencies = new LinkedHashSet<>();
|
||||||
|
|
||||||
public boolean isModuleEnabled(BaseModule base, ClassType keyType, ClassType valueType) {
|
public void resolve() {
|
||||||
if(!loaded) return true;
|
if(!loaded) return;
|
||||||
if(!isEnabled(data, base.getModuleName())) return false;
|
Set<IDependency> roots = new LinkedHashSet<>();
|
||||||
JsonObject result = getObject(data, keyType.getClassPath(), false);
|
Set<IDependency> leafs = new LinkedHashSet<>();
|
||||||
if(!isEnabled(result, "Enabled")) return false;
|
for(IDependency entry : allDependencies) {
|
||||||
if(base.isBiModule()) {
|
if(entry.isRoot()) {
|
||||||
result = getObject(result, valueType.getClassPath(), false);
|
roots.add(entry);
|
||||||
if(!isEnabled(result, "Enabled")) return false;
|
}
|
||||||
|
if(entry.isLeaf()) {
|
||||||
|
leafs.add(entry);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
result = getObject(result, base.getModuleName(), false);
|
/**
|
||||||
return (result.size() <= 0 || isEnabled(result, "Enabled")) && base.areDependenciesLoaded();
|
* This has to be 2 iteration passes.
|
||||||
}
|
* Due to Key Value Pairs, first pass does all initials keys, and the second pass processes the values.
|
||||||
|
* May require more passes but extremely unlikely
|
||||||
public boolean isModuleEnabled(BaseModule base, ClassType keyType, ClassType valueType, String entry)
|
*/
|
||||||
{
|
for(int i = 0;i<2;i++) {
|
||||||
if(!loaded) return true;
|
for(ClassType keyType : ModulePackage.TYPE) {
|
||||||
if(!isEnabled(data, base.getModuleName())) return false;
|
for(ClassType valueType : ModulePackage.TYPE) {
|
||||||
JsonObject result = getObject(data, keyType.getClassPath(), false);
|
for(IDependency entry : roots) {
|
||||||
if(!isEnabled(result, "Enabled")) return false;
|
entry.resolveRequirements(keyType, valueType);
|
||||||
if(base.isBiModule()) {
|
}
|
||||||
result = getObject(result, valueType.getClassPath(), false);
|
}
|
||||||
if(!isEnabled(result, "Enabled")) return false;
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> errors = new ArrayList<>();
|
||||||
|
for(ClassType keyType : ModulePackage.TYPE) {
|
||||||
|
for(ClassType valueType : ModulePackage.TYPE) {
|
||||||
|
for(IDependency entry : leafs) {
|
||||||
|
entry.validateDependency(errors::add, keyType, valueType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(errors.size() > 0) {
|
||||||
|
throw new IllegalStateException("Issues with dependencies found: "+String.join("\n", errors));
|
||||||
}
|
}
|
||||||
result = getObject(result, base.getModuleName(), false);
|
|
||||||
return (result.size() <= 0 || (isEnabled(result, "Enabled") && isEnabled(result, entry))) && base.areDependenciesLoaded();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addModule(BaseModule module) {
|
public void addModule(BaseModule module) {
|
||||||
if(loaded) return;
|
if(loaded) {
|
||||||
|
if(module.isBiModule()) {
|
||||||
|
for(ClassType keyType : ModulePackage.TYPE) {
|
||||||
|
for(ClassType valueType : ModulePackage.TYPE) {
|
||||||
|
if(!module.isModuleValid(keyType, valueType)) continue;
|
||||||
|
for(IDependency dependency : module.getDependencies(keyType, valueType)) {
|
||||||
|
dependency.set(parsedData);
|
||||||
|
allDependencies.add(dependency);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for(ClassType keyType : ModulePackage.TYPE) {
|
||||||
|
if(!module.isModuleValid(keyType, keyType)) continue;
|
||||||
|
for(IDependency dependency : module.getDependencies(keyType, keyType)) {
|
||||||
|
dependency.set(parsedData);
|
||||||
|
allDependencies.add(dependency);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
String moduleName = module.getModuleName();
|
String moduleName = module.getModuleName();
|
||||||
moduleNames.add(moduleName);
|
moduleNames.add(moduleName);
|
||||||
data.addProperty(moduleName, true);
|
data.addProperty(moduleName, true);
|
||||||
@ -57,9 +103,9 @@ public class SettingsManager
|
|||||||
for(ClassType valueType : ModulePackage.TYPE) {
|
for(ClassType valueType : ModulePackage.TYPE) {
|
||||||
if(!module.isModuleValid(keyType, valueType)) continue;
|
if(!module.isModuleValid(keyType, valueType)) continue;
|
||||||
JsonObject obj = new JsonObject();
|
JsonObject obj = new JsonObject();
|
||||||
obj.addProperty("Enabled", true);
|
for(IDependency dependency : module.getDependencies(keyType, valueType)) {
|
||||||
for(String key : module.getModuleKeys(keyType, valueType)) {
|
String key = dependency.getName();
|
||||||
obj.addProperty(key, true);
|
if(key != null) obj.addProperty(key, true);
|
||||||
}
|
}
|
||||||
addModule(keyType, valueType, true, moduleName, obj);
|
addModule(keyType, valueType, true, moduleName, obj);
|
||||||
}
|
}
|
||||||
@ -69,18 +115,61 @@ public class SettingsManager
|
|||||||
for(ClassType keyType : ModulePackage.TYPE) {
|
for(ClassType keyType : ModulePackage.TYPE) {
|
||||||
if(!module.isModuleValid(keyType, keyType)) continue;
|
if(!module.isModuleValid(keyType, keyType)) continue;
|
||||||
JsonObject obj = new JsonObject();
|
JsonObject obj = new JsonObject();
|
||||||
obj.addProperty("Enabled", true);
|
for(IDependency dependency : module.getDependencies(keyType, keyType)) {
|
||||||
for(String key : module.getModuleKeys(keyType, keyType)) {
|
String key = dependency.getName();
|
||||||
obj.addProperty(key, true);
|
if(key != null) obj.addProperty(key, true);
|
||||||
}
|
}
|
||||||
addModule(keyType, keyType, false, moduleName, obj);
|
addModule(keyType, keyType, false, moduleName, obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void printModuleSettings(List<BaseModule> modules) {
|
||||||
|
JsonObject data = new JsonObject();
|
||||||
|
for(BaseModule module : modules) {
|
||||||
|
String moduleName = module.getModuleName();
|
||||||
|
if(module.isBiModule()) {
|
||||||
|
for(ClassType keyType : ModulePackage.TYPE) {
|
||||||
|
for(ClassType valueType : ModulePackage.TYPE) {
|
||||||
|
if(!module.isModuleValid(keyType, valueType)) continue;
|
||||||
|
JsonObject obj = new JsonObject();
|
||||||
|
for(IDependency dependency : module.getDependencies(keyType, valueType)) {
|
||||||
|
String key = dependency.getName();
|
||||||
|
if(key != null) obj.addProperty(key, dependency.isLoaded(keyType, valueType).getJsonResult());
|
||||||
|
}
|
||||||
|
addModule(data, keyType, valueType, true, moduleName, obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for(ClassType keyType : ModulePackage.TYPE) {
|
||||||
|
if(!module.isModuleValid(keyType, keyType)) continue;
|
||||||
|
JsonObject obj = new JsonObject();
|
||||||
|
for(IDependency dependency : module.getDependencies(keyType, keyType)) {
|
||||||
|
String key = dependency.getName();
|
||||||
|
if(key != null) obj.addProperty(key, dependency.isLoaded(keyType, keyType).getJsonResult());
|
||||||
|
}
|
||||||
|
addModule(data, keyType, keyType, false, moduleName, obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
System.out.println();
|
||||||
|
JsonWriter writer = new JsonWriter(new OutputStreamWriter(System.out));
|
||||||
|
writer.setIndent("\t");
|
||||||
|
Streams.write(data, writer);
|
||||||
|
writer.flush();
|
||||||
|
System.out.println();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void load() {
|
public void load() {
|
||||||
try(BufferedReader reader = Files.newBufferedReader(Paths.get("ModulSettings.json"))) {
|
try(BufferedReader reader = Files.newBufferedReader(Paths.get("ModulSettings.json"))) {
|
||||||
data = JsonParser.parseReader(reader).getAsJsonObject();
|
data = JsonParser.parseReader(reader).getAsJsonObject();
|
||||||
loaded = true;
|
loaded = true;
|
||||||
|
IDependency.flatten("", false, data, parsedData);
|
||||||
|
JsonElement element = data.get("Default");
|
||||||
|
LoadingState.setOptionalResolver(LoadingState.of(element == null ? true : element.getAsBoolean()));
|
||||||
}
|
}
|
||||||
catch(Exception e) { e.printStackTrace(); }
|
catch(Exception e) { e.printStackTrace(); }
|
||||||
}
|
}
|
||||||
@ -100,6 +189,14 @@ public class SettingsManager
|
|||||||
catch(Exception e) { e.printStackTrace(); }
|
catch(Exception e) { e.printStackTrace(); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void addModule(JsonObject data, ClassType keyType, ClassType valueType, boolean bi, String moduleName, JsonObject obj) {
|
||||||
|
JsonObject result = getObject(data, keyType.getClassPath(), true);
|
||||||
|
if(bi) {
|
||||||
|
result = getObject(result, valueType.getClassPath(), true);
|
||||||
|
}
|
||||||
|
result.add(moduleName, obj);
|
||||||
|
}
|
||||||
|
|
||||||
private void addModule(ClassType keyType, ClassType valueType, boolean bi, String moduleName, JsonObject obj) {
|
private void addModule(ClassType keyType, ClassType valueType, boolean bi, String moduleName, JsonObject obj) {
|
||||||
JsonObject result = getObject(data, keyType.getClassPath(), true);
|
JsonObject result = getObject(data, keyType.getClassPath(), true);
|
||||||
if(bi) {
|
if(bi) {
|
||||||
@ -117,9 +214,4 @@ public class SettingsManager
|
|||||||
}
|
}
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isEnabled(JsonObject obj, String key) {
|
|
||||||
if(obj.has(key)) return obj.getAsJsonPrimitive(key).getAsBoolean();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,137 @@
|
|||||||
|
package speiger.src.builder.dependencies;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.StringJoiner;
|
||||||
|
import java.util.TreeSet;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import speiger.src.builder.ClassType;
|
||||||
|
import speiger.src.builder.dependencies.Requirements.Requirement;
|
||||||
|
|
||||||
|
@SuppressWarnings("javadoc")
|
||||||
|
public abstract class BaseDependency implements IDependency {
|
||||||
|
protected static boolean FETCH_FAILURES = false;
|
||||||
|
protected static Set<String> FAILURE_KEYS = new TreeSet<>();
|
||||||
|
|
||||||
|
protected final String name;
|
||||||
|
protected final boolean biType;
|
||||||
|
protected Map<String, LoadingState> dependencies;
|
||||||
|
protected List<IDependency> children = new ArrayList<>();
|
||||||
|
protected List<Requirement> requirements = new ArrayList<>();
|
||||||
|
protected ClassType keyType;
|
||||||
|
protected ClassType valueType;
|
||||||
|
|
||||||
|
public BaseDependency(String name, boolean biType) {
|
||||||
|
this.name = name;
|
||||||
|
this.biType = biType;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void set(Map<String, LoadingState> dependency) {
|
||||||
|
dependencies = dependency;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IDependency addDependency(Requirement require) {
|
||||||
|
requirements.add(require);
|
||||||
|
require.dependency.addChild(this);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addChild(IDependency child) {
|
||||||
|
children.add(child);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isLeaf() {
|
||||||
|
return children.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isRoot() {
|
||||||
|
return requirements.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected LoadingState getGlobalState() {
|
||||||
|
return dependencies.getOrDefault(name, LoadingState.OPTIONAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getLocalStateKey(ClassType keyType, ClassType valueType) {
|
||||||
|
return (biType ? keyType.getClassPath()+"-"+valueType.getClassPath() : keyType.getClassPath())+"-"+name;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected LoadingState getLocalState(ClassType keyType, ClassType valueType) {
|
||||||
|
return dependencies.getOrDefault(getLocalStateKey(keyType, valueType), LoadingState.OPTIONAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected LoadingState getReqirementState(ClassType keyType, ClassType valueType) {
|
||||||
|
LoadingState state = requirements.isEmpty() ? LoadingState.REQUIRED : LoadingState.OPTIONAL;
|
||||||
|
for(int i = 0,m=requirements.size();i<m;i++) {
|
||||||
|
state = state.merge(requirements.get(i).test(keyType, valueType));
|
||||||
|
}
|
||||||
|
return state.resolveIfUndefined();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resolveRequirements(ClassType keyType, ClassType valueType) {
|
||||||
|
if(!children.isEmpty()) {
|
||||||
|
for(IDependency child : children) {
|
||||||
|
if(child == this) continue;
|
||||||
|
child.resolveRequirements(keyType, valueType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(getLocalState(keyType, valueType) == LoadingState.REQUIRED) {
|
||||||
|
for(Requirement req : requirements) {
|
||||||
|
dependencies.putIfAbsent(req.key(keyType, valueType), LoadingState.REQUIRED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void validateDependency(Consumer<String> result, ClassType keyType, ClassType valueType) {
|
||||||
|
if(getLocalState(keyType, valueType) == LoadingState.REQUIRED) {
|
||||||
|
FETCH_FAILURES = true;
|
||||||
|
for(Requirement req : requirements) {
|
||||||
|
req.test(keyType, valueType);
|
||||||
|
}
|
||||||
|
FETCH_FAILURES = false;
|
||||||
|
if(FAILURE_KEYS.size() > 0) {
|
||||||
|
int size = FAILURE_KEYS.size();
|
||||||
|
StringJoiner joiner = new StringJoiner("], [", "[", "]");
|
||||||
|
FAILURE_KEYS.forEach(joiner::add);
|
||||||
|
FAILURE_KEYS.clear();
|
||||||
|
String joins = size > 1 ? "["+joiner.toString()+"]" : joiner.toString();
|
||||||
|
|
||||||
|
result.accept("["+getLocalStateKey(keyType, valueType)+"] Requires "+joins+" but it specifically has been disabled!");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void set(ClassType key, ClassType value) {
|
||||||
|
this.keyType = key;
|
||||||
|
this.valueType = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnabled() {
|
||||||
|
if(keyType == null || keyType == null) return false;
|
||||||
|
return isLoaded(keyType, valueType).getJsonResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package speiger.src.builder.dependencies;
|
||||||
|
|
||||||
|
import speiger.src.builder.ClassType;
|
||||||
|
|
||||||
|
@SuppressWarnings("javadoc")
|
||||||
|
public class FunctionDependency extends BaseDependency {
|
||||||
|
ModuleDependency owner;
|
||||||
|
|
||||||
|
public FunctionDependency(ModuleDependency owner, String name) {
|
||||||
|
super(name, owner.biType);
|
||||||
|
this.owner = owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LoadingState isLoaded(ClassType key, ClassType value) {
|
||||||
|
if(dependencies == null) return LoadingState.REQUIRED;
|
||||||
|
LoadingState result = getLocalState(key, value);
|
||||||
|
if(FETCH_FAILURES && result == LoadingState.REJECTED) {
|
||||||
|
FAILURE_KEYS.add(getLocalStateKey(key, value));
|
||||||
|
}
|
||||||
|
return result.resolveIfUndefined().merge(getReqirementState(key, value));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getLocalStateKey(ClassType keyType, ClassType valueType) {
|
||||||
|
return (biType ? keyType.getClassPath()+"-"+valueType.getClassPath() : keyType.getClassPath())+"-"+owner.getName()+"-"+name;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,104 @@
|
|||||||
|
package speiger.src.builder.dependencies;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonPrimitive;
|
||||||
|
|
||||||
|
import speiger.src.builder.ClassType;
|
||||||
|
import speiger.src.builder.dependencies.Requirements.Requirement;
|
||||||
|
|
||||||
|
@SuppressWarnings("javadoc")
|
||||||
|
public interface IDependency {
|
||||||
|
|
||||||
|
|
||||||
|
public void set(Map<String, LoadingState> dependency);
|
||||||
|
public void set(ClassType key, ClassType value);
|
||||||
|
public LoadingState isLoaded(ClassType key, ClassType value);
|
||||||
|
public String getLocalStateKey(ClassType keyType, ClassType valueType);
|
||||||
|
public boolean isEnabled();
|
||||||
|
public boolean isLeaf();
|
||||||
|
public boolean isRoot();
|
||||||
|
|
||||||
|
public String getName();
|
||||||
|
public void validateDependency(Consumer<String> result, ClassType keyType, ClassType valueType);
|
||||||
|
public void resolveRequirements(ClassType keyType, ClassType valueType);
|
||||||
|
|
||||||
|
public void addChild(IDependency child);
|
||||||
|
public <T extends IDependency> T addDependency(Requirement require);
|
||||||
|
public default <T extends IDependency> T addKeyDependency(IDependency dependency) { return addDependency(new Requirement(dependency, Requirements.KEY_TEST, Requirements.KEY_GETTER)); }
|
||||||
|
public default <T extends IDependency> T addValueDependency(IDependency dependency) { return addDependency(new Requirement(dependency, Requirements.VALUE_TEST, Requirements.VALUE_GETTER)); }
|
||||||
|
public default <T extends IDependency> T addEntryDependency(IDependency dependency) { return addDependency(new Requirement(dependency, Requirements.ENTRY_TEST, Requirements.ENTRY_GETTER)); }
|
||||||
|
public default <T extends IDependency> T addTypeDependency(IDependency dependency, ClassType type) { return addDependency(new Requirement(dependency, Requirements.typedTest(type), Requirements.typedKey(type))); }
|
||||||
|
public default <T extends IDependency> T addOptionalTypeDependency(IDependency dependency, ClassType type, boolean key) { return addDependency(new Requirement(dependency, Requirements.optionalTest(type, key), Requirements.optionalKey(type, key))); }
|
||||||
|
public default <T extends IDependency> T addOptionalTypeDependency(ClassType type, boolean key) { return addDependency(new Requirement(this, Requirements.optionalTest(type, key), Requirements.optionalKey(type, key))); }
|
||||||
|
|
||||||
|
|
||||||
|
public static void flatten(String prefix, boolean applyMiddle, JsonObject object, Map<String, LoadingState> result) {
|
||||||
|
if(applyMiddle) prefix+="-";
|
||||||
|
for(Entry<String, JsonElement> entry : object.entrySet()) {
|
||||||
|
String key = entry.getKey();
|
||||||
|
JsonElement value = entry.getValue();
|
||||||
|
if(value instanceof JsonPrimitive) {
|
||||||
|
String entryKey = prefix+key;
|
||||||
|
if("Enabled".equalsIgnoreCase(key)) {
|
||||||
|
entryKey = prefix.substring(0, prefix.length()-1);
|
||||||
|
}
|
||||||
|
result.put(entryKey, LoadingState.of(((JsonPrimitive)value).getAsBoolean()));
|
||||||
|
}
|
||||||
|
if(value instanceof JsonObject) {
|
||||||
|
flatten(prefix+key, true, (JsonObject)value, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static enum LoadingState {
|
||||||
|
OPTIONAL,
|
||||||
|
REQUIRED,
|
||||||
|
REJECTED;
|
||||||
|
|
||||||
|
private static LoadingState RESOLVED = LoadingState.REQUIRED;
|
||||||
|
|
||||||
|
public static LoadingState of(boolean value) {
|
||||||
|
return value ? REQUIRED : REJECTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LoadingState merge(LoadingState merge) {
|
||||||
|
return ordinal() > merge.ordinal() ? this : merge;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LoadingState replaceIfUndefined(LoadingState state) {
|
||||||
|
return this == OPTIONAL ? state : this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LoadingState resolveIfUndefined() {
|
||||||
|
return this == OPTIONAL ? RESOLVED : this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LoadingState mergeDown(LoadingState merge) {
|
||||||
|
if(merge == REJECTED || ordinal() > merge.ordinal()) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
return merge;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LoadingState mergeUp(LoadingState merge) {
|
||||||
|
if(merge == REQUIRED || ordinal() > merge.ordinal()) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
return merge;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setOptionalResolver(LoadingState state) {
|
||||||
|
RESOLVED = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getJsonResult() {
|
||||||
|
LoadingState state = this == OPTIONAL ? RESOLVED : this;
|
||||||
|
return state == REQUIRED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
package speiger.src.builder.dependencies;
|
||||||
|
|
||||||
|
import speiger.src.builder.ClassType;
|
||||||
|
import speiger.src.builder.modules.BaseModule;
|
||||||
|
|
||||||
|
@SuppressWarnings("javadoc")
|
||||||
|
public class ModuleDependency extends BaseDependency {
|
||||||
|
BaseModule owner;
|
||||||
|
|
||||||
|
public ModuleDependency(BaseModule owner, boolean biType) {
|
||||||
|
super(owner.getModuleName(), biType);
|
||||||
|
this.owner = owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FunctionDependency createDependency(String name) {
|
||||||
|
FunctionDependency result = new FunctionDependency(this, name);
|
||||||
|
if(biType) result.addEntryDependency(this);
|
||||||
|
else result.addKeyDependency(this);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LoadingState isLoaded(ClassType key, ClassType value) {
|
||||||
|
if(dependencies == null) return LoadingState.REQUIRED;
|
||||||
|
LoadingState result = getLocalState(key, value);
|
||||||
|
if(FETCH_FAILURES && result == LoadingState.REJECTED) {
|
||||||
|
FAILURE_KEYS.add(getLocalStateKey(key, value));
|
||||||
|
}
|
||||||
|
return result.replaceIfUndefined(getGlobalState()).resolveIfUndefined().merge(getReqirementState(key, value));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
package speiger.src.builder.dependencies;
|
||||||
|
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import speiger.src.builder.ClassType;
|
||||||
|
import speiger.src.builder.dependencies.IDependency.LoadingState;
|
||||||
|
|
||||||
|
@SuppressWarnings("javadoc")
|
||||||
|
public class Requirements {
|
||||||
|
public static final RequirementTest KEY_TEST = (T, K, V) -> T.isLoaded(K, K);
|
||||||
|
public static final RequirementTest VALUE_TEST = (T, K, V) -> T.isLoaded(V, V);
|
||||||
|
public static final RequirementTest ENTRY_TEST = (T, K, V) -> T.isLoaded(K, V);
|
||||||
|
|
||||||
|
public static RequirementTest typedTest(ClassType type) {
|
||||||
|
return (T, K, V) -> T.isLoaded(type, type);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RequirementTest optionalTest(ClassType type, boolean key) {
|
||||||
|
return (T, K, V) -> (key ? K : V) != type ? T.isLoaded(type, type) : LoadingState.REQUIRED;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final RequirementKey KEY_GETTER = (T, K, V) -> T.getLocalStateKey(K, K);
|
||||||
|
public static final RequirementKey VALUE_GETTER = (T, K, V) -> T.getLocalStateKey(V, V);
|
||||||
|
public static final RequirementKey ENTRY_GETTER = (T, K, V) -> T.getLocalStateKey(K, V);
|
||||||
|
|
||||||
|
public static RequirementKey typedKey(ClassType type) {
|
||||||
|
return (T, K, V) -> T.getLocalStateKey(type, type);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RequirementKey optionalKey(ClassType type, boolean key) {
|
||||||
|
return (T, K, V) -> (key ? K : V) != type ? T.getLocalStateKey(type, type) : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public interface RequirementTest {
|
||||||
|
public LoadingState test(IDependency test, ClassType keyType, ClassType valueType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static interface RequirementKey {
|
||||||
|
public String key(IDependency test, ClassType keyType, ClassType valueType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static interface RequirementResolver {
|
||||||
|
public void resolve(IDependency test, Consumer<String> result, ClassType keyType, ClassType valueType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Requirement {
|
||||||
|
IDependency dependency;
|
||||||
|
RequirementTest test;
|
||||||
|
RequirementKey key;
|
||||||
|
|
||||||
|
public Requirement(IDependency dependency, RequirementTest test, RequirementKey key) {
|
||||||
|
this.dependency = dependency;
|
||||||
|
this.test = test;
|
||||||
|
this.key = key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LoadingState test(ClassType keyType, ClassType valueType) {
|
||||||
|
return test.test(dependency, keyType, valueType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String key(ClassType keyType, ClassType valueType) {
|
||||||
|
return key.key(dependency, keyType, valueType);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -1,9 +1,17 @@
|
|||||||
package speiger.src.builder.modules;
|
package speiger.src.builder.modules;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import speiger.src.builder.ClassType;
|
||||||
|
import speiger.src.builder.dependencies.IDependency;
|
||||||
|
import speiger.src.builder.dependencies.ModuleDependency;
|
||||||
|
|
||||||
@SuppressWarnings("javadoc")
|
@SuppressWarnings("javadoc")
|
||||||
public class AsyncModule extends BaseModule
|
public class AsyncModule extends BaseModule
|
||||||
{
|
{
|
||||||
public static final BaseModule INSTANCE = new AsyncModule();
|
public static final BaseModule INSTANCE = new AsyncModule();
|
||||||
|
public static final ModuleDependency MODULE = new ModuleDependency(INSTANCE, false).addKeyDependency(JavaModule.MODULE);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getModuleName() { return "Async"; }
|
public String getModuleName() { return "Async"; }
|
||||||
@ -16,16 +24,16 @@ public class AsyncModule extends BaseModule
|
|||||||
@Override
|
@Override
|
||||||
protected void loadFunctions() {}
|
protected void loadFunctions() {}
|
||||||
@Override
|
@Override
|
||||||
public boolean areDependenciesLoaded() { return isDependencyLoaded(CollectionModule.INSTANCE); }
|
public List<IDependency> getDependencies(ClassType keyType, ClassType valueType) { return Arrays.asList(MODULE); }
|
||||||
@Override
|
@Override
|
||||||
protected void loadBlockades() {
|
protected void loadBlockades() {
|
||||||
if(!isModuleEnabled()) {
|
if(!MODULE.isEnabled()) {
|
||||||
addBlockedFiles("AsyncBuilder", "Task");
|
addBlockedFiles("AsyncBuilder", "Task");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
protected void loadFlags() {
|
protected void loadFlags() {
|
||||||
if(isModuleEnabled()) {
|
if(MODULE.isEnabled()) {
|
||||||
addKeyFlag("ASYNC_MODULE");
|
addKeyFlag("ASYNC_MODULE");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
package speiger.src.builder.modules;
|
package speiger.src.builder.modules;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Set;
|
import java.util.List;
|
||||||
|
import java.util.function.Consumer;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
import speiger.src.builder.ClassType;
|
import speiger.src.builder.ClassType;
|
||||||
import speiger.src.builder.ModulePackage;
|
import speiger.src.builder.ModulePackage;
|
||||||
import speiger.src.builder.RequiredType;
|
import speiger.src.builder.RequiredType;
|
||||||
import speiger.src.builder.SettingsManager;
|
import speiger.src.builder.SettingsManager;
|
||||||
|
import speiger.src.builder.dependencies.IDependency;
|
||||||
import speiger.src.builder.mappers.ArgumentMapper;
|
import speiger.src.builder.mappers.ArgumentMapper;
|
||||||
import speiger.src.builder.mappers.InjectMapper;
|
import speiger.src.builder.mappers.InjectMapper;
|
||||||
import speiger.src.builder.mappers.LineMapper;
|
import speiger.src.builder.mappers.LineMapper;
|
||||||
@ -30,6 +32,9 @@ public abstract class BaseModule
|
|||||||
this.entry = entry;
|
this.entry = entry;
|
||||||
keyType = entry.getKeyType();
|
keyType = entry.getKeyType();
|
||||||
valueType = entry.getValueType();
|
valueType = entry.getValueType();
|
||||||
|
for(IDependency dependency : getDependencies(keyType, valueType)) {
|
||||||
|
dependency.set(keyType, valueType);
|
||||||
|
}
|
||||||
loadVariables();
|
loadVariables();
|
||||||
loadClasses();
|
loadClasses();
|
||||||
loadTestClasses();
|
loadTestClasses();
|
||||||
@ -56,32 +61,12 @@ public abstract class BaseModule
|
|||||||
|
|
||||||
public abstract String getModuleName();
|
public abstract String getModuleName();
|
||||||
public boolean isBiModule() { return false; }
|
public boolean isBiModule() { return false; }
|
||||||
public Set<String> getModuleKeys(ClassType keyType, ClassType valueType) { return Collections.emptySet(); }
|
public List<IDependency> getDependencies(ClassType keyType, ClassType valueType) { return Collections.emptyList(); }
|
||||||
public boolean isModuleValid(ClassType keyType, ClassType valueType) { return true; }
|
public boolean isModuleValid(ClassType keyType, ClassType valueType) { return true; }
|
||||||
|
|
||||||
public ClassType keyType() { return keyType; }
|
public ClassType keyType() { return keyType; }
|
||||||
public ClassType valueType() { return valueType; }
|
public ClassType valueType() { return valueType; }
|
||||||
|
|
||||||
protected boolean isModuleEnabled() {
|
|
||||||
return manager == null || manager.isModuleEnabled(this, keyType, valueType);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected boolean isModuleEnabled(String name) {
|
|
||||||
return manager == null || manager.isModuleEnabled(this, keyType, valueType, name);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected boolean isDependencyLoaded(BaseModule module) {
|
|
||||||
return isDependencyLoaded(module, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected boolean isDependencyLoaded(BaseModule module, boolean key) {
|
|
||||||
return manager == null || (module.isBiModule() ? manager.isModuleEnabled(module, keyType, valueType) : (key ? manager.isModuleEnabled(module, keyType, keyType) : manager.isModuleEnabled(module, valueType, valueType)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean areDependenciesLoaded() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void addFlag(String name) {
|
protected void addFlag(String name) {
|
||||||
entry.addFlag(name);
|
entry.addFlag(name);
|
||||||
}
|
}
|
||||||
@ -205,4 +190,9 @@ public abstract class BaseModule
|
|||||||
entry.addMapper(mapper);
|
entry.addMapper(mapper);
|
||||||
return mapper;
|
return mapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static <T> T make(T input, Consumer<T> processor) {
|
||||||
|
processor.accept(input);
|
||||||
|
return input;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,52 +1,59 @@
|
|||||||
package speiger.src.builder.modules;
|
package speiger.src.builder.modules;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Set;
|
import java.util.List;
|
||||||
import java.util.TreeSet;
|
|
||||||
|
|
||||||
import speiger.src.builder.ClassType;
|
import speiger.src.builder.ClassType;
|
||||||
|
import speiger.src.builder.dependencies.FunctionDependency;
|
||||||
|
import speiger.src.builder.dependencies.IDependency;
|
||||||
|
import speiger.src.builder.dependencies.ModuleDependency;
|
||||||
|
|
||||||
@SuppressWarnings("javadoc")
|
@SuppressWarnings("javadoc")
|
||||||
public class CollectionModule extends BaseModule
|
public class CollectionModule extends BaseModule
|
||||||
{
|
{
|
||||||
public static final BaseModule INSTANCE = new CollectionModule();
|
public static final BaseModule INSTANCE = new CollectionModule();
|
||||||
|
public static final ModuleDependency MODULE = new ModuleDependency(INSTANCE, false)
|
||||||
|
.addKeyDependency(FunctionModule.MODULE)
|
||||||
|
.addOptionalTypeDependency(FunctionModule.MODULE, ClassType.OBJECT, true)
|
||||||
|
.addOptionalTypeDependency(FunctionModule.MODULE, ClassType.INT, true)
|
||||||
|
.addOptionalTypeDependency(ClassType.OBJECT, true);
|
||||||
|
public static final FunctionDependency STREAMS = MODULE.createDependency("Streams");
|
||||||
|
public static final FunctionDependency SPLIT_ITERATORS = MODULE.createDependency("Splititerators").addKeyDependency(STREAMS);
|
||||||
|
public static final FunctionDependency IARRAY = MODULE.createDependency("IArray");
|
||||||
|
public static final FunctionDependency STRATEGY = MODULE.createDependency("Strategy");
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getModuleName() { return "Collection"; }
|
public String getModuleName() { return "Collection"; }
|
||||||
@Override
|
@Override
|
||||||
protected void loadVariables() {}
|
protected void loadVariables() {}
|
||||||
@Override
|
@Override
|
||||||
public boolean areDependenciesLoaded(){ return isDependencyLoaded(JavaModule.INSTANCE); }
|
public List<IDependency> getDependencies(ClassType keyType, ClassType valueType) { return Arrays.asList(MODULE, STREAMS, SPLIT_ITERATORS, IARRAY, STRATEGY); }
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<String> getModuleKeys(ClassType keyType, ClassType valueType)
|
|
||||||
{
|
|
||||||
return new TreeSet<>(Arrays.asList("Streams", "Splititerators", "IArray", "Strategy"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void loadFlags() {
|
protected void loadFlags() {
|
||||||
if(isModuleEnabled()) addKeyFlag("COLLECTION_MODULE");
|
if(MODULE.isEnabled()) addKeyFlag("COLLECTION_MODULE");
|
||||||
if(isModuleEnabled("Streams")) addKeyFlag("STREAM_FEATURE");
|
if(STREAMS.isEnabled()) addKeyFlag("STREAM_FEATURE");
|
||||||
if(isModuleEnabled("Splititerators")) addKeyFlag("SPLIT_ITERATOR_FEATURE");
|
if(SPLIT_ITERATORS.isEnabled()) addKeyFlag("SPLIT_ITERATOR_FEATURE");
|
||||||
if(isModuleEnabled("IArray")) addKeyFlag("IARRAY_FEATURE");
|
if(IARRAY.isEnabled()) addKeyFlag("IARRAY_FEATURE");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void loadBlockades() {
|
protected void loadBlockades() {
|
||||||
if(!isModuleEnabled()) {
|
if(!MODULE.isEnabled()) {
|
||||||
addBlockedFiles("Iterable", "Iterables", "Iterator", "Iterators", "BidirectionalIterator", "ListIterator");
|
addBlockedFiles("Iterable", "Iterables", "Iterator", "Iterators", "BidirectionalIterator", "ListIterator");
|
||||||
addBlockedFiles("Arrays", "Collection", "AbstractCollection", "Collections", "Stack");
|
addBlockedFiles("Arrays", "Collection", "AbstractCollection", "Collections", "Stack");
|
||||||
}
|
}
|
||||||
if(!isModuleEnabled("Splititerators")) addBlockedFiles("Splititerator", "Splititerators");
|
if(!SPLIT_ITERATORS.isEnabled()) addBlockedFiles("Splititerator", "Splititerators");
|
||||||
if(!isModuleEnabled("IArray")) addBlockedFiles("IArray");
|
if(!IARRAY.isEnabled()) addBlockedFiles("IArray");
|
||||||
if(!isModuleEnabled("Strategy")) addBlockedFiles("Strategy");
|
if(!STRATEGY.isEnabled()) addBlockedFiles("Strategy");
|
||||||
|
|
||||||
if(keyType.isObject()) {
|
if(keyType.isObject())
|
||||||
|
{
|
||||||
addBlockedFiles("Stack");
|
addBlockedFiles("Stack");
|
||||||
addBlockedFiles("CollectionStreamTester");
|
addBlockedFiles("CollectionStreamTester");
|
||||||
}
|
}
|
||||||
if(keyType == ClassType.BOOLEAN) {
|
if(keyType == ClassType.BOOLEAN)
|
||||||
|
{
|
||||||
addBlockedFiles("CollectionRemoveIfTester", "CollectionStreamTester");
|
addBlockedFiles("CollectionRemoveIfTester", "CollectionStreamTester");
|
||||||
addBlockedFilter(T -> T.endsWith("Tester") && T.startsWith("Iterable"));
|
addBlockedFilter(T -> T.endsWith("Tester") && T.startsWith("Iterable"));
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,18 @@
|
|||||||
package speiger.src.builder.modules;
|
package speiger.src.builder.modules;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import speiger.src.builder.ClassType;
|
import speiger.src.builder.ClassType;
|
||||||
import speiger.src.builder.RequiredType;
|
import speiger.src.builder.RequiredType;
|
||||||
|
import speiger.src.builder.dependencies.IDependency;
|
||||||
|
import speiger.src.builder.dependencies.ModuleDependency;
|
||||||
|
|
||||||
@SuppressWarnings("javadoc")
|
@SuppressWarnings("javadoc")
|
||||||
public class FunctionModule extends BaseModule
|
public class FunctionModule extends BaseModule
|
||||||
{
|
{
|
||||||
public static final BaseModule INSTANCE = new FunctionModule();
|
public static final BaseModule INSTANCE = new FunctionModule();
|
||||||
|
public static final ModuleDependency MODULE = new ModuleDependency(INSTANCE, false).addKeyDependency(JavaModule.MODULE);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getModuleName() { return "Function"; }
|
public String getModuleName() { return "Function"; }
|
||||||
@ -19,10 +25,16 @@ public class FunctionModule extends BaseModule
|
|||||||
@Override
|
@Override
|
||||||
protected void loadTestClasses() {}
|
protected void loadTestClasses() {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<IDependency> getDependencies(ClassType keyType, ClassType valueType) {
|
||||||
|
return Arrays.asList(MODULE);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void loadBlockades()
|
protected void loadBlockades()
|
||||||
{
|
{
|
||||||
if(keyType.isObject()) addBlockedFiles("Consumer", "Comparator");
|
if(keyType.isObject()) addBlockedFiles("Consumer", "Comparator");
|
||||||
|
if(!MODULE.isEnabled()) addBlockedFiles("Consumer", "BiConsumer", "Comparator", "Supplier", "Function", "UnaryOperator");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,11 +1,17 @@
|
|||||||
package speiger.src.builder.modules;
|
package speiger.src.builder.modules;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import speiger.src.builder.ClassType;
|
import speiger.src.builder.ClassType;
|
||||||
|
import speiger.src.builder.dependencies.IDependency;
|
||||||
|
import speiger.src.builder.dependencies.ModuleDependency;
|
||||||
|
|
||||||
@SuppressWarnings("javadoc")
|
@SuppressWarnings("javadoc")
|
||||||
public class JavaModule extends BaseModule
|
public class JavaModule extends BaseModule
|
||||||
{
|
{
|
||||||
public static final BaseModule INSTANCE = new JavaModule();
|
public static final BaseModule INSTANCE = new JavaModule();
|
||||||
|
public static final ModuleDependency MODULE = new ModuleDependency(INSTANCE, false);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getModuleName() { return "Base"; }
|
public String getModuleName() { return "Base"; }
|
||||||
@ -17,6 +23,11 @@ public class JavaModule extends BaseModule
|
|||||||
loadBaseVariables();
|
loadBaseVariables();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<IDependency> getDependencies(ClassType keyType, ClassType valueType) {
|
||||||
|
return Arrays.asList(MODULE);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void loadFlags()
|
protected void loadFlags()
|
||||||
{
|
{
|
||||||
|
@ -1,55 +1,57 @@
|
|||||||
package speiger.src.builder.modules;
|
package speiger.src.builder.modules;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Set;
|
import java.util.List;
|
||||||
import java.util.TreeSet;
|
|
||||||
|
|
||||||
import speiger.src.builder.ClassType;
|
import speiger.src.builder.ClassType;
|
||||||
|
import speiger.src.builder.dependencies.FunctionDependency;
|
||||||
|
import speiger.src.builder.dependencies.IDependency;
|
||||||
|
import speiger.src.builder.dependencies.ModuleDependency;
|
||||||
|
|
||||||
@SuppressWarnings("javadoc")
|
@SuppressWarnings("javadoc")
|
||||||
public class ListModule extends BaseModule
|
public class ListModule extends BaseModule
|
||||||
{
|
{
|
||||||
public static final BaseModule INSTANCE = new ListModule();
|
public static final BaseModule INSTANCE = new ListModule();
|
||||||
|
public static final ModuleDependency MODULE = new ModuleDependency(INSTANCE, false).addKeyDependency(CollectionModule.MODULE).addKeyDependency(CollectionModule.SPLIT_ITERATORS);
|
||||||
|
public static final FunctionDependency IMPLEMENTATION = MODULE.createDependency("Implementations");
|
||||||
|
public static final FunctionDependency WRAPPERS = MODULE.createDependency("Wrappers");
|
||||||
|
public static final FunctionDependency ARRAY_LIST = MODULE.createDependency("ArrayList").addKeyDependency(IMPLEMENTATION);
|
||||||
|
public static final FunctionDependency LINKED_LIST = MODULE.createDependency("LinkedList").addKeyDependency(IMPLEMENTATION);
|
||||||
|
public static final FunctionDependency IMMUTABLE_LIST = MODULE.createDependency("ImmutableList").addKeyDependency(IMPLEMENTATION);
|
||||||
|
public static final FunctionDependency COPY_ON_WRITE_LIST = MODULE.createDependency("CopyOnWriteList").addKeyDependency(IMPLEMENTATION);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getModuleName() { return "List"; }
|
public String getModuleName() { return "List"; }
|
||||||
@Override
|
@Override
|
||||||
|
public List<IDependency> getDependencies(ClassType keyType, ClassType valueType) { return Arrays.asList(MODULE, IMPLEMENTATION, WRAPPERS, ARRAY_LIST, LINKED_LIST, IMMUTABLE_LIST, COPY_ON_WRITE_LIST); }
|
||||||
|
@Override
|
||||||
protected void loadVariables() {}
|
protected void loadVariables() {}
|
||||||
@Override
|
@Override
|
||||||
protected void loadFlags() {
|
protected void loadFlags() {
|
||||||
if(isModuleEnabled()) addKeyFlag("LIST_MODULE");
|
if(MODULE.isEnabled()) addKeyFlag("LIST_MODULE");
|
||||||
if(isModuleEnabled("Wrappers")) addKeyFlag("LISTS_FEATURE");
|
if(WRAPPERS.isEnabled()) addKeyFlag("LISTS_FEATURE");
|
||||||
boolean implementations = isModuleEnabled("Implementations");
|
if(ARRAY_LIST.isEnabled()) addKeyFlag("ARRAY_LIST_FEATURE");
|
||||||
if(implementations && isModuleEnabled("ArrayList")) addKeyFlag("ARRAY_LIST_FEATURE");
|
if(LINKED_LIST.isEnabled()) addKeyFlag("LINKED_LIST_FEATURE");
|
||||||
if(implementations && isModuleEnabled("LinkedList")) addKeyFlag("LINKED_LIST_FEATURE");
|
if(IMMUTABLE_LIST.isEnabled()) addKeyFlag("IMMUTABLE_LIST_FEATURE");
|
||||||
if(implementations && isModuleEnabled("ImmutableList")) addKeyFlag("IMMUTABLE_LIST_FEATURE");
|
if(COPY_ON_WRITE_LIST.isEnabled()) addKeyFlag("COPY_ON_WRITE_LIST_FEATURE");
|
||||||
if(implementations && isModuleEnabled("CopyOnWriteList")) addKeyFlag("COPY_ON_WRITE_LIST_FEATURE");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void loadBlockades()
|
protected void loadBlockades()
|
||||||
{
|
{
|
||||||
if(!isModuleEnabled("Wrappers")) addBlockedFiles("Lists");
|
if(!WRAPPERS.isEnabled()) addBlockedFiles("Lists");
|
||||||
boolean implementations = !isModuleEnabled("Implementations");
|
if(!ARRAY_LIST.isEnabled()) addBlockedFiles("ArrayList");
|
||||||
if(implementations || !isModuleEnabled("ArrayList")) addBlockedFiles("ArrayList");
|
if(!LINKED_LIST.isEnabled()) addBlockedFiles("LinkedList");
|
||||||
if(implementations || !isModuleEnabled("LinkedList")) addBlockedFiles("LinkedList");
|
if(!IMMUTABLE_LIST.isEnabled()) addBlockedFiles("ImmutableList");
|
||||||
if(implementations || !isModuleEnabled("ImmutableList")) addBlockedFiles("ImmutableList");
|
if(!COPY_ON_WRITE_LIST.isEnabled()) addBlockedFiles("CopyOnWriteList");
|
||||||
if(implementations || !isModuleEnabled("CopyOnWriteList")) addBlockedFiles("CopyOnWriteList");
|
if(!MODULE.isEnabled()) addBlockedFiles("List", "AbstractList");
|
||||||
if(!isModuleEnabled()) addBlockedFiles("List", "AbstractList");
|
|
||||||
|
|
||||||
if(keyType.isObject()) addBlockedFiles("ListFillBufferTester");
|
if(keyType.isObject()) addBlockedFiles("ListFillBufferTester");
|
||||||
if(keyType == ClassType.BOOLEAN) addBlockedFiles("ListFillBufferTester", "ListReplaceAllTester");
|
if(keyType == ClassType.BOOLEAN) addBlockedFiles("ListFillBufferTester", "ListReplaceAllTester");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<String> getModuleKeys(ClassType keyType, ClassType valueType) {
|
|
||||||
return new TreeSet<>(Arrays.asList("Implementations", "Wrappers", "ArrayList", "LinkedList", "ImmutableList", "CopyOnWriteList"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean areDependenciesLoaded() {
|
|
||||||
return isDependencyLoaded(CollectionModule.INSTANCE);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void loadRemappers()
|
protected void loadRemappers()
|
||||||
|
@ -1,15 +1,44 @@
|
|||||||
package speiger.src.builder.modules;
|
package speiger.src.builder.modules;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Set;
|
import java.util.List;
|
||||||
import java.util.TreeSet;
|
|
||||||
|
|
||||||
import speiger.src.builder.ClassType;
|
import speiger.src.builder.ClassType;
|
||||||
|
import speiger.src.builder.dependencies.FunctionDependency;
|
||||||
|
import speiger.src.builder.dependencies.IDependency;
|
||||||
|
import speiger.src.builder.dependencies.ModuleDependency;
|
||||||
|
|
||||||
@SuppressWarnings("javadoc")
|
@SuppressWarnings("javadoc")
|
||||||
public class MapModule extends BaseModule
|
public class MapModule extends BaseModule
|
||||||
{
|
{
|
||||||
public static final BaseModule INSTANCE = new MapModule();
|
public static final BaseModule INSTANCE = new MapModule();
|
||||||
|
public static final ModuleDependency MODULE = new ModuleDependency(INSTANCE, true)
|
||||||
|
.addKeyDependency(SetModule.MODULE)
|
||||||
|
.addValueDependency(CollectionModule.MODULE)
|
||||||
|
.addEntryDependency(SetModule.MODULE)
|
||||||
|
.addTypeDependency(SetModule.MODULE, ClassType.OBJECT);
|
||||||
|
public static final FunctionDependency IMPLEMENTATION = MODULE.createDependency("Implementations");
|
||||||
|
public static final FunctionDependency WRAPPERS = MODULE.createDependency("Wrappers").addKeyDependency(SetModule.WRAPPERS).addOptionalTypeDependency(SetModule.WRAPPERS, ClassType.OBJECT, true);
|
||||||
|
|
||||||
|
public static final FunctionDependency ORDERED_MAP = MODULE.createDependency("OrderedMap").addKeyDependency(SetModule.ORDERED_SET).addOptionalTypeDependency(SetModule.ORDERED_SET, ClassType.OBJECT, true);
|
||||||
|
public static final FunctionDependency SORTED_MAP = MODULE.createDependency("SortedMap").addKeyDependency(SetModule.SORTED_SET).addOptionalTypeDependency(SetModule.SORTED_SET, ClassType.OBJECT, true);
|
||||||
|
|
||||||
|
public static final FunctionDependency ARRAY_MAP = MODULE.createDependency("ArrayMap").addEntryDependency(ORDERED_MAP).addEntryDependency(IMPLEMENTATION);
|
||||||
|
public static final FunctionDependency IMMUTABLE_MAP = MODULE.createDependency("ImmutableMap").addEntryDependency(IMPLEMENTATION);
|
||||||
|
|
||||||
|
public static final FunctionDependency HASH_MAP = MODULE.createDependency("HashMap").addEntryDependency(IMPLEMENTATION);
|
||||||
|
public static final FunctionDependency LINKED_MAP = MODULE.createDependency("LinkedHashMap").addEntryDependency(HASH_MAP).addEntryDependency(ORDERED_MAP);
|
||||||
|
|
||||||
|
public static final FunctionDependency CUSTOM_MAP = MODULE.createDependency("CustomHashMap").addEntryDependency(IMPLEMENTATION).addKeyDependency(CollectionModule.STRATEGY);
|
||||||
|
public static final FunctionDependency LINKED_CUSTOM_MAP = MODULE.createDependency("LinkedCustomHashMap").addEntryDependency(CUSTOM_MAP).addEntryDependency(ORDERED_MAP);
|
||||||
|
|
||||||
|
public static final FunctionDependency ENUM_MAP = MODULE.createDependency("EnumMap").addEntryDependency(IMPLEMENTATION);
|
||||||
|
public static final FunctionDependency LINKED_ENUM_MAP = MODULE.createDependency("LinkedEnumMap").addEntryDependency(ENUM_MAP).addEntryDependency(ORDERED_MAP);
|
||||||
|
|
||||||
|
public static final FunctionDependency CONCURRENT_MAP = MODULE.createDependency("ConcurrentMap").addEntryDependency(IMPLEMENTATION);
|
||||||
|
public static final FunctionDependency AVL_TREE_MAP = MODULE.createDependency("AVLTreeMap").addEntryDependency(SORTED_MAP).addEntryDependency(IMPLEMENTATION);
|
||||||
|
public static final FunctionDependency RB_TREE_MAP = MODULE.createDependency("RBTreeMap").addEntryDependency(SORTED_MAP).addEntryDependency(IMPLEMENTATION);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getModuleName() { return "Map"; }
|
public String getModuleName() { return "Map"; }
|
||||||
@ -20,79 +49,52 @@ public class MapModule extends BaseModule
|
|||||||
@Override
|
@Override
|
||||||
public boolean isModuleValid(ClassType keyType, ClassType valueType) { return keyType != ClassType.BOOLEAN; }
|
public boolean isModuleValid(ClassType keyType, ClassType valueType) { return keyType != ClassType.BOOLEAN; }
|
||||||
@Override
|
@Override
|
||||||
public boolean areDependenciesLoaded() { return isDependencyLoaded(SetModule.INSTANCE) && isDependencyLoaded(CollectionModule.INSTANCE, false); }
|
public List<IDependency> getDependencies(ClassType keyType, ClassType valueType) {
|
||||||
|
List<IDependency> dependencies = new ArrayList<>(Arrays.asList(MODULE, ORDERED_MAP, SORTED_MAP, IMPLEMENTATION, WRAPPERS, ARRAY_MAP, IMMUTABLE_MAP, HASH_MAP, LINKED_MAP, CUSTOM_MAP, LINKED_CUSTOM_MAP, CONCURRENT_MAP, AVL_TREE_MAP, RB_TREE_MAP));
|
||||||
@Override
|
if(keyType == ClassType.OBJECT) dependencies.addAll(Arrays.asList(ENUM_MAP, LINKED_ENUM_MAP));
|
||||||
public Set<String> getModuleKeys(ClassType keyType, ClassType valueType) {
|
return dependencies;
|
||||||
Set<String> sets = new TreeSet<>();
|
|
||||||
sets.addAll(Arrays.asList("Wrappers", "Implementations"));
|
|
||||||
sets.addAll(Arrays.asList("OrderedMap", "SortedMap"));
|
|
||||||
sets.addAll(Arrays.asList("ArrayMap", "ConcurrentMap", "ImmutableMap"));
|
|
||||||
sets.addAll(Arrays.asList("HashMap", "LinkedHashMap"));
|
|
||||||
sets.addAll(Arrays.asList("CustomHashMap", "LinkedCustomHashMap"));
|
|
||||||
sets.addAll(Arrays.asList("EnumMap", "LinkedEnumMap"));
|
|
||||||
sets.addAll(Arrays.asList("AVLTreeMap", "RBTreeMap"));
|
|
||||||
return sets;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void loadFlags()
|
protected void loadFlags()
|
||||||
{
|
{
|
||||||
if(isModuleEnabled()) addFlag("MAP_MODULE");
|
if(MODULE.isEnabled()) addFlag("MAP_MODULE");
|
||||||
if(isModuleEnabled("Wrappers")) addFlag("MAPS_FEATURE");
|
if(WRAPPERS.isEnabled()) addFlag("MAPS_FEATURE");
|
||||||
boolean implementations = isModuleEnabled("Implementations");
|
if(ORDERED_MAP.isEnabled()) addFlag("ORDERED_MAP_FEATURE");
|
||||||
boolean hashMap = implementations && isModuleEnabled("HashMap");
|
if(ARRAY_MAP.isEnabled()) addFlag("ARRAY_MAP_FEATURE");
|
||||||
boolean customHashMap = implementations && isModuleEnabled("CustomHashMap");
|
if(LINKED_MAP.isEnabled()) addFlag("LINKED_MAP_FEATURE");
|
||||||
boolean enumMap = implementations && isModuleEnabled("EnumMap");
|
if(LINKED_CUSTOM_MAP.isEnabled()) addFlag("LINKED_CUSTOM_MAP_FEATURE");
|
||||||
|
if(LINKED_ENUM_MAP.isEnabled()) addFlag("LINKED_ENUM_MAP_FEATURE");
|
||||||
|
|
||||||
if(isModuleEnabled("OrderedMap")) {
|
if(SORTED_MAP.isEnabled()) addFlag("SORTED_MAP_FEATURE");
|
||||||
addFlag("ORDERED_MAP_FEATURE");
|
if(AVL_TREE_MAP.isEnabled()) addFlag("AVL_TREE_MAP_FEATURE");
|
||||||
if(isModuleEnabled("ArrayMap")) addFlag("ARRAY_MAP_FEATURE");
|
if(RB_TREE_MAP.isEnabled()) addFlag("RB_TREE_MAP_FEATURE");
|
||||||
if(hashMap && isModuleEnabled("LinkedHashMap")) addFlag("LINKED_MAP_FEATURE");
|
|
||||||
if(customHashMap && isModuleEnabled("LinkedCustomHashMap")) addFlag("LINKED_CUSTOM_MAP_FEATURE");
|
if(CONCURRENT_MAP.isEnabled()) addFlag("CONCURRENT_MAP_FEATURE");
|
||||||
if(enumMap && isModuleEnabled("LinkedEnumMap")) addFlag("LINKED_ENUM_MAP_FEATURE");
|
if(IMMUTABLE_MAP.isEnabled()) addFlag("IMMUTABLE_MAP_FEATURE");
|
||||||
}
|
if(HASH_MAP.isEnabled()) addFlag("MAP_FEATURE");
|
||||||
if(isModuleEnabled("SortedMap")) {
|
if(CUSTOM_MAP.isEnabled()) addFlag("CUSTOM_MAP_FEATURE");
|
||||||
addFlag("SORTED_MAP_FEATURE");
|
if(ENUM_MAP.isEnabled()) addFlag("ENUM_MAP_FEATURE");
|
||||||
if(implementations && isModuleEnabled("AVLTreeMap")) addFlag("AVL_TREE_MAP_FEATURE");
|
|
||||||
if(implementations && isModuleEnabled("RBTreeMap")) addFlag("RB_TREE_MAP_FEATURE");
|
|
||||||
}
|
|
||||||
if(implementations && isModuleEnabled("ConcurrentMap")) addFlag("CONCURRENT_MAP_FEATURE");
|
|
||||||
if(implementations && isModuleEnabled("ImmutableMap")) addFlag("IMMUTABLE_MAP_FEATURE");
|
|
||||||
if(hashMap) addFlag("MAP_FEATURE");
|
|
||||||
if(customHashMap) addFlag("CUSTOM_MAP_FEATURE");
|
|
||||||
if(enumMap) addFlag("ENUM_MAP_FEATURE");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void loadBlockades()
|
protected void loadBlockades()
|
||||||
{
|
{
|
||||||
if(!isModuleEnabled()) addBlockedFiles("Map", "AbstractMap");
|
if(!MODULE.isEnabled()) addBlockedFiles("Map", "AbstractMap");
|
||||||
if(!isModuleEnabled("Wrappers")) addBlockedFiles("Maps");
|
if(!WRAPPERS.isEnabled()) addBlockedFiles("Maps");
|
||||||
boolean implementations = !isModuleEnabled("Implementations");
|
if(!IMMUTABLE_MAP.isEnabled()) addBlockedFiles("ImmutableOpenHashMap");
|
||||||
if(implementations || !isModuleEnabled("ImmutableMap")) addBlockedFiles("ImmutableOpenHashMap");
|
if(!CONCURRENT_MAP.isEnabled()) addBlockedFiles("ConcurrentMap", "ConcurrentOpenHashMap");
|
||||||
if(implementations || !isModuleEnabled("ConcurrentMap")) addBlockedFiles("ConcurrentMap", "ConcurrentOpenHashMap");
|
if(!ORDERED_MAP.isEnabled()) addBlockedFiles("OrderedMap");
|
||||||
|
if(!HASH_MAP.isEnabled()) addBlockedFiles("OpenHashMap");
|
||||||
boolean ordered = !isModuleEnabled("OrderedMap");
|
if(!LINKED_MAP.isEnabled()) addBlockedFiles("LinkedOpenHashMap");
|
||||||
if(ordered) addBlockedFiles("OrderedMap");
|
if(!CUSTOM_MAP.isEnabled()) addBlockedFiles("OpenCustomHashMap");
|
||||||
boolean hashMap = implementations || !isModuleEnabled("HashMap");
|
if(!LINKED_CUSTOM_MAP.isEnabled()) addBlockedFiles("LinkedOpenCustomHashMap");
|
||||||
if(hashMap) addBlockedFiles("OpenHashMap");
|
if(!ENUM_MAP.isEnabled()) addBlockedFiles("EnumMap");
|
||||||
if(hashMap || ordered || !isModuleEnabled("LinkedHashMap")) addBlockedFiles("LinkedOpenHashMap");
|
if(!LINKED_ENUM_MAP.isEnabled()) addBlockedFiles("LinkedEnumMap");
|
||||||
|
if(!ARRAY_MAP.isEnabled()) addBlockedFiles("ArrayMap");
|
||||||
boolean customHashMap = implementations || !isModuleEnabled("CustomHashMap");
|
if(!SORTED_MAP.isEnabled()) addBlockedFiles("SortedMap", "NavigableMap");
|
||||||
if(customHashMap) addBlockedFiles("OpenCustomHashMap");
|
if(!AVL_TREE_MAP.isEnabled()) addBlockedFiles("AVLTreeMap");
|
||||||
if(customHashMap || ordered || !isModuleEnabled("LinkedCustomHashMap")) addBlockedFiles("LinkedOpenCustomHashMap");
|
if(!RB_TREE_MAP.isEnabled()) addBlockedFiles("RBTreeMap");
|
||||||
|
|
||||||
boolean enumMap = implementations || !isModuleEnabled("EnumMap");
|
|
||||||
if(enumMap) addBlockedFiles("EnumMap");
|
|
||||||
if(enumMap || ordered || !isModuleEnabled("LinkedEnumMap")) addBlockedFiles("LinkedEnumMap");
|
|
||||||
|
|
||||||
if(ordered || !isModuleEnabled("ArrayMap")) addBlockedFiles("ArrayMap");
|
|
||||||
|
|
||||||
boolean sorted = !isModuleEnabled("SortedMap");
|
|
||||||
if(sorted) addBlockedFiles("SortedMap", "NavigableMap");
|
|
||||||
if(implementations || sorted || !isModuleEnabled("AVLTreeMap")) addBlockedFiles("AVLTreeMap");
|
|
||||||
if(implementations || sorted || !isModuleEnabled("RBTreeMap")) addBlockedFiles("RBTreeMap");
|
|
||||||
|
|
||||||
if(keyType == ClassType.BOOLEAN)
|
if(keyType == ClassType.BOOLEAN)
|
||||||
{
|
{
|
||||||
|
@ -1,15 +1,26 @@
|
|||||||
package speiger.src.builder.modules;
|
package speiger.src.builder.modules;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Set;
|
import java.util.List;
|
||||||
import java.util.TreeSet;
|
|
||||||
|
|
||||||
import speiger.src.builder.ClassType;
|
import speiger.src.builder.ClassType;
|
||||||
|
import speiger.src.builder.dependencies.FunctionDependency;
|
||||||
|
import speiger.src.builder.dependencies.IDependency;
|
||||||
|
import speiger.src.builder.dependencies.ModuleDependency;
|
||||||
|
|
||||||
@SuppressWarnings("javadoc")
|
@SuppressWarnings("javadoc")
|
||||||
public class PairModule extends BaseModule
|
public class PairModule extends BaseModule
|
||||||
{
|
{
|
||||||
public static final BaseModule INSTANCE = new PairModule();
|
public static final BaseModule INSTANCE = new PairModule();
|
||||||
|
public static final ModuleDependency MODULE = new ModuleDependency(INSTANCE, true).addKeyDependency(JavaModule.MODULE);
|
||||||
|
public static final FunctionDependency IMMUTABLE = MODULE.createDependency("Immutable");
|
||||||
|
public static final FunctionDependency MUTABLE = MODULE.createDependency("Mutable");
|
||||||
|
|
||||||
|
|
||||||
|
// public static final DependencyModule MODULE = new BiTypeModule(INSTANCE);
|
||||||
|
// public static final DependencyFunction IMMUTABLE = MODULE.createFunction("Immutable");
|
||||||
|
// public static final DependencyFunction MUTABLE = MODULE.createFunction("Mutable");
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getModuleName() { return "Pair"; }
|
public String getModuleName() { return "Pair"; }
|
||||||
@Override
|
@Override
|
||||||
@ -21,20 +32,20 @@ public class PairModule extends BaseModule
|
|||||||
@Override
|
@Override
|
||||||
protected void loadTestClasses() {}
|
protected void loadTestClasses() {}
|
||||||
@Override
|
@Override
|
||||||
public Set<String> getModuleKeys(ClassType keyType, ClassType valueType) { return new TreeSet<>(Arrays.asList("Mutable", "Immutable")); }
|
public List<IDependency> getDependencies(ClassType keyType, ClassType valueType) { return Arrays.asList(MODULE, IMMUTABLE, MUTABLE); }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void loadFlags() {
|
protected void loadFlags() {
|
||||||
if(isModuleEnabled()) addFlag("PAIR_MODULE");
|
if(MODULE.isEnabled()) addFlag("PAIR_MODULE");
|
||||||
if(isModuleEnabled("Mutable")) addFlag("MUTABLE_PAIR");
|
if(MUTABLE.isEnabled()) addFlag("MUTABLE_PAIR");
|
||||||
if(isModuleEnabled("Immutable")) addFlag("IMMUTABLE_PAIR");
|
if(IMMUTABLE.isEnabled()) addFlag("IMMUTABLE_PAIR");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void loadBlockades() {
|
protected void loadBlockades() {
|
||||||
if(!isModuleEnabled()) addBlockedFiles("Pair");
|
if(!MODULE.isEnabled()) addBlockedFiles("Pair");
|
||||||
if(!isModuleEnabled("Mutable")) addBlockedFiles("MutablePair");
|
if(!MUTABLE.isEnabled()) addBlockedFiles("MutablePair");
|
||||||
if(!isModuleEnabled("Immutable")) addBlockedFiles("ImmutablePair");
|
if(!IMMUTABLE.isEnabled()) addBlockedFiles("ImmutablePair");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,15 +1,26 @@
|
|||||||
package speiger.src.builder.modules;
|
package speiger.src.builder.modules;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Set;
|
import java.util.List;
|
||||||
import java.util.TreeSet;
|
|
||||||
|
|
||||||
import speiger.src.builder.ClassType;
|
import speiger.src.builder.ClassType;
|
||||||
|
import speiger.src.builder.dependencies.FunctionDependency;
|
||||||
|
import speiger.src.builder.dependencies.IDependency;
|
||||||
|
import speiger.src.builder.dependencies.ModuleDependency;
|
||||||
|
|
||||||
@SuppressWarnings("javadoc")
|
@SuppressWarnings("javadoc")
|
||||||
public class PrioQueueModule extends BaseModule
|
public class PrioQueueModule extends BaseModule
|
||||||
{
|
{
|
||||||
public static final BaseModule INSTANCE = new PrioQueueModule();
|
public static final BaseModule INSTANCE = new PrioQueueModule();
|
||||||
|
public static final ModuleDependency MODULE = new ModuleDependency(INSTANCE, false).addKeyDependency(CollectionModule.MODULE);
|
||||||
|
public static final FunctionDependency IMPLEMENTATION = MODULE.createDependency("Implementations");
|
||||||
|
public static final FunctionDependency WRAPPERS = MODULE.createDependency("Wrappers");
|
||||||
|
public static final FunctionDependency DEQUEUE = MODULE.createDependency("Dequeue");
|
||||||
|
|
||||||
|
public static final FunctionDependency FIFO_QUEUE = MODULE.createDependency("FiFoQueue").addKeyDependency(DEQUEUE).addKeyDependency(IMPLEMENTATION);
|
||||||
|
public static final FunctionDependency HEAP_QUEUE = MODULE.createDependency("HeapQueue").addKeyDependency(IMPLEMENTATION);
|
||||||
|
public static final FunctionDependency ARRAY_PRIO_QUEUE = MODULE.createDependency("ArrayPrioQueue").addKeyDependency(IMPLEMENTATION);
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getModuleName() { return "PriorityQueue"; }
|
public String getModuleName() { return "PriorityQueue"; }
|
||||||
@ -18,36 +29,26 @@ public class PrioQueueModule extends BaseModule
|
|||||||
@Override
|
@Override
|
||||||
protected void loadFunctions() {}
|
protected void loadFunctions() {}
|
||||||
@Override
|
@Override
|
||||||
public boolean areDependenciesLoaded() { return isDependencyLoaded(CollectionModule.INSTANCE); }
|
public List<IDependency> getDependencies(ClassType keyType, ClassType valueType) { return Arrays.asList(MODULE, WRAPPERS, IMPLEMENTATION, DEQUEUE, FIFO_QUEUE, HEAP_QUEUE, ARRAY_PRIO_QUEUE); }
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<String> getModuleKeys(ClassType keyType, ClassType valueType) {
|
|
||||||
return new TreeSet<>(Arrays.asList("Wrappers", "Implementations", "Dequeue", "FiFoQueue", "HeapQueue", "ArrayPrioQueue"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void loadFlags() {
|
protected void loadFlags() {
|
||||||
if(isModuleEnabled()) addFlag("QUEUE_MODULE");
|
if(MODULE.isEnabled()) addFlag("QUEUE_MODULE");
|
||||||
if(isModuleEnabled("Wrappers")) addKeyFlag("QUEUES_FEATURE");
|
if(WRAPPERS.isEnabled()) addKeyFlag("QUEUES_FEATURE");
|
||||||
boolean implementations = isModuleEnabled("Implementations");
|
if(DEQUEUE.isEnabled()) addKeyFlag("DEQUEUE_FEATURE");
|
||||||
if(isModuleEnabled("Dequeue")) {
|
if(FIFO_QUEUE.isEnabled()) addKeyFlag("FIFO_QUEUE_FEATURE");
|
||||||
addKeyFlag("DEQUEUE_FEATURE");
|
if(HEAP_QUEUE.isEnabled()) addKeyFlag("HEAP_QUEUE_FEATURE");
|
||||||
if(implementations && isModuleEnabled("FiFoQueue")) addKeyFlag("FIFO_QUEUE_FEATURE");
|
if(ARRAY_PRIO_QUEUE.isEnabled()) addKeyFlag("ARRAY_QUEUE_FEATURE");
|
||||||
}
|
|
||||||
if(implementations && isModuleEnabled("HeapQueue")) addKeyFlag("HEAP_QUEUE_FEATURE");
|
|
||||||
if(implementations && isModuleEnabled("ArrayPrioQueue")) addKeyFlag("ARRAY_QUEUE_FEATURE");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void loadBlockades() {
|
protected void loadBlockades() {
|
||||||
if(!isModuleEnabled()) addBlockedFiles("PriorityQueue", "AbstractPriorityQueue");
|
if(!MODULE.isEnabled()) addBlockedFiles("PriorityQueue", "AbstractPriorityQueue");
|
||||||
if(!isModuleEnabled("Wrappers")) addBlockedFiles("PriorityQueues");
|
if(!WRAPPERS.isEnabled()) addBlockedFiles("PriorityQueues");
|
||||||
boolean implementations = !isModuleEnabled("Implementations");
|
if(!DEQUEUE.isEnabled()) addBlockedFiles("PriorityDequeue");
|
||||||
boolean dequeue = !isModuleEnabled("Dequeue");
|
if(!FIFO_QUEUE.isEnabled()) addBlockedFiles("ArrayFIFOQueue");
|
||||||
if(dequeue) addBlockedFiles("PriorityDequeue");
|
if(!HEAP_QUEUE.isEnabled()) addBlockedFiles("HeapPriorityQueue");
|
||||||
if(dequeue || implementations || !isModuleEnabled("FiFoQueue")) addBlockedFiles("ArrayFIFOQueue");
|
if(!ARRAY_PRIO_QUEUE.isEnabled()) addBlockedFiles("ArrayPriorityQueue");
|
||||||
if(implementations || !isModuleEnabled("HeapQueue")) addBlockedFiles("HeapPriorityQueue");
|
|
||||||
if(implementations || !isModuleEnabled("ArrayPrioQueue")) addBlockedFiles("ArrayPriorityQueue");
|
|
||||||
|
|
||||||
if(keyType == ClassType.BOOLEAN) {
|
if(keyType == ClassType.BOOLEAN) {
|
||||||
addBlockedFiles("QueueTests");
|
addBlockedFiles("QueueTests");
|
||||||
|
@ -1,15 +1,30 @@
|
|||||||
package speiger.src.builder.modules;
|
package speiger.src.builder.modules;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Set;
|
import java.util.List;
|
||||||
import java.util.TreeSet;
|
|
||||||
|
|
||||||
import speiger.src.builder.ClassType;
|
import speiger.src.builder.ClassType;
|
||||||
|
import speiger.src.builder.dependencies.FunctionDependency;
|
||||||
|
import speiger.src.builder.dependencies.IDependency;
|
||||||
|
import speiger.src.builder.dependencies.ModuleDependency;
|
||||||
|
|
||||||
@SuppressWarnings("javadoc")
|
@SuppressWarnings("javadoc")
|
||||||
public class SetModule extends BaseModule
|
public class SetModule extends BaseModule
|
||||||
{
|
{
|
||||||
public static final BaseModule INSTANCE = new SetModule();
|
public static final BaseModule INSTANCE = new SetModule();
|
||||||
|
public static final ModuleDependency MODULE = new ModuleDependency(INSTANCE, false).addKeyDependency(CollectionModule.MODULE).addKeyDependency(CollectionModule.SPLIT_ITERATORS);
|
||||||
|
public static final FunctionDependency IMPLEMENTATION = MODULE.createDependency("Implementations");
|
||||||
|
public static final FunctionDependency WRAPPERS = MODULE.createDependency("Wrappers");
|
||||||
|
public static final FunctionDependency ORDERED_SET = MODULE.createDependency("OrderedSet");
|
||||||
|
public static final FunctionDependency SORTED_SET = MODULE.createDependency("SortedSet");
|
||||||
|
public static final FunctionDependency ARRAY_SET = MODULE.createDependency("ArraySet").addKeyDependency(ORDERED_SET).addKeyDependency(IMPLEMENTATION);
|
||||||
|
public static final FunctionDependency IMMUTABLE_SET = MODULE.createDependency("ImmutableSet").addKeyDependency(ORDERED_SET).addKeyDependency(IMPLEMENTATION);
|
||||||
|
public static final FunctionDependency HASH_SET = MODULE.createDependency("HashSet").addKeyDependency(IMPLEMENTATION);
|
||||||
|
public static final FunctionDependency LINKED_SET = MODULE.createDependency("LinkedHashSet").addKeyDependency(ORDERED_SET).addKeyDependency(HASH_SET);
|
||||||
|
public static final FunctionDependency CUSTOM_SET = MODULE.createDependency("CustomHashSet").addKeyDependency(IMPLEMENTATION).addKeyDependency(CollectionModule.STRATEGY);
|
||||||
|
public static final FunctionDependency LINKED_CUSTOM_SET = MODULE.createDependency("LinkedCustomHashSet").addKeyDependency(ORDERED_SET).addKeyDependency(CUSTOM_SET);
|
||||||
|
public static final FunctionDependency AVL_TREE_SET = MODULE.createDependency("AVLTreeSet").addKeyDependency(SORTED_SET).addKeyDependency(IMPLEMENTATION);
|
||||||
|
public static final FunctionDependency RB_TREE_SET = MODULE.createDependency("RBTreeSet").addKeyDependency(SORTED_SET).addKeyDependency(IMPLEMENTATION);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getModuleName() { return "Set"; }
|
public String getModuleName() { return "Set"; }
|
||||||
@ -19,68 +34,40 @@ public class SetModule extends BaseModule
|
|||||||
@Override
|
@Override
|
||||||
public boolean isModuleValid(ClassType keyType, ClassType valueType) { return keyType != ClassType.BOOLEAN; }
|
public boolean isModuleValid(ClassType keyType, ClassType valueType) { return keyType != ClassType.BOOLEAN; }
|
||||||
@Override
|
@Override
|
||||||
public boolean areDependenciesLoaded() { return isDependencyLoaded(CollectionModule.INSTANCE); }
|
public List<IDependency> getDependencies(ClassType keyType, ClassType valueType) { return Arrays.asList(MODULE, WRAPPERS, ORDERED_SET, SORTED_SET, IMPLEMENTATION, ARRAY_SET, IMMUTABLE_SET, HASH_SET, LINKED_SET, CUSTOM_SET, LINKED_CUSTOM_SET, AVL_TREE_SET, RB_TREE_SET); }
|
||||||
@Override
|
|
||||||
public Set<String> getModuleKeys(ClassType keyType, ClassType valueType) {
|
|
||||||
Set<String> sets = new TreeSet<>();
|
|
||||||
sets.addAll(Arrays.asList("Wrappers", "Implementations"));
|
|
||||||
sets.addAll(Arrays.asList("OrderedSet", "SortedSet"));
|
|
||||||
sets.addAll(Arrays.asList("ArraySet", "ImmutableSet"));
|
|
||||||
sets.addAll(Arrays.asList("HashSet", "LinkedHashSet"));
|
|
||||||
sets.addAll(Arrays.asList("CustomHashSet", "LinkedCustomHashSet"));
|
|
||||||
sets.addAll(Arrays.asList("AVLTreeSet", "RBTreeSet"));
|
|
||||||
return sets;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void loadFlags()
|
protected void loadFlags()
|
||||||
{
|
{
|
||||||
if(isModuleEnabled()) addFlag("SET_MODULE");
|
if(MODULE.isEnabled()) addFlag("SET_MODULE");
|
||||||
if(isModuleEnabled("Wrappers")) addFlag("SETS_FEATURE");
|
if(WRAPPERS.isEnabled()) addFlag("SETS_FEATURE");
|
||||||
boolean implementations = isModuleEnabled("Implementations");
|
if(ORDERED_SET.isEnabled()) addFlag("ORDERED_SET_FEATURE");
|
||||||
boolean hashSet = implementations && isModuleEnabled("HashSet");
|
if(SORTED_SET.isEnabled()) addFlag("SORTED_SET_FEATURE");
|
||||||
boolean customHashSet = implementations && isModuleEnabled("CustomHashSet");
|
if(IMMUTABLE_SET.isEnabled()) addFlag("IMMUTABLE_SET_FEATURE");
|
||||||
|
if(ARRAY_SET.isEnabled()) addFlag("ARRAY_SET_FEATURE");
|
||||||
if(isModuleEnabled("OrderedSet")) {
|
if(HASH_SET.isEnabled()) addFlag("HASH_SET_FEATURE");
|
||||||
addFlag("ORDERED_SET_FEATURE");
|
if(LINKED_SET.isEnabled()) addFlag("LINKED_SET_FEATURE");
|
||||||
if(implementations && isModuleEnabled("ArraySet")) addFlag("ARRAY_SET_FEATURE");
|
if(CUSTOM_SET.isEnabled()) addFlag("CUSTOM_HASH_SET_FEATURE");
|
||||||
if(hashSet && isModuleEnabled("LinkedHashSet")) addFlag("LINKED_SET_FEATURE");
|
if(LINKED_CUSTOM_SET.isEnabled()) addFlag("LINKED_CUSTOM_SET_FEATURE");
|
||||||
if(customHashSet && isModuleEnabled("LinkedCustomHashSet")) addFlag("LINKED_CUSTOM_SET_FEATURE");
|
if(AVL_TREE_SET.isEnabled()) addFlag("AVL_TREE_SET_FEATURE");
|
||||||
}
|
if(RB_TREE_SET.isEnabled()) addFlag("RB_TREE_SET_FEATURE");
|
||||||
if(isModuleEnabled("SortedSet")) {
|
|
||||||
addFlag("SORTED_SET_FEATURE");
|
|
||||||
if(implementations && isModuleEnabled("AVLTreeSet")) addFlag("AVL_TREE_SET_FEATURE");
|
|
||||||
if(implementations && isModuleEnabled("RBTreeSet")) addFlag("RB_TREE_SET_FEATURE");
|
|
||||||
}
|
|
||||||
if(implementations && isModuleEnabled("ImmutableSet")) addFlag("IMMUTABLE_SET_FEATURE");
|
|
||||||
if(hashSet) addFlag("HASH_SET_FEATURE");
|
|
||||||
if(customHashSet) addFlag("CUSTOM_HASH_SET_FEATURE");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void loadBlockades()
|
protected void loadBlockades()
|
||||||
{
|
{
|
||||||
if(!isModuleEnabled()) addBlockedFiles("Set", "AbstractSet");
|
if(!MODULE.isEnabled()) addBlockedFiles("Set", "AbstractSet");
|
||||||
if(!isModuleEnabled("Wrappers")) addBlockedFiles("Sets");
|
if(!WRAPPERS.isEnabled()) addBlockedFiles("Sets");
|
||||||
boolean implementations = !isModuleEnabled("Implementations");
|
if(!IMMUTABLE_SET.isEnabled()) addBlockedFiles("ImmutableOpenHashSet");
|
||||||
if(implementations || !isModuleEnabled("ImmutableSet")) addBlockedFiles("ImmutableOpenHashSet");
|
if(!ORDERED_SET.isEnabled()) addBlockedFiles("OrderedSet");
|
||||||
|
if(!HASH_SET.isEnabled()) addBlockedFiles("OpenHashSet");
|
||||||
boolean ordered = !isModuleEnabled("OrderedSet");
|
if(!LINKED_SET.isEnabled()) addBlockedFiles("LinkedOpenHashSet");
|
||||||
if(ordered) addBlockedFiles("OrderedSet");
|
if(!CUSTOM_SET.isEnabled()) addBlockedFiles("OpenCustomHashSet");
|
||||||
boolean hashSet = implementations || !isModuleEnabled("HashSet");
|
if(!LINKED_CUSTOM_SET.isEnabled()) addBlockedFiles("LinkedOpenCustomHashSet");
|
||||||
if(hashSet) addBlockedFiles("OpenHashSet");
|
if(!ARRAY_SET.isEnabled()) addBlockedFiles("ArraySet");
|
||||||
if(hashSet || ordered || !isModuleEnabled("LinkedHashSet")) addBlockedFiles("LinkedOpenHashSet");
|
if(!SORTED_SET.isEnabled()) addBlockedFiles("SortedSet", "NavigableSet");
|
||||||
|
if(!AVL_TREE_SET.isEnabled()) addBlockedFiles("AVLTreeSet");
|
||||||
boolean customHashSet = implementations || !isModuleEnabled("CustomHashSet");
|
if(!RB_TREE_SET.isEnabled()) addBlockedFiles("RBTreeSet");
|
||||||
if(customHashSet) addBlockedFiles("OpenCustomHashSet");
|
|
||||||
if(customHashSet || ordered || !isModuleEnabled("LinkedCustomHashSet")) addBlockedFiles("LinkedOpenCustomHashSet");
|
|
||||||
|
|
||||||
if(implementations || ordered || !isModuleEnabled("ArraySet")) addBlockedFiles("ArraySet");
|
|
||||||
|
|
||||||
boolean sorted = !isModuleEnabled("SortedSet");
|
|
||||||
if(sorted) addBlockedFiles("SortedSet", "NavigableSet");
|
|
||||||
if(implementations || sorted || !isModuleEnabled("AVLTreeSet")) addBlockedFiles("AVLTreeSet");
|
|
||||||
if(implementations || sorted || !isModuleEnabled("RBTreeSet")) addBlockedFiles("RBTreeSet");
|
|
||||||
|
|
||||||
if(keyType == ClassType.BOOLEAN)
|
if(keyType == ClassType.BOOLEAN)
|
||||||
{
|
{
|
||||||
|
@ -1,19 +1,11 @@
|
|||||||
package speiger.src.collections.PACKAGE.collections;
|
package speiger.src.collections.PACKAGE.collections;
|
||||||
|
|
||||||
#if !TYPE_OBJECT
|
|
||||||
import speiger.src.collections.objects.collections.ObjectBidirectionalIterator;
|
|
||||||
/**
|
|
||||||
* A Type-Specific {@link ObjectBidirectionalIterator} to reduce (un)boxing
|
|
||||||
*/
|
|
||||||
public interface BI_ITERATOR KEY_GENERIC_TYPE extends ITERATOR KEY_GENERIC_TYPE, ObjectBidirectionalIterator<CLASS_TYPE>
|
|
||||||
#else
|
|
||||||
/**
|
/**
|
||||||
* This is a basically a {@link java.util.ListIterator} without the index functions.
|
* This is a basically a {@link java.util.ListIterator} without the index functions.
|
||||||
* Allowing to have a simple Bidirectional Iterator without having to keep track of the Iteration index.
|
* Allowing to have a simple Bidirectional Iterator without having to keep track of the Iteration index.
|
||||||
* @Type(T)
|
* @Type(T)
|
||||||
*/
|
*/
|
||||||
public interface BI_ITERATOR KEY_GENERIC_TYPE extends ITERATOR KEY_GENERIC_TYPE
|
public interface BI_ITERATOR KEY_GENERIC_TYPE extends ITERATOR KEY_GENERIC_TYPE
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Returns true if the Iterator has a Previous element
|
* Returns true if the Iterator has a Previous element
|
||||||
@ -29,11 +21,11 @@ public interface BI_ITERATOR KEY_GENERIC_TYPE extends ITERATOR KEY_GENERIC_TYPE
|
|||||||
public KEY_TYPE PREVIOUS();
|
public KEY_TYPE PREVIOUS();
|
||||||
|
|
||||||
#if !TYPE_OBJECT
|
#if !TYPE_OBJECT
|
||||||
/** {@inheritDoc}
|
/**
|
||||||
* <p>This default implementation delegates to the corresponding type-specific function.
|
* <p>This default implementation delegates to the corresponding type-specific function.
|
||||||
* @deprecated Please use the corresponding type-specific function instead.
|
* @deprecated Please use the corresponding type-specific function instead.
|
||||||
|
* @return the Previous element of the iterator.+
|
||||||
*/
|
*/
|
||||||
@Override
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public default CLASS_TYPE previous() {
|
public default CLASS_TYPE previous() {
|
||||||
return KEY_TO_OBJ(PREVIOUS());
|
return KEY_TO_OBJ(PREVIOUS());
|
||||||
|
@ -11,11 +11,15 @@ import java.util.RandomAccess;
|
|||||||
import speiger.src.collections.PACKAGE.collections.ABSTRACT_COLLECTION;
|
import speiger.src.collections.PACKAGE.collections.ABSTRACT_COLLECTION;
|
||||||
import speiger.src.collections.PACKAGE.collections.COLLECTION;
|
import speiger.src.collections.PACKAGE.collections.COLLECTION;
|
||||||
import speiger.src.collections.PACKAGE.collections.ITERATOR;
|
import speiger.src.collections.PACKAGE.collections.ITERATOR;
|
||||||
|
#if SPLIT_ITERATOR_FEATURE
|
||||||
import speiger.src.collections.PACKAGE.collections.SPLIT_ITERATOR;
|
import speiger.src.collections.PACKAGE.collections.SPLIT_ITERATOR;
|
||||||
|
#endif
|
||||||
#if INT_LIST_MODULE && !TYPE_INT
|
#if INT_LIST_MODULE && !TYPE_INT
|
||||||
import speiger.src.collections.ints.lists.IntList;
|
import speiger.src.collections.ints.lists.IntList;
|
||||||
#endif
|
#endif
|
||||||
|
#if SPLIT_ITERATOR_FEATURE
|
||||||
import speiger.src.collections.PACKAGE.utils.SPLIT_ITERATORS;
|
import speiger.src.collections.PACKAGE.utils.SPLIT_ITERATORS;
|
||||||
|
#endif
|
||||||
import speiger.src.collections.utils.SanityChecks;
|
import speiger.src.collections.utils.SanityChecks;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -532,9 +536,10 @@ public abstract class ABSTRACT_LIST KEY_GENERIC_TYPE extends ABSTRACT_COLLECTION
|
|||||||
public int size() {
|
public int size() {
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
#if SPLIT_ITERATOR_FEATURE
|
||||||
@Override
|
@Override
|
||||||
public SPLIT_ITERATOR KEY_GENERIC_TYPE spliterator() { return SPLIT_ITERATORS.createSplititerator(this, 16464); }
|
public SPLIT_ITERATOR KEY_GENERIC_TYPE spliterator() { return SPLIT_ITERATORS.createSplititerator(this, 16464); }
|
||||||
|
#endif
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LIST_ITERATOR KEY_GENERIC_TYPE listIterator(int index) {
|
public LIST_ITERATOR KEY_GENERIC_TYPE listIterator(int index) {
|
||||||
|
@ -13,11 +13,13 @@ import java.util.Collection;
|
|||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.NoSuchElementException;
|
import java.util.NoSuchElementException;
|
||||||
|
#if SPLIT_ITERATOR_FEATURE
|
||||||
import java.util.Spliterator;
|
import java.util.Spliterator;
|
||||||
#if PRIMITIVES
|
#if PRIMITIVES
|
||||||
import java.util.Spliterator.JAVA_SPLIT_ITERATOR;
|
import java.util.Spliterator.JAVA_SPLIT_ITERATOR;
|
||||||
#endif
|
#endif
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
#endif
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
#if TYPE_OBJECT
|
#if TYPE_OBJECT
|
||||||
import java.util.function.IntFunction;
|
import java.util.function.IntFunction;
|
||||||
@ -60,12 +62,14 @@ 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;
|
||||||
#endif
|
#endif
|
||||||
|
#if SPLIT_ITERATOR_FEATURE
|
||||||
#if PRIMITIVES
|
#if PRIMITIVES
|
||||||
import java.util.stream.JAVA_STREAM;
|
import java.util.stream.JAVA_STREAM;
|
||||||
import java.util.stream.StreamSupport;
|
import java.util.stream.StreamSupport;
|
||||||
#endif
|
#endif
|
||||||
import speiger.src.collections.PACKAGE.collections.SPLIT_ITERATOR;
|
import speiger.src.collections.PACKAGE.collections.SPLIT_ITERATOR;
|
||||||
import speiger.src.collections.PACKAGE.utils.SPLIT_ITERATORS;
|
import speiger.src.collections.PACKAGE.utils.SPLIT_ITERATORS;
|
||||||
|
#endif
|
||||||
import speiger.src.collections.utils.SanityChecks;
|
import speiger.src.collections.utils.SanityChecks;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -415,7 +419,8 @@ public class LINKED_LIST KEY_GENERIC_TYPE extends ABSTRACT_LIST KEY_GENERIC_TYPE
|
|||||||
if(index == 0) return new ListIter(first, index);
|
if(index == 0) return new ListIter(first, index);
|
||||||
return new ListIter(getNode(index), index);
|
return new ListIter(getNode(index), index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if SPLIT_ITERATOR_FEATURE
|
||||||
#if PRIMITIVES
|
#if PRIMITIVES
|
||||||
/**
|
/**
|
||||||
* Returns a Java-Type-Specific Stream to reduce boxing/unboxing.
|
* Returns a Java-Type-Specific Stream to reduce boxing/unboxing.
|
||||||
@ -436,6 +441,7 @@ public class LINKED_LIST KEY_GENERIC_TYPE extends ABSTRACT_LIST KEY_GENERIC_TYPE
|
|||||||
@Override
|
@Override
|
||||||
public SPLIT_ITERATOR KEY_GENERIC_TYPE spliterator() { return new TypeSplitIteratorBRACES(this, first, 0); }
|
public SPLIT_ITERATOR KEY_GENERIC_TYPE spliterator() { return new TypeSplitIteratorBRACES(this, first, 0); }
|
||||||
|
|
||||||
|
#endif
|
||||||
@Override
|
@Override
|
||||||
public void forEach(CONSUMER KEY_SUPER_GENERIC_TYPE action) {
|
public void forEach(CONSUMER KEY_SUPER_GENERIC_TYPE action) {
|
||||||
Objects.requireNonNull(action);
|
Objects.requireNonNull(action);
|
||||||
@ -1253,6 +1259,7 @@ public class LINKED_LIST KEY_GENERIC_TYPE extends ABSTRACT_LIST KEY_GENERIC_TYPE
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if SPLIT_ITERATOR_FEATURE
|
||||||
private static class TypeSplitIterator KEY_GENERIC_TYPE implements SPLIT_ITERATOR KEY_GENERIC_TYPE
|
private static class TypeSplitIterator KEY_GENERIC_TYPE implements SPLIT_ITERATOR KEY_GENERIC_TYPE
|
||||||
{
|
{
|
||||||
static final int BATCH_UNIT = 1 << 10;
|
static final int BATCH_UNIT = 1 << 10;
|
||||||
@ -1397,4 +1404,5 @@ public class LINKED_LIST KEY_GENERIC_TYPE extends ABSTRACT_LIST KEY_GENERIC_TYPE
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
}
|
}
|
@ -15,7 +15,9 @@ import java.util.function.UnaryOperator;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
import speiger.src.collections.PACKAGE.collections.COLLECTION;
|
import speiger.src.collections.PACKAGE.collections.COLLECTION;
|
||||||
|
#if SPLIT_ITERATOR_FEATURE
|
||||||
import speiger.src.collections.PACKAGE.collections.SPLIT_ITERATOR;
|
import speiger.src.collections.PACKAGE.collections.SPLIT_ITERATOR;
|
||||||
|
#endif
|
||||||
import speiger.src.collections.ints.functions.consumer.BI_FROM_INT_CONSUMER;
|
import speiger.src.collections.ints.functions.consumer.BI_FROM_INT_CONSUMER;
|
||||||
#if !TYPE_OBJECT
|
#if !TYPE_OBJECT
|
||||||
import speiger.src.collections.PACKAGE.functions.COMPARATOR;
|
import speiger.src.collections.PACKAGE.functions.COMPARATOR;
|
||||||
@ -27,7 +29,9 @@ import speiger.src.collections.PACKAGE.utils.LISTS;
|
|||||||
#if INT_LIST_MODULE && !TYPE_INT
|
#if INT_LIST_MODULE && !TYPE_INT
|
||||||
import speiger.src.collections.ints.lists.IntList;
|
import speiger.src.collections.ints.lists.IntList;
|
||||||
#endif
|
#endif
|
||||||
|
#if SPLIT_ITERATOR_FEATURE
|
||||||
import speiger.src.collections.PACKAGE.utils.SPLIT_ITERATORS;
|
import speiger.src.collections.PACKAGE.utils.SPLIT_ITERATORS;
|
||||||
|
#endif
|
||||||
#if TYPE_BYTE || TYPE_SHORT || TYPE_CHAR || TYPE_FLOAT
|
#if TYPE_BYTE || TYPE_SHORT || TYPE_CHAR || TYPE_FLOAT
|
||||||
import speiger.src.collections.utils.SanityChecks;
|
import speiger.src.collections.utils.SanityChecks;
|
||||||
#endif
|
#endif
|
||||||
@ -594,10 +598,12 @@ public interface LIST KEY_GENERIC_TYPE extends COLLECTION KEY_GENERIC_TYPE, List
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
#if SPLIT_ITERATOR_FEATURE
|
||||||
/**
|
/**
|
||||||
* A Type Specific Type Splititerator to reduce boxing/unboxing
|
* A Type Specific Type Splititerator to reduce boxing/unboxing
|
||||||
* @return type specific splititerator
|
* @return type specific splititerator
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
default SPLIT_ITERATOR KEY_GENERIC_TYPE spliterator() { return SPLIT_ITERATORS.createSplititerator(this, 0); }
|
default SPLIT_ITERATOR KEY_GENERIC_TYPE spliterator() { return SPLIT_ITERATORS.createSplititerator(this, 0); }
|
||||||
|
#endif
|
||||||
}
|
}
|
@ -3,11 +3,13 @@ package speiger.src.collections.PACKAGE.sets;
|
|||||||
import java.util.NavigableSet;
|
import java.util.NavigableSet;
|
||||||
|
|
||||||
import speiger.src.collections.PACKAGE.collections.BI_ITERATOR;
|
import speiger.src.collections.PACKAGE.collections.BI_ITERATOR;
|
||||||
|
#if SPLIT_ITERATOR_FEATURE
|
||||||
import speiger.src.collections.PACKAGE.collections.SPLIT_ITERATOR;
|
import speiger.src.collections.PACKAGE.collections.SPLIT_ITERATOR;
|
||||||
|
import speiger.src.collections.PACKAGE.utils.SPLIT_ITERATORS;
|
||||||
|
#endif
|
||||||
#if SETS_FEATURE
|
#if SETS_FEATURE
|
||||||
import speiger.src.collections.PACKAGE.utils.SETS;
|
import speiger.src.collections.PACKAGE.utils.SETS;
|
||||||
#endif
|
#endif
|
||||||
import speiger.src.collections.PACKAGE.utils.SPLIT_ITERATORS;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Type Specific Navigable Set interface with a couple helper methods
|
* A Type Specific Navigable Set interface with a couple helper methods
|
||||||
@ -145,6 +147,7 @@ public interface NAVIGABLE_SET KEY_GENERIC_TYPE extends NavigableSet<CLASS_TYPE>
|
|||||||
public default NAVIGABLE_SET KEY_GENERIC_TYPE unmodifiable() { return SETS.unmodifiable(this); }
|
public default NAVIGABLE_SET KEY_GENERIC_TYPE unmodifiable() { return SETS.unmodifiable(this); }
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
#if SPLIT_ITERATOR_FEATURE
|
||||||
/**
|
/**
|
||||||
* A Type Specific Type Splititerator to reduce boxing/unboxing
|
* A Type Specific Type Splititerator to reduce boxing/unboxing
|
||||||
* @return type specific splititerator
|
* @return type specific splititerator
|
||||||
@ -152,6 +155,7 @@ public interface NAVIGABLE_SET KEY_GENERIC_TYPE extends NavigableSet<CLASS_TYPE>
|
|||||||
@Override
|
@Override
|
||||||
default SPLIT_ITERATOR KEY_GENERIC_TYPE spliterator() { return SPLIT_ITERATORS.createSplititerator(this, 0); }
|
default SPLIT_ITERATOR KEY_GENERIC_TYPE spliterator() { return SPLIT_ITERATORS.createSplititerator(this, 0); }
|
||||||
|
|
||||||
|
#endif
|
||||||
#if !TYPE_OBJECT
|
#if !TYPE_OBJECT
|
||||||
@Override
|
@Override
|
||||||
@Deprecated
|
@Deprecated
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
package speiger.src.collections.PACKAGE.sets;
|
package speiger.src.collections.PACKAGE.sets;
|
||||||
|
|
||||||
import speiger.src.collections.PACKAGE.collections.BI_ITERATOR;
|
import speiger.src.collections.PACKAGE.collections.BI_ITERATOR;
|
||||||
|
#if SPLIT_ITERATOR_FEATURE
|
||||||
import speiger.src.collections.PACKAGE.collections.SPLIT_ITERATOR;
|
import speiger.src.collections.PACKAGE.collections.SPLIT_ITERATOR;
|
||||||
|
import speiger.src.collections.PACKAGE.utils.SPLIT_ITERATORS;
|
||||||
|
#endif
|
||||||
#if SETS_FEATURE
|
#if SETS_FEATURE
|
||||||
import speiger.src.collections.PACKAGE.utils.SETS;
|
import speiger.src.collections.PACKAGE.utils.SETS;
|
||||||
#endif
|
#endif
|
||||||
import speiger.src.collections.PACKAGE.utils.SPLIT_ITERATORS;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Special Set Interface giving Access to some really usefull functions
|
* A Special Set Interface giving Access to some really usefull functions
|
||||||
@ -61,6 +63,7 @@ public interface ORDERED_SET KEY_GENERIC_TYPE extends SET KEY_GENERIC_TYPE
|
|||||||
*/
|
*/
|
||||||
public BI_ITERATOR KEY_GENERIC_TYPE iterator(KEY_TYPE fromElement);
|
public BI_ITERATOR KEY_GENERIC_TYPE iterator(KEY_TYPE fromElement);
|
||||||
|
|
||||||
|
#if SPLIT_ITERATOR_FEATURE
|
||||||
/**
|
/**
|
||||||
* A Type Specific Type Splititerator to reduce boxing/unboxing
|
* A Type Specific Type Splititerator to reduce boxing/unboxing
|
||||||
* @return type specific splititerator
|
* @return type specific splititerator
|
||||||
@ -68,6 +71,7 @@ public interface ORDERED_SET KEY_GENERIC_TYPE extends SET KEY_GENERIC_TYPE
|
|||||||
@Override
|
@Override
|
||||||
default SPLIT_ITERATOR KEY_GENERIC_TYPE spliterator() { return SPLIT_ITERATORS.createSplititerator(this, 0); }
|
default SPLIT_ITERATOR KEY_GENERIC_TYPE spliterator() { return SPLIT_ITERATORS.createSplititerator(this, 0); }
|
||||||
|
|
||||||
|
#endif
|
||||||
/**
|
/**
|
||||||
* A method to get the first element in the set
|
* A method to get the first element in the set
|
||||||
* @return first element in the set
|
* @return first element in the set
|
||||||
|
@ -4,11 +4,13 @@ import java.util.Set;
|
|||||||
|
|
||||||
import speiger.src.collections.PACKAGE.collections.COLLECTION;
|
import speiger.src.collections.PACKAGE.collections.COLLECTION;
|
||||||
import speiger.src.collections.PACKAGE.collections.ITERATOR;
|
import speiger.src.collections.PACKAGE.collections.ITERATOR;
|
||||||
|
#if SPLIT_ITERATOR_FEATURE
|
||||||
import speiger.src.collections.PACKAGE.collections.SPLIT_ITERATOR;
|
import speiger.src.collections.PACKAGE.collections.SPLIT_ITERATOR;
|
||||||
|
import speiger.src.collections.PACKAGE.utils.SPLIT_ITERATORS;
|
||||||
|
#endif
|
||||||
#if SETS_FEATURE
|
#if SETS_FEATURE
|
||||||
import speiger.src.collections.PACKAGE.utils.SETS;
|
import speiger.src.collections.PACKAGE.utils.SETS;
|
||||||
#endif
|
#endif
|
||||||
import speiger.src.collections.PACKAGE.utils.SPLIT_ITERATORS;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -88,10 +90,12 @@ public interface SET KEY_GENERIC_TYPE extends Set<CLASS_TYPE>, COLLECTION KEY_GE
|
|||||||
public default SET KEY_GENERIC_TYPE unmodifiable() { return SETS.unmodifiable(this); }
|
public default SET KEY_GENERIC_TYPE unmodifiable() { return SETS.unmodifiable(this); }
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
#if SPLIT_ITERATOR_FEATURE
|
||||||
/**
|
/**
|
||||||
* A Type Specific Type Splititerator to reduce boxing/unboxing
|
* A Type Specific Type Splititerator to reduce boxing/unboxing
|
||||||
* @return type specific splititerator
|
* @return type specific splititerator
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
default SPLIT_ITERATOR KEY_GENERIC_TYPE spliterator() { return SPLIT_ITERATORS.createSplititerator(this, 0); }
|
default SPLIT_ITERATOR KEY_GENERIC_TYPE spliterator() { return SPLIT_ITERATORS.createSplititerator(this, 0); }
|
||||||
}
|
#endif
|
||||||
|
}
|
||||||
|
@ -3,7 +3,9 @@ package speiger.src.collections.PACKAGE.sets;
|
|||||||
import java.util.SortedSet;
|
import java.util.SortedSet;
|
||||||
|
|
||||||
import speiger.src.collections.PACKAGE.collections.BI_ITERATOR;
|
import speiger.src.collections.PACKAGE.collections.BI_ITERATOR;
|
||||||
|
#if SPLIT_ITERATOR_FEATURE
|
||||||
import speiger.src.collections.PACKAGE.collections.SPLIT_ITERATOR;
|
import speiger.src.collections.PACKAGE.collections.SPLIT_ITERATOR;
|
||||||
|
#endif
|
||||||
#if TYPE_OBJECT
|
#if TYPE_OBJECT
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
#else
|
#else
|
||||||
@ -12,7 +14,9 @@ import speiger.src.collections.PACKAGE.functions.COMPARATOR;
|
|||||||
#if SETS_FEATURE
|
#if SETS_FEATURE
|
||||||
import speiger.src.collections.PACKAGE.utils.SETS;
|
import speiger.src.collections.PACKAGE.utils.SETS;
|
||||||
#endif
|
#endif
|
||||||
|
#if SPLIT_ITERATOR_FEATURE
|
||||||
import speiger.src.collections.PACKAGE.utils.SPLIT_ITERATORS;
|
import speiger.src.collections.PACKAGE.utils.SPLIT_ITERATORS;
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Type Specific SortedSet implementation to reduce boxing/unboxing
|
* A Type Specific SortedSet implementation to reduce boxing/unboxing
|
||||||
@ -67,6 +71,7 @@ public interface SORTED_SET KEY_GENERIC_TYPE extends SET KEY_GENERIC_TYPE, Sorte
|
|||||||
public default SORTED_SET KEY_GENERIC_TYPE unmodifiable() { return SETS.unmodifiable(this); }
|
public default SORTED_SET KEY_GENERIC_TYPE unmodifiable() { return SETS.unmodifiable(this); }
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
#if SPLIT_ITERATOR_FEATURE
|
||||||
/**
|
/**
|
||||||
* A Type Specific Type Splititerator to reduce boxing/unboxing
|
* A Type Specific Type Splititerator to reduce boxing/unboxing
|
||||||
* @return type specific splititerator
|
* @return type specific splititerator
|
||||||
@ -74,6 +79,7 @@ public interface SORTED_SET KEY_GENERIC_TYPE extends SET KEY_GENERIC_TYPE, Sorte
|
|||||||
@Override
|
@Override
|
||||||
default SPLIT_ITERATOR KEY_GENERIC_TYPE spliterator() { return SPLIT_ITERATORS.createSplititerator(this, 0); }
|
default SPLIT_ITERATOR KEY_GENERIC_TYPE spliterator() { return SPLIT_ITERATORS.createSplititerator(this, 0); }
|
||||||
|
|
||||||
|
#endif
|
||||||
#if !TYPE_OBJECT
|
#if !TYPE_OBJECT
|
||||||
/**
|
/**
|
||||||
* A Type Specific SubSet method to reduce boxing/unboxing
|
* A Type Specific SubSet method to reduce boxing/unboxing
|
||||||
|
@ -25,7 +25,7 @@ import speiger.src.collections.booleans.collections.BooleanIterator;
|
|||||||
#argument PACKAGE bytes shorts ints longs floats doubles
|
#argument PACKAGE bytes shorts ints longs floats doubles
|
||||||
#argument MAPPER ToByteFunction ToShortFunction ToIntFunction ToLongFunction ToFloatFunction ToDoubleFunction
|
#argument MAPPER ToByteFunction ToShortFunction ToIntFunction ToLongFunction ToFloatFunction ToDoubleFunction
|
||||||
#argument FILTER_TYPE BYTE_COLLECTION_MODULE SHORT_COLLECTION_MODULE INT_COLLECTION_MODULE LONG_COLLECTION_MODULE FLOAT_COLLECTION_MODULE DOUBLE_COLLECTION_MODULE
|
#argument FILTER_TYPE BYTE_COLLECTION_MODULE SHORT_COLLECTION_MODULE INT_COLLECTION_MODULE LONG_COLLECTION_MODULE FLOAT_COLLECTION_MODULE DOUBLE_COLLECTION_MODULE
|
||||||
#if BOOLEAN_COLLECTION_MODULE
|
#if FILTER_TYPE
|
||||||
import speiger.src.collections.objects.functions.function.MAPPER;
|
import speiger.src.collections.objects.functions.function.MAPPER;
|
||||||
import speiger.src.collections.PACKAGE.collections.ITERATOR;
|
import speiger.src.collections.PACKAGE.collections.ITERATOR;
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user