<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) -->
<title>Source code</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="source: package: org.apache.hadoop.hbase, class: PrivateCellUtil, class: FirstOnRowByteBufferExtendedCell">
<meta name="generator" content="javadoc/SourceToHTMLConverter">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body class="source-page">
<main role="main">
<div class="source-container">
<pre><span class="source-line-no">001</span><span id="line-1">/*</span>
<span class="source-line-no">002</span><span id="line-2"> * Licensed to the Apache Software Foundation (ASF) under one</span>
<span class="source-line-no">003</span><span id="line-3"> * or more contributor license agreements.  See the NOTICE file</span>
<span class="source-line-no">004</span><span id="line-4"> * distributed with this work for additional information</span>
<span class="source-line-no">005</span><span id="line-5"> * regarding copyright ownership.  The ASF licenses this file</span>
<span class="source-line-no">006</span><span id="line-6"> * to you under the Apache License, Version 2.0 (the</span>
<span class="source-line-no">007</span><span id="line-7"> * "License"); you may not use this file except in compliance</span>
<span class="source-line-no">008</span><span id="line-8"> * with the License.  You may obtain a copy of the License at</span>
<span class="source-line-no">009</span><span id="line-9"> *</span>
<span class="source-line-no">010</span><span id="line-10"> *     http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="source-line-no">011</span><span id="line-11"> *</span>
<span class="source-line-no">012</span><span id="line-12"> * Unless required by applicable law or agreed to in writing, software</span>
<span class="source-line-no">013</span><span id="line-13"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
<span class="source-line-no">014</span><span id="line-14"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
<span class="source-line-no">015</span><span id="line-15"> * See the License for the specific language governing permissions and</span>
<span class="source-line-no">016</span><span id="line-16"> * limitations under the License.</span>
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
<span class="source-line-no">020</span><span id="line-20">import static org.apache.hadoop.hbase.HConstants.EMPTY_BYTE_ARRAY;</span>
<span class="source-line-no">021</span><span id="line-21">import static org.apache.hadoop.hbase.Tag.TAG_LENGTH_SIZE;</span>
<span class="source-line-no">022</span><span id="line-22"></span>
<span class="source-line-no">023</span><span id="line-23">import java.io.DataOutput;</span>
<span class="source-line-no">024</span><span id="line-24">import java.io.DataOutputStream;</span>
<span class="source-line-no">025</span><span id="line-25">import java.io.IOException;</span>
<span class="source-line-no">026</span><span id="line-26">import java.io.OutputStream;</span>
<span class="source-line-no">027</span><span id="line-27">import java.math.BigDecimal;</span>
<span class="source-line-no">028</span><span id="line-28">import java.nio.ByteBuffer;</span>
<span class="source-line-no">029</span><span id="line-29">import java.util.ArrayList;</span>
<span class="source-line-no">030</span><span id="line-30">import java.util.Iterator;</span>
<span class="source-line-no">031</span><span id="line-31">import java.util.List;</span>
<span class="source-line-no">032</span><span id="line-32">import java.util.Map.Entry;</span>
<span class="source-line-no">033</span><span id="line-33">import java.util.NavigableMap;</span>
<span class="source-line-no">034</span><span id="line-34">import java.util.Optional;</span>
<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.filter.ByteArrayComparable;</span>
<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.io.TagCompressionContext;</span>
<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.io.util.Dictionary;</span>
<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.io.util.StreamUtils;</span>
<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.util.ByteBufferUtils;</span>
<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.util.ByteRange;</span>
<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.util.Bytes;</span>
<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.util.ClassSize;</span>
<span class="source-line-no">043</span><span id="line-43">import org.apache.yetus.audience.InterfaceAudience;</span>
<span class="source-line-no">044</span><span id="line-44"></span>
<span class="source-line-no">045</span><span id="line-45">import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;</span>
<span class="source-line-no">046</span><span id="line-46"></span>
<span class="source-line-no">047</span><span id="line-47">/**</span>
<span class="source-line-no">048</span><span id="line-48"> * Utility methods helpful slinging {@link Cell} instances. It has more powerful and rich set of</span>
<span class="source-line-no">049</span><span id="line-49"> * APIs than those in {@link CellUtil} for internal usage.</span>
<span class="source-line-no">050</span><span id="line-50"> */</span>
<span class="source-line-no">051</span><span id="line-51">@InterfaceAudience.Private</span>
<span class="source-line-no">052</span><span id="line-52">public final class PrivateCellUtil {</span>
<span class="source-line-no">053</span><span id="line-53"></span>
<span class="source-line-no">054</span><span id="line-54">  /**</span>
<span class="source-line-no">055</span><span id="line-55">   * Private constructor to keep this class from being instantiated.</span>
<span class="source-line-no">056</span><span id="line-56">   */</span>
<span class="source-line-no">057</span><span id="line-57">  private PrivateCellUtil() {</span>
<span class="source-line-no">058</span><span id="line-58">  }</span>
<span class="source-line-no">059</span><span id="line-59"></span>
<span class="source-line-no">060</span><span id="line-60">  /******************* ByteRange *******************************/</span>
<span class="source-line-no">061</span><span id="line-61"></span>
<span class="source-line-no">062</span><span id="line-62">  public static ByteRange fillRowRange(Cell cell, ByteRange range) {</span>
<span class="source-line-no">063</span><span id="line-63">    return range.set(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());</span>
<span class="source-line-no">064</span><span id="line-64">  }</span>
<span class="source-line-no">065</span><span id="line-65"></span>
<span class="source-line-no">066</span><span id="line-66">  public static ByteRange fillFamilyRange(Cell cell, ByteRange range) {</span>
<span class="source-line-no">067</span><span id="line-67">    return range.set(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength());</span>
<span class="source-line-no">068</span><span id="line-68">  }</span>
<span class="source-line-no">069</span><span id="line-69"></span>
<span class="source-line-no">070</span><span id="line-70">  public static ByteRange fillQualifierRange(Cell cell, ByteRange range) {</span>
<span class="source-line-no">071</span><span id="line-71">    return range.set(cell.getQualifierArray(), cell.getQualifierOffset(),</span>
<span class="source-line-no">072</span><span id="line-72">      cell.getQualifierLength());</span>
<span class="source-line-no">073</span><span id="line-73">  }</span>
<span class="source-line-no">074</span><span id="line-74"></span>
<span class="source-line-no">075</span><span id="line-75">  public static ByteRange fillValueRange(Cell cell, ByteRange range) {</span>
<span class="source-line-no">076</span><span id="line-76">    return range.set(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());</span>
<span class="source-line-no">077</span><span id="line-77">  }</span>
<span class="source-line-no">078</span><span id="line-78"></span>
<span class="source-line-no">079</span><span id="line-79">  public static ByteRange fillTagRange(ExtendedCell cell, ByteRange range) {</span>
<span class="source-line-no">080</span><span id="line-80">    return range.set(cell.getTagsArray(), cell.getTagsOffset(), cell.getTagsLength());</span>
<span class="source-line-no">081</span><span id="line-81">  }</span>
<span class="source-line-no">082</span><span id="line-82"></span>
<span class="source-line-no">083</span><span id="line-83">  /********************* misc *************************************/</span>
<span class="source-line-no">084</span><span id="line-84"></span>
<span class="source-line-no">085</span><span id="line-85">  public static byte getRowByte(Cell cell, int index) {</span>
<span class="source-line-no">086</span><span id="line-86">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">087</span><span id="line-87">      return ((ByteBufferExtendedCell) cell).getRowByteBuffer()</span>
<span class="source-line-no">088</span><span id="line-88">        .get(((ByteBufferExtendedCell) cell).getRowPosition() + index);</span>
<span class="source-line-no">089</span><span id="line-89">    }</span>
<span class="source-line-no">090</span><span id="line-90">    return cell.getRowArray()[cell.getRowOffset() + index];</span>
<span class="source-line-no">091</span><span id="line-91">  }</span>
<span class="source-line-no">092</span><span id="line-92"></span>
<span class="source-line-no">093</span><span id="line-93">  public static byte getQualifierByte(Cell cell, int index) {</span>
<span class="source-line-no">094</span><span id="line-94">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">095</span><span id="line-95">      return ((ByteBufferExtendedCell) cell).getQualifierByteBuffer()</span>
<span class="source-line-no">096</span><span id="line-96">        .get(((ByteBufferExtendedCell) cell).getQualifierPosition() + index);</span>
<span class="source-line-no">097</span><span id="line-97">    }</span>
<span class="source-line-no">098</span><span id="line-98">    return cell.getQualifierArray()[cell.getQualifierOffset() + index];</span>
<span class="source-line-no">099</span><span id="line-99">  }</span>
<span class="source-line-no">100</span><span id="line-100"></span>
<span class="source-line-no">101</span><span id="line-101">  public static ByteBuffer getValueBufferShallowCopy(Cell cell) {</span>
<span class="source-line-no">102</span><span id="line-102">    ByteBuffer buffer =</span>
<span class="source-line-no">103</span><span id="line-103">      ByteBuffer.wrap(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());</span>
<span class="source-line-no">104</span><span id="line-104">    return buffer;</span>
<span class="source-line-no">105</span><span id="line-105">  }</span>
<span class="source-line-no">106</span><span id="line-106"></span>
<span class="source-line-no">107</span><span id="line-107">  /** Returns A new cell which is having the extra tags also added to it. */</span>
<span class="source-line-no">108</span><span id="line-108">  public static ExtendedCell createCell(ExtendedCell cell, List&lt;Tag&gt; tags) {</span>
<span class="source-line-no">109</span><span id="line-109">    return createCell(cell, TagUtil.fromList(tags));</span>
<span class="source-line-no">110</span><span id="line-110">  }</span>
<span class="source-line-no">111</span><span id="line-111"></span>
<span class="source-line-no">112</span><span id="line-112">  /** Returns A new cell which is having the extra tags also added to it. */</span>
<span class="source-line-no">113</span><span id="line-113">  public static ExtendedCell createCell(ExtendedCell cell, byte[] tags) {</span>
<span class="source-line-no">114</span><span id="line-114">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">115</span><span id="line-115">      return new TagRewriteByteBufferExtendedCell((ByteBufferExtendedCell) cell, tags);</span>
<span class="source-line-no">116</span><span id="line-116">    }</span>
<span class="source-line-no">117</span><span id="line-117">    return new TagRewriteCell(cell, tags);</span>
<span class="source-line-no">118</span><span id="line-118">  }</span>
<span class="source-line-no">119</span><span id="line-119"></span>
<span class="source-line-no">120</span><span id="line-120">  public static ExtendedCell createCell(ExtendedCell cell, byte[] value, byte[] tags) {</span>
<span class="source-line-no">121</span><span id="line-121">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">122</span><span id="line-122">      return new ValueAndTagRewriteByteBufferExtendedCell((ByteBufferExtendedCell) cell, value,</span>
<span class="source-line-no">123</span><span id="line-123">        tags);</span>
<span class="source-line-no">124</span><span id="line-124">    }</span>
<span class="source-line-no">125</span><span id="line-125">    return new ValueAndTagRewriteCell(cell, value, tags);</span>
<span class="source-line-no">126</span><span id="line-126">  }</span>
<span class="source-line-no">127</span><span id="line-127"></span>
<span class="source-line-no">128</span><span id="line-128">  /**</span>
<span class="source-line-no">129</span><span id="line-129">   * This can be used when a Cell has to change with addition/removal of one or more tags. This is</span>
<span class="source-line-no">130</span><span id="line-130">   * an efficient way to do so in which only the tags bytes part need to recreated and copied. All</span>
<span class="source-line-no">131</span><span id="line-131">   * other parts, refer to the original Cell.</span>
<span class="source-line-no">132</span><span id="line-132">   */</span>
<span class="source-line-no">133</span><span id="line-133">  static class TagRewriteCell implements ExtendedCell {</span>
<span class="source-line-no">134</span><span id="line-134">    protected ExtendedCell cell;</span>
<span class="source-line-no">135</span><span id="line-135">    protected byte[] tags;</span>
<span class="source-line-no">136</span><span id="line-136">    private static final int HEAP_SIZE_OVERHEAD = ClassSize.OBJECT + 2 * ClassSize.REFERENCE;</span>
<span class="source-line-no">137</span><span id="line-137"></span>
<span class="source-line-no">138</span><span id="line-138">    /**</span>
<span class="source-line-no">139</span><span id="line-139">     * Construct a TagRewriteCell</span>
<span class="source-line-no">140</span><span id="line-140">     * @param cell The original Cell which it rewrites</span>
<span class="source-line-no">141</span><span id="line-141">     * @param tags the tags bytes. The array suppose to contain the tags bytes alone.</span>
<span class="source-line-no">142</span><span id="line-142">     */</span>
<span class="source-line-no">143</span><span id="line-143">    public TagRewriteCell(ExtendedCell cell, byte[] tags) {</span>
<span class="source-line-no">144</span><span id="line-144">      assert tags != null;</span>
<span class="source-line-no">145</span><span id="line-145">      this.cell = cell;</span>
<span class="source-line-no">146</span><span id="line-146">      this.tags = tags;</span>
<span class="source-line-no">147</span><span id="line-147">      // tag offset will be treated as 0 and length this.tags.length</span>
<span class="source-line-no">148</span><span id="line-148">      if (this.cell instanceof TagRewriteCell) {</span>
<span class="source-line-no">149</span><span id="line-149">        // Cleaning the ref so that the byte[] can be GCed</span>
<span class="source-line-no">150</span><span id="line-150">        ((TagRewriteCell) this.cell).tags = null;</span>
<span class="source-line-no">151</span><span id="line-151">      }</span>
<span class="source-line-no">152</span><span id="line-152">    }</span>
<span class="source-line-no">153</span><span id="line-153"></span>
<span class="source-line-no">154</span><span id="line-154">    @Override</span>
<span class="source-line-no">155</span><span id="line-155">    public byte[] getRowArray() {</span>
<span class="source-line-no">156</span><span id="line-156">      return cell.getRowArray();</span>
<span class="source-line-no">157</span><span id="line-157">    }</span>
<span class="source-line-no">158</span><span id="line-158"></span>
<span class="source-line-no">159</span><span id="line-159">    @Override</span>
<span class="source-line-no">160</span><span id="line-160">    public int getRowOffset() {</span>
<span class="source-line-no">161</span><span id="line-161">      return cell.getRowOffset();</span>
<span class="source-line-no">162</span><span id="line-162">    }</span>
<span class="source-line-no">163</span><span id="line-163"></span>
<span class="source-line-no">164</span><span id="line-164">    @Override</span>
<span class="source-line-no">165</span><span id="line-165">    public short getRowLength() {</span>
<span class="source-line-no">166</span><span id="line-166">      return cell.getRowLength();</span>
<span class="source-line-no">167</span><span id="line-167">    }</span>
<span class="source-line-no">168</span><span id="line-168"></span>
<span class="source-line-no">169</span><span id="line-169">    @Override</span>
<span class="source-line-no">170</span><span id="line-170">    public byte[] getFamilyArray() {</span>
<span class="source-line-no">171</span><span id="line-171">      return cell.getFamilyArray();</span>
<span class="source-line-no">172</span><span id="line-172">    }</span>
<span class="source-line-no">173</span><span id="line-173"></span>
<span class="source-line-no">174</span><span id="line-174">    @Override</span>
<span class="source-line-no">175</span><span id="line-175">    public int getFamilyOffset() {</span>
<span class="source-line-no">176</span><span id="line-176">      return cell.getFamilyOffset();</span>
<span class="source-line-no">177</span><span id="line-177">    }</span>
<span class="source-line-no">178</span><span id="line-178"></span>
<span class="source-line-no">179</span><span id="line-179">    @Override</span>
<span class="source-line-no">180</span><span id="line-180">    public byte getFamilyLength() {</span>
<span class="source-line-no">181</span><span id="line-181">      return cell.getFamilyLength();</span>
<span class="source-line-no">182</span><span id="line-182">    }</span>
<span class="source-line-no">183</span><span id="line-183"></span>
<span class="source-line-no">184</span><span id="line-184">    @Override</span>
<span class="source-line-no">185</span><span id="line-185">    public byte[] getQualifierArray() {</span>
<span class="source-line-no">186</span><span id="line-186">      return cell.getQualifierArray();</span>
<span class="source-line-no">187</span><span id="line-187">    }</span>
<span class="source-line-no">188</span><span id="line-188"></span>
<span class="source-line-no">189</span><span id="line-189">    @Override</span>
<span class="source-line-no">190</span><span id="line-190">    public int getQualifierOffset() {</span>
<span class="source-line-no">191</span><span id="line-191">      return cell.getQualifierOffset();</span>
<span class="source-line-no">192</span><span id="line-192">    }</span>
<span class="source-line-no">193</span><span id="line-193"></span>
<span class="source-line-no">194</span><span id="line-194">    @Override</span>
<span class="source-line-no">195</span><span id="line-195">    public int getQualifierLength() {</span>
<span class="source-line-no">196</span><span id="line-196">      return cell.getQualifierLength();</span>
<span class="source-line-no">197</span><span id="line-197">    }</span>
<span class="source-line-no">198</span><span id="line-198"></span>
<span class="source-line-no">199</span><span id="line-199">    @Override</span>
<span class="source-line-no">200</span><span id="line-200">    public long getTimestamp() {</span>
<span class="source-line-no">201</span><span id="line-201">      return cell.getTimestamp();</span>
<span class="source-line-no">202</span><span id="line-202">    }</span>
<span class="source-line-no">203</span><span id="line-203"></span>
<span class="source-line-no">204</span><span id="line-204">    @Override</span>
<span class="source-line-no">205</span><span id="line-205">    public byte getTypeByte() {</span>
<span class="source-line-no">206</span><span id="line-206">      return cell.getTypeByte();</span>
<span class="source-line-no">207</span><span id="line-207">    }</span>
<span class="source-line-no">208</span><span id="line-208"></span>
<span class="source-line-no">209</span><span id="line-209">    @Override</span>
<span class="source-line-no">210</span><span id="line-210">    public long getSequenceId() {</span>
<span class="source-line-no">211</span><span id="line-211">      return cell.getSequenceId();</span>
<span class="source-line-no">212</span><span id="line-212">    }</span>
<span class="source-line-no">213</span><span id="line-213"></span>
<span class="source-line-no">214</span><span id="line-214">    @Override</span>
<span class="source-line-no">215</span><span id="line-215">    public byte[] getValueArray() {</span>
<span class="source-line-no">216</span><span id="line-216">      return cell.getValueArray();</span>
<span class="source-line-no">217</span><span id="line-217">    }</span>
<span class="source-line-no">218</span><span id="line-218"></span>
<span class="source-line-no">219</span><span id="line-219">    @Override</span>
<span class="source-line-no">220</span><span id="line-220">    public int getValueOffset() {</span>
<span class="source-line-no">221</span><span id="line-221">      return cell.getValueOffset();</span>
<span class="source-line-no">222</span><span id="line-222">    }</span>
<span class="source-line-no">223</span><span id="line-223"></span>
<span class="source-line-no">224</span><span id="line-224">    @Override</span>
<span class="source-line-no">225</span><span id="line-225">    public int getValueLength() {</span>
<span class="source-line-no">226</span><span id="line-226">      return cell.getValueLength();</span>
<span class="source-line-no">227</span><span id="line-227">    }</span>
<span class="source-line-no">228</span><span id="line-228"></span>
<span class="source-line-no">229</span><span id="line-229">    @Override</span>
<span class="source-line-no">230</span><span id="line-230">    public byte[] getTagsArray() {</span>
<span class="source-line-no">231</span><span id="line-231">      return this.tags;</span>
<span class="source-line-no">232</span><span id="line-232">    }</span>
<span class="source-line-no">233</span><span id="line-233"></span>
<span class="source-line-no">234</span><span id="line-234">    @Override</span>
<span class="source-line-no">235</span><span id="line-235">    public int getTagsOffset() {</span>
<span class="source-line-no">236</span><span id="line-236">      return 0;</span>
<span class="source-line-no">237</span><span id="line-237">    }</span>
<span class="source-line-no">238</span><span id="line-238"></span>
<span class="source-line-no">239</span><span id="line-239">    @Override</span>
<span class="source-line-no">240</span><span id="line-240">    public int getTagsLength() {</span>
<span class="source-line-no">241</span><span id="line-241">      if (null == this.tags) {</span>
<span class="source-line-no">242</span><span id="line-242">        // Nulled out tags array optimization in constructor</span>
<span class="source-line-no">243</span><span id="line-243">        return 0;</span>
<span class="source-line-no">244</span><span id="line-244">      }</span>
<span class="source-line-no">245</span><span id="line-245">      return this.tags.length;</span>
<span class="source-line-no">246</span><span id="line-246">    }</span>
<span class="source-line-no">247</span><span id="line-247"></span>
<span class="source-line-no">248</span><span id="line-248">    @Override</span>
<span class="source-line-no">249</span><span id="line-249">    public long heapSize() {</span>
<span class="source-line-no">250</span><span id="line-250">      long sum = HEAP_SIZE_OVERHEAD + cell.heapSize();</span>
<span class="source-line-no">251</span><span id="line-251">      if (this.tags != null) {</span>
<span class="source-line-no">252</span><span id="line-252">        sum += ClassSize.sizeOf(this.tags);</span>
<span class="source-line-no">253</span><span id="line-253">      }</span>
<span class="source-line-no">254</span><span id="line-254">      return sum;</span>
<span class="source-line-no">255</span><span id="line-255">    }</span>
<span class="source-line-no">256</span><span id="line-256"></span>
<span class="source-line-no">257</span><span id="line-257">    @Override</span>
<span class="source-line-no">258</span><span id="line-258">    public void setTimestamp(long ts) throws IOException {</span>
<span class="source-line-no">259</span><span id="line-259">      // The incoming cell is supposed to be ExtendedCell type.</span>
<span class="source-line-no">260</span><span id="line-260">      PrivateCellUtil.setTimestamp(cell, ts);</span>
<span class="source-line-no">261</span><span id="line-261">    }</span>
<span class="source-line-no">262</span><span id="line-262"></span>
<span class="source-line-no">263</span><span id="line-263">    @Override</span>
<span class="source-line-no">264</span><span id="line-264">    public void setTimestamp(byte[] ts) throws IOException {</span>
<span class="source-line-no">265</span><span id="line-265">      // The incoming cell is supposed to be ExtendedCell type.</span>
<span class="source-line-no">266</span><span id="line-266">      PrivateCellUtil.setTimestamp(cell, ts);</span>
<span class="source-line-no">267</span><span id="line-267">    }</span>
<span class="source-line-no">268</span><span id="line-268"></span>
<span class="source-line-no">269</span><span id="line-269">    @Override</span>
<span class="source-line-no">270</span><span id="line-270">    public void setSequenceId(long seqId) throws IOException {</span>
<span class="source-line-no">271</span><span id="line-271">      // The incoming cell is supposed to be ExtendedCell type.</span>
<span class="source-line-no">272</span><span id="line-272">      PrivateCellUtil.setSequenceId(cell, seqId);</span>
<span class="source-line-no">273</span><span id="line-273">    }</span>
<span class="source-line-no">274</span><span id="line-274"></span>
<span class="source-line-no">275</span><span id="line-275">    @Override</span>
<span class="source-line-no">276</span><span id="line-276">    public int write(OutputStream out, boolean withTags) throws IOException {</span>
<span class="source-line-no">277</span><span id="line-277">      int len = ((ExtendedCell) this.cell).write(out, false);</span>
<span class="source-line-no">278</span><span id="line-278">      if (withTags &amp;&amp; this.tags != null) {</span>
<span class="source-line-no">279</span><span id="line-279">        // Write the tagsLength 2 bytes</span>
<span class="source-line-no">280</span><span id="line-280">        out.write((byte) (0xff &amp; (this.tags.length &gt;&gt; 8)));</span>
<span class="source-line-no">281</span><span id="line-281">        out.write((byte) (0xff &amp; this.tags.length));</span>
<span class="source-line-no">282</span><span id="line-282">        out.write(this.tags);</span>
<span class="source-line-no">283</span><span id="line-283">        len += KeyValue.TAGS_LENGTH_SIZE + this.tags.length;</span>
<span class="source-line-no">284</span><span id="line-284">      }</span>
<span class="source-line-no">285</span><span id="line-285">      return len;</span>
<span class="source-line-no">286</span><span id="line-286">    }</span>
<span class="source-line-no">287</span><span id="line-287"></span>
<span class="source-line-no">288</span><span id="line-288">    @Override</span>
<span class="source-line-no">289</span><span id="line-289">    public int getSerializedSize(boolean withTags) {</span>
<span class="source-line-no">290</span><span id="line-290">      int len = ((ExtendedCell) this.cell).getSerializedSize(false);</span>
<span class="source-line-no">291</span><span id="line-291">      if (withTags &amp;&amp; this.tags != null) {</span>
<span class="source-line-no">292</span><span id="line-292">        len += KeyValue.TAGS_LENGTH_SIZE + this.tags.length;</span>
<span class="source-line-no">293</span><span id="line-293">      }</span>
<span class="source-line-no">294</span><span id="line-294">      return len;</span>
<span class="source-line-no">295</span><span id="line-295">    }</span>
<span class="source-line-no">296</span><span id="line-296"></span>
<span class="source-line-no">297</span><span id="line-297">    @Override</span>
<span class="source-line-no">298</span><span id="line-298">    public void write(ByteBuffer buf, int offset) {</span>
<span class="source-line-no">299</span><span id="line-299">      offset = KeyValueUtil.appendTo(this.cell, buf, offset, false);</span>
<span class="source-line-no">300</span><span id="line-300">      int tagsLen = this.tags == null ? 0 : this.tags.length;</span>
<span class="source-line-no">301</span><span id="line-301">      if (tagsLen &gt; 0) {</span>
<span class="source-line-no">302</span><span id="line-302">        offset = ByteBufferUtils.putAsShort(buf, offset, tagsLen);</span>
<span class="source-line-no">303</span><span id="line-303">        ByteBufferUtils.copyFromArrayToBuffer(buf, offset, this.tags, 0, tagsLen);</span>
<span class="source-line-no">304</span><span id="line-304">      }</span>
<span class="source-line-no">305</span><span id="line-305">    }</span>
<span class="source-line-no">306</span><span id="line-306"></span>
<span class="source-line-no">307</span><span id="line-307">    @Override</span>
<span class="source-line-no">308</span><span id="line-308">    public ExtendedCell deepClone() {</span>
<span class="source-line-no">309</span><span id="line-309">      ExtendedCell clonedBaseCell = this.cell.deepClone();</span>
<span class="source-line-no">310</span><span id="line-310">      return new TagRewriteCell(clonedBaseCell, this.tags);</span>
<span class="source-line-no">311</span><span id="line-311">    }</span>
<span class="source-line-no">312</span><span id="line-312">  }</span>
<span class="source-line-no">313</span><span id="line-313"></span>
<span class="source-line-no">314</span><span id="line-314">  static class TagRewriteByteBufferExtendedCell extends ByteBufferExtendedCell {</span>
<span class="source-line-no">315</span><span id="line-315"></span>
<span class="source-line-no">316</span><span id="line-316">    protected ByteBufferExtendedCell cell;</span>
<span class="source-line-no">317</span><span id="line-317">    protected byte[] tags;</span>
<span class="source-line-no">318</span><span id="line-318">    private static final int HEAP_SIZE_OVERHEAD = ClassSize.OBJECT + 2 * ClassSize.REFERENCE;</span>
<span class="source-line-no">319</span><span id="line-319"></span>
<span class="source-line-no">320</span><span id="line-320">    /**</span>
<span class="source-line-no">321</span><span id="line-321">     * @param cell The original ByteBufferExtendedCell which it rewrites</span>
<span class="source-line-no">322</span><span id="line-322">     * @param tags the tags bytes. The array suppose to contain the tags bytes alone.</span>
<span class="source-line-no">323</span><span id="line-323">     */</span>
<span class="source-line-no">324</span><span id="line-324">    public TagRewriteByteBufferExtendedCell(ByteBufferExtendedCell cell, byte[] tags) {</span>
<span class="source-line-no">325</span><span id="line-325">      assert tags != null;</span>
<span class="source-line-no">326</span><span id="line-326">      this.cell = cell;</span>
<span class="source-line-no">327</span><span id="line-327">      this.tags = tags;</span>
<span class="source-line-no">328</span><span id="line-328">      // tag offset will be treated as 0 and length this.tags.length</span>
<span class="source-line-no">329</span><span id="line-329">      if (this.cell instanceof TagRewriteByteBufferExtendedCell) {</span>
<span class="source-line-no">330</span><span id="line-330">        // Cleaning the ref so that the byte[] can be GCed</span>
<span class="source-line-no">331</span><span id="line-331">        ((TagRewriteByteBufferExtendedCell) this.cell).tags = null;</span>
<span class="source-line-no">332</span><span id="line-332">      }</span>
<span class="source-line-no">333</span><span id="line-333">    }</span>
<span class="source-line-no">334</span><span id="line-334"></span>
<span class="source-line-no">335</span><span id="line-335">    @Override</span>
<span class="source-line-no">336</span><span id="line-336">    public byte[] getRowArray() {</span>
<span class="source-line-no">337</span><span id="line-337">      return this.cell.getRowArray();</span>
<span class="source-line-no">338</span><span id="line-338">    }</span>
<span class="source-line-no">339</span><span id="line-339"></span>
<span class="source-line-no">340</span><span id="line-340">    @Override</span>
<span class="source-line-no">341</span><span id="line-341">    public int getRowOffset() {</span>
<span class="source-line-no">342</span><span id="line-342">      return this.cell.getRowOffset();</span>
<span class="source-line-no">343</span><span id="line-343">    }</span>
<span class="source-line-no">344</span><span id="line-344"></span>
<span class="source-line-no">345</span><span id="line-345">    @Override</span>
<span class="source-line-no">346</span><span id="line-346">    public short getRowLength() {</span>
<span class="source-line-no">347</span><span id="line-347">      return this.cell.getRowLength();</span>
<span class="source-line-no">348</span><span id="line-348">    }</span>
<span class="source-line-no">349</span><span id="line-349"></span>
<span class="source-line-no">350</span><span id="line-350">    @Override</span>
<span class="source-line-no">351</span><span id="line-351">    public byte[] getFamilyArray() {</span>
<span class="source-line-no">352</span><span id="line-352">      return this.cell.getFamilyArray();</span>
<span class="source-line-no">353</span><span id="line-353">    }</span>
<span class="source-line-no">354</span><span id="line-354"></span>
<span class="source-line-no">355</span><span id="line-355">    @Override</span>
<span class="source-line-no">356</span><span id="line-356">    public int getFamilyOffset() {</span>
<span class="source-line-no">357</span><span id="line-357">      return this.cell.getFamilyOffset();</span>
<span class="source-line-no">358</span><span id="line-358">    }</span>
<span class="source-line-no">359</span><span id="line-359"></span>
<span class="source-line-no">360</span><span id="line-360">    @Override</span>
<span class="source-line-no">361</span><span id="line-361">    public byte getFamilyLength() {</span>
<span class="source-line-no">362</span><span id="line-362">      return this.cell.getFamilyLength();</span>
<span class="source-line-no">363</span><span id="line-363">    }</span>
<span class="source-line-no">364</span><span id="line-364"></span>
<span class="source-line-no">365</span><span id="line-365">    @Override</span>
<span class="source-line-no">366</span><span id="line-366">    public byte[] getQualifierArray() {</span>
<span class="source-line-no">367</span><span id="line-367">      return this.cell.getQualifierArray();</span>
<span class="source-line-no">368</span><span id="line-368">    }</span>
<span class="source-line-no">369</span><span id="line-369"></span>
<span class="source-line-no">370</span><span id="line-370">    @Override</span>
<span class="source-line-no">371</span><span id="line-371">    public int getQualifierOffset() {</span>
<span class="source-line-no">372</span><span id="line-372">      return this.cell.getQualifierOffset();</span>
<span class="source-line-no">373</span><span id="line-373">    }</span>
<span class="source-line-no">374</span><span id="line-374"></span>
<span class="source-line-no">375</span><span id="line-375">    @Override</span>
<span class="source-line-no">376</span><span id="line-376">    public int getQualifierLength() {</span>
<span class="source-line-no">377</span><span id="line-377">      return this.cell.getQualifierLength();</span>
<span class="source-line-no">378</span><span id="line-378">    }</span>
<span class="source-line-no">379</span><span id="line-379"></span>
<span class="source-line-no">380</span><span id="line-380">    @Override</span>
<span class="source-line-no">381</span><span id="line-381">    public long getTimestamp() {</span>
<span class="source-line-no">382</span><span id="line-382">      return this.cell.getTimestamp();</span>
<span class="source-line-no">383</span><span id="line-383">    }</span>
<span class="source-line-no">384</span><span id="line-384"></span>
<span class="source-line-no">385</span><span id="line-385">    @Override</span>
<span class="source-line-no">386</span><span id="line-386">    public byte getTypeByte() {</span>
<span class="source-line-no">387</span><span id="line-387">      return this.cell.getTypeByte();</span>
<span class="source-line-no">388</span><span id="line-388">    }</span>
<span class="source-line-no">389</span><span id="line-389"></span>
<span class="source-line-no">390</span><span id="line-390">    @Override</span>
<span class="source-line-no">391</span><span id="line-391">    public long getSequenceId() {</span>
<span class="source-line-no">392</span><span id="line-392">      return this.cell.getSequenceId();</span>
<span class="source-line-no">393</span><span id="line-393">    }</span>
<span class="source-line-no">394</span><span id="line-394"></span>
<span class="source-line-no">395</span><span id="line-395">    @Override</span>
<span class="source-line-no">396</span><span id="line-396">    public byte[] getValueArray() {</span>
<span class="source-line-no">397</span><span id="line-397">      return this.cell.getValueArray();</span>
<span class="source-line-no">398</span><span id="line-398">    }</span>
<span class="source-line-no">399</span><span id="line-399"></span>
<span class="source-line-no">400</span><span id="line-400">    @Override</span>
<span class="source-line-no">401</span><span id="line-401">    public int getValueOffset() {</span>
<span class="source-line-no">402</span><span id="line-402">      return this.cell.getValueOffset();</span>
<span class="source-line-no">403</span><span id="line-403">    }</span>
<span class="source-line-no">404</span><span id="line-404"></span>
<span class="source-line-no">405</span><span id="line-405">    @Override</span>
<span class="source-line-no">406</span><span id="line-406">    public int getValueLength() {</span>
<span class="source-line-no">407</span><span id="line-407">      return this.cell.getValueLength();</span>
<span class="source-line-no">408</span><span id="line-408">    }</span>
<span class="source-line-no">409</span><span id="line-409"></span>
<span class="source-line-no">410</span><span id="line-410">    @Override</span>
<span class="source-line-no">411</span><span id="line-411">    public byte[] getTagsArray() {</span>
<span class="source-line-no">412</span><span id="line-412">      return this.tags;</span>
<span class="source-line-no">413</span><span id="line-413">    }</span>
<span class="source-line-no">414</span><span id="line-414"></span>
<span class="source-line-no">415</span><span id="line-415">    @Override</span>
<span class="source-line-no">416</span><span id="line-416">    public int getTagsOffset() {</span>
<span class="source-line-no">417</span><span id="line-417">      return 0;</span>
<span class="source-line-no">418</span><span id="line-418">    }</span>
<span class="source-line-no">419</span><span id="line-419"></span>
<span class="source-line-no">420</span><span id="line-420">    @Override</span>
<span class="source-line-no">421</span><span id="line-421">    public int getTagsLength() {</span>
<span class="source-line-no">422</span><span id="line-422">      if (null == this.tags) {</span>
<span class="source-line-no">423</span><span id="line-423">        // Nulled out tags array optimization in constructor</span>
<span class="source-line-no">424</span><span id="line-424">        return 0;</span>
<span class="source-line-no">425</span><span id="line-425">      }</span>
<span class="source-line-no">426</span><span id="line-426">      return this.tags.length;</span>
<span class="source-line-no">427</span><span id="line-427">    }</span>
<span class="source-line-no">428</span><span id="line-428"></span>
<span class="source-line-no">429</span><span id="line-429">    @Override</span>
<span class="source-line-no">430</span><span id="line-430">    public void setSequenceId(long seqId) throws IOException {</span>
<span class="source-line-no">431</span><span id="line-431">      PrivateCellUtil.setSequenceId(this.cell, seqId);</span>
<span class="source-line-no">432</span><span id="line-432">    }</span>
<span class="source-line-no">433</span><span id="line-433"></span>
<span class="source-line-no">434</span><span id="line-434">    @Override</span>
<span class="source-line-no">435</span><span id="line-435">    public void setTimestamp(long ts) throws IOException {</span>
<span class="source-line-no">436</span><span id="line-436">      PrivateCellUtil.setTimestamp(this.cell, ts);</span>
<span class="source-line-no">437</span><span id="line-437">    }</span>
<span class="source-line-no">438</span><span id="line-438"></span>
<span class="source-line-no">439</span><span id="line-439">    @Override</span>
<span class="source-line-no">440</span><span id="line-440">    public void setTimestamp(byte[] ts) throws IOException {</span>
<span class="source-line-no">441</span><span id="line-441">      PrivateCellUtil.setTimestamp(this.cell, ts);</span>
<span class="source-line-no">442</span><span id="line-442">    }</span>
<span class="source-line-no">443</span><span id="line-443"></span>
<span class="source-line-no">444</span><span id="line-444">    @Override</span>
<span class="source-line-no">445</span><span id="line-445">    public long heapSize() {</span>
<span class="source-line-no">446</span><span id="line-446">      long sum = HEAP_SIZE_OVERHEAD + cell.heapSize();</span>
<span class="source-line-no">447</span><span id="line-447">      // this.tags is on heap byte[]</span>
<span class="source-line-no">448</span><span id="line-448">      if (this.tags != null) {</span>
<span class="source-line-no">449</span><span id="line-449">        sum += ClassSize.sizeOf(this.tags);</span>
<span class="source-line-no">450</span><span id="line-450">      }</span>
<span class="source-line-no">451</span><span id="line-451">      return sum;</span>
<span class="source-line-no">452</span><span id="line-452">    }</span>
<span class="source-line-no">453</span><span id="line-453"></span>
<span class="source-line-no">454</span><span id="line-454">    @Override</span>
<span class="source-line-no">455</span><span id="line-455">    public int write(OutputStream out, boolean withTags) throws IOException {</span>
<span class="source-line-no">456</span><span id="line-456">      int len = ((ExtendedCell) this.cell).write(out, false);</span>
<span class="source-line-no">457</span><span id="line-457">      if (withTags &amp;&amp; this.tags != null) {</span>
<span class="source-line-no">458</span><span id="line-458">        // Write the tagsLength 2 bytes</span>
<span class="source-line-no">459</span><span id="line-459">        out.write((byte) (0xff &amp; (this.tags.length &gt;&gt; 8)));</span>
<span class="source-line-no">460</span><span id="line-460">        out.write((byte) (0xff &amp; this.tags.length));</span>
<span class="source-line-no">461</span><span id="line-461">        out.write(this.tags);</span>
<span class="source-line-no">462</span><span id="line-462">        len += KeyValue.TAGS_LENGTH_SIZE + this.tags.length;</span>
<span class="source-line-no">463</span><span id="line-463">      }</span>
<span class="source-line-no">464</span><span id="line-464">      return len;</span>
<span class="source-line-no">465</span><span id="line-465">    }</span>
<span class="source-line-no">466</span><span id="line-466"></span>
<span class="source-line-no">467</span><span id="line-467">    @Override</span>
<span class="source-line-no">468</span><span id="line-468">    public int getSerializedSize(boolean withTags) {</span>
<span class="source-line-no">469</span><span id="line-469">      int len = ((ExtendedCell) this.cell).getSerializedSize(false);</span>
<span class="source-line-no">470</span><span id="line-470">      if (withTags &amp;&amp; this.tags != null) {</span>
<span class="source-line-no">471</span><span id="line-471">        len += KeyValue.TAGS_LENGTH_SIZE + this.tags.length;</span>
<span class="source-line-no">472</span><span id="line-472">      }</span>
<span class="source-line-no">473</span><span id="line-473">      return len;</span>
<span class="source-line-no">474</span><span id="line-474">    }</span>
<span class="source-line-no">475</span><span id="line-475"></span>
<span class="source-line-no">476</span><span id="line-476">    @Override</span>
<span class="source-line-no">477</span><span id="line-477">    public void write(ByteBuffer buf, int offset) {</span>
<span class="source-line-no">478</span><span id="line-478">      offset = KeyValueUtil.appendTo(this.cell, buf, offset, false);</span>
<span class="source-line-no">479</span><span id="line-479">      int tagsLen = this.tags == null ? 0 : this.tags.length;</span>
<span class="source-line-no">480</span><span id="line-480">      if (tagsLen &gt; 0) {</span>
<span class="source-line-no">481</span><span id="line-481">        offset = ByteBufferUtils.putAsShort(buf, offset, tagsLen);</span>
<span class="source-line-no">482</span><span id="line-482">        ByteBufferUtils.copyFromArrayToBuffer(buf, offset, this.tags, 0, tagsLen);</span>
<span class="source-line-no">483</span><span id="line-483">      }</span>
<span class="source-line-no">484</span><span id="line-484">    }</span>
<span class="source-line-no">485</span><span id="line-485"></span>
<span class="source-line-no">486</span><span id="line-486">    @Override</span>
<span class="source-line-no">487</span><span id="line-487">    public ExtendedCell deepClone() {</span>
<span class="source-line-no">488</span><span id="line-488">      ExtendedCell clonedBaseCell = this.cell.deepClone();</span>
<span class="source-line-no">489</span><span id="line-489">      if (clonedBaseCell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">490</span><span id="line-490">        return new TagRewriteByteBufferExtendedCell((ByteBufferExtendedCell) clonedBaseCell,</span>
<span class="source-line-no">491</span><span id="line-491">          this.tags);</span>
<span class="source-line-no">492</span><span id="line-492">      }</span>
<span class="source-line-no">493</span><span id="line-493">      return new TagRewriteCell(clonedBaseCell, this.tags);</span>
<span class="source-line-no">494</span><span id="line-494">    }</span>
<span class="source-line-no">495</span><span id="line-495"></span>
<span class="source-line-no">496</span><span id="line-496">    @Override</span>
<span class="source-line-no">497</span><span id="line-497">    public ByteBuffer getRowByteBuffer() {</span>
<span class="source-line-no">498</span><span id="line-498">      return this.cell.getRowByteBuffer();</span>
<span class="source-line-no">499</span><span id="line-499">    }</span>
<span class="source-line-no">500</span><span id="line-500"></span>
<span class="source-line-no">501</span><span id="line-501">    @Override</span>
<span class="source-line-no">502</span><span id="line-502">    public int getRowPosition() {</span>
<span class="source-line-no">503</span><span id="line-503">      return this.cell.getRowPosition();</span>
<span class="source-line-no">504</span><span id="line-504">    }</span>
<span class="source-line-no">505</span><span id="line-505"></span>
<span class="source-line-no">506</span><span id="line-506">    @Override</span>
<span class="source-line-no">507</span><span id="line-507">    public ByteBuffer getFamilyByteBuffer() {</span>
<span class="source-line-no">508</span><span id="line-508">      return this.cell.getFamilyByteBuffer();</span>
<span class="source-line-no">509</span><span id="line-509">    }</span>
<span class="source-line-no">510</span><span id="line-510"></span>
<span class="source-line-no">511</span><span id="line-511">    @Override</span>
<span class="source-line-no">512</span><span id="line-512">    public int getFamilyPosition() {</span>
<span class="source-line-no">513</span><span id="line-513">      return this.cell.getFamilyPosition();</span>
<span class="source-line-no">514</span><span id="line-514">    }</span>
<span class="source-line-no">515</span><span id="line-515"></span>
<span class="source-line-no">516</span><span id="line-516">    @Override</span>
<span class="source-line-no">517</span><span id="line-517">    public ByteBuffer getQualifierByteBuffer() {</span>
<span class="source-line-no">518</span><span id="line-518">      return this.cell.getQualifierByteBuffer();</span>
<span class="source-line-no">519</span><span id="line-519">    }</span>
<span class="source-line-no">520</span><span id="line-520"></span>
<span class="source-line-no">521</span><span id="line-521">    @Override</span>
<span class="source-line-no">522</span><span id="line-522">    public int getQualifierPosition() {</span>
<span class="source-line-no">523</span><span id="line-523">      return this.cell.getQualifierPosition();</span>
<span class="source-line-no">524</span><span id="line-524">    }</span>
<span class="source-line-no">525</span><span id="line-525"></span>
<span class="source-line-no">526</span><span id="line-526">    @Override</span>
<span class="source-line-no">527</span><span id="line-527">    public ByteBuffer getValueByteBuffer() {</span>
<span class="source-line-no">528</span><span id="line-528">      return this.cell.getValueByteBuffer();</span>
<span class="source-line-no">529</span><span id="line-529">    }</span>
<span class="source-line-no">530</span><span id="line-530"></span>
<span class="source-line-no">531</span><span id="line-531">    @Override</span>
<span class="source-line-no">532</span><span id="line-532">    public int getValuePosition() {</span>
<span class="source-line-no">533</span><span id="line-533">      return this.cell.getValuePosition();</span>
<span class="source-line-no">534</span><span id="line-534">    }</span>
<span class="source-line-no">535</span><span id="line-535"></span>
<span class="source-line-no">536</span><span id="line-536">    @Override</span>
<span class="source-line-no">537</span><span id="line-537">    public ByteBuffer getTagsByteBuffer() {</span>
<span class="source-line-no">538</span><span id="line-538">      return this.tags == null ? HConstants.EMPTY_BYTE_BUFFER : ByteBuffer.wrap(this.tags);</span>
<span class="source-line-no">539</span><span id="line-539">    }</span>
<span class="source-line-no">540</span><span id="line-540"></span>
<span class="source-line-no">541</span><span id="line-541">    @Override</span>
<span class="source-line-no">542</span><span id="line-542">    public int getTagsPosition() {</span>
<span class="source-line-no">543</span><span id="line-543">      return 0;</span>
<span class="source-line-no">544</span><span id="line-544">    }</span>
<span class="source-line-no">545</span><span id="line-545">  }</span>
<span class="source-line-no">546</span><span id="line-546"></span>
<span class="source-line-no">547</span><span id="line-547">  static class ValueAndTagRewriteCell extends TagRewriteCell {</span>
<span class="source-line-no">548</span><span id="line-548"></span>
<span class="source-line-no">549</span><span id="line-549">    protected byte[] value;</span>
<span class="source-line-no">550</span><span id="line-550"></span>
<span class="source-line-no">551</span><span id="line-551">    public ValueAndTagRewriteCell(ExtendedCell cell, byte[] value, byte[] tags) {</span>
<span class="source-line-no">552</span><span id="line-552">      super(cell, tags);</span>
<span class="source-line-no">553</span><span id="line-553">      this.value = value;</span>
<span class="source-line-no">554</span><span id="line-554">    }</span>
<span class="source-line-no">555</span><span id="line-555"></span>
<span class="source-line-no">556</span><span id="line-556">    @Override</span>
<span class="source-line-no">557</span><span id="line-557">    public byte[] getValueArray() {</span>
<span class="source-line-no">558</span><span id="line-558">      return this.value;</span>
<span class="source-line-no">559</span><span id="line-559">    }</span>
<span class="source-line-no">560</span><span id="line-560"></span>
<span class="source-line-no">561</span><span id="line-561">    @Override</span>
<span class="source-line-no">562</span><span id="line-562">    public int getValueOffset() {</span>
<span class="source-line-no">563</span><span id="line-563">      return 0;</span>
<span class="source-line-no">564</span><span id="line-564">    }</span>
<span class="source-line-no">565</span><span id="line-565"></span>
<span class="source-line-no">566</span><span id="line-566">    @Override</span>
<span class="source-line-no">567</span><span id="line-567">    public int getValueLength() {</span>
<span class="source-line-no">568</span><span id="line-568">      return this.value == null ? 0 : this.value.length;</span>
<span class="source-line-no">569</span><span id="line-569">    }</span>
<span class="source-line-no">570</span><span id="line-570"></span>
<span class="source-line-no">571</span><span id="line-571">    @Override</span>
<span class="source-line-no">572</span><span id="line-572">    public long heapSize() {</span>
<span class="source-line-no">573</span><span id="line-573">      long sum = ClassSize.REFERENCE + super.heapSize();</span>
<span class="source-line-no">574</span><span id="line-574">      if (this.value != null) {</span>
<span class="source-line-no">575</span><span id="line-575">        sum += ClassSize.sizeOf(this.value);</span>
<span class="source-line-no">576</span><span id="line-576">      }</span>
<span class="source-line-no">577</span><span id="line-577">      return sum;</span>
<span class="source-line-no">578</span><span id="line-578">    }</span>
<span class="source-line-no">579</span><span id="line-579"></span>
<span class="source-line-no">580</span><span id="line-580">    @Override</span>
<span class="source-line-no">581</span><span id="line-581">    public int write(OutputStream out, boolean withTags) throws IOException {</span>
<span class="source-line-no">582</span><span id="line-582">      return write(out, withTags, this.cell, this.value, this.tags);</span>
<span class="source-line-no">583</span><span id="line-583">    }</span>
<span class="source-line-no">584</span><span id="line-584"></span>
<span class="source-line-no">585</span><span id="line-585">    /**</span>
<span class="source-line-no">586</span><span id="line-586">     * Made into a static method so as to reuse the logic within</span>
<span class="source-line-no">587</span><span id="line-587">     * ValueAndTagRewriteByteBufferExtendedCell</span>
<span class="source-line-no">588</span><span id="line-588">     */</span>
<span class="source-line-no">589</span><span id="line-589">    static int write(OutputStream out, boolean withTags, ExtendedCell cell, byte[] value,</span>
<span class="source-line-no">590</span><span id="line-590">      byte[] tags) throws IOException {</span>
<span class="source-line-no">591</span><span id="line-591">      int valLen = value == null ? 0 : value.length;</span>
<span class="source-line-no">592</span><span id="line-592">      ByteBufferUtils.putInt(out, KeyValueUtil.keyLength(cell));// Key length</span>
<span class="source-line-no">593</span><span id="line-593">      ByteBufferUtils.putInt(out, valLen);// Value length</span>
<span class="source-line-no">594</span><span id="line-594">      int len = 2 * Bytes.SIZEOF_INT;</span>
<span class="source-line-no">595</span><span id="line-595">      len += writeFlatKey(cell, out);// Key</span>
<span class="source-line-no">596</span><span id="line-596">      if (valLen &gt; 0) {</span>
<span class="source-line-no">597</span><span id="line-597">        out.write(value);// Value</span>
<span class="source-line-no">598</span><span id="line-598">      }</span>
<span class="source-line-no">599</span><span id="line-599">      len += valLen;</span>
<span class="source-line-no">600</span><span id="line-600">      if (withTags &amp;&amp; tags != null) {</span>
<span class="source-line-no">601</span><span id="line-601">        // Write the tagsLength 2 bytes</span>
<span class="source-line-no">602</span><span id="line-602">        out.write((byte) (0xff &amp; (tags.length &gt;&gt; 8)));</span>
<span class="source-line-no">603</span><span id="line-603">        out.write((byte) (0xff &amp; tags.length));</span>
<span class="source-line-no">604</span><span id="line-604">        out.write(tags);</span>
<span class="source-line-no">605</span><span id="line-605">        len += KeyValue.TAGS_LENGTH_SIZE + tags.length;</span>
<span class="source-line-no">606</span><span id="line-606">      }</span>
<span class="source-line-no">607</span><span id="line-607">      return len;</span>
<span class="source-line-no">608</span><span id="line-608">    }</span>
<span class="source-line-no">609</span><span id="line-609"></span>
<span class="source-line-no">610</span><span id="line-610">    @Override</span>
<span class="source-line-no">611</span><span id="line-611">    public int getSerializedSize(boolean withTags) {</span>
<span class="source-line-no">612</span><span id="line-612">      return super.getSerializedSize(withTags) - this.cell.getValueLength() + this.value.length;</span>
<span class="source-line-no">613</span><span id="line-613">    }</span>
<span class="source-line-no">614</span><span id="line-614"></span>
<span class="source-line-no">615</span><span id="line-615">    @Override</span>
<span class="source-line-no">616</span><span id="line-616">    public void write(ByteBuffer buf, int offset) {</span>
<span class="source-line-no">617</span><span id="line-617">      write(buf, offset, this.cell, this.value, this.tags);</span>
<span class="source-line-no">618</span><span id="line-618">    }</span>
<span class="source-line-no">619</span><span id="line-619"></span>
<span class="source-line-no">620</span><span id="line-620">    /**</span>
<span class="source-line-no">621</span><span id="line-621">     * Made into a static method so as to reuse the logic within</span>
<span class="source-line-no">622</span><span id="line-622">     * ValueAndTagRewriteByteBufferExtendedCell</span>
<span class="source-line-no">623</span><span id="line-623">     */</span>
<span class="source-line-no">624</span><span id="line-624">    static void write(ByteBuffer buf, int offset, ExtendedCell cell, byte[] value, byte[] tags) {</span>
<span class="source-line-no">625</span><span id="line-625">      offset = ByteBufferUtils.putInt(buf, offset, KeyValueUtil.keyLength(cell));// Key length</span>
<span class="source-line-no">626</span><span id="line-626">      offset = ByteBufferUtils.putInt(buf, offset, value.length);// Value length</span>
<span class="source-line-no">627</span><span id="line-627">      offset = KeyValueUtil.appendKeyTo(cell, buf, offset);</span>
<span class="source-line-no">628</span><span id="line-628">      ByteBufferUtils.copyFromArrayToBuffer(buf, offset, value, 0, value.length);</span>
<span class="source-line-no">629</span><span id="line-629">      offset += value.length;</span>
<span class="source-line-no">630</span><span id="line-630">      int tagsLen = tags == null ? 0 : tags.length;</span>
<span class="source-line-no">631</span><span id="line-631">      if (tagsLen &gt; 0) {</span>
<span class="source-line-no">632</span><span id="line-632">        offset = ByteBufferUtils.putAsShort(buf, offset, tagsLen);</span>
<span class="source-line-no">633</span><span id="line-633">        ByteBufferUtils.copyFromArrayToBuffer(buf, offset, tags, 0, tagsLen);</span>
<span class="source-line-no">634</span><span id="line-634">      }</span>
<span class="source-line-no">635</span><span id="line-635">    }</span>
<span class="source-line-no">636</span><span id="line-636"></span>
<span class="source-line-no">637</span><span id="line-637">    @Override</span>
<span class="source-line-no">638</span><span id="line-638">    public ExtendedCell deepClone() {</span>
<span class="source-line-no">639</span><span id="line-639">      ExtendedCell clonedBaseCell = this.cell.deepClone();</span>
<span class="source-line-no">640</span><span id="line-640">      return new ValueAndTagRewriteCell(clonedBaseCell, this.value, this.tags);</span>
<span class="source-line-no">641</span><span id="line-641">    }</span>
<span class="source-line-no">642</span><span id="line-642">  }</span>
<span class="source-line-no">643</span><span id="line-643"></span>
<span class="source-line-no">644</span><span id="line-644">  static class ValueAndTagRewriteByteBufferExtendedCell extends TagRewriteByteBufferExtendedCell {</span>
<span class="source-line-no">645</span><span id="line-645"></span>
<span class="source-line-no">646</span><span id="line-646">    protected byte[] value;</span>
<span class="source-line-no">647</span><span id="line-647"></span>
<span class="source-line-no">648</span><span id="line-648">    public ValueAndTagRewriteByteBufferExtendedCell(ByteBufferExtendedCell cell, byte[] value,</span>
<span class="source-line-no">649</span><span id="line-649">      byte[] tags) {</span>
<span class="source-line-no">650</span><span id="line-650">      super(cell, tags);</span>
<span class="source-line-no">651</span><span id="line-651">      this.value = value;</span>
<span class="source-line-no">652</span><span id="line-652">    }</span>
<span class="source-line-no">653</span><span id="line-653"></span>
<span class="source-line-no">654</span><span id="line-654">    @Override</span>
<span class="source-line-no">655</span><span id="line-655">    public byte[] getValueArray() {</span>
<span class="source-line-no">656</span><span id="line-656">      return this.value;</span>
<span class="source-line-no">657</span><span id="line-657">    }</span>
<span class="source-line-no">658</span><span id="line-658"></span>
<span class="source-line-no">659</span><span id="line-659">    @Override</span>
<span class="source-line-no">660</span><span id="line-660">    public int getValueOffset() {</span>
<span class="source-line-no">661</span><span id="line-661">      return 0;</span>
<span class="source-line-no">662</span><span id="line-662">    }</span>
<span class="source-line-no">663</span><span id="line-663"></span>
<span class="source-line-no">664</span><span id="line-664">    @Override</span>
<span class="source-line-no">665</span><span id="line-665">    public int getValueLength() {</span>
<span class="source-line-no">666</span><span id="line-666">      return this.value == null ? 0 : this.value.length;</span>
<span class="source-line-no">667</span><span id="line-667">    }</span>
<span class="source-line-no">668</span><span id="line-668"></span>
<span class="source-line-no">669</span><span id="line-669">    @Override</span>
<span class="source-line-no">670</span><span id="line-670">    public ByteBuffer getValueByteBuffer() {</span>
<span class="source-line-no">671</span><span id="line-671">      return ByteBuffer.wrap(this.value);</span>
<span class="source-line-no">672</span><span id="line-672">    }</span>
<span class="source-line-no">673</span><span id="line-673"></span>
<span class="source-line-no">674</span><span id="line-674">    @Override</span>
<span class="source-line-no">675</span><span id="line-675">    public int getValuePosition() {</span>
<span class="source-line-no">676</span><span id="line-676">      return 0;</span>
<span class="source-line-no">677</span><span id="line-677">    }</span>
<span class="source-line-no">678</span><span id="line-678"></span>
<span class="source-line-no">679</span><span id="line-679">    @Override</span>
<span class="source-line-no">680</span><span id="line-680">    public long heapSize() {</span>
<span class="source-line-no">681</span><span id="line-681">      long sum = ClassSize.REFERENCE + super.heapSize();</span>
<span class="source-line-no">682</span><span id="line-682">      if (this.value != null) {</span>
<span class="source-line-no">683</span><span id="line-683">        sum += ClassSize.sizeOf(this.value);</span>
<span class="source-line-no">684</span><span id="line-684">      }</span>
<span class="source-line-no">685</span><span id="line-685">      return sum;</span>
<span class="source-line-no">686</span><span id="line-686">    }</span>
<span class="source-line-no">687</span><span id="line-687"></span>
<span class="source-line-no">688</span><span id="line-688">    @Override</span>
<span class="source-line-no">689</span><span id="line-689">    public int write(OutputStream out, boolean withTags) throws IOException {</span>
<span class="source-line-no">690</span><span id="line-690">      return ValueAndTagRewriteCell.write(out, withTags, this.cell, this.value, this.tags);</span>
<span class="source-line-no">691</span><span id="line-691">    }</span>
<span class="source-line-no">692</span><span id="line-692"></span>
<span class="source-line-no">693</span><span id="line-693">    @Override</span>
<span class="source-line-no">694</span><span id="line-694">    public int getSerializedSize(boolean withTags) {</span>
<span class="source-line-no">695</span><span id="line-695">      return super.getSerializedSize(withTags) - this.cell.getValueLength() + this.value.length;</span>
<span class="source-line-no">696</span><span id="line-696">    }</span>
<span class="source-line-no">697</span><span id="line-697"></span>
<span class="source-line-no">698</span><span id="line-698">    @Override</span>
<span class="source-line-no">699</span><span id="line-699">    public void write(ByteBuffer buf, int offset) {</span>
<span class="source-line-no">700</span><span id="line-700">      ValueAndTagRewriteCell.write(buf, offset, this.cell, this.value, this.tags);</span>
<span class="source-line-no">701</span><span id="line-701">    }</span>
<span class="source-line-no">702</span><span id="line-702"></span>
<span class="source-line-no">703</span><span id="line-703">    @Override</span>
<span class="source-line-no">704</span><span id="line-704">    public ExtendedCell deepClone() {</span>
<span class="source-line-no">705</span><span id="line-705">      ExtendedCell clonedBaseCell = this.cell.deepClone();</span>
<span class="source-line-no">706</span><span id="line-706">      if (clonedBaseCell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">707</span><span id="line-707">        return new ValueAndTagRewriteByteBufferExtendedCell((ByteBufferExtendedCell) clonedBaseCell,</span>
<span class="source-line-no">708</span><span id="line-708">          this.value, this.tags);</span>
<span class="source-line-no">709</span><span id="line-709">      }</span>
<span class="source-line-no">710</span><span id="line-710">      return new ValueAndTagRewriteCell(clonedBaseCell, this.value, this.tags);</span>
<span class="source-line-no">711</span><span id="line-711">    }</span>
<span class="source-line-no">712</span><span id="line-712">  }</span>
<span class="source-line-no">713</span><span id="line-713"></span>
<span class="source-line-no">714</span><span id="line-714">  public static boolean matchingRows(final Cell left, final byte[] buf, final int offset,</span>
<span class="source-line-no">715</span><span id="line-715">    final int length) {</span>
<span class="source-line-no">716</span><span id="line-716">    if (left instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">717</span><span id="line-717">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) left).getRowByteBuffer(),</span>
<span class="source-line-no">718</span><span id="line-718">        ((ByteBufferExtendedCell) left).getRowPosition(), left.getRowLength(), buf, offset, length);</span>
<span class="source-line-no">719</span><span id="line-719">    }</span>
<span class="source-line-no">720</span><span id="line-720">    return Bytes.equals(left.getRowArray(), left.getRowOffset(), left.getRowLength(), buf, offset,</span>
<span class="source-line-no">721</span><span id="line-721">      length);</span>
<span class="source-line-no">722</span><span id="line-722">  }</span>
<span class="source-line-no">723</span><span id="line-723"></span>
<span class="source-line-no">724</span><span id="line-724">  public static boolean matchingFamily(final Cell left, final byte[] buf, final int offset,</span>
<span class="source-line-no">725</span><span id="line-725">    final int length) {</span>
<span class="source-line-no">726</span><span id="line-726">    if (left instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">727</span><span id="line-727">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) left).getFamilyByteBuffer(),</span>
<span class="source-line-no">728</span><span id="line-728">        ((ByteBufferExtendedCell) left).getFamilyPosition(), left.getFamilyLength(), buf, offset,</span>
<span class="source-line-no">729</span><span id="line-729">        length);</span>
<span class="source-line-no">730</span><span id="line-730">    }</span>
<span class="source-line-no">731</span><span id="line-731">    return Bytes.equals(left.getFamilyArray(), left.getFamilyOffset(), left.getFamilyLength(), buf,</span>
<span class="source-line-no">732</span><span id="line-732">      offset, length);</span>
<span class="source-line-no">733</span><span id="line-733">  }</span>
<span class="source-line-no">734</span><span id="line-734"></span>
<span class="source-line-no">735</span><span id="line-735">  /**</span>
<span class="source-line-no">736</span><span id="line-736">   * Finds if the qualifier part of the cell and the KV serialized byte[] are equal</span>
<span class="source-line-no">737</span><span id="line-737">   * @param left   the cell with which we need to match the qualifier</span>
<span class="source-line-no">738</span><span id="line-738">   * @param buf    the serialized keyvalue format byte[]</span>
<span class="source-line-no">739</span><span id="line-739">   * @param offset the offset of the qualifier in the byte[]</span>
<span class="source-line-no">740</span><span id="line-740">   * @param length the length of the qualifier in the byte[]</span>
<span class="source-line-no">741</span><span id="line-741">   * @return true if the qualifier matches, false otherwise</span>
<span class="source-line-no">742</span><span id="line-742">   */</span>
<span class="source-line-no">743</span><span id="line-743">  public static boolean matchingQualifier(final Cell left, final byte[] buf, final int offset,</span>
<span class="source-line-no">744</span><span id="line-744">    final int length) {</span>
<span class="source-line-no">745</span><span id="line-745">    if (buf == null) {</span>
<span class="source-line-no">746</span><span id="line-746">      return left.getQualifierLength() == 0;</span>
<span class="source-line-no">747</span><span id="line-747">    }</span>
<span class="source-line-no">748</span><span id="line-748">    if (left instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">749</span><span id="line-749">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) left).getQualifierByteBuffer(),</span>
<span class="source-line-no">750</span><span id="line-750">        ((ByteBufferExtendedCell) left).getQualifierPosition(), left.getQualifierLength(), buf,</span>
<span class="source-line-no">751</span><span id="line-751">        offset, length);</span>
<span class="source-line-no">752</span><span id="line-752">    }</span>
<span class="source-line-no">753</span><span id="line-753">    return Bytes.equals(left.getQualifierArray(), left.getQualifierOffset(),</span>
<span class="source-line-no">754</span><span id="line-754">      left.getQualifierLength(), buf, offset, length);</span>
<span class="source-line-no">755</span><span id="line-755">  }</span>
<span class="source-line-no">756</span><span id="line-756"></span>
<span class="source-line-no">757</span><span id="line-757">  /**</span>
<span class="source-line-no">758</span><span id="line-758">   * Finds if the start of the qualifier part of the Cell matches &lt;code&gt;buf&lt;/code&gt;</span>
<span class="source-line-no">759</span><span id="line-759">   * @param left       the cell with which we need to match the qualifier</span>
<span class="source-line-no">760</span><span id="line-760">   * @param startsWith the serialized keyvalue format byte[]</span>
<span class="source-line-no">761</span><span id="line-761">   * @return true if the qualifier have same staring characters, false otherwise</span>
<span class="source-line-no">762</span><span id="line-762">   */</span>
<span class="source-line-no">763</span><span id="line-763">  public static boolean qualifierStartsWith(final Cell left, final byte[] startsWith) {</span>
<span class="source-line-no">764</span><span id="line-764">    if (startsWith == null || startsWith.length == 0) {</span>
<span class="source-line-no">765</span><span id="line-765">      throw new IllegalArgumentException("Cannot pass an empty startsWith");</span>
<span class="source-line-no">766</span><span id="line-766">    }</span>
<span class="source-line-no">767</span><span id="line-767">    if (left.getQualifierLength() &lt; startsWith.length) {</span>
<span class="source-line-no">768</span><span id="line-768">      return false;</span>
<span class="source-line-no">769</span><span id="line-769">    }</span>
<span class="source-line-no">770</span><span id="line-770">    if (left instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">771</span><span id="line-771">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) left).getQualifierByteBuffer(),</span>
<span class="source-line-no">772</span><span id="line-772">        ((ByteBufferExtendedCell) left).getQualifierPosition(), startsWith.length, startsWith, 0,</span>
<span class="source-line-no">773</span><span id="line-773">        startsWith.length);</span>
<span class="source-line-no">774</span><span id="line-774">    }</span>
<span class="source-line-no">775</span><span id="line-775">    return Bytes.equals(left.getQualifierArray(), left.getQualifierOffset(), startsWith.length,</span>
<span class="source-line-no">776</span><span id="line-776">      startsWith, 0, startsWith.length);</span>
<span class="source-line-no">777</span><span id="line-777">  }</span>
<span class="source-line-no">778</span><span id="line-778"></span>
<span class="source-line-no">779</span><span id="line-779">  public static boolean matchingColumn(final Cell left, final byte[] fam, final int foffset,</span>
<span class="source-line-no">780</span><span id="line-780">    final int flength, final byte[] qual, final int qoffset, final int qlength) {</span>
<span class="source-line-no">781</span><span id="line-781">    if (!matchingFamily(left, fam, foffset, flength)) {</span>
<span class="source-line-no">782</span><span id="line-782">      return false;</span>
<span class="source-line-no">783</span><span id="line-783">    }</span>
<span class="source-line-no">784</span><span id="line-784">    return matchingQualifier(left, qual, qoffset, qlength);</span>
<span class="source-line-no">785</span><span id="line-785">  }</span>
<span class="source-line-no">786</span><span id="line-786"></span>
<span class="source-line-no">787</span><span id="line-787">  public static boolean matchingValue(final Cell left, final Cell right, int lvlength,</span>
<span class="source-line-no">788</span><span id="line-788">    int rvlength) {</span>
<span class="source-line-no">789</span><span id="line-789">    if (left instanceof ByteBufferExtendedCell &amp;&amp; right instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">790</span><span id="line-790">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) left).getValueByteBuffer(),</span>
<span class="source-line-no">791</span><span id="line-791">        ((ByteBufferExtendedCell) left).getValuePosition(), lvlength,</span>
<span class="source-line-no">792</span><span id="line-792">        ((ByteBufferExtendedCell) right).getValueByteBuffer(),</span>
<span class="source-line-no">793</span><span id="line-793">        ((ByteBufferExtendedCell) right).getValuePosition(), rvlength);</span>
<span class="source-line-no">794</span><span id="line-794">    }</span>
<span class="source-line-no">795</span><span id="line-795">    if (left instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">796</span><span id="line-796">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) left).getValueByteBuffer(),</span>
<span class="source-line-no">797</span><span id="line-797">        ((ByteBufferExtendedCell) left).getValuePosition(), lvlength, right.getValueArray(),</span>
<span class="source-line-no">798</span><span id="line-798">        right.getValueOffset(), rvlength);</span>
<span class="source-line-no">799</span><span id="line-799">    }</span>
<span class="source-line-no">800</span><span id="line-800">    if (right instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">801</span><span id="line-801">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) right).getValueByteBuffer(),</span>
<span class="source-line-no">802</span><span id="line-802">        ((ByteBufferExtendedCell) right).getValuePosition(), rvlength, left.getValueArray(),</span>
<span class="source-line-no">803</span><span id="line-803">        left.getValueOffset(), lvlength);</span>
<span class="source-line-no">804</span><span id="line-804">    }</span>
<span class="source-line-no">805</span><span id="line-805">    return Bytes.equals(left.getValueArray(), left.getValueOffset(), lvlength,</span>
<span class="source-line-no">806</span><span id="line-806">      right.getValueArray(), right.getValueOffset(), rvlength);</span>
<span class="source-line-no">807</span><span id="line-807">  }</span>
<span class="source-line-no">808</span><span id="line-808"></span>
<span class="source-line-no">809</span><span id="line-809">  public static boolean matchingType(ExtendedCell a, ExtendedCell b) {</span>
<span class="source-line-no">810</span><span id="line-810">    return a.getTypeByte() == b.getTypeByte();</span>
<span class="source-line-no">811</span><span id="line-811">  }</span>
<span class="source-line-no">812</span><span id="line-812"></span>
<span class="source-line-no">813</span><span id="line-813">  public static boolean matchingTags(final ExtendedCell left, final ExtendedCell right) {</span>
<span class="source-line-no">814</span><span id="line-814">    return matchingTags(left, right, left.getTagsLength(), right.getTagsLength());</span>
<span class="source-line-no">815</span><span id="line-815">  }</span>
<span class="source-line-no">816</span><span id="line-816"></span>
<span class="source-line-no">817</span><span id="line-817">  public static boolean matchingTags(final ExtendedCell left, final ExtendedCell right, int llength,</span>
<span class="source-line-no">818</span><span id="line-818">    int rlength) {</span>
<span class="source-line-no">819</span><span id="line-819">    if (left instanceof ByteBufferExtendedCell &amp;&amp; right instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">820</span><span id="line-820">      ByteBufferExtendedCell leftBBCell = (ByteBufferExtendedCell) left;</span>
<span class="source-line-no">821</span><span id="line-821">      ByteBufferExtendedCell rightBBCell = (ByteBufferExtendedCell) right;</span>
<span class="source-line-no">822</span><span id="line-822">      return ByteBufferUtils.equals(leftBBCell.getTagsByteBuffer(), leftBBCell.getTagsPosition(),</span>
<span class="source-line-no">823</span><span id="line-823">        llength, rightBBCell.getTagsByteBuffer(), rightBBCell.getTagsPosition(), rlength);</span>
<span class="source-line-no">824</span><span id="line-824">    }</span>
<span class="source-line-no">825</span><span id="line-825">    if (left instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">826</span><span id="line-826">      ByteBufferExtendedCell leftBBCell = (ByteBufferExtendedCell) left;</span>
<span class="source-line-no">827</span><span id="line-827">      return ByteBufferUtils.equals(leftBBCell.getTagsByteBuffer(), leftBBCell.getTagsPosition(),</span>
<span class="source-line-no">828</span><span id="line-828">        llength, right.getTagsArray(), right.getTagsOffset(), rlength);</span>
<span class="source-line-no">829</span><span id="line-829">    }</span>
<span class="source-line-no">830</span><span id="line-830">    if (right instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">831</span><span id="line-831">      ByteBufferExtendedCell rightBBCell = (ByteBufferExtendedCell) right;</span>
<span class="source-line-no">832</span><span id="line-832">      return ByteBufferUtils.equals(rightBBCell.getTagsByteBuffer(), rightBBCell.getTagsPosition(),</span>
<span class="source-line-no">833</span><span id="line-833">        rlength, left.getTagsArray(), left.getTagsOffset(), llength);</span>
<span class="source-line-no">834</span><span id="line-834">    }</span>
<span class="source-line-no">835</span><span id="line-835">    return Bytes.equals(left.getTagsArray(), left.getTagsOffset(), llength, right.getTagsArray(),</span>
<span class="source-line-no">836</span><span id="line-836">      right.getTagsOffset(), rlength);</span>
<span class="source-line-no">837</span><span id="line-837">  }</span>
<span class="source-line-no">838</span><span id="line-838"></span>
<span class="source-line-no">839</span><span id="line-839">  /**</span>
<span class="source-line-no">840</span><span id="line-840">   * Return true if a delete type, a {@link KeyValue.Type#Delete} or a {KeyValue.Type#DeleteFamily}</span>
<span class="source-line-no">841</span><span id="line-841">   * or a {@link KeyValue.Type#DeleteColumn} KeyValue type.</span>
<span class="source-line-no">842</span><span id="line-842">   */</span>
<span class="source-line-no">843</span><span id="line-843">  public static boolean isDelete(final byte type) {</span>
<span class="source-line-no">844</span><span id="line-844">    return KeyValue.Type.Delete.getCode() &lt;= type &amp;&amp; type &lt;= KeyValue.Type.DeleteFamily.getCode();</span>
<span class="source-line-no">845</span><span id="line-845">  }</span>
<span class="source-line-no">846</span><span id="line-846"></span>
<span class="source-line-no">847</span><span id="line-847">  /** Returns True if this cell is a {@link KeyValue.Type#Delete} type. */</span>
<span class="source-line-no">848</span><span id="line-848">  public static boolean isDeleteType(ExtendedCell cell) {</span>
<span class="source-line-no">849</span><span id="line-849">    return cell.getTypeByte() == KeyValue.Type.Delete.getCode();</span>
<span class="source-line-no">850</span><span id="line-850">  }</span>
<span class="source-line-no">851</span><span id="line-851"></span>
<span class="source-line-no">852</span><span id="line-852">  public static boolean isDeleteFamily(final ExtendedCell cell) {</span>
<span class="source-line-no">853</span><span id="line-853">    return cell.getTypeByte() == KeyValue.Type.DeleteFamily.getCode();</span>
<span class="source-line-no">854</span><span id="line-854">  }</span>
<span class="source-line-no">855</span><span id="line-855"></span>
<span class="source-line-no">856</span><span id="line-856">  public static boolean isDeleteFamilyVersion(final ExtendedCell cell) {</span>
<span class="source-line-no">857</span><span id="line-857">    return cell.getTypeByte() == KeyValue.Type.DeleteFamilyVersion.getCode();</span>
<span class="source-line-no">858</span><span id="line-858">  }</span>
<span class="source-line-no">859</span><span id="line-859"></span>
<span class="source-line-no">860</span><span id="line-860">  public static boolean isDeleteColumns(final ExtendedCell cell) {</span>
<span class="source-line-no">861</span><span id="line-861">    return cell.getTypeByte() == KeyValue.Type.DeleteColumn.getCode();</span>
<span class="source-line-no">862</span><span id="line-862">  }</span>
<span class="source-line-no">863</span><span id="line-863"></span>
<span class="source-line-no">864</span><span id="line-864">  public static boolean isDeleteColumnVersion(final ExtendedCell cell) {</span>
<span class="source-line-no">865</span><span id="line-865">    return cell.getTypeByte() == KeyValue.Type.Delete.getCode();</span>
<span class="source-line-no">866</span><span id="line-866">  }</span>
<span class="source-line-no">867</span><span id="line-867"></span>
<span class="source-line-no">868</span><span id="line-868">  /** Returns True if this cell is a delete family or column type. */</span>
<span class="source-line-no">869</span><span id="line-869">  public static boolean isDeleteColumnOrFamily(ExtendedCell cell) {</span>
<span class="source-line-no">870</span><span id="line-870">    int t = cell.getTypeByte();</span>
<span class="source-line-no">871</span><span id="line-871">    return t == KeyValue.Type.DeleteColumn.getCode() || t == KeyValue.Type.DeleteFamily.getCode();</span>
<span class="source-line-no">872</span><span id="line-872">  }</span>
<span class="source-line-no">873</span><span id="line-873"></span>
<span class="source-line-no">874</span><span id="line-874">  public static byte[] cloneTags(ExtendedCell cell) {</span>
<span class="source-line-no">875</span><span id="line-875">    byte[] output = new byte[cell.getTagsLength()];</span>
<span class="source-line-no">876</span><span id="line-876">    copyTagsTo(cell, output, 0);</span>
<span class="source-line-no">877</span><span id="line-877">    return output;</span>
<span class="source-line-no">878</span><span id="line-878">  }</span>
<span class="source-line-no">879</span><span id="line-879"></span>
<span class="source-line-no">880</span><span id="line-880">  /** Copies the tags info into the tag portion of the cell */</span>
<span class="source-line-no">881</span><span id="line-881">  public static int copyTagsTo(ExtendedCell cell, byte[] destination, int destinationOffset) {</span>
<span class="source-line-no">882</span><span id="line-882">    int tlen = cell.getTagsLength();</span>
<span class="source-line-no">883</span><span id="line-883">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">884</span><span id="line-884">      ByteBufferUtils.copyFromBufferToArray(destination,</span>
<span class="source-line-no">885</span><span id="line-885">        ((ByteBufferExtendedCell) cell).getTagsByteBuffer(),</span>
<span class="source-line-no">886</span><span id="line-886">        ((ByteBufferExtendedCell) cell).getTagsPosition(), destinationOffset, tlen);</span>
<span class="source-line-no">887</span><span id="line-887">    } else {</span>
<span class="source-line-no">888</span><span id="line-888">      System.arraycopy(cell.getTagsArray(), cell.getTagsOffset(), destination, destinationOffset,</span>
<span class="source-line-no">889</span><span id="line-889">        tlen);</span>
<span class="source-line-no">890</span><span id="line-890">    }</span>
<span class="source-line-no">891</span><span id="line-891">    return destinationOffset + tlen;</span>
<span class="source-line-no">892</span><span id="line-892">  }</span>
<span class="source-line-no">893</span><span id="line-893"></span>
<span class="source-line-no">894</span><span id="line-894">  /** Copies the tags info into the tag portion of the cell */</span>
<span class="source-line-no">895</span><span id="line-895">  public static int copyTagsTo(ExtendedCell cell, ByteBuffer destination, int destinationOffset) {</span>
<span class="source-line-no">896</span><span id="line-896">    int tlen = cell.getTagsLength();</span>
<span class="source-line-no">897</span><span id="line-897">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">898</span><span id="line-898">      ByteBufferUtils.copyFromBufferToBuffer(((ByteBufferExtendedCell) cell).getTagsByteBuffer(),</span>
<span class="source-line-no">899</span><span id="line-899">        destination, ((ByteBufferExtendedCell) cell).getTagsPosition(), destinationOffset, tlen);</span>
<span class="source-line-no">900</span><span id="line-900">    } else {</span>
<span class="source-line-no">901</span><span id="line-901">      ByteBufferUtils.copyFromArrayToBuffer(destination, destinationOffset, cell.getTagsArray(),</span>
<span class="source-line-no">902</span><span id="line-902">        cell.getTagsOffset(), tlen);</span>
<span class="source-line-no">903</span><span id="line-903">    }</span>
<span class="source-line-no">904</span><span id="line-904">    return destinationOffset + tlen;</span>
<span class="source-line-no">905</span><span id="line-905">  }</span>
<span class="source-line-no">906</span><span id="line-906"></span>
<span class="source-line-no">907</span><span id="line-907">  /**</span>
<span class="source-line-no">908</span><span id="line-908">   * Return tags in the given Cell as a List</span>
<span class="source-line-no">909</span><span id="line-909">   * @param cell The Cell</span>
<span class="source-line-no">910</span><span id="line-910">   * @return Tags in the given Cell as a List</span>
<span class="source-line-no">911</span><span id="line-911">   */</span>
<span class="source-line-no">912</span><span id="line-912">  public static List&lt;Tag&gt; getTags(ExtendedCell cell) {</span>
<span class="source-line-no">913</span><span id="line-913">    List&lt;Tag&gt; tags = new ArrayList&lt;&gt;();</span>
<span class="source-line-no">914</span><span id="line-914">    Iterator&lt;Tag&gt; tagsItr = tagsIterator(cell);</span>
<span class="source-line-no">915</span><span id="line-915">    while (tagsItr.hasNext()) {</span>
<span class="source-line-no">916</span><span id="line-916">      tags.add(tagsItr.next());</span>
<span class="source-line-no">917</span><span id="line-917">    }</span>
<span class="source-line-no">918</span><span id="line-918">    return tags;</span>
<span class="source-line-no">919</span><span id="line-919">  }</span>
<span class="source-line-no">920</span><span id="line-920"></span>
<span class="source-line-no">921</span><span id="line-921">  /**</span>
<span class="source-line-no">922</span><span id="line-922">   * Retrieve Cell's first tag, matching the passed in type</span>
<span class="source-line-no">923</span><span id="line-923">   * @param cell The Cell</span>
<span class="source-line-no">924</span><span id="line-924">   * @param type Type of the Tag to retrieve</span>
<span class="source-line-no">925</span><span id="line-925">   * @return Optional, empty if there is no tag of the passed in tag type</span>
<span class="source-line-no">926</span><span id="line-926">   */</span>
<span class="source-line-no">927</span><span id="line-927">  public static Optional&lt;Tag&gt; getTag(ExtendedCell cell, byte type) {</span>
<span class="source-line-no">928</span><span id="line-928">    boolean bufferBacked = cell instanceof ByteBufferExtendedCell;</span>
<span class="source-line-no">929</span><span id="line-929">    int length = cell.getTagsLength();</span>
<span class="source-line-no">930</span><span id="line-930">    int offset =</span>
<span class="source-line-no">931</span><span id="line-931">      bufferBacked ? ((ByteBufferExtendedCell) cell).getTagsPosition() : cell.getTagsOffset();</span>
<span class="source-line-no">932</span><span id="line-932">    int pos = offset;</span>
<span class="source-line-no">933</span><span id="line-933">    while (pos &lt; offset + length) {</span>
<span class="source-line-no">934</span><span id="line-934">      int tagLen;</span>
<span class="source-line-no">935</span><span id="line-935">      if (bufferBacked) {</span>
<span class="source-line-no">936</span><span id="line-936">        ByteBuffer tagsBuffer = ((ByteBufferExtendedCell) cell).getTagsByteBuffer();</span>
<span class="source-line-no">937</span><span id="line-937">        tagLen = ByteBufferUtils.readAsInt(tagsBuffer, pos, TAG_LENGTH_SIZE);</span>
<span class="source-line-no">938</span><span id="line-938">        if (ByteBufferUtils.toByte(tagsBuffer, pos + TAG_LENGTH_SIZE) == type) {</span>
<span class="source-line-no">939</span><span id="line-939">          return Optional.of(new ByteBufferTag(tagsBuffer, pos, tagLen + TAG_LENGTH_SIZE));</span>
<span class="source-line-no">940</span><span id="line-940">        }</span>
<span class="source-line-no">941</span><span id="line-941">      } else {</span>
<span class="source-line-no">942</span><span id="line-942">        tagLen = Bytes.readAsInt(cell.getTagsArray(), pos, TAG_LENGTH_SIZE);</span>
<span class="source-line-no">943</span><span id="line-943">        if (cell.getTagsArray()[pos + TAG_LENGTH_SIZE] == type) {</span>
<span class="source-line-no">944</span><span id="line-944">          return Optional</span>
<span class="source-line-no">945</span><span id="line-945">            .of(new ArrayBackedTag(cell.getTagsArray(), pos, tagLen + TAG_LENGTH_SIZE));</span>
<span class="source-line-no">946</span><span id="line-946">        }</span>
<span class="source-line-no">947</span><span id="line-947">      }</span>
<span class="source-line-no">948</span><span id="line-948">      pos += TAG_LENGTH_SIZE + tagLen;</span>
<span class="source-line-no">949</span><span id="line-949">    }</span>
<span class="source-line-no">950</span><span id="line-950">    return Optional.empty();</span>
<span class="source-line-no">951</span><span id="line-951">  }</span>
<span class="source-line-no">952</span><span id="line-952"></span>
<span class="source-line-no">953</span><span id="line-953">  /**</span>
<span class="source-line-no">954</span><span id="line-954">   * Utility method to iterate through the tags in the given cell.</span>
<span class="source-line-no">955</span><span id="line-955">   * @param cell The Cell over which tags iterator is needed.</span>
<span class="source-line-no">956</span><span id="line-956">   * @return iterator for the tags</span>
<span class="source-line-no">957</span><span id="line-957">   */</span>
<span class="source-line-no">958</span><span id="line-958">  public static Iterator&lt;Tag&gt; tagsIterator(final ExtendedCell cell) {</span>
<span class="source-line-no">959</span><span id="line-959">    final int tagsLength = cell.getTagsLength();</span>
<span class="source-line-no">960</span><span id="line-960">    // Save an object allocation where we can</span>
<span class="source-line-no">961</span><span id="line-961">    if (tagsLength == 0) {</span>
<span class="source-line-no">962</span><span id="line-962">      return TagUtil.EMPTY_TAGS_ITR;</span>
<span class="source-line-no">963</span><span id="line-963">    }</span>
<span class="source-line-no">964</span><span id="line-964">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">965</span><span id="line-965">      return tagsIterator(((ByteBufferExtendedCell) cell).getTagsByteBuffer(),</span>
<span class="source-line-no">966</span><span id="line-966">        ((ByteBufferExtendedCell) cell).getTagsPosition(), tagsLength);</span>
<span class="source-line-no">967</span><span id="line-967">    }</span>
<span class="source-line-no">968</span><span id="line-968"></span>
<span class="source-line-no">969</span><span id="line-969">    return new Iterator&lt;Tag&gt;() {</span>
<span class="source-line-no">970</span><span id="line-970">      private int offset = cell.getTagsOffset();</span>
<span class="source-line-no">971</span><span id="line-971">      private int pos = offset;</span>
<span class="source-line-no">972</span><span id="line-972">      private int endOffset = offset + cell.getTagsLength() - 1;</span>
<span class="source-line-no">973</span><span id="line-973"></span>
<span class="source-line-no">974</span><span id="line-974">      @Override</span>
<span class="source-line-no">975</span><span id="line-975">      public boolean hasNext() {</span>
<span class="source-line-no">976</span><span id="line-976">        return this.pos &lt; endOffset;</span>
<span class="source-line-no">977</span><span id="line-977">      }</span>
<span class="source-line-no">978</span><span id="line-978"></span>
<span class="source-line-no">979</span><span id="line-979">      @Override</span>
<span class="source-line-no">980</span><span id="line-980">      public Tag next() {</span>
<span class="source-line-no">981</span><span id="line-981">        if (hasNext()) {</span>
<span class="source-line-no">982</span><span id="line-982">          byte[] tags = cell.getTagsArray();</span>
<span class="source-line-no">983</span><span id="line-983">          int curTagLen = Bytes.readAsInt(tags, this.pos, Tag.TAG_LENGTH_SIZE);</span>
<span class="source-line-no">984</span><span id="line-984">          Tag tag = new ArrayBackedTag(tags, pos, curTagLen + TAG_LENGTH_SIZE);</span>
<span class="source-line-no">985</span><span id="line-985">          this.pos += Bytes.SIZEOF_SHORT + curTagLen;</span>
<span class="source-line-no">986</span><span id="line-986">          return tag;</span>
<span class="source-line-no">987</span><span id="line-987">        }</span>
<span class="source-line-no">988</span><span id="line-988">        return null;</span>
<span class="source-line-no">989</span><span id="line-989">      }</span>
<span class="source-line-no">990</span><span id="line-990"></span>
<span class="source-line-no">991</span><span id="line-991">      @Override</span>
<span class="source-line-no">992</span><span id="line-992">      public void remove() {</span>
<span class="source-line-no">993</span><span id="line-993">        throw new UnsupportedOperationException();</span>
<span class="source-line-no">994</span><span id="line-994">      }</span>
<span class="source-line-no">995</span><span id="line-995">    };</span>
<span class="source-line-no">996</span><span id="line-996">  }</span>
<span class="source-line-no">997</span><span id="line-997"></span>
<span class="source-line-no">998</span><span id="line-998">  public static Iterator&lt;Tag&gt; tagsIterator(final ByteBuffer tags, final int offset,</span>
<span class="source-line-no">999</span><span id="line-999">    final int length) {</span>
<span class="source-line-no">1000</span><span id="line-1000">    return new Iterator&lt;Tag&gt;() {</span>
<span class="source-line-no">1001</span><span id="line-1001">      private int pos = offset;</span>
<span class="source-line-no">1002</span><span id="line-1002">      private int endOffset = offset + length - 1;</span>
<span class="source-line-no">1003</span><span id="line-1003"></span>
<span class="source-line-no">1004</span><span id="line-1004">      @Override</span>
<span class="source-line-no">1005</span><span id="line-1005">      public boolean hasNext() {</span>
<span class="source-line-no">1006</span><span id="line-1006">        return this.pos &lt; endOffset;</span>
<span class="source-line-no">1007</span><span id="line-1007">      }</span>
<span class="source-line-no">1008</span><span id="line-1008"></span>
<span class="source-line-no">1009</span><span id="line-1009">      @Override</span>
<span class="source-line-no">1010</span><span id="line-1010">      public Tag next() {</span>
<span class="source-line-no">1011</span><span id="line-1011">        if (hasNext()) {</span>
<span class="source-line-no">1012</span><span id="line-1012">          int curTagLen = ByteBufferUtils.readAsInt(tags, this.pos, Tag.TAG_LENGTH_SIZE);</span>
<span class="source-line-no">1013</span><span id="line-1013">          Tag tag = new ByteBufferTag(tags, pos, curTagLen + Tag.TAG_LENGTH_SIZE);</span>
<span class="source-line-no">1014</span><span id="line-1014">          this.pos += Bytes.SIZEOF_SHORT + curTagLen;</span>
<span class="source-line-no">1015</span><span id="line-1015">          return tag;</span>
<span class="source-line-no">1016</span><span id="line-1016">        }</span>
<span class="source-line-no">1017</span><span id="line-1017">        return null;</span>
<span class="source-line-no">1018</span><span id="line-1018">      }</span>
<span class="source-line-no">1019</span><span id="line-1019"></span>
<span class="source-line-no">1020</span><span id="line-1020">      @Override</span>
<span class="source-line-no">1021</span><span id="line-1021">      public void remove() {</span>
<span class="source-line-no">1022</span><span id="line-1022">        throw new UnsupportedOperationException();</span>
<span class="source-line-no">1023</span><span id="line-1023">      }</span>
<span class="source-line-no">1024</span><span id="line-1024">    };</span>
<span class="source-line-no">1025</span><span id="line-1025">  }</span>
<span class="source-line-no">1026</span><span id="line-1026"></span>
<span class="source-line-no">1027</span><span id="line-1027">  /**</span>
<span class="source-line-no">1028</span><span id="line-1028">   * Returns true if the first range start1...end1 overlaps with the second range start2...end2,</span>
<span class="source-line-no">1029</span><span id="line-1029">   * assuming the byte arrays represent row keys</span>
<span class="source-line-no">1030</span><span id="line-1030">   */</span>
<span class="source-line-no">1031</span><span id="line-1031">  public static boolean overlappingKeys(final byte[] start1, final byte[] end1, final byte[] start2,</span>
<span class="source-line-no">1032</span><span id="line-1032">    final byte[] end2) {</span>
<span class="source-line-no">1033</span><span id="line-1033">    return (end2.length == 0 || start1.length == 0 || Bytes.compareTo(start1, end2) &lt; 0)</span>
<span class="source-line-no">1034</span><span id="line-1034">      &amp;&amp; (end1.length == 0 || start2.length == 0 || Bytes.compareTo(start2, end1) &lt; 0);</span>
<span class="source-line-no">1035</span><span id="line-1035">  }</span>
<span class="source-line-no">1036</span><span id="line-1036"></span>
<span class="source-line-no">1037</span><span id="line-1037">  /** Write rowkey excluding the common part. */</span>
<span class="source-line-no">1038</span><span id="line-1038">  public static void writeRowKeyExcludingCommon(Cell cell, short rLen, int commonPrefix,</span>
<span class="source-line-no">1039</span><span id="line-1039">    DataOutputStream out) throws IOException {</span>
<span class="source-line-no">1040</span><span id="line-1040">    if (commonPrefix == 0) {</span>
<span class="source-line-no">1041</span><span id="line-1041">      out.writeShort(rLen);</span>
<span class="source-line-no">1042</span><span id="line-1042">    } else if (commonPrefix == 1) {</span>
<span class="source-line-no">1043</span><span id="line-1043">      out.writeByte((byte) rLen);</span>
<span class="source-line-no">1044</span><span id="line-1044">      commonPrefix--;</span>
<span class="source-line-no">1045</span><span id="line-1045">    } else {</span>
<span class="source-line-no">1046</span><span id="line-1046">      commonPrefix -= KeyValue.ROW_LENGTH_SIZE;</span>
<span class="source-line-no">1047</span><span id="line-1047">    }</span>
<span class="source-line-no">1048</span><span id="line-1048">    if (rLen &gt; commonPrefix) {</span>
<span class="source-line-no">1049</span><span id="line-1049">      writeRowSkippingBytes(out, cell, rLen, commonPrefix);</span>
<span class="source-line-no">1050</span><span id="line-1050">    }</span>
<span class="source-line-no">1051</span><span id="line-1051">  }</span>
<span class="source-line-no">1052</span><span id="line-1052"></span>
<span class="source-line-no">1053</span><span id="line-1053">  /**</span>
<span class="source-line-no">1054</span><span id="line-1054">   * Writes the row from the given cell to the output stream excluding the common prefix</span>
<span class="source-line-no">1055</span><span id="line-1055">   * @param out     The dataoutputstream to which the data has to be written</span>
<span class="source-line-no">1056</span><span id="line-1056">   * @param cell    The cell whose contents has to be written</span>
<span class="source-line-no">1057</span><span id="line-1057">   * @param rlength the row length</span>
<span class="source-line-no">1058</span><span id="line-1058">   */</span>
<span class="source-line-no">1059</span><span id="line-1059">  public static void writeRowSkippingBytes(DataOutputStream out, Cell cell, short rlength,</span>
<span class="source-line-no">1060</span><span id="line-1060">    int commonPrefix) throws IOException {</span>
<span class="source-line-no">1061</span><span id="line-1061">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">1062</span><span id="line-1062">      ByteBufferUtils.copyBufferToStream((DataOutput) out,</span>
<span class="source-line-no">1063</span><span id="line-1063">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
<span class="source-line-no">1064</span><span id="line-1064">        ((ByteBufferExtendedCell) cell).getRowPosition() + commonPrefix, rlength - commonPrefix);</span>
<span class="source-line-no">1065</span><span id="line-1065">    } else {</span>
<span class="source-line-no">1066</span><span id="line-1066">      out.write(cell.getRowArray(), cell.getRowOffset() + commonPrefix, rlength - commonPrefix);</span>
<span class="source-line-no">1067</span><span id="line-1067">    }</span>
<span class="source-line-no">1068</span><span id="line-1068">  }</span>
<span class="source-line-no">1069</span><span id="line-1069"></span>
<span class="source-line-no">1070</span><span id="line-1070">  /**</span>
<span class="source-line-no">1071</span><span id="line-1071">   * Find length of common prefix in keys of the cells, considering key as byte[] if serialized in</span>
<span class="source-line-no">1072</span><span id="line-1072">   * {@link KeyValue}. The key format is &amp;lt;2 bytes rk len&amp;gt;&amp;lt;rk&amp;gt;&amp;lt;1 byte cf</span>
<span class="source-line-no">1073</span><span id="line-1073">   * len&amp;gt;&amp;lt;cf&amp;gt;&amp;lt;qualifier&amp;gt;&amp;lt;8 bytes timestamp&amp;gt;&amp;lt;1 byte type&amp;gt;</span>
<span class="source-line-no">1074</span><span id="line-1074">   * @param c1                the cell</span>
<span class="source-line-no">1075</span><span id="line-1075">   * @param c2                the cell</span>
<span class="source-line-no">1076</span><span id="line-1076">   * @param bypassFamilyCheck when true assume the family bytes same in both cells. Pass it as true</span>
<span class="source-line-no">1077</span><span id="line-1077">   *                          when dealing with Cells in same CF so as to avoid some checks</span>
<span class="source-line-no">1078</span><span id="line-1078">   * @param withTsType        when true check timestamp and type bytes also.</span>
<span class="source-line-no">1079</span><span id="line-1079">   * @return length of common prefix</span>
<span class="source-line-no">1080</span><span id="line-1080">   */</span>
<span class="source-line-no">1081</span><span id="line-1081">  public static int findCommonPrefixInFlatKey(ExtendedCell c1, ExtendedCell c2,</span>
<span class="source-line-no">1082</span><span id="line-1082">    boolean bypassFamilyCheck, boolean withTsType) {</span>
<span class="source-line-no">1083</span><span id="line-1083">    // Compare the 2 bytes in RK length part</span>
<span class="source-line-no">1084</span><span id="line-1084">    short rLen1 = c1.getRowLength();</span>
<span class="source-line-no">1085</span><span id="line-1085">    short rLen2 = c2.getRowLength();</span>
<span class="source-line-no">1086</span><span id="line-1086">    int commonPrefix = KeyValue.ROW_LENGTH_SIZE;</span>
<span class="source-line-no">1087</span><span id="line-1087">    if (rLen1 != rLen2) {</span>
<span class="source-line-no">1088</span><span id="line-1088">      // early out when the RK length itself is not matching</span>
<span class="source-line-no">1089</span><span id="line-1089">      return ByteBufferUtils.findCommonPrefix(Bytes.toBytes(rLen1), 0, KeyValue.ROW_LENGTH_SIZE,</span>
<span class="source-line-no">1090</span><span id="line-1090">        Bytes.toBytes(rLen2), 0, KeyValue.ROW_LENGTH_SIZE);</span>
<span class="source-line-no">1091</span><span id="line-1091">    }</span>
<span class="source-line-no">1092</span><span id="line-1092">    // Compare the RKs</span>
<span class="source-line-no">1093</span><span id="line-1093">    int rkCommonPrefix = 0;</span>
<span class="source-line-no">1094</span><span id="line-1094">    if (c1 instanceof ByteBufferExtendedCell &amp;&amp; c2 instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">1095</span><span id="line-1095">      rkCommonPrefix =</span>
<span class="source-line-no">1096</span><span id="line-1096">        ByteBufferUtils.findCommonPrefix(((ByteBufferExtendedCell) c1).getRowByteBuffer(),</span>
<span class="source-line-no">1097</span><span id="line-1097">          ((ByteBufferExtendedCell) c1).getRowPosition(), rLen1,</span>
<span class="source-line-no">1098</span><span id="line-1098">          ((ByteBufferExtendedCell) c2).getRowByteBuffer(),</span>
<span class="source-line-no">1099</span><span id="line-1099">          ((ByteBufferExtendedCell) c2).getRowPosition(), rLen2);</span>
<span class="source-line-no">1100</span><span id="line-1100">    } else {</span>
<span class="source-line-no">1101</span><span id="line-1101">      // There cannot be a case where one cell is BBCell and other is KeyValue. This flow comes</span>
<span class="source-line-no">1102</span><span id="line-1102">      // either</span>
<span class="source-line-no">1103</span><span id="line-1103">      // in flush or compactions. In flushes both cells are KV and in case of compaction it will be</span>
<span class="source-line-no">1104</span><span id="line-1104">      // either</span>
<span class="source-line-no">1105</span><span id="line-1105">      // KV or BBCell</span>
<span class="source-line-no">1106</span><span id="line-1106">      rkCommonPrefix = ByteBufferUtils.findCommonPrefix(c1.getRowArray(), c1.getRowOffset(), rLen1,</span>
<span class="source-line-no">1107</span><span id="line-1107">        c2.getRowArray(), c2.getRowOffset(), rLen2);</span>
<span class="source-line-no">1108</span><span id="line-1108">    }</span>
<span class="source-line-no">1109</span><span id="line-1109">    commonPrefix += rkCommonPrefix;</span>
<span class="source-line-no">1110</span><span id="line-1110">    if (rkCommonPrefix != rLen1) {</span>
<span class="source-line-no">1111</span><span id="line-1111">      // Early out when RK is not fully matching.</span>
<span class="source-line-no">1112</span><span id="line-1112">      return commonPrefix;</span>
<span class="source-line-no">1113</span><span id="line-1113">    }</span>
<span class="source-line-no">1114</span><span id="line-1114">    // Compare 1 byte CF length part</span>
<span class="source-line-no">1115</span><span id="line-1115">    byte fLen1 = c1.getFamilyLength();</span>
<span class="source-line-no">1116</span><span id="line-1116">    if (bypassFamilyCheck) {</span>
<span class="source-line-no">1117</span><span id="line-1117">      // This flag will be true when caller is sure that the family will be same for both the cells</span>
<span class="source-line-no">1118</span><span id="line-1118">      // Just make commonPrefix to increment by the family part</span>
<span class="source-line-no">1119</span><span id="line-1119">      commonPrefix += KeyValue.FAMILY_LENGTH_SIZE + fLen1;</span>
<span class="source-line-no">1120</span><span id="line-1120">    } else {</span>
<span class="source-line-no">1121</span><span id="line-1121">      byte fLen2 = c2.getFamilyLength();</span>
<span class="source-line-no">1122</span><span id="line-1122">      if (fLen1 != fLen2) {</span>
<span class="source-line-no">1123</span><span id="line-1123">        // early out when the CF length itself is not matching</span>
<span class="source-line-no">1124</span><span id="line-1124">        return commonPrefix;</span>
<span class="source-line-no">1125</span><span id="line-1125">      }</span>
<span class="source-line-no">1126</span><span id="line-1126">      // CF lengths are same so there is one more byte common in key part</span>
<span class="source-line-no">1127</span><span id="line-1127">      commonPrefix += KeyValue.FAMILY_LENGTH_SIZE;</span>
<span class="source-line-no">1128</span><span id="line-1128">      // Compare the CF names</span>
<span class="source-line-no">1129</span><span id="line-1129">      int fCommonPrefix;</span>
<span class="source-line-no">1130</span><span id="line-1130">      if (c1 instanceof ByteBufferExtendedCell &amp;&amp; c2 instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">1131</span><span id="line-1131">        fCommonPrefix =</span>
<span class="source-line-no">1132</span><span id="line-1132">          ByteBufferUtils.findCommonPrefix(((ByteBufferExtendedCell) c1).getFamilyByteBuffer(),</span>
<span class="source-line-no">1133</span><span id="line-1133">            ((ByteBufferExtendedCell) c1).getFamilyPosition(), fLen1,</span>
<span class="source-line-no">1134</span><span id="line-1134">            ((ByteBufferExtendedCell) c2).getFamilyByteBuffer(),</span>
<span class="source-line-no">1135</span><span id="line-1135">            ((ByteBufferExtendedCell) c2).getFamilyPosition(), fLen2);</span>
<span class="source-line-no">1136</span><span id="line-1136">      } else {</span>
<span class="source-line-no">1137</span><span id="line-1137">        fCommonPrefix = ByteBufferUtils.findCommonPrefix(c1.getFamilyArray(), c1.getFamilyOffset(),</span>
<span class="source-line-no">1138</span><span id="line-1138">          fLen1, c2.getFamilyArray(), c2.getFamilyOffset(), fLen2);</span>
<span class="source-line-no">1139</span><span id="line-1139">      }</span>
<span class="source-line-no">1140</span><span id="line-1140">      commonPrefix += fCommonPrefix;</span>
<span class="source-line-no">1141</span><span id="line-1141">      if (fCommonPrefix != fLen1) {</span>
<span class="source-line-no">1142</span><span id="line-1142">        return commonPrefix;</span>
<span class="source-line-no">1143</span><span id="line-1143">      }</span>
<span class="source-line-no">1144</span><span id="line-1144">    }</span>
<span class="source-line-no">1145</span><span id="line-1145">    // Compare the Qualifiers</span>
<span class="source-line-no">1146</span><span id="line-1146">    int qLen1 = c1.getQualifierLength();</span>
<span class="source-line-no">1147</span><span id="line-1147">    int qLen2 = c2.getQualifierLength();</span>
<span class="source-line-no">1148</span><span id="line-1148">    int qCommon;</span>
<span class="source-line-no">1149</span><span id="line-1149">    if (c1 instanceof ByteBufferExtendedCell &amp;&amp; c2 instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">1150</span><span id="line-1150">      qCommon =</span>
<span class="source-line-no">1151</span><span id="line-1151">        ByteBufferUtils.findCommonPrefix(((ByteBufferExtendedCell) c1).getQualifierByteBuffer(),</span>
<span class="source-line-no">1152</span><span id="line-1152">          ((ByteBufferExtendedCell) c1).getQualifierPosition(), qLen1,</span>
<span class="source-line-no">1153</span><span id="line-1153">          ((ByteBufferExtendedCell) c2).getQualifierByteBuffer(),</span>
<span class="source-line-no">1154</span><span id="line-1154">          ((ByteBufferExtendedCell) c2).getQualifierPosition(), qLen2);</span>
<span class="source-line-no">1155</span><span id="line-1155">    } else {</span>
<span class="source-line-no">1156</span><span id="line-1156">      qCommon = ByteBufferUtils.findCommonPrefix(c1.getQualifierArray(), c1.getQualifierOffset(),</span>
<span class="source-line-no">1157</span><span id="line-1157">        qLen1, c2.getQualifierArray(), c2.getQualifierOffset(), qLen2);</span>
<span class="source-line-no">1158</span><span id="line-1158">    }</span>
<span class="source-line-no">1159</span><span id="line-1159">    commonPrefix += qCommon;</span>
<span class="source-line-no">1160</span><span id="line-1160">    if (!withTsType || Math.max(qLen1, qLen2) != qCommon) {</span>
<span class="source-line-no">1161</span><span id="line-1161">      return commonPrefix;</span>
<span class="source-line-no">1162</span><span id="line-1162">    }</span>
<span class="source-line-no">1163</span><span id="line-1163">    // Compare the timestamp parts</span>
<span class="source-line-no">1164</span><span id="line-1164">    int tsCommonPrefix = ByteBufferUtils.findCommonPrefix(Bytes.toBytes(c1.getTimestamp()), 0,</span>
<span class="source-line-no">1165</span><span id="line-1165">      KeyValue.TIMESTAMP_SIZE, Bytes.toBytes(c2.getTimestamp()), 0, KeyValue.TIMESTAMP_SIZE);</span>
<span class="source-line-no">1166</span><span id="line-1166">    commonPrefix += tsCommonPrefix;</span>
<span class="source-line-no">1167</span><span id="line-1167">    if (tsCommonPrefix != KeyValue.TIMESTAMP_SIZE) {</span>
<span class="source-line-no">1168</span><span id="line-1168">      return commonPrefix;</span>
<span class="source-line-no">1169</span><span id="line-1169">    }</span>
<span class="source-line-no">1170</span><span id="line-1170">    // Compare the type</span>
<span class="source-line-no">1171</span><span id="line-1171">    if (c1.getTypeByte() == c2.getTypeByte()) {</span>
<span class="source-line-no">1172</span><span id="line-1172">      commonPrefix += KeyValue.TYPE_SIZE;</span>
<span class="source-line-no">1173</span><span id="line-1173">    }</span>
<span class="source-line-no">1174</span><span id="line-1174">    return commonPrefix;</span>
<span class="source-line-no">1175</span><span id="line-1175">  }</span>
<span class="source-line-no">1176</span><span id="line-1176"></span>
<span class="source-line-no">1177</span><span id="line-1177">  /**</span>
<span class="source-line-no">1178</span><span id="line-1178">   * Used to compare two cells based on the column hint provided. This is specifically used when we</span>
<span class="source-line-no">1179</span><span id="line-1179">   * need to optimize the seeks based on the next indexed key. This is an advanced usage API</span>
<span class="source-line-no">1180</span><span id="line-1180">   * specifically needed for some optimizations.</span>
<span class="source-line-no">1181</span><span id="line-1181">   * @param nextIndexedCell the next indexed cell</span>
<span class="source-line-no">1182</span><span id="line-1182">   * @param currentCell     the cell to be compared</span>
<span class="source-line-no">1183</span><span id="line-1183">   * @param foff            the family offset of the currentCell</span>
<span class="source-line-no">1184</span><span id="line-1184">   * @param flen            the family length of the currentCell</span>
<span class="source-line-no">1185</span><span id="line-1185">   * @param colHint         the column hint provided - could be null</span>
<span class="source-line-no">1186</span><span id="line-1186">   * @param coff            the offset of the column hint if provided, if not offset of the</span>
<span class="source-line-no">1187</span><span id="line-1187">   *                        currentCell's qualifier</span>
<span class="source-line-no">1188</span><span id="line-1188">   * @param clen            the length of the column hint if provided, if not length of the</span>
<span class="source-line-no">1189</span><span id="line-1189">   *                        currentCell's qualifier</span>
<span class="source-line-no">1190</span><span id="line-1190">   * @param ts              the timestamp to be seeked</span>
<span class="source-line-no">1191</span><span id="line-1191">   * @param type            the type to be seeked</span>
<span class="source-line-no">1192</span><span id="line-1192">   * @return an int based on the given column hint TODO : To be moved out of here because this is a</span>
<span class="source-line-no">1193</span><span id="line-1193">   *         special API used in scan optimization.</span>
<span class="source-line-no">1194</span><span id="line-1194">   */</span>
<span class="source-line-no">1195</span><span id="line-1195">  // compare a key against row/fam/qual/ts/type</span>
<span class="source-line-no">1196</span><span id="line-1196">  public static final int compareKeyBasedOnColHint(CellComparator comparator,</span>
<span class="source-line-no">1197</span><span id="line-1197">    ExtendedCell nextIndexedCell, ExtendedCell currentCell, int foff, int flen, byte[] colHint,</span>
<span class="source-line-no">1198</span><span id="line-1198">    int coff, int clen, long ts, byte type) {</span>
<span class="source-line-no">1199</span><span id="line-1199">    int compare = comparator.compareRows(nextIndexedCell, currentCell);</span>
<span class="source-line-no">1200</span><span id="line-1200">    if (compare != 0) {</span>
<span class="source-line-no">1201</span><span id="line-1201">      return compare;</span>
<span class="source-line-no">1202</span><span id="line-1202">    }</span>
<span class="source-line-no">1203</span><span id="line-1203">    // If the column is not specified, the "minimum" key type appears the</span>
<span class="source-line-no">1204</span><span id="line-1204">    // latest in the sorted order, regardless of the timestamp. This is used</span>
<span class="source-line-no">1205</span><span id="line-1205">    // for specifying the last key/value in a given row, because there is no</span>
<span class="source-line-no">1206</span><span id="line-1206">    // "lexicographically last column" (it would be infinitely long). The</span>
<span class="source-line-no">1207</span><span id="line-1207">    // "maximum" key type does not need this behavior.</span>
<span class="source-line-no">1208</span><span id="line-1208">    if (</span>
<span class="source-line-no">1209</span><span id="line-1209">      nextIndexedCell.getFamilyLength() + nextIndexedCell.getQualifierLength() == 0</span>
<span class="source-line-no">1210</span><span id="line-1210">        &amp;&amp; nextIndexedCell.getTypeByte() == KeyValue.Type.Minimum.getCode()</span>
<span class="source-line-no">1211</span><span id="line-1211">    ) {</span>
<span class="source-line-no">1212</span><span id="line-1212">      // left is "bigger", i.e. it appears later in the sorted order</span>
<span class="source-line-no">1213</span><span id="line-1213">      return 1;</span>
<span class="source-line-no">1214</span><span id="line-1214">    }</span>
<span class="source-line-no">1215</span><span id="line-1215">    if (flen + clen == 0 &amp;&amp; type == KeyValue.Type.Minimum.getCode()) {</span>
<span class="source-line-no">1216</span><span id="line-1216">      return -1;</span>
<span class="source-line-no">1217</span><span id="line-1217">    }</span>
<span class="source-line-no">1218</span><span id="line-1218"></span>
<span class="source-line-no">1219</span><span id="line-1219">    compare = comparator.compareFamilies(nextIndexedCell, currentCell);</span>
<span class="source-line-no">1220</span><span id="line-1220">    if (compare != 0) {</span>
<span class="source-line-no">1221</span><span id="line-1221">      return compare;</span>
<span class="source-line-no">1222</span><span id="line-1222">    }</span>
<span class="source-line-no">1223</span><span id="line-1223">    if (colHint == null) {</span>
<span class="source-line-no">1224</span><span id="line-1224">      compare = comparator.compareQualifiers(nextIndexedCell, currentCell);</span>
<span class="source-line-no">1225</span><span id="line-1225">    } else {</span>
<span class="source-line-no">1226</span><span id="line-1226">      compare = CellUtil.compareQualifiers(nextIndexedCell, colHint, coff, clen);</span>
<span class="source-line-no">1227</span><span id="line-1227">    }</span>
<span class="source-line-no">1228</span><span id="line-1228">    if (compare != 0) {</span>
<span class="source-line-no">1229</span><span id="line-1229">      return compare;</span>
<span class="source-line-no">1230</span><span id="line-1230">    }</span>
<span class="source-line-no">1231</span><span id="line-1231">    // Next compare timestamps.</span>
<span class="source-line-no">1232</span><span id="line-1232">    compare = comparator.compareTimestamps(nextIndexedCell.getTimestamp(), ts);</span>
<span class="source-line-no">1233</span><span id="line-1233">    if (compare != 0) {</span>
<span class="source-line-no">1234</span><span id="line-1234">      return compare;</span>
<span class="source-line-no">1235</span><span id="line-1235">    }</span>
<span class="source-line-no">1236</span><span id="line-1236"></span>
<span class="source-line-no">1237</span><span id="line-1237">    // Compare types. Let the delete types sort ahead of puts; i.e. types</span>
<span class="source-line-no">1238</span><span id="line-1238">    // of higher numbers sort before those of lesser numbers. Maximum (255)</span>
<span class="source-line-no">1239</span><span id="line-1239">    // appears ahead of everything, and minimum (0) appears after</span>
<span class="source-line-no">1240</span><span id="line-1240">    // everything.</span>
<span class="source-line-no">1241</span><span id="line-1241">    return (0xff &amp; type) - (0xff &amp; nextIndexedCell.getTypeByte());</span>
<span class="source-line-no">1242</span><span id="line-1242">  }</span>
<span class="source-line-no">1243</span><span id="line-1243"></span>
<span class="source-line-no">1244</span><span id="line-1244">  /**</span>
<span class="source-line-no">1245</span><span id="line-1245">   * Compares only the key portion of a cell. It does not include the sequence id/mvcc of the cell</span>
<span class="source-line-no">1246</span><span id="line-1246">   * @return an int greater than 0 if left &amp;gt; than right lesser than 0 if left &amp;lt; than right</span>
<span class="source-line-no">1247</span><span id="line-1247">   *         equal to 0 if left is equal to right</span>
<span class="source-line-no">1248</span><span id="line-1248">   */</span>
<span class="source-line-no">1249</span><span id="line-1249">  public static final int compareKeyIgnoresMvcc(CellComparator comparator, Cell left, Cell right) {</span>
<span class="source-line-no">1250</span><span id="line-1250">    return ((CellComparatorImpl) comparator).compare(left, right, true);</span>
<span class="source-line-no">1251</span><span id="line-1251">  }</span>
<span class="source-line-no">1252</span><span id="line-1252"></span>
<span class="source-line-no">1253</span><span id="line-1253">  /**</span>
<span class="source-line-no">1254</span><span id="line-1254">   * Compare cell's row against given comparator</span>
<span class="source-line-no">1255</span><span id="line-1255">   * @param cell       the cell to use for comparison</span>
<span class="source-line-no">1256</span><span id="line-1256">   * @param comparator the {@link CellComparator} to use for comparison</span>
<span class="source-line-no">1257</span><span id="line-1257">   * @return result comparing cell's row</span>
<span class="source-line-no">1258</span><span id="line-1258">   */</span>
<span class="source-line-no">1259</span><span id="line-1259">  public static int compareRow(Cell cell, ByteArrayComparable comparator) {</span>
<span class="source-line-no">1260</span><span id="line-1260">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">1261</span><span id="line-1261">      return comparator.compareTo(((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
<span class="source-line-no">1262</span><span id="line-1262">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength());</span>
<span class="source-line-no">1263</span><span id="line-1263">    }</span>
<span class="source-line-no">1264</span><span id="line-1264">    return comparator.compareTo(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());</span>
<span class="source-line-no">1265</span><span id="line-1265">  }</span>
<span class="source-line-no">1266</span><span id="line-1266"></span>
<span class="source-line-no">1267</span><span id="line-1267">  /**</span>
<span class="source-line-no">1268</span><span id="line-1268">   * Compare cell's column family against given comparator</span>
<span class="source-line-no">1269</span><span id="line-1269">   * @param cell       the cell to use for comparison</span>
<span class="source-line-no">1270</span><span id="line-1270">   * @param comparator the {@link CellComparator} to use for comparison</span>
<span class="source-line-no">1271</span><span id="line-1271">   * @return result comparing cell's column family</span>
<span class="source-line-no">1272</span><span id="line-1272">   */</span>
<span class="source-line-no">1273</span><span id="line-1273">  public static int compareFamily(Cell cell, ByteArrayComparable comparator) {</span>
<span class="source-line-no">1274</span><span id="line-1274">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">1275</span><span id="line-1275">      return comparator.compareTo(((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
<span class="source-line-no">1276</span><span id="line-1276">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), cell.getFamilyLength());</span>
<span class="source-line-no">1277</span><span id="line-1277">    }</span>
<span class="source-line-no">1278</span><span id="line-1278">    return comparator.compareTo(cell.getFamilyArray(), cell.getFamilyOffset(),</span>
<span class="source-line-no">1279</span><span id="line-1279">      cell.getFamilyLength());</span>
<span class="source-line-no">1280</span><span id="line-1280">  }</span>
<span class="source-line-no">1281</span><span id="line-1281"></span>
<span class="source-line-no">1282</span><span id="line-1282">  /**</span>
<span class="source-line-no">1283</span><span id="line-1283">   * Compare cell's qualifier against given comparator</span>
<span class="source-line-no">1284</span><span id="line-1284">   * @param cell       the cell to use for comparison</span>
<span class="source-line-no">1285</span><span id="line-1285">   * @param comparator the {@link CellComparator} to use for comparison</span>
<span class="source-line-no">1286</span><span id="line-1286">   * @return result comparing cell's qualifier</span>
<span class="source-line-no">1287</span><span id="line-1287">   */</span>
<span class="source-line-no">1288</span><span id="line-1288">  public static int compareQualifier(Cell cell, ByteArrayComparable comparator) {</span>
<span class="source-line-no">1289</span><span id="line-1289">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">1290</span><span id="line-1290">      return comparator.compareTo(((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
<span class="source-line-no">1291</span><span id="line-1291">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), cell.getQualifierLength());</span>
<span class="source-line-no">1292</span><span id="line-1292">    }</span>
<span class="source-line-no">1293</span><span id="line-1293">    return comparator.compareTo(cell.getQualifierArray(), cell.getQualifierOffset(),</span>
<span class="source-line-no">1294</span><span id="line-1294">      cell.getQualifierLength());</span>
<span class="source-line-no">1295</span><span id="line-1295">  }</span>
<span class="source-line-no">1296</span><span id="line-1296"></span>
<span class="source-line-no">1297</span><span id="line-1297">  public static Cell.Type toType(byte type) {</span>
<span class="source-line-no">1298</span><span id="line-1298">    KeyValue.Type codeToType = KeyValue.Type.codeToType(type);</span>
<span class="source-line-no">1299</span><span id="line-1299">    switch (codeToType) {</span>
<span class="source-line-no">1300</span><span id="line-1300">      case Put:</span>
<span class="source-line-no">1301</span><span id="line-1301">        return Cell.Type.Put;</span>
<span class="source-line-no">1302</span><span id="line-1302">      case Delete:</span>
<span class="source-line-no">1303</span><span id="line-1303">        return Cell.Type.Delete;</span>
<span class="source-line-no">1304</span><span id="line-1304">      case DeleteColumn:</span>
<span class="source-line-no">1305</span><span id="line-1305">        return Cell.Type.DeleteColumn;</span>
<span class="source-line-no">1306</span><span id="line-1306">      case DeleteFamily:</span>
<span class="source-line-no">1307</span><span id="line-1307">        return Cell.Type.DeleteFamily;</span>
<span class="source-line-no">1308</span><span id="line-1308">      case DeleteFamilyVersion:</span>
<span class="source-line-no">1309</span><span id="line-1309">        return Cell.Type.DeleteFamilyVersion;</span>
<span class="source-line-no">1310</span><span id="line-1310">      default:</span>
<span class="source-line-no">1311</span><span id="line-1311">        throw new UnsupportedOperationException("Invalid type of cell " + type);</span>
<span class="source-line-no">1312</span><span id="line-1312">    }</span>
<span class="source-line-no">1313</span><span id="line-1313">  }</span>
<span class="source-line-no">1314</span><span id="line-1314"></span>
<span class="source-line-no">1315</span><span id="line-1315">  public static KeyValue.Type toTypeByte(Cell.Type type) {</span>
<span class="source-line-no">1316</span><span id="line-1316">    switch (type) {</span>
<span class="source-line-no">1317</span><span id="line-1317">      case Put:</span>
<span class="source-line-no">1318</span><span id="line-1318">        return KeyValue.Type.Put;</span>
<span class="source-line-no">1319</span><span id="line-1319">      case Delete:</span>
<span class="source-line-no">1320</span><span id="line-1320">        return KeyValue.Type.Delete;</span>
<span class="source-line-no">1321</span><span id="line-1321">      case DeleteColumn:</span>
<span class="source-line-no">1322</span><span id="line-1322">        return KeyValue.Type.DeleteColumn;</span>
<span class="source-line-no">1323</span><span id="line-1323">      case DeleteFamilyVersion:</span>
<span class="source-line-no">1324</span><span id="line-1324">        return KeyValue.Type.DeleteFamilyVersion;</span>
<span class="source-line-no">1325</span><span id="line-1325">      case DeleteFamily:</span>
<span class="source-line-no">1326</span><span id="line-1326">        return KeyValue.Type.DeleteFamily;</span>
<span class="source-line-no">1327</span><span id="line-1327">      default:</span>
<span class="source-line-no">1328</span><span id="line-1328">        throw new UnsupportedOperationException("Unsupported data type:" + type);</span>
<span class="source-line-no">1329</span><span id="line-1329">    }</span>
<span class="source-line-no">1330</span><span id="line-1330">  }</span>
<span class="source-line-no">1331</span><span id="line-1331"></span>
<span class="source-line-no">1332</span><span id="line-1332">  /**</span>
<span class="source-line-no">1333</span><span id="line-1333">   * Compare cell's value against given comparator</span>
<span class="source-line-no">1334</span><span id="line-1334">   * @param cell       the cell to use for comparison</span>
<span class="source-line-no">1335</span><span id="line-1335">   * @param comparator the {@link CellComparator} to use for comparison</span>
<span class="source-line-no">1336</span><span id="line-1336">   * @return result comparing cell's value</span>
<span class="source-line-no">1337</span><span id="line-1337">   */</span>
<span class="source-line-no">1338</span><span id="line-1338">  public static int compareValue(Cell cell, ByteArrayComparable comparator) {</span>
<span class="source-line-no">1339</span><span id="line-1339">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">1340</span><span id="line-1340">      return comparator.compareTo(((ByteBufferExtendedCell) cell).getValueByteBuffer(),</span>
<span class="source-line-no">1341</span><span id="line-1341">        ((ByteBufferExtendedCell) cell).getValuePosition(), cell.getValueLength());</span>
<span class="source-line-no">1342</span><span id="line-1342">    }</span>
<span class="source-line-no">1343</span><span id="line-1343">    return comparator.compareTo(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());</span>
<span class="source-line-no">1344</span><span id="line-1344">  }</span>
<span class="source-line-no">1345</span><span id="line-1345"></span>
<span class="source-line-no">1346</span><span id="line-1346">  /**</span>
<span class="source-line-no">1347</span><span id="line-1347">   * These cells are used in reseeks/seeks to improve the read performance. They are not real cells</span>
<span class="source-line-no">1348</span><span id="line-1348">   * that are returned back to the clients</span>
<span class="source-line-no">1349</span><span id="line-1349">   */</span>
<span class="source-line-no">1350</span><span id="line-1350">  private static abstract class EmptyCell implements ExtendedCell {</span>
<span class="source-line-no">1351</span><span id="line-1351"></span>
<span class="source-line-no">1352</span><span id="line-1352">    @Override</span>
<span class="source-line-no">1353</span><span id="line-1353">    public void setSequenceId(long seqId) {</span>
<span class="source-line-no">1354</span><span id="line-1354">      // Fake cells don't need seqId, so leaving it as a noop.</span>
<span class="source-line-no">1355</span><span id="line-1355">    }</span>
<span class="source-line-no">1356</span><span id="line-1356"></span>
<span class="source-line-no">1357</span><span id="line-1357">    @Override</span>
<span class="source-line-no">1358</span><span id="line-1358">    public void setTimestamp(long ts) {</span>
<span class="source-line-no">1359</span><span id="line-1359">      // Fake cells can't be changed timestamp, so leaving it as a noop.</span>
<span class="source-line-no">1360</span><span id="line-1360">    }</span>
<span class="source-line-no">1361</span><span id="line-1361"></span>
<span class="source-line-no">1362</span><span id="line-1362">    @Override</span>
<span class="source-line-no">1363</span><span id="line-1363">    public void setTimestamp(byte[] ts) {</span>
<span class="source-line-no">1364</span><span id="line-1364">      // Fake cells can't be changed timestamp, so leaving it as a noop.</span>
<span class="source-line-no">1365</span><span id="line-1365">    }</span>
<span class="source-line-no">1366</span><span id="line-1366"></span>
<span class="source-line-no">1367</span><span id="line-1367">    @Override</span>
<span class="source-line-no">1368</span><span id="line-1368">    public byte[] getRowArray() {</span>
<span class="source-line-no">1369</span><span id="line-1369">      return EMPTY_BYTE_ARRAY;</span>
<span class="source-line-no">1370</span><span id="line-1370">    }</span>
<span class="source-line-no">1371</span><span id="line-1371"></span>
<span class="source-line-no">1372</span><span id="line-1372">    @Override</span>
<span class="source-line-no">1373</span><span id="line-1373">    public int getRowOffset() {</span>
<span class="source-line-no">1374</span><span id="line-1374">      return 0;</span>
<span class="source-line-no">1375</span><span id="line-1375">    }</span>
<span class="source-line-no">1376</span><span id="line-1376"></span>
<span class="source-line-no">1377</span><span id="line-1377">    @Override</span>
<span class="source-line-no">1378</span><span id="line-1378">    public short getRowLength() {</span>
<span class="source-line-no">1379</span><span id="line-1379">      return 0;</span>
<span class="source-line-no">1380</span><span id="line-1380">    }</span>
<span class="source-line-no">1381</span><span id="line-1381"></span>
<span class="source-line-no">1382</span><span id="line-1382">    @Override</span>
<span class="source-line-no">1383</span><span id="line-1383">    public byte[] getFamilyArray() {</span>
<span class="source-line-no">1384</span><span id="line-1384">      return EMPTY_BYTE_ARRAY;</span>
<span class="source-line-no">1385</span><span id="line-1385">    }</span>
<span class="source-line-no">1386</span><span id="line-1386"></span>
<span class="source-line-no">1387</span><span id="line-1387">    @Override</span>
<span class="source-line-no">1388</span><span id="line-1388">    public int getFamilyOffset() {</span>
<span class="source-line-no">1389</span><span id="line-1389">      return 0;</span>
<span class="source-line-no">1390</span><span id="line-1390">    }</span>
<span class="source-line-no">1391</span><span id="line-1391"></span>
<span class="source-line-no">1392</span><span id="line-1392">    @Override</span>
<span class="source-line-no">1393</span><span id="line-1393">    public byte getFamilyLength() {</span>
<span class="source-line-no">1394</span><span id="line-1394">      return 0;</span>
<span class="source-line-no">1395</span><span id="line-1395">    }</span>
<span class="source-line-no">1396</span><span id="line-1396"></span>
<span class="source-line-no">1397</span><span id="line-1397">    @Override</span>
<span class="source-line-no">1398</span><span id="line-1398">    public byte[] getQualifierArray() {</span>
<span class="source-line-no">1399</span><span id="line-1399">      return EMPTY_BYTE_ARRAY;</span>
<span class="source-line-no">1400</span><span id="line-1400">    }</span>
<span class="source-line-no">1401</span><span id="line-1401"></span>
<span class="source-line-no">1402</span><span id="line-1402">    @Override</span>
<span class="source-line-no">1403</span><span id="line-1403">    public int getQualifierOffset() {</span>
<span class="source-line-no">1404</span><span id="line-1404">      return 0;</span>
<span class="source-line-no">1405</span><span id="line-1405">    }</span>
<span class="source-line-no">1406</span><span id="line-1406"></span>
<span class="source-line-no">1407</span><span id="line-1407">    @Override</span>
<span class="source-line-no">1408</span><span id="line-1408">    public int getQualifierLength() {</span>
<span class="source-line-no">1409</span><span id="line-1409">      return 0;</span>
<span class="source-line-no">1410</span><span id="line-1410">    }</span>
<span class="source-line-no">1411</span><span id="line-1411"></span>
<span class="source-line-no">1412</span><span id="line-1412">    @Override</span>
<span class="source-line-no">1413</span><span id="line-1413">    public long getSequenceId() {</span>
<span class="source-line-no">1414</span><span id="line-1414">      return 0;</span>
<span class="source-line-no">1415</span><span id="line-1415">    }</span>
<span class="source-line-no">1416</span><span id="line-1416"></span>
<span class="source-line-no">1417</span><span id="line-1417">    @Override</span>
<span class="source-line-no">1418</span><span id="line-1418">    public byte[] getValueArray() {</span>
<span class="source-line-no">1419</span><span id="line-1419">      return EMPTY_BYTE_ARRAY;</span>
<span class="source-line-no">1420</span><span id="line-1420">    }</span>
<span class="source-line-no">1421</span><span id="line-1421"></span>
<span class="source-line-no">1422</span><span id="line-1422">    @Override</span>
<span class="source-line-no">1423</span><span id="line-1423">    public int getValueOffset() {</span>
<span class="source-line-no">1424</span><span id="line-1424">      return 0;</span>
<span class="source-line-no">1425</span><span id="line-1425">    }</span>
<span class="source-line-no">1426</span><span id="line-1426"></span>
<span class="source-line-no">1427</span><span id="line-1427">    @Override</span>
<span class="source-line-no">1428</span><span id="line-1428">    public int getValueLength() {</span>
<span class="source-line-no">1429</span><span id="line-1429">      return 0;</span>
<span class="source-line-no">1430</span><span id="line-1430">    }</span>
<span class="source-line-no">1431</span><span id="line-1431"></span>
<span class="source-line-no">1432</span><span id="line-1432">    @Override</span>
<span class="source-line-no">1433</span><span id="line-1433">    public byte[] getTagsArray() {</span>
<span class="source-line-no">1434</span><span id="line-1434">      return EMPTY_BYTE_ARRAY;</span>
<span class="source-line-no">1435</span><span id="line-1435">    }</span>
<span class="source-line-no">1436</span><span id="line-1436"></span>
<span class="source-line-no">1437</span><span id="line-1437">    @Override</span>
<span class="source-line-no">1438</span><span id="line-1438">    public int getTagsOffset() {</span>
<span class="source-line-no">1439</span><span id="line-1439">      return 0;</span>
<span class="source-line-no">1440</span><span id="line-1440">    }</span>
<span class="source-line-no">1441</span><span id="line-1441"></span>
<span class="source-line-no">1442</span><span id="line-1442">    @Override</span>
<span class="source-line-no">1443</span><span id="line-1443">    public int getTagsLength() {</span>
<span class="source-line-no">1444</span><span id="line-1444">      return 0;</span>
<span class="source-line-no">1445</span><span id="line-1445">    }</span>
<span class="source-line-no">1446</span><span id="line-1446">  }</span>
<span class="source-line-no">1447</span><span id="line-1447"></span>
<span class="source-line-no">1448</span><span id="line-1448">  /**</span>
<span class="source-line-no">1449</span><span id="line-1449">   * These cells are used in reseeks/seeks to improve the read performance. They are not real cells</span>
<span class="source-line-no">1450</span><span id="line-1450">   * that are returned back to the clients</span>
<span class="source-line-no">1451</span><span id="line-1451">   */</span>
<span class="source-line-no">1452</span><span id="line-1452">  private static abstract class EmptyByteBufferExtendedCell extends ByteBufferExtendedCell {</span>
<span class="source-line-no">1453</span><span id="line-1453"></span>
<span class="source-line-no">1454</span><span id="line-1454">    @Override</span>
<span class="source-line-no">1455</span><span id="line-1455">    public void setSequenceId(long seqId) {</span>
<span class="source-line-no">1456</span><span id="line-1456">      // Fake cells don't need seqId, so leaving it as a noop.</span>
<span class="source-line-no">1457</span><span id="line-1457">    }</span>
<span class="source-line-no">1458</span><span id="line-1458"></span>
<span class="source-line-no">1459</span><span id="line-1459">    @Override</span>
<span class="source-line-no">1460</span><span id="line-1460">    public void setTimestamp(long ts) {</span>
<span class="source-line-no">1461</span><span id="line-1461">      // Fake cells can't be changed timestamp, so leaving it as a noop.</span>
<span class="source-line-no">1462</span><span id="line-1462">    }</span>
<span class="source-line-no">1463</span><span id="line-1463"></span>
<span class="source-line-no">1464</span><span id="line-1464">    @Override</span>
<span class="source-line-no">1465</span><span id="line-1465">    public void setTimestamp(byte[] ts) {</span>
<span class="source-line-no">1466</span><span id="line-1466">      // Fake cells can't be changed timestamp, so leaving it as a noop.</span>
<span class="source-line-no">1467</span><span id="line-1467">    }</span>
<span class="source-line-no">1468</span><span id="line-1468"></span>
<span class="source-line-no">1469</span><span id="line-1469">    @Override</span>
<span class="source-line-no">1470</span><span id="line-1470">    public byte[] getRowArray() {</span>
<span class="source-line-no">1471</span><span id="line-1471">      return CellUtil.cloneRow(this);</span>
<span class="source-line-no">1472</span><span id="line-1472">    }</span>
<span class="source-line-no">1473</span><span id="line-1473"></span>
<span class="source-line-no">1474</span><span id="line-1474">    @Override</span>
<span class="source-line-no">1475</span><span id="line-1475">    public int getRowOffset() {</span>
<span class="source-line-no">1476</span><span id="line-1476">      return 0;</span>
<span class="source-line-no">1477</span><span id="line-1477">    }</span>
<span class="source-line-no">1478</span><span id="line-1478"></span>
<span class="source-line-no">1479</span><span id="line-1479">    @Override</span>
<span class="source-line-no">1480</span><span id="line-1480">    public short getRowLength() {</span>
<span class="source-line-no">1481</span><span id="line-1481">      return 0;</span>
<span class="source-line-no">1482</span><span id="line-1482">    }</span>
<span class="source-line-no">1483</span><span id="line-1483"></span>
<span class="source-line-no">1484</span><span id="line-1484">    @Override</span>
<span class="source-line-no">1485</span><span id="line-1485">    public byte[] getFamilyArray() {</span>
<span class="source-line-no">1486</span><span id="line-1486">      return CellUtil.cloneFamily(this);</span>
<span class="source-line-no">1487</span><span id="line-1487">    }</span>
<span class="source-line-no">1488</span><span id="line-1488"></span>
<span class="source-line-no">1489</span><span id="line-1489">    @Override</span>
<span class="source-line-no">1490</span><span id="line-1490">    public int getFamilyOffset() {</span>
<span class="source-line-no">1491</span><span id="line-1491">      return 0;</span>
<span class="source-line-no">1492</span><span id="line-1492">    }</span>
<span class="source-line-no">1493</span><span id="line-1493"></span>
<span class="source-line-no">1494</span><span id="line-1494">    @Override</span>
<span class="source-line-no">1495</span><span id="line-1495">    public byte getFamilyLength() {</span>
<span class="source-line-no">1496</span><span id="line-1496">      return 0;</span>
<span class="source-line-no">1497</span><span id="line-1497">    }</span>
<span class="source-line-no">1498</span><span id="line-1498"></span>
<span class="source-line-no">1499</span><span id="line-1499">    @Override</span>
<span class="source-line-no">1500</span><span id="line-1500">    public byte[] getQualifierArray() {</span>
<span class="source-line-no">1501</span><span id="line-1501">      return CellUtil.cloneQualifier(this);</span>
<span class="source-line-no">1502</span><span id="line-1502">    }</span>
<span class="source-line-no">1503</span><span id="line-1503"></span>
<span class="source-line-no">1504</span><span id="line-1504">    @Override</span>
<span class="source-line-no">1505</span><span id="line-1505">    public int getQualifierOffset() {</span>
<span class="source-line-no">1506</span><span id="line-1506">      return 0;</span>
<span class="source-line-no">1507</span><span id="line-1507">    }</span>
<span class="source-line-no">1508</span><span id="line-1508"></span>
<span class="source-line-no">1509</span><span id="line-1509">    @Override</span>
<span class="source-line-no">1510</span><span id="line-1510">    public int getQualifierLength() {</span>
<span class="source-line-no">1511</span><span id="line-1511">      return 0;</span>
<span class="source-line-no">1512</span><span id="line-1512">    }</span>
<span class="source-line-no">1513</span><span id="line-1513"></span>
<span class="source-line-no">1514</span><span id="line-1514">    @Override</span>
<span class="source-line-no">1515</span><span id="line-1515">    public long getSequenceId() {</span>
<span class="source-line-no">1516</span><span id="line-1516">      return 0;</span>
<span class="source-line-no">1517</span><span id="line-1517">    }</span>
<span class="source-line-no">1518</span><span id="line-1518"></span>
<span class="source-line-no">1519</span><span id="line-1519">    @Override</span>
<span class="source-line-no">1520</span><span id="line-1520">    public byte[] getValueArray() {</span>
<span class="source-line-no">1521</span><span id="line-1521">      return CellUtil.cloneValue(this);</span>
<span class="source-line-no">1522</span><span id="line-1522">    }</span>
<span class="source-line-no">1523</span><span id="line-1523"></span>
<span class="source-line-no">1524</span><span id="line-1524">    @Override</span>
<span class="source-line-no">1525</span><span id="line-1525">    public int getValueOffset() {</span>
<span class="source-line-no">1526</span><span id="line-1526">      return 0;</span>
<span class="source-line-no">1527</span><span id="line-1527">    }</span>
<span class="source-line-no">1528</span><span id="line-1528"></span>
<span class="source-line-no">1529</span><span id="line-1529">    @Override</span>
<span class="source-line-no">1530</span><span id="line-1530">    public int getValueLength() {</span>
<span class="source-line-no">1531</span><span id="line-1531">      return 0;</span>
<span class="source-line-no">1532</span><span id="line-1532">    }</span>
<span class="source-line-no">1533</span><span id="line-1533"></span>
<span class="source-line-no">1534</span><span id="line-1534">    @Override</span>
<span class="source-line-no">1535</span><span id="line-1535">    public byte[] getTagsArray() {</span>
<span class="source-line-no">1536</span><span id="line-1536">      return PrivateCellUtil.cloneTags(this);</span>
<span class="source-line-no">1537</span><span id="line-1537">    }</span>
<span class="source-line-no">1538</span><span id="line-1538"></span>
<span class="source-line-no">1539</span><span id="line-1539">    @Override</span>
<span class="source-line-no">1540</span><span id="line-1540">    public int getTagsOffset() {</span>
<span class="source-line-no">1541</span><span id="line-1541">      return 0;</span>
<span class="source-line-no">1542</span><span id="line-1542">    }</span>
<span class="source-line-no">1543</span><span id="line-1543"></span>
<span class="source-line-no">1544</span><span id="line-1544">    @Override</span>
<span class="source-line-no">1545</span><span id="line-1545">    public int getTagsLength() {</span>
<span class="source-line-no">1546</span><span id="line-1546">      return 0;</span>
<span class="source-line-no">1547</span><span id="line-1547">    }</span>
<span class="source-line-no">1548</span><span id="line-1548"></span>
<span class="source-line-no">1549</span><span id="line-1549">    @Override</span>
<span class="source-line-no">1550</span><span id="line-1550">    public ByteBuffer getRowByteBuffer() {</span>
<span class="source-line-no">1551</span><span id="line-1551">      return HConstants.EMPTY_BYTE_BUFFER;</span>
<span class="source-line-no">1552</span><span id="line-1552">    }</span>
<span class="source-line-no">1553</span><span id="line-1553"></span>
<span class="source-line-no">1554</span><span id="line-1554">    @Override</span>
<span class="source-line-no">1555</span><span id="line-1555">    public int getRowPosition() {</span>
<span class="source-line-no">1556</span><span id="line-1556">      return 0;</span>
<span class="source-line-no">1557</span><span id="line-1557">    }</span>
<span class="source-line-no">1558</span><span id="line-1558"></span>
<span class="source-line-no">1559</span><span id="line-1559">    @Override</span>
<span class="source-line-no">1560</span><span id="line-1560">    public ByteBuffer getFamilyByteBuffer() {</span>
<span class="source-line-no">1561</span><span id="line-1561">      return HConstants.EMPTY_BYTE_BUFFER;</span>
<span class="source-line-no">1562</span><span id="line-1562">    }</span>
<span class="source-line-no">1563</span><span id="line-1563"></span>
<span class="source-line-no">1564</span><span id="line-1564">    @Override</span>
<span class="source-line-no">1565</span><span id="line-1565">    public int getFamilyPosition() {</span>
<span class="source-line-no">1566</span><span id="line-1566">      return 0;</span>
<span class="source-line-no">1567</span><span id="line-1567">    }</span>
<span class="source-line-no">1568</span><span id="line-1568"></span>
<span class="source-line-no">1569</span><span id="line-1569">    @Override</span>
<span class="source-line-no">1570</span><span id="line-1570">    public ByteBuffer getQualifierByteBuffer() {</span>
<span class="source-line-no">1571</span><span id="line-1571">      return HConstants.EMPTY_BYTE_BUFFER;</span>
<span class="source-line-no">1572</span><span id="line-1572">    }</span>
<span class="source-line-no">1573</span><span id="line-1573"></span>
<span class="source-line-no">1574</span><span id="line-1574">    @Override</span>
<span class="source-line-no">1575</span><span id="line-1575">    public int getQualifierPosition() {</span>
<span class="source-line-no">1576</span><span id="line-1576">      return 0;</span>
<span class="source-line-no">1577</span><span id="line-1577">    }</span>
<span class="source-line-no">1578</span><span id="line-1578"></span>
<span class="source-line-no">1579</span><span id="line-1579">    @Override</span>
<span class="source-line-no">1580</span><span id="line-1580">    public ByteBuffer getTagsByteBuffer() {</span>
<span class="source-line-no">1581</span><span id="line-1581">      return HConstants.EMPTY_BYTE_BUFFER;</span>
<span class="source-line-no">1582</span><span id="line-1582">    }</span>
<span class="source-line-no">1583</span><span id="line-1583"></span>
<span class="source-line-no">1584</span><span id="line-1584">    @Override</span>
<span class="source-line-no">1585</span><span id="line-1585">    public int getTagsPosition() {</span>
<span class="source-line-no">1586</span><span id="line-1586">      return 0;</span>
<span class="source-line-no">1587</span><span id="line-1587">    }</span>
<span class="source-line-no">1588</span><span id="line-1588"></span>
<span class="source-line-no">1589</span><span id="line-1589">    @Override</span>
<span class="source-line-no">1590</span><span id="line-1590">    public ByteBuffer getValueByteBuffer() {</span>
<span class="source-line-no">1591</span><span id="line-1591">      return HConstants.EMPTY_BYTE_BUFFER;</span>
<span class="source-line-no">1592</span><span id="line-1592">    }</span>
<span class="source-line-no">1593</span><span id="line-1593"></span>
<span class="source-line-no">1594</span><span id="line-1594">    @Override</span>
<span class="source-line-no">1595</span><span id="line-1595">    public int getValuePosition() {</span>
<span class="source-line-no">1596</span><span id="line-1596">      return 0;</span>
<span class="source-line-no">1597</span><span id="line-1597">    }</span>
<span class="source-line-no">1598</span><span id="line-1598">  }</span>
<span class="source-line-no">1599</span><span id="line-1599"></span>
<span class="source-line-no">1600</span><span id="line-1600">  private static class FirstOnRowCell extends EmptyCell {</span>
<span class="source-line-no">1601</span><span id="line-1601">    // @formatter:off</span>
<span class="source-line-no">1602</span><span id="line-1602">    private static final int FIXED_HEAPSIZE =</span>
<span class="source-line-no">1603</span><span id="line-1603">        ClassSize.OBJECT // object</span>
<span class="source-line-no">1604</span><span id="line-1604">      + ClassSize.REFERENCE // row array</span>
<span class="source-line-no">1605</span><span id="line-1605">      + Bytes.SIZEOF_INT // row offset</span>
<span class="source-line-no">1606</span><span id="line-1606">      + Bytes.SIZEOF_SHORT;  // row length</span>
<span class="source-line-no">1607</span><span id="line-1607">    // @formatter:on</span>
<span class="source-line-no">1608</span><span id="line-1608">    private final byte[] rowArray;</span>
<span class="source-line-no">1609</span><span id="line-1609">    private final int roffset;</span>
<span class="source-line-no">1610</span><span id="line-1610">    private final short rlength;</span>
<span class="source-line-no">1611</span><span id="line-1611"></span>
<span class="source-line-no">1612</span><span id="line-1612">    public FirstOnRowCell(final byte[] row, int roffset, short rlength) {</span>
<span class="source-line-no">1613</span><span id="line-1613">      this.rowArray = row;</span>
<span class="source-line-no">1614</span><span id="line-1614">      this.roffset = roffset;</span>
<span class="source-line-no">1615</span><span id="line-1615">      this.rlength = rlength;</span>
<span class="source-line-no">1616</span><span id="line-1616">    }</span>
<span class="source-line-no">1617</span><span id="line-1617"></span>
<span class="source-line-no">1618</span><span id="line-1618">    @Override</span>
<span class="source-line-no">1619</span><span id="line-1619">    public long heapSize() {</span>
<span class="source-line-no">1620</span><span id="line-1620">      return ClassSize.align(FIXED_HEAPSIZE)</span>
<span class="source-line-no">1621</span><span id="line-1621">        // array overhead</span>
<span class="source-line-no">1622</span><span id="line-1622">        + (rlength == 0 ? ClassSize.sizeOfByteArray(rlength) : rlength);</span>
<span class="source-line-no">1623</span><span id="line-1623">    }</span>
<span class="source-line-no">1624</span><span id="line-1624"></span>
<span class="source-line-no">1625</span><span id="line-1625">    @Override</span>
<span class="source-line-no">1626</span><span id="line-1626">    public byte[] getRowArray() {</span>
<span class="source-line-no">1627</span><span id="line-1627">      return this.rowArray;</span>
<span class="source-line-no">1628</span><span id="line-1628">    }</span>
<span class="source-line-no">1629</span><span id="line-1629"></span>
<span class="source-line-no">1630</span><span id="line-1630">    @Override</span>
<span class="source-line-no">1631</span><span id="line-1631">    public int getRowOffset() {</span>
<span class="source-line-no">1632</span><span id="line-1632">      return this.roffset;</span>
<span class="source-line-no">1633</span><span id="line-1633">    }</span>
<span class="source-line-no">1634</span><span id="line-1634"></span>
<span class="source-line-no">1635</span><span id="line-1635">    @Override</span>
<span class="source-line-no">1636</span><span id="line-1636">    public short getRowLength() {</span>
<span class="source-line-no">1637</span><span id="line-1637">      return this.rlength;</span>
<span class="source-line-no">1638</span><span id="line-1638">    }</span>
<span class="source-line-no">1639</span><span id="line-1639"></span>
<span class="source-line-no">1640</span><span id="line-1640">    @Override</span>
<span class="source-line-no">1641</span><span id="line-1641">    public long getTimestamp() {</span>
<span class="source-line-no">1642</span><span id="line-1642">      return HConstants.LATEST_TIMESTAMP;</span>
<span class="source-line-no">1643</span><span id="line-1643">    }</span>
<span class="source-line-no">1644</span><span id="line-1644"></span>
<span class="source-line-no">1645</span><span id="line-1645">    @Override</span>
<span class="source-line-no">1646</span><span id="line-1646">    public byte getTypeByte() {</span>
<span class="source-line-no">1647</span><span id="line-1647">      return KeyValue.Type.Maximum.getCode();</span>
<span class="source-line-no">1648</span><span id="line-1648">    }</span>
<span class="source-line-no">1649</span><span id="line-1649"></span>
<span class="source-line-no">1650</span><span id="line-1650">    @Override</span>
<span class="source-line-no">1651</span><span id="line-1651">    public Cell.Type getType() {</span>
<span class="source-line-no">1652</span><span id="line-1652">      throw new UnsupportedOperationException();</span>
<span class="source-line-no">1653</span><span id="line-1653">    }</span>
<span class="source-line-no">1654</span><span id="line-1654">  }</span>
<span class="source-line-no">1655</span><span id="line-1655"></span>
<span class="source-line-no">1656</span><span id="line-1656">  private static class FirstOnRowByteBufferExtendedCell extends EmptyByteBufferExtendedCell {</span>
<span class="source-line-no">1657</span><span id="line-1657">    // @formatter:off</span>
<span class="source-line-no">1658</span><span id="line-1658">    private static final int FIXED_OVERHEAD =</span>
<span class="source-line-no">1659</span><span id="line-1659">        ClassSize.OBJECT // object</span>
<span class="source-line-no">1660</span><span id="line-1660">        + ClassSize.REFERENCE // row buffer</span>
<span class="source-line-no">1661</span><span id="line-1661">        + Bytes.SIZEOF_INT // row offset</span>
<span class="source-line-no">1662</span><span id="line-1662">        + Bytes.SIZEOF_SHORT; // row length</span>
<span class="source-line-no">1663</span><span id="line-1663">    // @formatter:on</span>
<span class="source-line-no">1664</span><span id="line-1664">    private final ByteBuffer rowBuff;</span>
<span class="source-line-no">1665</span><span id="line-1665">    private final int roffset;</span>
<span class="source-line-no">1666</span><span id="line-1666">    private final short rlength;</span>
<span class="source-line-no">1667</span><span id="line-1667"></span>
<span class="source-line-no">1668</span><span id="line-1668">    public FirstOnRowByteBufferExtendedCell(final ByteBuffer row, int roffset, short rlength) {</span>
<span class="source-line-no">1669</span><span id="line-1669">      this.rowBuff = row;</span>
<span class="source-line-no">1670</span><span id="line-1670">      this.roffset = roffset;</span>
<span class="source-line-no">1671</span><span id="line-1671">      this.rlength = rlength;</span>
<span class="source-line-no">1672</span><span id="line-1672">    }</span>
<span class="source-line-no">1673</span><span id="line-1673"></span>
<span class="source-line-no">1674</span><span id="line-1674">    @Override</span>
<span class="source-line-no">1675</span><span id="line-1675">    public long heapSize() {</span>
<span class="source-line-no">1676</span><span id="line-1676">      if (this.rowBuff.hasArray()) {</span>
<span class="source-line-no">1677</span><span id="line-1677">        return ClassSize.align(FIXED_OVERHEAD + rlength);</span>
<span class="source-line-no">1678</span><span id="line-1678">      }</span>
<span class="source-line-no">1679</span><span id="line-1679">      return ClassSize.align(FIXED_OVERHEAD);</span>
<span class="source-line-no">1680</span><span id="line-1680">    }</span>
<span class="source-line-no">1681</span><span id="line-1681"></span>
<span class="source-line-no">1682</span><span id="line-1682">    @Override</span>
<span class="source-line-no">1683</span><span id="line-1683">    public ByteBuffer getRowByteBuffer() {</span>
<span class="source-line-no">1684</span><span id="line-1684">      return this.rowBuff;</span>
<span class="source-line-no">1685</span><span id="line-1685">    }</span>
<span class="source-line-no">1686</span><span id="line-1686"></span>
<span class="source-line-no">1687</span><span id="line-1687">    @Override</span>
<span class="source-line-no">1688</span><span id="line-1688">    public int getRowPosition() {</span>
<span class="source-line-no">1689</span><span id="line-1689">      return this.roffset;</span>
<span class="source-line-no">1690</span><span id="line-1690">    }</span>
<span class="source-line-no">1691</span><span id="line-1691"></span>
<span class="source-line-no">1692</span><span id="line-1692">    @Override</span>
<span class="source-line-no">1693</span><span id="line-1693">    public short getRowLength() {</span>
<span class="source-line-no">1694</span><span id="line-1694">      return this.rlength;</span>
<span class="source-line-no">1695</span><span id="line-1695">    }</span>
<span class="source-line-no">1696</span><span id="line-1696"></span>
<span class="source-line-no">1697</span><span id="line-1697">    @Override</span>
<span class="source-line-no">1698</span><span id="line-1698">    public long getTimestamp() {</span>
<span class="source-line-no">1699</span><span id="line-1699">      return HConstants.LATEST_TIMESTAMP;</span>
<span class="source-line-no">1700</span><span id="line-1700">    }</span>
<span class="source-line-no">1701</span><span id="line-1701"></span>
<span class="source-line-no">1702</span><span id="line-1702">    @Override</span>
<span class="source-line-no">1703</span><span id="line-1703">    public byte getTypeByte() {</span>
<span class="source-line-no">1704</span><span id="line-1704">      return KeyValue.Type.Maximum.getCode();</span>
<span class="source-line-no">1705</span><span id="line-1705">    }</span>
<span class="source-line-no">1706</span><span id="line-1706"></span>
<span class="source-line-no">1707</span><span id="line-1707">    @Override</span>
<span class="source-line-no">1708</span><span id="line-1708">    public Type getType() {</span>
<span class="source-line-no">1709</span><span id="line-1709">      throw new UnsupportedOperationException();</span>
<span class="source-line-no">1710</span><span id="line-1710">    }</span>
<span class="source-line-no">1711</span><span id="line-1711">  }</span>
<span class="source-line-no">1712</span><span id="line-1712"></span>
<span class="source-line-no">1713</span><span id="line-1713">  private static class LastOnRowByteBufferExtendedCell extends EmptyByteBufferExtendedCell {</span>
<span class="source-line-no">1714</span><span id="line-1714">    // @formatter:off</span>
<span class="source-line-no">1715</span><span id="line-1715">    private static final int FIXED_OVERHEAD = ClassSize.OBJECT // object</span>
<span class="source-line-no">1716</span><span id="line-1716">      + ClassSize.REFERENCE // rowBuff</span>
<span class="source-line-no">1717</span><span id="line-1717">      + Bytes.SIZEOF_INT // roffset</span>
<span class="source-line-no">1718</span><span id="line-1718">      + Bytes.SIZEOF_SHORT; // rlength</span>
<span class="source-line-no">1719</span><span id="line-1719">    // @formatter:on</span>
<span class="source-line-no">1720</span><span id="line-1720">    private final ByteBuffer rowBuff;</span>
<span class="source-line-no">1721</span><span id="line-1721">    private final int roffset;</span>
<span class="source-line-no">1722</span><span id="line-1722">    private final short rlength;</span>
<span class="source-line-no">1723</span><span id="line-1723"></span>
<span class="source-line-no">1724</span><span id="line-1724">    public LastOnRowByteBufferExtendedCell(final ByteBuffer row, int roffset, short rlength) {</span>
<span class="source-line-no">1725</span><span id="line-1725">      this.rowBuff = row;</span>
<span class="source-line-no">1726</span><span id="line-1726">      this.roffset = roffset;</span>
<span class="source-line-no">1727</span><span id="line-1727">      this.rlength = rlength;</span>
<span class="source-line-no">1728</span><span id="line-1728">    }</span>
<span class="source-line-no">1729</span><span id="line-1729"></span>
<span class="source-line-no">1730</span><span id="line-1730">    @Override</span>
<span class="source-line-no">1731</span><span id="line-1731">    public long heapSize() {</span>
<span class="source-line-no">1732</span><span id="line-1732">      if (this.rowBuff.hasArray()) {</span>
<span class="source-line-no">1733</span><span id="line-1733">        return ClassSize.align(FIXED_OVERHEAD + rlength);</span>
<span class="source-line-no">1734</span><span id="line-1734">      }</span>
<span class="source-line-no">1735</span><span id="line-1735">      return ClassSize.align(FIXED_OVERHEAD);</span>
<span class="source-line-no">1736</span><span id="line-1736">    }</span>
<span class="source-line-no">1737</span><span id="line-1737"></span>
<span class="source-line-no">1738</span><span id="line-1738">    @Override</span>
<span class="source-line-no">1739</span><span id="line-1739">    public ByteBuffer getRowByteBuffer() {</span>
<span class="source-line-no">1740</span><span id="line-1740">      return this.rowBuff;</span>
<span class="source-line-no">1741</span><span id="line-1741">    }</span>
<span class="source-line-no">1742</span><span id="line-1742"></span>
<span class="source-line-no">1743</span><span id="line-1743">    @Override</span>
<span class="source-line-no">1744</span><span id="line-1744">    public int getRowPosition() {</span>
<span class="source-line-no">1745</span><span id="line-1745">      return this.roffset;</span>
<span class="source-line-no">1746</span><span id="line-1746">    }</span>
<span class="source-line-no">1747</span><span id="line-1747"></span>
<span class="source-line-no">1748</span><span id="line-1748">    @Override</span>
<span class="source-line-no">1749</span><span id="line-1749">    public short getRowLength() {</span>
<span class="source-line-no">1750</span><span id="line-1750">      return this.rlength;</span>
<span class="source-line-no">1751</span><span id="line-1751">    }</span>
<span class="source-line-no">1752</span><span id="line-1752"></span>
<span class="source-line-no">1753</span><span id="line-1753">    @Override</span>
<span class="source-line-no">1754</span><span id="line-1754">    public long getTimestamp() {</span>
<span class="source-line-no">1755</span><span id="line-1755">      return PrivateConstants.OLDEST_TIMESTAMP;</span>
<span class="source-line-no">1756</span><span id="line-1756">    }</span>
<span class="source-line-no">1757</span><span id="line-1757"></span>
<span class="source-line-no">1758</span><span id="line-1758">    @Override</span>
<span class="source-line-no">1759</span><span id="line-1759">    public byte getTypeByte() {</span>
<span class="source-line-no">1760</span><span id="line-1760">      return KeyValue.Type.Minimum.getCode();</span>
<span class="source-line-no">1761</span><span id="line-1761">    }</span>
<span class="source-line-no">1762</span><span id="line-1762"></span>
<span class="source-line-no">1763</span><span id="line-1763">    @Override</span>
<span class="source-line-no">1764</span><span id="line-1764">    public Type getType() {</span>
<span class="source-line-no">1765</span><span id="line-1765">      throw new UnsupportedOperationException();</span>
<span class="source-line-no">1766</span><span id="line-1766">    }</span>
<span class="source-line-no">1767</span><span id="line-1767">  }</span>
<span class="source-line-no">1768</span><span id="line-1768"></span>
<span class="source-line-no">1769</span><span id="line-1769">  private static class FirstOnRowColByteBufferExtendedCell</span>
<span class="source-line-no">1770</span><span id="line-1770">    extends FirstOnRowByteBufferExtendedCell {</span>
<span class="source-line-no">1771</span><span id="line-1771">    // @formatter:off</span>
<span class="source-line-no">1772</span><span id="line-1772">    private static final int FIXED_OVERHEAD = FirstOnRowByteBufferExtendedCell.FIXED_OVERHEAD</span>
<span class="source-line-no">1773</span><span id="line-1773">      + ClassSize.REFERENCE * 2 // family buffer and column buffer</span>
<span class="source-line-no">1774</span><span id="line-1774">      + Bytes.SIZEOF_INT * 3 // famOffset, colOffset, colLength</span>
<span class="source-line-no">1775</span><span id="line-1775">      + Bytes.SIZEOF_BYTE; // famLength</span>
<span class="source-line-no">1776</span><span id="line-1776">    // @formatter:on</span>
<span class="source-line-no">1777</span><span id="line-1777">    private final ByteBuffer famBuff;</span>
<span class="source-line-no">1778</span><span id="line-1778">    private final int famOffset;</span>
<span class="source-line-no">1779</span><span id="line-1779">    private final byte famLength;</span>
<span class="source-line-no">1780</span><span id="line-1780">    private final ByteBuffer colBuff;</span>
<span class="source-line-no">1781</span><span id="line-1781">    private final int colOffset;</span>
<span class="source-line-no">1782</span><span id="line-1782">    private final int colLength;</span>
<span class="source-line-no">1783</span><span id="line-1783"></span>
<span class="source-line-no">1784</span><span id="line-1784">    public FirstOnRowColByteBufferExtendedCell(final ByteBuffer row, int roffset, short rlength,</span>
<span class="source-line-no">1785</span><span id="line-1785">      final ByteBuffer famBuff, final int famOffset, final byte famLength, final ByteBuffer col,</span>
<span class="source-line-no">1786</span><span id="line-1786">      final int colOffset, final int colLength) {</span>
<span class="source-line-no">1787</span><span id="line-1787">      super(row, roffset, rlength);</span>
<span class="source-line-no">1788</span><span id="line-1788">      this.famBuff = famBuff;</span>
<span class="source-line-no">1789</span><span id="line-1789">      this.famOffset = famOffset;</span>
<span class="source-line-no">1790</span><span id="line-1790">      this.famLength = famLength;</span>
<span class="source-line-no">1791</span><span id="line-1791">      this.colBuff = col;</span>
<span class="source-line-no">1792</span><span id="line-1792">      this.colOffset = colOffset;</span>
<span class="source-line-no">1793</span><span id="line-1793">      this.colLength = colLength;</span>
<span class="source-line-no">1794</span><span id="line-1794">    }</span>
<span class="source-line-no">1795</span><span id="line-1795"></span>
<span class="source-line-no">1796</span><span id="line-1796">    @Override</span>
<span class="source-line-no">1797</span><span id="line-1797">    public long heapSize() {</span>
<span class="source-line-no">1798</span><span id="line-1798">      if (famBuff.hasArray() &amp;&amp; colBuff.hasArray()) {</span>
<span class="source-line-no">1799</span><span id="line-1799">        return ClassSize.align(FIXED_OVERHEAD + famLength + colLength);</span>
<span class="source-line-no">1800</span><span id="line-1800">      } else if (famBuff.hasArray()) {</span>
<span class="source-line-no">1801</span><span id="line-1801">        return ClassSize.align(FIXED_OVERHEAD + famLength);</span>
<span class="source-line-no">1802</span><span id="line-1802">      } else if (colBuff.hasArray()) {</span>
<span class="source-line-no">1803</span><span id="line-1803">        return ClassSize.align(FIXED_OVERHEAD + colLength);</span>
<span class="source-line-no">1804</span><span id="line-1804">      } else {</span>
<span class="source-line-no">1805</span><span id="line-1805">        return ClassSize.align(FIXED_OVERHEAD);</span>
<span class="source-line-no">1806</span><span id="line-1806">      }</span>
<span class="source-line-no">1807</span><span id="line-1807">    }</span>
<span class="source-line-no">1808</span><span id="line-1808"></span>
<span class="source-line-no">1809</span><span id="line-1809">    @Override</span>
<span class="source-line-no">1810</span><span id="line-1810">    public ByteBuffer getFamilyByteBuffer() {</span>
<span class="source-line-no">1811</span><span id="line-1811">      return this.famBuff;</span>
<span class="source-line-no">1812</span><span id="line-1812">    }</span>
<span class="source-line-no">1813</span><span id="line-1813"></span>
<span class="source-line-no">1814</span><span id="line-1814">    @Override</span>
<span class="source-line-no">1815</span><span id="line-1815">    public int getFamilyPosition() {</span>
<span class="source-line-no">1816</span><span id="line-1816">      return this.famOffset;</span>
<span class="source-line-no">1817</span><span id="line-1817">    }</span>
<span class="source-line-no">1818</span><span id="line-1818"></span>
<span class="source-line-no">1819</span><span id="line-1819">    @Override</span>
<span class="source-line-no">1820</span><span id="line-1820">    public byte getFamilyLength() {</span>
<span class="source-line-no">1821</span><span id="line-1821">      return famLength;</span>
<span class="source-line-no">1822</span><span id="line-1822">    }</span>
<span class="source-line-no">1823</span><span id="line-1823"></span>
<span class="source-line-no">1824</span><span id="line-1824">    @Override</span>
<span class="source-line-no">1825</span><span id="line-1825">    public ByteBuffer getQualifierByteBuffer() {</span>
<span class="source-line-no">1826</span><span id="line-1826">      return this.colBuff;</span>
<span class="source-line-no">1827</span><span id="line-1827">    }</span>
<span class="source-line-no">1828</span><span id="line-1828"></span>
<span class="source-line-no">1829</span><span id="line-1829">    @Override</span>
<span class="source-line-no">1830</span><span id="line-1830">    public int getQualifierPosition() {</span>
<span class="source-line-no">1831</span><span id="line-1831">      return this.colOffset;</span>
<span class="source-line-no">1832</span><span id="line-1832">    }</span>
<span class="source-line-no">1833</span><span id="line-1833"></span>
<span class="source-line-no">1834</span><span id="line-1834">    @Override</span>
<span class="source-line-no">1835</span><span id="line-1835">    public int getQualifierLength() {</span>
<span class="source-line-no">1836</span><span id="line-1836">      return this.colLength;</span>
<span class="source-line-no">1837</span><span id="line-1837">    }</span>
<span class="source-line-no">1838</span><span id="line-1838">  }</span>
<span class="source-line-no">1839</span><span id="line-1839"></span>
<span class="source-line-no">1840</span><span id="line-1840">  private static class FirstOnRowColCell extends FirstOnRowCell {</span>
<span class="source-line-no">1841</span><span id="line-1841">    // @formatter:off</span>
<span class="source-line-no">1842</span><span id="line-1842">    private static final long FIXED_HEAPSIZE = (long) FirstOnRowCell.FIXED_HEAPSIZE</span>
<span class="source-line-no">1843</span><span id="line-1843">      + Bytes.SIZEOF_BYTE // flength</span>
<span class="source-line-no">1844</span><span id="line-1844">      + Bytes.SIZEOF_INT * 3 // foffset, qoffset, qlength</span>
<span class="source-line-no">1845</span><span id="line-1845">      + ClassSize.REFERENCE * 2; // fArray, qArray</span>
<span class="source-line-no">1846</span><span id="line-1846">    // @formatter:on</span>
<span class="source-line-no">1847</span><span id="line-1847">    private final byte[] fArray;</span>
<span class="source-line-no">1848</span><span id="line-1848">    private final int foffset;</span>
<span class="source-line-no">1849</span><span id="line-1849">    private final byte flength;</span>
<span class="source-line-no">1850</span><span id="line-1850">    private final byte[] qArray;</span>
<span class="source-line-no">1851</span><span id="line-1851">    private final int qoffset;</span>
<span class="source-line-no">1852</span><span id="line-1852">    private final int qlength;</span>
<span class="source-line-no">1853</span><span id="line-1853"></span>
<span class="source-line-no">1854</span><span id="line-1854">    public FirstOnRowColCell(byte[] rArray, int roffset, short rlength, byte[] fArray, int foffset,</span>
<span class="source-line-no">1855</span><span id="line-1855">      byte flength, byte[] qArray, int qoffset, int qlength) {</span>
<span class="source-line-no">1856</span><span id="line-1856">      super(rArray, roffset, rlength);</span>
<span class="source-line-no">1857</span><span id="line-1857">      this.fArray = fArray;</span>
<span class="source-line-no">1858</span><span id="line-1858">      this.foffset = foffset;</span>
<span class="source-line-no">1859</span><span id="line-1859">      this.flength = flength;</span>
<span class="source-line-no">1860</span><span id="line-1860">      this.qArray = qArray;</span>
<span class="source-line-no">1861</span><span id="line-1861">      this.qoffset = qoffset;</span>
<span class="source-line-no">1862</span><span id="line-1862">      this.qlength = qlength;</span>
<span class="source-line-no">1863</span><span id="line-1863">    }</span>
<span class="source-line-no">1864</span><span id="line-1864"></span>
<span class="source-line-no">1865</span><span id="line-1865">    @Override</span>
<span class="source-line-no">1866</span><span id="line-1866">    public long heapSize() {</span>
<span class="source-line-no">1867</span><span id="line-1867">      return ClassSize.align(FIXED_HEAPSIZE)</span>
<span class="source-line-no">1868</span><span id="line-1868">        // array overhead</span>
<span class="source-line-no">1869</span><span id="line-1869">        + (flength == 0 ? ClassSize.sizeOfByteArray(flength) : flength)</span>
<span class="source-line-no">1870</span><span id="line-1870">        + (qlength == 0 ? ClassSize.sizeOfByteArray(qlength) : qlength);</span>
<span class="source-line-no">1871</span><span id="line-1871">    }</span>
<span class="source-line-no">1872</span><span id="line-1872"></span>
<span class="source-line-no">1873</span><span id="line-1873">    @Override</span>
<span class="source-line-no">1874</span><span id="line-1874">    public byte[] getFamilyArray() {</span>
<span class="source-line-no">1875</span><span id="line-1875">      return this.fArray;</span>
<span class="source-line-no">1876</span><span id="line-1876">    }</span>
<span class="source-line-no">1877</span><span id="line-1877"></span>
<span class="source-line-no">1878</span><span id="line-1878">    @Override</span>
<span class="source-line-no">1879</span><span id="line-1879">    public int getFamilyOffset() {</span>
<span class="source-line-no">1880</span><span id="line-1880">      return this.foffset;</span>
<span class="source-line-no">1881</span><span id="line-1881">    }</span>
<span class="source-line-no">1882</span><span id="line-1882"></span>
<span class="source-line-no">1883</span><span id="line-1883">    @Override</span>
<span class="source-line-no">1884</span><span id="line-1884">    public byte getFamilyLength() {</span>
<span class="source-line-no">1885</span><span id="line-1885">      return this.flength;</span>
<span class="source-line-no">1886</span><span id="line-1886">    }</span>
<span class="source-line-no">1887</span><span id="line-1887"></span>
<span class="source-line-no">1888</span><span id="line-1888">    @Override</span>
<span class="source-line-no">1889</span><span id="line-1889">    public byte[] getQualifierArray() {</span>
<span class="source-line-no">1890</span><span id="line-1890">      return this.qArray;</span>
<span class="source-line-no">1891</span><span id="line-1891">    }</span>
<span class="source-line-no">1892</span><span id="line-1892"></span>
<span class="source-line-no">1893</span><span id="line-1893">    @Override</span>
<span class="source-line-no">1894</span><span id="line-1894">    public int getQualifierOffset() {</span>
<span class="source-line-no">1895</span><span id="line-1895">      return this.qoffset;</span>
<span class="source-line-no">1896</span><span id="line-1896">    }</span>
<span class="source-line-no">1897</span><span id="line-1897"></span>
<span class="source-line-no">1898</span><span id="line-1898">    @Override</span>
<span class="source-line-no">1899</span><span id="line-1899">    public int getQualifierLength() {</span>
<span class="source-line-no">1900</span><span id="line-1900">      return this.qlength;</span>
<span class="source-line-no">1901</span><span id="line-1901">    }</span>
<span class="source-line-no">1902</span><span id="line-1902">  }</span>
<span class="source-line-no">1903</span><span id="line-1903"></span>
<span class="source-line-no">1904</span><span id="line-1904">  private static class FirstOnRowColTSCell extends FirstOnRowColCell {</span>
<span class="source-line-no">1905</span><span id="line-1905">    // @formatter:off</span>
<span class="source-line-no">1906</span><span id="line-1906">    private static final long FIXED_HEAPSIZE = FirstOnRowColCell.FIXED_HEAPSIZE</span>
<span class="source-line-no">1907</span><span id="line-1907">      + Bytes.SIZEOF_LONG; // ts</span>
<span class="source-line-no">1908</span><span id="line-1908">    private long ts;</span>
<span class="source-line-no">1909</span><span id="line-1909">    // @formatter:on</span>
<span class="source-line-no">1910</span><span id="line-1910"></span>
<span class="source-line-no">1911</span><span id="line-1911">    public FirstOnRowColTSCell(byte[] rArray, int roffset, short rlength, byte[] fArray,</span>
<span class="source-line-no">1912</span><span id="line-1912">      int foffset, byte flength, byte[] qArray, int qoffset, int qlength, long ts) {</span>
<span class="source-line-no">1913</span><span id="line-1913">      super(rArray, roffset, rlength, fArray, foffset, flength, qArray, qoffset, qlength);</span>
<span class="source-line-no">1914</span><span id="line-1914">      this.ts = ts;</span>
<span class="source-line-no">1915</span><span id="line-1915">    }</span>
<span class="source-line-no">1916</span><span id="line-1916"></span>
<span class="source-line-no">1917</span><span id="line-1917">    @Override</span>
<span class="source-line-no">1918</span><span id="line-1918">    public long getTimestamp() {</span>
<span class="source-line-no">1919</span><span id="line-1919">      return this.ts;</span>
<span class="source-line-no">1920</span><span id="line-1920">    }</span>
<span class="source-line-no">1921</span><span id="line-1921"></span>
<span class="source-line-no">1922</span><span id="line-1922">    @Override</span>
<span class="source-line-no">1923</span><span id="line-1923">    public long heapSize() {</span>
<span class="source-line-no">1924</span><span id="line-1924">      return ClassSize.align(FIXED_HEAPSIZE);</span>
<span class="source-line-no">1925</span><span id="line-1925">    }</span>
<span class="source-line-no">1926</span><span id="line-1926">  }</span>
<span class="source-line-no">1927</span><span id="line-1927"></span>
<span class="source-line-no">1928</span><span id="line-1928">  private static class FirstOnRowColTSByteBufferExtendedCell</span>
<span class="source-line-no">1929</span><span id="line-1929">    extends FirstOnRowColByteBufferExtendedCell {</span>
<span class="source-line-no">1930</span><span id="line-1930">    // @formatter:off</span>
<span class="source-line-no">1931</span><span id="line-1931">    private static final int FIXED_OVERHEAD = FirstOnRowColByteBufferExtendedCell.FIXED_OVERHEAD</span>
<span class="source-line-no">1932</span><span id="line-1932">      + Bytes.SIZEOF_LONG; // ts</span>
<span class="source-line-no">1933</span><span id="line-1933">    private long ts;</span>
<span class="source-line-no">1934</span><span id="line-1934">    // @formatter:on</span>
<span class="source-line-no">1935</span><span id="line-1935"></span>
<span class="source-line-no">1936</span><span id="line-1936">    public FirstOnRowColTSByteBufferExtendedCell(ByteBuffer rBuffer, int roffset, short rlength,</span>
<span class="source-line-no">1937</span><span id="line-1937">      ByteBuffer fBuffer, int foffset, byte flength, ByteBuffer qBuffer, int qoffset, int qlength,</span>
<span class="source-line-no">1938</span><span id="line-1938">      long ts) {</span>
<span class="source-line-no">1939</span><span id="line-1939">      super(rBuffer, roffset, rlength, fBuffer, foffset, flength, qBuffer, qoffset, qlength);</span>
<span class="source-line-no">1940</span><span id="line-1940">      this.ts = ts;</span>
<span class="source-line-no">1941</span><span id="line-1941">    }</span>
<span class="source-line-no">1942</span><span id="line-1942"></span>
<span class="source-line-no">1943</span><span id="line-1943">    @Override</span>
<span class="source-line-no">1944</span><span id="line-1944">    public long getTimestamp() {</span>
<span class="source-line-no">1945</span><span id="line-1945">      return this.ts;</span>
<span class="source-line-no">1946</span><span id="line-1946">    }</span>
<span class="source-line-no">1947</span><span id="line-1947"></span>
<span class="source-line-no">1948</span><span id="line-1948">    @Override</span>
<span class="source-line-no">1949</span><span id="line-1949">    public long heapSize() {</span>
<span class="source-line-no">1950</span><span id="line-1950">      return ClassSize.align(FIXED_OVERHEAD + super.heapSize());</span>
<span class="source-line-no">1951</span><span id="line-1951">    }</span>
<span class="source-line-no">1952</span><span id="line-1952">  }</span>
<span class="source-line-no">1953</span><span id="line-1953"></span>
<span class="source-line-no">1954</span><span id="line-1954">  private static class LastOnRowCell extends EmptyCell {</span>
<span class="source-line-no">1955</span><span id="line-1955">    // @formatter:off</span>
<span class="source-line-no">1956</span><span id="line-1956">    private static final int FIXED_OVERHEAD = ClassSize.OBJECT // object</span>
<span class="source-line-no">1957</span><span id="line-1957">      + ClassSize.REFERENCE // row array</span>
<span class="source-line-no">1958</span><span id="line-1958">      + Bytes.SIZEOF_INT // row offset</span>
<span class="source-line-no">1959</span><span id="line-1959">      + Bytes.SIZEOF_SHORT; // row length</span>
<span class="source-line-no">1960</span><span id="line-1960">    // @formatter:on</span>
<span class="source-line-no">1961</span><span id="line-1961">    private final byte[] rowArray;</span>
<span class="source-line-no">1962</span><span id="line-1962">    private final int roffset;</span>
<span class="source-line-no">1963</span><span id="line-1963">    private final short rlength;</span>
<span class="source-line-no">1964</span><span id="line-1964"></span>
<span class="source-line-no">1965</span><span id="line-1965">    public LastOnRowCell(byte[] row, int roffset, short rlength) {</span>
<span class="source-line-no">1966</span><span id="line-1966">      this.rowArray = row;</span>
<span class="source-line-no">1967</span><span id="line-1967">      this.roffset = roffset;</span>
<span class="source-line-no">1968</span><span id="line-1968">      this.rlength = rlength;</span>
<span class="source-line-no">1969</span><span id="line-1969">    }</span>
<span class="source-line-no">1970</span><span id="line-1970"></span>
<span class="source-line-no">1971</span><span id="line-1971">    @Override</span>
<span class="source-line-no">1972</span><span id="line-1972">    public long heapSize() {</span>
<span class="source-line-no">1973</span><span id="line-1973">      return ClassSize.align(FIXED_OVERHEAD)</span>
<span class="source-line-no">1974</span><span id="line-1974">        // array overhead</span>
<span class="source-line-no">1975</span><span id="line-1975">        + (rlength == 0 ? ClassSize.sizeOfByteArray(rlength) : rlength);</span>
<span class="source-line-no">1976</span><span id="line-1976">    }</span>
<span class="source-line-no">1977</span><span id="line-1977"></span>
<span class="source-line-no">1978</span><span id="line-1978">    @Override</span>
<span class="source-line-no">1979</span><span id="line-1979">    public byte[] getRowArray() {</span>
<span class="source-line-no">1980</span><span id="line-1980">      return this.rowArray;</span>
<span class="source-line-no">1981</span><span id="line-1981">    }</span>
<span class="source-line-no">1982</span><span id="line-1982"></span>
<span class="source-line-no">1983</span><span id="line-1983">    @Override</span>
<span class="source-line-no">1984</span><span id="line-1984">    public int getRowOffset() {</span>
<span class="source-line-no">1985</span><span id="line-1985">      return this.roffset;</span>
<span class="source-line-no">1986</span><span id="line-1986">    }</span>
<span class="source-line-no">1987</span><span id="line-1987"></span>
<span class="source-line-no">1988</span><span id="line-1988">    @Override</span>
<span class="source-line-no">1989</span><span id="line-1989">    public short getRowLength() {</span>
<span class="source-line-no">1990</span><span id="line-1990">      return this.rlength;</span>
<span class="source-line-no">1991</span><span id="line-1991">    }</span>
<span class="source-line-no">1992</span><span id="line-1992"></span>
<span class="source-line-no">1993</span><span id="line-1993">    @Override</span>
<span class="source-line-no">1994</span><span id="line-1994">    public long getTimestamp() {</span>
<span class="source-line-no">1995</span><span id="line-1995">      return PrivateConstants.OLDEST_TIMESTAMP;</span>
<span class="source-line-no">1996</span><span id="line-1996">    }</span>
<span class="source-line-no">1997</span><span id="line-1997"></span>
<span class="source-line-no">1998</span><span id="line-1998">    @Override</span>
<span class="source-line-no">1999</span><span id="line-1999">    public byte getTypeByte() {</span>
<span class="source-line-no">2000</span><span id="line-2000">      return KeyValue.Type.Minimum.getCode();</span>
<span class="source-line-no">2001</span><span id="line-2001">    }</span>
<span class="source-line-no">2002</span><span id="line-2002"></span>
<span class="source-line-no">2003</span><span id="line-2003">    @Override</span>
<span class="source-line-no">2004</span><span id="line-2004">    public Type getType() {</span>
<span class="source-line-no">2005</span><span id="line-2005">      throw new UnsupportedOperationException();</span>
<span class="source-line-no">2006</span><span id="line-2006">    }</span>
<span class="source-line-no">2007</span><span id="line-2007">  }</span>
<span class="source-line-no">2008</span><span id="line-2008"></span>
<span class="source-line-no">2009</span><span id="line-2009">  private static class LastOnRowColCell extends LastOnRowCell {</span>
<span class="source-line-no">2010</span><span id="line-2010">    // @formatter:off</span>
<span class="source-line-no">2011</span><span id="line-2011">    private static final long FIXED_OVERHEAD = (long) LastOnRowCell.FIXED_OVERHEAD</span>
<span class="source-line-no">2012</span><span id="line-2012">      + ClassSize.REFERENCE * 2 // fArray and qArray</span>
<span class="source-line-no">2013</span><span id="line-2013">      + Bytes.SIZEOF_INT * 3 // foffset, qoffset, qlength</span>
<span class="source-line-no">2014</span><span id="line-2014">      + Bytes.SIZEOF_BYTE; // flength</span>
<span class="source-line-no">2015</span><span id="line-2015">    // @formatter:on</span>
<span class="source-line-no">2016</span><span id="line-2016">    private final byte[] fArray;</span>
<span class="source-line-no">2017</span><span id="line-2017">    private final int foffset;</span>
<span class="source-line-no">2018</span><span id="line-2018">    private final byte flength;</span>
<span class="source-line-no">2019</span><span id="line-2019">    private final byte[] qArray;</span>
<span class="source-line-no">2020</span><span id="line-2020">    private final int qoffset;</span>
<span class="source-line-no">2021</span><span id="line-2021">    private final int qlength;</span>
<span class="source-line-no">2022</span><span id="line-2022"></span>
<span class="source-line-no">2023</span><span id="line-2023">    public LastOnRowColCell(byte[] rArray, int roffset, short rlength, byte[] fArray, int foffset,</span>
<span class="source-line-no">2024</span><span id="line-2024">      byte flength, byte[] qArray, int qoffset, int qlength) {</span>
<span class="source-line-no">2025</span><span id="line-2025">      super(rArray, roffset, rlength);</span>
<span class="source-line-no">2026</span><span id="line-2026">      this.fArray = fArray;</span>
<span class="source-line-no">2027</span><span id="line-2027">      this.foffset = foffset;</span>
<span class="source-line-no">2028</span><span id="line-2028">      this.flength = flength;</span>
<span class="source-line-no">2029</span><span id="line-2029">      this.qArray = qArray;</span>
<span class="source-line-no">2030</span><span id="line-2030">      this.qoffset = qoffset;</span>
<span class="source-line-no">2031</span><span id="line-2031">      this.qlength = qlength;</span>
<span class="source-line-no">2032</span><span id="line-2032">    }</span>
<span class="source-line-no">2033</span><span id="line-2033"></span>
<span class="source-line-no">2034</span><span id="line-2034">    @Override</span>
<span class="source-line-no">2035</span><span id="line-2035">    public long heapSize() {</span>
<span class="source-line-no">2036</span><span id="line-2036">      return ClassSize.align(FIXED_OVERHEAD)</span>
<span class="source-line-no">2037</span><span id="line-2037">        // array overhead</span>
<span class="source-line-no">2038</span><span id="line-2038">        + (flength == 0 ? ClassSize.sizeOfByteArray(flength) : flength)</span>
<span class="source-line-no">2039</span><span id="line-2039">        + (qlength == 0 ? ClassSize.sizeOfByteArray(qlength) : qlength);</span>
<span class="source-line-no">2040</span><span id="line-2040">    }</span>
<span class="source-line-no">2041</span><span id="line-2041"></span>
<span class="source-line-no">2042</span><span id="line-2042">    @Override</span>
<span class="source-line-no">2043</span><span id="line-2043">    public byte[] getFamilyArray() {</span>
<span class="source-line-no">2044</span><span id="line-2044">      return this.fArray;</span>
<span class="source-line-no">2045</span><span id="line-2045">    }</span>
<span class="source-line-no">2046</span><span id="line-2046"></span>
<span class="source-line-no">2047</span><span id="line-2047">    @Override</span>
<span class="source-line-no">2048</span><span id="line-2048">    public int getFamilyOffset() {</span>
<span class="source-line-no">2049</span><span id="line-2049">      return this.foffset;</span>
<span class="source-line-no">2050</span><span id="line-2050">    }</span>
<span class="source-line-no">2051</span><span id="line-2051"></span>
<span class="source-line-no">2052</span><span id="line-2052">    @Override</span>
<span class="source-line-no">2053</span><span id="line-2053">    public byte getFamilyLength() {</span>
<span class="source-line-no">2054</span><span id="line-2054">      return this.flength;</span>
<span class="source-line-no">2055</span><span id="line-2055">    }</span>
<span class="source-line-no">2056</span><span id="line-2056"></span>
<span class="source-line-no">2057</span><span id="line-2057">    @Override</span>
<span class="source-line-no">2058</span><span id="line-2058">    public byte[] getQualifierArray() {</span>
<span class="source-line-no">2059</span><span id="line-2059">      return this.qArray;</span>
<span class="source-line-no">2060</span><span id="line-2060">    }</span>
<span class="source-line-no">2061</span><span id="line-2061"></span>
<span class="source-line-no">2062</span><span id="line-2062">    @Override</span>
<span class="source-line-no">2063</span><span id="line-2063">    public int getQualifierOffset() {</span>
<span class="source-line-no">2064</span><span id="line-2064">      return this.qoffset;</span>
<span class="source-line-no">2065</span><span id="line-2065">    }</span>
<span class="source-line-no">2066</span><span id="line-2066"></span>
<span class="source-line-no">2067</span><span id="line-2067">    @Override</span>
<span class="source-line-no">2068</span><span id="line-2068">    public int getQualifierLength() {</span>
<span class="source-line-no">2069</span><span id="line-2069">      return this.qlength;</span>
<span class="source-line-no">2070</span><span id="line-2070">    }</span>
<span class="source-line-no">2071</span><span id="line-2071">  }</span>
<span class="source-line-no">2072</span><span id="line-2072"></span>
<span class="source-line-no">2073</span><span id="line-2073">  private static class LastOnRowColByteBufferExtendedCell extends LastOnRowByteBufferExtendedCell {</span>
<span class="source-line-no">2074</span><span id="line-2074">    // @formatter:off</span>
<span class="source-line-no">2075</span><span id="line-2075">    private static final int FIXED_OVERHEAD = LastOnRowByteBufferExtendedCell.FIXED_OVERHEAD</span>
<span class="source-line-no">2076</span><span id="line-2076">      + ClassSize.REFERENCE * 2 // fBuffer and qBuffer</span>
<span class="source-line-no">2077</span><span id="line-2077">      + Bytes.SIZEOF_INT * 3 // foffset, qoffset, qlength</span>
<span class="source-line-no">2078</span><span id="line-2078">      + Bytes.SIZEOF_BYTE; // flength</span>
<span class="source-line-no">2079</span><span id="line-2079">    // @formatter:on</span>
<span class="source-line-no">2080</span><span id="line-2080">    private final ByteBuffer fBuffer;</span>
<span class="source-line-no">2081</span><span id="line-2081">    private final int foffset;</span>
<span class="source-line-no">2082</span><span id="line-2082">    private final byte flength;</span>
<span class="source-line-no">2083</span><span id="line-2083">    private final ByteBuffer qBuffer;</span>
<span class="source-line-no">2084</span><span id="line-2084">    private final int qoffset;</span>
<span class="source-line-no">2085</span><span id="line-2085">    private final int qlength;</span>
<span class="source-line-no">2086</span><span id="line-2086"></span>
<span class="source-line-no">2087</span><span id="line-2087">    public LastOnRowColByteBufferExtendedCell(ByteBuffer rBuffer, int roffset, short rlength,</span>
<span class="source-line-no">2088</span><span id="line-2088">      ByteBuffer fBuffer, int foffset, byte flength, ByteBuffer qBuffer, int qoffset, int qlength) {</span>
<span class="source-line-no">2089</span><span id="line-2089">      super(rBuffer, roffset, rlength);</span>
<span class="source-line-no">2090</span><span id="line-2090">      this.fBuffer = fBuffer;</span>
<span class="source-line-no">2091</span><span id="line-2091">      this.foffset = foffset;</span>
<span class="source-line-no">2092</span><span id="line-2092">      this.flength = flength;</span>
<span class="source-line-no">2093</span><span id="line-2093">      this.qBuffer = qBuffer;</span>
<span class="source-line-no">2094</span><span id="line-2094">      this.qoffset = qoffset;</span>
<span class="source-line-no">2095</span><span id="line-2095">      this.qlength = qlength;</span>
<span class="source-line-no">2096</span><span id="line-2096">    }</span>
<span class="source-line-no">2097</span><span id="line-2097"></span>
<span class="source-line-no">2098</span><span id="line-2098">    @Override</span>
<span class="source-line-no">2099</span><span id="line-2099">    public long heapSize() {</span>
<span class="source-line-no">2100</span><span id="line-2100">      if (fBuffer.hasArray() &amp;&amp; qBuffer.hasArray()) {</span>
<span class="source-line-no">2101</span><span id="line-2101">        return ClassSize.align(FIXED_OVERHEAD + flength + qlength);</span>
<span class="source-line-no">2102</span><span id="line-2102">      } else if (fBuffer.hasArray()) {</span>
<span class="source-line-no">2103</span><span id="line-2103">        return ClassSize.align(FIXED_OVERHEAD + flength);</span>
<span class="source-line-no">2104</span><span id="line-2104">      } else if (qBuffer.hasArray()) {</span>
<span class="source-line-no">2105</span><span id="line-2105">        return ClassSize.align(FIXED_OVERHEAD + qlength);</span>
<span class="source-line-no">2106</span><span id="line-2106">      } else {</span>
<span class="source-line-no">2107</span><span id="line-2107">        return ClassSize.align(FIXED_OVERHEAD);</span>
<span class="source-line-no">2108</span><span id="line-2108">      }</span>
<span class="source-line-no">2109</span><span id="line-2109">    }</span>
<span class="source-line-no">2110</span><span id="line-2110"></span>
<span class="source-line-no">2111</span><span id="line-2111">    @Override</span>
<span class="source-line-no">2112</span><span id="line-2112">    public ByteBuffer getFamilyByteBuffer() {</span>
<span class="source-line-no">2113</span><span id="line-2113">      return this.fBuffer;</span>
<span class="source-line-no">2114</span><span id="line-2114">    }</span>
<span class="source-line-no">2115</span><span id="line-2115"></span>
<span class="source-line-no">2116</span><span id="line-2116">    @Override</span>
<span class="source-line-no">2117</span><span id="line-2117">    public int getFamilyPosition() {</span>
<span class="source-line-no">2118</span><span id="line-2118">      return this.foffset;</span>
<span class="source-line-no">2119</span><span id="line-2119">    }</span>
<span class="source-line-no">2120</span><span id="line-2120"></span>
<span class="source-line-no">2121</span><span id="line-2121">    @Override</span>
<span class="source-line-no">2122</span><span id="line-2122">    public byte getFamilyLength() {</span>
<span class="source-line-no">2123</span><span id="line-2123">      return this.flength;</span>
<span class="source-line-no">2124</span><span id="line-2124">    }</span>
<span class="source-line-no">2125</span><span id="line-2125"></span>
<span class="source-line-no">2126</span><span id="line-2126">    @Override</span>
<span class="source-line-no">2127</span><span id="line-2127">    public ByteBuffer getQualifierByteBuffer() {</span>
<span class="source-line-no">2128</span><span id="line-2128">      return this.qBuffer;</span>
<span class="source-line-no">2129</span><span id="line-2129">    }</span>
<span class="source-line-no">2130</span><span id="line-2130"></span>
<span class="source-line-no">2131</span><span id="line-2131">    @Override</span>
<span class="source-line-no">2132</span><span id="line-2132">    public int getQualifierPosition() {</span>
<span class="source-line-no">2133</span><span id="line-2133">      return this.qoffset;</span>
<span class="source-line-no">2134</span><span id="line-2134">    }</span>
<span class="source-line-no">2135</span><span id="line-2135"></span>
<span class="source-line-no">2136</span><span id="line-2136">    @Override</span>
<span class="source-line-no">2137</span><span id="line-2137">    public int getQualifierLength() {</span>
<span class="source-line-no">2138</span><span id="line-2138">      return this.qlength;</span>
<span class="source-line-no">2139</span><span id="line-2139">    }</span>
<span class="source-line-no">2140</span><span id="line-2140">  }</span>
<span class="source-line-no">2141</span><span id="line-2141"></span>
<span class="source-line-no">2142</span><span id="line-2142">  private static class FirstOnRowDeleteFamilyCell extends EmptyCell {</span>
<span class="source-line-no">2143</span><span id="line-2143">    // @formatter:off</span>
<span class="source-line-no">2144</span><span id="line-2144">    private static final int FIXED_OVERHEAD = ClassSize.OBJECT // object</span>
<span class="source-line-no">2145</span><span id="line-2145">      + ClassSize.REFERENCE * 2 // fBuffer and qBuffer</span>
<span class="source-line-no">2146</span><span id="line-2146">      + Bytes.SIZEOF_INT * 3 // foffset, qoffset, qlength</span>
<span class="source-line-no">2147</span><span id="line-2147">      + Bytes.SIZEOF_BYTE; // flength</span>
<span class="source-line-no">2148</span><span id="line-2148">    // @formatter:on</span>
<span class="source-line-no">2149</span><span id="line-2149">    private final byte[] row;</span>
<span class="source-line-no">2150</span><span id="line-2150">    private final byte[] fam;</span>
<span class="source-line-no">2151</span><span id="line-2151"></span>
<span class="source-line-no">2152</span><span id="line-2152">    public FirstOnRowDeleteFamilyCell(byte[] row, byte[] fam) {</span>
<span class="source-line-no">2153</span><span id="line-2153">      this.row = row;</span>
<span class="source-line-no">2154</span><span id="line-2154">      this.fam = fam;</span>
<span class="source-line-no">2155</span><span id="line-2155">    }</span>
<span class="source-line-no">2156</span><span id="line-2156"></span>
<span class="source-line-no">2157</span><span id="line-2157">    @Override</span>
<span class="source-line-no">2158</span><span id="line-2158">    public long heapSize() {</span>
<span class="source-line-no">2159</span><span id="line-2159">      return ClassSize.align(FIXED_OVERHEAD)</span>
<span class="source-line-no">2160</span><span id="line-2160">        // array overhead</span>
<span class="source-line-no">2161</span><span id="line-2161">        + (getRowLength() == 0 ? ClassSize.sizeOfByteArray(getRowLength()) : getRowLength())</span>
<span class="source-line-no">2162</span><span id="line-2162">        + (getFamilyLength() == 0</span>
<span class="source-line-no">2163</span><span id="line-2163">          ? ClassSize.sizeOfByteArray(getFamilyLength())</span>
<span class="source-line-no">2164</span><span id="line-2164">          : getFamilyLength());</span>
<span class="source-line-no">2165</span><span id="line-2165">    }</span>
<span class="source-line-no">2166</span><span id="line-2166"></span>
<span class="source-line-no">2167</span><span id="line-2167">    @Override</span>
<span class="source-line-no">2168</span><span id="line-2168">    public byte[] getRowArray() {</span>
<span class="source-line-no">2169</span><span id="line-2169">      return this.row;</span>
<span class="source-line-no">2170</span><span id="line-2170">    }</span>
<span class="source-line-no">2171</span><span id="line-2171"></span>
<span class="source-line-no">2172</span><span id="line-2172">    @Override</span>
<span class="source-line-no">2173</span><span id="line-2173">    public short getRowLength() {</span>
<span class="source-line-no">2174</span><span id="line-2174">      return (short) this.row.length;</span>
<span class="source-line-no">2175</span><span id="line-2175">    }</span>
<span class="source-line-no">2176</span><span id="line-2176"></span>
<span class="source-line-no">2177</span><span id="line-2177">    @Override</span>
<span class="source-line-no">2178</span><span id="line-2178">    public byte[] getFamilyArray() {</span>
<span class="source-line-no">2179</span><span id="line-2179">      return this.fam;</span>
<span class="source-line-no">2180</span><span id="line-2180">    }</span>
<span class="source-line-no">2181</span><span id="line-2181"></span>
<span class="source-line-no">2182</span><span id="line-2182">    @Override</span>
<span class="source-line-no">2183</span><span id="line-2183">    public byte getFamilyLength() {</span>
<span class="source-line-no">2184</span><span id="line-2184">      return (byte) this.fam.length;</span>
<span class="source-line-no">2185</span><span id="line-2185">    }</span>
<span class="source-line-no">2186</span><span id="line-2186"></span>
<span class="source-line-no">2187</span><span id="line-2187">    @Override</span>
<span class="source-line-no">2188</span><span id="line-2188">    public long getTimestamp() {</span>
<span class="source-line-no">2189</span><span id="line-2189">      return HConstants.LATEST_TIMESTAMP;</span>
<span class="source-line-no">2190</span><span id="line-2190">    }</span>
<span class="source-line-no">2191</span><span id="line-2191"></span>
<span class="source-line-no">2192</span><span id="line-2192">    @Override</span>
<span class="source-line-no">2193</span><span id="line-2193">    public byte getTypeByte() {</span>
<span class="source-line-no">2194</span><span id="line-2194">      return KeyValue.Type.DeleteFamily.getCode();</span>
<span class="source-line-no">2195</span><span id="line-2195">    }</span>
<span class="source-line-no">2196</span><span id="line-2196"></span>
<span class="source-line-no">2197</span><span id="line-2197">    @Override</span>
<span class="source-line-no">2198</span><span id="line-2198">    public Type getType() {</span>
<span class="source-line-no">2199</span><span id="line-2199">      return Type.DeleteFamily;</span>
<span class="source-line-no">2200</span><span id="line-2200">    }</span>
<span class="source-line-no">2201</span><span id="line-2201">  }</span>
<span class="source-line-no">2202</span><span id="line-2202"></span>
<span class="source-line-no">2203</span><span id="line-2203">  /**</span>
<span class="source-line-no">2204</span><span id="line-2204">   * Writes the Cell's key part as it would have serialized in a KeyValue. The format is &amp;lt;2 bytes</span>
<span class="source-line-no">2205</span><span id="line-2205">   * rk len&amp;gt;&amp;lt;rk&amp;gt;&amp;lt;1 byte cf len&amp;gt;&amp;lt;cf&amp;gt;&amp;lt;qualifier&amp;gt;&amp;lt;8 bytes</span>
<span class="source-line-no">2206</span><span id="line-2206">   * timestamp&amp;gt;&amp;lt;1 byte type&amp;gt;</span>
<span class="source-line-no">2207</span><span id="line-2207">   */</span>
<span class="source-line-no">2208</span><span id="line-2208">  public static void writeFlatKey(ExtendedCell cell, DataOutput out) throws IOException {</span>
<span class="source-line-no">2209</span><span id="line-2209">    short rowLen = cell.getRowLength();</span>
<span class="source-line-no">2210</span><span id="line-2210">    byte fLen = cell.getFamilyLength();</span>
<span class="source-line-no">2211</span><span id="line-2211">    int qLen = cell.getQualifierLength();</span>
<span class="source-line-no">2212</span><span id="line-2212">    // Using just one if/else loop instead of every time checking before writing every</span>
<span class="source-line-no">2213</span><span id="line-2213">    // component of cell</span>
<span class="source-line-no">2214</span><span id="line-2214">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2215</span><span id="line-2215">      out.writeShort(rowLen);</span>
<span class="source-line-no">2216</span><span id="line-2216">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
<span class="source-line-no">2217</span><span id="line-2217">        ((ByteBufferExtendedCell) cell).getRowPosition(), rowLen);</span>
<span class="source-line-no">2218</span><span id="line-2218">      out.writeByte(fLen);</span>
<span class="source-line-no">2219</span><span id="line-2219">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
<span class="source-line-no">2220</span><span id="line-2220">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), fLen);</span>
<span class="source-line-no">2221</span><span id="line-2221">      ByteBufferUtils.copyBufferToStream(out,</span>
<span class="source-line-no">2222</span><span id="line-2222">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
<span class="source-line-no">2223</span><span id="line-2223">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), qLen);</span>
<span class="source-line-no">2224</span><span id="line-2224">    } else {</span>
<span class="source-line-no">2225</span><span id="line-2225">      out.writeShort(rowLen);</span>
<span class="source-line-no">2226</span><span id="line-2226">      out.write(cell.getRowArray(), cell.getRowOffset(), rowLen);</span>
<span class="source-line-no">2227</span><span id="line-2227">      out.writeByte(fLen);</span>
<span class="source-line-no">2228</span><span id="line-2228">      out.write(cell.getFamilyArray(), cell.getFamilyOffset(), fLen);</span>
<span class="source-line-no">2229</span><span id="line-2229">      out.write(cell.getQualifierArray(), cell.getQualifierOffset(), qLen);</span>
<span class="source-line-no">2230</span><span id="line-2230">    }</span>
<span class="source-line-no">2231</span><span id="line-2231">    out.writeLong(cell.getTimestamp());</span>
<span class="source-line-no">2232</span><span id="line-2232">    out.writeByte(cell.getTypeByte());</span>
<span class="source-line-no">2233</span><span id="line-2233">  }</span>
<span class="source-line-no">2234</span><span id="line-2234"></span>
<span class="source-line-no">2235</span><span id="line-2235">  public static int writeFlatKey(ExtendedCell cell, OutputStream out) throws IOException {</span>
<span class="source-line-no">2236</span><span id="line-2236">    short rowLen = cell.getRowLength();</span>
<span class="source-line-no">2237</span><span id="line-2237">    byte fLen = cell.getFamilyLength();</span>
<span class="source-line-no">2238</span><span id="line-2238">    int qLen = cell.getQualifierLength();</span>
<span class="source-line-no">2239</span><span id="line-2239">    // Using just one if/else loop instead of every time checking before writing every</span>
<span class="source-line-no">2240</span><span id="line-2240">    // component of cell</span>
<span class="source-line-no">2241</span><span id="line-2241">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2242</span><span id="line-2242">      StreamUtils.writeShort(out, rowLen);</span>
<span class="source-line-no">2243</span><span id="line-2243">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
<span class="source-line-no">2244</span><span id="line-2244">        ((ByteBufferExtendedCell) cell).getRowPosition(), rowLen);</span>
<span class="source-line-no">2245</span><span id="line-2245">      out.write(fLen);</span>
<span class="source-line-no">2246</span><span id="line-2246">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
<span class="source-line-no">2247</span><span id="line-2247">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), fLen);</span>
<span class="source-line-no">2248</span><span id="line-2248">      ByteBufferUtils.copyBufferToStream(out,</span>
<span class="source-line-no">2249</span><span id="line-2249">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
<span class="source-line-no">2250</span><span id="line-2250">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), qLen);</span>
<span class="source-line-no">2251</span><span id="line-2251">    } else {</span>
<span class="source-line-no">2252</span><span id="line-2252">      StreamUtils.writeShort(out, rowLen);</span>
<span class="source-line-no">2253</span><span id="line-2253">      out.write(cell.getRowArray(), cell.getRowOffset(), rowLen);</span>
<span class="source-line-no">2254</span><span id="line-2254">      out.write(fLen);</span>
<span class="source-line-no">2255</span><span id="line-2255">      out.write(cell.getFamilyArray(), cell.getFamilyOffset(), fLen);</span>
<span class="source-line-no">2256</span><span id="line-2256">      out.write(cell.getQualifierArray(), cell.getQualifierOffset(), qLen);</span>
<span class="source-line-no">2257</span><span id="line-2257">    }</span>
<span class="source-line-no">2258</span><span id="line-2258">    StreamUtils.writeLong(out, cell.getTimestamp());</span>
<span class="source-line-no">2259</span><span id="line-2259">    out.write(cell.getTypeByte());</span>
<span class="source-line-no">2260</span><span id="line-2260">    return Bytes.SIZEOF_SHORT + rowLen + Bytes.SIZEOF_BYTE + fLen + qLen + Bytes.SIZEOF_LONG</span>
<span class="source-line-no">2261</span><span id="line-2261">      + Bytes.SIZEOF_BYTE;</span>
<span class="source-line-no">2262</span><span id="line-2262">  }</span>
<span class="source-line-no">2263</span><span id="line-2263"></span>
<span class="source-line-no">2264</span><span id="line-2264">  /**</span>
<span class="source-line-no">2265</span><span id="line-2265">   * Sets the given seqId to the cell. Marked as audience Private as of 1.2.0. Setting a Cell</span>
<span class="source-line-no">2266</span><span id="line-2266">   * sequenceid is an internal implementation detail not for general public use.</span>
<span class="source-line-no">2267</span><span id="line-2267">   * @throws IOException when the passed cell is not of type {@link ExtendedCell}</span>
<span class="source-line-no">2268</span><span id="line-2268">   */</span>
<span class="source-line-no">2269</span><span id="line-2269">  public static void setSequenceId(Cell cell, long seqId) throws IOException {</span>
<span class="source-line-no">2270</span><span id="line-2270">    if (cell instanceof ExtendedCell) {</span>
<span class="source-line-no">2271</span><span id="line-2271">      ((ExtendedCell) cell).setSequenceId(seqId);</span>
<span class="source-line-no">2272</span><span id="line-2272">    } else {</span>
<span class="source-line-no">2273</span><span id="line-2273">      throw new IOException(</span>
<span class="source-line-no">2274</span><span id="line-2274">        new UnsupportedOperationException("Cell is not of type " + ExtendedCell.class.getName()));</span>
<span class="source-line-no">2275</span><span id="line-2275">    }</span>
<span class="source-line-no">2276</span><span id="line-2276">  }</span>
<span class="source-line-no">2277</span><span id="line-2277"></span>
<span class="source-line-no">2278</span><span id="line-2278">  /**</span>
<span class="source-line-no">2279</span><span id="line-2279">   * Sets the given timestamp to the cell.</span>
<span class="source-line-no">2280</span><span id="line-2280">   * @throws IOException when the passed cell is not of type {@link ExtendedCell}</span>
<span class="source-line-no">2281</span><span id="line-2281">   */</span>
<span class="source-line-no">2282</span><span id="line-2282">  public static void setTimestamp(Cell cell, long ts) throws IOException {</span>
<span class="source-line-no">2283</span><span id="line-2283">    if (cell instanceof ExtendedCell) {</span>
<span class="source-line-no">2284</span><span id="line-2284">      ((ExtendedCell) cell).setTimestamp(ts);</span>
<span class="source-line-no">2285</span><span id="line-2285">    } else {</span>
<span class="source-line-no">2286</span><span id="line-2286">      throw new IOException(</span>
<span class="source-line-no">2287</span><span id="line-2287">        new UnsupportedOperationException("Cell is not of type " + ExtendedCell.class.getName()));</span>
<span class="source-line-no">2288</span><span id="line-2288">    }</span>
<span class="source-line-no">2289</span><span id="line-2289">  }</span>
<span class="source-line-no">2290</span><span id="line-2290"></span>
<span class="source-line-no">2291</span><span id="line-2291">  /**</span>
<span class="source-line-no">2292</span><span id="line-2292">   * Sets the given timestamp to the cell.</span>
<span class="source-line-no">2293</span><span id="line-2293">   * @throws IOException when the passed cell is not of type {@link ExtendedCell}</span>
<span class="source-line-no">2294</span><span id="line-2294">   */</span>
<span class="source-line-no">2295</span><span id="line-2295">  public static void setTimestamp(Cell cell, byte[] ts) throws IOException {</span>
<span class="source-line-no">2296</span><span id="line-2296">    if (cell instanceof ExtendedCell) {</span>
<span class="source-line-no">2297</span><span id="line-2297">      ((ExtendedCell) cell).setTimestamp(ts);</span>
<span class="source-line-no">2298</span><span id="line-2298">    } else {</span>
<span class="source-line-no">2299</span><span id="line-2299">      throw new IOException(</span>
<span class="source-line-no">2300</span><span id="line-2300">        new UnsupportedOperationException("Cell is not of type " + ExtendedCell.class.getName()));</span>
<span class="source-line-no">2301</span><span id="line-2301">    }</span>
<span class="source-line-no">2302</span><span id="line-2302">  }</span>
<span class="source-line-no">2303</span><span id="line-2303"></span>
<span class="source-line-no">2304</span><span id="line-2304">  /**</span>
<span class="source-line-no">2305</span><span id="line-2305">   * Sets the given timestamp to the cell iff current timestamp is</span>
<span class="source-line-no">2306</span><span id="line-2306">   * {@link HConstants#LATEST_TIMESTAMP}.</span>
<span class="source-line-no">2307</span><span id="line-2307">   * @return True if cell timestamp is modified.</span>
<span class="source-line-no">2308</span><span id="line-2308">   * @throws IOException when the passed cell is not of type {@link ExtendedCell}</span>
<span class="source-line-no">2309</span><span id="line-2309">   */</span>
<span class="source-line-no">2310</span><span id="line-2310">  public static boolean updateLatestStamp(ExtendedCell cell, long ts) throws IOException {</span>
<span class="source-line-no">2311</span><span id="line-2311">    if (cell.getTimestamp() == HConstants.LATEST_TIMESTAMP) {</span>
<span class="source-line-no">2312</span><span id="line-2312">      cell.setTimestamp(ts);</span>
<span class="source-line-no">2313</span><span id="line-2313">      return true;</span>
<span class="source-line-no">2314</span><span id="line-2314">    }</span>
<span class="source-line-no">2315</span><span id="line-2315">    return false;</span>
<span class="source-line-no">2316</span><span id="line-2316">  }</span>
<span class="source-line-no">2317</span><span id="line-2317"></span>
<span class="source-line-no">2318</span><span id="line-2318">  /**</span>
<span class="source-line-no">2319</span><span id="line-2319">   * Sets the given timestamp to the cell iff current timestamp is</span>
<span class="source-line-no">2320</span><span id="line-2320">   * {@link HConstants#LATEST_TIMESTAMP}.</span>
<span class="source-line-no">2321</span><span id="line-2321">   * @return True if cell timestamp is modified.</span>
<span class="source-line-no">2322</span><span id="line-2322">   * @throws IOException when the passed cell is not of type {@link ExtendedCell}</span>
<span class="source-line-no">2323</span><span id="line-2323">   */</span>
<span class="source-line-no">2324</span><span id="line-2324">  public static boolean updateLatestStamp(Cell cell, byte[] ts) throws IOException {</span>
<span class="source-line-no">2325</span><span id="line-2325">    if (cell.getTimestamp() == HConstants.LATEST_TIMESTAMP) {</span>
<span class="source-line-no">2326</span><span id="line-2326">      setTimestamp(cell, ts);</span>
<span class="source-line-no">2327</span><span id="line-2327">      return true;</span>
<span class="source-line-no">2328</span><span id="line-2328">    }</span>
<span class="source-line-no">2329</span><span id="line-2329">    return false;</span>
<span class="source-line-no">2330</span><span id="line-2330">  }</span>
<span class="source-line-no">2331</span><span id="line-2331"></span>
<span class="source-line-no">2332</span><span id="line-2332">  /**</span>
<span class="source-line-no">2333</span><span id="line-2333">   * Writes the row from the given cell to the output stream</span>
<span class="source-line-no">2334</span><span id="line-2334">   * @param out     The outputstream to which the data has to be written</span>
<span class="source-line-no">2335</span><span id="line-2335">   * @param cell    The cell whose contents has to be written</span>
<span class="source-line-no">2336</span><span id="line-2336">   * @param rlength the row length</span>
<span class="source-line-no">2337</span><span id="line-2337">   */</span>
<span class="source-line-no">2338</span><span id="line-2338">  public static void writeRow(OutputStream out, Cell cell, short rlength) throws IOException {</span>
<span class="source-line-no">2339</span><span id="line-2339">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2340</span><span id="line-2340">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
<span class="source-line-no">2341</span><span id="line-2341">        ((ByteBufferExtendedCell) cell).getRowPosition(), rlength);</span>
<span class="source-line-no">2342</span><span id="line-2342">    } else {</span>
<span class="source-line-no">2343</span><span id="line-2343">      out.write(cell.getRowArray(), cell.getRowOffset(), rlength);</span>
<span class="source-line-no">2344</span><span id="line-2344">    }</span>
<span class="source-line-no">2345</span><span id="line-2345">  }</span>
<span class="source-line-no">2346</span><span id="line-2346"></span>
<span class="source-line-no">2347</span><span id="line-2347">  /**</span>
<span class="source-line-no">2348</span><span id="line-2348">   * Writes the family from the given cell to the output stream</span>
<span class="source-line-no">2349</span><span id="line-2349">   * @param out     The outputstream to which the data has to be written</span>
<span class="source-line-no">2350</span><span id="line-2350">   * @param cell    The cell whose contents has to be written</span>
<span class="source-line-no">2351</span><span id="line-2351">   * @param flength the family length</span>
<span class="source-line-no">2352</span><span id="line-2352">   */</span>
<span class="source-line-no">2353</span><span id="line-2353">  public static void writeFamily(OutputStream out, Cell cell, byte flength) throws IOException {</span>
<span class="source-line-no">2354</span><span id="line-2354">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2355</span><span id="line-2355">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
<span class="source-line-no">2356</span><span id="line-2356">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), flength);</span>
<span class="source-line-no">2357</span><span id="line-2357">    } else {</span>
<span class="source-line-no">2358</span><span id="line-2358">      out.write(cell.getFamilyArray(), cell.getFamilyOffset(), flength);</span>
<span class="source-line-no">2359</span><span id="line-2359">    }</span>
<span class="source-line-no">2360</span><span id="line-2360">  }</span>
<span class="source-line-no">2361</span><span id="line-2361"></span>
<span class="source-line-no">2362</span><span id="line-2362">  /**</span>
<span class="source-line-no">2363</span><span id="line-2363">   * Writes the qualifier from the given cell to the output stream</span>
<span class="source-line-no">2364</span><span id="line-2364">   * @param out     The outputstream to which the data has to be written</span>
<span class="source-line-no">2365</span><span id="line-2365">   * @param cell    The cell whose contents has to be written</span>
<span class="source-line-no">2366</span><span id="line-2366">   * @param qlength the qualifier length</span>
<span class="source-line-no">2367</span><span id="line-2367">   */</span>
<span class="source-line-no">2368</span><span id="line-2368">  public static void writeQualifier(OutputStream out, Cell cell, int qlength) throws IOException {</span>
<span class="source-line-no">2369</span><span id="line-2369">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2370</span><span id="line-2370">      ByteBufferUtils.copyBufferToStream(out,</span>
<span class="source-line-no">2371</span><span id="line-2371">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
<span class="source-line-no">2372</span><span id="line-2372">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), qlength);</span>
<span class="source-line-no">2373</span><span id="line-2373">    } else {</span>
<span class="source-line-no">2374</span><span id="line-2374">      out.write(cell.getQualifierArray(), cell.getQualifierOffset(), qlength);</span>
<span class="source-line-no">2375</span><span id="line-2375">    }</span>
<span class="source-line-no">2376</span><span id="line-2376">  }</span>
<span class="source-line-no">2377</span><span id="line-2377"></span>
<span class="source-line-no">2378</span><span id="line-2378">  /**</span>
<span class="source-line-no">2379</span><span id="line-2379">   * Writes the qualifier from the given cell to the output stream excluding the common prefix</span>
<span class="source-line-no">2380</span><span id="line-2380">   * @param out     The dataoutputstream to which the data has to be written</span>
<span class="source-line-no">2381</span><span id="line-2381">   * @param cell    The cell whose contents has to be written</span>
<span class="source-line-no">2382</span><span id="line-2382">   * @param qlength the qualifier length</span>
<span class="source-line-no">2383</span><span id="line-2383">   */</span>
<span class="source-line-no">2384</span><span id="line-2384">  public static void writeQualifierSkippingBytes(DataOutputStream out, Cell cell, int qlength,</span>
<span class="source-line-no">2385</span><span id="line-2385">    int commonPrefix) throws IOException {</span>
<span class="source-line-no">2386</span><span id="line-2386">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2387</span><span id="line-2387">      ByteBufferUtils.copyBufferToStream((DataOutput) out,</span>
<span class="source-line-no">2388</span><span id="line-2388">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
<span class="source-line-no">2389</span><span id="line-2389">        ((ByteBufferExtendedCell) cell).getQualifierPosition() + commonPrefix,</span>
<span class="source-line-no">2390</span><span id="line-2390">        qlength - commonPrefix);</span>
<span class="source-line-no">2391</span><span id="line-2391">    } else {</span>
<span class="source-line-no">2392</span><span id="line-2392">      out.write(cell.getQualifierArray(), cell.getQualifierOffset() + commonPrefix,</span>
<span class="source-line-no">2393</span><span id="line-2393">        qlength - commonPrefix);</span>
<span class="source-line-no">2394</span><span id="line-2394">    }</span>
<span class="source-line-no">2395</span><span id="line-2395">  }</span>
<span class="source-line-no">2396</span><span id="line-2396"></span>
<span class="source-line-no">2397</span><span id="line-2397">  /**</span>
<span class="source-line-no">2398</span><span id="line-2398">   * Writes the value from the given cell to the output stream</span>
<span class="source-line-no">2399</span><span id="line-2399">   * @param out     The outputstream to which the data has to be written</span>
<span class="source-line-no">2400</span><span id="line-2400">   * @param cell    The cell whose contents has to be written</span>
<span class="source-line-no">2401</span><span id="line-2401">   * @param vlength the value length</span>
<span class="source-line-no">2402</span><span id="line-2402">   */</span>
<span class="source-line-no">2403</span><span id="line-2403">  public static void writeValue(OutputStream out, ExtendedCell cell, int vlength)</span>
<span class="source-line-no">2404</span><span id="line-2404">    throws IOException {</span>
<span class="source-line-no">2405</span><span id="line-2405">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2406</span><span id="line-2406">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getValueByteBuffer(),</span>
<span class="source-line-no">2407</span><span id="line-2407">        ((ByteBufferExtendedCell) cell).getValuePosition(), vlength);</span>
<span class="source-line-no">2408</span><span id="line-2408">    } else {</span>
<span class="source-line-no">2409</span><span id="line-2409">      out.write(cell.getValueArray(), cell.getValueOffset(), vlength);</span>
<span class="source-line-no">2410</span><span id="line-2410">    }</span>
<span class="source-line-no">2411</span><span id="line-2411">  }</span>
<span class="source-line-no">2412</span><span id="line-2412"></span>
<span class="source-line-no">2413</span><span id="line-2413">  /**</span>
<span class="source-line-no">2414</span><span id="line-2414">   * Writes the tag from the given cell to the output stream</span>
<span class="source-line-no">2415</span><span id="line-2415">   * @param out        The outputstream to which the data has to be written</span>
<span class="source-line-no">2416</span><span id="line-2416">   * @param cell       The cell whose contents has to be written</span>
<span class="source-line-no">2417</span><span id="line-2417">   * @param tagsLength the tag length</span>
<span class="source-line-no">2418</span><span id="line-2418">   */</span>
<span class="source-line-no">2419</span><span id="line-2419">  public static void writeTags(OutputStream out, ExtendedCell cell, int tagsLength)</span>
<span class="source-line-no">2420</span><span id="line-2420">    throws IOException {</span>
<span class="source-line-no">2421</span><span id="line-2421">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2422</span><span id="line-2422">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getTagsByteBuffer(),</span>
<span class="source-line-no">2423</span><span id="line-2423">        ((ByteBufferExtendedCell) cell).getTagsPosition(), tagsLength);</span>
<span class="source-line-no">2424</span><span id="line-2424">    } else {</span>
<span class="source-line-no">2425</span><span id="line-2425">      out.write(cell.getTagsArray(), cell.getTagsOffset(), tagsLength);</span>
<span class="source-line-no">2426</span><span id="line-2426">    }</span>
<span class="source-line-no">2427</span><span id="line-2427">  }</span>
<span class="source-line-no">2428</span><span id="line-2428"></span>
<span class="source-line-no">2429</span><span id="line-2429">  /**</span>
<span class="source-line-no">2430</span><span id="line-2430">   * special case for Cell.equals</span>
<span class="source-line-no">2431</span><span id="line-2431">   */</span>
<span class="source-line-no">2432</span><span id="line-2432">  public static boolean equalsIgnoreMvccVersion(ExtendedCell a, ExtendedCell b) {</span>
<span class="source-line-no">2433</span><span id="line-2433">    // row</span>
<span class="source-line-no">2434</span><span id="line-2434">    boolean res = CellUtil.matchingRows(a, b);</span>
<span class="source-line-no">2435</span><span id="line-2435">    if (!res) {</span>
<span class="source-line-no">2436</span><span id="line-2436">      return res;</span>
<span class="source-line-no">2437</span><span id="line-2437">    }</span>
<span class="source-line-no">2438</span><span id="line-2438"></span>
<span class="source-line-no">2439</span><span id="line-2439">    // family</span>
<span class="source-line-no">2440</span><span id="line-2440">    res = CellUtil.matchingColumn(a, b);</span>
<span class="source-line-no">2441</span><span id="line-2441">    if (!res) {</span>
<span class="source-line-no">2442</span><span id="line-2442">      return res;</span>
<span class="source-line-no">2443</span><span id="line-2443">    }</span>
<span class="source-line-no">2444</span><span id="line-2444"></span>
<span class="source-line-no">2445</span><span id="line-2445">    // timestamp: later sorts first</span>
<span class="source-line-no">2446</span><span id="line-2446">    if (!CellUtil.matchingTimestamp(a, b)) {</span>
<span class="source-line-no">2447</span><span id="line-2447">      return false;</span>
<span class="source-line-no">2448</span><span id="line-2448">    }</span>
<span class="source-line-no">2449</span><span id="line-2449"></span>
<span class="source-line-no">2450</span><span id="line-2450">    // type</span>
<span class="source-line-no">2451</span><span id="line-2451">    int c = (0xff &amp; b.getTypeByte()) - (0xff &amp; a.getTypeByte());</span>
<span class="source-line-no">2452</span><span id="line-2452">    if (c != 0) {</span>
<span class="source-line-no">2453</span><span id="line-2453">      return false;</span>
<span class="source-line-no">2454</span><span id="line-2454">    } else {</span>
<span class="source-line-no">2455</span><span id="line-2455">      return true;</span>
<span class="source-line-no">2456</span><span id="line-2456">    }</span>
<span class="source-line-no">2457</span><span id="line-2457">  }</span>
<span class="source-line-no">2458</span><span id="line-2458"></span>
<span class="source-line-no">2459</span><span id="line-2459">  /**</span>
<span class="source-line-no">2460</span><span id="line-2460">   * Converts the rowkey bytes of the given cell into an int value</span>
<span class="source-line-no">2461</span><span id="line-2461">   * @return rowkey as int</span>
<span class="source-line-no">2462</span><span id="line-2462">   */</span>
<span class="source-line-no">2463</span><span id="line-2463">  public static int getRowAsInt(Cell cell) {</span>
<span class="source-line-no">2464</span><span id="line-2464">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2465</span><span id="line-2465">      return ByteBufferUtils.toInt(((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
<span class="source-line-no">2466</span><span id="line-2466">        ((ByteBufferExtendedCell) cell).getRowPosition());</span>
<span class="source-line-no">2467</span><span id="line-2467">    }</span>
<span class="source-line-no">2468</span><span id="line-2468">    return Bytes.toInt(cell.getRowArray(), cell.getRowOffset());</span>
<span class="source-line-no">2469</span><span id="line-2469">  }</span>
<span class="source-line-no">2470</span><span id="line-2470"></span>
<span class="source-line-no">2471</span><span id="line-2471">  /**</span>
<span class="source-line-no">2472</span><span id="line-2472">   * Converts the value bytes of the given cell into a long value</span>
<span class="source-line-no">2473</span><span id="line-2473">   * @return value as long</span>
<span class="source-line-no">2474</span><span id="line-2474">   */</span>
<span class="source-line-no">2475</span><span id="line-2475">  public static long getValueAsLong(Cell cell) {</span>
<span class="source-line-no">2476</span><span id="line-2476">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2477</span><span id="line-2477">      return ByteBufferUtils.toLong(((ByteBufferExtendedCell) cell).getValueByteBuffer(),</span>
<span class="source-line-no">2478</span><span id="line-2478">        ((ByteBufferExtendedCell) cell).getValuePosition());</span>
<span class="source-line-no">2479</span><span id="line-2479">    }</span>
<span class="source-line-no">2480</span><span id="line-2480">    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset());</span>
<span class="source-line-no">2481</span><span id="line-2481">  }</span>
<span class="source-line-no">2482</span><span id="line-2482"></span>
<span class="source-line-no">2483</span><span id="line-2483">  /**</span>
<span class="source-line-no">2484</span><span id="line-2484">   * Converts the value bytes of the given cell into a int value</span>
<span class="source-line-no">2485</span><span id="line-2485">   * @return value as int</span>
<span class="source-line-no">2486</span><span id="line-2486">   */</span>
<span class="source-line-no">2487</span><span id="line-2487">  public static int getValueAsInt(Cell cell) {</span>
<span class="source-line-no">2488</span><span id="line-2488">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2489</span><span id="line-2489">      return ByteBufferUtils.toInt(((ByteBufferExtendedCell) cell).getValueByteBuffer(),</span>
<span class="source-line-no">2490</span><span id="line-2490">        ((ByteBufferExtendedCell) cell).getValuePosition());</span>
<span class="source-line-no">2491</span><span id="line-2491">    }</span>
<span class="source-line-no">2492</span><span id="line-2492">    return Bytes.toInt(cell.getValueArray(), cell.getValueOffset());</span>
<span class="source-line-no">2493</span><span id="line-2493">  }</span>
<span class="source-line-no">2494</span><span id="line-2494"></span>
<span class="source-line-no">2495</span><span id="line-2495">  /**</span>
<span class="source-line-no">2496</span><span id="line-2496">   * Converts the value bytes of the given cell into a double value</span>
<span class="source-line-no">2497</span><span id="line-2497">   * @return value as double</span>
<span class="source-line-no">2498</span><span id="line-2498">   */</span>
<span class="source-line-no">2499</span><span id="line-2499">  public static double getValueAsDouble(Cell cell) {</span>
<span class="source-line-no">2500</span><span id="line-2500">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2501</span><span id="line-2501">      return ByteBufferUtils.toDouble(((ByteBufferExtendedCell) cell).getValueByteBuffer(),</span>
<span class="source-line-no">2502</span><span id="line-2502">        ((ByteBufferExtendedCell) cell).getValuePosition());</span>
<span class="source-line-no">2503</span><span id="line-2503">    }</span>
<span class="source-line-no">2504</span><span id="line-2504">    return Bytes.toDouble(cell.getValueArray(), cell.getValueOffset());</span>
<span class="source-line-no">2505</span><span id="line-2505">  }</span>
<span class="source-line-no">2506</span><span id="line-2506"></span>
<span class="source-line-no">2507</span><span id="line-2507">  /**</span>
<span class="source-line-no">2508</span><span id="line-2508">   * Converts the value bytes of the given cell into a BigDecimal</span>
<span class="source-line-no">2509</span><span id="line-2509">   * @return value as BigDecimal</span>
<span class="source-line-no">2510</span><span id="line-2510">   */</span>
<span class="source-line-no">2511</span><span id="line-2511">  public static BigDecimal getValueAsBigDecimal(Cell cell) {</span>
<span class="source-line-no">2512</span><span id="line-2512">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2513</span><span id="line-2513">      return ByteBufferUtils.toBigDecimal(((ByteBufferExtendedCell) cell).getValueByteBuffer(),</span>
<span class="source-line-no">2514</span><span id="line-2514">        ((ByteBufferExtendedCell) cell).getValuePosition(), cell.getValueLength());</span>
<span class="source-line-no">2515</span><span id="line-2515">    }</span>
<span class="source-line-no">2516</span><span id="line-2516">    return Bytes.toBigDecimal(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());</span>
<span class="source-line-no">2517</span><span id="line-2517">  }</span>
<span class="source-line-no">2518</span><span id="line-2518"></span>
<span class="source-line-no">2519</span><span id="line-2519">  /**</span>
<span class="source-line-no">2520</span><span id="line-2520">   * Compresses the tags to the given outputstream using the TagcompressionContext</span>
<span class="source-line-no">2521</span><span id="line-2521">   * @param out                   the outputstream to which the compression should happen</span>
<span class="source-line-no">2522</span><span id="line-2522">   * @param cell                  the cell which has tags</span>
<span class="source-line-no">2523</span><span id="line-2523">   * @param tagCompressionContext the TagCompressionContext</span>
<span class="source-line-no">2524</span><span id="line-2524">   * @throws IOException can throw IOException if the compression encounters issue</span>
<span class="source-line-no">2525</span><span id="line-2525">   */</span>
<span class="source-line-no">2526</span><span id="line-2526">  public static void compressTags(OutputStream out, ExtendedCell cell,</span>
<span class="source-line-no">2527</span><span id="line-2527">    TagCompressionContext tagCompressionContext) throws IOException {</span>
<span class="source-line-no">2528</span><span id="line-2528">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2529</span><span id="line-2529">      tagCompressionContext.compressTags(out, ((ByteBufferExtendedCell) cell).getTagsByteBuffer(),</span>
<span class="source-line-no">2530</span><span id="line-2530">        ((ByteBufferExtendedCell) cell).getTagsPosition(), cell.getTagsLength());</span>
<span class="source-line-no">2531</span><span id="line-2531">    } else {</span>
<span class="source-line-no">2532</span><span id="line-2532">      tagCompressionContext.compressTags(out, cell.getTagsArray(), cell.getTagsOffset(),</span>
<span class="source-line-no">2533</span><span id="line-2533">        cell.getTagsLength());</span>
<span class="source-line-no">2534</span><span id="line-2534">    }</span>
<span class="source-line-no">2535</span><span id="line-2535">  }</span>
<span class="source-line-no">2536</span><span id="line-2536"></span>
<span class="source-line-no">2537</span><span id="line-2537">  public static void compressRow(OutputStream out, Cell cell, Dictionary dict) throws IOException {</span>
<span class="source-line-no">2538</span><span id="line-2538">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2539</span><span id="line-2539">      Dictionary.write(out, ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
<span class="source-line-no">2540</span><span id="line-2540">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(), dict);</span>
<span class="source-line-no">2541</span><span id="line-2541">    } else {</span>
<span class="source-line-no">2542</span><span id="line-2542">      Dictionary.write(out, cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(), dict);</span>
<span class="source-line-no">2543</span><span id="line-2543">    }</span>
<span class="source-line-no">2544</span><span id="line-2544">  }</span>
<span class="source-line-no">2545</span><span id="line-2545"></span>
<span class="source-line-no">2546</span><span id="line-2546">  public static void compressFamily(OutputStream out, Cell cell, Dictionary dict)</span>
<span class="source-line-no">2547</span><span id="line-2547">    throws IOException {</span>
<span class="source-line-no">2548</span><span id="line-2548">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2549</span><span id="line-2549">      Dictionary.write(out, ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
<span class="source-line-no">2550</span><span id="line-2550">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), cell.getFamilyLength(), dict);</span>
<span class="source-line-no">2551</span><span id="line-2551">    } else {</span>
<span class="source-line-no">2552</span><span id="line-2552">      Dictionary.write(out, cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),</span>
<span class="source-line-no">2553</span><span id="line-2553">        dict);</span>
<span class="source-line-no">2554</span><span id="line-2554">    }</span>
<span class="source-line-no">2555</span><span id="line-2555">  }</span>
<span class="source-line-no">2556</span><span id="line-2556"></span>
<span class="source-line-no">2557</span><span id="line-2557">  public static void compressQualifier(OutputStream out, Cell cell, Dictionary dict)</span>
<span class="source-line-no">2558</span><span id="line-2558">    throws IOException {</span>
<span class="source-line-no">2559</span><span id="line-2559">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2560</span><span id="line-2560">      Dictionary.write(out, ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
<span class="source-line-no">2561</span><span id="line-2561">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), cell.getQualifierLength(), dict);</span>
<span class="source-line-no">2562</span><span id="line-2562">    } else {</span>
<span class="source-line-no">2563</span><span id="line-2563">      Dictionary.write(out, cell.getQualifierArray(), cell.getQualifierOffset(),</span>
<span class="source-line-no">2564</span><span id="line-2564">        cell.getQualifierLength(), dict);</span>
<span class="source-line-no">2565</span><span id="line-2565">    }</span>
<span class="source-line-no">2566</span><span id="line-2566">  }</span>
<span class="source-line-no">2567</span><span id="line-2567"></span>
<span class="source-line-no">2568</span><span id="line-2568">  /**</span>
<span class="source-line-no">2569</span><span id="line-2569">   * Used when a cell needs to be compared with a key byte[] such as cases of finding the index from</span>
<span class="source-line-no">2570</span><span id="line-2570">   * the index block, bloom keys from the bloom blocks This byte[] is expected to be serialized in</span>
<span class="source-line-no">2571</span><span id="line-2571">   * the KeyValue serialization format If the KeyValue (Cell's) serialization format changes this</span>
<span class="source-line-no">2572</span><span id="line-2572">   * method cannot be used.</span>
<span class="source-line-no">2573</span><span id="line-2573">   * @param comparator the {@link CellComparator} to use for comparison</span>
<span class="source-line-no">2574</span><span id="line-2574">   * @param left       the cell to be compared</span>
<span class="source-line-no">2575</span><span id="line-2575">   * @param key        the serialized key part of a KeyValue</span>
<span class="source-line-no">2576</span><span id="line-2576">   * @param offset     the offset in the key byte[]</span>
<span class="source-line-no">2577</span><span id="line-2577">   * @param length     the length of the key byte[]</span>
<span class="source-line-no">2578</span><span id="line-2578">   * @return an int greater than 0 if left is greater than right lesser than 0 if left is lesser</span>
<span class="source-line-no">2579</span><span id="line-2579">   *         than right equal to 0 if left is equal to right</span>
<span class="source-line-no">2580</span><span id="line-2580">   */</span>
<span class="source-line-no">2581</span><span id="line-2581">  public static final int compare(CellComparator comparator, ExtendedCell left, byte[] key,</span>
<span class="source-line-no">2582</span><span id="line-2582">    int offset, int length) {</span>
<span class="source-line-no">2583</span><span id="line-2583">    // row</span>
<span class="source-line-no">2584</span><span id="line-2584">    short rrowlength = Bytes.toShort(key, offset);</span>
<span class="source-line-no">2585</span><span id="line-2585">    int c = comparator.compareRows(left, key, offset + Bytes.SIZEOF_SHORT, rrowlength);</span>
<span class="source-line-no">2586</span><span id="line-2586">    if (c != 0) return c;</span>
<span class="source-line-no">2587</span><span id="line-2587"></span>
<span class="source-line-no">2588</span><span id="line-2588">    // Compare the rest of the two KVs without making any assumptions about</span>
<span class="source-line-no">2589</span><span id="line-2589">    // the common prefix. This function will not compare rows anyway, so we</span>
<span class="source-line-no">2590</span><span id="line-2590">    // don't need to tell it that the common prefix includes the row.</span>
<span class="source-line-no">2591</span><span id="line-2591">    return compareWithoutRow(comparator, left, key, offset, length, rrowlength);</span>
<span class="source-line-no">2592</span><span id="line-2592">  }</span>
<span class="source-line-no">2593</span><span id="line-2593"></span>
<span class="source-line-no">2594</span><span id="line-2594">  /**</span>
<span class="source-line-no">2595</span><span id="line-2595">   * Compare columnFamily, qualifier, timestamp, and key type (everything except the row). This</span>
<span class="source-line-no">2596</span><span id="line-2596">   * method is used both in the normal comparator and the "same-prefix" comparator. Note that we are</span>
<span class="source-line-no">2597</span><span id="line-2597">   * assuming that row portions of both KVs have already been parsed and found identical, and we</span>
<span class="source-line-no">2598</span><span id="line-2598">   * don't validate that assumption here.</span>
<span class="source-line-no">2599</span><span id="line-2599">   * @param comparator the {@link CellComparator} to use for comparison</span>
<span class="source-line-no">2600</span><span id="line-2600">   * @param left       the cell to be compared</span>
<span class="source-line-no">2601</span><span id="line-2601">   * @param right      the serialized key part of a key-value</span>
<span class="source-line-no">2602</span><span id="line-2602">   * @param roffset    the offset in the key byte[]</span>
<span class="source-line-no">2603</span><span id="line-2603">   * @param rlength    the length of the key byte[]</span>
<span class="source-line-no">2604</span><span id="line-2604">   * @param rowlength  the row length</span>
<span class="source-line-no">2605</span><span id="line-2605">   * @return greater than 0 if left cell is bigger, less than 0 if right cell is bigger, 0 if both</span>
<span class="source-line-no">2606</span><span id="line-2606">   *         cells are equal</span>
<span class="source-line-no">2607</span><span id="line-2607">   */</span>
<span class="source-line-no">2608</span><span id="line-2608">  static final int compareWithoutRow(CellComparator comparator, ExtendedCell left, byte[] right,</span>
<span class="source-line-no">2609</span><span id="line-2609">    int roffset, int rlength, short rowlength) {</span>
<span class="source-line-no">2610</span><span id="line-2610">    /***</span>
<span class="source-line-no">2611</span><span id="line-2611">     * KeyValue Format and commonLength:</span>
<span class="source-line-no">2612</span><span id="line-2612">     * |_keyLen_|_valLen_|_rowLen_|_rowKey_|_famiLen_|_fami_|_Quali_|....</span>
<span class="source-line-no">2613</span><span id="line-2613">     * ------------------|-------commonLength--------|--------------</span>
<span class="source-line-no">2614</span><span id="line-2614">     */</span>
<span class="source-line-no">2615</span><span id="line-2615">    int commonLength = KeyValue.ROW_LENGTH_SIZE + KeyValue.FAMILY_LENGTH_SIZE + rowlength;</span>
<span class="source-line-no">2616</span><span id="line-2616"></span>
<span class="source-line-no">2617</span><span id="line-2617">    // commonLength + TIMESTAMP_TYPE_SIZE</span>
<span class="source-line-no">2618</span><span id="line-2618">    int commonLengthWithTSAndType = KeyValue.TIMESTAMP_TYPE_SIZE + commonLength;</span>
<span class="source-line-no">2619</span><span id="line-2619">    // ColumnFamily + Qualifier length.</span>
<span class="source-line-no">2620</span><span id="line-2620">    int lcolumnlength = left.getFamilyLength() + left.getQualifierLength();</span>
<span class="source-line-no">2621</span><span id="line-2621">    int rcolumnlength = rlength - commonLengthWithTSAndType;</span>
<span class="source-line-no">2622</span><span id="line-2622"></span>
<span class="source-line-no">2623</span><span id="line-2623">    byte ltype = left.getTypeByte();</span>
<span class="source-line-no">2624</span><span id="line-2624">    byte rtype = right[roffset + (rlength - 1)];</span>
<span class="source-line-no">2625</span><span id="line-2625"></span>
<span class="source-line-no">2626</span><span id="line-2626">    // If the column is not specified, the "minimum" key type appears the</span>
<span class="source-line-no">2627</span><span id="line-2627">    // latest in the sorted order, regardless of the timestamp. This is used</span>
<span class="source-line-no">2628</span><span id="line-2628">    // for specifying the last key/value in a given row, because there is no</span>
<span class="source-line-no">2629</span><span id="line-2629">    // "lexicographically last column" (it would be infinitely long). The</span>
<span class="source-line-no">2630</span><span id="line-2630">    // "maximum" key type does not need this behavior.</span>
<span class="source-line-no">2631</span><span id="line-2631">    if (lcolumnlength == 0 &amp;&amp; ltype == KeyValue.Type.Minimum.getCode()) {</span>
<span class="source-line-no">2632</span><span id="line-2632">      // left is "bigger", i.e. it appears later in the sorted order</span>
<span class="source-line-no">2633</span><span id="line-2633">      return 1;</span>
<span class="source-line-no">2634</span><span id="line-2634">    }</span>
<span class="source-line-no">2635</span><span id="line-2635">    if (rcolumnlength == 0 &amp;&amp; rtype == KeyValue.Type.Minimum.getCode()) {</span>
<span class="source-line-no">2636</span><span id="line-2636">      return -1;</span>
<span class="source-line-no">2637</span><span id="line-2637">    }</span>
<span class="source-line-no">2638</span><span id="line-2638"></span>
<span class="source-line-no">2639</span><span id="line-2639">    int rfamilyoffset = commonLength + roffset;</span>
<span class="source-line-no">2640</span><span id="line-2640"></span>
<span class="source-line-no">2641</span><span id="line-2641">    // Column family length.</span>
<span class="source-line-no">2642</span><span id="line-2642">    int lfamilylength = left.getFamilyLength();</span>
<span class="source-line-no">2643</span><span id="line-2643">    int rfamilylength = right[rfamilyoffset - 1];</span>
<span class="source-line-no">2644</span><span id="line-2644">    // If left family size is not equal to right family size, we need not</span>
<span class="source-line-no">2645</span><span id="line-2645">    // compare the qualifiers.</span>
<span class="source-line-no">2646</span><span id="line-2646">    boolean sameFamilySize = (lfamilylength == rfamilylength);</span>
<span class="source-line-no">2647</span><span id="line-2647">    if (!sameFamilySize) {</span>
<span class="source-line-no">2648</span><span id="line-2648">      // comparing column family is enough.</span>
<span class="source-line-no">2649</span><span id="line-2649">      return CellUtil.compareFamilies(left, right, rfamilyoffset, rfamilylength);</span>
<span class="source-line-no">2650</span><span id="line-2650">    }</span>
<span class="source-line-no">2651</span><span id="line-2651">    // Compare family &amp; qualifier together.</span>
<span class="source-line-no">2652</span><span id="line-2652">    // Families are same. Compare on qualifiers.</span>
<span class="source-line-no">2653</span><span id="line-2653">    int comparison = CellUtil.compareColumns(left, right, rfamilyoffset, rfamilylength,</span>
<span class="source-line-no">2654</span><span id="line-2654">      rfamilyoffset + rfamilylength, (rcolumnlength - rfamilylength));</span>
<span class="source-line-no">2655</span><span id="line-2655">    if (comparison != 0) {</span>
<span class="source-line-no">2656</span><span id="line-2656">      return comparison;</span>
<span class="source-line-no">2657</span><span id="line-2657">    }</span>
<span class="source-line-no">2658</span><span id="line-2658"></span>
<span class="source-line-no">2659</span><span id="line-2659">    // //</span>
<span class="source-line-no">2660</span><span id="line-2660">    // Next compare timestamps.</span>
<span class="source-line-no">2661</span><span id="line-2661">    long rtimestamp = Bytes.toLong(right, roffset + (rlength - KeyValue.TIMESTAMP_TYPE_SIZE));</span>
<span class="source-line-no">2662</span><span id="line-2662">    int compare = comparator.compareTimestamps(left.getTimestamp(), rtimestamp);</span>
<span class="source-line-no">2663</span><span id="line-2663">    if (compare != 0) {</span>
<span class="source-line-no">2664</span><span id="line-2664">      return compare;</span>
<span class="source-line-no">2665</span><span id="line-2665">    }</span>
<span class="source-line-no">2666</span><span id="line-2666"></span>
<span class="source-line-no">2667</span><span id="line-2667">    // Compare types. Let the delete types sort ahead of puts; i.e. types</span>
<span class="source-line-no">2668</span><span id="line-2668">    // of higher numbers sort before those of lesser numbers. Maximum (255)</span>
<span class="source-line-no">2669</span><span id="line-2669">    // appears ahead of everything, and minimum (0) appears after</span>
<span class="source-line-no">2670</span><span id="line-2670">    // everything.</span>
<span class="source-line-no">2671</span><span id="line-2671">    return (0xff &amp; rtype) - (0xff &amp; ltype);</span>
<span class="source-line-no">2672</span><span id="line-2672">  }</span>
<span class="source-line-no">2673</span><span id="line-2673"></span>
<span class="source-line-no">2674</span><span id="line-2674">  /**</span>
<span class="source-line-no">2675</span><span id="line-2675">   * Return a new cell is located following input cell. If both of type and timestamp are minimum,</span>
<span class="source-line-no">2676</span><span id="line-2676">   * the input cell will be returned directly.</span>
<span class="source-line-no">2677</span><span id="line-2677">   */</span>
<span class="source-line-no">2678</span><span id="line-2678">  public static ExtendedCell createNextOnRowCol(ExtendedCell cell) {</span>
<span class="source-line-no">2679</span><span id="line-2679">    long ts = cell.getTimestamp();</span>
<span class="source-line-no">2680</span><span id="line-2680">    byte type = cell.getTypeByte();</span>
<span class="source-line-no">2681</span><span id="line-2681">    if (type != KeyValue.Type.Minimum.getCode()) {</span>
<span class="source-line-no">2682</span><span id="line-2682">      type = KeyValue.Type.values()[KeyValue.Type.codeToType(type).ordinal() - 1].getCode();</span>
<span class="source-line-no">2683</span><span id="line-2683">    } else if (ts != PrivateConstants.OLDEST_TIMESTAMP) {</span>
<span class="source-line-no">2684</span><span id="line-2684">      ts = ts - 1;</span>
<span class="source-line-no">2685</span><span id="line-2685">      type = KeyValue.Type.Maximum.getCode();</span>
<span class="source-line-no">2686</span><span id="line-2686">    } else {</span>
<span class="source-line-no">2687</span><span id="line-2687">      return cell;</span>
<span class="source-line-no">2688</span><span id="line-2688">    }</span>
<span class="source-line-no">2689</span><span id="line-2689">    return createNextOnRowCol(cell, ts, type);</span>
<span class="source-line-no">2690</span><span id="line-2690">  }</span>
<span class="source-line-no">2691</span><span id="line-2691"></span>
<span class="source-line-no">2692</span><span id="line-2692">  static ExtendedCell createNextOnRowCol(ExtendedCell cell, long ts, byte type) {</span>
<span class="source-line-no">2693</span><span id="line-2693">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2694</span><span id="line-2694">      return new LastOnRowColByteBufferExtendedCell(</span>
<span class="source-line-no">2695</span><span id="line-2695">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
<span class="source-line-no">2696</span><span id="line-2696">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(),</span>
<span class="source-line-no">2697</span><span id="line-2697">        ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
<span class="source-line-no">2698</span><span id="line-2698">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), cell.getFamilyLength(),</span>
<span class="source-line-no">2699</span><span id="line-2699">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
<span class="source-line-no">2700</span><span id="line-2700">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), cell.getQualifierLength()) {</span>
<span class="source-line-no">2701</span><span id="line-2701">        @Override</span>
<span class="source-line-no">2702</span><span id="line-2702">        public long getTimestamp() {</span>
<span class="source-line-no">2703</span><span id="line-2703">          return ts;</span>
<span class="source-line-no">2704</span><span id="line-2704">        }</span>
<span class="source-line-no">2705</span><span id="line-2705"></span>
<span class="source-line-no">2706</span><span id="line-2706">        @Override</span>
<span class="source-line-no">2707</span><span id="line-2707">        public byte getTypeByte() {</span>
<span class="source-line-no">2708</span><span id="line-2708">          return type;</span>
<span class="source-line-no">2709</span><span id="line-2709">        }</span>
<span class="source-line-no">2710</span><span id="line-2710">      };</span>
<span class="source-line-no">2711</span><span id="line-2711">    }</span>
<span class="source-line-no">2712</span><span id="line-2712">    return new LastOnRowColCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),</span>
<span class="source-line-no">2713</span><span id="line-2713">      cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),</span>
<span class="source-line-no">2714</span><span id="line-2714">      cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength()) {</span>
<span class="source-line-no">2715</span><span id="line-2715">      @Override</span>
<span class="source-line-no">2716</span><span id="line-2716">      public long getTimestamp() {</span>
<span class="source-line-no">2717</span><span id="line-2717">        return ts;</span>
<span class="source-line-no">2718</span><span id="line-2718">      }</span>
<span class="source-line-no">2719</span><span id="line-2719"></span>
<span class="source-line-no">2720</span><span id="line-2720">      @Override</span>
<span class="source-line-no">2721</span><span id="line-2721">      public byte getTypeByte() {</span>
<span class="source-line-no">2722</span><span id="line-2722">        return type;</span>
<span class="source-line-no">2723</span><span id="line-2723">      }</span>
<span class="source-line-no">2724</span><span id="line-2724">    };</span>
<span class="source-line-no">2725</span><span id="line-2725">  }</span>
<span class="source-line-no">2726</span><span id="line-2726"></span>
<span class="source-line-no">2727</span><span id="line-2727">  /**</span>
<span class="source-line-no">2728</span><span id="line-2728">   * Estimate based on keyvalue's serialization format in the RPC layer. Note that there is an extra</span>
<span class="source-line-no">2729</span><span id="line-2729">   * SIZEOF_INT added to the size here that indicates the actual length of the cell for cases where</span>
<span class="source-line-no">2730</span><span id="line-2730">   * cell's are serialized in a contiguous format (For eg in RPCs).</span>
<span class="source-line-no">2731</span><span id="line-2731">   * @return Estimate of the &lt;code&gt;cell&lt;/code&gt; size in bytes plus an extra SIZEOF_INT indicating the</span>
<span class="source-line-no">2732</span><span id="line-2732">   *         actual cell length.</span>
<span class="source-line-no">2733</span><span id="line-2733">   */</span>
<span class="source-line-no">2734</span><span id="line-2734">  public static int estimatedSerializedSizeOf(final Cell cell) {</span>
<span class="source-line-no">2735</span><span id="line-2735">    return cell.getSerializedSize() + Bytes.SIZEOF_INT;</span>
<span class="source-line-no">2736</span><span id="line-2736">  }</span>
<span class="source-line-no">2737</span><span id="line-2737"></span>
<span class="source-line-no">2738</span><span id="line-2738">  /**</span>
<span class="source-line-no">2739</span><span id="line-2739">   * Calculates the serialized key size. We always serialize in the KeyValue's serialization format.</span>
<span class="source-line-no">2740</span><span id="line-2740">   * @param cell the cell for which the key size has to be calculated.</span>
<span class="source-line-no">2741</span><span id="line-2741">   * @return the key size</span>
<span class="source-line-no">2742</span><span id="line-2742">   */</span>
<span class="source-line-no">2743</span><span id="line-2743">  public static int estimatedSerializedSizeOfKey(final Cell cell) {</span>
<span class="source-line-no">2744</span><span id="line-2744">    if (cell instanceof KeyValue) return ((KeyValue) cell).getKeyLength();</span>
<span class="source-line-no">2745</span><span id="line-2745">    return cell.getRowLength() + cell.getFamilyLength() + cell.getQualifierLength()</span>
<span class="source-line-no">2746</span><span id="line-2746">      + KeyValue.KEY_INFRASTRUCTURE_SIZE;</span>
<span class="source-line-no">2747</span><span id="line-2747">  }</span>
<span class="source-line-no">2748</span><span id="line-2748"></span>
<span class="source-line-no">2749</span><span id="line-2749">  /**</span>
<span class="source-line-no">2750</span><span id="line-2750">   * This method exists just to encapsulate how we serialize keys. To be replaced by a factory that</span>
<span class="source-line-no">2751</span><span id="line-2751">   * we query to figure what the Cell implementation is and then, what serialization engine to use</span>
<span class="source-line-no">2752</span><span id="line-2752">   * and further, how to serialize the key for inclusion in hfile index. TODO.</span>
<span class="source-line-no">2753</span><span id="line-2753">   * @return The key portion of the Cell serialized in the old-school KeyValue way or null if passed</span>
<span class="source-line-no">2754</span><span id="line-2754">   *         a null &lt;code&gt;cell&lt;/code&gt;</span>
<span class="source-line-no">2755</span><span id="line-2755">   */</span>
<span class="source-line-no">2756</span><span id="line-2756">  public static byte[] getCellKeySerializedAsKeyValueKey(final ExtendedCell cell) {</span>
<span class="source-line-no">2757</span><span id="line-2757">    if (cell == null) return null;</span>
<span class="source-line-no">2758</span><span id="line-2758">    byte[] b = new byte[KeyValueUtil.keyLength(cell)];</span>
<span class="source-line-no">2759</span><span id="line-2759">    KeyValueUtil.appendKeyTo(cell, b, 0);</span>
<span class="source-line-no">2760</span><span id="line-2760">    return b;</span>
<span class="source-line-no">2761</span><span id="line-2761">  }</span>
<span class="source-line-no">2762</span><span id="line-2762"></span>
<span class="source-line-no">2763</span><span id="line-2763">  /**</span>
<span class="source-line-no">2764</span><span id="line-2764">   * Create a Cell that is smaller than all other possible Cells for the given Cell's row.</span>
<span class="source-line-no">2765</span><span id="line-2765">   * @return First possible Cell on passed Cell's row.</span>
<span class="source-line-no">2766</span><span id="line-2766">   */</span>
<span class="source-line-no">2767</span><span id="line-2767">  public static ExtendedCell createFirstOnRow(final Cell cell) {</span>
<span class="source-line-no">2768</span><span id="line-2768">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2769</span><span id="line-2769">      return new FirstOnRowByteBufferExtendedCell(</span>
<span class="source-line-no">2770</span><span id="line-2770">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
<span class="source-line-no">2771</span><span id="line-2771">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength());</span>
<span class="source-line-no">2772</span><span id="line-2772">    }</span>
<span class="source-line-no">2773</span><span id="line-2773">    return new FirstOnRowCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());</span>
<span class="source-line-no">2774</span><span id="line-2774">  }</span>
<span class="source-line-no">2775</span><span id="line-2775"></span>
<span class="source-line-no">2776</span><span id="line-2776">  public static ExtendedCell createFirstOnRow(final byte[] row, int roffset, short rlength) {</span>
<span class="source-line-no">2777</span><span id="line-2777">    return new FirstOnRowCell(row, roffset, rlength);</span>
<span class="source-line-no">2778</span><span id="line-2778">  }</span>
<span class="source-line-no">2779</span><span id="line-2779"></span>
<span class="source-line-no">2780</span><span id="line-2780">  public static ExtendedCell createFirstOnRow(final byte[] row, final byte[] family,</span>
<span class="source-line-no">2781</span><span id="line-2781">    final byte[] col) {</span>
<span class="source-line-no">2782</span><span id="line-2782">    return createFirstOnRow(row, 0, (short) row.length, family, 0, (byte) family.length, col, 0,</span>
<span class="source-line-no">2783</span><span id="line-2783">      col.length);</span>
<span class="source-line-no">2784</span><span id="line-2784">  }</span>
<span class="source-line-no">2785</span><span id="line-2785"></span>
<span class="source-line-no">2786</span><span id="line-2786">  public static ExtendedCell createFirstOnRow(final byte[] row, int roffset, short rlength,</span>
<span class="source-line-no">2787</span><span id="line-2787">    final byte[] family, int foffset, byte flength, final byte[] col, int coffset, int clength) {</span>
<span class="source-line-no">2788</span><span id="line-2788">    return new FirstOnRowColCell(row, roffset, rlength, family, foffset, flength, col, coffset,</span>
<span class="source-line-no">2789</span><span id="line-2789">      clength);</span>
<span class="source-line-no">2790</span><span id="line-2790">  }</span>
<span class="source-line-no">2791</span><span id="line-2791"></span>
<span class="source-line-no">2792</span><span id="line-2792">  public static ExtendedCell createFirstOnRow(final byte[] row) {</span>
<span class="source-line-no">2793</span><span id="line-2793">    return createFirstOnRow(row, 0, (short) row.length);</span>
<span class="source-line-no">2794</span><span id="line-2794">  }</span>
<span class="source-line-no">2795</span><span id="line-2795"></span>
<span class="source-line-no">2796</span><span id="line-2796">  public static ExtendedCell createFirstOnRowFamily(Cell cell, byte[] fArray, int foff, int flen) {</span>
<span class="source-line-no">2797</span><span id="line-2797">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2798</span><span id="line-2798">      return new FirstOnRowColByteBufferExtendedCell(</span>
<span class="source-line-no">2799</span><span id="line-2799">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
<span class="source-line-no">2800</span><span id="line-2800">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(),</span>
<span class="source-line-no">2801</span><span id="line-2801">        ByteBuffer.wrap(fArray), foff, (byte) flen, HConstants.EMPTY_BYTE_BUFFER, 0, 0);</span>
<span class="source-line-no">2802</span><span id="line-2802">    }</span>
<span class="source-line-no">2803</span><span id="line-2803">    return new FirstOnRowColCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),</span>
<span class="source-line-no">2804</span><span id="line-2804">      fArray, foff, (byte) flen, HConstants.EMPTY_BYTE_ARRAY, 0, 0);</span>
<span class="source-line-no">2805</span><span id="line-2805">  }</span>
<span class="source-line-no">2806</span><span id="line-2806"></span>
<span class="source-line-no">2807</span><span id="line-2807">  public static ExtendedCell createFirstOnRowCol(final Cell cell) {</span>
<span class="source-line-no">2808</span><span id="line-2808">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2809</span><span id="line-2809">      return new FirstOnRowColByteBufferExtendedCell(</span>
<span class="source-line-no">2810</span><span id="line-2810">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
<span class="source-line-no">2811</span><span id="line-2811">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(),</span>
<span class="source-line-no">2812</span><span id="line-2812">        HConstants.EMPTY_BYTE_BUFFER, 0, (byte) 0,</span>
<span class="source-line-no">2813</span><span id="line-2813">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
<span class="source-line-no">2814</span><span id="line-2814">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), cell.getQualifierLength());</span>
<span class="source-line-no">2815</span><span id="line-2815">    }</span>
<span class="source-line-no">2816</span><span id="line-2816">    return new FirstOnRowColCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),</span>
<span class="source-line-no">2817</span><span id="line-2817">      HConstants.EMPTY_BYTE_ARRAY, 0, (byte) 0, cell.getQualifierArray(), cell.getQualifierOffset(),</span>
<span class="source-line-no">2818</span><span id="line-2818">      cell.getQualifierLength());</span>
<span class="source-line-no">2819</span><span id="line-2819">  }</span>
<span class="source-line-no">2820</span><span id="line-2820"></span>
<span class="source-line-no">2821</span><span id="line-2821">  public static ExtendedCell createFirstOnNextRow(final Cell cell) {</span>
<span class="source-line-no">2822</span><span id="line-2822">    byte[] nextRow = new byte[cell.getRowLength() + 1];</span>
<span class="source-line-no">2823</span><span id="line-2823">    CellUtil.copyRowTo(cell, nextRow, 0);</span>
<span class="source-line-no">2824</span><span id="line-2824">    nextRow[nextRow.length - 1] = 0;// maybe not necessary</span>
<span class="source-line-no">2825</span><span id="line-2825">    return new FirstOnRowCell(nextRow, 0, (short) nextRow.length);</span>
<span class="source-line-no">2826</span><span id="line-2826">  }</span>
<span class="source-line-no">2827</span><span id="line-2827"></span>
<span class="source-line-no">2828</span><span id="line-2828">  /**</span>
<span class="source-line-no">2829</span><span id="line-2829">   * Create a Cell that is smaller than all other possible Cells for the given Cell's rk:cf and</span>
<span class="source-line-no">2830</span><span id="line-2830">   * passed qualifier.</span>
<span class="source-line-no">2831</span><span id="line-2831">   * @return Last possible Cell on passed Cell's rk:cf and passed qualifier.</span>
<span class="source-line-no">2832</span><span id="line-2832">   */</span>
<span class="source-line-no">2833</span><span id="line-2833">  public static ExtendedCell createFirstOnRowCol(final Cell cell, byte[] qArray, int qoffest,</span>
<span class="source-line-no">2834</span><span id="line-2834">    int qlength) {</span>
<span class="source-line-no">2835</span><span id="line-2835">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2836</span><span id="line-2836">      return new FirstOnRowColByteBufferExtendedCell(</span>
<span class="source-line-no">2837</span><span id="line-2837">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
<span class="source-line-no">2838</span><span id="line-2838">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(),</span>
<span class="source-line-no">2839</span><span id="line-2839">        ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
<span class="source-line-no">2840</span><span id="line-2840">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), cell.getFamilyLength(),</span>
<span class="source-line-no">2841</span><span id="line-2841">        ByteBuffer.wrap(qArray), qoffest, qlength);</span>
<span class="source-line-no">2842</span><span id="line-2842">    }</span>
<span class="source-line-no">2843</span><span id="line-2843">    return new FirstOnRowColCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),</span>
<span class="source-line-no">2844</span><span id="line-2844">      cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(), qArray, qoffest,</span>
<span class="source-line-no">2845</span><span id="line-2845">      qlength);</span>
<span class="source-line-no">2846</span><span id="line-2846">  }</span>
<span class="source-line-no">2847</span><span id="line-2847"></span>
<span class="source-line-no">2848</span><span id="line-2848">  /**</span>
<span class="source-line-no">2849</span><span id="line-2849">   * Creates the first cell with the row/family/qualifier of this cell and the given timestamp. Uses</span>
<span class="source-line-no">2850</span><span id="line-2850">   * the "maximum" type that guarantees that the new cell is the lowest possible for this</span>
<span class="source-line-no">2851</span><span id="line-2851">   * combination of row, family, qualifier, and timestamp. This cell's own timestamp is ignored.</span>
<span class="source-line-no">2852</span><span id="line-2852">   * @param cell - cell</span>
<span class="source-line-no">2853</span><span id="line-2853">   */</span>
<span class="source-line-no">2854</span><span id="line-2854">  public static ExtendedCell createFirstOnRowColTS(Cell cell, long ts) {</span>
<span class="source-line-no">2855</span><span id="line-2855">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2856</span><span id="line-2856">      return new FirstOnRowColTSByteBufferExtendedCell(</span>
<span class="source-line-no">2857</span><span id="line-2857">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
<span class="source-line-no">2858</span><span id="line-2858">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(),</span>
<span class="source-line-no">2859</span><span id="line-2859">        ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
<span class="source-line-no">2860</span><span id="line-2860">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), cell.getFamilyLength(),</span>
<span class="source-line-no">2861</span><span id="line-2861">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
<span class="source-line-no">2862</span><span id="line-2862">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), cell.getQualifierLength(), ts);</span>
<span class="source-line-no">2863</span><span id="line-2863">    }</span>
<span class="source-line-no">2864</span><span id="line-2864">    return new FirstOnRowColTSCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),</span>
<span class="source-line-no">2865</span><span id="line-2865">      cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),</span>
<span class="source-line-no">2866</span><span id="line-2866">      cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength(), ts);</span>
<span class="source-line-no">2867</span><span id="line-2867">  }</span>
<span class="source-line-no">2868</span><span id="line-2868"></span>
<span class="source-line-no">2869</span><span id="line-2869">  /**</span>
<span class="source-line-no">2870</span><span id="line-2870">   * Create a Cell that is larger than all other possible Cells for the given Cell's row.</span>
<span class="source-line-no">2871</span><span id="line-2871">   * @return Last possible Cell on passed Cell's row.</span>
<span class="source-line-no">2872</span><span id="line-2872">   */</span>
<span class="source-line-no">2873</span><span id="line-2873">  public static ExtendedCell createLastOnRow(final Cell cell) {</span>
<span class="source-line-no">2874</span><span id="line-2874">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2875</span><span id="line-2875">      return new LastOnRowByteBufferExtendedCell(((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
<span class="source-line-no">2876</span><span id="line-2876">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength());</span>
<span class="source-line-no">2877</span><span id="line-2877">    }</span>
<span class="source-line-no">2878</span><span id="line-2878">    return new LastOnRowCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());</span>
<span class="source-line-no">2879</span><span id="line-2879">  }</span>
<span class="source-line-no">2880</span><span id="line-2880"></span>
<span class="source-line-no">2881</span><span id="line-2881">  public static ExtendedCell createLastOnRow(final byte[] row) {</span>
<span class="source-line-no">2882</span><span id="line-2882">    return new LastOnRowCell(row, 0, (short) row.length);</span>
<span class="source-line-no">2883</span><span id="line-2883">  }</span>
<span class="source-line-no">2884</span><span id="line-2884"></span>
<span class="source-line-no">2885</span><span id="line-2885">  /**</span>
<span class="source-line-no">2886</span><span id="line-2886">   * Create a Cell that is larger than all other possible Cells for the given Cell's rk:cf:q. Used</span>
<span class="source-line-no">2887</span><span id="line-2887">   * in creating "fake keys" for the multi-column Bloom filter optimization to skip the row/column</span>
<span class="source-line-no">2888</span><span id="line-2888">   * we already know is not in the file.</span>
<span class="source-line-no">2889</span><span id="line-2889">   * @return Last possible Cell on passed Cell's rk:cf:q.</span>
<span class="source-line-no">2890</span><span id="line-2890">   */</span>
<span class="source-line-no">2891</span><span id="line-2891">  public static ExtendedCell createLastOnRowCol(final Cell cell) {</span>
<span class="source-line-no">2892</span><span id="line-2892">    if (cell instanceof ByteBufferExtendedCell) {</span>
<span class="source-line-no">2893</span><span id="line-2893">      return new LastOnRowColByteBufferExtendedCell(</span>
<span class="source-line-no">2894</span><span id="line-2894">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
<span class="source-line-no">2895</span><span id="line-2895">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(),</span>
<span class="source-line-no">2896</span><span id="line-2896">        ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
<span class="source-line-no">2897</span><span id="line-2897">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), cell.getFamilyLength(),</span>
<span class="source-line-no">2898</span><span id="line-2898">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
<span class="source-line-no">2899</span><span id="line-2899">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), cell.getQualifierLength());</span>
<span class="source-line-no">2900</span><span id="line-2900">    }</span>
<span class="source-line-no">2901</span><span id="line-2901">    return new LastOnRowColCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),</span>
<span class="source-line-no">2902</span><span id="line-2902">      cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),</span>
<span class="source-line-no">2903</span><span id="line-2903">      cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());</span>
<span class="source-line-no">2904</span><span id="line-2904">  }</span>
<span class="source-line-no">2905</span><span id="line-2905"></span>
<span class="source-line-no">2906</span><span id="line-2906">  /**</span>
<span class="source-line-no">2907</span><span id="line-2907">   * Create a Delete Family Cell for the specified row and family that would be smaller than all</span>
<span class="source-line-no">2908</span><span id="line-2908">   * other possible Delete Family KeyValues that have the same row and family. Used for seeking.</span>
<span class="source-line-no">2909</span><span id="line-2909">   * @param row - row key (arbitrary byte array)</span>
<span class="source-line-no">2910</span><span id="line-2910">   * @param fam - family name</span>
<span class="source-line-no">2911</span><span id="line-2911">   * @return First Delete Family possible key on passed &lt;code&gt;row&lt;/code&gt;.</span>
<span class="source-line-no">2912</span><span id="line-2912">   */</span>
<span class="source-line-no">2913</span><span id="line-2913">  public static ExtendedCell createFirstDeleteFamilyCellOnRow(final byte[] row, final byte[] fam) {</span>
<span class="source-line-no">2914</span><span id="line-2914">    return new FirstOnRowDeleteFamilyCell(row, fam);</span>
<span class="source-line-no">2915</span><span id="line-2915">  }</span>
<span class="source-line-no">2916</span><span id="line-2916"></span>
<span class="source-line-no">2917</span><span id="line-2917">  /**</span>
<span class="source-line-no">2918</span><span id="line-2918">   * In fact, in HBase, all {@link Cell}s are {@link ExtendedCell}s. We do not expect users to</span>
<span class="source-line-no">2919</span><span id="line-2919">   * implement their own {@link Cell} types, except some special projects like Phoenix, where they</span>
<span class="source-line-no">2920</span><span id="line-2920">   * just use {@link org.apache.hadoop.hbase.KeyValue} and {@link ExtendedCell} directly.</span>
<span class="source-line-no">2921</span><span id="line-2921">   * @return the original {@code cell} which has already been cast to an {@link ExtendedCell}.</span>
<span class="source-line-no">2922</span><span id="line-2922">   * @throws IllegalArgumentException if the given {@code cell} is not an {@link ExtendedCell}.</span>
<span class="source-line-no">2923</span><span id="line-2923">   */</span>
<span class="source-line-no">2924</span><span id="line-2924">  public static ExtendedCell ensureExtendedCell(Cell cell) {</span>
<span class="source-line-no">2925</span><span id="line-2925">    if (cell == null) {</span>
<span class="source-line-no">2926</span><span id="line-2926">      return null;</span>
<span class="source-line-no">2927</span><span id="line-2927">    }</span>
<span class="source-line-no">2928</span><span id="line-2928">    Preconditions.checkArgument(cell instanceof ExtendedCell, "Unsupported cell type: %s",</span>
<span class="source-line-no">2929</span><span id="line-2929">      cell.getClass().getName());</span>
<span class="source-line-no">2930</span><span id="line-2930">    return (ExtendedCell) cell;</span>
<span class="source-line-no">2931</span><span id="line-2931">  }</span>
<span class="source-line-no">2932</span><span id="line-2932"></span>
<span class="source-line-no">2933</span><span id="line-2933">  public static boolean equals(ExtendedCell a, ExtendedCell b) {</span>
<span class="source-line-no">2934</span><span id="line-2934">    return CellUtil.matchingRows(a, b) &amp;&amp; CellUtil.matchingFamily(a, b)</span>
<span class="source-line-no">2935</span><span id="line-2935">      &amp;&amp; CellUtil.matchingQualifier(a, b) &amp;&amp; CellUtil.matchingTimestamp(a, b)</span>
<span class="source-line-no">2936</span><span id="line-2936">      &amp;&amp; PrivateCellUtil.matchingType(a, b);</span>
<span class="source-line-no">2937</span><span id="line-2937">  }</span>
<span class="source-line-no">2938</span><span id="line-2938"></span>
<span class="source-line-no">2939</span><span id="line-2939">  /** Returns ExtendedCellScanner interface over &lt;code&gt;cellIterables&lt;/code&gt; */</span>
<span class="source-line-no">2940</span><span id="line-2940">  public static ExtendedCellScanner</span>
<span class="source-line-no">2941</span><span id="line-2941">    createExtendedCellScanner(final List&lt;? extends ExtendedCellScannable&gt; cellScannerables) {</span>
<span class="source-line-no">2942</span><span id="line-2942">    return new ExtendedCellScanner() {</span>
<span class="source-line-no">2943</span><span id="line-2943">      private final Iterator&lt;? extends ExtendedCellScannable&gt; iterator =</span>
<span class="source-line-no">2944</span><span id="line-2944">        cellScannerables.iterator();</span>
<span class="source-line-no">2945</span><span id="line-2945">      private ExtendedCellScanner cellScanner = null;</span>
<span class="source-line-no">2946</span><span id="line-2946"></span>
<span class="source-line-no">2947</span><span id="line-2947">      @Override</span>
<span class="source-line-no">2948</span><span id="line-2948">      public ExtendedCell current() {</span>
<span class="source-line-no">2949</span><span id="line-2949">        return this.cellScanner != null ? this.cellScanner.current() : null;</span>
<span class="source-line-no">2950</span><span id="line-2950">      }</span>
<span class="source-line-no">2951</span><span id="line-2951"></span>
<span class="source-line-no">2952</span><span id="line-2952">      @Override</span>
<span class="source-line-no">2953</span><span id="line-2953">      public boolean advance() throws IOException {</span>
<span class="source-line-no">2954</span><span id="line-2954">        while (true) {</span>
<span class="source-line-no">2955</span><span id="line-2955">          if (this.cellScanner == null) {</span>
<span class="source-line-no">2956</span><span id="line-2956">            if (!this.iterator.hasNext()) {</span>
<span class="source-line-no">2957</span><span id="line-2957">              return false;</span>
<span class="source-line-no">2958</span><span id="line-2958">            }</span>
<span class="source-line-no">2959</span><span id="line-2959">            this.cellScanner = this.iterator.next().cellScanner();</span>
<span class="source-line-no">2960</span><span id="line-2960">          }</span>
<span class="source-line-no">2961</span><span id="line-2961">          if (this.cellScanner.advance()) {</span>
<span class="source-line-no">2962</span><span id="line-2962">            return true;</span>
<span class="source-line-no">2963</span><span id="line-2963">          }</span>
<span class="source-line-no">2964</span><span id="line-2964">          this.cellScanner = null;</span>
<span class="source-line-no">2965</span><span id="line-2965">        }</span>
<span class="source-line-no">2966</span><span id="line-2966">      }</span>
<span class="source-line-no">2967</span><span id="line-2967">    };</span>
<span class="source-line-no">2968</span><span id="line-2968">  }</span>
<span class="source-line-no">2969</span><span id="line-2969"></span>
<span class="source-line-no">2970</span><span id="line-2970">  /**</span>
<span class="source-line-no">2971</span><span id="line-2971">   * Flatten the map of cells out under the ExtendedCellScanner</span>
<span class="source-line-no">2972</span><span id="line-2972">   * @param map Map of Cell Lists; for example, the map of families to ExtendedCells that is used</span>
<span class="source-line-no">2973</span><span id="line-2973">   *            inside Put, etc., keeping Cells organized by family.</span>
<span class="source-line-no">2974</span><span id="line-2974">   * @return ExtendedCellScanner interface over &lt;code&gt;cellIterable&lt;/code&gt;</span>
<span class="source-line-no">2975</span><span id="line-2975">   */</span>
<span class="source-line-no">2976</span><span id="line-2976">  public static ExtendedCellScanner</span>
<span class="source-line-no">2977</span><span id="line-2977">    createExtendedCellScanner(final NavigableMap&lt;byte[], List&lt;ExtendedCell&gt;&gt; map) {</span>
<span class="source-line-no">2978</span><span id="line-2978">    return new ExtendedCellScanner() {</span>
<span class="source-line-no">2979</span><span id="line-2979">      private final Iterator&lt;Entry&lt;byte[], List&lt;ExtendedCell&gt;&gt;&gt; entries = map.entrySet().iterator();</span>
<span class="source-line-no">2980</span><span id="line-2980">      private Iterator&lt;ExtendedCell&gt; currentIterator = null;</span>
<span class="source-line-no">2981</span><span id="line-2981">      private ExtendedCell currentCell;</span>
<span class="source-line-no">2982</span><span id="line-2982"></span>
<span class="source-line-no">2983</span><span id="line-2983">      @Override</span>
<span class="source-line-no">2984</span><span id="line-2984">      public ExtendedCell current() {</span>
<span class="source-line-no">2985</span><span id="line-2985">        return this.currentCell;</span>
<span class="source-line-no">2986</span><span id="line-2986">      }</span>
<span class="source-line-no">2987</span><span id="line-2987"></span>
<span class="source-line-no">2988</span><span id="line-2988">      @Override</span>
<span class="source-line-no">2989</span><span id="line-2989">      public boolean advance() {</span>
<span class="source-line-no">2990</span><span id="line-2990">        while (true) {</span>
<span class="source-line-no">2991</span><span id="line-2991">          if (this.currentIterator == null) {</span>
<span class="source-line-no">2992</span><span id="line-2992">            if (!this.entries.hasNext()) {</span>
<span class="source-line-no">2993</span><span id="line-2993">              return false;</span>
<span class="source-line-no">2994</span><span id="line-2994">            }</span>
<span class="source-line-no">2995</span><span id="line-2995">            this.currentIterator = this.entries.next().getValue().iterator();</span>
<span class="source-line-no">2996</span><span id="line-2996">          }</span>
<span class="source-line-no">2997</span><span id="line-2997">          if (this.currentIterator.hasNext()) {</span>
<span class="source-line-no">2998</span><span id="line-2998">            this.currentCell = this.currentIterator.next();</span>
<span class="source-line-no">2999</span><span id="line-2999">            return true;</span>
<span class="source-line-no">3000</span><span id="line-3000">          }</span>
<span class="source-line-no">3001</span><span id="line-3001">          this.currentCell = null;</span>
<span class="source-line-no">3002</span><span id="line-3002">          this.currentIterator = null;</span>
<span class="source-line-no">3003</span><span id="line-3003">        }</span>
<span class="source-line-no">3004</span><span id="line-3004">      }</span>
<span class="source-line-no">3005</span><span id="line-3005">    };</span>
<span class="source-line-no">3006</span><span id="line-3006">  }</span>
<span class="source-line-no">3007</span><span id="line-3007"></span>
<span class="source-line-no">3008</span><span id="line-3008">  /** Returns CellScanner interface over &lt;code&gt;cellArray&lt;/code&gt; */</span>
<span class="source-line-no">3009</span><span id="line-3009">  public static ExtendedCellScanner createExtendedCellScanner(final ExtendedCell[] cellArray) {</span>
<span class="source-line-no">3010</span><span id="line-3010">    return new ExtendedCellScanner() {</span>
<span class="source-line-no">3011</span><span id="line-3011">      private final ExtendedCell[] cells = cellArray;</span>
<span class="source-line-no">3012</span><span id="line-3012">      private int index = -1;</span>
<span class="source-line-no">3013</span><span id="line-3013"></span>
<span class="source-line-no">3014</span><span id="line-3014">      @Override</span>
<span class="source-line-no">3015</span><span id="line-3015">      public ExtendedCell current() {</span>
<span class="source-line-no">3016</span><span id="line-3016">        if (cells == null) {</span>
<span class="source-line-no">3017</span><span id="line-3017">          return null;</span>
<span class="source-line-no">3018</span><span id="line-3018">        }</span>
<span class="source-line-no">3019</span><span id="line-3019">        return (index &lt; 0) ? null : this.cells[index];</span>
<span class="source-line-no">3020</span><span id="line-3020">      }</span>
<span class="source-line-no">3021</span><span id="line-3021"></span>
<span class="source-line-no">3022</span><span id="line-3022">      @Override</span>
<span class="source-line-no">3023</span><span id="line-3023">      public boolean advance() {</span>
<span class="source-line-no">3024</span><span id="line-3024">        if (cells == null) {</span>
<span class="source-line-no">3025</span><span id="line-3025">          return false;</span>
<span class="source-line-no">3026</span><span id="line-3026">        }</span>
<span class="source-line-no">3027</span><span id="line-3027">        return ++index &lt; this.cells.length;</span>
<span class="source-line-no">3028</span><span id="line-3028">      }</span>
<span class="source-line-no">3029</span><span id="line-3029">    };</span>
<span class="source-line-no">3030</span><span id="line-3030">  }</span>
<span class="source-line-no">3031</span><span id="line-3031"></span>
<span class="source-line-no">3032</span><span id="line-3032">  /** Returns ExtendedCellScanner interface over &lt;code&gt;cellIterable&lt;/code&gt; */</span>
<span class="source-line-no">3033</span><span id="line-3033">  public static ExtendedCellScanner</span>
<span class="source-line-no">3034</span><span id="line-3034">    createExtendedCellScanner(final Iterable&lt;ExtendedCell&gt; cellIterable) {</span>
<span class="source-line-no">3035</span><span id="line-3035">    if (cellIterable == null) {</span>
<span class="source-line-no">3036</span><span id="line-3036">      return null;</span>
<span class="source-line-no">3037</span><span id="line-3037">    }</span>
<span class="source-line-no">3038</span><span id="line-3038">    return createExtendedCellScanner(cellIterable.iterator());</span>
<span class="source-line-no">3039</span><span id="line-3039">  }</span>
<span class="source-line-no">3040</span><span id="line-3040"></span>
<span class="source-line-no">3041</span><span id="line-3041">  /**</span>
<span class="source-line-no">3042</span><span id="line-3042">   * Returns ExtendedCellScanner interface over &lt;code&gt;cellIterable&lt;/code&gt; or null if</span>
<span class="source-line-no">3043</span><span id="line-3043">   * &lt;code&gt;cells&lt;/code&gt; is null</span>
<span class="source-line-no">3044</span><span id="line-3044">   */</span>
<span class="source-line-no">3045</span><span id="line-3045">  public static ExtendedCellScanner createExtendedCellScanner(final Iterator&lt;ExtendedCell&gt; cells) {</span>
<span class="source-line-no">3046</span><span id="line-3046">    if (cells == null) {</span>
<span class="source-line-no">3047</span><span id="line-3047">      return null;</span>
<span class="source-line-no">3048</span><span id="line-3048">    }</span>
<span class="source-line-no">3049</span><span id="line-3049">    return new ExtendedCellScanner() {</span>
<span class="source-line-no">3050</span><span id="line-3050">      private final Iterator&lt;ExtendedCell&gt; iterator = cells;</span>
<span class="source-line-no">3051</span><span id="line-3051">      private ExtendedCell current = null;</span>
<span class="source-line-no">3052</span><span id="line-3052"></span>
<span class="source-line-no">3053</span><span id="line-3053">      @Override</span>
<span class="source-line-no">3054</span><span id="line-3054">      public ExtendedCell current() {</span>
<span class="source-line-no">3055</span><span id="line-3055">        return this.current;</span>
<span class="source-line-no">3056</span><span id="line-3056">      }</span>
<span class="source-line-no">3057</span><span id="line-3057"></span>
<span class="source-line-no">3058</span><span id="line-3058">      @Override</span>
<span class="source-line-no">3059</span><span id="line-3059">      public boolean advance() {</span>
<span class="source-line-no">3060</span><span id="line-3060">        boolean hasNext = this.iterator.hasNext();</span>
<span class="source-line-no">3061</span><span id="line-3061">        this.current = hasNext ? this.iterator.next() : null;</span>
<span class="source-line-no">3062</span><span id="line-3062">        return hasNext;</span>
<span class="source-line-no">3063</span><span id="line-3063">      }</span>
<span class="source-line-no">3064</span><span id="line-3064">    };</span>
<span class="source-line-no">3065</span><span id="line-3065">  }</span>
<span class="source-line-no">3066</span><span id="line-3066"></span>
<span class="source-line-no">3067</span><span id="line-3067">  private static final Cell.Type[] CELL_TYPE_CODE_ARRAY = new Cell.Type[256];</span>
<span class="source-line-no">3068</span><span id="line-3068"></span>
<span class="source-line-no">3069</span><span id="line-3069">  static {</span>
<span class="source-line-no">3070</span><span id="line-3070">    for (Cell.Type t : Cell.Type.values()) {</span>
<span class="source-line-no">3071</span><span id="line-3071">      CELL_TYPE_CODE_ARRAY[t.getCode() &amp; 0xff] = t;</span>
<span class="source-line-no">3072</span><span id="line-3072">    }</span>
<span class="source-line-no">3073</span><span id="line-3073">  }</span>
<span class="source-line-no">3074</span><span id="line-3074"></span>
<span class="source-line-no">3075</span><span id="line-3075">  public static Cell.Type code2Type(byte code) {</span>
<span class="source-line-no">3076</span><span id="line-3076">    Cell.Type t = CELL_TYPE_CODE_ARRAY[code &amp; 0xff];</span>
<span class="source-line-no">3077</span><span id="line-3077">    if (t != null) {</span>
<span class="source-line-no">3078</span><span id="line-3078">      return t;</span>
<span class="source-line-no">3079</span><span id="line-3079">    }</span>
<span class="source-line-no">3080</span><span id="line-3080">    throw new UnsupportedOperationException("Invalid type of cell " + code);</span>
<span class="source-line-no">3081</span><span id="line-3081">  }</span>
<span class="source-line-no">3082</span><span id="line-3082"></span>
<span class="source-line-no">3083</span><span id="line-3083">  public static byte getTypeByte(Cell c) {</span>
<span class="source-line-no">3084</span><span id="line-3084">    if (c instanceof ExtendedCell) {</span>
<span class="source-line-no">3085</span><span id="line-3085">      return ((ExtendedCell) c).getTypeByte();</span>
<span class="source-line-no">3086</span><span id="line-3086">    } else {</span>
<span class="source-line-no">3087</span><span id="line-3087">      return c.getType().getCode();</span>
<span class="source-line-no">3088</span><span id="line-3088">    }</span>
<span class="source-line-no">3089</span><span id="line-3089">  }</span>
<span class="source-line-no">3090</span><span id="line-3090"></span>
<span class="source-line-no">3091</span><span id="line-3091">  public static long getSequenceId(Cell c) {</span>
<span class="source-line-no">3092</span><span id="line-3092">    if (c instanceof ExtendedCell) {</span>
<span class="source-line-no">3093</span><span id="line-3093">      return ((ExtendedCell) c).getSequenceId();</span>
<span class="source-line-no">3094</span><span id="line-3094">    } else {</span>
<span class="source-line-no">3095</span><span id="line-3095">      return HConstants.NO_SEQNUM;</span>
<span class="source-line-no">3096</span><span id="line-3096">    }</span>
<span class="source-line-no">3097</span><span id="line-3097">  }</span>
<span class="source-line-no">3098</span><span id="line-3098">}</span>




























































</pre>
</div>
</main>
</body>
</html>
