blob: 60d877daaedae65bebbccc593bdca72c3a61a56d [file] [log] [blame]
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001<!-- HTML header for doxygen 1.8.17-->
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml">
4<head>
5<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
6<meta http-equiv="X-UA-Compatible" content="IE=9"/>
7<meta name="generator" content="Doxygen 1.8.17"/>
8<meta name="viewport" content="width=device-width, initial-scale=1"/>
9<title>Arm NN: Graph Class Reference</title>
10<link href="tabs.css" rel="stylesheet" type="text/css"/>
11<script type="text/javascript" src="jquery.js"></script>
12<script type="text/javascript" src="dynsections.js"></script>
13<link href="navtree.css" rel="stylesheet" type="text/css"/>
14<script type="text/javascript" src="resize.js"></script>
15<script type="text/javascript" src="navtreedata.js"></script>
16<script type="text/javascript" src="navtree.js"></script>
17<link href="search/search.css" rel="stylesheet" type="text/css"/>
18<script type="text/javascript" src="search/searchdata.js"></script>
19<script type="text/javascript" src="search/search.js"></script>
20<script type="text/x-mathjax-config">
21 MathJax.Hub.Config({
22 extensions: ["tex2jax.js"],
23 jax: ["input/TeX","output/HTML-CSS"],
24});
25</script>
26<script type="text/javascript" async="async" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
27<link href="doxygen.css" rel="stylesheet" type="text/css" />
28<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
29</head>
30<body>
31<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
32<div id="titlearea">
33<table cellspacing="0" cellpadding="0">
34 <tbody>
35 <tr style="height: 56px;">
36 <img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 15rem; margin-top: .5rem; margin-left 13px"/>
37 <td id="projectalign" style="padding-left: 0.9em;">
38 <div id="projectname">
Nikhil Raj6f92c8e2023-11-22 11:41:15 +000039 &#160;<span id="projectnumber">23.11</span>
Nikhil Raj03c7ff32023-08-22 12:00:04 +010040 </div>
41 </td>
42 </tr>
43 </tbody>
44</table>
45</div>
46<!-- end header part -->
47<!-- Generated by Doxygen 1.8.17 -->
48<script type="text/javascript">
49/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
50var searchBox = new SearchBox("searchBox", "search",false,'Search');
51/* @license-end */
52</script>
53<script type="text/javascript" src="menudata.js"></script>
54<script type="text/javascript" src="menu.js"></script>
55<script type="text/javascript">
56/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
57$(function() {
58 initMenu('',true,false,'search.php','Search');
59 $(document).ready(function() { init_search(); });
60});
61/* @license-end */</script>
62<div id="main-nav"></div>
63</div><!-- top -->
64<div id="side-nav" class="ui-resizable side-nav-resizable">
65 <div id="nav-tree">
66 <div id="nav-tree-contents">
67 <div id="nav-sync" class="sync"></div>
68 </div>
69 </div>
70 <div id="splitbar" style="-moz-user-select:none;"
71 class="ui-resizable-handle">
72 </div>
73</div>
74<script type="text/javascript">
75/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
76$(document).ready(function(){initNavTree('classarmnn_1_1_graph.html',''); initResizable(); });
77/* @license-end */
78</script>
79<div id="doc-content">
80<!-- window showing the filter options -->
81<div id="MSearchSelectWindow"
82 onmouseover="return searchBox.OnSearchSelectShow()"
83 onmouseout="return searchBox.OnSearchSelectHide()"
84 onkeydown="return searchBox.OnSearchSelectKey(event)">
85</div>
86
87<!-- iframe showing the search results (closed by default) -->
88<div id="MSearchResultsWindow">
89<iframe src="javascript:void(0)" frameborder="0"
90 name="MSearchResults" id="MSearchResults">
91</iframe>
92</div>
93
94<div class="header">
95 <div class="summary">
96<a href="#nested-classes">Classes</a> &#124;
97<a href="#pub-types">Public Types</a> &#124;
98<a href="#pub-methods">Public Member Functions</a> &#124;
99<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
100<a href="#friends">Friends</a> &#124;
101<a href="classarmnn_1_1_graph-members.html">List of all members</a> </div>
102 <div class="headertitle">
103<div class="title">Graph Class Reference</div> </div>
104</div><!--header-->
105<div class="contents">
106
107<p><code>#include &lt;<a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>&gt;</code></p>
108<table class="memberdecls">
109<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
110Classes</h2></td></tr>
111<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_graph_1_1_input_layers_accessor.html">InputLayersAccessor</a></td></tr>
112<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wrapper class returned by <a class="el" href="classarmnn_1_1_graph.html#a919fb58873ef3a6549e4490e226f2eae" title="Returns a wrapper object with begin(), end() methods to iterate over the input layers in a range-base...">Graph::GetInputLayers()</a> <a href="structarmnn_1_1_graph_1_1_input_layers_accessor.html#details">More...</a><br /></td></tr>
113<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
114<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph_1_1_layer_in_graph_3_01_constant_layer_01_4.html">LayerInGraph&lt; ConstantLayer &gt;</a></td></tr>
115<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
116<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph_1_1_layer_in_graph_3_01_input_layer_01_4.html">LayerInGraph&lt; InputLayer &gt;</a></td></tr>
117<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Inputs add/remove their binding id to m_InputIds in the graph. <a href="classarmnn_1_1_graph_1_1_layer_in_graph_3_01_input_layer_01_4.html#details">More...</a><br /></td></tr>
118<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
119<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph_1_1_layer_in_graph_3_01_output_layer_01_4.html">LayerInGraph&lt; OutputLayer &gt;</a></td></tr>
120<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Outputs add/remove their binding id to m_OutputIds in the graph. <a href="classarmnn_1_1_graph_1_1_layer_in_graph_3_01_output_layer_01_4.html#details">More...</a><br /></td></tr>
121<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
122<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_1_1_graph_1_1_output_layers_accessor.html">OutputLayersAccessor</a></td></tr>
123<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wrapper class returned by <a class="el" href="classarmnn_1_1_graph.html#aa311c7fe7e05406c9ff4e4ed3ba09825" title="Returns a wrapper object with begin(), end() methods to iterate over the output layers in a range-bas...">Graph::GetOutputLayers()</a> <a href="structarmnn_1_1_graph_1_1_output_layers_accessor.html#details">More...</a><br /></td></tr>
124<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
125</table><table class="memberdecls">
126<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
127Public Types</h2></td></tr>
128<tr class="memitem:aa6553ea54991669aaa89b6f17bdf4172"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#aa6553ea54991669aaa89b6f17bdf4172">LayerList</a> = std::list&lt; <a class="el" href="classarmnn_1_1_layer.html">Layer</a> * &gt;</td></tr>
129<tr class="separator:aa6553ea54991669aaa89b6f17bdf4172"><td class="memSeparator" colspan="2">&#160;</td></tr>
130<tr class="memitem:acc25db0641c1c22faf95af3bb49080c9"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Iterator</a> = LayerList::const_iterator</td></tr>
131<tr class="separator:acc25db0641c1c22faf95af3bb49080c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
132<tr class="memitem:a53402e786b52cef2fb21f3e39a819967"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a53402e786b52cef2fb21f3e39a819967">IteratorDifference</a> = Iterator::difference_type</td></tr>
133<tr class="separator:a53402e786b52cef2fb21f3e39a819967"><td class="memSeparator" colspan="2">&#160;</td></tr>
134<tr class="memitem:aec593bbf34c780f1a928830bca14a82c"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#aec593bbf34c780f1a928830bca14a82c">ConstIterator</a> = <a class="el" href="classarmnn_1_1_transform_iterator.html">TransformIterator</a>&lt; decltype(&amp;<a class="el" href="classarmnn_1_1_graph.html#ab67eccecb5c9e6574f2836623f01025c">PtrCast</a>&lt; const <a class="el" href="classarmnn_1_1_layer.html">Layer</a> &gt;), <a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Iterator</a> &gt;</td></tr>
135<tr class="separator:aec593bbf34c780f1a928830bca14a82c"><td class="memSeparator" colspan="2">&#160;</td></tr>
136<tr class="memitem:a16c3092e5eb82795bdcb2261b36163c4"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a16c3092e5eb82795bdcb2261b36163c4">ConstIteratorInputs</a> = <a class="el" href="classarmnn_1_1_transform_iterator.html">TransformIterator</a>&lt; decltype(&amp;<a class="el" href="classarmnn_1_1_graph.html#ab67eccecb5c9e6574f2836623f01025c">PtrCast</a>&lt; const <a class="el" href="classarmnn_1_1_input_layer.html">InputLayer</a> &gt;), <a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Iterator</a> &gt;</td></tr>
137<tr class="separator:a16c3092e5eb82795bdcb2261b36163c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
138<tr class="memitem:a5dd42728d63f11ac7688010954624eeb"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a5dd42728d63f11ac7688010954624eeb">ConstIteratorOutputs</a> = <a class="el" href="classarmnn_1_1_transform_iterator.html">TransformIterator</a>&lt; decltype(&amp;<a class="el" href="classarmnn_1_1_graph.html#ab67eccecb5c9e6574f2836623f01025c">PtrCast</a>&lt; const <a class="el" href="classarmnn_1_1_output_layer.html">OutputLayer</a> &gt;), <a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Iterator</a> &gt;</td></tr>
139<tr class="separator:a5dd42728d63f11ac7688010954624eeb"><td class="memSeparator" colspan="2">&#160;</td></tr>
140</table><table class="memberdecls">
141<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
142Public Member Functions</h2></td></tr>
143<tr class="memitem:ad6521013ad981519904822f2ada2c4ec"><td class="memTemplParams" colspan="2">template&lt;typename Func &gt; </td></tr>
144<tr class="memitem:ad6521013ad981519904822f2ada2c4ec"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#ad6521013ad981519904822f2ada2c4ec">ForEachLayer</a> (Func func) const</td></tr>
145<tr class="separator:ad6521013ad981519904822f2ada2c4ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
146<tr class="memitem:aa5cc5821862aa5cecac2b54974c2b3d8"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#aa5cc5821862aa5cecac2b54974c2b3d8">Graph</a> (bool shapeInferenceMethod=false, bool allowExpandedDims=false)</td></tr>
147<tr class="separator:aa5cc5821862aa5cecac2b54974c2b3d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
148<tr class="memitem:a39f90416cf9263d44db1c0a7deeb1b64"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a39f90416cf9263d44db1c0a7deeb1b64">Graph</a> (const <a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;other)</td></tr>
149<tr class="separator:a39f90416cf9263d44db1c0a7deeb1b64"><td class="memSeparator" colspan="2">&#160;</td></tr>
150<tr class="memitem:a99eeb892ef31ec3e7058acea2253bce6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a99eeb892ef31ec3e7058acea2253bce6">operator=</a> (const <a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;other)=delete</td></tr>
151<tr class="separator:a99eeb892ef31ec3e7058acea2253bce6"><td class="memSeparator" colspan="2">&#160;</td></tr>
152<tr class="memitem:ab3790d678e488ba10868a9a0b0c324a6"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#ab3790d678e488ba10868a9a0b0c324a6">Graph</a> (<a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&amp;other)</td></tr>
153<tr class="separator:ab3790d678e488ba10868a9a0b0c324a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
154<tr class="memitem:a04b47532de485737e97066d3cb29c957"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a04b47532de485737e97066d3cb29c957">operator=</a> (<a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&amp;other)</td></tr>
155<tr class="separator:a04b47532de485737e97066d3cb29c957"><td class="memSeparator" colspan="2">&#160;</td></tr>
156<tr class="memitem:af5a604e5e9e4d68dbc10b312e59f678f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#af5a604e5e9e4d68dbc10b312e59f678f">~Graph</a> ()</td></tr>
157<tr class="separator:af5a604e5e9e4d68dbc10b312e59f678f"><td class="memSeparator" colspan="2">&#160;</td></tr>
Nikhil Raj6f92c8e2023-11-22 11:41:15 +0000158<tr class="memitem:a5dbbfed3b6d0bf3126abfc34e93a69f0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a5dbbfed3b6d0bf3126abfc34e93a69f0">Print</a> (bool extended=false) const</td></tr>
159<tr class="separator:a5dbbfed3b6d0bf3126abfc34e93a69f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100160<tr class="memitem:a131873e7a706fc7ca0637027236916e9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a131873e7a706fc7ca0637027236916e9">SerializeToDot</a> (std::ostream &amp;stream)</td></tr>
161<tr class="separator:a131873e7a706fc7ca0637027236916e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
162<tr class="memitem:a7563c5b899e7d0ada08fd0fdb202f205"><td class="memTemplParams" colspan="2">template&lt;typename LayerT , typename... Args&gt; </td></tr>
163<tr class="memitem:a7563c5b899e7d0ada08fd0fdb202f205"><td class="memTemplItemLeft" align="right" valign="top">LayerT *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a> (Args &amp;&amp;... args)</td></tr>
164<tr class="memdesc:a7563c5b899e7d0ada08fd0fdb202f205"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds a new layer, of type LayerType, to the graph constructed with the arguments passed. <a href="classarmnn_1_1_graph.html#a7563c5b899e7d0ada08fd0fdb202f205">More...</a><br /></td></tr>
165<tr class="separator:a7563c5b899e7d0ada08fd0fdb202f205"><td class="memSeparator" colspan="2">&#160;</td></tr>
166<tr class="memitem:a3ff30c6669fdc69de1f5be1f89bacc3f"><td class="memTemplParams" colspan="2">template&lt;typename LayerT , typename... Args&gt; </td></tr>
167<tr class="memitem:a3ff30c6669fdc69de1f5be1f89bacc3f"><td class="memTemplItemLeft" align="right" valign="top">LayerT *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a3ff30c6669fdc69de1f5be1f89bacc3f">InsertNewLayer</a> (<a class="el" href="classarmnn_1_1_input_slot.html">InputSlot</a> &amp;insertBefore, Args &amp;&amp;... args)</td></tr>
168<tr class="memdesc:a3ff30c6669fdc69de1f5be1f89bacc3f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Inserts a new layer between the output slot currently connected to insertBefore and insertBefore itself. <a href="classarmnn_1_1_graph.html#a3ff30c6669fdc69de1f5be1f89bacc3f">More...</a><br /></td></tr>
169<tr class="separator:a3ff30c6669fdc69de1f5be1f89bacc3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
170<tr class="memitem:af8c993add04a7b4e1e29924a03d23d0c"><td class="memTemplParams" colspan="2">template&lt;typename LayerT , typename... Args&gt; </td></tr>
171<tr class="memitem:af8c993add04a7b4e1e29924a03d23d0c"><td class="memTemplItemLeft" align="right" valign="top">LayerT *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#af8c993add04a7b4e1e29924a03d23d0c">InsertNewLayer</a> (<a class="el" href="classarmnn_1_1_output_slot.html">OutputSlot</a> &amp;insertAfter, Args &amp;&amp;... args)</td></tr>
172<tr class="memdesc:af8c993add04a7b4e1e29924a03d23d0c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Inserts a new layer between insertAfter and the input slot(s) currently connected to it. <a href="classarmnn_1_1_graph.html#af8c993add04a7b4e1e29924a03d23d0c">More...</a><br /></td></tr>
173<tr class="separator:af8c993add04a7b4e1e29924a03d23d0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
174<tr class="memitem:a96d76fd10af39fbfabfd0caf0d1439fa"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a96d76fd10af39fbfabfd0caf0d1439fa">EraseLayer</a> (<a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Iterator</a> pos)</td></tr>
175<tr class="memdesc:a96d76fd10af39fbfabfd0caf0d1439fa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deletes the layer at the specified position. <a href="classarmnn_1_1_graph.html#a96d76fd10af39fbfabfd0caf0d1439fa">More...</a><br /></td></tr>
176<tr class="separator:a96d76fd10af39fbfabfd0caf0d1439fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
177<tr class="memitem:a2b1af2be20d1b14172c636de692a75a5"><td class="memTemplParams" colspan="2">template&lt;typename LayerT &gt; </td></tr>
178<tr class="memitem:a2b1af2be20d1b14172c636de692a75a5"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a2b1af2be20d1b14172c636de692a75a5">EraseLayer</a> (LayerT *&amp;layer)</td></tr>
179<tr class="memdesc:a2b1af2be20d1b14172c636de692a75a5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deletes the layer. <a href="classarmnn_1_1_graph.html#a2b1af2be20d1b14172c636de692a75a5">More...</a><br /></td></tr>
180<tr class="separator:a2b1af2be20d1b14172c636de692a75a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
181<tr class="memitem:a2387033802383edbdc95f9bbb12a707e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Iterator</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a2387033802383edbdc95f9bbb12a707e">begin</a> ()</td></tr>
182<tr class="memdesc:a2387033802383edbdc95f9bbb12a707e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns iterator pointing to the beginning of the list. Lowercase for range-based for loops. <a href="classarmnn_1_1_graph.html#a2387033802383edbdc95f9bbb12a707e">More...</a><br /></td></tr>
183<tr class="separator:a2387033802383edbdc95f9bbb12a707e"><td class="memSeparator" colspan="2">&#160;</td></tr>
184<tr class="memitem:ab45dae688fc5d8983727abffa4389003"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Iterator</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#ab45dae688fc5d8983727abffa4389003">end</a> ()</td></tr>
185<tr class="memdesc:ab45dae688fc5d8983727abffa4389003"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns iterator pointing to the end of the list. Lowercase for range-based for loops. <a href="classarmnn_1_1_graph.html#ab45dae688fc5d8983727abffa4389003">More...</a><br /></td></tr>
186<tr class="separator:ab45dae688fc5d8983727abffa4389003"><td class="memSeparator" colspan="2">&#160;</td></tr>
187<tr class="memitem:ad5fee900c7aee90671038c79225bf8ec"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_graph.html#aec593bbf34c780f1a928830bca14a82c">ConstIterator</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#ad5fee900c7aee90671038c79225bf8ec">begin</a> () const</td></tr>
188<tr class="memdesc:ad5fee900c7aee90671038c79225bf8ec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns const iterator pointing to the beginning of the list. Lowercase for range-based for loops. <a href="classarmnn_1_1_graph.html#ad5fee900c7aee90671038c79225bf8ec">More...</a><br /></td></tr>
189<tr class="separator:ad5fee900c7aee90671038c79225bf8ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
190<tr class="memitem:a69b6e2a03c835ca5d658a1f16acbaa9c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_graph.html#aec593bbf34c780f1a928830bca14a82c">ConstIterator</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a69b6e2a03c835ca5d658a1f16acbaa9c">end</a> () const</td></tr>
191<tr class="memdesc:a69b6e2a03c835ca5d658a1f16acbaa9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns const iterator pointing to the end of the list. Lowercase for range-based for loops. <a href="classarmnn_1_1_graph.html#a69b6e2a03c835ca5d658a1f16acbaa9c">More...</a><br /></td></tr>
192<tr class="separator:a69b6e2a03c835ca5d658a1f16acbaa9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
193<tr class="memitem:a98b1109a9006f8cc7d4566146a3bd737"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_graph.html#aec593bbf34c780f1a928830bca14a82c">ConstIterator</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a98b1109a9006f8cc7d4566146a3bd737">cbegin</a> () const</td></tr>
194<tr class="memdesc:a98b1109a9006f8cc7d4566146a3bd737"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns const iterator pointing to the beginning of the list. Lowercase for range-based for loops. <a href="classarmnn_1_1_graph.html#a98b1109a9006f8cc7d4566146a3bd737">More...</a><br /></td></tr>
195<tr class="separator:a98b1109a9006f8cc7d4566146a3bd737"><td class="memSeparator" colspan="2">&#160;</td></tr>
196<tr class="memitem:a02fd29b6dc3e21fbe4484362d85893bc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_graph.html#aec593bbf34c780f1a928830bca14a82c">ConstIterator</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a02fd29b6dc3e21fbe4484362d85893bc">cend</a> () const</td></tr>
197<tr class="memdesc:a02fd29b6dc3e21fbe4484362d85893bc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns const iterator pointing to the end of the list. Lowercase for range-based for loops. <a href="classarmnn_1_1_graph.html#a02fd29b6dc3e21fbe4484362d85893bc">More...</a><br /></td></tr>
198<tr class="separator:a02fd29b6dc3e21fbe4484362d85893bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
199<tr class="memitem:af497e16cf92179b5e55543741351b8bf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#af497e16cf92179b5e55543741351b8bf">TopologicalSort</a> ()</td></tr>
200<tr class="memdesc:af497e16cf92179b5e55543741351b8bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sorts layers in topological order and return this. <a href="classarmnn_1_1_graph.html#af497e16cf92179b5e55543741351b8bf">More...</a><br /></td></tr>
201<tr class="separator:af497e16cf92179b5e55543741351b8bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
202<tr class="memitem:a3362b4d52feb9550c3d6738c2d284359"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a3362b4d52feb9550c3d6738c2d284359">TopologicalSort</a> () const</td></tr>
203<tr class="separator:a3362b4d52feb9550c3d6738c2d284359"><td class="memSeparator" colspan="2">&#160;</td></tr>
204<tr class="memitem:a8d8179a4a0703602a5d7dbb6e92eaf69"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a8d8179a4a0703602a5d7dbb6e92eaf69">GetNumInputs</a> () const</td></tr>
205<tr class="separator:a8d8179a4a0703602a5d7dbb6e92eaf69"><td class="memSeparator" colspan="2">&#160;</td></tr>
206<tr class="memitem:a604654b453ec291a503d62a0beb849d3"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a604654b453ec291a503d62a0beb849d3">GetNumOutputs</a> () const</td></tr>
207<tr class="separator:a604654b453ec291a503d62a0beb849d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
208<tr class="memitem:a919fb58873ef3a6549e4490e226f2eae"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structarmnn_1_1_graph_1_1_input_layers_accessor.html">InputLayersAccessor</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a919fb58873ef3a6549e4490e226f2eae">GetInputLayers</a> () const</td></tr>
209<tr class="memdesc:a919fb58873ef3a6549e4490e226f2eae"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a wrapper object with <a class="el" href="classarmnn_1_1_graph.html#a2387033802383edbdc95f9bbb12a707e" title="Returns iterator pointing to the beginning of the list. Lowercase for range-based for loops.">begin()</a>, <a class="el" href="classarmnn_1_1_graph.html#ab45dae688fc5d8983727abffa4389003" title="Returns iterator pointing to the end of the list. Lowercase for range-based for loops.">end()</a> methods to iterate over the input layers in a range-based for loop. <a href="classarmnn_1_1_graph.html#a919fb58873ef3a6549e4490e226f2eae">More...</a><br /></td></tr>
210<tr class="separator:a919fb58873ef3a6549e4490e226f2eae"><td class="memSeparator" colspan="2">&#160;</td></tr>
211<tr class="memitem:aa311c7fe7e05406c9ff4e4ed3ba09825"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structarmnn_1_1_graph_1_1_output_layers_accessor.html">OutputLayersAccessor</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#aa311c7fe7e05406c9ff4e4ed3ba09825">GetOutputLayers</a> () const</td></tr>
212<tr class="memdesc:aa311c7fe7e05406c9ff4e4ed3ba09825"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a wrapper object with <a class="el" href="classarmnn_1_1_graph.html#a2387033802383edbdc95f9bbb12a707e" title="Returns iterator pointing to the beginning of the list. Lowercase for range-based for loops.">begin()</a>, <a class="el" href="classarmnn_1_1_graph.html#ab45dae688fc5d8983727abffa4389003" title="Returns iterator pointing to the end of the list. Lowercase for range-based for loops.">end()</a> methods to iterate over the output layers in a range-based for loop. <a href="classarmnn_1_1_graph.html#aa311c7fe7e05406c9ff4e4ed3ba09825">More...</a><br /></td></tr>
213<tr class="separator:aa311c7fe7e05406c9ff4e4ed3ba09825"><td class="memSeparator" colspan="2">&#160;</td></tr>
214<tr class="memitem:afdf8eb85585a798ad0e936bde884d87b"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#afdf8eb85585a798ad0e936bde884d87b">GetNumLayers</a> () const</td></tr>
215<tr class="separator:afdf8eb85585a798ad0e936bde884d87b"><td class="memSeparator" colspan="2">&#160;</td></tr>
216<tr class="memitem:a5a989a5f9aeb2935ba932b7f8312fe0c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a5a989a5f9aeb2935ba932b7f8312fe0c">AllocateDynamicBuffers</a> ()</td></tr>
217<tr class="memdesc:a5a989a5f9aeb2935ba932b7f8312fe0c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocates memory for all tensors under output tensor handers of each layer. <a href="classarmnn_1_1_graph.html#a5a989a5f9aeb2935ba932b7f8312fe0c">More...</a><br /></td></tr>
218<tr class="separator:a5a989a5f9aeb2935ba932b7f8312fe0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
219<tr class="memitem:ad1bbee7bf5f93b792675886f57d3ebe0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#ad1bbee7bf5f93b792675886f57d3ebe0">AddCompatibilityLayers</a> (std::map&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a>, std::unique_ptr&lt; class <a class="el" href="classarmnn_1_1_i_backend_internal.html">IBackendInternal</a> &gt;&gt; &amp;backends, <a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.html">TensorHandleFactoryRegistry</a> &amp;registry)</td></tr>
220<tr class="memdesc:ad1bbee7bf5f93b792675886f57d3ebe0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Modifies the graph in-place, removing edges connecting layers using different compute devices, and relinking them via an intermediary copy layers. <a href="classarmnn_1_1_graph.html#ad1bbee7bf5f93b792675886f57d3ebe0">More...</a><br /></td></tr>
221<tr class="separator:ad1bbee7bf5f93b792675886f57d3ebe0"><td class="memSeparator" colspan="2">&#160;</td></tr>
222<tr class="memitem:aafbd4b469e47160017f409df8d077184"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#aafbd4b469e47160017f409df8d077184">SubstituteSubgraph</a> (<a class="el" href="classarmnn_1_1_subgraph_view.html">SubgraphView</a> &amp;subgraph, <a class="el" href="classarmnn_1_1_i_connectable_layer.html">IConnectableLayer</a> *substituteLayer)</td></tr>
223<tr class="memdesc:aafbd4b469e47160017f409df8d077184"><td class="mdescLeft">&#160;</td><td class="mdescRight">Substitutes the given sub-graph with either a new layer or a new sub-graph. <a href="classarmnn_1_1_graph.html#aafbd4b469e47160017f409df8d077184">More...</a><br /></td></tr>
224<tr class="separator:aafbd4b469e47160017f409df8d077184"><td class="memSeparator" colspan="2">&#160;</td></tr>
225<tr class="memitem:a4443d9ad865522c39d06556a9dbbeb58"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a4443d9ad865522c39d06556a9dbbeb58">SubstituteSubgraph</a> (<a class="el" href="classarmnn_1_1_subgraph_view.html">SubgraphView</a> &amp;subgraph, const <a class="el" href="classarmnn_1_1_subgraph_view.html">SubgraphView</a> &amp;substituteSubgraph)</td></tr>
226<tr class="separator:a4443d9ad865522c39d06556a9dbbeb58"><td class="memSeparator" colspan="2">&#160;</td></tr>
227<tr class="memitem:a6cc2c46f05be1d3bf113d632aed1e496"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a6cc2c46f05be1d3bf113d632aed1e496">VerifyConstantLayerSetTensorInfo</a> () const</td></tr>
228<tr class="memdesc:a6cc2c46f05be1d3bf113d632aed1e496"><td class="mdescLeft">&#160;</td><td class="mdescRight">For each <a class="el" href="classarmnn_1_1_constant_layer.html" title="A layer that the constant data can be bound to.">ConstantLayer</a> in <a class="el" href="classarmnn_1_1_graph.html">Graph</a>, ensures <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> is set on all output slots. <a href="classarmnn_1_1_graph.html#a6cc2c46f05be1d3bf113d632aed1e496">More...</a><br /></td></tr>
229<tr class="separator:a6cc2c46f05be1d3bf113d632aed1e496"><td class="memSeparator" colspan="2">&#160;</td></tr>
230<tr class="memitem:a2ceda8d369e861997d558fac74d79c33"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a2ceda8d369e861997d558fac74d79c33">InferTensorInfos</a> ()</td></tr>
231<tr class="separator:a2ceda8d369e861997d558fac74d79c33"><td class="memSeparator" colspan="2">&#160;</td></tr>
232<tr class="memitem:a52ff421c210e0e0b247dbe1dd07b9a7d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a52ff421c210e0e0b247dbe1dd07b9a7d">AttachObservable</a> (<a class="el" href="classarmnn_1_1_i_graph_observable.html">IGraphObservable</a> *const observable, <a class="el" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0b">GraphEvent</a> notifyOnEvent)</td></tr>
233<tr class="separator:a52ff421c210e0e0b247dbe1dd07b9a7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
234<tr class="memitem:a369faf91a25265add1fe8aa416e7b877"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a369faf91a25265add1fe8aa416e7b877">DetachObservable</a> (<a class="el" href="classarmnn_1_1_i_graph_observable.html">IGraphObservable</a> *const observable, <a class="el" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0b">GraphEvent</a> notifyOnEvent)</td></tr>
235<tr class="separator:a369faf91a25265add1fe8aa416e7b877"><td class="memSeparator" colspan="2">&#160;</td></tr>
236<tr class="memitem:ac7ed5efddd83499ff642cc65f3f66a14"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Iterator</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#ac7ed5efddd83499ff642cc65f3f66a14">GetPosInGraph</a> (<a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;layer)</td></tr>
237<tr class="memdesc:ac7ed5efddd83499ff642cc65f3f66a14"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the position of a layer in the graph. <a href="classarmnn_1_1_graph.html#ac7ed5efddd83499ff642cc65f3f66a14">More...</a><br /></td></tr>
238<tr class="separator:ac7ed5efddd83499ff642cc65f3f66a14"><td class="memSeparator" colspan="2">&#160;</td></tr>
239<tr class="memitem:a880db527e7dbf8d0de3fee52ba072482"><td class="memItemLeft" align="right" valign="top">const std::shared_ptr&lt; <a class="el" href="classarmnn_1_1_i_profiler.html">IProfiler</a> &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a880db527e7dbf8d0de3fee52ba072482">GetProfiler</a> () const</td></tr>
240<tr class="separator:a880db527e7dbf8d0de3fee52ba072482"><td class="memSeparator" colspan="2">&#160;</td></tr>
241<tr class="memitem:ac3b4675f7a50a0f242880fb044aa8dec"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#ac3b4675f7a50a0f242880fb044aa8dec">SetLayersOutOfOrder</a> ()</td></tr>
242<tr class="separator:ac3b4675f7a50a0f242880fb044aa8dec"><td class="memSeparator" colspan="2">&#160;</td></tr>
243</table><table class="memberdecls">
244<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
245Static Public Member Functions</h2></td></tr>
246<tr class="memitem:ab67eccecb5c9e6574f2836623f01025c"><td class="memTemplParams" colspan="2">template&lt;typename LayerType &gt; </td></tr>
247<tr class="memitem:ab67eccecb5c9e6574f2836623f01025c"><td class="memTemplItemLeft" align="right" valign="top">static <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a> *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#ab67eccecb5c9e6574f2836623f01025c">PtrCast</a> (<a class="el" href="classarmnn_1_1_layer.html">Layer</a> *const layer)</td></tr>
248<tr class="separator:ab67eccecb5c9e6574f2836623f01025c"><td class="memSeparator" colspan="2">&#160;</td></tr>
249</table><table class="memberdecls">
250<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
251Friends</h2></td></tr>
252<tr class="memitem:a0da841ca170a7634c24eb102b95daa2a"><td class="memItemLeft" align="right" valign="top">class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_graph.html#a0da841ca170a7634c24eb102b95daa2a">SubgraphView</a></td></tr>
253<tr class="separator:a0da841ca170a7634c24eb102b95daa2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
254</table>
255<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
256<div class="textblock">
257<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00030">30</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
258</div><h2 class="groupheader">Member Typedef Documentation</h2>
259<a id="aec593bbf34c780f1a928830bca14a82c"></a>
260<h2 class="memtitle"><span class="permalink"><a href="#aec593bbf34c780f1a928830bca14a82c">&#9670;&nbsp;</a></span>ConstIterator</h2>
261
262<div class="memitem">
263<div class="memproto">
264 <table class="memname">
265 <tr>
266 <td class="memname">using <a class="el" href="classarmnn_1_1_graph.html#aec593bbf34c780f1a928830bca14a82c">ConstIterator</a> = <a class="el" href="classarmnn_1_1_transform_iterator.html">TransformIterator</a>&lt;decltype(&amp;<a class="el" href="classarmnn_1_1_graph.html#ab67eccecb5c9e6574f2836623f01025c">PtrCast</a>&lt;const <a class="el" href="classarmnn_1_1_layer.html">Layer</a>&gt;), <a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Iterator</a>&gt;</td>
267 </tr>
268 </table>
269</div><div class="memdoc">
270
271<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00056">56</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
272
273</div>
274</div>
275<a id="a16c3092e5eb82795bdcb2261b36163c4"></a>
276<h2 class="memtitle"><span class="permalink"><a href="#a16c3092e5eb82795bdcb2261b36163c4">&#9670;&nbsp;</a></span>ConstIteratorInputs</h2>
277
278<div class="memitem">
279<div class="memproto">
280 <table class="memname">
281 <tr>
282 <td class="memname">using <a class="el" href="classarmnn_1_1_graph.html#a16c3092e5eb82795bdcb2261b36163c4">ConstIteratorInputs</a> = <a class="el" href="classarmnn_1_1_transform_iterator.html">TransformIterator</a>&lt;decltype(&amp;<a class="el" href="classarmnn_1_1_graph.html#ab67eccecb5c9e6574f2836623f01025c">PtrCast</a>&lt;const <a class="el" href="classarmnn_1_1_input_layer.html">InputLayer</a>&gt;), <a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Iterator</a>&gt;</td>
283 </tr>
284 </table>
285</div><div class="memdoc">
286
287<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00057">57</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
288
289</div>
290</div>
291<a id="a5dd42728d63f11ac7688010954624eeb"></a>
292<h2 class="memtitle"><span class="permalink"><a href="#a5dd42728d63f11ac7688010954624eeb">&#9670;&nbsp;</a></span>ConstIteratorOutputs</h2>
293
294<div class="memitem">
295<div class="memproto">
296 <table class="memname">
297 <tr>
298 <td class="memname">using <a class="el" href="classarmnn_1_1_graph.html#a5dd42728d63f11ac7688010954624eeb">ConstIteratorOutputs</a> = <a class="el" href="classarmnn_1_1_transform_iterator.html">TransformIterator</a>&lt;decltype(&amp;<a class="el" href="classarmnn_1_1_graph.html#ab67eccecb5c9e6574f2836623f01025c">PtrCast</a>&lt;const <a class="el" href="classarmnn_1_1_output_layer.html">OutputLayer</a>&gt;), <a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Iterator</a>&gt;</td>
299 </tr>
300 </table>
301</div><div class="memdoc">
302
303<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00058">58</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
304
305</div>
306</div>
307<a id="acc25db0641c1c22faf95af3bb49080c9"></a>
308<h2 class="memtitle"><span class="permalink"><a href="#acc25db0641c1c22faf95af3bb49080c9">&#9670;&nbsp;</a></span>Iterator</h2>
309
310<div class="memitem">
311<div class="memproto">
312 <table class="memname">
313 <tr>
314 <td class="memname">using <a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Iterator</a> = LayerList::const_iterator</td>
315 </tr>
316 </table>
317</div><div class="memdoc">
318
319<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00053">53</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
320
321</div>
322</div>
323<a id="a53402e786b52cef2fb21f3e39a819967"></a>
324<h2 class="memtitle"><span class="permalink"><a href="#a53402e786b52cef2fb21f3e39a819967">&#9670;&nbsp;</a></span>IteratorDifference</h2>
325
326<div class="memitem">
327<div class="memproto">
328 <table class="memname">
329 <tr>
330 <td class="memname">using <a class="el" href="classarmnn_1_1_graph.html#a53402e786b52cef2fb21f3e39a819967">IteratorDifference</a> = Iterator::difference_type</td>
331 </tr>
332 </table>
333</div><div class="memdoc">
334
335<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00054">54</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
336
337</div>
338</div>
339<a id="aa6553ea54991669aaa89b6f17bdf4172"></a>
340<h2 class="memtitle"><span class="permalink"><a href="#aa6553ea54991669aaa89b6f17bdf4172">&#9670;&nbsp;</a></span>LayerList</h2>
341
342<div class="memitem">
343<div class="memproto">
344 <table class="memname">
345 <tr>
346 <td class="memname">using <a class="el" href="classarmnn_1_1_graph.html#aa6553ea54991669aaa89b6f17bdf4172">LayerList</a> = std::list&lt;<a class="el" href="classarmnn_1_1_layer.html">Layer</a>*&gt;</td>
347 </tr>
348 </table>
349</div><div class="memdoc">
350
351<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00050">50</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
352
353</div>
354</div>
355<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
356<a id="aa5cc5821862aa5cecac2b54974c2b3d8"></a>
357<h2 class="memtitle"><span class="permalink"><a href="#aa5cc5821862aa5cecac2b54974c2b3d8">&#9670;&nbsp;</a></span>Graph() <span class="overload">[1/3]</span></h2>
358
359<div class="memitem">
360<div class="memproto">
361<table class="mlabels">
362 <tr>
363 <td class="mlabels-left">
364 <table class="memname">
365 <tr>
366 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html">Graph</a> </td>
367 <td>(</td>
368 <td class="paramtype">bool&#160;</td>
369 <td class="paramname"><em>shapeInferenceMethod</em> = <code>false</code>, </td>
370 </tr>
371 <tr>
372 <td class="paramkey"></td>
373 <td></td>
374 <td class="paramtype">bool&#160;</td>
375 <td class="paramname"><em>allowExpandedDims</em> = <code>false</code>&#160;</td>
376 </tr>
377 <tr>
378 <td></td>
379 <td>)</td>
380 <td></td><td></td>
381 </tr>
382 </table>
383 </td>
384 <td class="mlabels-right">
385<span class="mlabels"><span class="mlabel">inline</span></span> </td>
386 </tr>
387</table>
388</div><div class="memdoc">
389
390<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00098">98</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
391<div class="fragment"><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; : m_LayersInOrder(<span class="keyword">true</span>)</div>
392<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; , m_AllowExpandedDims(allowExpandedDims)</div>
393<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; , m_ShapeInferenceMethod(shapeInferenceMethod ? <a class="code" href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb">ShapeInferenceMethod::InferAndValidate</a> :</div>
394<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <a class="code" href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1">ShapeInferenceMethod::ValidateOnly</a>)</div>
395<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; , m_Profiler(std::make_shared&lt;IProfiler&gt;())</div>
396<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {}</div>
397</div><!-- fragment -->
398<p class="reference">References <a class="el" href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb">armnn::InferAndValidate</a>, and <a class="el" href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1">armnn::ValidateOnly</a>.</p>
399
400</div>
401</div>
402<a id="a39f90416cf9263d44db1c0a7deeb1b64"></a>
403<h2 class="memtitle"><span class="permalink"><a href="#a39f90416cf9263d44db1c0a7deeb1b64">&#9670;&nbsp;</a></span>Graph() <span class="overload">[2/3]</span></h2>
404
405<div class="memitem">
406<div class="memproto">
407 <table class="memname">
408 <tr>
409 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html">Graph</a> </td>
410 <td>(</td>
411 <td class="paramtype">const <a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&#160;</td>
412 <td class="paramname"><em>other</em></td><td>)</td>
413 <td></td>
414 </tr>
415 </table>
416</div><div class="memdoc">
417
418<p class="definition">Definition at line <a class="el" href="_graph_8cpp_source.html#l00027">27</a> of file <a class="el" href="_graph_8cpp_source.html">Graph.cpp</a>.</p>
419<div class="fragment"><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;: m_LayersInOrder(other.m_LayersInOrder)</div>
420<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;, m_AllowExpandedDims(other.m_AllowExpandedDims)</div>
421<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;, m_ShapeInferenceMethod(other.m_ShapeInferenceMethod)</div>
422<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;, m_Profiler(other.m_Profiler)</div>
423<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;{</div>
424<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; std::unordered_map&lt;const Layer*, Layer*&gt; otherToClonedMap;</div>
425<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
426<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; otherLayer : other.m_Layers)</div>
427<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; {</div>
428<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; Layer* <span class="keyword">const</span> layer = otherLayer-&gt;Clone(*<span class="keyword">this</span>);</div>
429<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; otherToClonedMap.emplace(otherLayer, layer);</div>
430<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; }</div>
431<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
432<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="comment">// Copies slot connections.</span></div>
433<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; otherLayer : other.m_Layers)</div>
434<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div>
435<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; Layer* <span class="keyword">const</span> thisLayer = otherToClonedMap[otherLayer];</div>
436<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
437<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">auto</span> outputSlot = thisLayer-&gt;BeginOutputSlots();</div>
438<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; otherOutputSlot : otherLayer-&gt;GetOutputSlots())</div>
439<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div>
440<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; otherInputSlot : otherOutputSlot.GetConnections())</div>
441<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; {</div>
442<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">const</span> Layer&amp; otherTgtLayer = otherInputSlot-&gt;GetOwningLayer();</div>
443<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; Layer* <span class="keyword">const</span> thisTgtLayer = otherToClonedMap[&amp;otherTgtLayer];</div>
444<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; </div>
445<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; InputSlot&amp; inputSlot = thisTgtLayer-&gt;GetInputSlot(otherInputSlot-&gt;GetSlotIndex());</div>
446<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
447<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">if</span> (otherInputSlot-&gt;IsTensorInfoOverridden())</div>
448<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; {</div>
449<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; inputSlot.SetTensorInfo(otherInputSlot-&gt;GetTensorInfo());</div>
450<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div>
451<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; outputSlot-&gt;Connect(inputSlot);</div>
452<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; }</div>
453<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; outputSlot-&gt;SetTensorInfo(otherOutputSlot.GetTensorInfo());</div>
454<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; ++outputSlot;</div>
455<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div>
456<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div>
457<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;}</div>
458</div><!-- fragment -->
459<p class="reference">References <a class="el" href="_layer_8hpp_source.html#l00266">Layer::BeginOutputSlots()</a>, <a class="el" href="classarmnn_1_1_layer.html#ae89ff455503aa106d00bf34103d2f2e0">Layer::Clone()</a>, <a class="el" href="_layer_8hpp_source.html#l00337">Layer::GetInputSlot()</a>, and <a class="el" href="_layer_8cpp_source.html#l00587">InputSlot::SetTensorInfo()</a>.</p>
460
461</div>
462</div>
463<a id="ab3790d678e488ba10868a9a0b0c324a6"></a>
464<h2 class="memtitle"><span class="permalink"><a href="#ab3790d678e488ba10868a9a0b0c324a6">&#9670;&nbsp;</a></span>Graph() <span class="overload">[3/3]</span></h2>
465
466<div class="memitem">
467<div class="memproto">
468<table class="mlabels">
469 <tr>
470 <td class="mlabels-left">
471 <table class="memname">
472 <tr>
473 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html">Graph</a> </td>
474 <td>(</td>
475 <td class="paramtype"><a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&amp;&#160;</td>
476 <td class="paramname"><em>other</em></td><td>)</td>
477 <td></td>
478 </tr>
479 </table>
480 </td>
481 <td class="mlabels-right">
482<span class="mlabels"><span class="mlabel">inline</span></span> </td>
483 </tr>
484</table>
485</div><div class="memdoc">
486
487<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00110">110</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
488<div class="fragment"><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; {</div>
489<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; *<span class="keyword">this</span> = std::move(other);</div>
490<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div>
491</div><!-- fragment -->
492</div>
493</div>
494<a id="af5a604e5e9e4d68dbc10b312e59f678f"></a>
495<h2 class="memtitle"><span class="permalink"><a href="#af5a604e5e9e4d68dbc10b312e59f678f">&#9670;&nbsp;</a></span>~Graph()</h2>
496
497<div class="memitem">
498<div class="memproto">
499<table class="mlabels">
500 <tr>
501 <td class="mlabels-left">
502 <table class="memname">
503 <tr>
504 <td class="memname">~<a class="el" href="classarmnn_1_1_graph.html">Graph</a> </td>
505 <td>(</td>
506 <td class="paramname"></td><td>)</td>
507 <td></td>
508 </tr>
509 </table>
510 </td>
511 <td class="mlabels-right">
512<span class="mlabels"><span class="mlabel">inline</span></span> </td>
513 </tr>
514</table>
515</div><div class="memdoc">
516
517<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00135">135</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
518<div class="fragment"><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div>
519<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="classarmnn_1_1_graph.html#ad6521013ad981519904822f2ada2c4ec">ForEachLayer</a>([](Layer* layer)</div>
520<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; {</div>
521<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keyword">delete</span> layer;</div>
522<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; });</div>
523<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div>
524</div><!-- fragment -->
525<p class="reference">References <a class="el" href="_graph_8hpp_source.html#l00040">Graph::ForEachLayer()</a>.</p>
526
527</div>
528</div>
529<h2 class="groupheader">Member Function Documentation</h2>
530<a id="ad1bbee7bf5f93b792675886f57d3ebe0"></a>
531<h2 class="memtitle"><span class="permalink"><a href="#ad1bbee7bf5f93b792675886f57d3ebe0">&#9670;&nbsp;</a></span>AddCompatibilityLayers()</h2>
532
533<div class="memitem">
534<div class="memproto">
535 <table class="memname">
536 <tr>
537 <td class="memname">void AddCompatibilityLayers </td>
538 <td>(</td>
539 <td class="paramtype">std::map&lt; <a class="el" href="classarmnn_1_1_backend_id.html">BackendId</a>, std::unique_ptr&lt; class <a class="el" href="classarmnn_1_1_i_backend_internal.html">IBackendInternal</a> &gt;&gt; &amp;&#160;</td>
540 <td class="paramname"><em>backends</em>, </td>
541 </tr>
542 <tr>
543 <td class="paramkey"></td>
544 <td></td>
545 <td class="paramtype"><a class="el" href="classarmnn_1_1_tensor_handle_factory_registry.html">TensorHandleFactoryRegistry</a> &amp;&#160;</td>
546 <td class="paramname"><em>registry</em>&#160;</td>
547 </tr>
548 <tr>
549 <td></td>
550 <td>)</td>
551 <td></td><td></td>
552 </tr>
553 </table>
554</div><div class="memdoc">
555
556<p>Modifies the graph in-place, removing edges connecting layers using different compute devices, and relinking them via an intermediary copy layers. </p>
557
Nikhil Raj6f92c8e2023-11-22 11:41:15 +0000558<p class="definition">Definition at line <a class="el" href="_graph_8cpp_source.html#l00329">329</a> of file <a class="el" href="_graph_8cpp_source.html">Graph.cpp</a>.</p>
559<div class="fragment"><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;{</div>
560<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="comment">// Returns true if the given layer could potentially need an intermediate copy/import layer (depending on its</span></div>
561<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="comment">// connections to other layers).</span></div>
562<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keyword">auto</span> MayNeedCompatibilityLayer = [](<span class="keyword">const</span> Layer&amp; layer)</div>
563<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; {</div>
564<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="comment">// All layers should have been associated with a valid compute device at this point.</span></div>
565<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <a class="code" href="_assert_8hpp.html#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer.GetBackendId() != <a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Compute::Undefined</a>);</div>
566<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="comment">// Does not need another compatibility layer if a copy or import layer is already present.</span></div>
567<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">return</span> layer.GetType() != <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b">LayerType::MemCopy</a> &amp;&amp;</div>
568<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; layer.GetType() != <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a115bfc5d633eae55c67f9588acdd2bf9">LayerType::MemImport</a>;</div>
569<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; };</div>
570<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; </div>
571<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keyword">auto</span> IsCompatibilityStrategy = [](<a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016">EdgeStrategy</a> strategy)</div>
572<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; {</div>
573<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">return</span> strategy == <a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016ac366da48cc11956ae377a77751936852">EdgeStrategy::CopyToTarget</a> ||</div>
574<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; strategy == <a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016a46e8b7bfd6fd3c0cb34a100478a39189">EdgeStrategy::ExportToTarget</a>;</div>
575<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; };</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100576<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; </div>
Nikhil Raj6f92c8e2023-11-22 11:41:15 +0000577<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <a class="code" href="classarmnn_1_1_graph.html#ad6521013ad981519904822f2ada2c4ec">ForEachLayer</a>([<span class="keyword">this</span>, &amp;backends, &amp;registry, MayNeedCompatibilityLayer, IsCompatibilityStrategy](Layer* srcLayer)</div>
578<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; {</div>
579<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <a class="code" href="_assert_8hpp.html#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(srcLayer);</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100580<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; </div>
Nikhil Raj6f92c8e2023-11-22 11:41:15 +0000581<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">if</span> (!MayNeedCompatibilityLayer(*srcLayer))</div>
582<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; {</div>
583<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="comment">// The current layer does not need copy layers, move to the next one</span></div>
584<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">return</span>;</div>
585<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; }</div>
586<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; </div>
587<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keyword">const</span> std::vector&lt;OutputSlot&gt;&amp; srcOutputSlots = srcLayer-&gt;GetOutputSlots();</div>
588<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> srcOutputIndex = 0; srcOutputIndex &lt; srcOutputSlots.size(); srcOutputIndex++)</div>
589<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; {</div>
590<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; OutputSlot&amp; srcOutputSlot = srcLayer-&gt;GetOutputSlot(srcOutputIndex);</div>
591<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keyword">const</span> std::vector&lt;InputSlot*&gt; srcConnections = srcOutputSlot.GetConnections();</div>
592<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keyword">const</span> std::vector&lt;EdgeStrategy&gt; srcEdgeStrategies = srcOutputSlot.GetEdgeStrategies();</div>
593<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> srcConnectionIndex = 0; srcConnectionIndex &lt; srcConnections.size(); srcConnectionIndex++)</div>
594<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; {</div>
595<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; InputSlot* dstInputSlot = srcConnections[srcConnectionIndex];</div>
596<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <a class="code" href="_assert_8hpp.html#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(dstInputSlot);</div>
597<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; </div>
598<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016">EdgeStrategy</a> strategy = srcEdgeStrategies[srcConnectionIndex];</div>
599<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <a class="code" href="_assert_8hpp.html#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(strategy != <a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016aec0fc0100c4fc1ce4eea230c3dc10360">EdgeStrategy::Undefined</a>,</div>
600<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="stringliteral">&quot;Undefined memory strategy found while adding copy layers for compatibility&quot;</span>);</div>
601<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; </div>
602<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keyword">const</span> Layer&amp; dstLayer = dstInputSlot-&gt;GetOwningLayer();</div>
603<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">if</span> (MayNeedCompatibilityLayer(dstLayer) &amp;&amp;</div>
604<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; IsCompatibilityStrategy(strategy))</div>
605<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; {</div>
606<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="comment">// A copy layer is needed in between the source and destination layers.</span></div>
607<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="comment">// Record the operation rather than attempting to modify the graph as we go.</span></div>
608<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="comment">// (invalidating iterators)</span></div>
609<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keyword">const</span> std::string compLayerName = fmt::format(<span class="stringliteral">&quot;[ {} ({}) -&gt; {} ({}) ]&quot;</span>,</div>
610<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; srcLayer-&gt;GetName(),</div>
611<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; srcOutputIndex,</div>
612<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; dstLayer.GetName(),</div>
613<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; dstInputSlot-&gt;GetSlotIndex());</div>
614<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; Layer* compLayer = <span class="keyword">nullptr</span>;</div>
615<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">if</span> (strategy == <a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016ac366da48cc11956ae377a77751936852">EdgeStrategy::CopyToTarget</a>)</div>
616<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; {</div>
617<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; compLayer = InsertNewLayer&lt;MemCopyLayer&gt;(*dstInputSlot, compLayerName.c_str());</div>
618<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; }</div>
619<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordflow">else</span></div>
620<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; {</div>
621<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <a class="code" href="_assert_8hpp.html#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(strategy == <a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016a46e8b7bfd6fd3c0cb34a100478a39189">EdgeStrategy::ExportToTarget</a>, <span class="stringliteral">&quot;Invalid edge strategy found.&quot;</span>);</div>
622<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; compLayer = InsertNewLayer&lt;MemImportLayer&gt;(*dstInputSlot, compLayerName.c_str());</div>
623<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; }</div>
624<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; </div>
625<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; compLayer-&gt;SetBackendId(dstLayer.GetBackendId());</div>
626<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; </div>
627<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; OutputSlot&amp; compOutputSlot = compLayer-&gt;GetOutputSlot(0);</div>
628<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keyword">auto</span> backendIt = backends.find(dstLayer.GetBackendId());</div>
629<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">if</span> (backendIt != backends.end() &amp;&amp;</div>
630<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; backendIt-&gt;second &amp;&amp;</div>
631<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; backendIt-&gt;second-&gt;SupportsTensorAllocatorAPI())</div>
632<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; {</div>
633<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keyword">auto</span> backend = backendIt-&gt;second.get();</div>
634<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keyword">auto</span> tensorHandleFactoryIds = backend-&gt;GetHandleFactoryPreferences();</div>
635<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordtype">bool</span> found = <span class="keyword">false</span>;</div>
636<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; </div>
637<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> preference : tensorHandleFactoryIds)</div>
638<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; {</div>
639<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keyword">auto</span> factory = registry.GetFactory(preference);</div>
640<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">if</span> (factory)</div>
641<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; {</div>
642<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keyword">auto</span> srcPref = srcOutputSlot.GetTensorHandleFactoryId();</div>
643<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keyword">auto</span> srcFactory = registry.GetFactory(srcPref);</div>
644<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; </div>
645<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordflow">if</span> (srcFactory)</div>
646<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; {</div>
647<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordtype">bool</span> canExportImport =</div>
648<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; (factory-&gt;GetImportFlags() &amp; srcFactory-&gt;GetExportFlags()) != 0;</div>
649<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; </div>
650<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">if</span> (factory-&gt;SupportsMapUnmap() || canExportImport)</div>
651<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; {</div>
652<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; compOutputSlot.SetTensorHandleFactory(preference);</div>
653<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; found = <span class="keyword">true</span>;</div>
654<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">break</span>;</div>
655<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; }</div>
656<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; }</div>
657<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; }</div>
658<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; }</div>
659<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; </div>
660<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">if</span> (!found)</div>
661<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; {</div>
662<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; compOutputSlot.SetTensorHandleFactory(<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.html#a9c95f90eb40e31f629e0e2947b8bc6f9">ITensorHandleFactory::LegacyFactoryId</a>);</div>
663<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</div>
664<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; }</div>
665<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordflow">else</span></div>
666<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; {</div>
667<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; compOutputSlot.SetTensorHandleFactory(<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.html#a9c95f90eb40e31f629e0e2947b8bc6f9">ITensorHandleFactory::LegacyFactoryId</a>);</div>
668<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; }</div>
669<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; </div>
670<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="comment">// The output strategy of a compatibility layer is always DirectCompatibility.</span></div>
671<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; compOutputSlot.SetEdgeStrategy(0, <a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016a78d1be0baa31e083ae8da99aaedaf650">EdgeStrategy::DirectCompatibility</a>);</div>
672<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; </div>
673<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="comment">// Recalculate the connection index on the previous layer as we have just inserted into it.</span></div>
674<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keyword">const</span> std::vector&lt;InputSlot*&gt;&amp; newSourceConnections = srcOutputSlot.GetConnections();</div>
675<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keyword">auto</span> newSrcConnectionIndex = std::distance(newSourceConnections.begin(),</div>
676<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; std::find(newSourceConnections.begin(),</div>
677<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; newSourceConnections.end(),</div>
678<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; &amp;compLayer-&gt;GetInputSlot(0)));</div>
679<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; </div>
680<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="comment">// The input strategy of a compatibility layer is always DirectCompatibilty.</span></div>
681<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; srcOutputSlot.SetEdgeStrategy(armnn::numeric_cast&lt;unsigned int&gt;(newSrcConnectionIndex),</div>
682<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016a78d1be0baa31e083ae8da99aaedaf650">EdgeStrategy::DirectCompatibility</a>);</div>
683<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; }</div>
684<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; }</div>
685<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; }</div>
686<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; });</div>
687<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100688</div><!-- fragment -->
689<p class="reference">References <a class="el" href="_assert_8hpp_source.html#l00014">ARMNN_ASSERT</a>, <a class="el" href="_assert_8hpp_source.html#l00015">ARMNN_ASSERT_MSG</a>, <a class="el" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016ac366da48cc11956ae377a77751936852">armnn::CopyToTarget</a>, <a class="el" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016a78d1be0baa31e083ae8da99aaedaf650">armnn::DirectCompatibility</a>, <a class="el" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016a46e8b7bfd6fd3c0cb34a100478a39189">armnn::ExportToTarget</a>, <a class="el" href="_graph_8hpp_source.html#l00040">Graph::ForEachLayer()</a>, <a class="el" href="_layer_8hpp_source.html#l00290">Layer::GetBackendId()</a>, <a class="el" href="_layer_8hpp_source.html#l00145">OutputSlot::GetConnections()</a>, <a class="el" href="_layer_8hpp_source.html#l00146">OutputSlot::GetEdgeStrategies()</a>, <a class="el" href="_tensor_handle_factory_registry_8cpp_source.html#l00039">TensorHandleFactoryRegistry::GetFactory()</a>, <a class="el" href="_layer_8hpp_source.html#l00337">Layer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.html#l00332">Layer::GetName()</a>, <a class="el" href="_layer_8hpp_source.html#l00339">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.html#l00259">Layer::GetOutputSlots()</a>, <a class="el" href="_layer_8hpp_source.html#l00053">InputSlot::GetOwningLayer()</a>, <a class="el" href="_layer_8hpp_source.html#l00054">InputSlot::GetSlotIndex()</a>, <a class="el" href="_layer_8cpp_source.html#l00205">OutputSlot::GetTensorHandleFactoryId()</a>, <a class="el" href="_i_tensor_handle_factory_8hpp_source.html#l00050">ITensorHandleFactory::LegacyFactoryId</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b">armnn::MemCopy</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a115bfc5d633eae55c67f9588acdd2bf9">armnn::MemImport</a>, <a class="el" href="_layer_8hpp_source.html#l00291">Layer::SetBackendId()</a>, <a class="el" href="_layer_8cpp_source.html#l00210">OutputSlot::SetEdgeStrategy()</a>, <a class="el" href="_layer_8cpp_source.html#l00200">OutputSlot::SetTensorHandleFactory()</a>, and <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Undefined</a>.</p>
690
Nikhil Raj6f92c8e2023-11-22 11:41:15 +0000691<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01896">armnn::Optimize()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100692
693</div>
694</div>
695<a id="a7563c5b899e7d0ada08fd0fdb202f205"></a>
696<h2 class="memtitle"><span class="permalink"><a href="#a7563c5b899e7d0ada08fd0fdb202f205">&#9670;&nbsp;</a></span>AddLayer()</h2>
697
698<div class="memitem">
699<div class="memproto">
700<table class="mlabels">
701 <tr>
702 <td class="mlabels-left">
703 <table class="memname">
704 <tr>
705 <td class="memname">LayerT * AddLayer </td>
706 <td>(</td>
707 <td class="paramtype">Args &amp;&amp;...&#160;</td>
708 <td class="paramname"><em>args</em></td><td>)</td>
709 <td></td>
710 </tr>
711 </table>
712 </td>
713 <td class="mlabels-right">
714<span class="mlabels"><span class="mlabel">inline</span></span> </td>
715 </tr>
716</table>
717</div><div class="memdoc">
718
719<p>Adds a new layer, of type LayerType, to the graph constructed with the arguments passed. </p>
720
721<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00456">456</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
722<div class="fragment"><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;{</div>
723<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; m_LayersInOrder = m_LayersInOrder &amp;&amp;</div>
724<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; ((LayerEnumOf&lt;LayerT&gt;() == <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">LayerType::Input</a>) || (LayerEnumOf&lt;LayerT&gt;() == <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">LayerType::Output</a>));</div>
725<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; LayerT* <span class="keyword">const</span> layer = <span class="keyword">new</span> LayerInGraph&lt;LayerT&gt;(*<span class="keyword">this</span>, std::forward&lt;Args&gt;(args)...);</div>
726<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; </div>
727<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; layer-&gt;SetShapeInferenceMethod(m_ShapeInferenceMethod);</div>
728<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; layer-&gt;SetAllowExpandedDims(m_AllowExpandedDims);</div>
729<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; </div>
730<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; NotifyObservables(<a class="code" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">GraphEvent::LayerAdded</a>, layer);</div>
731<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; </div>
732<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">return</span> layer;</div>
733<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;}</div>
734</div><!-- fragment -->
735<p class="reference">References <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">armnn::Input</a>, <a class="el" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">armnn::LayerAdded</a>, and <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">armnn::Output</a>.</p>
736
737<p class="reference">Referenced by <a class="el" href="_layer_clone_base_8hpp_source.html#l00014">Layer::CloneBase()</a>, and <a class="el" href="_fuse_batch_norm_8hpp_source.html#l00027">FuseBatchNorm&lt; ConvLayer, ArmnnType, T &gt;::Run()</a>.</p>
738
739</div>
740</div>
741<a id="a5a989a5f9aeb2935ba932b7f8312fe0c"></a>
742<h2 class="memtitle"><span class="permalink"><a href="#a5a989a5f9aeb2935ba932b7f8312fe0c">&#9670;&nbsp;</a></span>AllocateDynamicBuffers()</h2>
743
744<div class="memitem">
745<div class="memproto">
746 <table class="memname">
747 <tr>
748 <td class="memname"><a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a> AllocateDynamicBuffers </td>
749 <td>(</td>
750 <td class="paramname"></td><td>)</td>
751 <td></td>
752 </tr>
753 </table>
754</div><div class="memdoc">
755
756<p>Allocates memory for all tensors under output tensor handers of each layer. </p>
757
Nikhil Raj6f92c8e2023-11-22 11:41:15 +0000758<p class="definition">Definition at line <a class="el" href="_graph_8cpp_source.html#l00207">207</a> of file <a class="el" href="_graph_8cpp_source.html">Graph.cpp</a>.</p>
759<div class="fragment"><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;{</div>
760<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="comment">// Layers must be sorted in topological order</span></div>
761<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <a class="code" href="_assert_8hpp.html#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(m_LayersInOrder);</div>
762<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <a class="code" href="_profiling_8hpp.html#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a>(<a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Compute::Undefined</a>, <span class="stringliteral">&quot;LoadNetwork_AllocateDynamicBuffers&quot;</span>);</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100763<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; </div>
Nikhil Raj6f92c8e2023-11-22 11:41:15 +0000764<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; std::unordered_set&lt;const ITensorHandle*&gt; preallocatedTensors;</div>
765<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; std::unordered_map&lt;const ITensorHandle*, unsigned int&gt; handleReferenceCounts;</div>
766<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; </div>
767<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="comment">// Finds the first TensorHandle ancestor of a SubTensorHandle. If the ITensorHandle provided</span></div>
768<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="comment">// is a TensorHandle, the function just returns it</span></div>
769<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keyword">auto</span> TraceSubTensorHandleAncestry = [](ITensorHandle* <span class="keyword">const</span> subTensorHandle)</div>
770<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; {</div>
771<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; ITensorHandle* ancestor = subTensorHandle;</div>
772<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">while</span> (ancestor &amp;&amp; ancestor-&gt;GetParent())</div>
773<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; {</div>
774<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; ancestor = ancestor-&gt;GetParent();</div>
775<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; }</div>
776<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">return</span> ancestor;</div>
777<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; };</div>
778<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; </div>
779<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="comment">// Checks whether a TensorHandle has been pre-allocated</span></div>
780<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keyword">auto</span> IsPreallocated = [&amp;](ITensorHandle* <span class="keyword">const</span> tensorHandle)</div>
781<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; {</div>
782<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">return</span> tensorHandle &amp;&amp; preallocatedTensors.find(tensorHandle) != preallocatedTensors.end();</div>
783<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; };</div>
784<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; </div>
785<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="comment">// Constant tensor handles need to last from the beginning of execution till the end,</span></div>
786<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">// therefore we pre-allocate them upfront</span></div>
787<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; layer : m_Layers)</div>
788<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; {</div>
789<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">if</span> (layer-&gt;GetType() == <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">LayerType::Constant</a>)</div>
790<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; {</div>
791<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; slot = layer-&gt;BeginOutputSlots(); slot != layer-&gt;EndOutputSlots(); ++slot)</div>
792<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; {</div>
793<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; ITensorHandle *tensorHandle = TraceSubTensorHandleAncestry(slot-&gt;GetOutputHandler().GetData());</div>
794<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; </div>
795<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">if</span> (tensorHandle &amp;&amp; !IsPreallocated(tensorHandle))</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100796<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; {</div>
Nikhil Raj6f92c8e2023-11-22 11:41:15 +0000797<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; tensorHandle-&gt;Allocate();</div>
798<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; preallocatedTensors.insert(tensorHandle);</div>
799<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div>
800<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; }</div>
801<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; }</div>
802<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; }</div>
803<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; </div>
804<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="comment">// Iterate over the network in topological order</span></div>
805<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; layer : m_Layers)</div>
806<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; {</div>
807<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">// Count the amount of times each output slot references a certain buffer (ITensorHandle).</span></div>
808<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// The first time we encounter a new tensor handle, we start managing its lifetime.</span></div>
809<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; slot = layer-&gt;BeginOutputSlots(); slot != layer-&gt;EndOutputSlots(); ++slot)</div>
810<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; {</div>
811<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; ITensorHandle *tensorHandle = TraceSubTensorHandleAncestry(slot-&gt;GetOutputHandler().GetData());</div>
812<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; </div>
813<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span> (tensorHandle &amp;&amp; !IsPreallocated(tensorHandle))</div>
814<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; {</div>
815<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numConnections = slot-&gt;GetNumConnections();</div>
816<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">if</span> (handleReferenceCounts.find(tensorHandle) == handleReferenceCounts.end())</div>
817<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; {</div>
818<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; handleReferenceCounts[tensorHandle] = numConnections;</div>
819<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; tensorHandle-&gt;Manage();</div>
820<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">if</span> (handleReferenceCounts[tensorHandle] == 0u)</div>
821<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; {</div>
822<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="comment">// if nobody consumes this tensor we call Allocate()</span></div>
823<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; tensorHandle-&gt;Allocate();</div>
824<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; }</div>
825<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div>
826<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">else</span></div>
827<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; {</div>
828<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; handleReferenceCounts[tensorHandle] += numConnections;</div>
829<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }</div>
830<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; }</div>
831<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; }</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100832<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; </div>
Nikhil Raj6f92c8e2023-11-22 11:41:15 +0000833<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="comment">// Loop through the input slots in the same layer and decrement the reference counter associated</span></div>
834<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="comment">// to each tensor handle we encounter. Once it reaches zero, we end the lifetime of the tensor handle</span></div>
835<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; slot = layer-&gt;BeginInputSlots(); slot != layer-&gt;EndInputSlots(); ++slot)</div>
836<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; {</div>
837<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; ITensorHandle *tensorHandle = TraceSubTensorHandleAncestry(</div>
838<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; slot-&gt;GetConnectedOutputSlot()-&gt;GetOutputHandler().GetData());</div>
839<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; </div>
840<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">if</span> (tensorHandle &amp;&amp; !IsPreallocated(tensorHandle))</div>
841<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; {</div>
842<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; --handleReferenceCounts[tensorHandle];</div>
843<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; </div>
844<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">if</span> (handleReferenceCounts[tensorHandle] == 0u)</div>
845<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; {</div>
846<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="comment">// Stop managing lifetime of tensor handle</span></div>
847<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; tensorHandle-&gt;Allocate();</div>
848<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; handleReferenceCounts.erase(tensorHandle);</div>
849<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div>
850<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; }</div>
851<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; }</div>
852<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; }</div>
853<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; </div>
854<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Status::Success</a>;</div>
855<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100856</div><!-- fragment -->
857<p class="reference">References <a class="el" href="classarmnn_1_1_i_tensor_handle.html#a5cceed8b707a09bf27eb61f17acf8a88">ITensorHandle::Allocate()</a>, <a class="el" href="_assert_8hpp_source.html#l00014">ARMNN_ASSERT</a>, <a class="el" href="_profiling_8hpp_source.html#l00220">ARMNN_SCOPED_PROFILING_EVENT</a>, <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">armnn::Constant</a>, <a class="el" href="classarmnn_1_1_i_tensor_handle.html#a437893b8dcf58a0b68b70e1ad7933be6">ITensorHandle::GetParent()</a>, <a class="el" href="classarmnn_1_1_i_tensor_handle.html#a04149d0f9b9c54c05e95693111490daf">ITensorHandle::Manage()</a>, <a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">armnn::Success</a>, and <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Undefined</a>.</p>
858
859</div>
860</div>
861<a id="a52ff421c210e0e0b247dbe1dd07b9a7d"></a>
862<h2 class="memtitle"><span class="permalink"><a href="#a52ff421c210e0e0b247dbe1dd07b9a7d">&#9670;&nbsp;</a></span>AttachObservable()</h2>
863
864<div class="memitem">
865<div class="memproto">
866<table class="mlabels">
867 <tr>
868 <td class="mlabels-left">
869 <table class="memname">
870 <tr>
871 <td class="memname">void AttachObservable </td>
872 <td>(</td>
873 <td class="paramtype"><a class="el" href="classarmnn_1_1_i_graph_observable.html">IGraphObservable</a> *const&#160;</td>
874 <td class="paramname"><em>observable</em>, </td>
875 </tr>
876 <tr>
877 <td class="paramkey"></td>
878 <td></td>
879 <td class="paramtype"><a class="el" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0b">GraphEvent</a>&#160;</td>
880 <td class="paramname"><em>notifyOnEvent</em>&#160;</td>
881 </tr>
882 <tr>
883 <td></td>
884 <td>)</td>
885 <td></td><td></td>
886 </tr>
887 </table>
888 </td>
889 <td class="mlabels-right">
890<span class="mlabels"><span class="mlabel">inline</span></span> </td>
891 </tr>
892</table>
893</div><div class="memdoc">
894
895<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00219">219</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
896<div class="fragment"><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; {</div>
897<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; m_Views[notifyOnEvent].emplace_back(observable);</div>
898<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div>
899</div><!-- fragment -->
900<p class="reference">Referenced by <a class="el" href="_observable_8hpp_source.html#l00019">GraphObservable&lt; std::string &gt;::GraphObservable()</a>.</p>
901
902</div>
903</div>
904<a id="a2387033802383edbdc95f9bbb12a707e"></a>
905<h2 class="memtitle"><span class="permalink"><a href="#a2387033802383edbdc95f9bbb12a707e">&#9670;&nbsp;</a></span>begin() <span class="overload">[1/2]</span></h2>
906
907<div class="memitem">
908<div class="memproto">
909<table class="mlabels">
910 <tr>
911 <td class="mlabels-left">
912 <table class="memname">
913 <tr>
914 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Iterator</a> begin </td>
915 <td>(</td>
916 <td class="paramname"></td><td>)</td>
917 <td></td>
918 </tr>
919 </table>
920 </td>
921 <td class="mlabels-right">
922<span class="mlabels"><span class="mlabel">inline</span></span> </td>
923 </tr>
924</table>
925</div><div class="memdoc">
926
927<p>Returns iterator pointing to the beginning of the list. Lowercase for range-based for loops. </p>
928
929<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00169">169</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
930<div class="fragment"><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;{ <span class="keywordflow">return</span> m_Layers.begin(); }</div>
931</div><!-- fragment -->
Nikhil Raj6f92c8e2023-11-22 11:41:15 +0000932<p class="reference">Referenced by <a class="el" href="_graph_8hpp_source.html#l00179">Graph::cbegin()</a>, <a class="el" href="_network_8cpp_source.html#l01896">armnn::Optimize()</a>, and <a class="el" href="_optimizer_8cpp_source.html#l00016">Optimizer::Pass()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100933
934</div>
935</div>
936<a id="ad5fee900c7aee90671038c79225bf8ec"></a>
937<h2 class="memtitle"><span class="permalink"><a href="#ad5fee900c7aee90671038c79225bf8ec">&#9670;&nbsp;</a></span>begin() <span class="overload">[2/2]</span></h2>
938
939<div class="memitem">
940<div class="memproto">
941<table class="mlabels">
942 <tr>
943 <td class="mlabels-left">
944 <table class="memname">
945 <tr>
946 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html#aec593bbf34c780f1a928830bca14a82c">ConstIterator</a> begin </td>
947 <td>(</td>
948 <td class="paramname"></td><td>)</td>
949 <td> const</td>
950 </tr>
951 </table>
952 </td>
953 <td class="mlabels-right">
954<span class="mlabels"><span class="mlabel">inline</span></span> </td>
955 </tr>
956</table>
957</div><div class="memdoc">
958
959<p>Returns const iterator pointing to the beginning of the list. Lowercase for range-based for loops. </p>
960
961<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00174">174</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
962<div class="fragment"><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;{ <span class="keywordflow">return</span> {m_Layers.begin(), &amp;(PtrCast&lt;const Layer&gt;)}; }</div>
963</div><!-- fragment -->
964</div>
965</div>
966<a id="a98b1109a9006f8cc7d4566146a3bd737"></a>
967<h2 class="memtitle"><span class="permalink"><a href="#a98b1109a9006f8cc7d4566146a3bd737">&#9670;&nbsp;</a></span>cbegin()</h2>
968
969<div class="memitem">
970<div class="memproto">
971<table class="mlabels">
972 <tr>
973 <td class="mlabels-left">
974 <table class="memname">
975 <tr>
976 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html#aec593bbf34c780f1a928830bca14a82c">ConstIterator</a> cbegin </td>
977 <td>(</td>
978 <td class="paramname"></td><td>)</td>
979 <td> const</td>
980 </tr>
981 </table>
982 </td>
983 <td class="mlabels-right">
984<span class="mlabels"><span class="mlabel">inline</span></span> </td>
985 </tr>
986</table>
987</div><div class="memdoc">
988
989<p>Returns const iterator pointing to the beginning of the list. Lowercase for range-based for loops. </p>
990
991<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00179">179</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
992<div class="fragment"><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;{ <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_graph.html#a2387033802383edbdc95f9bbb12a707e">begin</a>(); }</div>
993</div><!-- fragment -->
994<p class="reference">References <a class="el" href="_graph_8hpp_source.html#l00169">Graph::begin()</a>.</p>
995
996</div>
997</div>
998<a id="a02fd29b6dc3e21fbe4484362d85893bc"></a>
999<h2 class="memtitle"><span class="permalink"><a href="#a02fd29b6dc3e21fbe4484362d85893bc">&#9670;&nbsp;</a></span>cend()</h2>
1000
1001<div class="memitem">
1002<div class="memproto">
1003<table class="mlabels">
1004 <tr>
1005 <td class="mlabels-left">
1006 <table class="memname">
1007 <tr>
1008 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html#aec593bbf34c780f1a928830bca14a82c">ConstIterator</a> cend </td>
1009 <td>(</td>
1010 <td class="paramname"></td><td>)</td>
1011 <td> const</td>
1012 </tr>
1013 </table>
1014 </td>
1015 <td class="mlabels-right">
1016<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1017 </tr>
1018</table>
1019</div><div class="memdoc">
1020
1021<p>Returns const iterator pointing to the end of the list. Lowercase for range-based for loops. </p>
1022
1023<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00181">181</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1024<div class="fragment"><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;{ <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_graph.html#ab45dae688fc5d8983727abffa4389003">end</a>(); }</div>
1025</div><!-- fragment -->
1026<p class="reference">References <a class="el" href="_graph_8hpp_source.html#l00171">Graph::end()</a>.</p>
1027
1028</div>
1029</div>
1030<a id="a369faf91a25265add1fe8aa416e7b877"></a>
1031<h2 class="memtitle"><span class="permalink"><a href="#a369faf91a25265add1fe8aa416e7b877">&#9670;&nbsp;</a></span>DetachObservable()</h2>
1032
1033<div class="memitem">
1034<div class="memproto">
1035<table class="mlabels">
1036 <tr>
1037 <td class="mlabels-left">
1038 <table class="memname">
1039 <tr>
1040 <td class="memname">void DetachObservable </td>
1041 <td>(</td>
1042 <td class="paramtype"><a class="el" href="classarmnn_1_1_i_graph_observable.html">IGraphObservable</a> *const&#160;</td>
1043 <td class="paramname"><em>observable</em>, </td>
1044 </tr>
1045 <tr>
1046 <td class="paramkey"></td>
1047 <td></td>
1048 <td class="paramtype"><a class="el" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0b">GraphEvent</a>&#160;</td>
1049 <td class="paramname"><em>notifyOnEvent</em>&#160;</td>
1050 </tr>
1051 <tr>
1052 <td></td>
1053 <td>)</td>
1054 <td></td><td></td>
1055 </tr>
1056 </table>
1057 </td>
1058 <td class="mlabels-right">
1059<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1060 </tr>
1061</table>
1062</div><div class="memdoc">
1063
1064<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00223">223</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1065<div class="fragment"><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; {</div>
1066<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; m_Views[notifyOnEvent].remove(observable);</div>
1067<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div>
1068</div><!-- fragment -->
1069<p class="reference">Referenced by <a class="el" href="_observable_8hpp_source.html#l00033">GraphObservable&lt; std::string &gt;::~GraphObservable()</a>.</p>
1070
1071</div>
1072</div>
1073<a id="ab45dae688fc5d8983727abffa4389003"></a>
1074<h2 class="memtitle"><span class="permalink"><a href="#ab45dae688fc5d8983727abffa4389003">&#9670;&nbsp;</a></span>end() <span class="overload">[1/2]</span></h2>
1075
1076<div class="memitem">
1077<div class="memproto">
1078<table class="mlabels">
1079 <tr>
1080 <td class="mlabels-left">
1081 <table class="memname">
1082 <tr>
1083 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Iterator</a> end </td>
1084 <td>(</td>
1085 <td class="paramname"></td><td>)</td>
1086 <td></td>
1087 </tr>
1088 </table>
1089 </td>
1090 <td class="mlabels-right">
1091<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1092 </tr>
1093</table>
1094</div><div class="memdoc">
1095
1096<p>Returns iterator pointing to the end of the list. Lowercase for range-based for loops. </p>
1097
1098<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00171">171</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1099<div class="fragment"><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;{ <span class="keywordflow">return</span> m_Layers.end(); }</div>
1100</div><!-- fragment -->
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00001101<p class="reference">Referenced by <a class="el" href="_graph_8hpp_source.html#l00181">Graph::cend()</a>, <a class="el" href="_network_8cpp_source.html#l01896">armnn::Optimize()</a>, and <a class="el" href="_optimizer_8cpp_source.html#l00016">Optimizer::Pass()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001102
1103</div>
1104</div>
1105<a id="a69b6e2a03c835ca5d658a1f16acbaa9c"></a>
1106<h2 class="memtitle"><span class="permalink"><a href="#a69b6e2a03c835ca5d658a1f16acbaa9c">&#9670;&nbsp;</a></span>end() <span class="overload">[2/2]</span></h2>
1107
1108<div class="memitem">
1109<div class="memproto">
1110<table class="mlabels">
1111 <tr>
1112 <td class="mlabels-left">
1113 <table class="memname">
1114 <tr>
1115 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html#aec593bbf34c780f1a928830bca14a82c">ConstIterator</a> end </td>
1116 <td>(</td>
1117 <td class="paramname"></td><td>)</td>
1118 <td> const</td>
1119 </tr>
1120 </table>
1121 </td>
1122 <td class="mlabels-right">
1123<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1124 </tr>
1125</table>
1126</div><div class="memdoc">
1127
1128<p>Returns const iterator pointing to the end of the list. Lowercase for range-based for loops. </p>
1129
1130<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00176">176</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1131<div class="fragment"><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;{ <span class="keywordflow">return</span> {m_Layers.end(), &amp;(PtrCast&lt;const Layer&gt;)}; }</div>
1132</div><!-- fragment -->
1133</div>
1134</div>
1135<a id="a96d76fd10af39fbfabfd0caf0d1439fa"></a>
1136<h2 class="memtitle"><span class="permalink"><a href="#a96d76fd10af39fbfabfd0caf0d1439fa">&#9670;&nbsp;</a></span>EraseLayer() <span class="overload">[1/2]</span></h2>
1137
1138<div class="memitem">
1139<div class="memproto">
1140<table class="mlabels">
1141 <tr>
1142 <td class="mlabels-left">
1143 <table class="memname">
1144 <tr>
1145 <td class="memname">void EraseLayer </td>
1146 <td>(</td>
1147 <td class="paramtype"><a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Iterator</a>&#160;</td>
1148 <td class="paramname"><em>pos</em></td><td>)</td>
1149 <td></td>
1150 </tr>
1151 </table>
1152 </td>
1153 <td class="mlabels-right">
1154<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1155 </tr>
1156</table>
1157</div><div class="memdoc">
1158
1159<p>Deletes the layer at the specified position. </p>
1160
1161<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00504">504</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1162<div class="fragment"><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;{</div>
1163<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; NotifyObservables(<a class="code" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0bad6e393dc30fd33cbcb5f6ab199093528">GraphEvent::LayerErased</a>, *pos);</div>
1164<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; </div>
1165<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keyword">delete</span> *pos;</div>
1166<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;}</div>
1167</div><!-- fragment -->
1168<p class="reference">References <a class="el" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0bad6e393dc30fd33cbcb5f6ab199093528">armnn::LayerErased</a>.</p>
1169
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00001170<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01328">armnn::ApplyBackendOptimizations()</a>, <a class="el" href="_graph_8hpp_source.html#l00512">Graph::EraseLayer()</a>, <a class="el" href="_optimizer_8cpp_source.html#l00016">Optimizer::Pass()</a>, <a class="el" href="_optimization_8hpp_source.html#l00084">OptimizeForConnectionImpl&lt; BaseType, ChildType, Wrapped &gt;::Run()</a>, and <a class="el" href="_optimization_8hpp_source.html#l00136">OptimizeForExclusiveConnectionImpl&lt; BaseType, ChildType, Wrapped &gt;::Run()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001171
1172</div>
1173</div>
1174<a id="a2b1af2be20d1b14172c636de692a75a5"></a>
1175<h2 class="memtitle"><span class="permalink"><a href="#a2b1af2be20d1b14172c636de692a75a5">&#9670;&nbsp;</a></span>EraseLayer() <span class="overload">[2/2]</span></h2>
1176
1177<div class="memitem">
1178<div class="memproto">
1179<table class="mlabels">
1180 <tr>
1181 <td class="mlabels-left">
1182 <table class="memname">
1183 <tr>
1184 <td class="memname">void EraseLayer </td>
1185 <td>(</td>
1186 <td class="paramtype">LayerT *&amp;&#160;</td>
1187 <td class="paramname"><em>layer</em></td><td>)</td>
1188 <td></td>
1189 </tr>
1190 </table>
1191 </td>
1192 <td class="mlabels-right">
1193<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1194 </tr>
1195</table>
1196</div><div class="memdoc">
1197
1198<p>Deletes the layer. </p>
1199<p>Sets <em>layer</em> to nullptr on return. Templated to support pointers to any layer type. </p>
1200
1201<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00512">512</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1202<div class="fragment"><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;{</div>
1203<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <a class="code" href="_assert_8hpp.html#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div>
1204<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <a class="code" href="classarmnn_1_1_graph.html#a96d76fd10af39fbfabfd0caf0d1439fa">EraseLayer</a>(<a class="code" href="classarmnn_1_1_graph.html#ac7ed5efddd83499ff642cc65f3f66a14">GetPosInGraph</a>(*layer));</div>
1205<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; layer = <span class="keyword">nullptr</span>;</div>
1206<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;}</div>
1207</div><!-- fragment -->
1208<p class="reference">References <a class="el" href="_assert_8hpp_source.html#l00014">ARMNN_ASSERT</a>, <a class="el" href="_graph_8hpp_source.html#l00504">Graph::EraseLayer()</a>, and <a class="el" href="_graph_8hpp_source.html#l00448">Graph::GetPosInGraph()</a>.</p>
1209
1210</div>
1211</div>
1212<a id="ad6521013ad981519904822f2ada2c4ec"></a>
1213<h2 class="memtitle"><span class="permalink"><a href="#ad6521013ad981519904822f2ada2c4ec">&#9670;&nbsp;</a></span>ForEachLayer()</h2>
1214
1215<div class="memitem">
1216<div class="memproto">
1217<table class="mlabels">
1218 <tr>
1219 <td class="mlabels-left">
1220 <table class="memname">
1221 <tr>
1222 <td class="memname">void ForEachLayer </td>
1223 <td>(</td>
1224 <td class="paramtype">Func&#160;</td>
1225 <td class="paramname"><em>func</em></td><td>)</td>
1226 <td> const</td>
1227 </tr>
1228 </table>
1229 </td>
1230 <td class="mlabels-right">
1231<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1232 </tr>
1233</table>
1234</div><div class="memdoc">
1235
1236<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00040">40</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1237<div class="fragment"><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; {</div>
1238<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = m_Layers.begin(); it != m_Layers.end(); )</div>
1239<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div>
1240<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">auto</span> next = std::next(it);</div>
1241<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; func(*it);</div>
1242<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; it = next;</div>
1243<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div>
1244<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; }</div>
1245</div><!-- fragment -->
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00001246<p class="reference">Referenced by <a class="el" href="_graph_8cpp_source.html#l00329">Graph::AddCompatibilityLayers()</a>, <a class="el" href="_network_8cpp_source.html#l01812">armnn::SelectTensorHandleStrategy()</a>, and <a class="el" href="_graph_8hpp_source.html#l00135">Graph::~Graph()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001247
1248</div>
1249</div>
1250<a id="a919fb58873ef3a6549e4490e226f2eae"></a>
1251<h2 class="memtitle"><span class="permalink"><a href="#a919fb58873ef3a6549e4490e226f2eae">&#9670;&nbsp;</a></span>GetInputLayers()</h2>
1252
1253<div class="memitem">
1254<div class="memproto">
1255<table class="mlabels">
1256 <tr>
1257 <td class="mlabels-left">
1258 <table class="memname">
1259 <tr>
1260 <td class="memname"><a class="el" href="structarmnn_1_1_graph_1_1_input_layers_accessor.html">InputLayersAccessor</a> GetInputLayers </td>
1261 <td>(</td>
1262 <td class="paramname"></td><td>)</td>
1263 <td> const</td>
1264 </tr>
1265 </table>
1266 </td>
1267 <td class="mlabels-right">
1268<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1269 </tr>
1270</table>
1271</div><div class="memdoc">
1272
1273<p>Returns a wrapper object with <a class="el" href="classarmnn_1_1_graph.html#a2387033802383edbdc95f9bbb12a707e" title="Returns iterator pointing to the beginning of the list. Lowercase for range-based for loops.">begin()</a>, <a class="el" href="classarmnn_1_1_graph.html#ab45dae688fc5d8983727abffa4389003" title="Returns iterator pointing to the end of the list. Lowercase for range-based for loops.">end()</a> methods to iterate over the input layers in a range-based for loop. </p>
1274
1275<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00192">192</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1276<div class="fragment"><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;{ <span class="keywordflow">return</span> InputLayersAccessor(*<span class="keyword">this</span>); }</div>
1277</div><!-- fragment -->
1278<p class="reference">Referenced by <a class="el" href="_loaded_network_8cpp_source.html#l00851">LoadedNetwork::EnqueueWorkload()</a>, and <a class="el" href="_loaded_network_8cpp_source.html#l01430">LoadedNetwork::ImportInputs()</a>.</p>
1279
1280</div>
1281</div>
1282<a id="a8d8179a4a0703602a5d7dbb6e92eaf69"></a>
1283<h2 class="memtitle"><span class="permalink"><a href="#a8d8179a4a0703602a5d7dbb6e92eaf69">&#9670;&nbsp;</a></span>GetNumInputs()</h2>
1284
1285<div class="memitem">
1286<div class="memproto">
1287<table class="mlabels">
1288 <tr>
1289 <td class="mlabels-left">
1290 <table class="memname">
1291 <tr>
1292 <td class="memname">size_t GetNumInputs </td>
1293 <td>(</td>
1294 <td class="paramname"></td><td>)</td>
1295 <td> const</td>
1296 </tr>
1297 </table>
1298 </td>
1299 <td class="mlabels-right">
1300<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1301 </tr>
1302</table>
1303</div><div class="memdoc">
1304
1305<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00187">187</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1306<div class="fragment"><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;{ <span class="keywordflow">return</span> m_InputIds.size(); }</div>
1307</div><!-- fragment -->
1308<p class="reference">Referenced by <a class="el" href="_graph_8hpp_source.html#l00070">Graph::InputLayersAccessor::end()</a>, <a class="el" href="_loaded_network_8cpp_source.html#l00851">LoadedNetwork::EnqueueWorkload()</a>, and <a class="el" href="_loaded_network_8cpp_source.html#l01741">LoadedNetwork::Execute()</a>.</p>
1309
1310</div>
1311</div>
1312<a id="afdf8eb85585a798ad0e936bde884d87b"></a>
1313<h2 class="memtitle"><span class="permalink"><a href="#afdf8eb85585a798ad0e936bde884d87b">&#9670;&nbsp;</a></span>GetNumLayers()</h2>
1314
1315<div class="memitem">
1316<div class="memproto">
1317<table class="mlabels">
1318 <tr>
1319 <td class="mlabels-left">
1320 <table class="memname">
1321 <tr>
1322 <td class="memname">size_t GetNumLayers </td>
1323 <td>(</td>
1324 <td class="paramname"></td><td>)</td>
1325 <td> const</td>
1326 </tr>
1327 </table>
1328 </td>
1329 <td class="mlabels-right">
1330<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1331 </tr>
1332</table>
1333</div><div class="memdoc">
1334
1335<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00198">198</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1336<div class="fragment"><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;{ <span class="keywordflow">return</span> m_Layers.size(); }</div>
1337</div><!-- fragment -->
1338<p class="reference">Referenced by <a class="el" href="_loaded_network_8cpp_source.html#l00851">LoadedNetwork::EnqueueWorkload()</a>.</p>
1339
1340</div>
1341</div>
1342<a id="a604654b453ec291a503d62a0beb849d3"></a>
1343<h2 class="memtitle"><span class="permalink"><a href="#a604654b453ec291a503d62a0beb849d3">&#9670;&nbsp;</a></span>GetNumOutputs()</h2>
1344
1345<div class="memitem">
1346<div class="memproto">
1347<table class="mlabels">
1348 <tr>
1349 <td class="mlabels-left">
1350 <table class="memname">
1351 <tr>
1352 <td class="memname">size_t GetNumOutputs </td>
1353 <td>(</td>
1354 <td class="paramname"></td><td>)</td>
1355 <td> const</td>
1356 </tr>
1357 </table>
1358 </td>
1359 <td class="mlabels-right">
1360<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1361 </tr>
1362</table>
1363</div><div class="memdoc">
1364
1365<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00188">188</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1366<div class="fragment"><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;{ <span class="keywordflow">return</span> m_OutputIds.size(); }</div>
1367</div><!-- fragment -->
1368<p class="reference">Referenced by <a class="el" href="_graph_8hpp_source.html#l00084">Graph::OutputLayersAccessor::begin()</a>, <a class="el" href="_loaded_network_8cpp_source.html#l00851">LoadedNetwork::EnqueueWorkload()</a>, and <a class="el" href="_loaded_network_8cpp_source.html#l01741">LoadedNetwork::Execute()</a>.</p>
1369
1370</div>
1371</div>
1372<a id="aa311c7fe7e05406c9ff4e4ed3ba09825"></a>
1373<h2 class="memtitle"><span class="permalink"><a href="#aa311c7fe7e05406c9ff4e4ed3ba09825">&#9670;&nbsp;</a></span>GetOutputLayers()</h2>
1374
1375<div class="memitem">
1376<div class="memproto">
1377<table class="mlabels">
1378 <tr>
1379 <td class="mlabels-left">
1380 <table class="memname">
1381 <tr>
1382 <td class="memname"><a class="el" href="structarmnn_1_1_graph_1_1_output_layers_accessor.html">OutputLayersAccessor</a> GetOutputLayers </td>
1383 <td>(</td>
1384 <td class="paramname"></td><td>)</td>
1385 <td> const</td>
1386 </tr>
1387 </table>
1388 </td>
1389 <td class="mlabels-right">
1390<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1391 </tr>
1392</table>
1393</div><div class="memdoc">
1394
1395<p>Returns a wrapper object with <a class="el" href="classarmnn_1_1_graph.html#a2387033802383edbdc95f9bbb12a707e" title="Returns iterator pointing to the beginning of the list. Lowercase for range-based for loops.">begin()</a>, <a class="el" href="classarmnn_1_1_graph.html#ab45dae688fc5d8983727abffa4389003" title="Returns iterator pointing to the end of the list. Lowercase for range-based for loops.">end()</a> methods to iterate over the output layers in a range-based for loop. </p>
1396
1397<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00196">196</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1398<div class="fragment"><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;{ <span class="keywordflow">return</span> OutputLayersAccessor(*<span class="keyword">this</span>); }</div>
1399</div><!-- fragment -->
1400<p class="reference">Referenced by <a class="el" href="_loaded_network_8cpp_source.html#l00851">LoadedNetwork::EnqueueWorkload()</a>, and <a class="el" href="_loaded_network_8cpp_source.html#l01573">LoadedNetwork::ImportOutputs()</a>.</p>
1401
1402</div>
1403</div>
1404<a id="ac7ed5efddd83499ff642cc65f3f66a14"></a>
1405<h2 class="memtitle"><span class="permalink"><a href="#ac7ed5efddd83499ff642cc65f3f66a14">&#9670;&nbsp;</a></span>GetPosInGraph()</h2>
1406
1407<div class="memitem">
1408<div class="memproto">
1409<table class="mlabels">
1410 <tr>
1411 <td class="mlabels-left">
1412 <table class="memname">
1413 <tr>
1414 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Graph::Iterator</a> GetPosInGraph </td>
1415 <td>(</td>
1416 <td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;&#160;</td>
1417 <td class="paramname"><em>layer</em></td><td>)</td>
1418 <td></td>
1419 </tr>
1420 </table>
1421 </td>
1422 <td class="mlabels-right">
1423<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1424 </tr>
1425</table>
1426</div><div class="memdoc">
1427
1428<p>Gets the position of a layer in the graph. </p>
1429
1430<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00448">448</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1431<div class="fragment"><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;{</div>
1432<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keyword">auto</span> it = m_PosInGraphMap.find(&amp;layer);</div>
1433<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <a class="code" href="_assert_8hpp.html#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(it != m_PosInGraphMap.end());</div>
1434<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div>
1435<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;}</div>
1436</div><!-- fragment -->
1437<p class="reference">References <a class="el" href="_assert_8hpp_source.html#l00014">ARMNN_ASSERT</a>.</p>
1438
1439<p class="reference">Referenced by <a class="el" href="_graph_8hpp_source.html#l00512">Graph::EraseLayer()</a>, <a class="el" href="_graph_8hpp_source.html#l00471">Graph::InsertNewLayer()</a>, and <a class="el" href="_optimizer_8cpp_source.html#l00016">Optimizer::Pass()</a>.</p>
1440
1441</div>
1442</div>
1443<a id="a880db527e7dbf8d0de3fee52ba072482"></a>
1444<h2 class="memtitle"><span class="permalink"><a href="#a880db527e7dbf8d0de3fee52ba072482">&#9670;&nbsp;</a></span>GetProfiler()</h2>
1445
1446<div class="memitem">
1447<div class="memproto">
1448 <table class="memname">
1449 <tr>
1450 <td class="memname">const std::shared_ptr&lt; <a class="el" href="classarmnn_1_1_i_profiler.html">IProfiler</a> &gt; &amp; GetProfiler </td>
1451 <td>(</td>
1452 <td class="paramname"></td><td>)</td>
1453 <td> const</td>
1454 </tr>
1455 </table>
1456</div><div class="memdoc">
1457
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00001458<p class="definition">Definition at line <a class="el" href="_graph_8cpp_source.html#l00692">692</a> of file <a class="el" href="_graph_8cpp_source.html">Graph.cpp</a>.</p>
1459<div class="fragment"><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;{</div>
1460<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">return</span> m_Profiler;</div>
1461<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001462</div><!-- fragment -->
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00001463<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01896">armnn::Optimize()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001464
1465</div>
1466</div>
1467<a id="a2ceda8d369e861997d558fac74d79c33"></a>
1468<h2 class="memtitle"><span class="permalink"><a href="#a2ceda8d369e861997d558fac74d79c33">&#9670;&nbsp;</a></span>InferTensorInfos()</h2>
1469
1470<div class="memitem">
1471<div class="memproto">
1472 <table class="memname">
1473 <tr>
1474 <td class="memname">void InferTensorInfos </td>
1475 <td>(</td>
1476 <td class="paramname"></td><td>)</td>
1477 <td></td>
1478 </tr>
1479 </table>
1480</div><div class="memdoc">
1481
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00001482<p class="definition">Definition at line <a class="el" href="_graph_8cpp_source.html#l00604">604</a> of file <a class="el" href="_graph_8cpp_source.html">Graph.cpp</a>.</p>
1483<div class="fragment"><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;{</div>
1484<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; layer : <a class="code" href="classarmnn_1_1_graph.html#af497e16cf92179b5e55543741351b8bf">TopologicalSort</a>())</div>
1485<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; {</div>
1486<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; input : layer-&gt;GetInputSlots())</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001487<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; {</div>
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00001488<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="keyword">const</span> IOutputSlot* source = input.GetConnectedOutputSlot();</div>
1489<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keywordflow">if</span> (source == NULL)</div>
1490<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; {</div>
1491<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="comment">// Throws exception due to a layer input not being connected to an output slot.</span></div>
1492<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="comment">// Verifies input slot weights and bias are set for FullyConnected layers.</span></div>
1493<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; ConstructErrorMessageForUnconnectedInputs(layer, input.GetSlotIndex());</div>
1494<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; }</div>
1495<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; </div>
1496<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keywordflow">if</span> (!source-&gt;IsTensorInfoSet())</div>
1497<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; {</div>
1498<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; std::ostringstream message;</div>
1499<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; message &lt;&lt; <span class="stringliteral">&quot;Output slot TensorInfo not set on &quot;</span></div>
1500<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; &lt;&lt; <a class="code" href="namespacearmnn.html#addb6b14dd1b632263ffe77430259a7c4">GetLayerTypeAsCString</a>(layer-&gt;GetType())</div>
1501<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; &lt;&lt; <span class="stringliteral">&quot; layer &quot;</span></div>
1502<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; &lt;&lt; std::quoted(layer-&gt;GetName());</div>
1503<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keywordflow">throw</span> LayerValidationException(message.str());</div>
1504<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; }</div>
1505<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; }</div>
1506<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; </div>
1507<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="keywordflow">if</span> (layer-&gt;m_ShapeInferenceMethod == <a class="code" href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1">ShapeInferenceMethod::ValidateOnly</a>)</div>
1508<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; {</div>
1509<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; layer-&gt;ValidateTensorShapesFromInputs();</div>
1510<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; }</div>
1511<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; }</div>
1512<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001513</div><!-- fragment -->
1514<p class="reference">References <a class="el" href="_internal_types_8cpp_source.html#l00013">armnn::GetLayerTypeAsCString()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.html#ab4e57caf059794897b17266090ebcb39">IOutputSlot::IsTensorInfoSet()</a>, <a class="el" href="_graph_8hpp_source.html#l00184">Graph::TopologicalSort()</a>, and <a class="el" href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1">armnn::ValidateOnly</a>.</p>
1515
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00001516<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01896">armnn::Optimize()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001517
1518</div>
1519</div>
1520<a id="a3ff30c6669fdc69de1f5be1f89bacc3f"></a>
1521<h2 class="memtitle"><span class="permalink"><a href="#a3ff30c6669fdc69de1f5be1f89bacc3f">&#9670;&nbsp;</a></span>InsertNewLayer() <span class="overload">[1/2]</span></h2>
1522
1523<div class="memitem">
1524<div class="memproto">
1525<table class="mlabels">
1526 <tr>
1527 <td class="mlabels-left">
1528 <table class="memname">
1529 <tr>
1530 <td class="memname">LayerT * InsertNewLayer </td>
1531 <td>(</td>
1532 <td class="paramtype"><a class="el" href="classarmnn_1_1_input_slot.html">InputSlot</a> &amp;&#160;</td>
1533 <td class="paramname"><em>insertBefore</em>, </td>
1534 </tr>
1535 <tr>
1536 <td class="paramkey"></td>
1537 <td></td>
1538 <td class="paramtype">Args &amp;&amp;...&#160;</td>
1539 <td class="paramname"><em>args</em>&#160;</td>
1540 </tr>
1541 <tr>
1542 <td></td>
1543 <td>)</td>
1544 <td></td><td></td>
1545 </tr>
1546 </table>
1547 </td>
1548 <td class="mlabels-right">
1549<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1550 </tr>
1551</table>
1552</div><div class="memdoc">
1553
1554<p>Inserts a new layer between the output slot currently connected to insertBefore and insertBefore itself. </p>
1555
1556<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00471">471</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1557<div class="fragment"><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;{</div>
1558<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="comment">// Insert after the parent if any, or before the child otherwise, so the topological order is kept.</span></div>
1559<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; OutputSlot* parentOut = insertBefore.GetConnectedOutputSlot();</div>
1560<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Iterator</a> pos = (parentOut != <span class="keyword">nullptr</span>)</div>
1561<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; ? std::next(<a class="code" href="classarmnn_1_1_graph.html#ac7ed5efddd83499ff642cc65f3f66a14">GetPosInGraph</a>(parentOut-&gt;GetOwningLayer()))</div>
1562<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; : <a class="code" href="classarmnn_1_1_graph.html#ac7ed5efddd83499ff642cc65f3f66a14">GetPosInGraph</a>(insertBefore.GetOwningLayer());</div>
1563<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; LayerT* <span class="keyword">const</span> layer = <span class="keyword">new</span> LayerInGraph&lt;LayerT&gt;(*<span class="keyword">this</span>, pos, std::forward&lt;Args&gt;(args)...);</div>
1564<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; insertBefore.Insert(*layer);</div>
1565<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; </div>
1566<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; NotifyObservables(<a class="code" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">GraphEvent::LayerAdded</a>, layer);</div>
1567<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; </div>
1568<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="keywordflow">return</span> layer;</div>
1569<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;}</div>
1570</div><!-- fragment -->
1571<p class="reference">References <a class="el" href="_layer_8hpp_source.html#l00056">InputSlot::GetConnectedOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.html#l00053">InputSlot::GetOwningLayer()</a>, <a class="el" href="_layer_8hpp_source.html#l00132">OutputSlot::GetOwningLayer()</a>, <a class="el" href="_graph_8hpp_source.html#l00448">Graph::GetPosInGraph()</a>, <a class="el" href="_layer_8cpp_source.html#l00048">InputSlot::Insert()</a>, and <a class="el" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">armnn::LayerAdded</a>.</p>
1572
1573<p class="reference">Referenced by <a class="el" href="_fold_pad_into_layer2d_8hpp_source.html#l00144">armnn::optimizations::pad_fold::FoldPadIntoLayer2dImpl()</a>, <a class="el" href="_network_utils_8cpp_source.html#l00040">armnn::InsertConvertFp16ToFp32LayersBefore()</a>, <a class="el" href="_network_utils_8cpp_source.html#l00079">armnn::InsertConvertFp32ToFp16LayersAfter()</a>, <a class="el" href="_network_utils_8cpp_source.html#l00112">armnn::InsertDebugLayerAfter()</a>, <a class="el" href="_permute_as_reshape_8hpp_source.html#l00018">PermuteAsReshapeImpl::Run()</a>, <a class="el" href="_transpose_as_reshape_8hpp_source.html#l00018">TransposeAsReshapeImpl::Run()</a>, <a class="el" href="_optimize_consecutive_reshapes_8hpp_source.html#l00019">OptimizeConsecutiveReshapesImpl::Run()</a>, <a class="el" href="_move_permute_up_8hpp_source.html#l00023">MovePermuteUpImpl::Run()</a>, <a class="el" href="_move_transpose_up_8hpp_source.html#l00023">MoveTransposeUpImpl::Run()</a>, <a class="el" href="_fuse_batch_norm_8hpp_source.html#l00027">FuseBatchNorm&lt; ConvLayer, ArmnnType, T &gt;::Run()</a>, and <a class="el" href="_add_broadcast_reshape_layer_8hpp_source.html#l00027">AddBroadcastReshapeLayerImpl::Run()</a>.</p>
1574
1575</div>
1576</div>
1577<a id="af8c993add04a7b4e1e29924a03d23d0c"></a>
1578<h2 class="memtitle"><span class="permalink"><a href="#af8c993add04a7b4e1e29924a03d23d0c">&#9670;&nbsp;</a></span>InsertNewLayer() <span class="overload">[2/2]</span></h2>
1579
1580<div class="memitem">
1581<div class="memproto">
1582<table class="mlabels">
1583 <tr>
1584 <td class="mlabels-left">
1585 <table class="memname">
1586 <tr>
1587 <td class="memname">LayerT * InsertNewLayer </td>
1588 <td>(</td>
1589 <td class="paramtype"><a class="el" href="classarmnn_1_1_output_slot.html">OutputSlot</a> &amp;&#160;</td>
1590 <td class="paramname"><em>insertAfter</em>, </td>
1591 </tr>
1592 <tr>
1593 <td class="paramkey"></td>
1594 <td></td>
1595 <td class="paramtype">Args &amp;&amp;...&#160;</td>
1596 <td class="paramname"><em>args</em>&#160;</td>
1597 </tr>
1598 <tr>
1599 <td></td>
1600 <td>)</td>
1601 <td></td><td></td>
1602 </tr>
1603 </table>
1604 </td>
1605 <td class="mlabels-right">
1606<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1607 </tr>
1608</table>
1609</div><div class="memdoc">
1610
1611<p>Inserts a new layer between insertAfter and the input slot(s) currently connected to it. </p>
1612
1613<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00487">487</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1614<div class="fragment"><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;{</div>
1615<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; Layer&amp; owningLayer = insertAfter.GetOwningLayer();</div>
1616<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; </div>
1617<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Iterator</a> pos = std::next(<a class="code" href="classarmnn_1_1_graph.html#ac7ed5efddd83499ff642cc65f3f66a14">GetPosInGraph</a>(owningLayer));</div>
1618<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; LayerT* <span class="keyword">const</span> layer = <span class="keyword">new</span> LayerInGraph&lt;LayerT&gt;(*<span class="keyword">this</span>, pos, std::forward&lt;Args&gt;(args)...);</div>
1619<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; </div>
1620<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <a class="code" href="_assert_8hpp.html#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer-&gt;GetNumInputSlots() == 1);</div>
1621<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; </div>
1622<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; insertAfter.MoveAllConnections(layer-&gt;GetOutputSlot());</div>
1623<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; insertAfter.Connect(layer-&gt;GetInputSlot(0));</div>
1624<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; </div>
1625<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; NotifyObservables(<a class="code" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">GraphEvent::LayerAdded</a>, layer);</div>
1626<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; </div>
1627<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">return</span> layer;</div>
1628<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;}</div>
1629</div><!-- fragment -->
1630<p class="reference">References <a class="el" href="_assert_8hpp_source.html#l00014">ARMNN_ASSERT</a>, <a class="el" href="_layer_8cpp_source.html#l00112">OutputSlot::Connect()</a>, <a class="el" href="_layer_8hpp_source.html#l00132">OutputSlot::GetOwningLayer()</a>, <a class="el" href="_graph_8hpp_source.html#l00448">Graph::GetPosInGraph()</a>, <a class="el" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">armnn::LayerAdded</a>, and <a class="el" href="_layer_8cpp_source.html#l00145">OutputSlot::MoveAllConnections()</a>.</p>
1631
1632</div>
1633</div>
1634<a id="a99eeb892ef31ec3e7058acea2253bce6"></a>
1635<h2 class="memtitle"><span class="permalink"><a href="#a99eeb892ef31ec3e7058acea2253bce6">&#9670;&nbsp;</a></span>operator=() <span class="overload">[1/2]</span></h2>
1636
1637<div class="memitem">
1638<div class="memproto">
1639<table class="mlabels">
1640 <tr>
1641 <td class="mlabels-left">
1642 <table class="memname">
1643 <tr>
1644 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html">Graph</a>&amp; operator= </td>
1645 <td>(</td>
1646 <td class="paramtype">const <a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&#160;</td>
1647 <td class="paramname"><em>other</em></td><td>)</td>
1648 <td></td>
1649 </tr>
1650 </table>
1651 </td>
1652 <td class="mlabels-right">
1653<span class="mlabels"><span class="mlabel">delete</span></span> </td>
1654 </tr>
1655</table>
1656</div><div class="memdoc">
1657
1658</div>
1659</div>
1660<a id="a04b47532de485737e97066d3cb29c957"></a>
1661<h2 class="memtitle"><span class="permalink"><a href="#a04b47532de485737e97066d3cb29c957">&#9670;&nbsp;</a></span>operator=() <span class="overload">[2/2]</span></h2>
1662
1663<div class="memitem">
1664<div class="memproto">
1665<table class="mlabels">
1666 <tr>
1667 <td class="mlabels-left">
1668 <table class="memname">
1669 <tr>
1670 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html">Graph</a>&amp; operator= </td>
1671 <td>(</td>
1672 <td class="paramtype"><a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&amp;&#160;</td>
1673 <td class="paramname"><em>other</em></td><td>)</td>
1674 <td></td>
1675 </tr>
1676 </table>
1677 </td>
1678 <td class="mlabels-right">
1679<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1680 </tr>
1681</table>
1682</div><div class="memdoc">
1683
1684<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00115">115</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1685<div class="fragment"><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; {</div>
1686<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; m_InputIds = std::move(other.m_InputIds);</div>
1687<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; m_OutputIds = std::move(other.m_OutputIds);</div>
1688<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; m_LayersInOrder = std::move(other.m_LayersInOrder);</div>
1689<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; m_Views = std::move(other.m_Views);</div>
1690<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; m_Profiler = std::move(other.m_Profiler);</div>
1691<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; m_AllowExpandedDims = other.m_AllowExpandedDims;</div>
1692<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; m_ShapeInferenceMethod = other.m_ShapeInferenceMethod;</div>
1693<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; other.ForEachLayer([<span class="keyword">this</span>](Layer* otherLayer)</div>
1694<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; {</div>
1695<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; otherLayer-&gt;Reparent(*<span class="keyword">this</span>, m_Layers.end());</div>
1696<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; });</div>
1697<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; </div>
1698<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="_assert_8hpp.html#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(other.m_PosInGraphMap.empty());</div>
1699<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="_assert_8hpp.html#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(other.m_Layers.empty());</div>
1700<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; </div>
1701<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
1702<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; }</div>
1703</div><!-- fragment -->
1704<p class="reference">References <a class="el" href="_assert_8hpp_source.html#l00014">ARMNN_ASSERT</a>, and <a class="el" href="classarmnn_1_1_layer.html#ae68bb844446f28cf8580ecbe2f516ff6">Layer::Reparent()</a>.</p>
1705
1706</div>
1707</div>
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00001708<a id="a5dbbfed3b6d0bf3126abfc34e93a69f0"></a>
1709<h2 class="memtitle"><span class="permalink"><a href="#a5dbbfed3b6d0bf3126abfc34e93a69f0">&#9670;&nbsp;</a></span>Print()</h2>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001710
1711<div class="memitem">
1712<div class="memproto">
1713 <table class="memname">
1714 <tr>
1715 <td class="memname"><a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a> Print </td>
1716 <td>(</td>
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00001717 <td class="paramtype">bool&#160;</td>
1718 <td class="paramname"><em>extended</em> = <code>false</code></td><td>)</td>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001719 <td> const</td>
1720 </tr>
1721 </table>
1722</div><div class="memdoc">
1723
1724<p class="definition">Definition at line <a class="el" href="_graph_8cpp_source.html#l00068">68</a> of file <a class="el" href="_graph_8cpp_source.html">Graph.cpp</a>.</p>
1725<div class="fragment"><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;{</div>
1726<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">if</span> (m_Layers.empty())</div>
1727<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; {</div>
1728<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; <span class="stringliteral">&quot;\n Graph is empty.\n&quot;</span>;</div>
1729<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Status::Success</a>;</div>
1730<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
1731<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
1732<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; <span class="stringliteral">&quot;Walking Pattern: \n&quot;</span>;</div>
1733<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; </div>
1734<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; it : <a class="code" href="classarmnn_1_1_graph.html#af497e16cf92179b5e55543741351b8bf">TopologicalSort</a>())</div>
1735<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div>
1736<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">auto</span> numInputSlots = it-&gt;GetNumInputSlots();</div>
1737<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">auto</span> numOutputSlots = it-&gt;GetNumOutputSlots();</div>
1738<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00001739<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; std::string guid;</div>
1740<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span> (extended)</div>
1741<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div>
1742<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; guid += <span class="stringliteral">&quot;:&quot;</span>;</div>
1743<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; guid += std::to_string(it-&gt;GetGuid());</div>
1744<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div>
1745<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; it-&gt;GetName() &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; <a class="code" href="namespacearmnn.html#addb6b14dd1b632263ffe77430259a7c4">GetLayerTypeAsCString</a>(it-&gt;GetType())</div>
1746<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; it-&gt;GetBackendId().Get()</div>
1747<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; &lt;&lt; guid</div>
1748<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; &lt;&lt; <span class="stringliteral">&quot; has &quot;</span> &lt;&lt; numInputSlots &lt;&lt; <span class="stringliteral">&quot; input slots&quot;</span></div>
1749<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; &lt;&lt; <span class="stringliteral">&quot; and &quot;</span> &lt;&lt; numOutputSlots &lt;&lt; <span class="stringliteral">&quot; output slots.&quot;</span>;</div>
1750<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; </div>
1751<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> i : it-&gt;GetInputSlots())</div>
1752<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; {</div>
1753<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; std::ostringstream message;</div>
1754<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">auto</span> inputTensorShape = i.GetConnectedOutputSlot()-&gt;GetTensorInfo().GetShape();</div>
1755<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDims = inputTensorShape.GetNumDimensions();</div>
1756<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
1757<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; message &lt;&lt; <span class="stringliteral">&quot;The input slot has shape [ &quot;</span>;</div>
1758<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dim=0; dim &lt; numDims; dim++)</div>
1759<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; {</div>
1760<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; message &lt;&lt; inputTensorShape[dim] &lt;&lt; <span class="stringliteral">&quot;,&quot;</span>;</div>
1761<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; }</div>
1762<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; message &lt;&lt; <span class="stringliteral">&quot; ]&quot;</span>;</div>
1763<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">if</span> (extended)</div>
1764<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; {</div>
1765<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; message &lt;&lt; <span class="stringliteral">&quot; Scale: &quot;</span> &lt;&lt; i.GetConnectedOutputSlot()-&gt;GetTensorInfo().GetQuantizationScale();</div>
1766<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; message &lt;&lt; <span class="stringliteral">&quot; Offset: &quot;</span> &lt;&lt; i.GetConnectedOutputSlot()-&gt;GetTensorInfo().GetQuantizationOffset();</div>
1767<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; message &lt;&lt; <span class="stringliteral">&quot; The input slot is connected to: &quot;</span>;</div>
1768<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; message &lt;&lt; i.GetConnectedOutputSlot()-&gt;GetOwningIConnectableLayer().GetGuid();</div>
1769<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div>
1770<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; message.str();</div>
1771<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div>
1772<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
1773<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; it-&gt;GetNumOutputSlots(); i++)</div>
1774<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div>
1775<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_layer.html">armnn::Layer</a> *layer = it;</div>
1776<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; std::ostringstream message;</div>
1777<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">auto</span> outputTensorShape = layer-&gt;<a class="code" href="classarmnn_1_1_layer.html#a98cdff4e0b45f4c80bfcedaf926e16e0">GetOutputSlots</a>()[i].GetTensorInfo().GetShape();</div>
1778<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numDims = outputTensorShape.GetNumDimensions();</div>
1779<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; </div>
1780<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; message &lt;&lt; <span class="stringliteral">&quot;The output slot has shape [ &quot;</span>;</div>
1781<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dim=0; dim &lt; numDims; dim++)</div>
1782<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; {</div>
1783<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; message &lt;&lt; outputTensorShape[dim] &lt;&lt; <span class="stringliteral">&quot;,&quot;</span>;</div>
1784<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; }</div>
1785<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; message &lt;&lt; <span class="stringliteral">&quot; ]&quot;</span>;</div>
1786<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">if</span> (extended)</div>
1787<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; {</div>
1788<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; message &lt;&lt; <span class="stringliteral">&quot; Scale: &quot;</span> &lt;&lt; layer-&gt;<a class="code" href="classarmnn_1_1_layer.html#a98cdff4e0b45f4c80bfcedaf926e16e0">GetOutputSlots</a>()[i].GetTensorInfo().GetQuantizationScale();</div>
1789<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; message &lt;&lt; <span class="stringliteral">&quot; Offset: &quot;</span> &lt;&lt; layer-&gt;<a class="code" href="classarmnn_1_1_layer.html#a98cdff4e0b45f4c80bfcedaf926e16e0">GetOutputSlots</a>()[i].GetTensorInfo().GetQuantizationOffset();</div>
1790<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; message &lt;&lt; <span class="stringliteral">&quot; The output slot is connected to: &quot;</span>;</div>
1791<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; message &lt;&lt; layer-&gt;<a class="code" href="classarmnn_1_1_layer.html#a98cdff4e0b45f4c80bfcedaf926e16e0">GetOutputSlots</a>()[i].GetConnection(0)-&gt;GetOwningIConnectableLayer().GetGuid();</div>
1792<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; }</div>
1793<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; message.str();</div>
1794<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div>
1795<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
1796<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div>
1797<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(info) &lt;&lt; <span class="stringliteral">&quot;\n\n&quot;</span>;</div>
1798<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; </div>
1799<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Status::Success</a>;</div>
1800<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001801</div><!-- fragment -->
1802<p class="reference">References <a class="el" href="_logging_8hpp_source.html#l00212">ARMNN_LOG</a>, <a class="el" href="_internal_types_8cpp_source.html#l00013">armnn::GetLayerTypeAsCString()</a>, <a class="el" href="_layer_8hpp_source.html#l00259">Layer::GetOutputSlots()</a>, <a class="el" href="namespacearmnn.html#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::info</a>, <a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">armnn::Success</a>, and <a class="el" href="_graph_8hpp_source.html#l00184">Graph::TopologicalSort()</a>.</p>
1803
1804<p class="reference">Referenced by <a class="el" href="_graph_utils_8cpp_source.html#l00068">CheckOrder()</a>.</p>
1805
1806</div>
1807</div>
1808<a id="ab67eccecb5c9e6574f2836623f01025c"></a>
1809<h2 class="memtitle"><span class="permalink"><a href="#ab67eccecb5c9e6574f2836623f01025c">&#9670;&nbsp;</a></span>PtrCast()</h2>
1810
1811<div class="memitem">
1812<div class="memproto">
1813<table class="mlabels">
1814 <tr>
1815 <td class="mlabels-left">
1816 <table class="memname">
1817 <tr>
1818 <td class="memname">static <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* PtrCast </td>
1819 <td>(</td>
1820 <td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">Layer</a> *const&#160;</td>
1821 <td class="paramname"><em>layer</em></td><td>)</td>
1822 <td></td>
1823 </tr>
1824 </table>
1825 </td>
1826 <td class="mlabels-right">
1827<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
1828 </tr>
1829</table>
1830</div><div class="memdoc">
1831
1832<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00034">34</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1833<div class="fragment"><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; {</div>
1834<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">return</span> PolymorphicDowncast&lt;LayerType*&gt;(layer);</div>
1835<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; }</div>
1836</div><!-- fragment -->
1837</div>
1838</div>
1839<a id="a131873e7a706fc7ca0637027236916e9"></a>
1840<h2 class="memtitle"><span class="permalink"><a href="#a131873e7a706fc7ca0637027236916e9">&#9670;&nbsp;</a></span>SerializeToDot()</h2>
1841
1842<div class="memitem">
1843<div class="memproto">
1844 <table class="memname">
1845 <tr>
1846 <td class="memname"><a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a> SerializeToDot </td>
1847 <td>(</td>
1848 <td class="paramtype">std::ostream &amp;&#160;</td>
1849 <td class="paramname"><em>stream</em></td><td>)</td>
1850 <td></td>
1851 </tr>
1852 </table>
1853</div><div class="memdoc">
1854
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00001855<p class="definition">Definition at line <a class="el" href="_graph_8cpp_source.html#l00146">146</a> of file <a class="el" href="_graph_8cpp_source.html">Graph.cpp</a>.</p>
1856<div class="fragment"><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;{</div>
1857<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; {</div>
1858<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; DotGraph graph(stream, <span class="stringliteral">&quot;Optimized&quot;</span>);</div>
1859<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; </div>
1860<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; {</div>
1861<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">// Default node attributes:</span></div>
1862<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; DotDefaults nodes(stream, <span class="stringliteral">&quot;node&quot;</span>);</div>
1863<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; nodes.GetAttributeSet()</div>
1864<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; .AddAttribute(<span class="stringliteral">&quot;shape&quot;</span>, <span class="stringliteral">&quot;record&quot;</span>);</div>
1865<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div>
1866<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; </div>
1867<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {</div>
1868<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="comment">// Default edge attributes:</span></div>
1869<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; DotDefaults edges(stream, <span class="stringliteral">&quot;edge&quot;</span>);</div>
1870<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; edges.GetAttributeSet()</div>
1871<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; .AddAttribute(<span class="stringliteral">&quot;fontsize&quot;</span>, 8)</div>
1872<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; .AddAttribute(<span class="stringliteral">&quot;fontcolor&quot;</span>, <span class="stringliteral">&quot;blue&quot;</span>)</div>
1873<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; .AddAttribute(<span class="stringliteral">&quot;fontname&quot;</span>, <span class="stringliteral">&quot;arial-bold&quot;</span>);</div>
1874<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; }</div>
1875<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; </div>
1876<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="comment">// First declares the nodes.</span></div>
1877<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; layer : m_Layers)</div>
1878<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; {</div>
1879<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; DotNode node(stream, layer-&gt;GetGuid(), <a class="code" href="namespacearmnn.html#addb6b14dd1b632263ffe77430259a7c4">GetLayerTypeAsCString</a>(layer-&gt;GetType()));</div>
1880<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="comment">// Extracts the layer parameters.</span></div>
1881<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="namespacearmnn.html#a8c42c6647e31ebe525aeba878d133e45">ParameterStringifyFunction</a> extractParams = [&amp;node](<span class="keyword">const</span> std::string &amp; name, <span class="keyword">const</span> std::string &amp; value){</div>
1882<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; node.GetContents().AddContent(name + <span class="stringliteral">&quot; : &quot;</span> + value);</div>
1883<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; };</div>
1884<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; layer-&gt;SerializeLayerParameters(extractParams);</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001885<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; }</div>
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00001886<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; </div>
1887<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="comment">// Second declares the edges.</span></div>
1888<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; layer : m_Layers)</div>
1889<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; {</div>
1890<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <a class="code" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a> toId = layer-&gt;GetGuid();</div>
1891<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; </div>
1892<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0;i&lt;layer-&gt;GetNumInputSlots(); i++)</div>
1893<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {</div>
1894<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; OutputSlot* outputSlot = <span class="keyword">static_cast&lt;</span>OutputSlot*<span class="keyword">&gt;</span>(layer-&gt;GetInputSlot(i).GetConnection());</div>
1895<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a> fromId = outputSlot-&gt;GetOwningLayer().GetGuid();</div>
1896<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; DotEdge edge(stream, fromId, toId);</div>
1897<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; </div>
1898<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="comment">// Now print the tensor shape on the edge.</span></div>
1899<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; {</div>
1900<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="comment">// Constructs the label attribute with HTML markup.</span></div>
1901<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; std::stringstream ss;</div>
1902<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;&lt; &quot;</span> &lt;&lt; outputSlot-&gt;GetTensorInfo().GetShape() &lt;&lt; <span class="stringliteral">&quot; &gt;&quot;</span>;</div>
1903<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; edge.GetAttributeSet().AddAttribute(<span class="stringliteral">&quot;label&quot;</span>, ss);</div>
1904<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div>
1905<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div>
1906<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div>
1907<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; }</div>
1908<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; </div>
1909<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">if</span> (stream.bad())</div>
1910<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; {</div>
1911<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">Status::Failure</a>;</div>
1912<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; }</div>
1913<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Status::Success</a>;</div>
1914<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001915</div><!-- fragment -->
1916<p class="reference">References <a class="el" href="_dot_serializer_8cpp_source.html#l00095">DotAttributeSet::AddAttribute()</a>, <a class="el" href="_dot_serializer_8cpp_source.html#l00147">NodeContent::AddContent()</a>, <a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">armnn::Failure</a>, <a class="el" href="_dot_serializer_8hpp_source.html#l00083">DotEdge::GetAttributeSet()</a>, <a class="el" href="_dot_serializer_8hpp_source.html#l00120">DotDefaults::GetAttributeSet()</a>, <a class="el" href="_dot_serializer_8hpp_source.html#l00107">DotNode::GetContents()</a>, <a class="el" href="_layer_8hpp_source.html#l00343">Layer::GetGuid()</a>, <a class="el" href="_internal_types_8cpp_source.html#l00013">armnn::GetLayerTypeAsCString()</a>, <a class="el" href="_layer_8hpp_source.html#l00132">OutputSlot::GetOwningLayer()</a>, <a class="el" href="_tensor_8hpp_source.html#l00191">TensorInfo::GetShape()</a>, <a class="el" href="_layer_8cpp_source.html#l00092">OutputSlot::GetTensorInfo()</a>, and <a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">armnn::Success</a>.</p>
1917
1918</div>
1919</div>
1920<a id="ac3b4675f7a50a0f242880fb044aa8dec"></a>
1921<h2 class="memtitle"><span class="permalink"><a href="#ac3b4675f7a50a0f242880fb044aa8dec">&#9670;&nbsp;</a></span>SetLayersOutOfOrder()</h2>
1922
1923<div class="memitem">
1924<div class="memproto">
1925 <table class="memname">
1926 <tr>
1927 <td class="memname">void SetLayersOutOfOrder </td>
1928 <td>(</td>
1929 <td class="paramname"></td><td>)</td>
1930 <td></td>
1931 </tr>
1932 </table>
1933</div><div class="memdoc">
1934
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00001935<p class="definition">Definition at line <a class="el" href="_graph_8cpp_source.html#l00697">697</a> of file <a class="el" href="_graph_8cpp_source.html">Graph.cpp</a>.</p>
1936<div class="fragment"><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160;{</div>
1937<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; m_LayersInOrder = <span class="keyword">false</span>;</div>
1938<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001939</div><!-- fragment -->
1940</div>
1941</div>
1942<a id="a4443d9ad865522c39d06556a9dbbeb58"></a>
1943<h2 class="memtitle"><span class="permalink"><a href="#a4443d9ad865522c39d06556a9dbbeb58">&#9670;&nbsp;</a></span>SubstituteSubgraph() <span class="overload">[1/2]</span></h2>
1944
1945<div class="memitem">
1946<div class="memproto">
1947 <table class="memname">
1948 <tr>
1949 <td class="memname">void SubstituteSubgraph </td>
1950 <td>(</td>
1951 <td class="paramtype"><a class="el" href="classarmnn_1_1_subgraph_view.html">SubgraphView</a> &amp;&#160;</td>
1952 <td class="paramname"><em>subgraph</em>, </td>
1953 </tr>
1954 <tr>
1955 <td class="paramkey"></td>
1956 <td></td>
1957 <td class="paramtype">const <a class="el" href="classarmnn_1_1_subgraph_view.html">SubgraphView</a> &amp;&#160;</td>
1958 <td class="paramname"><em>substituteSubgraph</em>&#160;</td>
1959 </tr>
1960 <tr>
1961 <td></td>
1962 <td>)</td>
1963 <td></td><td></td>
1964 </tr>
1965 </table>
1966</div><div class="memdoc">
1967
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00001968<p class="definition">Definition at line <a class="el" href="_graph_8cpp_source.html#l00472">472</a> of file <a class="el" href="_graph_8cpp_source.html">Graph.cpp</a>.</p>
1969<div class="fragment"><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;{</div>
1970<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="comment">// Look through each layer in the new subgraph and add any that are not already a member of this graph</span></div>
1971<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; substituteSubgraph.ForEachIConnectableLayer([<span class="keyword">this</span>](IConnectableLayer* iConnectableLayer)</div>
1972<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; {</div>
1973<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">if</span> (std::find(std::begin(m_Layers),</div>
1974<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; std::end(m_Layers),</div>
1975<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; iConnectableLayer) == std::end(m_Layers))</div>
1976<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; {</div>
1977<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keyword">auto</span> layer = PolymorphicDowncast&lt;Layer*&gt;(iConnectableLayer);</div>
1978<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; layer-&gt;Reparent(*<span class="keyword">this</span>, m_Layers.end());</div>
1979<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; m_LayersInOrder = <span class="keyword">false</span>;</div>
1980<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; }</div>
1981<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; });</div>
1982<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; </div>
1983<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; ReplaceSubgraphConnections(subgraph, substituteSubgraph);</div>
1984<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; EraseSubgraphLayers(subgraph);</div>
1985<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <a class="code" href="classarmnn_1_1_graph.html#af497e16cf92179b5e55543741351b8bf">TopologicalSort</a>();</div>
1986<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001987</div><!-- fragment -->
1988<p class="reference">References <a class="el" href="_subgraph_view_8hpp_source.html#l00046">SubgraphView::ForEachIConnectableLayer()</a>, and <a class="el" href="_graph_8hpp_source.html#l00184">Graph::TopologicalSort()</a>.</p>
1989
1990</div>
1991</div>
1992<a id="aafbd4b469e47160017f409df8d077184"></a>
1993<h2 class="memtitle"><span class="permalink"><a href="#aafbd4b469e47160017f409df8d077184">&#9670;&nbsp;</a></span>SubstituteSubgraph() <span class="overload">[2/2]</span></h2>
1994
1995<div class="memitem">
1996<div class="memproto">
1997 <table class="memname">
1998 <tr>
1999 <td class="memname">void SubstituteSubgraph </td>
2000 <td>(</td>
2001 <td class="paramtype"><a class="el" href="classarmnn_1_1_subgraph_view.html">SubgraphView</a> &amp;&#160;</td>
2002 <td class="paramname"><em>subgraph</em>, </td>
2003 </tr>
2004 <tr>
2005 <td class="paramkey"></td>
2006 <td></td>
2007 <td class="paramtype"><a class="el" href="classarmnn_1_1_i_connectable_layer.html">IConnectableLayer</a> *&#160;</td>
2008 <td class="paramname"><em>substituteLayer</em>&#160;</td>
2009 </tr>
2010 <tr>
2011 <td></td>
2012 <td>)</td>
2013 <td></td><td></td>
2014 </tr>
2015 </table>
2016</div><div class="memdoc">
2017
2018<p>Substitutes the given sub-graph with either a new layer or a new sub-graph. </p>
2019<p>In either case, the given layer or all the layers in the given sub-graph must belong to this graph. </p>
2020
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00002021<p class="definition">Definition at line <a class="el" href="_graph_8cpp_source.html#l00461">461</a> of file <a class="el" href="_graph_8cpp_source.html">Graph.cpp</a>.</p>
2022<div class="fragment"><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;{</div>
2023<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <a class="code" href="_assert_8hpp.html#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(substituteLayer != <span class="keyword">nullptr</span>);</div>
2024<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; </div>
2025<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="comment">// Create a new sub-graph with only the given layer, using</span></div>
2026<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="comment">// the given sub-graph as a reference of which parent graph to use</span></div>
2027<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <a class="code" href="classarmnn_1_1_graph.html#a0da841ca170a7634c24eb102b95daa2a">SubgraphView</a> substituteSubgraph(substituteLayer);</div>
2028<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; </div>
2029<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <a class="code" href="classarmnn_1_1_graph.html#aafbd4b469e47160017f409df8d077184">SubstituteSubgraph</a>(subgraph, substituteSubgraph);</div>
2030<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002031</div><!-- fragment -->
2032<p class="reference">References <a class="el" href="_assert_8hpp_source.html#l00014">ARMNN_ASSERT</a>.</p>
2033
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00002034<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01328">armnn::ApplyBackendOptimizations()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002035
2036</div>
2037</div>
2038<a id="af497e16cf92179b5e55543741351b8bf"></a>
2039<h2 class="memtitle"><span class="permalink"><a href="#af497e16cf92179b5e55543741351b8bf">&#9670;&nbsp;</a></span>TopologicalSort() <span class="overload">[1/2]</span></h2>
2040
2041<div class="memitem">
2042<div class="memproto">
2043<table class="mlabels">
2044 <tr>
2045 <td class="mlabels-left">
2046 <table class="memname">
2047 <tr>
2048 <td class="memname">const <a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp; TopologicalSort </td>
2049 <td>(</td>
2050 <td class="paramname"></td><td>)</td>
2051 <td></td>
2052 </tr>
2053 </table>
2054 </td>
2055 <td class="mlabels-right">
2056<span class="mlabels"><span class="mlabel">inline</span></span> </td>
2057 </tr>
2058</table>
2059</div><div class="memdoc">
2060
2061<p>Sorts layers in topological order and return this. </p>
2062
2063<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00184">184</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
2064<div class="fragment"><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;{ <span class="keyword">const_cast&lt;</span><span class="keyword">const </span><a class="code" href="classarmnn_1_1_graph.html#aa5cc5821862aa5cecac2b54974c2b3d8">Graph</a>*<span class="keyword">&gt;</span>(<span class="keyword">this</span>)-&gt;<a class="code" href="classarmnn_1_1_graph.html#af497e16cf92179b5e55543741351b8bf">TopologicalSort</a>(); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div>
2065</div><!-- fragment -->
2066<p class="reference">References <a class="el" href="_graph_8hpp_source.html#l00184">Graph::TopologicalSort()</a>.</p>
2067
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00002068<p class="reference">Referenced by <a class="el" href="_graph_utils_8cpp_source.html#l00068">CheckOrder()</a>, <a class="el" href="_graph_8cpp_source.html#l00604">Graph::InferTensorInfos()</a>, <a class="el" href="_optimizer_8cpp_source.html#l00016">Optimizer::Pass()</a>, <a class="el" href="_graph_8cpp_source.html#l00068">Graph::Print()</a>, <a class="el" href="_graph_8cpp_source.html#l00472">Graph::SubstituteSubgraph()</a>, <a class="el" href="_graph_8hpp_source.html#l00184">Graph::TopologicalSort()</a>, and <a class="el" href="_graph_8cpp_source.html#l00581">Graph::VerifyConstantLayerSetTensorInfo()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002069
2070</div>
2071</div>
2072<a id="a3362b4d52feb9550c3d6738c2d284359"></a>
2073<h2 class="memtitle"><span class="permalink"><a href="#a3362b4d52feb9550c3d6738c2d284359">&#9670;&nbsp;</a></span>TopologicalSort() <span class="overload">[2/2]</span></h2>
2074
2075<div class="memitem">
2076<div class="memproto">
2077 <table class="memname">
2078 <tr>
2079 <td class="memname">const <a class="el" href="classarmnn_1_1_graph.html">Graph</a>&amp; TopologicalSort </td>
2080 <td>(</td>
2081 <td class="paramname"></td><td>)</td>
2082 <td> const</td>
2083 </tr>
2084 </table>
2085</div><div class="memdoc">
2086
2087</div>
2088</div>
2089<a id="a6cc2c46f05be1d3bf113d632aed1e496"></a>
2090<h2 class="memtitle"><span class="permalink"><a href="#a6cc2c46f05be1d3bf113d632aed1e496">&#9670;&nbsp;</a></span>VerifyConstantLayerSetTensorInfo()</h2>
2091
2092<div class="memitem">
2093<div class="memproto">
2094 <table class="memname">
2095 <tr>
2096 <td class="memname">void VerifyConstantLayerSetTensorInfo </td>
2097 <td>(</td>
2098 <td class="paramname"></td><td>)</td>
2099 <td> const</td>
2100 </tr>
2101 </table>
2102</div><div class="memdoc">
2103
2104<p>For each <a class="el" href="classarmnn_1_1_constant_layer.html" title="A layer that the constant data can be bound to.">ConstantLayer</a> in <a class="el" href="classarmnn_1_1_graph.html">Graph</a>, ensures <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> is set on all output slots. </p>
2105<p><a class="el" href="classarmnn_1_1_layer_validation_exception.html">LayerValidationException</a> thrown if no <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> is set.</p>
2106<p><a class="el" href="classarmnn_1_1_layer_validation_exception.html">LayerValidationException</a> thrown if no <a class="el" href="classarmnn_1_1_tensor_info.html">TensorInfo</a> is set.</p>
2107<dl class="exception"><dt>Exceptions</dt><dd>
2108 <table class="exception">
2109 <tr><td class="paramname"><a class="el" href="classarmnn_1_1_layer_validation_exception.html">LayerValidationException</a></td><td></td></tr>
2110 </table>
2111 </dd>
2112</dl>
2113
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00002114<p class="definition">Definition at line <a class="el" href="_graph_8cpp_source.html#l00581">581</a> of file <a class="el" href="_graph_8cpp_source.html">Graph.cpp</a>.</p>
2115<div class="fragment"><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;{</div>
2116<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; layer : <a class="code" href="classarmnn_1_1_graph.html#af497e16cf92179b5e55543741351b8bf">TopologicalSort</a>())</div>
2117<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; {</div>
2118<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keywordflow">if</span> (layer-&gt;GetType() == <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">armnn::LayerType::Constant</a>)</div>
2119<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; {</div>
2120<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; output: layer-&gt;GetOutputSlots())</div>
2121<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; {</div>
2122<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordflow">if</span> (!output.IsTensorInfoSet())</div>
2123<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; {</div>
2124<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; std::ostringstream message;</div>
2125<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; message &lt;&lt; <span class="stringliteral">&quot;Output slot TensorInfo not set on &quot;</span></div>
2126<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; &lt;&lt; <a class="code" href="namespacearmnn.html#addb6b14dd1b632263ffe77430259a7c4">GetLayerTypeAsCString</a>(layer-&gt;GetType())</div>
2127<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; &lt;&lt; <span class="stringliteral">&quot; layer \&quot;&quot;</span></div>
2128<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; &lt;&lt; layer-&gt;GetName()</div>
2129<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\&quot;&quot;</span>;</div>
2130<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordflow">throw</span> LayerValidationException(message.str());</div>
2131<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; }</div>
2132<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; }</div>
2133<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; }</div>
2134<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; }</div>
2135<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002136</div><!-- fragment -->
2137<p class="reference">References <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">armnn::Constant</a>, <a class="el" href="_internal_types_8cpp_source.html#l00013">armnn::GetLayerTypeAsCString()</a>, and <a class="el" href="_graph_8hpp_source.html#l00184">Graph::TopologicalSort()</a>.</p>
2138
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00002139<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01896">armnn::Optimize()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002140
2141</div>
2142</div>
2143<h2 class="groupheader">Friends And Related Function Documentation</h2>
2144<a id="a0da841ca170a7634c24eb102b95daa2a"></a>
2145<h2 class="memtitle"><span class="permalink"><a href="#a0da841ca170a7634c24eb102b95daa2a">&#9670;&nbsp;</a></span>SubgraphView</h2>
2146
2147<div class="memitem">
2148<div class="memproto">
2149<table class="mlabels">
2150 <tr>
2151 <td class="mlabels-left">
2152 <table class="memname">
2153 <tr>
2154 <td class="memname">friend class <a class="el" href="classarmnn_1_1_subgraph_view.html">SubgraphView</a></td>
2155 </tr>
2156 </table>
2157 </td>
2158 <td class="mlabels-right">
2159<span class="mlabels"><span class="mlabel">friend</span></span> </td>
2160 </tr>
2161</table>
2162</div><div class="memdoc">
2163
2164<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00300">300</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
2165
2166</div>
2167</div>
2168<hr/>The documentation for this class was generated from the following files:<ul>
2169<li>src/armnn/<a class="el" href="_graph_8hpp_source.html">Graph.hpp</a></li>
2170<li>src/armnn/<a class="el" href="_graph_8cpp_source.html">Graph.cpp</a></li>
2171</ul>
2172</div><!-- contents -->
2173</div><!-- doc-content -->
2174<div class="ttc" id="a_assert_8hpp_html_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.html#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.html#l00014">Assert.hpp:14</a></div></div>
2175<div class="ttc" id="anamespacearmnn_html_ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360"><div class="ttname"><a href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Compute::Undefined</a></div><div class="ttdeci">@ Undefined</div></div>
2176<div class="ttc" id="anamespacearmnn_html_addb6b14dd1b632263ffe77430259a7c4"><div class="ttname"><a href="namespacearmnn.html#addb6b14dd1b632263ffe77430259a7c4">armnn::GetLayerTypeAsCString</a></div><div class="ttdeci">const char * GetLayerTypeAsCString(LayerType type)</div><div class="ttdef"><b>Definition:</b> <a href="_internal_types_8cpp_source.html#l00013">InternalTypes.cpp:13</a></div></div>
2177<div class="ttc" id="aclassarmnn_1_1_graph_html_ad6521013ad981519904822f2ada2c4ec"><div class="ttname"><a href="classarmnn_1_1_graph.html#ad6521013ad981519904822f2ada2c4ec">armnn::Graph::ForEachLayer</a></div><div class="ttdeci">void ForEachLayer(Func func) const</div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.html#l00040">Graph.hpp:40</a></div></div>
2178<div class="ttc" id="anamespacearmnn_html_aff209afc1dc598da399e3e78617ce016a78d1be0baa31e083ae8da99aaedaf650"><div class="ttname"><a href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016a78d1be0baa31e083ae8da99aaedaf650">armnn::EdgeStrategy::DirectCompatibility</a></div><div class="ttdeci">@ DirectCompatibility</div><div class="ttdoc">No strategy has been defined. Used internally to verify integrity of optimizations.</div></div>
2179<div class="ttc" id="aclassarmnn_1_1_graph_html_ac7ed5efddd83499ff642cc65f3f66a14"><div class="ttname"><a href="classarmnn_1_1_graph.html#ac7ed5efddd83499ff642cc65f3f66a14">armnn::Graph::GetPosInGraph</a></div><div class="ttdeci">Iterator GetPosInGraph(Layer &amp;layer)</div><div class="ttdoc">Gets the position of a layer in the graph.</div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.html#l00448">Graph.hpp:448</a></div></div>
2180<div class="ttc" id="aclassarmnn_1_1_graph_html_a96d76fd10af39fbfabfd0caf0d1439fa"><div class="ttname"><a href="classarmnn_1_1_graph.html#a96d76fd10af39fbfabfd0caf0d1439fa">armnn::Graph::EraseLayer</a></div><div class="ttdeci">void EraseLayer(Iterator pos)</div><div class="ttdoc">Deletes the layer at the specified position.</div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.html#l00504">Graph.hpp:504</a></div></div>
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00002181<div class="ttc" id="aclassarmnn_1_1_graph_html_aafbd4b469e47160017f409df8d077184"><div class="ttname"><a href="classarmnn_1_1_graph.html#aafbd4b469e47160017f409df8d077184">armnn::Graph::SubstituteSubgraph</a></div><div class="ttdeci">void SubstituteSubgraph(SubgraphView &amp;subgraph, IConnectableLayer *substituteLayer)</div><div class="ttdoc">Substitutes the given sub-graph with either a new layer or a new sub-graph.</div><div class="ttdef"><b>Definition:</b> <a href="_graph_8cpp_source.html#l00461">Graph.cpp:461</a></div></div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002182<div class="ttc" id="aclassarmnn_1_1_graph_html_a0da841ca170a7634c24eb102b95daa2a"><div class="ttname"><a href="classarmnn_1_1_graph.html#a0da841ca170a7634c24eb102b95daa2a">armnn::Graph::SubgraphView</a></div><div class="ttdeci">friend class SubgraphView</div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.html#l00300">Graph.hpp:300</a></div></div>
2183<div class="ttc" id="anamespacearmnn_html_a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd"><div class="ttname"><a href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">armnn::GraphEvent::LayerAdded</a></div><div class="ttdeci">@ LayerAdded</div></div>
2184<div class="ttc" id="aclassarmnn_1_1_graph_html_acc25db0641c1c22faf95af3bb49080c9"><div class="ttname"><a href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">armnn::Graph::Iterator</a></div><div class="ttdeci">LayerList::const_iterator Iterator</div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.html#l00053">Graph.hpp:53</a></div></div>
2185<div class="ttc" id="a_assert_8hpp_html_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.html#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.html#l00015">Assert.hpp:15</a></div></div>
2186<div class="ttc" id="aclassarmnn_1_1_i_tensor_handle_factory_html_a9c95f90eb40e31f629e0e2947b8bc6f9"><div class="ttname"><a href="classarmnn_1_1_i_tensor_handle_factory.html#a9c95f90eb40e31f629e0e2947b8bc6f9">armnn::ITensorHandleFactory::LegacyFactoryId</a></div><div class="ttdeci">static const FactoryId LegacyFactoryId</div><div class="ttdef"><b>Definition:</b> <a href="_i_tensor_handle_factory_8hpp_source.html#l00050">ITensorHandleFactory.hpp:50</a></div></div>
2187<div class="ttc" id="aclassarmnn_1_1_layer_html"><div class="ttname"><a href="classarmnn_1_1_layer.html">armnn::Layer</a></div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.html#l00230">Layer.hpp:230</a></div></div>
2188<div class="ttc" id="a_logging_8hpp_html_a7b6ad073975f437ec38ca7d20154727f"><div class="ttname"><a href="_logging_8hpp.html#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a></div><div class="ttdeci">#define ARMNN_LOG(severity)</div><div class="ttdef"><b>Definition:</b> <a href="_logging_8hpp_source.html#l00212">Logging.hpp:212</a></div></div>
2189<div class="ttc" id="anamespacearmnn_html_aff209afc1dc598da399e3e78617ce016ac366da48cc11956ae377a77751936852"><div class="ttname"><a href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016ac366da48cc11956ae377a77751936852">armnn::EdgeStrategy::CopyToTarget</a></div><div class="ttdeci">@ CopyToTarget</div><div class="ttdoc">Source backends tensor data can be exported to destination backend tensor without copy.</div></div>
2190<div class="ttc" id="aclassarmnn_1_1_graph_html_a2387033802383edbdc95f9bbb12a707e"><div class="ttname"><a href="classarmnn_1_1_graph.html#a2387033802383edbdc95f9bbb12a707e">armnn::Graph::begin</a></div><div class="ttdeci">Iterator begin()</div><div class="ttdoc">Returns iterator pointing to the beginning of the list. Lowercase for range-based for loops.</div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.html#l00169">Graph.hpp:169</a></div></div>
2191<div class="ttc" id="anamespacearmnn_html_aff209afc1dc598da399e3e78617ce016aec0fc0100c4fc1ce4eea230c3dc10360"><div class="ttname"><a href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016aec0fc0100c4fc1ce4eea230c3dc10360">armnn::EdgeStrategy::Undefined</a></div><div class="ttdeci">@ Undefined</div></div>
2192<div class="ttc" id="a_profiling_8hpp_html_a5ccc65e2c464ac05ce311fdae7ede03a"><div class="ttname"><a href="_profiling_8hpp.html#a5ccc65e2c464ac05ce311fdae7ede03a">ARMNN_SCOPED_PROFILING_EVENT</a></div><div class="ttdeci">#define ARMNN_SCOPED_PROFILING_EVENT(backendId, name)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_8hpp_source.html#l00220">Profiling.hpp:220</a></div></div>
2193<div class="ttc" id="anamespacearmnn_html_aff209afc1dc598da399e3e78617ce016"><div class="ttname"><a href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016">armnn::EdgeStrategy</a></div><div class="ttdeci">EdgeStrategy</div><div class="ttdef"><b>Definition:</b> <a href="_i_tensor_handle_factory_8hpp_source.html#l00104">ITensorHandleFactory.hpp:104</a></div></div>
2194<div class="ttc" id="anamespacearmnn_html_a8c42c6647e31ebe525aeba878d133e45"><div class="ttname"><a href="namespacearmnn.html#a8c42c6647e31ebe525aeba878d133e45">armnn::ParameterStringifyFunction</a></div><div class="ttdeci">std::function&lt; void(const std::string &amp;name, const std::string &amp;value)&gt; ParameterStringifyFunction</div><div class="ttdef"><b>Definition:</b> <a href="_serialize_layer_parameters_8hpp_source.html#l00014">SerializeLayerParameters.hpp:14</a></div></div>
2195<div class="ttc" id="anamespacearmnn_html_a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38"><div class="ttname"><a href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">armnn::Status::Success</a></div><div class="ttdeci">@ Success</div></div>
2196<div class="ttc" id="aclassarmnn_1_1_layer_html_a98cdff4e0b45f4c80bfcedaf926e16e0"><div class="ttname"><a href="classarmnn_1_1_layer.html#a98cdff4e0b45f4c80bfcedaf926e16e0">armnn::Layer::GetOutputSlots</a></div><div class="ttdeci">const std::vector&lt; OutputSlot &gt; &amp; GetOutputSlots() const</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.html#l00259">Layer.hpp:259</a></div></div>
2197<div class="ttc" id="anamespacearmnn_html_a34eaed09302a4d7bfe930c13a7673e0bad6e393dc30fd33cbcb5f6ab199093528"><div class="ttname"><a href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0bad6e393dc30fd33cbcb5f6ab199093528">armnn::GraphEvent::LayerErased</a></div><div class="ttdeci">@ LayerErased</div></div>
2198<div class="ttc" id="anamespacearmnn_html_a56943a0946e5f15e5e58054b8e7a04a4a115bfc5d633eae55c67f9588acdd2bf9"><div class="ttname"><a href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a115bfc5d633eae55c67f9588acdd2bf9">armnn::LayerType::MemImport</a></div><div class="ttdeci">@ MemImport</div></div>
2199<div class="ttc" id="a_types_8hpp_html_af22094b802160f09f7c89ad9eee10084"><div class="ttname"><a href="_types_8hpp.html#af22094b802160f09f7c89ad9eee10084">LayerGuid</a></div><div class="ttdeci">arm::pipe::ProfilingGuid LayerGuid</div><div class="ttdoc">Define LayerGuid type.</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.html#l00026">Types.hpp:26</a></div></div>
2200<div class="ttc" id="anamespacearmnn_html_adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1"><div class="ttname"><a href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1">armnn::ShapeInferenceMethod::ValidateOnly</a></div><div class="ttdeci">@ ValidateOnly</div><div class="ttdoc">Validate all output shapes.</div></div>
2201<div class="ttc" id="anamespacearmnn_html_adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb"><div class="ttname"><a href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9a5dd7c525cb1500a2181fd4cc079d7acb">armnn::ShapeInferenceMethod::InferAndValidate</a></div><div class="ttdeci">@ InferAndValidate</div><div class="ttdoc">Infer missing output shapes and validate all output shapes.</div></div>
2202<div class="ttc" id="aclassarmnn_1_1_graph_html_ab45dae688fc5d8983727abffa4389003"><div class="ttname"><a href="classarmnn_1_1_graph.html#ab45dae688fc5d8983727abffa4389003">armnn::Graph::end</a></div><div class="ttdeci">Iterator end()</div><div class="ttdoc">Returns iterator pointing to the end of the list. Lowercase for range-based for loops.</div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.html#l00171">Graph.hpp:171</a></div></div>
2203<div class="ttc" id="aclassarmnn_1_1_graph_html_aa5cc5821862aa5cecac2b54974c2b3d8"><div class="ttname"><a href="classarmnn_1_1_graph.html#aa5cc5821862aa5cecac2b54974c2b3d8">armnn::Graph::Graph</a></div><div class="ttdeci">Graph(bool shapeInferenceMethod=false, bool allowExpandedDims=false)</div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.html#l00098">Graph.hpp:98</a></div></div>
2204<div class="ttc" id="aclassarmnn_1_1_graph_html_af497e16cf92179b5e55543741351b8bf"><div class="ttname"><a href="classarmnn_1_1_graph.html#af497e16cf92179b5e55543741351b8bf">armnn::Graph::TopologicalSort</a></div><div class="ttdeci">Graph &amp; TopologicalSort()</div><div class="ttdoc">Sorts layers in topological order and return this.</div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.html#l00184">Graph.hpp:184</a></div></div>
2205<div class="ttc" id="anamespacearmnn_html_aff209afc1dc598da399e3e78617ce016a46e8b7bfd6fd3c0cb34a100478a39189"><div class="ttname"><a href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016a46e8b7bfd6fd3c0cb34a100478a39189">armnn::EdgeStrategy::ExportToTarget</a></div><div class="ttdeci">@ ExportToTarget</div><div class="ttdoc">Destination backend can work directly with tensors on source backend.</div></div>
2206<div class="ttc" id="anamespacearmnn_html_a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b"><div class="ttname"><a href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b">armnn::LayerType::MemCopy</a></div><div class="ttdeci">@ MemCopy</div></div>
2207<div class="ttc" id="anamespacearmnn_html_a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5"><div class="ttname"><a href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a324118a6721dd6b8a9b9f4e327df2bf5">armnn::LayerType::Input</a></div><div class="ttdeci">@ Input</div></div>
2208<div class="ttc" id="anamespacearmnn_html_a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086"><div class="ttname"><a href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70bae139a585510a502bbf1841cf589f5086">armnn::Status::Failure</a></div><div class="ttdeci">@ Failure</div></div>
2209<div class="ttc" id="anamespacearmnn_html_a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54"><div class="ttname"><a href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a29c2c02a361c9d7028472e5d92cd4a54">armnn::LayerType::Output</a></div><div class="ttdeci">@ Output</div></div>
2210<div class="ttc" id="anamespacearmnn_html_a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255"><div class="ttname"><a href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">armnn::LayerType::Constant</a></div><div class="ttdeci">@ Constant</div></div>
2211<!-- start footer part -->
2212<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
2213 <ul>
2214 <li class="navelem"><a class="el" href="namespacearmnn.html">armnn</a></li><li class="navelem"><a class="el" href="classarmnn_1_1_graph.html">Graph</a></li>
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00002215 <li class="footer">Generated on Wed Nov 22 2023 10:57:14 for Arm NN by
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002216 <a href="http://www.doxygen.org/index.html">
2217 <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
2218 </ul>
2219</div>
2220</body>
2221</html>