diff --git a/src/net/persei/tools/ArrayHelper.java b/src/net/persei/tools/ArrayHelper.java new file mode 100644 index 0000000..50c0f90 --- /dev/null +++ b/src/net/persei/tools/ArrayHelper.java @@ -0,0 +1,10 @@ +package net.persei.tools; + +import java.util.Arrays; + +public class ArrayHelper { + public static E[] fillArray(E[] array, E value) { + Arrays.fill(array, value); + return array; + } +} diff --git a/src/net/persei/tools/Base62.java b/src/net/persei/tools/Base62.java new file mode 100644 index 0000000..208312d --- /dev/null +++ b/src/net/persei/tools/Base62.java @@ -0,0 +1,54 @@ +package net.persei.tools; + +import java.math.BigInteger; + +public class Base62 { + + private static final BigInteger SIXTY_TWO = BigInteger.valueOf(62); + + private static char toChar(byte value) { + if (value < 0) + throw new IllegalArgumentException("< 0"); + if (value < 10) + return (char) ('0' + value); + if (value < 36) + return (char) ('A' + value - 10); + if (value < 62) + return (char) ('a' + value - 36); + throw new IllegalArgumentException("> 61"); + } + + private static byte toByte(char value) { + if (value >= '0' && value <= '9') + return (byte) (value - '0'); + if (value >= 'A' && value <= 'Z') + return (byte) (value - 'A' + 10); + if (value >= 'a' && value <= 'z') + return (byte) (value - 'a' + 36); + throw new IllegalArgumentException("not a valid base62 char"); + } + + public static byte[] decode(String key) { + BigInteger value = BigInteger.ZERO; + + for (int i = 0; i < key.length(); i++) { + value = value.multiply(SIXTY_TWO); + value = value.add(BigInteger.valueOf(toByte(key.charAt(i)))); + } + + return value.toByteArray(); + } + + public static String encode(byte key[]) { + BigInteger i = new BigInteger(key); + + StringBuilder builder = new StringBuilder(); + + while (i.compareTo(BigInteger.ZERO) > 0) { + builder.append(toChar(i.mod(SIXTY_TWO).byteValue())); + i = i.divide(SIXTY_TWO); + } + + return builder.reverse().toString(); + } +} diff --git a/src/net/persei/tools/StringHelper.java b/src/net/persei/tools/StringHelper.java new file mode 100644 index 0000000..7780d68 --- /dev/null +++ b/src/net/persei/tools/StringHelper.java @@ -0,0 +1,11 @@ +package net.persei.tools; + +public class StringHelper { + public static String repeat(int length, String string) { + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < length; i++) { + builder.append(string); + } + return builder.toString(); + } +} diff --git a/src/net/persei/tools/exceptions/WhatTheFuckException.java b/src/net/persei/tools/exceptions/WhatTheFuckException.java new file mode 100644 index 0000000..7aca6b7 --- /dev/null +++ b/src/net/persei/tools/exceptions/WhatTheFuckException.java @@ -0,0 +1,7 @@ +package net.persei.tools.exceptions; + +public class WhatTheFuckException extends RuntimeException { + + private static final long serialVersionUID = 8501185517458311794L; + +} diff --git a/src/net/persei/tools/getopt/ArgumentType.java b/src/net/persei/tools/getopt/ArgumentType.java new file mode 100644 index 0000000..fd76d3f --- /dev/null +++ b/src/net/persei/tools/getopt/ArgumentType.java @@ -0,0 +1,5 @@ +package net.persei.tools.getopt; + +public enum ArgumentType { + NONE, OPTIONAL, NECESSARY +} diff --git a/src/net/persei/tools/getopt/HelpHandler.java b/src/net/persei/tools/getopt/HelpHandler.java new file mode 100644 index 0000000..0f929f3 --- /dev/null +++ b/src/net/persei/tools/getopt/HelpHandler.java @@ -0,0 +1,80 @@ +package net.persei.tools.getopt; + +import java.util.List; +import java.util.stream.Collectors; + +import net.persei.tools.getopt.exceptions.OptionException; +import net.persei.tools.getopt.exceptions.SilentShutdownException; + +public class HelpHandler implements OptionHandler { + + private List