<!-- Copyright (c) 2020 ARM Limited. -->
<!--                                 -->
<!-- SPDX-License-Identifier: MIT    -->
<!--                                 -->
<!-- HTML header for doxygen 1.8.13-->
<!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.13"/>
<meta name="robots" content="NOINDEX, NOFOLLOW" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmNN: Class Members - Functions</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>
<script type="text/javascript">
  $(document).ready(initResizable);
</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" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="stylesheet.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: 10rem; margin-top: .5rem; margin-left 10px"/>
  <td style="padding-left: 0.5em;">
   <div id="projectname">
   &#160;<span id="projectnumber">20.02</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</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">
$(document).ready(function(){initNavTree('functions_func_u.xhtml','');});
</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_u"></a>- u -</h3><ul>
<li>UnimplementedException()
: <a class="el" href="classarmnn_1_1_unimplemented_exception.xhtml#ab6efa077767924b8ce5ab0bf33cb53d5">UnimplementedException</a>
</li>
<li>UnloadNetwork()
: <a class="el" href="classarmnn_1_1_i_runtime.xhtml#a43a7ee9625c9c3f4140fa02c92199fd1">IRuntime</a>
, <a class="el" href="classarmnn_1_1_runtime.xhtml#ae54a3b358f009aec340d443d038805a4">Runtime</a>
</li>
<li>UnloadOpenClRuntime()
: <a class="el" href="classarmnn_1_1_cl_context_control.xhtml#a48f639543a69fe342fec2021b9dfd1d4">ClContextControl</a>
</li>
<li>Unmap()
: <a class="el" href="classarmnn_1_1_cl_sub_tensor_handle.xhtml#a88ab6decf78c152e746b7d8dc2dd931f">ClSubTensorHandle</a>
, <a class="el" href="classarmnn_1_1_cl_tensor_handle.xhtml#a88ab6decf78c152e746b7d8dc2dd931f">ClTensorHandle</a>
, <a class="el" href="classarmnn_1_1_const_cpu_tensor_handle.xhtml#a88ab6decf78c152e746b7d8dc2dd931f">ConstCpuTensorHandle</a>
, <a class="el" href="classarmnn_1_1_i_tensor_handle.xhtml#a563609828050f1b3a7868c23f3365923">ITensorHandle</a>
, <a class="el" href="classarmnn_1_1_neon_sub_tensor_handle.xhtml#a88ab6decf78c152e746b7d8dc2dd931f">NeonSubTensorHandle</a>
, <a class="el" href="classarmnn_1_1_neon_tensor_handle.xhtml#a88ab6decf78c152e746b7d8dc2dd931f">NeonTensorHandle</a>
, <a class="el" href="classarmnn_1_1_ref_tensor_handle.xhtml#a88ab6decf78c152e746b7d8dc2dd931f">RefTensorHandle</a>
, <a class="el" href="classarmnn_1_1_sample_tensor_handle.xhtml#a88ab6decf78c152e746b7d8dc2dd931f">SampleTensorHandle</a>
</li>
<li>Unroll()
: <a class="el" href="structarmnn_1_1_broadcast_loop.xhtml#a1b3b461824ae2769251ad66a09da5b52">BroadcastLoop</a>
</li>
<li>Update()
: <a class="el" href="classarmnn_1_1_added_layer_observable.xhtml#a191da1d3efde9128152d3c6dbb869fec">AddedLayerObservable</a>
, <a class="el" href="classarmnn_1_1_erased_layer_names_observable.xhtml#a191da1d3efde9128152d3c6dbb869fec">ErasedLayerNamesObservable</a>
, <a class="el" href="classarmnn_1_1_i_graph_observable.xhtml#a4683739acfc782967e12a58e5041ee38">IGraphObservable</a>
, <a class="el" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">ProfilingService</a>
</li>
<li>UpdateEventTag()
: <a class="el" href="classarmnn_1_1_profiler.xhtml#afb5ba6c1110d2ea400f49ad7f3ac4d15">Profiler</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 Fri Mar 13 2020 16:09:21 for ArmNN by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
  </ul>
</div>
</body>
</html>
