src.dualinventive.com/jjacobs/dinetrpcll-sniffer/libdi/3rdparty/mpack/docs/group__reader.html

1477 lines
94 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>MPack: Core Reader API</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { init_search(); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen-mpack-css.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">MPack
&#160;<span id="projectnumber">0.8.2</span>
</div>
<div id="projectbrief">A C encoding/decoding library for the MessagePack serialization format.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#define-members">Macros</a> &#124;
<a href="#typedef-members">Typedefs</a> </div>
<div class="headertitle">
<div class="title">Core Reader API</div> </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Description</h2>
<p>The MPack Core Reader API contains functions for imperatively reading dynamically typed data from a MessagePack stream. </p>
<p>This forms the basis of the Expect API. </p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:gac8b222eb575099fa92f086eeeb8dc83f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#gac8b222eb575099fa92f086eeeb8dc83f">MPACK_READER_MINIMUM_BUFFER_SIZE</a>&#160;&#160;&#160;32</td></tr>
<tr class="memdesc:gac8b222eb575099fa92f086eeeb8dc83f"><td class="mdescLeft">&#160;</td><td class="mdescRight">The minimum buffer size for a reader with a fill function. <a href="#gac8b222eb575099fa92f086eeeb8dc83f">More...</a><br /></td></tr>
<tr class="separator:gac8b222eb575099fa92f086eeeb8dc83f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ga799a3f21adc8e229c6040ab42d90bef3"><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga799a3f21adc8e229c6040ab42d90bef3">mpack_reader_error_t</a>) (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, <a class="el" href="group__common.html#ga9d9f282ca4183ab5190e09d04c1f74c4">mpack_error_t</a> error)</td></tr>
<tr class="memdesc:ga799a3f21adc8e229c6040ab42d90bef3"><td class="mdescLeft">&#160;</td><td class="mdescRight">An error handler function to be called when an error is flagged on the reader. <a href="#ga799a3f21adc8e229c6040ab42d90bef3">More...</a><br /></td></tr>
<tr class="separator:ga799a3f21adc8e229c6040ab42d90bef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga97503ca06d41d58c60226b2732661eda"><td class="memItemLeft" align="right" valign="top">typedef size_t(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga97503ca06d41d58c60226b2732661eda">mpack_reader_fill_t</a>) (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, char *buffer, size_t count)</td></tr>
<tr class="memdesc:ga97503ca06d41d58c60226b2732661eda"><td class="mdescLeft">&#160;</td><td class="mdescRight">The MPack reader's fill function. <a href="#ga97503ca06d41d58c60226b2732661eda">More...</a><br /></td></tr>
<tr class="separator:ga97503ca06d41d58c60226b2732661eda"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga6a0b236c7befe9cb959dabce15acd23b"><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga6a0b236c7befe9cb959dabce15acd23b">mpack_reader_skip_t</a>) (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, size_t count)</td></tr>
<tr class="memdesc:ga6a0b236c7befe9cb959dabce15acd23b"><td class="mdescLeft">&#160;</td><td class="mdescRight">The MPack reader's skip function. <a href="#ga6a0b236c7befe9cb959dabce15acd23b">More...</a><br /></td></tr>
<tr class="separator:ga6a0b236c7befe9cb959dabce15acd23b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaee791c36a15344b9e57edae160c86615"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a></td></tr>
<tr class="memdesc:gaee791c36a15344b9e57edae160c86615"><td class="mdescLeft">&#160;</td><td class="mdescRight">A buffered MessagePack decoder. <a href="#gaee791c36a15344b9e57edae160c86615">More...</a><br /></td></tr>
<tr class="separator:gaee791c36a15344b9e57edae160c86615"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gadda6baaccdcf0ad9c5e212be9992cf5b"><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#gadda6baaccdcf0ad9c5e212be9992cf5b">mpack_reader_teardown_t</a>) (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader)</td></tr>
<tr class="memdesc:gadda6baaccdcf0ad9c5e212be9992cf5b"><td class="mdescLeft">&#160;</td><td class="mdescRight">A teardown function to be called when the reader is destroyed. <a href="#gadda6baaccdcf0ad9c5e212be9992cf5b">More...</a><br /></td></tr>
<tr class="separator:gadda6baaccdcf0ad9c5e212be9992cf5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
Lifecycle Functions</h2></td></tr>
<tr class="memitem:ga1d79c00c6c013b879b164c26753b3e83"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga1d79c00c6c013b879b164c26753b3e83">mpack_reader_init</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, char *buffer, size_t size, size_t count)</td></tr>
<tr class="memdesc:ga1d79c00c6c013b879b164c26753b3e83"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes an MPack reader with the given buffer. <a href="#ga1d79c00c6c013b879b164c26753b3e83">More...</a><br /></td></tr>
<tr class="separator:ga1d79c00c6c013b879b164c26753b3e83"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga729bf4c0a79516e97a65d2e278f336e0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga729bf4c0a79516e97a65d2e278f336e0">mpack_reader_init_error</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, <a class="el" href="group__common.html#ga9d9f282ca4183ab5190e09d04c1f74c4">mpack_error_t</a> error)</td></tr>
<tr class="memdesc:ga729bf4c0a79516e97a65d2e278f336e0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes an MPack reader directly into an error state. <a href="#ga729bf4c0a79516e97a65d2e278f336e0">More...</a><br /></td></tr>
<tr class="separator:ga729bf4c0a79516e97a65d2e278f336e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga18f41d6786155f265769351ef550e331"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga18f41d6786155f265769351ef550e331">mpack_reader_init_data</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, const char *data, size_t count)</td></tr>
<tr class="memdesc:ga18f41d6786155f265769351ef550e331"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes an MPack reader to parse a pre-loaded contiguous chunk of data. <a href="#ga18f41d6786155f265769351ef550e331">More...</a><br /></td></tr>
<tr class="separator:ga18f41d6786155f265769351ef550e331"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga957b5be20debe9f3b81b629478bda0f5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga957b5be20debe9f3b81b629478bda0f5">mpack_reader_init_file</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, const char *filename)</td></tr>
<tr class="memdesc:ga957b5be20debe9f3b81b629478bda0f5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes an MPack reader that reads from a file. <a href="#ga957b5be20debe9f3b81b629478bda0f5">More...</a><br /></td></tr>
<tr class="separator:ga957b5be20debe9f3b81b629478bda0f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac04666405e21eea6e8819182571f0d20"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__common.html#ga9d9f282ca4183ab5190e09d04c1f74c4">mpack_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#gac04666405e21eea6e8819182571f0d20">mpack_reader_destroy</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader)</td></tr>
<tr class="memdesc:gac04666405e21eea6e8819182571f0d20"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cleans up the MPack reader, ensuring that all compound elements have been completely read. <a href="#gac04666405e21eea6e8819182571f0d20">More...</a><br /></td></tr>
<tr class="separator:gac04666405e21eea6e8819182571f0d20"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3950ce57f3f125755cc1cefd1f54e149"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga3950ce57f3f125755cc1cefd1f54e149">mpack_reader_init_stack</a>(reader)</td></tr>
<tr class="memdesc:ga3950ce57f3f125755cc1cefd1f54e149"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes an MPack reader using stack space as a buffer. <a href="#ga3950ce57f3f125755cc1cefd1f54e149">More...</a><br /></td></tr>
<tr class="separator:ga3950ce57f3f125755cc1cefd1f54e149"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
Callbacks</h2></td></tr>
<tr class="memitem:gafc76e77e7431f13ba7ff6a6a83fffe07"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#gafc76e77e7431f13ba7ff6a6a83fffe07">mpack_reader_set_context</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, void *context)</td></tr>
<tr class="memdesc:gafc76e77e7431f13ba7ff6a6a83fffe07"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the custom pointer to pass to the reader callbacks, such as fill or teardown. <a href="#gafc76e77e7431f13ba7ff6a6a83fffe07">More...</a><br /></td></tr>
<tr class="separator:gafc76e77e7431f13ba7ff6a6a83fffe07"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf4eab68e9d1751ff9c6c853d563d9a0e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#gaf4eab68e9d1751ff9c6c853d563d9a0e">mpack_reader_set_fill</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, <a class="el" href="group__reader.html#ga97503ca06d41d58c60226b2732661eda">mpack_reader_fill_t</a> fill)</td></tr>
<tr class="memdesc:gaf4eab68e9d1751ff9c6c853d563d9a0e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the fill function to refill the data buffer when it runs out of data. <a href="#gaf4eab68e9d1751ff9c6c853d563d9a0e">More...</a><br /></td></tr>
<tr class="separator:gaf4eab68e9d1751ff9c6c853d563d9a0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa925114414e77ff809fcaaba399c8162"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#gaa925114414e77ff809fcaaba399c8162">mpack_reader_set_skip</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, <a class="el" href="group__reader.html#ga6a0b236c7befe9cb959dabce15acd23b">mpack_reader_skip_t</a> skip)</td></tr>
<tr class="memdesc:gaa925114414e77ff809fcaaba399c8162"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the skip function to discard bytes from the source stream. <a href="#gaa925114414e77ff809fcaaba399c8162">More...</a><br /></td></tr>
<tr class="separator:gaa925114414e77ff809fcaaba399c8162"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga926fbc6c3e5d048001dc070c8dc015ed"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga926fbc6c3e5d048001dc070c8dc015ed">mpack_reader_set_error_handler</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, <a class="el" href="group__reader.html#ga799a3f21adc8e229c6040ab42d90bef3">mpack_reader_error_t</a> error_fn)</td></tr>
<tr class="memdesc:ga926fbc6c3e5d048001dc070c8dc015ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the error function to call when an error is flagged on the reader. <a href="#ga926fbc6c3e5d048001dc070c8dc015ed">More...</a><br /></td></tr>
<tr class="separator:ga926fbc6c3e5d048001dc070c8dc015ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad04ce10afce7422697d861f46e5aee86"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#gad04ce10afce7422697d861f46e5aee86">mpack_reader_set_teardown</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, <a class="el" href="group__reader.html#gadda6baaccdcf0ad9c5e212be9992cf5b">mpack_reader_teardown_t</a> teardown)</td></tr>
<tr class="memdesc:gad04ce10afce7422697d861f46e5aee86"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the teardown function to call when the reader is destroyed. <a href="#gad04ce10afce7422697d861f46e5aee86">More...</a><br /></td></tr>
<tr class="separator:gad04ce10afce7422697d861f46e5aee86"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
Core Reader Functions</h2></td></tr>
<tr class="memitem:ga79050efd2a581e8216f58d4946e7abc2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__common.html#ga9d9f282ca4183ab5190e09d04c1f74c4">mpack_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga79050efd2a581e8216f58d4946e7abc2">mpack_reader_error</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader)</td></tr>
<tr class="memdesc:ga79050efd2a581e8216f58d4946e7abc2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Queries the error state of the MPack reader. <a href="#ga79050efd2a581e8216f58d4946e7abc2">More...</a><br /></td></tr>
<tr class="separator:ga79050efd2a581e8216f58d4946e7abc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5c45c2e0592f16ae671cd509d8d8c512"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga5c45c2e0592f16ae671cd509d8d8c512">mpack_reader_flag_error</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, <a class="el" href="group__common.html#ga9d9f282ca4183ab5190e09d04c1f74c4">mpack_error_t</a> error)</td></tr>
<tr class="memdesc:ga5c45c2e0592f16ae671cd509d8d8c512"><td class="mdescLeft">&#160;</td><td class="mdescRight">Places the reader in the given error state, calling the error callback if one is set. <a href="#ga5c45c2e0592f16ae671cd509d8d8c512">More...</a><br /></td></tr>
<tr class="separator:ga5c45c2e0592f16ae671cd509d8d8c512"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga09da1e5abbce2b9f7f70d82924eefa3f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__common.html#ga9d9f282ca4183ab5190e09d04c1f74c4">mpack_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga09da1e5abbce2b9f7f70d82924eefa3f">mpack_reader_flag_if_error</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, <a class="el" href="group__common.html#ga9d9f282ca4183ab5190e09d04c1f74c4">mpack_error_t</a> error)</td></tr>
<tr class="memdesc:ga09da1e5abbce2b9f7f70d82924eefa3f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Places the reader in the given error state if the given error is not mpack_ok, returning the resulting error state of the reader. <a href="#ga09da1e5abbce2b9f7f70d82924eefa3f">More...</a><br /></td></tr>
<tr class="separator:ga09da1e5abbce2b9f7f70d82924eefa3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga291a38358bde6992b16edda81f2fcf45"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga291a38358bde6992b16edda81f2fcf45">mpack_reader_remaining</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, const char **data)</td></tr>
<tr class="memdesc:ga291a38358bde6992b16edda81f2fcf45"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns bytes left in the reader's buffer. <a href="#ga291a38358bde6992b16edda81f2fcf45">More...</a><br /></td></tr>
<tr class="separator:ga291a38358bde6992b16edda81f2fcf45"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga70c00ecaf381e9711f6c1d0fa92f0c2f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__common.html#structmpack__tag__t">mpack_tag_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga70c00ecaf381e9711f6c1d0fa92f0c2f">mpack_read_tag</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader)</td></tr>
<tr class="memdesc:ga70c00ecaf381e9711f6c1d0fa92f0c2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads a MessagePack object header (an MPack tag.) <a href="#ga70c00ecaf381e9711f6c1d0fa92f0c2f">More...</a><br /></td></tr>
<tr class="separator:ga70c00ecaf381e9711f6c1d0fa92f0c2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga397a8d0738b8d68753a470a988b813aa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__common.html#structmpack__tag__t">mpack_tag_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga397a8d0738b8d68753a470a988b813aa">mpack_peek_tag</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader)</td></tr>
<tr class="memdesc:ga397a8d0738b8d68753a470a988b813aa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parses the next MessagePack object header (an MPack tag) without advancing the reader. <a href="#ga397a8d0738b8d68753a470a988b813aa">More...</a><br /></td></tr>
<tr class="separator:ga397a8d0738b8d68753a470a988b813aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2ec982b75a30187d9f94831f2e4b20a0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga2ec982b75a30187d9f94831f2e4b20a0">mpack_done_type</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, <a class="el" href="group__common.html#ga22f03cf1240d5a917e1b3e7be8ab327e">mpack_type_t</a> type)</td></tr>
<tr class="memdesc:ga2ec982b75a30187d9f94831f2e4b20a0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finishes reading the given type. <a href="#ga2ec982b75a30187d9f94831f2e4b20a0">More...</a><br /></td></tr>
<tr class="separator:ga2ec982b75a30187d9f94831f2e4b20a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaddae460657b9a26207ed34352bff0b06"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#gaddae460657b9a26207ed34352bff0b06">mpack_done_array</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader)</td></tr>
<tr class="memdesc:gaddae460657b9a26207ed34352bff0b06"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finishes reading an array. <a href="#gaddae460657b9a26207ed34352bff0b06">More...</a><br /></td></tr>
<tr class="separator:gaddae460657b9a26207ed34352bff0b06"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga86165fc780e7adef09f4b45aee54842a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga86165fc780e7adef09f4b45aee54842a">mpack_done_map</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader)</td></tr>
<tr class="memdesc:ga86165fc780e7adef09f4b45aee54842a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finishes reading a map. <a href="#ga86165fc780e7adef09f4b45aee54842a">More...</a><br /></td></tr>
<tr class="separator:ga86165fc780e7adef09f4b45aee54842a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaaad37015e0c53704d9356de06b493de6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#gaaad37015e0c53704d9356de06b493de6">mpack_done_str</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader)</td></tr>
<tr class="memdesc:gaaad37015e0c53704d9356de06b493de6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finishes reading a string. <a href="#gaaad37015e0c53704d9356de06b493de6">More...</a><br /></td></tr>
<tr class="separator:gaaad37015e0c53704d9356de06b493de6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa4676c4b0761de4f864fd81c347a15a0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#gaa4676c4b0761de4f864fd81c347a15a0">mpack_done_bin</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader)</td></tr>
<tr class="memdesc:gaa4676c4b0761de4f864fd81c347a15a0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finishes reading a binary data blob. <a href="#gaa4676c4b0761de4f864fd81c347a15a0">More...</a><br /></td></tr>
<tr class="separator:gaa4676c4b0761de4f864fd81c347a15a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5ebed90f6fe9c1d324256d827032702b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga5ebed90f6fe9c1d324256d827032702b">mpack_done_ext</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader)</td></tr>
<tr class="memdesc:ga5ebed90f6fe9c1d324256d827032702b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finishes reading an extended type binary data blob. <a href="#ga5ebed90f6fe9c1d324256d827032702b">More...</a><br /></td></tr>
<tr class="separator:ga5ebed90f6fe9c1d324256d827032702b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga438bb2b85fbbd06cd8f10d5c8079427e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga438bb2b85fbbd06cd8f10d5c8079427e">mpack_discard</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader)</td></tr>
<tr class="memdesc:ga438bb2b85fbbd06cd8f10d5c8079427e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads and discards the next object. <a href="#ga438bb2b85fbbd06cd8f10d5c8079427e">More...</a><br /></td></tr>
<tr class="separator:ga438bb2b85fbbd06cd8f10d5c8079427e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
String and Data Functions</h2></td></tr>
<tr class="memitem:ga0c7e1dd2be56ce3d596326c4463e7229"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga0c7e1dd2be56ce3d596326c4463e7229">mpack_skip_bytes</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, size_t count)</td></tr>
<tr class="memdesc:ga0c7e1dd2be56ce3d596326c4463e7229"><td class="mdescLeft">&#160;</td><td class="mdescRight">Skips bytes from the underlying stream. <a href="#ga0c7e1dd2be56ce3d596326c4463e7229">More...</a><br /></td></tr>
<tr class="separator:ga0c7e1dd2be56ce3d596326c4463e7229"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaeb91e8d4e2a7b7f6562d8bbb7400275c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#gaeb91e8d4e2a7b7f6562d8bbb7400275c">mpack_read_bytes</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, char *p, size_t count)</td></tr>
<tr class="memdesc:gaeb91e8d4e2a7b7f6562d8bbb7400275c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads bytes from a string, binary blob or extension object, copying them into the given buffer. <a href="#gaeb91e8d4e2a7b7f6562d8bbb7400275c">More...</a><br /></td></tr>
<tr class="separator:gaeb91e8d4e2a7b7f6562d8bbb7400275c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaee9d5bd9ec3d123dac575651f0ec2186"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#gaee9d5bd9ec3d123dac575651f0ec2186">mpack_read_utf8</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, char *p, size_t byte_count)</td></tr>
<tr class="memdesc:gaee9d5bd9ec3d123dac575651f0ec2186"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads bytes from a string, ensures that the string is valid UTF-8, and copies the bytes into the given buffer. <a href="#gaee9d5bd9ec3d123dac575651f0ec2186">More...</a><br /></td></tr>
<tr class="separator:gaee9d5bd9ec3d123dac575651f0ec2186"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga628cbed1d2ffac977fed3b9ef5bf0fea"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga628cbed1d2ffac977fed3b9ef5bf0fea">mpack_read_cstr</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, char *buf, size_t buffer_size, size_t byte_count)</td></tr>
<tr class="memdesc:ga628cbed1d2ffac977fed3b9ef5bf0fea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads bytes from a string, ensures that the string contains no NUL bytes, copies the bytes into the given buffer and adds a null-terminator. <a href="#ga628cbed1d2ffac977fed3b9ef5bf0fea">More...</a><br /></td></tr>
<tr class="separator:ga628cbed1d2ffac977fed3b9ef5bf0fea"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad053c4bccda721a25c48d66fa0f211cf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#gad053c4bccda721a25c48d66fa0f211cf">mpack_read_utf8_cstr</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, char *buf, size_t buffer_size, size_t byte_count)</td></tr>
<tr class="memdesc:gad053c4bccda721a25c48d66fa0f211cf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads bytes from a string, ensures that the string is valid UTF-8 with no NUL bytes, copies the bytes into the given buffer and adds a null-terminator. <a href="#gad053c4bccda721a25c48d66fa0f211cf">More...</a><br /></td></tr>
<tr class="separator:gad053c4bccda721a25c48d66fa0f211cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga147c9412e7df10c3484c7ec9f182fed2"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga147c9412e7df10c3484c7ec9f182fed2">mpack_read_bytes_alloc</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, size_t count)</td></tr>
<tr class="memdesc:ga147c9412e7df10c3484c7ec9f182fed2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads bytes from a string, binary blob or extension object, allocating storage for them and returning the allocated pointer. <a href="#ga147c9412e7df10c3484c7ec9f182fed2">More...</a><br /></td></tr>
<tr class="separator:ga147c9412e7df10c3484c7ec9f182fed2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga654d697da6a0eaf25246adf3ed343572"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga654d697da6a0eaf25246adf3ed343572">mpack_read_bytes_inplace</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, size_t count)</td></tr>
<tr class="memdesc:ga654d697da6a0eaf25246adf3ed343572"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads bytes from a string, binary blob or extension object in-place in the buffer. <a href="#ga654d697da6a0eaf25246adf3ed343572">More...</a><br /></td></tr>
<tr class="separator:ga654d697da6a0eaf25246adf3ed343572"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa226c085be65e82ae9d4d1057c24f909"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#gaa226c085be65e82ae9d4d1057c24f909">mpack_read_utf8_inplace</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, size_t count)</td></tr>
<tr class="memdesc:gaa226c085be65e82ae9d4d1057c24f909"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads bytes from a string in-place in the buffer and ensures they are valid UTF-8. <a href="#gaa226c085be65e82ae9d4d1057c24f909">More...</a><br /></td></tr>
<tr class="separator:gaa226c085be65e82ae9d4d1057c24f909"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa69e23a50f63c84b45f9247db9c22ad0"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#gaa69e23a50f63c84b45f9247db9c22ad0">mpack_should_read_bytes_inplace</a> (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, size_t count)</td></tr>
<tr class="memdesc:gaa69e23a50f63c84b45f9247db9c22ad0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if it's a good idea to read the given number of bytes in-place. <a href="#gaa69e23a50f63c84b45f9247db9c22ad0">More...</a><br /></td></tr>
<tr class="separator:gaa69e23a50f63c84b45f9247db9c22ad0"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="member-group"></a>
Debugging Functions</h2></td></tr>
<tr class="memitem:ga07a599b767b6b8195a5e12b664afbe32"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga07a599b767b6b8195a5e12b664afbe32">mpack_print_file</a> (const char *data, size_t len, FILE *file)</td></tr>
<tr class="memdesc:ga07a599b767b6b8195a5e12b664afbe32"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts a blob of MessagePack to pseudo-JSON for debugging purposes and pretty-prints it to the given file. <a href="#ga07a599b767b6b8195a5e12b664afbe32">More...</a><br /></td></tr>
<tr class="separator:ga07a599b767b6b8195a5e12b664afbe32"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5be49dacf9e8fba456e562b4fb52e77c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__reader.html#ga5be49dacf9e8fba456e562b4fb52e77c">mpack_print</a> (const char *data, size_t len)</td></tr>
<tr class="memdesc:ga5be49dacf9e8fba456e562b4fb52e77c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts a blob of MessagePack to pseudo-JSON for debugging purposes and pretty-prints it to stdout. <a href="#ga5be49dacf9e8fba456e562b4fb52e77c">More...</a><br /></td></tr>
<tr class="separator:ga5be49dacf9e8fba456e562b4fb52e77c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Macro Definition Documentation</h2>
<a class="anchor" id="ga3950ce57f3f125755cc1cefd1f54e149"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define mpack_reader_init_stack</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">reader</td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initializes an MPack reader using stack space as a buffer. </p>
<p>A fill function should be added to the reader to fill the buffer.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__reader.html#gaf4eab68e9d1751ff9c6c853d563d9a0e" title="Sets the fill function to refill the data buffer when it runs out of data. ">mpack_reader_set_fill</a> </dd></dl>
</div>
</div>
<a class="anchor" id="gac8b222eb575099fa92f086eeeb8dc83f"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MPACK_READER_MINIMUM_BUFFER_SIZE&#160;&#160;&#160;32</td>
</tr>
</table>
</div><div class="memdoc">
<p>The minimum buffer size for a reader with a fill function. </p>
</div>
</div>
<h2 class="groupheader">Typedef Documentation</h2>
<a class="anchor" id="ga799a3f21adc8e229c6040ab42d90bef3"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef void(* mpack_reader_error_t) (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, <a class="el" href="group__common.html#ga9d9f282ca4183ab5190e09d04c1f74c4">mpack_error_t</a> error)</td>
</tr>
</table>
</div><div class="memdoc">
<p>An error handler function to be called when an error is flagged on the reader. </p>
<p>The error handler will only be called once on the first error flagged; any subsequent reads and errors are ignored, and the reader is permanently in that error state.</p>
<p>MPack is safe against non-local jumps out of error handler callbacks. This means you are allowed to longjmp or throw an exception (in C++, Objective-C, or with SEH) out of this callback.</p>
<p>Bear in mind when using longjmp that local non-volatile variables that have changed are undefined when setjmp() returns, so you can't put the reader on the stack in the same activation frame as the setjmp without declaring it volatile.</p>
<p>You must still eventually destroy the reader. It is not destroyed automatically when an error is flagged. It is safe to destroy the reader within this error callback, but you will either need to perform a non-local jump, or store something in your context to identify that the reader is destroyed since any future accesses to it cause undefined behavior. </p>
</div>
</div>
<a class="anchor" id="ga97503ca06d41d58c60226b2732661eda"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef size_t(* mpack_reader_fill_t) (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, char *buffer, size_t count)</td>
</tr>
</table>
</div><div class="memdoc">
<p>The MPack reader's fill function. </p>
<p>It should fill the buffer as much as possible, returning the number of bytes put into the buffer.</p>
<p>In case of error, it should flag an appropriate error on the reader. </p>
</div>
</div>
<a class="anchor" id="ga6a0b236c7befe9cb959dabce15acd23b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef void(* mpack_reader_skip_t) (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader, size_t count)</td>
</tr>
</table>
</div><div class="memdoc">
<p>The MPack reader's skip function. </p>
<p>It should discard the given number of bytes from the source (for example by seeking forward.)</p>
<p>In case of error, it should flag an appropriate error on the reader. </p>
</div>
</div>
<a class="anchor" id="gaee791c36a15344b9e57edae160c86615"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct <a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> <a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>A buffered MessagePack decoder. </p>
<p>The decoder wraps an existing buffer and, optionally, a fill function. This allows efficiently decoding data from existing memory buffers, files, streams, etc.</p>
<p>All read operations are synchronous; they will block until the requested data is fully read, or an error occurs.</p>
<p>This structure is opaque; its fields should not be accessed outside of MPack. </p>
</div>
</div>
<a class="anchor" id="gadda6baaccdcf0ad9c5e212be9992cf5b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef void(* mpack_reader_teardown_t) (<a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *reader)</td>
</tr>
</table>
</div><div class="memdoc">
<p>A teardown function to be called when the reader is destroyed. </p>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga438bb2b85fbbd06cd8f10d5c8079427e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mpack_discard </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads and discards the next object. </p>
<p>This will read and discard all contained data as well if it is a compound type. </p>
</div>
</div>
<a class="anchor" id="gaddae460657b9a26207ed34352bff0b06"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mpack_done_array </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Finishes reading an array. </p>
<p>This will track reads to ensure that the correct number of elements are read. </p>
</div>
</div>
<a class="anchor" id="gaa4676c4b0761de4f864fd81c347a15a0"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">mpack_done_bin </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Finishes reading a binary data blob. </p>
<p>This will track reads to ensure that the correct number of bytes are read. </p>
</div>
</div>
<a class="anchor" id="ga5ebed90f6fe9c1d324256d827032702b"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">mpack_done_ext </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Finishes reading an extended type binary data blob. </p>
<p>This will track reads to ensure that the correct number of bytes are read. </p>
</div>
</div>
<a class="anchor" id="ga86165fc780e7adef09f4b45aee54842a"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">mpack_done_map </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Finishes reading a map. </p>
<p>This will track reads to ensure that the correct number of elements are read. </p>
</div>
</div>
<a class="anchor" id="gaaad37015e0c53704d9356de06b493de6"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">mpack_done_str </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Finishes reading a string. </p>
<p>This will track reads to ensure that the correct number of bytes are read. </p>
</div>
</div>
<a class="anchor" id="ga2ec982b75a30187d9f94831f2e4b20a0"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mpack_done_type </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__common.html#ga22f03cf1240d5a917e1b3e7be8ab327e">mpack_type_t</a>&#160;</td>
<td class="paramname"><em>type</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Finishes reading the given type. </p>
<p>This will track reads to ensure that the correct number of elements or bytes are read. </p>
</div>
</div>
<a class="anchor" id="ga397a8d0738b8d68753a470a988b813aa"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__common.html#structmpack__tag__t">mpack_tag_t</a> mpack_peek_tag </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Parses the next MessagePack object header (an MPack tag) without advancing the reader. </p>
<p>If an error occurs, the reader is placed in an error state and a nil tag is returned. If the reader is already in an error state, a nil tag is returned.</p>
<dl class="section note"><dt>Note</dt><dd>Maps in JSON are unordered, so it is recommended not to expect a specific ordering for your map values in case your data is converted to/from JSON.</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__reader.html#ga70c00ecaf381e9711f6c1d0fa92f0c2f" title="Reads a MessagePack object header (an MPack tag.) ">mpack_read_tag()</a> </dd>
<dd>
<a class="el" href="group__reader.html#ga438bb2b85fbbd06cd8f10d5c8079427e" title="Reads and discards the next object. ">mpack_discard()</a> </dd></dl>
</div>
</div>
<a class="anchor" id="ga5be49dacf9e8fba456e562b4fb52e77c"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mpack_print </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Converts a blob of MessagePack to pseudo-JSON for debugging purposes and pretty-prints it to stdout. </p>
</div>
</div>
<a class="anchor" id="ga07a599b767b6b8195a5e12b664afbe32"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mpack_print_file </td>
<td>(</td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>len</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">FILE *&#160;</td>
<td class="paramname"><em>file</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Converts a blob of MessagePack to pseudo-JSON for debugging purposes and pretty-prints it to the given file. </p>
</div>
</div>
<a class="anchor" id="gaeb91e8d4e2a7b7f6562d8bbb7400275c"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mpack_read_bytes </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads bytes from a string, binary blob or extension object, copying them into the given buffer. </p>
<p>A str, bin or ext must have been opened by a call to <a class="el" href="group__reader.html#ga70c00ecaf381e9711f6c1d0fa92f0c2f" title="Reads a MessagePack object header (an MPack tag.) ">mpack_read_tag()</a> which yielded one of these types, or by a call to an expect function such as <a class="el" href="group__expect.html#ga6baba88194988c9f423630052d59f7fd" title="Reads the start of a string, returning its size in bytes. ">mpack_expect_str()</a> or <a class="el" href="group__expect.html#gadcf7fc94ae30ed5c3752291a0efd43c5" title="Reads the start of a binary blob, returning its size in bytes. ">mpack_expect_bin()</a>.</p>
<p>If an error occurs, the buffer contents are undefined.</p>
<p>This can be called multiple times for a single str, bin or ext to read the data in chunks. The total data read must add up to the size of the object.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">reader</td><td>The MPack reader </td></tr>
<tr><td class="paramname">p</td><td>The buffer in which to copy the bytes </td></tr>
<tr><td class="paramname">count</td><td>The number of bytes to read </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga147c9412e7df10c3484c7ec9f182fed2"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">char* mpack_read_bytes_alloc </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads bytes from a string, binary blob or extension object, allocating storage for them and returning the allocated pointer. </p>
<p>The allocated string must be freed with <a class="el" href="group__config.html#ga298d7c2e4093bcfe361088df9e35956a" title="Defines the memory free function used by MPack. ">MPACK_FREE()</a> (or simply free() if MPack's allocator hasn't been customized.)</p>
<p>Returns NULL if any error occurs, or if count is zero. </p>
</div>
</div>
<a class="anchor" id="ga654d697da6a0eaf25246adf3ed343572"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const char* mpack_read_bytes_inplace </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads bytes from a string, binary blob or extension object in-place in the buffer. </p>
<p>This can be used to avoid copying the data.</p>
<p>A str, bin or ext must have been opened by a call to <a class="el" href="group__reader.html#ga70c00ecaf381e9711f6c1d0fa92f0c2f" title="Reads a MessagePack object header (an MPack tag.) ">mpack_read_tag()</a> which yielded one of these types, or by a call to an expect function such as <a class="el" href="group__expect.html#ga6baba88194988c9f423630052d59f7fd" title="Reads the start of a string, returning its size in bytes. ">mpack_expect_str()</a> or <a class="el" href="group__expect.html#gadcf7fc94ae30ed5c3752291a0efd43c5" title="Reads the start of a binary blob, returning its size in bytes. ">mpack_expect_bin()</a>.</p>
<p>If the bytes are from a string, the string is not null-terminated! Use <a class="el" href="group__reader.html#ga628cbed1d2ffac977fed3b9ef5bf0fea" title="Reads bytes from a string, ensures that the string contains no NUL bytes, copies the bytes into the g...">mpack_read_cstr()</a> to copy the string into a buffer and add a null-terminator.</p>
<p>The returned pointer is invalidated on the next read, or when the buffer is destroyed.</p>
<p>The reader will move data around in the buffer if needed to ensure that the pointer can always be returned, so this should only be used if count is very small compared to the buffer size. If you need to check whether a small size is reasonable (for example you intend to handle small and large sizes differently), you can call <a class="el" href="group__reader.html#gaa69e23a50f63c84b45f9247db9c22ad0" title="Returns true if it&#39;s a good idea to read the given number of bytes in-place. ">mpack_should_read_bytes_inplace()</a>.</p>
<p>This can be called multiple times for a single str, bin or ext to read the data in chunks. The total data read must add up to the size of the object.</p>
<p>NULL is returned if the reader is in an error state.</p>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">mpack_error_too_big</td><td>if the requested size is larger than the buffer size</td></tr>
</table>
</dd>
</dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__reader.html#gaa69e23a50f63c84b45f9247db9c22ad0" title="Returns true if it&#39;s a good idea to read the given number of bytes in-place. ">mpack_should_read_bytes_inplace()</a> </dd></dl>
</div>
</div>
<a class="anchor" id="ga628cbed1d2ffac977fed3b9ef5bf0fea"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mpack_read_cstr </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>buffer_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>byte_count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads bytes from a string, ensures that the string contains no NUL bytes, copies the bytes into the given buffer and adds a null-terminator. </p>
<p>A string must have been opened by a call to <a class="el" href="group__reader.html#ga70c00ecaf381e9711f6c1d0fa92f0c2f" title="Reads a MessagePack object header (an MPack tag.) ">mpack_read_tag()</a> which yielded a string, or by a call to an expect function such as <a class="el" href="group__expect.html#ga6baba88194988c9f423630052d59f7fd" title="Reads the start of a string, returning its size in bytes. ">mpack_expect_str()</a>.</p>
<p>The given byte count must match the size of the string as returned by the tag or expect function. The string will only be copied if the buffer is large enough to store it.</p>
<p>If an error occurs, the buffer will contain an empty string.</p>
<dl class="section note"><dt>Note</dt><dd>If you know the object will be a string before reading it, it is highly recommended to use <a class="el" href="group__expect.html#ga94489d03628c1fb1a3d0ac6971600fe8" title="Reads a string into the given buffer, ensures it has no null bytes, and adds a null-terminator at the...">mpack_expect_cstr()</a> instead. Alternatively you could use <a class="el" href="group__reader.html#ga397a8d0738b8d68753a470a988b813aa" title="Parses the next MessagePack object header (an MPack tag) without advancing the reader. ">mpack_peek_tag()</a> and call <a class="el" href="group__expect.html#ga94489d03628c1fb1a3d0ac6971600fe8" title="Reads a string into the given buffer, ensures it has no null bytes, and adds a null-terminator at the...">mpack_expect_cstr()</a> if it's a string.</dd></dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">mpack_error_too_big</td><td>if the string plus null-terminator is larger than the given buffer size </td></tr>
<tr><td class="paramname">mpack_error_type</td><td>if the string contains a null byte.</td></tr>
</table>
</dd>
</dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__reader.html#ga397a8d0738b8d68753a470a988b813aa" title="Parses the next MessagePack object header (an MPack tag) without advancing the reader. ">mpack_peek_tag()</a> </dd>
<dd>
<a class="el" href="group__expect.html#ga94489d03628c1fb1a3d0ac6971600fe8" title="Reads a string into the given buffer, ensures it has no null bytes, and adds a null-terminator at the...">mpack_expect_cstr()</a> </dd>
<dd>
<a class="el" href="group__expect.html#ga62be63032f3c84181eeed4609f0dddb4" title="Reads a string into the given buffer, ensures it is a valid UTF-8 string without NUL characters...">mpack_expect_utf8_cstr()</a> </dd></dl>
</div>
</div>
<a class="anchor" id="ga70c00ecaf381e9711f6c1d0fa92f0c2f"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__common.html#structmpack__tag__t">mpack_tag_t</a> mpack_read_tag </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads a MessagePack object header (an MPack tag.) </p>
<p>If an error occurs, the reader is placed in an error state and a nil tag is returned. If the reader is already in an error state, a nil tag is returned.</p>
<p>If the type is compound (i.e. is a map, array, string, binary or extension type), additional reads are required to get the contained data, and the corresponding done function must be called when done.</p>
<dl class="section note"><dt>Note</dt><dd>Maps in JSON are unordered, so it is recommended not to expect a specific ordering for your map values in case your data is converted to/from JSON.</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__reader.html#gaeb91e8d4e2a7b7f6562d8bbb7400275c" title="Reads bytes from a string, binary blob or extension object, copying them into the given buffer...">mpack_read_bytes()</a> </dd>
<dd>
<a class="el" href="group__reader.html#gaddae460657b9a26207ed34352bff0b06" title="Finishes reading an array. ">mpack_done_array()</a> </dd>
<dd>
<a class="el" href="group__reader.html#ga86165fc780e7adef09f4b45aee54842a" title="Finishes reading a map. ">mpack_done_map()</a> </dd>
<dd>
<a class="el" href="group__reader.html#gaaad37015e0c53704d9356de06b493de6" title="Finishes reading a string. ">mpack_done_str()</a> </dd>
<dd>
<a class="el" href="group__reader.html#gaa4676c4b0761de4f864fd81c347a15a0" title="Finishes reading a binary data blob. ">mpack_done_bin()</a> </dd>
<dd>
<a class="el" href="group__reader.html#ga5ebed90f6fe9c1d324256d827032702b" title="Finishes reading an extended type binary data blob. ">mpack_done_ext()</a> </dd></dl>
</div>
</div>
<a class="anchor" id="gaee9d5bd9ec3d123dac575651f0ec2186"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mpack_read_utf8 </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>byte_count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads bytes from a string, ensures that the string is valid UTF-8, and copies the bytes into the given buffer. </p>
<p>A string must have been opened by a call to <a class="el" href="group__reader.html#ga70c00ecaf381e9711f6c1d0fa92f0c2f" title="Reads a MessagePack object header (an MPack tag.) ">mpack_read_tag()</a> which yielded a string, or by a call to an expect function such as <a class="el" href="group__expect.html#ga6baba88194988c9f423630052d59f7fd" title="Reads the start of a string, returning its size in bytes. ">mpack_expect_str()</a>.</p>
<p>The given byte count must match the complete size of the string as returned by the tag or expect function. You must ensure that the buffer fits the data.</p>
<p>This does not accept any UTF-8 variant such as Modified UTF-8, CESU-8 or WTF-8. Only pure UTF-8 is allowed.</p>
<p>If an error occurs, the buffer contents are undefined.</p>
<p>Unlike <a class="el" href="group__reader.html#gaeb91e8d4e2a7b7f6562d8bbb7400275c" title="Reads bytes from a string, binary blob or extension object, copying them into the given buffer...">mpack_read_bytes()</a>, this cannot be used to read the data in chunks (since this might split a character's UTF-8 bytes, and the reader does not keep track of the UTF-8 decoding state between reads.)</p>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">mpack_error_type</td><td>if the string contains invalid UTF-8. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gad053c4bccda721a25c48d66fa0f211cf"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mpack_read_utf8_cstr </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>buffer_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>byte_count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads bytes from a string, ensures that the string is valid UTF-8 with no NUL bytes, copies the bytes into the given buffer and adds a null-terminator. </p>
<p>A string must have been opened by a call to <a class="el" href="group__reader.html#ga70c00ecaf381e9711f6c1d0fa92f0c2f" title="Reads a MessagePack object header (an MPack tag.) ">mpack_read_tag()</a> which yielded a string, or by a call to an expect function such as <a class="el" href="group__expect.html#ga6baba88194988c9f423630052d59f7fd" title="Reads the start of a string, returning its size in bytes. ">mpack_expect_str()</a>.</p>
<p>The given byte count must match the size of the string as returned by the tag or expect function. The string will only be copied if the buffer is large enough to store it.</p>
<p>This does not accept any UTF-8 variant such as Modified UTF-8, CESU-8 or WTF-8. Only pure UTF-8 is allowed, but without the NUL character, since it cannot be represented in a null-terminated string.</p>
<p>If an error occurs, the buffer will contain an empty string.</p>
<dl class="section note"><dt>Note</dt><dd>If you know the object will be a string before reading it, it is highly recommended to use <a class="el" href="group__expect.html#ga62be63032f3c84181eeed4609f0dddb4" title="Reads a string into the given buffer, ensures it is a valid UTF-8 string without NUL characters...">mpack_expect_utf8_cstr()</a> instead. Alternatively you could use <a class="el" href="group__reader.html#ga397a8d0738b8d68753a470a988b813aa" title="Parses the next MessagePack object header (an MPack tag) without advancing the reader. ">mpack_peek_tag()</a> and call <a class="el" href="group__expect.html#ga62be63032f3c84181eeed4609f0dddb4" title="Reads a string into the given buffer, ensures it is a valid UTF-8 string without NUL characters...">mpack_expect_utf8_cstr()</a> if it's a string.</dd></dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">mpack_error_too_big</td><td>if the string plus null-terminator is larger than the given buffer size </td></tr>
<tr><td class="paramname">mpack_error_type</td><td>if the string contains invalid UTF-8 or a null byte.</td></tr>
</table>
</dd>
</dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__reader.html#ga397a8d0738b8d68753a470a988b813aa" title="Parses the next MessagePack object header (an MPack tag) without advancing the reader. ">mpack_peek_tag()</a> </dd>
<dd>
<a class="el" href="group__expect.html#ga62be63032f3c84181eeed4609f0dddb4" title="Reads a string into the given buffer, ensures it is a valid UTF-8 string without NUL characters...">mpack_expect_utf8_cstr()</a> </dd></dl>
</div>
</div>
<a class="anchor" id="gaa226c085be65e82ae9d4d1057c24f909"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const char* mpack_read_utf8_inplace </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Reads bytes from a string in-place in the buffer and ensures they are valid UTF-8. </p>
<p>This can be used to avoid copying the data.</p>
<p>A string must have been opened by a call to <a class="el" href="group__reader.html#ga70c00ecaf381e9711f6c1d0fa92f0c2f" title="Reads a MessagePack object header (an MPack tag.) ">mpack_read_tag()</a> which yielded a string, or by a call to an expect function such as <a class="el" href="group__expect.html#ga6baba88194988c9f423630052d59f7fd" title="Reads the start of a string, returning its size in bytes. ">mpack_expect_str()</a>.</p>
<p>The string is not null-terminated! Use <a class="el" href="group__reader.html#gad053c4bccda721a25c48d66fa0f211cf" title="Reads bytes from a string, ensures that the string is valid UTF-8 with no NUL bytes, copies the bytes into the given buffer and adds a null-terminator. ">mpack_read_utf8_cstr()</a> to copy the string into a buffer and add a null-terminator.</p>
<p>The returned pointer is invalidated on the next read, or when the buffer is destroyed.</p>
<p>The reader will move data around in the buffer if needed to ensure that the pointer can always be returned, so this should only be used if count is very small compared to the buffer size. If you need to check whether a small size is reasonable (for example you intend to handle small and large sizes differently), you can call <a class="el" href="group__reader.html#gaa69e23a50f63c84b45f9247db9c22ad0" title="Returns true if it&#39;s a good idea to read the given number of bytes in-place. ">mpack_should_read_bytes_inplace()</a>.</p>
<p>This does not accept any UTF-8 variant such as Modified UTF-8, CESU-8 or WTF-8. Only pure UTF-8 is allowed.</p>
<p>Unlike <a class="el" href="group__reader.html#ga654d697da6a0eaf25246adf3ed343572" title="Reads bytes from a string, binary blob or extension object in-place in the buffer. ">mpack_read_bytes_inplace()</a>, this cannot be used to read the data in chunks (since this might split a character's UTF-8 bytes, and the reader does not keep track of the UTF-8 decoding state between reads.)</p>
<p>NULL is returned if the reader is in an error state.</p>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname">mpack_error_type</td><td>if the string contains invalid UTF-8 </td></tr>
<tr><td class="paramname">mpack_error_too_big</td><td>if the requested size is larger than the buffer size</td></tr>
</table>
</dd>
</dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__reader.html#gaa69e23a50f63c84b45f9247db9c22ad0" title="Returns true if it&#39;s a good idea to read the given number of bytes in-place. ">mpack_should_read_bytes_inplace()</a> </dd></dl>
</div>
</div>
<a class="anchor" id="gac04666405e21eea6e8819182571f0d20"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__common.html#ga9d9f282ca4183ab5190e09d04c1f74c4">mpack_error_t</a> mpack_reader_destroy </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Cleans up the MPack reader, ensuring that all compound elements have been completely read. </p>
<p>Returns the final error state of the reader.</p>
<p>This will assert in tracking mode if the reader is not in an error state and has any incomplete reads. If you want to cancel reading in the middle of a document, you need to flag an error on the reader before destroying it (such as mpack_error_data).</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__reader.html#ga70c00ecaf381e9711f6c1d0fa92f0c2f" title="Reads a MessagePack object header (an MPack tag.) ">mpack_read_tag()</a> </dd>
<dd>
<a class="el" href="group__reader.html#ga5c45c2e0592f16ae671cd509d8d8c512" title="Places the reader in the given error state, calling the error callback if one is set. ">mpack_reader_flag_error()</a> </dd>
<dd>
<a class="el" href="group__common.html#gga9d9f282ca4183ab5190e09d04c1f74c4ae53cbed8fcc42915d71ae37d121b22e8" title="The contained data is not valid. ">mpack_error_data</a> </dd></dl>
</div>
</div>
<a class="anchor" id="ga79050efd2a581e8216f58d4946e7abc2"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__common.html#ga9d9f282ca4183ab5190e09d04c1f74c4">mpack_error_t</a> mpack_reader_error </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Queries the error state of the MPack reader. </p>
<p>If a reader is in an error state, you should discard all data since the last time the error flag was checked. The error flag cannot be cleared. </p>
</div>
</div>
<a class="anchor" id="ga5c45c2e0592f16ae671cd509d8d8c512"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mpack_reader_flag_error </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__common.html#ga9d9f282ca4183ab5190e09d04c1f74c4">mpack_error_t</a>&#160;</td>
<td class="paramname"><em>error</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Places the reader in the given error state, calling the error callback if one is set. </p>
<p>This allows you to externally flag errors, for example if you are validating data as you read it.</p>
<p>If the reader is already in an error state, this call is ignored and no error callback is called. </p>
</div>
</div>
<a class="anchor" id="ga09da1e5abbce2b9f7f70d82924eefa3f"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__common.html#ga9d9f282ca4183ab5190e09d04c1f74c4">mpack_error_t</a> mpack_reader_flag_if_error </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__common.html#ga9d9f282ca4183ab5190e09d04c1f74c4">mpack_error_t</a>&#160;</td>
<td class="paramname"><em>error</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Places the reader in the given error state if the given error is not mpack_ok, returning the resulting error state of the reader. </p>
<p>This allows you to externally flag errors, for example if you are validating data as you read it.</p>
<p>If the given error is mpack_ok or if the reader is already in an error state, this call is ignored and the actual error state of the reader is returned. </p>
</div>
</div>
<a class="anchor" id="ga1d79c00c6c013b879b164c26753b3e83"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mpack_reader_init </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>buffer</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initializes an MPack reader with the given buffer. </p>
<p>The reader does not assume ownership of the buffer, but the buffer must be writeable if a fill function will be used to refill it.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">reader</td><td>The MPack reader. </td></tr>
<tr><td class="paramname">buffer</td><td>The buffer with which to read MessagePack data. </td></tr>
<tr><td class="paramname">size</td><td>The size of the buffer. </td></tr>
<tr><td class="paramname">count</td><td>The number of bytes already in the buffer. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga18f41d6786155f265769351ef550e331"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mpack_reader_init_data </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initializes an MPack reader to parse a pre-loaded contiguous chunk of data. </p>
<p>The reader does not assume ownership of the data.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">reader</td><td>The MPack reader. </td></tr>
<tr><td class="paramname">data</td><td>The data to parse. </td></tr>
<tr><td class="paramname">count</td><td>The number of bytes pointed to by data. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga729bf4c0a79516e97a65d2e278f336e0"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mpack_reader_init_error </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__common.html#ga9d9f282ca4183ab5190e09d04c1f74c4">mpack_error_t</a>&#160;</td>
<td class="paramname"><em>error</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initializes an MPack reader directly into an error state. </p>
<p>Use this if you are writing a wrapper to <a class="el" href="group__reader.html#ga1d79c00c6c013b879b164c26753b3e83" title="Initializes an MPack reader with the given buffer. ">mpack_reader_init()</a> which can fail its setup. </p>
</div>
</div>
<a class="anchor" id="ga957b5be20debe9f3b81b629478bda0f5"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mpack_reader_init_file </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>filename</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initializes an MPack reader that reads from a file. </p>
</div>
</div>
<a class="anchor" id="ga291a38358bde6992b16edda81f2fcf45"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">size_t mpack_reader_remaining </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char **&#160;</td>
<td class="paramname"><em>data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns bytes left in the reader's buffer. </p>
<p>If you are done reading MessagePack data but there is other interesting data following it, the reader may have buffered too much data. The number of bytes remaining in the buffer and a pointer to the position of those bytes can be queried here.</p>
<p>If you know the length of the MPack chunk beforehand, it's better to instead have your fill function limit the data it reads so that the reader does not have extra data. In this case you can simply check that this returns zero.</p>
<p>Returns 0 if the reader is in an error state.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">reader</td><td>The MPack reader from which to query remaining data. </td></tr>
<tr><td class="paramname">data</td><td>[out] A pointer to the remaining data, or NULL. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The number of bytes remaining in the buffer. </dd></dl>
</div>
</div>
<a class="anchor" id="gafc76e77e7431f13ba7ff6a6a83fffe07"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mpack_reader_set_context </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>context</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Sets the custom pointer to pass to the reader callbacks, such as fill or teardown. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">reader</td><td>The MPack reader. </td></tr>
<tr><td class="paramname">context</td><td>User data to pass to the reader callbacks. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga926fbc6c3e5d048001dc070c8dc015ed"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mpack_reader_set_error_handler </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__reader.html#ga799a3f21adc8e229c6040ab42d90bef3">mpack_reader_error_t</a>&#160;</td>
<td class="paramname"><em>error_fn</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Sets the error function to call when an error is flagged on the reader. </p>
<p>This should normally be used with <a class="el" href="group__reader.html#gafc76e77e7431f13ba7ff6a6a83fffe07" title="Sets the custom pointer to pass to the reader callbacks, such as fill or teardown. ">mpack_reader_set_context()</a> to register a custom pointer to pass to the error function.</p>
<p>See the definition of mpack_reader_error_t for more information about what you can do from an error callback.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__reader.html#ga799a3f21adc8e229c6040ab42d90bef3" title="An error handler function to be called when an error is flagged on the reader. ">mpack_reader_error_t</a> </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">reader</td><td>The MPack reader. </td></tr>
<tr><td class="paramname">error_fn</td><td>The function to call when an error is flagged on the reader. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gaf4eab68e9d1751ff9c6c853d563d9a0e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mpack_reader_set_fill </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__reader.html#ga97503ca06d41d58c60226b2732661eda">mpack_reader_fill_t</a>&#160;</td>
<td class="paramname"><em>fill</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Sets the fill function to refill the data buffer when it runs out of data. </p>
<p>If no fill function is used, truncated MessagePack data results in mpack_error_invalid (since the buffer is assumed to contain a complete MessagePack object.)</p>
<p>If a fill function is used, truncated MessagePack data usually results in mpack_error_io (since the fill function fails to get the missing data.)</p>
<p>This should normally be used with <a class="el" href="group__reader.html#gafc76e77e7431f13ba7ff6a6a83fffe07" title="Sets the custom pointer to pass to the reader callbacks, such as fill or teardown. ">mpack_reader_set_context()</a> to register a custom pointer to pass to the fill function.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">reader</td><td>The MPack reader. </td></tr>
<tr><td class="paramname">fill</td><td>The function to fetch additional data into the buffer. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gaa925114414e77ff809fcaaba399c8162"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mpack_reader_set_skip </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__reader.html#ga6a0b236c7befe9cb959dabce15acd23b">mpack_reader_skip_t</a>&#160;</td>
<td class="paramname"><em>skip</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Sets the skip function to discard bytes from the source stream. </p>
<p>It's not necessary to implement this function. If the stream is not seekable, don't set a skip callback. The reader will fall back to using the fill function instead.</p>
<p>This should normally be used with <a class="el" href="group__reader.html#gafc76e77e7431f13ba7ff6a6a83fffe07" title="Sets the custom pointer to pass to the reader callbacks, such as fill or teardown. ">mpack_reader_set_context()</a> to register a custom pointer to pass to the skip function.</p>
<p>The skip function is ignored in size-optimized builds to reduce code size. Data will be skipped with the fill function when necessary.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">reader</td><td>The MPack reader. </td></tr>
<tr><td class="paramname">skip</td><td>The function to discard bytes from the source stream. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gad04ce10afce7422697d861f46e5aee86"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mpack_reader_set_teardown </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__reader.html#gadda6baaccdcf0ad9c5e212be9992cf5b">mpack_reader_teardown_t</a>&#160;</td>
<td class="paramname"><em>teardown</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Sets the teardown function to call when the reader is destroyed. </p>
<p>This should normally be used with <a class="el" href="group__reader.html#gafc76e77e7431f13ba7ff6a6a83fffe07" title="Sets the custom pointer to pass to the reader callbacks, such as fill or teardown. ">mpack_reader_set_context()</a> to register a custom pointer to pass to the teardown function.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">reader</td><td>The MPack reader. </td></tr>
<tr><td class="paramname">teardown</td><td>The function to call when the reader is destroyed. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gaa69e23a50f63c84b45f9247db9c22ad0"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool mpack_should_read_bytes_inplace </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns true if it's a good idea to read the given number of bytes in-place. </p>
<p>If the read will be larger than some small fraction of the buffer size, this will return false to avoid shuffling too much data back and forth in the buffer.</p>
<p>Use this if you're expecting arbitrary size data, and you want to read in-place for the best performance when possible but will fall back to a normal read if the data is too large.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__reader.html#ga654d697da6a0eaf25246adf3ed343572" title="Reads bytes from a string, binary blob or extension object in-place in the buffer. ">mpack_read_bytes_inplace()</a> </dd></dl>
</div>
</div>
<a class="anchor" id="ga0c7e1dd2be56ce3d596326c4463e7229"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void mpack_skip_bytes </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__reader.html#gaee791c36a15344b9e57edae160c86615">mpack_reader_t</a> *&#160;</td>
<td class="paramname"><em>reader</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>count</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Skips bytes from the underlying stream. </p>
<p>This is used only to skip the contents of a string, binary blob or extension object. </p>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>