Pārlūkot izejas kodu

new: IntListUtils#binarySearch
new: EnumUtils#getAnnotation
new: XMLElement#fromPath

Ranides Atterwim 4 gadi atpakaļ
vecāks
revīzija
dc710c5867

+ 1 - 1
assira.core/src/main/java/net/ranides/assira/collection/arrays/NativeArraySearch.java

@@ -103,7 +103,7 @@ public final class NativeArraySearch {
         return binarySearch(array.rcmp(key, comp), begin, end);
     }
     
-    private static int binarySearch(NativeComparator comp, int begin, int end) {
+    public static int binarySearch(NativeComparator comp, int begin, int end) {
         end--;
         while (begin <= end) {
             int mid = (begin + end) >>> 1;

+ 18 - 6
assira.core/src/main/java/net/ranides/assira/collection/lists/IntListUtils.java

@@ -7,19 +7,22 @@
 
 package net.ranides.assira.collection.lists;
 
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.RandomAccess;
-import java.util.function.IntFunction;
-import java.util.function.IntPredicate;
-import java.util.function.IntUnaryOperator;
 import net.ranides.assira.collection.IntCollectionUtils;
 import net.ranides.assira.collection.Swapper;
+import net.ranides.assira.collection.arrays.NativeArray.NativeComparator;
 import net.ranides.assira.collection.arrays.NativeArrayAllocator;
+import net.ranides.assira.collection.arrays.NativeArraySearch;
 import net.ranides.assira.collection.iterators.IntListIterator;
 import net.ranides.assira.collection.iterators.RandomAccessIntIterator;
 import net.ranides.assira.functional.covariant.IntProjectionFunction;
 
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.RandomAccess;
+import java.util.function.IntFunction;
+import java.util.function.IntPredicate;
+import java.util.function.IntUnaryOperator;
+
 /**
  *
  * @author Ranides Atterwim {@literal <ranides@gmail.com>}
@@ -200,6 +203,15 @@ public final class IntListUtils {
 		list.set(a, list.getInt(b));
 		list.set(b, t);
 	}
+
+	public static int binarySearch(IntList list, int value) {
+		return binarySearch(list, 0, list.size(), value);
+	}
+
+	public static int binarySearch(IntList list, int begin, int end, int value) {
+		NativeComparator cmp = index -> Integer.compare(list.getInt(index), value);
+		return NativeArraySearch.binarySearch(cmp, begin, end);
+	}
 	
 	private static class RandomSubList extends AIntList.SubList implements RandomAccess {
 

+ 18 - 4
assira.core/src/main/java/net/ranides/assira/generic/EnumUtils.java

@@ -7,15 +7,18 @@
 
 package net.ranides.assira.generic;
 
+import net.ranides.assira.collection.maps.IntMap;
+import net.ranides.assira.collection.maps.IntMapCollectors;
+import net.ranides.assira.collection.maps.MapCollectors;
+import net.ranides.assira.reflection.*;
+
+import java.lang.annotation.Annotation;
 import java.util.Arrays;
 import java.util.Map;
+import java.util.Optional;
 import java.util.function.Function;
 import java.util.function.ToIntFunction;
 
-import net.ranides.assira.collection.maps.IntMap;
-import net.ranides.assira.collection.maps.IntMapCollectors;
-import net.ranides.assira.collection.maps.MapCollectors;
-
 public final class EnumUtils {
 
     private EnumUtils() {
@@ -42,4 +45,15 @@ public final class EnumUtils {
         return Arrays.stream(keys).collect(MapCollectors.unique(e -> e, e -> values[e.ordinal()]));
     }
 
+    public static <A extends Annotation> Optional<A> getAnnotation(Enum<?> value, Class<A> type) {
+        return getAnnotations(value).first(type);
+    }
+
+    public static IAnnotations getAnnotations(Enum<?> value) {
+        return IClass.typefor(value)
+            .field(value.name())
+            .map(IElement::annotations)
+            .orElse(IAnnotations.of());
+    }
+
 }

+ 5 - 0
assira.core/src/main/java/net/ranides/assira/xml/XMLElement.java

@@ -11,6 +11,7 @@ import java.io.InputStream;
 import java.io.Reader;
 import java.io.StringReader;
 import java.net.URI;
+import java.nio.file.Path;
 import java.util.function.Predicate;
 import javax.xml.transform.Result;
 import javax.xml.transform.Transformer;
@@ -42,6 +43,10 @@ public interface XMLElement extends Wrapper<String> {
     static XMLElement fromFile(File doc) {
         return W3ElementFactory.fromFile(doc);
     }
+
+    static XMLElement fromPath(Path doc) {
+        return W3ElementFactory.fromPath(doc);
+    }
     
     static XMLElement fromURI(URI doc) {
         return W3ElementFactory.fromURI(doc);

+ 5 - 0
assira.core/src/main/java/net/ranides/assira/xml/impl/W3ElementFactory.java

@@ -13,6 +13,7 @@ import java.io.InputStream;
 import java.io.Reader;
 import java.io.StringReader;
 import java.net.URI;
+import java.nio.file.Path;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
@@ -41,6 +42,10 @@ public final class W3ElementFactory {
     public static XMLElement fromFile(File doc) {
         return fromSupplier(() -> W3Element.wrap(builder().parse(doc)));
     }
+
+    public static XMLElement fromPath(Path doc) {
+        return fromFile(doc.toFile());
+    }
     
     public static XMLElement fromURI(URI doc) {
         return fromSupplier(() -> W3Element.wrap(builder().parse(doc.toString())));

+ 8 - 8
assira.core/src/test/java/net/ranides/assira/reflection/impl/RFieldTest.java

@@ -58,9 +58,9 @@ public class RFieldTest {
     
     @Test
     public void testFields() {
-        List<String> exp1 = Arrays.asList("Record rid", "Record name", "ARecord AMAX", "ARecord aid", "ARecord name");
-        List<String> exp2 = Arrays.asList("Record rid", "Record pid", "Record name");
-        List<String> exp3 = Arrays.asList("Record rid", "Record pid", "Record name", "ARecord AMAX", "ARecord APRIV", "ARecord aid", "ARecord pid", "ARecord name");
+        List<String> exp1 = Arrays.asList("Record rid", "Record name", "Record frozen", "ARecord AMAX", "ARecord aid", "ARecord name");
+        List<String> exp2 = Arrays.asList("Record rid", "Record pid", "Record name", "Record frozen");
+        List<String> exp3 = Arrays.asList("Record rid", "Record pid", "Record name", "Record frozen", "ARecord AMAX", "ARecord APRIV", "ARecord aid", "ARecord pid", "ARecord name");
         assertEquiList(exp1, cr.fields().list(this::field2str));
         assertEquiList(exp2, cr.fields().require(IAttribute.DECLARED).list(this::field2str));
         assertEquiList(exp3, cr.fields().require(IAttribute.ANY).list(this::field2str));
@@ -79,14 +79,14 @@ public class RFieldTest {
         ForFields.Record r = new ForFields.Record();
         
         ca.field("name").get().set(r, "hello");
-        ca.field("pid").get().set(r, 81);
+        ca.field("pid").get().accessible().set(r, 81);
         
         cr.field("aid").get().set(r, $int(cr.field("aid").get().get(r)) + 91);
         cr.field("rid").get().set(r, $int(cr.field("rid").get().get(r)) + 92);
         cr.field("name").get().set(r, cr.field("name").get().get(r) + "world");
-        cr.field("pid").get().set(r, $int(cr.field("pid").get().get(r)) + 82);
+        cr.field("pid").get().set(r, $int(cr.field("pid").get().accessible().get(r)) + 82);
         
-        assertEquals("{191:81:hello}#{392:482:R.world}", r.toString());
+        assertEquals("{191:81:hello}#{392:482:R.world:11}", r.toString());
         
         assertThrows(IllegalArgumentException.class, ()->{
             ca.field("name").get().set(r, 556);
@@ -105,7 +105,7 @@ public class RFieldTest {
         cr.field("name").get().setter().invoke(r, cr.field("name").get().getter().invoke(r) + "world");
         cr.field("pid").get().setter().invoke(r, $int(cr.field("pid").get().getter().invoke(r)) + 82);
         
-        assertEquals("{191:81:hello}#{392:482:R.world}", r.toString());
+        assertEquals("{191:81:hello}#{392:482:R.world:11}", r.toString());
         
         assertThrows(WrongMethodTypeException.class, ()->{
             ca.field("name").get().setter().invoke(r, 556);
@@ -132,7 +132,7 @@ public class RFieldTest {
         r3.set(r3.get()+"world");
         r4.set(r4.get()+82);
         
-        assertEquals("{191:81:hello}#{392:482:R.world}", r.toString());
+        assertEquals("{191:81:hello}#{392:482:R.world:11}", r.toString());
         
         assertThrows(ClassCastException.class, ()->{
             ca.field("name").get().bind(r).set(556);