<!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: ByteBufferKeyOnlyKeyValue">
<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 java.io.IOException;</span>
<span class="source-line-no">021</span><span id="line-21">import java.nio.ByteBuffer;</span>
<span class="source-line-no">022</span><span id="line-22">import java.util.Collections;</span>
<span class="source-line-no">023</span><span id="line-23">import java.util.Iterator;</span>
<span class="source-line-no">024</span><span id="line-24">import java.util.Optional;</span>
<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.util.ByteBufferUtils;</span>
<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.util.Bytes;</span>
<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.hbase.util.ClassSize;</span>
<span class="source-line-no">028</span><span id="line-28">import org.apache.yetus.audience.InterfaceAudience;</span>
<span class="source-line-no">029</span><span id="line-29"></span>
<span class="source-line-no">030</span><span id="line-30">/**</span>
<span class="source-line-no">031</span><span id="line-31"> * This is a key only Cell implementation which is identical to {@link KeyValue.KeyOnlyKeyValue}</span>
<span class="source-line-no">032</span><span id="line-32"> * with respect to key serialization but have its data in the form of Byte buffer (onheap and</span>
<span class="source-line-no">033</span><span id="line-33"> * offheap).</span>
<span class="source-line-no">034</span><span id="line-34"> */</span>
<span class="source-line-no">035</span><span id="line-35">@InterfaceAudience.Private</span>
<span class="source-line-no">036</span><span id="line-36">public class ByteBufferKeyOnlyKeyValue extends ByteBufferExtendedCell {</span>
<span class="source-line-no">037</span><span id="line-37">  public static final int FIXED_OVERHEAD =</span>
<span class="source-line-no">038</span><span id="line-38">    ClassSize.OBJECT + ClassSize.REFERENCE + (2 * Bytes.SIZEOF_INT) + Bytes.SIZEOF_SHORT;</span>
<span class="source-line-no">039</span><span id="line-39">  private ByteBuffer buf;</span>
<span class="source-line-no">040</span><span id="line-40">  private int offset = 0; // offset into buffer where key starts at</span>
<span class="source-line-no">041</span><span id="line-41">  private int length = 0; // length of this.</span>
<span class="source-line-no">042</span><span id="line-42">  private short rowLen;</span>
<span class="source-line-no">043</span><span id="line-43"></span>
<span class="source-line-no">044</span><span id="line-44">  /**</span>
<span class="source-line-no">045</span><span id="line-45">   * Used in cases where we want to avoid lot of garbage by allocating new objects with different</span>
<span class="source-line-no">046</span><span id="line-46">   * keys. Use the emtpy construtor and set the keys using {@link #setKey(ByteBuffer, int, int)}</span>
<span class="source-line-no">047</span><span id="line-47">   */</span>
<span class="source-line-no">048</span><span id="line-48">  public ByteBufferKeyOnlyKeyValue() {</span>
<span class="source-line-no">049</span><span id="line-49">  }</span>
<span class="source-line-no">050</span><span id="line-50"></span>
<span class="source-line-no">051</span><span id="line-51">  public ByteBufferKeyOnlyKeyValue(ByteBuffer buf, int offset, int length) {</span>
<span class="source-line-no">052</span><span id="line-52">    setKey(buf, offset, length);</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">  /**</span>
<span class="source-line-no">056</span><span id="line-56">   * A setter that helps to avoid object creation every time and whenever there is a need to create</span>
<span class="source-line-no">057</span><span id="line-57">   * new OffheapKeyOnlyKeyValue.</span>
<span class="source-line-no">058</span><span id="line-58">   */</span>
<span class="source-line-no">059</span><span id="line-59">  public void setKey(ByteBuffer key, int offset, int length) {</span>
<span class="source-line-no">060</span><span id="line-60">    setKey(key, offset, length, ByteBufferUtils.toShort(key, offset));</span>
<span class="source-line-no">061</span><span id="line-61">  }</span>
<span class="source-line-no">062</span><span id="line-62"></span>
<span class="source-line-no">063</span><span id="line-63">  /**</span>
<span class="source-line-no">064</span><span id="line-64">   * A setter that helps to avoid object creation every time and whenever there is a need to create</span>
<span class="source-line-no">065</span><span id="line-65">   * new OffheapKeyOnlyKeyValue.</span>
<span class="source-line-no">066</span><span id="line-66">   * @param key    - the key part of the cell</span>
<span class="source-line-no">067</span><span id="line-67">   * @param offset - offset of the cell</span>
<span class="source-line-no">068</span><span id="line-68">   * @param length - length of the cell</span>
<span class="source-line-no">069</span><span id="line-69">   * @param rowLen - the rowlen part of the cell</span>
<span class="source-line-no">070</span><span id="line-70">   */</span>
<span class="source-line-no">071</span><span id="line-71">  public void setKey(ByteBuffer key, int offset, int length, short rowLen) {</span>
<span class="source-line-no">072</span><span id="line-72">    this.buf = key;</span>
<span class="source-line-no">073</span><span id="line-73">    this.offset = offset;</span>
<span class="source-line-no">074</span><span id="line-74">    this.length = length;</span>
<span class="source-line-no">075</span><span id="line-75">    this.rowLen = rowLen;</span>
<span class="source-line-no">076</span><span id="line-76">  }</span>
<span class="source-line-no">077</span><span id="line-77"></span>
<span class="source-line-no">078</span><span id="line-78">  @Override</span>
<span class="source-line-no">079</span><span id="line-79">  public byte[] getRowArray() {</span>
<span class="source-line-no">080</span><span id="line-80">    if (this.buf.hasArray()) {</span>
<span class="source-line-no">081</span><span id="line-81">      return this.buf.array();</span>
<span class="source-line-no">082</span><span id="line-82">    }</span>
<span class="source-line-no">083</span><span id="line-83">    return CellUtil.cloneRow(this);</span>
<span class="source-line-no">084</span><span id="line-84">  }</span>
<span class="source-line-no">085</span><span id="line-85"></span>
<span class="source-line-no">086</span><span id="line-86">  @Override</span>
<span class="source-line-no">087</span><span id="line-87">  public int getRowOffset() {</span>
<span class="source-line-no">088</span><span id="line-88">    if (this.buf.hasArray()) {</span>
<span class="source-line-no">089</span><span id="line-89">      return getRowPosition() + this.buf.arrayOffset();</span>
<span class="source-line-no">090</span><span id="line-90">    }</span>
<span class="source-line-no">091</span><span id="line-91">    return 0;</span>
<span class="source-line-no">092</span><span id="line-92">  }</span>
<span class="source-line-no">093</span><span id="line-93"></span>
<span class="source-line-no">094</span><span id="line-94">  @Override</span>
<span class="source-line-no">095</span><span id="line-95">  public short getRowLength() {</span>
<span class="source-line-no">096</span><span id="line-96">    return this.rowLen;</span>
<span class="source-line-no">097</span><span id="line-97">  }</span>
<span class="source-line-no">098</span><span id="line-98"></span>
<span class="source-line-no">099</span><span id="line-99">  @Override</span>
<span class="source-line-no">100</span><span id="line-100">  public byte[] getFamilyArray() {</span>
<span class="source-line-no">101</span><span id="line-101">    if (this.buf.hasArray()) {</span>
<span class="source-line-no">102</span><span id="line-102">      return this.buf.array();</span>
<span class="source-line-no">103</span><span id="line-103">    }</span>
<span class="source-line-no">104</span><span id="line-104">    return CellUtil.cloneFamily(this);</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">  @Override</span>
<span class="source-line-no">108</span><span id="line-108">  public int getFamilyOffset() {</span>
<span class="source-line-no">109</span><span id="line-109">    if (this.buf.hasArray()) {</span>
<span class="source-line-no">110</span><span id="line-110">      return getFamilyPosition() + this.buf.arrayOffset();</span>
<span class="source-line-no">111</span><span id="line-111">    }</span>
<span class="source-line-no">112</span><span id="line-112">    return 0;</span>
<span class="source-line-no">113</span><span id="line-113">  }</span>
<span class="source-line-no">114</span><span id="line-114"></span>
<span class="source-line-no">115</span><span id="line-115">  @Override</span>
<span class="source-line-no">116</span><span id="line-116">  public byte getFamilyLength() {</span>
<span class="source-line-no">117</span><span id="line-117">    return getFamilyLength(getFamilyLengthPosition());</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">  private byte getFamilyLength(int famLenPos) {</span>
<span class="source-line-no">121</span><span id="line-121">    return ByteBufferUtils.toByte(this.buf, famLenPos);</span>
<span class="source-line-no">122</span><span id="line-122">  }</span>
<span class="source-line-no">123</span><span id="line-123"></span>
<span class="source-line-no">124</span><span id="line-124">  @Override</span>
<span class="source-line-no">125</span><span id="line-125">  public byte[] getQualifierArray() {</span>
<span class="source-line-no">126</span><span id="line-126">    if (this.buf.hasArray()) {</span>
<span class="source-line-no">127</span><span id="line-127">      return this.buf.array();</span>
<span class="source-line-no">128</span><span id="line-128">    }</span>
<span class="source-line-no">129</span><span id="line-129">    return CellUtil.cloneQualifier(this);</span>
<span class="source-line-no">130</span><span id="line-130">  }</span>
<span class="source-line-no">131</span><span id="line-131"></span>
<span class="source-line-no">132</span><span id="line-132">  @Override</span>
<span class="source-line-no">133</span><span id="line-133">  public int getQualifierOffset() {</span>
<span class="source-line-no">134</span><span id="line-134">    if (this.buf.hasArray()) {</span>
<span class="source-line-no">135</span><span id="line-135">      return getQualifierPosition() + this.buf.arrayOffset();</span>
<span class="source-line-no">136</span><span id="line-136">    }</span>
<span class="source-line-no">137</span><span id="line-137">    return 0;</span>
<span class="source-line-no">138</span><span id="line-138">  }</span>
<span class="source-line-no">139</span><span id="line-139"></span>
<span class="source-line-no">140</span><span id="line-140">  @Override</span>
<span class="source-line-no">141</span><span id="line-141">  public int getQualifierLength() {</span>
<span class="source-line-no">142</span><span id="line-142">    return getQualifierLength(getRowLength(), getFamilyLength());</span>
<span class="source-line-no">143</span><span id="line-143">  }</span>
<span class="source-line-no">144</span><span id="line-144"></span>
<span class="source-line-no">145</span><span id="line-145">  private int getQualifierLength(int rlength, int flength) {</span>
<span class="source-line-no">146</span><span id="line-146">    return this.length - (int) KeyValue.getKeyDataStructureSize(rlength, flength, 0);</span>
<span class="source-line-no">147</span><span id="line-147">  }</span>
<span class="source-line-no">148</span><span id="line-148"></span>
<span class="source-line-no">149</span><span id="line-149">  @Override</span>
<span class="source-line-no">150</span><span id="line-150">  public long getTimestamp() {</span>
<span class="source-line-no">151</span><span id="line-151">    return ByteBufferUtils.toLong(this.buf, getTimestampOffset());</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">  private int getTimestampOffset() {</span>
<span class="source-line-no">155</span><span id="line-155">    return this.offset + this.length - KeyValue.TIMESTAMP_TYPE_SIZE;</span>
<span class="source-line-no">156</span><span id="line-156">  }</span>
<span class="source-line-no">157</span><span id="line-157"></span>
<span class="source-line-no">158</span><span id="line-158">  @Override</span>
<span class="source-line-no">159</span><span id="line-159">  public byte getTypeByte() {</span>
<span class="source-line-no">160</span><span id="line-160">    return getTypeByte(this.length);</span>
<span class="source-line-no">161</span><span id="line-161">  }</span>
<span class="source-line-no">162</span><span id="line-162"></span>
<span class="source-line-no">163</span><span id="line-163">  byte getTypeByte(int keyLen) {</span>
<span class="source-line-no">164</span><span id="line-164">    return ByteBufferUtils.toByte(this.buf, this.offset + keyLen - 1);</span>
<span class="source-line-no">165</span><span id="line-165">  }</span>
<span class="source-line-no">166</span><span id="line-166"></span>
<span class="source-line-no">167</span><span id="line-167">  @Override</span>
<span class="source-line-no">168</span><span id="line-168">  public void setSequenceId(long seqId) throws IOException {</span>
<span class="source-line-no">169</span><span id="line-169">    throw new IllegalArgumentException("This is a key only Cell");</span>
<span class="source-line-no">170</span><span id="line-170">  }</span>
<span class="source-line-no">171</span><span id="line-171"></span>
<span class="source-line-no">172</span><span id="line-172">  @Override</span>
<span class="source-line-no">173</span><span id="line-173">  public void setTimestamp(long ts) throws IOException {</span>
<span class="source-line-no">174</span><span id="line-174">    throw new IllegalArgumentException("This is a key only Cell");</span>
<span class="source-line-no">175</span><span id="line-175">  }</span>
<span class="source-line-no">176</span><span id="line-176"></span>
<span class="source-line-no">177</span><span id="line-177">  @Override</span>
<span class="source-line-no">178</span><span id="line-178">  public void setTimestamp(byte[] ts) throws IOException {</span>
<span class="source-line-no">179</span><span id="line-179">    throw new IllegalArgumentException("This is a key only Cell");</span>
<span class="source-line-no">180</span><span id="line-180">  }</span>
<span class="source-line-no">181</span><span id="line-181"></span>
<span class="source-line-no">182</span><span id="line-182">  @Override</span>
<span class="source-line-no">183</span><span id="line-183">  public long getSequenceId() {</span>
<span class="source-line-no">184</span><span id="line-184">    return 0;</span>
<span class="source-line-no">185</span><span id="line-185">  }</span>
<span class="source-line-no">186</span><span id="line-186"></span>
<span class="source-line-no">187</span><span id="line-187">  @Override</span>
<span class="source-line-no">188</span><span id="line-188">  public byte[] getValueArray() {</span>
<span class="source-line-no">189</span><span id="line-189">    throw new IllegalArgumentException("This is a key only Cell");</span>
<span class="source-line-no">190</span><span id="line-190">  }</span>
<span class="source-line-no">191</span><span id="line-191"></span>
<span class="source-line-no">192</span><span id="line-192">  @Override</span>
<span class="source-line-no">193</span><span id="line-193">  public int getValueOffset() {</span>
<span class="source-line-no">194</span><span id="line-194">    return 0;</span>
<span class="source-line-no">195</span><span id="line-195">  }</span>
<span class="source-line-no">196</span><span id="line-196"></span>
<span class="source-line-no">197</span><span id="line-197">  @Override</span>
<span class="source-line-no">198</span><span id="line-198">  public int getValueLength() {</span>
<span class="source-line-no">199</span><span id="line-199">    return 0;</span>
<span class="source-line-no">200</span><span id="line-200">  }</span>
<span class="source-line-no">201</span><span id="line-201"></span>
<span class="source-line-no">202</span><span id="line-202">  @Override</span>
<span class="source-line-no">203</span><span id="line-203">  public byte[] getTagsArray() {</span>
<span class="source-line-no">204</span><span id="line-204">    throw new IllegalArgumentException("This is a key only Cell");</span>
<span class="source-line-no">205</span><span id="line-205">  }</span>
<span class="source-line-no">206</span><span id="line-206"></span>
<span class="source-line-no">207</span><span id="line-207">  @Override</span>
<span class="source-line-no">208</span><span id="line-208">  public int getTagsOffset() {</span>
<span class="source-line-no">209</span><span id="line-209">    return 0;</span>
<span class="source-line-no">210</span><span id="line-210">  }</span>
<span class="source-line-no">211</span><span id="line-211"></span>
<span class="source-line-no">212</span><span id="line-212">  @Override</span>
<span class="source-line-no">213</span><span id="line-213">  public int getTagsLength() {</span>
<span class="source-line-no">214</span><span id="line-214">    return 0;</span>
<span class="source-line-no">215</span><span id="line-215">  }</span>
<span class="source-line-no">216</span><span id="line-216"></span>
<span class="source-line-no">217</span><span id="line-217">  @Override</span>
<span class="source-line-no">218</span><span id="line-218">  public ByteBuffer getRowByteBuffer() {</span>
<span class="source-line-no">219</span><span id="line-219">    return this.buf;</span>
<span class="source-line-no">220</span><span id="line-220">  }</span>
<span class="source-line-no">221</span><span id="line-221"></span>
<span class="source-line-no">222</span><span id="line-222">  @Override</span>
<span class="source-line-no">223</span><span id="line-223">  public int getRowPosition() {</span>
<span class="source-line-no">224</span><span id="line-224">    return this.offset + Bytes.SIZEOF_SHORT;</span>
<span class="source-line-no">225</span><span id="line-225">  }</span>
<span class="source-line-no">226</span><span id="line-226"></span>
<span class="source-line-no">227</span><span id="line-227">  @Override</span>
<span class="source-line-no">228</span><span id="line-228">  public ByteBuffer getFamilyByteBuffer() {</span>
<span class="source-line-no">229</span><span id="line-229">    return this.buf;</span>
<span class="source-line-no">230</span><span id="line-230">  }</span>
<span class="source-line-no">231</span><span id="line-231"></span>
<span class="source-line-no">232</span><span id="line-232">  @Override</span>
<span class="source-line-no">233</span><span id="line-233">  public int getFamilyPosition() {</span>
<span class="source-line-no">234</span><span id="line-234">    return getFamilyLengthPosition() + Bytes.SIZEOF_BYTE;</span>
<span class="source-line-no">235</span><span id="line-235">  }</span>
<span class="source-line-no">236</span><span id="line-236"></span>
<span class="source-line-no">237</span><span id="line-237">  // The position in BB where the family length is added.</span>
<span class="source-line-no">238</span><span id="line-238">  private int getFamilyLengthPosition() {</span>
<span class="source-line-no">239</span><span id="line-239">    return getFamilyLengthPosition(getRowLength());</span>
<span class="source-line-no">240</span><span id="line-240">  }</span>
<span class="source-line-no">241</span><span id="line-241"></span>
<span class="source-line-no">242</span><span id="line-242">  int getFamilyLengthPosition(int rowLength) {</span>
<span class="source-line-no">243</span><span id="line-243">    return this.offset + Bytes.SIZEOF_SHORT + rowLength;</span>
<span class="source-line-no">244</span><span id="line-244">  }</span>
<span class="source-line-no">245</span><span id="line-245"></span>
<span class="source-line-no">246</span><span id="line-246">  @Override</span>
<span class="source-line-no">247</span><span id="line-247">  public ByteBuffer getQualifierByteBuffer() {</span>
<span class="source-line-no">248</span><span id="line-248">    return this.buf;</span>
<span class="source-line-no">249</span><span id="line-249">  }</span>
<span class="source-line-no">250</span><span id="line-250"></span>
<span class="source-line-no">251</span><span id="line-251">  @Override</span>
<span class="source-line-no">252</span><span id="line-252">  public int getQualifierPosition() {</span>
<span class="source-line-no">253</span><span id="line-253">    int famLenPos = getFamilyLengthPosition();</span>
<span class="source-line-no">254</span><span id="line-254">    return famLenPos + Bytes.SIZEOF_BYTE + getFamilyLength(famLenPos);</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 ByteBuffer getValueByteBuffer() {</span>
<span class="source-line-no">259</span><span id="line-259">    throw new IllegalArgumentException("This is a key only Cell");</span>
<span class="source-line-no">260</span><span id="line-260">  }</span>
<span class="source-line-no">261</span><span id="line-261"></span>
<span class="source-line-no">262</span><span id="line-262">  @Override</span>
<span class="source-line-no">263</span><span id="line-263">  public int getValuePosition() {</span>
<span class="source-line-no">264</span><span id="line-264">    return 0;</span>
<span class="source-line-no">265</span><span id="line-265">  }</span>
<span class="source-line-no">266</span><span id="line-266"></span>
<span class="source-line-no">267</span><span id="line-267">  @Override</span>
<span class="source-line-no">268</span><span id="line-268">  public ByteBuffer getTagsByteBuffer() {</span>
<span class="source-line-no">269</span><span id="line-269">    throw new IllegalArgumentException("This is a key only Cell");</span>
<span class="source-line-no">270</span><span id="line-270">  }</span>
<span class="source-line-no">271</span><span id="line-271"></span>
<span class="source-line-no">272</span><span id="line-272">  @Override</span>
<span class="source-line-no">273</span><span id="line-273">  public int getTagsPosition() {</span>
<span class="source-line-no">274</span><span id="line-274">    return 0;</span>
<span class="source-line-no">275</span><span id="line-275">  }</span>
<span class="source-line-no">276</span><span id="line-276"></span>
<span class="source-line-no">277</span><span id="line-277">  @Override</span>
<span class="source-line-no">278</span><span id="line-278">  public String toString() {</span>
<span class="source-line-no">279</span><span id="line-279">    return CellUtil.toString(this, false);</span>
<span class="source-line-no">280</span><span id="line-280">  }</span>
<span class="source-line-no">281</span><span id="line-281"></span>
<span class="source-line-no">282</span><span id="line-282">  @Override</span>
<span class="source-line-no">283</span><span id="line-283">  public Iterator&lt;Tag&gt; getTags() {</span>
<span class="source-line-no">284</span><span id="line-284">    return Collections.emptyIterator();</span>
<span class="source-line-no">285</span><span id="line-285">  }</span>
<span class="source-line-no">286</span><span id="line-286"></span>
<span class="source-line-no">287</span><span id="line-287">  @Override</span>
<span class="source-line-no">288</span><span id="line-288">  public Optional&lt;Tag&gt; getTag(byte type) {</span>
<span class="source-line-no">289</span><span id="line-289">    return Optional.empty();</span>
<span class="source-line-no">290</span><span id="line-290">  }</span>
<span class="source-line-no">291</span><span id="line-291"></span>
<span class="source-line-no">292</span><span id="line-292">  @Override</span>
<span class="source-line-no">293</span><span id="line-293">  public long heapSize() {</span>
<span class="source-line-no">294</span><span id="line-294">    if (this.buf.hasArray()) {</span>
<span class="source-line-no">295</span><span id="line-295">      return ClassSize.align(FIXED_OVERHEAD + length);</span>
<span class="source-line-no">296</span><span id="line-296">    }</span>
<span class="source-line-no">297</span><span id="line-297">    return ClassSize.align(FIXED_OVERHEAD);</span>
<span class="source-line-no">298</span><span id="line-298">  }</span>
<span class="source-line-no">299</span><span id="line-299"></span>
<span class="source-line-no">300</span><span id="line-300">  /**</span>
<span class="source-line-no">301</span><span id="line-301">   * Completely clears the state of this cell. Useful if you want to reuse this object to avoid</span>
<span class="source-line-no">302</span><span id="line-302">   * allocations.</span>
<span class="source-line-no">303</span><span id="line-303">   */</span>
<span class="source-line-no">304</span><span id="line-304">  public void clear() {</span>
<span class="source-line-no">305</span><span id="line-305">    this.buf = null;</span>
<span class="source-line-no">306</span><span id="line-306">    this.offset = 0;</span>
<span class="source-line-no">307</span><span id="line-307">    this.length = 0;</span>
<span class="source-line-no">308</span><span id="line-308">    this.rowLen = 0;</span>
<span class="source-line-no">309</span><span id="line-309">  }</span>
<span class="source-line-no">310</span><span id="line-310">}</span>




























































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