cereal/assets/doxygen/structcereal_1_1detail_1_1PolymorphicCasters.html
2022-02-27 19:48:38 -08:00

278 lines
17 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>cereal: cereal::detail::PolymorphicCasters Struct Reference</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>
<link href="doxygen.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">cereal
</div>
<div id="projectbrief">A C++11 library for serialization</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- 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 id="nav-path" class="navpath">
<ul>
<li class="navelem"><b>cereal</b></li><li class="navelem"><b>detail</b></li><li class="navelem"><a class="el" href="structcereal_1_1detail_1_1PolymorphicCasters.html">PolymorphicCasters</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
<a href="#pub-attribs">Public Attributes</a> &#124;
<a href="structcereal_1_1detail_1_1PolymorphicCasters-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">cereal::detail::PolymorphicCasters Struct Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Holds registered mappings between base and derived types for casting.
<a href="structcereal_1_1detail_1_1PolymorphicCasters.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="polymorphic__impl_8hpp_source.html">/home/shane/workspace/cereal/include/cereal/details/polymorphic_impl.hpp</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a9d79b7d0b85c988ef102c07509094cf7"><td class="memItemLeft" align="right" valign="top"><a id="a9d79b7d0b85c988ef102c07509094cf7"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1PolymorphicCasters.html#a9d79b7d0b85c988ef102c07509094cf7">DerivedCasterMap</a> = std::unordered_map&lt; std::type_index, std::vector&lt; <a class="el" href="structcereal_1_1detail_1_1PolymorphicCaster.html">PolymorphicCaster</a> const * &gt; &gt;</td></tr>
<tr class="memdesc:a9d79b7d0b85c988ef102c07509094cf7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maps from a derived type index to a set of chainable casters. <br /></td></tr>
<tr class="separator:a9d79b7d0b85c988ef102c07509094cf7"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr class="memitem:ab1ab88bd3370d3327d5035d233b48292"><td class="memItemLeft" align="right" valign="top">static std::pair&lt; bool, std::vector&lt; <a class="el" href="structcereal_1_1detail_1_1PolymorphicCaster.html">PolymorphicCaster</a> const * &gt; const &amp; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1PolymorphicCasters.html#ab1ab88bd3370d3327d5035d233b48292">lookup_if_exists</a> (std::type_index const &amp;baseIndex, std::type_index const &amp;derivedIndex)</td></tr>
<tr class="memdesc:ab1ab88bd3370d3327d5035d233b48292"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if the mapping object that can perform the upcast or downcast exists, and returns it if so. <a href="structcereal_1_1detail_1_1PolymorphicCasters.html#ab1ab88bd3370d3327d5035d233b48292">More...</a><br /></td></tr>
<tr class="separator:ab1ab88bd3370d3327d5035d233b48292"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5e0a5c9c5f4e858b1c12edc72e527735"><td class="memTemplParams" colspan="2">template&lt;class F &gt; </td></tr>
<tr class="memitem:a5e0a5c9c5f4e858b1c12edc72e527735"><td class="memTemplItemLeft" align="right" valign="top">static const std::vector&lt; <a class="el" href="structcereal_1_1detail_1_1PolymorphicCaster.html">PolymorphicCaster</a> const * &gt; &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1PolymorphicCasters.html#a5e0a5c9c5f4e858b1c12edc72e527735">lookup</a> (std::type_index const &amp;baseIndex, std::type_index const &amp;derivedIndex, F &amp;&amp;exceptionFunc)</td></tr>
<tr class="memdesc:a5e0a5c9c5f4e858b1c12edc72e527735"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the mapping object that can perform the upcast or downcast. <a href="structcereal_1_1detail_1_1PolymorphicCasters.html#a5e0a5c9c5f4e858b1c12edc72e527735">More...</a><br /></td></tr>
<tr class="separator:a5e0a5c9c5f4e858b1c12edc72e527735"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad4983e7aae8a92d717162fc0e1f1dd49"><td class="memTemplParams" colspan="2"><a id="ad4983e7aae8a92d717162fc0e1f1dd49"></a>
template&lt;class Derived &gt; </td></tr>
<tr class="memitem:ad4983e7aae8a92d717162fc0e1f1dd49"><td class="memTemplItemLeft" align="right" valign="top">static const Derived *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1PolymorphicCasters.html#ad4983e7aae8a92d717162fc0e1f1dd49">downcast</a> (const void *dptr, std::type_info const &amp;baseInfo)</td></tr>
<tr class="memdesc:ad4983e7aae8a92d717162fc0e1f1dd49"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs a downcast to the derived type using a registered mapping. <br /></td></tr>
<tr class="separator:ad4983e7aae8a92d717162fc0e1f1dd49"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a82ba78ff9ce36c6c1062b2db62bd1e1d"><td class="memTemplParams" colspan="2">template&lt;class Derived &gt; </td></tr>
<tr class="memitem:a82ba78ff9ce36c6c1062b2db62bd1e1d"><td class="memTemplItemLeft" align="right" valign="top">static void *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1PolymorphicCasters.html#a82ba78ff9ce36c6c1062b2db62bd1e1d">upcast</a> (Derived *const dptr, std::type_info const &amp;baseInfo)</td></tr>
<tr class="memdesc:a82ba78ff9ce36c6c1062b2db62bd1e1d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs an upcast to the registered base type using the given a derived type. <a href="structcereal_1_1detail_1_1PolymorphicCasters.html#a82ba78ff9ce36c6c1062b2db62bd1e1d">More...</a><br /></td></tr>
<tr class="separator:a82ba78ff9ce36c6c1062b2db62bd1e1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aac0ca1d11af2db4cb6aedcbc976c3d9e"><td class="memTemplParams" colspan="2"><a id="aac0ca1d11af2db4cb6aedcbc976c3d9e"></a>
template&lt;class Derived &gt; </td></tr>
<tr class="memitem:aac0ca1d11af2db4cb6aedcbc976c3d9e"><td class="memTemplItemLeft" align="right" valign="top">static std::shared_ptr&lt; void &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1PolymorphicCasters.html#aac0ca1d11af2db4cb6aedcbc976c3d9e">upcast</a> (std::shared_ptr&lt; Derived &gt; const &amp;dptr, std::type_info const &amp;baseInfo)</td></tr>
<tr class="memdesc:aac0ca1d11af2db4cb6aedcbc976c3d9e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Upcasts for shared pointers. <br /></td></tr>
<tr class="separator:aac0ca1d11af2db4cb6aedcbc976c3d9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Public Attributes</h2></td></tr>
<tr class="memitem:ab73d51a06e51c40527b5356befe2d6cf"><td class="memItemLeft" align="right" valign="top"><a id="ab73d51a06e51c40527b5356befe2d6cf"></a>
std::unordered_map&lt; std::type_index, <a class="el" href="structcereal_1_1detail_1_1PolymorphicCasters.html#a9d79b7d0b85c988ef102c07509094cf7">DerivedCasterMap</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structcereal_1_1detail_1_1PolymorphicCasters.html#ab73d51a06e51c40527b5356befe2d6cf">map</a></td></tr>
<tr class="memdesc:ab73d51a06e51c40527b5356befe2d6cf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maps from base type index to a map from derived type index to caster. <br /></td></tr>
<tr class="separator:ab73d51a06e51c40527b5356befe2d6cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2882f71eeb29db503e81b8796b6418b6"><td class="memItemLeft" align="right" valign="top"><a id="a2882f71eeb29db503e81b8796b6418b6"></a>
std::multimap&lt; std::type_index, std::type_index &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>reverseMap</b></td></tr>
<tr class="separator:a2882f71eeb29db503e81b8796b6418b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Holds registered mappings between base and derived types for casting. </p>
<p>This will be allocated as a <a class="el" href="classcereal_1_1detail_1_1StaticObject.html" title="A static, pre-execution object.">StaticObject</a> and holds a map containing all registered mappings between base and derived types. </p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a5e0a5c9c5f4e858b1c12edc72e527735"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5e0a5c9c5f4e858b1c12edc72e527735">&#9670;&nbsp;</a></span>lookup()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class F &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static const std::vector&lt;<a class="el" href="structcereal_1_1detail_1_1PolymorphicCaster.html">PolymorphicCaster</a> const *&gt;&amp; cereal::detail::PolymorphicCasters::lookup </td>
<td>(</td>
<td class="paramtype">std::type_index const &amp;&#160;</td>
<td class="paramname"><em>baseIndex</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::type_index const &amp;&#160;</td>
<td class="paramname"><em>derivedIndex</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">F &amp;&amp;&#160;</td>
<td class="paramname"><em>exceptionFunc</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Gets the mapping object that can perform the upcast or downcast. </p>
<p>Uses the type index from the base and derived class to find the matching registered caster. If no matching caster exists, calls the exception function.</p>
<p>The returned <a class="el" href="structcereal_1_1detail_1_1PolymorphicCaster.html" title="Base type for polymorphic void casting.">PolymorphicCaster</a> is capable of upcasting or downcasting between the two types. </p>
</div>
</div>
<a id="ab1ab88bd3370d3327d5035d233b48292"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab1ab88bd3370d3327d5035d233b48292">&#9670;&nbsp;</a></span>lookup_if_exists()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static std::pair&lt;bool, std::vector&lt;<a class="el" href="structcereal_1_1detail_1_1PolymorphicCaster.html">PolymorphicCaster</a> const *&gt; const &amp;&gt; cereal::detail::PolymorphicCasters::lookup_if_exists </td>
<td>(</td>
<td class="paramtype">std::type_index const &amp;&#160;</td>
<td class="paramname"><em>baseIndex</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::type_index const &amp;&#160;</td>
<td class="paramname"><em>derivedIndex</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Checks if the mapping object that can perform the upcast or downcast exists, and returns it if so. </p>
<p>Uses the type index from the base and derived class to find the matching registered caster. If no matching caster exists, the bool in the pair will be false and the vector reference should not be used. </p>
</div>
</div>
<a id="a82ba78ff9ce36c6c1062b2db62bd1e1d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a82ba78ff9ce36c6c1062b2db62bd1e1d">&#9670;&nbsp;</a></span>upcast()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Derived &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static void* cereal::detail::PolymorphicCasters::upcast </td>
<td>(</td>
<td class="paramtype">Derived *const&#160;</td>
<td class="paramname"><em>dptr</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::type_info const &amp;&#160;</td>
<td class="paramname"><em>baseInfo</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Performs an upcast to the registered base type using the given a derived type. </p>
<p>The return is untyped because the final casting to the base type must happen in the polymorphic serialization function, where the type is known at compile time </p>
</div>
</div>
<hr/>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="polymorphic__impl_8hpp_source.html">polymorphic_impl.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- HTML footer for doxygen 1.8.3.1-->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Feb 27 2022 19:46:46 for cereal by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.17
</small></address>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-42360142-1', 'uscilab.github.io');
ga('send', 'pageview');
</script>
</body>
</html>