blob: f25a48d44983eff4525a5649cfcfcf85a0c5d98e [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 Raj1dc83fe2024-05-16 09:47:51 +010039 &#160;<span id="projectnumber">24.05</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 -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +0100459<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#l00609">InputSlot::SetTensorInfo()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100460
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
Nikhil Raj1dc83fe2024-05-16 09:47:51 +0100517<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00142">142</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
518<div class="fragment"><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; {</div>
519<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="classarmnn_1_1_graph.html#ad6521013ad981519904822f2ada2c4ec">ForEachLayer</a>([](Layer* layer)</div>
520<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; {</div>
521<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keyword">delete</span> layer;</div>
522<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; });</div>
523<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100524</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 Raj1dc83fe2024-05-16 09:47:51 +0100558<p class="definition">Definition at line <a class="el" href="_graph_8cpp_source.html#l00330">330</a> of file <a class="el" href="_graph_8cpp_source.html">Graph.cpp</a>.</p>
559<div class="fragment"><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;{</div>
560<div class="line"><a name="l00333"></a><span class="lineno"> 333</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="l00334"></a><span class="lineno"> 334</span>&#160; <span class="comment">// connections to other layers).</span></div>
562<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keyword">auto</span> MayNeedCompatibilityLayer = [](<span class="keyword">const</span> Layer&amp; layer)</div>
563<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; {</div>
564<div class="line"><a name="l00337"></a><span class="lineno"> 337</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="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">if</span> (layer.GetBackendId() == <a class="code" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">Compute::Undefined</a>)</div>
566<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; {</div>
567<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(<span class="stringliteral">&quot;AddCompatibilityLayers: All layers must be assigned to a backend at this point.&quot;</span>);</div>
568<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div>
569<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="comment">// Does not need another compatibility layer if a copy or import layer is already present.</span></div>
570<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">return</span> layer.GetType() != <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a4dd48794eb3305a0f5aece88b111a97b">LayerType::MemCopy</a> &amp;&amp;</div>
571<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; layer.GetType() != <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4a115bfc5d633eae55c67f9588acdd2bf9">LayerType::MemImport</a>;</div>
572<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; };</div>
573<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; </div>
574<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keyword">auto</span> IsCompatibilityStrategy = [](<a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016">EdgeStrategy</a> strategy)</div>
575<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div>
576<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordflow">return</span> strategy == <a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016ac366da48cc11956ae377a77751936852">EdgeStrategy::CopyToTarget</a> ||</div>
577<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; strategy == <a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016a46e8b7bfd6fd3c0cb34a100478a39189">EdgeStrategy::ExportToTarget</a>;</div>
578<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; };</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100579<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; </div>
Nikhil Raj1dc83fe2024-05-16 09:47:51 +0100580<div class="line"><a name="l00353"></a><span class="lineno"> 353</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>
581<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; {</div>
582<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(srcLayer, <span class="stringliteral">&quot;source layer must not be null.&quot;</span>);</div>
583<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; </div>
584<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">if</span> (!MayNeedCompatibilityLayer(*srcLayer))</div>
585<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; {</div>
586<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="comment">// The current layer does not need copy layers, move to the next one</span></div>
587<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">return</span>;</div>
588<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; }</div>
589<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; </div>
590<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keyword">const</span> std::vector&lt;OutputSlot&gt;&amp; srcOutputSlots = srcLayer-&gt;GetOutputSlots();</div>
591<div class="line"><a name="l00364"></a><span class="lineno"> 364</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>
592<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; {</div>
593<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; OutputSlot&amp; srcOutputSlot = srcLayer-&gt;GetOutputSlot(srcOutputIndex);</div>
594<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keyword">const</span> std::vector&lt;InputSlot*&gt; srcConnections = srcOutputSlot.GetConnections();</div>
595<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keyword">const</span> std::vector&lt;EdgeStrategy&gt; srcEdgeStrategies = srcOutputSlot.GetEdgeStrategies();</div>
596<div class="line"><a name="l00369"></a><span class="lineno"> 369</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>
597<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; {</div>
598<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; InputSlot* dstInputSlot = srcConnections[srcConnectionIndex];</div>
599<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">if</span> (!dstInputSlot)</div>
600<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; {</div>
601<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(<span class="stringliteral">&quot;dstInputSlot must not be null.&quot;</span>);</div>
602<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; }</div>
603<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; </div>
604<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016">EdgeStrategy</a> strategy = srcEdgeStrategies[srcConnectionIndex];</div>
605<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">if</span> (strategy == <a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016aec0fc0100c4fc1ce4eea230c3dc10360">EdgeStrategy::Undefined</a>)</div>
606<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; {</div>
607<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(<span class="stringliteral">&quot;Undefined memory strategy found &quot;</span></div>
608<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="stringliteral">&quot;while adding copy layers for compatibility&quot;</span>);</div>
609<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; }</div>
610<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; </div>
611<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keyword">const</span> Layer&amp; dstLayer = dstInputSlot-&gt;GetOwningLayer();</div>
612<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordflow">if</span> (MayNeedCompatibilityLayer(dstLayer) &amp;&amp;</div>
613<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; IsCompatibilityStrategy(strategy))</div>
614<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; {</div>
615<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="comment">// A copy layer is needed in between the source and destination layers.</span></div>
616<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="comment">// Record the operation rather than attempting to modify the graph as we go.</span></div>
617<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="comment">// (invalidating iterators)</span></div>
618<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keyword">const</span> std::string compLayerName = fmt::format(<span class="stringliteral">&quot;[ {} ({}) -&gt; {} ({}) ]&quot;</span>,</div>
619<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; srcLayer-&gt;GetName(),</div>
620<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; srcOutputIndex,</div>
621<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; dstLayer.GetName(),</div>
622<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; dstInputSlot-&gt;GetSlotIndex());</div>
623<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; Layer* compLayer = <span class="keyword">nullptr</span>;</div>
624<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordflow">if</span> (strategy == <a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016ac366da48cc11956ae377a77751936852">EdgeStrategy::CopyToTarget</a>)</div>
625<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; {</div>
626<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; compLayer = InsertNewLayer&lt;MemCopyLayer&gt;(*dstInputSlot, compLayerName.c_str());</div>
627<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; }</div>
628<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">else</span></div>
629<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; {</div>
630<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">if</span> (strategy != <a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016a46e8b7bfd6fd3c0cb34a100478a39189">EdgeStrategy::ExportToTarget</a>)</div>
631<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; {</div>
632<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(<span class="stringliteral">&quot;Invalid edge strategy found.&quot;</span>);</div>
633<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; }</div>
634<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; </div>
635<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; compLayer = InsertNewLayer&lt;MemImportLayer&gt;(*dstInputSlot, compLayerName.c_str());</div>
636<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; }</div>
637<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; </div>
638<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; compLayer-&gt;SetBackendId(dstLayer.GetBackendId());</div>
639<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; </div>
640<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; OutputSlot&amp; compOutputSlot = compLayer-&gt;GetOutputSlot(0);</div>
641<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keyword">auto</span> backendIt = backends.find(dstLayer.GetBackendId());</div>
642<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordflow">if</span> (backendIt != backends.end() &amp;&amp;</div>
643<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; backendIt-&gt;second &amp;&amp;</div>
644<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; backendIt-&gt;second-&gt;SupportsTensorAllocatorAPI())</div>
645<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; {</div>
646<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keyword">auto</span> backend = backendIt-&gt;second.get();</div>
647<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keyword">auto</span> tensorHandleFactoryIds = backend-&gt;GetHandleFactoryPreferences();</div>
648<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordtype">bool</span> found = <span class="keyword">false</span>;</div>
649<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; </div>
650<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> preference : tensorHandleFactoryIds)</div>
651<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; {</div>
652<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keyword">auto</span> factory = registry.GetFactory(preference);</div>
653<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">if</span> (factory)</div>
654<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; {</div>
655<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keyword">auto</span> srcPref = srcOutputSlot.GetTensorHandleFactoryId();</div>
656<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keyword">auto</span> srcFactory = registry.GetFactory(srcPref);</div>
657<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; </div>
658<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">if</span> (srcFactory)</div>
659<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; {</div>
660<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keywordtype">bool</span> canExportImport =</div>
661<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; (factory-&gt;GetImportFlags() &amp; srcFactory-&gt;GetExportFlags()) != 0;</div>
662<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; </div>
663<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">if</span> (factory-&gt;SupportsMapUnmap() || canExportImport)</div>
664<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; {</div>
665<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; compOutputSlot.SetTensorHandleFactory(preference);</div>
666<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; found = <span class="keyword">true</span>;</div>
667<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">break</span>;</div>
668<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; }</div>
669<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; }</div>
670<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; }</div>
671<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; }</div>
672<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; </div>
673<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordflow">if</span> (!found)</div>
674<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; {</div>
675<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; compOutputSlot.SetTensorHandleFactory(<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.html#a9c95f90eb40e31f629e0e2947b8bc6f9">ITensorHandleFactory::LegacyFactoryId</a>);</div>
676<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; }</div>
677<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; }</div>
678<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">else</span></div>
679<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; {</div>
680<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; compOutputSlot.SetTensorHandleFactory(<a class="code" href="classarmnn_1_1_i_tensor_handle_factory.html#a9c95f90eb40e31f629e0e2947b8bc6f9">ITensorHandleFactory::LegacyFactoryId</a>);</div>
681<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; }</div>
682<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; </div>
683<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="comment">// The output strategy of a compatibility layer is always DirectCompatibility.</span></div>
684<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; compOutputSlot.SetEdgeStrategy(0, <a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016a78d1be0baa31e083ae8da99aaedaf650">EdgeStrategy::DirectCompatibility</a>);</div>
685<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; </div>
686<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="comment">// Recalculate the connection index on the previous layer as we have just inserted into it.</span></div>
687<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keyword">const</span> std::vector&lt;InputSlot*&gt;&amp; newSourceConnections = srcOutputSlot.GetConnections();</div>
688<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keyword">auto</span> newSrcConnectionIndex = std::distance(newSourceConnections.begin(),</div>
689<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; std::find(newSourceConnections.begin(),</div>
690<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; newSourceConnections.end(),</div>
691<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; &amp;compLayer-&gt;GetInputSlot(0)));</div>
692<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; </div>
693<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="comment">// The input strategy of a compatibility layer is always DirectCompatibilty.</span></div>
694<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; srcOutputSlot.SetEdgeStrategy(armnn::numeric_cast&lt;unsigned int&gt;(newSrcConnectionIndex),</div>
695<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <a class="code" href="namespacearmnn.html#aff209afc1dc598da399e3e78617ce016a78d1be0baa31e083ae8da99aaedaf650">EdgeStrategy::DirectCompatibility</a>);</div>
696<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; }</div>
697<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; }</div>
698<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; }</div>
699<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; });</div>
700<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100701</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +0100702<p class="reference">References <a class="el" href="_exceptions_8hpp_source.html#l00210">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</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#l00218">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#l00223">OutputSlot::SetEdgeStrategy()</a>, <a class="el" href="_layer_8cpp_source.html#l00213">OutputSlot::SetTensorHandleFactory()</a>, and <a class="el" href="namespacearmnn.html#ae2f04a162585c0a5222a537efd5456aeaec0fc0100c4fc1ce4eea230c3dc10360">armnn::Undefined</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100703
Nikhil Raj1dc83fe2024-05-16 09:47:51 +0100704<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01906">armnn::Optimize()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100705
706</div>
707</div>
708<a id="a7563c5b899e7d0ada08fd0fdb202f205"></a>
709<h2 class="memtitle"><span class="permalink"><a href="#a7563c5b899e7d0ada08fd0fdb202f205">&#9670;&nbsp;</a></span>AddLayer()</h2>
710
711<div class="memitem">
712<div class="memproto">
713<table class="mlabels">
714 <tr>
715 <td class="mlabels-left">
716 <table class="memname">
717 <tr>
718 <td class="memname">LayerT * AddLayer </td>
719 <td>(</td>
720 <td class="paramtype">Args &amp;&amp;...&#160;</td>
721 <td class="paramname"><em>args</em></td><td>)</td>
722 <td></td>
723 </tr>
724 </table>
725 </td>
726 <td class="mlabels-right">
727<span class="mlabels"><span class="mlabel">inline</span></span> </td>
728 </tr>
729</table>
730</div><div class="memdoc">
731
732<p>Adds a new layer, of type LayerType, to the graph constructed with the arguments passed. </p>
733
Nikhil Raj1dc83fe2024-05-16 09:47:51 +0100734<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00466">466</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
735<div class="fragment"><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;{</div>
736<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; m_LayersInOrder = m_LayersInOrder &amp;&amp;</div>
737<div class="line"><a name="l00469"></a><span class="lineno"> 469</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>
738<div class="line"><a name="l00470"></a><span class="lineno"> 470</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>
739<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; </div>
740<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; layer-&gt;SetShapeInferenceMethod(m_ShapeInferenceMethod);</div>
741<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; layer-&gt;SetAllowExpandedDims(m_AllowExpandedDims);</div>
742<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; </div>
743<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; NotifyObservables(<a class="code" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">GraphEvent::LayerAdded</a>, layer);</div>
744<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; </div>
745<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">return</span> layer;</div>
746<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100747</div><!-- fragment -->
748<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>
749
750<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>
751
752</div>
753</div>
754<a id="a5a989a5f9aeb2935ba932b7f8312fe0c"></a>
755<h2 class="memtitle"><span class="permalink"><a href="#a5a989a5f9aeb2935ba932b7f8312fe0c">&#9670;&nbsp;</a></span>AllocateDynamicBuffers()</h2>
756
757<div class="memitem">
758<div class="memproto">
759 <table class="memname">
760 <tr>
761 <td class="memname"><a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a> AllocateDynamicBuffers </td>
762 <td>(</td>
763 <td class="paramname"></td><td>)</td>
764 <td></td>
765 </tr>
766 </table>
767</div><div class="memdoc">
768
769<p>Allocates memory for all tensors under output tensor handers of each layer. </p>
770
Nikhil Raj6f92c8e2023-11-22 11:41:15 +0000771<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>
772<div class="fragment"><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;{</div>
773<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>
Nikhil Raj1dc83fe2024-05-16 09:47:51 +0100774<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(m_LayersInOrder, <span class="stringliteral">&quot;layers must be in order.&quot;</span>);</div>
775<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; </div>
776<div class="line"><a name="l00212"></a><span class="lineno"> 212</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>
777<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; </div>
778<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; std::unordered_set&lt;const ITensorHandle*&gt; preallocatedTensors;</div>
779<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; std::unordered_map&lt;const ITensorHandle*, unsigned int&gt; handleReferenceCounts;</div>
780<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; </div>
781<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="comment">// Finds the first TensorHandle ancestor of a SubTensorHandle. If the ITensorHandle provided</span></div>
782<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="comment">// is a TensorHandle, the function just returns it</span></div>
783<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keyword">auto</span> TraceSubTensorHandleAncestry = [](ITensorHandle* <span class="keyword">const</span> subTensorHandle)</div>
784<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; {</div>
785<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; ITensorHandle* ancestor = subTensorHandle;</div>
786<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">while</span> (ancestor &amp;&amp; ancestor-&gt;GetParent())</div>
787<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; {</div>
788<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; ancestor = ancestor-&gt;GetParent();</div>
789<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div>
790<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">return</span> ancestor;</div>
791<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; };</div>
792<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; </div>
793<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="comment">// Checks whether a TensorHandle has been pre-allocated</span></div>
794<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keyword">auto</span> IsPreallocated = [&amp;](ITensorHandle* <span class="keyword">const</span> tensorHandle)</div>
795<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; {</div>
796<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">return</span> tensorHandle &amp;&amp; preallocatedTensors.find(tensorHandle) != preallocatedTensors.end();</div>
797<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; };</div>
798<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; </div>
799<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">// Constant tensor handles need to last from the beginning of execution till the end,</span></div>
800<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="comment">// therefore we pre-allocate them upfront</span></div>
801<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; layer : m_Layers)</div>
802<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; {</div>
803<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">if</span> (layer-&gt;GetType() == <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">LayerType::Constant</a>)</div>
804<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; {</div>
805<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; slot = layer-&gt;BeginOutputSlots(); slot != layer-&gt;EndOutputSlots(); ++slot)</div>
806<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; {</div>
807<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; ITensorHandle *tensorHandle = TraceSubTensorHandleAncestry(slot-&gt;GetOutputHandler().GetData());</div>
808<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; </div>
809<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">if</span> (tensorHandle &amp;&amp; !IsPreallocated(tensorHandle))</div>
810<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; {</div>
811<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; tensorHandle-&gt;Allocate();</div>
812<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; preallocatedTensors.insert(tensorHandle);</div>
813<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; }</div>
814<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; }</div>
815<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; }</div>
816<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; }</div>
817<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; </div>
818<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="comment">// Iterate over the network in topological order</span></div>
819<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; layer : m_Layers)</div>
820<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; {</div>
821<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// Count the amount of times each output slot references a certain buffer (ITensorHandle).</span></div>
822<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="comment">// The first time we encounter a new tensor handle, we start managing its lifetime.</span></div>
823<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; slot = layer-&gt;BeginOutputSlots(); slot != layer-&gt;EndOutputSlots(); ++slot)</div>
824<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; {</div>
825<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; ITensorHandle *tensorHandle = TraceSubTensorHandleAncestry(slot-&gt;GetOutputHandler().GetData());</div>
826<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; </div>
827<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">if</span> (tensorHandle &amp;&amp; !IsPreallocated(tensorHandle))</div>
828<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; {</div>
829<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numConnections = slot-&gt;GetNumConnections();</div>
830<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">if</span> (handleReferenceCounts.find(tensorHandle) == handleReferenceCounts.end())</div>
831<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; {</div>
832<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; handleReferenceCounts[tensorHandle] = numConnections;</div>
833<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; tensorHandle-&gt;Manage();</div>
834<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">if</span> (handleReferenceCounts[tensorHandle] == 0u)</div>
835<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; {</div>
836<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="comment">// if nobody consumes this tensor we call Allocate()</span></div>
837<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; tensorHandle-&gt;Allocate();</div>
838<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div>
839<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div>
840<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">else</span></div>
841<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; {</div>
842<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; handleReferenceCounts[tensorHandle] += numConnections;</div>
843<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; }</div>
844<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; }</div>
845<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; }</div>
846<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; </div>
847<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="comment">// Loop through the input slots in the same layer and decrement the reference counter associated</span></div>
848<div class="line"><a name="l00284"></a><span class="lineno"> 284</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>
849<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; slot = layer-&gt;BeginInputSlots(); slot != layer-&gt;EndInputSlots(); ++slot)</div>
850<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; {</div>
851<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; ITensorHandle *tensorHandle = TraceSubTensorHandleAncestry(</div>
852<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; slot-&gt;GetConnectedOutputSlot()-&gt;GetOutputHandler().GetData());</div>
853<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; </div>
854<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">if</span> (tensorHandle &amp;&amp; !IsPreallocated(tensorHandle))</div>
855<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; {</div>
856<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; --handleReferenceCounts[tensorHandle];</div>
857<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; </div>
858<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">if</span> (handleReferenceCounts[tensorHandle] == 0u)</div>
859<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; {</div>
860<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="comment">// Stop managing lifetime of tensor handle</span></div>
861<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; tensorHandle-&gt;Allocate();</div>
862<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; handleReferenceCounts.erase(tensorHandle);</div>
863<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; }</div>
864<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; }</div>
865<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; }</div>
866<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; }</div>
867<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; </div>
868<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Status::Success</a>;</div>
869<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100870</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +0100871<p class="reference">References <a class="el" href="classarmnn_1_1_i_tensor_handle.html#a5cceed8b707a09bf27eb61f17acf8a88">ITensorHandle::Allocate()</a>, <a class="el" href="_profiling_8hpp_source.html#l00220">ARMNN_SCOPED_PROFILING_EVENT</a>, <a class="el" href="_exceptions_8hpp_source.html#l00210">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</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>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100872
873</div>
874</div>
875<a id="a52ff421c210e0e0b247dbe1dd07b9a7d"></a>
876<h2 class="memtitle"><span class="permalink"><a href="#a52ff421c210e0e0b247dbe1dd07b9a7d">&#9670;&nbsp;</a></span>AttachObservable()</h2>
877
878<div class="memitem">
879<div class="memproto">
880<table class="mlabels">
881 <tr>
882 <td class="mlabels-left">
883 <table class="memname">
884 <tr>
885 <td class="memname">void AttachObservable </td>
886 <td>(</td>
887 <td class="paramtype"><a class="el" href="classarmnn_1_1_i_graph_observable.html">IGraphObservable</a> *const&#160;</td>
888 <td class="paramname"><em>observable</em>, </td>
889 </tr>
890 <tr>
891 <td class="paramkey"></td>
892 <td></td>
893 <td class="paramtype"><a class="el" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0b">GraphEvent</a>&#160;</td>
894 <td class="paramname"><em>notifyOnEvent</em>&#160;</td>
895 </tr>
896 <tr>
897 <td></td>
898 <td>)</td>
899 <td></td><td></td>
900 </tr>
901 </table>
902 </td>
903 <td class="mlabels-right">
904<span class="mlabels"><span class="mlabel">inline</span></span> </td>
905 </tr>
906</table>
907</div><div class="memdoc">
908
Nikhil Raj1dc83fe2024-05-16 09:47:51 +0100909<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00226">226</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
910<div class="fragment"><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; {</div>
911<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; m_Views[notifyOnEvent].emplace_back(observable);</div>
912<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; }</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100913</div><!-- fragment -->
914<p class="reference">Referenced by <a class="el" href="_observable_8hpp_source.html#l00019">GraphObservable&lt; std::string &gt;::GraphObservable()</a>.</p>
915
916</div>
917</div>
918<a id="a2387033802383edbdc95f9bbb12a707e"></a>
919<h2 class="memtitle"><span class="permalink"><a href="#a2387033802383edbdc95f9bbb12a707e">&#9670;&nbsp;</a></span>begin() <span class="overload">[1/2]</span></h2>
920
921<div class="memitem">
922<div class="memproto">
923<table class="mlabels">
924 <tr>
925 <td class="mlabels-left">
926 <table class="memname">
927 <tr>
928 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Iterator</a> begin </td>
929 <td>(</td>
930 <td class="paramname"></td><td>)</td>
931 <td></td>
932 </tr>
933 </table>
934 </td>
935 <td class="mlabels-right">
936<span class="mlabels"><span class="mlabel">inline</span></span> </td>
937 </tr>
938</table>
939</div><div class="memdoc">
940
941<p>Returns iterator pointing to the beginning of the list. Lowercase for range-based for loops. </p>
942
Nikhil Raj1dc83fe2024-05-16 09:47:51 +0100943<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>
944<div class="fragment"><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;{ <span class="keywordflow">return</span> m_Layers.begin(); }</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100945</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +0100946<p class="reference">Referenced by <a class="el" href="_graph_8hpp_source.html#l00186">Graph::cbegin()</a>, <a class="el" href="_network_8cpp_source.html#l01906">armnn::Optimize()</a>, and <a class="el" href="_optimizer_8cpp_source.html#l00016">Optimizer::Pass()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100947
948</div>
949</div>
950<a id="ad5fee900c7aee90671038c79225bf8ec"></a>
951<h2 class="memtitle"><span class="permalink"><a href="#ad5fee900c7aee90671038c79225bf8ec">&#9670;&nbsp;</a></span>begin() <span class="overload">[2/2]</span></h2>
952
953<div class="memitem">
954<div class="memproto">
955<table class="mlabels">
956 <tr>
957 <td class="mlabels-left">
958 <table class="memname">
959 <tr>
960 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html#aec593bbf34c780f1a928830bca14a82c">ConstIterator</a> begin </td>
961 <td>(</td>
962 <td class="paramname"></td><td>)</td>
963 <td> const</td>
964 </tr>
965 </table>
966 </td>
967 <td class="mlabels-right">
968<span class="mlabels"><span class="mlabel">inline</span></span> </td>
969 </tr>
970</table>
971</div><div class="memdoc">
972
973<p>Returns const iterator pointing to the beginning of the list. Lowercase for range-based for loops. </p>
974
Nikhil Raj1dc83fe2024-05-16 09:47:51 +0100975<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>
976<div class="fragment"><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;{ <span class="keywordflow">return</span> {m_Layers.begin(), &amp;(PtrCast&lt;const Layer&gt;)}; }</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +0100977</div><!-- fragment -->
978</div>
979</div>
980<a id="a98b1109a9006f8cc7d4566146a3bd737"></a>
981<h2 class="memtitle"><span class="permalink"><a href="#a98b1109a9006f8cc7d4566146a3bd737">&#9670;&nbsp;</a></span>cbegin()</h2>
982
983<div class="memitem">
984<div class="memproto">
985<table class="mlabels">
986 <tr>
987 <td class="mlabels-left">
988 <table class="memname">
989 <tr>
990 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html#aec593bbf34c780f1a928830bca14a82c">ConstIterator</a> cbegin </td>
991 <td>(</td>
992 <td class="paramname"></td><td>)</td>
993 <td> const</td>
994 </tr>
995 </table>
996 </td>
997 <td class="mlabels-right">
998<span class="mlabels"><span class="mlabel">inline</span></span> </td>
999 </tr>
1000</table>
1001</div><div class="memdoc">
1002
1003<p>Returns const iterator pointing to the beginning of the list. Lowercase for range-based for loops. </p>
1004
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001005<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00186">186</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1006<div class="fragment"><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;{ <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_graph.html#a2387033802383edbdc95f9bbb12a707e">begin</a>(); }</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001007</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001008<p class="reference">References <a class="el" href="_graph_8hpp_source.html#l00176">Graph::begin()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001009
1010</div>
1011</div>
1012<a id="a02fd29b6dc3e21fbe4484362d85893bc"></a>
1013<h2 class="memtitle"><span class="permalink"><a href="#a02fd29b6dc3e21fbe4484362d85893bc">&#9670;&nbsp;</a></span>cend()</h2>
1014
1015<div class="memitem">
1016<div class="memproto">
1017<table class="mlabels">
1018 <tr>
1019 <td class="mlabels-left">
1020 <table class="memname">
1021 <tr>
1022 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html#aec593bbf34c780f1a928830bca14a82c">ConstIterator</a> cend </td>
1023 <td>(</td>
1024 <td class="paramname"></td><td>)</td>
1025 <td> const</td>
1026 </tr>
1027 </table>
1028 </td>
1029 <td class="mlabels-right">
1030<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1031 </tr>
1032</table>
1033</div><div class="memdoc">
1034
1035<p>Returns const iterator pointing to the end of the list. Lowercase for range-based for loops. </p>
1036
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001037<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>
1038<div class="fragment"><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;{ <span class="keywordflow">return</span> <a class="code" href="classarmnn_1_1_graph.html#ab45dae688fc5d8983727abffa4389003">end</a>(); }</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001039</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001040<p class="reference">References <a class="el" href="_graph_8hpp_source.html#l00178">Graph::end()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001041
1042</div>
1043</div>
1044<a id="a369faf91a25265add1fe8aa416e7b877"></a>
1045<h2 class="memtitle"><span class="permalink"><a href="#a369faf91a25265add1fe8aa416e7b877">&#9670;&nbsp;</a></span>DetachObservable()</h2>
1046
1047<div class="memitem">
1048<div class="memproto">
1049<table class="mlabels">
1050 <tr>
1051 <td class="mlabels-left">
1052 <table class="memname">
1053 <tr>
1054 <td class="memname">void DetachObservable </td>
1055 <td>(</td>
1056 <td class="paramtype"><a class="el" href="classarmnn_1_1_i_graph_observable.html">IGraphObservable</a> *const&#160;</td>
1057 <td class="paramname"><em>observable</em>, </td>
1058 </tr>
1059 <tr>
1060 <td class="paramkey"></td>
1061 <td></td>
1062 <td class="paramtype"><a class="el" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0b">GraphEvent</a>&#160;</td>
1063 <td class="paramname"><em>notifyOnEvent</em>&#160;</td>
1064 </tr>
1065 <tr>
1066 <td></td>
1067 <td>)</td>
1068 <td></td><td></td>
1069 </tr>
1070 </table>
1071 </td>
1072 <td class="mlabels-right">
1073<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1074 </tr>
1075</table>
1076</div><div class="memdoc">
1077
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001078<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00230">230</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1079<div class="fragment"><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; {</div>
1080<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; m_Views[notifyOnEvent].remove(observable);</div>
1081<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; }</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001082</div><!-- fragment -->
1083<p class="reference">Referenced by <a class="el" href="_observable_8hpp_source.html#l00033">GraphObservable&lt; std::string &gt;::~GraphObservable()</a>.</p>
1084
1085</div>
1086</div>
1087<a id="ab45dae688fc5d8983727abffa4389003"></a>
1088<h2 class="memtitle"><span class="permalink"><a href="#ab45dae688fc5d8983727abffa4389003">&#9670;&nbsp;</a></span>end() <span class="overload">[1/2]</span></h2>
1089
1090<div class="memitem">
1091<div class="memproto">
1092<table class="mlabels">
1093 <tr>
1094 <td class="mlabels-left">
1095 <table class="memname">
1096 <tr>
1097 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Iterator</a> end </td>
1098 <td>(</td>
1099 <td class="paramname"></td><td>)</td>
1100 <td></td>
1101 </tr>
1102 </table>
1103 </td>
1104 <td class="mlabels-right">
1105<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1106 </tr>
1107</table>
1108</div><div class="memdoc">
1109
1110<p>Returns iterator pointing to the end of the list. Lowercase for range-based for loops. </p>
1111
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001112<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00178">178</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1113<div class="fragment"><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;{ <span class="keywordflow">return</span> m_Layers.end(); }</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001114</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001115<p class="reference">Referenced by <a class="el" href="_graph_8hpp_source.html#l00188">Graph::cend()</a>, <a class="el" href="_network_8cpp_source.html#l01906">armnn::Optimize()</a>, and <a class="el" href="_optimizer_8cpp_source.html#l00016">Optimizer::Pass()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001116
1117</div>
1118</div>
1119<a id="a69b6e2a03c835ca5d658a1f16acbaa9c"></a>
1120<h2 class="memtitle"><span class="permalink"><a href="#a69b6e2a03c835ca5d658a1f16acbaa9c">&#9670;&nbsp;</a></span>end() <span class="overload">[2/2]</span></h2>
1121
1122<div class="memitem">
1123<div class="memproto">
1124<table class="mlabels">
1125 <tr>
1126 <td class="mlabels-left">
1127 <table class="memname">
1128 <tr>
1129 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html#aec593bbf34c780f1a928830bca14a82c">ConstIterator</a> end </td>
1130 <td>(</td>
1131 <td class="paramname"></td><td>)</td>
1132 <td> const</td>
1133 </tr>
1134 </table>
1135 </td>
1136 <td class="mlabels-right">
1137<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1138 </tr>
1139</table>
1140</div><div class="memdoc">
1141
1142<p>Returns const iterator pointing to the end of the list. Lowercase for range-based for loops. </p>
1143
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001144<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00183">183</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1145<div class="fragment"><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;{ <span class="keywordflow">return</span> {m_Layers.end(), &amp;(PtrCast&lt;const Layer&gt;)}; }</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001146</div><!-- fragment -->
1147</div>
1148</div>
1149<a id="a96d76fd10af39fbfabfd0caf0d1439fa"></a>
1150<h2 class="memtitle"><span class="permalink"><a href="#a96d76fd10af39fbfabfd0caf0d1439fa">&#9670;&nbsp;</a></span>EraseLayer() <span class="overload">[1/2]</span></h2>
1151
1152<div class="memitem">
1153<div class="memproto">
1154<table class="mlabels">
1155 <tr>
1156 <td class="mlabels-left">
1157 <table class="memname">
1158 <tr>
1159 <td class="memname">void EraseLayer </td>
1160 <td>(</td>
1161 <td class="paramtype"><a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Iterator</a>&#160;</td>
1162 <td class="paramname"><em>pos</em></td><td>)</td>
1163 <td></td>
1164 </tr>
1165 </table>
1166 </td>
1167 <td class="mlabels-right">
1168<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1169 </tr>
1170</table>
1171</div><div class="memdoc">
1172
1173<p>Deletes the layer at the specified position. </p>
1174
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001175<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00517">517</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1176<div class="fragment"><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;{</div>
1177<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; NotifyObservables(<a class="code" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0bad6e393dc30fd33cbcb5f6ab199093528">GraphEvent::LayerErased</a>, *pos);</div>
1178<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; </div>
1179<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keyword">delete</span> *pos;</div>
1180<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001181</div><!-- fragment -->
1182<p class="reference">References <a class="el" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0bad6e393dc30fd33cbcb5f6ab199093528">armnn::LayerErased</a>.</p>
1183
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001184<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01320">armnn::ApplyBackendOptimizations()</a>, <a class="el" href="_graph_8hpp_source.html#l00525">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 +01001185
1186</div>
1187</div>
1188<a id="a2b1af2be20d1b14172c636de692a75a5"></a>
1189<h2 class="memtitle"><span class="permalink"><a href="#a2b1af2be20d1b14172c636de692a75a5">&#9670;&nbsp;</a></span>EraseLayer() <span class="overload">[2/2]</span></h2>
1190
1191<div class="memitem">
1192<div class="memproto">
1193<table class="mlabels">
1194 <tr>
1195 <td class="mlabels-left">
1196 <table class="memname">
1197 <tr>
1198 <td class="memname">void EraseLayer </td>
1199 <td>(</td>
1200 <td class="paramtype">LayerT *&amp;&#160;</td>
1201 <td class="paramname"><em>layer</em></td><td>)</td>
1202 <td></td>
1203 </tr>
1204 </table>
1205 </td>
1206 <td class="mlabels-right">
1207<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1208 </tr>
1209</table>
1210</div><div class="memdoc">
1211
1212<p>Deletes the layer. </p>
1213<p>Sets <em>layer</em> to nullptr on return. Templated to support pointers to any layer type. </p>
1214
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001215<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00525">525</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1216<div class="fragment"><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;{</div>
1217<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">if</span> (!layer)</div>
1218<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; {</div>
1219<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_null_pointer_exception.html">armnn::NullPointerException</a>(<span class="stringliteral">&quot;layer must not be null.&quot;</span>);</div>
1220<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; }</div>
1221<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; </div>
1222<div class="line"><a name="l00532"></a><span class="lineno"> 532</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>
1223<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; layer = <span class="keyword">nullptr</span>;</div>
1224<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001225</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001226<p class="reference">References <a class="el" href="_graph_8hpp_source.html#l00517">Graph::EraseLayer()</a>, and <a class="el" href="_graph_8hpp_source.html#l00455">Graph::GetPosInGraph()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001227
1228</div>
1229</div>
1230<a id="ad6521013ad981519904822f2ada2c4ec"></a>
1231<h2 class="memtitle"><span class="permalink"><a href="#ad6521013ad981519904822f2ada2c4ec">&#9670;&nbsp;</a></span>ForEachLayer()</h2>
1232
1233<div class="memitem">
1234<div class="memproto">
1235<table class="mlabels">
1236 <tr>
1237 <td class="mlabels-left">
1238 <table class="memname">
1239 <tr>
1240 <td class="memname">void ForEachLayer </td>
1241 <td>(</td>
1242 <td class="paramtype">Func&#160;</td>
1243 <td class="paramname"><em>func</em></td><td>)</td>
1244 <td> const</td>
1245 </tr>
1246 </table>
1247 </td>
1248 <td class="mlabels-right">
1249<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1250 </tr>
1251</table>
1252</div><div class="memdoc">
1253
1254<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>
1255<div class="fragment"><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; {</div>
1256<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>
1257<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div>
1258<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">auto</span> next = std::next(it);</div>
1259<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; func(*it);</div>
1260<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; it = next;</div>
1261<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; }</div>
1262<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; }</div>
1263</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001264<p class="reference">Referenced by <a class="el" href="_graph_8cpp_source.html#l00330">Graph::AddCompatibilityLayers()</a>, <a class="el" href="_network_8cpp_source.html#l01821">armnn::SelectTensorHandleStrategy()</a>, and <a class="el" href="_graph_8hpp_source.html#l00142">Graph::~Graph()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001265
1266</div>
1267</div>
1268<a id="a919fb58873ef3a6549e4490e226f2eae"></a>
1269<h2 class="memtitle"><span class="permalink"><a href="#a919fb58873ef3a6549e4490e226f2eae">&#9670;&nbsp;</a></span>GetInputLayers()</h2>
1270
1271<div class="memitem">
1272<div class="memproto">
1273<table class="mlabels">
1274 <tr>
1275 <td class="mlabels-left">
1276 <table class="memname">
1277 <tr>
1278 <td class="memname"><a class="el" href="structarmnn_1_1_graph_1_1_input_layers_accessor.html">InputLayersAccessor</a> GetInputLayers </td>
1279 <td>(</td>
1280 <td class="paramname"></td><td>)</td>
1281 <td> const</td>
1282 </tr>
1283 </table>
1284 </td>
1285 <td class="mlabels-right">
1286<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1287 </tr>
1288</table>
1289</div><div class="memdoc">
1290
1291<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>
1292
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001293<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00199">199</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1294<div class="fragment"><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;{ <span class="keywordflow">return</span> InputLayersAccessor(*<span class="keyword">this</span>); }</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001295</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001296<p class="reference">Referenced by <a class="el" href="_loaded_network_8cpp_source.html#l00872">LoadedNetwork::EnqueueWorkload()</a>, and <a class="el" href="_loaded_network_8cpp_source.html#l01486">LoadedNetwork::ImportInputs()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001297
1298</div>
1299</div>
1300<a id="a8d8179a4a0703602a5d7dbb6e92eaf69"></a>
1301<h2 class="memtitle"><span class="permalink"><a href="#a8d8179a4a0703602a5d7dbb6e92eaf69">&#9670;&nbsp;</a></span>GetNumInputs()</h2>
1302
1303<div class="memitem">
1304<div class="memproto">
1305<table class="mlabels">
1306 <tr>
1307 <td class="mlabels-left">
1308 <table class="memname">
1309 <tr>
1310 <td class="memname">size_t GetNumInputs </td>
1311 <td>(</td>
1312 <td class="paramname"></td><td>)</td>
1313 <td> const</td>
1314 </tr>
1315 </table>
1316 </td>
1317 <td class="mlabels-right">
1318<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1319 </tr>
1320</table>
1321</div><div class="memdoc">
1322
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001323<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00194">194</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1324<div class="fragment"><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;{ <span class="keywordflow">return</span> m_InputIds.size(); }</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001325</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001326<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#l00872">LoadedNetwork::EnqueueWorkload()</a>, and <a class="el" href="_loaded_network_8cpp_source.html#l01803">LoadedNetwork::Execute()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001327
1328</div>
1329</div>
1330<a id="afdf8eb85585a798ad0e936bde884d87b"></a>
1331<h2 class="memtitle"><span class="permalink"><a href="#afdf8eb85585a798ad0e936bde884d87b">&#9670;&nbsp;</a></span>GetNumLayers()</h2>
1332
1333<div class="memitem">
1334<div class="memproto">
1335<table class="mlabels">
1336 <tr>
1337 <td class="mlabels-left">
1338 <table class="memname">
1339 <tr>
1340 <td class="memname">size_t GetNumLayers </td>
1341 <td>(</td>
1342 <td class="paramname"></td><td>)</td>
1343 <td> const</td>
1344 </tr>
1345 </table>
1346 </td>
1347 <td class="mlabels-right">
1348<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1349 </tr>
1350</table>
1351</div><div class="memdoc">
1352
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001353<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00205">205</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1354<div class="fragment"><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;{ <span class="keywordflow">return</span> m_Layers.size(); }</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001355</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001356<p class="reference">Referenced by <a class="el" href="_loaded_network_8cpp_source.html#l00872">LoadedNetwork::EnqueueWorkload()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001357
1358</div>
1359</div>
1360<a id="a604654b453ec291a503d62a0beb849d3"></a>
1361<h2 class="memtitle"><span class="permalink"><a href="#a604654b453ec291a503d62a0beb849d3">&#9670;&nbsp;</a></span>GetNumOutputs()</h2>
1362
1363<div class="memitem">
1364<div class="memproto">
1365<table class="mlabels">
1366 <tr>
1367 <td class="mlabels-left">
1368 <table class="memname">
1369 <tr>
1370 <td class="memname">size_t GetNumOutputs </td>
1371 <td>(</td>
1372 <td class="paramname"></td><td>)</td>
1373 <td> const</td>
1374 </tr>
1375 </table>
1376 </td>
1377 <td class="mlabels-right">
1378<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1379 </tr>
1380</table>
1381</div><div class="memdoc">
1382
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001383<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00195">195</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1384<div class="fragment"><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;{ <span class="keywordflow">return</span> m_OutputIds.size(); }</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001385</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001386<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#l00872">LoadedNetwork::EnqueueWorkload()</a>, and <a class="el" href="_loaded_network_8cpp_source.html#l01803">LoadedNetwork::Execute()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001387
1388</div>
1389</div>
1390<a id="aa311c7fe7e05406c9ff4e4ed3ba09825"></a>
1391<h2 class="memtitle"><span class="permalink"><a href="#aa311c7fe7e05406c9ff4e4ed3ba09825">&#9670;&nbsp;</a></span>GetOutputLayers()</h2>
1392
1393<div class="memitem">
1394<div class="memproto">
1395<table class="mlabels">
1396 <tr>
1397 <td class="mlabels-left">
1398 <table class="memname">
1399 <tr>
1400 <td class="memname"><a class="el" href="structarmnn_1_1_graph_1_1_output_layers_accessor.html">OutputLayersAccessor</a> GetOutputLayers </td>
1401 <td>(</td>
1402 <td class="paramname"></td><td>)</td>
1403 <td> const</td>
1404 </tr>
1405 </table>
1406 </td>
1407 <td class="mlabels-right">
1408<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1409 </tr>
1410</table>
1411</div><div class="memdoc">
1412
1413<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>
1414
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001415<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00203">203</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1416<div class="fragment"><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;{ <span class="keywordflow">return</span> OutputLayersAccessor(*<span class="keyword">this</span>); }</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001417</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001418<p class="reference">Referenced by <a class="el" href="_loaded_network_8cpp_source.html#l00872">LoadedNetwork::EnqueueWorkload()</a>, and <a class="el" href="_loaded_network_8cpp_source.html#l01632">LoadedNetwork::ImportOutputs()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001419
1420</div>
1421</div>
1422<a id="ac7ed5efddd83499ff642cc65f3f66a14"></a>
1423<h2 class="memtitle"><span class="permalink"><a href="#ac7ed5efddd83499ff642cc65f3f66a14">&#9670;&nbsp;</a></span>GetPosInGraph()</h2>
1424
1425<div class="memitem">
1426<div class="memproto">
1427<table class="mlabels">
1428 <tr>
1429 <td class="mlabels-left">
1430 <table class="memname">
1431 <tr>
1432 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html#acc25db0641c1c22faf95af3bb49080c9">Graph::Iterator</a> GetPosInGraph </td>
1433 <td>(</td>
1434 <td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">Layer</a> &amp;&#160;</td>
1435 <td class="paramname"><em>layer</em></td><td>)</td>
1436 <td></td>
1437 </tr>
1438 </table>
1439 </td>
1440 <td class="mlabels-right">
1441<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1442 </tr>
1443</table>
1444</div><div class="memdoc">
1445
1446<p>Gets the position of a layer in the graph. </p>
1447
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001448<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00455">455</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1449<div class="fragment"><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;{</div>
1450<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="keyword">auto</span> it = m_PosInGraphMap.find(&amp;layer);</div>
1451<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">if</span> (it == m_PosInGraphMap.end())</div>
1452<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; {</div>
1453<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(<span class="stringliteral">&quot;unable to find layer in graph map.&quot;</span>);</div>
1454<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; }</div>
1455<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div>
1456<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001457</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001458<p class="reference">Referenced by <a class="el" href="_graph_8hpp_source.html#l00525">Graph::EraseLayer()</a>, <a class="el" href="_graph_8hpp_source.html#l00481">Graph::InsertNewLayer()</a>, and <a class="el" href="_optimizer_8cpp_source.html#l00016">Optimizer::Pass()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001459
1460</div>
1461</div>
1462<a id="a880db527e7dbf8d0de3fee52ba072482"></a>
1463<h2 class="memtitle"><span class="permalink"><a href="#a880db527e7dbf8d0de3fee52ba072482">&#9670;&nbsp;</a></span>GetProfiler()</h2>
1464
1465<div class="memitem">
1466<div class="memproto">
1467 <table class="memname">
1468 <tr>
1469 <td class="memname">const std::shared_ptr&lt; <a class="el" href="classarmnn_1_1_i_profiler.html">IProfiler</a> &gt; &amp; GetProfiler </td>
1470 <td>(</td>
1471 <td class="paramname"></td><td>)</td>
1472 <td> const</td>
1473 </tr>
1474 </table>
1475</div><div class="memdoc">
1476
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001477<p class="definition">Definition at line <a class="el" href="_graph_8cpp_source.html#l00733">733</a> of file <a class="el" href="_graph_8cpp_source.html">Graph.cpp</a>.</p>
1478<div class="fragment"><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160;{</div>
1479<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keywordflow">return</span> m_Profiler;</div>
1480<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001481</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001482<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01906">armnn::Optimize()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001483
1484</div>
1485</div>
1486<a id="a2ceda8d369e861997d558fac74d79c33"></a>
1487<h2 class="memtitle"><span class="permalink"><a href="#a2ceda8d369e861997d558fac74d79c33">&#9670;&nbsp;</a></span>InferTensorInfos()</h2>
1488
1489<div class="memitem">
1490<div class="memproto">
1491 <table class="memname">
1492 <tr>
1493 <td class="memname">void InferTensorInfos </td>
1494 <td>(</td>
1495 <td class="paramname"></td><td>)</td>
1496 <td></td>
1497 </tr>
1498 </table>
1499</div><div class="memdoc">
1500
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001501<p class="definition">Definition at line <a class="el" href="_graph_8cpp_source.html#l00645">645</a> of file <a class="el" href="_graph_8cpp_source.html">Graph.cpp</a>.</p>
1502<div class="fragment"><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160;{</div>
1503<div class="line"><a name="l00647"></a><span class="lineno"> 647</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>
1504<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; {</div>
1505<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; input : layer-&gt;GetInputSlots())</div>
1506<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; {</div>
1507<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keyword">const</span> IOutputSlot* source = input.GetConnectedOutputSlot();</div>
1508<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="keywordflow">if</span> (source == NULL)</div>
1509<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; {</div>
1510<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="comment">// Throws exception due to a layer input not being connected to an output slot.</span></div>
1511<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="comment">// Verifies input slot weights and bias are set for FullyConnected layers.</span></div>
1512<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; ConstructErrorMessageForUnconnectedInputs(layer, input.GetSlotIndex());</div>
1513<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; }</div>
1514<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; </div>
1515<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keywordflow">if</span> (!source-&gt;IsTensorInfoSet())</div>
1516<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; {</div>
1517<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; std::ostringstream message;</div>
1518<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; message &lt;&lt; <span class="stringliteral">&quot;Output slot TensorInfo not set on &quot;</span></div>
1519<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; &lt;&lt; <a class="code" href="namespacearmnn.html#addb6b14dd1b632263ffe77430259a7c4">GetLayerTypeAsCString</a>(layer-&gt;GetType())</div>
1520<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; &lt;&lt; <span class="stringliteral">&quot; layer &quot;</span></div>
1521<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; &lt;&lt; std::quoted(layer-&gt;GetName());</div>
1522<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keywordflow">throw</span> LayerValidationException(message.str());</div>
1523<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; }</div>
1524<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; }</div>
1525<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; </div>
1526<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <span class="keywordflow">if</span> (layer-&gt;m_ShapeInferenceMethod == <a class="code" href="namespacearmnn.html#adf57837d00e8352d9b5cc5ab1fb5fee9af6486a22a9bb11959bfae60a3e5174b1">ShapeInferenceMethod::ValidateOnly</a>)</div>
1527<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; {</div>
1528<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; layer-&gt;ValidateTensorShapesFromInputs();</div>
1529<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; }</div>
1530<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; }</div>
1531<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001532</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001533<p class="reference">References <a class="el" href="_internal_types_8cpp_source.html#l00013">armnn::GetLayerTypeAsCString()</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.html#ab4e57caf059794897b17266090ebcb39">IOutputSlot::IsTensorInfoSet()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001534
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001535<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01906">armnn::Optimize()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001536
1537</div>
1538</div>
1539<a id="a3ff30c6669fdc69de1f5be1f89bacc3f"></a>
1540<h2 class="memtitle"><span class="permalink"><a href="#a3ff30c6669fdc69de1f5be1f89bacc3f">&#9670;&nbsp;</a></span>InsertNewLayer() <span class="overload">[1/2]</span></h2>
1541
1542<div class="memitem">
1543<div class="memproto">
1544<table class="mlabels">
1545 <tr>
1546 <td class="mlabels-left">
1547 <table class="memname">
1548 <tr>
1549 <td class="memname">LayerT * InsertNewLayer </td>
1550 <td>(</td>
1551 <td class="paramtype"><a class="el" href="classarmnn_1_1_input_slot.html">InputSlot</a> &amp;&#160;</td>
1552 <td class="paramname"><em>insertBefore</em>, </td>
1553 </tr>
1554 <tr>
1555 <td class="paramkey"></td>
1556 <td></td>
1557 <td class="paramtype">Args &amp;&amp;...&#160;</td>
1558 <td class="paramname"><em>args</em>&#160;</td>
1559 </tr>
1560 <tr>
1561 <td></td>
1562 <td>)</td>
1563 <td></td><td></td>
1564 </tr>
1565 </table>
1566 </td>
1567 <td class="mlabels-right">
1568<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1569 </tr>
1570</table>
1571</div><div class="memdoc">
1572
1573<p>Inserts a new layer between the output slot currently connected to insertBefore and insertBefore itself. </p>
1574
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001575<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00481">481</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1576<div class="fragment"><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;{</div>
1577<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="comment">// Insert after the parent if any, or before the child otherwise, so the topological order is kept.</span></div>
1578<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; OutputSlot* parentOut = insertBefore.GetConnectedOutputSlot();</div>
1579<div class="line"><a name="l00485"></a><span class="lineno"> 485</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>
1580<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; ? std::next(<a class="code" href="classarmnn_1_1_graph.html#ac7ed5efddd83499ff642cc65f3f66a14">GetPosInGraph</a>(parentOut-&gt;GetOwningLayer()))</div>
1581<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; : <a class="code" href="classarmnn_1_1_graph.html#ac7ed5efddd83499ff642cc65f3f66a14">GetPosInGraph</a>(insertBefore.GetOwningLayer());</div>
1582<div class="line"><a name="l00488"></a><span class="lineno"> 488</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>
1583<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; insertBefore.Insert(*layer);</div>
1584<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; </div>
1585<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; NotifyObservables(<a class="code" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">GraphEvent::LayerAdded</a>, layer);</div>
1586<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; </div>
1587<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keywordflow">return</span> layer;</div>
1588<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001589</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001590<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#l00455">Graph::GetPosInGraph()</a>, <a class="el" href="_layer_8cpp_source.html#l00053">InputSlot::Insert()</a>, and <a class="el" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">armnn::LayerAdded</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001591
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001592<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="_max_min_into_bounded_relu_8hpp_source.html#l00018">MaxMinIntoBoundedReluImpl::Run()</a>, <a class="el" href="_optimize_consecutive_reshapes_8hpp_source.html#l00019">OptimizeConsecutiveReshapesImpl::Run()</a>, <a class="el" href="_move_transpose_up_8hpp_source.html#l00023">MoveTransposeUpImpl::Run()</a>, <a class="el" href="_move_permute_up_8hpp_source.html#l00023">MovePermuteUpImpl::Run()</a>, <a class="el" href="_add_broadcast_reshape_layer_8hpp_source.html#l00027">AddBroadcastReshapeLayerImpl::Run()</a>, and <a class="el" href="_fuse_batch_norm_8hpp_source.html#l00027">FuseBatchNorm&lt; ConvLayer, ArmnnType, T &gt;::Run()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001593
1594</div>
1595</div>
1596<a id="af8c993add04a7b4e1e29924a03d23d0c"></a>
1597<h2 class="memtitle"><span class="permalink"><a href="#af8c993add04a7b4e1e29924a03d23d0c">&#9670;&nbsp;</a></span>InsertNewLayer() <span class="overload">[2/2]</span></h2>
1598
1599<div class="memitem">
1600<div class="memproto">
1601<table class="mlabels">
1602 <tr>
1603 <td class="mlabels-left">
1604 <table class="memname">
1605 <tr>
1606 <td class="memname">LayerT * InsertNewLayer </td>
1607 <td>(</td>
1608 <td class="paramtype"><a class="el" href="classarmnn_1_1_output_slot.html">OutputSlot</a> &amp;&#160;</td>
1609 <td class="paramname"><em>insertAfter</em>, </td>
1610 </tr>
1611 <tr>
1612 <td class="paramkey"></td>
1613 <td></td>
1614 <td class="paramtype">Args &amp;&amp;...&#160;</td>
1615 <td class="paramname"><em>args</em>&#160;</td>
1616 </tr>
1617 <tr>
1618 <td></td>
1619 <td>)</td>
1620 <td></td><td></td>
1621 </tr>
1622 </table>
1623 </td>
1624 <td class="mlabels-right">
1625<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1626 </tr>
1627</table>
1628</div><div class="memdoc">
1629
1630<p>Inserts a new layer between insertAfter and the input slot(s) currently connected to it. </p>
1631
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001632<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00497">497</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
1633<div class="fragment"><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;{</div>
1634<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; Layer&amp; owningLayer = insertAfter.GetOwningLayer();</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001635<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; </div>
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001636<div class="line"><a name="l00501"></a><span class="lineno"> 501</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>
1637<div class="line"><a name="l00502"></a><span class="lineno"> 502</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>
1638<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; </div>
1639<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">if</span> (layer-&gt;GetNumInputSlots() != 1)</div>
1640<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; {</div>
1641<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(<span class="stringliteral">&quot;layer must only one input slot.&quot;</span>);</div>
1642<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; }</div>
1643<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; </div>
1644<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; insertAfter.MoveAllConnections(layer-&gt;GetOutputSlot());</div>
1645<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; insertAfter.Connect(layer-&gt;GetInputSlot(0));</div>
1646<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; </div>
1647<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; NotifyObservables(<a class="code" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">GraphEvent::LayerAdded</a>, layer);</div>
1648<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; </div>
1649<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordflow">return</span> layer;</div>
1650<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001651</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001652<p class="reference">References <a class="el" href="_layer_8cpp_source.html#l00123">OutputSlot::Connect()</a>, <a class="el" href="_layer_8hpp_source.html#l00132">OutputSlot::GetOwningLayer()</a>, <a class="el" href="_graph_8hpp_source.html#l00455">Graph::GetPosInGraph()</a>, <a class="el" href="namespacearmnn.html#a34eaed09302a4d7bfe930c13a7673e0ba23c3efdd3f80798660ecf0b9af6dd5dd">armnn::LayerAdded</a>, and <a class="el" href="_layer_8cpp_source.html#l00156">OutputSlot::MoveAllConnections()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001653
1654</div>
1655</div>
1656<a id="a99eeb892ef31ec3e7058acea2253bce6"></a>
1657<h2 class="memtitle"><span class="permalink"><a href="#a99eeb892ef31ec3e7058acea2253bce6">&#9670;&nbsp;</a></span>operator=() <span class="overload">[1/2]</span></h2>
1658
1659<div class="memitem">
1660<div class="memproto">
1661<table class="mlabels">
1662 <tr>
1663 <td class="mlabels-left">
1664 <table class="memname">
1665 <tr>
1666 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html">Graph</a>&amp; operator= </td>
1667 <td>(</td>
1668 <td class="paramtype">const <a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&#160;</td>
1669 <td class="paramname"><em>other</em></td><td>)</td>
1670 <td></td>
1671 </tr>
1672 </table>
1673 </td>
1674 <td class="mlabels-right">
1675<span class="mlabels"><span class="mlabel">delete</span></span> </td>
1676 </tr>
1677</table>
1678</div><div class="memdoc">
1679
1680</div>
1681</div>
1682<a id="a04b47532de485737e97066d3cb29c957"></a>
1683<h2 class="memtitle"><span class="permalink"><a href="#a04b47532de485737e97066d3cb29c957">&#9670;&nbsp;</a></span>operator=() <span class="overload">[2/2]</span></h2>
1684
1685<div class="memitem">
1686<div class="memproto">
1687<table class="mlabels">
1688 <tr>
1689 <td class="mlabels-left">
1690 <table class="memname">
1691 <tr>
1692 <td class="memname"><a class="el" href="classarmnn_1_1_graph.html">Graph</a>&amp; operator= </td>
1693 <td>(</td>
1694 <td class="paramtype"><a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp;&amp;&#160;</td>
1695 <td class="paramname"><em>other</em></td><td>)</td>
1696 <td></td>
1697 </tr>
1698 </table>
1699 </td>
1700 <td class="mlabels-right">
1701<span class="mlabels"><span class="mlabel">inline</span></span> </td>
1702 </tr>
1703</table>
1704</div><div class="memdoc">
1705
1706<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>
1707<div class="fragment"><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; {</div>
1708<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; m_InputIds = std::move(other.m_InputIds);</div>
1709<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; m_OutputIds = std::move(other.m_OutputIds);</div>
1710<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; m_LayersInOrder = std::move(other.m_LayersInOrder);</div>
1711<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; m_Views = std::move(other.m_Views);</div>
1712<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; m_Profiler = std::move(other.m_Profiler);</div>
1713<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; m_AllowExpandedDims = other.m_AllowExpandedDims;</div>
1714<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; m_ShapeInferenceMethod = other.m_ShapeInferenceMethod;</div>
1715<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; other.ForEachLayer([<span class="keyword">this</span>](Layer* otherLayer)</div>
1716<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; {</div>
1717<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>
1718<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; });</div>
1719<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; </div>
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001720<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">if</span> (!other.m_PosInGraphMap.empty())</div>
1721<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; {</div>
1722<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(<span class="stringliteral">&quot;assignment positions in graph map must be empty.&quot;</span>);</div>
1723<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div>
1724<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; </div>
1725<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">if</span> (!other.m_Layers.empty())</div>
1726<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; {</div>
1727<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.html">armnn::Exception</a>(<span class="stringliteral">&quot;assignment layers must be empty.&quot;</span>);</div>
1728<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div>
1729<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; </div>
1730<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
1731<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001732</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001733<p class="reference">References <a class="el" href="classarmnn_1_1_layer.html#ae68bb844446f28cf8580ecbe2f516ff6">Layer::Reparent()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001734
1735</div>
1736</div>
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00001737<a id="a5dbbfed3b6d0bf3126abfc34e93a69f0"></a>
1738<h2 class="memtitle"><span class="permalink"><a href="#a5dbbfed3b6d0bf3126abfc34e93a69f0">&#9670;&nbsp;</a></span>Print()</h2>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001739
1740<div class="memitem">
1741<div class="memproto">
1742 <table class="memname">
1743 <tr>
1744 <td class="memname"><a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a> Print </td>
1745 <td>(</td>
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00001746 <td class="paramtype">bool&#160;</td>
1747 <td class="paramname"><em>extended</em> = <code>false</code></td><td>)</td>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001748 <td> const</td>
1749 </tr>
1750 </table>
1751</div><div class="memdoc">
1752
1753<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>
1754<div class="fragment"><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;{</div>
1755<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">if</span> (m_Layers.empty())</div>
1756<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; {</div>
1757<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>
1758<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>
1759<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
1760<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>
1761<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>
1762<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; </div>
1763<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>
1764<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div>
1765<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">auto</span> numInputSlots = it-&gt;GetNumInputSlots();</div>
1766<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">auto</span> numOutputSlots = it-&gt;GetNumOutputSlots();</div>
1767<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00001768<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; std::string guid;</div>
1769<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span> (extended)</div>
1770<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div>
1771<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; guid += <span class="stringliteral">&quot;:&quot;</span>;</div>
1772<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; guid += std::to_string(it-&gt;GetGuid());</div>
1773<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div>
1774<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>
1775<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>
1776<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; &lt;&lt; guid</div>
1777<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>
1778<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>
1779<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; </div>
1780<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>
1781<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; {</div>
1782<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; std::ostringstream message;</div>
1783<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>
1784<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>
1785<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
1786<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>
1787<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>
1788<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; {</div>
1789<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>
1790<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; }</div>
1791<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; message &lt;&lt; <span class="stringliteral">&quot; ]&quot;</span>;</div>
1792<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">if</span> (extended)</div>
1793<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; {</div>
1794<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>
1795<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>
1796<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>
1797<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; message &lt;&lt; i.GetConnectedOutputSlot()-&gt;GetOwningIConnectableLayer().GetGuid();</div>
1798<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div>
1799<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>
1800<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div>
1801<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
1802<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>
1803<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div>
1804<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>
1805<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; std::ostringstream message;</div>
1806<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>
1807<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>
1808<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; </div>
1809<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>
1810<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>
1811<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; {</div>
1812<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>
1813<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; }</div>
1814<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; message &lt;&lt; <span class="stringliteral">&quot; ]&quot;</span>;</div>
1815<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">if</span> (extended)</div>
1816<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; {</div>
1817<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>
1818<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>
1819<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>
1820<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>
1821<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; }</div>
1822<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>
1823<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div>
1824<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>
1825<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div>
1826<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>
1827<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; </div>
1828<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>
1829<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001830</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001831<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#l00191">Graph::TopologicalSort()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001832
1833<p class="reference">Referenced by <a class="el" href="_graph_utils_8cpp_source.html#l00068">CheckOrder()</a>.</p>
1834
1835</div>
1836</div>
1837<a id="ab67eccecb5c9e6574f2836623f01025c"></a>
1838<h2 class="memtitle"><span class="permalink"><a href="#ab67eccecb5c9e6574f2836623f01025c">&#9670;&nbsp;</a></span>PtrCast()</h2>
1839
1840<div class="memitem">
1841<div class="memproto">
1842<table class="mlabels">
1843 <tr>
1844 <td class="mlabels-left">
1845 <table class="memname">
1846 <tr>
1847 <td class="memname">static <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4">LayerType</a>* PtrCast </td>
1848 <td>(</td>
1849 <td class="paramtype"><a class="el" href="classarmnn_1_1_layer.html">Layer</a> *const&#160;</td>
1850 <td class="paramname"><em>layer</em></td><td>)</td>
1851 <td></td>
1852 </tr>
1853 </table>
1854 </td>
1855 <td class="mlabels-right">
1856<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
1857 </tr>
1858</table>
1859</div><div class="memdoc">
1860
1861<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>
1862<div class="fragment"><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; {</div>
1863<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">return</span> PolymorphicDowncast&lt;LayerType*&gt;(layer);</div>
1864<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; }</div>
1865</div><!-- fragment -->
1866</div>
1867</div>
1868<a id="a131873e7a706fc7ca0637027236916e9"></a>
1869<h2 class="memtitle"><span class="permalink"><a href="#a131873e7a706fc7ca0637027236916e9">&#9670;&nbsp;</a></span>SerializeToDot()</h2>
1870
1871<div class="memitem">
1872<div class="memproto">
1873 <table class="memname">
1874 <tr>
1875 <td class="memname"><a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70b">Status</a> SerializeToDot </td>
1876 <td>(</td>
1877 <td class="paramtype">std::ostream &amp;&#160;</td>
1878 <td class="paramname"><em>stream</em></td><td>)</td>
1879 <td></td>
1880 </tr>
1881 </table>
1882</div><div class="memdoc">
1883
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00001884<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>
1885<div class="fragment"><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;{</div>
1886<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; {</div>
1887<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; DotGraph graph(stream, <span class="stringliteral">&quot;Optimized&quot;</span>);</div>
1888<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; </div>
1889<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; {</div>
1890<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">// Default node attributes:</span></div>
1891<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; DotDefaults nodes(stream, <span class="stringliteral">&quot;node&quot;</span>);</div>
1892<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; nodes.GetAttributeSet()</div>
1893<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>
1894<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div>
1895<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; </div>
1896<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {</div>
1897<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="comment">// Default edge attributes:</span></div>
1898<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; DotDefaults edges(stream, <span class="stringliteral">&quot;edge&quot;</span>);</div>
1899<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; edges.GetAttributeSet()</div>
1900<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; .AddAttribute(<span class="stringliteral">&quot;fontsize&quot;</span>, 8)</div>
1901<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>
1902<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>
1903<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; }</div>
1904<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; </div>
1905<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="comment">// First declares the nodes.</span></div>
1906<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>
1907<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; {</div>
1908<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>
1909<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="comment">// Extracts the layer parameters.</span></div>
1910<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>
1911<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>
1912<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; };</div>
1913<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 +01001914<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; }</div>
Nikhil Raj6f92c8e2023-11-22 11:41:15 +00001915<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; </div>
1916<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="comment">// Second declares the edges.</span></div>
1917<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>
1918<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; {</div>
1919<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>
1920<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; </div>
1921<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>
1922<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {</div>
1923<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>
1924<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>
1925<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; DotEdge edge(stream, fromId, toId);</div>
1926<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; </div>
1927<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>
1928<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; {</div>
1929<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>
1930<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; std::stringstream ss;</div>
1931<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>
1932<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>
1933<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div>
1934<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div>
1935<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div>
1936<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; }</div>
1937<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; </div>
1938<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">if</span> (stream.bad())</div>
1939<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; {</div>
1940<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>
1941<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; }</div>
1942<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>
1943<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001944</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001945<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#l00193">TensorInfo::GetShape()</a>, <a class="el" href="_layer_8cpp_source.html#l00100">OutputSlot::GetTensorInfo()</a>, and <a class="el" href="namespacearmnn.html#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">armnn::Success</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001946
1947</div>
1948</div>
1949<a id="ac3b4675f7a50a0f242880fb044aa8dec"></a>
1950<h2 class="memtitle"><span class="permalink"><a href="#ac3b4675f7a50a0f242880fb044aa8dec">&#9670;&nbsp;</a></span>SetLayersOutOfOrder()</h2>
1951
1952<div class="memitem">
1953<div class="memproto">
1954 <table class="memname">
1955 <tr>
1956 <td class="memname">void SetLayersOutOfOrder </td>
1957 <td>(</td>
1958 <td class="paramname"></td><td>)</td>
1959 <td></td>
1960 </tr>
1961 </table>
1962</div><div class="memdoc">
1963
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001964<p class="definition">Definition at line <a class="el" href="_graph_8cpp_source.html#l00738">738</a> of file <a class="el" href="_graph_8cpp_source.html">Graph.cpp</a>.</p>
1965<div class="fragment"><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160;{</div>
1966<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; m_LayersInOrder = <span class="keyword">false</span>;</div>
1967<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01001968</div><!-- fragment -->
1969</div>
1970</div>
1971<a id="a4443d9ad865522c39d06556a9dbbeb58"></a>
1972<h2 class="memtitle"><span class="permalink"><a href="#a4443d9ad865522c39d06556a9dbbeb58">&#9670;&nbsp;</a></span>SubstituteSubgraph() <span class="overload">[1/2]</span></h2>
1973
1974<div class="memitem">
1975<div class="memproto">
1976 <table class="memname">
1977 <tr>
1978 <td class="memname">void SubstituteSubgraph </td>
1979 <td>(</td>
1980 <td class="paramtype"><a class="el" href="classarmnn_1_1_subgraph_view.html">SubgraphView</a> &amp;&#160;</td>
1981 <td class="paramname"><em>subgraph</em>, </td>
1982 </tr>
1983 <tr>
1984 <td class="paramkey"></td>
1985 <td></td>
1986 <td class="paramtype">const <a class="el" href="classarmnn_1_1_subgraph_view.html">SubgraphView</a> &amp;&#160;</td>
1987 <td class="paramname"><em>substituteSubgraph</em>&#160;</td>
1988 </tr>
1989 <tr>
1990 <td></td>
1991 <td>)</td>
1992 <td></td><td></td>
1993 </tr>
1994 </table>
1995</div><div class="memdoc">
1996
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01001997<p class="definition">Definition at line <a class="el" href="_graph_8cpp_source.html#l00486">486</a> of file <a class="el" href="_graph_8cpp_source.html">Graph.cpp</a>.</p>
1998<div class="fragment"><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;{</div>
1999<div class="line"><a name="l00488"></a><span class="lineno"> 488</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>
2000<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; substituteSubgraph.ForEachIConnectableLayer([<span class="keyword">this</span>](IConnectableLayer* iConnectableLayer)</div>
2001<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; {</div>
2002<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">if</span> (std::find(std::begin(m_Layers),</div>
2003<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; std::end(m_Layers),</div>
2004<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; iConnectableLayer) == std::end(m_Layers))</div>
2005<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; {</div>
2006<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keyword">auto</span> layer = PolymorphicDowncast&lt;Layer*&gt;(iConnectableLayer);</div>
2007<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; layer-&gt;Reparent(*<span class="keyword">this</span>, m_Layers.end());</div>
2008<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; m_LayersInOrder = <span class="keyword">false</span>;</div>
2009<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; }</div>
2010<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; });</div>
2011<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; </div>
2012<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; ReplaceSubgraphConnections(subgraph, substituteSubgraph);</div>
2013<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; EraseSubgraphLayers(subgraph);</div>
2014<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <a class="code" href="classarmnn_1_1_graph.html#af497e16cf92179b5e55543741351b8bf">TopologicalSort</a>();</div>
2015<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002016</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01002017<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#l00191">Graph::TopologicalSort()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002018
2019</div>
2020</div>
2021<a id="aafbd4b469e47160017f409df8d077184"></a>
2022<h2 class="memtitle"><span class="permalink"><a href="#aafbd4b469e47160017f409df8d077184">&#9670;&nbsp;</a></span>SubstituteSubgraph() <span class="overload">[2/2]</span></h2>
2023
2024<div class="memitem">
2025<div class="memproto">
2026 <table class="memname">
2027 <tr>
2028 <td class="memname">void SubstituteSubgraph </td>
2029 <td>(</td>
2030 <td class="paramtype"><a class="el" href="classarmnn_1_1_subgraph_view.html">SubgraphView</a> &amp;&#160;</td>
2031 <td class="paramname"><em>subgraph</em>, </td>
2032 </tr>
2033 <tr>
2034 <td class="paramkey"></td>
2035 <td></td>
2036 <td class="paramtype"><a class="el" href="classarmnn_1_1_i_connectable_layer.html">IConnectableLayer</a> *&#160;</td>
2037 <td class="paramname"><em>substituteLayer</em>&#160;</td>
2038 </tr>
2039 <tr>
2040 <td></td>
2041 <td>)</td>
2042 <td></td><td></td>
2043 </tr>
2044 </table>
2045</div><div class="memdoc">
2046
2047<p>Substitutes the given sub-graph with either a new layer or a new sub-graph. </p>
2048<p>In either case, the given layer or all the layers in the given sub-graph must belong to this graph. </p>
2049
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01002050<p class="definition">Definition at line <a class="el" href="_graph_8cpp_source.html#l00475">475</a> of file <a class="el" href="_graph_8cpp_source.html">Graph.cpp</a>.</p>
2051<div class="fragment"><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;{</div>
2052<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <a class="code" href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>(substituteLayer, <span class="stringliteral">&quot;substituteLayer should not be null&quot;</span>);</div>
2053<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; </div>
2054<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="comment">// Create a new sub-graph with only the given layer, using</span></div>
2055<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="comment">// the given sub-graph as a reference of which parent graph to use</span></div>
2056<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <a class="code" href="classarmnn_1_1_graph.html#a0da841ca170a7634c24eb102b95daa2a">SubgraphView</a> substituteSubgraph(substituteLayer);</div>
2057<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; </div>
2058<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <a class="code" href="classarmnn_1_1_graph.html#aafbd4b469e47160017f409df8d077184">SubstituteSubgraph</a>(subgraph, substituteSubgraph);</div>
2059<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002060</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01002061<p class="reference">References <a class="el" href="_exceptions_8hpp_source.html#l00210">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002062
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01002063<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01320">armnn::ApplyBackendOptimizations()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002064
2065</div>
2066</div>
2067<a id="af497e16cf92179b5e55543741351b8bf"></a>
2068<h2 class="memtitle"><span class="permalink"><a href="#af497e16cf92179b5e55543741351b8bf">&#9670;&nbsp;</a></span>TopologicalSort() <span class="overload">[1/2]</span></h2>
2069
2070<div class="memitem">
2071<div class="memproto">
2072<table class="mlabels">
2073 <tr>
2074 <td class="mlabels-left">
2075 <table class="memname">
2076 <tr>
2077 <td class="memname">const <a class="el" href="classarmnn_1_1_graph.html">Graph</a> &amp; TopologicalSort </td>
2078 <td>(</td>
2079 <td class="paramname"></td><td>)</td>
2080 <td></td>
2081 </tr>
2082 </table>
2083 </td>
2084 <td class="mlabels-right">
2085<span class="mlabels"><span class="mlabel">inline</span></span> </td>
2086 </tr>
2087</table>
2088</div><div class="memdoc">
2089
2090<p>Sorts layers in topological order and return this. </p>
2091
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01002092<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00191">191</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
2093<div class="fragment"><div class="line"><a name="l00191"></a><span class="lineno"> 191</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>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002094</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01002095<p class="reference">References <a class="el" href="_graph_8hpp_source.html#l00191">Graph::TopologicalSort()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002096
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01002097<p class="reference">Referenced by <a class="el" href="_graph_utils_8cpp_source.html#l00068">CheckOrder()</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#l00486">Graph::SubstituteSubgraph()</a>, and <a class="el" href="_graph_8hpp_source.html#l00191">Graph::TopologicalSort()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002098
2099</div>
2100</div>
2101<a id="a3362b4d52feb9550c3d6738c2d284359"></a>
2102<h2 class="memtitle"><span class="permalink"><a href="#a3362b4d52feb9550c3d6738c2d284359">&#9670;&nbsp;</a></span>TopologicalSort() <span class="overload">[2/2]</span></h2>
2103
2104<div class="memitem">
2105<div class="memproto">
2106 <table class="memname">
2107 <tr>
2108 <td class="memname">const <a class="el" href="classarmnn_1_1_graph.html">Graph</a>&amp; TopologicalSort </td>
2109 <td>(</td>
2110 <td class="paramname"></td><td>)</td>
2111 <td> const</td>
2112 </tr>
2113 </table>
2114</div><div class="memdoc">
2115
2116</div>
2117</div>
2118<a id="a6cc2c46f05be1d3bf113d632aed1e496"></a>
2119<h2 class="memtitle"><span class="permalink"><a href="#a6cc2c46f05be1d3bf113d632aed1e496">&#9670;&nbsp;</a></span>VerifyConstantLayerSetTensorInfo()</h2>
2120
2121<div class="memitem">
2122<div class="memproto">
2123 <table class="memname">
2124 <tr>
2125 <td class="memname">void VerifyConstantLayerSetTensorInfo </td>
2126 <td>(</td>
2127 <td class="paramname"></td><td>)</td>
2128 <td> const</td>
2129 </tr>
2130 </table>
2131</div><div class="memdoc">
2132
2133<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>
2134<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>
2135<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>
2136<dl class="exception"><dt>Exceptions</dt><dd>
2137 <table class="exception">
2138 <tr><td class="paramname"><a class="el" href="classarmnn_1_1_layer_validation_exception.html">LayerValidationException</a></td><td></td></tr>
2139 </table>
2140 </dd>
2141</dl>
2142
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01002143<p class="definition">Definition at line <a class="el" href="_graph_8cpp_source.html#l00622">622</a> of file <a class="el" href="_graph_8cpp_source.html">Graph.cpp</a>.</p>
2144<div class="fragment"><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;{</div>
2145<div class="line"><a name="l00624"></a><span class="lineno"> 624</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>
2146<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; {</div>
2147<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keywordflow">if</span> (layer-&gt;GetType() == <a class="code" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">armnn::LayerType::Constant</a>)</div>
2148<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; {</div>
2149<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; output: layer-&gt;GetOutputSlots())</div>
2150<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; {</div>
2151<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="keywordflow">if</span> (!output.IsTensorInfoSet())</div>
2152<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; {</div>
2153<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; std::ostringstream message;</div>
2154<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; message &lt;&lt; <span class="stringliteral">&quot;Output slot TensorInfo not set on &quot;</span></div>
2155<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; &lt;&lt; <a class="code" href="namespacearmnn.html#addb6b14dd1b632263ffe77430259a7c4">GetLayerTypeAsCString</a>(layer-&gt;GetType())</div>
2156<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; &lt;&lt; <span class="stringliteral">&quot; layer \&quot;&quot;</span></div>
2157<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; &lt;&lt; layer-&gt;GetName()</div>
2158<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\&quot;&quot;</span>;</div>
2159<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">throw</span> LayerValidationException(message.str());</div>
2160<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; }</div>
2161<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; }</div>
2162<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; }</div>
2163<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; }</div>
2164<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160;}</div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002165</div><!-- fragment -->
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01002166<p class="reference">References <a class="el" href="namespacearmnn.html#a56943a0946e5f15e5e58054b8e7a04a4acb17869fe51048b5a5c4c6106551a255">armnn::Constant</a>, and <a class="el" href="_internal_types_8cpp_source.html#l00013">armnn::GetLayerTypeAsCString()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002167
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01002168<p class="reference">Referenced by <a class="el" href="_network_8cpp_source.html#l01906">armnn::Optimize()</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002169
2170</div>
2171</div>
2172<h2 class="groupheader">Friends And Related Function Documentation</h2>
2173<a id="a0da841ca170a7634c24eb102b95daa2a"></a>
2174<h2 class="memtitle"><span class="permalink"><a href="#a0da841ca170a7634c24eb102b95daa2a">&#9670;&nbsp;</a></span>SubgraphView</h2>
2175
2176<div class="memitem">
2177<div class="memproto">
2178<table class="mlabels">
2179 <tr>
2180 <td class="mlabels-left">
2181 <table class="memname">
2182 <tr>
2183 <td class="memname">friend class <a class="el" href="classarmnn_1_1_subgraph_view.html">SubgraphView</a></td>
2184 </tr>
2185 </table>
2186 </td>
2187 <td class="mlabels-right">
2188<span class="mlabels"><span class="mlabel">friend</span></span> </td>
2189 </tr>
2190</table>
2191</div><div class="memdoc">
2192
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01002193<p class="definition">Definition at line <a class="el" href="_graph_8hpp_source.html#l00307">307</a> of file <a class="el" href="_graph_8hpp_source.html">Graph.hpp</a>.</p>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002194
2195</div>
2196</div>
2197<hr/>The documentation for this class was generated from the following files:<ul>
2198<li>src/armnn/<a class="el" href="_graph_8hpp_source.html">Graph.hpp</a></li>
2199<li>src/armnn/<a class="el" href="_graph_8cpp_source.html">Graph.cpp</a></li>
2200</ul>
2201</div><!-- contents -->
2202</div><!-- doc-content -->
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002203<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>
2204<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>
2205<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>
2206<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>
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01002207<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#l00455">Graph.hpp:455</a></div></div>
2208<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#l00517">Graph.hpp:517</a></div></div>
2209<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#l00475">Graph.cpp:475</a></div></div>
2210<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#l00307">Graph.hpp:307</a></div></div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002211<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>
2212<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>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002213<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>
2214<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>
2215<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>
2216<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>
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01002217<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#l00176">Graph.hpp:176</a></div></div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002218<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>
2219<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>
2220<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>
2221<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>
2222<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>
2223<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>
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01002224<div class="ttc" id="aclassarmnn_1_1_exception_html"><div class="ttname"><a href="classarmnn_1_1_exception.html">armnn::Exception</a></div><div class="ttdoc">Base class for all ArmNN exceptions so that users can filter to just those.</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.html#l00046">Exceptions.hpp:46</a></div></div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002225<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>
2226<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>
2227<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>
2228<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>
2229<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>
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01002230<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#l00178">Graph.hpp:178</a></div></div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002231<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>
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01002232<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#l00191">Graph.hpp:191</a></div></div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002233<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>
2234<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>
2235<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>
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01002236<div class="ttc" id="aclassarmnn_1_1_null_pointer_exception_html"><div class="ttname"><a href="classarmnn_1_1_null_pointer_exception.html">armnn::NullPointerException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.html#l00146">Exceptions.hpp:146</a></div></div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002237<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>
2238<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>
2239<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>
Nikhil Raj1dc83fe2024-05-16 09:47:51 +01002240<div class="ttc" id="a_exceptions_8hpp_html_a5b0cd1f24b12298894d6367f186ea6dc"><div class="ttname"><a href="_exceptions_8hpp.html#a5b0cd1f24b12298894d6367f186ea6dc">ARMNN_THROW_INVALIDARG_MSG_IF_FALSE</a></div><div class="ttdeci">#define ARMNN_THROW_INVALIDARG_MSG_IF_FALSE(_cond, _str)</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.html#l00210">Exceptions.hpp:210</a></div></div>
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002241<!-- start footer part -->
2242<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
2243 <ul>
2244 <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 Raj1dc83fe2024-05-16 09:47:51 +01002245 <li class="footer">Generated on Thu May 16 2024 09:31:56 for Arm NN by
Nikhil Raj03c7ff32023-08-22 12:00:04 +01002246 <a href="http://www.doxygen.org/index.html">
2247 <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
2248 </ul>
2249</div>
2250</body>
2251</html>