diff --git a/.gitignore b/.gitignore index b09e7783..62f0e993 100644 --- a/.gitignore +++ b/.gitignore @@ -1,61 +1,3 @@ -# ---> Eclipse -.metadata -bin/ -tmp/ -*.tmp -*.bak -*.swp -*~.nib -local.properties -.settings/ -.loadpath -.recommenders - -# External tool builders -.externalToolBuilders/ - -# Locally stored "Eclipse launch configurations" -*.launch - -# PyDev specific (Python IDE for Eclipse) -*.pydevproject - -# CDT-specific (C/C++ Development Tooling) -.cproject - -# CDT- autotools -.autotools - -# Java annotation processor (APT) -.factorypath - -# PDT-specific (PHP Development Tools) -.buildpath - -# sbteclipse plugin -.target - -# Tern plugin -.tern-project - -# TeXlipse plugin -.texlipse - -# STS (Spring Tool Suite) -.springBeans - -# Code Recommenders -.recommenders/ - -# Annotation Processing -.apt_generated/ -.apt_generated_test/ - -# Scala IDE specific (Scala & Java development for Eclipse) -.cache-main -.scala_dependencies -.worksheet - # ---> Gradle .gradle /build/ @@ -98,6 +40,10 @@ gradle-app.setting hs_err_pid* ---> Custom +/libs/ +/.settings/ +/bin/ +/storage/ #Generated Code /src/main/java/speiger/src/collections/booleans/* /src/main/java/speiger/src/collections/bytes/* diff --git a/build.gradle b/build.gradle index 8a27cd65..2b035101 100644 --- a/build.gradle +++ b/build.gradle @@ -6,10 +6,21 @@ tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } +eclipse { + classpath { + downloadJavadoc = true + downloadSources = true + } +} + repositories { jcenter() + flatDir { + dirs '/libs' + } } dependencies { + compile 'SimpleCodeGenerator:Simple Code Generator:1.0' testImplementation 'junit:junit:4.12' } diff --git a/src/main/java/speiger/src/builder/base/ConditionedSegment.java b/src/main/java/speiger/src/builder/base/ConditionedSegment.java deleted file mode 100644 index 7e5ba4fe..00000000 --- a/src/main/java/speiger/src/builder/base/ConditionedSegment.java +++ /dev/null @@ -1,89 +0,0 @@ -package speiger.src.builder.base; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import java.util.StringJoiner; -import java.util.regex.Pattern; - -import speiger.src.builder.conditions.ICondition; -import speiger.src.builder.misc.Tuple; - -public class ConditionedSegment -{ - static final Pattern AND = Pattern.compile("(&&)"); - static final Pattern OR = Pattern.compile("(||)"); - - int index; - List> segments = new ArrayList<>(); - - public ConditionedSegment(int index) - { - this.index = index; - } - - public void addSegment(ICondition condition, Segment segment) - { - segments.add(new Tuple<>(condition, segment)); - } - - public int build(Set parsePool, StringBuilder builder, int baseIndex) - { - baseIndex += index; - int length = builder.length(); - for(int i = 0,m=segments.size();i entry = segments.get(i); - if(entry.getKey().isValid(parsePool)) - { - entry.getValue().build(parsePool, builder, baseIndex); - break; - } - } - return builder.length() - length; - } - - public static int parse(String currentLine, List lines, int currentIndex, int startIndex, List segments) throws IllegalStateException - { - ConditionedSegment segment = new ConditionedSegment(startIndex); - ICondition condition = ICondition.parse(currentLine); - List childSegments = new ArrayList<>(); - StringJoiner segmentText = new StringJoiner("\n", "\n", ""); - for(int i = currentIndex+1;i(); - segmentText = new StringJoiner("\n", "\n", ""); - } - else if(trimmed.startsWith("#else")) - { - segment.addSegment(condition, new Segment(segmentText.toString(), childSegments)); - condition = ICondition.ALWAYS_TRUE; - childSegments = new ArrayList<>(); - segmentText = new StringJoiner("\n", "\n", ""); - } - else if(trimmed.startsWith("#endif")) - { - segment.addSegment(condition, new Segment(segmentText.toString(), childSegments)); - segments.add(segment); - return i - currentIndex; - } - else if(trimmed.startsWith("#if")) - { - i += parse(trimmed.substring(3).trim(), lines, i, segmentText.length(), childSegments); - } - continue; - } - segmentText.add(s); - } - throw new IllegalStateException("Unclosed #If found!"); - } - -} diff --git a/src/main/java/speiger/src/builder/base/Segment.java b/src/main/java/speiger/src/builder/base/Segment.java deleted file mode 100644 index 3543104e..00000000 --- a/src/main/java/speiger/src/builder/base/Segment.java +++ /dev/null @@ -1,26 +0,0 @@ -package speiger.src.builder.base; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -public class Segment -{ - String text; - List segments = new ArrayList<>(); - - public Segment(String text, List segments) - { - this.text = text; - this.segments = segments; - } - - public void build(Set parsePool, StringBuilder builder, int index) - { - builder.insert(index, text); - for(int i = 0,offset=0,m=segments.size();i segments; - - public Template(String fileName, String textFile, List segments) - { - this.fileName = fileName; - this.textFile = textFile; - this.segments = segments; - } - - public String getFileName() - { - return fileName; - } - - public String build(Set parsePool, List> mappers) - { - StringBuilder builder = new StringBuilder(textFile); - for(int i = 0,offset=0,m=segments.size();i segments = new ArrayList(); - StringJoiner joiner = new StringJoiner("\n"); - List lines = Files.readAllLines(file); - for(int i = 0;i conditions = new ArrayList<>(); - - public AndCondition(ICondition base) - { - conditions.add(base); - } - - public void addCondition(ICondition e) - { - conditions.add(e); - } - - @Override - public boolean isValid(Set parsePool) - { - for(int i = 0,m=conditions.size();i parsePool) - { - return parsePool.contains(flag) != inverted; - } -} diff --git a/src/main/java/speiger/src/builder/conditions/ICondition.java b/src/main/java/speiger/src/builder/conditions/ICondition.java deleted file mode 100644 index 2f5a80b1..00000000 --- a/src/main/java/speiger/src/builder/conditions/ICondition.java +++ /dev/null @@ -1,63 +0,0 @@ -package speiger.src.builder.conditions; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -public interface ICondition -{ - public static final ICondition ALWAYS_TRUE = T -> true; - - public boolean isValid(Set parsePool); - - public default boolean canContinue() { return false; } - - public static ICondition parse(String condition) - { - String[] elements = condition.split(" "); - List conditions = new ArrayList(); - for(int i = 0;i conditions; - - public OrCondition(List conditions) - { - this.conditions = conditions; - } - - @Override - public boolean isValid(Set parsePool) - { - for(int i = 0,m=conditions.size();i -{ - Pattern pattern; - String replacement; - String argumentBreaker; - String braces = "()"; - boolean removeBraces; - - public ArgumentMapper(String pattern, String replacement, String argumentBreaker) - { - this.pattern = Pattern.compile(pattern); - this.replacement = replacement; - this.argumentBreaker = argumentBreaker; - } - - public ArgumentMapper setBraceType(String s) - { - if(s.length() != 2) throw new IllegalStateException("Start and End char only"); - braces = s; - return this; - } - - public ArgumentMapper removeBraces() - { - removeBraces = true; - return this; - } - - @Override - public String apply(String t) - { - Matcher matcher = pattern.matcher(t); - if(matcher.find()) - { - StringBuffer buffer = new StringBuffer(); - do - { - String text = RegexUtil.searchUntil(t, matcher.end()-1, braces.charAt(0), braces.charAt(1)); - if(!text.isEmpty()) - { - RegexUtil.skip(matcher.appendReplacement(buffer, ""), text.length()); - buffer.append(String.format(replacement, (Object[])getString(text).split(argumentBreaker))); - } - } - while(matcher.find()); - matcher.appendTail(buffer); - return buffer.toString(); - } - return t; - } - - protected String getString(String s) - { - return removeBraces ? s.substring(1, s.length() - 1) : s; - } - -} diff --git a/src/main/java/speiger/src/builder/mappers/InjectMapper.java b/src/main/java/speiger/src/builder/mappers/InjectMapper.java deleted file mode 100644 index b80ff224..00000000 --- a/src/main/java/speiger/src/builder/mappers/InjectMapper.java +++ /dev/null @@ -1,61 +0,0 @@ -package speiger.src.builder.mappers; - -import java.util.function.UnaryOperator; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import speiger.src.builder.misc.RegexUtil; - -public class InjectMapper implements UnaryOperator -{ - Pattern pattern; - String replacement; - String braces = "()"; - boolean removeBraces; - - public InjectMapper(String pattern, String replacement) - { - this.pattern = Pattern.compile(pattern); - this.replacement = replacement; - } - - public InjectMapper setBraceType(String s) - { - if(s.length() != 2) throw new IllegalStateException("Start and End char only"); - braces = s; - return this; - } - - public InjectMapper removeBraces() - { - removeBraces = true; - return this; - } - - @Override - public String apply(String t) - { - Matcher matcher = pattern.matcher(t); - if(matcher.find()) - { - StringBuffer buffer = new StringBuffer(); - do - { - String text = RegexUtil.searchUntil(t, matcher.end()-1, braces.charAt(0), braces.charAt(1)); - if(!text.isEmpty()) - { - RegexUtil.skip(matcher.appendReplacement(buffer, ""), text.length()); - buffer.append(String.format(replacement, getString(text))); - } - } while (matcher.find()); - matcher.appendTail(buffer); - return buffer.toString(); - } - return t; - } - - protected String getString(String s) - { - return removeBraces ? s.substring(1, s.length() - 1) : s; - } -} diff --git a/src/main/java/speiger/src/builder/mappers/LineMapper.java b/src/main/java/speiger/src/builder/mappers/LineMapper.java deleted file mode 100644 index d908b619..00000000 --- a/src/main/java/speiger/src/builder/mappers/LineMapper.java +++ /dev/null @@ -1,43 +0,0 @@ -package speiger.src.builder.mappers; - -import java.util.function.UnaryOperator; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import speiger.src.builder.misc.RegexUtil; - -public class LineMapper implements UnaryOperator -{ - Pattern pattern; - - public LineMapper(String pattern) - { - this.pattern = Pattern.compile(pattern, Pattern.LITERAL); - } - - @Override - public String apply(String t) - { - Matcher matcher = pattern.matcher(t); - if(matcher.find()) - { - StringBuffer buffer = new StringBuffer(); - do - { - int start = matcher.end() - 1; - int[] result = RegexUtil.findFullLine(t, start); - if(result != null) - { - matcher.appendReplacement(buffer, pattern.pattern()); - buffer.setLength(buffer.length() - (start - result[0])); - RegexUtil.skip(matcher, result[1] - start); - } - } while (matcher.find()); - matcher.appendTail(buffer); - return buffer.toString(); - } - return t; - } - - -} diff --git a/src/main/java/speiger/src/builder/mappers/SimpleMapper.java b/src/main/java/speiger/src/builder/mappers/SimpleMapper.java deleted file mode 100644 index e63c489e..00000000 --- a/src/main/java/speiger/src/builder/mappers/SimpleMapper.java +++ /dev/null @@ -1,22 +0,0 @@ -package speiger.src.builder.mappers; - -import java.util.function.UnaryOperator; -import java.util.regex.Pattern; - -public class SimpleMapper implements UnaryOperator -{ - Pattern pattern; - String replacement; - - public SimpleMapper(String pattern, String replacement) - { - this.pattern = Pattern.compile(pattern, Pattern.LITERAL); - this.replacement = replacement; - } - - @Override - public String apply(String t) - { - return pattern.matcher(t).replaceAll(replacement); - } -} diff --git a/src/main/java/speiger/src/builder/misc/FileUtils.java b/src/main/java/speiger/src/builder/misc/FileUtils.java deleted file mode 100644 index d4b0945e..00000000 --- a/src/main/java/speiger/src/builder/misc/FileUtils.java +++ /dev/null @@ -1,90 +0,0 @@ -package speiger.src.builder.misc; - -import java.io.BufferedWriter; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.StandardOpenOption; -import java.security.MessageDigest; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Map.Entry; - -public class FileUtils -{ - public static boolean isValid(Path path, Map existing) - { - String s = existing.get(getFileName(path)); - return s == null || !s.equals(FileUtils.getMD5String(path)); - } - - public static Map loadMappings(Path dataFolder) throws IOException - { - Map result = new LinkedHashMap<>(); - dataFolder = dataFolder.resolve("cache.bin"); - if(Files.notExists(dataFolder)) - { - return result; - } - for(String s : Files.readAllLines(dataFolder)) - { - String[] array = s.split("="); - if(array.length == 2) - { - result.put(array[0], array[1]); - } - } - return result; - } - - public static void saveMappings(Map mappings, Path dataFolder) - { - try(BufferedWriter writer = Files.newBufferedWriter(dataFolder.resolve("cache.bin"), StandardOpenOption.CREATE, StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.DSYNC)) - { - for(Entry entry : mappings.entrySet()) - { - writer.write(entry.getKey()+"="+entry.getValue()); - writer.newLine(); - } - writer.flush(); - } - catch(Exception e) - { - e.printStackTrace(); - } - } - - - public static String getFileName(Path path) - { - String name = path.getFileName().toString(); - int index = name.indexOf("."); - return index == -1 ? name : name.substring(0, index); - } - - public static String getMD5String(Path path) - { - try(InputStream stream = Files.newInputStream(path)) - { - MessageDigest digest = MessageDigest.getInstance("MD5"); - byte[] byteArray = new byte[2048]; - int bytesCount = 0; - while((bytesCount = stream.read(byteArray)) != -1) - { - digest.update(byteArray, 0, bytesCount); - } - byte[] bytes = digest.digest(); - StringBuilder sb = new StringBuilder(); - for(int i = 0;i < bytes.length;i++) - { - sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1)); - } - return sb.toString(); - } - catch(Exception e) - { - return null; - } - } -} diff --git a/src/main/java/speiger/src/builder/misc/RegexUtil.java b/src/main/java/speiger/src/builder/misc/RegexUtil.java deleted file mode 100644 index 75e096f5..00000000 --- a/src/main/java/speiger/src/builder/misc/RegexUtil.java +++ /dev/null @@ -1,77 +0,0 @@ -package speiger.src.builder.misc; - -import java.lang.reflect.Field; -import java.util.regex.Matcher; - -public class RegexUtil -{ - static Field LAST_POS; - - public static Matcher skip(Matcher matcher, int amount) - { - try - { - LAST_POS.setInt(matcher, LAST_POS.getInt(matcher) + amount); - } - catch(Exception e) - { - e.printStackTrace(); - } - return matcher; - } - - public static String searchUntil(String text, int startIndex, char increase, char decrease) - { - if(text.charAt(startIndex + 1) != increase) - { - return ""; - } - int inc = 0; - StringBuilder builder = new StringBuilder(); - for(int i = startIndex + 1;i -{ - K key; - V value; - - public Tuple(K key, V value) - { - this.key = key; - this.value = value; - } - - public K getKey() - { - return key; - } - - public V getValue() - { - return value; - } -} diff --git a/src/main/java/speiger/src/builder/processor/BuildTask.java b/src/main/java/speiger/src/builder/processor/BuildTask.java deleted file mode 100644 index fa5b1a1f..00000000 --- a/src/main/java/speiger/src/builder/processor/BuildTask.java +++ /dev/null @@ -1,47 +0,0 @@ -package speiger.src.builder.processor; - -import java.io.BufferedWriter; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.StandardOpenOption; - -import speiger.src.builder.base.Template; - -public class BuildTask implements Runnable -{ - Path basePath; - Template template; - TemplateProcess process; - - public BuildTask(Path basePath, Template template, TemplateProcess process) - { - this.basePath = basePath; - this.template = template; - this.process = process; - } - - @Override - public void run() - { - String s = template.build(process.parsePool, process.mappers); - Path path = (process.pathBuilder != null ? process.pathBuilder.apply(basePath) : basePath).resolve(process.fileName); - try - { - Files.createDirectories(path.getParent()); - } - catch(Exception e) - { - } - try(BufferedWriter writer = Files.newBufferedWriter(path, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE)) - { - writer.write(s); - writer.flush(); - System.out.println("Created: "+process.fileName); - } - catch(Exception e) - { - e.printStackTrace(); - } - } - -} diff --git a/src/main/java/speiger/src/builder/processor/TemplateProcess.java b/src/main/java/speiger/src/builder/processor/TemplateProcess.java deleted file mode 100644 index 567364bc..00000000 --- a/src/main/java/speiger/src/builder/processor/TemplateProcess.java +++ /dev/null @@ -1,48 +0,0 @@ -package speiger.src.builder.processor; - -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.function.UnaryOperator; - -public class TemplateProcess -{ - UnaryOperator pathBuilder; - String fileName; - Set parsePool = new HashSet<>(); - List> mappers = new ArrayList<>(); - - public TemplateProcess(String fileName) - { - this.fileName = fileName; - } - - public void setPathBuilder(UnaryOperator pathBuilder) - { - this.pathBuilder = pathBuilder; - } - - public void addFlags(String...flags) - { - parsePool.addAll(Arrays.asList(flags)); - } - - public void addFlags(Collection flags) - { - parsePool.addAll(flags); - } - - public void addMapper(UnaryOperator mapper) - { - mappers.add(mapper); - } - - public void addMappers(Collection> mappers) - { - this.mappers.addAll(mappers); - } -} diff --git a/src/main/java/speiger/src/builder/processor/TemplateProcessor.java b/src/main/java/speiger/src/builder/processor/TemplateProcessor.java deleted file mode 100644 index d08892e9..00000000 --- a/src/main/java/speiger/src/builder/processor/TemplateProcessor.java +++ /dev/null @@ -1,89 +0,0 @@ -package speiger.src.builder.processor; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Executors; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; -import java.util.function.Consumer; -import java.util.stream.Collectors; - -import speiger.src.builder.base.Template; -import speiger.src.builder.misc.FileUtils; - -public abstract class TemplateProcessor -{ - Path sourceFolder; - Path outputFolder; - Path dataFolder; - boolean init = false; - - public TemplateProcessor(Path sourceFolder, Path outputFolder, Path dataFolder) - { - this.sourceFolder = sourceFolder; - this.outputFolder = outputFolder; - this.dataFolder = dataFolder; - } - - protected abstract void init(); - - protected abstract boolean isFileValid(Path fileName); - - public abstract void createProcesses(String fileName, Consumer process); - - protected abstract boolean relativePackages(); - - public boolean process(boolean force) throws IOException, InterruptedException - { - if(!init) - { - init = true; - init(); - } - Map existing = FileUtils.loadMappings(dataFolder); - List pathsLeft = Files.walk(sourceFolder).filter(Files::isRegularFile).filter(T -> isFileValid(T.getFileName())).filter(T -> force || FileUtils.isValid(T, existing)).collect(Collectors.toList()); - if(pathsLeft.isEmpty() && !force) - { - System.out.println("Nothing has changed"); - return false; - } - final boolean relative = relativePackages(); - ThreadPoolExecutor service = (ThreadPoolExecutor)Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); - service.setKeepAliveTime(10, TimeUnit.MILLISECONDS); - service.allowCoreThreadTimeOut(true); - service.submit(() -> { - for(int i = 0,m=pathsLeft.size();i service.execute(new BuildTask(relative ? outputFolder.resolve(sourceFolder.relativize(path).getParent()) : outputFolder, template, T))); - } - catch(Exception e) - { - e.printStackTrace(); - continue; - } - } - }); - long start = System.currentTimeMillis(); - System.out.println("Started Tasks"); - for(int i = 0,m=pathsLeft.size();i 0) - { - Thread.sleep(10); - } - System.out.println("Finished Tasks: "+(System.currentTimeMillis() - start)+"ms"); - FileUtils.saveMappings(existing, dataFolder); - System.out.print("Saved Changes"); - return true; - } -} diff --git a/src/main/java/speiger/src/collections/utils/PriorityQueue.java b/src/main/java/speiger/src/collections/utils/PriorityQueue.java deleted file mode 100644 index b5f3feab..00000000 --- a/src/main/java/speiger/src/collections/utils/PriorityQueue.java +++ /dev/null @@ -1,25 +0,0 @@ -package speiger.src.collections.utils; - -import java.util.Comparator; - -public interface PriorityQueue extends Iterable -{ - public void enqueue(T e); - public T dequeue(); - - public int size(); - public default boolean isEmpty() { return size() <= 0; } - public void clear(); - - public T first(); - public T last(); - public T peek(int index); - - public boolean remove(T e); - public boolean removeLast(T e); - public void onChanged(); - public Comparator comparator(); - - public default T[] toArray() { return toArray((T[])new Object[size()]); } - public T[] toArray(T[] input); -} \ No newline at end of file diff --git a/src/main/java/speiger/src/collections/utils/SanityChecks.java b/src/main/java/speiger/src/collections/utils/SanityChecks.java index dbeecc64..12aabf9a 100644 --- a/src/main/java/speiger/src/collections/utils/SanityChecks.java +++ b/src/main/java/speiger/src/collections/utils/SanityChecks.java @@ -12,6 +12,7 @@ public class SanityChecks { public static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; private static ForkJoinPool WORK_POOL = ForkJoinPool.commonPool(); + private static boolean FORCE_IGNORE_PARALLELISM = false; private static ThreadLocal RANDOM = ThreadLocal.withInitial(Random::new); private static ThreadLocal FORCE_ASYNC = ThreadLocal.withInitial(() -> false); private static ThreadLocal FORCE_TASK_POOL = ThreadLocal.withInitial(() -> false); @@ -80,7 +81,7 @@ public class SanityChecks * @return true if the threadcount is bigger the 1 */ public static boolean canParallelTask() { - return WORK_POOL.getParallelism() > 1; + return WORK_POOL.getParallelism() > 1 || FORCE_IGNORE_PARALLELISM; } /** @@ -149,6 +150,14 @@ public class SanityChecks FORCE_TASK_POOL.set(Boolean.valueOf(value)); } + /** + * Helper method to decide if Parallelism should be checked or not. + * @param value if the Parallelism should be ignored + */ + public static void setForceIgnoreParallelism(boolean value) { + FORCE_IGNORE_PARALLELISM = value; + } + /** * @return Thread Specific Random needed for internal functions in this library. */