From 8937d0607ad312dd760e61bbffacbea5cd6e4917 Mon Sep 17 00:00:00 2001 From: David Renshaw Date: Fri, 20 Jun 2014 20:45:00 -0400 Subject: [PATCH] StructList.Reader.Iterator --- .../org/capnproto/benchmark/CarSales.java | 4 +--- .../capnproto/examples/AddressbookMain.java | 9 ++------ .../main/java/org/capnproto/StructList.java | 22 ++++++++++++++++++- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/benchmark/src/main/java/org/capnproto/benchmark/CarSales.java b/benchmark/src/main/java/org/capnproto/benchmark/CarSales.java index 43e6179..7f56c56 100644 --- a/benchmark/src/main/java/org/capnproto/benchmark/CarSales.java +++ b/benchmark/src/main/java/org/capnproto/benchmark/CarSales.java @@ -14,9 +14,7 @@ public class CarSales result += car.getSeats() * 200; result += car.getDoors() * 350; - StructList.Reader wheels = car.getWheels(); - for (int i = 0; i < wheels.size(); ++i) { - Wheel.Reader wheel = wheels.get(i); + for (Wheel.Reader wheel : car.getWheels()) { result += ((long)wheel.getDiameter() * (long)wheel.getDiameter()); result += wheel.getSnowTires() ? 100 : 0; } diff --git a/examples/src/main/java/org/capnproto/examples/AddressbookMain.java b/examples/src/main/java/org/capnproto/examples/AddressbookMain.java index c4a2663..024c4d6 100644 --- a/examples/src/main/java/org/capnproto/examples/AddressbookMain.java +++ b/examples/src/main/java/org/capnproto/examples/AddressbookMain.java @@ -49,15 +49,10 @@ public class AddressbookMain { public static void printAddressBook() throws java.io.IOException { MessageReader message = InputStreamMessageReader.create(System.in); AddressBook.Reader addressbook = message.getRoot(AddressBook.factory); - StructList.Reader people = addressbook.getPeople(); - int size = people.size(); - for(int ii = 0; ii < size; ++ii) { - Person.Reader person = people.get(ii); + for(Person.Reader person : addressbook.getPeople()) { System.out.println(person.getName() + ": " + person.getEmail()); - StructList.Reader phones = person.getPhones(); - for (int jj = 0; jj < phones.size(); ++jj) { - Person.PhoneNumber.Reader phone = phones.get(jj); + for (Person.PhoneNumber.Reader phone : person.getPhones()) { String typeName = "UNKNOWN"; switch (phone.getType()) { case MOBILE : diff --git a/runtime/src/main/java/org/capnproto/StructList.java b/runtime/src/main/java/org/capnproto/StructList.java index 0031813..40bb0ef 100644 --- a/runtime/src/main/java/org/capnproto/StructList.java +++ b/runtime/src/main/java/org/capnproto/StructList.java @@ -1,7 +1,7 @@ package org.capnproto; public final class StructList { - public static final class Reader { + public static final class Reader implements Iterable { public final ListReader reader; public final FromStructReader factory; @@ -17,6 +17,26 @@ public final class StructList { public T get(int index) { return this.factory.fromStructReader(this.reader.getStructElement(index)); } + + + public final class Iterator implements java.util.Iterator { + public Reader list; + public int idx = 0; + public Iterator(Reader list) { + this.list = list; + } + + public T next() { + return list.factory.fromStructReader(list.reader.getStructElement(idx++)); + } + public boolean hasNext() { + return idx < list.size(); + } + } + + public java.util.Iterator iterator() { + return new Iterator(this); + } } public static final class Builder {