You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fluo.apache.org by mw...@apache.org on 2017/06/27 14:44:59 UTC

[incubator-fluo] branch master updated: inspired by #875 optimized concat of two Bytes

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 851acf0  inspired by #875 optimized concat of two Bytes
851acf0 is described below

commit 851acf0f3cddedd74f3007d5a704855b1fdad5b1
Author: Keith Turner <kt...@apache.org>
AuthorDate: Fri Jun 23 12:28:17 2017 -0400

    inspired by #875 optimized concat of two Bytes
---
 .../apache/fluo/accumulo/util/ByteArrayUtil.java    | 21 +++++++++++++++++++++
 .../org/apache/fluo/core/util/ByteUtilTest.java     | 18 ++++++++++++++++++
 2 files changed, 39 insertions(+)

diff --git a/modules/accumulo/src/main/java/org/apache/fluo/accumulo/util/ByteArrayUtil.java b/modules/accumulo/src/main/java/org/apache/fluo/accumulo/util/ByteArrayUtil.java
index c1f4e5b..9906a98 100644
--- a/modules/accumulo/src/main/java/org/apache/fluo/accumulo/util/ByteArrayUtil.java
+++ b/modules/accumulo/src/main/java/org/apache/fluo/accumulo/util/ByteArrayUtil.java
@@ -91,6 +91,27 @@ public class ByteArrayUtil {
   }
 
   /**
+   * An optimized version of {@link #concat(Bytes...)} for two args that avoids creating the varargs
+   * array.
+   *
+   */
+  public static byte[] concat(Bytes b1, Bytes b2) {
+    int offset = 0;
+    int size = b1.length() + checkVlen(b1.length()) + b2.length() + checkVlen(b2.length());
+
+    byte[] data = new byte[size];
+
+    offset = writeVint(data, offset, b1.length());
+    b1.copyTo(data, offset);
+    offset += b1.length();
+
+    offset = writeVint(data, offset, b2.length());
+    b2.copyTo(data, offset);
+
+    return data;
+  }
+
+  /**
    * Concatenates of list of Bytes objects to create a byte array
    *
    * @param listOfBytes Bytes objects to concatenate
diff --git a/modules/core/src/test/java/org/apache/fluo/core/util/ByteUtilTest.java b/modules/core/src/test/java/org/apache/fluo/core/util/ByteUtilTest.java
index 768c572..0b17961 100644
--- a/modules/core/src/test/java/org/apache/fluo/core/util/ByteUtilTest.java
+++ b/modules/core/src/test/java/org/apache/fluo/core/util/ByteUtilTest.java
@@ -63,9 +63,27 @@ public class ByteUtilTest {
 
     List<Bytes> blist = ByteArrayUtil.split(ball);
 
+    Assert.assertEquals(4, blist.size());
     Assert.assertEquals(b1, blist.get(0));
     Assert.assertEquals(b2, blist.get(1));
     Assert.assertEquals(b3, blist.get(2));
     Assert.assertEquals(b4, blist.get(3));
+
+    // test two args
+    blist = ByteArrayUtil.split(ByteArrayUtil.concat(b1, b2));
+    Assert.assertEquals(2, blist.size());
+    Assert.assertEquals(b1, blist.get(0));
+    Assert.assertEquals(b2, blist.get(1));
+
+    blist = ByteArrayUtil.split(ByteArrayUtil.concat(b4, b2));
+    Assert.assertEquals(2, blist.size());
+    Assert.assertEquals(b4, blist.get(0));
+    Assert.assertEquals(b2, blist.get(1));
+
+    blist = ByteArrayUtil.split(ByteArrayUtil.concat(b1, b4));
+    Assert.assertEquals(2, blist.size());
+    Assert.assertEquals(b1, blist.get(0));
+    Assert.assertEquals(b4, blist.get(1));
+
   }
 }

-- 
To stop receiving notification emails like this one, please contact
['"commits@fluo.apache.org" <co...@fluo.apache.org>'].