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 be990feadd61c8716ad308f3c197021fa92cf40b
Author: Antoine Toulme <[email protected]>
AuthorDate: Mon Nov 25 21:07:36 2019 -0800

    Allow subclassing bytes
---
 .../main/java/org/apache/tuweni/bytes/Bytes32.java |  5 +--
 .../main/java/org/apache/tuweni/bytes/Bytes48.java |  5 +--
 ...DelegatingBytes32.java => DelegatingBytes.java} | 27 ++++++++--------
 .../org/apache/tuweni/bytes/DelegatingBytes32.java | 17 +++++-----
 .../org/apache/tuweni/bytes/DelegatingBytes48.java | 16 +++++-----
 .../org/apache/tuweni/bytes/DelegateBytesTest.java | 37 ++++++++++++++++++++++
 6 files changed, 72 insertions(+), 35 deletions(-)

diff --git a/bytes/src/main/java/org/apache/tuweni/bytes/Bytes32.java 
b/bytes/src/main/java/org/apache/tuweni/bytes/Bytes32.java
index 571ac90..c0cc80b 100644
--- a/bytes/src/main/java/org/apache/tuweni/bytes/Bytes32.java
+++ b/bytes/src/main/java/org/apache/tuweni/bytes/Bytes32.java
@@ -82,7 +82,8 @@ public interface Bytes32 extends Bytes {
     if (value instanceof Bytes32) {
       return (Bytes32) value;
     }
-    return DelegatingBytes32.delegateTo(value);
+    checkArgument(value.size() == SIZE, "Expected %s bytes but got %s", SIZE, 
value.size());
+    return new DelegatingBytes32(value);
   }
 
   /**
@@ -110,7 +111,7 @@ public interface Bytes32 extends Bytes {
     if (slice instanceof Bytes32) {
       return (Bytes32) slice;
     }
-    return DelegatingBytes32.delegateTo(slice);
+    return new DelegatingBytes32(value);
   }
 
   /**
diff --git a/bytes/src/main/java/org/apache/tuweni/bytes/Bytes48.java 
b/bytes/src/main/java/org/apache/tuweni/bytes/Bytes48.java
index 518e5cf..cdb29aa 100644
--- a/bytes/src/main/java/org/apache/tuweni/bytes/Bytes48.java
+++ b/bytes/src/main/java/org/apache/tuweni/bytes/Bytes48.java
@@ -82,7 +82,8 @@ public interface Bytes48 extends Bytes {
     if (value instanceof Bytes48) {
       return (Bytes48) value;
     }
-    return DelegatingBytes48.delegateTo(value);
+    checkArgument(value.size() == SIZE, "Expected %s bytes but got %s", SIZE, 
value.size());
+    return new DelegatingBytes48(value);
   }
 
   /**
@@ -110,7 +111,7 @@ public interface Bytes48 extends Bytes {
     if (slice instanceof Bytes48) {
       return (Bytes48) slice;
     }
-    return DelegatingBytes48.delegateTo(slice);
+    return new DelegatingBytes48(Bytes48.wrap(slice));
   }
 
   /**
diff --git a/bytes/src/main/java/org/apache/tuweni/bytes/DelegatingBytes32.java 
b/bytes/src/main/java/org/apache/tuweni/bytes/DelegatingBytes.java
similarity index 90%
copy from bytes/src/main/java/org/apache/tuweni/bytes/DelegatingBytes32.java
copy to bytes/src/main/java/org/apache/tuweni/bytes/DelegatingBytes.java
index c29a60a..8f4a2f5 100644
--- a/bytes/src/main/java/org/apache/tuweni/bytes/DelegatingBytes32.java
+++ b/bytes/src/main/java/org/apache/tuweni/bytes/DelegatingBytes.java
@@ -12,30 +12,29 @@
  */
 package org.apache.tuweni.bytes;
 
-import static com.google.common.base.Preconditions.checkArgument;
-
 import java.math.BigInteger;
 import java.nio.ByteBuffer;
 import java.security.MessageDigest;
 
 import io.vertx.core.buffer.Buffer;
 
