blob: cc56c1fb58c0030aaeed2ee1e090dedd7bb5e3aa [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) -->
<title>StreamScanningContext (Qpid ProtonJ2 Parent 1.0.0-M18 API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="declaration: package: org.apache.qpid.protonj2.codec.decoders, interface: StreamScanningContext">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/StreamScanningContext.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">org.apache.qpid.protonj2.codec.decoders</a></div>
<h1 title="Interface StreamScanningContext" class="title">Interface StreamScanningContext&lt;Type&gt;</h1>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>Type Parameters:</dt>
<dd><code>Type</code> - The concrete type of the entries to be scanned.</dd>
</dl>
<dl class="notes">
<dt>All Known Implementing Classes:</dt>
<dd><code><a href="ProtonScanningContext.html" title="class in org.apache.qpid.protonj2.codec.decoders">ProtonScanningContext</a></code></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">public interface </span><span class="element-name type-name-label">StreamScanningContext&lt;Type&gt;</span></div>
<div class="block">A search context used when scanning encoded AMQP types for entries or sections that
match any of a predetermined set of possible values usually made up of type encodings
that would match the incoming encoded data.
<p>
A scanning context is typically created with both the encoded and unencoded form of
the value to be scanned for so that a call to the match function can provide an
callback that will be provided the value to be sought without the need to perform
a complete decode of the scanned data.
<p>
The context is a single threaded actor whose state can be modified during the
scanning cycle in order to optimize the number of comparisons done as the scan
progresses. The caller must ensure a context is not passed to scanning operations
that are occurring concurrently.</div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab3" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab3', 3)" class="table-tab">Abstract Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>boolean</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#isComplete()" class="member-name-link">isComplete</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Allows for the scanner to optimize reading of encoded data by determining if
the target of the matching context has been found in which case the scanner
can consume any remaining encoded bytes without regard for the matcher.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#matches(org.apache.qpid.protonj2.codec.StreamTypeDecoder,java.io.InputStream,int,java.util.function.Consumer)" class="member-name-link">matches</a><wbr>(<a href="../StreamTypeDecoder.html" title="interface in org.apache.qpid.protonj2.codec">StreamTypeDecoder</a>&lt;?&gt;&nbsp;typeDecoder,
<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/InputStream.html" title="class or interface in java.io" class="external-link">InputStream</a>&nbsp;candidate,
int&nbsp;candidateLength,
<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/Consumer.html" title="class or interface in java.util.function" class="external-link">Consumer</a>&lt;<a href="StreamScanningContext.html" title="type parameter in StreamScanningContext">Type</a>&gt;&nbsp;matchConsumer)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Returns true if the encoded entry bytes match against the search domain
of the scan matching context and calls the provided match <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/Consumer.html" title="class or interface in java.util.function" class="external-link"><code>Consumer</code></a>
with the original unencoded form of the matched entry.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3"><code><a href="#reset()" class="member-name-link">reset</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab3">
<div class="block">Reset the context to its original state at the end of a complete scan
which should allow the context to be used again when a new scan is
started (e.g.</div>
</div>
</div>
</div>
</div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="reset()">
<h3>reset</h3>
<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name">reset</span>()</div>
<div class="block">Reset the context to its original state at the end of a complete scan
which should allow the context to be used again when a new scan is
started (e.g. <a href="#isComplete()"><code>isComplete()</code></a> should start returning false).</div>
</section>
</li>
<li>
<section class="detail" id="isComplete()">
<h3>isComplete</h3>
<div class="member-signature"><span class="return-type">boolean</span>&nbsp;<span class="element-name">isComplete</span>()</div>
<div class="block">Allows for the scanner to optimize reading of encoded data by determining if
the target of the matching context has been found in which case the scanner
can consume any remaining encoded bytes without regard for the matcher. In
the completed state any call to <a href="#matches(org.apache.qpid.protonj2.codec.StreamTypeDecoder,java.io.InputStream,int,java.util.function.Consumer)"><code>matches(StreamTypeDecoder, InputStream, int, Consumer)</code></a>
should return false as the target has already been found so that unoptimized
scanning can continue calling the match method until the encoded data has
been fully scanned.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>true if the target of the matching context has already been matched.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="matches(org.apache.qpid.protonj2.codec.StreamTypeDecoder,java.io.InputStream,int,java.util.function.Consumer)">
<h3>matches</h3>
<div class="member-signature"><span class="return-type">boolean</span>&nbsp;<span class="element-name">matches</span><wbr><span class="parameters">(<a href="../StreamTypeDecoder.html" title="interface in org.apache.qpid.protonj2.codec">StreamTypeDecoder</a>&lt;?&gt;&nbsp;typeDecoder,
<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/InputStream.html" title="class or interface in java.io" class="external-link">InputStream</a>&nbsp;candidate,
int&nbsp;candidateLength,
<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/Consumer.html" title="class or interface in java.util.function" class="external-link">Consumer</a>&lt;<a href="StreamScanningContext.html" title="type parameter in StreamScanningContext">Type</a>&gt;&nbsp;matchConsumer)</span></div>
<div class="block">Returns true if the encoded entry bytes match against the search domain
of the scan matching context and calls the provided match <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/Consumer.html" title="class or interface in java.util.function" class="external-link"><code>Consumer</code></a>
with the original unencoded form of the matched entry. The caller must
provide the size of the encoded value being checked to allow for pass of
the source bytes without copying which could contain more entries following
the candidate value in question.
<p>
The implementation must not consume the encoded bytes which requires that the
provided <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/InputStream.html" title="class or interface in java.io" class="external-link"><code>InputStream</code></a> support mark and reset of the stream position.
The implementation should check for mark support in the provided stream and
throw an <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/UnsupportedOperationException.html" title="class or interface in java.lang" class="external-link"><code>UnsupportedOperationException</code></a> if it is not supported.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>typeDecoder</code> - The stream type decoder of the encoded type that is contained in the buffer.</dd>
<dd><code>candidate</code> - Buffer whose first read index is the start of the encoded bytes.</dd>
<dd><code>candidateLength</code> - The region of the candidate buffer that contains the encoded bytes</dd>
<dd><code>matchConsumer</code> - An optional consumer that should be called if a match is found.</dd>
<dt>Returns:</dt>
<dd>true if the candidate matches a target in the search domain.</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2023 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>