diff --git a/build.gradle b/build.gradle index ae23f2b..d137e8b 100644 --- a/build.gradle +++ b/build.gradle @@ -66,5 +66,5 @@ dependencies { compile 'com.google.code.gson:gson:2.8.6' //Primitive Collections - compile 'de.speiger:Primitive-Collections:0.4.3' + compile 'de.speiger:Primitive-Collections:0.4.4' } \ No newline at end of file diff --git a/src/main/java/speiger/src/coreengine/math/vector/quaternion/Quaternion.java b/src/main/java/speiger/src/coreengine/math/vector/quaternion/Quaternion.java index 158d5bc..022c665 100644 --- a/src/main/java/speiger/src/coreengine/math/vector/quaternion/Quaternion.java +++ b/src/main/java/speiger/src/coreengine/math/vector/quaternion/Quaternion.java @@ -34,6 +34,7 @@ public interface Quaternion public float getY(); public float getZ(); public float getW(); + public default float[] asArray(){return new float[]{getX(), getY(), getZ(), getW()};} public default Quaternion negate(){return set(0F, 0F, 0F, 0F);} public default Quaternion invert(){return set(-getX(), -getY(), -getZ(), -getW());} diff --git a/src/main/java/speiger/src/coreengine/utils/collections/FlagHolder.java b/src/main/java/speiger/src/coreengine/utils/collections/FlagHolder.java index 0e323ff..d2c5036 100644 --- a/src/main/java/speiger/src/coreengine/utils/collections/FlagHolder.java +++ b/src/main/java/speiger/src/coreengine/utils/collections/FlagHolder.java @@ -28,6 +28,11 @@ public class FlagHolder return true; } + public void setFlags(int flags) + { + this.flags = flags; + } + public int getFlags() { return flags; @@ -43,6 +48,11 @@ public class FlagHolder flags &= ~flag; } + public void clearFlags() + { + flags = 0; + } + public boolean isFlagSet(int flag) { return (flags & flag) == flag; diff --git a/src/main/java/speiger/src/coreengine/utils/collections/FlagObject.java b/src/main/java/speiger/src/coreengine/utils/collections/FlagObject.java new file mode 100644 index 0000000..9a6095e --- /dev/null +++ b/src/main/java/speiger/src/coreengine/utils/collections/FlagObject.java @@ -0,0 +1,65 @@ +package speiger.src.coreengine.utils.collections; + +public class FlagObject +{ + int flags; + + protected FlagObject() + { + } + + protected void setFlag(int flag) + { + flags |= flag; + } + + protected boolean setFlag(int flag, boolean value) + { + if(isFlagSet(flag) == value) + { + return false; + } + flags = (value ? flags | flag : flags & ~(flag)); + return true; + } + + protected void setFlags(int flags) + { + this.flags = flags; + } + + protected int getFlags() + { + return flags; + } + + protected void flipFlag(int flag) + { + flags ^= flag; + } + + protected void clearFlag(int flag) + { + flags &= ~flag; + } + + protected void clearFlags() + { + flags = 0; + } + + protected boolean isFlagSet(int flag) + { + return (flags & flag) == flag; + } + + protected boolean isAnyFlagSet(int flag) + { + return (flags & flag) != 0; + } + + protected boolean isFlagNotSet(int flag) + { + return (flags & flag) == 0; + } +} \ No newline at end of file diff --git a/src/main/java/speiger/src/coreengine/utils/collections/pools/SimplePool.java b/src/main/java/speiger/src/coreengine/utils/collections/pools/SimplePool.java index 3199419..ce0cb5b 100644 --- a/src/main/java/speiger/src/coreengine/utils/collections/pools/SimplePool.java +++ b/src/main/java/speiger/src/coreengine/utils/collections/pools/SimplePool.java @@ -2,17 +2,17 @@ package speiger.src.coreengine.utils.collections.pools; import java.util.Collection; import java.util.Iterator; -import java.util.List; import java.util.function.Consumer; import java.util.function.Supplier; import speiger.src.collections.objects.lists.ObjectArrayList; +import speiger.src.collections.objects.lists.ObjectList; import speiger.src.coreengine.utils.functions.Functions; public class SimplePool implements IPool { int cap; - List stack; + ObjectList stack; Supplier creator; Consumer acceptor; @@ -58,11 +58,8 @@ public class SimplePool implements IPool @Override public void accept(T[] array) { - for(int i = 0,m=Math.min(array.length, cap - stack.size());i implements IPool acceptor.accept(next); } } -} +} \ No newline at end of file diff --git a/src/main/java/speiger/src/coreengine/utils/collections/pools/ThreadLocalPool.java b/src/main/java/speiger/src/coreengine/utils/collections/pools/ThreadLocalPool.java index 3644418..38f81c2 100644 --- a/src/main/java/speiger/src/coreengine/utils/collections/pools/ThreadLocalPool.java +++ b/src/main/java/speiger/src/coreengine/utils/collections/pools/ThreadLocalPool.java @@ -7,11 +7,12 @@ import java.util.function.Consumer; import java.util.function.Supplier; import speiger.src.collections.objects.lists.ObjectArrayList; +import speiger.src.collections.objects.lists.ObjectList; import speiger.src.coreengine.utils.functions.Functions; public class ThreadLocalPool implements IPool { - ThreadLocal> stack = ThreadLocal.withInitial(ObjectArrayList::new); + ThreadLocal> stack = ThreadLocal.withInitial(ObjectArrayList::new); int cap; Supplier creator; Consumer acceptor; @@ -58,12 +59,9 @@ public class ThreadLocalPool implements IPool @Override public void accept(T[] array) { - List list = stack.get(); - for(int i = 0,m=Math.min(array.length, cap - list.size());i list = stack.get(); + list.addAll(array, 0, Math.min(array.length, cap - list.size())); + for(int i = 0,m=Math.min(array.length, cap - list.size());i implements IPool { int cap; - List stack; + ObjectList stack; Supplier creator; Consumer acceptor; @@ -42,11 +42,8 @@ public class ThreadPool implements IPool @Override public synchronized void accept(T[] array) { - for(int i = 0,m=Math.min(array.length, cap - stack.size());i> implements IRegistry { - protected Object2IntMap nameToId = new Object2IntLinkedOpenHashMap(); - protected Object2ObjectMap nameToValue = new Object2ObjectLinkedOpenHashMap(); - protected ObjectList idsToName = new ObjectArrayList(); + protected Object2IntMap nameToId = new Object2IntLinkedOpenHashMap<>(); + protected Object2ObjectMap nameToValue = new Object2ObjectLinkedOpenHashMap<>(); + protected ObjectList idsToName = new ObjectArrayList<>(); protected BitSet freeIds; protected int capacity; protected int stored; boolean frozen = false; - Object2IntMap missing = new Object2IntLinkedOpenHashMap(); - Object2ObjectMap remaps = new Object2ObjectLinkedOpenHashMap(); + Object2IntMap missing = new Object2IntLinkedOpenHashMap<>(); + Object2ObjectMap remaps = new Object2ObjectLinkedOpenHashMap<>(); public SimpleRegistry(int capacity) { diff --git a/src/main/java/speiger/src/coreengine/utils/io/dataTag/special/IListTag.java b/src/main/java/speiger/src/coreengine/utils/io/dataTag/special/IListTag.java index 1deb524..385785b 100644 --- a/src/main/java/speiger/src/coreengine/utils/io/dataTag/special/IListTag.java +++ b/src/main/java/speiger/src/coreengine/utils/io/dataTag/special/IListTag.java @@ -1,5 +1,7 @@ package speiger.src.coreengine.utils.io.dataTag.special; +import java.util.UUID; + import speiger.src.coreengine.utils.io.dataTag.DataTag; import speiger.src.coreengine.utils.io.dataTag.array.ByteArrayTag; import speiger.src.coreengine.utils.io.dataTag.array.DoubleArrayTag; @@ -44,6 +46,8 @@ public interface IListTag extends DataTag public default void addDoubleArray(double[] value) {add(new DoubleArrayTag(value));} public default void addStringArray(String[] value) {add(new StringArrayTag(value));} + public default void addUUID(UUID id) {add(new LongArrayTag(new long[]{id.getMostSignificantBits(), id.getLeastSignificantBits()}));} + public default byte getByte(int index) {return ((PrimitiveTag)get(index)).asByte();} public default short getShort(int index) {return ((PrimitiveTag)get(index)).asShort();} public default int getMedium(int index) {return ((PrimitiveTag)get(index)).asInt();} @@ -62,6 +66,12 @@ public interface IListTag extends DataTag public default double[] getDoubleArray(int index) {return ((DoubleArrayTag)get(index)).get();} public default String[] getStringArray(int index) {return ((StringArrayTag)get(index)).get();} + public default UUID getUUID(int index) + { + long[] id = getLongArray(index); + return new UUID(id[0], id[1]); + } + public default ListTag getList(int index){return (ListTag)get(index);} public default MapTag getMap(int index){return (MapTag)get(index);} }