This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git

commit c41bff39d923106cb463a933dfe3c9755a2249ec
Author: Antoine Toulme <anto...@lunar-ocean.com>
AuthorDate: Tue Jun 11 20:19:52 2019 -0700

    Rename fixed size list to vector
---
 .../java/org/apache/tuweni/ssz/BytesSSZReader.java | 43 +++++++++++++++++-----
 ssz/src/main/java/org/apache/tuweni/ssz/SSZ.java   | 10 ++---
 .../main/java/org/apache/tuweni/ssz/SSZReader.java | 27 ++++++--------
 .../main/java/org/apache/tuweni/ssz/SSZWriter.java | 13 +++----
 .../org/apache/tuweni/ssz/BytesSSZReaderTest.java  |  8 +++-
 .../org/apache/tuweni/ssz/BytesSSZWriterTest.java  |  2 +-
 6 files changed, 60 insertions(+), 43 deletions(-)

diff --git a/ssz/src/main/java/org/apache/tuweni/ssz/BytesSSZReader.java 
b/ssz/src/main/java/org/apache/tuweni/ssz/BytesSSZReader.java
index c01254f..c3d68b1 100644
--- a/ssz/src/main/java/org/apache/tuweni/ssz/BytesSSZReader.java
+++ b/ssz/src/main/java/org/apache/tuweni/ssz/BytesSSZReader.java
@@ -132,28 +132,27 @@ final class BytesSSZReader implements SSZReader {
 
   @Override
   public List<Bytes> readBytesList(int limit) {
-    return readList(remaining -> readByteArray(limit), Bytes::wrap);
+    return readList(remaining -> readBytes(limit));
   }
 
   @Override
-  public List<Bytes> readBytesList(long listSize, int limit) {
+  public List<Bytes> readVector(long listSize, int limit) {
     return readList(listSize, remaining -> readByteArray(limit), Bytes::wrap);
   }
 
   @Override
-  public List<Bytes> readFixedBytesList(long listSize, int byteLength, int 
limit) {
-    checkArgument(listSize <= Integer.MAX_VALUE, "Cannot read bytes list: 
expected length is too large");
+  public List<Bytes> readFixedBytesVector(int listSize, int byteLength, int 
limit) {
     return readFixedList(listSize, remaining -> readFixedByteArray(byteLength, 
limit), Bytes::wrap);
   }
 
   @Override
   public List<Bytes> readFixedBytesList(int byteLength, int limit) {
-    return readFixedList(remaining -> readFixedByteArray(byteLength, limit), 
Bytes::wrap);
+    return readList(remaining -> readFixedBytes(byteLength, limit));
   }
 
   @Override
   public List<String> readStringList(int limit) {
-    return readList(remaining -> readByteArray(limit), byteArray -> new 
String(byteArray, UTF_8));
+    return readList(remaining -> readBytes(limit), bytes -> new 
String(bytes.toArrayUnsafe(), UTF_8));
   }
 
   @Override
@@ -225,7 +224,31 @@ final class BytesSSZReader implements SSZReader {
     return bytes;
   }
 
-  private <T> List<T> readList(LongFunction<byte[]> bytesSupplier, 
Function<byte[], T> converter) {
+  private List<Bytes> readList(LongFunction<Bytes> bytesSupplier) {
+    ensureBytes(4, () -> "SSZ encoded data is not a list");
+    int originalIndex = this.index;
+    List<Bytes> elements;
+    try {
+      // use a long to simulate reading unsigned
+      long listSize = consumeBytes(4).toLong(LITTLE_ENDIAN);
+      elements = new ArrayList<>();
+      while (listSize > 0) {
+        Bytes bytes = bytesSupplier.apply(listSize);
+        elements.add(bytes);
+        listSize -= bytes.size();
+        listSize -= 4;
+        if (listSize < 0) {
+          throw new InvalidSSZTypeException("SSZ encoded list length does not 
align with lengths of its elements");
+        }
+      }
+    } catch (Exception e) {
+      this.index = originalIndex;
+      throw e;
+    }
+    return elements;
+  }
+
+  private <T> List<T> readList(LongFunction<Bytes> bytesSupplier, 
Function<Bytes, T> converter) {
     ensureBytes(4, () -> "SSZ encoded data is not a list");
     int originalIndex = this.index;
     List<T> elements;
@@ -234,9 +257,9 @@ final class BytesSSZReader implements SSZReader {
       long listSize = consumeBytes(4).toLong(LITTLE_ENDIAN);
       elements = new ArrayList<>();
       while (listSize > 0) {
-        byte[] bytes = bytesSupplier.apply(listSize);
+        Bytes bytes = bytesSupplier.apply(listSize);
         elements.add(converter.apply(bytes));
-        listSize -= bytes.length;
+        listSize -= bytes.size();
         listSize -= 4;
         if (listSize < 0) {
           throw new InvalidSSZTypeException("SSZ encoded list length does not 
align with lengths of its elements");
@@ -294,7 +317,7 @@ final class BytesSSZReader implements SSZReader {
     return elements;
   }
 
-  private <T> List<T> readFixedList(long listSize, LongFunction<byte[]> 
bytesSupplier, Function<byte[], T> converter) {
+  private <T> List<T> readFixedList(int listSize, LongFunction<byte[]> 
bytesSupplier, Function<byte[], T> converter) {
     int originalIndex = this.index;
     List<T> elements;
     try {
diff --git a/ssz/src/main/java/org/apache/tuweni/ssz/SSZ.java 
b/ssz/src/main/java/org/apache/tuweni/ssz/SSZ.java
index 81b67ec..b7ac8e3 100644
--- a/ssz/src/main/java/org/apache/tuweni/ssz/SSZ.java
+++ b/ssz/src/main/java/org/apache/tuweni/ssz/SSZ.java
@@ -547,13 +547,9 @@ public final class SSZ {
     }
   }
 
-  static void encodeBytesListTo(long listSize, List<? extends Bytes> elements, 
Consumer<Bytes> appender) {
-    checkArgument(listSize > 0, "Cannot serialize list: list size must be 
positive");
-    if (listSize > Integer.MAX_VALUE) {
-      throw new IllegalArgumentException("Cannot serialize list: overall 
length is too large");
-    }
+  static void encodeBytesVectorTo(List<? extends Bytes> elements, 
Consumer<Bytes> appender) {
     for (Bytes bytes : elements) {
-      encodeBytesTo(bytes, appender);
+      appender.accept(bytes);
     }
   }
 
@@ -1241,7 +1237,7 @@ public final class SSZ {
   private static byte[] listLengthPrefix(long nElements, int elementBytes) {
     long listSize;
     try {
-      listSize = Math.multiplyExact(nElements, elementBytes);
+      listSize = Math.multiplyExact(nElements, (long) elementBytes);
     } catch (ArithmeticException e) {
       listSize = Long.MAX_VALUE;
     }
diff --git a/ssz/src/main/java/org/apache/tuweni/ssz/SSZReader.java 
b/ssz/src/main/java/org/apache/tuweni/ssz/SSZReader.java
index bb32bb5..1fe90a8 100644
--- a/ssz/src/main/java/org/apache/tuweni/ssz/SSZReader.java
+++ b/ssz/src/main/java/org/apache/tuweni/ssz/SSZReader.java
@@ -373,7 +373,7 @@ public interface SSZReader {
    * Read a known-size fixed-length list of {@link Bytes} from the SSZ source. 
The list WILL NOT have a length mixin,
    * where as the elements WILL.
    *
-   * Note: prefer to use {@link #readBytesList(long, int)} instead, especially 
when reading untrusted data.
+   * Note: prefer to use {@link #readVector(long, int)} instead, especially 
when reading untrusted data.
    *
    * @param listSize The size of the fixed-length list being read.
    * @return A list of {@link Bytes}.
@@ -381,13 +381,12 @@ public interface SSZReader {
    *         any byte array is too large (greater than 2^32 bytes).
    * @throws EndOfSSZException If there are no more SSZ values to read.
    */
-  default List<Bytes> readBytesList(long listSize) {
-    return readBytesList(listSize, Integer.MAX_VALUE);
+  default List<Bytes> readVector(long listSize) {
+    return readVector(listSize, Integer.MAX_VALUE);
   }
 
   /**
-   * Read a known-size fixed length list of known-size fixed length {@link 
Bytes} from the SSZ source. No length mixin
-   * is expected in either the list or the list elements.
+   * Read a known-size fixed length list of known-size fixed length {@link 
Bytes} from the SSZ source.
    *
    * @param listSize The size of the fixed-length list being read.
    * @param byteLength The number of fixed-length Bytes per homogenous List 
element.
@@ -397,13 +396,12 @@ public interface SSZReader {
    *         the size of any byte array would exceed the limit.
    * @throws EndOfSSZException If there are no more SSZ values to read.
    */
-  List<Bytes> readFixedBytesList(long listSize, int byteLength, int limit);
+  List<Bytes> readFixedBytesVector(int listSize, int byteLength, int limit);
 
   /**
-   * Read a known-size fixed length list of known-size fixed length {@link 
Bytes} from the SSZ source. No length mixin
-   * is expected in either the list or the list elements.
+   * Read a known-size fixed length list of known-size fixed length {@link 
Bytes} from the SSZ source.
    *
-   * Note: prefer to use {@link #readFixedBytesList(long, int, int)} instead, 
especially when reading untrusted data.
+   * Note: prefer to use {@link #readFixedBytesVector(int, int, int)} instead, 
especially when reading untrusted data.
    *
    * @param listSize The size of the fixed-length list being read.
    * @param byteLength The number of fixed-length Bytes per homogenous List 
element.
@@ -412,8 +410,8 @@ public interface SSZReader {
    *         any byte array is too large (greater than 2^32 bytes).
    * @throws EndOfSSZException If there are no more SSZ values to read.
    */
-  default List<Bytes> readFixedBytesList(long listSize, int byteLength) {
-    return readFixedBytesList(listSize, byteLength, Integer.MAX_VALUE);
+  default List<Bytes> readFixedBytesVector(int listSize, int byteLength) {
+    return readFixedBytesVector(listSize, byteLength, Integer.MAX_VALUE);
   }
 
   /**
@@ -430,8 +428,7 @@ public interface SSZReader {
   List<Bytes> readFixedBytesList(int byteLength, int limit);
 
   /**
-   * Read a list of known-size fixed length {@link Bytes} from the SSZ source. 
A length mixin IS expected for the list,
-   * but IS NOT expected for the list elements.
+   * Read a variable-length list of known-size fixed length {@link Bytes} from 
the SSZ source.
    *
    * Note: prefer to use {@link #readFixedBytesList(int, int)} instead, 
especially when reading untrusted data.
    *
@@ -466,7 +463,7 @@ public interface SSZReader {
    *         the size of any byte array would exceed the limit.
    * @throws EndOfSSZException If there are no more SSZ values to read.
    */
-  List<Bytes> readBytesList(long listSize, int limit);
+  List<Bytes> readVector(long listSize, int limit);
 
   /**
    * Read a list of byte arrays from the SSZ source.
@@ -722,7 +719,7 @@ public interface SSZReader {
    * Read a list of hashes from the SSZ source.
    *
    * @param hashLength The length of the hash (in bytes).
-   * @return A list of 32-byte hashes.
+   * @return A list of hashes.
    * @throws InvalidSSZTypeException If the next SSZ value is not a list, 
there are insufficient encoded bytes for any
    *         hash in the list.
    * @throws EndOfSSZException If there are no more SSZ values to read.
diff --git a/ssz/src/main/java/org/apache/tuweni/ssz/SSZWriter.java 
b/ssz/src/main/java/org/apache/tuweni/ssz/SSZWriter.java
index e9d100a..fd0270c 100644
--- a/ssz/src/main/java/org/apache/tuweni/ssz/SSZWriter.java
+++ b/ssz/src/main/java/org/apache/tuweni/ssz/SSZWriter.java
@@ -297,13 +297,12 @@ public interface SSZWriter {
   }
 
   /**
-   * Write a known-size fixed-length list of bytes. The list itself WILL NOT 
have a length mixin, but the elements WILL.
+   * Write a vector of bytes.
    *
-   * @param listSize the number of elements in the list
    * @param elements the bytes to write as a list
    */
-  default void writeBytesList(long listSize, List<? extends Bytes> elements) {
-    SSZ.encodeBytesListTo(listSize, elements, this::writeSSZ);
+  default void writeVector(List<? extends Bytes> elements) {
+    SSZ.encodeBytesVectorTo(elements, this::writeSSZ);
   }
 
   /**
@@ -320,12 +319,10 @@ public interface SSZWriter {
    * Write a known-size fixed-length list of known-size homogenous bytes. 
Neither the list nor the elements in the list
    * will have a length mixin.
    *
-   * @param listSize the number of elements in the list
-   * @param byteLength the number of bytes in each element
    * @param elements the bytes to write as a list
    */
-  default void writeFixedBytesList(long listSize, int byteLength, List<? 
extends Bytes> elements) {
-    SSZ.encodeFixedBytesListTo(listSize, byteLength, elements, this::writeSSZ);
+  default void writeFixedBytesVector(List<? extends Bytes> elements) {
+    SSZ.encodeBytesVectorTo(elements, this::writeSSZ);
   }
 
   /**
diff --git a/ssz/src/test/java/org/apache/tuweni/ssz/BytesSSZReaderTest.java 
b/ssz/src/test/java/org/apache/tuweni/ssz/BytesSSZReaderTest.java
index ac3f7d5..810e39d 100644
--- a/ssz/src/test/java/org/apache/tuweni/ssz/BytesSSZReaderTest.java
+++ b/ssz/src/test/java/org/apache/tuweni/ssz/BytesSSZReaderTest.java
@@ -181,7 +181,6 @@ class BytesSSZReaderTest {
   void shouldRoundtripBytesVararg() {
     List<Bytes> toWrite = Arrays.asList(Bytes48.random(), Bytes48.random(), 
Bytes48.random());
     Bytes encoded = SSZ.encode(writer -> 
writer.writeBytesList(toWrite.toArray(new Bytes[0])));
-    System.out.println(encoded);
     assertEquals(toWrite, SSZ.decodeBytesList(encoded));
 
   }
@@ -190,8 +189,13 @@ class BytesSSZReaderTest {
   void shouldRoundtripBytesList() {
     List<Bytes> toWrite = Arrays.asList(Bytes48.random(), Bytes48.random(), 
Bytes48.random());
     Bytes encoded = SSZ.encode(writer -> writer.writeBytesList(toWrite));
-    System.out.println(encoded);
     assertEquals(toWrite, SSZ.decodeBytesList(encoded));
+  }
 
+  @Test
+  void shouldRoundtripBytesVector() {
+    List<Bytes> toWrite = Arrays.asList(Bytes48.random(), Bytes48.random(), 
Bytes48.random());
+    Bytes encoded = SSZ.encode(writer -> 
writer.writeFixedBytesVector(toWrite));
+    assertEquals(toWrite, SSZ.decode(encoded, reader -> 
reader.readFixedBytesVector(3, 48)));
   }
 }
diff --git a/ssz/src/test/java/org/apache/tuweni/ssz/BytesSSZWriterTest.java 
b/ssz/src/test/java/org/apache/tuweni/ssz/BytesSSZWriterTest.java
index 758cc0c..ed3349a 100644
--- a/ssz/src/test/java/org/apache/tuweni/ssz/BytesSSZWriterTest.java
+++ b/ssz/src/test/java/org/apache/tuweni/ssz/BytesSSZWriterTest.java
@@ -366,7 +366,7 @@ class BytesSSZWriterTest {
   }
 
   @Test
-  void shouldWriteVaragsListsOfHashes() {
+  void shouldWriteVarargsListsOfHashes() {
     assertEquals(
         fromHexString(
             
"0x60000000ED1C978EE1CEEFA5BBD9ED1C8EE1CEEFA5BBD9ED1C978EE1CEEFA5BBD9ED1C978B40CA3893681B062BC06760A4863AFAFA6C4D6226D4C6AFAFA3684A06760CB26B30567B2281FF3BD582B0A633B33A376B95BD3333DB59B673A33B336A0B285D"),


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@tuweni.apache.org
For additional commands, e-mail: commits-h...@tuweni.apache.org

Reply via email to