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.encode.other; 20 21 import org.apache.hadoop.hbase.classification.InterfaceAudience; 22 23 /** 24 * Detect if every KV has the same KeyValue.Type, in which case we don't need to store it for each 25 * KV. If(allSameType) during conversion to byte[], then we can store the "onlyType" in blockMeta, 26 * therefore not repeating it for each cell and saving 1 byte per cell. 27 */ 28 @InterfaceAudience.Private 29 public class CellTypeEncoder { 30 31 /************* fields *********************/ 32 33 protected boolean pendingFirstType = true; 34 protected boolean allSameType = true; 35 protected byte onlyType; 36 37 38 /************* construct *********************/ 39 40 public void reset() { 41 pendingFirstType = true; 42 allSameType = true; 43 } 44 45 46 /************* methods *************************/ 47 48 public void add(byte type) { 49 if (pendingFirstType) { 50 onlyType = type; 51 pendingFirstType = false; 52 } else if (onlyType != type) { 53 allSameType = false; 54 } 55 } 56 57 58 /**************** get/set **************************/ 59 60 public boolean areAllSameType() { 61 return allSameType; 62 } 63 64 public byte getOnlyType() { 65 return onlyType; 66 } 67 68 }