<!-- HTML header for doxygen 1.8.17-->
<!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>Arm NN: Namespace Members</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="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.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/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
</script>
<script type="text/javascript" async="async" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="customdoxygen.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;">
  <img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 15rem; margin-top: .5rem; margin-left 13px"/>
  <td id="projectalign" style="padding-left: 0.9em;">
   <div id="projectname">
   &#160;<span id="projectnumber">24.05</span>
   </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>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('namespacemembers_func_r.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- 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="contents">
&#160;

<h3><a id="index_r"></a>- r -</h3><ul>
<li>ReadFileContentsIntoString()
: <a class="el" href="namespacearmnn_utils_1_1_filesystem.html#a32ff1b057109ad1128fd1ac82ed7e9a7">armnnUtils::Filesystem</a>
</li>
<li>Reduce()
: <a class="el" href="namespacearmnn.html#ad64b7a275169ba1b1ba2d15679f7e8b1">armnn</a>
</li>
<li>ReduceDims()
: <a class="el" href="namespacearmnn_utils.html#a29e9952fc973569b267d87b04ce372c2">armnnUtils</a>
</li>
<li>ReducedOutputOffset()
: <a class="el" href="namespacearmnn.html#ae86f1ca23eaa764da9e589cc8e39a969">armnn</a>
</li>
<li>RefBackendId()
: <a class="el" href="namespacearmnn.html#ae7d50846b2769f81521af24d063bc093">armnn</a>
</li>
<li>RefTensorHandleFactoryId()
: <a class="el" href="namespacearmnn.html#a5baedac4819656984488bc1fe5fe1505">armnn</a>
</li>
<li>RemoveDirectoryAndContents()
: <a class="el" href="namespacearmnn_utils_1_1_filesystem.html#aa994467360962e6efc1c4e0d8f293e8c">armnnUtils::Filesystem</a>
</li>
<li>RemoveReshapeLayer()
: <a class="el" href="namespacearmnn.html#ae756568a7f2c58778bb6d759d2bd38db">armnn</a>
</li>
<li>RenameExportedFiles()
: <a class="el" href="namespacearmnn__driver.html#a3d30e31a46482fbc714fc34e0d5a1c90">armnn_driver</a>
</li>
<li>RenameFile()
: <a class="el" href="namespacearmnn__driver.html#a00b317cd97319ac7b6a248a768ceb201">armnn_driver</a>
</li>
<li>ReorderWeightChannelsForAcl()
: <a class="el" href="namespacearmnn.html#a52b301fd3adce20b51c4482cb52f1a38">armnn</a>
</li>
<li>ReplaceLayers()
: <a class="el" href="namespacearmnn.html#abecdb9c231b9ced02bec27a1ca54184f">armnn</a>
</li>
<li>ReplaceMultipleLayers()
: <a class="el" href="namespacearmnn.html#af8b1723c2ceaf3aca2deddbf9b0e3e44">armnn</a>
</li>
<li>ReportError()
: <a class="el" href="namespacearmnn.html#a3cf1cee98e0ed8b54263ec7279f6ec69">armnn</a>
</li>
<li>ReportUntouchedLayers()
: <a class="el" href="namespacearmnn.html#a5afd10e5e84ebf5cb8cfc8707492eda7">armnn</a>
</li>
<li>ReportWarning()
: <a class="el" href="namespacearmnn.html#a070307e9ee0f7969f7d4320145d1dddb">armnn</a>
</li>
<li>RequiresCopy()
: <a class="el" href="namespacearmnn.html#a5ee4a1cca55f69b31e625c786655ed1a">armnn</a>
</li>
<li>ReshapeWeightsForAcl()
: <a class="el" href="namespacearmnn.html#a3170fdd696155a247ecd81d445c0e2e1">armnn</a>
</li>
<li>Resize()
: <a class="el" href="namespacearmnn.html#aaa168a41b648cda82a2c8b9f2b91ec04">armnn</a>
</li>
<li>ReturnWithError()
: <a class="el" href="namespacearmnn.html#aeee4e55e6ad4fe12b2168f9fd1e88141">armnn</a>
</li>
<li>ReverseGetFlatIdx()
: <a class="el" href="namespacearmnn.html#a8d4ef1958eb8b75e33ff5f9e1682c9a8">armnn</a>
</li>
<li>ReverseGetMultIdx()
: <a class="el" href="namespacearmnn.html#ae9f7ce777fbcab84555a1e80ab03c13a">armnn</a>
</li>
<li>ReverseRelocateIdx()
: <a class="el" href="namespacearmnn.html#a8a0d9d6566aa1e098f6988b2ee98bf00">armnn</a>
</li>
<li>ReverseV2()
: <a class="el" href="namespacearmnn.html#a8caac207d532c38c3909d40c742d8c3f">armnn</a>
</li>
<li>RevertConstantWeightsToFP32()
: <a class="el" href="namespacearmnn.html#ac616eba4fa6ed1911f4b64a189b194fc">armnn</a>
</li>
<li>roundf()
: <a class="el" href="namespacearmnn.html#a3cf63e1c930f73db7f917203fe15f503">armnn</a>
</li>
<li>RunClFunction()
: <a class="el" href="namespacearmnn.html#a52c299ca6a3884c609583a5a0663db80">armnn</a>
</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer">Generated on Thu May 16 2024 09:32:00 for Arm NN by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
  </ul>
</div>
</body>
</html>
