blob: 3ed63be3fd78948d60aaa71a431c8cc8d1fdb273 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>BitStream (OpenJ9 JDK 11)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="keywords" content="com.ibm.dtfj.corereaders.zos.util.BitStream class">
<meta name="keywords" content="rewind()">
<meta name="keywords" content="reset()">
<meta name="keywords" content="writeLongBits()">
<meta name="keywords" content="writeIntBits()">
<meta name="keywords" content="nextWord()">
<meta name="keywords" content="getIndex()">
<meta name="keywords" content="setIndex()">
<meta name="keywords" content="readIntBits()">
<meta name="keywords" content="readLongBits()">
<meta name="keywords" content="log2()">
<meta name="keywords" content="writeDelta()">
<meta name="keywords" content="writeGamma()">
<meta name="keywords" content="writeUnary()">
<meta name="keywords" content="readDelta()">
<meta name="keywords" content="readGamma()">
<meta name="keywords" content="readUnary()">
<meta name="keywords" content="writeVariableByte()">
<meta name="keywords" content="readVariableByte()">
<meta name="keywords" content="writeGolombRice()">
<meta name="keywords" content="readGolombRice()">
<meta name="keywords" content="memoryUsage()">
<meta name="keywords" content="main()">
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../../../jquery/jquery-3.5.1.js"></script>
<script type="text/javascript" src="../../../../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="BitStream (OpenJ9 JDK 11)";
}
}
catch(err) {
}
//-->
var data = {"i0":10,"i1":9,"i2":9,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../../index.html">Overview</a></li>
<li><a href="../../../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/BitStream.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../../index-files/index-1.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage"><div style="margin-top: 9px;"><strong>OpenJ9 JDK 11</strong></div></div>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="moduleLabelInType">Module</span>&nbsp;<a href="../../../../../../module-summary.html">openj9.dtfj</a></div>
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">com.ibm.dtfj.corereaders.zos.util</a></div>
<h2 title="Class BitStream" class="title">Class BitStream</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true" title="class or interface in java.lang" class="externalLink" target="_blank">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>com.ibm.dtfj.corereaders.zos.util.BitStream</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/Serializable.html?is-external=true" title="class or interface in java.io" class="externalLink" target="_blank">Serializable</a></code></dd>
</dl>
<hr>
<pre>public final class <span class="typeNameLabel">BitStream</span>
extends <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true" title="class or interface in java.lang" class="externalLink" target="_blank">Object</a>
implements <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/Serializable.html?is-external=true" title="class or interface in java.io" class="externalLink" target="_blank">Serializable</a></pre>
<div class="block">This class provides a mechanism for writing and reading numbers in a bit stream. In other
words you can for instance write the number 3 in 2 bits followed by the number 1 in 3 bits
and so on, then rewind the stream and read a 2 bit number followed by a 3 bit number etc.
The stream is implemented as an array of 32-bit ints (hereafter referred to as "words")
and methods are provided to move to the next word and to get and set the current index into
the array of words. This enables you to (eg) store a number of sequences of numbers in the same
BitStream and to store the index for each sequence externally somewhere.
<p>
In addition to writing and reading numbers of fixed length, this stream also supports
variable length numbers using a variety of encodings. A good overview of the encodings
used can be found <a href="http://www.csee.umbc.edu/~ian/irF02/lectures/05Compression-for-IR.pdf">here</a>.
This <a href="http://en.wikipedia.org/wiki/Universal_code">Wikipedia article</a> also has
some cool graphs showing the scalability of the encodings.
<p>
Note that all ints are treated as unsigned. You will still get back what you put in if you
write a negative number but if you're using encoded numbers then bear in mind that (eg) -1
will be output as 0xffffffff.
<p>
Todo: might be good to wrap this class round a generic Input/OutputStream.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../../serialized-form.html#com.ibm.dtfj.corereaders.zos.util.BitStream">Serialized Form</a></dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E()">BitStream</a></span>()</code></th>
<td class="colLast">
<div class="block">Create a new BitStream with a default size of 100 bytes.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(int)">BitStream</a></span>&#8203;(int&nbsp;numInts)</code></th>
<td class="colLast">
<div class="block">Create a new BitStream containing the given number of ints.</div>
</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getIndex()">getIndex</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the current word index</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#log2(int)">log2</a></span>&#8203;(int&nbsp;n)</code></th>
<td class="colLast">
<div class="block">Returns the log2 of the given number.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>static void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#main(java.lang.String%5B%5D)">main</a></span>&#8203;(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html?is-external=true" title="class or interface in java.lang" class="externalLink" target="_blank">String</a>[]&nbsp;args)</code></th>
<td class="colLast">
<div class="block">This method is provided to test the BitStream.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#memoryUsage()">memoryUsage</a></span>()</code></th>
<td class="colLast">
<div class="block">Give a rough estimate of how many bytes of storage we use.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#nextWord()">nextWord</a></span>()</code></th>
<td class="colLast">
<div class="block">Move to the next full word boundary.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#readDelta()">readDelta</a></span>()</code></th>
<td class="colLast">
<div class="block">Reads a delta coded integer.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#readGamma()">readGamma</a></span>()</code></th>
<td class="colLast">
<div class="block">Reads a gamma coded integer.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#readGolombRice(int)">readGolombRice</a></span>&#8203;(int&nbsp;k)</code></th>
<td class="colLast">
<div class="block">Read a number using Golomb-Rice coding.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#readIntBits(int)">readIntBits</a></span>&#8203;(int&nbsp;len)</code></th>
<td class="colLast">
<div class="block">Read an int from given number of bits.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#readLongBits(int)">readLongBits</a></span>&#8203;(int&nbsp;len)</code></th>
<td class="colLast">
<div class="block">Read a long from given number of bits.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#readUnary()">readUnary</a></span>()</code></th>
<td class="colLast">
<div class="block">Read a unary coded integer.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#readVariableByte()">readVariableByte</a></span>()</code></th>
<td class="colLast">
<div class="block">Read a number using variable byte code.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#reset()">reset</a></span>()</code></th>
<td class="colLast">
<div class="block">Resets the stream so that it may be used again for writing.</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#rewind()">rewind</a></span>()</code></th>
<td class="colLast">
<div class="block">Rewinds the stream ready for reading.</div>
</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setIndex(int)">setIndex</a></span>&#8203;(int&nbsp;index)</code></th>
<td class="colLast">
<div class="block">Sets the word index to the given value.</div>
</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#writeDelta(int)">writeDelta</a></span>&#8203;(int&nbsp;n)</code></th>
<td class="colLast">
<div class="block">Outputs the unsigned integer using delta coding.</div>
</td>
</tr>
<tr id="i16" class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#writeGamma(int)">writeGamma</a></span>&#8203;(int&nbsp;n)</code></th>
<td class="colLast">
<div class="block">Outputs the given unsigned integer using gamma coding.</div>
</td>
</tr>
<tr id="i17" class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#writeGolombRice(int,int)">writeGolombRice</a></span>&#8203;(int&nbsp;n,
int&nbsp;k)</code></th>
<td class="colLast">
<div class="block">Write a number using Golomb-Rice coding.</div>
</td>
</tr>
<tr id="i18" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#writeIntBits(int,int)">writeIntBits</a></span>&#8203;(int&nbsp;n,
int&nbsp;len)</code></th>
<td class="colLast">
<div class="block">Write a number into the given number of bits.</div>
</td>
</tr>
<tr id="i19" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#writeLongBits(long,int)">writeLongBits</a></span>&#8203;(long&nbsp;n,
int&nbsp;len)</code></th>
<td class="colLast">
<div class="block">Write a number into the given number of bits.</div>
</td>
</tr>
<tr id="i20" class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#writeUnary(int)">writeUnary</a></span>&#8203;(int&nbsp;n)</code></th>
<td class="colLast">
<div class="block">Outputs the given unsigned integer as a unary number.</div>
</td>
</tr>
<tr id="i21" class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#writeVariableByte(int)">writeVariableByte</a></span>&#8203;(int&nbsp;n)</code></th>
<td class="colLast">
<div class="block">Write a number using variable byte code.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods declared in class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true" title="class or interface in java.lang" class="externalLink" target="_blank">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang" class="externalLink" target="_blank">clone</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang" class="externalLink" target="_blank">equals</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang" class="externalLink" target="_blank">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang" class="externalLink" target="_blank">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang" class="externalLink" target="_blank">hashCode</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang" class="externalLink" target="_blank">notify</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang" class="externalLink" target="_blank">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang" class="externalLink" target="_blank">toString</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang" class="externalLink" target="_blank">wait</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang" class="externalLink" target="_blank">wait</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html?is-external=true#wait(long,int)" title="class or interface in java.lang" class="externalLink" target="_blank">wait</a></code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a id="&lt;init&gt;()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>BitStream</h4>
<pre>public&nbsp;BitStream()</pre>
<div class="block">Create a new BitStream with a default size of 100 bytes.</div>
</li>
</ul>
<a id="&lt;init&gt;(int)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>BitStream</h4>
<pre>public&nbsp;BitStream&#8203;(int&nbsp;numInts)</pre>
<div class="block">Create a new BitStream containing the given number of ints. The BitStream is
implemented as an array of ints which will grow if necessary.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>numInts</code> - the initial size of the array of ints</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="rewind()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>rewind</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;rewind()</pre>
<div class="block">Rewinds the stream ready for reading.</div>
</li>
</ul>
<a id="reset()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>reset</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;reset()</pre>
<div class="block">Resets the stream so that it may be used again for writing.</div>
</li>
</ul>
<a id="writeLongBits(long,int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>writeLongBits</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;writeLongBits&#8203;(long&nbsp;n,
int&nbsp;len)</pre>
<div class="block">Write a number into the given number of bits.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>n</code> - the number to write</dd>
<dd><code>len</code> - the number of bits to write the number to</dd>
</dl>
</li>
</ul>
<a id="writeIntBits(int,int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>writeIntBits</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;writeIntBits&#8203;(int&nbsp;n,
int&nbsp;len)</pre>
<div class="block">Write a number into the given number of bits. Note that there is no requirement
that the given number be small enough to fit, the number written will be masked
appropriately.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>n</code> - the number to write</dd>
<dd><code>len</code> - the number of bits to write the number to</dd>
</dl>
</li>
</ul>
<a id="nextWord()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>nextWord</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;nextWord()</pre>
<div class="block">Move to the next full word boundary.</div>
</li>
</ul>
<a id="getIndex()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getIndex</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;getIndex()</pre>
<div class="block">Returns the current word index</div>
</li>
</ul>
<a id="setIndex(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setIndex</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setIndex&#8203;(int&nbsp;index)</pre>
<div class="block">Sets the word index to the given value. This also resets the bit offset to the
beginning of the word. This method must only be used when reading to start reading
a number stream from a saved position.</div>
</li>
</ul>
<a id="readIntBits(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>readIntBits</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;readIntBits&#8203;(int&nbsp;len)</pre>
<div class="block">Read an int from given number of bits.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>len</code> - the number of bits to read the number from</dd>
</dl>
</li>
</ul>
<a id="readLongBits(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>readLongBits</h4>
<pre class="methodSignature">public&nbsp;long&nbsp;readLongBits&#8203;(int&nbsp;len)</pre>
<div class="block">Read a long from given number of bits.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>len</code> - the number of bits to read the number from</dd>
</dl>
</li>
</ul>
<a id="log2(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>log2</h4>
<pre class="methodSignature">public static&nbsp;int&nbsp;log2&#8203;(int&nbsp;n)</pre>
<div class="block">Returns the log2 of the given number.</div>
</li>
</ul>
<a id="writeDelta(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>writeDelta</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;writeDelta&#8203;(int&nbsp;n)</pre>
<div class="block">Outputs the unsigned integer using delta coding. Delta coding gives better results
than gamma when larger numbers are more frequent.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the number of bits used</dd>
</dl>
</li>
</ul>
<a id="writeGamma(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>writeGamma</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;writeGamma&#8203;(int&nbsp;n)</pre>
<div class="block">Outputs the given unsigned integer using gamma coding. Gamma coding is good when you
know small numbers are much more frequent than large numbers.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the number of bits used</dd>
</dl>
</li>
</ul>
<a id="writeUnary(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>writeUnary</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;writeUnary&#8203;(int&nbsp;n)</pre>
<div class="block">Outputs the given unsigned integer as a unary number. Unary numbers are good for
small integers.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the number of bits used</dd>
</dl>
</li>
</ul>
<a id="readDelta()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>readDelta</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;readDelta()</pre>
<div class="block">Reads a delta coded integer.</div>
</li>
</ul>
<a id="readGamma()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>readGamma</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;readGamma()</pre>
<div class="block">Reads a gamma coded integer.</div>
</li>
</ul>
<a id="readUnary()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>readUnary</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;readUnary()</pre>
<div class="block">Read a unary coded integer.</div>
</li>
</ul>
<a id="writeVariableByte(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>writeVariableByte</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;writeVariableByte&#8203;(int&nbsp;n)</pre>
<div class="block">Write a number using variable byte code. This is good when you have lots of
medium size numbers.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the number of bits used</dd>
</dl>
</li>
</ul>
<a id="readVariableByte()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>readVariableByte</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;readVariableByte()</pre>
<div class="block">Read a number using variable byte code.</div>
</li>
</ul>
<a id="writeGolombRice(int,int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>writeGolombRice</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;writeGolombRice&#8203;(int&nbsp;n,
int&nbsp;k)</pre>
<div class="block">Write a number using Golomb-Rice coding. Good all rounder if you choose
the right value of k, absolute rubbish otherwise!</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>n</code> - the unsigned number to write</dd>
<dd><code>k</code> - the number of bits to use for the remainder</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the number of bits used</dd>
</dl>
</li>
</ul>
<a id="readGolombRice(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>readGolombRice</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;readGolombRice&#8203;(int&nbsp;k)</pre>
<div class="block">Read a number using Golomb-Rice coding.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>k</code> - the number of bits to use for the remainder</dd>
</dl>
</li>
</ul>
<a id="memoryUsage()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>memoryUsage</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;memoryUsage()</pre>
<div class="block">Give a rough estimate of how many bytes of storage we use. This is the actual storage
allocated so may be more that what is in use at any one time.</div>
</li>
</ul>
<a id="main(java.lang.String[])">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>main</h4>
<pre class="methodSignature">public static&nbsp;void&nbsp;main&#8203;(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html?is-external=true" title="class or interface in java.lang" class="externalLink" target="_blank">String</a>[]&nbsp;args)</pre>
<div class="block">This method is provided to test the BitStream. We need to change this to use unit
tests at some point.</div>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../../index.html">Overview</a></li>
<li><a href="../../../../../../module-summary.html">Module</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/BitStream.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../../index-files/index-1.html">Index</a></li>
<li><a href="../../../../../../../help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage"><div style="margin-top: 9px;"><strong>OpenJ9 JDK 11</strong></div></div>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small><a href="https://www.eclipse.org/openj9/" target="_blank">Eclipse OpenJ9 website.</a><br> To raise a bug report or suggest an improvement create an <a href="https://github.com/eclipse-openj9/openj9/issues" target="_blank">Eclipse Openj9 issue.</a><br> Copyright &copy; 1998, 2021, IBM Corp. and others.</small></p>
</footer>
</body>
</html>