Forráskód Böngészése

Invercargill alignment

Billy Barrow 5 hónapja
szülő
commit
33f4d9c7c3

+ 18 - 3
src/lib/Array.vala

@@ -2,7 +2,7 @@ using Invercargill;
 
 namespace InvercargillJson {
 
-    public class JsonArray : Enumerable<JsonElement>, ReadOnlyCollection<JsonElement>, ReadOnlyAddressable<JsonElement>, Collection<JsonElement>, Addressable<JsonElement>, Elements, JsonElements {
+    public class JsonArray : Enumerable<JsonElement>, Lot<JsonElement>, ReadOnlyCollection<JsonElement>, ReadOnlyAddressable<JsonElement>, Collection<JsonElement>, Addressable<JsonElement>, Sticky<JsonElements, JsonElement>, Elements, JsonElements{
 
         private Json.Array array;
 
@@ -36,7 +36,7 @@ namespace InvercargillJson {
         public void remove_at(int index) {
             array.remove_element(index);
         }
-        public new void @set(int index, JsonElement item) {
+        public new void @set(uint index, JsonElement item) {
             assert_not_reached();
         }
         public void add(JsonElement item) {
@@ -56,9 +56,24 @@ namespace InvercargillJson {
         public void clear() {
             remove_all_where(i => true);
         }
+
         public bool try_get(uint index, out JsonElement value) {
-                assert_not_reached();
+            value = get(index);
+            return true;
+        }
+
+        protected JsonElements adhere(Invercargill.Enumerable<JsonElement> enumerable) {
+            return enumerable.assert_promotion<JsonElements>();
         }
+        public uint length { get { return array.get_length(); } }
+
+        public override Invercargill.EnumerableInfo get_info() {
+            return new Invercargill.EnumerableInfo.infer_ultimate(this, Invercargill.EnumerableCategory.IN_MEMORY);
+        }
+        public override uint? peek_count() {
+            return array.get_length();
+        }
+
     }
 
 }

+ 21 - 21
src/lib/Elements.vala

@@ -2,37 +2,37 @@
 using Invercargill;
 namespace InvercargillJson {
 
-    public interface JsonElements : Enumerable<JsonElement>, Elements {
+    public interface JsonElements : Enumerable<JsonElement>, Sticky<JsonElements, JsonElement>, Elements {
 
-        public virtual Enumerable<JsonArray> as_arrays() {
+        public Enumerable<JsonArray> as_arrays() {
             return select<JsonArray>(n => new JsonArray.from_existing(n.assert_as<Json.Node>().get_array()));
         }
 
-        public virtual Enumerable<bool> as_bools() {
+        public Enumerable<bool> as_bools() {
             return select<bool>(n => n.assert_as<Json.Node>().get_boolean());
         }
 
-        public virtual Doubles as_doubles() {
-            return select<double?>(n => n.assert_as<Json.Node>().get_double()).promote_to<Doubles>();
+        public Doubles as_doubles() {
+            return select<double?>(n => n.assert_as<Json.Node>().get_double()).assert_promotion<Doubles>();
         }
 
-        public virtual Signed64BitIntegers as_integers() {
-            return select<int64?>(n => n.assert_as<Json.Node>().get_int()).promote_to<Signed64BitIntegers>();
+        public Signed64BitIntegers as_integers() {
+            return select<int64?>(n => n.assert_as<Json.Node>().get_int()).assert_promotion<Signed64BitIntegers>();
         }
 
-        public virtual Enumerable<string> as_strings() {
+        public Enumerable<string> as_strings() {
             return select<string>(n => n.assert_as<Json.Node>().get_string());
         }
 
-        public virtual Enumerable<JsonObject> as_objects() {
+        public Enumerable<JsonObject> as_objects() {
             return select<JsonObject>(n => new JsonObject.from_existing(n.assert_as<Json.Node>().get_object()));
         }
 
-        public virtual PropertyGroups as_property_groups() {
-            return as_objects().promote_to<PropertyGroups>();
+        public PropertyGroups as_property_groups() {
+            return as_objects().assert_promotion<PropertyGroups>();
         }
 
-        public virtual JsonArray to_json_array() {
+        public JsonArray to_json_array() {
             var array = new JsonArray();
             array.add_all((Enumerable<JsonElement>)this);
             return array;
@@ -40,19 +40,19 @@ namespace InvercargillJson {
 
     }
 
-    private class JsonElementsPromotionImplementation : Object, Promotion<Element> {
-        public bool can_wrap(GLib.Type element_type) {
+    private class JsonElementsPromotionImplementation : StickyProxyPromotion<JsonElements, JsonElement>, JsonElements, Elements {
+        public override bool can_wrap(GLib.Type element_type) {
             return element_type.is_a(typeof(JsonElement));
         }
-        public Enumerable<Element> wrap(Enumerable<Element> enumerable) {
-            return new JsonElementsProxy(enumerable.cast<JsonElement>());
+        protected override JsonElements adhere(Invercargill.Enumerable<JsonElement> enumerable) {
+            return new JsonElementsPromotionImplementation().wrap(enumerable);
         }
-    }
-
-    private class JsonElementsProxy : ProxyEnumerable<JsonElement>, Elements, JsonElements {
-        public JsonElementsProxy(Enumerable<JsonElement> elements) {
-            inner = elements;
+        protected override JsonElements passthrough() {
+            return this;
         }
+
     }
 
+
+
 }

+ 1 - 1
src/lib/Json.vala

@@ -294,7 +294,7 @@ namespace InvercargillJson {
                 return true;
             }
             if(typeof(T).is_a(typeof(Invercargill.BinaryData))) {
-                result = new Invercargill.BinaryData.from_base64(node.get_string ());
+                result = Invercargill.Wrap.base64_string(node.get_string ());
                 return true;
             }
             if(typeof(T).is_a(typeof(bool))) {

+ 12 - 3
src/lib/Jsonl.vala

@@ -1,7 +1,7 @@
 using Invercargill;
 namespace InvercargillJson { 
     
-    public class JsonlInputStream : Enumerable<JsonElement>, Elements, JsonElements {
+    public class JsonlInputStream : Enumerable<JsonElement>, Sticky<JsonElements, JsonElement>, Elements, JsonElements {
 
         private DataInputStream base_stream { get; set; }
 
@@ -17,8 +17,8 @@ namespace InvercargillJson {
             base_stream = new DataInputStream(file.read());
         }
 
-        public override Invercargill.Tracker<Element> get_tracker () {
-            return new AdvanceTracker<Element> ((out i) => {
+        public override Invercargill.Tracker<JsonElement> get_tracker () {
+            return new AdvanceTracker<JsonElement> ((out i) => {
                 try {
                     i = read_next();
                     return i != null;
@@ -43,6 +43,15 @@ namespace InvercargillJson {
         public void close() throws Error {
             base_stream.close();
         }
+        protected JsonElements adhere(Invercargill.Enumerable<JsonElement> enumerable) {
+            return enumerable.assert_promotion<JsonElements>();
+        }
+        public override Invercargill.EnumerableInfo get_info() {
+                assert_not_reached();
+        }
+        public override uint? peek_count() {
+                assert_not_reached();
+        }
     }
 
     public class JsonlOutputStream {

+ 9 - 2
src/lib/Object.vala

@@ -2,7 +2,7 @@ using Invercargill;
 
 namespace InvercargillJson {
 
-    public class JsonObject : Enumerable<KeyValuePair<string, JsonElement>>, ReadOnlyCollection<KeyValuePair<string, JsonElement>>, ReadOnlyAssociative<string, JsonElement>, Associative<string, JsonElement>, Properties {
+    public class JsonObject : Enumerable<KeyValuePair<string, JsonElement>>, Lot<KeyValuePair<string, JsonElement>>, ReadOnlyCollection<KeyValuePair<string, JsonElement>>, ReadOnlyAssociative<string, JsonElement>, Associative<string, JsonElement>, Properties {
 
         private Json.Object object;
 
@@ -76,7 +76,7 @@ namespace InvercargillJson {
             return null;
         }
 
-        public void set_native<T>(string key, T value, bool? defined = false) throws ElementError {
+        public void set_native<T>(string key, T value) throws ElementError {
             set(key, new JsonElement.from_element(new NativeElement<T>(value)));
         }
 
@@ -102,6 +102,13 @@ namespace InvercargillJson {
         }
         public Invercargill.Enumerable<string> keys { owned get; }
         public Invercargill.Enumerable<JsonElement> values { owned get; }
+        public uint length { get; }
+        public override Invercargill.EnumerableInfo get_info() {
+                assert_not_reached();
+        }
+        public override uint? peek_count() {
+                assert_not_reached();
+        } 
 
     }
 

+ 1 - 1
src/lib/PromotionRegistration.c

@@ -1,6 +1,6 @@
 
 #include "invercargill-json.h"
-#include "invercargill.h"
+#include "invercargill-1.h"
 
 VALA_EXTERN GType invercargill_json_json_elements_promotion_implementation_get_type (void) G_GNUC_CONST ;
 

+ 1 - 1
src/lib/meson.build

@@ -4,7 +4,7 @@ dependencies = [
     dependency('gobject-2.0'),
     dependency('gee-0.8'),
     dependency('json-glib-1.0'),
-    dependency('invercargill')
+    dependency('invercargill-1')
 ]
 
 sources = files('Json.vala')

+ 0 - 1
src/tests/Integration/Json.vala

@@ -1,5 +1,4 @@
 using Invercargill;
-using Invercargill.Convert;
 using InvercargillJson;
 using Json;
 

+ 6 - 6
src/tests/Integration/Promotion.vala

@@ -1,5 +1,5 @@
 using Invercargill;
-using Invercargill.Convert;
+using Invercargill.DataStructures;
 using InvercargillJson;
 
 void promotion_tests() {
@@ -13,13 +13,13 @@ void promotion_tests() {
 
         var base64 = data.promote_to<BinaryData>().to_base64();
         
-        assert_cmpstr("AQAA", CompareOperator.EQ, base64);
+        assert_cmpstr("AQkH", CompareOperator.EQ, base64);
 
     });
 
     Test.add_func("/invercargill/promotions/binarydata_to_binarydata", () => {
 
-        var data = (Enumerable<uint8>)new BinaryData.from_base64("AQAA");
+        var data = Wrap.base64_string("AQAA").as_enumerable();
         var new_data = data.promote_to<BinaryData>();
         
         assert_true(data == new_data);
@@ -38,14 +38,14 @@ void promotion_tests() {
         try {
             var suburbs = new JsonElement.from_string(json_str)
                 .assert_as<JsonArray>()
-                .where(e => e.assert_as<string>().has_prefix("G"))
-                .promote_to<JsonElements>();
+                .where(e => e.assert_as<string>().has_prefix("G"));
             
+            print(@"I AM: $(suburbs.get_type().name())\n");
             var names = suburbs
                 .as_strings()
                 .to_array();
 
-            assert_cmpint(3, CompareOperator.EQ, suburbs.count());
+            assert_cmpuint(3, CompareOperator.EQ, suburbs.count());
             assert_cmpint(3, CompareOperator.EQ, names.length);
             assert_cmpstr("Glengarry", CompareOperator.EQ, names[0]);
             assert_cmpstr("Gladstone", CompareOperator.EQ, names[1]);

+ 2 - 3
src/tests/Integration/PropertyMapper.vala

@@ -1,5 +1,4 @@
 using Invercargill;
-using Invercargill.Convert;
 using InvercargillJson;
 using Json;
 
@@ -7,7 +6,7 @@ void property_mapper_tests() {
 
     Test.add_func("/invercargill/property_mapper/map_class_to_and_from_properties", () => {
 
-        var mapper = new PropertyMapperBuilder<MappedClass>()
+        var mapper = new Mapping.PropertyMapperBuilder<MappedClass>()
             .set_constructor(() => new MappedClass())
             .map<string>("name", c => c.name, (c, v) => c.name = v)
             .map<int>("number", c => c.number, (c, v) => c.number = v)
@@ -38,7 +37,7 @@ void property_mapper_tests() {
 
     Test.add_func("/invercargill/property_mapper/map_from_json", () => {
 
-        var mapper = new PropertyMapperBuilder<MappedClass>()
+        var mapper = new Mapping.PropertyMapperBuilder<MappedClass>()
             .set_constructor(() => new MappedClass())
             .map<string>("name", c => c.name, (c, v) => c.name = v)
             .map<int>("number", c => c.number, (c, v) => c.number = v)