/** * Copyright 2014 Prasanth Jayachandran * * Licensed 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.hadoop.hive.llap.io.metadata; /** * */ public class CompressionBuffer { // stripe position within file private int stripePos; // row group position within stripe private int rowGroupPos; // start offset of compression buffer corresponding to above row group private long startOffset; // length of compression buffer (compressed or uncompressed length) private long length; // offset within compression buffer where the row group begins private int uncompressedOffset; // if uncompressedOffset is in a middle of integer encoding runs (RLE, Delta etc.), consume // these many values to reach beginning of the row group private int consume; // For run length byte encoding, record the number of bits within current byte to consume to // reach beginning of the row group. This is required for IS_PRESENT stream. private int consumeBits; // if last row group is set to true, it means the above row group spans compression buffer // boundary. Length will span two compression buffers. private boolean lastRowGroup; private CompressionBuffer(int sp, int rgp, long s, long len, int u, int c, int cb, boolean last) { this.stripePos = sp; this.rowGroupPos = rgp; this.startOffset = s; this.length = len; this.uncompressedOffset = u; this.consume = c; this.consumeBits = cb; this.lastRowGroup = last; } private static class Builder { private int stripePos; private int rowGroupPos; private long startOffset; private long length; private int offsetWithinBuffer; private int consume; private int consumeBits; private boolean lastRowGroup; public Builder setStripePosition(int stripePos) { this.stripePos = stripePos; return this; } public Builder setRowGroupPosition(int rowGroupPos) { this.rowGroupPos = rowGroupPos; return this; } public Builder setStartOffset(long startOffset) { this.startOffset = startOffset; return this; } public Builder setLength(long length) { this.length = length; return this; } public Builder setOffsetWithInBuffer(int offsetWithInBuffer) { this.offsetWithinBuffer = offsetWithInBuffer; return this; } public Builder consumeRuns(int consume) { this.consume = consume; return this; } public Builder consumeBits(int consumeBits) { this.consumeBits = consumeBits; return this; } public Builder setLastRowGroup(boolean lastRowGroup) { this.lastRowGroup = lastRowGroup; return this; } public CompressionBuffer build() { return new CompressionBuffer(stripePos, rowGroupPos, startOffset, length, offsetWithinBuffer, consume, consumeBits, lastRowGroup); } } public static Builder builder() { return new Builder(); } }