-final class DelegatingBytes32 implements Bytes32 {
+/**
+ * A class that holds and delegates all operations to its inner bytes field.
+ *
+ * <p>
+ * This class may be used to create more types that represent bytes, but need 
a different name for business logic.
+ */
+public class DelegatingBytes implements Bytes {
 
   private final Bytes delegate;
 
-  private DelegatingBytes32(Bytes delegate) {
+  protected DelegatingBytes(Bytes delegate) {
     this.delegate = delegate;
   }
 
-  static Bytes32 delegateTo(Bytes value) {
-    checkArgument(value.size() == SIZE, "Expected %s bytes but got %s", SIZE, 
value.size());
-    return new DelegatingBytes32(value);
-  }
-
   @Override
   public int size() {
-    return Bytes32.SIZE;
+    return delegate.size();
   }
 
   @Override
@@ -159,13 +158,13 @@ final class DelegatingBytes32 implements Bytes32 {
   }
 
   @Override
-  public Bytes32 copy() {
-    return Bytes32.wrap(toArray());
+  public Bytes copy() {
+    return Bytes.wrap(toArray());
   }
 
   @Override
-  public MutableBytes32 mutableCopy() {
-    return MutableBytes32.wrap(toArray());
+  public MutableBytes mutableCopy() {
+    return MutableBytes.wrap(toArray());
   }
 
   @Override
diff --git a/bytes/src/main/java/org/apache/tuweni/bytes/DelegatingBytes32.java 
b/bytes/src/main/java/org/apache/tuweni/bytes/DelegatingBytes32.java
index c29a60a..0e2f36e 100644
--- a/bytes/src/main/java/org/apache/tuweni/bytes/DelegatingBytes32.java
+++ b/bytes/src/main/java/org/apache/tuweni/bytes/DelegatingBytes32.java
@@ -12,27 +12,26 @@
  */
 package org.apache.tuweni.bytes;
 
-import static com.google.common.base.Preconditions.checkArgument;
-
 import java.math.BigInteger;
 import java.nio.ByteBuffer;
 import java.security.MessageDigest;
 
 import io.vertx.core.buffer.Buffer;
 
-final class DelegatingBytes32 implements Bytes32 {
+/**
+ * A class that holds and delegates all operations to its inner bytes field.
+ *
+ * <p>
+ * This class may be used to create more types that represent 32 bytes, but 
need a different name for business logic.
+ */
+public class DelegatingBytes32 implements Bytes32 {
 
   private final Bytes delegate;
 
-  private DelegatingBytes32(Bytes delegate) {
+  protected DelegatingBytes32(Bytes delegate) {
     this.delegate = delegate;
   }
 
-  static Bytes32 delegateTo(Bytes value) {
-    checkArgument(value.size() == SIZE, "Expected %s bytes but got %s", SIZE, 
value.size());
-    return new DelegatingBytes32(value);
-  }
-
   @Override
   public int size() {
     return Bytes32.SIZE;
diff --git a/bytes/src/main/java/org/apache/tuweni/bytes/DelegatingBytes48.java 
b/bytes/src/main/java/org/apache/tuweni/bytes/DelegatingBytes48.java
index 9f3198d..1441f73 100644
--- a/bytes/src/main/java/org/apache/tuweni/bytes/DelegatingBytes48.java
+++ b/bytes/src/main/java/org/apache/tuweni/bytes/DelegatingBytes48.java
@@ -12,7 +12,6 @@
  */
 package org.apache.tuweni.bytes;
 
-import static com.google.common.base.Preconditions.checkArgument;
 
 import java.math.BigInteger;
 import java.nio.ByteBuffer;
@@ -20,19 +19,20 @@ import java.security.MessageDigest;
 
 import io.vertx.core.buffer.Buffer;
 
-final class DelegatingBytes48 implements Bytes48 {
+/**
+ * A class that holds and delegates all operations to its inner bytes field.
+ *
+ * <p>
+ * This class may be used to create more types that represent 48 bytes, but 
need a different name for business logic.
+ */
+public class DelegatingBytes48 implements Bytes48 {
 
   private final Bytes delegate;
 
-  private DelegatingBytes48(Bytes delegate) {
+  protected DelegatingBytes48(Bytes delegate) {
     this.delegate = delegate;
   }
 
-  static Bytes48 delegateTo(Bytes value) {
-    checkArgument(value.size() == SIZE, "Expected %s bytes but got %s", SIZE, 
value.size());
-    return new DelegatingBytes48(value);
-  }
-
   @Override
   public int size() {
     return Bytes48.SIZE;
diff --git a/bytes/src/test/java/org/apache/tuweni/bytes/DelegateBytesTest.java 
b/bytes/src/test/java/org/apache/tuweni/bytes/DelegateBytesTest.java
new file mode 100644
index 0000000..bfc667c
--- /dev/null
+++ b/bytes/src/test/java/org/apache/tuweni/bytes/DelegateBytesTest.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding 
copyright ownership. The ASF licenses this file
+ * to You under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on
+ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package org.apache.tuweni.bytes;
+
+public class DelegateBytesTest extends CommonBytesTests {
+
+  @Override
+  Bytes h(String hex) {
+    return new DelegatingBytes(Bytes.fromHexString(hex));
+  }
+
+  @Override
+  MutableBytes m(int size) {
+    // no-op
+    return MutableBytes.create(size);
+  }
+
+  @Override
+  Bytes w(byte[] bytes) {
+    return new DelegatingBytes(Bytes.wrap(bytes));
+  }
+
+  @Override
+  Bytes of(int... bytes) {
+    return new DelegatingBytes(Bytes.of(bytes));
+  }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to