1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19 package org.apache.hadoop.hbase.codec.prefixtree.decode.timestamp;
20
21 import org.apache.hadoop.hbase.classification.InterfaceAudience;
22 import org.apache.hadoop.hbase.codec.prefixtree.PrefixTreeBlockMeta;
23 import org.apache.hadoop.hbase.util.vint.UFIntTool;
24
25 /**
26 * Given a block and its blockMeta, this will decode the timestamp for the i-th Cell in the block.
27 */
28 @InterfaceAudience.Private
29 public class TimestampDecoder {
30
31 protected PrefixTreeBlockMeta blockMeta;
32 protected byte[] block;
33
34
35 /************** construct ***********************/
36
37 public TimestampDecoder() {
38 }
39
40 public void initOnBlock(PrefixTreeBlockMeta blockMeta, byte[] block) {
41 this.block = block;
42 this.blockMeta = blockMeta;
43 }
44
45
46 /************** methods *************************/
47
48 public long getLong(int index) {
49 if (blockMeta.getTimestampIndexWidth() == 0) {//all timestamps in the block were identical
50 return blockMeta.getMinTimestamp();
51 }
52 int startIndex = blockMeta.getAbsoluteTimestampOffset() + blockMeta.getTimestampDeltaWidth()
53 * index;
54 long delta = UFIntTool.fromBytes(block, startIndex, blockMeta.getTimestampDeltaWidth());
55 return blockMeta.getMinTimestamp() + delta;
56 }
57 }