blob: 34760196b257e30fe525062015cc6473ed9230bd [file] [log] [blame]
<!--
SPDX-FileCopyrightText: The Apache Software Foundation
SPDX-License-Identifier: Apache-2.0
-->
<!DOCTYPE html>
<html lang="en">
<head>
<title>Arrow.StreamDecoder.get_next_required_size</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="utf-8" />
<meta property="og:type" content="website"/>
<meta priority="og:title" content="Arrow.StreamDecoder.get_next_required_size"/>
<meta priority="og:description" content="Reference for Arrow.StreamDecoder.get_next_required_size"/>
<meta name="twitter:title" content="Arrow.StreamDecoder.get_next_required_size"/>
<meta name="twitter:description" content="Reference for Arrow.StreamDecoder.get_next_required_size"/>
<meta name="twitter:card" content="summary"/>
<link rel="stylesheet" href="style.css" type="text/css" />
<script src="urlmap.js"></script>
<script src="fzy.js"></script>
<script src="search.js"></script>
<script src="main.js"></script>
</head>
<body>
<div id="body-wrapper" tabindex="-1">
<nav class="sidebar devhelp-hidden">
<div class="search section">
<form id="search-form" autocomplete="off">
<input id="search-input" type="text" name="do-not-autocomplete" placeholder="Click, or press 's' to search" autocomplete="off"/>
</form>
</div>
<div class="section namespace">
<h3><a href="index.html">Arrow</a></h3>
<p>API Version: 1.0</p>
<p>Library Version: 22.0.0</p>
</div>
<div class="section">
<h5>Type</h5>
<div class="links">
<a href="class.StreamDecoder.html">StreamDecoder</a>
</div>
</div>
<div class="section">
<h5>Methods</h5>
<div class="links">
<a class="method" href="method.StreamDecoder.consume_buffer.html">consume_buffer</a>
<a class="method" href="method.StreamDecoder.consume_bytes.html">consume_bytes</a>
<a class="method current" href="method.StreamDecoder.get_next_required_size.html">get_next_required_size</a>
<a class="method" href="method.StreamDecoder.get_schema.html">get_schema</a>
<a class="method" href="method.StreamDecoder.reset.html">reset</a>
</div>
</div>
<div class="section generator">
<p>Generated by <a href="https://gitlab.gnome.org/GNOME/gi-docgen">gi-docgen</a> 2023.1</p>
</div>
</nav>
<button id="btn-to-top" class="hidden"><span class="up-arrow"></span></button>
<section id="main" class="content">
<header>
<h3>Method</h3>
<h1><a href="index.html">Arrow</a><span class="sep"></span><a href="class.StreamDecoder.html">StreamDecoder</a><span class="sep"></span>get_next_required_size</h1>
</header>
<section>
<div class="docblock">
<p><span class="emblem available">since: 18.0.0</span></p>
</div>
<div class="declaration toggle-wrapper">
<h4 style="display:flex;" id="declaration">
Declaration
<a class="anchor" href="#declaration"></a>
<a class="srclink" title="go to source location" href="https://github.com/apache/arrow/blob/main/c_glib/arrow-glib/decoder.h#L94">[src]</a>
</h4>
<div class="docblock c-decl">
<pre><code><div class="highlight"><pre><span></span><span class="n">gsize</span>
<span class="n">garrow_stream_decoder_get_next_required_size</span><span class="w"> </span><span class="p">(</span>
<span class="w"> </span><span class="n">GArrowStreamDecoder</span><span class="o">*</span><span class="w"> </span><span class="n">decoder</span>
<span class="p">)</span>
</pre></div>
</code></pre>
</div>
</div>
<div class="description toggle-wrapper">
<h4 style="display:flex;" id="description">
Description
<a class="anchor" href="#description"></a>
<a class="srclink" title="go to source location" href="https://github.com/apache/arrow/blob/main/c_glib/arrow-glib/decoder.cpp#L509">[src]</a>
</h4>
<div class="docblock">
<p>This method is provided for users who want to optimize performance.
Normal users don&#8217;t need to use this&nbsp;method.</p>
<p>Here is an example usage for normal&nbsp;users:</p>
<div class="codehilite"><pre><span></span><code>garrow_stream_decoder_consume_buffer(decoder, buffer1);
garrow_stream_decoder_consume_buffer(decoder, buffer2);
garrow_stream_decoder_consume_buffer(decoder, buffer3);
</code></pre></div>
<p>Decoder has internal buffer. If consumed data isn&#8217;t enough to
advance the state of the decoder, consumed data is buffered to
the internal buffer. It causes performance&nbsp;overhead.</p>
<p>If you pass <code>garrow_stream_decoer_get_next_required_size()</code> size data
to each
garrow_stream_decoder_consume_bytes()/garrow_stream_decoder_consume_buffer()
call, the decoder doesn&#8217;t use its internal buffer. It improves&nbsp;performance.</p>
<p>Here is an example usage to avoid using internal&nbsp;buffer:</p>
<div class="codehilite"><pre><span></span><code>buffer1 = get_data(garrow_stream_decoder_get_next_required_size(decoder));
garrow_stream_decoder_consume_buffer(buffer1);
buffer2 = get_data(garrow_stream_decoder_get_next_required_size(decoder));
garrow_stream_decoder_consume_buffer(buffer2);
</code></pre></div>
<p>Users can use this method to avoid creating small chunks. Record
batch data must be contiguous data. If users pass small chunks to
the decoder, the decoder needs concatenate small chunks
internally. It causes performance&nbsp;overhead.</p>
<p>Here is an example usage to reduce small&nbsp;chunks:</p>
<div class="codehilite"><pre><span></span><code>GArrowResizablBuffer *buffer = garrow_resizable_buffer_new(1024, NULL);
while ((small_chunk = get_data(&amp;small_chunk_size))) {
size_t current_buffer_size = garrow_buffer_get_size(GARROW_BUFFER(buffer));
garrow_resizable_buffer_resize(buffer, current_buffer_size + small_chunk_size,
</code></pre></div>
<p><span class="caps">NULL</span>);
garrow_mutable_buffer_set_data(GARROW_MUTABLE_BUFFER(buffer),
current_buffer_size,
small_chunk,
small_chunk_size,
<span class="caps">NULL</span>);
if (garrow_buffer_get_size(GARROW_BUFFER(buffer)) &lt;
garrow_stream_decoder_get_next_required_size(decoder)) {
continue;
}
garrow_stream_decoder_consume_buffer(decoder, GARROW_BUFFER(buffer), <span class="caps">NULL</span>);
g_object_unref(buffer);
buffer = garrow_resizable_buffer_new(1024, <span class="caps">NULL</span>);
}
if (garrow_buffer_get_size(GARROW_BUFFER(buffer)) &gt; 0) {
garrow_stream_decoder_consume_buffer(decoder, GARROW_BUFFER(buffer), <span class="caps">NULL</span>);
}&nbsp;g_object_unref(buffer);</p>
</div>
<div class="docblock">
<p>Available since: 18.0.0</p>
</div>
</div>
<div class="return-value toggle-wrapper">
<h4 id="return-value">
Return value
<a href="#return-value" class="anchor"></a>
</h4>
<div class="docblock">
<div class="returns">
<div class="arg-description">
<p><em>Type:</em>&nbsp;<code>gsize</code></p>
<p><p>The number of bytes needed to advance the state of
the&nbsp;decoder.</p></p>
</div>
<div>
<table>
</table>
</div>
</div>
</div>
</div>
</section>
</section>
<section id="search" class="content hidden"></section>
<footer>
</footer>
</div>
</body>
</html>