Repository: hive
Updated Branches:
  refs/heads/master 494b771ac -> ff98a30ab


http://git-wip-us.apache.org/repos/asf/hive/blob/ff98a30a/serde/src/java/org/apache/hadoop/hive/serde2/WriteBuffers.java
----------------------------------------------------------------------
diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/WriteBuffers.java 
b/serde/src/java/org/apache/hadoop/hive/serde2/WriteBuffers.java
index 17d4bdb..79462a0 100644
--- a/serde/src/java/org/apache/hadoop/hive/serde2/WriteBuffers.java
+++ b/serde/src/java/org/apache/hadoop/hive/serde2/WriteBuffers.java
@@ -57,6 +57,11 @@ public final class WriteBuffers implements 
RandomAccessOutput, MemoryEstimate {
       memSize += (2 * jdm.primitive1());
       return memSize;
     }
+    public void set(Position pos) {
+      buffer = pos.buffer;
+      bufferIndex = pos.bufferIndex;
+      offset = pos.offset;
+    }
   }
 
   Position writePos = new Position(); // Position where we'd write
@@ -552,6 +557,21 @@ public final class WriteBuffers implements 
RandomAccessOutput, MemoryEstimate {
     return v;
   }
 
+  public long readNByteLong(int bytes, Position readPos) {
+    long v = 0;
+    if (isAllInOneReadBuffer(bytes, readPos)) {
+      for (int i = 0; i < bytes; ++i) {
+        v = (v << 8) + (readPos.buffer[readPos.offset + i] & 0xff);
+      }
+      readPos.offset += bytes;
+    } else {
+      for (int i = 0; i < bytes; ++i) {
+        v = (v << 8) + (readNextByte(readPos) & 0xff);
+      }
+    }
+    return v;
+  }
+
   public void writeFiveByteULong(long offset, long v) {
     int prevIndex = writePos.bufferIndex, prevOffset = writePos.offset;
     setWritePoint(offset);
@@ -574,10 +594,43 @@ public final class WriteBuffers implements 
RandomAccessOutput, MemoryEstimate {
     writePos.offset = prevOffset;
   }
 
+  public void writeFiveByteULong(long v) {
+    if (isAllInOneWriteBuffer(5)) {
+      writePos.buffer[writePos.offset] = (byte)(v >>> 32);
+      writePos.buffer[writePos.offset + 1] = (byte)(v >>> 24);
+      writePos.buffer[writePos.offset + 2] = (byte)(v >>> 16);
+      writePos.buffer[writePos.offset + 3] = (byte)(v >>> 8);
+      writePos.buffer[writePos.offset + 4] = (byte)(v);
+      writePos.offset += 5;
+    } else {
+      write((byte)(v >>> 32));
+      write((byte)(v >>> 24));
+      write((byte)(v >>> 16));
+      write((byte)(v >>> 8));
+      write((byte)(v));
+    }
+  }
+
   public int readInt(long offset) {
     return (int)unsafeReadNByteLong(offset, 4);
   }
 
+  public int readInt(long offset, Position readPos) {
+    setReadPoint(offset, readPos);
+    long v = 0;
+    if (isAllInOneReadBuffer(4, readPos)) {
+      for (int i = 0; i < 4; ++i) {
+        v = (v << 8) + (readPos.buffer[readPos.offset + i] & 0xff);
+      }
+      readPos.offset += 4;
+    } else {
+      for (int i = 0; i < 4; ++i) {
+        v = (v << 8) + (readNextByte(readPos) & 0xff);
+      }
+    }
+    return (int) v;
+  }
+
   @Override
   public void writeInt(long offset, int v) {
     int prevIndex = writePos.bufferIndex, prevOffset = writePos.offset;

Reply via email to