| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- using Invercargill;
- namespace InvercargillJson {
- public class JsonArray : Enumerable<JsonElement>, Lot<JsonElement>, ReadOnlyCollection<JsonElement>, ReadOnlyAddressable<JsonElement>, Collection<JsonElement>, Addressable<JsonElement>, Sticky<JsonElements, JsonElement>, Elements, JsonElements{
- private Json.Array array;
- internal Json.Array json_glib_object { get { return array; } }
- public JsonArray() {
- array = new Json.Array();
- }
- internal JsonArray.from_existing(Json.Array array) {
- this.array = array;
- }
- public override Tracker<JsonElement> get_tracker() {
- var i = 0;
- return new LambdaTracker<JsonElement>(
- () => {
- return i < array.get_length();
- },
- () => {
- return new JsonElement.from_node(array.get_element(i++));
- });
- }
- public new JsonElement @get(uint index) {
- return new JsonElement.from_node(array.get_element(index));
- }
- public uint? first_index_of(PredicateDelegate<Element> predicate) {
- return with_positions().first_or_default(i => predicate(i.item))?.position ?? -1;
- }
- public void remove_at(int index) {
- array.remove_element(index);
- }
- public new void @set(uint index, JsonElement item) {
- assert_not_reached();
- }
- public void add(JsonElement item) {
- array.add_element(item.assert_as<Json.Node>());
- }
- public void remove_first_where(Invercargill.PredicateDelegate<JsonElement> predicate) {
- var index = first_index_of(predicate);
- if(index >= 0) {
- array.remove_element(index);
- }
- }
- public void remove_all_where(Invercargill.PredicateDelegate<JsonElement> predicate) {
- with_positions()
- .where(i => predicate((JsonElement)i.item))
- .iterate(i => array.remove_element(i.position));
- }
- public void clear() {
- remove_all_where(i => true);
- }
- public bool try_get(uint index, out JsonElement value) {
- 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();
- }
- }
- }
|